Keluaran suite pengkompil LLVM 13.0

Selepas enam bulan pembangunan, keluaran projek LLVM 13.0 telah dibentangkan - kit alat serasi GCC (penyusun, pengoptimum dan penjana kod) yang menyusun atur cara ke dalam kod bit perantaraan arahan maya seperti RISC (mesin maya peringkat rendah dengan sistem pengoptimuman pelbagai peringkat). Pseudokod yang dijana boleh ditukar menggunakan pengkompil JIT ke dalam arahan mesin secara langsung pada masa pelaksanaan program.

Penambahbaikan dalam Clang 13.0:

  • Sokongan yang dilaksanakan untuk panggilan ekor terjamin (memanggil subrutin pada penghujung fungsi, membentuk pengulangan ekor jika subrutin memanggil dirinya sendiri). Sokongan untuk panggilan ekor terjamin disediakan oleh atribut "[[clang::musttail]]" dalam C++ dan "__attribute__((musttail))" dalam C, digunakan dalam pernyataan "return". Ciri ini membolehkan anda melaksanakan pengoptimuman dengan menggunakan kod ke dalam lelaran rata untuk menjimatkan penggunaan tindanan.
  • "menggunakan" pengisytiharan dan sambungan clang menyediakan sokongan untuk mentakrifkan atribut gaya C++11 menggunakan format "[[]]".
  • Menambahkan bendera "-Wreserved-identifier" untuk memaparkan amaran apabila anda menentukan pengecam terpelihara dalam kod pengguna.
  • Menambahkan bendera "-Wunused-but-set-parameter" dan "-Wunused-but-set-variable" untuk memaparkan amaran jika parameter atau pembolehubah ditetapkan tetapi tidak digunakan.
  • Menambahkan bendera "-Wnull-pointer-subtraction" untuk mengeluarkan amaran jika kod itu mungkin memperkenalkan tingkah laku yang tidak ditentukan kerana penggunaan penunjuk nol dalam operasi penolakan.
  • Menambahkan bendera "-fstack-usage" untuk menjana bagi setiap fail kod fail ".su" tambahan yang mengandungi maklumat tentang saiz bingkai tindanan untuk setiap fungsi yang ditakrifkan dalam fail yang sedang diproses.
  • Jenis keluaran baharu telah ditambahkan pada penganalisis statik - "sarif-html", yang membawa kepada penjanaan laporan secara serentak dalam format HTML dan Sarif. Menambah semakan allocClassWithName baharu. Apabila menentukan pilihan "-analyzer-display-progress", masa analisis setiap fungsi dipaparkan. Penganalisis penunjuk pintar (alpha.cplusplus.SmartPtr) hampir siap.
  • Keupayaan yang dikaitkan dengan sokongan OpenCL telah diperluaskan. Menambah sokongan untuk sambungan baharu cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields dan __cl_clang_non_portable_kernel_param_types. Pelaksanaan spesifikasi OpenCL 3.0 telah diteruskan. Untuk C, spesifikasi OpenCL 1.2 digunakan secara lalai melainkan versi lain dipilih secara eksplisit. Untuk C++, sokongan untuk fail dengan sambungan ".clcpp" telah ditambahkan.
  • Sokongan untuk arahan transformasi gelung (β€œ#pragma omp unrol” dan β€œ#pragma omp tile”) yang ditakrifkan dalam spesifikasi OpenMP 5.1 telah dilaksanakan.
  • Pilihan tambahan pada utiliti format denting: SpacesInLineCommentPrefix untuk menentukan bilangan ruang sebelum ulasan, IndentAccessModifiers, LambdaBodyIndentation dan PPIndentWidth untuk mengawal penjajaran entri, ungkapan lambda dan arahan prapemproses. Kemungkinan untuk mengisih penghitungan fail pengepala (SortIncludes) telah diperluaskan. Menambah sokongan untuk memformat fail JSON.
  • Sebilangan besar cek baru telah ditambah kepada linter clang-kemas.

Inovasi utama dalam LLVM 13.0:

  • Menambahkan pilihan "-ehcontguard" untuk menggunakan teknologi CET (Windows Control-flow Enforcement Technology) untuk melindungi daripada pelaksanaan eksploitasi yang dibina menggunakan teknik Return-Oriented Programming (ROP) pada peringkat pengendalian pengecualian.
  • Projek debuginfo-test telah dinamakan semula cross-project-tests dan direka bentuk untuk menguji komponen daripada projek yang berbeza, tidak terhad kepada maklumat penyahpepijatan.
  • Sistem pemasangan menyediakan sokongan untuk membina beberapa pengedaran, contohnya, satu dengan utiliti, dan satu lagi dengan perpustakaan untuk pembangun.
  • Di bahagian belakang untuk seni bina AArch64, sokongan untuk sambungan Armv9-A RME (Realm Management Extension) dan SME (Scalable Matrix Extension) dilaksanakan dalam pemasang.
  • Sokongan untuk ISA V68/HVX telah ditambahkan pada bahagian belakang untuk seni bina Heksagon.
  • Bahagian belakang x86 telah menambah baik sokongan untuk pemproses AMD Zen 3.
  • Menambahkan sokongan untuk GFX1013 RDNA2 APU pada bahagian belakang AMDGPU.
  • Libc++ terus melaksanakan ciri baharu piawaian C++20 dan C++2b, termasuk penyiapan perpustakaan "konsep". Menambah sokongan untuk sistem fail std:: untuk platform Windows berasaskan MinGW. Fail pengepala diasingkan , Dan . Menambahkan pilihan binaan LIBCXX_ENABLE_INCOMPLETE_FEATURES untuk melumpuhkan fail pengepala dengan fungsi yang tidak dilaksanakan sepenuhnya.
  • Keupayaan penyambung LLD telah diperluaskan, di mana sokongan untuk pemproses Aarch64 Big-endian dilaksanakan, dan bahagian belakang Mach-O telah dibawa ke keadaan yang membolehkan memautkan program biasa. Termasuk peningkatan yang diperlukan untuk memautkan Glibc menggunakan LLD.
  • Utiliti llvm-mca (Machine Code Analyzer) telah menambah sokongan untuk pemproses yang melaksanakan arahan mengikut tertib (talian paip superskalar tertib), seperti ARM Cortex-A55.
  • Penyahpepijat LLDB untuk platform AArch64 menyediakan sokongan penuh untuk Pengesahan Penunjuk, MTE (MemTag, Sambungan Penandaan Memori) dan daftar SVE. Arahan tambahan yang membolehkan anda mengikat tag pada setiap operasi peruntukan memori dan mengatur semakan penunjuk apabila mengakses memori, yang mesti dikaitkan dengan tag yang betul.
  • Penyahpepijat LLDB dan bahagian hadapan untuk bahasa Fortran - Flang telah ditambahkan pada himpunan binari yang dijana oleh projek.

Sumber: opennet.ru

Tambah komen