PÄc seÅ”u mÄneÅ”u izstrÄdes tika prezentÄts LLVM 12.0 projekta izlaidums - ar GCC saderÄ«gs rÄ«ku komplekts (kompilatori, optimizÄtÄji un kodu Ä£eneratori), kas apkopo programmas RISC lÄ«dzÄ«gu virtuÄlo instrukciju starpposma bitkodÄ (zema lÄ«meÅa virtuÄlÄ maŔīna ar daudzlÄ«meÅu optimizÄcijas sistÄma). Ä¢enerÄto pseidokodu, izmantojot JIT kompilatoru, var pÄrvÄrst maŔīnas instrukcijÄs tieÅ”i programmas izpildes laikÄ.
Clang 12.0 uzlabojumi:
- C++20 standartÄ piedÄvÄto atribÅ«tu āiespÄjamsā un āmaz ticamsā āāatbalsts ir ieviests un iespÄjots pÄc noklusÄjuma, ļaujot optimizÄtÄjam bÅ«t informÄtam par nosacÄ«juma konstrukcijas aktivizÄÅ”anas iespÄjamÄ«bu (piemÄram, ā[[iespÄjams ]] if (nejauÅ”s > 0) {ā).
- Pievienots atbalsts AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) un Intel Sapphire Rapids (-march=sapphirerapids) procesoriem.
- Pievienots atbalsts karodziÅiem "-march=x86-64-v[234]", lai atlasÄ«tu x86-64 arhitektÅ«ras lÄ«meÅus (v2 ā aptver SSE4.2, SSSE3, POPCNT un CMPXCHG16B paplaÅ”inÄjumus; v3 ā AVX2 un MOVBE; v4 ā AVX-512 ) .
- Pievienots atbalsts Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) un Fujitsu A64FX (a64fx) procesoriem. PiemÄram, lai iespÄjotu Neoverse-V1 CPU optimizÄciju, varat norÄdÄ«t ā-mcpu=neoverse-v1ā.
- AArch64 arhitektÅ«rai ir pievienoti jauni kompilatora karodziÅi "-moutline-atomics" un "-mno-outline-atomics", lai iespÄjotu vai atspÄjotu atomu darbÄ«bas palÄ«gfunkcijas, piemÄram, "__aarch64_cas8_relax". Å Ädas funkcijas izpildes laikÄ nosaka, vai ir pieejams LSE (lielo sistÄmas paplaÅ”inÄjumu) atbalsts, un izmanto sniegtÄs atomu procesora instrukcijas vai atgriežas pie LL/SC (Load-link/store-conditional) instrukciju izmantoÅ”anas sinhronizÄcijai.
- Pievienota opcija "-fbinutils-version", lai atlasÄ«tu binutils komplekta mÄrÄ·a versiju saderÄ«bai ar vecÄku saistÄ«Å”anas un montÄtÄja darbÄ«bu.
- ELF izpildÄmajiem failiem, kad ir norÄdÄ«ts karodziÅÅ” "-gz", pÄc noklusÄjuma ir iespÄjota atkļūdoÅ”anas informÄcijas saspieÅ”ana, izmantojot zlib bibliotÄku (gz=zlib). IegÅ«to objektu failu saistÄ«Å”anai nepiecieÅ”ams lld vai GNU binutils 2.26+. Lai atjaunotu saderÄ«bu ar vecÄkÄm binutils versijÄm, varat norÄdÄ«t "-gz=zlib-gnu".
- RÄdÄ«tÄjs āÅ”isā tagad tiek apstrÄdÄts, izmantojot neatsaucamas un atsauces(N) pÄrbaudes. Lai noÅemtu atribÅ«tu nonnull, ja jums ir jÄizmanto NULL vÄrtÄ«bas, varat izmantot opciju "-fdelete-null-pointer-checks".
- Linux platformÄ AArch64 un PowerPC arhitektÅ«rÄm ir iespÄjots režīms "-fasynchronous-unwind-tables", lai Ä£enerÄtu izsaukumu tabulas, piemÄram, GCC.
- SadaÄ¼Ä "#pragma clang loop vectorize_width" tika pievienota iespÄja norÄdÄ«t "fiksÄtÄs" (noklusÄjuma) un "mÄrogojamÄs" opcijas, lai atlasÄ«tu vektorizÄcijas metodi. "MÄrogojamais" režīms, kas nav atkarÄ«gs no vektora garuma, ir eksperimentÄls, un to var izmantot aparatÅ«rÄ, kas atbalsta mÄrogojamu vektorizÄciju.
- Uzlabots atbalsts Windows platformai: Ir sagatavoti oficiÄlie binÄrie komplekti operÄtÄjsistÄmai Windows Arm64 sistÄmÄs, tostarp Clang kompilators, LLD saistÄ«tÄjs un kompilatora-rt izpildlaika bibliotÄkas. Veidojot MinGW mÄrÄ·a platformÄm, tiek pievienots .exe sufikss, pat veicot kompilÄÅ”anu.
- Ir paplaÅ”inÄtas iespÄjas, kas saistÄ«tas ar OpenCL, OpenMP un CUDA atbalstu. Pievienotas opcijas "-cl-std=CL3.0" un "-cl-std=CL1.0", lai atlasÄ«tu makro opcijas OpenCL 3.0 un OpenCL 1.0. Diagnostikas rÄ«ki ir paplaÅ”inÄti.
- Pievienots atbalsts HRESET, UINTR un AVXVNNI instrukcijÄm, kas ieviestas dažos procesoros, kuru pamatÄ ir x86.
- SistÄmÄs x86 ir iespÄjots opcijas "-mtune=" atbalsts, kas iespÄjo atlasÄ«tÄs mikroarhitektÅ«ras optimizÄcijas neatkarÄ«gi no "-march=" vÄrtÄ«bas.
- Statiskais analizators ir uzlabojis dažu POSIX funkciju apstrÄdi un ievÄrojami uzlabojis nosacÄ«to darbÄ«bu rezultÄta noteikÅ”anu, ja salÄ«dzinÄjumÄ ir vairÄkas simboliskas vÄrtÄ«bas. Ir pievienotas jaunas pÄrbaudes: fuchia.HandleChecker (definÄ rokturus struktÅ«rÄs), webkit.UncountedLambdaCapturesChecker tÄ«mekļa komplekts un alpha.webkit.UncountedLocalVarsChecker (Åem vÄrÄ WebKit dzinÄja koda darba ar rÄdÄ«tÄjiem Ä«patnÄ«bas).
- IzteiksmÄs, kuras tiek izmantotas konstantu kontekstÄ, tiek izmantotas iebÅ«vÄtÄs funkcijas __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __beqsrd, _bsfq, __verse, scan __bswapd, __bswap64, __ ir atļauts bswapq , _castf*, __rol* un __ror*.
- Clang formÄta utilÄ«tai ir pievienota opcija BitFieldColonSpacing, lai atlasÄ«tu atstarpi ap identifikatoriem, kolonnÄm un lauku definÄ«cijÄm.
- Clangd keÅ”atmiÅas serveris (Clang Server) Linux platformÄ ir ievÄrojami samazinÄjis atmiÅas patÄriÅu ilgstoÅ”as āādarbÄ«bas laikÄ (tiek nodroÅ”inÄti periodiski izsaukumi uz malloc_trim, lai atgrieztu operÄtÄjsistÄmai brÄ«vÄs atmiÅas lapas).
Galvenie jauninÄjumi LLVM 12.0:
- Python rakstÄ«tÄ llvm-build veidoÅ”anas rÄ«ka atbalsts ir pÄrtraukts, un tÄ vietÄ projekts ir pilnÄ«bÄ pÄrgÄjis uz CMake veidoÅ”anas sistÄmas izmantoÅ”anu.
- AizmugurprogrammÄ AArch64 arhitektÅ«rai ir uzlabots atbalsts Windows platformai: nodroÅ”inÄta pareiza montÄtÄja izvades Ä£enerÄÅ”ana mÄrÄ·a Windows sistÄmÄm, optimizÄta datu Ä£enerÄÅ”ana par izsaukumiem (Å”Ädu datu apjoms samazinÄts par 60). %), iespÄja izveidot attÄ«Å”anas datus, izmantojot montÄtÄju, ir pievienotas direktÄ«vas .seh_*.
- PowerPC arhitektÅ«ras aizmugure piedÄvÄ jaunas optimizÄcijas cilpÄm un iekļautajai izvietoÅ”anai, paplaÅ”inÄtu atbalstu Power10 procesoriem, pievienotu atbalstu MMA instrukcijÄm matricas manipulÄcijÄm un uzlabotu atbalstu AIX operÄtÄjsistÄmai.
- x86 aizmugure pievieno atbalstu AMD Zen 3, Intel Alder Lake un Intel Sapphire Rapids procesoriem, kÄ arÄ« HRESET, UINTR un AVXVNNI procesoru instrukcijas. MPX (atmiÅas aizsardzÄ«bas paplaÅ”inÄjumu) atbalsts, lai pÄrbaudÄ«tu norÄdes, lai nodroÅ”inÄtu, ka atmiÅas robežas vairs netiek atbalstÄ«tas (Ŕī tehnoloÄ£ija nav plaÅ”i izplatÄ«ta un jau ir noÅemta no GCC un zvana). Pievienots atbalsts montÄtÄjam prefiksiem {disp32} un {disp8}, kÄ arÄ« sufiksiem .d32 un .d8, lai kontrolÄtu operandu nobÄ«des un lÄcienus. Pievienots jauns atribÅ«ts "tune-cpu", lai kontrolÄtu mikroarhitektÅ«ras optimizÄciju iekļauÅ”anu.
- Jauns režīms ā-fsanitize=unsigned-shift-baseā ir pievienots veselu skaitļu problÄmu detektoram (integer sanitizer, ā-fsanitize=integerā), lai noteiktu neparakstÄ«tu veselu skaitļu pÄrpildes pÄc bitu nobÄ«des pa kreisi.
- DažÄdos detektoros (asan, cfi, lsan, msan, tsan, ubsan sanitizer) ir pievienots atbalsts Linux distribÅ«cijÄm ar standarta Musl bibliotÄku.
- LLD linkera iespÄjas ir paplaÅ”inÄtas. Uzlabots ELF formÄta atbalsts, tostarp pievienotÄs opcijas ā--dependency-fileā, ā-error-handling-scriptā, ā-lto-pseudo-probe-for-profilingā, ā-no-lto-whole-program -redzamÄ«ba"" Uzlabots MinGW atbalsts. Mach-O formÄtam (macOS) ir ieviests atbalsts arm64, arm un i386 arhitektÅ«rÄm, saites laika optimizÄcija (LTO) un steka attÄ«Å”ana izÅÄmumu apstrÄdei.
- Libc++ ievieÅ” jaunas C++20 standarta funkcijas un ir uzsÄcis C++2b specifikÄcijas lÄ«dzekļu izstrÄdi. Pievienots atbalsts veidoÅ”anai ar lokalizÄcijas atbalsta atspÄjoÅ”anu (ā-DLIBCXX_ENABLE_LOCALIZATION=OFFā) un ierÄ«cÄm pseidogadÄ«juma skaitļu Ä£enerÄÅ”anai (ā-DLIBCXX_ENABLE_RANDOM_DEVICE=OFFā).
Avots: opennet.ru