Itusilẹ ti LLVM 9.0 alakojo suite

Lẹhin osu mẹfa ti idagbasoke gbekalẹ idasilẹ ise agbese LLVM 9.0 - Awọn irinṣẹ ibaramu GCC (awọn olupilẹṣẹ, awọn olupilẹṣẹ ati awọn olupilẹṣẹ koodu), iṣakojọpọ awọn eto sinu bitcode agbedemeji ti RISC-bii awọn ilana foju (ẹrọ foju ipele kekere pẹlu eto imudara ipele pupọ). Pseudocode ti ipilẹṣẹ le ṣe iyipada nipa lilo olupilẹṣẹ JIT sinu awọn ilana ẹrọ taara ni akoko ipaniyan eto.

Awọn ẹya tuntun ti LLVM 9.0 pẹlu yiyọ ti aami apẹrẹ idanwo lati ibi-afẹde RISC-V ibi-afẹde, atilẹyin C ++ fun OpenCL, agbara lati pin eto kan si awọn apakan ti kojọpọ ni agbara ni LLD, ati imuse ti “asm goto", ti a lo ninu koodu ekuro Linux. libc++ ṣe afikun atilẹyin fun WASI (Interface System WebAssembly), ati LLD ṣafikun atilẹyin ibẹrẹ fun sisopọ agbara WebAssembly.

Awọn ilọsiwaju ni Clang 9.0:

  • Fi kun imuse ti GCC-kan pato ikosile "asm goto“, eyiti o fun ọ laaye lati gbe lati inu bulọọki opopo apejọ si aami kan ni koodu C. Ẹya yii nilo lati kọ ekuro Linux ni ipo “CONFIG_JUMP_LABEL=y” ni lilo Clang lori awọn ọna ṣiṣe pẹlu faaji x86_64. Ni akiyesi awọn ayipada ti a ṣafikun ni awọn idasilẹ iṣaaju, ekuro Linux le ni itumọ ni Clang fun faaji x86_64 (ile tẹlẹ nikan fun apa, aarch64, ppc32, ppc64le ati awọn faaji mips ni atilẹyin). Pẹlupẹlu, Android ati awọn iṣẹ akanṣe ChromeOS ti yipada tẹlẹ lati lo Clang fun ile kernel, ati Google n ṣe idanwo Clang gẹgẹbi ipilẹ akọkọ fun kikọ awọn kernels fun awọn eto Linux iṣelọpọ rẹ. Ni ọjọ iwaju, awọn paati LLVM miiran le ṣee lo ninu ilana kikọ ekuro, pẹlu LLD, llvm-objcopy, llvm-ar, llvm-nm, ati llvm-objdump;
  • Ṣe afikun atilẹyin esiperimenta fun lilo C++17 ni OpenCL. Awọn ẹya ara ẹrọ pato pẹlu atilẹyin fun awọn abuda aaye adirẹsi, didi iyipada aaye adirẹsi nipasẹ iru awọn oniṣẹ simẹnti, ipese awọn oriṣi vector bi ni OpenCL fun C, niwaju awọn iru OpenCL kan pato fun awọn aworan, awọn iṣẹlẹ, awọn ikanni, ati bẹbẹ lọ.
  • Ṣafikun awọn asia alakojọ tuntun “-ftime-trace” ati “-ftime-trace-granularity=N” lati ṣe agbejade ijabọ kan lori akoko ipaniyan ti awọn ipele oriṣiriṣi ti iwaju (itupalẹ, ipilẹṣẹ) ati ẹhin (awọn ipele imudara). Iroyin naa ti wa ni ipamọ ni ọna kika json, ni ibamu pẹlu chrome://tracing ati speedscope.app;
  • Ṣiṣe afikun ti "__declspec (allocator)" specifier ati iran ti alaye ti n ṣatunṣe aṣiṣe ti o fun ọ laaye lati ṣe atẹle agbara iranti ni ayika Visual Studio;
  • Fun ede C, atilẹyin ti jẹ afikun fun “__FILE_NAME__” macro, eyiti o jọra “__FILE__” macro, ṣugbọn pẹlu orukọ faili nikan laisi ọna kikun;
  • C ++ ti ni atilẹyin ti o gbooro fun awọn abuda aaye adirẹsi lati bo ọpọlọpọ awọn ẹya C ++, pẹlu paramita ati awọn ilana ariyanjiyan, awọn iru itọkasi, iru ipadabọ, awọn nkan, awọn iṣẹ ti ipilẹṣẹ, awọn oniṣẹ ti a ṣe sinu, ati diẹ sii.
  • Awọn agbara ti o ni nkan ṣe pẹlu atilẹyin fun OpenCL, OpenMP ati CUDA ti ni ilọsiwaju. Eyi pẹlu atilẹyin akọkọ fun ifisi laisọ ti awọn iṣẹ OpenCL ti a ṣe sinu (a ti fi asia “-fdeclare-opencl-builtins” kun), itẹsiwaju cl_arm_integer_dot_product ti ṣe imuse, ati pe awọn irinṣẹ iwadii ti gbooro;
  • Iṣẹ ti olutupalẹ aimi ti ni ilọsiwaju ati pe awọn iwe lori ṣiṣe itupalẹ aimi ti ṣafikun. Awọn asia ti a ṣafikun lati ṣe afihan awọn modulu oluṣayẹwo ti o wa ati awọn aṣayan atilẹyin (“-anlyzer-checker[-aption] -help”, “-analyzer-checker [-aṣayan]-help-alpha” ati “-ayẹwo-aṣayẹwo[-aṣayan]-iranlọwọ "-Olùgbéejáde"). Ṣafikun asia "-analyzer-werror" lati tọju awọn ikilọ bi awọn aṣiṣe.
    Awọn ipo ijẹrisi tuntun ti a ṣafikun:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling lati ṣe idanimọ awọn iṣe ti ko lewu fun ṣiṣẹ pẹlu awọn buffers;
    • osx.MIGChecker lati wa irufin MIG (Mach Interface Generator) awọn ofin ipe;
    • optin.osx.OSObjectCStyleCast lati wa awọn iyipada XNU libkern ti ko tọ;
    • apiModeling.llvm pẹlu ṣeto awọn iṣẹ ṣiṣe ayẹwo awoṣe lati ṣawari awọn aṣiṣe ninu koodu koodu LLVM;
    • Koodu iduro fun ṣiṣe ayẹwo awọn nkan C ++ ti ko ni ipilẹṣẹ (UninitializedObject ni package optin.cplusplus);
  • IwUlO ọna kika clang ti ṣafikun atilẹyin fun kika koodu ni ede C # ati pese atilẹyin fun ara kika koodu ti Microsoft lo;
  • clang-cl, wiwo laini aṣẹ yiyan ti o pese ibamu-ipele aṣayan pẹlu olupilẹṣẹ cl.exe ti o wa ninu Studio Visual, ti ṣafikun heuristics lati tọju awọn faili ti ko si bi awọn aṣayan laini aṣẹ ati ṣafihan ikilọ ti o baamu (fun apẹẹrẹ, nigbati o nṣiṣẹ "clang-cl / diagnostic: caret / c test.cc");
  • Apa nla ti awọn sọwedowo tuntun ni a ti ṣafikun si linter clang-tidy, pẹlu awọn sọwedowo ti a ṣafikun ni pato si OpenMP API;
  • Ti fẹ olupin awọn agbara clangd (Clang Server), ninu eyiti ipo ile itọka isale ti ṣiṣẹ nipasẹ aiyipada, atilẹyin fun awọn iṣe ọrọ-ọrọ pẹlu koodu ti ṣafikun (imupadabọ iyipada, imugboroja ti adaṣe ati awọn asọye Makiro, iyipada ti awọn okun ti o salọ si awọn ti a ko padanu), agbara lati ṣafihan Awọn ikilo lati Clang-tidy, awọn iwadii aisan ti o gbooro ti awọn aṣiṣe ninu awọn faili akọsori ati ṣafikun agbara lati ṣafihan alaye nipa iru awọn ipo;

akọkọ awọn imotuntun LLVM 9.0:

  • Ẹya pipin idanwo kan ti ṣafikun si ọna asopọ LLD, eyiti o fun ọ laaye lati pin eto kan si awọn apakan pupọ, ọkọọkan eyiti o wa ninu faili ELF lọtọ. Ẹya yii ngbanilaaye lati ṣe ifilọlẹ apakan akọkọ ti eto naa, eyiti yoo gbe awọn paati miiran bi o ṣe nilo lakoko iṣẹ (fun apẹẹrẹ, o le ya oluwo PDF ti a ṣe sinu faili lọtọ, eyiti yoo gbejade nikan nigbati olumulo ba ṣii PDF. faili).

    LLD Asopọmọra mu si iwaju si ipinle ti o dara fun sisopo ekuro Linux fun arm32_7, arm64, ppc64le ati x86_64 architectures.
    Awọn aṣayan titun "-" (jade si stdout), "-[ko-] allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", "- z ifunc-noplt" ati "-z wọpọ-page-iwọn". Fun faaji AArch64, atilẹyin fun BTI (Atọka Àkọlé Ẹka) ati awọn ilana PAC (koodu Ijeri Itọkasi) ti ni afikun. Atilẹyin fun MIPS, RISC-V ati awọn iru ẹrọ PowerPC ti ni ilọsiwaju ni pataki. Atilẹyin akọkọ ti a ṣafikun fun sisopọ agbara fun WebAssembly;

  • Ninu libc++ imuse iwọn awọn iṣẹ, std :: is_constant_evaluated, std :: midpoint ati std :: lerp, awọn ọna "iwaju" ati "pada" ti fi kun si std :: igba, awọn eroja ti awọn iru std :: is_unbounded_array ati std :: is_bounded_array ti a ti fi kun , awọn agbara std ti gbooro: atomiki. Atilẹyin fun GCC 4.9 ti dawọ duro (le ṣee lo pẹlu GCC 5.1 ati awọn idasilẹ tuntun). Atilẹyin ti a ṣafikun WASI (Interface System WebAssembly, ohun ni wiwo fun lilo WebAssembly ita awọn kiri);
  • Awọn iṣapeye tuntun ti ṣafikun. Iyipada iyipada ti awọn ipe memcmp si bcmp ni awọn ipo kan. Ṣiṣayẹwo ṣiṣayẹwo iwọn ti a ṣe imuse fun awọn tabili fo ninu eyiti awọn bulọọki iyipada kekere ko le de ọdọ tabi nigbati awọn ilana ko ba lo, fun apẹẹrẹ, nigba pipe awọn iṣẹ pẹlu ofo;
  • Afẹyinti fun faaji RISC-V ti ni imuduro, eyiti ko si ni ipo bi esiperimenta ati pe a kọ nipasẹ aiyipada. Pese atilẹyin iran koodu kikun fun RV32I ati RV64I ilana ṣeto awọn iyatọ pẹlu awọn amugbooro MAFDC;
  • Awọn ilọsiwaju lọpọlọpọ ni a ti ṣe si awọn ẹhin fun X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ati awọn faaji ile PowerPC. Fun apẹẹrẹ, fun faaji
    AArch64 ṣafikun atilẹyin fun SVE2 (Scalable Vector Extension 2) ati awọn ilana MTE (Awọn amugbooro Tagging Memory); ni ẹhin ARM, atilẹyin fun Armv8.1-M faaji ati itẹsiwaju MVE (M-Profile Vector Extension) ti ṣafikun. Atilẹyin fun faaji GFX10 (Navi) ti ṣafikun si ẹhin ẹhin AMDGPU, awọn agbara pipe iṣẹ ni a mu ṣiṣẹ nipasẹ aiyipada, ati pe o ti mu iwe-iwọle apapọ kan ṣiṣẹ. niluu Abeôokuta, (Data-Parallel primitives).

  • LLDB debugger ni bayi ni afihan awọ fun awọn ẹhin ẹhin ati atilẹyin afikun fun DWARF4 debug_types ati awọn bulọọki debug_info DWARF5;
  • Atilẹyin fun nkan ati awọn faili ṣiṣe ni ọna kika COFF ti jẹ afikun si awọn ohun elo lvm-objcopy ati lvm-strip.

orisun: opennet.ru

Fi ọrọìwòye kun