Kuuden kuukauden kehityksen jälkeen LLVM 11.0 -projektin uuden version julkaisu on esitetty jossa esitetään useita parannuksia, kuten päivitys Python 3: een, korjaustiedostot, jotka tukevat RISC-V: n kokeellisia ohjeita, ja monia muita muutoksia.
Niille, joille LLVM ei ole tuttu, heidän tulisi tietää, mikä se on GCC-yhteensopiva työkalupakki (kääntäjät, optimoijat ja koodigeneraattorit), joka kokoaa ohjelmat RISC: n kaltaisiksi bittikoodin välituotteiksi (matalan tason virtuaalikone, jossa on monitasoinen optimointijärjestelmä)
Se on suunniteltu optimoimaan kokoamisaika, sidonta-aika, suoritusaika millä tahansa ohjelmointikielellä, jonka käyttäjä haluaa määritellä. Alun perin toteutettu C: n ja C ++: n kokoamiseksi, LLVM: n kieliagnostiikka ja projektimenestys he ovat synnyttäneet monenlaisia kieliä.
Luotu pseudokoodi voidaan muuntaa JIT-kääntäjän avulla koneohjeiksi suoraan ohjelman suorituksen yhteydessä.
LLVM 11.0: n tärkeimmät uudet ominaisuudet
Tässä uudessa versiossa LLVM 11.0 koontijärjestelmä on siirretty käyttämään Python 3: taSellaisena Python 3: n käyttöä ei pakoteta, koska siinä tapauksessa, että sitä ei ole käytettävissä, palautusvaihtoehto toteutetaan Python 2: n käyttämiseksi.
Attribuutti vektori-funktio-abi-variantti on lisätty väliesitykseen (IR) kuvaamaan skalaari- ja vektorifunktioiden välistä kartoitusta vektorointikutsuihin. Kaksi erillistä vektorityyppiä, llvm :: FixedVectorType ja llvm :: ScalableVectorType, puretaan llvm: stä: VectorType.
Määrittelemätön käyttäytyminen on undef-pohjaista haarautumista ja siirtymistä määrittelemättömistä arvoista kirjaston vakiotoimintoihin.
Kohdassa memset / memcpy / memmove on sallittua siirtää määrittelemättömiä osoittimia, mutta jos parametrin koko on nolla.
LLJIT lisää staattisten alustusten tuen LLJIT :: Initialize- ja LLJIT :: deinitialize -menetelmien avulla.
Lisätty kyky lisätä staattisia kirjastoja JITDylibiin käyttämällä StaticLibraryDefinitionGenerator-luokkaa. Lisätty C API ORCv2: lle (API JIT-kääntäjien luomiseen).
Eri prosessoriarkkitehtuurien tuen parantaminen:
- Lisätty tuki Cortex-A34-, Cortex-A77-, Cortex-A78- ja Cortex-X1-prosessoreille AArch64-arkkitehtuurin taustalla. ARMv8.2-BF16 (BFloat16) ja ARMv8.6-A -laajennukset on otettu käyttöön, mukaan lukien RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity) Monitoroi virtualisointia) ja ARMv8.0-DGH (tiedonkeruu vihje).
- Lisätty tuki Cortex-M55-, Cortex-A77-, Cortex-A78- ja Cortex-X1-prosessoreille ARM-taustalla. Toteutti Armv8.6-A Matrix Multiply- ja RMv8.2-AA32BF16 BFloat16 -laajennukset.
- Lisätty tuki koodinmuodostukselle POWER10-prosessoreille PowerPC-taustalla. Parannetut silmukan optimoinnit ja parempi tuki liukulukuoperaatioille.
- Arkkitehtuurin taustaosa RISC-V voi vastaanottaa korjaustiedostoja tuella kokeellisille laajennetuille käskyjoukoille, joita ei ole vielä virallisesti hyväksytty.
Sen lisäksi tarjotaan mahdollisuus tuottaa koodi sidontatoimintoja varten integroitu vektori SVE-ohjeisiin.
AVR-arkkitehtuurin taustajärjestelmä on siirretty kokeiluluokasta vakaana, joka sisältyy perusjakaumaan.
X86-taustakuva tukee Intel AMX- ja TSXLDTRK-ohjeita. Lisätty suoja LVI-hyökkäyksiä vastaan (Load Value Injection) ja yleinen spekulatiivisen suorituksen sivuvaikutusten estämismekanismi otettiin käyttöön myös estämään hyökkäyksiä, jotka aiheutuvat suorittimen spekulatiivisesta suorituksesta.
Muista erottuvista muutoksista:
- SystemZ-arkkitehtuurin taustajärjestelmä lisää tuen MemorySanitizerille ja LeakSanitizerille.
- Libc ++ lisää matemaattisen vakiotunnistetiedoston tuen .
- LLD-linkittimen laajennetut ominaisuudet.
- Parannettu ELF-tuki, mukaan lukien lisätyt vaihtoehdot "–lto-emit-asm", "–lto-koko-ohjelma-näkyvä", "–tulosta-arkisto-tilastot", "–shuffle-section", "–thinlto-single -moduuli "," - ainutlaatuinen "," - segmentti "," - säikeet = N ".
- Lisätty "-time-trace" -vaihtoehto jäljityksen tallentamiseksi tiedostoon, joka voidaan sitten jäsentää Chromen chrome: // trace -rajapinnan kautta.
- Käyttöliittymä Go (llgo) -kääntäjän kanssa on poistettu julkaisusta, ja sitä voidaan mahdollisesti muuttaa tulevaisuudessa.
Vihdoin jos haluat tietää enemmän siitä tästä uudesta versiosta, voit tarkistaa yksityiskohdat seuraavassa linkissä.