Pagpagawas sa LLVM 9.0 compiler set

Human sa unom ka bulan sa kalamboan gipresentar pagpagawas sa proyekto LLVM 9.0 β€” GCC-compatible nga mga himan (compilers, optimizers ug code generators), pag-compile sa mga programa ngadto sa intermediate bitcode sa RISC-like virtual nga mga instruksiyon (low-level virtual machine nga adunay multi-level optimization system). Ang namugna nga pseudocode mahimong mabag-o gamit ang JIT compiler ngadto sa mga instruksiyon sa makina direkta sa panahon sa pagpatuman sa programa.

Ang mga bag-ong feature sa LLVM 9.0 naglakip sa pagtangtang sa experimental design tag gikan sa target nga RISC-V nga plataporma, C++ nga suporta para sa OpenCL, ang abilidad sa pagbahin sa usa ka programa ngadto sa dynamically loaded parts sa LLD, ug ang pagpatuman sa β€œasm goto", gigamit sa Linux kernel code. Ang libc++ midugang og suporta para sa WASI (WebAssembly System Interface), ug ang LLD midugang og inisyal nga suporta para sa WebAssembly nga dinamikong pagsumpay.

Mga pagpaayo sa Clang 9.0:

  • Gidugang pagpatuman sa GCC-specific nga ekspresyon "asm goto", nga nagtugot kanimo sa pagbalhin gikan sa usa ka assembler inline block ngadto sa usa ka label sa C code. Kini nga bahin gikinahanglan aron matukod ang Linux kernel sa "CONFIG_JUMP_LABEL=y" mode gamit ang Clang sa mga sistema nga adunay x86_64 nga arkitektura. Gikonsiderar ang mga pagbag-o nga gidugang sa miaging mga pagpagawas, ang Linux kernel mahimo na nga matukod sa Clang para sa x86_64 nga arkitektura (kaniadto nagtukod lamang alang sa bukton, aarch64, ppc32, ppc64le ug mips nga mga arkitektura ang gisuportahan). Dugang pa, ang mga proyekto sa Android ug ChromeOS nabag-o na aron magamit ang Clang alang sa pagtukod sa kernel, ug gisulayan sa Google ang Clang ingon ang panguna nga plataporma alang sa pagtukod sa mga kernels alang sa mga sistema sa produksiyon sa Linux. Sa umaabot, ang ubang mga sangkap sa LLVM mahimong magamit sa proseso sa pagtukod sa kernel, lakip ang LLD, llvm-objcopy, llvm-ar, llvm-nm, ug llvm-objdump;
  • Gidugang nga suporta sa eksperimento alang sa paggamit sa C++ 17 sa OpenCL. Ang piho nga mga bahin naglakip sa suporta alang sa address space attributes, blocking address space conversion pinaagi sa type casting operators, probisyon sa vector type sama sa OpenCL for C, ang presensya sa piho nga OpenCL type para sa mga hulagway, panghitabo, channels, etc.
  • Gidugang ang bag-ong mga flag sa compiler nga "-ftime-trace" ug "-ftime-trace-granularity=N" aron makamugna og usa ka taho sa oras sa pagpatuman sa lain-laing mga yugto sa frontend (parsing, initialization) ug backend (optimization stages). Ang report gitipigan sa json format, compatible sa chrome://tracing ug speedscope.app;
  • Gidugang nga pagproseso sa "__declspec(allocator)" specifier ug henerasyon sa nag-uban nga impormasyon sa pag-debug nga nagtugot kanimo sa pag-monitor sa konsumo sa memorya sa palibot sa Visual Studio;
  • Alang sa C nga lengguwahe, gidugang ang suporta alang sa "__FILE_NAME__" nga macro, nga susama sa "__FILE__" nga macro, apan naglakip lamang sa ngalan sa file nga wala ang tibuok nga agianan;
  • Gipalapdan sa C++ ang suporta alang sa mga attribute sa address space aron matabonan ang lain-laing mga feature sa C++, lakip ang parameter ug argument patterns, reference type, return type inference, objects, auto-generated functions, built-in operators, ug uban pa.
  • Ang mga kapabilidad nga may kalabutan sa suporta alang sa OpenCL, OpenMP ug CUDA gipalapdan. Naglakip kini sa inisyal nga suporta alang sa implicit nga paglakip sa mga built-in nga OpenCL functions (ang "-fdeclare-opencl-builtins" nga bandila gidugang), ang cl_arm_integer_dot_product extension gipatuman, ug ang diagnostic tools gipalapdan;
  • Ang buhat sa static analyzer gipauswag ug ang dokumentasyon sa paghimo sa static nga pagtuki gidugang. Gidugang nga mga bandila aron ipakita ang magamit nga mga module sa checker ug gisuportahan nga mga kapilian (β€œ-analyzer-checker[-option]-help”, β€œ-analyzer-checker[-option]-help-alpha” ug β€œ-analyzer-checker[-option]-help "-developer"). Gidugang ang bandila nga "-analyzer-werror" aron isipon ang mga pasidaan ingon mga sayup.
    Gidugang bag-ong mga mode sa pag-verify:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling aron mailhan ang dili luwas nga mga gawi sa pagtrabaho sa mga buffer;
    • osx.MIGCecker aron pangitaon ang mga paglapas sa mga lagda sa tawag sa MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast aron makit-an ang sayop nga XNU libkern object conversions;
    • apiModeling.llvm uban sa usa ka set sa modeling checking functions sa pag-ila sa mga sayop sa LLVM codebase;
    • Gipalig-on nga kodigo alang sa pagsusi sa wala'y una nga C++ nga mga butang (UninitializedObject sa optin.cplusplus nga pakete);
  • Ang clang-format utility midugang og suporta alang sa pag-format sa code sa C# nga pinulongan ug naghatag og suporta alang sa code formatting style nga gigamit sa Microsoft;
  • Ang clang-cl, usa ka alternatibong interface sa command-line nga naghatag og option-level compatibility sa cl.exe compiler nga gilakip sa Visual Studio, midugang og heuristics sa pagtratar sa wala nga mga file isip command-line nga mga opsyon ug pagpakita og katugbang nga pasidaan (pananglitan, sa pagdagan sa "clang-cl /diagnostic:caret /c test.cc");
  • Daghang bahin sa bag-ong mga tseke ang gidugang sa linter clang-tidy, lakip ang dugang nga mga tseke nga espesipiko sa OpenMP API;
  • Gipalapdan mga kapabilidad sa server clangd (Clang Server), diin ang background index building mode gipalihok pinaagi sa default, suporta alang sa konteksto nga mga aksyon nga adunay code gidugang (variable retrieval, pagpalapad sa auto ug macro nga mga kahulugan, pagkakabig sa mga naka-eskapo nga mga kuwerdas ngadto sa mga wala makaikyas), ang abilidad sa pagpakita mga pasidaan gikan sa Clang-tidy, gipalapdan nga diagnostics sa mga sayop sa header files ug gidugang ang abilidad sa pagpakita sa impormasyon mahitungod sa matang hierarchy;

nag-unang mga inobasyon LLVM 9.0:

  • Usa ka eksperimento nga bahin sa partitioning gidugang sa LLD linker, nga nagtugot kanimo sa pagbahin sa usa ka programa ngadto sa pipila ka mga bahin, ang matag usa nahimutang sa usa ka bulag nga ELF file. Kini nga bahin nagtugot kanimo sa paglansad sa nag-unang bahin sa programa, nga mag-load sa ubang mga sangkap kung gikinahanglan sa panahon sa operasyon (pananglitan, mahimo nimong ibulag ang built-in nga PDF viewer sa usa ka bulag nga file, nga mag-load lamang kung ablihan sa user ang PDF. file).

    LLD Linker gidala sa atubangan sa usa ka estado nga angay alang sa pag-link sa Linux kernel alang sa arm32_7, arm64, ppc64le ug x86_64 nga mga arkitektura.
    Bag-ong mga opsyon "-" (output sa stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" ug "-z common-page-size". Alang sa AArch64 nga arkitektura, suporta alang sa BTI (Branch Target Indicator) ug PAC (Pointer Authentication Code) nga mga instruksyon gidugang. Ang suporta alang sa mga platform sa MIPS, RISC-V ug PowerPC labi nga gipauswag. Gidugang inisyal nga suporta alang sa dinamikong pag-link alang sa WebAssembly;

  • Sa libc++ gipatuman function ssize, std:: is_constant_evaluated, std::midpoint ug std::lerp, mga pamaagi nga "atubangan" ug "likod" gidugang sa std::span, mga kinaiya sa mga tipo std::is_unbounded_array ug std::is_bounded_array gidugang , ang mga kapabilidad sa std gipalapdan: :atomic. Ang suporta alang sa GCC 4.9 gihunong na (mahimong gamiton sa GCC 5.1 ug mas bag-ong mga pagpagawas). Gidugang nga suporta WASI (WebAssembly System Interface, usa ka interface alang sa paggamit sa WebAssembly gawas sa browser);
  • Gidugang ang bag-ong mga pag-optimize. Gipaandar ang pagkakabig sa memcmp nga mga tawag sa bcmp sa pipila ka mga sitwasyon. Gipatuman nga pagtangtang sa range checking alang sa jump tables diin ang ubos nga switch blocks dili maabot o kung ang mga instruksiyon wala gigamit, pananglitan, sa pagtawag sa mga function nga adunay type void;
  • Ang backend alang sa RISC-V nga arkitektura napalig-on, nga wala na giposisyon isip eksperimento ug gitukod pinaagi sa default. Naghatag bug-os nga suporta sa henerasyon sa code alang sa RV32I ug RV64I nga mga variant sa panudlo nga set nga adunay mga extension sa MAFDC;
  • Daghang mga pag-uswag ang nahimo sa mga backend alang sa X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ug PowerPC nga mga arkitektura. Pananglitan, alang sa arkitektura
    Ang AArch64 midugang og suporta alang sa SVE2 (Scalable Vector Extension 2) ug MTE (Memory Tagging Extensions) nga mga instruksyon; sa ARM backend, suporta alang sa Armv8.1-M nga arkitektura ug ang MVE (M-Profile Vector Extension) nga extension gidugang. Ang suporta alang sa GFX10 (Navi) nga arkitektura gidugang sa AMDGPU backend, ang mga kapabilidad sa pagtawag sa function gipalihok pinaagi sa default, ug ang usa ka hiniusa nga pass gi-aktibo. DPP (Data-Parallel Primitives).

  • Ang LLDB debugger karon adunay color highlighting para sa backtraces ug dugang suporta para sa DWARF4 debug_types ug DWARF5 debug_info blocks;
  • Ang suporta para sa object ug executable nga mga file sa COFF format gidugang sa llvm-objcopy ug llvm-strip utilities.

Source: opennet.ru

Idugang sa usa ka comment