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 реализация специфичного для GCC выражения «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;
  • Добавлена экспериментальная поддержка использования C++17 в OpenCL. Из специфичных возможностей отмечается поддержка атрибутов адресного пространства, блокировка преобразования адресного пространства операторами приведения типов, предоставление векторных типов как в OpenCL для C, наличие специфичных OpenCL-типов для изображений, событий, каналов и т.п.
  • Добавлены новые флаги компилятора «-ftime-trace» и «-ftime-trace-granularity=N» для генерации отчета о времени выполнения различных стадий работы фронтэнда (парсинг, инициализация) и бэкенда (стадии оптимизации). Отчёт сохраняется в формате json, совместимом с chrome://tracing и 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.
  • Расширены возможности, связанные с поддержкой OpenCL, OpenMP и CUDA. В том числе обеспечена начальная поддержка неявного включения встроенных функций OpenCL (добавлен флаг «-fdeclare-opencl-builtins»), реализовано расширение cl_arm_integer_dot_product и расширены средства диагностики;
  • Улучшена работа статического анализатора и добавлена документация по выполнению статического анализа. Добавлены флаги для отображения доступных модулей проверки и поддерживаемых опций («-analyzer-checker[-option]-help», «-analyzer-checker[-option]-help-alpha» и «-analyzer-checker[-option]-help-developer»). Добавлен флаг «-analyzer-werror» для реагирования на предупреждения как на ошибки.
    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 с набором моделирующих функций проверки для выявления ошибок в кодовой базе 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 до состояния, пригодного для компоновки ядра Linux для архитектур arm32_7, arm64, ppc64le и x86_64.
    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;

  • В 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;
  • Внесены многочисленные улучшения в бэкенды для архитектур X86, AArch64, ARM, SystemZ, MIPS, AMDGPU и PowerPC. Например, для архитектуры
    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