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

XNUMXか月の開発期間を経お 提瀺された プロゞェクトのリリヌス LLVM 11.0 — GCC 互換ツヌル (コンパむラ、オプティマむザ、コヌド ゞェネレヌタ) は、プログラムを RISC のような仮想呜什 (マルチレベルの最適化システムを備えた䜎レベルの仮想マシン) の䞭間ビットコヌドにコンパむルしたす。 生成された擬䌌コヌドは、プログラム実行時に JIT コンパむラヌを䜿甚しお盎接機械語呜什に倉換できたす。

新しいリリヌスの䞻な倉曎点は、次のものが含たれおいるこずです。 偎面、Fortran 蚀語のフロント゚ンド。 Flag は Fortran 2018、OpenMP 4.5、OpenACC 3.0 をサポヌトしおいたすが、プロゞェクトの開発はただ完了しおおらず、フロント゚ンドはコヌドの解析ず正確性のチェックに限定されおいたす。 LLVM 䞭間コヌドの生成はただサポヌトされおいないため、実行可胜ファむルを生成するには、正芏コヌドが生成され、倖郚 Fortran コンパむラヌに枡されたす。

改善点 Clang 11.0 では:

  • 抜象構文ツリヌを埩元する機胜を远加したした (AST) 壊れた C++ コヌド甚。これを䜿甚するず、゚ラヌの蚺断に圹立ち、clang-tidy や Clangd などの倖郚ナヌティリティに远加情報が提䟛されたす。 この機胜は C++ コヌドに察しおデフォルトで有効になっおおり、「-Xclang -f[no-]recovery-ast」オプションを通じお制埡されたす。
  • 新しい蚺断モヌドが远加されたした。
    • 「-Wpointer-to-int-cast」は、すべおの可胜な倀を収容できない敎数型 int ぞのポむンタヌのキャストに関する譊告のグルヌプです。
    • 「-Wuninitialized-const-reference」 - 「const」属性を持぀参照匕数を受け入れる関数パラメヌタに初期化されおいない倉数を枡すこずに぀いおの譊告。
    • 「-Wimplicit-const-int-float-conversion」 - 実定数から敎数型ぞの暗黙的な倉換に関する譊告をデフォルトで有効にしたす。
  • ARM プラットフォヌムの堎合、コンパむラに組み蟌たれた C 関数が提䟛されたす (組み蟌み関数)、効率的なベクトル呜什 Arm v8.1-M MVE および CDE に眮き換えられたした。 䜿甚可胜な関数は、ヘッダヌ ファむル arm_mve.h および arm_cde.h で定矩されおいたす。
  • 远加した 拡匵敎数型のセット _ExtInt(N) を䜿甚するず、FPGA/HLS で効率的に凊理できる XNUMX のべき乗の倍数ではない型を䜜成できたす。 䟋えば, _ExtInt(7) は 7 ビットからなる敎数型を定矩したす。
  • ARM SVE (Scalable Vector Extension) 呜什に基づいた組み蟌み C 関数のサポヌトを定矩するマクロを远加したした。
    __ARM_FEATURE_SVE、__ARM_FEATURE_SVE_BF16、
    __ARM_FEATURE_SVE_MATMUL_FP32、__ARM_FEATURE_SVE_MATMUL_FP64、
    __ARM_FEATURE_SVE_MATMUL_INT8、
    __ARM_FEATURE_SVE2、__ARM_FEATURE_SVE2_AES、
    __ARM_FEATURE_SVE2_BITPERM、
    __ARM_FEATURE_SVE2_SHA3、
    __ARM_FEATURE_SVE2_SM4。 たずえば、__ARM_FEATURE_SVE マクロは、コマンド ラむン オプション「-march=armv64-a+sve」を蚭定しお AArch8 コヌドを生成するずきに定矩されたす。

  • 「-O」フラグは、「-O1」ではなく「-O2」最適化モヌドで識別されるようになりたした。
  • 新しいコンパむラ フラグを远加したした。
    • 「-fstack-clash-protection」 - に察する保護を有効にしたす。 スタックずヒヌプの亀差.
    • 「-ffp-Exception-behavior={ignore,maytrap,strict}」 - 浮動小数点数の䟋倖ハンドラヌ モヌドを遞択できたす。
    • "-ffp-model={precise,strict,fast}" - 浮動小数点数の䞀連の特殊なオプションぞのアクセスを簡玠化したす。
    • 「-fpch-codegen」および「-fpch-debuginfo」は、コヌドずデバッグ情報甚に個別のオブゞェクト ファむルを含むプリコンパむル枈みヘッダヌ (PCH) を生成したす。
    • カバレッゞテストのホワむトリストずブラックリストを確認するための「-fsanitize-coverage-allowlist」および「-fsanitize-coverage-blocklist」。
    • 「-mtls-size={12,24,32,48}」で TLS (スレッドロヌカル ストレヌゞ) サむズを遞択したす。
    • 「-menable-experimental-extension」は、実隓的な RISC-V 拡匵機胜を有効にしたす。
  • C のデフォルト モヌドは「-fno-common」です。これにより、䞀郚のプラットフォヌムでグロヌバル倉数ぞのより効率的なアクセスが可胜になりたす。
  • デフォルトのモゞュヌル キャッシュは /tmp から ~/.cache ディレクトリに移動されたした。 オヌバヌラむドするには、「-fmodules-cache-path=」フラグを䜿甚できたす。
  • デフォルトの C 蚀語暙準が gnu11 から gnu17 に曎新されたした。
  • GNU C 拡匵機胜の予備サポヌトを远加したした。asmむンラむン» アセンブラむンサヌトを远加したす。 拡匵機胜はただ分析䞭ですが、たったく凊理されおいたせん。
  • OpenCL および CUDA サポヌトに関連する機胜が拡匵されたした。 OpenCL 2.0 ブロック蚺断のサポヌトが远加され、新しい OpenMP 5.0 機胜が実装されたした。
  • extern "C" および extern "C++" ブロック内での䜍眮合わせのための IndentExternBlock オプションを Clang-format ナヌティリティに远加したした。
  • 静的アナラむザヌでは、C++ での継承されたコンストラクタヌの凊理が改善されたした。 ロックをチェックするための新しいチェック alpha.core.C11Lock および alpha.fuchsia.Lock、putenv の安党でない䜿甚を怜出するための alpha.security.cert.pos.34c、数えられないタむプの問題を怜出するための webkit.NoUncountedMemberChecker および webkit.RefCntblBaseVirtualDtor を远加したした。 .cplusplus .SmartPtr を䜿甚しお、null スマヌト ポむンタヌ逆参照をチェックしたす。
  • リンタヌでカチャカチャず敎頓 远加した 新しい小切手の倧郚分。
  • Clangd キャッシュ サヌバヌ (Clang サヌバヌ) のパフォヌマンスが向䞊し、新しい蚺断機胜が远加されたした。

メむン むノベヌション LLVM 11.0:

  • ビルド システムは Python 3 を䜿甚するように切り替えられたした。Python 3 が䜿甚できない堎合は、Python 2 を䜿甚するようにロヌルバックできたす。
  • Go 蚀語甚コンパむラヌ (llgo) を備えたフロント゚ンドはリリヌスから陀倖されおおり、将来的に再構築される可胜性がありたす。
  • 呌び出しをベクトル化するためのスカラヌ関数ずベクトル関数間のマッピングを蚘述するために、vector-function-abi-variant 属性が䞭間衚珟 (IR) に远加されたした。 llvm::VectorType からは、llvm::FixedVectorType ず llvm::ScalableVectorType ずいう XNUMX ぀の別個のベクトル タむプがありたす。
  • udef 倀に基づいお分岐したり、暙準ラむブラリ関数に undef 倀を枡したりするこずは、未定矩の動䜜ずしお認識されたす。 で
    memset/memcpy/memmove では undef ポむンタヌを枡すこずができたすが、サむズのパラメヌタヌがれロの堎合に限りたす。

  • LLJIT では、LLJIT::initialize メ゜ッドず LLJIT::deinitialize メ゜ッドを䜿甚しお静的初期化を実行するためのサポヌトが远加されたした。 StaticLibraryDefinitionGenerator クラスを䜿甚しお静的ラむブラリを JITDylib に远加する機胜を実装したした。 C API を远加したした ORCv2 (JIT コンパむラを構築するための API)。
  • Cortex-A64、Cortex-A34、Cortex-A77、および Cortex-X78 プロセッサのサポヌトが、AArch1 アヌキテクチャのバック゚ンドに远加されたした。 RMv8.2-ECV (拡匵カりンタヌ仮想化)、ARMv16-FGT (ファむングレむントラップ)、ARMv16-AMU (アクティビティモニタヌ仮想化) を含む、ARMv8.6-BF8.6 (BFloat8.6) および ARMv8.6-A 拡匵機胜を実装したした。および ARMv8.0-DGH (デヌタ収集ヒント)。 SVE ベクトル呜什ぞの組み蟌み関数バむンディングのコヌドを生成する機胜が提䟛されたす。
  • Cortex-M55、Cortex-A77、Cortex-A78、および Cortex-X1 プロセッサのサポヌトが ARM アヌキテクチャのバック゚ンドに远加されたした。 実装された拡匵機胜
    Armv8.6-A 行列乗算および RMv8.2-AA32BF16 BFloat16。

  • POWER10 プロセッサヌのコヌド生成のサポヌトが、PowerPC アヌキテクチャヌのバック゚ンドに远加されたした。 ルヌプの最適化が拡匵され、浮動小数点のサポヌトが改善されたした。
  • RISC-V アヌキテクチャのバック゚ンドでは、ただ正匏に承認されおいない実隓的な拡匵呜什セットをサポヌトするパッチの受け入れが可胜です。
  • AVR アヌキテクチャのバック゚ンドは実隓的なカテゎリから安定版に移行され、基本ディストリビュヌションに含たれおいたす。
  • x86 アヌキテクチャのバック゚ンドは、Intel AMX および TSXLDTRK 呜什をサポヌトしたす。 攻撃に察する保護を远加 LVI (ロヌド倀むンゞェクション)、たた、CPU 䞊での操䜜の投機的実行によっお匕き起こされる攻撃をブロックするための䞀般的な投機的実行副䜜甚抑制メカニズムも実装したす。
  • SystemZ アヌキテクチャのバック゚ンドで、MemorySanitizer ず LeakSanitizer のサポヌトが远加されたした。
  • Libc++ は数孊定数を含むヘッダヌ ファむルのサポヌトを远加したす .
  • 拡匵された LLD リンカヌ機胜。 オプション「--lto-emit-asm」、「--lto-whole-program-visibility」、「-print-archive-stats」、「-shuffle-sections」、「 -thinlto-single-module」、「-unique」、「-rosegment」、「-threads=N」。 トレヌスをファむルに保存するための「--time-trace」オプションを远加したした。ファむルは、Chrome の chrome://tracing むンタヌフェむスを介しお分析できたす。

出所 オヌプンネット.ru

コメントを远加したす