LLVM 13.0 -kääntäjäpaketin julkaisu

Kuuden kuukauden kehitystyön jälkeen esiteltiin LLVM 13.0 -projektin julkaisu - GCC-yhteensopiva työkalupakki (kääntäjät, optimoijat ja koodigeneraattorit), joka kokoaa ohjelmat RISC-tyyppisten virtuaalisten käskyjen välibittikoodiksi (matalatason virtuaalikone, jossa on monitasoinen optimointijärjestelmä). Luotu pseudokoodi voidaan muuntaa JIT-kääntäjällä konekäskyiksi suoraan ohjelman suoritushetkellä.

Clang 13.0:n parannukset:

  • Toteutettu tuki taatuille häntäkutsuille (alirutiinin kutsuminen funktion lopussa, hännän rekursion muodostaminen, jos aliohjelma kutsuu itseään). Taattujen häntäkutsujen tuen tarjoaa "[[clang::musttail]]" attribuutilla C++:ssa ja "__attribute__((musttail))" C:ssä, jota käytetään "return"-käskyssä. Ominaisuuden avulla voit toteuttaa optimoinnit ottamalla käyttöön koodin tasaiseen iteraatioon pinon kulutuksen säästämiseksi.
  • "using"-ilmoitukset ja clang-laajennukset tarjoavat tukea C++11-tyylisten attribuuttien määrittämiseen "[[]]"-muodossa.
  • Lisätty "-Wreserved-identifier" -merkki, joka näyttää varoituksen, kun määrität varatut tunnisteet käyttäjäkoodissa.
  • Lisätty "-Wunused-but-set-parameter" ja "-Wunused-but-set-variable" -liput näyttämään varoituksen, jos parametri tai muuttuja on asetettu, mutta sitä ei käytetä.
  • Lisätty "-Wnull-pointer-subtraction" -lippu antamaan varoitus, jos koodi saattaa aiheuttaa määrittelemättömän toiminnan johtuen nollaosoittimen käytöstä vähennyslaskutoiminnoissa.
  • Lisätty "-fstack-usage"-lippu luomaan jokaiselle kooditiedostolle ylimääräinen ".su"-tiedosto, joka sisältää tiedot pinokehysten koosta kullekin käsiteltävässä tiedostossa määritetylle funktiolle.
  • Staattiseen analysaattoriin on lisätty uusi tulostustyyppi - "sarif-html", joka johtaa raporttien luomiseen samanaikaisesti HTML- ja Sarif-muodoissa. Lisätty uusi allocClassWithName-tarkistus. Kun määrität "-analyzer-display-progress"-vaihtoehdon, kunkin toiminnon analyysiaika näytetään. Älykäs osoitinanalysaattori (alpha.cplusplus.SmartPtr) on melkein valmis.
  • OpenCL-tukeen liittyviä ominaisuuksia on laajennettu. Lisätty tuki uusille laajennuksille cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ja __cl_clang_non_portable_kernel_param_types. OpenCL 3.0 -määrityksen käyttöönotto on jatkunut. C:lle OpenCL 1.2 -spesifikaatiota käytetään oletuksena, ellei muuta versiota ole erikseen valittu. C++:aan on lisätty tuki tiedostoille, joiden tunniste on ".clcpp".
  • OpenMP 5.1 -spesifikaatiossa määriteltyjen silmukkamuunnoskäskyjen ("#pragma omp unrol" ja "#pragma omp tile") tuki on otettu käyttöön.
  • Lisätty asetukset clang-format-apuohjelmaan: SpacesInLineCommentPrefix määrittää välilyöntien lukumäärän ennen kommentteja, IndentAccessModifiers, LambdaBodyIndentation ja PPIndentWidth merkintöjen, lambda-lausekkeiden ja esiprosessoriohjeiden kohdistuksen ohjaamiseen. Otsikkotiedostojen luettelon lajittelumahdollisuuksia (SortIncludes) on laajennettu. Lisätty tuki JSON-tiedostojen muotoilulle.
  • Suuri osa uusista sekkeistä on lisätty linterin siistiksi.

Tärkeimmät innovaatiot LLVM 13.0:ssa:

  • Lisätty "-ehcontguard" -vaihtoehto käyttääkseen CET-tekniikkaa (Windows Control-flow Enforcement Technology) suojatakseen ROP-tekniikalla (Return-Oriented Programming) tehtyjen hyväksikäyttöjen suorittamista poikkeusten käsittelyvaiheessa.
  • Debuginfo-testiprojekti on nimetty uudelleen projektien välisiksi testeiksi, ja se on suunniteltu testaamaan eri projektien komponentteja, ei rajoitu vain virheenkorjaustietoihin.
  • Kokoonpanojärjestelmä tukee useiden jakelujen rakentamista, esimerkiksi yhdessä apuohjelmilla ja toisessa kehittäjille tarkoitettuja kirjastoja.
  • AArch64-arkkitehtuurin taustaohjelmassa tuki Armv9-A RME (Realm Management Extension) ja SME (Scalable Matrix Extension) -laajennuksille on toteutettu kokoonpanossa.
  • Tuki ISA V68/HVX:lle on lisätty Hexagon-arkkitehtuurin taustajärjestelmään.
  • x86-taustajärjestelmässä on parannettu tuki AMD Zen 3 -prosessoreille.
  • Lisätty tuki GFX1013 RDNA2 APU:lle AMDGPU-taustajärjestelmään.
  • Libc++ jatkaa C++20- ja C++2b-standardien uusien ominaisuuksien käyttöönottoa, mukaan lukien "konsepti"-kirjaston valmistuminen. Lisätty tuki std::tiedostojärjestelmälle MinGW-pohjaiselle Windows-alustalle. Otsikkotiedostot , ja on erotettu toisistaan. Lisätty koontivaihtoehto LIBCXX_ENABLE_INCOMPLETE_FEATURES poistaaksesi käytöstä ylätunnistetiedostot, joissa ei ole täysin toteutettu toimintoja.
  • LLD-linkerin ominaisuuksia on laajennettu, jossa on toteutettu tuki Big-endian Aarch64 -prosessoreille, ja Mach-O-taustaosa on saatettu tilaan, joka mahdollistaa tavallisten ohjelmien linkittämisen. Sisältää parannuksia, joita tarvitaan Glibcin linkittämiseen LLD:n avulla.
  • Llvm-mca (Machine Code Analyzer) -apuohjelma on lisännyt tuen prosessoreille, jotka suorittavat käskyt järjestyksessä (järjestyksen superskalaariliukuhihna), kuten ARM Cortex-A55.
  • AArch64-alustan LLDB-debuggeri tarjoaa täyden tuen Pointer Authentication-, MTE- (MemTag, Memory Tagging Extension)- ja SVE-rekistereille. Lisätty komennot, joiden avulla voit sitoa tunnisteita jokaiseen muistinvaraustoimintoon ja järjestää osoittimen tarkistuksen käytettäessä muistia, joka on liitettävä oikeaan tunnisteeseen.
  • LLDB-debuggeri ja Fortran-kielen käyttöliittymä - Flang on lisätty projektin luomiin binäärikokoonpanoihin.

Lähde: opennet.ru

Lisää kommentti