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

Ma hope o ʻeono mahina o ka hoʻomohala ʻana, ua hōʻike ʻia ka hoʻokuʻu ʻana o ka papahana LLVM 12.0 - kahi hāmeʻa GCC-compatible (compilers, optimizers and code generators) e hōʻuluʻulu i nā papahana i loko o ka bitcode intermediate o nā ʻōlelo kuhikuhi virtual e like me RISC (he mīkini virtual haʻahaʻa haʻahaʻa me kahi. multi-level optimization system). 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.

Hoʻomaikaʻi i ka Clang 12.0:

  • Ua hoʻokō ʻia ke kākoʻo no nā ʻano "likely" a me "unlikely" i manaʻo ʻia ma ka maʻamau C++20 ma ke ʻano paʻamau, e ʻae ana i ka mea hoʻoponopono e hoʻomaopopo ʻia e pili ana i ka hiki ke hoʻomaka ʻia ke kūkulu kūlana (no ka laʻana, "[[likelyly". ]] inā (kapili > 0) {“).
  • Hoʻohui i kākoʻo no AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) a me Intel Sapphire Rapids (-march=sapphirerapids).
  • Hoʻohui i ke kākoʻo no nā hae "-march=x86-64-v[234]" e koho i nā pae hoʻolālā x86-64 (v2 - uhi iā SSE4.2, SSSE3, POPCNT a me CMPXCHG16B hoʻonui; v3 - AVX2 a me MOVBE; v4 - AVX-512 ).
  • Hoʻohui kākoʻo no Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) a me Fujitsu A64FX (a64fx). No ka laʻana, hiki iā ʻoe ke kuhikuhi i ka "-mcpu = neoverse-v1".
  • No ka hoʻolālā AArch64, ua hoʻohui ʻia nā hae hōʻuluʻulu hou "-moutline-atomics" a me "-mno-outline-atomics" e hiki ai a hoʻopau paha i nā hana kōkua hana atomic, e like me "__aarch64_cas8_relax". ʻIke ia mau hana i ka wā holo inā loaʻa ke kākoʻo LSE (Large System Extensions) a hoʻohana i nā ʻōlelo aʻoaʻo kaʻina atomic i hāʻawi ʻia a i ʻole e hāʻule hou i ka hoʻohana ʻana i nā kuhikuhi LL/SC (Load-link/store-conditional) no ka hoʻonohonoho ʻana.
  • Hoʻohui ʻia ke koho "-fbinutils-version" e koho i ka mana i manaʻo ʻia o ka suite binutils no ka hoʻohālikelike ʻana me ka loulou kahiko a me ka ʻano hui.
  • No nā faila hiki ke hoʻokō ʻia ELF, i ka wā i hōʻike ʻia ai ka hae "-gz", hoʻohana ʻia ke kaomi ʻana i ka ʻike debugging e hoʻohana ana i ka waihona zlib (gz=zlib). Pono ka hoʻopili ʻana i nā faila mea i loaʻa iā lld a i ʻole GNU binutils 2.26+. No ka hoʻihoʻi ʻana i ka hoʻohālikelike me nā mana kahiko o binutils, hiki iā ʻoe ke kuhikuhi i "-gz=zlib-gnu".
  • Hoʻohana ʻia ka ʻōkuhi 'kēia' me nā loiloi nonnull a dereferenceable(N). No ka wehe ʻana i ke ʻano nonnull, inā pono ʻoe e hoʻohana i nā waiwai NULL, hiki iā ʻoe ke hoʻohana i ke koho "-fdelete-null-pointer-checks".
  • Ma ke kahua Linux, ua hiki ke 'ano "-fasynchronous-unwind-tables" no ka AArch64 a me PowerPC architectures e hana i na papa leo unwind, e like me GCC.
  • Ma ka "#pragma clang loop vectorize_width" i hoʻohui i ka hiki ke kuhikuhi i nā koho "paʻa" (paʻamau) a me "scalable" e koho i ke ʻano vectorization. ʻO ke ʻano "scalable", kūʻokoʻa i ka lōʻihi o ka vector, he hoʻokolohua a hiki ke hoʻohana ʻia ma nā lako e kākoʻo ana i ka vectorization hiki ke hoʻonui ʻia.
  • Hoʻomaikaʻi i ke kākoʻo no ka Windows platform: Ua hoʻomākaukau ʻia nā hui binary Official no Windows ma nā ʻōnaehana Arm64, me ka Clang compiler, LLD linker a me compiler-rt runtime libraries. I ke kūkulu ʻana no nā kahua hoʻokūkū MinGW, ua hoʻohui ʻia ka .exe suffix, ʻoiai i ka wā e hui pū ai.
  • Ua hoʻonui ʻia nā mana e pili ana me ke kākoʻo no OpenCL, OpenMP a me CUDA. Hoʻohui ʻia nā koho "-cl-std=CL3.0" a me "-cl-std=CL1.0" e koho i nā koho macro no OpenCL 3.0 a me OpenCL 1.0. Ua hoʻonui ʻia nā mea hana diagnostic.
  • Kākoʻo hoʻohui ʻia no nā ʻōlelo kuhikuhi HRESET, UITR, a me AVXVNNI i hoʻokō ʻia ma kekahi mau kaʻina hana x86.
  • Ma nā ʻōnaehana x86, hiki ke kākoʻo i ke koho "-mtune =" ", ka mea e ho'ā i ka microarchitectural optimizations i koho ʻia, me ka nānā ʻole i ka waiwai o "-march= "
  • Ua hoʻomaikaʻi ka static analyzer i ka hana ʻana o kekahi mau hana POSIX a hoʻomaikaʻi maikaʻi i ka hoʻoholo ʻana i ka hopena o nā hana conditional inā loaʻa nā waiwai hōʻailona i ka hoʻohālikelike. Ua hoʻohui ʻia nā hōʻoia hou: fuchia.HandleChecker (e wehewehe i nā lima i loko o nā hale), webkit.UncountedLambdaCapturesChecker webkit a me alpha.webkit.UncountedLocalVarsChecker (e noʻonoʻo i nā ʻano o ka hana ʻana me nā kuhikuhi ma ka code engine WebKit).
  • Ma nā ʻōlelo i hoʻohana ʻia i loko o ka pōʻaiapili o nā mea mau, hiki ke hoʻohana ʻia nā hana i kūkulu ʻia __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsd, wap, __bsd, __bsd, __bsd, wap __bswapq , _castf*, __rol* a me __ror*.
  • Hoʻohui ʻia kahi koho BitFieldColonSpacing i ka clang-format utility e koho i ka spacing a puni nā mea ʻike, kolamu, a me nā wehewehe kahua.
  • ʻO ka clangd caching server (Clang Server) ma ka Linux platform ua hoʻemi nui i ka hoʻohana ʻana i ka hoʻomanaʻo i ka wā lōʻihi o ka hana (ua hāʻawi ʻia nā kelepona manawa i malloc_trim e hoʻihoʻi i nā ʻaoʻao hoʻomanaʻo manuahi i ka ʻōnaehana hana).

Nā hana hou nui ma LLVM 12.0:

  • Ua hoʻopau ʻia ke kākoʻo no ka llvm-build build tool i kākau ʻia ma Python, a ma kahi o ka hoʻololi ʻana o ka papahana i ka hoʻohana ʻana i ka ʻōnaehana kūkulu CMake.
  • Ma ka hope no ka hoʻolālā AArch64, ua hoʻomaikaʻi ʻia ke kākoʻo no ka paepae Windows: ua hōʻoia ʻia ka hoʻokumu pololei ʻana o ka hoʻopuka hoʻohui no nā ʻōnaehana Windows i manaʻo ʻia, ua hoʻopaʻa ʻia ka hoʻokumu ʻana o nā ʻikepili ma nā kelepona hoʻomaha (ua hoʻemi ʻia ka nui o ia mau ʻikepili e 60 %), ua hoʻohui ʻia ka hiki ke hana i ka ʻikepili unwind me ka assembler .seh_*.
  • ʻO ka hope no ka hoʻolālā PowerPC e hōʻike ana i nā loiloi hou no nā puka lou a me ka hoʻokomo ʻana i ka laina, hoʻonui i ke kākoʻo no nā mea hana Power10, hoʻohui i ke kākoʻo no nā ʻōlelo aʻoaʻo MMA no ka hoʻololi ʻana i ka matrix, a me ka hoʻomaikaʻi ʻana i ke kākoʻo no ka ʻōnaehana hana AIX.
  • Hoʻohui ka x86 backend i ke kākoʻo no AMD Zen 3, Intel Alder Lake a me Intel Sapphire Rapids processors, a me HRESET, UITR a me AVXVNNI nā ʻōlelo kuhikuhi. Kākoʻo no MPX (Memory Protection Extensions) no ka nānā ʻana i nā kuhikuhi e hōʻoia ʻaʻole kākoʻo hou ʻia nā palena hoʻomanaʻo (ʻaʻole laha kēia ʻenehana a ua wehe ʻia mai GCC a clang). Hoʻohui i ke kākoʻo i ka mea hoʻohui no nā prefixes {disp32} a me {disp8} a me nā suffixes .d32 a me .d8 e hoʻomalu i ka nui o nā offset operand a me nā lele. Hoʻohui i kahi ʻano hou "tune-cpu" e kāohi i ka hoʻopili ʻana o nā microarchitectural optimizations.
  • Ua hoʻohui ʻia kahi ʻano hou "-fsanitize=unsigned-shift-base" i ka mea ʻike pilikia integer (integer sanitizer, "-fsanitize=integer") e ʻike i ka nui o nā helu helu ʻole ma hope o ka neʻe iki ʻana i ka hema.
  • Ma nā mea ʻike like ʻole (asan, cfi, lsan, msan, tsan, ubsan sanitizer) ua hoʻohui ʻia ke kākoʻo no ka hoʻohele Linux me ka waihona Musl maʻamau.
  • Ua hoʻonui ʻia nā mana o ka LLD linker. Hoʻonui i ke kākoʻo no ka format ELF, me nā koho i hoʻohui ʻia "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program -ʻike ʻike" " Hoʻonui i ke kākoʻo MinGW. No ka format Mach-O (macOS), ua hoʻokō ʻia ke kākoʻo no ka hoʻolālā arm64, lima, a me i386, link-time optimizations (LTO), a me ka hoʻopaʻa ʻana no ka hoʻoponopono ʻokoʻa.
  • Hoʻokomo ʻo Libc++ i nā hiʻohiʻona hou o ka maʻamau C++20 a ua hoʻomaka i ka hoʻomohala ʻana i nā hiʻohiʻona o ka kikoʻī C++2b. Kākoʻo hoʻohui ʻia no ke kūkulu ʻana me ka hoʻopau ʻana i ke kākoʻo localization (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) a me nā mea hana no ka hana ʻana i nā helu pseudo-random (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Source: opennet.ru

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