Efter ett Är av utveckling lansering av en gratis uppsÀttning kompilatorer , den första större utgÄvan i den nya GCC 10.x-grenen. Enligt UtgÄvenummerering, version 10.0 anvÀndes under utvecklingen, och strax före lanseringen av GCC 10.1 hade en gren av GCC 11.0 redan förgrenats, pÄ basis av vilken nÀsta större utgÄva av GCC 11.1 skulle bildas.
GCC 10.1 Àr kÀnd för sin implementering av mÄnga C++-sprÄkinnovationer som utvecklats för C++20-standarden, förbÀttringar relaterade till den kommande C-sprÄkstandarden (C2x), nya optimeringar i kompilatorns backends och experimentellt stöd. Dessutom, under förberedelserna av den nya grenen, slutförde projektet överföringen av repositoriet frÄn SVN till Git.
Den huvudsakliga :
- experimentellt statiskt analyslÀge «", som utför resurskrÀvande interproceduranalys av kodkörningsvÀgar och dataflöden i ett program. LÀget kan upptÀcka problem i kompileringsstadiet, som dubbelanrop till free()-funktionen för ett minnesomrÄde, lÀckor i filbeskrivningar, avreferensering och överföring av nullpekare, Ätkomst till frigjorda minnesblock, anvÀndning av oinitierade vÀrden etc. AnvÀndningen av det nya lÀget för OpenSSL-kod har redan gjort det möjligt att identifiera .
- FörbÀttrade interprocedurella optimeringar. IPA-SRA-passet (Interprocedural Scalar Replacement of Shared Values) har omstrukturerats för att köras vid lÀnkningstillfÀllet och tar bland annat bort oanvÀnda vÀrden frÄn berÀknade och returnerade vÀrden. Alternativet -finline-functions har aktiverats i optimeringslÀget -O2 och har justerats för att gynna kompakt kod framför körtidsprestanda. Heuristiken för avrullning av inline-funktioner har snabbats upp. Heuristiken för avrullning och kloning av inline-funktioner kan nu anvÀnda intervallinformation för att förutsÀga effektiviteten hos enskilda konverteringar. För C++ har noggrannheten för typbaserad aliasanalys förbÀttrats.
- FörbÀttrade lÀnkningsfasoptimeringar (LTO). Ny körbar fil har lagts till. att dumpa information om objektfiler med LTO-bytekod. I parallella LTO-körningar bestÀms antalet samtidigt körda make-uppgifter nu automatiskt, och om det inte kan bestÀmmas anvÀnds antalet CPU-kÀrnor som en parallelliseringsfaktor. Möjligheten att komprimera LTO-bytekod med hjÀlp av zstd-algoritmen har lagts till.
- FörbĂ€ttrad optimeringsmekanism baserad pĂ„ kodprofileringsresultat (PGO â Profile-guided optimization), som genererar mer optimal kod baserat pĂ„ analys av kodkörningsfunktioner. FörbĂ€ttrat profilstöd under kompilering och separering av "varm"/"kall" kod. Genom alternativet "» Du kan nu spĂ„ra upp till fyra profilvĂ€rden, till exempel för indirekta samtal och för att ge mer exakt profilinformation.
- En parallell programmeringsspecifikation har implementerats för C, C++ och Fortran , som definierar metoderna för att avlasta operationer till GPU:er och specialiserade processorer som NVIDIA PTX. Standarden Àr nÀstan klar. (Open Multi-Processing), som definierar API:et och metoderna för att anvÀnda parallella programmeringsmetoder pÄ flerkÀrniga och hybridsystem (CPU+GPU/DSP) med delat minne och vektoriseringsenheter (SIMD). Funktioner som lastprivate villkorsuttryck, scan- och loop-direktiv, order- och use_device_addr-uttryck har lagts till. För OpenMP och OpenACC har stöd för avlastningsoperationer till fjÀrde generationens (Fiji) och femte generationens (VEGA 10/VEGA 20) AMD Radeon (GCN) GPU:er lagts till.
- För sprÄk i C-familjen har funktionen "access" lagts till för att beskriva en funktions Ätkomst till objekt som skickas via referens eller pekare, och för att associera sÄdana objekt med heltalsargument som innehÄller information om objektens storlek. För att fungera tillsammans med "access" har attributet "type" implementerats för att upptÀcka felaktig Ätkomst frÄn anvÀndardefinierade funktioner, till exempel nÀr man skriver vÀrden till ett omrÄde utanför arraygrÀnserna. Attributet "symver" har ocksÄ lagts till för att associera symboler i en ELF-fil med specifika versionsnummer.
- Nya varningar tillagda:
- "-Wstring-compare" (aktiverad med "-Wextra") - varnar för uttryck dÀr noll jÀmförs med resultatet av anropet av funktionerna strcmp och strncmp, vilket motsvarar en konstant pÄ grund av att lÀngden pÄ ett argument Àr större Àn storleken pÄ arrayen i det andra argumentet.
- "-Wzero-length-bounds" (aktiverad med "-Warray-bounds") - Varnar för Ätkomst till arrayelement med noll lÀngd, vilket kan leda till att annan data skrivs över.
- Varningarna "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" och "-Wstringop-overflow" har utökats till att omfatta fler situationer utanför grÀnserna som hanteras.
- Implementerade möjligheten att direkt ange breda tecken i identifierare med hjÀlp av den aktuella kodningen (UTF-8 som standard) istÀllet för UCN-notation (\uNNNN eller \UNNNNNNNN). Till exempel:
statisk konstant int Ï = 3;
int get_name_pi() {
returnera Ï;
} - För C-sprÄket har en del av de nya funktionerna som utvecklats inom C2X-standarden implementerats (aktiverats genom att ange -std=c2x och -std=gnu2x): stöd för syntaxen "[[]]" har dykt upp för att definiera attribut som i C++ (till exempel [[gnu::const]], [[deprecated]], [[fallthrough]] och [[maybe_unused]]. Stöd för syntaxen "u8" har lagts till för att definiera konstanter med UTF-8-tecken.
Lade till nya makron till Lade till ersÀttningarna "%OB" och "%Ob" i strftime. - Som standard anvÀnder C lÀget "-fno-common", vilket ger mer effektiv Ätkomst till globala variabler pÄ vissa plattformar.
- För C++ har cirka 16 förÀndringar och innovationer implementerats, utvecklade i C++20-standarden. Inklusive tillÀgget av nyckelordet "constinit"
och stöd för malltillÀgg har implementerats."Begrepp lÄter dig definiera en uppsÀttning krav för mallparametrar som vid kompileringstid begrÀnsar uppsÀttningen argument som kan accepteras som mallparametrar. Begrepp kan anvÀndas för att undvika logiska inkonsekvenser mellan egenskaperna för de datatyper som anvÀnds i en mall och egenskaperna för datatyperna för inparametrarna." - G++ detekterar nu odefinierat beteende orsakat av att Àndra konstanta objekt via constexpr. Minskad minnesförbrukning för kompilatorn vid utvÀrdering av constexpr. Nya varningar "-Wmismatched-tags" och "-Wredundant-tags" har lagts till.
- Nya kommandoradsalternativ har föreslagits:
- "-fallocation-dce" för att ta bort redundanta par av operatorerna "new" och "delete".
- "-fprofile-partial-training" för att inaktivera storleksoptimeringar för kod som inte har trÀnats.
- -fprofile-reproducible för att kontrollera nivÄn av profilreproducerbarhet.
- "-fprofile-prefix-path" för att definiera baskatalogen för byggnation frÄn kÀllan som anvÀnds vid separat generering av profiler (för "-fprofile-generate=profile_dir" och "-fprofile-use=profile_dir").
- Varningstexten för de nÀmnda alternativen tillhandahÄlls med hyperlÀnkar som gör det möjligt att hoppa till dokumentation för dessa alternativ. URL-ersÀttning styrs av alternativet "-fdiagnostics-urls".
- Lade till preprocessoroperatorn "", som kan anvÀndas för att kontrollera om det finns inbyggda funktioner.
- Lade till en ny inbyggd funktion "__builtin_roundeven" med en implementering av avrundningsfunktionen som definieras i ISO/IEC TS 18661-specifikationen, liknande "round", men avrundning uppÄt (till ett större vÀrde) av den del som Àr större Àn 0.5, nedÄt (till noll) av den del som Àr mindre Àn 0.5, och baserat pÄ pariteten för den nÀst sista siffran nÀr den Àr lika med 0.5.
- För AArch64-arkitekturen har stöd för SVE2-tillÀgget lagts till och stöd för SVE (Scalable Vector Extension) har förbÀttrats, inklusive stöd för inbyggda funktioner och SVE ACLE-typer, och vektorisering har implementerats. Stöd för LSE (Large System Extensions) och TME (Transactional Memory Extension) har utökats. Nya instruktioner som introducerats i Armv8.5-A och Armv8.6-A har lagts till, inklusive instruktioner för generering av slumptal, avrundning, bindning av minnestaggar,
bfloat16 och matrismultiplikation. Lade till stöd för processorer.
Arm Cortex-A77,
Arm Cortex-A76AE,
Arm Cortex-A65,
Arm Cortex-A65AE,
Arm Cortex-A34 och
Marvell ThunderX3. - För ARM32, stöd för FDPIC ABI (64-bitars funktionspekare) lagt till. Omarbetad och optimerad hantering av 64-bitars heltalsoperationer. Stöd för CPU lagt till.
Arm Cortex-A77,
Arm Cortex-A76AE och
Arm Cortex-M35P. Utökat stöd för ACLE-instruktioner för databehandling, inklusive 32-bitars SIMD, 16-bitars multiplikation, min/max-aritmetik och andra DSP-algoritmoptimeringar. Experimentellt stöd för ACLE CDE-instruktioner (Custom Datapath Extension) har lagts till. - AvsevÀrt förbÀttrad kodgenerering och vektorisering i backend för AMD GPU:er baserade pÄ GCN-mikroarkitekturen.
- Stöd för XMEGA-liknande enheter har lagts till för AVR-arkitekturen.
ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, 1608mega1609, ATmega3208, 3209 ATmega4808, ATmega4809, ATmegaXNUMX, ATmegaXNUMX och ATmegaXNUMX. - En ny Intel ENQCMD-instruktionsuppsÀttningsarkitekturtillÀgg (-menqcmd) har lagts till för IA-32/x86-64-arkitekturer. Stöd har lagts till för Intel Cooperlake-processorer (-march=cooperlake, aktiverar AVX512BF16 ISA-tillÀgget) och Tigerlake-processorer (-march=tigerlake, aktiverar MOVDIRI-, MOVDIR64B- och AVX512VP2INTERSECT ISA-tillÀggen).
- Implementeringen av Heterogeneous System Architecture Intermediate Language (HSAIL) för heterogena datorsystem baserade pÄ HSA-arkitekturen har förÄldrats och kommer sannolikt att tas bort i en framtida version.
KĂ€lla: opennet.ru
