發布 LLVM 13.0 編譯器套件

經過六個月的開發,LLVM 13.0 專案發布了——一個與 GCC 相容的工具包(編譯器、優化器和程式碼產生器),可將程式編譯成類 RISC 虛擬指令的中間位碼(具有多層最佳化系統)。 產生的偽代碼可以在程式執行時直接使用 JIT 編譯器轉換為機器指令。

Clang 13.0 的改進:

  • 實現了對有保證的尾部呼叫的支援(在函數的最後呼叫子例程,如果子例程呼叫自身,則形成尾部遞歸)。 對有保證的尾部呼叫的支援由 C++ 中的「[[clang::musttail]]」屬性和 C 中的「__attribute__((musttail))」提供,用於「return」語句。 此功能可讓您透過將程式碼部署到平面迭代中來實現最佳化,以節省堆疊消耗。
  • “using”聲明和 clang 擴充支援使用“[[]]”格式定義 C++11 樣式屬性。
  • 新增了“-Wreserved-identifier”標誌,以便在使用者代碼中指定保留標識符時顯示警告。
  • 新增了“-Wunused-but-set-parameter”和“-Wunused-but-set-variable”標誌,以便在設定但未使用參數或變數時顯示警告。
  • 新增了「-Wnull-pointer-subtraction」標誌,如果程式碼由於在減法運算中使用空指標而可能引入未定義的行為,則會發出警告。
  • 新增了「-fstack-usage」標誌,為每個程式碼檔案產生一個附加「.su」文件,其中包含有關正在處理的檔案中定義的每個函數的堆疊幀大小的資訊。
  • 靜態分析器中新增了一種新的輸出類型 - “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 omptile”)的支援。
  • 在 clang-format 公用程式中新增了選項:SpacesInLineCommentPrefix 用於定義註解前的空格數、IndentAccessModifiers、LambdaBodyIndentation 和 PPIndentWidth 用於控制條目、lambda 表達式和預處理器指令的對齊方式。 擴展了對頭檔枚舉進行排序 (SortIncludes) 的可能性。 新增了對格式化 JSON 檔案的支援。
  • 大部分新檢查已添加到 linter clang-tidy 中。

LLVM 13.0 的主要創新:

  • 新增了「-ehcontguard」選項,以使用 CET(Windows 控制流強制技術)技術來防止在異常處理階段使用面向返回編程 (ROP) 技術構建的漏洞的執行。
  • debuginfo-test 專案已更名為 cross-project-tests,旨在測試來自不同專案的元件,而不僅限於偵錯資訊。
  • 組裝系統為構建多個發行版提供支持,例如,一個帶有實用程序,另一個帶有供開發人員使用的庫。
  • 在AArch64架構的後端,彙編器中實現了對Armv9-A RME(領域管理擴展)和SME(可擴展矩陣擴展)擴展的支援。
  • Hexagon 架構的後端增加了對 ISA V68/HVX 的支援。
  • x86 後端改進了對 AMD Zen 3 處理器的支援。
  • 在 AMDGPU 後端添加了對 GFX1013 RDNA2 APU 的支援。
  • Libc++ 持續實作 C++20 和 C++2b 標準的新功能,包括完成「concept」函式庫。 新增了對基於 MinGW 的 Windows 平台的 std::filesystem 的支援。 頭文件分開, 和。 新增了建置選項 LIBCXX_ENABLE_INCOMPLETE_FEATURES 以停用未完全實作功能的頭檔。
  • LLD連結器的功能得到了擴展,實現了對Big-endian Aarch64處理器的支持,而Mach-O後端已達到允許連結常規程式的狀態。 包括使用 LLD 連結 Glibc 所需的改進。
  • llvm-mca(機器碼分析器)實用程式新增了對按順序執行指令(按序超標量管道)的處理器的支持,例如 ARM Cortex-A55。
  • AArch64 平台的 LLDB 偵錯器提供對指標驗證、MTE(MemTag、記憶體標記擴充)和 SVE 暫存器的全面支援。 新增了命令,允許您將標籤綁定到每個記憶體分配操作,並在存取記憶體時組織對指標的檢查,該指標必須與正確的標籤關聯。
  • LLDB 偵錯器和 Fortran 語言前端 - Flang 已新增至專案產生的二進位程式集中。

來源: opennet.ru

添加評論