Liberasyon LLVM 9.0 konpilatè suite a

Apre sis mwa nan devlopman prezante lage pwojè LLVM NAN — Zouti GCC-konpatib (konpilateur, optimiseur ak dèlko kòd), konpile pwogram nan bitkod entèmedyè nan enstriksyon vityèl tankou RISC (machin vityèl ba-nivo ak yon sistèm optimize milti-nivo). Pseudokod pwodwi a ka konvèti lè l sèvi avèk yon du JIT nan enstriksyon machin dirèkteman nan moman ekzekisyon pwogram lan.

Nouvo karakteristik LLVM 9.0 gen ladan yo retire tag konsepsyon eksperimantal la nan platfòm RISC-V sib la, sipò C++ pou OpenCL, kapasite pou divize yon pwogram an pati dinamik chaje nan LLD, ak aplikasyon an nan "asm goto", yo itilize nan kòd nwayo Linux la. libc++ te ajoute sipò pou WASI (WebAssembly System Interface), ak LLD te ajoute sipò inisyal pou lyen dinamik WebAssembly.

Amelyorasyon nan Clang 9.0:

  • Te ajoute aplikasyon ekspresyon espesifik GCC "asm goto", ki pèmèt ou deplase soti nan yon blòk inline asanble a nan yon etikèt nan kòd C. Karakteristik sa a oblije bati nwayo Linux nan mòd "CONFIG_JUMP_LABEL=y" lè l sèvi avèk Clang sou sistèm ak achitekti x86_64. Lè w ap konsidere chanjman ki te ajoute nan degaje anvan yo, kounye a ka bati Linux Kernel la nan Clang pou achitekti x86_64 (anvan yo te sipòte sèlman bilding pou achitekti bra, aarch64, ppc32, ppc64le ak mips). Anplis, pwojè Android ak ChromeOS yo te deja konvèti pou sèvi ak Clang pou bati nwayo, ak Google ap teste Clang kòm platfòm prensipal pou bati nwayo pou pwodiksyon sistèm Linux li yo. Nan tan kap vini an, lòt konpozan LLVM ka itilize nan pwosesis konstriksyon nwayo a, tankou LLD, llvm-objcopy, llvm-ar, llvm-nm, ak llvm-objdump;
  • Te ajoute sipò eksperimantal pou itilize C++17 nan OpenCL. Karakteristik espesifik yo enkli sipò pou atribi espas adrès, bloke konvèsyon espas adrès pa operatè depoze kalite, pwovizyon kalite vektè tankou nan OpenCL pou C, prezans nan kalite OpenCL espesifik pou imaj, evènman, chanèl, elatriye.
  • Te ajoute nouvo drapo konpilatè "-ftime-trace" ak "-ftime-trace-granularity=N" pou jenere yon rapò sou tan ekzekisyon plizyè etap nan entèfas (par, inisyalizasyon) ak backend (etap optimize). Rapò a sove nan fòma json, konpatib ak chrome://tracing ak speedscope.app;
  • Te ajoute pwosesis espesifikasyon "__declspec(allocator)" ak jenerasyon enfòmasyon debogaj ki akonpaye ki pèmèt ou kontwole konsomasyon memwa nan anviwònman Visual Studio;
  • Pou langaj C a, yo te ajoute sipò pou makro "__FILE_NAME__", ki sanble ak makro "__FILE__", men li gen ladan sèlman non fichye a san chemen konplè a;
  • C++ te elaji sipò pou atribi espas adrès yo pou kouvri plizyè karakteristik C++, tankou paramèt ak modèl agiman, kalite referans, enferans kalite retounen, objè, fonksyon oto-pwodwi, operatè entegre, ak plis ankò.
  • Kapasite ki asosye ak sipò pou OpenCL, OpenMP ak CUDA yo te elaji. Sa gen ladann sipò inisyal pou enklizyon enskripsyon fonksyon OpenCL entegre (yo te ajoute drapo "-fdeclare-opencl-builtins"), ekstansyon cl_arm_integer_dot_product yo te aplike, ak zouti dyagnostik yo te elaji;
  • Yo te amelyore travay analizè estatik la epi yo te ajoute dokiman sou fè analiz estatik. Te ajoute drapo pou montre modil chèk ki disponib ak opsyon ki sipòte (“-analyzer-checker[-opsyon]-help”, “-analyzer-checker[-option]-help-alpha” ak “-analyzer-checker[-option]-help "-devlopè"). Te ajoute drapo "-analyzer-werror" pou trete avètisman kòm erè.
    Te ajoute nouvo mòd verifikasyon:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling pou idantifye pratik ki pa an sekirite pou travay ak tanpon;
    • osx.MIGChecker pou chèche vyolasyon règ apèl MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast pou jwenn konvèsyon objè libkern XNU ki pa kòrèk;
    • apiModeling.llvm ak yon seri fonksyon tcheke modèl pou detekte erè nan baz kod LLVM;
    • Kòd estabilize pou tcheke objè C++ ki pa inisyalize (UninitializedObject nan pake optin.cplusplus);
  • Sèvis piblik Clang-format la te ajoute sipò pou fòma kòd nan lang C# epi li bay sipò pou style fòma kòd Microsoft itilize;
  • clang-cl, yon koòdone altènatif liy kòmand ki bay konpatibilite nan nivo opsyon ak du cl.exe enkli nan Visual Studio, te ajoute euristik pou trete dosye ki pa egziste kòm opsyon liy kòmand epi montre yon avètisman korespondan (pa egzanp, lè w ap kouri "clang-cl /diagnostic:caret /c test.cc");
  • Yon gwo pòsyon nan nouvo chèk yo te ajoute nan linter clang-tidy, ki gen ladan te ajoute chèk espesifik nan API a OpenMP;
  • Elaji kapasite sèvè clangd (Sèvè Clang), nan ki mòd nan bilding endèks background pèmèt pa default, sipò pou aksyon kontèks ak kòd yo te ajoute (rekipere varyab, ekspansyon nan definisyon oto ak makro, konvèsyon nan fisèl chape nan sa yo ki pa chape), kapasite nan montre avètisman soti nan Clang-tidy, elaji dyagnostik nan erè nan dosye header ak ajoute kapasite nan montre enfòmasyon sou yerachi a kalite;

Prensipal la inovasyon LLVM 9.0:

  • Yo te ajoute yon karakteristik eksperimantal patisyon nan LLD Linker a, ki pèmèt ou divize yon pwogram nan plizyè pati, chak nan yo ki sitiye nan yon dosye ELF separe. Karakteristik sa a pèmèt ou lanse pati prensipal la nan pwogram nan, ki pral chaje lòt konpozan jan sa nesesè pandan operasyon an (pa egzanp, ou ka separe visualiseur PDF bati-an nan yon dosye separe, ki pral chaje sèlman lè itilizatè a louvri PDF la. dosye).

    LLD Linker pote sou devan nan yon eta ki apwopriye pou konekte nwayo Linux pou achitekti arm32_7, arm64, ppc64le ak x86_64.
    Nouvo opsyon "-" (pwodiksyon nan stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", "- z ifunc-noplt" ak "-z common-page-size". Pou achitekti AArch64, sipò pou enstriksyon BTI (Branch Target Indicator) ak PAC (Pointer Otantifikasyon Kòd) yo te ajoute. Sipò pou platfòm MIPS, RISC-V ak PowerPC te amelyore anpil. Te ajoute sipò inisyal pou lyen dinamik pou WebAssembly;

  • Nan libc++ aplike gwosè fonksyon, std::is_constant_evaluated, std::midpoint ak std::lerp, metòd "devan" ak "deyè" yo te ajoute nan std::span, yo te ajoute atribi kalite std::is_unbounded_array ak std::is_bounded_array. , kapasite std yo te elaji: :atomic. Sipò pou GCC 4.9 te sispann (yo ka itilize ak GCC 5.1 ak nouvo degaje). Te ajoute sipò WASI (WebAssembly System Interface, yon koòdone pou itilize WebAssembly deyò navigatè a);
  • Nouvo optimize yo te ajoute. Pèmèt konvèsyon apèl memcmp nan bcmp nan kèk sitiyasyon. Aplike omisyon nan tcheke ranje pou tab so kote blòk switch pi ba yo pa ka jwenn oswa lè enstriksyon yo pa itilize, pou egzanp, lè w ap rele fonksyon ak kalite anile;
  • Te backend pou achitekti RISC-V a te estabilize, ki pa pozisyone ankò kòm eksperimantal epi li bati pa default. Bay sipò konplè jenerasyon kòd pou varyant seri enstriksyon RV32I ak RV64I ak ekstansyon MAFDC;
  • Yo te fè anpil amelyorasyon nan backend pou achitekti X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ak PowerPC. Pou egzanp, pou achitekti
    AArch64 te ajoute sipò pou enstriksyon SVE2 (Scalable Vector Extension 2) ak MTE (Memory Tagging Extensions); nan backend ARM, sipò pou achitekti Armv8.1-M ak ekstansyon MVE (M-Profile Vector Extension) te ajoute. Sipò pou achitekti GFX10 (Navi) te ajoute nan backend AMDGPU a, kapasite apèl fonksyon yo aktive pa default, epi yon pas konbine yo aktive. DPP (Done-Paralèl Primitives).

  • Debugger LLDB a kounye a gen koulè en pou backtraces ak sipò ajoute pou DWARF4 debug_types ak DWARF5 debug_info blòk yo;
  • Sipò pou objè ak dosye ègzèkutabl nan fòma COFF yo te ajoute nan sèvis piblik llvm-objcopy ak llvm-strip.

Sous: opennet.ru

Add nouvo kòmantè