Ngaleupaskeun suite kompiler LLVM 13.0

Sanggeus genep bulan pangwangunan, sékrési proyék LLVM 13.0 dibere - a toolkit GCC-cocog (compilers, optimizers sarta generator kode) nu compiles program kana bitcode panengah instruksi maya RISC-kawas (mesin virtual tingkat low kalawan a sistem optimasi multi-tingkat). Pseudocode nu dihasilkeun bisa dirobah maké JIT compiler kana parentah mesin langsung dina waktu palaksanaan program.

Perbaikan dina Clang 13.0:

  • Dilaksanakeun rojongan pikeun panggero buntut dijamin (nelepon subrutin a di pisan tungtung fungsi hiji, ngabentuk recursion buntut lamun subrutin nelepon sorangan). Rojongan pikeun panggero buntut dijamin disadiakeun ku atribut "[[clang:: musttail]]" dina C++ jeung "__attribute__((musttail))" dina C, dipaké dina pernyataan "balik". Fitur ieu ngamungkinkeun anjeun pikeun ngalaksanakeun optimasi ku cara nyebarkeun kode kana iterasi datar pikeun ngahemat konsumsi tumpukan.
  • "ngagunakeun" deklarasi jeung clang ekstensi nyadiakeun rojongan pikeun nangtukeun C ++ 11-gaya atribut ngagunakeun "[[]]" format.
  • Ditambahkeun bendera "-Wreserved-identifier" pikeun nembongkeun peringatan nalika identifiers ditangtayungan dieusian dina kode pamaké.
  • Ditambahkeun "-Wunused-but-set-parameter" sareng "-Wunused-but-set-variable" umbul pikeun nunjukkeun peringatan upami parameter atanapi variabel diatur tapi henteu dianggo.
  • Ditambahkeun bendera "-Wnull-pointer-subtraction" pikeun ngaluarkeun peringatan upami kodeu tiasa ngenalkeun paripolah anu teu jelas kusabab pamakean pointer nol dina operasi pangurangan.
  • Ditambahkeun bendera "-fstack-pamakéan" pikeun ngahasilkeun pikeun tiap file kode hiji tambahan ".su" file ngandung émbaran ngeunaan ukuran pigura tumpukan pikeun tiap fungsi diartikeun dina file keur diolah.
  • Jinis kaluaran énggal parantos ditambah kana analisa statik - "sarif-html", anu nuju kana ngahasilkeun laporan sakaligus dina format HTML sareng Sarif. Ditambahkeun cek allocClassWithName anyar. Nalika nangtukeun pilihan "-analyzer-display-progress", waktos analisis unggal fungsi dipintonkeun. Analis pointer pinter (alpha.cplusplus.SmartPtr) ampir siap.
  • Kamampuhan anu aya hubunganana sareng dukungan OpenCL parantos dilegakeun. Ditambahkeun dukungan pikeun ekstensi anyar cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields sareng __cl_clang_non_portable_kernel_param_types. Palaksanaan spésifikasi OpenCL 3.0 diteruskeun. Pikeun C, spésifikasi OpenCL 1.2 dianggo sacara standar iwal versi anu sanés dipilih sacara eksplisit. Pikeun C ++, rojongan pikeun file jeung extension ".clcpp" geus ditambahkeun.
  • Rojongan pikeun diréktif transformasi loop ("#pragma omp unrol" jeung "#pragma omp tile") ditetepkeun dina spésifikasi OpenMP 5.1 geus dilaksanakeun.
  • Nambahkeun pilihan kana utilitas clang-format: SpacesInLineCommentPrefix pikeun nangtukeun jumlah spasi saméméh komentar, IndentAccessModifiers, LambdaBodyIndentation na PPIndentWidth pikeun ngadalikeun alignment of entri, ekspresi lambda jeung directives preprocessor. Kamungkinan pikeun nyortir enumerasi file header (SortIncludes) parantos dilegaan. Ditambahkeun dukungan pikeun pormat file JSON.
  • Bagian badag tina cék anyar geus ditambahkeun kana linter clang-rapi.

Inovasi konci dina LLVM 13.0:

  • Ditambahkeun pilihan "-ehcontguard" pikeun ngagunakeun téknologi CET (Windows Control-flow Enforcement Technology) pikeun ngajagaan tina palaksanaan eksploitasi anu diwangun ngagunakeun téknik Return-Oriented Programming (ROP) dina tahap penanganan iwal.
  • Proyék debuginfo-test geus diganti cross-proyék-tés sarta dirancang pikeun nguji komponén tina proyék béda, teu diwatesan ku informasi debugging.
  • Sistem assembly nyadiakeun rojongan pikeun ngawangun sababaraha sebaran, contona, hiji kalawan utilitas, sarta séjén kalawan perpustakaan pikeun pamekar.
  • Dina backend pikeun arsitéktur AArch64, rojongan pikeun Armv9-A RME (Realm Management Extension) jeung UKM (Scalable Matrix Extension) dilaksanakeun di assembler.
  • Rojongan pikeun Isa V68 / HVX geus ditambahkeun kana backend pikeun arsitektur Hexagon.
  • Backend x86 parantos ningkatkeun dukungan pikeun prosesor AMD Zen 3.
  • Ditambahkeun rojongan pikeun GFX1013 RDNA2 APU kana AMDGPU backend.
  • Libc ++ terus nerapkeun fitur anyar tina standar C ++ 20 jeung C ++ 2b, kaasup parantosan perpustakaan "konsép". Ditambahkeun dukungan pikeun std :: filesystem pikeun platform Windows basis MinGW. File lulugu , sareng dipisahkeun. Nambahkeun pilihan ngawangun LIBCXX_ENABLE_INCOMPLETE_FEATURES pikeun nganonaktipkeun file header sareng fungsionalitas anu henteu dilaksanakeun sapinuhna.
  • Kamampuhan linker LLD geus dimekarkeun, nu rojongan pikeun prosesor Big-endian Aarch64 dilaksanakeun, sarta backend Mach-O geus dibawa ka kaayaan anu ngamungkinkeun linking program biasa. Kaasup perbaikan diperlukeun pikeun numbu Glibc maké LLD.
  • Utiliti llvm-mca (Machine Code Analyzer) parantos nambihan dukungan pikeun prosesor anu ngalaksanakeun paréntah dina urutan (pipa superscalar dina urutan), sapertos ARM Cortex-A55.
  • Debugger LLDB pikeun platform AArch64 nyayogikeun dukungan lengkep pikeun Pointer Authentication, MTE (MemTag, Memory Tagging Extension) sareng SVE registers. Paréntah ditambahkeun nu ngidinan Anjeun pikeun meungkeut tag ka unggal operasi alokasi memori tur ngatur hiji dipariksa pointer nalika aksés memori, nu kudu pakait jeung tag bener.
  • Debugger LLDB sareng frontend pikeun basa Fortran - Flang parantos ditambahkeun kana rakitan binér anu dihasilkeun ku proyék éta.

sumber: opennet.ru

Tambahkeun komentar