LLVM 11.0 kompilaatorite komplekti väljaanne

Pärast kuue kuu arendustööd esitatud projekti väljaanne LLVM 11.0 — GCC ühilduvate tööriistade (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerivad programme RISC-sarnaste virtuaalsete käskluste vahebitkoodiks (madala taseme virtuaalne masin koos mitmeastmelise optimeerimissüsteemiga). Generateeritud pseudokood saab JIT-kompilaatori abil muudetud otse programmi täitmise ajal masina käsklusteks.

Uue versiooni peamine muudatus on Flang, Fortrani keele front-end. Flang toetab Fortran 2018, OpenMP 4.5 ja OpenACC 3.0, kuid projekti arendamine ei ole veel lõpetatud ja front-end piirdub koodi analüüsi ja selle õigsuse kontrollimisega. LLVM vaheversioonikoodi genereerimine ei ole veel toetatud ja täitmisfailide genereerimiseks luuakse kanoniline kood, mis edastatakse välisha Fortran kompilaatorile.

Parandused Clang 11.0-s:

  • Lisatud abstraktse süntakspuude taastamise võimalus (AST) valevale vale valeve C++ code, mis argab vale vale vale valeval mixed qamdini tdava. tagad abos valdos aryn davat iepriekš iepriekš iepriekš -Xclang -f[no-]recovery-ast.
  • Pievieno jaunas diagnostikas režīmus:
    • «-Wpointer-to-int-cast» — grupācijas brīdinājumi, kas saistīti ar norādītāju pārvēršanu veselos int tipos, kuri var neietilpt visos iespējamos vērtībās.
    • «-Wuninitialized-const-reference» — brīdinājums par nenosakāmu mainīgo nodošanu funkciju parametru koda, kas ņem ar inconst norādi.
    • «-Wimplicit-const-int-float-conversion» — ieslēgta noklusējuma brīdinājums par netiešo patžeņu pārvēršanu veselu tipu.
  • ARM platformai ir iekļautas compiler C funkcijas (Intrinsics), kas tiek aizstātas ar efektīvām vektoru instrukcijām Arm v8.1-M MVE un CDE. Pieejamās funkcijas ir definētas galvenes failos arm_mve.h un arm_cde.h.
  • Lisatud paplašinātie veselo skaitļu tipu _ExtInt(N), kas ļauj veidot tikumus, kas nav dubultā pakāpes daļa un efektīvi apstrādājamas uz FPGA/HLS. Piemēram, _ExtInt(7) määrab täisarvu tüübi, mis koosneb 7 bitist.
  • Lisatud makrosid, mis määravad ARM SVE (Scalable Vector Extension) käsu toega C funktsioonide toe:
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. Näiteks makro __ARM_FEATURE_SVE määratakse, kui genereeritakse kood AArch64 käsuvaliku võimalusega «-march=armv8-a+sve».
  • Lipp «-O» on nüüd seotud optimeerimisrežiimiga «-O1» mitte «-O2».
  • Lisatud uusi kompilaatorilippude:
    • «-fstack-clash-protection» — aktiveerib kaitse stacki ja heap'i ristumiste vastu.
    • «-ffp-exception-behavior={ignore,maytrap,strict}» — võimaldab valida eristuse režiimi ujuvate punktide numbrite jaoks.
    • «-ffp-model={precise,strict,fast}» — lihtsustab juurdepääsu seeriale spetsialiseeritud valikutele ujuvate punktide numbrite jaoks.
    • «-fpch-codegen» ja «-fpch-debuginfo» genereerimisel eelkompileeritud päise (PCH) eraldi objektifailidega koodi ja debuginfo jaoks.
    • «-fsanitize-coverage-allowlist» ja «-fsanitize-coverage-blocklist» katsetamiseks valgel ja mustal nimekirjal coverage-teste.
    • «-mtls-size={12,24,32,48}» TLS (teema kohaliku salvestuse) suuruse valimiseks.
    • «-menable-experimental-extension» RISC-V eksperimentaalsete laienduste lubamiseks.
  • Vaikimisi on C jaoks rakendatud režiim „-fno-common”, mis võimaldab tõhustada juurdepääsu globaalsetele muutujaile mõnedes platvormides.
  • Modulite vahemälu on vaikimisi kolitud katalooge ~/.cache. Ülekirjutamiseks saab kasutada lippu «-fmodules-cache-path=».
  • Vaikimisi C keele standard on uuendatud gnu11-lt gnu17-le.
  • Eelnev tugi GNU C laiendusele «asm inline» assambleerimisosade lisamiseks. Laiendust töödeldakse praegu ainult süntaksina, mitte kui töötavat koodi.
  • Avasid on laienetud OpenCL ja CUDA toe tagamiseks. Lisatud OpenCL 2.0 plokkide diagnostika ja uued võimalused OpenMP 5.0.
  • Clang-formaatimise utiliiti on lisatud valik IndentExternBlock, et joondada blokke extern «C» ja extern «C++» sees.
  • Staatilises analüsaatoris on parandatud C++ päritud konstruktorite töötlemist. Lisatud uued kontrollid alpha.core.C11Lock ja alpha.fuchsia.Lock lukustuste kontrollimiseks, alpha.security.cert.pos.34c ohutuks kasutamiseks putenv, webkit.NoUncountedMemberChecker ja webkit.RefCntblBaseVirtualDtor mittesoodustuslike tüüpide probleemide tuvastamiseks, alpha.cplusplus.SmartPtr nullist nutika näidiku tühistamiseks.
  • clang-tidy lintija on lisatud on saanud hulga uusi kontrolle.
  • Clangd (Clang Server) vahetserveris on paranenud jõudlus ja lisatud uued diagnostika võimalused.

Peamised uuendused LLVM 11.0:

  • Kogumissüsteem on muudetud Python 3 kasutamiseks. Kui Python 3 ei ole saadaval, on rakendatud võimalus tagasiminek Python 2 kasutamiseks.
  • Väljalaskest on välistatud Go (llgo) keele kompilaatori front-end, mida võib tulevikus restruktureerida.
  • Vaheesituseks (IR) on lisatud atribuut vector-function-abi-variant, et kirjeldada mapimist skalaarsete ja vektorite funktsioonide vahel vektorimise kutsungite jaoks. llvm::VectorType-st on välja toodud kaks eraldi vektortüüpi: llvm::FixedVectorType ja llvm::ScalableVectorType.
  • On tunnustatud määramatuks käitumiseks haru loomine udef-väärtuste põhjal ja undef-väärtuste edastamine standardraamatukogu funktsioonidesse. V
    memset/memcpy/memmove on lubatud edastada undef-punktoreid, kuid kui suuruse parameeter on null.
  • LLJIT-sse on lisatud toetust staatiliste initsialiseerimiste täitmisele läbi meetodite LLJIT::initialize ja LLJIT::deinitialize. Rakendatud on võimalus lisada staatilisi raamatukogusid JITDylib-ile StaticLibraryDefinitionGenerator klassi abil. Sein on lisatud C API ORCv2 (JIT-kompilaatorite koostamise API).
  • AArch64 arhitektuuri taustajõul on lisatud tugi Cortex-A34, Cortex-A77, Cortex-A78 ja Cortex-X1 protsessoritele. Rakendatud on ARMv8.2-BF16 (BFloat16) ja ARMv8.6-A laiendused, sealhulgas RMv8.6-ECV (parendatud vastuvõtu virtualiseerimine), ARMv8.6-FGT (peene lõksud), ARMv8.6-AMU (aktiivsuse monitoride virtualiseerimine) ja ARMv8.0-DGH (andmete kogumise vihje). Tagatud on koodi genereerimise võimalus SVE vektoriinstruktsioonide jaoks mõeldud sisseehitatud funktsioonide juurdepääsu jaoks.
  • ARM arhitektuuri taustajõul on lisatud tugi Cortex-M55, Cortex-A77, Cortex-A78 ja Cortex-X1 protsessoritele. Rakendatud on laiendused
    Armv8.6-A Matrix Multiply ja RMv8.2-AA32BF16 BFloat16.
  • PowerPC arhitektuuri taustajõul on lisatud tugi koodi genereerimiseks POWER10 protsessorite jaoks. Tsüklite optimeerimisi on laiendatud ja ujuvkomaar operations-i toekson parendatud.
  • RISC-V arhitektuuri taustajõul on lubatud sümptomite vastuvõtmine eksperimenteerimise laiendatud instruktsetsioonide toetamiseks, mis pole veel ametlikult heaks kiidetud.
  • AVR arhitektuuri taustajõud on viidud eksperimentaalsest kategooriast stabiilsete, põhivarustusse kuuluvate hulka.
  • x86 arhitektuuri taustajõul on rakendatud Intel AMX ja TSXLDTRK instruktsetsioonide toekson. Lisatud on kaitse rünnakute eest LVI (Load Value Injection) ja on rakendatud üldine mehhanism Speculative Execution Side Effect Suppression spekulatiivse täitmisega seotud rünnakute blokeerimiseks CPU-s.
  • Backendis süsteemi arhitektuurile SystemZ on lisatud MemorySanitizeri ja LeakSanitizeri tugi.
  • Libc++-sse on lisatud matemaatiliste konstantide päisefaili tugi. <numbers>.
  • Laienud LLD linkeri võimalused. ELF formaadi tugi on paranenud, lisatud on valikud «—lto-emit-asm», «—lto-whole-program-visibility», «—print-archive-stats», «—shuffle-sections», «—thinlto-single-module», «—unique», «—rosegment», «—threads=N». Lisatud on valik «—time-trace» jälituse salvestamiseks faili, mida saab seejärel analüüsida Chrome'i liidese kaudu chrome://tracing.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster