LLVM 16.0 kompilatoru komplekta izlaiŔana

Pēc seÅ”u mēneÅ”u izstrādes tika prezentēts LLVM 16.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ā.

Galvenie Clang 16.0 uzlabojumi:

  • Noklusējuma C++/ObjC++ standarts ir gnu++17 (iepriekÅ” gnu++14), kas nozÄ«mē, ka C++17 lÄ«dzekļi ar GNU paplaÅ”inājumiem tiek atbalstÄ«ti pēc noklusējuma. Lai atgrieztu iepriekŔējo darbÄ«bu, varat izmantot opciju "-std=gnu++14".
  • Ieviestas uzlabotas funkcijas, kas saistÄ«tas ar C++20 standartu:
    • NosacÄ«ti triviālas Ä«paŔās biedru funkcijas,
    • strukturētu saiÅ”u uztverÅ”ana lambda funkcijās,
    • VienlÄ«dzÄ«bas operators izteiksmēs,
    • Iespēja dažos kontekstos izlaist tipa nosaukuma atslēgvārdu,
    • DerÄ«ga apkopotā inicializācija iekavās (ā€œAggr(val1, val2)ā€).
  • Ir ieviestas nākotnes C++2b standartā definētās funkcijas:
    • Salikto izteiksmju beigās ir atļauts ievietot etiÄ·etes,
    • statiskais operators (),
    • statiskais operators[],
    • tiek nodroÅ”ināta savietojamÄ«ba ar char8_t tipu,
    • RakstzÄ«mju diapazons, ko atļauts izmantot mapē "\N{...}", ir paplaÅ”ināts
    • Pievienota iespēja izmantot mainÄ«gos, kas deklarēti kā "static constexpr" funkcijās, kas deklarētas kā constexpr.
  • Ir ieviestas nākotnes C-standarta C2x funkcijas:
    • Lai atspējotu brÄ«dinājumu "-Wunused-label", etiÄ·etēm ir atļauts lietot atribÅ«tu "[[maybe_unused]]".
    • Ir atļauts izvietot etiÄ·etes jebkur saliktās izteiksmēs,
    • Pievienots operatoru typeof un typeof_unqual,
    • Jauns tips nullptr_t un nullptr konstante, lai definētu nulles norādes, kuras var pārveidot par jebkuru rādÄ«tāja veidu un attēlot NULL variantu, kas nav saistÄ«ts ar veseliem skaitļiem un nederÄ«giem* veidiem.
    • C2x režīmā ir atļauts izsaukt makro va_start ar mainÄ«gu argumentu skaitu (variadic).
  • C99, C11 un C17 atbilstÄ«bas režīmos noklusējuma opcijas "-Wimplicit-function-declaration" un "-Wimplicit-int" tagad rada kļūdu, nevis brÄ«dinājumu.
  • NetieÅ”a "void *" (piemēram, "void func(void *p) { *p; }") izmantoÅ”ana C++ režīmā tagad rada kļūdu, kas ir lÄ«dzÄ«ga ISO C++, GCC, ICC un MSVC.
  • Norādot bitu laukus kā instrukciju operandus (piemēram, "__asm ā€‹ā€‹ā€‹ā€‹{ mov eax, s.bf }") Microsoft stila iekļautajos montāžas blokos tagad tiek Ä£enerēta kļūda.
  • Pievienota diagnostika dažādu struktÅ«ru un savienÄ«bu klātbÅ«tnei ar vienādiem nosaukumiem dažādos moduļos.
  • Ar OpenCL un OpenMP atbalstu saistÄ«tās iespējas ir paplaÅ”inātas. Uzlabota diagnostika C++ veidnēm, ko izmanto OpenCL kodola argumentos. Uzlabots rindu bloku atbalsts AMDGPU. AtribÅ«ts nounwind ir netieÅ”i pievienots visām funkcijām. Uzlabots atbalsts iebÅ«vētajām funkcijām.
  • Pievienota iespēja izmantot vides mainÄ«go CLANG_CRASH_DIAGNOSTICS_DIR, lai definētu direktoriju, kurā tiek saglabāti avāriju diagnostikas dati.
  • Unikoda atbalsts ir atjaunināts atbilstoÅ”i Unicode 15.0 specifikācijai. Identifikatoros ir atļauti daži matemātiski simboli, piemēram, ā€œā‚Šā€ (piemēram, ā€œdouble xā‚–ā‚Šā‚ā€).
  • Pievienots atbalsts vairāku konfigurācijas failu ielādei (vispirms tiek ielādēti noklusējuma konfigurācijas faili, pēc tam tie, kas norādÄ«ti ar karogu ā€œ--config=ā€, ko tagad var norādÄ«t vairākas reizes). MainÄ«ta konfigurācijas failu noklusējuma ielādes secÄ«ba: clang vispirms mēģina ielādēt failu - .cfg, un, ja tas netiek atrasts, tas mēģina ielādēt divus failus .cfg un .cfg. Lai pēc noklusējuma atspējotu konfigurācijas failu ielādi, ir pievienots karodziņŔ ā€œ--no-default-configā€.
  • Lai nodroÅ”inātu atkārtojamu bÅ«vējumu, paÅ”reizējās datuma un laika vērtÄ«bas makro __DATE__, __TIME__ un __TIMESTAMP__ ir iespējams aizstāt ar laiku, kas norādÄ«ts vides mainÄ«gajā SOURCE_DATE_EPOCH.
  • Lai pārbaudÄ«tu, vai ir iebÅ«vētas funkcijas (builtin), kuras var izmantot konstantu kontekstā, ir pievienots makro ā€œ__has_constexpr_builtinā€.
  • Pievienots jauns kompilācijas karodziņŔ "-fcoro-aligned-allocation" saskaņotai korutÄ«nas kadru pieŔķirÅ”anai.
  • Karogs ā€œ-fstrict-flex-arrays=ā€ ievieÅ” atbalstu treÅ”ajam elastÄ«go masÄ«vu elementu verifikācijas lÄ«menim struktÅ«rās (Flexible Array Members, nenoteikta izmēra masÄ«vs struktÅ«ras beigās). TreÅ”ajā lÄ«menÄ« tikai izmērs "[]" (piemēram, "int b[]") tiek uzskatÄ«ts par elastÄ«gu masÄ«vu, bet izmērs "[0]" (piemēram, "int b[0]") nav.
  • Pievienots karodziņŔ "-fmodule-output", lai iespējotu vienfāzes kompilācijas modeli standarta C++ moduļiem.
  • Pievienots režīms "-Rpass-analysis=stack-frame-layout", lai palÄ«dzētu diagnosticēt steka rāmja izkārtojuma problēmas.
  • Pievienots jauns atribÅ«ts __attribute__((target_version("cpu_features"))) un paplaÅ”ināta atribÅ«ta __attribute__((target_clones("cpu_features1","cpu_features2",...))) funkcionalitāte, lai atlasÄ«tu konkrētas AArch64 nodroÅ”ināto lÄ«dzekļu versijas CPU.
  • Diagnostikas rÄ«ki ir paplaÅ”ināti:
    • Pievienots brÄ«dinājums "-Wsingle-bit-bitfield-constant-conversion", lai noteiktu netieÅ”u saÄ«sināŔanu, pieŔķirot to viena bita parakstÄ«tam bitlaukam.
    • Ir paplaÅ”ināta neinicializēto constexpr mainÄ«go diagnostika.
    • Pievienoti brÄ«dinājumi "-Wcast-function-type-strict" un "-Wincompatible-function-pointer-types-strict", lai identificētu iespējamās problēmas ar funkciju tipa apraidi.
    • Pievienota diagnostika nepareizu vai rezervētu moduļu nosaukumu izmantoÅ”anai eksporta blokos.
    • Uzlabota trÅ«kstoÅ”o "automātisko" atslēgvārdu noteikÅ”ana definÄ«cijās.
    • BrÄ«dinājuma "-Winteger-overflow" ievieÅ”ana ir papildinājusi papildu situācijas, kas izraisa pārpildes.
  • Ieviests atbalsts LoongArch instrukciju kopas arhitektÅ«rai (-march=loongarch64 vai -march=la464), ko izmanto Loongson 3 5000 procesoros un ievieÅ” jauno RISC ISA, lÄ«dzÄ«gi kā MIPS un RISC-V.

Galvenie jauninājumi LLVM 16.0:

  • LLVM kodā ir atļauts izmantot C++17 standartā definētos elementus.
  • Paaugstinātas vides prasÄ«bas LLVM celtniecÄ«bai. VeidoÅ”anas rÄ«kiem tagad vajadzētu atbalstÄ«t C++17 standartu, t.i. Lai izveidotu, jums ir nepiecieÅ”ams vismaz GCC 7.1, Clang 5.0, Apple Clang 10.0 vai Visual Studio 2019 16.7.
  • AArch64 arhitektÅ«ras aizmugure nodroÅ”ina atbalstu Cortex-A715, Cortex-X3 un Neoverse V2 centrālajiem procesoriem, RME MEC (atmiņas Å”ifrÄ“Å”anas kontekstu) montētājam, Armv8.3 paplaÅ”inājumiem (kompleksais numurs) un funkciju vairāku versiju izveidei.
  • ARM arhitektÅ«ras aizmugursistēmā ir pārtraukts Armv2, Armv2A, Armv3 un Armv3M mērÄ·a platformu atbalsts, kurām pareiza koda Ä£enerÄ“Å”ana netika garantēta. Pievienota iespēja Ä£enerēt kodu instrukcijām darbam ar kompleksajiem skaitļiem.
  • X86 arhitektÅ«ras aizmugursistēmai ir pievienots atbalsts instrukciju kopu arhitektÅ«rām (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Pievienots atbalsts RDMSRLIST, RMSRLIST un WRMSRNS instrukcijām. Ieviestās opcijas "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" un "-mcpu=grandridge".
  • Pievienots oficiālais atbalsts platformai LoongArch.
  • Uzlabotas aizmugursistēmas MIPS, PowerPC un RISC-V arhitektÅ«rām
  • Pievienots atbalsts 64 bitu izpildāmo failu atkļūdoÅ”anai LoongArch arhitektÅ«rai LLDB atkļūdotājam. Uzlabota COFF atkļūdoÅ”anas simbolu apstrāde. NodroÅ”ināta dublēto DLL filtrÄ“Å”ana ielādēto Windows moduļu sarakstā.
  • Libc++ bibliotēkā galvenais darbs tika vērsts uz C++20 un C++23 standartu jauno funkciju atbalsta ievieÅ”anu.
  • LDD saistÄ«tājs ievērojami samazina saistÄ«Å”anas laiku, paralēli veicot adreses pārvietoÅ”anas skenÄ“Å”anu un sadaļu inicializācijas darbÄ«bas. Pievienots atbalsts sadaļu saspieÅ”anai, izmantojot ZSTD algoritmu.

Avots: opennet.ru

Pievieno komentāru