Ukukhishwa kwe-LLVM 12.0 compiler suite

Ngemva kwezinyanga eziyisithupha zokuthuthukiswa, kwethulwa ukukhishwa kwephrojekthi ye-LLVM 12.0 - ikhithi yamathuluzi ehambisana ne-GCC (abahlanganisi, izithuthukisi kanye namakhodi akhiqiza amakhodi) ehlanganisa izinhlelo zibe yi-bitcode ephakathi yemiyalelo ye-RISC efana ne-virtual (umshini wezinga eliphansi one- uhlelo lokusebenzisa amazinga amaningi). I-pseudocode ekhiqiziwe ingaguqulwa kusetshenziswa i-JIT compiler ibe imiyalelo yomshini ngokuqondile ngesikhathi sokwenziwa kohlelo.

Ukuthuthukiswa kwe-Clang 12.0:

  • Usekelo lwezibaluli “ezingenzeka” kanye “nezingenakwenzeka” ezihlongozwe ezingeni le-C++20 seluqalisiwe futhi lwavulwa ngokuzenzakalelayo, okuvumela isilungiseleli ukuthi saziswe mayelana namathuba okuthi ukwakhiwa okunemibandela kuqaliswe (ngokwesibonelo, “[[cishe] ]] uma (okungahleliwe > 0) {“).
  • Usekelo olungeziwe lwe-AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) kanye namaphrosesa we-Intel Sapphire Rapids (-march=sapphirerapids).
  • Kungezwe usekelo lwamafulegi okuthi "-march=x86-64-v[234]" ukuze ukhethe amazinga e-x86-64 ezakhiwo (v2 - ahlanganisa i-SSE4.2, SSSE3, POPCNT kanye nezandiso ze-CMPXCHG16B; v3 - AVX2 ne-MOVBE; v4 - AVX-512 ).
  • Usekelo olungeziwe lwe-Arm Cortex-A78C (cortex-a78c), i-Arm Cortex-R82 (cortex-r82), i-Arm Neoverse V1 (neoverse-v1), i-Arm Neoverse N2 (neoverse-n2) kanye namaphrosesa we-Fujitsu A64FX (a64fx). Isibonelo, ukuze unike amandla ukulungiselelwa kwe-Neoverse-V1 CPUs, ungacacisa “-mcpu=neoverse-v1”.
  • Ezakhiweni ze-AArch64, amafulegi amasha enhlanganisela "-moutline-atomics" kanye ne-"-mno-outline-atomics" engeziwe ukuze kunikwe amandla noma kukhubazwe imisebenzi yomsizi wokusebenza kwe-athomu, njengokuthi "__aarch64_cas8_relax". Imisebenzi enjalo ithola ngesikhathi sokuqalisa ukuthi ingabe i-LSE (Izandiso Zesistimu Enkulu) iyatholakala futhi isebenzise imiyalelo enikeziwe yephrosesa ye-athomu noma buyela emuva ekusebenziseni imiyalelo ye-LL/SC (Isixhumanisi sokulayisha/isitolo-imibandela) yokuvumelanisa.
  • Kwengezwe inketho ethi "-fbinutils-version" ukuze ukhethe inguqulo eqondiwe ye-binutils suite ukuze ihambisane nesixhumi esidala nokuziphatha komhlanganisi.
  • Kumafayela asebenzisekayo e-ELF, lapho ifulegi elithi "-gz" licacisiwe, ukucindezelwa kolwazi lokususa iphutha kusetshenziswa umtapo wezincwadi we-zlib kunikwe amandla ngokuzenzakalelayo (gz=zlib). Ukuxhumanisa amafayela ezinto eziwumphumela kudinga i-lld noma i-GNU binutils 2.26+. Ukuze ubuyisele ukusebenzisana nezinguqulo ezindala zama-binutils, ungacacisa okuthi "-gz=zlib-gnu".
  • Isikhombi 'lesi' manje sesicutshungulwe ngokuhlolwa okungaguquki nokungatholakali (N). Ukuze ususe isibaluli se-nonnull, uma udinga ukusebenzisa amanani angu-NULL, ungasebenzisa inketho ethi "-fdelete-null-pointer-checks".
  • Kuplathifomu ye-Linux, imodi ethi "-fasynchronous-unwind-tables" inikwe amandla ukuze i-AArch64 ne-PowerPC ikhiqize amathebula okushaya ucingo, njengaku-GCC.
  • Ku-"#pragma clang loop vectorize_width" yengeze amandla okucacisa okukhethwa kukho "okulungisiwe" (okuzenzakalelayo) kanye "nokuscalable" ukuze ukhethe indlela yokwenza i-vectorization. Imodi "esikakayo", engancikile kubude be-vector, iyahlolwa futhi ingasetshenziswa kuzingxenyekazi zekhompuyutha ezisekela ukwenziwa kwe-vectorization okwehlayo.
  • Ukusekelwa okuthuthukisiwe kweplathifomu ye-Windows: Imihlangano kanambambili esemthethweni ye-Windows ohlelweni lwe-Arm64 isilungisiwe, okuhlanganisa i-Clang compiler, i-LLD linker kanye nemitapo yolwazi ye-compiler-rt yesikhathi sokusebenza. Lapho wakhela izinkundla eziqondiwe ze-MinGW, isijobelelo se-.exe siyengezwa, ngisho noma kuhlanganiswa.
  • Amakhono ahlobene nokusekelwa kwe-OpenCL, i-OpenMP ne-CUDA anwetshiwe. Izinketho ezingeziwe "-cl-std=CL3.0" kanye "-cl-std=CL1.0" ukuze ukhethe izinketho ezinkulu ze-OpenCL 3.0 kanye ne-OpenCL 1.0. Amathuluzi okuxilonga anwetshiwe.
  • Usekelo olungeziwe lwemiyalelo ye-HRESET, UINTR, kanye ne-AVXVNNI esetshenziswe kwamanye amaphrosesa asekelwe ku-x86.
  • Kumasistimu e-x86, usekelo lwenketho ethi "-mtune=" luvuliwe, lwenza ukuthuthukiswa kwezakhiwo ezincane ezikhethiwe kungakhathaliseki inani elithi "-march=".
  • I-Static analyzer ithuthukise ukucutshungulwa kweminye imisebenzi ye-POSIX futhi yathuthukisa kakhulu ukuzimisela komphumela wokusebenza okunemibandela lapho kunamanani amaningana angokomfanekiso lapho kuqhathaniswa. Amasheke amasha engeziwe: i-fuchia.I-HandleChecker (ichaza izibambo ezakhiweni), i-webkit.AyibalwaLambdaCapturesChecker webkit kanye ne-alpha.webkit.OkungabalwaKwaLocalVarsChecker (icabangela izici ezingavamile zokusebenza ngezikhombisi kukhodi yenjini ye-WebKit).
  • Ezikhulumeni ezisetshenziswe kumongo wama-constants, ukusetshenziswa kwemisebenzi eyakhelwe ngaphakathi __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, _bit_bit_scan_bsrverse, _bsrverse, _bsrverse, _bsrverse_wap_wap, __bswap64, __ ivunyelwe i-bswapq , _castf*, __rol* kanye ne-__ror*.
  • Kwengezwe inketho ye-BitFieldColonSpacing kusisetshenziswa sefomethi ye-clang ukuze ukhethe isikhala ezizungeze izihlonzi, amakholomu, nezincazelo zenkambu.
  • Iseva ye-clangd caching (Iseva ye-Clang) epulatifomu ye-Linux inciphise kakhulu ukusetshenziswa kwememori phakathi nokusebenza kwesikhathi eside (izingcingo zezikhathi ezithile eziya ku-malloc_trim zinikezwa ukubuyisela amakhasi ememori yamahhala ohlelweni lokusebenza).

Izinto ezintsha ezibalulekile ku-LLVM 12.0:

  • Ukusekelwa kwethuluzi lokwakha i-llvm-build elibhalwe ngePython kunqanyuliwe, futhi esikhundleni salokho iphrojekthi isishintshele ekusebenziseni uhlelo lokwakha lwe-CMake.
  • Ngasemuva kwesakhiwo se-AArch64, ukusekelwa kweplathifomu ye-Windows kuye kwathuthukiswa: ukukhiqizwa okulungile kokukhipha okuhlanganisiwe kwezinhlelo eziqondiwe ze-Windows kuqinisekisiwe, ukukhiqizwa kwedatha ekucindezelweni kwezingcingo kuthuthukisiwe (usayizi wedatha enjalo wehliswe ngo-60. %), ikhono lokudala idatha yokuhlehlisa usebenzisa isihlanganisi lengezwe iziqondiso .seh_*.
  • Ingemuva le-architecture ye-PowerPC ifaka ukuthuthukiswa okusha kwama-loops kanye nokuthunyelwa kwe-inline, ukwesekwa okunwetshiwe kwamaphrosesa e-Power10, usekelo olungeziwe lwemiyalelo ye-MMA yokukhohlisa kwe-matrix, nokusekelwa okuthuthukisiwe kohlelo lokusebenza lwe-AIX.
  • I-backend ye-x86 yengeza usekelo lwe-AMD Zen 3, i-Intel Alder Lake ne-Intel Sapphire Rapids processors, kanye nemiyalo yokucubungula ye-HRESET, UINTR kanye ne-AVXVNNI. Ukusekelwa kwe-MPX (Izandiso Zokuvikela Inkumbulo) zokuhlola izikhombi ukuqinisekisa ukuthi imingcele yenkumbulo ayisasekelwa (lobu buchwepheshe abusabaleleki futhi sebuvele bususiwe ku-GCC kanye ne-clang). Kwengezwe usekelo kusihlanganisi seziqalo ze-{disp32} kanye nethi {disp8} kanye nezijobelelo ze-.d32 kanye ne-.d8 ukuze kulawulwe usayizi we-operand offset kanye nokweqa. Kwengezwe isibaluli esisha esithi "tune-cpu" ukuze kulawulwe ukufakwa kwe-microarchitectural optimizations.
  • Imodi entsha ethi “-fsanitize=unsigned-shift-base” yengezwe kusitshina senkinga esiphelele (integer sanitizer, “-fsanitize=integer”) ukuze kutholwe ukuchichima kwezinombolo ezingabhalisiwe ngemva kokushintshwa kancane kwesokunxele.
  • Kuzitholi ezihlukahlukene (i-asan, i-cfi, i-lsan, i-msan, i-tsan, i-ubsan sanitizer) ukwesekwa kokusatshalaliswa kwe-Linux ngomtapo wezincwadi ojwayelekile we-Musl kungeziwe.
  • Amakhono esixhumanisi se-LLD anwetshiwe. Ukusekelwa okuthuthukisiwe kwefomethi ye-ELF, okuhlanganisa izinketho ezengeziwe “--dependency-file”, “-error-handling-script”, “-lto-pseudo-probe-for-profiling”, “-no-lto-whole-program - ukubonakala" " Ukusekelwa kwe-MinGW okuthuthukisiwe. Ngefomethi ye-Mach-O (i-macOS), ukusekelwa kwe-arm64, ingalo, kanye nezakhiwo ze-i386, ukulungiselelwa kwesikhathi sesixhumanisi (LTO), kanye nokuqaqa isitaki ukuze kuphathwe okuhlukile kusetshenzisiwe.
  • I-Libc++ isebenzisa izici ezintsha zezinga le-C++20 futhi isiqalile ukuthuthukiswa kwezici zokucaciswa kwe-C++2b. Usekelo olungeziwe lokwakha ngokukhubaza usekelo lokwenza kwasendaweni (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) kanye namadivayisi okukhiqiza izinombolo ezingahleliwe (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Source: opennet.ru

Engeza amazwana