LLVM 13.0 コンパイラ スイートのリリース

13.0 か月の開発後、LLVM XNUMX プロジェクトのリリースが発表されました。これは、プログラムを RISC のような仮想命令の中間ビットコードにコンパイルする GCC 互換ツールキット (コンパイラ、オプティマイザ、およびコード ジェネレータ) です (マルチレベル最適化システム)。 生成された擬似コードは、プログラム実行時に JIT コンパイラーを使用して直接機械語命令に変換できます。

Clang 13.0 の改善点:

  • 保証された末尾呼び出しのサポートが実装されました (関数の最後にサブルーチンを呼び出し、サブルーチンが自身を呼び出す場合に末尾再帰を作成します)。保証された末尾呼び出しのサポートは、C++ の "[[clang::musttail]]" 属性と C の "__attribute__((musttail))" によって提供され、"return" 式で使用されます。この機能により、コードをフラットな反復に展開してスタック スペースを節約することで最適化を実装できるようになります。
  • C++11 スタイルの属性定義が、 "[[]]" 形式を使用して、clang の "using" 宣言と拡張機能でサポートされるようになりました。
  • ユーザー コードで予約済み識別子を指定するときに警告を出力するための "-Wreserved-identifier" フラグを追加しました。
  • パラメータまたは変数が設定されているが使用されていない場合に警告を出力するための「-Wunused-but-set-parameter」および「-Wunused-but-set-variable」フラグを追加しました。
  • 減算演算で null ポインターを使用したためにコードが未定義の動作を引き起こす可能性がある場合に警告するための「-Wnull-pointer-subtraction」フラグを追加しました。
  • 処理中のファイルで定義されている各関数のスタック フレームのサイズに関する情報を含む追加の「.su」ファイルを各コード ファイルに対して生成するための「-fstack-usage」フラグを追加しました。
  • 静的アナライザーに新しい出力タイプ「sarif-html」が追加され、HTML 形式と Sarif 形式の両方でレポートが生成されます。新しいチェック allocClassWithName を追加しました。 「-analyzer-display-progress」オプションを指定すると、関数ごとの解析時間が表示されます。スマート ポインター アナライザー (alpha.cplusplus.SmartPtr) はほぼ準備完了です。
  • OpenCL サポートに関連する拡張機能。新しい拡張機能 cl_khr_integer_dot_product、cl_khr_extended_bit_ops、__cl_clang_bitfields、および __cl_clang_non_portable_kernel_param_types のサポートが追加されました。 OpenCL 3.0 仕様の実装が継続されています。 C の場合、別のバージョンが明示的に選択されない限り、デフォルトで OpenCL 1.2 仕様が使用されます。 C++ では、拡張子が「.clcpp」のファイルのサポートが追加されました。
  • OpenMP 5.1 仕様で定義されているループ変換ディレクティブ ("#pragma omp unrol" および "#pragma omp tile") のサポートが実装されました。
  • clang-format ユーティリティが更新され、コメントの前のスペースの数を制御する SpacesInLineCommentPrefix、レコード、ラムダ式、プリプロセッサ ディレクティブの配置を制御する IndentAccessModifiers、LambdaBodyIndentation、PPIndentWidth などのオプションが追加されました。ヘッダー ファイルの一覧表示の並べ替え機能が拡張されました (SortIncludes)。 JSON ファイルのフォーマットのサポートが追加されました。
  • clang-tidy リンターに大量の新しいチェックが追加されました。

LLVM 13.0 の主な革新:

  • CETテクノロジーを使用するための「-ehcontguard」オプションを追加しました(Windows 例外処理段階で、リターン指向プログラミング(ROP)技術を使用して構築されたエクスプロイトの実行から保護するための制御フロー強制技術。
  • debuginfo-test プロジェクトは cross-project-tests に名前が変更され、デバッグ情報に限定されず、さまざまなプロジェクトのコンポーネントをテストするように設計されています。
  • ビルド システムは、たとえばユーティリティを含むディストリビューションと開発者向けのライブラリを含むディストリビューションなど、複数のディストリビューションのビルドをサポートします。
  • AArch64 アーキテクチャのバックエンドは、アセンブラーで Armv9-A RME (Realm Management Extension) および SME (Scalable Matrix Extension) 拡張機能のサポートを実装します。
  • ISA V68/HVX サポートが Hexagon アーキテクチャ バックエンドに追加されました。
  • x86 バックエンドでは、AMD Zen 3 プロセッサのサポートが改善されました。
  • AMDGPU バックエンドに GFX1013 RDNA2 APU のサポートを追加しました。
  • Libc++ は、「concepts」ライブラリの完成を含め、C++20 および C++2b 標準の新機能の実装を継続しています。 Windows MinGWベースのstd::filesystemのサポートを追加しました。ヘッダーファイルを分離しました。 、そして機能が不完全なヘッダーファイルを無効にするためのビルドオプション「LIBCXX_ENABLE_INCOMPLETE_FEATURES」を追加しました。
  • LLD リンカーの機能が拡張され、ビッグエンディアン Aarch64 プロセッサのサポートが実装され、Mach-O バックエンドが通常のプログラムのリンクが可能な状態になりました。 LLD を使用して Glibc をリンクするために必要な改善が組み込まれました。
  • llvm-mca (マシン コード アナライザー) ユーティリティが更新され、ARM Cortex-A55 などのインオーダー スーパースカラー パイプライン プロセッサをサポートするようになりました。
  • AArch64 プラットフォーム用の LLDB デバッガーは、ポインター認証、メモリ タグ付け拡張 (MemTag)、および SVE レジスタを完全にサポートしています。各メモリ割り当て操作にタグをバインドし、メモリにアクセスするときにポインターをチェックするコマンドを追加しました。ポインターは正しいタグにバインドされる必要があります。
  • LLDB デバッガーと Fortran フロントエンド Flang が、プロジェクトによって生成されたバイナリ アセンブリに追加されました。

出所: オープンネット.ru

DDoS 保護機能を備えた信頼性の高いサイト用ホスティング、VPS VDS サーバーを購入する 🔥 DDoS攻撃対策付きの信頼性の高いウェブサイトホスティング、VPS/VDSサーバーを購入しましょう | ProHoster