Pagpagawas sa LLVM 11.0 compiler set

Human sa unom ka bulan sa kalamboan gipresentar pagpagawas sa proyekto LLVM 11.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 yawe nga pagbag-o sa bag-ong pagpagawas mao ang paglakip sa Flank, frontend para sa Fortran nga pinulongan. Gisuportahan sa Flang ang Fortran 2018, OpenMP 4.5 ug OpenACC 3.0, apan ang pag-uswag sa proyekto wala pa nahuman ug ang atubangan nga tumoy limitado sa pag-parse sa code ug pagsusi sa katukma. Ang paghimo sa LLVM intermediate code wala pa gisuportahan ug aron makamugna og mga executable nga mga file, ang canonical code gihimo ug gipasa ngadto sa usa ka eksternal nga Fortran compiler.

Mga pagpaayo sa Clang 11.0:

  • Gidugang ang abilidad sa pagpasig-uli sa abstract syntax tree (AST) para sa nabuak nga C++ code, nga magamit sa pagtabang sa pag-diagnose sa mga sayop ug paghatag og dugang nga impormasyon sa mga external utilities sama sa clang-tidy ug clangd. Ang feature gi-enable pinaagi sa default para sa C++ code ug kontrolado pinaagi sa "-Xclang -f[no-]recovery-ast" nga mga opsyon.
  • Gidugang bag-ong diagnostic mode:
    • Ang "-Wpointer-to-int-cast" usa ka grupo sa mga pasidaan bahin sa paghulog sa mga pointer sa usa ka integer nga tipo nga int nga dili ma-accommodate ang tanan nga posible nga kantidad.
    • "-Wuninitialized-const-reference" - pahimangno mahitungod sa pagpasa sa wala'y una nga mga variable sa function parameters nga modawat sa reference arguments nga adunay "const" attribute.
    • "-Wimplicit-const-int-float-conversion" - gipalihok pinaagi sa default nga pasidaan bahin sa dili klaro nga pagkakabig sa usa ka tinuod nga kanunay ngadto sa usa ka integer nga tipo.
  • Alang sa ARM nga plataporma, ang C function nga gitukod sa compiler gihatag (Intrinsics), gipulihan sa episyente nga mga instruksyon sa vector Arm v8.1-M MVE ug CDE. Ang magamit nga mga gimbuhaton gihubit sa mga file sa header arm_mve.h ug arm_cde.h.
  • Gidugang usa ka hugpong sa mga extended integer type _ExtInt(N), nga nagtugot kanimo sa paghimo og mga tipo nga dili multiples sa mga gahum sa duha, nga mahimong epektibong maproseso sa FPGA/HLS. Pananglitan, _ExtInt(7) naghubit sa usa ka integer nga tipo nga naglangkob sa 7 ka tipik.
  • Gidugang nga mga macro nga naghubit sa suporta alang sa mga built-in nga C function base sa ARM SVE (Scalable Vector Extension) nga mga panudlo:
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. Pananglitan, ang __ARM_FEATURE_SVE macro gihubit sa paghimo sa AArch64 code pinaagi sa pagbutang sa command line nga opsyon "-march=armv8-a+sve".

  • Ang "-O" nga bandila giila na sa "-O1" optimization mode imbes nga "-O2".
  • Gidugang bag-ong mga flag sa compiler:
    • "-fstack-clash-protection" - makahimo sa pagpanalipod batok sa intersection sa stack ug heap.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - nagtugot kanimo sa pagpili sa exception handler mode para sa floating point nga mga numero.
    • "-ffp-model={precise,strict,fast}" - Gipasayon ​​ang pag-access sa usa ka serye sa mga espesyal nga opsyon alang sa floating point nga mga numero.
    • "-fpch-codegen" ug "-fpch-debuginfo" aron makamugna ug precompiled header (PCH) nga adunay bulag nga object files para sa code ug debuginfo.
    • "-fsanitize-coverage-allowlist" ug "-fsanitize-coverage-blocklist" para sa pagsusi sa coverage testing puti ug itom nga listahan.
    • "-mtls-size={12,24,32,48}" aron mapili ang TLS (thread-local storage) nga gidak-on.
    • "-menable-experimental-extension" aron mahimo ang eksperimento nga mga extension sa RISC-V.
  • Ang default mode alang sa C mao ang "-fno-common", nga nagtugot alang sa mas episyente nga pag-access sa mga global variable sa pipila nga mga platform.
  • Ang default module cache gibalhin gikan sa /tmp ngadto sa ~/.cache directory. Aron ma-override, mahimo nimong gamiton ang bandila nga "-fmodules-cache-path=".
  • Ang default nga C language standard gi-update gikan sa gnu11 ngadto sa gnu17.
  • Gidugang preliminary nga suporta alang sa GNU C extension "asm inlineΒ»aron idugang ang assembler inserts. Ang extension gisusi pa, apan wala giproseso sa bisan unsang paagi.
  • Ang mga kapabilidad nga nalangkit sa suporta sa OpenCL ug CUDA gipalapdan. Gidugang nga suporta alang sa OpenCL 2.0 block diagnostics ug gipatuman ang bag-ong mga bahin sa OpenMP 5.0.
  • Gidugang ang IndentExternBlock nga kapilian sa clang-format nga utility para sa pag-align sa sulod sa extern "C" ug extern "C++" blocks.
  • Ang static analyzer miuswag sa pagdumala sa napanunod nga mga konstruktor sa C++. Gidugang ang bag-ong mga tseke nga alpha.core.C11Lock ug alpha.fuchsia.Lock aron masusi ang mga kandado, alpha.security.cert.pos.34c aron mahibal-an ang dili luwas nga paggamit sa putenv, webkit.NoUncountedMemberChecker ug webkit.RefCntblBaseVirtualDtor aron makit-an ang mga problema sa dili maihap nga mga tipo, alpha .cplusplus .SmartPtr aron masusi ang null smart pointer dereference.
  • Sa linter clang-hinlo gidugang dako nga bahin sa bag-ong mga tseke.
  • Ang clangd caching server (Clang Server) nakapauswag sa pasundayag ug nagdugang bag-ong mga kapabilidad sa diagnostic.

nag-unang mga inobasyon LLVM 11.0:

  • Ang sistema sa pagtukod gibalhin sa paggamit sa Python 3. Kung ang Python 3 wala magamit, posible nga i-rollback ang paggamit sa Python 2.
  • Ang atubangan nga tumoy uban sa compiler alang sa Go nga pinulongan (llgo) wala iapil sa pagpagawas, nga mahimong ma-restructure sa umaabot.
  • Ang vector-function-abi-variant attribute gidugang sa intermediate representation (IR) aron ihulagway ang pagmapa tali sa scalar ug vector functions aron ma-vector ang mga tawag. Gikan sa llvm :: VectorType adunay duha ka managlahi nga matang sa vector llvm :: FixedVectorType ug llvm :: ScalableVectorType.
  • Ang branching base sa udef values ​​ug pagpasa sa undef values ​​ngadto sa standard library functions giila nga undefined behavior. SA
    Ang memset/memcpy/memmove nagtugot sa pagpasa sa mga undef pointer, apan kung ang parameter nga adunay gidak-on mao ang zero.

  • Ang LLJIT adunay dugang nga suporta alang sa paghimo sa mga static nga pagsugod pinaagi sa LLJIT:: inisyal ug LLJIT:: deinitialize nga mga pamaagi. Ang abilidad sa pagdugang sa static nga mga librarya sa JITDylib gamit ang StaticLibraryDefinitionGenerator nga klase gipatuman. Gidugang ang C API alang sa ORCv2 (API alang sa pagtukod sa JIT compiler).
  • Ang suporta alang sa Cortex-A64, Cortex-A34, Cortex-A77 ug Cortex-X78 nga mga processor gidugang sa backend alang sa AArch1 nga arkitektura. Gipatuman ang ARMv8.2-BF16 (BFloat16) ug ARMv8.6-A nga mga extension, lakip ang RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) ug ARMv8.0-DGH (Pahibalo sa pagkolekta sa datos). Gihatag ang abilidad sa pagmugna og code alang sa mga built-in nga function-bindings sa mga panudlo sa vector sa SVE.
  • Ang suporta alang sa Cortex-M55, Cortex-A77, Cortex-A78 ug Cortex-X1 nga mga processor gidugang sa backend alang sa ARM nga arkitektura. Gipatuman ang mga extension
    Armv8.6-A Matrix Multiply ug RMv8.2-AA32BF16 BFloat16.

  • Ang suporta alang sa paghimo sa code alang sa mga processor sa POWER10 gidugang sa backend alang sa arkitektura sa PowerPC. Ang mga pag-optimize sa loop gipalapdan ug ang suporta sa floating point gipauswag.
  • Ang backend alang sa RISC-V nga arkitektura nagtugot sa pagdawat sa mga patch nga nagsuporta sa mga eksperimento nga gipalawig nga mga set sa instruksiyon nga wala pa opisyal nga giaprobahan.
  • Ang backend alang sa arkitektura sa AVR gibalhin gikan sa eksperimento nga kategorya ngadto sa stable, gilakip sa sukaranan nga pag-apod-apod.
  • Ang backend alang sa x86 nga arkitektura nagsuporta sa Intel AMX ug TSXLDTRK mga instruksyon. Gidugang nga proteksyon batok sa mga pag-atake LVI (Load Value Injection), ug nagpatuman usab sa usa ka kinatibuk-ang Speculative Execution Side Effect Suppression nga mekanismo aron babagan ang mga pag-atake tungod sa speculative execution sa mga operasyon sa CPU.
  • Sa backend alang sa SystemZ nga arkitektura, suporta alang sa MemorySanitizer ug LeakSanitizer gidugang.
  • Gidugang nga suporta alang sa header file nga adunay mga matematikal nga makanunayon sa Libc ++ .
  • Gipalapdan LLD linker kapabilidad. Gipauswag nga suporta alang sa ELF format, lakip ang dugang nga mga kapilian nga "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-unique", "-rosegment", "-threads=N". Gidugang ang "--time-trace" nga kapilian aron i-save ang pagsubay sa usa ka file, nga mahimo’g analisahon pinaagi sa chrome://tracing interface sa Chrome.

Source: opennet.ru

Idugang sa usa ka comment