LLVM 12.0 kompilatoru komplekta izlaiŔana

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

Pievieno komentāru