Siideynta LLVM 11.0 compiler suite

Kadib lix bilood oo horumar ah soo bandhigay sii daynta mashruuca LLVM 11.0 - Qalabka ku habboon GCC (compilers, optimizers and code-generators), isku-dubbarididda barnaamijyada koodhka dhexdhexaadka ah ee RISC-la mid ah tilmaamaha farsamada (mashiinka farsamada heerka hooseeya oo leh nidaam kor u qaadis heerar badan ah). Pseudocode-ka la soo saaray waxaa loo rogi karaa iyadoo la isticmaalayo isku-duwaha JIT si toos ah tilmaamaha mashiinka wakhtiga fulinta barnaamijka.

Isbeddelka muhiimka ah ee sii daynta cusub waxay ahayd ka mid noqoshada garab, afka hore ee Fortran Flang wuxuu taageeraa Fortran 2018, OpenMP 4.5 iyo OpenACC 3.0, laakiin horumarinta mashruuca weli lama dhamaystirin oo dhamaadka hore wuxuu ku xaddidan yahay kood kala saarista iyo hubinta saxnaanta. Jiilka koodka dhexe ee LLVM weli lama taageero oo si loo soo saaro faylal la fulin karo, koodka canonical waa la soo saaray oo loo gudbiyaa isku xidhka Fortran dibadda ah.

Horumar gudaha Clang 11.0:

  • Lagu daray awoodda dib u soo celinta geedka syntax ee aan la taaban karin (AST) ee C++ code jabay, kaas oo loo isticmaali karo in lagu garto khaladaadka lana siiyo macluumaad dheeraad ah adeegyada dibadda sida qabiilg-tidy iyo clangd. Sifada waxaa si toos ah loogu dajiyay koodka C++ waxaana lagu xakameynayaa "-Xclang -f[no-]-kabashada-ast" fursadaha.
  • Hababka ogaanshaha cusub ee lagu daray:
    • "-Wpointer-to-int-cast" waa koox digniino ah oo ku saabsan tuurista tilmaamayaasha nooca int-ka ee aan buuxin dhammaan qiimaha suurtagalka ah.
    • "-Wuninitialized-const-reference" - digniin ku saabsan gudbinta doorsoomayaasha aan la aqoon ee xuduudaha shaqada ee aqbala doodaha tixraaca ee "const" sifada.
    • "-Wimplicit-const-int-float-conversion" - waxaa karti u leh digniinta caadiga ah ee ku saabsan beddelka daahsoon ee joogtada dhabta ah ee nooca isugeynta.
  • Qalabka ARM, hawlaha C ee lagu dhex dhisay isku-duwaha ayaa la bixiyaa (Intrinsics), oo lagu beddelay tilmaamaha vector-ka hufan Arm v8.1-M MVE iyo CDE. Hawlaha jira waxaa lagu qeexay faylalka madaxa arm_mve.h iyo arm_cde.h.
  • Lagu daray noocyo kala duwan oo isku dhafan _ExtInt(N), taas oo kuu ogolaanaysa inaad abuurto noocyo aan ahayn awoodaha laba dhufashada, kuwaas oo si hufan looga baaraandegi karo FPGA/HLS. Tusaale ahaan, _ExtInt(7) waxa ay qeexaysaa nooca isugeynta oo ka kooban 7 bits.
  • Macros lagu daray oo qeexaya taageerada ku dhisan hawlaha C ee ku salaysan ARM SVE (Fidinta Vector Scalable)
    __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. Tusaale ahaan, __ARM_FEATURE_SVE macro waxa lagu qeexaa marka la soo saarayo koodka AArch64 iyadoo la dejinayo khadka taliska "-march=armv8-a+sve".

  • Calankii "-O" ayaa hadda lagu aqoonsaday qaabka "-O1" hagaajinta halkii "-O2".
  • Lagu daray calamada iskudubaridyada cusub:
    • "-fstack-clash-protection"- waxay awood u yeelataa ka-hortagga isgoysyada isgoysyada iyo tuullada.
    • "-ffp-exception-behavior={iska daa,maytrap,strict}" - wuxuu kuu ogolaanayaa inaad doorato habka gacan hayaha ee lambarada sabbaynaya.
    • "-ffp-model={sax, adag,dhakhso}" - Waxay fududaynaysaa galaangalka taxan ee xulashooyinka gaarka ah ee lambarada dul sabeynaya.
    • "-fpch-codegen" iyo "-fpch-debuginfo" si loo soo saaro madax la sii diyaariyay (PCH) oo wata faylal shay gaar ah oo loogu talagalay koodka iyo debuginfo.
    • "-fsanitize-coverage-ollowlist" iyo "-fsanitize-coverage-blocklist" ee hubinta caymiska tijaabinta liisaska madow iyo caddaanka.
    • "-mtls-size={12,24,32,48}" si loo doorto cabbirka TLS (thread-local storage).
    • "-menable-tijaabada-kordhinta" si loo suurtageliyo tijaabinta RISC-V kordhinta.
  • Habka caadiga ah ee C waa "-fno-common", kaas oo u oggolaanaya in si hufan loo galo doorsoomayaasha caalamiga ah ee goobaha qaarkood.
  • Khasnad moduleka caadiga ah ayaa laga raray /tmp loona guuray ~/.cache directory. Si aad meesha uga saarto, waxaad isticmaali kartaa calanka "-fmodules-cache-path="
  • Heerka luqadda C ee caadiga ah ayaa laga cusboonaysiiyay gnu11 ilaa gnu17.
  • Taageero horudhac ah oo lagu daray GNU C kordhinta"asm inlineΒ» in lagu daro gashado isku xidhaha. Muddo kordhintu wali waa la lafa gurayaa, laakiin sinaba looma hawlgelin.
  • Awoodaha la xidhiidha taageerada OpenCL iyo CUDA waa la balaariyay. Taageero lagu daray OpenCL 2.0 baaritaanka xannibaadda oo la hirgeliyay astaamo cusub oo OpenMP 5.0 ah.
  • Ikhtiyaarka IndentExternBlock oo lagu daray utility-qaab-qabiil si loogu toosiyo gudaha "C" iyo bannaanka "C++" blocks.
  • Falanqeeyaha taagan ayaa wanaajiyay maaraynta dhisayaasha la dhaxlo ee C++. Waxaa lagu daray jeegag cusub alpha.core.C11Lock iyo alpha.fuchsia.Lock si loo hubiyo qufullada, alpha.security.cert.pos.34c si loo ogaado isticmaalka aan badbaadada lahayn ee putenv, webkit.NoUncountedMemberChecker iyo webkit.RefCntblBaseVirtualDtor si loo ogaado dhibaatooyinka noocyada aan la tirin karin, alpha .cplusplus .SmartPtr si aad u hubiso ka leexashada tilmaame caqli-gal ah.
  • In linter clang-tidy ayaa lagu daray qayb weyn oo jeegag cusub ah.
  • Adeegga kaydinta qabiilgd (Clang Server) ayaa horumariyay waxqabadka wuxuuna ku daray awoodo ogaanshaha cusub.

Main wax cusub LLVM 11.0:

  • Nadaamka dhismuhu waxa loo beddelay adeegsiga Python 3. Haddii Python 3 la waayo, waa suurtogal in dib loogu noqdo adeegsiga Python 2.
  • Dhammaadka hore ee isku xidhaha luuqadda Go (llgo) waa laga saaray siidaynta, kaas oo dib loo habayn karo mustaqbalka.
  • Sifada-shaqada-abi-kala-duwanaanshaha ayaa lagu daray matalaadda dhexe (IR) si loo qeexo khariidaynta u dhaxaysa hawlaha scalar iyo vector si loo toosiyo wicitaanada. Laga soo bilaabo lvm::VectorType waxaa jira laba nooc oo kala duwan oo vector ah lvm::FixedVectorType iyo lvm::ScalableVectorType.
  • Laamaha ku salaysan qiyamka udef iyo u gudbinta qiyamka aan fiicneyn ee shaqooyinka maktabadda caadiga ah waxaa loo aqoonsan yahay dhaqan aan la qeexin. IN
    memset/memcpy/memmove waxa ay ogolanaysaa gudbinta tilmaamayaasha aan la daboolin, laakiin haddii cabbirka cabbirkiisu yahay eber.

  • LLJIT waxa ay ku dartay taageerada samaynta bilawga bilawga ah iyada oo loo marayo LLJIT :: bilawga iyo LLJIT :: hababka deinitialize. Awooda lagu daro maktabado taagan JTDylib iyadoo la adeegsanayo fasalka StaticLibraryDefinitionGenerator waa la hirgeliyay. Waxaa lagu daray C API ORCv2 (API loogu talagalay samaynta isku-dariyeyaasha JIT).
  • Taageerada Cortex-A64, Cortex-A34, Cortex-A77 iyo Cortex-X78 soo-saareyaal ayaa lagu daray dhabarka dambe ee dhismaha AArch1. Hirgelinta ARMv8.2-BF16 (BFloat16) iyo ARMv8.6-A kordhinta, oo ay ku jiraan RMv8.6-ECV (Lakordhinta Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) iyo ARMv8.0-DGH (Tilmaan ururinta xogta). Awoodda soo saarista koodka hawlaha ku dhex-xidhan ee tilmaamaha vector SVE ayaa la bixiyaa.
  • Taageerada Cortex-M55, Cortex-A77, Cortex-A78 iyo Cortex-X1 soo-saareyaal ayaa lagu daray dhabarka dambe ee dhismaha ARM. Kordhinta la fuliyay
    Armv8.6-A Matrix Iskudhufashada iyo RMv8.2-AA32BF16 BFloat16.

  • Taageerada jiilka koodka ee soo-saareyaasha POWER10 ayaa lagu daray dhabarka dambe ee dhismaha PowerPC. Hagaajinta loop waa la balaariyay waxaana la hagaajiyay taageerada barta sabaynaysa.
  • Dhabarka dambe ee qaab dhismeedka RISC-V waxa uu oggolaadaa oggolaanshaha balastarrada taageeraya hab-waxbarasho la dheereeyey oo tijaabo ah oo aan wali si rasmi ah loo ansixin.
  • Dhabarka dambe ee qaab dhismeedka AVR ayaa laga wareejiyay qaybta tijaabada oo loo beddelay mid deggan, oo lagu daray qaybinta aasaasiga ah.
  • Dhabarka dambe ee qaab dhismeedka x86 wuxuu taageeraa Intel AMX iyo tilmaamaha TSXLDTRK. Kahortagga weerarada lagu daray Lvi (Load Value Injection), oo sidoo kale fulisa habka Xakamaynta Saamaynta Saamaynta Guud ee Fulintu si loo joojiyo weerarrada ay sababaan fulinta mala-awaalka ah ee hawlgallada CPU.
  • Dhabarka dambe ee qaab dhismeedka SystemZ, taageerada MemorySanitizer iyo LeakSanitizer ayaa lagu daray.
  • Taageero lagu daray faylka madaxa oo leh xisaab joogto ah Libc++ .
  • Balaaray Awoodaha xiriiriyaha LLD. Taageerada la wanaajiyay ee qaabka ELF, oo ay ku jiraan xulashooyinka lagu daray "--lto-emit-asm", "--lto-all-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- hal-module, "-gaar ah", "- rosegment", "-threads=N". Waxaa lagu daray "--time-trace" ikhtiyaarka lagu keydiyo raadadka fayl, kaas oo markaas lagu lafaguri karo chrome://tracing interface ee Chrome.

Source: opennet.ru

Add a comment