Eftir sex mánaða þróun var útgáfa LLVM 12.0 verkefnisins kynnt - GCC-samhæfð verkfærasett (þýðendur, hagræðingartæki og kóðaframleiðendur) sem safnar saman forritum í millibitakóða af RISC-líkum sýndarleiðbeiningum (lágmarks sýndarvél með hagræðingarkerfi á mörgum stigum). Hægt er að breyta gervikóðanum sem myndast með JIT þýðanda í vélaleiðbeiningar beint á þeim tíma sem forritið er keyrt.
Umbætur í Clang 12.0:
- Stuðningur við „líklega“ og „ólíklega“ eiginleika sem lagðar eru til í C++20 staðlinum hefur verið innleiddur og virkjaður sjálfgefið, sem gerir fínstillingu kleift að upplýsa um líkurnar á því að skilyrta smíðin verði ræst (til dæmis, „[[líklegt ]] ef (handahófi > 0) {“).
- Bætti við stuðningi fyrir AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) og Intel Sapphire Rapids (-march=sapphirerapids) örgjörva.
- Bætti við stuðningi við "-march=x86-64-v[234]" fána til að velja x86-64 byggingarlistarstig (v2 - nær yfir SSE4.2, SSSE3, POPCNT og CMPXCHG16B viðbætur; v3 - AVX2 og MOVBE; v4 - AVX-512 ).
- Bætti við stuðningi fyrir Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) og Fujitsu A64FX (a64fx) örgjörva. Til dæmis, til að virkja fínstillingu fyrir Neoverse-V1 örgjörva, geturðu tilgreint „-mcpu=neoverse-v1“.
- Fyrir AArch64 arkitektúrinn hefur nýjum þýðandafánum "-moutline-atomics" og "-mno-outline-atomics" verið bætt við til að virkja eða slökkva á hjálparaðgerðum atómaðgerða, eins og "__aarch64_cas8_relax". Slíkar aðgerðir greina á keyrslutíma hvort LSE (Large System Extensions) stuðningur sé tiltækur og nota leiðbeiningar um lotuvinnsluforrit eða falla aftur í að nota LL/SC (Load-link/store-conditioned) leiðbeiningar fyrir samstillingu.
- Bætt við "-fbinutils-version" valmöguleika til að velja markútgáfu af binutils föruneytinu fyrir samhæfni við eldri tengi- og samsetningarhegðun.
- Fyrir ELF keyranlegar skrár, þegar "-gz" fáninn er tilgreindur, er þjöppun á villuleitarupplýsingum með því að nota zlib bókasafnið sjálfgefið virkjuð (gz=zlib). Til að tengja hlutaskrárnar sem myndast þarf lld eða GNU binutils 2.26+. Til að endurheimta eindrægni við eldri útgáfur af binutils geturðu tilgreint "-gz=zlib-gnu".
- „Þessi“ bendillinn er nú unnin með ónull og tilvísunarhæfni(N) ávísunum. Til að fjarlægja nonnull eigindina þegar þú þarft að nota NULL gildi geturðu notað "-fdelete-null-pointer-checks" valkostinn.
- Á pallinum Linux Fyrir AArch64 og PowerPC arkitektúr er stillingin "-fasynchronous-unwind-tables" virkjuð til að búa til unwind-kalltöflur, eins og í GCC.
- Í "#pragma clang loop vectorize_width" bætti við möguleikanum á að tilgreina "fast" (sjálfgefið) og "scalable" valkostina til að velja vektorization aðferðina. „Scalable“ hátturinn, óháður vigurlengd, er tilraunastarfsemi og hægt er að nota hann á vélbúnaði sem styður stigstærð vigurvæðingu.
- Bættur stuðningur við vettvang WindowsOpinberar tvíundarútgáfur hafa verið undirbúnar fyrir Windows Í Arm64 kerfum felur þetta í sér Clang þýðandann, LLD tengilinn og keyrslutímabókasöfnin compiler-rt. Þegar smíðað er fyrir MinGW markpalla er .exe viðskeytið nú bætt við, jafnvel við krossþýðingu.
- Möguleikarnir sem tengjast stuðningi við OpenCL, OpenMP og CUDA hafa verið auknir. Bætti við valkostum "-cl-std=CL3.0" og "-cl-std=CL1.0" til að velja fjölvivalkosti fyrir OpenCL 3.0 og OpenCL 1.0. Greiningartæki hafa verið stækkuð.
- Bætti við stuðningi við HRESET, UINTR og AVXVNNI leiðbeiningarnar sem eru útfærðar í sumum x86-undirbúnum örgjörvum.
- Á x86 kerfum er stuðningur við "-mtune=" valmöguleikinn virkur, sem gerir valdar fínstillingar örarkitektúra kleift óháð "-march=" gildinu.
- Stöðugreiningartækið hefur bætt úrvinnslu sumra POSIX aðgerða og verulega bætt ákvörðun á niðurstöðu skilyrtra aðgerða þegar það eru nokkur táknræn gildi í samanburðinum. Nýjum ávísunum hefur verið bætt við: fuchia.HandleChecker (skilgreinir handföng í mannvirkjum), webkit.UncountedLambdaCapturesChecker webkit og alpha.webkit.UncountedLocalVarsChecker (tekir með í reikninginn sérkenni þess að vinna með ábendingar í WebKit vélkóðanum).
- Í tjáningum sem notuð eru í samhengi við fasta er notkun innbyggðra aðgerða __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateleft*, __mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsrd, __bsrd, __bsrd, __bsrd, __bsrd, __bsrd, __bsrd, __bsr __ er leyfilegt bswapq , _castf*, __rol* og __ror*.
- Bætti BitFieldColonSpacing valkosti við clang-snið tólið til að velja bilið í kringum auðkenni, dálka og skilgreiningar á reitum.
- Í skyndiminni netþjónn clangd (Clang Server) á kerfinu Linux Minnisnotkun við langtímanotkun hefur verið verulega minnkuð (regluleg köll hafa verið gerð á malloc_trim til að skila lausum minnissíðum til stýrikerfisins).
Helstu nýjungar í LLVM 12.0:
- Stuðningur við llvm-build byggingartólið skrifað í Python hefur verið hætt, og í staðinn hefur verkefnið algjörlega skipt yfir í að nota CMake byggingarkerfið.
- Bakendinn fyrir AArch64 arkitektúrinn hefur bættan stuðning við kerfið. WindowsRétt myndun samsetningarúttaks fyrir markkerfi er tryggð Windows, hefur verið fínstillt gagnaöflun um „afvindu“ (afvindu) símtala (stærð slíkra gagna hefur verið minnkuð um 60%), möguleikinn á að búa til afvindugögn með því að nota .seh_* samsetningarleiðbeiningarnar hefur verið bætt við.
- Bakendinn fyrir PowerPC arkitektúrinn býður upp á nýjar fínstillingar fyrir lykkjur og innbyggða dreifingu, aukinn stuðning fyrir Power10 örgjörva, bættan stuðning við MMA leiðbeiningar fyrir fylkismeðferð og bættan stuðning við AIX stýrikerfið.
- x86 bakendinn bætir við stuðningi við AMD Zen 3, Intel Alder Lake og Intel Sapphire Rapids örgjörva, sem og HRESET, UINTR og AVXVNNI örgjörvaleiðbeiningar. Stuðningur við MPX (Memory Protection Extensions) til að athuga ábendingar til að tryggja að minnismörk séu ekki lengur studd (þessi tækni er ekki útbreidd og hefur þegar verið fjarlægð úr GCC og clang). Bætti við stuðningi við samsetningarforritið fyrir {disp32} og {disp8} forskeyti og .d32 og .d8 viðskeyti til að stjórna stærð óperandjöfnunar og stökkum. Bætti við nýjum eiginleikum „tune-cpu“ til að stjórna innlimun örarkitektúrlegra hagræðinga.
- Nýrri stillingu „-fsanitize=unsigned-shift-base“ hefur verið bætt við heiltöluvandræðaskynjarann (heiltöluhreinsiefni, „-fsanitize=heiltala“) til að greina flæði óundirritaðra heiltalna eftir bitafærslu til vinstri.
- Bætti við stuðningi við ýmsa skynjara (asan, cfi, lsan, msan, tsan, ubsan hreinsiefni) Linux-dreifingar með venjulegu Musl bókasafninu.
- LLD tengimöguleikar hafa verið auknir. Stuðningur við ELF sniðið hefur verið bættur, þar á meðal með viðbót valmöguleikanna "--dependency-file", "--error-handling-script", "--lto-pseudo-probe-for-profiling", "--no-lto-whole-program-visibility". Stuðningur við MinGW hefur verið bættur. Fyrir Mach-O sniðið (macOS) stuðningur við arm64, arm og i386 arkitektúr, tengjatímabestun (LTO) og staflaafritun við undantekningarmeðhöndlun hefur verið innleiddur.
- Libc++ innleiðir nýja eiginleika C++20 staðalsins og hefur hafið þróun á eiginleikum C++2b forskriftarinnar. Bætti við stuðningi við byggingu með því að slökkva á staðsetningarstuðningi ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") og tækjum til að búa til gervi-handahófskenndar tölur ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").
Heimild: opennet.ru
