Tso tawm ntawm LLVM 11.0 compiler suite

Tom qab rau lub hlis ntawm kev loj hlob hais tawm qhov project tso tawm LWM 11.0 - GCC-tshaj cov cuab yeej (compilers, optimizers thiab code generators), compiling cov kev pab cuam rau hauv nruab nrab bitcode ntawm RISC-zoo li cov lus qhia virtual (qib-theem virtual tshuab nrog ntau theem optimization system). Lub generated pseudocode tuaj yeem hloov dua siab tshiab siv JIT compiler rau hauv cov lus qhia tshuab ncaj qha thaum lub sijhawm ua haujlwm.

Qhov kev hloov pauv tseem ceeb hauv qhov kev tso tawm tshiab yog qhov suav nrog Flank, frontend rau cov lus Fortran. Flang txhawb nqa Fortran 2018, OpenMP 4.5 thiab OpenACC 3.0, tab sis kev txhim kho ntawm qhov project tseem tsis tau ua tiav thiab qhov kawg ntawm sab xub ntiag yog txwv rau kev txheeb xyuas cov lej thiab tshuaj xyuas kom raug. Tiam ntawm LLVM intermediate code tseem tsis tau txais kev txhawb nqa thiab los tsim cov ntaub ntawv ua tiav, canonical code yog tsim thiab dhau mus rau lwm Fortran compiler.

Kev Txhim Kho Hauv Clang 11.0:

  • Ntxiv qhov muaj peev xwm los kho qhov tsis pom zoo syntax tsob ntoo (AST) rau qhov tawg C++ code, uas tuaj yeem siv los pab kuaj xyuas qhov tsis raug thiab muab cov ntaub ntawv ntxiv rau cov khoom siv sab nraud xws li clang-tidy thiab clangd. Lub feature tau qhib los ntawm lub neej ntawd rau C ++ code thiab tswj los ntawm "-Xclang -f[no-]recovery-ast" kev xaiv.
  • Ntxiv cov kev kuaj mob tshiab:
    • "-Wpointer-to-int-cast" yog ib pab pawg ntawm cov lus ceeb toom txog qhov taw qhia casting rau ib hom integer int uas tsis haum rau txhua qhov txiaj ntsig tau.
    • "-Wuninitialized-const-reference" - ceeb toom txog kev dhau ntawm qhov tsis sib xws hauv cov haujlwm tsis ua haujlwm uas lees txais cov lus sib cav nrog "const" tus cwj pwm.
    • "-Wimplicit-const-int-float-conversion" - enabled los ntawm default ceeb toom txog implicit hloov dua siab tshiab ntawm ib tug tiag tiag tsis tu ncua mus rau ib tug integer hom.
  • Rau ARM platform, C ua haujlwm ua rau hauv lub compiler yog muab (Intrinsics), hloov los ntawm cov lus qhia vector zoo Arm v8.1-M MVE thiab CDE. Cov haujlwm muaj nyob rau hauv cov ntaub ntawv header arm_mve.h thiab arm_cde.h.
  • Ntxiv ib txheej ntawm cov lej txuas ntxiv _ExtInt(N), tso cai rau koj los tsim hom uas tsis muaj ntau lub zog ntawm ob, uas tuaj yeem ua tiav zoo ntawm FPGA / HLS. Piv txwv, _ExtInt(7) txhais ib hom integer uas muaj 7 khoom.
  • Ntxiv macros uas txhais tau tias kev txhawb nqa rau kev ua haujlwm hauv C ua haujlwm raws li ARM SVE (Scalable Vector Extension) cov lus qhia:
    __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. Piv txwv li, __ARM_FEATURE_SVE macro yog txhais thaum tsim AArch64 code los ntawm kev teeb tsa cov kab lus xaiv "-march=armv8-a+sve".

  • Tus chij "-O" tam sim no tau txheeb xyuas nrog "-O1" hom kev ua kom zoo dua "-O2".
  • Ntxiv tshiab compiler chij:
    • "-fstack-clash-protection" - pab tiv thaiv kev sib tshuam ntawm pawg thiab heap.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - tso cai rau koj xaiv hom kev zam tshwj xeeb rau cov lej ntab.
    • "-ffp-model={precise, nruj,fast}" - Yooj yim nkag mus rau ntau txoj kev xaiv tshwj xeeb rau cov lej ntab.
    • "-fpch-codegen" thiab "-fpch-debuginfo" los tsim ib lub taub hau precompiled (PCH) nrog cov khoom cais cov ntaub ntawv rau cov lej thiab kev debuginfo.
    • "-fsanitize-kev pab them nqi-allowlist" thiab "-fsanitize-kev pab them nqi-blocklist" rau kev tshuaj xyuas cov kev pab them nqi kuaj dawb thiab cov npe dub.
    • β€œ-mtls-size={12,24,32,48}” los xaiv TLS (xov-loj cia) loj.
    • "-menable-experimental-extension" los pab kom sim RISC-V txuas ntxiv.
  • Lub neej ntawd hom rau C yog "-fno-common", uas tso cai rau kev nkag mus tau zoo dua rau lub ntiaj teb hloov pauv ntawm qee lub platform.
  • Lub neej ntawd module cache tau raug tsiv los ntawm /tmp mus rau ~/.cache directory. Txhawm rau hla dhau, koj tuaj yeem siv "-fmodules-cache-path =" chij.
  • Tus txheej txheem C hom lus tau hloov kho los ntawm gnu11 txog gnu17.
  • Ntxiv kev txhawb nqa ua ntej rau GNU C txuas ntxiv "yam inlineΒ» ntxiv cov khoom sib dhos. Qhov txuas ntxiv tseem raug tshuaj xyuas, tab sis tsis ua tiav hauv txhua txoj kev.
  • Lub peev xwm cuam tshuam nrog OpenCL thiab CUDA kev txhawb nqa tau nthuav dav. Ntxiv kev txhawb nqa rau OpenCL 2.0 thaiv kev kuaj mob thiab siv OpenMP 5.0 nta tshiab.
  • Ntxiv IndentExternBlock kev xaiv rau clang-format utility rau kev sib raug zoo nyob rau hauv extern "C" thiab extern "C ++" blocks.
  • Tus neeg soj ntsuam zoo li qub tau txhim kho kev tuav ntawm cov neeg tsim khoom qub txeeg qub teg hauv C ++. Ntxiv cov tshev tshiab alpha.core.C11Lock thiab alpha.fuchsia.Lock txhawm rau txheeb xyuas cov xauv, alpha.security.cert.pos.34c txhawm rau txheeb xyuas kev siv tsis zoo ntawm putenv, webkit.NoUncountedMemberChecker thiab webkit.RefCntblBaseVirtualDtor txhawm rau txheeb xyuas cov teeb meem uas tsis suav nrog .cplusplus .SmartPtr los xyuas qhov null ntse pointer dereference.
  • Hauv linter clang-tidy ntxiv ib feem loj ntawm cov tshev tshiab.
  • Clangd caching neeg rau zaub mov (Clang Server) tau txhim kho kev ua tau zoo thiab ntxiv cov peev xwm kuaj mob tshiab.

ntsiab kev tsim kho tshiab LWM 11.0:

  • Lub kaw lus tsim tau raug hloov mus siv Python 3. Yog tias Python 3 tsis muaj, nws tuaj yeem rov qab mus siv Python 2.
  • Lub hauv ntej kawg nrog lub compiler rau Go lus (llgo) tsis suav nrog kev tso tawm, uas tej zaum yuav raug kho dua tshiab yav tom ntej.
  • Lub vector-function-abi-variant tus cwj pwm tau muab ntxiv rau qhov nruab nrab sawv cev (IR) los piav qhia txog kev ua haujlwm ntawm scalar thiab vector functions rau vectorize hu. Los ntawm llvm::VectorType muaj ob hom vector hom llvm::FixedVectorType thiab llvm::ScalableVectorType.
  • Branching raws li udef qhov tseem ceeb thiab dhau undef qhov tseem ceeb rau cov qauv tsev qiv ntawv ua haujlwm tau lees paub tias yog tus cwj pwm tsis tau hais tseg. IN
    memset/memcpy/memmove tso cai hla undef pointers, tab sis yog hais tias tus parameter nrog loj yog xoom.

  • LLJIT tau ntxiv kev txhawb nqa rau kev ua haujlwm zoo li qub los ntawm LLJIT::initialize thiab LLJIT::deinitialize txoj kev. Muaj peev xwm ntxiv cov tsev qiv ntawv zoo li qub rau JITDylib siv cov chav kawm StaticLibraryDefinitionGenerator tau ua tiav. Ntxiv C API rau ORCv2 (API rau tsim JIT compilers).
  • Kev them nyiaj yug rau Cortex-A64, Cortex-A34, Cortex-A77 thiab Cortex-X78 processors tau ntxiv rau qhov backend rau AArch1 architecture. Ua tiav ARMv8.2-BF16 (BFloat16) thiab ARMv8.6-A txuas ntxiv, suav nrog RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Kev Ua Haujlwm Saib Xyuas virtualization) thiab ARMv8.0-DGH (Cov ntaub ntawv sib sau ua ke). Lub peev xwm los tsim cov cai rau kev ua haujlwm-txhim kho rau SVE vector cov lus qhia tau muab.
  • Kev them nyiaj yug rau Cortex-M55, Cortex-A77, Cortex-A78 thiab Cortex-X1 processors tau ntxiv rau qhov backend rau ARM architecture. Extensions tau siv
    Armv8.6-A Matrix Multiply thiab RMv8.2-AA32BF16 BFloat16.

  • Kev them nyiaj yug rau code tiam rau POWER10 processors tau ntxiv rau lub backend rau PowerPC architecture. Loop optimizations tau nthuav dav thiab kev txhawb nqa ntab taw tes tau txhim kho.
  • Lub backend rau RISC-V architecture tso cai rau kev lees paub ntawm thaj ua rau thaj uas txhawb nqa cov kev qhia txuas ntxiv uas tseem tsis tau pom zoo.
  • Lub backend rau AVR architecture tau raug xa mus los ntawm kev sim qeb kom ruaj khov, suav nrog hauv kev faib tawm yooj yim.
  • Lub backend rau x86 architecture txhawb Intel AMX thiab TSXLDTRK cov lus qhia. Ntxiv kev tiv thaiv tawm tsam LVI (Load Value Injection), thiab tseem siv cov kev ua haujlwm dav dav ntawm Kev Ua Phem Txhaum Cai los thaiv kev tawm tsam los ntawm kev xav txog kev ua haujlwm ntawm CPU.
  • Hauv qhov backend rau SystemZ architecture, kev txhawb nqa rau MemorySanitizer thiab LeakSanitizer tau ntxiv.
  • Ntxiv kev txhawb nqa rau cov ntaub ntawv header nrog lej tsis tu ncua rau Libc ++ .
  • Nthuav LLD linker peev xwm. Txhim kho kev txhawb nqa rau ELF hom, suav nrog cov kev xaiv ntxiv "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- ib-module", "-unique", "-rosegment", "-xov = N". Ntxiv "--time-trace" kev xaiv los khaws cov kab mus rau hauv cov ntaub ntawv, uas tuaj yeem txheeb xyuas ntawm chrome: // tracing interface hauv Chrome.

Tau qhov twg los: opennet.ru

Ntxiv ib saib