Ukukhishwa kwe-LLVM 11.0 compiler suite

Ngemva kwezinyanga eziyisithupha zentuthuko kwethulwe ukukhululwa kwephrojekthi LLVM 11.0 - Amathuluzi ahambisana ne-GCC (abahlanganisi, izithuthukisi kanye namakhodi akhiqiza amakhodi), ahlanganisa izinhlelo zibe yi-bitcode emaphakathi yemiyalelo ebonakalayo efana ne-RISC (umshini wezinga eliphansi onohlelo lokusebenzisa amazinga amaningi). I-pseudocode ekhiqiziwe ingaguqulwa kusetshenziswa i-JIT compiler ibe imiyalelo yomshini ngokuqondile ngesikhathi sokwenziwa kohlelo.

Ushintsho olubalulekile ekukhishweni okusha kwaba ukufakwa kwe Ihlangothi, isiphetho solimi lwe-Fortran. I-Flang isekela i-Fortran 2018, i-OpenMP 4.5 ne-OpenACC 3.0, kodwa ukuthuthukiswa kwephrojekthi akukakaqedwa futhi isiphetho sangaphambili sinqunyelwe ekuhlukaniseni amakhodi nokuhlola ukuthi unembile yini. Ukukhiqizwa kwekhodi emaphakathi ye-LLVM akukasekelwa futhi ukuze kukhiqizwe amafayela asebenzisekayo, ikhodi ye-canonical iyakhiqizwa futhi idluliselwe kumdidiyeli wangaphandle we-Fortran.

Ukuthuthuka ku-Clang 11.0:

  • Kwengezwe amandla okubuyisela isihlahla se-syntax esingabonakali (I-AST) yekhodi ye-C++ ephukile, engasetshenziswa ukusiza ukuhlonza amaphutha futhi inikeza ulwazi olwengeziwe ezinsizeni zangaphandle ezifana ne-clang-tidy ne-clangd. Isici sinikwe amandla ngokuzenzakalela kukhodi ye-C++ futhi silawulwa ngezinketho ze-"-Xclang -f[no-]recovery-ast".
  • Kungezwe izindlela zokuxilonga ezintsha:
    • I-“-Wpointer-to-int-cast” iyiqembu lezexwayiso mayelana nokusakaza izikhombi kuhlobo lwe-int oluphelele olungawahlanganisi wonke amanani angenzeka.
    • “-Wuninitialized-const-reference” - isexwayiso mayelana nokudlulisa okuguquguqukayo okungaqaliswanga kumapharamitha okusebenza amukela ama-agumenti ayisithenjwa ngesibaluli esithi “const”.
    • "-I-Wimplicit-const-int-float-conversion" - inikwe amandla isexwayiso esizenzakalelayo mayelana nokuguqulwa okungaguquki kwangempela kohlobo lwenombolo ephelele.
  • Ngeplathifomu ye-ARM, imisebenzi ye-C eyakhelwe kumhlanganisi inikezwa (Okungaphakathi), esikhundleni salokho yimiyalelo ye-vector esebenzayo Ingalo v8.1-M MVE kanye ne-CDE. Imisebenzi etholakalayo ichazwa kunhlokweni amafayela arm_mve.h kanye ne-arm_cde.h.
  • Kwengezwe isethi yezinhlobo zenombolo enwetshiwe _ExtInt(N), ekuvumela ukuthi udale izinhlobo ezingewona amandla okuphindaphinda kabili, angacutshungulwa kahle ku-FPGA/HLS. Isibonelo, _ExtInt(7) ichaza uhlobo oluphelele oluhlanganisa amabhithi angu-7.
  • Amamakhro angeziwe achaza ukusekelwa kwemisebenzi eyakhelwe ngaphakathi ye-C ngokusekelwe kumiyalo ye-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. Isibonelo, i-macro __ARM_FEATURE_SVE ichazwa lapho kukhiqizwa ikhodi ye-AArch64 ngokusetha inketho yomugqa womyalo "-march=armv8-a+sve".

  • Ifulegi elithi "-O" manje selihlonzwa ngemodi yokwenza "-O1" esikhundleni sika-"-O2".
  • Kwengezwe amafulegi amasha weqoqo:
    • "-fstack-clash-protection" - inika amandla ukuvikela ngokumelene izimpambano zesitaki nenqwaba.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - ikuvumela ukuthi ukhethe imodi yesibambi ehlukile yezinombolo zamaphuzu antantayo.
    • "-ffp-model={precise,strict, fast}" - Yenza kube lula ukufinyelela ochungechungeni lwezinketho ezikhethekile zezinombolo zamaphuzu antantayo.
    • "-fpch-codegen" kanye ne-"-fpch-debuginfo" ukuze kukhiqizwe unhlokweni ohlanganiswe ngaphambili (PCH) onamafayela ento ahlukene ekhodi kanye ne-debuginfo.
    • I-“-fsanitize-coverage-allowlist” kanye ne-“-fsanitize-coverage-blocklist” ukuze uhlole uhlu olumhlophe nolumnyama lokuhlola ukumbozwa.
    • “-mtls-size={12,24,32,48}” ukuze ukhethe usayizi we-TLS (uchungechunge lwesitoreji sendawo).
    • "-menable-experimental-extension" ukuze unike amandla izandiso ze-RISC-V zokuhlola.
  • Imodi ezenzakalelayo ye-C ithi "-fno-common", evumela ukufinyelela okuphumelelayo kokuguquguquka komhlaba kwamanye amapulatifomu.
  • Inqolobane yemojuli emisiwe isusiwe ku/tmp yayiswa ~/.cache directory. Ukuze ukhiphe, ungasebenzisa ifulegi elithi “-fmodules-cache-path=".
  • Izinga lolimi oluzenzakalelayo C libuyekeziwe ukusuka ku-gnu11 ukuya ku-gnu17.
  • Kwengezwe ukwesekwa kokuqala kwesandiso se-GNU C "asm emgqeni»ukwengeza izihlanganisi ezifakiwe. Isandiso sisahlaziywa, kodwa asicutshungulwa nganoma iyiphi indlela.
  • Amakhono ahlotshaniswa nosekelo lwe-OpenCL ne-CUDA anwetshiwe. Usekelo olungeziwe lwe-OpenCL 2.0 block diagnostics futhi kwasetshenziswa izici ezintsha ze-OpenMP 5.0.
  • Kwengezwe inketho ye-IndentExternBlock kunsiza yefomethi ye-clang ukuze kuhlanganiswe ngaphakathi kwamabhulokhi "C" nangaphandle "C++".
  • I-Static analyzer ithuthukise ukuphatha abakhi abazuzwe njengefa ku-C++. Kwengezwe amasheke amasha alpha.core.C11Khiya kanye ne-alpha.fuchsia.Khiya ukuze uhlole izingidi, alpha.security.cert.pos.34c ukuthola ukusetshenziswa okungaphephile kwe-putenv, webkit.NoUncountedMemberChecker kanye ne-webkit.RefCntblBaseVirtualDtor ukuthola izinkinga ezingabaleki ze-alpha .cplusplus .I-SmartPtr ukuze uhlole ukudereferensi kwesikhombi esihlakaniphile esingenalutho.
  • Ku-linter clang-tidy kwengezwe ingxenye enkulu yamasheke amasha.
  • Iseva ye-clangd caching (Clang Server) ithuthukise ukusebenza futhi yengeza amakhono amasha okuxilonga.

main emisha I-LLVM 11.0:

  • Isistimu yokwakha ishintshelwe ekusebenziseni i-Python 3. Uma i-Python 3 ingatholakali, kungenzeka ukuthi ubuyisele emuva ekusebenziseni i-Python 2.
  • Ingaphambili elinomhlanganisi wolimi lwe-Go (llgo) alifakiwe ekukhishweni, okungahle kuhlelwe kabusha ngokuzayo.
  • Isibaluli se-vector-function-abi-variant sengeziwe ekumeleleni okuphakathi (IR) ukuchaza imephu phakathi komsebenzi we-scalar kanye ne-vector ukuze kuvezwe izingcingo. Kusuka ku-llvm::VectorType kunezinhlobo ezimbili ezihlukene ze-vector llvm::FixedVectorType kanye ne-llvm::ScalableVectorType.
  • Igatsha elisuselwa kumanani we-udef kanye nokudlulisa amanani e-undef emisebenzini ejwayelekile yomtapo wolwazi kubonwa njengokuziphatha okungachazwanga. IN
    I-memset/memcpy/memmove ivumela ukudlula izikhombi ze-undef, kodwa uma ipharamitha enosayizi inguziro.

  • I-LLJIT yengeze ukwesekwa kokwenza ukuqalisa okumile ngokusebenzisa i-LLJIT::iqalisa kanye ne-LLJIT::izindlela zokuyeka. Ikhono lokwengeza amalabhulali amile ku-JITDylib usebenzisa isigaba se-StaticLibraryDefinitionGenerator seliqalisiwe. Kwengezwe i-C API ye ORCv2 (I-API yokwakha abahlanganisi be-JIT).
  • Ukusekelwa kwama-Cortex-A64, Cortex-A34, Cortex-A77 kanye nama-Cortex-X78 processors kwengezwe ngemuva kwesakhiwo se-AArch1. Izandiso ezisetshenziswayo ze-ARMv8.2-BF16 (BFloat16) kanye ne-ARMv8.6-A, okuhlanganisa i-RMv8.6-ECV (I-Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) kanye ne-ARMv8.0-DGH (Isu lokuqoqwa kwedatha). Ikhono lokukhiqiza ikhodi ye-funcns-bindings eyakhelwe ngaphakathi imiyalelo ye-SVE ​​vector inikeziwe.
  • Usekelo lwe-Cortex-M55, i-Cortex-A77, i-Cortex-A78 ne-Cortex-X1 processors yengezwe ngemuva kwezakhiwo ze-ARM. Izandiso zisetshenzisiwe
    I-Armv8.6-A Matrix Phindaphinda futhi RMv8.2-AA32BF16 BFloat16.

  • Ukusekelwa kokukhiqizwa kwekhodi kwamaphrosesa we-POWER10 kungeziwe ku-backend yezakhiwo ze-PowerPC. Ukulungiselelwa kwe-Loop kunwetshiwe futhi nokusekelwa kwendawo elintantayo kuthuthukisiwe.
  • Ingemuva lesakhiwo se-RISC-V sivumela ukwamukelwa kwamapeshi asekela amasethi emiyalo anwetshiwe angakagunyazwa ngokusemthethweni.
  • Ingemuva le-architecture ye-AVR idluliselwe kusukela esigabeni sokuhlola ukuya kuzinzile, okufakwe ekusabalaliseni okuyisisekelo.
  • I-backend yezakhiwo ze-x86 isekela imiyalo ye-Intel AMX kanye ne-TSXLDTRK. Ukuvikelwa okwengeziwe ekuhlaselweni I-LVI (Layisha Umjovo Wenani), futhi iphinde isebenzise indlela evamile Yokucindezela I-Speculative Execution Side Effect ukuze uvimbele ukuhlasela okubangelwa ukuqaliswa kokuqagela kokusebenza ku-CPU.
  • Ngemuva kwesakhiwo seSystemZ, usekelo lweMemorySanitizer neLeakSanitizer lwengeziwe.
  • I-Libc++ yengeza ukusekelwa kwefayela elingasekhanda elinama-constants ezibalo .
  • Kunwetshiwe Amakhono okuxhumanisa we-LLD. Ukusekelwa okuthuthukisiwe kwefomethi ye-ELF, okuhlanganisa izinketho ezengeziwe "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-iyingqayizivele", "-rosegment", "-threads=N". Kwengezwe inketho ethi "--time-trace" ukuze ulondoloze umkhondo wefayela, elingase lihlaziywe ngesixhumi esibonakalayo se-chrome://tracing ku-Chrome.

Source: opennet.ru

Engeza amazwana