Siideynta LLVM 9.0 compiler suite

Kadib lix bilood oo horumar ah soo bandhigay sii daynta mashruuca LLVM 9.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.

Tilmaamaha cusub ee LLVM 9.0 waxaa ka mid ah ka saarista summada naqshadeynta tijaabada ah ee bartilmaameedka RISC-V, taageerada C ++ ee OpenCL, awoodda loo qaybiyo barnaamijka qaybo si firfircoon u raran ee LLD, iyo hirgelinta "asm goto", oo loo isticmaalo koodhka kernel-ka Linux. libc++ waxay ku dartay taageerada WASI (WebAssembly System Interface), LLD waxay ku dartay taageerada bilawga ah ee isku xidhka firfircoonida WebAssembly.

Horumar gudaha Clang 9.0:

  • Lagu daray hirgelinta odhaahda gaarka ah ee GCC"asm goto", kaas oo kuu ogolaanaya inaad ka guurto isku-duwaha khadka dhexe una guurto calaamadda C code. Tilmaamahan waxaa looga baahan yahay in lagu dhiso kernel Linux qaabka "CONFIG_JUMP_LABEL=y" iyadoo la isticmaalayo Clang on nidaamyada leh x86_64 qaab dhismeedka. Iyadoo la tixgelinayo isbeddelada lagu daray siideynadii hore, Linux kernel hadda waxaa lagu dhisi karaa Clang ee naqshadaha x86_64 (horay u dhismihii kaliya ee gacanta, aarch64, ppc32, ppc64le iyo mips architectures ayaa la taageeray). Intaa waxaa dheer, mashaariicda Android iyo ChromeOS ayaa mar hore loo beddelay inay Clang u adeegsadaan dhisidda kernel, Google-na waxay tijaabinaysaa Clang inay tahay goobta ugu weyn ee kernels lagu dhiso nidaamkeeda Linux. Mustaqbalka, qaybaha kale ee LLVM waxaa loo isticmaali karaa habka dhismaha kernel, oo ay ku jiraan LLD, llvm-objcopy, llvm-ar, llvm-nm, llvm-objdump;
  • Taageero tijaabo ah oo lagu daray isticmaalka C++17 gudaha OpenCL. Astaamaha gaarka ah waxaa ka mid ah taageerada sifada booska ciwaanka, xannibaadda beddelka booska ciwaanka ee nooca hawl wadeennada wax tuurista, bixinta noocyada vector sida OpenCL ee C, joogitaanka noocyada gaarka ah ee OpenCL ee sawirrada, dhacdooyinka, kanaalada, iwm.
  • Lagu daray calan-sameeyaha cusub "-ftime-trace" iyo "-ftime-trace-granularity=N" si loo soo saaro warbixin ku saabsan wakhtiga fulinta marxaladaha kala duwan ee hore ee hore (kala saarista, bilowga) iyo dhabarka (marxalada hagaajinta). Warbixinta waxaa lagu keydiyay qaab json, oo ku habboon chrome://tracing iyo speedscope.app;
  • Nidaaminta lagu daray "__declspec(allocator)" tilmaame iyo jiilka macluumaadka cilladaha ee la socda taasoo kuu ogolaaneysa inaad la socoto isticmaalka xusuusta gudaha Visual Studio deegaanka;
  • Luqadda C, taageerada ayaa lagu daray "__FILE_NAME__" makro, kaas oo u eg "__FILE__" makro, laakiin waxaa ku jira kaliya magaca faylka oo aan lahayn dariiqa buuxa;
  • C++ waxa ay balaadhisay taageerada sifada booska ciwaanka si ay u daboosho astaamo kala duwan oo C++ ah, oo ay ku jiraan halbeegyada iyo qaababka doodaha, noocyada tixraaca, soo celinta nooca soo noqoshada, walxaha, shaqooyinka iskii loo soo saaray, hawl wadeenada ku dhex jira, iyo in ka badan.
  • Awoodaha la xidhiidha taageerada OpenCL, OpenMP iyo CUDA waa la balaariyay. Tan waxaa ku jira taageerada bilowga ah ee ka mid noqoshada daahsoon ee hawlaha OpenCL ee la dhisay (calanka "-fdeclare-opencl-builtins" ayaa lagu daray), cl_arm_integer_dot_product kordhinta waa la hirgeliyay, iyo qalabka ogaanshaha waa la ballaariyay;
  • Shaqada falanqeeyaha joogtada ah waa la hagaajiyay waxaana lagu daray dukumeenti ku saabsan samaynta falanqaynta taagan. Calamada lagu daray si ay u muujiyaan cutubyada jeegaga ee la heli karo iyo xulashooyinka la taageeray "-horumariyaha"). Lagu daray "-analyzer-werror" calanka si loogu daweeyo digniinaha sida khaladaad.
    Hababka xaqiijinta ee cusub ee lagu daray:

    • security.insecurity.API.Deprecated orUnsafeBufferHandling si loo aqoonsado dhaqamada aan badbaadada lahayn ee ka shaqaynta kaydka;
    • osx.MIGChecker si loo raadiyo jebinta MIG (Mach Interface Generator) xeerarka wacitaanka;
    • optin.osx.OSObjectCStyleCast si loo helo beddelka shayga libkern ee XNU ee khaldan;
    • apiModeling.llvm oo wata qaabaynta hawlaha hubinta si loo ogaado khaladaadka ku jira codebase LLVM;
    • Koodhka xasilan ee hubinta walxaha C++ aan la garanayn (UninitializedObject ee xirmada optin.cplusplus);
  • Utility-qaabka qabiilg ayaa ku daray taageerada habaynta koodka luqadda C # waxayna siisaa taageerada qaabka qaabaynta koodka ee Microsoft isticmaasho;
  • Qabiilg-cl, interface-line-ka beddelka ah kaas oo bixiya waafaqsanaanta heerka-ikhtiraacida isku-darka cl.exe ee ku jira Visual Studio, wuxuu ku daray heuristics si loogu daweeyo faylalka aan jirin sida ikhtiyaar-khadka taliska oo muujiya digniin u dhiganta (tusaale ahaan, markaad socoto "clang-cl /diagnostic: caret /c test.cc");
  • Qayb weyn oo jeegag cusub ah ayaa lagu daray qaab qabiil, oo ay ku jiraan jeegaga lagu daray ee OpenMP API;
  • Balaaray awoodaha server qabiilgd (Clang Server), kaas oo qaabka dhismaha tusaha gadaasha uu si toos ah u awoodo, taageerada ficilada macnaha guud ee leh koodka ayaa lagu daray (soo celin kala duwan, balaadhinta auto iyo qeexitaannada macruufka, u beddelka xargaha baxsatay kuwa aan la qarin), awoodda muujinta digniinaha Clang-tidy, balaadhinta ogaanshaha khaladaadka ku jira faylalka madaxa oo lagu daray awoodda lagu muujinayo macluumaadka ku saabsan kala sareynta nooca;

Main wax cusub LLVM 9.0:

  • Habka qaybinta tijaabada ah ayaa lagu daray xiriiriyaha LLD, kaas oo kuu ogolaanaya inaad hal barnaamij u kala qaybiso qaybo badan, mid walbana wuxuu ku yaal faylka ELF gaar ah. Habkani wuxuu kuu ogolaanayaa inaad furto qaybta ugu muhiimsan ee barnaamijka, kaas oo ku dhejin doona qaybaha kale ee loo baahan yahay inta lagu jiro hawlgalka (tusaale, waxaad u kala saari kartaa fiilada PDF ee ku dhex jira fayl gaar ah, kaas oo ku shubaya kaliya marka isticmaaluhu furo PDF-ka. file).

    LLD Linker hor keenay ilaa gobol ku haboon isku xidhka kernel Linux ee arm32_7, arm64, ppc64le iyo x86_64 architectures.
    Ikhtiyaarada cusub "-" (wax soo saarka stdout), "-[maya-] allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-ku-tiirsan-maktabad", "- z ifunc-noplt"iyo"-z-bog-cabbireedka guud". Qaab dhismeedka AArch64, taageerada BTI (tusaha Bartilmaameedka Laanta) iyo tilmaamaha PAC (Koodhka Xaqiijinta Tilmaamaha) ayaa lagu daray. Taageerada MIPS, RISC-V iyo aaladaha PowerPC si weyn ayaa loo hagaajiyay. Lagu daray taageerada bilowga ah ee isku xidhka firfircoon ee WebAssembly;

  • gudaha libc++ la fuliyay cabbirka hawlaha, std :: waa_lagu qiimeeyay, std :: bartamihii iyo std :: lerp, hababka "hore" iyo "dhabarka" ayaa lagu daray std :: span, sifooyinka noocyada std :: is_unbounded_array iyo std :: is_bounded_array ayaa lagu daray , std awoodaha waa la balaariyay: atomic. Taageerada GCC 4.9 waa la joojiyay (waxaa lagu isticmaali karaa GCC 5.1 iyo sii deyno cusub). Taageero lagu daray WASI (Interface System WebAssembly, interface ah isticmaalka WebAssembly ka baxsan browser);
  • Hagaajinta cusub ayaa lagu daray U beddelashada wicitaanada memcmp ee bcmp xaaladaha qaarkood. Waxaa la hirgaliyay ka tagista kala duwanaanshaha hubinta miisaska boodboodka kuwaas oo blocks-ka-wareejinta hoose aan la gaari karin ama marka aan tilmaamaha aan la isticmaalin, tusaale ahaan, marka la wacayo hawlaha nooca maran;
  • Dhabarka dambe ee qaab dhismeedka RISC-V waa la dejiyay, kaas oo aan hadda loo meel dhigin sidii tijaabo oo si caadi ah loo dhisay. Waxay siisaa taageero jiil kood buuxa oo loogu talagalay RV32I iyo RV64I tilmaamaha dejinta kala duwanaanshaha MAFDC;
  • Horumarin badan ayaa lagu sameeyay dib-u-celinta X86, AArch64, ARM, SystemZ, MIPS, AMDGPU iyo naqshadaha PowerPC. Tusaale ahaan, dhismaha
    AArch64 waxay ku dartay taageerada SVE2 (Scalable Vector Extension 2) iyo MTE (Xusuusta Tagging Extensions); ee ku yaala dhabarka ARM, taageerada dhismaha Armv8.1-M iyo MVE (M-Profile Vector Extension) ayaa lagu daray. Taageerada qaab dhismeedka GFX10 (Navi) ayaa lagu daray dhabarka dambe ee AMDGPU, awoodaha wicitaanka shaqada ayaa la damiyay si caadi ah, baas isku dhafanna waa la dajiyay. DPP (Data-Parallel Primitives).

  • Qalab-jaraha LLDB hadda wuxuu leeyahay midab muujinaya gadaal-raacyada wuxuuna ku daray taageerada DWARF4 debug_types iyo DWARF5 debug_info blocks;
  • Taageerada shayga iyo faylasha la fulin karo ee qaabka COFF ayaa lagu daray lvm-objcopy iyo lvm-strip utilities.

Source: opennet.ru

Add a comment