LLVM 11.0 கம்பைலர் தொகுப்பின் வெளியீடு

ஆறு மாத வளர்ச்சிக்குப் பிறகு வழங்கப்பட்டது திட்ட வெளியீடு LLVM 11.0 — GCC-இணக்கமான கருவிகள் (தொகுப்பாளர்கள், மேம்படுத்திகள் மற்றும் குறியீடு ஜெனரேட்டர்கள்), நிரல்களை RISC போன்ற மெய்நிகர் வழிமுறைகளின் இடைநிலை பிட்கோடில் தொகுத்தல் (பல-நிலை தேர்வுமுறை அமைப்புடன் குறைந்த-நிலை மெய்நிகர் இயந்திரம்). உருவாக்கப்பட்ட சூடோகோட் ஒரு JIT கம்பைலரைப் பயன்படுத்தி நிரல் செயல்படுத்தும் நேரத்தில் நேரடியாக இயந்திர வழிமுறைகளாக மாற்றப்படலாம்.

புதிய வெளியீட்டில் முக்கிய மாற்றம் சேர்க்கப்பட்டது பக்கவாட்டு, ஃபோர்ட்ரான் மொழிக்கான முன்பக்கம். Flang Fortran 2018, OpenMP 4.5 மற்றும் OpenACC 3.0 ஐ ஆதரிக்கிறது, ஆனால் திட்டத்தின் மேம்பாடு இன்னும் நிறைவடையவில்லை, மேலும் முன் முனை குறியீடு பாகுபடுத்துதல் மற்றும் சரியானதா எனச் சரிபார்ப்பதற்கு மட்டுமே. LLVM இடைநிலைக் குறியீட்டின் உருவாக்கம் இன்னும் ஆதரிக்கப்படவில்லை மற்றும் இயங்கக்கூடிய கோப்புகளை உருவாக்க, நியமனக் குறியீடு உருவாக்கப்பட்டு வெளிப்புற Fortran கம்பைலருக்கு அனுப்பப்படுகிறது.

மேம்பாடுகள் கணகண வென்ற சப்தம் 11.0 இல்:

  • சுருக்க தொடரியல் மரத்தை மீட்டெடுக்கும் திறனைச் சேர்த்தது (டந்த) உடைந்த C++ குறியீட்டிற்கு, இது பிழைகளைக் கண்டறிய உதவும் மற்றும் clang-tidy மற்றும் clangd போன்ற வெளிப்புற பயன்பாடுகளுக்கு கூடுதல் தகவலை வழங்குகிறது. இந்த அம்சம் C++ குறியீட்டிற்கு இயல்பாகவே இயக்கப்பட்டது மற்றும் "-Xclang -f[no-]recovery-ast" விருப்பங்கள் மூலம் கட்டுப்படுத்தப்படுகிறது.
  • புதிய கண்டறியும் முறைகள் சேர்க்கப்பட்டன:
    • "-Wpointer-to-int-cast" என்பது அனைத்து சாத்தியமான மதிப்புகளுக்கும் இடமளிக்காத முழு எண் வகை எண்ணுக்கு சுட்டிகளை அனுப்புவது பற்றிய எச்சரிக்கைகளின் குழுவாகும்.
    • “-Wuninitialized-const-reference” - “const” பண்புடன் குறிப்பு வாதங்களை ஏற்றுக்கொள்ளும் செயல்பாட்டு அளவுருக்களில் தொடங்கப்படாத மாறிகளை அனுப்புவது பற்றிய எச்சரிக்கை.
    • "-Wimplicit-const-int-float-conversion" - ஒரு முழு எண் வகைக்கு உண்மையான மாறிலியை மறைமுகமாக மாற்றுவது பற்றிய முன்னிருப்பு எச்சரிக்கை மூலம் இயக்கப்பட்டது.
  • ARM இயங்குதளத்திற்கு, கம்பைலரில் கட்டமைக்கப்பட்ட C செயல்பாடுகள் வழங்கப்படுகின்றன (உள்ளார்ந்தவை), திறமையான திசையன் வழிமுறைகளால் ஆர்ம் v8.1-M MVE மற்றும் CDE ஆகியவற்றால் மாற்றப்பட்டது. கிடைக்கக்கூடிய செயல்பாடுகள் arm_mve.h மற்றும் arm_cde.h ஆகிய தலைப்புக் கோப்புகளில் வரையறுக்கப்பட்டுள்ளன.
  • சேர்க்கப்பட்டது நீட்டிக்கப்பட்ட முழு எண் வகைகளின் தொகுப்பு _ExtInt(N), FPGA/HLS இல் திறம்பட செயலாக்கக்கூடிய இரண்டு சக்திகளின் மடங்குகள் இல்லாத வகைகளை உருவாக்க உங்களை அனுமதிக்கிறது. உதாரணமாக, _ExtInt(7) ஆனது 7 பிட்களைக் கொண்ட ஒரு முழு எண் வகையை வரையறுக்கிறது.
  • ARM SVE (அளவிடக்கூடிய வெக்டர் நீட்டிப்பு) வழிமுறைகளின் அடிப்படையில் உள்ளமைக்கப்பட்ட C செயல்பாடுகளுக்கான ஆதரவை வரையறுக்கும் மேக்ரோக்கள் சேர்க்கப்பட்டன:
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. எடுத்துக்காட்டாக, "-march=armv64-a+sve" என்ற கட்டளை வரி விருப்பத்தை அமைப்பதன் மூலம் AArch8 குறியீட்டை உருவாக்கும் போது __ARM_FEATURE_SVE மேக்ரோ வரையறுக்கப்படுகிறது.

  • "-O" கொடி இப்போது "-O1" க்கு பதிலாக "-O2" தேர்வுமுறை முறையில் அடையாளம் காணப்பட்டுள்ளது.
  • புதிய கம்பைலர் கொடிகள் சேர்க்கப்பட்டன:
    • "-fstack-clash-protection" - எதிராக பாதுகாப்பை செயல்படுத்துகிறது அடுக்கு மற்றும் குவியலின் குறுக்குவெட்டுகள்.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - மிதக்கும் புள்ளி எண்களுக்கான விதிவிலக்கு கையாளுதல் பயன்முறையைத் தேர்ந்தெடுக்க உங்களை அனுமதிக்கிறது.
    • "-ffp-model={precise,strict,fast}" - மிதக்கும் புள்ளி எண்களுக்கான சிறப்பு விருப்பங்களின் தொடர் அணுகலை எளிதாக்குகிறது.
    • "-fpch-codegen" மற்றும் "-fpch-debuginfo" குறியீடு மற்றும் debuginfo க்கு தனித்தனி பொருள் கோப்புகளுடன் முன்தொகுக்கப்பட்ட தலைப்பு (PCH) உருவாக்க.
    • "-fsanitize-coverage-allowlist" மற்றும் "-fsanitize-coverage-blocklist" கவரேஜ் சோதனை வெள்ளை மற்றும் கருப்பு பட்டியல்களை சரிபார்க்க.
    • TLS (த்ரெட்-லோக்கல் ஸ்டோரேஜ்) அளவைத் தேர்ந்தெடுக்க “-mtls-size={12,24,32,48}”.
    • சோதனை RISC-V நீட்டிப்புகளை இயக்க "-menable-experimental-extension".
  • C க்கான இயல்புநிலை பயன்முறையானது "-fno-common" ஆகும், இது சில தளங்களில் உலகளாவிய மாறிகளுக்கு மிகவும் திறமையான அணுகலை அனுமதிக்கிறது.
  • இயல்புநிலை தொகுதி தற்காலிக சேமிப்பு /tmp இலிருந்து ~/.cache கோப்பகத்திற்கு நகர்த்தப்பட்டது. மேலெழுத, நீங்கள் “-fmodules-cache-path=” கொடியைப் பயன்படுத்தலாம்.
  • இயல்புநிலை C மொழி தரநிலை gnu11 இலிருந்து gnu17 க்கு புதுப்பிக்கப்பட்டது.
  • குனு சி நீட்டிப்புக்கான ஆரம்ப ஆதரவு சேர்க்கப்பட்டது "asm இன்லைன்» அசெம்பிளர் செருகிகளைச் சேர்க்க. நீட்டிப்பு இன்னும் பகுப்பாய்வு செய்யப்படுகிறது, ஆனால் எந்த வகையிலும் செயலாக்கப்படவில்லை.
  • OpenCL மற்றும் CUDA ஆதரவுடன் தொடர்புடைய திறன்கள் விரிவாக்கப்பட்டுள்ளன. OpenCL 2.0 பிளாக் கண்டறியும் ஆதரவு சேர்க்கப்பட்டது மற்றும் புதிய OpenMP 5.0 அம்சங்களை செயல்படுத்தியது.
  • வெளிப்புற "C" மற்றும் எக்ஸ்டர்ன் "C++" தொகுதிகளுக்குள் சீரமைக்க, clang-format பயன்பாட்டிற்கு IndentExternBlock விருப்பம் சேர்க்கப்பட்டது.
  • நிலையான பகுப்பாய்வி C++ இல் மரபுவழி கட்டமைப்பாளர்களின் கையாளுதலை மேம்படுத்தியுள்ளது. பூட்டுகளைச் சரிபார்க்க புதிய காசோலைகள் alpha.core.C11Lock மற்றும் alpha.fuchsia.Lock சேர்க்கப்பட்டன .cplusplus .SmartPtr பூஜ்ய ஸ்மார்ட் பாயிண்டர் dereference ஐ சரிபார்க்க.
  • லிண்டர் கணகண வென்ற சப்தம் நேர்த்தியாக சேர்க்கப்பட்டது புதிய காசோலைகளின் பெரும் பகுதி.
  • clangd கேச்சிங் சர்வர் (Clang Server) செயல்திறனை மேம்படுத்தி புதிய கண்டறியும் திறன்களை சேர்த்துள்ளது.

முக்கிய புதுமைகள் LLVM 11.0:

  • பைதான் 3 ஐப் பயன்படுத்துவதற்கு உருவாக்க அமைப்பு மாற்றப்பட்டது. பைதான் 3 கிடைக்கவில்லை என்றால், பைதான் 2 ஐப் பயன்படுத்துவதற்குத் திரும்பலாம்.
  • கோ மொழிக்கான (llgo) கம்பைலருடன் முன் முனை வெளியீட்டில் இருந்து விலக்கப்பட்டுள்ளது, இது எதிர்காலத்தில் மறுகட்டமைக்கப்படலாம்.
  • வெக்டார்-ஃபங்க்ஷன்-அபி-வேரியண்ட் பண்புக்கூறு இடைநிலை பிரதிநிதித்துவத்தில் (ஐஆர்) சேர்க்கப்பட்டது, இது அழைப்புகளை வெக்டரைஸ் செய்ய ஸ்கேலர் மற்றும் வெக்டார் செயல்பாடுகளுக்கு இடையே உள்ள மேப்பிங்கை விவரிக்கிறது. llvm::VectorType இலிருந்து llvm:: FixedVectorType மற்றும் llvm:: ScalableVectorType என இரண்டு தனித்தனி திசையன் வகைகள் உள்ளன.
  • udef மதிப்புகளின் அடிப்படையில் கிளையிடுதல் மற்றும் நிலையான நூலக செயல்பாடுகளுக்கு undef மதிப்புகளை அனுப்புதல் ஆகியவை வரையறுக்கப்படாத நடத்தையாக அங்கீகரிக்கப்படுகின்றன. IN
    memset/memcpy/memmove undef சுட்டிகளை அனுப்ப அனுமதிக்கிறது, ஆனால் அளவு கொண்ட அளவுரு பூஜ்ஜியமாக இருந்தால்.

  • LLJIT ஆனது LLJIT::initialize மற்றும் LLJIT::deinitialize முறைகள் மூலம் நிலையான துவக்கங்களைச் செய்வதற்கான ஆதரவைச் சேர்த்துள்ளது. StaticLibraryDefinitionGenerator வகுப்பைப் பயன்படுத்தி நிலையான நூலகங்களை JITDylib இல் சேர்க்கும் திறன் செயல்படுத்தப்பட்டுள்ளது. இதற்கு C API சேர்க்கப்பட்டது ORCv2 (JIT கம்பைலர்களை உருவாக்குவதற்கான ஏபிஐ).
  • கார்டெக்ஸ்-ஏ64, கார்டெக்ஸ்-ஏ34, கார்டெக்ஸ்-ஏ77 மற்றும் கார்டெக்ஸ்-எக்ஸ்78 செயலிகளுக்கான ஆதரவு AArch1 கட்டமைப்பிற்கான பின்தளத்தில் சேர்க்கப்பட்டுள்ளது. செயல்படுத்தப்பட்ட ARMv8.2-BF16 (BFloat16) மற்றும் ARMv8.6-A நீட்டிப்புகள், RMv8.6-ECV (மேம்படுத்தப்பட்ட எதிர் மெய்நிகராக்கம்), ARMv8.6-FGT (ஃபைன் கிரேன்ட் ட்ராப்ஸ்), ARMv8.6-AMU (விர்ச்சுவலைசேஷன்) உள்ளிட்டவை மற்றும் ARMv8.0-DGH (தரவு சேகரிப்பு குறிப்பு). SVE திசையன் வழிமுறைகளுக்கு உள்ளமைக்கப்பட்ட செயல்பாடுகள்-பைண்டிங்களுக்கான குறியீட்டை உருவாக்கும் திறன் வழங்கப்படுகிறது.
  • கார்டெக்ஸ்-எம்55, கார்டெக்ஸ்-ஏ77, கார்டெக்ஸ்-ஏ78 மற்றும் கார்டெக்ஸ்-எக்ஸ்1 செயலிகளுக்கான ஆதரவு ARM கட்டமைப்பிற்கான பின்தளத்தில் சேர்க்கப்பட்டுள்ளது. நீட்டிப்புகள் செயல்படுத்தப்பட்டன
    Armv8.6-A மேட்ரிக்ஸ் பெருக்கல் மற்றும் RMv8.2-AA32BF16 BFloat16.

  • POWER10 செயலிகளுக்கான குறியீடு உருவாக்கத்திற்கான ஆதரவு PowerPC கட்டமைப்பிற்கான பின்தளத்தில் சேர்க்கப்பட்டுள்ளது. லூப் மேம்படுத்தல்கள் விரிவாக்கப்பட்டு மிதக்கும் புள்ளி ஆதரவு மேம்படுத்தப்பட்டுள்ளது.
  • RISC-V கட்டமைப்பிற்கான பின்தளமானது, இன்னும் அதிகாரப்பூர்வமாக அங்கீகரிக்கப்படாத சோதனை நீட்டிக்கப்பட்ட அறிவுறுத்தல் தொகுப்புகளை ஆதரிக்கும் இணைப்புகளை ஏற்றுக்கொள்ள அனுமதிக்கிறது.
  • AVR கட்டமைப்பிற்கான பின்தளமானது சோதனை வகையிலிருந்து நிலையான நிலைக்கு மாற்றப்பட்டது, அடிப்படை விநியோகத்தில் சேர்க்கப்பட்டுள்ளது.
  • x86 கட்டமைப்பிற்கான பின்தளமானது Intel AMX மற்றும் TSXLDTRK வழிமுறைகளை ஆதரிக்கிறது. தாக்குதல்களுக்கு எதிராக பாதுகாப்பு சேர்க்கப்பட்டது LVI (லோட் வேல்யூ இன்ஜெக்ஷன்), மற்றும் CPU இல் ஊக செயல்பாட்டின் மூலம் ஏற்படும் தாக்குதல்களைத் தடுக்க ஒரு பொதுவான ஊக செயல்பாட்டின் பக்க விளைவுகளை அடக்கும் பொறிமுறையையும் செயல்படுத்துகிறது.
  • SystemZ கட்டமைப்பிற்கான பின்தளத்தில், MemorySanitizer மற்றும் LeakSanitizer க்கான ஆதரவு சேர்க்கப்பட்டுள்ளது.
  • Libc++ க்கு கணித மாறிலிகளுடன் கூடிய தலைப்புக் கோப்புக்கான ஆதரவு சேர்க்கப்பட்டது .
  • விரிவாக்கப்பட்டது எல்எல்டி இணைப்பான் திறன்கள். "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " போன்ற கூடுதல் விருப்பங்கள் உட்பட ELF வடிவமைப்பிற்கான மேம்படுத்தப்பட்ட ஆதரவு -thinlto- single-module", "-unique", "-rosegment", "-threads=N". ஒரு கோப்பில் ட்ரேஸைச் சேமிக்க "--டைம்-ட்ரேஸ்" விருப்பம் சேர்க்கப்பட்டது, பின்னர் அதை Chrome இல் chrome://tracing இடைமுகம் வழியாக பகுப்பாய்வு செய்யலாம்.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்