Nakon šest meseci razvoja predstavljeno je lansiranje nove verzije LLVM 12.0 projekta U skladu s GCC-om (kompajleri, optimizatori i generatori koda) koji kompajlira programe u srednji bit kod virtualnih uputa sličnih RISC-u (niskorazinski virtualni stroj s višestepenim sistemom za optimizaciju).
U ovoj novoj verziji možemo pronaći različita poboljšanja i vijesti, od kojih možemo istaknuti novi atribut funkcije "tune-cpu" za podršku -mtune kao gcc, kao i poboljšanja na različitim platformama.
Glavne nove karakteristike LLVM 12.0
U ovoj novoj verziji to možemo pronaći podrška za llvm-build alat za izgradnju napisano na python-u je ukinut, umjesto toga projekt se u potpunosti prebacio na korištenje CMake sistema gradnje.
Zaštita za arhitekturu AArch64 poboljšala je podršku za Windows platformu: osigurana je ispravna generacija izlaza asemblera za ciljne Windows sisteme, optimizirano je generiranje podataka na odzivnim pozivima (veličina takvih podataka smanjena je za 60%), dodana je mogućnost kreiranja podataka odmotavanjem pomoću seh direktiva.
Dok Pozadina PowerPC arhitekture uključuje nove optimizacije za ugradnju i postavljanje petlje, poboljšana podrška za Power10 procesore, dodatna podrška za MMA upute za manipulaciju nizovima i poboljšana podrška za AIX operativni sistem.
para x86 je dodao podršku za AMD Zen 3, Intel Alder Lake i Intel Sapphire Rapids procesore, kao i upute za procesore HRESET, UINTR i AVXVNNI. Uklonjena podrška za MPX proširenja (proširenja za zaštitu memorije) za provjeru pokazivača na ograničenja područja memorije (ova tehnologija nije široko korištena i od tada je uklonjena iz GCC-a i clang-a). Asembler je dodao podršku za prefikse {disp32} i {disp8} i sufikse .d32 i .d8 za kontrolu veličine odstupanja operanda i prijelaza. Novi atribut "tune-cpu" dodan je za kontrolu omogućavanja mikroarhitekturnih optimizacija.
Druga promjena koja se ističe je ta dodan je novi način rada "-fsanitize = unsigned-shift-base" za otkrivanje nepotpisanih prekoračenja cijelog broja nakon pomaka ulijevo. Za Mach-O (macOS) format implementirana je podrška za arm64, arm i i386 arhitekture, optimizacija stupnja veze (LTO) i odmotavanje steka prilikom rukovanja iznimkama.
Takođe istaknut je novi atribut značajke "tune-cpu" što omogućava ooptimizacije mikroarhitekture se primjenjuju bez obzira na atribut "target-cpu" ili iz TargetMachine CPU-a koji će se koristiti za odabir skupa uputa. Ako atribut nije prisutan, ugađajući CPU će slijediti ciljani CPU.
Libc ++ implementira nove karakteristike C ++ 20 standarda i započeo razvoj karakteristika C ++ 2b specifikacije, plus dodana podrška za sastavljanje sa onemogućenom podrškom za lokalizaciju ("-DLIBCXX_ENABLE_LOCALIZATION = OFF") i uređaji za generiranje pseudo-slučajnih brojeva.
Dok od poboljšanja za Clang 12, za arhitekturu AArch64, dodane su nove zastavice kompajlera "-Moutline-atomics" i "-mno-outline-atomics" za omogućavanje i onemogućavanje atomskih pomoćnih funkcija kao što je "__aarch64_cas8_relax". Ove funkcije vremena izvođenja određuju postoji li podrška za velika sistemska proširenja (LSE) i koriste priložene upute atomskog procesora ili vraćanje za uporabu LL / SC (Load-link / store-conditional) uputa za sinkronizaciju.
Pokazivač 'this' sada se obrađuje provjerama koje nisu null i koje se ne mogu preusmjeriti (N). Opcija "-fdelete-null-pointer-checks" može se koristiti za uklanjanje atributa koji nije null kada su potrebne null vrijednosti.
U Linuxu za arhitekture AArch64 i PowerPC, "-fasynchronous -wind-table" je omogućeno za generiranje tablica prozivki, kao u GCC.
U "#pragma clang loop vectorize_width" dodana je mogućnost specificiranja "fiksnih" (zadanih) i "skalabilnih" opcija za odabir metode vektorizacije.
Na poslužitelju kengd keširanja (Clang Server) na Linuxu, potrošnja memorije tijekom dugotrajnog rada je znatno smanjena (osiguran je povremeni poziv malloc_trim za vraćanje slobodnih stranica memorije operativnom sistemu).
Konačno ako ste zainteresirani da saznate više o tome o ovoj novoj verziji, možete Pogledajte detalje u nastavku. link