Hoʻokuʻu ʻia o ka LLVM 11.0 compiler suite

Ma hope o ʻeono mahina o ka hoʻomohala ʻana hōʻike ʻia hoʻokuʻu papahana LLVM 11.0 — ʻO nā mea hana like GCC (nā mea hoʻohui, optimizers a me nā code generators), ka hoʻopili ʻana i nā polokalamu i loko o ka bitcode waena o nā ʻōlelo aʻoaʻo virtual e like me RISC (mekini haʻahaʻa haʻahaʻa me kahi ʻōnaehana hoʻonohonoho multi-level). Hiki ke hoʻololi ʻia ka pseudocode i hana ʻia me ka hoʻohana ʻana i kahi compiler JIT i nā kuhikuhi mīkini pololei i ka manawa o ka hoʻokō ʻana o ka papahana.

ʻO ka hoʻololi nui i ka hoʻokuʻu hou ʻana ʻo ia ka hoʻokomo ʻana o ʻĀkau, mua no ka ʻōlelo Fortran. Kākoʻo ʻo Flang iā Fortran 2018, OpenMP 4.5 a me OpenACC 3.0, akā ʻaʻole i hoʻopau ʻia ka hoʻomohala ʻana o ka papahana a ua kaupalena ʻia ka ʻaoʻao mua i ka parsing code a me ka nānā ʻana i ka pololei. ʻAʻole kākoʻo ʻia ka hoʻokumu ʻana o ka code intermediate LLVM a no ka hoʻohua ʻana i nā faila hiki ke hoʻokō ʻia, hana ʻia ka code canonical a hāʻawi ʻia i kahi mea hoʻopili Fortran waho.

Nā hoʻomaikaʻi ma Clang 11.0:

  • Hoʻohui i ka hiki ke hoʻihoʻi i ka kumu kumu syntax abstract (AST) no ka C++ code haki, hiki ke hoʻohana ʻia e kōkua i ka ʻike ʻana i nā hewa a hāʻawi i ka ʻike hou aku i nā pono waho e like me clang-tidy a clangd. Hoʻohana ʻia ka hiʻohiʻona e ka paʻamau no ka code C++ a mālama ʻia ma o nā koho "-Xclang -f[no-]recovery-ast".
  • Hoʻohui ʻia nā ʻano diagnostic hou:
    • ʻO "-Wpointer-to-int-cast" he pūʻulu o nā ʻōlelo aʻo e pili ana i ka hoʻolei ʻana i nā kuhikuhi i kahi ʻano integer ʻano int ʻaʻole i hoʻokomo i nā waiwai āpau.
    • "-Wuninitialized-const-reference" - ʻōlelo aʻo e pili ana i ka hele ʻana i nā ʻano hoʻololi ʻole i hoʻomaka ʻia i nā ʻāpana hana e ʻae i nā manaʻo hoʻopaʻapaʻa me ke ʻano "const".
    • "-Wimplicit-const-int-float-conversion" - hoʻohana ʻia e ka ʻōlelo aʻo paʻamau e pili ana i ka hoʻololi implicit o kahi mau maoli i kahi ʻano integer.
  • No ka paepae ARM, hāʻawi ʻia nā hana C i kūkulu ʻia i loko o ka compiler (Intrinsics), pani ʻia e nā ʻōlelo kuhikuhi vector kūpono ʻo Arm v8.1-M MVE a me CDE. Ua wehewehe ʻia nā hana i loaʻa ma nā faila poʻomanaʻo arm_mve.h a me arm_cde.h.
  • Hoʻohui ʻia he pūʻulu o nā ʻano integer lōʻihi _ExtInt(N), hiki iā ʻoe ke hana i nā ʻano ʻaʻole he mau mana o ʻelua, hiki ke hana maikaʻi ʻia ma FPGA/HLS. Eia kekahi laʻana, _ExtInt(7) wehewehe i ka ʻano integer me 7 bits.
  • Hoʻohui ʻia nā macros e wehewehe i ke kākoʻo no nā hana C i kūkulu ʻia ma muli o nā ʻōlelo kuhikuhi ARM SVE (Scalable Vector Extension):
    __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. No ka laʻana, ua wehewehe ʻia ka macro __ARM_FEATURE_SVE i ka wā e hana ai i ka code AArch64 ma ka hoʻonohonoho ʻana i ke koho laina kauoha "-march=armv8-a+sve".

  • Ua ʻike ʻia ka hae "-O" me ke ʻano "-O1" ma kahi o "-O2".
  • Ua hoʻohui ʻia nā hae hōʻuluʻulu hou:
    • "-fstack-clash-protection" - hiki ke pale aku nā hui o ka ahu a me ka puʻu.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - hiki iā ʻoe ke koho i ke ʻano mea hoʻohana ʻokoʻa no nā helu lana.
    • "-ffp-model={precise,strict, fast}" - Hoʻomaʻamaʻa i ke komo ʻana i kahi pūʻulu o nā koho kūikawā no nā helu kiko lana.
    • "-fpch-codegen" a me "-fpch-debuginfo" e hana i kahi poʻomanaʻo mua (PCH) me nā faila mea ʻokoʻa no ka code a me ka debuginfo.
    • "-fsanitize-coverage-allowlist" a me "-fsanitize-coverage-blocklist" no ka nānā ʻana i ka hoʻāʻo ʻana i nā papa inoa keʻokeʻo a ʻeleʻele.
    • “-mtls-size={12,24,32,48}” e koho i ka nui TLS (thread-local storage).
    • "-menable-experimental-extension" e hiki ai i nā hoʻonui RISC-V hoʻokolohua.
  • ʻO ke ʻano paʻamau no C ʻo ia ka "-fno-common", e hiki ai ke komo pono i nā mea hoʻololi honua ma kekahi mau paepae.
  • Ua hoʻoneʻe ʻia ka cache module paʻamau mai /tmp i ka papa kuhikuhi ~/.cache. No ke kāpae ʻana, hiki iā ʻoe ke hoʻohana i ka hae "-fmodules-cache-path=".
  • Ua hōʻano hou ʻia ke kūlana ʻōlelo C paʻamau mai gnu11 a i gnu17.
  • Hoʻohui i ke kākoʻo mua no ka hoʻonui GNU C "asm inline»e hoʻohui i nā mea hoʻokomo hui. Ke nānā ʻia nei ka hoʻonui ʻana, akā ʻaʻole i hana ʻia ma kekahi ʻano.
  • Ua hoʻonui ʻia nā mana e pili ana me OpenCL a me CUDA. Hoʻohui i ke kākoʻo no OpenCL 2.0 block diagnostics a hoʻokō i nā hiʻohiʻona OpenMP 5.0 hou.
  • Hoʻohui ʻia ke koho IndentExternBlock i ka pono clang-format no ka hoʻonohonoho ʻana i loko o nā poloka "C" waho a me waho "C++".
  • Ua hoʻomaikaʻi ka static analyzer i ka lawelawe ʻana i nā mea kūkulu hoʻoilina ma C++. Hoʻohui ʻia nā māka hou alpha.core.C11Lock a me alpha.fuchsia.Lock e nānā i nā laka, alpha.security.cert.pos.34c e ʻike i ka hoʻohana pono ʻole ʻia o ka putenv, webkit.NoUncountedMemberChecker a me webkit.RefCntblBaseVirtualDtor e ʻike i nā pilikia me nā ʻano helu helu ʻole, alpha .cplusplus .SmartPtr e nānā no ka hōʻole ʻana i ka kuhikuhi kuhikuhi akamai.
  • Ma ka linter clang-tidy hoʻohui ʻia ka hapa nui o nā loiloi hou.
  • Ua hoʻomaikaʻi ka clangd caching server (Clang Server) i ka hana a hoʻohui i nā mana diagnostic hou.

ka papa kuhikuhiE nā mea hou LLVM 11.0:

  • Ua hoʻololi ʻia ka ʻōnaehana kūkulu i ka hoʻohana ʻana i ka Python 3. Inā ʻaʻole i loaʻa ka Python 3, hiki ke hoʻohuli hou i ka hoʻohana ʻana i ka Python 2.
  • Hoʻokuʻu ʻia ka ʻaoʻao mua me ka mea hoʻopili no ka ʻōlelo Go (llgo) mai ka hoʻokuʻu ʻana, hiki ke hoʻoponopono hou ʻia i ka wā e hiki mai ana.
  • Ua hoʻohui ʻia ka ʻano vector-function-abi-variant i ka hōʻike waena (IR) no ka wehewehe ʻana i ka palapala ʻāina ma waena o nā hana scalar a me ka vector e hoʻololi i nā kelepona. Mai llvm ::VectorType aia ʻelua ʻano vector kaʻawale llvm::FixedVectorType a me llvm::ScalableVectorType.
  • ʻO ka lālā e pili ana i nā waiwai udef a me ka hāʻawi ʻana i nā waiwai undef i nā hana waihona maʻamau e ʻike ʻia he ʻano ʻike ʻole. IN
    ʻAe ʻo memset/memcpy/memmove i ka hele ʻana i nā kuhikuhi undef, akā inā ʻaʻole ka palena me ka nui.

  • Ua hoʻohui ʻo LLJIT i ke kākoʻo no ka hana ʻana i nā hoʻomaka static ma o ka LLJIT:: hoʻomaka a me LLJIT:: deinitialize nā ʻano. Ua hoʻokō ʻia ka hiki ke hoʻohui i nā hale waihona puke i JITDylib me ka hoʻohana ʻana i ka papa StaticLibraryDefinitionGenerator. Hoʻohui C API no ORCv2 (API no ke kūkulu ʻana i nā mea hōʻuluʻulu JIT).
  • Ua hoʻohui ʻia ke kākoʻo no Cortex-A64, Cortex-A34, Cortex-A77 a me Cortex-X78 i ka hope no ka hoʻolālā AArch1. Hoʻokō ʻia ka ARMv8.2-BF16 (BFloat16) a me ARMv8.6-A hoʻonui, me ka RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) a me ARMv8.0-DGH (Hōʻiliʻili ʻikepili). Hāʻawi ʻia ka hiki ke hana i ke code no nā hana i kūkulu ʻia i loko o nā ʻōkuhi vector SVE.
  • Ua hoʻohui ʻia ke kākoʻo no Cortex-M55, Cortex-A77, Cortex-A78 a me Cortex-X1 i ka hope no ka hoʻolālā ARM. Hoʻokō ʻia nā hoʻonui
    Armv8.6-A Matrix Multiply a me RMv8.2-AA32BF16 BFloat16.

  • Ua hoʻohui ʻia ke kākoʻo no ka hoʻokumu ʻana i nā code no nā kaʻina POWER10 i ka hope no ka hoʻolālā PowerPC. Ua hoʻonui ʻia nā loop optimizations a ua hoʻomaikaʻi ʻia ke kākoʻo floating point.
  • ʻO ka hope no ka hoʻolālā RISC-V e ʻae i ka ʻae ʻana i nā pākuʻi e kākoʻo ana i nā hoʻonohonoho hoʻokolohua hoʻonui ʻia ʻaʻole i ʻae ʻia.
  • Ua hoʻoneʻe ʻia ka ʻaoʻao hope no ka hoʻolālā AVR mai ka māhele hoʻokolohua i ka paʻa, i hoʻokomo ʻia i ka puʻunaue kumu.
  • Kākoʻo ke kua hope no ka hoʻolālā x86 i nā ʻōlelo aʻoaʻo Intel AMX a me TSXLDTRK. Hoʻohui i ka pale i nā hoʻouka kaua LVI (Load Value Injection), a hoʻokō pū i kahi ʻano Speculative Execution Side Effect Suppression mechanical e ālai i nā hoʻouka ʻana ma muli o ka hoʻokō speculative o nā hana ma ka CPU.
  • Ma ka hope no ka hoʻolālā SystemZ, ua hoʻohui ʻia ke kākoʻo no MemorySanitizer a me LeakSanitizer.
  • Hoʻohui ʻia ke kākoʻo no ka faila poʻomanaʻo me nā helu makemakika i Libc++ .
  • Hoʻonui ʻia LLD linker hiki. Hoʻonui i ke kākoʻo no ka format ELF, me nā koho i hoʻohui ʻia "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- hoʻokahi-module", "-unique", "-rosegment", "-threads=N". Hoʻohui ʻia ke koho "--time-trace" e mālama i ka trace i kahi faila, a laila hiki ke nānā ʻia ma o ka chrome://tracing interface ma Chrome.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka