Mwepụta nke LLVM 12.0 compiler suite

Mgbe ọnwa isii nke mmepe gasịrị, ewepụtara ntọhapụ nke ọrụ LLVM 12.0 - ngwa ọrụ GCC dakọtara (ndị na-achịkọta, ndị na-emepe emepe na ndị na-emepụta koodu) na-achịkọta mmemme n'ime bitcode etiti nke RISC-dị ka ntuziaka mebere (igwe mebere dị ala nke nwere obere igwe). usoro njikarịcha ọkwa dị iche iche). Enwere ike ịtụgharị pseudocode emepụtara site na iji mkpokọta JIT ka ọ bụrụ ntuziaka igwe ozugbo n'oge mmebe mmemme.

Mmelite na Clang 12.0:

  • Nkwado maka “eleghị anya” na “eleghị anya” njiri mara atụpụtara na ọkọlọtọ C ++ 20 etinyere ya ma mee ya site na ndabara, na-enye ohere ka agwa onye nrụpụta ihe gbasara ihe gbasara puru omume nke nrụpụta ọnọdụ ahụ (dịka ọmụmaatụ, “[[yiyi nwere ike). ]] ọ bụrụ (random> 0) {").
  • Nkwado agbakwunyere maka AMD Zen 3 (-march = znver3), Intel Alder Lake (-march = alderlake) na Intel Sapphire Rapids (-march = sapphirapids).
  • Nkwado agbakwunyere maka ọkọlọtọ "-march = x86-64-v[234]" iji họrọ ọkwa nhazi x86-64 (v2 - kpuchie SSE4.2, SSSE3, POPCNT na CMPXCHG16B ndọtị; v3 - AVX2 na MOVBE; v4 - AVX-512 ) .
  • Nkwado agbakwunyere maka Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) na Fujitsu A64FX (a64fx). Dịka ọmụmaatụ, iji mee ka nkwalite maka Neoverse-V1 CPUs, ị nwere ike ezipụta "-mcpu=neoverse-v1".
  • Maka ụlọ ọrụ AArch64, agbakwunyere ọkọlọtọ ndị nchịkọta ọhụrụ "-moutline-atomics" na "-mno-outline-atomics" iji mee ka ma ọ bụ gbanyụọ ọrụ enyemaka atọmịk, dị ka "__aarch64_cas8_relax". Ọrụ ndị dị otú ahụ na-achọpụta n'oge ọsọ ọsọ ma nkwado LSE (Large System Extensions) dị ma jiri ntuziaka nhazi atomic nyere ma ọ bụ daa azụ na iji LL/SC (Load-link/store-conditional) ntuziaka maka mmekọrịta.
  • agbakwunyere nhọrọ "-fbinutils-version" iji họrọ ụdị ebumnuche nke binutils suite maka ndakọrịta na onye njikọ ochie na omume mgbakọ.
  • Maka faịlụ ELF executable, mgbe akọwapụtara ọkọlọtọ "-gz", mkpakọ nke ozi debugging site na iji ọba akwụkwọ zlib na-enyere aka na ndabara (gz=zlib). Ijikọ faịlụ ihe na-arụpụta chọrọ ld ma ọ bụ GNU binutils 2.26+. Iji weghachi ndakọrịta na ụdị binutils ochie, ị nwere ike ịkọwa "-gz=zlib-gnu".
  • A na-ahazi ihe nrịbama nke a ugbu a site na iji ndenye nlele enweghị nkwụsị na enweghị ike (N). Iji wepụ àgwà enweghị isi mgbe ịchọrọ iji ụkpụrụ NULL, ị nwere ike iji nhọrọ "-fdelete-null-pointer-checks".
  • N'elu ikpo okwu Linux, a na-enyere ọnọdụ "-fasynchronous-unwind-tables" maka ụlọ AArch64 na PowerPC ịmepụta tebụl ịkpọ oku, dị ka na GCC.
  • Na "#pragma clang loop vectorize_width" gbakwunyere ikike ịkọwapụta nhọrọ "fixed" (ndabara) na "scalable" iji họrọ usoro vectorization. Ụdị ''scalable'', na-adabereghị na ogologo vector, bụ nnwale na enwere ike iji ya na ngwaike na-akwado vectorization scalable.
  • Nkwado emelitere maka ikpo okwu Windows: akwadola mgbakọ ọnụọgụ abụọ maka Windows na sistemụ Arm64, gụnyere Clang compiler, LLD linker na compiler-rt runtime ọba akwụkwọ. Mgbe ị na-ewu maka nyiwe ebumnuche MinGW, a na-agbakwunye suffix .exe, ọbụlagodi mgbe a na-achịkọta ya.
  • Ike agbakwunyere na nkwado maka OpenCL, OpenMP na CUDA agbasawanyela. Nhọrọ agbakwunyere "-cl-std=CL3.0" na "-cl-std=CL1.0" iji họrọ nhọrọ nnukwu maka OpenCL 3.0 na OpenCL 1.0. A gbasaala ngwaọrụ nyocha.
  • Nkwado agbakwunyere maka ntuziaka HRESET, UINTR, na AVXVNNI etinyere n'ime ụfọdụ nhazi dabere x86.
  • Na sistemụ x86, nkwado maka nhọrọ "-mtune=" agbanyere, na-eme ka njikarịcha microarchitectural ahọpụtara n'agbanyeghị uru "-march=".
  • Onye nyocha static emeela ka nhazi nke ụfọdụ ọrụ POSIX dịkwuo mma ma mee ka mkpebi siri ike nke nsonaazụ nke arụmọrụ ọnọdụ mgbe enwere ọtụtụ ụkpụrụ atụ na ntụnyere. Agbakwunyela ndenye ego ọhụrụ: fuchia.HandleChecker (na-akọwa njikwa aka n'ụdị), webkit.UncountedLambdaCapturesChecker webkit na alpha.webkit.UncountedLocalVarsChecker (na-eburu n'uche ihe dị iche iche nke ịrụ ọrụ na pointers na koodu engine WebKit).
  • N'okwu ndị e ji mee ihe n'ọnọdụ nke nkwụsịtụ, iji ọrụ arụnyere arụ ọrụ __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit__scan_reverse, bs_pd, bswap, bswap ,__ anabatara bswapq , _castf *, __rol* na __ror*.
  • Agbakwunyere nhọrọ BitFieldColonSpacing na akụrụngwa clang-format iji họrọ oghere gburugburu ihe nchọpụta, kọlụm, na nkọwa ubi.
  • Ihe nkesa caching clangd (Clang Server) dị na nyiwe Linux ebelatala oriri ebe nchekwa nke ukwuu n'oge ọrụ ogologo oge (a na-enye oku oge malloc_trim iji weghachi ibe ebe nchekwa efu na sistemụ arụmọrụ).

Ihe ohuru ohuru na LLVM 12.0:

  • Akwụsịla nkwado maka ihe nrụpụta lvm-build e dere na Python, kama nke ahụ, ọrụ ahụ agbanweela kpamkpam iji sistemụ nrụpụta CMake.
  • N'azụ azụ maka ihe owuwu AArch64, nkwado maka ikpo okwu Windows ka emeziwanye: ezi ọgbọ nke mmepụta mkpokọta maka sistemu Windows e lekwasịrị anya, emeziwanyela ọgbọ data na oku na-adịghị agwụ agwụ (a belatara nha data dị otú ahụ site na 60. %), agbakwunyela ikike imepụta data enweghị ikuku site na iji mgbakọ .seh_*.
  • Azụ azụ maka ihe owuwu PowerPC na-egosipụta njikarịcha ọhụrụ maka loops na ntinye inline, nkwado gbasaara maka ndị nrụpụta Power10, nkwado agbakwunyere maka ntuziaka MMA maka njikwa matrix, yana nkwado ka mma maka sistemụ arụmọrụ AIX.
  • The x86 backend na-agbakwụnye nkwado maka AMD Zen 3, Intel Alder Lake na Intel Sapphire Rapids processors, yana ntụziaka nhazi HRESET, UINTR na AVXVNNI. Nkwado maka MPX (Mgbakwunye Nchekwa Nchekwa) maka ịlele ntụle iji hụ na akwadoghị ókèala ebe nchekwa (teknụzụ a anaghị agbasa ebe niile ma wepụrụ ya na GCC na clang). Nkwado agbakwunyere na onye na-agbakọta maka {disp32} na {disp8} prefixes na .d32 na .d8 suffixes iji jikwaa nha operand offsets na jumps. Agbakwunyere njirimara ọhụrụ "tune-cpu" iji jikwaa nsonye nke njikarịcha microarchitectural.
  • Agbakwunyela ụdị ọhụrụ "-fsanitize=unsigned-shift-base" na nchọpụta nsogbu integer (integer sanitizer, "-fsanitize=integer") iji chọpụta njupụta nke integers na-edeghị ede ka ọ gafetụrụ aka ekpe.
  • N'ime ihe nchọpụta dị iche iche (asan, cfi, lsan, msan, tsan, ubsan sanitizer) agbakwunyela nkwado nkesa Linux na ọbá akwụkwọ Musl ọkọlọtọ.
  • A gbasaala ike nke njikọ LLD. Nkwado emelitere maka usoro ELF, gụnyere nhọrọ agbakwunyere "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-dum-mmemme -visibility" Nkwado MinGW emelitere. Maka usoro Mach-O (macOS), nkwado maka arm64, ogwe aka, na ihe owuwu i386, njikarịcha oge njikọ (LTO), na mkpochapụ maka njikwa iche ka etinyere ya.
  • Libc++ na-arụ ọrụ ọhụrụ nke ọkọlọtọ C++20 wee malite mmepe nke atụmatụ nke nkọwa C++ 2b. Nkwado agbakwunyere maka iwulite yana nkwado nbipụta mpaghara (“-DLIBCXX_ENABLE_LOCALIZATION= Gbanyụọ”) yana ngwaọrụ maka iwepụta ọnụọgụ pseudo-random (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

isi: opennet.ru

Tinye a comment