Útgáfa af LLVM 9.0 þýðandasvítunni

Eftir sex mánaða þróun fram verkefnisútgáfu LLVM 9.0 — GCC-samhæf verkfæri (þýðendur, hagræðingartæki og kóðaframleiðendur), setja saman forrit í millibitakóða af RISC-líkum sýndarleiðbeiningum (lágmarks sýndarvél með fjölþrepa fínstillingarkerfi). Hægt er að breyta gervikóðanum sem myndast með JIT þýðanda í vélaleiðbeiningar beint á þeim tíma sem forritið er keyrt.

Nýir eiginleikar LLVM 9.0 eru meðal annars að fjarlægja tilraunahönnunarmerkið af RISC-V vettvangnum, C++ stuðning fyrir OpenCL, getu til að skipta forriti í kraftmikið hlaðna hluta í LLD og innleiðing á „asm goto", notað í Linux kjarnakóðanum. libc++ bætti við stuðningi við WASI (WebAssembly System Interface) og LLD bætti við upphafsstuðningi við WebAssembly dynamic tengingu.

Endurbætur í Clang 9.0:

  • Bætt við innleiðing á GCC-sértæku tjáningunni "asm goto“, sem gerir þér kleift að fara úr assembler inline blokk yfir í merki í C kóða. Þessi eiginleiki er nauðsynlegur til að byggja Linux kjarnann í „CONFIG_JUMP_LABEL=y“ ham með því að nota Clang á kerfum með x86_64 arkitektúr. Að teknu tilliti til breytinganna sem bætt var við í fyrri útgáfum er nú hægt að byggja Linux kjarnann í Clang fyrir x86_64 arkitektúrinn (áður var aðeins bygging fyrir arm, aarch64, ppc32, ppc64le og mips arkitektúr studd). Þar að auki hefur Android og ChromeOS verkefnum þegar verið breytt til að nota Clang fyrir kjarnabyggingu og Google er að prófa Clang sem aðalvettvang til að byggja kjarna fyrir Linux framleiðslukerfi sín. Í framtíðinni er hægt að nota aðra LLVM hluti í kjarnabyggingarferlinu, þar á meðal LLD, llvm-objcopy, llvm-ar, llvm-nm og llvm-objdump;
  • Bætti við tilraunastuðningi við notkun C++17 í OpenCL. Sérstakir eiginleikar fela í sér stuðning við eiginleika vistfangsrýmis, hindra umbreytingu heimilisfangsrýmis með tegundarstýringaraðilum, útvegun vigurtegunda eins og í OpenCL fyrir C, tilvist sérstakra OpenCL tegunda fyrir myndir, viðburði, rásir o.s.frv.
  • Bætt við nýjum þýðandafánum „-ftime-trace“ og „-ftime-trace-granularity=N“ til að búa til skýrslu um framkvæmdartíma ýmissa stiga framenda (þáttun, frumstilling) og bakenda (hagræðingarstigum). Skýrslan er vistuð á json sniði, samhæft við chrome://tracing og speedscope.app;
  • Bætt við vinnslu á „__declspec(allocator)“ forskriftinni og gerð meðfylgjandi villuleitarupplýsinga sem gerir þér kleift að fylgjast með minnisnotkun í Visual Studio umhverfinu;
  • Fyrir C tungumálið hefur stuðningur verið bætt við „__FILE_NAME__“ fjölva, sem líkist „__FILE__“ fjölva, en inniheldur aðeins skráarnafnið án fullrar slóðar;
  • C++ hefur stækkað stuðning við aðfangarýmiseiginleika til að ná yfir ýmsa C++ eiginleika, þar á meðal færibreytur og rifrildarmynstur, tilvísunargerðir, ályktanir um skilategund, hluti, sjálfvirkar aðgerðir, innbyggða rekstraraðila og fleira.
  • Möguleikarnir sem tengjast stuðningi við OpenCL, OpenMP og CUDA hafa verið auknir. Þetta felur í sér upphaflegan stuðning fyrir óbeina innlimun á innbyggðum OpenCL aðgerðum (“-fdeclare-opencl-builtins” fánanum hefur verið bætt við), cl_arm_integer_dot_product viðbótin hefur verið innleidd og greiningartæki hafa verið stækkuð;
  • Vinna stöðugreiningartækisins hefur verið endurbætt og skjölum um framkvæmd stöðugreiningar hefur verið bætt við. Bætt við fánum til að sýna tiltækar afgreiðslueiningar og studda valkosti ("-analyzer-checker[-option]-help", "-analyzer-checker[-option]-help-alpha" og "-analyzer-checker[-option]-help " -hönnuður"). Bætt við „-analyzer-werror“ fána til að meðhöndla viðvaranir sem villur.
    Bætt við nýjum staðfestingarstillingum:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling til að bera kennsl á óöruggar aðferðir við að vinna með biðminni;
    • osx.MIGChecker til að leita að brotum á MIG (Mach Interface Generator) kallareglum;
    • optin.osx.OSObjectCStyleCast til að finna rangar XNU libkern hlutumbreytingar;
    • apiModeling.llvm með setti af líkanaprófunaraðgerðum til að greina villur í LLVM kóðagrunninum;
    • Stöðugur kóða til að athuga óinitialized C++ hluti (UninitializedObject í optin.cplusplus pakkanum);
  • Clang-snið tólið hefur bætt við stuðningi við að forsníða kóða á C# tungumálinu og veitir stuðning við kóðasniðsstílinn sem Microsoft notar;
  • clang-cl, annað skipanalínuviðmót sem veitir samhæfni á valkostastigi við cl.exe þýðandann sem fylgir Visual Studio, hefur bætt við heuristics til að meðhöndla skrár sem ekki eru til sem skipanalínuvalkostir og birta samsvarandi viðvörun (td, þegar þú keyrir "clang-cl /diagnostic :caret /c test.cc");
  • Stór hluti nýrra athugana hefur verið bætt við linter clang-tidy, þar á meðal bættar athuganir sem eru sértækar fyrir OpenMP API;
  • Útvíkkað getu miðlara clangd (Clang Server), þar sem uppbyggingarhamur bakgrunnsvísitölunnar er sjálfgefið virkur, stuðningi við samhengisaðgerðir með kóða hefur verið bætt við (uppheimt breytu, stækkun sjálfvirkrar og makróskilgreininga, umbreyting á slepptum strengjum í ósloppna strengi), getu til að birta viðvaranir frá Clang-tidy, aukin greining á villum í hausskrám og bætt við möguleikanum á að birta upplýsingar um tegundastigveldið;

Helstu nýjungar LLVM 9.0:

  • Tilraunaskiptingareiginleika hefur verið bætt við LLD tengilinn, sem gerir þér kleift að skipta einu forriti í nokkra hluta, sem hver um sig er staðsettur í sérstakri ELF skrá. Þessi eiginleiki gerir þér kleift að ræsa meginhluta forritsins, sem mun hlaða öðrum íhlutum eftir þörfum meðan á notkun stendur (til dæmis geturðu aðskilið innbyggða PDF skoðarann ​​í sérstaka skrá, sem mun aðeins hlaðast þegar notandinn opnar PDF skrá).

    LLD tengill dró fram á sjónarsviðið í ástand sem hentar til að tengja Linux kjarnann fyrir arm32_7, arm64, ppc64le og x86_64 arkitektúra.
    Nýir valkostir "-" (úttak til stdout), "-[nei-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" og "-z common-page-size". Fyrir AArch64 arkitektúrinn hefur stuðningi við BTI (Branch Target Indicator) og PAC (Pointer Authentication Code) leiðbeiningar verið bætt við. Stuðningur við MIPS, RISC-V og PowerPC palla hefur verið bætt verulega. Bætti við upphafsstuðningi fyrir kraftmikla tengingu fyrir WebAssembly;

  • Í libc++ komið til framkvæmda aðgerðir ssize, std::is_constant_evaluated, std::midpoint og std::lerp, aðferðum „front“ og „back“ hefur verið bætt við std::span, eiginleikum af gerðum std::is_unbounded_array og std::is_bounded_array hefur verið bætt við , std möguleikar hafa verið stækkaðir: :atomic. Stuðningi við GCC 4.9 hefur verið hætt (hægt að nota með GCC 5.1 og nýrri útgáfum). Bætt við stuðningi VAR ÉG (WebAssembly System Interface, viðmót til að nota WebAssembly utan vafrans);
  • Nýjum hagræðingum hefur verið bætt við. Virkjað umbreytingu á memcmp símtölum í bcmp í sumum tilfellum. Útfærð sleppt sviðsskoðun fyrir stökktöflur þar sem neðri rofablokkir eru óaðgengilegar eða þegar leiðbeiningar eru ekki notaðar, til dæmis þegar kallað er á aðgerðir með gerð ógilda;
  • Bakendinn fyrir RISC-V arkitektúrinn hefur verið stöðugur, sem er ekki lengur staðsettur sem tilraunastarfsemi og er sjálfgefið byggður. Veitir fullan stuðning við gerð kóða fyrir RV32I og RV64I leiðbeiningasett afbrigði með MAFDC viðbótum;
  • Fjölmargar endurbætur hafa verið gerðar á bakenda fyrir X86, AArch64, ARM, SystemZ, MIPS, AMDGPU og PowerPC arkitektúr. Til dæmis fyrir arkitektúr
    AArch64 bætti við stuðningi við SVE2 (Scalable Vector Extension 2) og MTE (Memory Tagging Extensions) leiðbeiningar; í ARM bakendanum var stuðningur við Armv8.1-M arkitektúrinn og MVE (M-Profile Vector Extension) viðbótin bætt við. Stuðningur við GFX10 (Navi) arkitektúrinn hefur verið bætt við AMDGPU stuðninginn, eiginleiki aðgerðasímtala er sjálfgefið virkur og sameinuð passi er virkjuð DPP (Gagnasamhliða frumstæður).

  • LLDB kembiforritið er nú með litamerkingu fyrir bakslag og bætti við stuðningi við DWARF4 debug_types og DWARF5 debug_info blokkina;
  • Stuðningur fyrir hlut og keyrsluskrár á COFF sniði hefur verið bætt við llvm-objcopy og llvm-strip tólin.

Heimild: opennet.ru

Bæta við athugasemd