Vydání sady kompilátorů LLVM 13.0

Po šesti měsících vývoje je představeno vydání projektu LLVM 13.0 - GCC kompatibilní toolkit (kompilátory, optimalizátory a generátory kódu), který kompiluje programy do středního bitového kódu virtuálních instrukcí podobných RISC (nízkoúrovňový virtuální stroj s víceúrovňový optimalizační systém). Vygenerovaný pseudokód je možné převést JIT kompilátorem na strojové instrukce přímo v době provádění programu.

Vylepšení v Clang 13.0:

  • Implementována podpora pro zaručená koncová volání (volání podprogramu na samém konci funkce, vytvoření koncové rekurze, pokud podprogram volá sám sebe). Podpora pro zaručená koncová volání je poskytována atributem "[[clang::musttail]]" v C++ a "__attribute__((musttail))" v C, používaným v příkazu "return". Tato funkce umožňuje implementovat optimalizace nasazením kódu do ploché iterace, aby se ušetřila spotřeba zásobníku.
  • Deklarace "using" a rozšíření clang poskytují podporu pro definování atributů ve stylu C++ 11 pomocí formátu "[[]]".
  • Přidán příznak "-Wreserved-identifier" pro zobrazení varování, když jsou v uživatelském kódu specifikovány vyhrazené identifikátory.
  • Přidány příznaky "-Wunused-but-set-parameter" a "-Wunused-but-set-variable" pro zobrazení varování, pokud je parametr nebo proměnná nastavena, ale není použita.
  • Přidán příznak "-Wnull-pointer-subtraction" pro vydání varování, pokud by kód mohl zavést nedefinované chování kvůli použití nulového ukazatele v operacích odčítání.
  • Přidán příznak "-fstack-usage", aby se pro každý soubor kódu vygeneroval další soubor ".su" obsahující informace o velikosti rámců zásobníku pro každou funkci definovanou ve zpracovávaném souboru.
  • Do statického analyzátoru byl přidán nový typ výstupu – „sarif-html“, který vede ke generování reportů současně ve formátech HTML a Sarif. Přidána nová kontrola allocClassWithName. Při zadání možnosti „-analyzer-display-progress“ se zobrazí doba analýzy každé funkce. Inteligentní analyzátor ukazatelů (alpha.cplusplus.SmartPtr) je téměř připraven.
  • Možnosti spojené s podporou OpenCL byly rozšířeny. Přidána podpora pro nová rozšíření cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields a __cl_clang_non_portable_kernel_param_types. Implementace specifikace OpenCL 3.0 pokračovala. Pro C se standardně používá specifikace OpenCL 1.2, pokud není výslovně vybrána jiná verze. Pro C++ byla přidána podpora pro soubory s příponou „.clcpp“.
  • Byla implementována podpora direktiv pro transformaci smyček („#pragma omp unrol“ a „#pragma omp tile“) definovaných ve specifikaci OpenMP 5.1.
  • Do obslužného programu formátu clang byly přidány možnosti: SpacesInLineCommentPrefix pro definování počtu mezer před komentáři, IndentAccessModifiers, LambdaBodyIndentation a PPIndentWidth pro řízení zarovnání položek, výrazů lambda a direktiv preprocesoru. Rozšířeny byly možnosti řazení výčtu hlavičkových souborů (SortIncludes). Přidána podpora pro formátování souborů JSON.
  • Velká část nových kontrol byla přidána do linter clang-tidy.

Klíčové inovace v LLVM 13.0:

  • Přidána možnost „-ehcontguard“ pro použití technologie CET (Windows Control-flow Enforcement Technology) k ochraně proti spouštění exploitů vytvořených pomocí technik návratově orientovaného programování (ROP) ve fázi zpracování výjimek.
  • Projekt debuginfo-test byl přejmenován na cross-project-tests a je navržen tak, aby testoval komponenty z různých projektů, neomezoval se na informace o ladění.
  • Montážní systém poskytuje podporu pro vytváření několika distribucí, například jedné s nástroji a druhé s knihovnami pro vývojáře.
  • V backendu pro architekturu AArch64 je v assembleru implementována podpora pro rozšíření Armv9-A RME (Realm Management Extension) a SME (Scalable Matrix Extension).
  • Do backendu pro architekturu Hexagon byla přidána podpora pro ISA V68/HVX.
  • Backend x86 má vylepšenou podporu pro procesory AMD Zen 3.
  • Přidána podpora pro GFX1013 RDNA2 APU do backendu AMDGPU.
  • Libc++ pokračuje v implementaci nových funkcí standardů C++20 a C++2b, včetně dokončení knihovny „pojmů“. Přidána podpora pro std::filesystem pro platformu Windows založenou na MinGW. Soubory záhlaví odděleny , A . Přidána možnost sestavení LIBCXX_ENABLE_INCOMPLETE_FEATURES pro zakázání souborů záhlaví s ne zcela implementovanou funkcí.
  • Byly rozšířeny možnosti LLD linkeru, ve kterém je implementována podpora Big-endian procesorů Aarch64 a Mach-O backend byl uveden do stavu umožňujícího propojení běžných programů. Zahrnutá vylepšení potřebná k propojení Glibc pomocí LLD.
  • Nástroj llvm-mca (Machine Code Analyzer) přidal podporu pro procesory, které provádějí instrukce v pořadí (in-order superscalar pipeline), jako je ARM Cortex-A55.
  • Ladicí program LLDB pro platformu AArch64 poskytuje plnou podporu pro ověřování ukazatelů, MTE (MemTag, Memory Tagging Extension) a registry SVE. Přidány příkazy, které umožňují svázat tagy s každou operací alokace paměti a organizovat kontrolu ukazatele při přístupu do paměti, který musí být spojen se správným tagem.
  • Ladicí program LLDB a frontend pro jazyk Fortran - Flang byly přidány do binárních sestavení generovaných projektem.

Zdroj: opennet.ru

Přidat komentář