Dimittis de GCC 10 compilator suite

Post annum evolutionis published de libera paro of compilatores GCC 10.1, prima maior relaxatio in novo GCC 10.x ramo. In normam novum consilium numeri emissio, versio 10.0 in processu evolutionis adhibita, et paulo ante emissio GCC 10.1, ramus GCC 11.0 iam ramosus erat, ex quo emissio altera significativa GCC 11.1 formata esset.

GCC 10.1 notabilis est ad exsequendam multarum innovationum in C++ lingua, quae ad C++20 vexillum, emendationes ad vexillum linguae C futurum C (C2x) pertinentes, novas optimizationes in compilator supinis et experimentalis sustentationis stabilis analysis modus. Praeterea, in praeparatione novi rami, consilium repositorium a SVN ad Git transtulit.

Main mutationes:

  • adiecit modus experimentalis analysis static "-fanalyzer", qui intensivam analysin interproceduralem exercet analysin codicis exsecutionis viarum et notitiarum in progressione fluit. Modus est problematum in scaena compilatione detegendi, sicut duplex vocat ad liberum munus () unius memoriae spatium, lima descriptorem pinum, dereferencendi et transitum nullis indicibus, accessu memoria clausulis liberatis, valores inextinctos utendo, etc. Usus novi modus in codice OpenSSL iam factus est ut cognoscere posset periculosum vulnerability.
  • Improved optimizations interprocedurales. IPA-SRA (Responsio interproceduralis Scalar Shared) transitus resignatus est ad operandum ad tempus ligandum et, inter alia, nunc removet computatos et insuetos redditos valores. In "-O2" optimizatione modus, optio "-finline-munerum" datur, quae mutuatur ad favorem magis compactum in executione effectus. Opus heuristicae in instruere functionis lineae acceleratum est. Inline dilatatio et munus exquisitis Heuristicis nunc uti possunt informationes de iugis valoris ad singularum transformationum efficaciam praedicere. Nam C ++, subtilitas generis substructio alias parsing emendatus est.
  • Consectetur Linking Time Optimizations (LTO). Addidit novum exsecutabile lto-TUBER ut reset notitia de objecto lima cum LTO bytecode. Parallelus LTO sponte transit numerum simul currentium determinare et operas facere et, si definiri non possunt, informationes de numero CPU nucleorum utere ut factor parallelisationum. Addidit facultatem LTO bytecode comprimendi utendi zstd algorithmo.
  • Melioratio mechanismus in eventus codicis profiling (PGO - Optimizationis Profile-ductus) emendatus est, qui meliorem codicem generat in analysi notarum codicis executionis. Melior est profile sustentationem inter compilationem et calidum/frigidum codicem separatio. optio Via "-fprofile-valoresΒ» Monere nunc potest usque ad 4 valores profile, exempli causa ad indirectas vocat et informationes profile accuratiores providens.
  • Parallela programmatio specificatio pro C, C ++ et linguarum Fortran OpenACC 2.6, quod instrumenta definit ad operationes offloading in GPUs et processibus specialioribus ut NVIDIA PTX. Exsequendam vexillum fere completum est 5.0 OpenMP (Open Multi-Processing), quae definit API ac methodos applicandi rationes programmandi parallelas in multi-core et hybrida (CPU+GPU/DSP) systemata cum unitatibus communibus memoriae et vectorizationis (SIMD). Notae additae sunt ut condiciones privatae, scan et ansa praescriptiones, ordo et usus_device_addr expressiones. Pro OpenMP et OpenACC, subsidium adiectum est ad operationes offloading in generatione quarta (Fiji) et generationis quintae AMD Radeon (GCN) GPUs (VEGA 10/VEGA 20).
  • Ad linguas C familiae, munus "aditus" additum est ad describendam accessum functionis obiectis per respectum vel monstratorem, et talibus obiectis aggregare integris argumentis in quibus notitias de magnitudine rerum. Operari in coniunctione cum "aditus", "type" attributum ad effectum deduci potest ad falsam accessum ab usuario functionibus deprehendere, exempli gratia, cum bona scribens ad aream extra limites ordinatae. Etiam additum est "symver" attribuere symbolis consociatis in fasciculo ELF cum certis numeris versionis.
  • Monitiones novas addiderunt;
    • "-Wstring-compare" (enabled with "-Wextra") - monet de praesentia locutionum in quibus nulla comparetur cum effectu vocationis functionum strcmp et strncmporum, quod aequivalet constanti ob hoc quod longitudo. unius argumenti maior est magnitudo quam in secunda ratione ordinata.
    • "-Wzero-longitudo-terminus" (enabled with "-Warray-bound") - monet de accessu ordinatarum elementorum nullae longitudinis, quae ad alias notitias scribendas inducat.
    • The "-Warray-lines", "-Wformat-abundant", "-Wrestrict", "Wreturn-locus-addr" et "-Wstringop-superfluum" monita dilatata sunt ut numerum extra limites adiunctis augeret. quae tractantur.
  • Facultatem perfecit ut characteres in identificatorio currenti descriptam (UTF-8 defaltam) potius quam notationem UCN denotare (\uNNNN vel UNNNNNNN" late specificare possit. Exempli gratia:

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

  • Ad linguam C, portio novorum notarum intra vexillum C2X evoluta est (para specificando -std=c2x et -std=gnu2x): subsidium "[[]]" syntaxin apparuit ad attributa definienda ut in. C++ (exempli gratia, [[gnu ::const]], [[deprecatus]], et [[fortasse_unused]] subsidium adiecit "u8" syntaxin definiendi constantes cum characteribus utf-8.
    Addidit novum utentis . Adduntur "%OB" et "%OB" substitutiones strtime.

  • Modus defaltus pro C est "-fno-communis", qui permittit ut efficacius aditus ad global variabiles in quibusdam suggestis.
  • Nam C ++, circa 16 mutationes et innovationes effectae sunt, in signo C ++ 20 effectae. Additum comprehendo keyword "constinit"
    et firmamentum ad extensiones templates impletum est "conceptusΒ». Conceptus permitto te definire a paro of template parametri requisita, quae, tempore compilare, argumentorum statuto circumscribere quae parametris templates accipi possunt. Conceptus adhiberi possunt ad vitandas repugnantias logicas inter proprietates notitiarum generum, quibus usus est in Formula et notitiis specierum proprietatum parametri initus.

  • G++ deprehensio indefinitorum morum causata mutandis constantibus obiectis per constexpr. Tabes memoriae redacta per compilator cum calculando constexpr. Novas admonitiones "-Wmismatched-tags" et "-Wredundant-tags" addidit.
  • Novum mandatum rectae optiones propositae sunt:
    • "-fallocation-dce" ad necessaria paria "novarum" et "delere" operariorum removere.
    • "-fprofile-partialis-disciplina" ut disable size optimizationi pro codice qui disciplina currendi non habet.
    • "-fprofile-reproducibilis ad moderandum reproducibilitatem graduum profile.
    • "-fprofile-praefixum-viam" definire fundamentum fundamentum constructum directorium usus ad generationem profile separatam (pro "profile-generate=profile_dir" et "-fprofile-use=profile_dir").
  • In textu monitionis pro optionibus memoratis, hyperlinks praebentur quae te ad documenta harum optionum ire permittunt. URL substitutio regitur per optionem "-fdiagnostics-urlorum".
  • Preprocessor adiecit operator "__has_builtin", quae ad reprimendam in functionibus constructis adhiberi possunt.
  • Novam aedificatam in functione "__structin_roundeven" addidit cum exsecutione functionis rotunditatis definitae in ISO/IEC TS 18661 specification, "rotundo" similis, sed pars rotunda maior quam 0.5 usque (ad valorem maius), minus quam 0.5 β€” descendens (ad nulla), et aequalis 0.5 β€” a pari digiti penultimi incipiens.
  • Pro architectura AArch64, subsidium extensionis SVE2 additum est et subsidium pro SVE (Scalable Vector Extensio) emendatum est, inclusa adiecta subsidia in functionibus et speciebus SVE ACLE constructis et usu vectorizationis. Auxilio LSE (Extensiones magnae System) et TME (Memoria Transactionalis Tractus) dilatatum est. Adiectae sunt novae instructiones in Armv8.5-A et Armv8.6-A propositae, additis instructionibus de numero incerti generationis, rotunditatis, memoriae ligaturae;
    bfloat16 et matrix multiplicatio. Addidit processus auxilium
    Brachium Cortex-A77;
    Brachium Cortex-A76AE;
    Brachium Cortex-A65;
    Brachium Cortex-A65AE;
    Brachium Cortex-A34 and
    Mirare ThunderX3.

  • Addidit subsidium ABI FDPIC (32-bit munus indicibus) pro ARM64. Redesigned and optimized processus of 64 bits integri operationes. Addidit CPU firmamentum
    Brachium Cortex-A77;
    Brachium Cortex-A76AE et
    Brachium Cortex-M35P. Auxilia dilatata pro ACLE actis processus notitiae, inter 32-bit SIMD, 16-bit multiplicatio, pessulus arithmetica, et aliae optimizationes DSP algorithmus. ACLE CDE (Custom Datapath Extensio) instructionum experimentum addidit.

  • Insigniter emendavit codicem generatio et vectorizationis in tergum pro AMD GPUs innixa in microarchitectura GCN.
  • Addidit subsidium XMEGA sicut machinas pro architectura AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmegam1609, ATmega3208, ATmega3209, ATmega4808, ATmega4809, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMX, ATmegaXNUMXaXNUMX, ATmegaXNUMX, ATmegaXNUMX.

  • Nova instructio Intel ENQCMD extensionis architecturae positae (-menqcmd) addita est architecturae IA-32/x86-64. Auxilia addita pro Intel Cooperlake (-march=cooperlake, extensio ISA AVX512BF16 includit) et Tigerlake (-march=tigerlake, includunt extensiones MOVDIRI, MOVDIR64B et AVX512VP2 INTERECT ISA) CPUs.
  • Exsecutio HSAIL (Heterogenea Systema Architecturae Intermediati Language) pro systematis heterogeneis computandis in architectura HSA deprecata est et in futura emissione amovebitur verisimile.

Source: opennet.ru