Kutulutsidwa kwa LLVM 11.0 compiler suite

Pambuyo pa miyezi isanu ndi umodzi ya chitukuko zoperekedwa kutulutsidwa kwa polojekiti LLVM 11.0 - Zida zogwirizana ndi GCC (ma compilers, optimizers and code generators), kupanga mapulogalamu mu bitcode yapakatikati ya RISC-monga malangizo enieni (makina otsika omwe ali ndi makina okhathamiritsa ambiri). Pseudocode yopangidwa ikhoza kusinthidwa pogwiritsa ntchito JIT compiler kukhala malangizo amakina mwachindunji panthawi yokonza pulogalamu.

Kusintha kwakukulu pakumasulidwa kwatsopano kunali kuphatikizidwa kwa Mbali, kutsogolo kwa chilankhulo cha Fortran. Flang imathandizira Fortran 2018, OpenMP 4.5 ndi OpenACC 3.0, koma chitukuko cha polojekiti sichinakwaniritsidwebe ndipo mapeto ake akungowonjezera ma code ndi kufufuza kulondola. Kubadwa kwa code yapakatikati ya LLVM sikunathandizidwebe ndipo kuti apange mafayilo otheka, code yovomerezeka imapangidwa ndikuperekedwa kwa compiler yakunja ya Fortran.

Zosintha mu Clang 11.0:

  • Anawonjezera kuthekera kobwezeretsa mtengo wosawoneka bwino wa syntax (AST) kwa code yosweka ya C ++, yomwe ingagwiritsidwe ntchito kuthandizira kuzindikira zolakwika ndikupereka zina zowonjezera kuzinthu zakunja monga clang-tidy ndi clangd. Mbaliyi imayatsidwa ndi kachidindo ka C ++ ndipo imayendetsedwa kudzera muzosankha za "-Xclang -f[no-]recovery-ast".
  • Adawonjezedwa njira zowunikira zatsopano:
    • "-Wpointer-to-int-cast" ndi gulu la machenjezo okhudza zolozera ku mtundu wa int wamtundu uliwonse womwe sugwirizana ndi zonse zomwe zingatheke.
    • "-Wunitialized-const-reference" - chenjezo lokhudza kusintha kosadziwika mu magawo a ntchito omwe amavomereza mfundo zolozera ndi "const".
    • "-Wimplicit-const-int-float-conversion" - yothandizidwa ndi chenjezo losasinthika la kutembenuka kosasintha kwenikweni kukhala mtundu wonse.
  • Pa nsanja ya ARM, ntchito za C zomangidwa muzophatikiza zimaperekedwa (Zamkatimu), m'malo ndi malangizo vekitala aluso Arm v8.1-M MVE ndi CDE. Ntchito zomwe zilipo zimafotokozedwa m'mafayilo apamutu arm_mve.h ndi arm_cde.h.
  • Awonjezedwa gulu la mitundu yowonjezera yowonjezera _ExtInt(N), kukulolani kuti mupange mitundu yomwe simachulukitsa mphamvu ziwiri, zomwe zingathe kukonzedwa bwino pa FPGA/HLS. Mwachitsanzo, _ExtInt(7) imatanthawuza mtundu wonse wokhala ndi 7 bits.
  • Ma macros owonjezera omwe amatanthauzira kuthandizira kwa ntchito zomangidwa mu C kutengera malangizo a 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. Mwachitsanzo, __ARM_FEATURE_SVE macro amatanthauzidwa popanga AArch64 code pokhazikitsa njira ya mzere "-march=armv8-a+sve".

  • Mbendera ya "-O" tsopano yazindikirika ndi "-O1" njira yowonjezera m'malo mwa "-O2".
  • Wowonjezera mbendera zatsopano:
    • "-fstack-clash-protection" - imathandizira chitetezo mphambano za mulu ndi mulu.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - imakupatsani mwayi wosankha chogwirizira cha manambala oyandama.
    • "-ffp-model={precise,strict, fast}" - Imafewetsa mwayi wopeza zingapo zapadera za manambala oyandama.
    • "-fpch-codegen" ndi "-fpch-debuginfo" kuti apange mutu wokonzekeratu (PCH) wokhala ndi mafayilo osiyana a code ndi debuginfo.
    • "-fsanitize-coverage-allowlist" ndi "-fsanitize-coverage-blocklist" poyang'ana mindandanda yoyera ndi yakuda.
    • β€œ-mtls-size={12,24,32,48}” kuti musankhe kukula kwa TLS (kusungirako ulusi).
    • "-menable-extension-extension" kuti athe kuyesa zowonjezera za RISC-V.
  • Njira yosasinthika ya C ndi "-fno-common", yomwe imalola mwayi wofikira kumitundu yapadziko lonse pamapulatifomu ena.
  • Chosungira chamodule chasunthidwa kuchokera ku /tmp kupita ku ~/.cache directory. Kuti muchotse, mutha kugwiritsa ntchito mbendera ya "-fmodules-cache-path=".
  • Chiyankhulo chosasinthika cha C chasinthidwa kuchokera ku gnu11 kupita ku gnu17.
  • Anawonjezera chithandizo choyambirira cha GNU C yowonjezera "amm pa intanetiΒ»kuwonjezera zophatikizira. Zowonjezera zikuwunikidwabe, koma sizikukonzedwa mwanjira iliyonse.
  • Maluso okhudzana ndi chithandizo cha OpenCL ndi CUDA awonjezedwa. Thandizo lowonjezera la OpenCL 2.0 block diagnostics ndikukhazikitsa zatsopano za OpenMP 5.0.
  • Njira yowonjezera ya IndentExternBlock kuti mugwirizane ndi midadada yakunja ya "C" ndi "C ++" yakunja.
  • The static analyzer yathandizira kuwongolera kwa omanga omwe adatengera ku C++. Onjezani macheke atsopano alpha.core.C11Lock ndi alpha.fuchsia.Lock kuti muwone maloko, alpha.security.cert.pos.34c kuti muzindikire kugwiritsa ntchito molakwika kwa putenv, webkit.NoUncountedMemberChecker ndi webkit.RefCntblBaseVirtualDtor kuti muwone mitundu yosawerengeka, alpha yosawerengeka .cplusplus .SmartPtr kuti muwone ngati palibe cholozera chanzeru.
  • Mu linter clang-zabwino anawonjezera gawo lalikulu la macheke atsopano.
  • Seva ya clangd caching (Clang Server) yasintha magwiridwe antchito ndikuwonjezera luso lazowunikira.

waukulu zatsopano LLVM 11.0:

  • Njira yomangayi yasinthidwa kuti igwiritse ntchito Python 3. Ngati Python 3 palibe, n'zotheka kubwereranso kugwiritsa ntchito Python 2.
  • Mbali yakutsogolo yokhala ndi cholembera chilankhulo cha Go (llgo) sichimatulutsidwa, chomwe chingakonzedwenso mtsogolo.
  • Makhalidwe a vector-function-abi-variant awonjezedwa ku choyimira chapakati (IR) kuti afotokoze mapu pakati pa ntchito za scalar ndi vector kuti vectorize mafoni. Kuchokera ku llvm::VectorType pali mitundu iwiri yosiyana ya vector llvm::FixedVectorType ndi llvm::ScalableVectorType.
  • Nthambi yozikidwa pamakhalidwe a udef ndikupereka undef ku ntchito zanthawi zonse zama library imadziwika kuti ndi khalidwe losadziwika. MU
    memset/memcpy/memmove imalola kuloza zolozera za undef, koma ngati kukula kwake kuli ziro.

  • LLJIT yawonjezera kuthandizira pochita zoyambira zokhazikika kudzera mu LLJIT::yambitsani ndi LLJIT::deinitialize njira. Kutha kuwonjezera malaibulale osasunthika ku JITDylib pogwiritsa ntchito kalasi ya StaticLibraryDefinitionGenerator kwakhazikitsidwa. Added C API ya ORCv2 (API yomanga opanga ma JIT).
  • Thandizo la mapurosesa a Cortex-A64, Cortex-A34, Cortex-A77 ndi Cortex-X78 awonjezedwa kumbuyo kwa zomangamanga za AArch1. Kukhazikitsidwa kwa ARMv8.2-BF16 (BFloat16) ndi zowonjezera za ARMv8.6-A, kuphatikiza RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) ndi ARMv8.0-DGH (Chidziwitso chosonkhanitsira deta). Kuthekera kopanga ma code omangika-zomangirira ku malangizo a SVE vector amaperekedwa.
  • Thandizo la mapurosesa a Cortex-M55, Cortex-A77, Cortex-A78 ndi Cortex-X1 awonjezedwa kumbuyo kwa zomangamanga za ARM. Zowonjezera zakhazikitsidwa
    Armv8.6-A Matrix Kuchulukitsa ndi RMv8.2-AA32BF16 BFloat16.

  • Thandizo la kupanga ma code a POWER10 processors awonjezedwa kumbuyo kwa zomangamanga za PowerPC. Kukhathamiritsa kwa loop kwakulitsidwa ndipo chithandizo cha malo oyandama chawongoleredwa.
  • Kumbuyo kwa kamangidwe ka RISC-V kumalola kuvomereza kwa zigamba zomwe zimathandizira mayeso owonjezera omwe sanavomerezedwe mwalamulo.
  • Kumbuyo kwa zomangamanga za AVR zasamutsidwa kuchokera kugulu loyesera kupita ku khola, ndikuphatikizidwa pakugawa koyambira.
  • Kumbuyo kwa zomangamanga za x86 kumathandizira malangizo a Intel AMX ndi TSXLDTRK. Chitetezo chowonjezera pakuwukira LVI (Load Value Injection), komanso imagwiritsa ntchito njira yopondereza ya Speculative Execution Side Effect Suppression kuti aletse kuukira komwe kumachitika chifukwa chakuchita mongoyerekeza kwa CPU.
  • Kumbuyo kwa kamangidwe ka SystemZ, chithandizo cha MemorySanitizer ndi LeakSanitizer chawonjezedwa.
  • Thandizo lowonjezera la fayilo yamutu yokhala ndi masamu osasintha ku Libc++ .
  • Zokulitsidwa LLD zolumikizira luso. Thandizo lothandizira la mtundu wa ELF, kuphatikizapo zosankha zowonjezera "--lto-emit-asm", "---whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-yapadera", "-rosegment", "-threads=N". Njira yowonjezeredwa ya "--time-trace" kuti musunge fayilo ku fayilo, yomwe imatha kuwunikidwa kudzera pa chrome://tracing interface mu Chrome.

Source: opennet.ru

Kuwonjezera ndemanga