Kutolewa kwa safu ya mkusanyaji ya LLVM 11.0

Baada ya miezi sita ya maendeleo imewasilishwa kutolewa kwa mradi LLVM 11.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.

Mabadiliko muhimu katika toleo jipya lilikuwa ujumuishaji wa Ubavu, sehemu ya mbele ya lugha ya Fortran. Flang inasaidia Fortran 2018, OpenMP 4.5 na OpenACC 3.0, lakini maendeleo ya mradi bado hayajakamilika na mwisho wa mbele ni mdogo kwa uchanganuzi wa msimbo na kuangalia kwa usahihi. Uzalishaji wa msimbo wa kati wa LLVM bado hautumiki na ili kutoa faili zinazoweza kutekelezeka, msimbo wa kanuni huzalishwa na kupitishwa kwa mkusanyaji wa nje wa Fortran.

Maboresho katika Clang 11.0:

  • Imeongeza uwezo wa kurejesha mti wa syntax wa kufikirika (AST) kwa msimbo uliovunjika wa C++, ambao unaweza kutumika kusaidia kutambua makosa na kutoa maelezo ya ziada kwa huduma za nje kama vile clang-tidy na clangd. Kipengele hiki kimewezeshwa kwa chaguomsingi kwa msimbo wa C++ na kinadhibitiwa kupitia chaguo za "-Xclang -f[no-]recovery-ast".
  • Imeongeza njia mpya za uchunguzi:
    • "-Wpointer-to-int-cast" ni kundi la maonyo kuhusu kutuma viashiria kwa int ya aina kamili ambayo haitoshelezi thamani zote zinazowezekana.
    • "-Wuninitialized-const-reference" - onyo kuhusu kupitisha vigeu ambavyo havijaanzishwa katika vigezo vya utendakazi ambavyo vinakubali hoja za marejeleo zenye sifa ya "const".
    • "-Wimplicit-const-int-float-conversion" - imewezeshwa na onyo chaguo-msingi kuhusu ubadilishaji kamili wa kibadilishaji halisi hadi aina kamili.
  • Kwa jukwaa la ARM, kazi za C zilizojengwa ndani ya mkusanyaji hutolewa (Mambo ya ndani), nafasi yake kuchukuliwa na maelekezo ya vekta yenye ufanisi Arm v8.1-M MVE na CDE. Vipengele vinavyopatikana vimefafanuliwa katika faili za kichwa arm_mve.h na arm_cde.h.
  • Imeongezwa seti ya aina kamili zilizopanuliwa _ExtInt(N), hukuruhusu kuunda aina ambazo si zidishi za nguvu mbili, ambazo zinaweza kuchakatwa kwa ufanisi kwenye FPGA/HLS. Kwa mfano, _ExtInt(7) inafafanua aina kamili inayojumuisha biti 7.
  • Macros zilizoongezwa zinazofafanua usaidizi wa vitendakazi vya C vilivyojengewa ndani kulingana na maagizo ya ARM SVE (Scalable Vector Extension):
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. Kwa mfano, __ARM_FEATURE_SVE macro hufafanuliwa wakati wa kuzalisha msimbo wa AArch64 kwa kuweka chaguo la mstari wa amri "-march=armv8-a+sve".

  • Bendera ya "-O" sasa imetambulishwa na hali ya uboreshaji "-O1" badala ya "-O2".
  • Imeongeza bendera mpya za mkusanyaji:
    • "-fstack-clash-protection" - huwezesha ulinzi dhidi ya makutano ya stack na lundo.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - hukuruhusu kuchagua kidhibiti cha ubaguzi kwa nambari za nukta zinazoelea.
    • "-ffp-model={precise,strict,fast}" - Inarahisisha ufikiaji wa mfululizo wa chaguo maalum kwa nambari za pointi zinazoelea.
    • "-fpch-codegen" na "-fpch-debuginfo" ili kutoa kichwa kilichokusanywa awali (PCH) kilicho na faili za kitu tofauti kwa msimbo na debuginfo.
    • "-fsanitize-coverage-orodha ya ruhusa" na "-fsanitize-coverage-orodha-ya-zuia" kwa ajili ya kuangalia orodha ya majaribio ya chanjo nyeupe na nyeusi.
    • β€œ-mtls-size={12,24,32,48}” ili kuchagua ukubwa wa TLS (hifadhi ya ndani ya mtandao).
    • "-menable-extension-extension" ili kuwezesha viendelezi vya majaribio vya RISC-V.
  • Hali chaguo-msingi ya C ni "-fno-common", ambayo inaruhusu ufikiaji bora zaidi wa vigeu vya kimataifa kwenye baadhi ya majukwaa.
  • Kashe ya moduli chaguo-msingi imehamishwa kutoka /tmp hadi kwenye saraka ya ~/.cache. Ili kubatilisha, unaweza kutumia alama ya "-fmodules-cache-path=".
  • Kiwango chaguomsingi cha lugha C kimesasishwa kutoka gnu11 hadi gnu17.
  • Imeongeza usaidizi wa awali wa ugani wa GNU C "asm inlineΒ»kuongeza viunganishi vya kuunganisha. Kiendelezi bado kinachambuliwa, lakini hakijachakatwa kwa njia yoyote.
  • Uwezo unaohusishwa na usaidizi wa OpenCL na CUDA umepanuliwa. Umeongeza usaidizi wa uchunguzi wa block ya OpenCL 2.0 na kutekeleza vipengele vipya vya OpenMP 5.0.
  • Imeongeza chaguo la IndentExternBlock kwa matumizi ya umbizo la clang kwa upatanishi ndani ya vizuizi vya "C" vya nje na "C++" vya nje.
  • Kichanganuzi tuli kimeboresha utunzaji wa wajenzi waliorithiwa katika C++. Imeongeza ukaguzi mpya alpha.core.C11Funga na alpha.fuchsia.Funga ili kuangalia kufuli, alpha.security.cert.pos.34c ili kugundua matumizi yasiyo salama ya putenv, webkit.NoUncountedMemberChecker na webkit.RefCntblBaseVirtualDtor kugundua aina zisizohesabika, alpha zisizohesabika. .cplusplus .SmartPtr kuangalia kama null smart pointer dereference.
  • Katika linter clang-nadhifu aliongeza sehemu kubwa ya hundi mpya.
  • Seva ya akiba ya clangd (Seva ya Clang) imeboresha utendakazi na kuongeza uwezo mpya wa uchunguzi.

kuu ubunifu LLVM 11.0:

  • Mfumo wa uundaji umebadilishwa kwa kutumia Python 3. Ikiwa Python 3 haipatikani, inawezekana kurudisha nyuma kwa kutumia Python 2.
  • Sehemu ya mbele iliyo na mkusanyaji wa lugha ya Go (llgo) haijajumuishwa kwenye toleo, ambalo linaweza kufanyiwa marekebisho katika siku zijazo.
  • Sifa ya vekta-function-abi-lahaja imeongezwa kwa uwakilishi wa kati (IR) ili kuelezea upangaji kati ya vitendaji vya scalar na vekta ili kudhibiti simu. Kutoka llvm::VectorType kuna aina mbili tofauti za vekta llvm::FixedVectorType na llvm::ScalableVectorType.
  • Uwekaji tawi kulingana na maadili ya udef na kupitisha maadili ya undef kwa kazi za kawaida za maktaba hutambuliwa kama tabia isiyofafanuliwa. KATIKA
    memset/memcpy/memmove inaruhusu kupitisha viashiria vya undef, lakini ikiwa kigezo kilicho na saizi ni sifuri.

  • LLJIT imeongeza usaidizi wa kutekeleza uanzishaji tuli kupitia LLJIT::anzisha na LLJIT::deinitialize mbinu. Uwezo wa kuongeza maktaba tuli kwa JITDylib kwa kutumia darasa la StaticLibraryDefinitionGenerator umetekelezwa. Aliongeza C API kwa ORCv2 (API ya kujenga wasanifu wa JIT).
  • Usaidizi wa vichakataji vya Cortex-A64, Cortex-A34, Cortex-A77 na Cortex-X78 umeongezwa kwa upande wa nyuma wa usanifu wa AArch1. Viendelezi vya ARMv8.2-BF16 (BFloat16) na ARMv8.6-A vilivyotekelezwa, ikijumuisha RMv8.6-ECV (Uboreshaji wa Kukabiliana na Ubora), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Uboreshaji wa Vichunguzi vya Shughuli) na ARMv8.0-DGH (kidokezo cha kukusanya data). Uwezo wa kutengeneza msimbo wa vifungo vya utendakazi vilivyojengewa ndani kwa maagizo ya vekta ya SVE umetolewa.
  • Usaidizi wa vichakataji vya Cortex-M55, Cortex-A77, Cortex-A78 na Cortex-X1 umeongezwa kwa upande wa nyuma wa usanifu wa ARM. Viendelezi vimetekelezwa
    Armv8.6-A Matrix Zidisha na RMv8.2-AA32BF16 BFloat16.

  • Usaidizi wa kutengeneza msimbo kwa vichakataji vya POWER10 umeongezwa kwa upande wa nyuma wa usanifu wa PowerPC. Uboreshaji wa kitanzi umepanuliwa na usaidizi wa sehemu zinazoelea umeboreshwa.
  • Mazingira ya nyuma ya usanifu wa RISC-V huruhusu kukubalika kwa viraka vinavyotumia seti za maagizo ya majaribio ambayo bado hayajaidhinishwa rasmi.
  • Mazingira ya nyuma ya usanifu wa AVR yamehamishwa kutoka kategoria ya majaribio hadi thabiti, ikijumuishwa katika usambazaji msingi.
  • Sehemu ya nyuma ya usanifu wa x86 inasaidia maagizo ya Intel AMX na TSXLDTRK. Kuongeza ulinzi dhidi ya mashambulizi LVI (Sindano ya Thamani ya Kupakia), na pia hutekeleza utaratibu wa jumla wa Utekelezaji wa Kukisia kwa Athari ya Kuzuia ili kuzuia mashambulizi yanayosababishwa na utekelezaji wa kubahatisha wa shughuli kwenye CPU.
  • Katika upande wa nyuma wa usanifu wa SystemZ, usaidizi wa MemorySanitizer na LeakSanitizer umeongezwa.
  • Usaidizi ulioongezwa kwa faili ya kichwa na vidhibiti vya kihesabu kwa Libc++ .
  • Imepanuliwa Uwezo wa kiunganishi cha LLD. Usaidizi ulioboreshwa wa umbizo la ELF, ikijumuisha chaguo zilizoongezwa "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- moduli-moja", "-ya kipekee", "-rosegment", "-threads=N". Imeongeza chaguo la "--time-trace" ili kuhifadhi ufuatiliaji kwenye faili, ambayo inaweza kuchanganuliwa kupitia kiolesura cha chrome://tracing katika Chrome.

Chanzo: opennet.ru

Kuongeza maoni