Kutolewa kwa safu ya mkusanyaji ya LLVM 13.0

Baada ya miezi sita ya maendeleo, kutolewa kwa mradi wa LLVM 13.0 kuliwasilishwa - zana ya zana inayoendana na GCC (compilers, viboreshaji na jenereta za msimbo) ambayo inakusanya programu katika bitcode ya kati ya maagizo ya mtandaoni kama RISC (mashine pepe ya kiwango cha chini iliyo na mfumo wa uboreshaji wa ngazi nyingi). Msimbo wa uchapishaji unaozalishwa unaweza kubadilishwa kwa kutumia kikusanyaji cha JIT kuwa maagizo ya mashine moja kwa moja wakati wa utekelezaji wa programu.

Maboresho katika Clang 13.0:

  • Usaidizi uliotekelezwa kwa simu za mkia zilizohakikishwa (kupiga simu kwa utaratibu mdogo mwishoni kabisa mwa chaguo la kukokotoa, kutengeneza kujirudia kwa mkia ikiwa utaratibu mdogo unajiita wenyewe). Usaidizi kwa simu za mkia zilizohakikishwa hutolewa na sifa ya "[[clang::musttail]]" katika C++ na "__attribute__((musttail))" katika C, inayotumiwa katika taarifa ya "return". Kipengele hiki hukuruhusu kutekeleza uboreshaji kwa kupeleka msimbo kwenye mrudisho bapa ili kuokoa matumizi ya rafu.
  • "kutumia" matamko na viendelezi vya clang hutoa usaidizi wa kufafanua sifa za mtindo wa C++11 kwa kutumia umbizo la "[[]]".
  • Imeongeza alama ya "-Wreserved-identifier" ili kuonyesha onyo unapobainisha vitambulishi vilivyohifadhiwa katika msimbo wa mtumiaji.
  • Imeongeza alama za "-Wunused-but-set-parameta" na "-Wunused-but-set-variable" ili kuonyesha onyo ikiwa kigezo au kigezo kimewekwa lakini hakitumiki.
  • Imeongeza alama ya "-Wnull-pointer-subtraction" ili kutoa onyo ikiwa msimbo unaweza kuanzisha tabia isiyobainishwa kwa sababu ya matumizi ya kiashiria batili katika shughuli za kutoa.
  • Imeongeza alama ya "-fstack-usage" ili kutoa kwa kila faili ya msimbo faili ya ziada ya ".su" iliyo na maelezo kuhusu ukubwa wa fremu za rafu kwa kila chaguo za kukokotoa zilizobainishwa katika faili inayochakatwa.
  • Aina mpya ya towe imeongezwa kwa kichanganuzi tuli - "sarif-html", ambayo husababisha utoaji wa ripoti kwa wakati mmoja katika umbizo la HTML na Sarif. Imeongeza hundi mpya ya allocClassWithName. Wakati wa kubainisha chaguo la "-analyzer-display-progress", muda wa uchambuzi wa kila chaguo la kukokotoa unaonyeshwa. Kichanganuzi cha kiashiria mahiri (alpha.cplusplus.SmartPtr) kinakaribia kuwa tayari.
  • Uwezo unaohusishwa na usaidizi wa OpenCL umepanuliwa. Usaidizi ulioongezwa kwa viendelezi vipya cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields na __cl_clang_non_portable_kernel_param_types. Utekelezaji wa vipimo vya OpenCL 3.0 umeendelea. Kwa C, vipimo vya OpenCL 1.2 vinatumiwa kwa chaguo-msingi isipokuwa toleo lingine limechaguliwa kwa uwazi. Kwa C++, usaidizi wa faili zilizo na kiendelezi ".clcpp" umeongezwa.
  • Usaidizi wa maagizo ya kubadilisha kitanzi (β€œ#pragma omp unrol” na β€œ#pragma omp tile”) yaliyofafanuliwa katika vipimo vya OpenMP 5.1 umetekelezwa.
  • Chaguo zilizoongezwa kwa matumizi ya umbizo la clang: SpacesInLineCommentPrefix ili kufafanua idadi ya nafasi kabla ya maoni, IndentAccessModifiers, LambdaBodyIndentation na PPIndentWidth ili kudhibiti upatanishi wa maingizo, misemo ya lambda na maagizo ya preprocessor. Uwezekano wa kupanga hesabu ya faili za vichwa (SortIncludes) umepanuliwa. Usaidizi ulioongezwa wa kuumbiza faili za JSON.
  • Sehemu kubwa ya hundi mpya zimeongezwa kwa linter clang-tidy.

Ubunifu muhimu katika LLVM 13.0:

  • Imeongeza chaguo la "-ehcontguard" la kutumia teknolojia ya CET (Windows Control-flow Enforcement Technology) ili kulinda dhidi ya utekelezaji wa ushujaa uliojengwa kwa kutumia mbinu za Return-Oriented Programming (ROP) katika hatua ya ushughulikiaji ya kipekee.
  • Mradi wa debuginfo-test umepewa jina la majaribio ya mradi mtambuka na umeundwa kujaribu vipengee kutoka kwa miradi tofauti, sio tu kwa maelezo ya utatuzi.
  • Mfumo wa kusanyiko hutoa msaada kwa ajili ya kujenga usambazaji kadhaa, kwa mfano, moja na huduma, na nyingine na maktaba kwa watengenezaji.
  • Katika upande wa nyuma wa usanifu wa AArch64, usaidizi wa viendelezi vya Armv9-A RME (Upanuzi wa Usimamizi wa Realm) na SME (Scalable Matrix Extension) hutekelezwa katika kiunganishi.
  • Usaidizi wa ISA V68/HVX umeongezwa kwa upande wa nyuma wa usanifu wa Hexagon.
  • Mazingira ya nyuma ya x86 yameboresha usaidizi kwa vichakataji vya AMD Zen 3.
  • Usaidizi ulioongezwa kwa GFX1013 RDNA2 APU kwa upande wa nyuma wa AMDGPU.
  • Libc++ inaendelea kutekeleza vipengele vipya vya viwango vya C++20 na C++2b, ikiwa ni pamoja na kukamilika kwa maktaba ya "dhana". Usaidizi ulioongezwa kwa std::mfumo wa faili kwa jukwaa la Windows lenye msingi wa MinGW. Faili za kichwa zimetenganishwa , Na . Chaguo la kujenga LIBCXX_ENABLE_INCOMPLETE_FEATURES limeongezwa ili kuzima faili za kichwa bila utendakazi usiotekelezwa kikamilifu.
  • Uwezo wa kiunganishi cha LLD umepanuliwa, ambapo usaidizi wa wasindikaji wa Big-endian Aarch64 unatekelezwa, na hali ya nyuma ya Mach-O imeletwa kwa hali ambayo inaruhusu kuunganisha programu za kawaida. Ilijumuisha maboresho yanayohitajika ili kuunganisha Glibc kwa kutumia LLD.
  • Huduma ya llvm-mca (Kichanganuzi cha Misimbo ya Mashine) imeongeza usaidizi kwa vichakataji vinavyotekeleza maagizo kwa mpangilio (bomba la kuagiza la juu zaidi), kama vile ARM Cortex-A55.
  • Kitatuzi cha LLDB cha jukwaa la AArch64 hutoa usaidizi kamili kwa Uthibitishaji wa Pointer, MTE (MemTag, Kiendelezi cha Kuweka Lebo za Kumbukumbu) na rejista za SVE. Amri zilizoongezwa zinazokuwezesha kuunganisha vitambulisho kwa kila operesheni ya ugawaji kumbukumbu na kupanga hundi ya pointer wakati wa kufikia kumbukumbu, ambayo lazima ihusishwe na lebo sahihi.
  • Kitatuzi cha LLDB na sehemu ya mbele ya lugha ya Fortran - Flang vimeongezwa kwa makusanyiko ya jozi yaliyotolewa na mradi huo.

Chanzo: opennet.ru

Kuongeza maoni