Ho lokolloa ha LLVM 9.0 compiler suite

Ka mor'a likhoeli tse tšeletseng tsa tsoelo-pele hlahisoa tokollo ea morero LLVM 9.0 - Lisebelisoa tse lumellanang le GCC (li-compilers, optimizers le lijenereithara tsa khoutu), ho bokella mananeo ka har'a bitcode ea bohareng ea RISC-joaloka litaelo tsa sebele (mochine oa boemo bo tlaase o nang le tsamaiso ea mekhoa e mengata ea ho ntlafatsa). Pseudocode e hlahisitsoeng e ka fetoloa ho sebelisoa JIT compiler hore e be litaelo tsa mochine ka ho toba nakong ea ts'ebetso ea lenaneo.

Likarolo tse ncha tsa LLVM 9.0 li kenyelletsa ho tlosoa ha tag ea moralo oa liteko sethaleng sa RISC-V, tšehetso ea C ++ bakeng sa OpenCL, bokhoni ba ho arola lenaneo ka likarolo tse jereng ka matla LLD, le ts'ebetsong ea "asm goto", e sebelisitsoeng ho khoutu ea kernel ea Linux. libc ++ e ekelitse tšehetso bakeng sa WASI (WebAssembly System Interface), 'me LLD e kentse tšehetso ea pele bakeng sa khokahano e matla ea WebAssembly.

Lintlafatso ho Clang 9.0:

  • E kentsoe phethahatso ea polelo e khethehileng ea GCC "asm goto", e u lumellang hore u tlohe sebakeng sa assembler inline block ho ea ho label ka khoutu ea C. Karolo ena e ea hlokahala ho aha Linux kernel ka mokhoa oa "CONFIG_JUMP_LABEL=y" o sebelisa Clang ho sistimi e nang le x86_64 ea meralo. Ha ho nahanoa ka liphetoho tse kenyellelitsoeng liphatlalatsong tse fetileng, kernel ea Linux e se e ka hahuoa Clang bakeng sa meralo ea x86_64 (eo pele e neng e le moaho oa letsoho, aarch64, ppc32, ppc64le le meralo ea mips e ne e tšehetsoa). Ho feta moo, merero ea Android le ChromeOS e se e fetotsoe ho sebelisa Clang bakeng sa mohaho oa kernel, 'me Google e ntse e leka Clang e le sethala se seholo sa ho haha ​​​​lik'hemik'hale bakeng sa lisebelisoa tsa eona tsa Linux. Nakong e tlang, likarolo tse ling tsa LLVM li ka sebelisoa ts'ebetsong ea ho haha ​​​​kernel, ho kenyeletsa LLD, llvm-objcopy, llvm-ar, llvm-nm, le llvm-objdump;
  • E kentse tšehetso ea liteko bakeng sa ho sebelisa C++17 ho OpenCL. Likarolo tse ikhethileng li kenyelletsa ts'ehetso ea litšoaneleho tsa sebaka sa aterese, ho thibela phetoho ea sebaka sa aterese ka mofuta oa li-casting operators, ho fana ka mefuta ea li-vector joalo ka OpenCL bakeng sa C, boteng ba mefuta e khethehileng ea OpenCL bakeng sa litšoantšo, liketsahalo, likanale, joalo-joalo.
  • E kentse lifolakha tse ncha tsa "-ftime-trace" le "-ftime-trace-granularity=N" ho hlahisa tlaleho mabapi le nako ea ts'ebetso ea mekhahlelo e fapaneng ea pele (ho bala, ho qala) le backend (mekhahlelo ea ho ntlafatsa). Tlaleho e bolokoa ka sebopeho sa json, se lumellanang le chrome://tracing le speedscope.app;
  • Ts'ebetso e ekelitsoeng ea "__declspec(allocator)" le tlhahiso ea tlhaiso-leseling e tsamaeang le bothata e u lumellang ho beha leihlo tšebeliso ea mohopolo tikolohong ea Visual Studio;
  • Bakeng sa puo ea C, tšehetso e kentsoe "__FILE_NAME__" macro, e ts'oanang le "__FILE__" macro, empa e kenyelletsa feela lebitso la faele ntle le tsela e felletseng;
  • C ++ e atolositse tšehetso bakeng sa litšobotsi tsa sebaka sa aterese ho koahela likarolo tse fapaneng tsa C ++, ho kenyeletsoa parameter le mekhoa ea likhang, mefuta ea litšupiso, tlhahiso ea mofuta oa ho khutlisa, lintho, mesebetsi e hlahisoang ka boits'oaro, basebelisi ba hahiloeng, le tse ling.
  • Bokhoni bo amanang le tšehetso ea OpenCL, OpenMP le CUDA bo ekelitsoe. Sena se kenyelletsa ts'ehetso ea pele bakeng sa ho kenyelletsa ka mokhoa o hlakileng oa mesebetsi ea OpenCL e hahiloeng (folakha ea "-fdeclare-opencl-builtins" e kentsoe), keketso ea cl_arm_integer_dot_product e kentsoe ts'ebetsong, 'me lisebelisoa tsa tlhahlobo li atolositsoe;
  • Mosebetsi oa static analyzer o ntlafalitsoe mme litokomane tse mabapi le ho etsa tlhahlobo e tsitsitseng li kentsoe. Lifolakha tse kentsoeng ho hlahisa li-module tse fumanehang tsa ho hlahloba le likhetho tse tšehetsoeng (“-analyzer-checker[-option]-help”, “-analyzer-checker[-option]-help-alpha” le “-analyzer-checker[-option]-help "-moetsi"). E kentse folakha ea "-analyzer-werror" ho tšoara litemoso joalo ka liphoso.
    E kentse mekhoa e mecha ea netefatso:

    • tšireletseho.insecureAPI.DeprecatedKapaUnsafeBufferHandling ho hlwaya mekhoa e sa bolokehang bakeng sa ho sebetsa le buffers;
    • osx.MIGChecker ho batla tlōlo ea molao ea MIG (Mach Interface Generator) call;
    • optin.osx.OSObjectCSstyleCast ho fumana liphetoho tse fosahetseng tsa XNU libkern ntho;
    • apiModeling.llvm e nang le sete ea mesebetsi ea ho hlahloba mohlala ho bona liphoso ho codebase ea LLVM;
    • Khoutu e tsitsitseng bakeng sa ho hlahloba lintho tse sa tsejoeng tsa C ++ (UninitializedObject in the optin.cplusplus package);
  • Sesebelisoa sa clang-format se ekelitse ts'ehetso ea ho fometa khoutu ka puo ea C # mme se fana ka ts'ehetso bakeng sa mokhoa oa ho fometa khoutu o sebelisoang ke Microsoft;
  • Clang-cl, sebopeho se seng sa taelo-taelo se fanang ka tumellano ea boemo ba khetho le motlatsi oa cl.exe e kenyellelitsoeng ho Visual Studio, e kentse li-heuristics ho tšoara lifaele tse seng teng joalo ka likhetho tsa mola oa taelo le ho bonts'a temoso e ts'oanang (mohlala, ha o matha "clang-cl / diagnostic :caret /c test.cc");
  • Karolo e kholo ea licheke tse ncha e kenyellelitsoe ho linter clang-tidy, ho kenyelletsa le licheke tse kenyellelitsoeng ho OpenMP API;
  • E atolositsoe bokhoni ba seva clangd (Clang Server), moo mokhoa oa ho haha ​​​​ka morao-rao o nolofalitsoeng ka ho sa feleng, tšehetso bakeng sa liketso tsa maemo a nang le khoutu e kenyelelitsoe (ho khutlisa mefuta e fapaneng, ho atolosoa ha litlhaloso tsa likoloi le tse kholo, phetoho ea likhoele tse phonyohileng ho tse sa phonyohang), bokhoni ba ho bonts'a. litemoso tse tsoang ho Clang-tidy, tlhahlobo e atolositsoeng ea liphoso lifaeleng tsa lihlooho mme e ekelitse bokhoni ba ho bonts'a tlhahisoleseling mabapi le mofuta oa maemo;

ka sehloohong boiqapelo LLVM 9.0:

  • Sebopeho sa karohano ea liteko se kentsoe ho LLD linker, e u lumellang ho arola lenaneo le le leng likarolo tse 'maloa, tseo e' ngoe le e 'ngoe ea tsona e leng faeleng e fapaneng ea ELF. Karolo ena e u lumella ho qala karolo ea mantlha ea lenaneo, e tla kenya likarolo tse ling kamoo ho hlokahalang nakong ea ts'ebetso (mohlala, o ka arola sebali sa PDF se hahelletsoeng ho faele e arohaneng, e tla jarolla feela ha mosebelisi a bula PDF. faele).

    Sehokelo sa LLD tlisitsoe ka pele sebakeng se loketseng ho hokahanya kernel ea Linux bakeng sa meaho ea arm32_7, arm64, ppc64le le x86_64.
    Likhetho tse ncha "-" (output to stdout), "-[no-] lumella-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" le "-z common-size-size-size". Bakeng sa meralo ea AArch64, tšehetso bakeng sa BTI (Sesupo sa Sepheo sa Lekala) le PAC (Pointer Authentication Code) litaelo li kentsoe. Tšehetso ea li-platform tsa MIP, RISC-V le PowerPC e ntlafalitsoe haholo. E kenyellelitse tšehetso ea pele bakeng sa khokahano e matla bakeng sa WebAssembly;

  • Ho libc++ kenngwa tshebetsong mesebetsi ssize, std::is_constant_evaluated, std::midpoint le std::lerp, mekhoa ea "pele" le "back" e kenyelelitsoe ho std::span, litšobotsi tsa mefuta std::is_unbounded_array le std::is_bounded_array e kentsoe , bokhoni ba std bo ekelitsoe: :atomic. Tšehetso ea GCC 4.9 e khaolitsoe (e ka sebelisoa le GCC 5.1 le litokollo tse ncha). Tšehetso e ekelitsoeng WASI (WebAssembly System Interface, sebopeho sa ho sebelisa WebAssembly kantle ho sebatli);
  • Lintlafatso tse ncha li kentsoe. E lumelletse phetoho ea memcmp mehala ho bcmp maemong a mang. Ho se kenyelelitsoe mokhoa oa ho hlahloba litafole tseo ho tsona li-switch blocks li ke keng tsa fihlelleha kapa ha litaelo li sa sebelisoe, mohlala, ha u bitsa mesebetsi ka mofuta o se nang letho;
  • Karolo e ka morao ea meralo ea RISC-V e tsitsitsoe, e seng e sa behiloe joalo ka liteko mme e hahiloe ka boiketsetso. E fana ka tšehetso e felletseng ea tlhahiso ea khoutu bakeng sa mefuta e fapaneng ea litaelo tsa RV32I le RV64I tse nang le katoloso ea MAFDC;
  • Lintlafatso tse ngata li entsoe ho li-backends bakeng sa meralo ea X86, AArch64, ARM, SystemZ, MIPS, AMDGPU le PowerPC. Ka mohlala, bakeng sa meralo
    AArch64 e ekelitse tšehetso bakeng sa litaelo tsa SVE2 (Scalable Vector Extension 2) le MTE (Memory Tagging Extensions); karolong e ka morao ea ARM, tšehetso ea Armv8.1-M ea meralo le katoloso ea MVE (M-Profile Vector Extension) e ile ea eketsoa. Ts'ehetso ea meralo ea GFX10 (Navi) e kenyellelitsoe karolong e ka morao ea AMDGPU, bokhoni ba ho letsetsa ts'ebetso bo nolofalloa ka boiketsetso, 'me pase e kopaneng e ea sebetsa. DPP (Data-Parallel Primitives).

  • LLDB debugger hona joale e na le mebala e totobatsang bakeng sa morao-rao le tšehetso e eketsehileng bakeng sa DWARF4 debug_types le DWARF5 debug_info blocks;
  • Ts'ehetso bakeng sa lifaele tsa ntho le tse ka sebelisoang ka sebopeho sa COFF e kentsoe lits'ebetsong tsa llvm-objcopy le llvm-strip.

Source: opennet.ru

Eketsa ka tlhaloso