Sgaoileadh an t-sreath cruinneachaidh LLVM 11.0

Às deidh sia mìosan de leasachadh air a thaisbeanadh foillseachadh pròiseict LLVM 11.0 - Innealan a tha co-chosmhail ri GCC (luchd-cruinneachaidh, optimizers agus gineadairean còd), a’ cur ri chèile phrògraman ann an bitcode eadar-mheadhanach de stiùiridhean brìgheil coltach ri RISC (inneal brìgheil ìre ìosal le siostam optimization ioma-ìre). Faodar am pseudocode a chaidh a chruthachadh a thionndadh le bhith a’ cleachdadh inneal-cruinneachaidh JIT gu stiùireadh inneal gu dìreach aig àm coileanadh a’ phrògraim.

B’ e toirt a-steach am prìomh atharrachadh san fhoillseachadh ùr Taobh, aghaidh airson cànan Fortran. Tha Flang a’ toirt taic do Fortran 2018, OpenMP 4.5 agus OpenACC 3.0, ach cha deach leasachadh a’ phròiseict a chrìochnachadh fhathast agus tha an ceann aghaidh air a chuingealachadh ri parsadh còd agus sgrùdadh airson ceartachd. Chan eil gineadh de chòd eadar-mheadhanach LLVM a’ faighinn taic fhathast agus gus faidhlichean so-ghnìomhaichte a ghineadh, thèid còd canonical a chruthachadh agus a chuir gu neach-cruinneachaidh Fortran taobh a-muigh.

Leasachaidhean ann an Clang 11.0:

  • Chuir sinn ris a’ chomas an craobh co-chòrdadh eas-chruthach a thoirt air ais (AST) airson còd briste C ++, a dh’fhaodar a chleachdadh gus mearachdan a lorg agus a bheir seachad fiosrachadh a bharrachd do ghoireasan taobh a-muigh leithid clang-tidy agus clangd. Tha am feart air a chomasachadh gu bunaiteach airson còd C ++ agus tha e air a smachdachadh tro na roghainnean “-Xclang -f[no-]recovery-ast”.
  • Modhan breithneachaidh ùra air an cur ris:
    • Is e buidheann de rabhaidhean a th’ ann an “-Wpointer-to-int-cast” mu bhith a’ tilgeadh comharran gu seòrsa int iomlan nach gabh a h-uile luach a dh’ fhaodadh a bhith ann.
    • “-Wuninitialized-const-reference” - rabhadh mu bhith a’ dol seachad air caochladairean neo-aithnichte ann am paramadairean gnìomh a ghabhas ri argamaidean iomraidh leis a’ fheart “const”.
    • "-Wimplicit-const-int-float-conversion" - air a chomasachadh le rabhadh bunaiteach mu thionndadh ciallach de fhìor shlat-tomhais gu seòrsa integer.
  • Airson an àrd-ùrlar ARM, tha gnìomhan C a tha air an togail a-steach don inneal-cruinneachaidh air an toirt seachad (Bun-bheachdan), air a chuir na àite le stiùireadh vectar èifeachdach Arm v8.1-M MVE agus CDE. Tha na gnìomhan a tha rim faighinn air am mìneachadh anns na faidhlichean cinn arm_mve.h agus arm_cde.h.
  • Air a chur ris seata de sheòrsan iomlanachd leudaichte _ExtInt(N), a’ toirt cothrom dhut seòrsaichean a chruthachadh nach eil nan iomadan de chumhachdan de dhà, a ghabhas obrachadh gu h-èifeachdach air FPGA/HLS. Mar eisimpleir, _ExtInt(7) a’ mìneachadh seòrsa slàn-shlànaighear anns a bheil 7 pìosan.
  • Macros a bharrachd a tha a’ mìneachadh taic airson gnìomhan C togte stèidhichte air stiùireadh ARM SVE (Leudachadh Vector Scalable):
    __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. Mar eisimpleir, tha am macro __ARM_FEATURE_SVE air a mhìneachadh nuair a ghineas tu còd AArch64 le bhith a’ suidheachadh an roghainn loidhne-àithne “-march = armv8-a + sve”.

  • Tha am bratach "-O" a-nis air a chomharrachadh leis a 'mhodh optimization "-O1" an àite "-O2".
  • Brataichean cruinneachaidh ùra air an cur ris:
    • "-fstack-clash-protection" - a 'comasachadh dìon an aghaidh eadar-ghearradh de chruaich agus cruachan.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - a' leigeil leat am modh làimhseachaidh eisgeachd a thaghadh airson àireamhan puing fleòdraidh.
    • "-ffp-model={mionaideach, teann, luath}" - Sìmplidh cothrom air sreath de roghainnean sònraichte airson àireamhan puing-fleòdraidh.
    • “-fpch-codegen” agus “-fpch-debuginfo” gus bann-cinn ro-ullaichte (PCH) a ghineadh le faidhlichean nì fa leth airson còd agus debuginfo.
    • “-fsanitize-coverage-allowlist” agus “-fsanitize-coverage-blocklist” airson sgrùdadh còmhdach a’ dèanamh deuchainn air liostaichean geal is dubh.
    • “-mtls-size={12,24,32,48}” gus meud TLS (stòradh snàithne-ionadail) a thaghadh.
    • “-menable-experimental-extension” gus leudachadh RISC-V deuchainneach a chomasachadh.
  • Is e am modh bunaiteach airson C “-fno-common”, a leigeas le ruigsinneachd nas èifeachdaiche air caochladairean cruinne air cuid de àrd-ùrlaran.
  • Chaidh an tasgadan modal bunaiteach a ghluasad bho /tmp dhan eòlaire ~/.cache. Gus faighinn seachad air, faodaidh tu am bratach “-fmodules-cache-path =” a chleachdadh.
  • Chaidh an inbhe cànain àbhaisteach C ùrachadh bho gnu11 gu gnu17.
  • Chuir sinn taic tòiseachaidh ris airson leudachadh GNU C "loidhne asm» gus cuir a-steach assembler. Tha an leudachadh fhathast ga sgrùdadh, ach chan eil e air a phròiseasadh ann an dòigh sam bith.
  • Chaidh na comasan co-cheangailte ri taic OpenCL agus CUDA a leudachadh. Taic a bharrachd airson breithneachadh bloc OpenCL 2.0 agus feartan ùra OpenMP 5.0 a chuir an gnìomh.
  • Chaidh roghainn IndentExternBlock a chuir ris gu goireas cruth clang airson a cho-thaobhadh taobh a-staigh blocaichean taobh a-muigh “C” agus taobh a-muigh “C ++”.
  • Tha an anailisiche statach air làimhseachadh nas fheàrr de luchd-togail a chaidh a shealbhachadh ann an C ++. Chaidh sgrùdaidhean ùra a chuir ris alpha.core.C11Lock agus alpha.fuchsia.Lock gus sùil a thoirt airson glasan, alpha.security.cert.pos.34c gus cleachdadh mì-shàbhailte de putenv, webkit.NoUncountedMemberChecker agus webkit.RefCntblBaseVirtualDtor a lorg gus duilgheadasan le seòrsachan neo-chunntachail, alpha a lorg .cplusplus .SmartPtr gus sgrùdadh a dhèanamh airson null puing smart null.
  • Ann an linter clang-tidy air a chur ris earrann mhòr de sgrùdaidhean ùra.
  • Tha am frithealaiche clangd caching (Clang Server) air coileanadh a leasachadh agus air comasan sgrùdaidh ùra a chuir ris.

prìomh innleachdan LLVM 11.0:

  • Chaidh an siostam togail atharrachadh gu bhith a’ cleachdadh Python 3. Mura h-eil Python 3 ri fhaighinn, tha e comasach gluasad air ais gu bhith a’ cleachdadh Python 2.
  • Tha an ceann aghaidh leis an inneal-cruinneachaidh airson a’ chànan Go (llgo) air a thoirmeasg bhon fhoillseachadh, a dh’ fhaodadh a bhith air ath-structaradh san àm ri teachd.
  • Chaidh am feart vector-function-abi-variant a chur ris an riochdachadh eadar-mheadhanach (IR) gus cunntas a thoirt air a’ mhapadh eadar gnìomhan scalar agus gnìomhan vectar gus gairmean a vectar. Bho llvm ::VectorType tha dà sheòrsa vectar eadar-dhealaichte llvm :: FixedVectorType agus llvm ::ScalableVectorType.
  • Thathas ag aithneachadh meuran stèidhichte air luachan udef agus a’ dol seachad air luachan undef gu gnìomhan àbhaisteach leabharlainn mar ghiùlan neo-mhìnichte. ANNS
    Tha memset/memcpy/memmove a’ ceadachadh comharran neo-dhligheach a dhol seachad, ach ma tha am paramadair le meud neoni.

  • Tha LLJIT air taic a chur ris airson a bhith a’ coileanadh tùsachaidhean staitigeach tron ​​LLJIT ::initiialize and LLJIT ::deinitialize methods. Chaidh an comas leabharlannan statach a chuir ri JITDylib a’ cleachdadh a’ chlas StaticLibraryDefinitionGenerator a chuir an gnìomh. Air a chur ris C API airson ORCv2 (API airson luchd-cruinneachaidh JIT a thogail).
  • Chaidh taic airson pròiseasairean Cortex-A64, Cortex-A34, Cortex-A77 agus Cortex-X78 a chuir ris an deireadh-sheachdain airson ailtireachd AArch1. Air a chuir an gnìomh ARMv8.2-BF16 (BFloat16) agus ARMv8.6-A leudachain, a’ toirt a-steach RMv8.6-ECV (Fìor-fhìrinn leasaichte an-aghaidh), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) agus ARMv8.0-DGH (moladh cruinneachadh dàta). Tha an comas còd a ghineadh airson gnìomhan togte ceangailte ri stiùireadh vector SVE air a thoirt seachad.
  • Chaidh taic airson pròiseasairean Cortex-M55, Cortex-A77, Cortex-A78 agus Cortex-X1 a chuir ris an deireadh-sheachdain airson ailtireachd ARM. Leudachaidhean air an cur an gnìomh
    Armv8.6-A Matrix Iomadaich agus RMv8.2-AA32BF16 BFloat16.

  • Chaidh taic airson gineadh còd airson pròiseasairean POWER10 a chuir ris an deireadh-sheachdain airson ailtireachd PowerPC. Chaidh optimizations loop a leudachadh agus chaidh taic àite-fleòdraidh a leasachadh.
  • Tha an cùl-taic airson ailtireachd RISC-V a’ ceadachadh gabhail ri pìosan a bheir taic do sheataichean stiùiridh leudaichte deuchainneach nach deach aontachadh gu h-oifigeil fhathast.
  • Tha an cùl-taic airson ailtireachd AVR air a ghluasad bhon roinn deuchainneach gu stàball, air a ghabhail a-steach sa chuairteachadh bunaiteach.
  • Tha an backend airson ailtireachd x86 a’ toirt taic do stiùireadh Intel AMX agus TSXLDTRK. Dìon a bharrachd an aghaidh ionnsaighean LVI (In-stealladh Luach Luchdaidh), agus cuideachd a’ cur an gnìomh inneal cuir an gnìomh taobh-buaidh taobh-buaidh tuairmeasach coitcheann gus casg a chuir air ionnsaighean a thig bho bhith a’ coileanadh gnìomhachd tuairmeasach air an CPU.
  • Anns an deireadh-sheachdain airson ailtireachd SystemZ, chaidh taic airson MemorySanitizer agus LeakSanitizer a chur ris.
  • Taic a bharrachd airson faidhle cinn le àireamhan matamataigeach gu Libc ++ .
  • Leudaichte Sgilean ceangail LLD. Taic nas fheàrr airson cruth ELF, a’ gabhail a-steach na roghainnean a bharrachd “--lto-emit-asm”, “--lto-whole-program-visibility”, “-print-archive-stats”, “-shuffle-sections”, “ -thinlto- single-module", "-unique", "-rosegment", "-threads=N". Chaidh roghainn “--time-trace” a chuir ris gus an lorg a shàbhaladh gu faidhle, a ghabhas sgrùdadh an uairsin tron ​​​​eadar-aghaidh lorg chrome: // ann an Chrome.

Source: fosgailtenet.ru

Cuir beachd ann