Tom qab rau lub hlis ntawm kev tsim kho, LLVM 22.1.0 tau tso tawm. Nws tsim cov cuab yeej (compilers, optimizers, thiab code generators) uas sau cov kev pab cuam rau hauv cov bitcode nruab nrab ntawm RISC-zoo li virtual instructions (lub tshuab virtual qis nrog ntau theem optimization system). Cov pseudocode tsim tawm tuaj yeem hloov mus ua machine code rau lub platform lub hom phiaj lossis siv los ntawm just-in-time (JIT) compiler los tsim cov lus qhia tshuab ncaj qha thaum lub sijhawm ua haujlwm program. Raws li LLVM technologies, qhov project tab tom tsim Clang compiler, txhawb nqa C, C ++, thiab Objective-C programming languages. Pib nrog 18.x ceg, qhov project hloov mus rau ib qho version numbering scheme tshiab, raws li qhov tso tawm 0 ("N.0") siv thaum lub sijhawm tsim kho, thiab thawj qhov ruaj khov yog suav "N.1."
Ntawm cov kev txhim kho hauv Clang 22:
- Ntxiv kev txhawb nqa rau cov cim qhia kev faib cim xeeb (Allocation Tokens) rau kev cim cov haujlwm faib cim xeeb ua tiav siv cov haujlwm xws li malloc nrog tus cim tshwj xeeb. Cov cim qhia kev faib tso cai rau kev teeb tsa cov ntaub ntawv heap, ua kom yooj yim rau kev tshawb pom qhov xau ntawm lub cim xeeb, thiab ua kom muaj kev sib sau ua pawg ntawm cov khoom raws li lawv lub hom phiaj lossis cov qauv hloov kho (piv txwv li, cais "kub" ntawm cov ntaub ntawv "txias"). Txhawm rau kom ua haujlwm, siv tus chij "-fsanitize = alloc-token".
- Cov yam ntxwv ntsig txog hom lus C:
- Ib daim ntawv qhia txog kev txhais cov txheej txheem ua haujlwm ncua "defer" tau raug siv, uas tso cai rau kev ua haujlwm thaum lub sijhawm tam sim no tawm. Lub chij "-fdefer-ts" tau raug ntxiv los pab txhawb "defer".
- Lub built-in function __builtin_stack_address() tau ntxiv lawm, ua kom zoo ib yam li lub function zoo sib xws hauv GCC. Lub function no rov qab qhov chaw nyob ntawm pawg uas cais thaj chaw pawg ntawm lub function tam sim no uas hu ua __builtin_stack_address() thiab cov function tom qab uas nws hu.
- Muaj peev xwm tsim tau rau yav tom ntej C2y tus qauv:
- Ntxiv kev txhawb nqa rau cov voj voog uas muaj npe, uas tso cai rau koj muab cov npe rau cov voj voog thiab hloov cov lus hais, uas tuaj yeem teev tseg hauv cov lus hais tawg thiab txuas ntxiv mus kom meej meej txhais lub voj voog kom tawm ntawm. sab nraud: rau (int i = 0; i < IK; ++ i) { rau (int j = 0; j < JK; ++ j) { txuas ntxiv mus; // mus rau CONT1 txuas ntxiv mus rau sab nraud; // mus rau CONT2 // CONT1 } // CONT2 }
- Qhov kev siv ntawm "__COUNTER__" macro uas tau tsim los ua kom muaj cov npe cim tshwj xeeb, tau nthuav dav thiab suav nrog rau hauv tus qauv. Kev txwv ntawm 2147483647 kev hu rau macro no tau teeb tsa; kev ua dhau qhov kev txwv no yuav tsim qhov yuam kev.
- Tshem tawm cov lus ceeb toom (-Wstatic-in-inline) thaum siv cov haujlwm zoo li qub lossis cov hloov pauv sab hauv cov haujlwm tshaj tawm tias yog "extern inline".
- Cov peev txheej tau teev tseg hauv C23 C tus qauv:
- Cov ntaub ntawv header float.h tam sim no txhawb nqa FLT_SNAN, DBL_SNAN, thiab LDBL_SNAN macros, uas siv cov cim qhia (ua rau muaj kev zam thaum siv hauv kev ua lej) NaN tus nqi rau float, double, thiab long double hom.
- Kho qhov kab laum uas cov hom ntawv tsis muaj npe sib txawv raug kho kom sib xws hauv tib chav txhais lus yog tias lawv muaj tib lub teb.
- Tus chij "-MG" siv los tsis quav ntsej cov ntaub ntawv header uas ploj lawm thaum lub sijhawm luam theej duab tau txuas ntxiv mus rau "#embed" cov lus qhia thiab tam sim no tshem tawm qhov yuam kev "tsis pom cov ntaub ntawv" thaum cov ntaub ntawv teev tseg hauv "#embed" cov lus qhia ploj lawm.
- C++ muaj feem cuam tshuam:
- Lub peev xwm siv cov kev khi ua qauv hauv cov ntsiab lus "constexpr", raws li tau tsim nyob rau hauv C ++ 2c (C ++ 26) cov lus qhia, tau ntxiv. Qhov no txhais tau tias cov lus xa mus rau cov lus qhia tas mus li tam sim no lawv tus kheej tuaj yeem ua cov lus qhia tas mus li. Kev txhawb nqa tau siv rau arrays thiab cov qauv yooj yim (tuples tseem tsis tau txhawb nqa). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Raws li qhov yuav tsum tau ua los ntawm tus qauv C ++ 20, cov kev txwv tam sim no raug hloov mus rau daim ntawv txheem ua ntej raug kuaj xyuas, tso cai rau cov lus kuaj mob kom raug dua thiab kev tswj hwm cov kev hloov pauv yuam kev hauv cov lus sib cav template siv tsuas yog hauv cov tswv yim-ids.
- Ntxiv ib tsev neeg ntawm cov haujlwm ua ke "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" kom paub seb cov neeg teb xov tooj sib piv "<", ">", "<=", thiab ">=" puas tau tsim los ntawm tus neeg teb xov tooj "<=>".
- Tus parameter "-Wincompatible-pointer-types" tau raug hloov pauv kom tso tawm qhov yuam kev es tsis yog lus ceeb toom. Txhawm rau rov qab mus rau tus cwj pwm yav dhau los, siv qhov kev xaiv "-Wno-error = incompatible-pointer-types".
- Ntxiv cov haujlwm ua ke __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, thiab __builtin_dedup_pack. Piv txwv li, builtin_dedup_pack tso cai rau koj tshem tawm cov duplicates los ntawm daim ntawv teev npe ntawm cov hom: siv MyTypeList = TypeList<__builtin_dedup_pack ...>; // hom uas tau los yuav yog TypeList
- Thaum debugging tus cwj pwm tsis tau txhais nrog UBSan (-fsanitize = undefined -fsanitize-trap = undefined), cov ntaub ntawv ua rau muaj qhov yuam kev tam sim no suav nrog hauv cov ntaub ntawv debug tsim. Lub chij "-fsanitize-debug-trap-reasons" tau ntxiv los qhia txog qib ntawm cov ntsiab lus hauv cov ntaub ntawv yuam kev. Nws tuaj yeem teeb tsa rau "basic" rau cov lus piav qhia dav dav (piv txwv li, "Integer addition overflowed") thiab "detailed" kom suav nrog cov ntaub ntawv ntxaws (piv txwv li, "signed integer addition overflow in 'a + b'").
- Ntxiv tshiab compiler chij:
- "-f[no-]sanitize-debug-trap-reasons" los tswj seb qhov laj thawj ntawm qhov cuab yeej tshwj xeeb puas raug muab tso rau hauv cov ntaub ntawv debug thaum sau ua ke nrog hom "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", thiab "-fsanitize-alloc-token-extended" los tswj cov cim xeeb faib.
- "-fmatrix-memory-layout" los tswj qhov layout ntawm lub cim xeeb ntawm cov hom matrix (piv txwv li column-major rau column-major, row-major rau row-major).
- Cov haujlwm tam sim no muaj tus cwj pwm "malloc_span", zoo ib yam li tus cwj pwm malloc tab sis siv tau rau cov haujlwm uas rov qab cov qauv zoo li span uas muaj tus pointer thiab daim teb nrog qhov loj me lossis tus pointer rau qhov kawg ntawm lub block.
- Ntxiv cov yam ntxwv "modular_format" los xaiv qhov kev siv statically txuas ntawm lub luag haujlwm printf thaum lub sijhawm txuas.
- Cov cuab yeej kuaj mob thiab tshuaj xyuas zoo li qub tau nthuav dav, cov kev kuaj xyuas tshiab tau ntxiv (ntau kaum ob qhov kev txhim kho ntsig txog kev kuaj mob).
- Cov intrinsics ntxiv rau SSE, AVX, thiab AVX512 extensions tau ntxiv rau X86 backend. Cov hom kev tsim kho tau ntxiv rau Intel CPUs raws li Wildcat Lake (-march=wildcatlake) thiab Nova Lake (-march=novalake) microarchitectures.
- Lub AArch64 backend tam sim no txhawb nqa Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), thiab Arm C1-Ultra (c1-ultra) processors. Cov haujlwm ntxiv uas tau ntxiv rau FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], thiab FCVTA[US] cov lus qhia. Kev txhawb nqa Function Multi-Versioning (FMV) tau ruaj khov. Cov neeg siv tam sim no tuaj yeem hloov qhov tseem ceeb ntawm cov qauv ua haujlwm sib txawv.
- Ntxiv kev txhawb nqa rau LoongArch32 (LA32R, LA32S) architecture.
- Cov backends zoo dua rau ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, thiab PowerPC architectures.
Tau qhov twg los: opennet.ru
