Sakin saitin mai tarawa na LLVM 9.0

Bayan watanni shida na ci gaba gabatar sakin aikin LLVM 9.0 - Kayan aikin GCC masu jituwa (masu tarawa, masu haɓakawa da masu samar da lambar), haɗa shirye-shirye a cikin matsakaicin bitcode na RISC-kamar umarnin kama-da-wane (na'ura mai ƙarancin ƙima tare da tsarin ingantawa da yawa). Za'a iya canza lambar ƙirar ƙira ta amfani da mai tara JIT zuwa umarnin injin kai tsaye a lokacin aiwatar da shirin.

Sabbin fasalulluka na LLVM 9.0 sun haɗa da cire alamar ƙirar gwaji daga dandalin RISC-V manufa, goyon bayan C ++ don OpenCL, ikon raba shirin zuwa sassa masu ɗorewa a cikin LLD, da aiwatar da "asm go", ana amfani da shi a cikin lambar kernel na Linux. libc++ ya ƙara goyon baya ga WASI (WebAssembly System Interface), kuma LLD ya ƙara tallafin farko don haɗin haɗin yanar gizo mai ƙarfi na WebAssembly.

Ingantawa a cikin Clang 9.0:

  • Kara aiwatar da takamaiman magana ta GCC "asm go", wanda ke ba ku damar matsawa daga shingen layi na masu tarawa zuwa lakabi a lambar C. Ana buƙatar wannan fasalin don gina kernel na Linux a cikin yanayin "CONFIG_JUMP_LABEL=y" ta amfani da Clang akan tsarin tare da gine-ginen x86_64. Yin la'akari da canje-canjen da aka ƙara a cikin abubuwan da suka gabata, ana iya gina kernel na Linux a cikin Clang don gine-ginen x86_64 (a baya kawai gini don hannu, aarch64, ppc32, ppc64le da mips architectures an tallafawa). Bugu da ƙari, an riga an canza ayyukan Android da ChromeOS don amfani da Clang don ginin kwaya, kuma Google yana gwada Clang a matsayin babban dandalin gina kernel don samar da tsarin Linux. A nan gaba, ana iya amfani da wasu abubuwan LLVM a cikin tsarin gina kwaya, gami da LLD, llvm-objcopy, llvm-ar, llvm-nm, da llvm-objdump;
  • Ƙara goyan bayan gwaji don amfani da C++17 a cikin OpenCL. Musamman fasalulluka sun haɗa da goyan baya don halayen sararin adireshi, toshe fassarar sararin adireshi ta nau'in ma'aikatan simintin simintin, samar da nau'ikan vector kamar yadda yake cikin OpenCL don C, kasancewar takamaiman nau'ikan OpenCL don hotuna, abubuwan da suka faru, tashoshi, da sauransu.
  • An ƙara sabbin tutocin masu tarawa "-ftime-trace" da "-ftime-trace-granularity=N" don samar da rahoto kan lokacin aiwatar da matakai daban-daban na gaba (bayani, farawa) da baya (matakan ingantawa). An adana rahoton a tsarin json, mai dacewa da chrome://tracing da speedscope.app;
  • Ƙara aiki na "__declspec(allocator)" ƙayyadaddun ƙayyadaddun bayanai da tsara bayanan ɓoyayyen ɓoyayyiyar da ke ba ku damar saka idanu akan yawan ƙwaƙwalwar ajiya a cikin yanayin Studio Visual;
  • Don harshen C, an ƙara tallafi don macro "__FILE_NAME__", wanda yayi kama da "__FILE__" macro, amma ya ƙunshi sunan fayil kawai ba tare da cikakken hanya ba;
  • C++ ya faɗaɗa goyan baya don halayen sararin adireshi don rufe fasalulluka daban-daban na C++, gami da siga da ƙirar gardama, nau'ikan tunani, nau'in nau'in dawowa, abubuwa, ayyukan da aka haɓaka ta atomatik, ginanniyar masu aiki, da ƙari.
  • An faɗaɗa damar damar da ke da alaƙa da tallafi don OpenCL, OpenMP da CUDA. Wannan ya haɗa da goyon baya na farko don haɗa kai tsaye na ayyukan OpenCL da aka gina (an ƙara alamar "-fdeclare-opencl-builtins"), an aiwatar da tsawo na cl_arm_integer_dot_product, kuma an fadada kayan aikin bincike;
  • An inganta aikin na'urar nazari a tsaye kuma an ƙara daftarin aiki akan yin bincike a tsaye. Ƙara tutoci don nuna samuwan kayan bincike da zaɓuɓɓukan tallafi ("-analyzer-checker[-option] -help", "-analyzer-checker [-option] -help-alpha" da "-analyzer-checker[-option] -help "-developer"). Ƙara tutar "-analyzer-werror" don ɗaukar gargaɗi azaman kurakurai.
    An ƙara sabbin hanyoyin tabbatarwa:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling don gano ayyuka marasa aminci don aiki tare da buffers;
    • osx.MIGChecker don nemo karya dokokin kira na MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast don nemo madaidaicin juzu'i na XNU libkern;
    • apiModeling.llvm tare da saitin ayyukan dubawa don gano kurakurai a cikin lambar LLVM;
    • Ƙaddamar da lambar don bincika abubuwan C ++ da ba a sani ba (UninitializedObject a cikin kunshin optin.cplusplus);
  • Mai amfani da tsarin clang ya ƙara tallafi don tsara lamba a cikin yaren C # kuma yana ba da tallafi ga salon tsara lambar da Microsoft ke amfani da shi;
  • Clag-cl, madadin layin umarni wanda ke ba da damar daidaita matakin zaɓi tare da mai tara cl.exe wanda aka haɗa a cikin Kayayyakin Kayayyakin Kayayyakin Kayayyakin, ya ƙara ilimin ilimin halitta don kula da fayilolin da ba su wanzu azaman zaɓuɓɓukan layin umarni kuma yana nuna faɗakarwa daidai (misali, lokacin gudanar da "clang-cl /diagnostic: caret /c test.cc");
  • An ƙara babban yanki na sabbin cak zuwa linter clang-tidy, gami da ƙarin cak na musamman ga OpenMP API;
  • Fadada damar uwar garke dangi (Clang Server), wanda yanayin ginin bangon bango ya kunna ta tsohuwa, an ƙara goyan bayan ayyuka na mahallin tare da lambar (sarrafa mai canzawa, faɗaɗa ma'anar auto da macro, jujjuya kirtani da suka tsere zuwa waɗanda ba a tsira ba), ikon nunawa. faɗakarwa daga Clang-tidy, faɗaɗa bincike na kurakurai a cikin fayilolin kai da ƙara ikon nuna bayanai game da nau'in matsayi;

Main sababbin abubuwa LLVM 9.0:

  • An ƙara fasalin ɓarna na gwaji zuwa mai haɗin LLD, wanda ke ba ku damar raba shirin ɗaya zuwa sassa da yawa, kowannensu yana cikin wani fayil ɗin ELF daban. Wannan fasalin yana ba ku damar ƙaddamar da babban ɓangaren shirin, wanda zai loda sauran abubuwan da ake buƙata yayin aiki (misali, zaku iya raba ginannen mai duba PDF zuwa wani fayil daban, wanda zai lodawa kawai lokacin da mai amfani ya buɗe PDF ɗin. fayil).

    LLD Linker kawo a gaba zuwa jihar da ta dace don haɗa kernel Linux don arm32_7, arm64, ppc64le da gine-ginen x86_64.
    Sabbin zaɓuɓɓuka "-" (fitarwa zuwa stdout), "-[no-] izinin-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-laburare-dogara", "- z ifunc-noplt" da "-z gama-gari-size". Don gine-ginen AArch64, an ƙara goyan bayan BTI (Mai Nuna Target Reshe) da PAC (Lambar Tabbatar da Ma'ana). Taimako ga dandamali na MIPS, RISC-V da PowerPC an inganta su sosai. Ƙara goyon baya na farko don haɗin kai mai ƙarfi don WebAssembly;

  • A cikin libc++ aiwatar Girman ayyuka, std :: is_constant_evaluated, std :: tsakiyar da std :: lerp, hanyoyin "gaba" da "baya" an ƙara su zuwa std :: span, halayen nau'ikan std :: is_unbounded_array da std :: is_bounded_array an ƙara su. , an fadada iyawar std: atomic. An daina goyan bayan GCC 4.9 (ana iya amfani da shi tare da GCC 5.1 da sabbin sakewa). Ƙara tallafi WASI (WebAssembly System Interface, mai dubawa don amfani da Gidan Yanar Gizo a wajen mai bincike);
  • An ƙara sabbin haɓakawa. An kunna canjin kiran memcmp zuwa bcmp a wasu yanayi. Aiwatar da watsi da kewayon bincika tebur na tsalle wanda ƙananan tubalan ba za a iya isa ba ko lokacin da ba a yi amfani da umarni ba, misali, lokacin kiran ayyuka tare da nau'in fanko;
  • Ƙarshen baya don gine-ginen RISC-V an daidaita shi, wanda ba a sanya shi azaman gwaji kuma an gina shi ta tsohuwa. Yana ba da cikakken goyon bayan tsara lambar code don RV32I da RV64I umarni saita bambance-bambancen tare da kari na MAFDC;
  • An yi gyare-gyare da yawa zuwa ga baya don X86, AArch64, ARM, SystemZ, MIPS, AMDGPU da kuma gine-ginen PowerPC. Misali, ga gine-gine
    AArch64 ya ƙara tallafi don SVE2 (Scalable Vector Extension 2) da MTE (Memory Tagging Extensions); a cikin bayanan ARM, goyon baya ga gine-ginen Armv8.1-M da MVE (M-Profile Vector Extension) an ƙara ƙara. An ƙara goyan bayan gine-ginen GFX10 (Navi) zuwa ƙarshen AMDGPU, ana kunna damar kiran aikin ta tsohuwa, kuma an kunna izinin haɗin gwiwa. DPP (Data-Parallel Primitives).

  • Mai gyara LLDB yanzu yana da haske mai launi don bayanan baya da ƙarin tallafi don DWARF4 debug_types da DWARF5 debug_info blocks;
  • An ƙara goyan bayan abu da fayilolin aiwatarwa a cikin tsarin COFF zuwa kayan aikin lvm-objcopy da lvm-strip.

source: budenet.ru

Add a comment