Kuue kuu arendustöö jĂ€rel on vĂ€lja antud LLVM 13.0 â GCC-ĂŒhilduva tööriistakomplekti (kompilaatorid, optimeerijad ja koodigeneraatorid) versioon, mis kompileerib programme RISC-sarnase virtuaalsete kĂ€skude vahefailiks (madala taseme virtuaalne masin, millel on mitmeastmeline optimeerimissĂŒsteem). Genereritud pseudokood saab JIT-kompilaatori abil muundada masiinijuhisteks otse programmi tĂ€itmise hetkel.
Clang 13.0 parendused:
- On rakendatud garanteeritud sabakutsumise toe (alprogrammi kutsumine funktsiooni lÔpus, tekitades sabarekursiooni, kui alprogramm kutsub end ise). Garanteeritud sabakutsumise tugi on tagatud atribuutide "[[clang::musttail]]" C++-s ja "__attribute__((musttail))" C-s, mida kasutatakse vÀljendis "return". See vÔimalus vÔimaldab rakendada optimeerimisi koodi tasandamisel plaana iteratsiooniks, et sÀÀsta virna kasutamist.
- C++11 stiilis atribuutide mÀÀramise toeks on clangis rakendatud "using" deklaratsioonide ja laienduste toetamist, kasutades formaati "[[]]".
- Lisatud lipp â-Wreserved-identifierâ, et kuvada hoiatus, kui kasutajakoodis on mÀÀratud reserveeritud identifikaatorid.
- Lisatud lipud â-Wunused-but-set-parameterâ ja â-Wunused-but-set-variableâ, et kuvada hoiatus, kui parameeter vĂ”i muutujad on mÀÀratud, kuid neid ei kasutata.
- Lisatud lipp â-Wnull-pointer-subtractionâ, et kuvada hoiatus, kui kood vĂ”ib pĂ”hjustada ettearvamatut kĂ€itumist nullviite kasutamise tĂ”ttu lahutustegevustes.
- Lisatud lipp â-fstack-usageâ, et iga koodifaili jaoks genereerida tĂ€iendav fail â.suâ, mis sisaldab teavet iga töötlusfailis defineeritud funktsiooni virna suuruse kohta.
- Statistilise analĂŒsaatori juurde on lisatud uus vĂ€ljunditĂŒĂŒp â âsarif-htmlâ, mis genereerib aruandeid samaaegselt nii HTML- kui ka Sarif-formaatides. Lisatud on uus kontroll allocClassWithName. Kui on mÀÀratud valik â-analyzer-display-progressâ, tagatakse iga funktsiooni analĂŒĂŒsi aja vĂ€ljund. Peaaegu valmis on nutikate viidete analĂŒsaator (alpha.cplusplus.SmartPtr).
- Avatud CLi toetuse vÔimalused on laienenud. Lisatud toetused uutele laiendustele cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ja __cl_clang_non_portable_kernel_param_types. Protsesside OpenCL 3.0 spetsifikatsiooni elluviimine jÀtkub. C keele puhul on vaikimisi aktiivne OpenCL 1.2 spetsifikatsioon, kui ei ole selgelt valitud muud versioonid. C++ puhul on lisatud toetust failide laiendusele '.clcpp'.
- Töösse on vĂ”etud seeria tsĂŒklite transformatsioonide direktiivide toetust ('#pragma omp unrol' ja '#pragma omp tile'), nagu on mÀÀratletud OpenMP 5.1 spetsifikatsioonis.
- Clang-foormingu utiliidi on lisatud valikud: SpacesInLineCommentPrefix kommentaaride ette tĂŒhi, IndentAccessModifiers, LambdaBodyIndentation ja PPIndentWidth, et hallata kirje, lambda-vĂ€ljendite ja eelprotsessori direktiivide joondamist. Pealkirjade faili sortimise funktsionaalsust on laiendatud (SortIncludes). Lisatud on JSON-failide vormindamise tugi.
- Clang-tidy linterisse on lisatud palju uusi kontrollimist.
LLVM 13.0 pÔhimuudatused:
- Lisatud on -ehcontguard valik CET (Windowsi kontrollvoo kaitsetehnoloogia) kasutamiseks, et kaitsta eranditöötluse etapis ekspluatatsiooni kasutamise eest, mis pÔhinevad tagasikutsumise orientatsiooniga programmeerimise (ROP, Return-Oriented Programming) tehnikatel.
- Projekt debuginfo-test on ĂŒmber nimetatud cross-project-tests ja see on mĂ”eldud erinevate projektide komponentide testimiseks, piiramata ainult tĂ”rkeandmetega.
- KogumisĂŒsteemis on tagatud mitme jaotuse kogumise tugi, nĂ€iteks ĂŒks utiliitide jaoks ja teine arendajate raamatukogude jaoks.
- Backendis AArch64 arhidektuuri jaoks on assembleris rakendatud Armv9-A RME (Realm Management Extension) ja SME (Scalable Matrix Extension) laienduste tugi.
- Hexagon arhidektuuri backendis on lisatud ISA V68/HVX tugi.
- x86 arhidektuuri backendis on tÀiustatud AMD Zen 3 protsessorite tuge.
- AMDGPU backendis on lisatud APU GFX1013 RDNA2 tugi.
- Libc++-s on C++20 ja C++2b standardite uute vÔimaluste rakendamine jÀtkub, sealhulgas «concepts» teegi rakendamine on lÔpule viidud. Windowsi MinGW platvormile on lisatud std::filesystem tugi. Pealkirjafailid <algorithm>, <iterator> ja <utility> on eraldatud. Lisatud on LIBCXX_ENABLE_INCOMPLETE_FEATURES kompileerimise valik, et keelata mitte tÀielikult rakendatud funktsionaalsusega pealkirjafailide kasutamine.
- LLD sidujale on lisatud uusi vÔimalusi, sealhulgas Big-endian Aarch64 protsessorite toete, ning Mach-O taust on viidud sellisesse seisu, et see vÔimaldab tavaliste programmide sidumist. Lisatud on tÀiustused, mis on vajalikud Glibc sidumiseks LLD abil.
- Utilliti llvm-mca (Machine Code Analyzer) on lisatud tugi protsessoritele, mis töötlevad juhiseid jÀrjestikku (in-order superscalar pipeline), nÀiteks ARM Cortex-A55.
- AArch64 platvormi LLDB tÔrkeotsijale on rakendatud tÀielik tugi osutite autentimisele (Pointer Authentication), MTE (MemTag, Memory Tagging Extension) mehhanismile ja SVE registritele. Lisatud on kÀsud, mis vÔimaldavad igale mÀluhalduse toimingule sildistada teid ning korraldada mÀlule juurdepÀÀsu korral osutite kontrolli, mis peab olema seotud Ôige sildiga.
- Projekti genereeritavate binaarkogude hulka on lisatud tÔrkeotsija LLDB ja Fortrani keele frontend - Flang.
Allikas: opennet.ru
