Rilis set kompiler LLVM 13.0

Sawise nem sasi pembangunan, release saka project LLVM 13.0 diwenehi - toolkit GCC-kompatibel (kompiler, optimizers lan generator kode) sing compiles program menyang bitcode penengah instruksi virtual kaya RISC (mesin virtual tingkat rendah karo a sistem optimasi multi-level). Pseudocode sing digawe bisa diowahi nggunakake compiler JIT menyang instruksi mesin langsung nalika eksekusi program.

Dandan ing Clang 13.0:

  • Dhukungan sing dileksanakake kanggo panggilan buntut sing dijamin (nelpon subrutin ing pungkasan fungsi, mbentuk rekursi buntut yen subrutin kasebut nelpon dhewe). Dhukungan kanggo telpon buntut dijamin diwenehake dening atribut "[[clang:: musttail]]" ing C++ lan "__attribute__((musttail))" ing C, digunakake ing statement "bali". Fitur kasebut ngidini sampeyan ngetrapake optimasi kanthi nggunakake kode menyang iterasi sing rata kanggo ngirit konsumsi tumpukan.
  • "nggunakake" deklarasi lan ekstensi clang nyedhiyakake dhukungan kanggo nemtokake atribut gaya C ++ 11 nggunakake format "[[]]".
  • Nambahake gendera "-Wreserved-identifier" kanggo nampilake bebaya nalika sampeyan nemtokake pengenal sing dilindhungi ing kode pangguna.
  • Nambahake gendera "-Wunused-but-set-parameter" lan "-Wunused-but-set-variable" kanggo nampilake bebaya yen parameter utawa variabel disetel nanging ora digunakake.
  • Nambahake gendera "-Wnull-pointer-subtraction" kanggo menehi peringatan yen kode kasebut bisa ngenalake prilaku sing ora ditemtokake amarga nggunakake pointer null ing operasi pengurangan.
  • Added flag "-fstack-usage" kanggo generate kanggo saben file kode tambahan ".su" file ngemot informasi babagan ukuran pigura tumpukan kanggo saben fungsi ditetepake ing file diproses.
  • Jinis output anyar wis ditambahake menyang analisa statis - "sarif-html", sing ndadΓ©kakΓ© kanggo nggawe laporan bebarengan ing format HTML lan Sarif. Ditambahake mriksa allocClassWithName anyar. Nalika nemtokake pilihan "-analyzer-display-progress", wektu analisis saben fungsi ditampilake. Analisa pointer pinter (alpha.cplusplus.SmartPtr) meh siap.
  • Kapabilitas sing ana gandhengane karo dhukungan OpenCL wis ditambahi. Dhukungan ditambahake kanggo ekstensi anyar cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields lan __cl_clang_non_portable_kernel_param_types. Implementasi spesifikasi OpenCL 3.0 wis diterusake. Kanggo C, spesifikasi OpenCL 1.2 digunakake minangka standar kajaba versi liyane dipilih kanthi jelas. Kanggo C ++, dhukungan kanggo file kanthi ekstensi ".clcpp" wis ditambahake.
  • Dhukungan kanggo arahan transformasi daur ulang ("#pragma omp unrol" lan "#pragma omp tile") sing ditetepake ing spesifikasi OpenMP 5.1 wis ditindakake.
  • Opsi sing ditambahake menyang sarana format clang: SpacesInLineCommentPrefix kanggo nemtokake jumlah spasi sadurunge komentar, IndentAccessModifiers, LambdaBodyIndentation lan PPIndentWidth kanggo ngontrol alignment entri, ekspresi lambda lan arahan preprocessor. Kemungkinan kanggo ngurutake enumerasi file header (SortIncludes) wis ditambahi. Dhukungan ditambahake kanggo format file JSON.
  • Sebagean gedhe saka mriksa anyar wis ditambahake kanggo linter clang-tidy.

Inovasi utama ing LLVM 13.0:

  • Nambahake pilihan "-ehcontguard" kanggo nggunakake teknologi CET (Windows Control-flow Enforcement Technology) kanggo nglindhungi eksekusi eksploitasi sing dibangun nggunakake teknik Return-Oriented Programming (ROP) ing tahap penanganan istimΓ©wa.
  • ProyΓ¨k debuginfo-test wis diganti jeneng cross-project-tests lan dirancang kanggo nyoba komponen saka proyΓ¨k beda, ora winates kanggo informasi debugging.
  • Sistem perakitan nyedhiyakake dhukungan kanggo mbangun sawetara distribusi, contone, siji karo keperluan, lan liyane karo perpustakaan kanggo pangembang.
  • Ing backend kanggo arsitektur AArch64, ndhukung Armv9-A RME (Ekstensi Manajemen Realm) lan SME (Scalable Matrix Extension) dileksanakake ing assembler.
  • Dhukungan kanggo ISA V68 / HVX wis ditambahake menyang backend kanggo arsitektur Hexagon.
  • Backend x86 wis nambah dhukungan kanggo prosesor AMD Zen 3.
  • Dhukungan ditambahake kanggo GFX1013 RDNA2 APU menyang backend AMDGPU.
  • Libc ++ terus ngleksanakake fitur anyar saka standar C ++ 20 lan C ++ 2b, kalebu completion saka perpustakaan "konsep". Dhukungan ditambahake kanggo std :: sistem file kanggo platform Windows basis MinGW. File header , lan dipisahake. Opsi mbangun sing ditambahake LIBCXX_ENABLE_INCOMPLETE_FEATURES kanggo mateni file header kanthi fungsi sing ora ditindakake kanthi lengkap.
  • Kapabilitas linker LLD wis ditambahi, kang support kanggo Big-endian pemroses Aarch64 dipun ginakaken, lan backend Mach-O wis digawa menyang negara sing ngidini ngubungake program biasa. Klebu dandan sing dibutuhake kanggo ngubungake Glibc nggunakake LLD.
  • Utilitas llvm-mca (Machine Code Analyzer) nambahake dhukungan kanggo prosesor sing nindakake instruksi kanthi urutan (pipa superscalar ing urutan), kayata ARM Cortex-A55.
  • Debugger LLDB kanggo platform AArch64 nyedhiyakake dhukungan lengkap kanggo Pointer Authentication, MTE (MemTag, Memory Tagging Extension) lan SVE register. Added printah sing ngijini sampeyan kanggo naleni tag kanggo saben operasi alokasi memori lan ngatur mriksa pitunjuk nalika ngakses memori, kang kudu digandhengake karo tag bener.
  • Debugger LLDB lan frontend kanggo basa Fortran - Flang wis ditambahake menyang rakitan binar sing digawe dening proyek kasebut.

Source: opennet.ru

Add a comment