Itusilẹ ti GCC 9 compiler suite

Lẹhin ọdun kan ti idagbasoke atejade Tu ti a free ṣeto ti compilers GCC 9.1, itusilẹ pataki akọkọ ni ẹka GCC 9.x tuntun. Ni ibamu pẹlu titun eto awọn nọmba itusilẹ, ẹya 9.0 ni a lo ninu ilana idagbasoke, ati ni kete ṣaaju itusilẹ ti GCC 9.1, ẹka GCC 10.0 ti wa tẹlẹ ni pipa, lori ipilẹ eyiti itusilẹ pataki ti o tẹle, GCC 10.1, yoo ṣẹda.

GCC 9.1 jẹ ohun akiyesi fun imuduro atilẹyin fun boṣewa C ++ 17, tẹsiwaju lati ṣe imuse awọn agbara ti boṣewa C ++20 iwaju (codenamed C ++ 2a), ifisi ni iwaju iwaju fun ede D, atilẹyin apakan fun OpenMP 5.0 , fere pipe support fun OpenACC 2.5, mu scalability ti interprocedural optimizations ati awọn ti o dara ju ni ipele abuda, imugboroosi ti aisan irinṣẹ ati afikun ti titun ikilo, backends fun OpenRISC, C-SKY V2 ati AMD GCN GPU.

akọkọ iyipada:

  • Atilẹyin ti a ṣafikun fun ede siseto D. GCC pẹlu iwaju iwaju pẹlu alakojọ GDC (Gnu D Compiler) ati awọn ile-ikawe asiko (libphobos), eyiti o gba ọ laaye lati lo GCC boṣewa lati kọ awọn eto ni ede siseto D. Ilana ti gbigba atilẹyin ede D ni GCC ti bere pada ni 2011, ṣugbọn fa lori nitori iwulo lati mu koodu naa wa ni ibamu pẹlu awọn ibeere GCC ati awọn iṣoro pẹlu gbigbe awọn ẹtọ ohun-ini imọ si Digital Mars, eyiti o n dagbasoke ede siseto D;
  • Awọn ilọsiwaju ti ṣe si olupilẹṣẹ koodu. Fun apẹẹrẹ, awọn lilo ti o yatọ si ogbon fun a faagun Yipada expressions (fo tabili, bit igbeyewo, igi ipinnu) da lori awọn ipo ti a ti muse. Ṣe afikun agbara lati yi awọn iṣẹ laini pada ti o pẹlu ikosile Yipada nipa lilo iṣapeye “-ftree-switch-conversion” (fun apẹẹrẹ, eto awọn ipo bii “ọran 2: bawo ni = 205; adehun; ọran 3: bawo ni = 305; Bireki ;” yoo yipada si “100 * bawo ni + 5”;
  • Imudara awọn iṣapeye laarin ilana. Awọn eto imuṣiṣẹ inline ti ni ibamu fun awọn koodu koodu C ++ ode oni ati gbooro pẹlu awọn paramita tuntun max-inline-insns-small, max-inline-insns-iwọn, iṣẹ-iṣẹ-innsn-iṣẹ-iṣẹ-iṣẹ-iṣẹ, akoko-iṣẹ-iṣẹ-iṣẹ, aipin-thunk-insns ati uninlined -thunk-akoko. Imudarasi išedede ati aggressiveness ti tutu / gbona koodu Iyapa. Imudara scalability fun pupọ awọn ẹya itumọ (fun apẹẹrẹ, nigba lilo iṣapeye ni ipele asopọ si awọn eto nla);
  • Ẹrọ iṣapeye ti o da lori awọn abajade ti profaili koodu (PGO - iṣapeye-itọnisọna profaili) ti ni ilọsiwaju, eyiti o ṣe agbekalẹ koodu to dara julọ ti o da lori itupalẹ awọn abuda ti ipaniyan koodu. Aṣayan Lakotan"-fprofile-lilo"bayi pẹlu awọn ipo iṣapeye" -fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ati "-ftree-loop-pinpin". Ti yọkuro ifisi ti awọn histogram pẹlu awọn iṣiro ninu awọn faili, eyiti o dinku iwọn awọn faili pẹlu awọn profaili (awọn histogram ti wa ni ipilẹṣẹ lori fo nigba ṣiṣe awọn iṣapeye lakoko sisopọ);
  • Awọn iṣapeye Akoko Isopọ Imudara (LTO). Irọrun awọn oriṣi ni a pese ṣaaju ipilẹṣẹ abajade, eyiti o jẹ ki o ṣee ṣe lati dinku iwọn awọn faili ohun LTO ni pataki, dinku agbara iranti ni ipele abuda, ati ilọsiwaju isọdọkan ti awọn iṣẹ. Nọmba awọn ipin (-param lto-partitions) ti pọ si lati 32 si 128, eyiti o ṣe ilọsiwaju iṣẹ lori awọn eto pẹlu nọmba nla ti awọn okun Sipiyu. A ti ṣafikun paramita kan lati ṣakoso nọmba awọn ilana iṣapeye
    "-param lto-max-streaming-parallelism";

    Bi abajade, ni akawe si GCC 8.3, awọn iṣapeye ti a ṣafihan ni GCC 9 laaye dinku akoko akopo Firefox 5 ati LibreOffice 66 nipa bii 6.2.3%. Iwọn awọn faili ohun kan dinku nipasẹ 7%. Akoko abuda lori Sipiyu 8-core dinku nipasẹ 11%. Ipele iṣapeye lẹsẹsẹ ti ipele ọna asopọ jẹ bayi 28% yiyara ati gba iranti 20% kere si. Lilo iranti ti ero isise kọọkan ti ipele parallelized ti LTO dinku nipasẹ 30%;

  • Pupọ julọ sipesifikesonu siseto ti o jọra jẹ imuse fun awọn ede C, C++ ati Fortran Ṣii ACC 2.5, eyi ti o ṣe apejuwe awọn irinṣẹ fun awọn iṣẹ gbigbe lori awọn GPUs ati awọn ilana pataki gẹgẹbi NVIDIA PTX;
  • Atilẹyin apa kan fun boṣewa ti jẹ imuse fun C ati C ++ ṢiiMP 5.0 (Ṣiṣiṣi Olona-ilana), eyiti o ṣalaye API ati awọn ọna ti lilo awọn ọna siseto afiwera fun C, C ++ ati awọn ede Fortran lori ọpọlọpọ-mojuto ati awọn eto arabara (CPU + GPU / DSP) pẹlu iranti pinpin ati awọn ẹya vectorization (SIMD) ;
  • A ti fikun awọn ikilọ titun fun ede C: "-Waddress-ti-aba ti-egbe"(iye itọka ti ko ni ibamu si ọmọ ẹgbẹ ti o kun ti eto tabi ẹgbẹ) ati
    «-Wabsolute-iye"(nigbati o ba n wọle si awọn iṣẹ fun ṣiṣe iṣiro iye pipe, ti iṣẹ ti o dara julọ ba wa fun ariyanjiyan ti a sọ pato, fun apẹẹrẹ, awọn fabs (3.14) yẹ ki o lo dipo abs (3.14). Awọn ikilọ titun ti a fikun fun C ++: "-Idaakọ-ti a ti sọ tẹlẹ",
    "-Winit-akojọ-igbesi aye", "-Wredundant-gbe", "-Wpessimizing-gbe" ati "-Wclass-iyipada". Ọpọlọpọ awọn ikilo ti o wa tẹlẹ ti gbooro;

  • Atilẹyin esiperimenta ti a ṣafikun fun apakan ti boṣewa ede C ọjọ iwaju, ti a fun ni orukọ C2x. Lati mu atilẹyin C2x ṣiṣẹ, lo awọn aṣayan "-std=c2x" ati "-std=gnu2x" (lati mu awọn amugbooro GNU ṣiṣẹ). Iwọn naa tun wa ni ipele ibẹrẹ ti idagbasoke, nitorinaa, ti awọn agbara rẹ, ikosile _Static_assert nikan pẹlu ariyanjiyan kan ni atilẹyin (_Static_assert pẹlu awọn ariyanjiyan meji ti wa ni idiwọn ni C11);
  • Atilẹyin fun boṣewa C ++ 17 ti kede iduroṣinṣin. Ni iwaju iwaju, awọn agbara ede ti C ++ 17 ti wa ni imuse ni kikun, ati ni libstdc ++, awọn iṣẹ ikawe ti a ṣalaye ni boṣewa wa nitosi imuse ni kikun;
  • Tesiwaju imuse eroja ti ojo iwaju C ++ 2a bošewa. Fun apẹẹrẹ, agbara lati pẹlu awọn sakani lakoko ibẹrẹ ni a ti ṣafikun, awọn amugbooro fun awọn ikosile lambda ti ṣe imuse, atilẹyin fun awọn ọmọ ẹgbẹ ofo ti awọn ẹya data ati pe o ṣee ṣe / awọn abuda ti ko ṣeeṣe ti ṣafikun, agbara lati pe awọn iṣẹ foju ni awọn ikosile majemu ti pese , ati be be lo.
    Lati mu atilẹyin C++2a ṣiṣẹ, lo awọn aṣayan "-std=c++2a" ati "-std=gnu++2a". Fi kun bit ati awọn faili akọsori ẹya si libstdc ++ fun C ++ 2a, std :: yọ_cvref, std :: unwrap_reference, std :: unwrap_decay_ref, std :: is_nothrow_convertible ati std :: iru_identity tẹlọrun, Std :: midpoint, std :: , std :: bind_iwaju,
    std :: ibewo, std :: is_constant_evaluated ati std :: ro_aligned, fi kun support fun awọn char8_t iru, muse ni agbara lati ṣayẹwo awọn ìpele ati suffix ti awọn okun (stars_pẹlu, pari_pẹlu);

  • Atilẹyin ti a ṣafikun fun awọn ilana ARM tuntun
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE ati Neoverse N1. Atilẹyin ti a ṣafikun fun awọn ilana ti a ṣafihan ni Armv8.3-A fun ṣiṣẹ pẹlu awọn nọmba eka, iran airotẹlẹ-ID nọmba (rng) ati fifi aami si iranti (memtag), ati awọn itọnisọna fun didi awọn ikọlu ti o ni ibatan si ipaniyan akiyesi ati iṣiṣẹ ti apakan asọtẹlẹ ẹka . Fun faaji AArch64, ipo aabo kan ti ṣafikun intersections ti akopọ ati òkiti ("-fstack-ija-idaabobo"). Lati lo awọn ẹya ti Armv8.5-A faaji, aṣayan “-march=armv8.5-a” ti ṣafikun

  • O pẹlu ẹhin ẹhin fun ṣiṣẹda koodu fun awọn GPUs AMD ti o da lori microarchitecture GCN. Awọn imuse ti wa ni Lọwọlọwọ ni opin si awọn akopọ ti awọn ohun elo ti o ni ẹyọkan (atilẹyin fun ṣiṣe awọn iṣiro-ọpọ-asapo nipasẹ OpenMP ati OpenACC yoo funni nigbamii) ati atilẹyin fun GPU Fiji ati Vega 10;
  • Fi kun titun backend fun nse ṢiiRISC;
  • Fi kun backend fun nse C-SKY V2, ti a ṣe nipasẹ ile-iṣẹ Kannada ti orukọ kanna fun orisirisi awọn ẹrọ onibara;
  • Gbogbo awọn aṣayan laini aṣẹ ti o ṣiṣẹ awọn iye baiti ṣe atilẹyin awọn suffixes kb, KiB, MB, MiB, GB ati GiB;
  • Ti ṣe imuse aṣayan "-flive-patching=[inline-only-static|inline-clone]" gba ọ laaye lati ṣaṣeyọri akojọpọ ailewu fun awọn ọna ṣiṣe patching laaye nitori iṣakoso ipele-ọpọlọpọ lori lilo ilana interprocedural (IPA) awọn iṣapeye;
  • Fi kun aṣayan "--ipari" fun iṣakoso ti o dara-dara ti ipari aṣayan nigba lilo bash;
  • Awọn irinṣẹ iwadii n pese awọn ifihan ti awọn iyasọtọ ọrọ orisun ti n tọka nọmba laini ati isamisi wiwo ti o ni ibatan alaye, gẹgẹbi awọn oriṣi operand. Lati mu ifihan awọn nọmba ila ati awọn akole ṣiṣẹ, awọn aṣayan "-fno-diagnostics-show-line-numbers" ati "-fno-diagnostics-show-labels" ti pese;

    Itusilẹ ti GCC 9 compiler suite

  • Ti fẹ awọn irinṣẹ fun ṣiṣe ayẹwo awọn aṣiṣe ni koodu C ++, imudara kika ti alaye nipa awọn idi ti awọn aṣiṣe ati afihan awọn ipilẹ iṣoro;

    Itusilẹ ti GCC 9 compiler suite

  • Aṣayan ti a ṣafikun “-fdiagnostics-format=json”, eyiti o ngbanilaaye ṣiṣẹda iṣelọpọ iwadii ni ọna kika-ẹrọ (JSON);
  • Awọn aṣayan profaili tuntun ti a ṣafikun “-fprofile-filter-files” ati “-fprofile-exclude-files” lati yan awọn faili orisun lati ṣiṣẹ;
  • AdirẹsiSanitizer n pese iran ti koodu ijẹrisi iwapọ diẹ sii fun awọn oniyipada adaṣe, eyiti o dinku agbara iranti ti faili ṣiṣe ti n ṣayẹwo;
  • Ilọsiwaju ilọsiwaju ninu"-fopt-alaye»(alaye alaye nipa awọn iṣapeye ti a ṣafikun). Ṣafikun awọn ami-iṣaaju tuntun “iṣapeye” ati “padanu”, ni afikun si “akọsilẹ” ìpele ti o wa tẹlẹ. Ijade ti alaye ti a ṣafikun nipa ṣiṣe ipinnu lori laini-sisọ ati vectorization ti awọn iyipo;
  • Ṣe afikun aṣayan “-fsave-optimization-record”, nigba ti o ba wa ni pato, GCC fi faili SRCFILE.opt-record.json.gz pamọ pẹlu apejuwe awọn ipinnu lori lilo awọn iṣapeye kan. Aṣayan tuntun yato si ipo “-fopt-info” pẹlu pẹlu afikun metadata, gẹgẹbi alaye nipa profaili ati awọn ẹwọn inline;
  • Awọn aṣayan ti a ṣafikun “-fipa-stack-alignment” ati “-fipa-reference-addressable” lati ṣakoso titete akopọ ati lilo awọn ipo adirẹsi (kọ-nikan tabi kika-gangan) fun awọn oniyipada aimi lakoko awọn iṣapeye laarin ilana;
  • Awọn iṣẹ ti a ṣe sinu tuntun ni a ṣe agbekalẹ lati ṣakoso isọdọkan abuda bi daradara bi ihuwasi ti o ni ibatan si asọtẹlẹ ẹka ati ipaniyan ilana akiyesi: "__builtin_ni iwa«,«__builtin_reti_pẹlu_iṣeeṣe"Ati"__builtin_speculation_safe_value". Iwa tuntun ti ṣafikun fun awọn iṣẹ, awọn oniyipada ati awọn oriṣi daakọ;
  • Atilẹyin ni kikun fun titẹ sii/jade asynchronous ti ni imuse fun ede Fortran;
  • Atilẹyin fun Solaris 10 (*-*-solaris2.10) ati Cell / BE (Cell Broadband Engine SPU) awọn iru ẹrọ ti parẹ ati pe yoo yọkuro ni itusilẹ pataki ti nbọ. Atilẹyin fun Armv2, Armv3, Armv5 ati Armv5E faaji ti duro. Atilẹyin fun Intel MPX (Awọn amugbooro Idaabobo Iranti) ti dawọ duro.

orisun: opennet.ru

Fi ọrọìwòye kun