ืฉื—ืจื•ืจ ืžืขืจืš ื”ืžื”ื“ืจ LLVM 12.0

ืœืื—ืจ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื ืฉืœ ืคื™ืชื•ื—, ื”ื•ืฆื’ื” ื”ืฉื—ืจื•ืจ ืฉืœ ืคืจื•ื™ืงื˜ LLVM 12.0 - ืขืจื›ืช ื›ืœื™ื ืชื•ืืžืช GCC (ืžื”ื“ืจื™ื, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื•ืžื—ื•ืœืœื™ ืงื•ื“) ื”ืžืจื›ื™ื‘ื” ืชื•ื›ื ื™ื•ืช ืœืงื•ื“ ื‘ื™ื ื™ื™ื ืฉืœ ื”ื•ืจืื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื“ืžื•ื™ื•ืช RISC (ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืจืžื” ื ืžื•ื›ื” ืขื ืžืขืจื›ืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžืจื•ื‘ืช ืจืžื•ืช). ื ื™ืชืŸ ืœื”ืžื™ืจ ืืช ื”ืคืกืื•ื“ื•ืงื•ื“ ืฉื ื•ืฆืจ ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ JIT ืœื”ื•ืจืื•ืช ืžื›ื•ื ื” ื™ืฉื™ืจื•ืช ื‘ื–ืžืŸ ื‘ื™ืฆื•ืข ื”ืชื•ื›ื ื™ืช.

ืฉื™ืคื•ืจื™ื ื‘-Clang 12.0:

  • ืชืžื™ื›ื” ื‘ืชื›ื•ื ื•ืช "ืกื‘ื™ืจ" ื•"ืœื ืกื‘ื™ืจ" ื”ืžื•ืฆืขื•ืช ื‘ืชืงืŸ C++20 ื™ื•ืฉืžื” ื•ืžื•ืคืขืœื” ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืžื” ืฉืžืืคืฉืจ ืœืžื™ื˜ื•ื‘ ืœืงื‘ืœ ืžื™ื“ืข ืขืœ ื”ื”ืกืชื‘ืจื•ืช ืฉื”ืžื‘ื ื” ื”ืžื•ืชื ื” ื™ื•ืคืขืœ (ืœื“ื•ื’ืžื”, "[[ืกื‘ื™ืจ ]] if (ืืงืจืื™ > 0) {โ€œ).
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžืขื‘ื“ื™ AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) ื•-Intel Sapphire Rapids (-march=sapphirerapids).
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื“ื’ืœื™ "-march=x86-64-v[234]" ืœื‘ื—ื™ืจืช ืจืžื•ืช ืืจื›ื™ื˜ืงื˜ื•ืจืช x86-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, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ "-mcpu=neoverse-v1".
  • ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจืช AArch64, ื ื•ืกืคื• ื“ื’ืœื™ ืžื”ื“ืจ ื—ื“ืฉื™ื "-moutline-atomics" ื•-"-mno-outline-atomics" ื›ื“ื™ ืœืืคืฉืจ ืื• ืœื”ืฉื‘ื™ืช ืคื•ื ืงืฆื™ื•ืช ืžืกื™ื™ืขื•ืช ืœืคืขื•ืœื” ืื˜ื•ืžื™ืช, ื›ื’ื•ืŸ "__aarch64_cas8_relax". ืคื•ื ืงืฆื™ื•ืช ื›ืืœื” ืžื–ื”ื•ืช ื‘ื–ืžืŸ ื”ืจื™ืฆื” ืื ืชืžื™ื›ืช LSE (Large System Extensions) ื–ืžื™ื ื” ื•ืžืฉืชืžืฉื•ืช ื‘ื”ื•ืจืื•ืช ื”ืžืขื‘ื“ ื”ืื˜ื•ืžื™ ืฉืกื•ืคืงื• ืื• ื—ื•ื–ืจื•ืช ืœืฉื™ืžื•ืฉ ื‘ื”ื•ืจืื•ืช LL/SC (Load-link/store-conditioned) ืœืกื ื›ืจื•ืŸ.
  • ื ื•ืกืคื” ืืคืฉืจื•ืช "-fbinutils-version" ืœื‘ื—ื™ืจืช ื’ืจืกืช ื”ื™ืขื“ ืฉืœ ื—ื‘ื™ืœืช binutils ืœืฆื•ืจืš ืชืื™ืžื•ืช ืขื ื”ืชื ื”ื’ื•ืช ืงื™ืฉื•ืจื™ื ื•ื”ืจื›ื‘ื™ื ื™ืฉื ื™ื ื™ื•ืชืจ.
  • ืขื‘ื•ืจ ืงื‘ืฆื™ ื”ืคืขืœื” ELF, ื›ืืฉืจ ื“ื’ืœ "-gz" ืžืฆื•ื™ืŸ, ื“ื—ื™ืกื” ืฉืœ ืžื™ื“ืข ืื™ืชื•ืจ ื‘ืื’ื™ื ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ืช zlib ืžื•ืคืขืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ (gz=zlib). ืงื™ืฉื•ืจ ืงื‘ืฆื™ ื”ืื•ื‘ื™ื™ืงื˜ ื”ืžืชืงื‘ืœื™ื ื“ื•ืจืฉ lld ืื• GNU binutils 2.26+. ื›ื“ื™ ืœืฉื—ื–ืจ ืชืื™ืžื•ืช ืขื ื’ืจืกืื•ืช ื™ืฉื ื•ืช ื™ื•ืชืจ ืฉืœ binutils, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ "-gz=zlib-gnu".
  • ื”ืžืฆื‘ื™ืข 'ื–ื”' ืžืขื•ื‘ื“ ื›ืขืช ืขื ื‘ื“ื™ืงื•ืช ืœื-null ื•-derreferenceable(N). ื›ื“ื™ ืœื”ืกื™ืจ ืืช ื”ืชื›ื•ื ื” nonnull, ืื ืืชื” ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืขืจื›ื™ NULL, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืืคืฉืจื•ืช "-fdelete-null-pointer-checks".
  • ื‘ืคืœื˜ืคื•ืจืžืช ืœื™ื ื•ืงืก, ืžืฆื‘ "-fasynchronous-unwind-tables" ืžื•ืคืขืœ ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช AArch64 ื•-PowerPC ืœื™ืฆื™ืจืช ื˜ื‘ืœืื•ืช ืฉื™ื—ื•ืช ื‘ื™ื˜ื•ืœ, ื›ืžื• ื‘-GCC.
  • ื‘-"#pragma clang loop vectorize_width" ื”ื•ืกื™ืคื” ืืช ื”ื™ื›ื•ืœืช ืœืฆื™ื™ืŸ ืืช ื”ืืคืฉืจื•ื™ื•ืช "fixed" (ื‘ืจื™ืจืช ืžื—ื“ืœ) ื•-"Scalable" ืœื‘ื—ื™ืจืช ืฉื™ื˜ืช ื”ื•ื•ืงื˜ื•ืจื™ื–ืฆื™ื”. ืžืฆื‘ ื”"ืžื“ืจื•ื’", ืœืœื ืชืœื•ืช ื‘ืื•ืจืš ื”ื•ื•ืงื˜ื•ืจ, ื”ื•ื ื ื™ืกื™ื•ื ื™ ื•ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื‘ื—ื•ืžืจื” ืฉืชื•ืžื›ืช ื‘ื•ืงื˜ื•ืจื™ื–ืฆื™ื” ื ื™ืชื ืช ืœื”ืจื—ื‘ื”.
  • ืชืžื™ื›ื” ืžืฉื•ืคืจืช ื‘ืคืœื˜ืคื•ืจืžืช Windows: ื”ื•ื›ื ื• ืžื›ืœื•ืœื™ื ื‘ื™ื ืืจื™ื™ื ืจืฉืžื™ื™ื ืขื‘ื•ืจ Windows ื‘ืžืขืจื›ื•ืช Arm64, ื›ื•ืœืœ ื”ืžื”ื“ืจ Clang, ืžืงืฉืจ LLD ื•ืกืคืจื™ื•ืช ื–ืžืŸ ืจื™ืฆื” ืžื”ื“ืจ-rt. ื‘ืขืช ื‘ื ื™ื™ื” ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžื•ืช ื™ืขื“ ืฉืœ MinGW, ืžืชื•ื•ืกืคืช ืกื™ื•ืžืช .exe, ื’ื ื‘ืขืช ืงื•ืžืคื™ืœืฆื™ื” ืฆื•ืœื‘ืช.
  • ื”ื™ื›ื•ืœื•ืช ื”ืงืฉื•ืจื•ืช ืœืชืžื™ื›ื” ื‘-OpenCL, OpenMP ื•-CUDA ื”ื•ืจื—ื‘ื•. ื ื•ืกืคื• ืืคืฉืจื•ื™ื•ืช "-cl-std=CL3.0" ื•-"-cl-std=CL1.0" ื›ื“ื™ ืœื‘ื—ื•ืจ ืืคืฉืจื•ื™ื•ืช ืžืืงืจื• ืขื‘ื•ืจ OpenCL 3.0 ื•-OpenCL 1.0. ื›ืœื™ ื”ืื‘ื—ื•ืŸ ื”ื•ืจื—ื‘ื•.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื”ื•ืจืื•ืช HRESET, UINTR ื•-AVXVNNI ื”ืžื™ื•ืฉืžื•ืช ื‘ื—ืœืง ืžื”ืžืขื‘ื“ื™ื ืžื‘ื•ืกืกื™ x86.
  • ื‘ืžืขืจื›ื•ืช x86, ื”ืชืžื™ื›ื” ื‘ืืคืฉืจื•ืช "-mtune=" ืžื•ืคืขืœืช, ืžื” ืฉืžืืคืฉืจ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืžื™ืงืจื•-ืืจื›ื™ื˜ืงื˜ื•ื ื™ื•ืช ื ื‘ื—ืจื•ืช ืœืœื ืงืฉืจ ืœืขืจืš "-march=".
  • ื”ืžื ืชื— ื”ืกื˜ื˜ื™ ืฉื™ืคืจ ืขื™ื‘ื•ื“ ืฉืœ ื›ืžื” ืคื•ื ืงืฆื™ื•ืช POSIX ื•ืฉื™ืคืจ ืžืฉืžืขื•ืชื™ืช ืืช ื”ืงื‘ื™ืขื” ืฉืœ ื”ืชื•ืฆืื” ืฉืœ ืคืขื•ืœื•ืช ืžื•ืชื ื•ืช ื›ืืฉืจ ื™ืฉ ืžืกืคืจ ืขืจื›ื™ื ืกืžืœื™ื™ื ื‘ื”ืฉื•ื•ืื”. ื‘ื“ื™ืงื•ืช ื—ื“ืฉื•ืช ื ื•ืกืคื•: fuchia.HandleChecker (ืžื’ื“ื™ืจ ื™ื“ื™ื•ืช ื‘ืžื‘ื ื™ื), webkit.UncountedLambdaCapturesChecker webkit ื•-alpha.webkit.UncountedLocalVarsChecker (ืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืžื•ื–ืจื•ื™ื•ืช ืฉืœ ืขื‘ื•ื“ื” ืขื ืžืฆื‘ื™ืขื™ื ื‘ืงื•ื“ ื”ืžื ื•ืข ืฉืœ WebKit).
  • ื‘ื‘ื™ื˜ื•ื™ื™ื ื”ืžืฉืžืฉื™ื ื‘ื”ืงืฉืจ ืฉืœ ืงื‘ื•ืขื™ื, ื”ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ื”ืžื•ื‘ื ื•ืช __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateleft*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse,__bsr,__bsd,__bsd, __bsd,wap __ ืžื•ืชืจ bswapq , _castf*, __rol* ื•__ror*.
  • ื ื•ืกืคื” ืืคืฉืจื•ืช BitFieldColonSpacing ืœื›ืœื™ ื”ืฉื™ืจื•ืช ื‘ืคื•ืจืžื˜ clang ื›ื“ื™ ืœื‘ื—ื•ืจ ืืช ื”ืžืจื•ื•ื—ื™ื ืกื‘ื™ื‘ ืžื–ื”ื™ื, ืขืžื•ื“ื•ืช ื•ื”ื’ื“ืจื•ืช ืฉื“ื•ืช.
  • ืฉืจืช ื”ืžื˜ืžื•ืŸ clangd (Clang Server) ื‘ืคืœื˜ืคื•ืจืžืช ืœื™ื ื•ืงืก ื”ืคื—ื™ืช ืžืฉืžืขื•ืชื™ืช ืืช ืฆืจื™ื›ืช ื”ื–ื™ื›ืจื•ืŸ ื‘ืžื”ืœืš ืคืขื•ืœื” ืืจื•ื›ืช ื˜ื•ื•ื— (ื ื™ืชื ื•ืช ืงืจื™ืื•ืช ืชืงื•ืคืชื™ื•ืช ืœ-malloc_trim ื›ื“ื™ ืœื”ื—ื–ื™ืจ ื“ืคื™ ื–ื™ื›ืจื•ืŸ ืคื ื•ื™ื™ื ืœืžืขืจื›ืช ื”ื”ืคืขืœื”).

ื—ื™ื“ื•ืฉื™ื ืžืจื›ื–ื™ื™ื ื‘-LLVM 12.0:

  • ื”ืชืžื™ื›ื” ื‘ื›ืœื™ ื”ื‘ื ื™ื™ื” llvm-build ืฉื ื›ืชื‘ ื‘-Python ื”ื•ืคืกืงื”, ื•ื‘ืžืงื•ื ื–ืืช ื”ืคืจื•ื™ืงื˜ ืขื‘ืจ ืœื—ืœื•ื˜ื™ืŸ ืœืฉื™ืžื•ืฉ ื‘ืžืขืจื›ืช ื”-Build CMake.
  • ื‘ืงืฆื” ื”ืื—ื•ืจื™ ืฉืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช AArch64, ื”ืชืžื™ื›ื” ื‘ืคืœื˜ืคื•ืจืžืช Windows ืฉื•ืคืจื”: ื”ื•ื‘ื˜ื— ื™ืฆื™ืจื” ื ื›ื•ื ื” ืฉืœ ืคืœื˜ assembler ืขื‘ื•ืจ ืžืขืจื›ื•ืช ื”ื™ืขื“ ืฉืœ Windows, ื™ืฆื™ืจืช ื ืชื•ื ื™ื ืขืœ ืฉื™ื—ื•ืช ื‘ื™ื˜ื•ืœ ืขื‘ืจ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” (ื”ื’ื•ื“ืœ ืฉืœ ื ืชื•ื ื™ื ื›ืืœื” ื”ืฆื˜ืžืฆื ื‘-60 %), ื ื•ืกืคื” ื”ื ื—ื™ื•ืช .seh_* ืœื™ื›ื•ืœืช ืœื™ืฆื•ืจ ื ืชื•ื ื™ ืฉื—ืจื•ืจ ื‘ืืžืฆืขื•ืช assembler.
  • ื”ืงืฆื” ื”ืื—ื•ืจื™ ืฉืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช PowerPC ื›ื•ืœืœ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื—ื“ืฉื•ืช ืขื‘ื•ืจ ืœื•ืœืื•ืช ื•ืคืจื™ืกื” ืžื•ื˜ื‘ืขืช, ืชืžื™ื›ื” ืžื•ืจื—ื‘ืช ื‘ืžืขื‘ื“ื™ Power10, ืชื•ืกืคืช ืชืžื™ื›ื” ื‘ื”ื•ืจืื•ืช MMA ืขื‘ื•ืจ ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ืžื˜ืจื™ืฆื” โ€‹โ€‹ื•ืชืžื™ื›ื” ืžืฉื•ืคืจืช ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื” AIX.
  • ื”ืงืฆื” ื”ืื—ื•ืจื™ x86 ืžื•ืกื™ืฃ ืชืžื™ื›ื” ืขื‘ื•ืจ ืžืขื‘ื“ื™ AMD Zen 3, Intel Alder Lake ื•-Intel Sapphire Rapids, ื›ืžื• ื’ื ื”ื•ืจืื•ืช ืžืขื‘ื“ HRESET, UINTR ื•-AVXVNNI. ืชืžื™ื›ื” ื‘-MPX (ื”ืจื—ื‘ื•ืช ื”ื’ื ืช ื–ื™ื›ืจื•ืŸ) ืœื‘ื“ื™ืงืช ืžืฆื‘ื™ืขื™ื ื›ื“ื™ ืœื•ื•ื“ื ืฉื’ื‘ื•ืœื•ืช ื”ื–ื™ื›ืจื•ืŸ ืื™ื ื ื ืชืžื›ื™ื ืขื•ื“ (ื˜ื›ื ื•ืœื•ื’ื™ื” ื–ื• ืื™ื ื” ื ืคื•ืฆื” ื•ื›ื‘ืจ ื”ื•ืกืจื” ืž-GCC ื•ืž-clang). ื ื•ืกืคื” ืชืžื™ื›ื” ืœ-assembler ืขื‘ื•ืจ ื”ืงื™ื“ื•ืžื•ืช {disp32} ื•-{disp8} ื•ืกื™ื•ืžืช .d32 ื•-.d8 ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ื’ื•ื“ืœ ืฉืœ ืงื™ื–ื•ื– ืื• ืงืคื™ืฆื•ืช ืื•ืคืจื ื“. ื ื•ืกืคื” ืชื›ื•ื ื” ื—ื“ืฉื” "tune-cpu" ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ื”ื›ืœืœื” ืฉืœ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืžื™ืงืจื•-ืืจื›ื™ื˜ืงื˜ื•ื ื™ื•ืช.
  • ืžืฆื‘ ื—ื“ืฉ "-fsanitize=unsigned-shift-base" ื ื•ืกืฃ ืœื’ืœืื™ ื”ื‘ืขื™ื” ืฉืœ ืžืกืคืจื™ื ืฉืœืžื™ื (ื—ื™ื˜ื•ื™ ืžืกืคืจื™ื ืฉืœืžื™ื, "-fsanitize=integer") ื›ื“ื™ ืœื–ื”ื•ืช ื”ืฆืคื•ืช ืฉืœ ืžืกืคืจื™ื ืฉืœืžื™ื ืœืœื ืกื™ืžื ื™ื ืœืื—ืจ ืžืขื‘ืจ ืกื™ื‘ื™ื•ืช ืฉืžืืœื”.
  • ื‘ื’ืœืื™ื ืฉื•ื ื™ื (asan, cfi, lsan, msan, tsan, ubsan sanitizer) ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื”ืคืฆื•ืช ืœื™ื ื•ืงืก ืขื ืกืคืจื™ื™ืช Musl ื”ืกื˜ื ื“ืจื˜ื™ืช.
  • ื”ื™ื›ื•ืœื•ืช ืฉืœ ืžืงืฉืจ LLD ื”ื•ืจื—ื‘ื•. ืชืžื™ื›ื” ืžืฉื•ืคืจืช ื‘ืคื•ืจืžื˜ ELF, ื›ื•ืœืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ื ื•ืกืคื•ืช "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program -ื ืจืื•ืช" " ืชืžื™ื›ืช MinGW ืžืฉื•ืคืจืช. ืขื‘ื•ืจ ืคื•ืจืžื˜ Mach-O (macOS), ื”ื•ื˜ืžืขื” ืชืžื™ื›ื” ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช arm64, arm ื•-i386, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืฉืœ ื–ืžืŸ ืงื™ืฉื•ืจ (LTO) ื•ื”ืชื ืชืงื•ืช ืžื—ืกื ื™ืช ืœื˜ื™ืคื•ืœ ื‘ื—ืจื™ื’ื™ื.
  • Libc++ ืžื™ื™ืฉืžืช ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืฉืœ ืชืงืŸ C++20 ื•ื”ื—ืœื” ื‘ืคื™ืชื•ื— ืชื›ื•ื ื•ืช ืฉืœ ืžืคืจื˜ C++2b. ื ื•ืกืคื” ืชืžื™ื›ื” ืœื‘ื ื™ื™ื” ืขื ื”ืฉื‘ืชืช ืชืžื™ื›ืช ืœื•ืงืœื™ื–ืฆื™ื” ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") ื•ื”ืชืงื ื™ื ืœื”ืคืงืช ืžืกืคืจื™ื ืคืกืื•ื“ื• ืืงืจืื™ื™ื ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”