Az LLVM 13.0 fordítócsomag kiadása

Hat hónapos fejlesztés után bemutatták az LLVM 13.0 projekt kiadását - egy GCC-kompatibilis eszközkészletet (fordítók, optimalizálók és kódgenerátorok), amely a programokat RISC-szerű virtuális utasítások köztes bitkódjává fordítja (alacsony szintű virtuális gép többszintű optimalizáló rendszer). A generált pszeudokód JIT fordító segítségével gépi utasításokká konvertálható közvetlenül a program végrehajtása során.

Fejlesztések a Clang 13.0-ban:

  • Megvalósított támogatás a garantált véghívásokhoz (egy függvény legvégén egy szubrutin hívása, farokrekurzió kialakítása, ha az alprogram önmagát hívja). A garantált tail hívások támogatását a "[[clang::musttail]]" attribútum biztosítja C++-ban és "__attribute__((musttail))" C-ben, a "return" utasításban használatos. A funkció lehetővé teszi az optimalizálás megvalósítását a kód sima iterációba történő telepítésével a veremfelhasználás csökkentése érdekében.
  • A "using" deklarációk és a Clang kiterjesztések támogatják a C++11 stílusú attribútumok meghatározását a "[[]]" formátum használatával.
  • Hozzáadott "-Wreserved-identifier" jelző, amely figyelmeztetést jelenít meg, ha fenntartott azonosítók vannak megadva a felhasználói kódban.
  • Hozzáadott "-Wunused-but-set-parameter" és "-Wunused-but-set-variable" jelzők, amelyek figyelmeztetést jelenítenek meg, ha egy paraméter vagy változó be van állítva, de nincs használatban.
  • Hozzáadott "-Wnull-pointer-subtraction" jelző, amely figyelmeztetést ad ki, ha a kód definiálatlan viselkedést idézhet elő a nullmutató használata miatt a kivonási műveletekben.
  • Az "-fstack-usage" jelző hozzáadása minden kódfájlhoz egy további ".su" fájlt generál, amely információkat tartalmaz a feldolgozás alatt álló fájlban definiált egyes funkciók veremkockáinak méretéről.
  • A statikus elemzőhöz egy új kimeneti típus került - „sarif-html”, amely a jelentések egyidejű generálásához vezet HTML és Sarif formátumban. Új allocClassWithName ellenőrzés hozzáadva. Az „-analyzer-display-progress” opció megadásakor az egyes funkciók elemzési ideje megjelenik. Az intelligens mutatóelemző (alpha.cplusplus.SmartPtr) majdnem készen áll.
  • Az OpenCL-támogatáshoz kapcsolódó képességek bővültek. Támogatás hozzáadva a cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields és __cl_clang_non_portable_kernel_param_types új bővítményekhez. Az OpenCL 3.0 specifikáció megvalósítása folytatódott. A C esetében alapértelmezés szerint az OpenCL 1.2 specifikáció használatos, hacsak nincs kifejezetten kiválasztva egy másik verzió. A C++ esetében a „.clcpp” kiterjesztésű fájlok támogatása hozzáadásra került.
  • Az OpenMP 5.1 specifikációban meghatározott huroktranszformációs direktívák („#pragma omp unrol” és „#pragma omp tile”) támogatása megtörtént.
  • Hozzáadott opciók a clang-formátum segédprogramhoz: SpacesInLineCommentPrefix a megjegyzések előtti szóközök számának meghatározásához, IndentAccessModifiers, LambdaBodyIndentation és PPIndentWidth a bejegyzések, lambda-kifejezések és előfeldolgozó direktívák igazításának vezérléséhez. Bővültek a fejlécfájlok felsorolásának (SortIncludes) rendezési lehetőségei. Hozzáadott támogatás a JSON-fájlok formázásához.
  • Az új ellenőrzések nagy része hozzáadásra került, hogy csikorogjon.

Az LLVM 13.0 legfontosabb újításai:

  • Hozzáadtuk az „-ehcontguard” opciót a CET (Windows Control-flow Enforcement Technology) technológiájának használatához a Return-Oriented Programming (ROP) technikákkal épített kizsákmányolások elleni védelem érdekében a kivételkezelési szakaszban.
  • A debuginfo-teszt projektet projektközi tesztekre keresztelték át, és a különböző projektekből származó összetevők tesztelésére szolgál, nem korlátozódik a hibakeresési információkra.
  • Az összeállítási rendszer több disztribúció felépítését is támogatja, például az egyik segédprogramokkal, a másik pedig könyvtárakkal a fejlesztők számára.
  • Az AArch64 architektúra háttérprogramjában az Armv9-A RME (Realm Management Extension) és SME (Scalable Matrix Extension) bővítmények támogatása az assemblerben van megvalósítva.
  • Az ISA V68/HVX támogatása hozzáadásra került a Hexagon architektúra háttérrendszeréhez.
  • Az x86 háttérrendszer továbbfejlesztette az AMD Zen 3 processzorok támogatását.
  • GFX1013 RDNA2 APU támogatás hozzáadva az AMDGPU háttérrendszerhez.
  • A Libc++ folytatja a C++20 és C++2b szabványok új funkcióinak bevezetését, beleértve a „fogalmak” könyvtár befejezését. Az std::fájlrendszer támogatása hozzáadva a MinGW-alapú Windows platformhoz. Az , az és a fejlécek el vannak választva. A LIBCXX_ENABLE_INCOMPLETE_FEATURES összeállítási opció hozzáadva a fejlécfájlok letiltásához a nem teljesen megvalósított funkciókkal.
  • Bővültek az LLD linker képességei, melyben a Big-endian Aarch64 processzorok támogatása valósul meg, illetve a Mach-O backend olyan állapotba került, amely lehetővé teszi a normál programok összekapcsolását. A Glibc LLD használatával történő összekapcsolásához szükséges fejlesztéseket tartalmazza.
  • Az llvm-mca (Machine Code Analyzer) segédprogram támogatja az utasításokat sorrendben végrehajtó processzorokat (sorrendben lévő szuperskaláris folyamat), mint például az ARM Cortex-A55.
  • Az AArch64 platformhoz készült LLDB hibakereső teljes mértékben támogatja a Pointer Authentication, az MTE (MemTag, Memory Tagging Extension) és az SVE regisztereket. Hozzáadott parancsok, amelyek lehetővé teszik címkék kötését az egyes memóriafoglalási műveletekhez, és a mutató ellenőrzésének megszervezését a memória elérésekor, amelyet a megfelelő címkéhez kell társítani.
  • Az LLDB debugger és a Fortran nyelv - Flang frontendje hozzáadásra került a projekt által generált bináris összeállításokhoz.

Forrás: opennet.ru

Hozzászólás