Release fan de LLVM 11.0-kompilersuite

Nei seis moannen fan ûntwikkeling presintearre projekt release LLVM 11.0 - GCC-kompatibele ark (kompilators, optimizers en koadegenerators), kompilearjen fan programma's yn intermediate bitcode fan RISC-lykas firtuele ynstruksjes (leech-level firtuele masine mei in multi-level optimisaasjesysteem). De oanmakke pseudokoade kin wurde omboud mei in JIT-kompiler yn masineynstruksjes direkt op it momint fan útfiering fan it programma.

De kaai feroaring yn de nije release wie it opnimmen fan Flank, in frontend foar de Fortran-taal. Flang stipet Fortran 2018, OpenMP 4.5 en OpenACC 3.0, mar de ûntwikkeling fan it projekt is noch net foltôge en it front-end is beheind ta koade-parsearjen en kontrolearjen op korrektheid. Generaasje fan LLVM-tuskenkoade wurdt noch net stipe en om útfierbere bestannen te generearjen, wurdt kanonike koade oanmakke en trochjûn oan in eksterne Fortran-kompiler.

Ferbetterings yn Clang 11.0:

  • De mooglikheid tafoege om de abstrakte syntaksisbeam te herstellen (AST) foar brutsen C++-koade, dy't kin wurde brûkt om te helpen by it diagnostearjen fan flaters en jout ekstra ynformaasje oan eksterne nutsbedriuwen lykas clang-tidy en clangd. De funksje is standert ynskeakele foar C++-koade en wurdt regele troch de opsjes "-Xclang -f[no-]recovery-ast".
  • Nije diagnostyske modi tafoege:
    • "-Wpointer-to-int-cast" is in groep warskôgings oer it casten fan oanwizers nei in integer type int dy't net alle mooglike wearden passe.
    • "-Wuninitialized-const-reference" - warskôging oer it trochjaan fan net-initialisearre fariabelen yn funksjeparameters dy't referinsjearguminten akseptearje mei it "const"-attribút.
    • "-Wimplicit-const-int-float-conversion" - standert ynskeakele warskôging oer ymplisite konverzje fan in echte konstante nei in hiel getal type.
  • Foar it ARM-platfoarm wurde C-funksjes ynboud yn 'e kompilator levere (Intrinsics), ferfongen troch effisjinte vector ynstruksjes Arm v8.1-M MVE en CDE. De beskikbere funksjes wurde definiearre yn de koptekst triemmen arm_mve.h en arm_cde.h.
  • Added in set fan útwreide integer typen _ExtInt (N), sadat jo te meitsjen typen dy't gjin multiples fan machten fan twa, dat kin wurde effisjint ferwurke op FPGA / HLS. Bygelyks, _ExtInt(7) definiearret in hiel getal type besteande út 7 bits.
  • Makro's tafoege dy't stipe definiearje foar ynboude C-funksjes basearre op ARM SVE (Scalable Vector Extension) ynstruksjes:
    __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. Bygelyks, de __ARM_FEATURE_SVE makro wurdt definiearre by it generearjen fan AArch64-koade troch it ynstellen fan de kommandorigelopsje "-march=armv8-a+sve".

  • De flagge "-O" wurdt no identifisearre mei de "-O1" optimisaasjemodus ynstee fan "-O2".
  • Nije kompilerflaggen tafoege:
    • "-fstack-clash-protection" - makket beskerming tsjin krusingen fan stack en heap.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - lit jo de útsûnderingshannelermodus selektearje foar driuwende kommanûmers.
    • "-ffp-model={precise,strict,fast}" - Simplifies tagong ta in searje spesjalisearre opsjes foar driuwende kommanûmers.
    • "-fpch-codegen" en "-fpch-debuginfo" om in foarkompilearre koptekst (PCH) te generearjen mei aparte objektbestannen foar koade en debuginfo.
    • "-fsanitize-coverage-allowlist" en "-fsanitize-coverage-blocklist" foar it kontrolearjen fan dekking testen fan wite en swarte listen.
    • "-mtls-size={12,24,32,48}" om de TLS (thread-lokale opslach) grutte te selektearjen.
    • "-menable-experimental-extension" om eksperimintele RISC-V-útwreidingen yn te skeakeljen.
  • De standert modus foar C is "-fno-common", wêrtroch effisjintere tagong ta globale fariabelen op guon platfoarms mooglik is.
  • De standert module-cache is ferpleatst fan /tmp nei de ~/.cache-map. Om te oerskriuwen kinne jo de flagge "-fmodules-cache-path=" brûke.
  • De standert C-taalstandert is bywurke fan gnu11 nei gnu17.
  • Foarriedige stipe tafoege foar GNU C-útwreiding "asm ynline» om assembler-ynfoegingen ta te foegjen. De útwreiding wurdt noch analysearre, mar op gjin inkelde manier ferwurke.
  • De mooglikheden ferbûn mei OpenCL en CUDA-stipe binne útwreide. Stipe tafoege foar OpenCL 2.0-blokdiagnoaze en nije OpenMP 5.0-funksjes ymplementearre.
  • Added IndentExternBlock-opsje foar clang-formaat hulpprogramma foar ôfstimming binnen eksterne "C" en eksterne "C++" blokken.
  • De statyske analysator hat ferbettere ôfhanneling fan erfde konstruktors yn C ++. Nije kontrôles tafoege alpha.core.C11Lock en alpha.fuchsia.Lock om te kontrolearjen op slûzen, alpha.security.cert.pos.34c om ûnfeilich gebrûk fan putenv, webkit.NoUncountedMemberChecker en webkit.RefCntblBaseVirtualDtor te detektearjen om problemen mei alpha-ûntelbere soarten te detektearjen .cplusplus .SmartPtr om te kontrolearjen op nul smart pointer dereference.
  • Yn linter clang-tidy tafoege in grut part fan nije sjeks.
  • De clangd-caching-tsjinner (Clang Server) hat prestaasjes ferbettere en nije diagnostyske mooglikheden tafoege.

haad ynnovaasjes LLVM 11.0:

  • It bousysteem is oerskeakele op it brûken fan Python 3. As Python 3 net beskikber is, is it mooglik om werom te gean nei it brûken fan Python 2.
  • De foarkant mei de gearstaller foar de Go-taal (llgo) is útsletten fan 'e release, dy't yn' e takomst werstrukturearre wurde kin.
  • It attribút vector-function-abi-fariant is tafoege oan 'e intermediate representation (IR) om de mapping te beskriuwen tusken skalêre en vectorfunksjes om oproppen te vektorisearjen. Fan llvm :: VectorType binne der twa aparte vector typen llvm :: FixedVectorType en llvm :: ScalableVectorType.
  • Fertakking basearre op udef-wearden en it trochjaan fan undef-wearden nei standert bibleteekfunksjes wurdt erkend as ûndefinieare gedrach. YN
    memset/memcpy/memmove kinne trochjaan undef pointers, mar as de parameter mei grutte is nul.

  • LLJIT hat stipe tafoege foar it útfieren fan statyske inisjalisaasjes fia de metoaden LLJIT :: initialize en LLJIT :: deinitialize. De mooglikheid om statyske bibleteken ta te foegjen oan JITDylib mei de klasse StaticLibraryDefinitionGenerator is ymplementearre. Added C API foar ORCv2 (API foar it bouwen fan JIT-kompilers).
  • Stipe foar Cortex-A64, Cortex-A34, Cortex-A77 en Cortex-X78-processors is tafoege oan 'e efterkant foar de AArch1-arsjitektuer. Implementearre ARMv8.2-BF16 (BFloat16) en ARMv8.6-A-útwreidingen, ynklusyf RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (virtualisaasje fan Activity Monitors) en ARMv8.0-DGH (Gegevens sammelje hint). De mooglikheid om te generearjen koade foar ynboude funksjes-bindingen oan SVE vector ynstruksjes wurdt foarsjoen.
  • Stipe foar Cortex-M55, Cortex-A77, Cortex-A78 en Cortex-X1-processors is tafoege oan 'e efterkant foar de ARM-arsjitektuer. Tafoegings útfierd
    Armv8.6-A Matrix Multiply en RMv8.2-AA32BF16 BFloat16.

  • Stipe foar koadegeneraasje foar POWER10-processors is tafoege oan 'e efterkant foar de PowerPC-arsjitektuer. Loop-optimisaasjes binne útwreide en driuwende puntstipe is ferbettere.
  • De backend foar de RISC-V-arsjitektuer lit de akseptaasje fan patches mooglik meitsje dy't eksperimintele útwreide ynstruksjesets stypje dy't noch net offisjeel goedkard binne.
  • De backend foar de AVR-arsjitektuer is oerbrocht fan 'e eksperimintele kategory nei stabyl, opnommen yn' e basisferdieling.
  • De backend foar x86-arsjitektuer stipet Intel AMX- en TSXLDTRK-ynstruksjes. Tafoege beskerming tsjin oanfallen LVI (Laadwearde-ynjeksje), en ymplementearret ek in algemiene spekulative útfiering Side Effect-ûnderdrukkingsmeganisme om oanfallen te blokkearjen feroarsake troch spekulative útfiering fan operaasjes op 'e CPU.
  • Yn 'e efterkant foar de SystemZ-arsjitektuer is stipe foar MemorySanitizer en LeakSanitizer tafoege.
  • Stipe tafoege foar koptekstbestân mei wiskundige konstanten oan Libc ++ .
  • Utwreide LLD linker mooglikheden. Ferbettere stipe foar it ELF-formaat, ynklusyf de tafoege opsjes "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-unyk", "-rosegment", "-threads=N". Tafoege "--time-trace" opsje om it spoar te bewarjen yn in bestân, dat dan kin wurde analysearre fia de chrome://tracing-ynterface yn Chrome.

Boarne: opennet.ru

Add a comment