Dimittis de GCC 9 compilator suite

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

GCC 9.1 notabile est ad stabiliendum subsidium pro vexillo C++17, ad efficiendum facultatem vexillum C++20 futuri (codiceamum C++2a) notabile, inclusio in fronte linguae D, subsidii partialis pro OpenMP 5.0 , prope integrum subsidium OpenACC 2.5, scalabilitas optimizationum et optimizationum interproceduralium in scaena ligatura, dilatatione instrumentorum diagnosticorum ac novis admonitionibus additis, subsidia in OpenRISC, C-SKY V2 et AMD GCN GPU.

Main mutationes:

  • Addidit auxilium pro D lingua programmandi. GCC continet frontend cum compilator GDC (Gnu D Compiler) et bibliothecae runtimicae (libphobos), quibus te utere vexillum GCC ad programmata in lingua programmandi D aedificandi. Processus parandi D linguae subsidii in GCC coepit rursus in MMXI, sed trahebatur on ob necessitatem codicem in obsequio GCC requisitis ac quaestionibus cum translatione iurium intellectualium proprietatum ad Martem Digitalem deducere, quod in D programmandi lingua enucleatur;
  • Emendationes factae sunt in codice genitoris. Exempli causa, usus diversarum strategiarum ad amplificandas expressiones Switch (mensas salire, bit test, arbor decisionis) secundum rerum condiciones ad effectum adducta est. Facultatem ad functiones lineares transformandi addidit quae expressio switch utendi in "-ftree-conversionis" optimizationis (exempli gratia, statuto condicionum sicut "casus 2: quomodo = 205; confractus; casus 3: quomodo = 305; confractus convertetur ad 100* quomodo + 5;
  • Improved optimizations interprocedurales. Inlinea instruere occasus ad modernos C++ codebases accommodati sunt et novis parametris max-inline-insns parvis, max-inline-insns amplitudinis, inlineatis functionis, inlineato tempore, inlineato-insns et inlineato -thunk-time. Melior accuratio et irascibilis frigoris/calidi codicis separatio est. Improved scalability ad amplissimum translatione unitates (exempli gratia, applicans ipsum ad conjunctionem cum magnis programmatibus);
  • Melioratio mechanismus in eventus codicis profiling (PGO - Optimizationis Profile-ductus) emendatus est, qui meliorem codicem generat in analysi notarum codicis executionis. Optio summarium "-fprofile-usus"modo optimizationes modos comprehendit "-fversiones ansas-pro-gradationes", "-floop-intentio", "-floop-unroll-and-jam" et "-ftree-loop-distributionem". Inclusio histograms cum calculis in scriniis removit, quae magnitudinem imaginum perfiles redegerunt (histogrammata nunc generantur in musca cum optimizations in conjunctione faciendo);
  • Consectetur Linking Time Optimizations (LTO). Simplificatio typorum praevisa est antequam proventum generaret, quae effecit ut signanter magnitudinem LTO imaginum objecti reduceret, memoriam consummationis in scaena ligaminis reduceret, et operationum parallelizationem emendaret. Numerus partitionum (param lto-partitionum) ab 32 ad 128 auctus est, quae cum magno numero CPU staminum perficiendo in systemata meliore auctus est. Modulus additus est ad numerum optimizer processuum regendum
    "-param ito-max-stream-parallelism";

    Quam ob rem, optimizationes comparatae GCC 8.3, GCC 9 introductae sunt licet compilationem reducere tempus Firefox 5 et LibreOffice 66 per circiter 6.2.3%. Magnitudo obiecti files decrevit 7%. Ligans tempus in nucleo CPU decrevit 8%. Stadio sequentialis optimae conjunctionis nunc 11% velocior est et memoriam 28% minus consumit. Memoria consummationis uniuscuiusque processus stadii paralleli LTO per 20% decrescentium;

  • Pleraque programmationis parallelae specificatio pro C, C ++ et fortranae linguae impletur OpenACC 2.5, quae instrumenta definit ad operationes offloading in GPUs et processibus specialioribus ut NVIDIA PTX;
  • Partialis subsidium vexillum pro C et C ++ est implementum 5.0 OpenMP (Open Multi-Processing), quae definit API et methodos applicandi rationes para- bilium programmandi pro C, C++ et Fortran linguarum in nucleo et hybridarum (CPU+GPU/DSP) systemata cum unitatibus communibus memoria et vectorizatione (SIMD) ;
  • Novae admonitiones pro C lingua additae sunt: ​​"-Waddress-of-packed-socius"(Unaligned indicatorum pretii facis membrum de compages seu unionem) and
    Β«-Wabsolute-valorem" (cum functionibus accessendis ad valorem absolutum computandum, si munus pro determinato argumento aptius habeatur, e.g. fabs (3.14) loco abs(3.14) adhiberi debent. Novae admonitiones pro C++: "exemplari",
    "-Winit-list-vita", "-Wredundant-movendum", "Wpessimizing-movendum" et "-Wclass-conversionem". Multae admonitiones in promptu antea dilatentur;

  • Addidit subsidium experimentalem ad partem futuri C vexillum linguae, codenamed C2x. Ut subsidium C2x efficiat, optionibus "-std=c2x" et "-std=gnu2x" utere (ad extensiones GNU enable). Vexillum adhuc in evolutionis gradu praematuro est, ideoque eius facultatibus, tantum expressio _Static_assert uno argumento confirmatur (_Static_assert with two arguments is standardised in C11);
  • Firmamentum pro C++17 vexillum stabile declaratum est. In fronte, linguae facultates C++ 17 plene perficiuntur, et in libstdc++, bibliothecae functiones in vexillo definitae prope sunt ad plenam exsequendam;
  • Continued implementation elementa futuri C ++ 2a vexillum. Exempli gratia, facultas includendi septa in initializationi adiecta est, extensiones ad lambda expressiones effectae sunt, subsidia pro inanibus membrorum notitiarum structurarum ac verisimilium attributorum accessione, facultatis ad functiones virtuales in expressionibus condicionalibus vocandi provisum est. , etc.
    Ut C++2a sustentaretur, "-std=c++2a" et "-std=gnu++2a" bene uteretur. Addidit frenum et versionis caput lima ad libstdc ++ pro C ++ 2a, std :: remove_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std ::is_nothrow_convertible et std :: type_identitatis lineamenta, std :: punctum, std :: lerp functiones , std :: bind_front,
    std :: visita, std::is_constant_evaluated et std :: assume_aligned, additur subsidium char8_t type, facultatem ad reprimendam praepositionem et suffixo chordarum implevit.

  • ARM PROCESSORUM novum subsidium addidit
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE and Neoverse N1. Addidit subsidium instructionum in Armv8.3-A inductarum ad operandum numeros numerosos numerosos, pseudo-passim numerorum generationum (memtag) et memoriam tagging (memtag), necnon instructiones ad obsidendos impetus ad executionem speculativam et operationem praedicationis rami unitatis. . Ad architecturae AArch64, modus tutelae adiectum est intersectiones ACERVUS et acervus ("-fstack-concursus tutela"). Uti liniamenta Armv8.5-A architecturae, optio "-march=armv8.5-a" adiecta est.

  • Backendulum includit ad codicem generandi AMD GPUs sub microarchitecturae GCN fundatum. Exsecutio nunc circumscripta est applicationum simplicium filorum compilatione (auxilium ad calculos multi- plicandi per OpenMP et OpenACC exhibendos postea) et subsidium GPU Fiji et Vega 10;
  • Addidit novum backend pro processors OpenRISC;
  • Addidit backend ad processors C-SKY V2Sinensium turmam variis eiusdem nominis machinationibus effectam;
  • Omnes optiones rectae imperativae quae valores byte agunt, suffixis kb, KiB, MB, MiB, GB et GiB sustinent;
  • implemented optio permittit te ut salvum compilationem consequaris pro systematibus vivis-inaequalis propter multi-gradum dominium in usu interproceduralis (IPA) optimizations;
  • Adiecit "--completio" optionem ad imperium bene-activum complementum optionis utendi cum vercundus;
  • Instrumenta diagnostica praebent repraesentationes fontium textuum excerptorum indicans numerum linearum et informationes cognatas visibiliter notans, sicut genera operandi. Ut in ostentationem linearum numerorum et pittacorum disables, optiones "-fno-diagnostics-show-line-numeri" et "-fno-diagnosticos-show-inclita" providentur;

    Dimittis de GCC 9 compilator suite

  • Expanded instrumenta ad errores diagnoscendi in C++ codice, faciliores promptitudines informationum circa causas errorum et elucidanda parametrorum problematicorum;

    Dimittis de GCC 9 compilator suite

  • Optio addita "-fdiagnostics-format=json", quae patitur diagnostica output in formato-readabili forma generare (JSON);
  • Novas profilingas optiones addidit "-fprofile-filter-limas" et "-fprofile-exclude-limas" ut lego fonticuli lima ut discursum;
  • AddressSanitizer generationis verificationis pacti magis praebet pro variabilium automaticorum generatione, quae memoriam minuit consumptionem documenti exsecutabilis represso;
  • Improved output in "-fopt-infoΒ» (detailed information about optimizations added). Novas praefixiones "optimized" et "desiderandas" addidit, praeter praefixam "notam" in promptu. Adiectae sunt notitiae outputa de decernendo in cyclorum inflexione et vectorizationis;
  • Optionem "-fsave-optimization-record" addidit, cum specificatur, GCC fasciculum SRCFILE.opt-record.json.gz servat cum descriptione decisionum in usu quarumdam optimizationum. Nova optio differt a modo "-fopt-info" addito metadata addito, ut informationes de profile et vincula inline;
  • Adiectae sunt optiones "-fipa-stack-alignment" et "-fipa-reference-addressable" ut ACERVUS alignment moderentur et usus appellandi modos (scribe-tantum vel lege-exact) pro optimizationibus interproceduralibus variabilibus stabilibus;
  • Nova aedificata in functionibus introducuntur ad imperium attributum ligandum necnon mores pertinentes ad ramum praedictum et exsecutionem speculativam: "__builtin_has_attribute''__builtin_expect_with_probability" Et "__builtin_speculation_safe_valueΒ». Novum attributum additum est pro functionibus, differentiis et speciebus Copy;
  • Full support for asynchronous input/output has been implemented for the Fortran language;
  • Support for Solaris 10 (*-*-solaris2.10) et Cell/BE (Cell Broadband Engine SPU) suggesta deprecata sunt et in altera maiore missione removebuntur. Firmamentum Armv2, Armv3, Armv5 et Armv5E architecturae discontinuatae sunt. Support pro Intel MPX (Extensiones Memoria Protectionis) discontinuata est.

Source: opennet.ru