Ngaleupaskeun suite kompiler LLVM 9.0

Sanggeus genep bulan pangwangunan ditepikeun release proyék LVM 9.0 - Alat anu cocog sareng GCC (compilers, optimizer sareng generator kode) anu nyusun program kana bitcode perantaraan paréntah virtual sapertos RISC (mesin virtual tingkat rendah sareng sistem optimasi multi-tingkat). pseudo-kode nu dihasilkeun bisa dirobah ku JIT compiler kana parentah mesin katuhu dina waktu palaksanaan program.

Fitur anyar LLVM 9.0 kalebet ngaleungitkeun tag desain ékspérimén tina target platform RISC-V, dukungan C++ pikeun OpenCL, kamampuan pikeun ngabagi program kana bagian anu dimuat sacara dinamis dina LLD, sareng palaksanaan "asm goto", dipaké dina kode kernel Linux. libc ++ ditambahkeun rojongan pikeun WASI (WebAssembly System Interface), sarta LLD ditambahkeun rojongan awal pikeun WebAssembly linking dinamis.

Perbaikan dina Clang 9.0:

  • Ditambahkeun palaksanaan éksprési GCC-spésifik "asm goto", anu ngamungkinkeun anjeun ngalih tina blok inline assembler ka labél dina kode C. Fitur ieu diperyogikeun pikeun ngawangun kernel Linux dina modeu "CONFIG_JUMP_LABEL=y" nganggo Clang dina sistem sareng arsitektur x86_64. Ningali parobahan anu ditambihan dina sékrési saméméhna, kernel Linux ayeuna tiasa diwangun dina Clang pikeun arsitektur x86_64 (saméméhna ngan ukur ngawangun pikeun panangan, aarch64, ppc32, ppc64le sareng arsitéktur mips dirojong). Sumawona, proyék Android sareng ChromeOS parantos dirobih janten ngagunakeun Clang pikeun ngawangun kernel, sareng Google nguji Clang salaku platform utama pikeun ngawangun kernel pikeun sistem Linux produksina. Dina mangsa nu bakal datang, komponén LLVM séjén bisa dipaké dina prosés ngawangun kernel, kaasup LLD, llvm-objcopy, llvm-ar, llvm-nm, sarta llvm-objdump;
  • Ditambahkeun dukungan ékspérimén pikeun ngagunakeun C ++ 17 dina OpenCL. Fitur husus ngawengku rojongan pikeun atribut spasi alamat, blocking konvérsi spasi alamat ku operator tipe casting, penyediaan tipe vektor saperti dina OpenCL pikeun C, ayana tipe OpenCL husus pikeun gambar, acara, saluran, jsb.
  • Nambahkeun bandéra kompiler anyar "-ftime-trace" sareng "-ftime-trace-granularity = N" pikeun ngahasilkeun laporan ngeunaan waktos palaksanaan rupa-rupa tahapan frontend (parsing, initialization) sareng backend (tahap optimasi). Laporan disimpen dina format json, cocog sareng chrome://tracing sareng speedscope.app;
  • Ditambahkeun ngolah "__declspec (allocator)" specifier sareng generasi inpormasi debugging anu ngiringan anu ngamungkinkeun anjeun ngawas konsumsi mémori dina lingkungan Visual Studio;
  • Pikeun basa C, rojongan geus ditambahkeun pikeun "__FILE_NAME__" makro, nu nyarupaan "__FILE__" makro, tapi ngawengku ngan ngaran file tanpa jalur pinuh;
  • C ++ geus dimekarkeun rojongan pikeun atribut spasi alamat pikeun nutupan rupa C ++ fitur, kaasup parameter jeung argumen pola, tipe rujukan, tipe balik inferensi, objék, fungsi otomatis-generate, diwangun-di operator, sarta leuwih.
  • Kamampuhan anu aya hubunganana sareng dukungan pikeun OpenCL, OpenMP sareng CUDA parantos dilegakeun. Ieu ngawengku rojongan awal pikeun citakan implisit tina diwangun-di fungsi OpenCL (nu "-fdeclare-opencl-builtins" bandéra geus ditambahkeun), extension cl_arm_integer_dot_product geus dilaksanakeun, sarta parabot diagnostik geus dimekarkeun;
  • Karya analisa statik parantos ningkat sareng dokuméntasi pikeun ngalakukeun analisa statik parantos ditambah. Ditambahkeun bandéra pikeun mintonkeun modul checker sadia tur pilihan nu dirojong ("-analyzer-checker [-option] -help", "-analyzer-checker [-option] -help-alpha" jeung "-analyzer-checker [-option] -help "-pamekar"). Ditambahkeun bendera "-analyzer-werror" pikeun ngubaran peringatan salaku kasalahan.
    Nambahkeun modeu verifikasi anyar:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling pikeun ngaidentipikasi prakték anu teu aman pikeun damel sareng panyangga;
    • osx.MIGCecker pikeun milarian palanggaran MIG (Mach Interface Generator) aturan panggero;
    • optin.osx.OSObjectCStyleCast pikeun manggihan XNU libkern konversi obyék lepat;
    • apiModeling.llvm kalawan sakumpulan modeling mariksa fungsi pikeun ngadeteksi kasalahan dina codebase LLVM;
    • Kode stabil pikeun mariksa uninitialized C ++ objék (UninitializedObject dina pakét optin.cplusplus);
  • Utilitas clang-format parantos nambihan dukungan pikeun pormat kode dina basa C # sareng nyayogikeun dukungan pikeun gaya pormat kode anu dianggo ku Microsoft;
  • clang-cl, antarbeungeut garis paréntah alternatif anu nyayogikeun kasaluyuan tingkat pilihan sareng kompiler cl.exe anu kalebet dina Visual Studio, parantos nambihan heuristik pikeun ngubaran file anu henteu aya salaku pilihan garis paréntah sareng nampilkeun peringatan anu saluyu (contona, nalika ngajalankeun "clang-cl / diagnostik: caret / c test.cc");
  • Bagian badag tina cék anyar geus ditambahkeun kana linter clang-rapi, kaasup cék ditambahkeun husus pikeun OpenMP API;
  • Dilegaan kamampuhan server clangd (Clang Server), dimana mode wangunan indéks latar diaktipkeun sacara standar, dukungan pikeun tindakan kontekstual sareng kode parantos ditambah (dimeunangkeun variabel, ékspansi definisi otomatis sareng makro, konvérsi senar anu kabur ka anu teu kabur), kamampuan pikeun nampilkeun warnings ti Clang-rapi, dimekarkeun diagnostics kasalahan dina file lulugu sarta ditambahkeun kamampuhan pikeun nembongkeun informasi ngeunaan hirarki tipe;

utama inovasi LLVM 9.0:

  • Fitur partisi eksperimen geus ditambahkeun kana linker LLD, nu ngidinan Anjeun pikeun ngabagi hiji program kana sababaraha bagian, nu masing-masing aya dina file ELF misah. Fitur ieu ngamungkinkeun anjeun pikeun ngaluncurkeun bagian utama program, anu bakal ngamuat komponén-komponén sanésna nalika dioperasikeun (contona, anjeun tiasa misahkeun panempo PDF anu diwangun kana file anu misah, anu bakal dimuat ngan nalika pangguna muka PDF. file).

    Panyambung LLD dibawa ka payun ka kaayaan anu cocog pikeun ngaitkeun kernel Linux pikeun arm32_7, arm64, ppc64le sareng x86_64 arsitéktur.
    Pilihan anyar "-" (kaluaran ka stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", "- z ifunc-noplt" jeung "-z common-page-size". Pikeun arsitektur AArch64, rojongan pikeun BTI (Cabang Target Indikator) jeung PAC (Pointer Authentication Code) parentah geus ditambahkeun. Rojongan pikeun platform MIPS, RISC-V sareng PowerPC parantos ningkat sacara signifikan. Ditambahkeun rojongan awal pikeun linking dinamis pikeun WebAssembly;

  • Dina libc ++ dilaksanakeun fungsi ssize, std :: is_constant_evaluated, std :: midpoint na std :: lerp, métode "hareup" jeung "tukang" geus ditambahkeun kana std :: span, atribut tipe std :: is_unbounded_array na std :: is_bounded_array geus ditambahkeun , kamampuhan std geus dimekarkeun:: atom. Rojongan pikeun GCC 4.9 parantos dileungitkeun (tiasa dianggo sareng GCC 5.1 sareng rilis anu langkung énggal). rojongan ditambahkeun WASI (WebAssembly System Interface, panganteur pikeun ngagunakeun WebAssembly luar browser);
  • optimizations anyar geus ditambahkeun. Diaktipkeun konvérsi panggero memcmp ka bcmp dina sababaraha kaayaan. Dilaksanakeun omission of range mariksa pikeun tabel luncat nu blok switch handap unreachable atawa lamun parentah teu dipaké, contona, lamun nelepon fungsi jeung tipe void;
  • Backend pikeun arsitéktur RISC-V parantos distabilkeun, anu henteu deui diposisikan salaku ékspérimén sareng diwangun sacara standar. Nyadiakeun rojongan generasi kode pinuh pikeun RV32I na RV64I instruksi set varian kalayan ekstensi MAFDC;
  • Seueur perbaikan parantos dilakukeun pikeun backends pikeun X86, AArch64, ARM, SystemZ, MIPS, AMDGPU sareng arsitéktur PowerPC. Contona, pikeun arsitéktur
    AArch64 nambihan dukungan pikeun petunjuk SVE2 (Scalable Vector Extension 2) sareng MTE (Memory Tagging Extensions); dina backend ARM, dukungan pikeun arsitektur Armv8.1-M sareng ekstensi MVE (M-Profile Vector Extension). Rojongan pikeun arsitektur GFX10 (Navi) geus ditambahkeun kana AMDGPU backend, kamampuhan nelepon fungsi diaktipkeun sacara standar, sarta pass gabungan diaktipkeun. DPP (Data-Paralel Primitif).

  • Debugger LLDB ayeuna gaduh panyorot warna pikeun backtraces sareng dukungan tambahan pikeun blok DWARF4 debug_types sareng DWARF5 debug_info;
  • Rojongan pikeun obyék sareng file anu tiasa dieksekusi dina format COFF parantos ditambahkeun kana utiliti llvm-objcopy sareng llvm-strip.

sumber: opennet.ru

Tambahkeun komentar