Kuburitswa kweLLVM 9.0 compiler suite

Mushure memwedzi mitanhatu yebudiriro yakaunzwa kuburitswa kweprojekiti LLVM 9.0 -GCC-inoenderana maturusi (macompilers, optimizers uye macode jenareta), achigadzira zvirongwa kuva yepakati bitcode yeRISC-senge mirairo chaiyo (yakaderera-level virtual muchina ine akawanda-level optimization system). Iyo pseudocode inogadzirwa inogona kushandurwa uchishandisa JIT compiler kuita mirairo yemuchina zvakananga panguva yekuitwa kwechirongwa.

Zvitsva zveLLVM 9.0 zvinosanganisira kubviswa kweiyo yekuyedza dhizaini tag kubva painotarirwa RISC-V papuratifomu, C ++ rutsigiro rweOpenCL, kugona kupatsanura chirongwa kuita zvikamu zvine simba muLLD, uye kuitwa kwe "asm goto", inoshandiswa muLinux kernel code. libc ++ yakawedzera rutsigiro rweWASI (WebAssembly System Interface), uye LLD yakawedzera rutsigiro rwekutanga kweWebAssembly dynamic linking.

Kuvandudza muClang 9.0:

  • Added kushandiswa kweGCC-specific expression "asm goto", izvo zvinokutendera kuti ufambe kubva paassembler inline block kuenda kune label muC kodhi. Iyi ficha inodiwa kuvaka Linux kernel mu "CONFIG_JUMP_LABEL=y" modhi uchishandisa Clang pane masisitimu ane x86_64 architecture. Tichifunga nezve shanduko yakawedzerwa mukuburitswa kwakapfuura, iyo Linux kernel ikozvino inogona kuvakwa muClang yeiyo x86_64 architecture (yaimbove ichingovakira ruoko, aarch64, ppc32, ppc64le uye mips architecture yakatsigirwa). Zvakare, mapurojekiti eAroid neChromeOS akatoshandurwa kuti ashandise Clang yekuvaka kernel, uye Google iri kuyedza Clang sepuratifomu huru yekuvaka kernels yekugadzira kwayo Linux masisitimu. Mune ramangwana, zvimwe zvikamu zveLLVM zvinogona kushandiswa mukugadzirwa kwekernel, kusanganisira LLD, llvm-objcopy, llvm-ar, llvm-nm, uye llvm-objdump;
  • Yakawedzera rutsigiro rwekuyedza kushandisa C++17 muOpenCL. Zvakanangana zvinosanganisira tsigiro yenzvimbo yekero hunhu, kuvharira kero shanduko yenzvimbo nemhando yekukanda vafambisi, kupihwa kwemhando dzevector sezviri muOpenCL yeC, kuvapo kwemhando dzakati dzeOpenCL dzemifananidzo, zviitiko, chiteshi, nezvimwe.
  • Yakawedzera mireza mitsva yekubatanidza "-ftime-trace" uye "-ftime-trace-granularity=N" kuti ibudise mushumo wenguva yekuuraya yematanho akasiyana-siyana epamberi (parsing, initialization) uye backend (matanho ekugadzirisa). Chirevo chinochengetwa mujson fomati, inoenderana nechrome://tracing uye speedscope.app;
  • Yakawedzera gadziriso ye "__declspec (allocator)" chirevo uye chizvarwa chekuperekedza ruzivo rwekugadzirisa izvo zvinokutendera kuti utarise mashandisirwo endangariro munzvimbo yeVisual Studio;
  • Pamutauro weC, rutsigiro rwakawedzerwa rweβ€œ__FILE_NAME__” macro, iyo yakafanana neβ€œ__FILE__” macro, asi inongosanganisira zita refaira risina nzira izere;
  • C ++ yakawedzera tsigiro yekero nzvimbo hunhu kuvhara akasiyana C++ maficha, anosanganisira parameter uye nharo mapatani, mareferensi mhando, kudzoka mhando inference, zvinhu, auto-inogadzirwa mabasa, akavakirwa-mukati anoshanda, nezvimwe.
  • Iwo masimba ane chekuita nerutsigiro rweOpenCL, OpenMP uye CUDA akawedzerwa. Izvi zvinosanganisira kutsigirwa kwekutanga kwekubatanidzwa kweakavakwa-mukati OpenCL mabasa (iyo "-fdeclare-opencl-builtins" mureza yawedzerwa), iyo cl_arm_integer_dot_product yekuwedzera yaitwa, uye maturusi ekuongorora akawedzerwa;
  • Basa reiyo static analyzer rakagadziridzwa uye zvinyorwa pakuita static ongororo yakawedzerwa. Mireza yakawedzerwa kuratidza mamodule echeki aripo uye sarudzo dzinotsigirwa (β€œ-analyzer-checker[-option]-rubatsiro”, β€œ-analyzer-checker[-option]-help-alpha” uye β€œ-analyzer-checker[-option]-rubatsiro "-mugadziri"). Yakawedzera "-analyzer-werror" mureza kubata yambiro sezvikanganiso.
    Yakawedzera nzira itsva dzekusimbisa:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling kuona maitiro asina kuchengetedzeka ekushanda nemabhafa;
    • osx.MIGChecker kutsvaga kutyorwa kweMIG (Mach Interface Generator) kufona mitemo;
    • optin.osx.OSObjectCStyleCast kuwana zvisizvo XNU libkern chinhu shanduko;
    • apiModeling.llvm ine seti yekuenzanisa yekutarisa mabasa kuona zvikanganiso muLLVM codebase;
    • Yakagadzikana kodhi yekutarisa isina kurongeka C ++ zvinhu (UninitializedObject mune optin.cplusplus package);
  • Iyo clang-fomati yekushandisa yakawedzera tsigiro yefomati kodhi mumutauro weC # uye inopa rutsigiro rweiyo kodhi fomati maitiro anoshandiswa neMicrosoft;
  • clang-cl, imwe nzira yekuraira-mutsara interface inopa sarudzo-level kuenderana neiyo cl.exe compiler inosanganisirwa muVisual Studio, yakawedzera heuristics kubata mafaira asiripo senge yekuraira-mutsara sarudzo uye kuratidza inoenderana yambiro (semuenzaniso, paunenge uchimhanya "clang-cl / diagnostic:caret /c test.cc");
  • Chikamu chikuru checheki nyowani chakawedzerwa kune linter clang-tidy, kusanganisira yakawedzera cheki yakanangana neOpenMP API;
  • Yakawedzerwa server kugona clangd (Clang Server), umo iyo yekumashure index yekuvaka modhi inogoneswa nekusarudzika, tsigiro yezviitiko zvemukati ine kodhi yakawedzerwa (kusiyana kudzoreredza, kuwedzera kwe auto uye macro tsananguro, kushandurwa kwetambo dzakapukunyuka kune dzisina kupukunyuka), kugona kuratidza. yambiro kubva kuClang-tidy, yakawedzera diagnostics yezvikanganiso mumusoro mafaira uye yakawedzera kugona kuratidza ruzivo nezvemhando yemhando;

chikuru zvitsva LLVM 9.0:

  • Chiyedzo chekugovera chikamu chakawedzerwa kune LLD linker, iyo inokutendera iwe kupatsanura chirongwa chimwe muzvikamu zvakati wandei, chimwe nechimwe chiri mune yakaparadzana ELF faira. Ichi chiitiko chinokutendera kuti utange chikamu chikuru chechirongwa, icho chinozoisa zvimwe zvikamu sezvinodiwa panguva yekushanda (semuenzaniso, unogona kupatsanura iyo yakavakirwa-mukati PDF muoni mune imwe faira rakasiyana, iro rinozotakura chete kana mushandisi avhura iyo PDF. faira).

    LLD Linker kuunzwa pamberi kune nyika yakakodzera kubatanidza iyo Linux kernel yearm32_7, arm64, ppc64le uye x86_64 zvivakwa.
    Zvitsva zvingasarudzwa "-" (kubuda kune stdout), "-[no-]bvumira-shlib-isina kutsanangurwa", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" uye "-z zvakajairika-peji-saizi". Kune iyo AArch64 architecture, rutsigiro rweBTI (Bazi Target Indicator) uye PAC (Pointer Authentication Code) mirairo yakawedzerwa. Tsigiro yeMIPS, RISC-V uye PowerPC mapuratifomu yakagadziridzwa zvakanyanya. Yakawedzera tsigiro yekutanga yekubatanidza ine simba yeWebAssembly;

  • Mune libc++ itwa mabasa ssize, std::is_constant_evaluated, std::midpoint uye std::lerp, nzira "mberi" uye "kumashure" dzakawedzerwa kune std::span, hunhu hwemhando std::is_unbounded_array uye std::is_bounded_array dzakawedzerwa. , std masimba akawedzerwa: :atomic. Tsigiro yeGCC 4.9 yakamiswa (inogona kushandiswa neGCC 5.1 uye kuburitswa kutsva). Yakawedzerwa rutsigiro WASI (WebAssembly System Interface, chimiro chekushandisa WebAssembly kunze kwebrowser);
  • Magadzirirwo matsva akawedzerwa. Inogonesa kushandurwa kwe memcmp mafoni kune bcmp mune mamwe mamiriro. Kuitwa kusiiwa kwemhando yekutarisa matafura ekusvetuka umo mabhuroki ezasi asingasvikike kana kana mirairo isingashandiswe, semuenzaniso, pakudaidza mabasa nemhando isina chinhu;
  • Iyo yekumashure yeRISC-V yekuvakisa yakagadziriswa, iyo isingachamisiki seyekuyedza uye inovakwa nekusarudzika. Inopa yakazara kodhi chizvarwa tsigiro yeRV32I uye RV64I yekuraira seti akasiyana ane MAFDC ekuwedzera;
  • Kwakawanda kuvandudzwa kwakaitwa kubackends kweX86, AArch64, ARM, SystemZ, MIPS, AMDGPU uye PowerPC zvivakwa. Somuenzaniso, nokuda kwezvivakwa
    AArch64 yakawedzera tsigiro yeSVE2 (Scalable Vector Extension 2) uye MTE (Memory Tagging Extensions) mirairo; muArM backend, rutsigiro rweArmv8.1-M architecture uye MVE (M-Profile Vector Extension) yekuwedzera yakawedzerwa. Tsigiro yeiyo GFX10 (Navi) yekuvakisa yakawedzerwa kune AMDGPU backend, basa rekufona hunyanzvi rinogoneswa nekusarudzika, uye kupasa kwakasanganiswa kunoitwa. DPP (Data-Parallel Primitives).

  • Iyo LLDB debugger ikozvino ine ruvara inosimudzira kumashure uye yakawedzera rutsigiro rweDWARF4 debug_types uye DWARF5 debug_info blocks;
  • Tsigiro yechinhu uye zvinogoneka mafaera muCOFF fomati yakawedzerwa kune llvm-objcopy uye llvm-strip zvishandiso.

Source: opennet.ru

Voeg