Divilgasyon suite konpilateur GCC 10 la

Apre yon ane nan devlopman pibliye lage yon seri konpilateur gratis GCC NAN, premye gwo lage nan nouvo branch GCC 10.x. An akò avèk nouvo konplo nimewo lage, yo te itilize vèsyon 10.0 nan pwosesis devlopman, ak yon ti tan anvan liberasyon GCC 10.1, branch GCC 11.0 te deja branch, sou baz pwochen lage enpòtan an, GCC 11.1, ta dwe fòme.

GCC 10.1 remakab pou aplikasyon anpil inovasyon nan lang C++ ki devlope pou estanda C++20, amelyorasyon ki gen rapò ak estanda langaj C nan lavni (C2x), nouvo optimize nan backends konpilatè yo ak sipò eksperimantal. mòd analiz estatik. Anplis de sa, pandan preparasyon an nan yon nouvo branch, pwojè a transfere repozitwa a soti nan SVN Git.

Prensipal la chanjman:

  • Te ajoute mòd eksperimantal nan analiz estatik "-fanalyzer", ki fè analiz entèprosedural resous-entansif nan chemen ekzekisyon kòd ak koule done nan yon pwogram. Mòd la kapab detekte pwoblèm nan etap konpilasyon an, tankou doub apèl nan fonksyon gratis () pou yon zòn memwa, koule deskriptè fichye, dereferans ak pase endikasyon nil, aksè nan blòk memwa libere, lè l sèvi avèk valè ki pa inisye, elatriye. Itilizasyon nouvo mòd pou kòd OpenSSL deja fè li posib pou idantifye vilnerabilite danjere.
  • Amelyore optimize entèprosedural. Yo reamenaje pas IPA-SRA (Interprocedural Scalar Shared Replacement) pou travay nan moman lien an epi, pami lòt bagay, kounye a retire valè ki pa itilize yo kalkile epi retounen yo. Nan mòd optimize "-O2", opsyon "-finline-functions" la aktive, ki se reyintonize pou favorize kòd plis kontra enfòmèl ant pèfòmans ekzekisyon. Travay euristik la pou deplwaman fonksyon inline te akselere. Ekspansyon an liy ak eristik klonaj fonksyon kapab kounye a itilize enfòmasyon sou chenn valè pou predi efikasite transfòmasyon endividyèl yo. Pou C++, presizyon nan analiz alyas ki baze sou kalite yo te amelyore.
  • Enhanced Linking Time Optimizations (LTO). Te ajoute nouvo ègzèkutabl lto-depotwa Reyajiste enfòmasyon sou dosye objè ak bytecode LTO. Pase paralèl LTO otomatikman detèmine kantite travay fè travay ansanm epi, si yo pa ka detèmine, sèvi ak enfòmasyon sou kantite nwayo CPU kòm yon faktè paralelizasyon. Te ajoute kapasite nan konprese LTO bytecode lè l sèvi avèk algorithm zstd la.
  • Mekanis optimize ki baze sou rezilta pwofil kòd (PGO - Profile-guided optimization) te amelyore, ki jenere plis kòd optimal ki baze sou yon analiz de karakteristik ekzekisyon kòd. Antretyen pwofil amelyore pandan konpilasyon ak separasyon kòd cho/frèt. Via opsyon "-fprofile-values» kapab kounye a kontwole jiska 4 valè pwofil, pou egzanp pou apèl endirèk epi bay enfòmasyon sou pwofil pi presi.
  • Espesifikasyon pwogramasyon paralèl aplike pou lang C, C++ ak Fortran OpenACC 2.6, ki defini zouti pou dechaje operasyon sou GPU ak processeurs espesyalize tankou NVIDIA PTX. Aplikasyon estanda a prèske fini Louvri MP 5.0 (Open Multi-Processing), ki defini API ak metòd pou aplike metòd pwogramasyon paralèl sou sistèm milti-nwayo ak ibrid (CPU + GPU/DSP) ak memwa pataje ak inite vektorizasyon (SIMD). Te ajoute karakteristik tankou lastprivate kondisyonèl, eskanè ak direktiv bouk, lòd ak ekspresyon use_device_addr. Pou OpenMP ak OpenACC, yo te ajoute sipò pou operasyon dechaje sou katriyèm jenerasyon (Fiji) ak senkyèm jenerasyon AMD Radeon (GCN) GPU (VEGA 10/VEGA 20).
  • Pou lang nan fanmi C, yo te ajoute fonksyon "aksè" pou dekri aksè fonksyon an nan objè yo pase pa referans oswa pointeur, ak asosye objè sa yo ak agiman nonb antye relatif ki gen enfòmasyon sou gwosè objè yo. Pou travay ansanm ak "aksè", atribi "kalite" a aplike pou detekte aksè kòrèk nan fonksyon itilizatè, pou egzanp, lè w ap ekri valè nan yon zòn andeyò limit etalaj la. Te ajoute tou atribi "symver" pou asosye senbòl nan yon fichye ELF ak nimewo vèsyon espesifik.
  • Nouvo avètisman te ajoute:
    • "-Wstring-compare" (pèmèt ak "-Wextra") - avèti sou prezans ekspresyon kote zewo konpare ak rezilta yo rele fonksyon strcmp ak strncmp, ki ekivalan a yon konstan akòz longè a. nan yon agiman pi gran pase gwosè etalaj la nan dezyèm agiman an.
    • "-Wzero-length-bounds" (pèmèt ak "-Warray-bounds") - avèti sou aksè nan eleman etalaj ki gen longè zewo, ki ka mennen nan ranplase lòt done.
    • Avètisman "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" ak "-Wstringop-overflow" yo te elaji pou ogmante kantite sitiyasyon andeyò limit yo. ki okipe yo.
  • Enplemante kapasite pou presize karaktè lajè nan idantifyan yo lè l sèvi avèk kodaj aktyèl la (UTF-8 pa default) olye ke notasyon UCN (\uNNNN oswa \UNNNNNNNN). Pa egzanp:

    static const int π = 3;
    int get_naïve_pi() {
    retounen π;
    }

  • Pou langaj C a, yon pati nan nouvo karakteristik ki devlope nan estanda C2X la te aplike (pèmèt lè yo espesifye -std=c2x ak -std=gnu2x): sipò pou "[[]]" sentaks la te parèt pou defini atribi tankou nan C++ (pa egzanp, [[gnu ::const]], [[deprecated]], [[fallthrough]] ak [[maybe_unused]]. Te ajoute sipò pou sentaks "u8" pou defini konstan ak karaktè UTF-8.
    Te ajoute nouvo makro nan . Te ajoute sibstitisyon "%OB" ak "%Ob" nan strftime.

  • Mòd default pou C se "-fno-common", ki pèmèt aksè pi efikas nan varyab mondyal sou kèk platfòm.
  • Pou C++, anviwon 16 chanjman ak inovasyon yo te aplike, devlope nan estanda C++20. Ki gen ladan mo kle a "constinit"
    ak sipò pou ekstansyon modèl yo te aplike "konsèp la". Konsèp pèmèt ou defini yon seri kondisyon paramèt modèl ki, nan moman konpile, limite seri agiman yo ka aksepte kòm paramèt modèl. Konsèp yo ka itilize pou evite enkonsistans lojik ant pwopriyete kalite done yo itilize nan modèl la ak pwopriyete kalite done paramèt D 'yo.

  • G++ bay deteksyon konpòtman endefini ki te koze pa chanje objè konstan atravè constexpr. Konsomasyon memwa redwi pa du lè kalkile constexpr. Te ajoute nouvo avètisman "-Wmismatched-tags" ak "-Wredundant-tags".
  • Nouvo opsyon liy kòmand yo te pwopoze:
    • "-fallocation-dce" pou retire pè ki pa nesesè nan "nouvo" ak "efase" operatè yo.
    • "-fprofile-partial-training" pou enfim optimize gwosè pou kòd ki pa gen yon fòmasyon fòmasyon.
    • "-fprofile-reproducible pou kontwole nivo repwodibilite pwofil la.
    • "-fprofile-prefix-path" pou defini yon anyè konstriksyon sous baz yo itilize pou jenerasyon pwofil separe (pou "-fprofile-generate=profile_dir" ak "-fprofile-use=profile_dir").
  • Nan tèks avètisman pou opsyon mansyone yo, yo bay lyen ipèr ki pèmèt ou ale nan dokiman an pou opsyon sa yo. Yo kontwole sibstitisyon URL lè l sèvi avèk opsyon "-fdiagnostics-urls".
  • Te ajoute operatè preprosesè "__gen_konstwi", ki ka itilize pou tcheke pou fonksyon entegre.
  • Te ajoute yon nouvo fonksyon entegre "__builtin_roundeven" ak yon aplikasyon fonksyon awondi defini nan spesifikasyon ISO/IEC TS 18661, menm jan ak "wonn", men awondi pati ki pi gran pase 0.5 moute (nan yon pi gwo valè), mwens pase 0.5. - desann (nan zewo), ak egal a 0.5 - kòmanse nan egalite nan penultyèm chif la.
  • Pou achitekti AArch64, yo te ajoute sipò pou ekstansyon SVE2 ak sipò pou SVE (Scalable Vector Extension) te amelyore, ki gen ladan sipò ajoute pou fonksyon ak kalite SVE ACLE entegre, ak itilizasyon vektorizasyon. Sipò pou LSE (Large System Extensions) ak TME (Transactional Memory Extension) te elaji. Te ajoute nouvo enstriksyon yo pwopoze nan Armv8.5-A ak Armv8.6-A, ki gen ladan enstriksyon pou jenerasyon nimewo o aza, awondi, atachman tag memwa,
    bfloat16 ak miltiplikasyon matris. Te ajoute sipò processeur
    Bra Cortex-A77,
    Bra Cortex-A76AE,
    Bra Cortex-A65,
    Bra Cortex-A65AE,
    Bra Cortex-A34 ak
    Marvell ThunderX3.

  • Te ajoute sipò pou ABI FDPIC (endikasyon fonksyon 32-bit) pou ARM64. Redesine ak optimize pwosesis operasyon 64-bit nonb antye relatif. Te ajoute sipò CPU
    Bra Cortex-A77,
    Bra Cortex-A76AE ak
    Bra Cortex-M35P. Sipò elaji pou enstriksyon pwosesis done ACLE, ki gen ladan SIMD 32-bit, miltiplikasyon 16-bit, aritmetik latch, ak lòt optimize algorithm DSP. Te ajoute sipò eksperimantal pou enstriksyon ACLE CDE (Custom Datapath Extension).

  • Siyifikativman amelyore jenerasyon kòd ak vektorizasyon nan backend la pou GPU AMD ki baze sou mikrochitekti GCN la.
  • Te ajoute sipò pou aparèy ki sanble ak XMEGA pou achitekti AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209 4808, ATmega4809 ak ATmegaXNUMX.

  • Yo te ajoute yon nouvo ekstansyon achitekti Intel ENQCMD (-menqcmd) pou achitekti IA-32/x86-64. Te ajoute sipò pou Intel Cooperlake (-march = cooperlake, gen ladan ekstansyon AVX512BF16 ISA) ak Tigerlake (-march = tigerlake, gen ladan ekstansyon MOVDIRI, MOVDIR64B ak AVX512VP2INTERSECT ISA).
  • Yon aplikasyon HSAIL (Eterogeneous System Architecture Intermediate Language) pou sistèm enfòmatik etewojèn ki baze sou achitekti HSA yo te obsève epi yo pral gen anpil chans retire nan yon lage nan lavni.

Sous: opennet.ru

Add nouvo kòmantè