Pagpagawas sa GCC 10 compiler suite

Human sa usa ka tuig nga kalamboan gipatik pagpagawas sa usa ka libre nga set sa mga compiler GCC 10.1, ang unang mayor nga pagpagawas sa bag-ong GCC 10.x nga sanga. Subay sa bag-ong laraw mga numero sa pagpagawas, ang bersyon 10.0 gigamit sa proseso sa pag-uswag, ug wala madugay sa wala pa ang pagpagawas sa GCC 10.1, ang sanga sa GCC 11.0 nagsanga na, nga gibase sa kung diin ang sunod nga hinungdanon nga pagpagawas, ang GCC 11.1, maporma.

Nailhan ang GCC 10.1 sa pagpatuman sa daghang mga inobasyon sa C++ nga lengguwahe nga naugmad para sa C++20 nga sumbanan, mga pagpaayo nga may kalabotan sa umaabot nga C language standard (C2x), bag-ong mga pag-optimize sa mga backend sa compiler ug suporta sa eksperimento. static analysis mode. Dugang pa, sa panahon sa pag-andam sa usa ka bag-ong sanga, gibalhin sa proyekto ang repositoryo gikan sa SVN ngadto sa Git.

nag-unang mga pagbag-o:

  • Gidugang eksperimento nga paagi sa static nga pagtuki "-fanalyzer", nga naghimo sa interprocedural nga pagtuki nga kusog sa kapanguhaan sa mga agianan sa pagpatuman sa code ug mga pagdagayday sa datos sa usa ka programa. Ang mode makahimo sa pag-ila sa mga problema sa yugto sa pag-compile, sama sa doble nga tawag sa libre () nga function alang sa usa ka lugar sa panumduman, file descriptor leaks, dereferencing ug pagpasa sa mga null pointer, pag-access sa gipagawas nga mga bloke sa panumduman, gamit ang wala’y una nga mga kantidad, ug uban pa. Ang paggamit sa bag-ong mode para sa OpenSSL code nahimo nang posible nga mailhan delikado nga kahuyang.
  • Gipauswag nga interprocedural optimizations. Ang pass sa IPA-SRA (Interprocedural Scalar Shared Replacement) gidesinyo pag-usab aron magtrabaho sa oras sa pagbugkos ug, lakip sa ubang mga butang, karon nagtangtang sa nakalkula ug nagbalik sa wala magamit nga mga kantidad. Sa "-O2" optimization mode, ang "-finline-functions" nga opsyon gi-enable, nga gi-retuned aron paboran ang mas compact code kay sa execution performance. Ang buhat sa heuristic alang sa inline function deployment gipaspasan. Ang inline nga pagpalapad ug function cloning heuristics makagamit na karon og impormasyon mahitungod sa mga han-ay sa bili aron matagna ang pagka-epektibo sa indibidwal nga mga pagbag-o. Para sa C++, ang katukma sa type-based nga pag-parse sa alyas gipauswag.
  • Gipalambo nga Linking Time Optimizations (LTO). Gidugang bag-ong executable lto-dump aron i-reset ang impormasyon bahin sa mga object file nga adunay LTO bytecode. Ang mga parallel LTO pass awtomatik nga nagtino sa gidaghanon sa dungan nga pagpadagan sa paghimo sa mga buluhaton ug, kung dili kini matino, gamita ang impormasyon mahitungod sa gidaghanon sa mga CPU core isip usa ka parallelization factor. Gidugang ang abilidad sa pag-compress sa LTO bytecode gamit ang zstd algorithm.
  • Ang mekanismo sa pag-optimize base sa mga resulta sa code profiling (PGO - Profile-guided optimization) gipauswag, nga nagpatunghag mas maayo nga code base sa pagtuki sa mga kinaiya sa code execution. Gipauswag nga pagmentinar sa profile sa panahon sa pag-compile ug pagbulag sa init / bugnaw nga code. Pinaagi sa opsyon "-fprofile-mga biliΒ»Mahimo na nga mamonitor ang hangtod sa 4 nga mga kantidad sa profile, pananglitan alang sa dili direkta nga mga tawag ug paghatag og mas tukma nga impormasyon sa profile.
  • Ang parallel programming specification nga gipatuman alang sa C, C ++ ug Fortran nga mga pinulongan OpenACC 2.6, nga naghubit sa mga himan alang sa pag-offload sa mga operasyon sa mga GPU ug mga espesyal nga processor sama sa NVIDIA PTX. Ang pagpatuman sa sumbanan hapit na makompleto Ablihi ang MP 5.0 (Open Multi-Processing), nga naghubit sa API ug mga pamaagi sa pagpadapat sa parallel programming method sa multi-core ug hybrid (CPU+GPU/DSP) nga mga sistema nga adunay shared memory ug vectorization units (SIMD). Gidugang nga mga feature sama sa lastprivate conditional, scan ug loop nga mga direktiba, order ug use_device_addr nga mga ekspresyon. Para sa OpenMP ug OpenACC, gidugang ang suporta para sa offloading operations sa ika-upat nga henerasyon (Fiji) ug ikalima nga henerasyon nga AMD Radeon (GCN) GPUs (VEGA 10/VEGA 20).
  • Para sa mga lengguwahe sa pamilyang C, ang β€œaccess” function gidugang aron ihulagway ang pag-access sa function sa mga butang nga gipasa pinaagi sa reference o pointer, ug aron i-associate ang maong mga butang sa integer nga mga argumento nga adunay impormasyon bahin sa gidak-on sa mga butang. Aron magtrabaho kauban ang "pag-access", ang "type" nga hiyas gipatuman aron mahibal-an ang sayup nga pag-access gikan sa mga gimbuhaton sa gumagamit, pananglitan, kung nagsulat mga kantidad sa usa ka lugar sa gawas sa mga utlanan sa array. Gidugang usab ang "symver" nga hiyas aron i-associate ang mga simbolo sa usa ka ELF file nga adunay piho nga mga numero sa bersyon.
  • Bag-ong mga pasidaan gidugang:
    • "-Wstring-compare" (gi-enable sa "-Wextra") - nagpasidaan mahitungod sa presensya sa mga ekspresyon diin ang zero gitandi sa resulta sa pagtawag sa strcmp ug strncmp functions, nga katumbas sa usa ka kanunay tungod sa kamatuoran nga ang gitas-on sa usa ka argumento mas dako kay sa gidak-on sa array sa ikaduhang argumento.
    • "-Wzero-length-bounds" (enabled with "-Warray-bounds") - nagpasidaan bahin sa pag-access sa mga elemento sa array nga zero ang gitas-on, nga mahimong mosangpot sa overwriting sa ubang mga datos.
    • Ang "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" ug "-Wstringop-overflow" nga mga pasidaan gipalapdan aron mapalapad ang gidaghanon sa out-of-bounds nga mga sitwasyon nga gidumala.
  • Giimplementar ang abilidad sa direktang pagpiho sa lapad nga mga karakter sa mga identifier gamit ang kasamtangan nga pag-encode (UTF-8 pinaagi sa default) kay sa UCN notation (\uNNNN o \UNNNNNNNNN). Pananglitan:

    static const int Ο€ = 3;
    int get_naΓ―ve_pi() {
    balik Ο€;
    }

  • Alang sa C nga lengguwahe, usa ka bahin sa bag-ong mga bahin nga naugmad sulod sa C2X nga sumbanan ang gipatuman (gipaandar pinaagi sa pagtino -std=c2x ug -std=gnu2x): suporta alang sa "[[]]" syntax nagpakita alang sa pagtino sa mga hiyas sama sa C++ (pananglitan, [[gnu ::const]], [[wala na gigamit]], [[fallthrough]] ug [[maybe_unused]]. Gidugang nga suporta para sa "u8" syntax para sa pagdeterminar sa mga constant nga adunay UTF-8 nga mga karakter.
    Gidugang bag-ong mga macro sa . Gidugang ang "%OB" ug "%Ob" nga mga puli sa strftime.

  • Ang default mode alang sa C mao ang "-fno-common", nga nagtugot alang sa mas episyente nga pag-access sa mga global variable sa pipila nga mga platform.
  • Para sa C++, mga 16 ka kausaban ug inobasyon ang gipatuman, naugmad sa C++20 nga sumbanan. Naglakip sa gidugang nga keyword nga "consinit"
    ug suporta alang sa mga extension sa template gipatuman "mga konsepto". Gitugotan ka sa mga konsepto sa paghubit sa usa ka hugpong sa mga kinahanglanon sa parameter sa template nga, sa oras sa pag-compile, limitahan ang hugpong sa mga argumento nga mahimong dawaton ingon mga parameter sa template. Ang mga konsepto mahimong gamiton aron malikayan ang lohikal nga pagkasumpaki tali sa mga kabtangan sa mga tipo sa datos nga gigamit sulod sa template ug sa tipo sa datos nga mga kabtangan sa mga parameter sa input.

  • Ang G++ naghatag ug detection sa dili matino nga kinaiya tungod sa pagbag-o sa kanunay nga mga butang pinaagi sa constexpr. Gipakunhod ang konsumo sa memorya sa compiler sa dihang nagkuwenta sa constexpr. Gidugang ang bag-ong mga pasidaan nga "-Wmismatched-tags" ug "-Wredundant-tags".
  • Bag-ong mga kapilian sa command line gisugyot:
    • "-fallocation-dce" aron matangtang ang dili kinahanglan nga mga parisan sa "bag-o" ug "pagtangtang" nga mga operator.
    • "-fprofile-partial-training" aron ma-disable ang size optimization para sa code nga walay training run.
    • "-fprofile-reproducible aron makontrol ang lebel sa profile reproducibility.
    • "-fprofile-prefix-path" para ipasabot ang base source build directory nga gigamit para sa separadong profile generation (para sa "-fprofile-generate=profile_dir" ug "-fprofile-use=profile_dir").
  • Sa teksto sa pasidaan alang sa gihisgutan nga mga kapilian, gihatag ang mga hyperlink nga nagtugot kanimo sa pag-adto sa dokumentasyon alang sa kini nga mga kapilian. Ang pagpuli sa URL gikontrol gamit ang "-fdiagnostics-urls" nga kapilian.
  • Gidugang preprocessor operator "__adunay_gitukod", nga magamit sa pagsusi sa mga built-in nga function.
  • Gidugang ang usa ka bag-ong built-in nga function "__builtin_roundeven" nga adunay pagpatuman sa rounding function nga gihubit sa ISO/IEC TS 18661 specification, susama sa "round", apan ang rounding nga bahin mas dako pa sa 0.5 up (sa mas dako nga bili), ubos sa 0.5 - paubos (ngadto sa zero), ug katumbas sa 0.5 - sugod sa parity sa penultimate digit.
  • Alang sa arkitektura sa AArch64, ang suporta alang sa extension sa SVE2 gidugang ug ang suporta alang sa SVE (Scalable Vector Extension) gipauswag, lakip ang dugang nga suporta alang sa built-in nga SVE ACLE nga mga gimbuhaton ug tipo, ug ang paggamit sa vectorization. Ang suporta alang sa LSE (Large System Extension) ug TME (Transactional Memory Extension) gipalapdan. Gidugang bag-ong mga instruksyon nga gisugyot sa Armv8.5-A ug Armv8.6-A, lakip ang mga instruksyon alang sa random number generation, rounding, memory tag binding,
    bfloat16 ug matrix multiplication. Gidugang nga suporta sa processor
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 ug
    Marvell ThunderX3.

  • Gidugang nga suporta alang sa ABI FDPIC (32-bit function pointers) para sa ARM64. Gidisenyo pag-usab ug gi-optimize nga pagproseso sa 64-bit integer nga mga operasyon. Gidugang nga suporta sa CPU
    Arm Cortex-A77,
    Arm Cortex-A76AE ug
    Arm Cortex-M35P. Gipalapad nga suporta alang sa mga instruksyon sa pagproseso sa datos sa ACLE, lakip ang 32-bit SIMD, 16-bit multiplication, latch arithmetic, ug uban pang DSP algorithm optimizations. Gidugang nga suporta sa eksperimento alang sa mga panudlo sa ACLE CDE (Custom Datapath Extension).

  • Mahinungdanon nga gipaayo ang paghimo sa code ug vectorization sa backend alang sa mga AMD GPU base sa GCN microarchitecture.
  • Gidugang nga suporta alang sa mga aparato nga sama sa XMEGA alang sa arkitektura sa AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209 4808, ATmega4809 ug ATmegaXNUMX.

  • Usa ka bag-ong Intel ENQCMD instruction set architecture extension (-menqcmd) gidugang para sa IA-32/x86-64 architectures. Gidugang nga suporta alang sa Intel Cooperlake (-march=cooperlake, naglakip sa AVX512BF16 ISA extension) ug Tigerlake (-march=tigerlake, naglakip sa MOVDIRI, MOVDIR64B ug AVX512VP2INTERSECT ISA extensions) nga mga CPU.
  • Ang pagpatuman sa HSAIL (Heterogeneous System Architecture Intermediate Language) para sa heterogeneous nga mga sistema sa pag-compute base sa HSA nga arkitektura wala na gigamit ug lagmit tangtangon sa umaabot nga pagpagawas.

Source: opennet.ru

Idugang sa usa ka comment