ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ ááŒá±á¬ááºáá¡ááŒá¬ááœááºá LLVM 12.0 ááá±á¬áá»ááºááᯠáá¯ááºááœáŸáá·áºááŒááá²á·ááẠ- GCC-áááá¬áááŒá áºáá±á¬ áááááá¬áááºáá¬ááá¬áá»á¬áž (compilersá optimizers ááŸáá·áº code generators) ááẠáááá¯ááááºáá»á¬ážááᯠRISC áá²á·ááá¯á·áá±á¬ á¡áááºá¡áááºáá áºáá¯ááºá¡ááŒá Ạá á¯á ááºážáá¬ážáá±á¬ RISC áá²á·ááá¯á·áá±á¬ virtual ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž (á¡ááá·áºáááá·áº virtual machine áá áºáá¯áá«ááŸááá±á¬á Multi-level optimization á áá áº)á áá¯ááºáá¯ááºááá¯ááºáá±á¬ pseudocode ááᯠJIT compiler áá¯á¶ážááŒá®áž áááá¯ááááºááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá»áááºááœáẠááá¯ááºááá¯áẠá ááºááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡ááŒá ẠááŒá±á¬ááºážáá²ááá¯ááºáááºá
Clang 12.0 ááœáẠááá¯ážáááºááŸá¯áá»á¬áž-
- C++20 á á¶ááŸá¯ááºážááœáẠá¡ááá¯ááŒá¯áá¬ážáá±á¬ "ááŒá áºááá¯ááºáá»á±" ááŸáá·áº "ááŒá áºááá¯ááºááœááº" áááºááœáŸááºážáá»ááºáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯á¡á¬áž áá¯á¶áá±á¡á¬ážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á«áºááŒá®áž ááœáá·áºáá¬ážáá±á¬ááŒá±á¬áá·áº ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºáá°á¡á¬áž á¡ááŒá±á¡áá±ááá¯ááºáá¬áááºáá±á¬ááºááŸá¯á¡á áá»áá¯ážááŒááºážáááŒá áºááá¯ááºááŒá±ááŸáá·áº áááºáááºá á¡ááŒá±á¬ááºážááŒá¬ážááá¯ááºá á±ááẠ(á¥ááá¬á "[[ááŒá áºááá¯ááºááŒá± ]] á¡áááºá (áá»áááºáž > 0) {â)á
- AMD Zen 3 (-march=znver3)á Intel Alder Lake (-march=alderlake) ááŸáá·áº Intel Sapphire Rapids (-march=sapphirerapids) áááá¯áááºáá¬áá»á¬ážá¡ááœáẠáááºáá±á¬ááºážáá¶á·ááá¯ážááŸá¯á
- x86-64 áááá¯áá¬á¡ááá·áºáá»á¬ážááᯠááœá±ážáá»ááºááẠ"-march=x234-86-v[64]" á¡áá¶áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºáá±á¬ááºážááá·áºááœááºážáá¬ážááẠ(v2 - SSE4.2á SSSE3á POPCNT ááŸáá·áº CMPXCHG16B ááá¯ážáá»á²á·ááŸá¯áá»á¬ážá v3 - AVX2 ááŸáá·áº MOVBE; v4 - AVX-512 )
- Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) ááŸáá·áº Fujitsu A64FX (a64fx) áááá¯áááºáá¬áá»á¬ážá¡ááœáẠáááºáá±á¬ááºážáá¶á·ááá¯ážááŸá¯á á¥ááá¬á¡á¬ážááŒáá·áºá Neoverse-V1 CPU áá»á¬ážá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºáááºá â-mcpu=neoverse-v1â ááᯠááẠáááºááŸááºááá¯ááºáá«áááºá
- AArch64 áááá¯áá¬á¡ááœááºá "__aarch64_cas8_relax" áá²á·ááá¯á·áá±á¬ atomic operation helper áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááœáá·áºááẠááá¯á·ááá¯áẠááááºááẠááœááºááá®áá¬á¡áá¶á¡áá Ạ"-moutline-atomics" ááŸáá·áº "-mno-outline-atomics" ááᯠáá±á«ááºážááá·áºáá¬ážáááºá á¡ááá¯áá«áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠLSE (ááŒá®ážáá¬ážáá±á¬á áá áºááá¯ážáá»á²á·ááŸá¯áá»á¬áž) áá¶á·ááá¯ážááŸá¯áááŸáááá¯ááºáááºááŸááááŸáááᯠruntime ááœááºááááŸáááá¯ááºááŒá®áž áá¶á·ááá¯ážáá±ážáá¬ážááá·áº á¡áá¯ááŒá°áááá¯áááºáá¬ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºáž ááá¯á·ááá¯áẠáááºáá°ááŒá¯ááŒááºážá¡ááœáẠLL/SC (Load-link/store-conditional) ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááá¯á· ááŒááºáá±á¬ááºááœá¬ážáá«áááºá
- á¡áá±á¬ááºážáá»á¬ážááŸáá·áº áá»áááºáááºáá°ááŸáá·áº áááºáááºáá° á¡ááŒá¯á¡áá°ááá¯á·ááŸáá·áº ááá¯ááºáááºááŸá¯ááŸáá á±ááẠbinutils suite á áá áºááŸááºáá¬ážááŸááºážááᯠááœá±ážáá»ááºááẠ"-fbinutils-áá¬ážááŸááºáž" ááœá±ážá áá¬ááᯠáá±á«ááºážááá·áºáá¬ážáááºá
- ELF á á®áá¶áá±á¬ááºááœááºááá¯ááºáá±á¬ ááá¯ááºáá»á¬ážá¡ááœááºá "-gz" á¡áá¶ááᯠáááºááŸááºáá±á¬á¡áá«á zlib á á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á á¡ááŸá¬ážááŸá¬ááŒááºáž á¡áá»ááºá¡áááºáá»á¯á¶á·ááŒááºážááᯠáá°áááºáž (gz=zlib) ááŒáá·áº ááœáá·áºáá¬ážáááºá áááŸááá¬áá±á¬ á¡áá¬ááá¹áá¯ááá¯ááºáá»á¬ážááᯠáá»áááºáááºááŒááºážááẠlld ááá¯á·ááá¯áẠGNU binutils 2.26+ ááá¯á¡ááºáááºá Binutils áá¬ážááŸááºážá¡áá±á¬ááºážáá»á¬ážááŸáá·áº ááá¯ááºáááºáá®ááŸá¯ááᯠááŒááºáááºááá°áááºá áááºááẠ"-gz=zlib-gnu" ááᯠáááºááŸááºááá¯ááºáááºá
- 'á€' ááœáŸááºááŒáá»ááºááᯠááá¯á¡áá« nonnull ááŸáá·áº dereferenceable(N) á á áºáá±ážááŸá¯áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºáá±áá«áááºá NULL áááºááá¯ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºááá¯á¡ááºááá·áºá¡áá« nonnull attribute ááᯠáááºááŸá¬ážááẠ"-fdelete-null-pointer-checks" option ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
- Linux ááááºáá±á¬ááºážááœááºá "-fasynchronous-unwind-tables" áá¯ááºááᯠGCC ááœááºáá²á·ááá¯á· unwind call tables áá»á¬ážáá¯ááºáá¯ááºáááºá¡ááœáẠAArch64 ááŸáá·áº PowerPC Architectures á¡ááœáẠááœáá·áºáá¬ážáááºá
- "#pragma clang loop vectorize_width" ááœáẠvectorization method ááá¯ááœá±ážáá»ááºááẠ"fixed" (default) ááŸáá·áº "scalable" options áá»á¬ážááᯠáááºááŸááºáá±ážááá¯ááºáááºá vector length ááŸáá·áº áááºážáá±á¬ "scalable" mode ááẠá ááºážáááºáá²ááŒá áºááŒá®áž á¡ááœááºá¡á á¬ážááŸá vectorization ááᯠáá¶á·ááá¯ážáá±ážááá·áº áá¬á·ááºáá²ááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
- Windows ááááºáá±á¬ááºážá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬áá¶á·ááá¯ážááŸá¯- Arm64 á áá áºáá»á¬ážááŸá Windows á¡ááœááºááá¬ážááẠbinary á ááºážáá±ážááŸá¯áá»á¬ážááᯠClang compilerá LLD linker ááŸáá·áº compiler-rt runtime libraries áá»á¬ážá¡áá«á¡ááẠááŒááºáááºáá¬ážáá«áááºá MinGW áá áºááŸááºááááºáá±á¬ááºážáá»á¬ážá¡ááœáẠáááºáá±á¬ááºááá·áºá¡áá«á áá±á«ááºážáá°ážááá·áºááá·áºá¡áá«áááẠ.exe suffix ááᯠáá±á«ááºážááá·áºáááºá
- OpenCLá OpenMP ááŸáá·áº CUDA á¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŸáá·áº áááºá ááºáá±áá±á¬ á áœááºážáááºáá»á¬ážááᯠááá¯ážáá»á²á·áá¬ážáá«áááºá OpenCL 3.0 ááŸáá·áº OpenCL 1.0 á¡ááœáẠáááºáááá¯ááœá±ážáá»ááºá áá¬áá»á¬ážááᯠááœá±ážáá»ááºááẠ"-cl-std=CL3.0" ááŸáá·áº "-cl-std=CL1.0" ááá¯á·ááᯠááá·áºááœááºážáá¬ážáááºá áá±á¬áá«ááŸá¬ááœá±áá±ážáááááá¬áá»á¬ážááᯠááá¯ážáá»á²á·áá¬ážáááºá
- á¡áá»áá¯á·áá±á¬ x86-based áááá¯áááºáá¬áá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá²á·áá±á¬ HRESETá UINTR ááŸáá·áº AVXVNNI ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºááá·áºáá¬ážáááºá
- x86 á áá áºáá»á¬ážááœáẠ"-mtune=" ááœá±ážáá»ááºááŸá¯á¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠááœáá·áºáá¬ážáááºá "-march= ááááºááá¯ážááá¯áááœá²ááŒá¬ážáá² ááœá±ážáá»ááºáá¬ážáá±á¬ á¡áá±ážá á¬ážáááá¯áá¬ááá¯ááºáᬠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡áááºááœááºážáá±ážáá±á¬á â
- static analyzer ááẠá¡áá»áá¯á·áá±á¬ POSIX áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááá¯ážáááºáá±á¬ááºážááœááºá á±ááŒá®áž ááŸáá¯ááºážááŸááºááŸá¯ááœáẠáááºá¹áá±ááááºááá¯ážáá»á¬ážá áœá¬ááŸááá±á¬á¡áá« á¡ááŒá±á¡áá±ááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá ááááºááᯠáááááá¬áᬠááá¯ážáááºá á±áá«áááºá á á áºáá±ážááŸá¯á¡áá áºáá»á¬ážááᯠááá·áºááœááºážáá¬ážáááº- fuchia.HandleChecker (áááºáá±á¬ááºáá¯á¶áá»á¬ážááœáẠáááºááá¯ááºáá»á¬ážááᯠáááºááŸááºáááº)á webkit.UncountedLambdaCapturesChecker webkit ááŸáá·áº alpha.webkit.UncountedLocalVarsChecker (WebKit á¡ááºáá»ááºáá¯ááºááŸá pointers áá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážá áá°ážááŒá¬ážáá»ááºáá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážáááº)á
- ááááºážáá±áá»á¬ážá áááºá ááºááŸá¯ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº á áá¬ážáááºáá»á¬ážááœáẠáá«áááºáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠ__builtin_bitreverse*á __builtin_rotateleft*á __builtin_rotateright*á _mm_popcnt*á _bit_scan_forwardá __bsfdá __bsfq _bs_qá _bs_wá apá __bswapdá __bswap64 ááᯠááœáá·áºááŒá¯áá¬ážáááºá __bswapq á _castf*á __rol* ááŸáá·áº __ror*á
- ááœá²ááŒá¬ážáááºááŸááºááŸá¯áá»á¬ážá áá±á¬áºáá¶áá»á¬ážááŸáá·áº á¡ááœááºá¡áááá¹áá¬ááºááœáá·áºááá¯áá»ááºáá»á¬ážá¡áá®ážááŸá á¡ááœá¬á¡áá±ážáá»á¬ážááᯠááœá±ážáá»ááºááẠBitFieldColonSpacing ááœá±ážáá»ááºááŸá¯áá áºáá¯ááᯠáá±á«ááºážááá·áºáá²á·áááºá
- Linux ááááºáá±á¬ááºážááŸá clangd áááºááŸáºáá¬áᬠ(Clang Server) ááẠáá±ááŸááºáááºáááºáá±á ááºá¡ááœááºáž ááŸááºáá¬ááºáá¯á¶ážá áœá²ááŸá¯ááᯠáááááá¬áᬠáá»áŸá±á¬á·áá»áá±ážááẠ(á¡áá»áááºá¡áá«á¡ááá¯áẠáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠmalloc_trim ááá¯á· á¡ááá²á·áááºááá¯áá®á á¬áá»ááºááŸá¬áá»á¬ážááᯠáááºáááºááŸá¯á áá áºááá¯á· ááŒááºááá¯á·ááẠáá±á¬ááºáá¶á·áá±ážáááº)á
LLVM 12.0 ááœáẠá¡ááá áá®ááœááºáááºážáá áºááŸá¯áá»á¬áž-
- Python ááœááºáá±ážáá¬ážáá±á¬ llvm-build build tool á¡ááœáẠáá¶á·ááá¯ážááŸá¯á¡á¬áž áááºááá¯ááºážááá¯ááºááŒá®áž áááºážá¡á á¬áž ááá±á¬áá»ááºááẠCMake build system ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááá¯á· áá¯á¶ážáááŒá±á¬ááºážááœá¬ážáá²á·áááºá
- AArch64 áááá¯áá¬áááºáá¬á¡ááœáẠáá±á¬ááºááœááºááœááºá Windows ááááºáá±á¬ááºážá¡ááœáẠáá¶á·ááá¯ážááŸá¯á¡á¬áž ááŒáŸáá·áºáááºáá¬ážáááº- áá áºááŸáẠWindows á áá áºáá»á¬ážá¡ááœáẠááŸááºáááºáá±á¬ á á¯áá±ážáá°áá¯ááºáá±ážááá·áº áá»áá¯ážáááºááᯠáá±áá»á¬á á±áá²á·ááŒá®ážá unwind calls áá»á¬ážá¡ááœáẠáá±áá¬áá»áá¯ážáááºááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážááẠ(ááá¯áá²á·ááá¯á·áá±á¬ áá±áá¬á¡ááœááºá¡á á¬ážááᯠ60 áá»áŸá±á¬á·áá»áá¬ážáááºá %)á assembler ááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬ááᯠááŒá¯ááºážáá®ážáá áºááá¯ááºá áœááºážááᯠ.seh_* ááœáẠááá·áºááœááºážáá¬ážáá«áááºá
- PowerPC áááá¯áá¬á¡ááœáẠáá±á¬ááºááœááºááœáẠá¡ááœááºáá»á¬ážááŸáá·áº á¡ááœááºážááá¯ááºáž ááŒáá·áºáá»ááºááŒááºážá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá Power10 áááá¯áááºáá¬áá»á¬ážá¡ááœáẠááá¯ážáá»á²á·áá¶á·ááá¯ážááŸá¯á matrix ááŒááºááŸááºááŸá¯á¡ááœáẠMMA áááºážááœáŸááºáá»ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááŸá¯ááŸáá·áº AIX áááºáááºááŸá¯á áá áºá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ áá¶á·ááá¯ážááŸá¯ááá¯á·áá«ááŸááááºá
- x86 áá±á¬ááºáá¶á¡á áœááºááẠAMD Zen 3á Intel Alder Lake ááŸáá·áº Intel Sapphire Rapids áááá¯áááºáá¬áá»á¬ážá¡ááŒáẠHRESETá UINTR ááŸáá·áº AVXVNNI áááá¯áááºáᬠáááºážááœáŸááºáá»ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá ááŸááºáá¬ááºáááºááááááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá±á¬á·ááẠááá¯ááºááŒá±á¬ááºáž áá±áá»á¬á á±ááẠá¡ááŸááºá¡áá¬ážáá»á¬ážááᯠá á áºáá±ážááŒááºážá¡ááœáẠMPX (Memory Protection Extensions) á¡ááœáẠáá¶á·ááá¯ážááŸá¯ (á€áááºážááá¬ááẠááá»ááºááŒáá·áºáá±ážáá«á GCC ááŸáá·áº clang ááá¯á·á០áááºááŸá¬ážáá¬ážááŒá®ážááŒá áºáááº)á {disp32} ááŸáá·áº {disp8} ááŸá±á·áááºáá»á¬ážááŸáá·áº .d32 ááŸáá·áº .d8 á áá±á¬ááºáááºááœá²áá»á¬ážá¡ááœáẠáááºáááºáá°á¡á¬áž áá¶á·ááá¯ážáá°áá®ááŸá¯ áá±á«ááºážááá·áºáá¬ážáááºá microarchitectural optimizations áá»á¬ážáá«áááºááŸá¯ááᯠááááºážáá»á¯ááºááẠáááºááœáŸááºážáá»ááºá¡áá Ạ"tune-cpu" ááᯠáááºááá·áºáá¬ážáááºá
- áááºáááºááá¯á· á¡áááºážáááºááŒá±á¬ááºážááŒá®ážáá±á¬áẠáááºááŸááºáááá¯ážáá¬ážáá±á¬ ááááºážááŒáá·áºáá»á¬áž ááŒáá·áºáá»áŸá¶áá±ááŸá¯áá»á¬ážááᯠááŸá¬ááœá±ááẠáá¯ááºá¡áá Ạâ-fsanitize=unsigned-shift-baseâ ááᯠááááºážááŒáá·áºááŒá¿áá¬ááŸá¬ááœá±á áẠ(integer sanitizerá â-fsanitize=integerâ) ááá¯á· áá±á«ááºážááá·áºááá¯ááºáá«ááŒá®á
- á¡áá»áá¯ážáá»áá¯ážáá±á¬ detectors (asaná cfiá lsaná msaná tsaná ubsan sanitizer) á ᶠMusl á á¬ááŒáá·áºááá¯ááºááŒáá·áº Linux ááŒáá·áºáá±ááŸá¯áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá¬ážáá«áááºá
- LLD linker áá áœááºážáááºáá»á¬ážááᯠáá»á²á·ááœááºáá¬ážáá«áááºá áááºáá±á¬ááºážááœá±ážáá»ááºá áá¬áá»á¬áž á¡áá«á¡ááẠâ--ááŸá®ááá¯-ááá¯ááºâá â-á¡ááŸá¬áž-ááá¯ááºááœááº-á ááá áºâá â-lto-pseudo-probe-for-profilingâá â-no-lto-whole-program á¡áá«á¡ááẠELF áá±á¬áºáááºá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ áá¶á·ááá¯ážááŸá¯ - ááŒááºááá¯ááºá áœááºáž "" ááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ MinGW áá¶á·ááá¯ážááŸá¯á Mach-O áá±á¬áºááẠ(macOS) á¡ááœááºá arm64á arm ááŸáá·áº i386 áááá¯áá¬áá»á¬áž á¡ááœáẠáá¶á·ááá¯ážááŸá¯á ááá·áºááº-á¡áá»ááẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¯ááºáá±á¬ááºááŸá¯áá»á¬áž (LTO) ááŸáá·áº ááŒáœááºážáá»áẠááá¯ááºááœááºááŸá¯á¡ááœáẠstack unwinding ááᯠá¡áá±á¬ááºá¡ááẠáá±á¬áºáá¬ážáááºá
- Libc++ ááẠC++ 20 á á¶ááŸá¯ááºážá á¡ááºá¹áá«áááºá¡áá áºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®áž C++ 2b áááºááŸááºáá»ááºá á¡ááºá¹áá«áááºáá»á¬ážááᯠá áááºáá®ááœááºáá²á·áááºá áá±áá¡ááá¯ááºááŒá±á¬ááºážáá²ááŒááºáž áá¶á·ááá¯ážááŸá¯ (â-DLIBCXX_ENABLE_LOCALIZATION=OFFâ) ááŸáá·áº pseudo-random áá¶áá«ááºáá»á¬ážáá¯ááºáá±ážááŒááºážá¡ááœáẠá ááºáá á¹á ááºážáá»á¬áž (â-DLIBCXX_ENABLE_RANDOM_DEVICE=OFFâ) ááá¯ááááºáá¬ážááŒááºážááŒáá·áº áááºáá±á¬ááºááŒááºážá¡ááœáẠáááºáá±á¬ááºážáá¶á·ááá¯ážááŸá¯á
source: opennet.ru