LLVM 12.0 コンパむラ スむヌトのリリヌス

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

コメントを远加したす