Sakin saitin mai tarawa na LLVM 11.0

Bayan watanni shida na ci gaba gabatar sakin aikin LLVM 11.0 - Kayan aikin GCC masu jituwa (masu tarawa, masu haɓakawa da masu samar da lambar), haɗa shirye-shirye a cikin matsakaicin bitcode na RISC-kamar umarnin kama-da-wane (na'ura mai ƙarancin ƙima tare da tsarin ingantawa da yawa). Za'a iya canza lambar ƙirar ƙira ta amfani da mai tara JIT zuwa umarnin injin kai tsaye a lokacin aiwatar da shirin.

Babban canji a cikin sabon sakin shine haɗawa da Bangaranci, gaban gaba don yaren Fortran. Flang yana goyan bayan Fortran 2018, OpenMP 4.5 da OpenACC 3.0, amma ci gaban aikin bai riga ya kammala ba kuma ƙarshen gaba yana iyakance ga ƙididdigar lambar da bincika daidai. Ƙirƙirar lambar matsakaiciyar LLVM har yanzu ba a tallafawa kuma don samar da fayiloli masu aiwatarwa, an ƙirƙira lambar canonical kuma an wuce zuwa ga mai tarawa na Fortran na waje.

Ingantawa a cikin Clang 11.0:

  • An ƙara ikon maido da bishiyar syntax mai ƙima (AST) don karyewar lambar C ++, wanda za'a iya amfani dashi don taimakawa wajen gano kurakurai da bayar da ƙarin bayani ga abubuwan amfani na waje kamar clang-tidy da clangd. An kunna fasalin ta tsohuwa don lambar C++ kuma ana sarrafa ta ta zaɓin "-Xclang -f[no-]recover-ast".
  • An ƙara sabbin hanyoyin bincike:
    • "-Wpointer-to-int-cast" ƙungiya ce ta gargaɗi game da jefar da ma'ana zuwa nau'in int ɗin int wanda baya ɗaukar duk ƙimar ƙima.
    • "-Wuninitialized-const-reference" - gargadi game da wucewar sauye-sauye marasa tushe a cikin sigogin aiki waɗanda ke karɓar muhawarar tunani tare da sifa "const".
    • "-Wimplicit-const-int-float-conversion" - an kunna ta ta tsohuwa gargadi game da jujjuyawar madaidaicin madaidaici zuwa nau'in lamba.
  • Don dandamali na ARM, ana ba da ayyukan C da aka gina a cikin mai tarawa (Abubuwan ciki), maye gurbinsu da ingantaccen umarnin vector Arm v8.1-M MVE da CDE. Ana bayyana ayyukan da ake da su a cikin fayilolin rubutun arm_mve.h da arm_cde.h.
  • Kara saitin tsawaita nau'ikan integer _ExtInt(N), yana ba ku damar ƙirƙirar nau'ikan waɗanda ba su da yawa na iko biyu ba, waɗanda za'a iya sarrafa su yadda yakamata akan FPGA/HLS. Alal misali, _ExtInt(7) yana bayyana nau'in lamba wanda ya ƙunshi 7 bits.
  • Ƙara macros waɗanda ke ayyana tallafi don ginanniyar ayyukan C dangane da umarnin 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. Misali, ana bayyana macro __ARM_FEATURE_SVE lokacin samar da lambar AArch64 ta hanyar saita zaɓin layin umarni "-march=armv8-a+sve".

  • Tutar "-O" yanzu an gano shi tare da "-O1" yanayin ingantawa maimakon "-O2".
  • An ƙara sabbin tutocin masu tarawa:
    • "-fstack-clash-kariya" - yana ba da damar kariya daga intersection na tari da tsibi.
    • "-ffp-exception-behavior={kula da,maytrap,strict}" - yana ba ku damar zaɓar yanayin bangaranci don lambobi masu iyo.
    • "-ffp-model={daidai, matsananciyar, sauri}" - Yana sauƙaƙa samun dama ga jerin zaɓi na musamman don lambobi masu iyo.
    • "-fpch-codegen" da "-fpch-debuginfo" don samar da rubutun da aka riga aka haɗa (PCH) tare da fayilolin abu daban don lamba da debuginfo.
    • "-fsanitize-coverage-allowlist" da "-fsanitize-coverage-blocklist" don duba gwajin ɗaukar hoto jerin fararen da baƙi.
    • "-mtls-size={12,24,32,48}" don zaɓar girman TLS (ma'ajiyar zare-gida).
    • "-menable-experimental-extension" don ba da damar haɓaka RISC-V na gwaji.
  • Yanayin da aka saba don C shine "-fno-common", wanda ke ba da damar samun ingantaccen dama ga masu canjin duniya akan wasu dandamali.
  • An matsar da cache ɗin tsoho daga /tmp zuwa ~/.cache directory. Don sokewa, zaku iya amfani da tutar "-fmodules-cache-path=".
  • An sabunta ma'aunin harshen C na asali daga gnu11 zuwa gnu17.
  • Ƙara goyon baya na farko don tsawo na GNU C "asm inline» don ƙara abubuwan haɗawa. Har yanzu ana nazarin tsawaitawa, amma ba a sarrafa shi ta kowace hanya.
  • An faɗaɗa damar damar da ke da alaƙa da tallafin OpenCL da CUDA. Ƙara goyon baya don OpenCL 2.0 toshe bincike da aiwatar da sabbin fasalolin OpenMP 5.0.
  • Ƙara wani zaɓi na IndentExternBlock zuwa mai amfani mai tsari na dangi don daidaitawa tsakanin "C" da waje "C++" tubalan.
  • Mai nazari a tsaye ya inganta sarrafa masu ginin da aka gada a cikin C++. An ƙara sabon cak alpha.core.C11Lock da alpha.fuchsia.Lock don bincika makullai, alpha.security.cert.pos.34c don gano rashin aminci amfani da putenv, webkit.NoUncountedMemberChecker da webkit.RefCntblBaseVirtualDtor don gano matsaloli tare da nau'ikan da ba za a iya lissafa su ba, alpha. .cplusplus .SmartPtr don bincika kuskuren mai nuna wayo mara kyau.
  • A cikin linter clang-tidy kara da cewa babban sashi na sabbin cak.
  • Uwar garken caching na clangd (Clang Server) ya inganta aiki kuma ya ƙara sabbin damar gano cutar.

Main sababbin abubuwa LLVM 11.0:

  • An canza tsarin ginin zuwa amfani da Python 3. Idan Python 3 ba ya samuwa, yana yiwuwa a sake komawa zuwa amfani da Python 2.
  • Ƙarshen gaba tare da mai tara yaren Go (llgo) an cire shi daga sakin, wanda za a iya sake fasalinsa a nan gaba.
  • An ƙara sifa na vector-function-abi-variant zuwa matsakaicin wakilci (IR) don bayyana taswira tsakanin ayyukan scalar da vector don daidaita kira. Daga lvm ::VectorType akwai nau'ikan vector iri biyu lvm::FixedVectorType da lvm::ScalableVectorType.
  • An san reshe bisa ƙimar udef da ƙaddamar da ƙididdiga marasa ƙima zuwa daidaitattun ayyukan ɗakin karatu a matsayin halin da ba a bayyana ba. IN
    memset/memcpy/memmove yana ba da damar wucewar masifu ta undef, amma idan siga mai girman sifili ne.

  • LLJIT ta ƙara goyan baya don aiwatar da farkon farawa ta hanyar LLJIT :: farawa da LLJIT :: deinitialize hanyoyin. An aiwatar da ikon ƙara ɗakunan karatu na tsaye zuwa JITDylib ta amfani da ajin StaticLibraryDefinitionGenerator. An ƙara C API don ORCv2 (API don gina masu tarawa JIT).
  • An ƙara tallafi don Cortex-A64, Cortex-A34, Cortex-A77 da Cortex-X78 na'urori masu sarrafawa zuwa bangon baya don gine-ginen AArch1. Aiwatar da ARMv8.2-BF16 (BFloat16) da ARMv8.6-A kari, gami da RMv8.6-ECV (Ingantattun Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Ayyukan Sa ido na zahiri) da ARMv8.0-DGH (bayanin tattara bayanai). An ba da ikon samar da lamba don ginanniyar ayyuka-dauri zuwa umarnin vector SVE.
  • An ƙara tallafi ga Cortex-M55, Cortex-A77, Cortex-A78 da Cortex-X1 na'urori masu sarrafawa zuwa bangon baya don gine-ginen ARM. An aiwatar da kari
    Armv8.6-A Matrix Multiply da RMv8.2-AA32BF16 BFloat16.

  • An ƙara tallafi don ƙirƙira lambar don masu sarrafawa na POWER10 zuwa ga bayan ginin PowerPC. An faɗaɗa haɓakar madauki kuma an inganta tallafin wurin iyo.
  • Ƙarshen baya don gine-ginen RISC-V yana ba da damar karɓar faci waɗanda ke goyan bayan tsararren umarni na gwaji waɗanda har yanzu ba a amince da su a hukumance ba.
  • An canja wurin baya don gine-ginen AVR daga nau'in gwaji zuwa barga, an haɗa shi cikin ainihin rarraba.
  • Ƙarshen baya don gine-ginen x86 yana goyan bayan Intel AMX da umarnin TSXLDTRK. Ƙara kariya daga hare-hare LVI (Load Value Injection), kuma yana aiwatar da tsarin kawar da Tasirin Kisa na gabaɗaya don toshe hare-haren da ke haifar da hasashe na aiwatar da ayyuka akan CPU.
  • A cikin bangon baya don tsarin gine-gine na SystemZ, an ƙara tallafi don MemorySanitizer da LeakSanitizer.
  • Ƙara tallafi don fayil na kai tare da ma'aunin lissafi zuwa Libc++ .
  • Fadada Abubuwan haɗin haɗin LLD. Ingantattun tallafi don tsarin ELF, gami da ƙarin zaɓuɓɓukan "-lto-emit-asm", "--lto-dukan-shirin-ganuwar", "-print-archive-stats", "-shuffle-sections", " -thinlto- guda-module", "-unique", "-rosegment", "-threads=N". Ƙara zaɓi na "--time-trace" don adana alamar zuwa fayil, wanda za'a iya yin nazari ta hanyar chrome://tracing interface a cikin Chrome.

source: budenet.ru

Add a comment