LLVM 13.0 kompilaatorikomplekti väljalase

Pärast kuuekuulist arendustööd esitleti projekti LLVM 13.0 väljalaset – GCC-ga ühilduvat tööriistakomplekti (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerib programmid RISC-laadsete virtuaalsete käskude vahepealsesse bitikoodi (madala tasemega virtuaalmasin mitmetasandiline optimeerimissüsteem). Loodud pseudokoodi saab JIT-kompilaatori abil teisendada masinakäskudeks vahetult programmi täitmise ajal.

Clang 13.0 täiustused:

  • Realiseeritud garanteeritud sabakutsete tugi (alamprogrammi väljakutsumine funktsiooni päris lõpus, sabarekursiooni moodustamine, kui alamprogramm ise kutsub). Garanteeritud sabakõnede tuge pakub C++ atribuut "[[clang::musttail]]" ja C-s "__attribute__((musttail))", mida kasutatakse "return"-lauses. Funktsioon võimaldab teil optimeerida, juurutades koodi lame iteratsioonina, et säästa virna tarbimist.
  • "kasutades" deklaratsioone ja klangilaiendeid pakuvad C++11-stiilis atribuutide määratlemine vormingus "[[]]".
  • Lisati lipp "-Wreserved-identifier", et kuvada hoiatus, kui määrate kasutajakoodis reserveeritud identifikaatorid.
  • Lisatud lipud "-Wunused-but-set-parameter" ja "-Wunused-but-set-variable", et kuvada hoiatus, kui parameeter või muutuja on määratud, kuid seda ei kasutata.
  • Lisatud lipp "-Null-pointer-subtraction", et anda hoiatus, kui kood võib lahutamistoimingutes nullkursori kasutamise tõttu põhjustada määratlemata käitumist.
  • Lisatud lipp "-fstack-usage", et luua iga koodifaili jaoks täiendav ".su" fail, mis sisaldab teavet virnaraamide suuruse kohta iga töödeldavas failis määratletud funktsiooni jaoks.
  • Staatilisele analüsaatorile on lisatud uus väljundtüüp - “sarif-html”, mis viib aruannete genereerimiseni samaaegselt HTML- ja Sarif-vormingus. Lisatud uus allocClassWithName kontroll. Valiku “-analyzer-display-progress” määramisel kuvatakse iga funktsiooni analüüsiaeg. Nutikas osuti analüsaator (alpha.cplusplus.SmartPtr) on peaaegu valmis.
  • OpenCL-i toega seotud võimalusi on laiendatud. Lisati tugi uutele laiendustele cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ja __cl_clang_non_portable_kernel_param_types. OpenCL 3.0 spetsifikatsiooni juurutamine on jätkunud. C puhul kasutatakse vaikimisi OpenCL 1.2 spetsifikatsiooni, välja arvatud juhul, kui on otseselt valitud mõni muu versioon. C++ jaoks on lisatud laiendiga “.clcpp” failide tugi.
  • Rakendatud on OpenMP 5.1 spetsifikatsioonis määratletud silmuse teisendusdirektiivide tugi ("#pragma omp unrol" ja "#pragma omp tile").
  • Clang-vormingu utiliidile on lisatud valikud: SpacesInLineCommentPrefix, et määrata tühikute arv enne kommentaare, IndentAccessModifiers, LambdaBodyIndentation ja PPIndentWidth, et juhtida kirjete, lambda-avaldiste ja eelprotsessori direktiivide joondust. Laiendatud on päisefailide loendi sortimise (SortIncludes) võimalusi. Lisatud on JSON-failide vormindamise tugi.
  • Suur osa uusi tšekke on lisatud lintri kõlisema.

LLVM 13.0 peamised uuendused:

  • Lisatud on suvand "-ehcontguard", et kasutada CET-tehnoloogiat (Windows Control-flow Enforcement Technology), et kaitsta end tagasisuunatud programmeerimise (ROP) tehnikaid kasutades erandite käsitlemise etapis loodud ärakasutamise eest.
  • Silumisinfo-testi projekt on ümber nimetatud projektiülesteks testideks ja on mõeldud erinevate projektide komponentide testimiseks, mitte ainult silumisinfoga.
  • Koostamissüsteem toetab mitme distributsiooni loomist, näiteks üks koos utiliitidega ja teine ​​arendajatele mõeldud raamatukogudega.
  • AArch64 arhitektuuri taustaprogrammis on monteerijas juurutatud Armv9-A RME (Realm Management Extension) ja SME (Scalable Matrix Extension) laienduste tugi.
  • Hexagoni arhitektuuri taustaprogrammile on lisatud ISA V68/HVX tugi.
  • x86 taustaprogrammil on täiustatud AMD Zen 3 protsessorite tugi.
  • AMDGPU taustaprogrammile lisati tugi GFX1013 RDNA2 APU-le.
  • Libc++ jätkab C++20 ja C++2b standardite uute funktsioonide juurutamist, sealhulgas „kontseptsioonide” teegi valmimist. Lisatud std::failisüsteemi tugi MinGW-põhise Windowsi platvormi jaoks. Päisefailid , ja on eraldatud. Lisati ehitusvalik LIBCXX_ENABLE_INCOMPLETE_FEATURES, et keelata täielikult rakendamata funktsioonidega päisefailid.
  • Laiendatud on LLD linkeri võimalusi, milles on juurutatud Big-endian Aarch64 protsessorite tugi ning Mach-O taustaprogramm on viidud tavaprogrammide linkimist võimaldavasse olekusse. Sisaldab täiustusi, mis on vajalikud Glibci linkimiseks LLD-ga.
  • Utiliit Llvm-mca (Machine Code Analyzer) on lisanud toe protsessoritele, mis täidavad käske järjekorras (järjekorras superskalaarne konveier), näiteks ARM Cortex-A55.
  • AArch64 platvormi LLDB silur toetab täielikult kursori autentimist, MTE (MemTag, Memory Tagging Extension) ja SVE registreid. Lisatud käsud, mis võimaldavad siduda silte iga mälu jaotamise toiminguga ja korraldada kursori kontrolli mälu juurde pääsemisel, mis peab olema seotud õige sildiga.
  • LLDB silur ja Fortrani keele - Flangi esiosa on lisatud projekti loodud binaarkoostudele.

Allikas: opennet.ru

Lisa kommentaar