Liberasyon LLVM 11.0 konpilatè suite a

Apre sis mwa nan devlopman prezante lage pwojè LLVM NAN — Zouti GCC-konpatib (konpilateur, optimiseur ak dèlko kòd), konpile pwogram nan bitkod entèmedyè nan enstriksyon vityèl tankou RISC (machin vityèl ba-nivo ak yon sistèm optimize milti-nivo). Pseudokod pwodwi a ka konvèti lè l sèvi avèk yon du JIT nan enstriksyon machin dirèkteman nan moman ekzekisyon pwogram lan.

Chanjman kle nan nouvo lage a te enklizyon de Flan, frontend pou lang Fortran. Flang sipòte Fortran 2018, OpenMP 4.5 ak OpenACC 3.0, men devlopman nan pwojè a poko fini ak front end limite a sa sèlman analiz kòd ak tcheke pou kòrèk. Jenerasyon kòd entèmedyè LLVM poko sipòte epi pou jenere fichye ègzèkutabl, kòd kanonik yo pwodwi epi yo pase nan yon konpilateur Fortran ekstèn.

Amelyorasyon nan Clang 11.0:

  • Te ajoute kapasite pou retabli pyebwa sentaks abstrè a (Ast) pou kòd C++ ki kase, ki ka itilize pou ede fè dyagnostik erè epi bay plis enfòmasyon sou sèvis piblik ekstèn tankou clang-tidy ak clangd. Karakteristik la aktive pa default pou kòd C++ epi li kontwole atravè opsyon "-Xclang -f[no-]recovery-ast".
  • Te ajoute nouvo mòd dyagnostik:
    • "-Wpointer-to-int-cast" se yon gwoup avètisman sou jete endikasyon sou yon kalite nonb antye relatif ki pa akomode tout valè posib.
    • "-Wuninitialized-const-reference" - avètisman sou pase varyab ki pa inisye nan paramèt fonksyon ki aksepte agiman referans ak atribi "const".
    • "-Wimplicit-const-int-float-conversion" - aktive pa default avètisman sou konvèsyon implicite nan yon konstan reyèl nan yon kalite nonb antye relatif.
  • Pou platfòm ARM a, yo bay fonksyon C ki bati nan konpilatè a (Intrinsèques), ranplase pa enstriksyon vektè efikas Arm v8.1-M MVE ak CDE. Fonksyon ki disponib yo defini nan dosye header arm_mve.h ak arm_cde.h.
  • Te ajoute yon seri kalite nonb antye ki pwolonje _ExtInt(N), ki pèmèt ou kreye kalite ki pa miltip pouvwa de, ki ka efikasman trete sou FPGA/HLS. Pou egzanp, _ExtInt(7) defini yon kalite nonb antye relatif ki gen 7 bit.
  • Te ajoute makro ki defini sipò pou fonksyon C entegre ki baze sou enstriksyon ARM SVE (Scalable Vector Extension):
    __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. Pa egzanp, makro __ARM_FEATURE_SVE defini lè w ap jenere kòd AArch64 lè w mete opsyon liy lòd "-march=armv8-a+sve".

  • Drapo "-O" kounye a idantifye ak mòd optimize "-O1" olye de "-O2".
  • Te ajoute nouvo drapo konpilatè:
    • "-fstack-clash-protection" - pèmèt pwoteksyon kont entèseksyon pil ak pil.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - pèmèt ou chwazi mòd moun k ap okipe eksepsyon pou nimewo k ap flote.
    • "-ffp-model={precise,strict,fast}" - Senplifye aksè a yon seri opsyon espesyalize pou nimewo k ap flote.
    • "-fpch-codegen" ak "-fpch-debuginfo" pou jenere yon header prekonpile (PCH) ak dosye objè separe pou kòd ak debuginfo.
    • “-fsanitize-coverage-allowlist” ak “-fsanitize-coverage-blocklist” pou tcheke lis blan ak nwa pou tès pwoteksyon yo.
    • "-mtls-size={12,24,32,48}" pou chwazi gwosè TLS (fil-lokal depo).
    • "-menable-experimental-extension" pou pèmèt ekstansyon eksperimantal RISC-V.
  • Mòd default pou C se "-fno-common", ki pèmèt aksè pi efikas nan varyab mondyal sou kèk platfòm.
  • Kachèt modil default la te deplase soti nan /tmp nan anyè ~/.cache. Pou depase, ou ka itilize drapo "-fmodules-cache-path=".
  • Estanda langaj C default la te mete ajou soti nan gnu11 rive nan gnu17.
  • Te ajoute sipò preliminè pou ekstansyon GNU C "asm inline» pou ajoute foure assembler. Ekstansyon an toujou ap analize, men li pa trete nan okenn fason.
  • Kapasite ki asosye ak sipò OpenCL ak CUDA yo te elaji. Te ajoute sipò pou dyagnostik blòk OpenCL 2.0 ak aplike nouvo karakteristik OpenMP 5.0.
  • Te ajoute opsyon IndentExternBlock nan sèvis piblik clang-fòma pou aliyman nan ekstèn "C" ak ekstèn "C++" blòk.
  • Analizè estatik la amelyore manyen konstrukteur eritye nan C++. Te ajoute nouvo chèk alpha.core.C11Lock ak alpha.fuchsia.Lock pou tcheke si gen kadna, alpha.security.cert.pos.34c pou detekte itilizasyon ensekirite putenv, webkit.NoUncountedMemberChecker ak webkit.RefCntblBaseVirtualDtor pou detekte pwoblèm ak kalite inonbrabl, alpha. .cplusplus .SmartPtr pou tcheke pou dereference pointeur entelijan nil.
  • Nan linter clang-tidy te ajoute yon gwo pòsyon nan nouvo chèk yo.
  • Sèvè Clangd Caching (Clang Server) te amelyore pèfòmans e li te ajoute nouvo kapasite dyagnostik.

Prensipal la inovasyon LLVM 11.0:

  • Sistèm konstriksyon an te chanje pou itilize Python 3. Si Python 3 pa disponib, li posib pou w retounen nan itilize Python 2.
  • Fen devan ak du pou lang Go (llgo) eskli nan lage a, ki ka restriktire nan tan kap vini an.
  • Yo te ajoute atribi vektè-fonksyon-abi-variant nan reprezantasyon entèmedyè (IR) pou dekri kat ant fonksyon eskalè ak vektè pou vektorize apèl yo. Soti nan llvm::VectorType gen de kalite vektè separe llvm::FixedVectorType ak llvm::ScalableVectorType.
  • Branchman ki baze sou valè udef ak pase valè undef nan fonksyon bibliyotèk estanda yo rekonèt kòm konpòtman endefini. NAN
    memset/memcpy/memmove pèmèt pase pwent undef, men si paramèt la ak gwosè se zewo.

  • LLJIT te ajoute sipò pou fè inisyalizasyon estatik atravè metòd LLJIT::initialize ak LLJIT::deinitialize. Kapasite pou ajoute bibliyotèk estatik nan JITDylib lè l sèvi avèk klas StaticLibraryDefinitionGenerator te aplike. Te ajoute C API pou ORCv2 (API pou bati konpilateur JIT).
  • Sipò pou Cortex-A64, Cortex-A34, Cortex-A77 ak Cortex-X78 processeurs yo te ajoute nan backend la pou achitekti AArch1. Aplike ARMv8.2-BF16 (BFloat16) ak ARMv8.6-A ekstansyon, ki gen ladan RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors Virtualization) ak ARMv8.0-DGH (Sijesyon pou rasanble done). Yo bay kapasite pou jenere kòd pou fonksyon-ankonpayman yo ak enstriksyon vektè SVE yo.
  • Sipò pou Cortex-M55, Cortex-A77, Cortex-A78 ak Cortex-X1 processeurs yo te ajoute nan backend la pou achitekti ARM. Ekstansyon aplike
    Armv8.6-A Matrice miltipliye ak RMv8.2-AA32BF16 BFloat16.

  • Sipò pou jenerasyon kòd pou processeurs POWER10 yo te ajoute nan backend pou achitekti PowerPC. Optimize bouk yo te elaji ak sipò pwen k ap flote yo te amelyore.
  • Backend pou achitekti RISC-V a pèmèt akseptasyon patch ki sipòte seri eksperimantal eksperimantal ki poko apwouve ofisyèlman.
  • Backend pou achitekti AVR yo te transfere soti nan kategori eksperimantal nan ki estab, enkli nan distribisyon debaz la.
  • Backend pou achitekti x86 sipòte enstriksyon Intel AMX ak TSXLDTRK. Te ajoute pwoteksyon kont atak LVI (Chaj Valè Enjeksyon), epi tou li aplike yon mekanis jeneral Egzekisyon spéculatif Side Effect Suppression pou bloke atak ki te koze pa ekzekisyon spéculatif nan operasyon sou CPU a.
  • Nan backend pou achitekti SystemZ la, yo te ajoute sipò pou MemorySanitizer ak LeakSanitizer.
  • Te ajoute sipò pou dosye header ak konstan matematik nan Libc++ .
  • Elaji Kapasite LLD Linker. Amelyore sipò pou fòma ELF a, ki gen ladan opsyon yo ajoute "--lto-emit-asm", "--lto-tout-pwogram-vizibilite", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-unique", "-rosegment", "-threads=N". Te ajoute opsyon "--time-trace" pou sove tras la nan yon dosye, ki ka analize atravè koòdone chrome://tracing nan Chrome.

Sous: opennet.ru

Add nouvo kòmantè