Rilis paket kompiler LLVM 13.0

Setelah enam bulan pengembangan, rilis proyek LLVM 13.0 disajikan - perangkat yang kompatibel dengan GCC (kompiler, pengoptimal, dan pembuat kode) yang mengkompilasi program ke dalam bitcode perantara dari instruksi virtual mirip RISC (mesin virtual tingkat rendah dengan sistem optimasi multi-level). Pseudocode yang dihasilkan dapat diubah menggunakan kompiler JIT menjadi instruksi mesin secara langsung pada saat eksekusi program.

Peningkatan di Dentang 13.0:

  • Dukungan yang diterapkan untuk panggilan ekor yang dijamin (memanggil subrutin di akhir suatu fungsi, membentuk rekursi ekor jika subrutin memanggil dirinya sendiri). Dukungan untuk panggilan ekor yang dijamin disediakan oleh atribut "[[clang::musttail]]" di C++ dan "__attribute__((musttail))" di C, yang digunakan dalam pernyataan "return". Fitur ini memungkinkan Anda menerapkan pengoptimalan dengan menerapkan kode ke dalam iterasi datar untuk menghemat konsumsi tumpukan.
  • Deklarasi "menggunakan" dan ekstensi dentang memberikan dukungan untuk mendefinisikan atribut gaya C++11 menggunakan format "[[]]".
  • Menambahkan tanda "-Wreserved-identifier" untuk menampilkan peringatan saat Anda menentukan pengidentifikasi khusus dalam kode pengguna.
  • Menambahkan tanda "-Wunused-but-set-parameter" dan "-Wunused-but-set-variable" untuk menampilkan peringatan jika parameter atau variabel disetel tetapi tidak digunakan.
  • Menambahkan tanda "-Wnull-pointer-subtraction" untuk mengeluarkan peringatan jika kode mungkin menimbulkan perilaku tidak terdefinisi karena penggunaan pointer nol dalam operasi pengurangan.
  • Menambahkan tanda "-fstack-usage" untuk menghasilkan file ".su" tambahan untuk setiap file kode yang berisi informasi tentang ukuran bingkai tumpukan untuk setiap fungsi yang ditentukan dalam file yang sedang diproses.
  • Jenis keluaran baru telah ditambahkan ke penganalisis statis - β€œsarif-html”, yang menghasilkan pembuatan laporan secara bersamaan dalam format HTML dan Sarif. Menambahkan cek allocClassWithName baru. Saat menentukan opsi β€œ-analyzer-display-progress”, waktu analisis setiap fungsi akan ditampilkan. Penganalisis penunjuk pintar (alpha.cplusplus.SmartPtr) hampir siap.
  • Kemampuan yang terkait dengan dukungan OpenCL telah diperluas. Menambahkan dukungan untuk ekstensi baru cl_khr_integer_dot_product, cl_khr_exended_bit_ops, __cl_clang_bitfields dan __cl_clang_non_portable_kernel_param_types. Implementasi spesifikasi OpenCL 3.0 terus berlanjut. Untuk C, spesifikasi OpenCL 1.2 digunakan secara default kecuali versi lain dipilih secara eksplisit. Untuk C++, dukungan untuk file dengan ekstensi β€œ.clcpp” telah ditambahkan.
  • Dukungan untuk arahan transformasi loop (β€œ#pragma omp unrol” dan β€œ#pragma omp tile”) yang ditentukan dalam spesifikasi OpenMP 5.1 telah diterapkan.
  • Menambahkan opsi ke utilitas format dentang: SpacesInLineCommentPrefix untuk menentukan jumlah spasi sebelum komentar, IndentAccessModifiers, LambdaBodyIndentation, dan PPIndentWidth untuk mengontrol penyelarasan entri, ekspresi lambda, dan arahan praprosesor. Kemungkinan untuk mengurutkan enumerasi file header (SortIncludes) telah diperluas. Menambahkan dukungan untuk memformat file JSON.
  • Sebagian besar pemeriksaan baru telah ditambahkan ke linter clang-tidy.

Inovasi utama di LLVM 13.0:

  • Menambahkan opsi β€œ-ehcontguard” untuk menggunakan teknologi CET (Windows Control-flow Enforcement Technology) untuk melindungi terhadap eksekusi eksploitasi yang dibangun menggunakan teknik Return-Oriented Programming (ROP) pada tahap penanganan pengecualian.
  • Proyek pengujian debuginfo telah diubah namanya menjadi pengujian lintas proyek dan dirancang untuk menguji komponen dari proyek yang berbeda, tidak terbatas pada informasi debug.
  • Sistem perakitan menyediakan dukungan untuk membangun beberapa distribusi, misalnya satu dengan utilitas, dan yang lainnya dengan perpustakaan untuk pengembang.
  • Di backend untuk arsitektur AArch64, dukungan untuk ekstensi Armv9-A RME (Realm Management Extension) dan SME (Scalable Matrix Extension) diimplementasikan di assembler.
  • Dukungan untuk ISA V68/HVX telah ditambahkan ke backend untuk arsitektur Hexagon.
  • Backend x86 telah meningkatkan dukungan untuk prosesor AMD Zen 3.
  • Menambahkan dukungan untuk APU GFX1013 RDNA2 ke backend AMDGPU.
  • Libc++ terus mengimplementasikan fitur-fitur baru dari standar C++20 dan C++2b, termasuk penyelesaian pustaka β€œkonsep”. Menambahkan dukungan untuk std::filesystem untuk platform Windows berbasis MinGW. File header , dan dipisahkan. Menambahkan opsi build LIBCXX_ENABLE_INCOMPLETE_FEATURES untuk menonaktifkan file header dengan fungsionalitas yang belum diterapkan sepenuhnya.
  • Kemampuan linker LLD telah diperluas, di mana dukungan untuk prosesor Big-endian Aarch64 diterapkan, dan backend Mach-O telah dibawa ke keadaan yang memungkinkan penautan program reguler. Termasuk perbaikan yang diperlukan untuk menghubungkan Glibc menggunakan LLD.
  • Utilitas llvm-mca (Machine Code Analyzer) telah menambahkan dukungan untuk prosesor yang menjalankan instruksi secara berurutan (pipa superscalar berurutan), seperti ARM Cortex-A55.
  • Debugger LLDB untuk platform AArch64 menyediakan dukungan penuh untuk Otentikasi Pointer, MTE (MemTag, Memory Tagging Extension) dan register SVE. Menambahkan perintah yang memungkinkan Anda mengikat tag ke setiap operasi alokasi memori dan mengatur pemeriksaan pointer saat mengakses memori, yang harus dikaitkan dengan tag yang benar.
  • Debugger LLDB dan frontend untuk bahasa Fortran - Flang telah ditambahkan ke rakitan biner yang dihasilkan oleh proyek.

Sumber: opennet.ru

Tambah komentar