Rilis set kompiler LLVM 12.0

Sawise nem sasi pembangunan, release saka project LLVM 12.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 12.0:

  • Dhukungan kanggo atribut "kemungkinan" lan "ora mungkin" sing diusulake ing standar C ++ 20 wis dileksanakake lan diaktifake kanthi gawan, ngidini pangoptimal bisa dilaporake babagan kemungkinan konstruksi kondisional sing dipicu (contone, "[[kemungkinan ]] yen (acak > 0) {β€œ).
  • Dhukungan ditambahake kanggo prosesor AMD Zen 3 (-maret = znver3), Intel Alder Lake (-march = alderlake) lan Intel Sapphire Rapids (-march = sapphirerapids).
  • Dhukungan ditambahake kanggo bendera "-march = x86-64-v [234]" kanggo milih tingkat arsitektur x86-64 (v2 - kalebu ekstensi SSE4.2, SSSE3, POPCNT lan CMPXCHG16B; v3 - AVX2 lan MOVBE; v4 - AVX-512 ).
  • Dhukungan tambahan kanggo prosesor Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) lan Fujitsu A64FX (a64fx). Contone, kanggo ngaktifake optimasi kanggo CPU Neoverse-V1, sampeyan bisa nemtokake "-mcpu = neoverse-v1".
  • Kanggo arsitektur AArch64, panji kompiler anyar "-moutline-atomics" lan "-mno-outline-atomics" wis ditambahake kanggo ngaktifake utawa mateni fungsi helper operasi atom, kayata "__aarch64_cas8_relax". Fungsi kasebut ndeteksi nalika runtime manawa dhukungan LSE (Ekstensi Sistem Gedhe) kasedhiya lan nggunakake instruksi prosesor atom sing diwenehake utawa bali nggunakake instruksi LL / SC (Load-link / store-conditional) kanggo sinkronisasi.
  • Nambahake opsi "-fbinutils-version" kanggo milih versi target saka suite binutils kanggo kompatibilitas karo linker lawas lan prilaku assembler.
  • Kanggo file eksekusi ELF, nalika gendera "-gz" ditemtokake, kompresi informasi debugging nggunakake perpustakaan zlib diaktifake kanthi standar (gz = zlib). Nyambungake file obyek sing diasilake mbutuhake lld utawa GNU binutils 2.26+. Kanggo mulihake kompatibilitas karo versi lawas saka binutils, sampeyan bisa nemtokake "-gz=zlib-gnu".
  • Pointer 'iki' saiki wis diproses kanthi mriksa nonnull lan dereferenceable(N). Kanggo mbusak atribut nonnull nalika sampeyan kudu nggunakake nilai NULL, sampeyan bisa nggunakake pilihan "-fdelete-null-pointer-checks".
  • Ing platform Linux, mode "-fasynchronous-unwind-tables" diaktifake kanggo arsitektur AArch64 lan PowerPC kanggo nggawe tabel panggilan unwind, kaya ing GCC.
  • Ing "#pragma clang daur ulang vectorize_width" ditambahakΓ© kemampuan kanggo nemtokake "tetep" (standar) lan "scalable" pilihan kanggo milih cara vectorization. Mode "scalable", bebas saka dawa vektor, eksperimen lan bisa digunakake ing hardware sing ndhukung vektorisasi skalabel.
  • Dhukungan apik kanggo platform Windows: Majelis binar resmi kanggo Windows ing sistem Arm64 wis disiapake, kalebu Clang compiler, linker LLD lan perpustakaan runtime compiler-rt. Nalika mbangun kanggo platform target MinGW, suffix .exe ditambahake, sanajan kompilasi silang.
  • Kapabilitas sing ana gandhengane karo dhukungan kanggo OpenCL, OpenMP lan CUDA wis ditambahi. Nambahake opsi "-cl-std = CL3.0" lan "-cl-std = CL1.0" kanggo milih opsi makro kanggo OpenCL 3.0 lan OpenCL 1.0. Alat diagnostik wis ditambahi.
  • Dhukungan tambahan kanggo instruksi HRESET, UITR, lan AVXVNNI sing ditindakake ing sawetara prosesor basis x86.
  • Ing sistem x86, dhukungan kanggo opsi "-mtune=" diaktifake, mbisakake optimasi microarchitectural sing dipilih tanpa preduli saka nilai "-march=".
  • Analyzer statis wis nambah pangolahan sawetara fungsi POSIX lan kanthi signifikan ningkatake tekad asil operasi kondisional nalika ana sawetara nilai simbolis ing perbandingan kasebut. Priksa anyar wis ditambahake: fuchia.HandleChecker (nemtokake gagang ing struktur), webkit.UncountedLambdaCapturesChecker webkit lan alpha.webkit.UncountedLocalVarsChecker (njupuk menyang akun peculiarities nggarap penunjuk ing kode mesin WebKit).
  • Ing ekspresi sing digunakake ing konteks konstanta, nggunakake fungsi sing dibangun ing __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, bswapq , _castf*, __rol* lan __ror*.
  • Nambahake pilihan BitFieldColonSpacing menyang utilitas format clang kanggo milih jarak ing sekitar pengenal, kolom, lan definisi lapangan.
  • Server caching clangd (Clang Server) ing platform Linux wis suda Ngartekno konsumsi memori sak operasi long-term (telpon periodik kanggo malloc_trim kasedhiya kanggo bali free kaca memori kanggo sistem operasi).

Inovasi utama ing LLVM 12.0:

  • Dhukungan kanggo alat mbangun llvm-build sing ditulis ing Python wis mandheg, lan proyek kasebut wis rampung nggunakake sistem mbangun CMake.
  • Ing backend kanggo arsitektur AArch64, dhukungan kanggo platform Windows wis ditingkatake: generasi output assembler sing bener kanggo sistem Windows target wis dipastikan, generasi data ing telpon unwind wis dioptimalake (ukuran data kasebut wis suda nganti 60). %), kemampuan kanggo nggawe data unwind nggunakake assembler wis ditambahakΓ© arahan .seh_*.
  • Backend kanggo arsitektur PowerPC nduweni optimasi anyar kanggo puteran lan panyebaran inline, dhukungan sing ditambahake kanggo pemroses Power10, dhukungan tambahan kanggo instruksi MMA kanggo manipulasi matriks, lan dhukungan sing luwih apik kanggo sistem operasi AIX.
  • Backend x86 nambah dhukungan kanggo prosesor AMD Zen 3, Intel Alder Lake lan Intel Sapphire Rapids, uga instruksi prosesor HRESET, UITR lan AVXVNNI. Dhukungan kanggo MPX (Memori Protection Extensions) kanggo mriksa pitunjuk kanggo mesthekake wates memori ora didhukung maneh (teknologi iki ora nyebar lan wis dibusak saka GCC lan clang). Ditambahake dhukungan kanggo assembler kanggo awalan {disp32} lan {disp8} lan suffixes .d32 lan .d8 kanggo ngontrol ukuran offset operand lan mlumpat. Nambahake atribut anyar "tune-cpu" kanggo ngontrol inklusi optimasi mikroarsitektur.
  • Mode anyar "-fsanitize = unsigned-shift-base" wis ditambahake menyang detektor masalah integer (integer sanitizer, "-fsanitize = integer") kanggo ndeteksi overflows saka integer sing ora ditandatangani sawise rada ngiwa.
  • Ing macem-macem detektor (asan, cfi, lsan, msan, tsan, ubsan sanitizer) dhukungan kanggo distribusi Linux kanthi perpustakaan Musl standar wis ditambahake.
  • Kapabilitas linker LLD wis ditambahi. Dhukungan sing luwih apik kanggo format ELF, kalebu opsi sing ditambahake "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program - visibilitas "" Dhukungan MinGW sing luwih apik. Kanggo format Mach-O (macOS), dhukungan kanggo arsitΓ¨ktur arm64, arm, lan i386, link-time optimizations (LTO), lan stack unwinding kanggo penanganan pengecualian wis dileksanakake.
  • Libc ++ ngleksanakake fitur anyar saka standar C ++ 20 lan wis miwiti pangembangan fitur saka specification C ++ 2b. Dhukungan sing ditambahake kanggo mbangun kanthi mateni dhukungan lokalisasi ("-DLIBCXX_ENABLE_LOCALIZATION = OFF") lan piranti kanggo ngasilake nomer pseudo-acak ("-DLIBCXX_ENABLE_RANDOM_DEVICE = OFF").

Source: opennet.ru

Add a comment