Verëffentlechung vun der LLVM 11.0 Compiler Suite

No sechs Méint Entwécklung presentéiert Projet Verëffentlechung LLVM 11.0 - GCC-kompatibel Tools (Compilatoren, Optimisateuren a Code Generatoren), kompiléiere Programmer an Zwëschen Bitcode vu RISC-ähnleche virtuelle Instruktiounen (niddereg virtuell Maschinn mat engem Multi-Level Optimiséierungssystem). De generéierte Pseudocode ka mat engem JIT Compiler a Maschinninstruktiounen direkt zur Zäit vun der Ausféierung vum Programm ëmgewandelt ginn.

De Schlëssel Ännerung an der neier Verëffentlechung war d'Inklusioun vun Flank, Frontend fir d'Fortran Sprooch. Flang ënnerstëtzt Fortran 2018, OpenMP 4.5 an OpenACC 3.0, awer d'Entwécklung vum Projet ass nach net ofgeschloss an de Frontend ass limitéiert op Code Parsing a Kontrollen fir Richtegkeet. Generatioun vum LLVM Zwëschencode gëtt nach net ënnerstëtzt a fir ausführbar Dateien ze generéieren, gëtt kanonesche Code generéiert an un en externen Fortran Compiler weiderginn.

Verbesserungen am Clang 11.0:

  • D'Fäegkeet bäigefüügt fir den abstrakte Syntaxbaum ze restauréieren (AST) fir gebrach C++ Code, dee ka benotzt ginn fir Feeler ze diagnostizéieren an zousätzlech Informatioune fir extern Utilities wéi clang-tidy a clangd. D'Fonktioun ass als Standard fir C ++ Code aktivéiert a gëtt iwwer d'"-Xclang -f[no-]recovery-ast" Optiounen kontrolléiert.
  • Nei Diagnosmodi bäigefüügt:
    • "-Wpointer-to-int-cast" ass e Grupp vu Warnungen iwwer d'Casting vun Hiweiser op eng ganz Zuel Typ Int déi net all méiglech Wäerter aménagéieren.
    • "-Wuninitialized-const-reference" - Warnung iwwer d'Verëffentlechung vun oninitialiséierte Variablen a Funktiounsparameter déi Referenzargumenter mat dem "const" Attribut akzeptéieren.
    • "-Wimplicit-const-int-float-conversion" - aktivéiert par défaut Warnung iwwer implizit Konversioun vun enger realer Konstant op eng ganz Zuelentyp.
  • Fir d'ARM Plattform ginn C Funktiounen am Compiler agebaut (Intrinsics), ersat duerch efficace Vecteure Uweisungen Arm v8.1-M MVE an CDE. Déi verfügbar Funktiounen sinn an den Headerdateien arm_mve.h an arm_cde.h definéiert.
  • Dobäigesat eng Rei vun erweiderten ganzen Typen _ExtInt (N), erlaabt Iech Typen ze kreéieren déi net Multiple vu Muechten vun zwee sinn, déi effizient op FPGA / HLS veraarbecht kënne ginn. Zum Beispill, _ExtInt(7) definéiert eng ganz Zuelentyp déi aus 7 Bits besteet.
  • Zousätzlech Makroen déi Ënnerstëtzung fir agebaute C Funktiounen definéieren baséiert op ARM SVE (Scalable Vector Extension) Instruktiounen:
    __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. Zum Beispill gëtt de Makro __ARM_FEATURE_SVE definéiert wann Dir AArch64 Code generéiert andeems Dir d'Kommandozeiloptioun "-march=armv8-a+sve" setzt.

  • Den "-O" Fändel gëtt elo mam "-O1" Optimisatiounsmodus identifizéiert anstatt "-O2".
  • Nei Compiler Fändelen dobäigesat:
    • "-fstack-clash-protection" - erméiglecht de Schutz géint Kräizung vun Stack an Koup.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - erlaabt Iech den Ausnamehantermodus fir Floating Point Zuelen ze wielen.
    • "-ffp-model={präzis, strikt, séier}" - Vereinfacht den Zougang zu enger Serie vu spezialiséierten Optiounen fir Floating Point Zuelen.
    • "-fpch-codegen" an "-fpch-debuginfo" fir e virkompiléierten Header (PCH) mat getrennten Objektdateien fir Code an Debuginfo ze generéieren.
    • "-fsanitize-coverage-allowlist" an "-fsanitize-coverage-blocklist" fir d'Ofdeckungstest vu wäiss a schwaarze Lëschten ze kontrolléieren.
    • "-mtls-size={12,24,32,48}" fir d'TLS (Thread-Local Storage) Gréisst ze wielen.
    • "-menable-experimental-extension" fir experimentell RISC-V Extensiounen z'erméiglechen.
  • De Standardmodus fir C ass "-fno-common", wat e méi effizienten Zougang zu globale Variablen op e puer Plattformen erlaabt.
  • De Standardmodul Cache gouf vun /tmp an den ~/.cache Verzeichnis geréckelt. Fir ze iwwerschreiden, kënnt Dir de "-fmodules-cache-path =" Fändel benotzen.
  • De Standard C Sproochestandard gouf vun gnu11 op gnu17 aktualiséiert.
  • Zousätzlech Ënnerstëtzung fir GNU C Extensioun "asm inline» Assembler Inserts ze addéieren. D'Verlängerung gëtt nach analyséiert, awer op kee Fall veraarbecht.
  • D'Kapazitéite verbonne mat OpenCL an CUDA Support goufen erweidert. Ënnerstëtzung fir OpenCL 2.0 Blockdiagnostik bäigefüügt an nei OpenMP 5.0 Features implementéiert.
  • Added IndentExternBlock Optioun fir Clang-Format Utility fir Ausrichtung bannent externen "C" an externen "C++" Blocken.
  • De statesche Analysator huet verbessert Handhabung vun ierfleche Konstruktoren an C ++. Nei Kontrollen hinzugefügt alpha.core.C11Lock an alpha.fuchsia.Lock fir Spären ze kontrolléieren, alpha.security.cert.pos.34c fir onsécher Notzung vu putenv, webkit.NoUncountedMemberChecker a webkit.RefCntblBaseVirtualDtor z'entdecken fir Probleemer mat alpha uncountable Typen z'entdecken .cplusplus .SmartPtr fir null Smart Pointer dereference ze kontrolléieren.
  • An linter clang-ugeriicht dobäi e groussen Deel vun neie Schecken.
  • De Clangd Caching Server (Clang Server) huet d'Performance verbessert an nei Diagnosefäegkeeten bäigefüügt.

Haaptstrooss Innovatiounen LLVM 11.0:

  • De Build-System gouf ëmgewiesselt fir Python 3 ze benotzen. Wann Python 3 net verfügbar ass, ass et méiglech fir Python 2 ze benotzen.
  • De Frontend mam Compiler fir d'Go Sprooch (llgo) ass aus der Verëffentlechung ausgeschloss, déi an Zukunft restrukturéiert ka ginn.
  • D'Vector-Funktioun-Abi-Variant Attribut gouf zu der Zwëschenvertriedung (IR) bäigefüügt fir d'Mapping tëscht Skalar- a Vektorfunktiounen ze beschreiwen fir Uriff ze vektoriséieren. Vun llvm :: VectorType ginn et zwou separat Vecteure Zorte llvm :: FixedVectorType an llvm :: ScalableVectorType.
  • Verzweiflung baséiert op Udef Wäerter a Passéiere vun Undef Wäerter un Standard Bibliothéik Funktiounen gëtt als ondefinéiert Verhalen unerkannt. IN
    memset / memcpy / memmove erlaabt laanschtgoungen undef Pointer, mee wann de Parameter mat Gréisst null ass.

  • LLJIT huet Ënnerstëtzung bäigefüügt fir statesch Initialisatiounen duerch d'LLJIT :: initialize an LLJIT :: deinitialize Methoden ze maachen. D'Kapazitéit fir statesch Bibliothéiken op JITDylib mat der Klass StaticLibraryDefinitionGenerator ze addéieren ass ëmgesat ginn. Dobäi C API fir ORCv2 (API fir JIT Compiler ze bauen).
  • Ënnerstëtzung fir Cortex-A64, Cortex-A34, Cortex-A77 a Cortex-X78 Prozessoren gouf op de Backend fir d'AArch1 Architektur bäigefüügt. Implementéiert ARMv8.2-BF16 (BFloat16) an ARMv8.6-A Extensiounen, dorënner RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Aktivitéitsmonitorvirtualiséierung) an ARMv8.0-DGH (Datensammlung Hiweis). D'Kapazitéit fir Code ze generéieren fir agebaute Funktiounen-Bindungen zu SVE Vektorinstruktiounen gëtt zur Verfügung gestallt.
  • Ënnerstëtzung fir Cortex-M55, Cortex-A77, Cortex-A78 a Cortex-X1 Prozessoren gouf am Backend fir d'ARM Architektur bäigefüügt. Extensiounen ëmgesat
    Armv8.6-A Matrixentgasung an RMv8.2-AA32BF16 BFloat16.

  • Ënnerstëtzung fir Code Generatioun fir POWER10 Prozessoren gouf op de Backend fir d'PowerPC Architektur bäigefüügt. Loop Optimisatiounen goufen erweidert a Floating Point Support gouf verbessert.
  • De Backend fir d'RISC-V Architektur erlaabt d'Akzeptanz vu Patches déi experimentell erweidert Instruktiounssets ënnerstëtzen, déi nach net offiziell guttgeheescht goufen.
  • De Backend fir d'AVR Architektur gouf vun der experimenteller Kategorie op stabil transferéiert, abegraff an der Basisverdeelung.
  • De Backend fir x86 Architektur ënnerstëtzt Intel AMX an TSXLDTRK Instruktiounen. Zousätzlech Schutz géint Attacken Lvi (Load Value Injection), an implementéiert och en allgemenge Spekulativ Ausféierung Side Effect Suppression Mechanismus fir Attacke ze blockéieren déi duerch spekulativ Ausféierung vun Operatiounen op der CPU verursaacht ginn.
  • Am Backend fir d'SystemZ Architektur ass Ënnerstëtzung fir MemorySanitizer a LeakSanitizer bäigefüügt.
  • Zousätzlech Ënnerstëtzung fir Headerdatei mat mathematesche Konstanten op Libc ++ .
  • Erweidert LLD Linker Fäegkeeten. Verbesserte Ënnerstëtzung fir den ELF Format, inklusiv déi zousätzlech Optiounen "--lto-emit-asm", "--lto-ganz-Programm-Visibilitéit", "-print-archive-stats", "-shuffle-sections", " -thinlto- Single-Modul", "-unique", "-rosegment", "-threads=N". D'Optioun "--time-trace" bäigefüügt fir d'Spuer op eng Datei ze späicheren, déi dann iwwer d'Chrome://Tracing-Interface am Chrome analyséiert ka ginn.

Source: opennet.ru

Setzt e Commentaire