Vrijgave van de LLVM 13.0-compilersuite

Na zes maanden ontwikkeling werd de release van het LLVM 13.0-project gepresenteerd: een GCC-compatibele toolkit (compilers, optimizers en codegenerators) die programma's compileert in tussenliggende bitcode van RISC-achtige virtuele instructies (een virtuele machine op laag niveau met een optimalisatiesysteem op meerdere niveaus). De gegenereerde pseudocode kan met behulp van een JIT-compiler direct tijdens de programma-uitvoering in machine-instructies worden omgezet.

Verbeteringen in Clang 13.0:

  • Ondersteuning geïmplementeerd voor gegarandeerde staartoproepen (het aanroepen van een subroutine helemaal aan het einde van een functie, het vormen van een staartrecursie als de subroutine zichzelf aanroept). Ondersteuning voor gegarandeerde tail-aanroepen wordt geleverd door het kenmerk "[[clang::musttail]]" in C++ en "__attribute__((musttail))" in C, gebruikt in een "return"-instructie. Met deze functie kunt u optimalisaties implementeren door code in een platte iteratie te implementeren om stackverbruik te besparen.
  • "using"-declaraties en clang-extensies bieden ondersteuning voor het definiëren van attributen in C++11-stijl met behulp van het "[[]]"-formaat.
  • Vlag "-Wreserved-identifier" toegevoegd om een ​​waarschuwing weer te geven wanneer gereserveerde identifiers zijn opgegeven in de gebruikerscode.
  • Vlaggen "-Wunused-but-set-parameter" en "-Wunused-but-set-variable" toegevoegd om een ​​waarschuwing weer te geven als een parameter of variabele is ingesteld maar niet wordt gebruikt.
  • Vlag "-Wnull-pointer-subtraction" toegevoegd om een ​​waarschuwing te geven als de code ongedefinieerd gedrag zou kunnen introduceren vanwege het gebruik van een null-pointer bij aftrekkingsbewerkingen.
  • De vlag "-fstack-usage" toegevoegd om voor elk codebestand een extra ".su"-bestand te genereren met informatie over de grootte van stapelframes voor elke functie die is gedefinieerd in het bestand dat wordt verwerkt.
  • Er is een nieuw uitvoertype toegevoegd aan de statische analysator - "sarif-html", wat leidt tot het gelijktijdig genereren van rapporten in HTML- en Sarif-formaten. Nieuwe allocClassWithName-controle toegevoegd. Wanneer u de optie “-analyzer-display-progress” specificeert, wordt de analysetijd van elke functie weergegeven. De slimme pointer-analysator (alpha.cplusplus.SmartPtr) is bijna klaar.
  • De mogelijkheden die verband houden met OpenCL-ondersteuning zijn uitgebreid. Ondersteuning toegevoegd voor de nieuwe extensies cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields en __cl_clang_non_portable_kernel_param_types. De implementatie van de OpenCL 3.0-specificatie is voortgezet. Voor C wordt standaard de OpenCL 1.2-specificatie gebruikt, tenzij expliciet een andere versie wordt geselecteerd. Voor C++ is ondersteuning voor bestanden met de extensie “.clcpp” toegevoegd.
  • Ondersteuning voor lustransformatierichtlijnen (“#pragma omp unrol” en “#pragma omp tegel”) gedefinieerd in de OpenMP 5.1-specificatie is geïmplementeerd.
  • Opties toegevoegd aan het clang-format-hulpprogramma: SpacesInLineCommentPrefix om het aantal spaties vóór commentaar te definiëren, IndentAccessModifiers, LambdaBodyIndentation en PPIndentWidth om de uitlijning van items, lambda-expressies en preprocessor-richtlijnen te controleren. De mogelijkheden voor het sorteren van de opsomming van headerbestanden (SortIncludes) zijn uitgebreid. Ondersteuning toegevoegd voor het formatteren van JSON-bestanden.
  • Er is een groot deel van de nieuwe cheques toegevoegd aan het linter-clang-tidy.

Belangrijkste innovaties in LLVM 13.0:

  • De optie “-ehcontguard” toegevoegd om CET-technologie (Windows Control-flow Enforcement Technology) te gebruiken ter bescherming tegen de uitvoering van exploits die zijn gebouwd met behulp van Return-Oriented Programming (ROP)-technieken in de fase van uitzonderingsafhandeling.
  • Het debuginfo-test-project is hernoemd tot cross-project-tests en is ontworpen om componenten uit verschillende projecten te testen, niet beperkt tot foutopsporingsinformatie.
  • Het assemblagesysteem biedt ondersteuning voor het bouwen van verschillende distributies, bijvoorbeeld één met hulpprogramma's en de andere met bibliotheken voor ontwikkelaars.
  • In de backend voor de AArch64-architectuur is ondersteuning voor de Armv9-A RME (Realm Management Extension) en SME (Scalable Matrix Extension) extensies geïmplementeerd in de assembler.
  • Ondersteuning voor ISA V68/HVX is toegevoegd aan de backend voor de Hexagon-architectuur.
  • De x86-backend heeft verbeterde ondersteuning voor AMD Zen 3-processors.
  • Ondersteuning toegevoegd voor GFX1013 RDNA2 APU aan de AMDGPU-backend.
  • Libc++ blijft nieuwe functies van de C++20- en C++2b-standaarden implementeren, waaronder de voltooiing van de ‘conceptenbibliotheek’. Ondersteuning toegevoegd voor std::filesystem voor het op MinGW gebaseerde Windows-platform. Headerbestanden gescheiden , En . Bouwoptie LIBCXX_ENABLE_INCOMPLETE_FEATURES toegevoegd om headerbestanden met niet volledig geïmplementeerde functionaliteit uit te schakelen.
  • De mogelijkheden van de LLD-linker zijn uitgebreid, waarbij ondersteuning voor Big-endian Aarch64-processors is geïmplementeerd, en de Mach-O-backend is in een staat gebracht die het koppelen van reguliere programma's mogelijk maakt. Inclusief verbeteringen die nodig zijn om Glibc te koppelen met behulp van LLD.
  • Het hulpprogramma llvm-mca (Machine Code Analyzer) heeft ondersteuning toegevoegd voor processors die instructies in volgorde uitvoeren (in-order superscalaire pijplijn), zoals de ARM Cortex-A55.
  • De LLDB-debugger voor het AArch64-platform biedt volledige ondersteuning voor Pointer Authentication, MTE (MemTag, Memory Tagging Extension) en SVE-registers. Er zijn opdrachten toegevoegd waarmee u tags aan elke geheugentoewijzingsbewerking kunt binden en een controle van de aanwijzer kunt organiseren bij toegang tot geheugen, dat aan de juiste tag moet worden gekoppeld.
  • De LLDB-foutopsporing en de frontend voor de Fortran-taal - Flang zijn toegevoegd aan de binaire assemblages die door het project zijn gegenereerd.

Bron: opennet.ru

Voeg een reactie