12.0 ãæã®éçºåŸãLLVM XNUMX ãããžã§ã¯ãã®ãªãªãŒã¹ãçºè¡šãããŸãããããã¯ãããã°ã©ã ã RISC ã®ãããªä»®æ³åœä»€ã®äžéãããã³ãŒãã«ã³ã³ãã€ã«ãã GCC äºæããŒã«ããã (ã³ã³ãã€ã©ããªããã£ãã€ã¶ãããã³ã³ãŒã ãžã§ãã¬ãŒã¿) ã§ã (ãã«ãã¬ãã«æé©åã·ã¹ãã )ã çæãããæ¬äŒŒã³ãŒãã¯ãããã°ã©ã å®è¡æã« JIT ã³ã³ãã€ã©ãŒã䜿çšããŠçŽæ¥æ©æ¢°èªåœä»€ã«å€æã§ããŸãã
Clang 12.0 ã®æ¹åç¹:
- C++20 æšæºã§ææ¡ãããŠãããå¯èœæ§ã®é«ããå±æ§ãšãå¯èœæ§ã®äœããå±æ§ã®ãµããŒããå®è£ ãããããã©ã«ãã§æå¹ã«ãªã£ãŠãããããæ¡ä»¶ä»ãæ§æãããªã¬ãŒããã確çã«ã€ããŠãªããã£ãã€ã¶ã«éç¥ã§ããããã«ãªããŸã (ããšãã°ãã[[likely ]] if (ã©ã³ãã > 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ããªã©ã®ã¢ãããã¯æäœãã«ããŒé¢æ°ãæå¹ãŸãã¯ç¡å¹ã«ããããã®æ°ããã³ã³ãã€ã© ãã©ã°ã-moutline-atomicsãããã³ã-mno-outline-atomicsããè¿œå ãããŸããã ãã®ãããªé¢æ°ã¯ãå®è¡æã« LSE (Large System Extensions) ãµããŒããå©çšå¯èœãã©ãããæ€åºããæäŸãããã¢ããã㯠ããã»ããµåœä»€ã䜿çšããããåæã®ããã« LL/SC (ããŒããªã³ã¯/ã¹ãã¢æ¡ä»¶ä»ã) åœä»€ã®äœ¿çšã«ãã©ãŒã«ããã¯ããŸãã
- å€ããªã³ã«ãŒããã³ã¢ã»ã³ãã©ãŒã®åäœãšã®äºææ§ã®ããã«ãbinutils ã¹ã€ãŒãã®ã¿ãŒã²ãã ããŒãžã§ã³ãéžæããããã®ã-fbinutils-versionããªãã·ã§ã³ãè¿œå ãããŸããã
- ELF å®è¡å¯èœãã¡ã€ã«ã®å Žåãã-gzããã©ã°ãæå®ãããšãzlib ã©ã€ãã©ãªã䜿çšãããããã°æ å ±ã®å§çž®ãããã©ã«ãã§æå¹ã«ãªããŸã (gz=zlib)ã çµæã®ãªããžã§ã¯ã ãã¡ã€ã«ããªã³ã¯ããã«ã¯ãlld ãŸã㯠GNU binutils 2.26 以éãå¿ èŠã§ãã binutils ã®å€ãããŒãžã§ã³ãšã®äºææ§ã埩å ããã«ã¯ãã-gz=zlib-gnuããæå®ããŸãã
- ãthisããã€ã³ã¿ã¯ãé null ããã³éåç §å¯èœ(N) ãã§ãã¯ã䜿çšããŠåŠçãããããã«ãªããŸããã NULL å€ã䜿çšããå¿ èŠãããå Žåã«é null å±æ§ãåé€ããã«ã¯ãã-fdelete-null-pointer-checksããªãã·ã§ã³ã䜿çšã§ããŸãã
- Linux ãã©ãããã©ãŒã ã§ã¯ãAArch64 ããã³ PowerPC ã¢ãŒããã¯ãã£ã§ã-fasynchronous-unwind-tablesãã¢ãŒããæå¹ã«ãªããGCC ãšåæ§ã«ã¢ã³ã¯ã€ã³ã ã³ãŒã« ããŒãã«ãçæããŸãã
- ã#pragma Clang Loop Vectorize_widthãã«ããã¯ãã«åæ¹æ³ãéžæããããã®ãfixedãïŒããã©ã«ãïŒããã³ãscalableããªãã·ã§ã³ãæå®ããæ©èœãè¿œå ãããŸããã ãã¯ãã«ã®é·ãã«äŸåããªããã¹ã±ãŒã©ãã«ãã¢ãŒãã¯å®éšçãªãã®ã§ãã¹ã±ãŒã©ãã«ãªãã¯ãã«åããµããŒãããããŒããŠã§ã¢ã§äœ¿çšã§ããŸãã
- Windows ãã©ãããã©ãŒã ã®ãµããŒãã®åäž: Clang ã³ã³ãã€ã©ãLLD ãªã³ã«ãŒãcompiler-rt ã©ã³ã¿ã€ã ã©ã€ãã©ãªãå«ããArm64 ã·ã¹ãã äžã® Windows çšã®å ¬åŒãã€ã㪠ã¢ã»ã³ããªãæºåãããŸããã MinGW ã¿ãŒã²ãã ãã©ãããã©ãŒã çšã«ãã«ãããå Žåãã¯ãã¹ã³ã³ãã€ã«ã®å Žåã§ãã.exe ãµãã£ãã¯ã¹ãè¿œå ãããŸãã
- OpenCLãOpenMPãCUDA ã®ãµããŒãã«é¢é£ããæ©èœãæ¡åŒµãããŸããã OpenCL 3.0ããã³OpenCL 1.0ã®ãã¯ããªãã·ã§ã³ãéžæãããªãã·ã§ã³ã-cl-std=CL3.0ãããã³ã-cl-std=CL1.0ããè¿œå ããŸããã 蚺æããŒã«ãæ¡åŒµãããŸããã
- äžéšã® x86 ããŒã¹ã®ããã»ããµã«å®è£ ãããŠãã HRESETãUINTRãããã³ AVXVNNI åœä»€ã®ãµããŒããè¿œå ãããŸããã
- x86 ã·ã¹ãã ã§ã¯ãã-mtune=ããªãã·ã§ã³ã®ãµããŒããæå¹ã«ãªã£ãŠããŸãã " -march= ã®å€ã«é¢ä¿ãªããéžæãããã€ã¯ãã¢ãŒããã¯ãã£ã®æé©åãæå¹ã«ããŸãã ã
- éçã¢ãã©ã€ã¶ãŒã§ã¯ãäžéšã® POSIX é¢æ°ã®åŠçãæ¹åãããæ¯èŒã«è€æ°ã®ã·ã³ããªãã¯å€ãããå Žåã®æ¡ä»¶æŒç®ã®çµæã®å€å®ãå€§å¹ ã«æ¹åãããŸããã æ°ãããã§ãã¯ãè¿œå ãããŸãã: fuchia.HandleChecker (æ§é å ã®ãã³ãã«ãå®çŸ©)ãwebkit.UncountedLambdaCapturesChecker Webkitãããã³ alpha.webkit.UncountedLocalVarsChecker (WebKit ãšã³ãžã³ ã³ãŒãã§ã®ãã€ã³ã¿ãŒã®æäœã®ç¹æ®æ§ãèæ ®ããŸã)ã
- å®æ°ã®ã³ã³ããã¹ãã§äœ¿çšãããåŒã§ã¯ãçµã¿èŸŒã¿é¢æ° __builtin_bitreverse*ã__builtin_rotateleft*ã__builtin_rotateright*ã_mm_popcnt*ã_bit_scan_forwardã__bsfdã__bsfqã__bit_scan_reverseã__bsrdã__bsrqã__bswapã__bswapdã__bswap64 ã®äœ¿çšãèš±å¯ãããŸãã .__bswapq ã_castf*ã__rol*ã__ror*ã
- èå¥åãåããã£ãŒã«ãå®çŸ©ã®åšå²ã®ééãéžæããããã«ãClang-format ãŠãŒãã£ãªãã£ã« BitFieldColonSpacing ãªãã·ã§ã³ãè¿œå ããŸããã
- Linux ãã©ãããã©ãŒã äžã® Clangd ãã£ãã·ã¥ ãµãŒã㌠(Clang ãµãŒããŒ) ã¯ãé·æéçšæã®ã¡ã¢ãªæ¶è²»ãå€§å¹ ã«åæžããŸãã (空ãã¡ã¢ãª ããŒãžããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«è¿ãããã«ãmalloc_trim ãžã®å®æçãªåŒã³åºããæäŸãããŸã)ã
LLVM 12.0 ã®äž»ãªé©æ°:
- Python ã§èšè¿°ããã llvm-build ãã«ã ããŒã«ã®ãµããŒãã¯å»æ¢ããã代ããã«ãããžã§ã¯ã㯠CMake ãã«ã ã·ã¹ãã ã®äœ¿çšã«å®å šã«åãæ¿ãããŸããã
- AArch64 ã¢ãŒããã¯ãã£ã®ããã¯ãšã³ãã§ã¯ãWindows ãã©ãããã©ãŒã ã®ãµããŒããæ¹åãããŸãããã¿ãŒã²ãã Windows ã·ã¹ãã çšã®ã¢ã»ã³ãã©åºåãæ£ããçæãããããã«ãªããã¢ã³ã¯ã€ã³ãåŒã³åºãã§ã®ããŒã¿ã®çæãæé©åãããŸãã (ãã®ãããªããŒã¿ã®ãµã€ãºã 60 åæžãããŸãã)ã %)ãã¢ã»ã³ãã©ã䜿çšããŠã¢ã³ã¯ã€ã³ã ããŒã¿ãäœæããæ©èœããã£ã¬ã¯ãã£ã .seh_* ã«è¿œå ãããŸããã
- PowerPC ã¢ãŒããã¯ãã£ã®ããã¯ãšã³ãã«ã¯ãã«ãŒããšã€ã³ã©ã€ã³ ãããã€ã¡ã³ãã®æ°ããæé©åãPower10 ããã»ããµã®ãµããŒãã®æ¡åŒµãè¡åæäœã®ããã® 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 æ¥å°ŸèŸã®ãµããŒããã¢ã»ã³ãã©ã«è¿œå ãããŸããã ãã€ã¯ãã¢ãŒããã¯ãã£æé©åã®çµã¿èŸŒã¿ãå¶åŸ¡ããããã®æ°ããå±æ§ãtune-cpuããè¿œå ããŸããã
- æ°ããã¢ãŒãã-fsanitize=unsigned-shift-baseããæŽæ°åé¡æ€åºåš (æŽæ°ãµãã¿ã€ã¶ãŒãã-fsanitize=integerã) ã«è¿œå ãããå·Šãžã®ããã ã·ããåŸã®ç¬Šå·ãªãæŽæ°ã®ãªãŒããŒãããŒãæ€åºããŸãã
- ããŸããŸãªæ€åºåš (asanãcfiãlsanãmsanãtsanãubsan ãµãã¿ã€ã¶ãŒ) ã§ãæšæº Musl ã©ã€ãã©ãªãåãã Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãµããŒããè¿œå ãããŸããã
- LLD ãªã³ã«ãŒã®æ©èœãæ¡åŒµãããŸããã ãªãã·ã§ã³ã--dependency-fileããã-error-handling-scriptããã-lto-pseudo-probe-for-profilingããã-no-lto-whole-programãã®è¿œå ãªã©ãELF 圢åŒã®ãµããŒããæ¹åãããŸããã -èŠèªæ§ââ MinGW ãµããŒãã®æ¹åã Mach-O ãã©ãŒããã (macOS) ã®å Žåãarm64ãarmãããã³ i386 ã¢ãŒããã¯ãã£ããªã³ã¯ææé©å (LTO)ãããã³äŸå€åŠçã®ããã®ã¹ã¿ã㯠ã¢ã³ã¯ã€ã³ãã®ãµããŒããå®è£ ãããŸããã
- Libc++ 㯠C++20 æšæºã®æ°æ©èœãå®è£ ããŠãããC++2b ä»æ§ã®æ©èœã®éçºãéå§ããŠããŸãã ããŒã«ãªãŒãŒã·ã§ã³ ãµããŒã (ã-DLIBCXX_ENABLE_LOCALIZATION=OFFã) ãç¡å¹ã«ããŠãã«ãããããã®ãµããŒããšãæ¬äŒŒä¹±æ°ãçæããããã®ããã€ã¹ (ã-DLIBCXX_ENABLE_RANDOM_DEVICE=OFFã) ã®ãµããŒããè¿œå ãããŸããã
åºæïŒ ãªãŒãã³ããã.ru