Ntxiv kev txhawb nqa rau "tswvyim", C ++ template extension uas yuav suav nrog hauv tus qauv tom ntej, codenamed C ++ 2a (tig los ntawm -std = c ++ 2a chij).
Cov tswv yim tso cai rau koj los txheeb xyuas cov txheej txheem template uas yuav tsum tau ua, thaum lub sijhawm sib sau, txwv cov txheej txheem sib cav uas tuaj yeem lees txais raws li cov qauv ntsuas. Cov tswv yim tuaj yeem siv los tiv thaiv kev tsis sib haum xeeb ntawm cov khoom ntawm cov ntaub ntawv hom siv nyob rau hauv cov qauv thiab cov ntaub ntawv hom khoom ntawm cov input tsis.
tus qauv
tswvyim EqualityComparable = require(T a, T b) {
{ a == b } -> std::boolean;
{a != b } -> std::boolean;
};
Los ntawm lub neej ntawd, kev tso tawm ntawm cov txheej txheem sib cais ("clang -cc1") nyob rau hauv uas muab tso ua ke tau ua tiav. Kev sau ua ke tam sim no ua tiav hauv cov txheej txheem tseem ceeb, thiab qhov kev xaiv "-fno-integrated-cc1" tuaj yeem siv los kho tus cwj pwm qub.
Cov "-Wtautological-overlap-piv", "-Wsizeof-pointer-div", "-Wtautological-sib piv", "-Wrange-loop-analysis" tau nthuav dav.
Cov kev kuaj xyuas "-Wbitwise-op-parentheses" thiab "-Wlogical-op-parentheses" raug cuam tshuam los ntawm lub neej ntawd.
Hauv C thiab C ++ code, pointer arithmetic ua haujlwm tsuas yog tso cai hauv arrays. Lub Undefined Cwj Pwm Sanitizer nyob rau hauv "-fsanitize = pointer-overflow" hom tam sim no ntes cov xwm txheej xws li ntxiv qhov tsis yog xoom offset rau tus pointer tsis muaj lossis tsim ib tus pointer null thaum rho tus lej los ntawm tus pointer tsis yog null.
Hom "-fsanitize = implicit-conversion" (Implicit Conversion Sanitizer) hom yog yoog los txheeb xyuas cov teeb meem nrog kev nce ntxiv thiab kev ua haujlwm qis rau cov hom me me me dua li ntawm hom "int".
Thaum xaiv x86 lub hom phiaj architectures "-march = skylake-avx512", "-march = icelake-client", "-march = icelake-server", "-march = cascadelake" thiab "-march = cooperlake" los ntawm lub neej ntawd hauv vectorized The code tau tso tseg tsis siv 512-ntsis zmm sau npe, tshwj tsis yog rau lawv qhov taw qhia ncaj qha hauv qhov chaws. Qhov laj thawj yog tias CPU zaus txo qis thaum ua haujlwm 512-ntsis, uas tuaj yeem cuam tshuam tsis zoo rau kev ua haujlwm tag nrho. Txhawm rau hloov tus cwj pwm tshiab, qhov kev xaiv "-mprefer-vector-width = 512" yog muab.
Tus cwj pwm ntawm tus chij "-flax-vector-conversions" zoo ib yam li GCC: implicit vector me ntsis conversion ntawm integer thiab floating-point vectors raug txwv. Txhawm rau tshem tawm qhov kev txwv no, nws tau thov kom siv tus chij
"-flax-vector-conversions = tag nrho" uas yog lub neej ntawd.
Txhim kho kev txhawb nqa rau MIPS CPUs ntawm Octeon tsev neeg. Ntxiv "octeon+" rau daim ntawv teev cov hom CPU siv tau.
Thaum sib sau ua ke rau hauv WebAssembly intermediate code, lub wasm-opt optimizer tau raug hu ua, yog tias muaj nyob hauv qhov system.
Ntxiv tshiab compiler chij: "-fgnuc-version" los teeb tsa tus nqi version rau "__GNUC__" thiab cov macro zoo sib xws; "-fmacro-prefix-map=OLD=NEW" los hloov cov npe ua ntej OLD nrog NEW hauv macros xws li "__FILE__"; "-fpatchable-function-entry=N[,M]" los tsim kom muaj qee tus lej ntawm NOP cov lus qhia ua ntej thiab tom qab lub ntsiab lus nkag. Rau RISC-V
ntxiv kev txhawb nqa rau "-ffixed-xX", "-mcmodel=medany" thiab "-mcmodel=medlow" chij.
Ntawm lub Windows platform, thaum qhia txog tus chij "-cfguard", kev hloov pauv ntawm kev ua tiav kev kuaj xyuas kev ncaj ncees (Control Flow Guard) rau kev hu xov tooj ncaj qha. Txhawm rau lov tes taw kev hloov pauv, koj tuaj yeem siv tus chij "-cfguard-nochecks" lossis "__declspec(guard(nocf))" hloov.
Tus cwj pwm ntawm gnu_inline tus cwj pwm zoo ib yam li GCC thaum nws siv yam tsis muaj lo lus "extern".
Lub peev xwm cuam tshuam nrog OpenCL thiab CUDA kev txhawb nqa tau nthuav dav. Ntxiv kev txhawb nqa rau OpenMP 5.0 nta tshiab.
Ib qho kev xaiv txheem tau muab ntxiv rau cov khoom siv clang-format, uas tso cai rau koj los txiav txim siab cov qauv ntawm C ++ tus qauv siv thaum parsing thiab formatting code (Last, Auto, c ++ 03, c ++ 11, c ++ 14, c++ 17, c++ 20).
Rau lub moj khaum Tus tsim tawm Tshiab interprocedural optimizations thiab analyzers tau ntxiv. Lub xeev ntawm 19 tus cwj pwm sib txawv tau kwv yees, suav nrog 12 tus cwj pwm 12 LLVM IR thiab 7 tus cwj pwm tsis meej xws li kev ua neej nyob.
Ntxiv tshiab matrix kev ua lej ua rau hauv lub compiler (Intrinsics), uas yog hloov los ntawm cov lus qhia vector zoo thaum muab tso ua ke.
Ntau qhov kev txhim kho tau ua rau backends rau X86, AArch64, ARM, SystemZ, MIPS, AMDGPU thiab PowerPC architectures. Ntxiv CPU txhawb
Cortex-A65, Cortex-A65AE, Neoverse E1 thiab Neoverse N1. Rau ARMv8.1-M, ββcov txheej txheem tsim cov cai tau ua kom zoo dua qub (piv txwv li, kev txhawb nqa rau lub voj voog nrog tsawg kawg nkaus nyiaj siv ua haujlwm tau tshwm sim) thiab kev txhawb nqa rau autovectorization tau ntxiv siv MVE txuas ntxiv. Txhim kho CPU MIPS Octeon kev txhawb nqa. Rau PowerPC, vectorization ntawm lej subroutines siv lub tsev qiv ntawv MASSV (Mathematical Acceleration SubSystem) tau qhib, kev tsim cov lej raug txhim kho, thiab kev nkag mus ntawm lub cim xeeb los ntawm cov voj voog tau zoo. Rau x86, kev tuav cov vector hom v2i32, v4i16, v2i16, v8i8, v4i8 thiab v2i8 tau hloov pauv.
Txhim kho code generator rau WebAssembly. Ntxiv kev txhawb nqa rau TLS (Thread-Local Storage) thiab cov lus qhia atomic.fence. Kev them nyiaj yug SIMD tau nthuav dav heev. WebAssembly cov ntaub ntawv tam sim no muaj peev xwm siv ntau tus nqi kos npe.
Analyzer yog siv thaum ua cov loops MemorySSA, uas tso cai rau koj los txhais cov kev vam meej ntawm kev ua haujlwm nco sib txawv. MemorySSA tuaj yeem txo qhov muab tso ua ke thiab ua tiav lub sijhawm lossis tuaj yeem siv los hloov AliasSetTracker yam tsis muaj kev poob haujlwm.