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