Kutulutsidwa kwa LLVM 9.0 compiler suite

Pambuyo pa miyezi isanu ndi umodzi ya chitukuko zoperekedwa kutulutsidwa kwa polojekiti LLVM 9.0 - Zida zogwirizana ndi GCC (ma compilers, optimizers and code generators), kupanga mapulogalamu mu bitcode yapakatikati ya RISC-monga malangizo enieni (makina otsika omwe ali ndi makina okhathamiritsa ambiri). Pseudocode yopangidwa ikhoza kusinthidwa pogwiritsa ntchito JIT compiler kukhala malangizo amakina mwachindunji panthawi yokonza pulogalamu.

Zatsopano za LLVM 9.0 zikuphatikiza kuchotsedwa kwa tag yoyeserera papulatifomu ya RISC-V, thandizo la C ++ la OpenCL, kuthekera kogawa pulogalamu kukhala magawo odzaza kwambiri mu LLD, ndikukhazikitsa "ayi kuti", yogwiritsidwa ntchito mu Linux kernel code. libc++ anawonjezera thandizo la WASI (WebAssembly System Interface), ndipo LLD inawonjezera chithandizo choyambirira cha WebAssembly dynamic linking.

Zosintha mu Clang 9.0:

  • Zowonjezedwa kukhazikitsa mawu a GCC "ayi kuti", zomwe zimakupatsani mwayi kuti musunthe kuchoka pamzere wa assembler kupita ku chizindikiro cha C code. Izi ndizofunikira kuti mupange Linux kernel munjira ya "CONFIG_JUMP_LABEL=y" pogwiritsa ntchito Clang pamakina okhala ndi x86_64 zomangamanga. Poganizira zosintha zomwe zidatulutsidwa m'mbuyomu, kernel ya Linux tsopano ikhoza kumangidwa ku Clang pamapangidwe a x86_64 (omwe kale amangomanga mkono, aarch64, ppc32, ppc64le ndi mips zomangamanga zidathandizidwa). Kuphatikiza apo, mapulojekiti a Android ndi ChromeOS asinthidwa kale kuti agwiritse ntchito Clang pomanga kernel, ndipo Google ikuyesera Clang ngati nsanja yayikulu yopangira ma kernel ake opanga ma Linux. M'tsogolomu, zigawo zina za LLVM zingagwiritsidwe ntchito pomanga kernel, kuphatikizapo LLD, llvm-objcopy, llvm-ar, llvm-nm, ndi llvm-objdump;
  • Anawonjezera chithandizo choyesera chogwiritsira ntchito C++17 mu OpenCL. Zina mwazambiri zikuphatikiza kuthandizira kwa malo adilesi, kutsekereza kutembenuka kwa ma adilesi ndi ogwiritsa ntchito amitundu, kupereka mitundu ya vekitala monga OpenCL ya C, kukhalapo kwa mitundu ya OpenCL ya zithunzi, zochitika, matchanelo, ndi zina.
  • Onjezani mbendera zatsopano "-ftime-trace" ndi "-ftime-trace-granularity=N" kuti apange lipoti la nthawi yochitira magawo osiyanasiyana a frontend (parsing, initialization) ndi backend (magawo okhathamiritsa). Lipotilo limasungidwa mumtundu wa json, wogwirizana ndi chrome://tracing ndi speedscope.app;
  • Kuwongolera kowonjezera kwa "__declspec(allocator)" ndi m'badwo wazotsatira zomwe zimakupatsani mwayi wowunika momwe kukumbukira kumagwiritsidwira ntchito mu Visual Studio;
  • Pa chinenero cha C, chithandizo chawonjezedwa pa "__FILE_NAME__" macro, chomwe chimafanana ndi "__FILE__" macro, koma chimaphatikizapo dzina la fayilo lopanda njira yonse;
  • C ++ yakulitsa chithandizo cha mawonekedwe a ma adilesi kuti athe kuphimba zinthu zosiyanasiyana za C++, kuphatikiza magawo ndi mikangano, mitundu yolozera, malingaliro amtundu wobwerera, zinthu, ntchito zodzipangira okha, ogwiritsa ntchito omangidwa, ndi zina zambiri.
  • Maluso okhudzana ndi chithandizo cha OpenCL, OpenMP ndi CUDA awonjezedwa. Izi zikuphatikizapo kuthandizira koyambirira kwa kuphatikizidwa kwathunthu kwa ntchito za OpenCL zomangidwira (mbendera ya "-fdeclare-opencl-builtins" yawonjezedwa), cl_arm_integer_dot_product extension yakhazikitsidwa, ndipo zida zowunikira zakulitsidwa;
  • Ntchito ya static analyzer yawongoleredwa ndipo zolemba pakuchita kusanthula kokhazikika zawonjezeredwa. Onjezani mbendera kuti muwonetse ma module omwe alipo ndi njira zothandizira ("-analyzer-checker[-option] -help", "-analyzer-checker[-option] -help-alpha" ndi "-analyzer-checker[-option] -help "-wopanga"). Wowonjezera "-analyzer-werror" mbendera kuti atenge machenjezo ngati zolakwika.
    Mawonekedwe atsopano otsimikizira:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling kuti muzindikire njira zosatetezeka zogwirira ntchito ndi ma buffer;
    • osx.MIGChecker kufufuza zophwanya malamulo a foni MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast kuti mupeze zosintha za XNU libkern zolakwika;
    • apiModeling.llvm yokhala ndi ntchito zowunikira ma modeling kuti muwone zolakwika mu LLVM codebase;
    • Khodi yokhazikika yoyang'ana zinthu zosadziwika za C ++ (UninitializedObject in the optin.cplusplus package);
  • Chida chothandizira cha clang-format chawonjezera kuthandizira pakusintha kachidindo m'chinenero cha C # ndipo chimathandizira kalembedwe kamene kamagwiritsidwa ntchito ndi Microsoft;
  • clang-cl, mawonekedwe ena a mzere wa malamulo omwe amapereka mwayi wosankha ndi wojambulira wa cl.exe wophatikizidwa mu Visual Studio, awonjezera ma heuristics kuti azitha kuchitira mafayilo omwe sanakhalepo ngati zosankha za mzere wa malamulo ndikuwonetsa chenjezo lofananira (mwachitsanzo, poyendetsa "clang-cl / diagnostic:caret /c test.cc");
  • Gawo lalikulu la macheke atsopano awonjezedwa ku linter clang-tidy, kuphatikiza macheke owonjezera a OpenMP API;
  • Zokulitsidwa kuthekera kwa seva clangd (Clang Server), momwe mawonekedwe akumbuyo akumangidwira amathandizidwa mwachisawawa, chithandizo chazomwe zikuchitika ndi ma code awonjezedwa (kubweza kosinthika, kukulitsa matanthauzidwe a auto ndi macro, kutembenuka kwa zingwe zothawa kukhala zosapulumuka), kuthekera kowonetsa. machenjezo ochokera ku Clang-tidy, kukulitsa kuwunika kwa zolakwika m'mafayilo apamutu ndikuwonjezera kuthekera kowonetsa zambiri zamtundu wawo;

waukulu zatsopano LLVM 9.0:

  • Chigawo choyesera chogawa chawonjezeredwa ku LLD linker, chomwe chimakulolani kugawa pulogalamu imodzi mumagulu angapo, iliyonse yomwe ili mu fayilo ya ELF. Izi zimakupatsani mwayi wotsegulira gawo lalikulu la pulogalamuyo, yomwe imatsitsa zida zina momwe zingafunikire (mwachitsanzo, mutha kupatutsa chowonera cha PDF chomwe chili mu fayilo ina, yomwe imangotsegula pokhapokha wogwiritsa ntchito akatsegula PDF. wapamwamba).

    Chithunzi cha LLD Linker kubweretsedwa patsogolo ku boma loyenera kulumikiza kernel ya Linux ya arm32_7, arm64, ppc64le ndi x86_64 zomangamanga.
    Zosankha zatsopano "-" (zotulutsa ku stdout), "-[no-]lola-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" ndi "-z common-page-size". Pazomangamanga za AArch64, kuthandizira kwa BTI (Chizindikiro Chotsata Nthambi) ndi malangizo a PAC (Pointer Authentication Code) awonjezedwa. Thandizo la nsanja za MIPS, RISC-V ndi PowerPC zasinthidwa kwambiri. Thandizo loyambira lothandizira kulumikiza kwamphamvu kwa WebAssembly;

  • Mu libc++ zakhazikitsidwa ntchito ssize, std::is_constant_evaluated, std::midpoint ndi std::lerp, njira za "kutsogolo" ndi "kumbuyo" zawonjezedwa ku std::span, makhalidwe a mitundu std::is_unbounded_array ndi std::is_bounded_array awonjezedwa. , mphamvu za std zawonjezedwa: :atomic. Thandizo la GCC 4.9 lathetsedwa (litha kugwiritsidwa ntchito ndi GCC 5.1 ndi zotulutsidwa zatsopano). Thandizo lowonjezera WASI (WebAssembly System Interface, mawonekedwe ogwiritsa ntchito WebAssembly kunja kwa msakatuli);
  • Kukhathamiritsa kwatsopano kwawonjezedwa. Yathandizira kutembenuka kwa mafoni a memcmp kukhala bcmp nthawi zina. Kusiyidwa kwamitundu yosiyanasiyana yowunika ma tabu odumphira momwe zotchingira zocheperako sizingafikike kapena ngati malangizo sagwiritsidwa ntchito, mwachitsanzo, poyimba ntchito zopanda mtundu;
  • Kumbuyo kwa zomangamanga za RISC-V zakhazikika, zomwe sizimayikidwanso ngati zoyesera ndipo zimamangidwa mwachisawawa. Amapereka chithandizo chokwanira chothandizira ma code RV32I ndi RV64I malangizo osinthika osiyanasiyana okhala ndi zowonjezera za MAFDC;
  • Zosintha zambiri zapangidwira kumbuyo kwa X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ndi PowerPC zomanga. Mwachitsanzo, za zomangamanga
    AArch64 inawonjezera thandizo la malangizo a SVE2 (Scalable Vector Extension 2) ndi MTE (Memory Tagging Extensions); mu ARM backend, chithandizo cha zomangamanga za Armv8.1-M ndi MVE (M-Profile Vector Extension) zowonjezera zinawonjezeredwa. Thandizo pamamangidwe a GFX10 (Navi) awonjezedwa ku AMDGPU backend, kuthekera koyimba ntchito kumathandizidwa mwachisawawa, ndipo chiphaso chophatikizika chimatsegulidwa. DPP (Data-Parallel Primitives).

  • LLDB debugger tsopano ili ndi zowunikira zamitundu yakumbuyo ndikuwonjezera thandizo la DWARF4 debug_types ndi DWARF5 debug_info blocks;
  • Thandizo lazinthu ndi mafayilo omwe angathe kuchitidwa mumtundu wa COFF wawonjezedwa ku llvm-objcopy ndi llvm-strip utility.

Source: opennet.ru

Kuwonjezera ndemanga