LLVM 11.0 සම්පාදක කට්ටලය නිකුත් කිරීම

සංවර්ධනය මාස හයකට පසු ඉදිරිපත් කරන ලදී ව්යාපෘති නිකුතුව LLVM 11.0 — GCC-අනුකූල මෙවලම් (සම්පාදක, ප්‍රශස්තිකරණ සහ කේත උත්පාදක), වැඩසටහන් RISC වැනි අතථ්‍ය උපදෙස් වල අතරමැදි බිට්කෝඩ් බවට සම්පාදනය කිරීම (බහු මට්ටමේ ප්‍රශස්තිකරණ පද්ධතියක් සහිත පහත් මට්ටමේ අථත්‍ය යන්ත්‍රය). උත්පාදනය කරන ලද ව්‍යාජ කේත JIT සම්පාදකයක් භාවිතයෙන් වැඩසටහන ක්‍රියාත්මක කරන අවස්ථාවේදී සෘජුවම යන්ත්‍ර උපදෙස් බවට පරිවර්තනය කළ හැක.

නව නිකුතුවේ ප්‍රධාන වෙනස වූයේ ඇතුළත් කිරීමයි පැති, Fortran භාෂාව සඳහා ඉදිරිපස. Flang Fortran 2018, OpenMP 4.5 සහ OpenACC 3.0 සඳහා සහය දක්වයි, නමුත් ව්‍යාපෘතියේ සංවර්ධනය තවමත් අවසන් කර නොමැති අතර ඉදිරිපස කෙළවර කේත විග්‍රහ කිරීමට සහ නිවැරදි දැයි පරීක්ෂා කිරීමට සීමා වේ. LLVM අතරමැදි කේත උත්පාදනයට තවමත් සහය නොදක්වන අතර ක්‍රියාත්මක කළ හැකි ගොනු උත්පාදනය කිරීම සඳහා, කැනොනිකල් කේතය ජනනය කර බාහිර Fortran සම්පාදකයක් වෙත යවනු ලැබේ.

වැඩිදියුණු කිරීම් ක්ලැන්ග් 11.0 හි:

  • වියුක්ත සින්ටැක්ස් ගස ප්‍රතිසාධනය කිරීමේ හැකියාව එක් කරන ලදී (AST) බිඳුණු C++ කේතය සඳහා, එය දෝෂ හඳුනා ගැනීමට උපකාර කිරීමට සහ clang-tidy සහ clangd වැනි බාහිර උපයෝගිතා සඳහා අමතර තොරතුරු සපයයි. විශේෂාංගය C++ කේතය සඳහා පෙරනිමියෙන් සක්‍රීය කර ඇති අතර "-Xclang -f[no-]recovery-ast" විකල්ප හරහා පාලනය වේ.
  • නව රෝග විනිශ්චය ක්‍රම එක් කරන ලදී:
    • “-Wpointer-to-int-cast” යනු හැකි සෑම අගයකටම ඉඩ නොදෙන පූර්ණ සංඛ්‍යා ආකාරයේ int වෙත පොයින්ටර් වාත්තු කිරීම පිළිබඳ අනතුරු ඇඟවීම් සමූහයකි.
    • “-Wuninitialized-const-reference” - “const” ගුණාංගය සමඟ විමර්ශන තර්ක පිළිගන්නා ශ්‍රිත පරාමිතිවල ආරම්භ නොකළ විචල්‍යයන් සම්මත කිරීම පිළිබඳ අනතුරු ඇඟවීම.
    • "-Wimplicit-const-int-float-conversion" - සැබෑ නියතයක් පූර්ණ සංඛ්‍යා වර්ගයකට ව්‍යංග පරිවර්තනය කිරීම පිළිබඳ පෙරනිමි අනතුරු ඇඟවීමෙන් සක්‍රීය කර ඇත.
  • ARM වේදිකාව සඳහා, සම්පාදකයට ගොඩනගා ඇති C ශ්‍රිත සපයනු ලැබේ (ආවේණික), කාර්යක්ෂම දෛශික උපදෙස් Arm v8.1-M MVE සහ CDE මගින් ප්‍රතිස්ථාපනය විය. පවතින කාර්යයන් arm_mve.h සහ arm_cde.h යන ශීර්ෂ ගොනු තුළ අර්ථ දක්වා ඇත.
  • එකතු කරන ලදී FPGA/HLS මත කාර්යක්ෂමව සැකසිය හැකි බලයන් දෙකක ගුණාකාර නොවන වර්ග සෑදීමට ඔබට ඉඩ සලසන විස්තීරණ පූර්ණ සංඛ්‍යා වර්ග _ExtInt(N). උදාහරණයක් ලෙස, _ExtInt(7) බිටු 7 කින් සමන්විත පූර්ණ සංඛ්‍යා වර්ගයක් නිර්වචනය කරයි.
  • ARM SVE (පරිමාණය කළ හැකි දෛශික දිගුව) උපදෙස් මත පදනම් වූ බිල්ට්-සී ශ්‍රිත සඳහා සහය නිර්වචනය කරන මැක්‍රෝ එකතු කරන ලදී:
    __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={නිශ්චිත, දැඩි, වේගවත්}" - පාවෙන ලක්ෂ්‍ය සංඛ්‍යා සඳහා විශේෂිත විකල්ප මාලාවකට ප්‍රවේශය සරල කරයි.
    • "-fpch-codegen" සහ "-fpch-debuginfo" කේතය සහ debuginfo සඳහා වෙන වෙනම වස්තු ගොනු සහිත පූර්ව සම්පාදිත ශීර්ෂයක් (PCH) උත්පාදනය කිරීමට.
    • "-fsanitize-coverage-allowlist" සහ "-fsanitize-coverage-blocklist" ආවරණ පරීක්ෂණ සුදු සහ කළු ලැයිස්තු පරීක්ෂා කිරීම සඳහා.
    • TLS (නූල්-දේශීය ආචයනය) ප්‍රමාණය තේරීමට “-mtls-size={12,24,32,48}”.
    • පර්යේෂණාත්මක RISC-V දිගු සබල කිරීමට "-menable-පරීක්ෂණාත්මක-දිගුව".
  • C සඳහා පෙරනිමි මාදිලිය "-fno-common" වේ, එමඟින් සමහර වේදිකාවල ගෝලීය විචල්‍යයන් වෙත වඩාත් කාර්යක්ෂම ප්‍රවේශයක් ලබා දේ.
  • පෙරනිමි මොඩියුල හැඹිලිය /tmp සිට ~/.cache බහලුම වෙත ගෙන ගොස් ඇත. අභිබවා යාමට, ඔබට “-fmodules-cache-path=” ධජය භාවිතා කළ හැක.
  • පෙරනිමි C භාෂා ප්‍රමිතිය gnu11 සිට gnu17 දක්වා යාවත්කාලීන කර ඇත.
  • GNU C දිගුව සඳහා මූලික සහය එක් කරන ලදී "asm inline»එකලස් ඇතුළත් කිරීම් එකතු කිරීමට. දිගුව තවමත් විශ්ලේෂණය කරමින් පවතී, නමුත් කිසිදු ආකාරයකින් සැකසෙන්නේ නැත.
  • OpenCL සහ CUDA සහය සමඟ සම්බන්ධිත හැකියාවන් පුළුල් කර ඇත. OpenCL 2.0 අවහිර රෝග විනිශ්චය සඳහා සහය එක් කරන ලද අතර නව OpenMP 5.0 විශේෂාංග ක්‍රියාත්මක කරන ලදී.
  • බාහිර "C" සහ බාහිර "C++" කුට්ටි තුළ පෙළගැස්වීම සඳහා clang-format උපයෝගීතාවයට IndentExternBlock විකල්පය එක් කරන ලදී.
  • ස්ථිතික විශ්ලේෂකය C++ හි උරුම වූ ඉදිකිරීම්කරුවන් හැසිරවීම වැඩිදියුණු කර ඇත. අගුලු පරීක්ෂා කිරීමට නව චෙක්පත් alpha.core.C11Lock සහ alpha.fuchsia.Lock, putenv, webkit.NoUncountedMemberChecker සහ webkit .cplusplus .SmartPtr null smart pointer dereference පරීක්ෂා කිරීමට.
  • linter clang-tidy දී එකතු කළා නව චෙක්පත් විශාල කොටසක්.
  • clangd caching server (Clang Server) කාර්ය සාධනය වැඩි දියුණු කර ඇති අතර නව රෝග විනිශ්චය හැකියාවන් එක් කර ඇත.

ප්රධාන නවෝත්පාදන LLVM 11.0:

  • ගොඩනැගීමේ පද්ධතිය Python 3 භාවිතා කිරීමට මාරු කර ඇත. Python 3 නොමැති නම්, එය Python 2 භාවිතා කිරීමට ආපසු හැරවිය හැක.
  • Go language (llgo) සඳහා සම්පාදකය සමඟ ඉදිරිපස කෙළවර නිකුතුවෙන් බැහැර කර ඇත, එය අනාගතයේදී ප්‍රතිව්‍යුහගත කළ හැක.
  • ඇමතුම් දෛශික කිරීමට අදිශ සහ දෛශික ශ්‍රිත අතර සිතියම්ගත කිරීම විස්තර කිරීමට දෛශික-ක්‍රියාකාරී-අබි-විචල්‍ය ගුණාංගය අතරමැදි නිරූපණයට (IR) එක් කර ඇත. llvm::VectorType සිට llvm::FixedVectorType සහ llvm::ScalableVectorType ලෙස වෙනම දෛශික වර්ග දෙකක් ඇත.
  • Udef අගයන් මත පදනම්ව ශාඛා කිරීම සහ සම්මත පුස්තකාල ශ්‍රිතවලට undef අගයන් යැවීම නිර්වචනය නොකළ හැසිරීමක් ලෙස හඳුනා ගැනේ. තුල
    memset/memcpy/memmove මඟින් undef පොයින්ටර් පසුකර යාමට ඉඩ සලසයි, නමුත් විශාලත්වය සහිත පරාමිතිය ශුන්‍ය නම්.

  • LLJIT විසින් LLJIT::initialize සහ LLJIT::deinitialize ක්‍රම හරහා ස්ථිතික ආරම්භ කිරීම් සිදු කිරීම සඳහා සහය එක් කර ඇත. StaticLibraryDefinitionGenerator පන්තිය භාවිතයෙන් JITDylib වෙත ස්ථිතික පුස්තකාල එක් කිරීමේ හැකියාව ක්‍රියාත්මක කර ඇත. සඳහා C API එකතු කරන ලදී ORCv2 (JIT සම්පාදක ගොඩනැගීම සඳහා API).
  • Cortex-A64, Cortex-A34, Cortex-A77 සහ Cortex-X78 ප්‍රොසෙසර සඳහා සහය AArch1 ගෘහ නිර්මාණ ශිල්පය සඳහා පසුබිමට එක් කර ඇත. ක්‍රියාත්මක කරන ලද ARMv8.2-BF16 (BFloat16) සහ ARMv8.6-A දිගු, RMv8.6-ECV (වැඩිදියුණු කරන ලද කවුන්ටර අථත්‍යකරණය), ARMv8.6-FGT (සිහින් ග්‍රේන්ඩ් උගුල්), ARMv8.6-AMU (ක්‍රියාකාරීත්වය) නිරීක්ෂණ ඇතුළුව සහ ARMv8.0-DGH (දත්ත රැස්කිරීමේ ඉඟිය). SVE දෛශික උපදෙස් වලට බිල්ට්-ඉන් කර්තව්‍ය-බන්ධන සඳහා කේතය ජනනය කිරීමේ හැකියාව සපයා ඇත.
  • Cortex-M55, Cortex-A77, Cortex-A78 සහ Cortex-X1 ප්‍රොසෙසර සඳහා සහය ARM ගෘහ නිර්මාණ ශිල්පය සඳහා පසුබිමට එක් කර ඇත. දිගු ක්රියාත්මක කර ඇත
    Armv8.6-A Matrix ගුණ කිරීම සහ RMv8.2-AA32BF16 BFloat16.

  • POWER10 ප්‍රොසෙසර සඳහා කේත උත්පාදනය සඳහා සහාය PowerPC ගෘහ නිර්මාණ ශිල්පය සඳහා පසුබිමට එක් කර ඇත. ලූප් ප්‍රශස්තිකරණය පුළුල් කර ඇති අතර පාවෙන ලක්ෂ්‍ය සහාය වැඩිදියුණු කර ඇත.
  • RISC-V ගෘහනිර්මාණ ශිල්පය සඳහා වන පසුතලය තවමත් නිල වශයෙන් අනුමත කර නොමැති පර්යේෂණාත්මක විස්තීරණ උපදෙස් කට්ටල සඳහා සහාය දක්වන පැච් පිළිගැනීමට ඉඩ සලසයි.
  • AVR ගෘහනිර්මාණ ශිල්පය සඳහා වූ පසුතලය මූලික ව්‍යාප්තියට ඇතුළත් පර්යේෂණාත්මක කාණ්ඩයෙන් ස්ථායී වෙත මාරු කර ඇත.
  • x86 ගෘහ නිර්මාණ ශිල්පය සඳහා පසුබිම Intel AMX සහ TSXLDTRK උපදෙස් සඳහා සහය දක්වයි. ප්රහාරයන්ට එරෙහිව ආරක්ෂාව එකතු කරන ලදී එල්වීඅයි (Load Value Injection), සහ CPU මත මෙහෙයුම් සමපේක්ෂන ලෙස ක්‍රියාත්මක කිරීම නිසා ඇති වන ප්‍රහාර අවහිර කිරීම සඳහා සාමාන්‍ය සමපේක්ෂන ක්‍රියාත්මක කිරීමේ අතුරු ප්‍රයෝග මර්දන යාන්ත්‍රණයක් ද ක්‍රියාත්මක කරයි.
  • SystemZ ගෘහ නිර්මාණ ශිල්පය සඳහා පසුබිමේ, MemorySanitizer සහ LeakSanitizer සඳහා සහය එක් කර ඇත.
  • Libc++ වෙත ගණිතමය නියතයන් සහිත ශීර්ෂ ගොනුව සඳහා සහය එක් කරන ලදී .
  • පුළුල් කර ඇත LLD සම්බන්ධක හැකියාවන්. එකතු කළ විකල්ප "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " ඇතුළුව ELF ආකෘතිය සඳහා වැඩිදියුණු කළ සහය -thinlto- single-module", "-unique", "-rosegment", "-threads=N". ලුහුබැඳීම ගොනුවකට සුරැකීමට "--time-trace" විකල්පය එක් කරන ලදී, එය පසුව Chrome හි chrome://tracing අතුරුමුහුණත හරහා විශ්ලේෂණය කළ හැක.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න