Kutulutsidwa kwa LLVM 12.0 compiler suite

Pambuyo pa miyezi isanu ndi umodzi ya chitukuko, kutulutsidwa kwa pulojekiti ya LLVM 12.0 kunaperekedwa - chida chogwirizana ndi GCC (compilers, optimizers ndi code generator) chomwe chimasonkhanitsa mapulogalamu mu bitcode yapakatikati ya RISC-monga malangizo enieni (makina otsika omwe ali ndi Multilevel optimization system). Pseudocode yopangidwa ikhoza kusinthidwa pogwiritsa ntchito JIT compiler kukhala malangizo amakina mwachindunji panthawi yokonza pulogalamu.

Kusintha kwa Clang 12.0:

  • Thandizo la "zothekera" ndi "zosatheka" zomwe zaperekedwa mulingo wa C ++20 zakhazikitsidwa ndikuthandizidwa mwachisawawa, kulola kuti wowonjezerayo adziwike za kuthekera kwakuti kumangidwa koyenera kuyambika (mwachitsanzo, β€œ[[mwina] ]] ngati (mwachisawawa> 0) {β€œ).
  • Thandizo lowonjezera la AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) ndi Intel Sapphire Rapids (-march=sapphirerapids).
  • Thandizo lowonjezera la "-march=x86-64-v[234]" mbendera kuti musankhe milingo ya x86-64 (v2 - imakwirira SSE4.2, SSSE3, POPCNT ndi CMPXCHG16B zowonjezera; v3 - AVX2 ndi MOVBE; v4 - AVX-512 ).
  • Zowonjezera zothandizira Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) ndi Fujitsu A64FX (a64fx) purosesa. Mwachitsanzo, kuti muthe kukhathamiritsa kwa Neoverse-V1 CPUs, mutha kutchula "-mcpu=neoverse-v1".
  • Pazomangamanga za AArch64, mbendera zatsopano zophatikizira "-moutline-atomics" ndi "-mno-outline-atomics" aonjezedwa kuti athe kuyatsa kapena kuletsa ntchito zothandizira ma atomiki, monga "__aarch64_cas8_relax". Ntchito zoterezi zimazindikira panthawi yothamanga ngati chithandizo cha LSE (Large System Extensions) chilipo ndikugwiritsa ntchito malangizo operekedwa a atomiki kapena kubwereranso kugwiritsa ntchito malangizo a LL/SC (Load-link/store-conditional) kuti mulunzanitsidwe.
  • Onjezani "-fbinutils-version" njira kuti musankhe mtundu womwe mukufuna wa binutils suite kuti igwirizane ndi olumikizira akale ndi machitidwe ophatikizira.
  • Pamafayilo a ELF, pomwe mbendera ya "-gz" yatchulidwa, kukanikiza kwa chidziwitso chowongolera pogwiritsa ntchito laibulale ya zlib kumathandizidwa mwachisawawa (gz=zlib). Kulumikiza mafayilo omwe amachokera kumafuna lld kapena GNU binutils 2.26+. Kuti mubwezeretse kuyanjana ndi mitundu yakale ya binutils, mutha kufotokoza "-gz=zlib-gnu".
  • Cholozera cha 'ichi' tsopano chakonzedwa ndi macheke a nonnull ndi dereferenceable(N). Kuti muchotse mawonekedwe osafunikira mukafuna kugwiritsa ntchito NULL, mutha kugwiritsa ntchito njira ya "-fdelete-null-pointer-checks".
  • Pa nsanja ya Linux, mawonekedwe a "-fasynchronous-unwind-tables" amathandizidwa kuti zomangamanga za AArch64 ndi PowerPC zipange matebulo oyitanitsa, monga ku GCC.
  • Mu "#pragma clang loop vectorize_width" adawonjezera kuthekera kofotokozera zosankha "zokhazikika" (zosasinthika) ndi "zowonongeka" kuti musankhe njira yosinthira. Njira ya "scalable", yosadalira kutalika kwa vector, ndiyoyesera ndipo ingagwiritsidwe ntchito pa hardware yomwe imathandizira scalable vectorization.
  • Thandizo lothandizira pa nsanja ya Windows: Misonkhano yovomerezeka ya binary ya Windows pa machitidwe a Arm64 yakonzedwa, kuphatikizapo Clang compiler, LLD linker ndi compiler-rt runtime library. Mukamanga nsanja za MinGW, suffix ya .exe imawonjezedwa, ngakhale pakuphatikiza.
  • Maluso okhudzana ndi chithandizo cha OpenCL, OpenMP ndi CUDA awonjezedwa. Zosankha zowonjezera "-cl-std=CL3.0" ndi "-cl-std=CL1.0" kuti musankhe zosankha zazikulu za OpenCL 3.0 ndi OpenCL 1.0. Zida zowunikira zakulitsidwa.
  • Thandizo lowonjezera la malangizo a HRESET, UINTR, ndi AVXVNNI omwe akhazikitsidwa m'mapurosesa ena a x86.
  • Pa machitidwe a x86, chithandizo cha "-mtune=" njira chimayatsidwa ", yomwe imayendetsa kukhathamiritsa kwapang'onopang'ono kosankhidwa, mosasamala kanthu za mtengo wa "-march= "
  • The static analyzer yasintha kusintha kwa ntchito zina za POSIX ndikuwongolera kwambiri kutsimikizika kwa zotsatira za machitidwe okhazikika pakakhala zophiphiritsa zingapo poyerekeza. Macheke atsopano awonjezedwa: fuchia.HandleChecker (amatanthawuza zogwirira muzinthu), webkit.UncountedLambdaCapturesChecker webkit ndi alpha.webkit.UncountedLocalVarsChecker (imaganizira zapadera zogwirira ntchito ndi zolozera mu code ya injini ya WebKit).
  • M'mawu ogwiritsiridwa ntchito m'lingaliro la zosinthika, kugwiritsa ntchito zida zomangidwira __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, _bit_bit_scan_bsr_wapverse, _bsr_wap_wap d, __bswap64, ndizololedwa. __bswapq , _castf*, __rol* ndi __ror*.
  • Onjezani njira ya BitFieldColonSpacing ku chida cha clang-format kuti musankhe mipata yozungulira zozindikiritsa, mizati, ndi matanthauzidwe amunda.
  • Seva ya clangd caching (Clang Server) pa nsanja ya Linux yachepetsa kwambiri kukumbukira kukumbukira pakapita nthawi yayitali (ma foni nthawi ndi nthawi ku malloc_trim amaperekedwa kuti abwezeretse masamba aulere pamakina opangira).

Zatsopano zazikulu mu LLVM 12.0:

  • Thandizo la llvm-build build chida cholembedwa mu Python chathetsedwa, ndipo m'malo mwake ntchitoyi yasinthiratu kugwiritsa ntchito CMake build system.
  • Kumbuyo kwa kamangidwe ka AArch64, kuthandizira pa nsanja ya Windows kwasinthidwa: kutulutsa koyenera kwa ophatikiza pazolinga za Windows kwatsimikiziridwa, kutulutsidwa kwa deta pama foni omasuka kwakonzedwa (kukula kwa deta yotereyi kwachepetsedwa ndi 60. %), kuthekera kopanga kumasula deta pogwiritsa ntchito assembler awonjezedwa malangizo .seh_*.
  • Kumbuyo kwa kamangidwe ka PowerPC kumakhala ndi kukhathamiritsa kwatsopano kwa malupu ndi kuyika kwa inline, kuthandizira kokulirapo kwa ma processor a Power10, kuthandizira kowonjezera kwa malangizo a MMA pakuwongolera matrix, komanso chithandizo chothandizira pamayendedwe a AIX.
  • X86 backend imawonjezera chithandizo cha AMD Zen 3, Intel Alder Lake ndi Intel Sapphire Rapids processors, komanso malangizo a purosesa a HRESET, UINTR ndi AVXVNNI. Thandizo la MPX (Memory Protection Extensions) poyang'ana zolozera kuti zitsimikizire kuti malire a kukumbukira sakuthandizidwanso (ukadaulo uwu sunafalikire ndipo wachotsedwa kale ku GCC ndi clang). Thandizo lowonjezera kwa assembler la {disp32} ndi {disp8} prefixes ndi .d32 ndi .d8 suffixes kulamulira kukula kwa operand offsets ndi kudumpha. Yawonjezeranso "tune-cpu" kuti muwongolere kukhathamiritsa kwapang'onopang'ono.
  • Njira yatsopano "-fsanitize=unsigned-shift-base" yawonjezedwa ku chowunikira chazovuta (integer sanitizer, "-fsanitize=integer") kuti azindikire kusefukira kwa ziwerengero zosasainidwa pambuyo pakusintha pang'ono kumanzere.
  • Mu zowunikira zosiyanasiyana (asan, cfi, lsan, msan, tsan, ubsan sanitizer) kuthandizira kugawa kwa Linux ndi laibulale yokhazikika ya Musl yawonjezedwa.
  • Kuthekera kwa cholumikizira cha LLD kwakulitsidwa. Thandizo lothandizira la mtundu wa ELF, kuphatikizapo zosankha zowonjezera "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program - mawonekedwe"" Kupititsa patsogolo chithandizo cha MinGW. Pamawonekedwe a Mach-O (macOS), kuthandizira kwa zomanga za arm64, mkono, ndi i386, kukhathamiritsa kwa nthawi yolumikizira (LTO), ndi kupumula kwa stack kuti kugwiridwe mwapadera kwakhazikitsidwa.
  • Libc++ imagwiritsa ntchito zatsopano za C++20 ndipo yayamba kupanga mawonekedwe a C++2b. Thandizo lowonjezera pomanga ndi kuletsa chithandizo chamaloko (β€œ-DLIBCXX_ENABLE_LOCALIZATION=OFF”) ndi zida zopangira manambala achinyengo (β€œ-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Source: opennet.ru

Kuwonjezera ndemanga