Kutolewa kwa safu ya mkusanyaji ya LLVM 9.0

Baada ya miezi sita ya maendeleo imewasilishwa kutolewa kwa mradi LLVM 9.0 - Zana zinazooana na GCC (vikusanyaji, viboreshaji na jenereta za msimbo), kuandaa programu katika msimbo wa kati wa maagizo ya mtandaoni kama RISC (mashine pepe ya kiwango cha chini iliyo na mfumo wa uboreshaji wa viwango vingi). Msimbo wa uchapishaji unaozalishwa unaweza kubadilishwa kwa kutumia kikusanyaji cha JIT kuwa maagizo ya mashine moja kwa moja wakati wa utekelezaji wa programu.

Vipengele vipya vya LLVM 9.0 vinajumuisha kuondolewa kwa lebo ya muundo wa majaribio kutoka kwa jukwaa lengwa la RISC-V, usaidizi wa C++ kwa OpenCL, uwezo wa kugawanya programu katika sehemu zinazopakiwa kwa nguvu katika LLD, na utekelezaji wa β€œsawa sawa", inayotumika katika msimbo wa kinu cha Linux. libc++ iliongeza usaidizi kwa WASI (Kiolesura cha Mfumo wa WebAssembly), na LLD iliongeza usaidizi wa awali wa kuunganisha kwa nguvu kwa WebAssembly.

Maboresho katika Clang 9.0:

  • Imeongezwa utekelezaji wa usemi mahususi wa GCC "sawa sawa", ambayo hukuruhusu kuhama kutoka kwa kizuizi cha ndani cha kiunganishi hadi lebo katika nambari ya C. Kipengele hiki kinahitajika ili kuunda kinu cha Linux katika hali ya "CONFIG_JUMP_LABEL=y" kwa kutumia Clang kwenye mifumo iliyo na usanifu wa x86_64. Kwa kuzingatia mabadiliko yaliyoongezwa katika matoleo ya awali, kerneli ya Linux sasa inaweza kujengwa katika Clang kwa usanifu wa x86_64 (hapo awali tu jengo la mkono, aarch64, ppc32, ppc64le na usanifu wa mips uliungwa mkono). Zaidi ya hayo, miradi ya Android na ChromeOS tayari imebadilishwa ili kutumia Clang kwa ajili ya ujenzi wa kernel, na Google inajaribu Clang kama jukwaa kuu la kujenga kernels kwa mifumo yake ya Linux ya uzalishaji. Katika siku zijazo, vipengele vingine vya LLVM vinaweza kutumika katika mchakato wa kujenga kernel, ikiwa ni pamoja na LLD, llvm-objcopy, llvm-ar, llvm-nm, na llvm-objdump;
  • Umeongeza usaidizi wa majaribio wa kutumia C++17 katika OpenCL. Vipengele mahususi ni pamoja na usaidizi wa sifa za nafasi ya anwani, kuzuia ubadilishaji wa nafasi ya anwani kwa waendeshaji wa kutuma aina, utoaji wa aina za vekta kama katika OpenCL kwa C, uwepo wa aina mahususi za OpenCL kwa picha, matukio, chaneli, n.k.
  • Imeongeza bendera mpya za mkusanyaji "-ftime-trace" na "-ftime-trace-granularity=N" ili kutoa ripoti kuhusu muda wa utekelezaji wa hatua mbalimbali za mandhari ya mbele ( uchanganuzi, uanzishaji) na mazingira ya nyuma (hatua za uboreshaji). Ripoti imehifadhiwa katika umbizo la json, linalooana na chrome://tracing na speedscope.app;
  • Uchakataji ulioongezwa wa kibainishi cha "__declspec(allocator)" na uundaji wa maelezo yanayoambatana ya utatuzi ambayo hukuruhusu kufuatilia matumizi ya kumbukumbu katika mazingira ya Visual Studio;
  • Kwa lugha ya C, usaidizi umeongezwa kwa makro "__FILE_NAME__", ambayo inafanana na jumla ya "__FILE__", lakini inajumuisha tu jina la faili bila njia kamili;
  • C++ imepanua usaidizi wa sifa za nafasi ya anwani ili kufidia vipengele mbalimbali vya C++, ikiwa ni pamoja na vigezo na ruwaza za hoja, aina za marejeleo, makisio ya aina ya kurejesha, vitu, utendakazi zinazozalishwa kiotomatiki, waendeshaji waliojengewa ndani na zaidi.
  • Uwezo unaohusishwa na usaidizi wa OpenCL, OpenMP na CUDA umepanuliwa. Hii inajumuisha usaidizi wa awali wa ujumuishaji kamili wa vitendaji vya OpenCL vilivyojengewa ndani (alama ya "-fdeclare-opencl-builtins" imeongezwa), kiendelezi cha cl_arm_integer_dot_product kimetekelezwa, na zana za uchunguzi zimepanuliwa;
  • Kazi ya kichanganuzi tuli imeboreshwa na nyaraka za kufanya uchanganuzi tuli zimeongezwa. Alama zilizoongezwa ili kuonyesha moduli zinazopatikana za kusahihisha na chaguo zinazotumika (β€œ-kikagua-kichanganuzi[-chaguo]-msaada”, β€œ-kikagua-kichanganuzi[-chaguo]-msaada-alpha” na β€œ-kikagua-kichanganuzi[-chaguo]-msaada "-msanidi"). Imeongeza alama ya "-analyzer-werror" ili kushughulikia maonyo kama makosa.
    Aliongeza njia mpya za uthibitishaji:

    • security.insecureAPI.DeprecatedAuUnsafeBufferHandling ili kutambua mbinu zisizo salama za kufanya kazi na vihifadhi;
    • osx.MIGChecker kutafuta ukiukaji wa sheria za simu za MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast kupata ubadilishaji usio sahihi wa kitu cha libkern cha XNU;
    • apiModeling.llvm yenye seti ya vitendaji vya kukagua uundaji ili kugundua hitilafu katika msingi wa msimbo wa LLVM;
    • Msimbo ulioimarishwa wa kuangalia vitu vya C++ ambavyo havijaidhinishwa (UninitializedObject katika kifurushi cha optin.cplusplus);
  • Huduma ya umbizo la clang imeongeza usaidizi wa uumbizaji wa msimbo katika lugha ya C# na hutoa usaidizi kwa mtindo wa uumbizaji wa msimbo unaotumiwa na Microsoft;
  • clang-cl, kiolesura mbadala cha mstari wa amri ambacho hutoa utangamano wa kiwango cha chaguo na mkusanyaji wa cl.exe uliojumuishwa kwenye Visual Studio, imeongeza heuristics kutibu faili ambazo hazipo kama chaguzi za safu ya amri na kuonyesha onyo linalolingana (kwa mfano, wakati wa kukimbia "clang-cl / diagnostic :caret /c test.cc");
  • Sehemu kubwa ya hundi mpya imeongezwa kwa linter clang-tidy, ikijumuisha ukaguzi maalum kwa API ya OpenMP;
  • Imepanuliwa uwezo wa seva clangd (Seva ya Clang), ambamo modi ya uundaji wa faharasa ya mandharinyuma imewezeshwa kwa chaguo-msingi, usaidizi wa vitendo vya muktadha na msimbo umeongezwa (urejeshaji kigezo, upanuzi wa ufafanuzi wa kiotomatiki na jumla, ubadilishaji wa mifuatano iliyotoroka hadi isiyoepukika), uwezo wa kuonyesha. maonyo kutoka kwa Clang-tidy, uchunguzi uliopanuliwa wa makosa katika faili za vichwa na kuongeza uwezo wa kuonyesha habari kuhusu aina ya uongozi;

kuu ubunifu LLVM 9.0:

  • Kipengele cha ugawaji wa majaribio kimeongezwa kwa kiunganishi cha LLD, ambacho hukuruhusu kugawanya programu moja katika sehemu kadhaa, ambayo kila moja iko kwenye faili tofauti ya ELF. Kipengele hiki hukuruhusu kuzindua sehemu kuu ya programu, ambayo itapakia vifaa vingine kama inahitajika wakati wa operesheni (kwa mfano, unaweza kutenganisha kitazamaji cha PDF kilichojengwa ndani ya faili tofauti, ambayo itapakia tu wakati mtumiaji anafungua PDF. faili).

    Kiungo cha LLD kuletwa mbele kwa hali inayofaa kuunganisha kinu cha Linux kwa usanifu wa arm32_7, arm64, ppc64le na x86_64.
    Chaguzi mpya "-" (matokeo kwa stdout), "-[no-]ruhusu-shlib-isiyoelezewa", "-undefined-glob", "-nmagic", "-omagic", "-tegemezi-maktaba", " - z ifunc-noplt" na "-z common-page-size". Kwa usanifu wa AArch64, msaada wa BTI (Kiashiria Lengwa la Tawi) na maagizo ya PAC (Msimbo wa Uthibitishaji wa Pointer) umeongezwa. Usaidizi wa mifumo ya MIPS, RISC-V na PowerPC umeboreshwa kwa kiasi kikubwa. Aliongeza usaidizi wa awali kwa kuunganisha kwa nguvu kwa WebAssembly;

  • Katika libc++ kutekelezwa saizi ya kazi, std::is_constant_evaluated, std::midpoint na std::lerp, njia za "mbele" na "nyuma" zimeongezwa kwa std::span, sifa za aina std::is_unbounded_array na std::is_bounded_array zimeongezwa. , uwezo wa std umepanuliwa: :atomic. Usaidizi wa GCC 4.9 umekatishwa (unaweza kutumika na GCC 5.1 na matoleo mapya zaidi). Aliongeza msaada WASI (Kiolesura cha Mfumo wa WebAssembly, kiolesura cha kutumia WebAssembly nje ya kivinjari);
  • Uboreshaji mpya umeongezwa. Imewasha ubadilishaji wa simu za memcmp hadi bcmp katika hali zingine. Kutotekelezwa kwa ukaguzi wa masafa kwa meza za kuruka ambazo vizuizi vya chini vya swichi havifikiki au wakati maagizo hayatumiki, kwa mfano, wakati wa kupiga simu kwa utupu wa aina;
  • Sehemu ya nyuma ya usanifu wa RISC-V imeimarishwa, ambayo haijawekwa tena kama ya majaribio na imejengwa kwa chaguo-msingi. Hutoa usaidizi kamili wa kuzalisha msimbo kwa vibadala vya seti za maagizo ya RV32I na RV64I na viendelezi vya MAFDC;
  • Maboresho mengi yamefanywa kwa usanifu wa X86, AArch64, ARM, SystemZ, MIPS, AMDGPU na PowerPC. Kwa mfano, kwa usanifu
    AArch64 iliongeza usaidizi kwa maelekezo ya SVE2 (Scalable Vector Extension 2) na MTE (Memory Tagging Extensions); katika upande wa nyuma wa ARM, msaada wa usanifu wa Armv8.1-M na kiendelezi cha MVE (M-Profile Vector Extension) kiliongezwa. Usaidizi wa usanifu wa GFX10 (Navi) umeongezwa kwenye mandharinyuma ya AMDGPU, uwezo wa kupiga simu za utendaji unawezeshwa kwa chaguo-msingi, na pasi iliyojumuishwa imewashwa. DPP (Data-Parallel Primitives).

  • Kitatuzi cha LLDB sasa kina uangaziaji wa rangi kwa vifuatilizi na kuongeza usaidizi kwa aina za utatuzi za DWARF4 na vizuizi vya maelezo ya DWARF5;
  • Usaidizi wa faili za kitu na zinazoweza kutekelezeka katika umbizo la COFF umeongezwa kwa huduma za llvm-objcopy na llvm-strip.

Chanzo: opennet.ru

Kuongeza maoni