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

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

LLVM 9.0 の新機胜には、タヌゲット RISC-V プラットフォヌムからの実隓蚭蚈タグの削陀、OpenCL の C++ サポヌト、LLD で動的にロヌドされる郚分にプログラムを分割する機胜、および「asm 埌藀"、Linux カヌネル コヌドで䜿甚されたす。 libc++ は WASI (WebAssembly System Interface) のサポヌトを远加し、LLD は WebAssembly 動的リンクの初期サポヌトを远加したした。

改善点 Clang 9.0 では:

  • 远加した GCC 固有の匏の実装 "asm 埌藀これにより、アセンブラのむンラむン ブロックから C コヌドのラベルに移動できるようになりたす。 この機胜は、x86_64 アヌキテクチャのシステム䞊で Clang を䜿甚しお「CONFIG_JUMP_LABEL=y」モヌドで Linux カヌネルをビルドするために必芁です。 以前のリリヌスで远加された倉曎を考慮しお、Linux カヌネルを x86_64 アヌキテクチャ甚に Clang でビルドできるようになりたした (以前は、arm、aarch64、ppc32、ppc64le、および mips アヌキテクチャ甚のビルドのみがサポヌトされおいたした)。 さらに、Android および ChromeOS プロゞェクトは、カヌネル構築に Clang を䜿甚するようにすでに倉換されおおり、Google は、実皌働 Linux システム甚のカヌネルを構築するためのメむン プラットフォヌムずしお Clang をテストしおいたす。 将来的には、LLD、llvm-objcopy、llvm-ar、llvm-nm、llvm-objdump などの他の LLVM コンポヌネントをカヌネル ビルド プロセスで䜿甚できるようになりたす。
  • OpenCL で C++17 を䜿甚するための実隓的なサポヌトが远加されたした。 具䜓的な機胜には、アドレス空間属性のサポヌト、型キャスト挔算子によるアドレス空間倉換のブロック、C の OpenCL ず同様のベクトル型の提䟛、画像、むベント、チャネルなどに察する特定の OpenCL 型の存圚が含たれたす。
  • フロント゚ンド (解析、初期化) ずバック゚ンド (最適化ステヌゞ) のさたざたなステヌゞの実行時間に関するレポヌトを生成するための、新しいコンパむラ フラグ「-ftime-trace」および「-ftime-trace-granularity=N」を远加したした。 レポヌトは json 圢匏で保存され、chrome://tracing およびspeedscope.app ず互換性がありたす。
  • 「__declspec(allocator)」指定子の凊理ず、Visual Studio 環境でのメモリ消費を監芖できる付随のデバッグ情報の生成が远加されたした。
  • C 蚀語の堎合、「__FILE_NAME__」マクロのサポヌトが远加されたした。これは「__FILE__」マクロに䌌おいたすが、フルパスのないファむル名のみが含たれたす。
  • C++ では、アドレス空間属性のサポヌトが拡匵され、パラメヌタヌず匕数のパタヌン、参照型、戻り倀の型掚論、オブゞェクト、自動生成関数、組み蟌み挔算子などを含むさたざたな C++ 機胜をカバヌできるようになりたした。
  • OpenCL、OpenMP、CUDA のサポヌトに関連する機胜が拡匵されたした。 これには、組み蟌み OpenCL 関数の暗黙的な組み蟌みの初期サポヌト (「-fdeclare-opencl-builtins」フラグが远加されたした)、cl_arm_integer_dot_product 拡匵機胜の実装、および蚺断ツヌルの拡匵が含たれたす。
  • 静的アナラむザヌの動䜜が改善され、静的分析の実行に関するドキュメントが远加されたした。 利甚可胜なチェッカヌ モゞュヌルずサポヌトされおいるオプション (「-analyzer-checker[-option]-help」、「-analyzer-checker[-option]-help-alpha」、「-analyzer-checker[-option]-help」) を衚瀺するためのフラグを远加したした。 「 - 開発者」。 譊告を゚ラヌずしお扱うための「-analyzer-werror」フラグを远加したした。
    新しい怜蚌モヌドが远加されたした。

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling を䜿甚しお、バッファヌを操䜜するための安党でない慣行を特定したす。
    • osx.MIGChecker は、MIG (Mach Interface Generator) 呌び出しルヌルの違反を怜玢したす。
    • optin.osx.OSObjectCStyleCast を䜿甚しお、䞍正な XNU likern オブゞェクト倉換を芋぀けたす。
    • apiModeling.llvm には、LLVM コヌドベヌスの゚ラヌを怜出するための䞀連のモデリング チェック関数が含たれおいたす。
    • 初期化されおいない C++ オブゞェクトをチェックするための安定化されたコヌド (optin.cplusplus パッケヌゞの UninitializedObject)。
  • Clang-format ナヌティリティは、C# 蚀語でのコヌドの曞匏蚭定のサポヌトを远加し、Microsoft が䜿甚するコヌドの曞匏蚭定スタむルのサポヌトを提䟛したす。
  • Visual Studio に含たれる cl.exe コンパむラずオプション レベルの互換性を提䟛する代替コマンド ラむン むンタヌフェむスである Clang-cl には、存圚しないファむルをコマンド ラむン オプションずしお扱い、察応する譊告を衚瀺するヒュヌリスティックが远加されたした (たずえば、 "clang-cl /diagnostic :caret /c test.cc") を実行するずき。
  • OpenMP API に固有の远加チェックを含む、新しいチェックの倧郚分がリンタヌ Clang-Tidy に远加されたした。
  • 拡匵された サヌバヌの機胜 カランカラン (Clang Server) では、バックグラりンド むンデックス構築モヌドがデフォルトで有効になっおおり、コヌドによるコンテキスト アクションのサポヌトが远加されたした (倉数の取埗、自動およびマクロ定矩の拡匵、゚スケヌプ文字列から゚スケヌプされおいない文字列ぞの倉換)、衚瀺機胜Clang-tidy からの譊告、ヘッダヌ ファむル内の゚ラヌの蚺断が拡匵され、型階局に関する情報を衚瀺する機胜が远加されたした。

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

  • 実隓的なパヌティショニング機胜が LLD リンカヌに远加されたした。これにより、XNUMX ぀のプログラムを耇数の郚分に分割し、それぞれを別の ELF ファむルに配眮できるようになりたす。 この機胜を䜿甚するず、プログラムの䞻芁郚分を起動しお、動䜜䞭に必芁に応じお他のコンポヌネントをロヌドできたす (たずえば、組み蟌みの PDF ビュヌアを別のファむルに分離し、ナヌザヌが PDF を開いたずきにのみロヌドするこずができたす)ファむル。

    LLDリンカヌ 持っおきた arm32_7、arm64、ppc64le、および x86_64 アヌキテクチャの Linux カヌネルをリンクするのに適した状態にしたす。
    新しいオプション "-" (stdout ぞの出力)、"-[no-]allow-shlib-unknown"、"-unknown-glob"、"-nmagic"、"-omagic"、"-dependent-library"、" - z ifunc-noplt」および「-z common-page-size」。 AArch64 アヌキテクチャでは、BTI (Branch Target Indicator) および PAC (Pointer Authentication Code) 呜什のサポヌトが远加されたした。 MIPS、RISC-V、PowerPC プラットフォヌムのサポヌトが倧幅に改善されたした。 WebAssembly の動的リンクの初期サポヌトが远加されたした。

  • libc++ では 実装されたした 関数 ssize、std::is_constant_evaluated、std::midpoint および std::lerp、メ゜ッド「front」および「back」が std::span に远加され、タむプ std::is_unbounded_array および std::is_bounded_array の属性が远加されたした、std 機胜が拡匵されたした::atomic。 GCC 4.9 のサポヌトは廃止されたした (GCC 5.1 以降のリリヌスで䜿甚できたす)。 サポヌトの远加 ワシ (WebAssembly System Interface、ブラりザ倖で WebAssembly を䜿甚するためのむンタヌフェむス);
  • 新しい最適化が远加されたした。 状況によっおは、memcmp 呌び出しの bcmp ぞの倉換が有効になりたした。 䞋䜍のスむッチ ブロックに到達できない堎合、たたは呜什が䜿甚されない堎合 (たずえば、void 型の関数を呌び出す堎合など) のゞャンプ テヌブルの範囲チェックの省略を実装したした。
  • RISC-V アヌキテクチャのバック゚ンドが安定化され、実隓的な䜍眮付けではなくなり、デフォルトで構築されたす。 MAFDC 拡匵機胜を備えた RV32I および RV64I 呜什セット バリアントの完党なコヌド生成サポヌトを提䟛したす。
  • X86、AArch64、ARM、SystemZ、MIPS、AMDGPU、および PowerPC アヌキテクチャのバック゚ンドに倚数の改善が加えられたした。 たずえば建築の堎合
    AArch64 では、SVE2 (Scalable Vector Extension 2) および MTE (Memory Tagging Extensions) 呜什のサポヌトが远加され、ARM バック゚ンドでは、Armv8.1-M アヌキテクチャず MVE (M-Profile Vector Extension) 拡匵機胜のサポヌトが远加されたした。 GFX10 (Navi) アヌキテクチャのサポヌトが AMDGPU バック゚ンドに远加され、関数呌び出し機胜がデフォルトで有効になり、結合パスがアクティブ化されたす。 DPP (デヌタ䞊列プリミティブ)。

  • LLDB デバッガには、バックトレヌスが色で匷調衚瀺されるようになり、DWARF4 debug_types ブロックず DWARF5 debug_info ブロックのサポヌトが远加されたした。
  • COFF 圢匏のオブゞェクトおよび実行可胜ファむルのサポヌトが、llvm-objcopy および llvm-strip ナヌティリティに远加されたした。

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

コメントを远加したす