LLVM 11.0 kompiliatoriaus rinkinio išleidimas

Po šešių mėnesių vystymosi pateiktas projekto leidimas LLVM 11.0 - Su GCC suderinami įrankiai (kompiliatoriai, optimizatoriai ir kodų generatoriai), kurie kompiliuoja programas į tarpinį RISC tipo virtualių komandų bitų kodą (žemo lygio virtuali mašina su kelių lygių optimizavimo sistema). Sukurtą pseudo kodą JIT kompiliatorius gali konvertuoti į mašinos komandas iškart programos vykdymo metu.

Pagrindinis naujojo leidimo pakeitimas buvo įtraukimas flanšas, Fortran kalbos priekinė dalis. „Flang“ palaiko „Fortran 2018“, „OpenMP 4.5“ ir „OpenACC 3.0“, tačiau projekto kūrimas dar nebaigtas, o priekinė dalis apsiriboja kodo analizavimu ir jo teisingumo patikrinimu. LLVM tarpinis kodo generavimas dar nepalaikomas, o norint sugeneruoti vykdomuosius failus, sugeneruojamas kanoninis kodas ir perduodamas išoriniam Fortran kompiliatoriui.

Patobulinimai Clang 11.0:

  • Pridėta galimybė atkurti abstrakčią sintaksės medį (AST). Funkcija pagal numatytuosius nustatymus įjungta C++ kodui ir valdoma naudojant „-Xclang -f[no-]recovery-ast“ parinktis.
  • Pridėta naujų diagnostikos režimų:
    • „-Wpointer-to-int-cast“ yra įspėjimų apie rodyklių perdavimą į sveikojo skaičiaus int tipą, kuriame nėra visų galimų reikšmių, grupė.
    • „-Wuninitialized-const-reference“ – įspėjimas apie nepainicijuotų kintamųjų perdavimą funkcijų parametruose, kurie priima nuorodos argumentus su atributu „const“.
    • „-Wimplicit-const-int-float-conversion“ yra įspėjimas apie netiesioginį realios konstantos konvertavimą į sveikojo skaičiaus tipą, įjungtą pagal numatytuosius nustatymus.
  • ARM platformai pateikiamos kompiliatoriuje įmontuotos C funkcijos (Esminės savybės) pakeičiamas efektyviomis Arm v8.1-M MVE ir CDE vektorinėmis instrukcijomis. Galimos funkcijos yra apibrėžtos arm_mve.h ir arm_cde.h antraštės failuose.
  • Pridėta išplėstinių sveikųjų skaičių tipų rinkinys _ExtInt(N), leidžiantis sukurti tipus, kurie nėra dviejų laipsnio kartotiniai, kuriuos galima efektyviai apdoroti naudojant FPGA / HLS. Pavyzdžiui, _ExtInt(7) apibrėžia sveikojo skaičiaus tipą, susidedantį iš 7 bitų.
  • Pridėtos makrokomandos, apibrėžiančios integruotų C funkcijų palaikymą, remiantis ARM SVE (Scalable Vector Extension) instrukcijomis:
    __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. Pavyzdžiui, makrokomanda __ARM_FEATURE_SVE apibrėžiama generuojant AArch64 kodą su komandinės eilutės parinktimi „-march=armv8-a+sve“.

  • „-O“ vėliavėlė dabar identifikuojama su optimizavimo režimu „-O1“, o ne „-O2“.
  • Pridėtos naujos kompiliatoriaus vėliavėlės:
    • „-fstack-clash-protection“ – įgalina apsaugą nuo rietuvės ir krūvos sankirtos.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" – leidžia pasirinkti slankaus kablelio skaičių išimties apdorojimo režimą.
    • „-ffp-model={precise,strict,fast}“ supaprastina prieigą prie specializuotų slankaus kablelio skaičių parinkčių.
    • „-fpch-codegen“ ir „-fpch-debuginfo“, kad sugeneruotų iš anksto sukompiliuotą antraštę (PCH) su atskirais objektų failais kodui ir derinimo informacijai.
    • „-fsanitize-coverage-allowlist“ ir „-fsanitize-coverage-blocklist“, kad patikrintumėte baltojo ir juodojo sąrašo aprėpties testavimą.
    • „-mtls-size={12,24,32,48}“, kad pasirinktumėte TLS (vietinės gijos saugyklos) dydį.
    • „-menable-experimental-extension“, kad įgalintumėte eksperimentinius RISC-V plėtinius.
  • Pagal numatytuosius nustatymus C naudoja "-fno-common" režimą, kuris leidžia efektyviau pasiekti pasaulinius kintamuosius kai kuriose platformose.
  • Numatytoji modulio talpykla perkelta iš /tmp į ~/.cache katalogą. Norėdami nepaisyti, galite naudoti vėliavėlę "-fmodules-cache-path=".
  • Numatytasis C standartas buvo atnaujintas iš gnu11 į gnu17.
  • Pridėtas preliminarus GNU C plėtinio palaikymas "asm linija» pridėti surinkėjų įdėklus. Plėtinys kol kas tik išanalizuotas, bet jokiu būdu neapdorotas.
  • Išplėstos galimybės, susijusios su OpenCL ir CUDA palaikymu. Pridėtas OpenCL 2.0 blokų diagnostikos palaikymas ir įdiegtos naujos OpenMP 5.0 funkcijos.
  • Pridėta „IndentExternBlock“ parinktis, skirta skambėjimo formato programai, skirta suderinti išorinius „C“ ir išorinius „C++“ blokus.
  • Patobulintas paveldėtų konstruktorių valdymas C++ kalba statiniame analizatoriuje. Pridėtos naujos patikros alpha.core.C11Lock ir alpha.fuchsia.Lock, kad patikrintų, ar nėra užraktų, alpha.security.cert.pos.34c, kad aptiktų nesaugų putenv naudojimą, webkit.NoUncountedMemberChecker ir webkit.RefCntblBaseVirtualDtor, kad aptiktų nesuskaičiuojamų tipų problemas, alpha .cplusplus .SmartPtr, kad patikrintumėte, ar nėra nulinės išmaniosios žymeklio nuorodos.
  • Tvarkingas pridėta didelė dalis naujų čekių.
  • Talpyklos serveris clangd (Clang Server) pagerino našumą ir pridėjo naujų diagnostikos galimybių.

pagrindinis naujoves LLVM 11.0:

  • Sukūrimo sistema buvo perjungta į Python 3. Jei Python 3 nepasiekiamas, buvo įdiegta galimybė grįžti prie Python 2.
  • Prietaisas su Go kalbos (llgo) kompiliatoriumi neįtraukiamas į leidimą, kuris ateityje gali būti pertvarkytas.
  • Atributas vektorinis-funkcija-abi-variantas buvo pridėtas prie tarpinio vaizdavimo (IR), kad apibūdintų skaliarinių ir vektorinių funkcijų susiejimą su skambučio vektorizavimu. Du atskiri vektorių tipai llvm::FixedVectorType ir llvm::ScalableVectorType yra atskirti nuo lvm::VectorType.
  • Laikoma neapibrėžtu elgesiu išsišakoti remiantis uef reikšmėmis ir perduoti undef reikšmes standartinėms bibliotekos funkcijoms. IN
    memset/memcpy/memmove undef rodyklių perdavimas leidžiamas, bet jei parametras su dydžiu yra nulis.

  • LLJIT pridėjo statinio inicijavimo palaikymą naudojant LLJIT::initialize ir LLJIT::deinitialize metodus. Įdiegta galimybė pridėti statinių bibliotekų į JITDylib naudojant StaticLibraryDefinitionGenerator klasę. Pridėta C API, skirta ORCv2 (API JIT kompiliatoriams kurti).
  • Pridėtas Cortex-A64, Cortex-A34, Cortex-A77 ir Cortex-X78 procesorių palaikymas AArch1 architektūros fone. Įdiegti ARMv8.2-BF16 (BFloat16) ir ARMv8.6-A plėtiniai, įskaitant RMv8.6-ECV (patobulintą skaitiklio virtualizavimą), ARMv8.6-FGT (smulkios spalvos spąstus), ARMv8.6-AMU (aktyvumo monitorių virtualizavimą) ir ARMv8.0-DGH (duomenų rinkimo užuomina). Suteikiama galimybė generuoti kodą integruotoms SVE vektorinių instrukcijų vyniojimo funkcijoms.
  • Cortex-M55, Cortex-A77, Cortex-A78 ir Cortex-X1 procesorių palaikymas buvo įtrauktas į ARM architektūros užpakalinę dalį. Įdiegti plėtiniai
    Armv8.6-A Matrix Multiply ir RMv8.2-AA32BF16 BFloat16.

  • Pridėtas kodo generavimo palaikymas POWER10 procesoriams prie „PowerPC“ architektūros sistemos. Išplėstas ciklo optimizavimas ir patobulintas slankaus kablelio operacijų palaikymas.
  • RISC-V architektūros užpakalinei programai leidžiama priimti pataisas su eksperimentinių išplėstinių instrukcijų rinkinių, kurie dar nebuvo oficialiai patvirtinti, palaikymu.
  • AVR architektūros užpakalinė dalis buvo perkelta iš eksperimentinės kategorijos į stabilią, įtrauktą į bazinį paketą.
  • x86 architektūros užpakalinė programa palaiko Intel AMX ir TSXLDTRK instrukcijas. Pridėta apsauga nuo atakų LVI (Load Value Injection), taip pat bendras spekuliacinio vykdymo šalutinio poveikio slopinimo mechanizmas yra įdiegtas blokuoti atakas, kurias sukelia spekuliatyvus operacijų vykdymas CPU.
  • Pridėtas „MemorySanitizer“ ir „LeakSanitizer“ palaikymas „SystemZ“ foninėje sistemoje.
  • Antraštės failo su matematinėmis konstantomis palaikymas buvo įtrauktas į Libc++ .
  • Išplėstas LLD linkerio galimybės. Patobulintas ELF formato palaikymas, įskaitant „--lto-emit-asm“, „--lto-whole-program-visibility“, „--print-archive-stats“, „--shuffle-sections“, „--“ pridėjimą. thinlto- vieno modulio“, „--unikalus“, „--rosegmentas“, „--threads=N“. Pridėta parinktis „--time-trace“, kad išsaugotumėte pėdsaką faile, kurį vėliau būtų galima analizuoti naudojant „Chrome“ sąsają chrome://tracing.

Šaltinis: opennet.ru

Добавить комментарий