Itusilẹ ti GCC 11 compiler suite

Lẹhin ọdun kan ti idagbasoke, itusilẹ ti GCC 11.1 compiler suite ọfẹ ti tu silẹ, itusilẹ pataki akọkọ ni ẹka GCC 11.x tuntun. Labẹ ero nọmba itusilẹ tuntun, ẹya 11.0 ni a lo lakoko idagbasoke, ati ni kete ṣaaju itusilẹ ti GCC 11.1, ẹka GCC 12.0 ti tẹlẹ forked, lati eyiti itusilẹ pataki ti o tẹle ti GCC 12.1 yoo ṣẹda.

GCC 11.1 jẹ ohun akiyesi fun iyipada rẹ si lilo ọna kika faili yokokoro DWARF 5 nipasẹ aiyipada, ifisi aiyipada ti boṣewa C ++ 17 (“-std=gnu ++17”), awọn ilọsiwaju pataki ni atilẹyin fun C++20 bošewa, esiperimenta support fun C ++23, awọn ilọsiwaju jẹmọ si ojo iwaju C ede bošewa (C2x), titun išẹ optimizations.

Awọn iyipada akọkọ:

  • Ipo aiyipada fun ede C++ ti yipada lati lo boṣewa C++17 (-std=gnu++17) dipo C++14 ti a fun tẹlẹ. O ṣee ṣe lati mu ihuwasi C ++ 17 tuntun kuro ni yiyan nigba ṣiṣe awọn awoṣe ti o lo awọn awoṣe miiran bi paramita (-fno-new-ttp-matching).
  • Atilẹyin ti a ṣafikun fun isare ohun elo ti ohun elo AddressSanitizer, eyiti o fun ọ laaye lati pinnu awọn ododo ti iraye si awọn agbegbe iranti ominira, lilọ kọja awọn aala ti ifipamọ ti a pin, ati diẹ ninu awọn iru awọn aṣiṣe miiran nigbati o n ṣiṣẹ pẹlu iranti. Isare Hardware wa lọwọlọwọ nikan fun faaji AArch64 ati pe o wa ni idojukọ lori lilo nigbati o n ṣajọ ekuro Linux. Lati mu isare ohun elo AddressSanitizer ṣiṣẹ nigbati o ba n kọ awọn paati aaye olumulo, asia "-fsanitize=hwaddress" ti wa ni afikun, ati asia kernel "-fsanitize=kernel-hwaddress".
  • Nigbati o ba n ṣe alaye ti n ṣatunṣe aṣiṣe, ọna kika DWARF 5 jẹ lilo nipasẹ aiyipada, eyiti, ni akawe si awọn ẹya ti tẹlẹ, ngbanilaaye ṣiṣẹda 25% diẹ sii data n ṣatunṣe aṣiṣe. Atilẹyin ni kikun fun DWARF 5 nilo ẹya binutils o kere ju 2.35.2. Ọna kika DWARF 5 jẹ atilẹyin ni awọn irinṣẹ n ṣatunṣe aṣiṣe lati GDB 8.0, valgrind 3.17.0, elfutils 0.172 ati dwz 0.14. Lati ṣe ipilẹṣẹ awọn faili yokokoro nipa lilo awọn ẹya miiran ti DWARF, o le lo awọn aṣayan "-gdwarf-2", "-gdwarf-3" ati "-gdwarf-4".
  • Awọn ibeere fun awọn akopọ ti o le ṣee lo lati kọ GCC ti pọ si. Olupilẹṣẹ gbọdọ ni atilẹyin bayi boṣewa C ++ 11 (tẹlẹ C ++ 98 ti nilo), i.e. Ti GCC 10 ba to lati kọ GCC 3.4, lẹhinna o kere ju GCC 11 ni bayi nilo lati kọ GCC 4.8.
  • Orukọ ati ipo awọn faili fun fifipamọ awọn idalẹnu, awọn faili igba diẹ ati alaye afikun pataki fun iṣapeye LTO ti yipada. Iru awọn faili bayi ti wa ni ipamọ nigbagbogbo ninu itọsọna lọwọlọwọ ayafi ti ọna naa ba yipada ni gbangba nipasẹ awọn aṣayan "-dumpbase", "-dumpdir" ati "-save-temps=*".
  • Atilẹyin fun ọna kika alakomeji BRIG fun lilo pẹlu ede HSAIL (Heterogeneous System Architecture Intermediate Language) ti parẹ ati pe yoo yọkuro laipẹ.
  • Awọn agbara ti ipo ThreadSanitizer (-fsanitize=thread) ti fẹ sii, ti a ṣe apẹrẹ lati ṣe awari awọn ipo ere-ije nigba pinpin data kanna lati oriṣiriṣi awọn okun ti ohun elo olona-asapo. Itusilẹ tuntun ṣe afikun atilẹyin fun awọn akoko asiko yiyan ati awọn agbegbe, ati atilẹyin fun ohun elo n ṣatunṣe aṣiṣe KCSAN (Kernel Concurrency Sanitizer), ti a ṣe lati ṣe iwari awọn ipo ere-ije laarin ekuro Linux. Awọn aṣayan titun ti a ṣafikun "-param tsan-distinguiish-volatile" ati "-param tsan-instrument-func-entry-exit".
  • Awọn nọmba ọwọn ninu awọn ifiranṣẹ iwadii bayi kii ṣe kika baiti lati ibẹrẹ laini, ṣugbọn ni otitọ awọn nọmba ọwọn ti o ṣe akiyesi awọn ohun kikọ baiti pupọ ati awọn kikọ ti o gba awọn ipo pupọ ni laini (fun apẹẹrẹ, ihuwasi 🙂 wa awọn ipo meji ati ti wa ni koodu ni 4 baiti). Bakanna, awọn ohun kikọ taabu ni a ṣe itọju bi nọmba kan ti awọn alafo (ṣe atunto nipasẹ aṣayan -ftabstop, aiyipada 8). Lati mu ihuwasi atijọ pada sipo, aṣayan “-fdiagnostics-column-unit=byte” ni a dabaa, ati lati pinnu iye ibẹrẹ (nọmba lati 0 tabi 1) - aṣayan “-fdiagnostics-column-origin=”.
  • Awọn vectorizer gba sinu iroyin gbogbo awọn akoonu ti awọn iṣẹ ati ki o ṣe afikun processing agbara ni nkan ṣe pẹlu intersections ati awọn itọkasi si ti tẹlẹ ohun amorindun ninu awọn iṣakoso-san aworan (CFG, Iṣakoso-san aworan).
  • Iṣapeye n ṣe imuse agbara lati ṣe iyipada lẹsẹsẹ awọn iṣẹ iṣe ipo ti o ṣe afiwe oniyipada kanna sinu ikosile iyipada kan. Ikosile iyipada le jẹ koodu nigbamii nipa lilo awọn ilana idanwo bit (aṣayan “-fbit-tests” ti ṣafikun lati ṣakoso iru iyipada).
  • Imudara awọn iṣapeye laarin ilana. Ṣafikun iwe-iwọle IPA-modref tuntun kan (-fipa-modref) lati tọpa awọn ipa ẹgbẹ nigbati o ba n pe awọn iṣẹ ati ilọsiwaju deede ti itupalẹ. Imudarasi imudara iwe-iwọle IPA-ICF (-fipa-icf), eyiti o dinku agbara iranti lakoko iṣakojọpọ ati mu nọmba awọn iṣẹ iṣọkan pọ si eyiti awọn bulọọki koodu kanna ti papọ. Ni IPA-CP (Interprocedural ibakan soju) kọja, awọn heuristics asọtẹlẹ ti ni ilọsiwaju, ni akiyesi awọn aala ti a mọ ati awọn ẹya ti awọn losiwajulosehin.
  • Ni Awọn iṣapeye Aago Sisopọ (LTO), ọna kika bytecode jẹ iṣapeye lati dinku iwọn ati ilọsiwaju iyara sisẹ. Idinku agbara iranti tente oke lakoko ipele abuda.
  • Ninu ẹrọ iṣapeye ti o da lori awọn abajade ti profaili koodu (PGO - iṣapeye itọsọna profaili), eyiti ngbanilaaye ṣiṣẹda koodu to dara julọ ti o da lori igbekale awọn ẹya ipaniyan, iwọn awọn faili pẹlu data GCOV ti dinku nitori idii iwapọ diẹ sii ti awọn iṣiro odo. . Imudara ipo "-fprofile-values" nipa titọju abala diẹ sii lori awọn ipe aiṣe-taara.
  • Imuse ti boṣewa OpenMP 5.0 (Open Multi-Processing), eyiti o ṣalaye API ati awọn ọna fun lilo awọn ọna siseto ti o jọra lori ọpọlọpọ-mojuto ati awọn eto arabara (CPU + GPU/DSP) pẹlu iranti pinpin ati awọn ẹya vectorization (SIMD), ni tesiwaju. Atilẹyin akọkọ ti a ṣafikun fun itọsọna ipin ati agbara lati lo awọn yipo oniruuru ni awọn itumọ OpenMP. Atilẹyin ti a ṣe fun oniyipada ayika OMP_TARGET_OFFLOAD.
  • Imuse ti sipesifikesonu siseto afiwera OpenACC 2.6 ti a pese fun awọn ede C, C ++ ati awọn ede Fortran ti ni ilọsiwaju, eyiti o ṣalaye awọn irinṣẹ fun gbigbe awọn iṣẹ ṣiṣe lori GPUs ati awọn iṣelọpọ amọja, gẹgẹ bi NVIDIA PTX.
  • Fun awọn ede C, ẹya tuntun “no_stack_protector” ti ni imuse, ti a ṣe lati samisi awọn iṣẹ fun eyiti ko yẹ ki o mu aabo akopọ ṣiṣẹ (“-fstack-protector”). Ẹya “malloc” ti gbooro lati ṣe atilẹyin idanimọ ti awọn orisii awọn ipe fun ipin ati iranti ọfẹ (allocator/Deallocator), eyiti a lo ninu olutupalẹ aimi lati ṣe idanimọ awọn aṣiṣe aṣoju ni ṣiṣẹ pẹlu iranti (awọn n jo iranti, lilo lẹhin ominira, awọn ipe ilọpo meji si iṣẹ ọfẹ, ati bẹbẹ lọ) ati ninu awọn ikilọ olupilẹṣẹ “-Wmismatched-dealloc”, “-Wmismatched-new-delete” ati “-Wfree-nonheap-object”, sọfun nipa aisedeede laarin awọn ipo iṣowo iranti ati awọn iṣẹ ipin iranti.
  • Awọn ikilọ titun ti jẹ afikun fun ede C:
    • "-Wmismatched-dealloc" (ti ṣiṣẹ nipasẹ aiyipada) - kilo nipa awọn iṣẹ ṣiṣe ipo iranti ti o lo itọka ti ko ni ibamu pẹlu awọn iṣẹ ipin iranti.
    • "-Wsizeof-array-div" (ṣiṣẹ nigba ti "-Wall" ti wa ni pato) - Kilo nipa pin meji sizeof awọn oniṣẹ ti o ba ti pin ko baramu awọn iwọn ti awọn orun ano.
    • "-Wstringop-overread" (ti ṣiṣẹ nipasẹ aiyipada) - kilo nipa pipe iṣẹ okun kan ti o ka data lati agbegbe ti o wa ni ita ita aala.
    • "-Wtsan" (ti ṣiṣẹ nipasẹ aiyipada) - Kilọ nipa lilo awọn ẹya (gẹgẹbi std :: atomic_thread_fence) ti ko ṣe atilẹyin ni ThreadSanitizer.
    • “-Warray-parameter” ati “-Wvla-parameter” (ti ṣiṣẹ nigbati o ba n ṣalaye “-Odi”) - kilo nipa awọn iṣẹ ti o dojukọ pẹlu awọn ikede ti ko ni ibamu ti awọn ariyanjiyan ti o ni nkan ṣe pẹlu awọn eto ipari-ipin ati oniyipada.
    • Ikilọ "-Wuninitialized" ni bayi ṣe awari awọn igbiyanju lati ka lati iranti ti a ti pin ni agbara ti a ko ni ipilẹṣẹ.
    • Ikilọ “-Wfree-nonheap-object” gbooro asọye awọn ọran nibiti a ti pe awọn iṣẹ iṣojukọ iranti pẹlu itọka ti a ko gba nipasẹ awọn iṣẹ ipin iranti ti o ni agbara.
    • Ikilọ "-Wmaybe-uninitialized" ti gbooro wiwa ti awọn itọka ti nkọja si awọn iṣẹ ti o tọka si awọn ipo iranti ti ko ni ibẹrẹ.
  • Fun ede C, apakan awọn ẹya tuntun ti o dagbasoke laarin ilana ti boṣewa C2X ti ni imuse (ṣiṣẹ nipasẹ sisọ pato -std=c2x ati -std=gnu2x): macros BOOL_MAX ati BOOL_WIDTH, itọkasi iyan ti awọn orukọ ti awọn paramita ti ko lo ninu iṣẹ awọn itumọ (gẹgẹbi ninu C ++), ẹda “[ [nodiscard]]”, oniṣẹ iṣaaju “__has_c_attribute”, macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559 DBL BL_SNAN, DEC_INFINITY ati DEC _NAN, NaN = macros fun FloatN, _FloatNx ati _DecimalN, agbara lati tokasi awọn ami fo ṣaaju awọn ikede ati ni opin awọn alaye akojọpọ.
  • Fun C ++, apakan ti awọn ayipada ati awọn imotuntun ti a dabaa ni boṣewa C ++ 20 ti ni imuse, pẹlu awọn iṣẹ foju “consteval foju”, awọn apanirun apanirun fun opin igbesi aye awọn nkan, lilo kilasi enum ati ṣe iṣiro iwọn titobi kan ninu ikosile “tuntun”.
  • Fun C++, atilẹyin esiperimenta ti ṣe afikun fun diẹ ninu awọn ilọsiwaju ti o ni idagbasoke fun boṣewa C++23 ọjọ iwaju (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Fun apẹẹrẹ, atilẹyin wa ni bayi fun suffix gangan “zu” fun awọn iye iwọn_t ti a fowo si.
  • libstdc ++ ti ni ilọsiwaju atilẹyin fun boṣewa C ++ 17, pẹlu ifihan std :: from_chars ati std :: to_chars awọn imuṣẹ fun awọn oriṣi aaye lilefoofo. Ti ṣe imuse awọn eroja tuntun ti boṣewa C ++20, pẹlu std :: bit_cast, std :: orisun_location, awọn iṣẹ atomiki duro ati leti, , , , , ati awọn eroja ti ojo iwaju C ++ boṣewa 23 (std :: to_underlying, STD :: is_scoped_enum). Atilẹyin esiperimenta ti a ṣafikun fun awọn oriṣi fun sisẹ data ti o jọra (SIMD, Awọn oriṣi Isọra Data). Imuse ti std :: uniform_int_distribution ti ni iyara.
  • Yọ asia didara alpha kuro lati libgccjit, ile-ikawe pinpin kan fun ifibọ olupilẹṣẹ koodu sinu awọn ilana miiran ati lilo rẹ lati ṣeto akopọ JIT ti bytecode sinu koodu ẹrọ. Ṣe afikun agbara lati kọ libgccjit fun MinGW.
  • Atilẹyin ti a ṣafikun fun AArch64 Armv8-R faaji (-march=armv8-r). Fun AArch64 ati awọn ayaworan ile ARM, atilẹyin fun awọn ero isise ti ṣafikun (awọn paramita -mcpu ati -mtune): Arm Cortex-A78 (cortex-a78), Arm Cortex-A78AE (cortex-a78ae), Arm Cortex-A78C (cortex-a78c) , Arm Cortex- X1 (kotesi-x1), Arm Neoverse V1 (neoverse-v1) ati Arm Neoverse N2 (neoverse-n2). Fujitsu A64FX (a64fx) ati Arm Cortex-R82 (cortex-r82) CPUs tun ti ṣafikun, ṣe atilẹyin faaji AArch64 nikan.
  • Atilẹyin ti a ṣafikun fun lilo Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) ati MVE (AArch32 M-profaili) Awọn ilana SIMD lati ṣe adaṣe awọn iṣẹ ṣiṣe ti n ṣe afikun, iyokuro, isodipupo ati awọn iyatọ ti afikun / iyokuro lori eka awọn nọmba. Atilẹyin akọkọ ti a ṣafikun fun adaṣe adaṣe fun ARM nipa lilo eto ilana MVE.
  • Fun awọn iru ẹrọ ARM, eto kikun ti awọn iṣẹ C ti a ṣepọpọ (Intrinsics) ti pese, rọpo nipasẹ awọn itọnisọna fekito ti o gbooro (SIMD), ti o bo gbogbo awọn ilana NEON ti a gbasilẹ ni ACLE Q3 2020 sipesifikesonu.
  • Atilẹyin fun gfx908 GPU ti ni afikun si ẹhin ẹhin fun ṣiṣẹda koodu fun awọn GPUs AMD ti o da lori microarchitecture GCN.
  • Atilẹyin ti a ṣafikun fun awọn ilana tuntun ati awọn amugbooro eto ilana tuntun ti a ṣe imuse ninu wọn:
    • Intel Sapphire Rapids (-march = sapphierapids, jẹ ki atilẹyin fun MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMX-TILE, AMX-TILE, AMX-NIX.
    • Intel Alderlake (-march=alderlake, ngbanilaaye atilẹyin fun CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI ati awọn ilana HRESET).
    • Intel Rocketlake (-march = rocketlake, iru si Rocket Lake laisi atilẹyin SGX).
    • AMD Zen 3 (-March = znver3).
  • Fun IA-32/x86-64 awọn ọna šiše da lori Intel to nse, support fun titun isise ilana TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI ti a ti fi kun.
  • Atilẹyin ti a ṣafikun fun “-march = x86-64-v[234]” awọn asia lati yan awọn ipele ile-iṣọ x86-64 (v2 - bo SSE4.2, SSSE3, POPCNT ati awọn amugbooro CMPXCHG16B; v3 - AVX2 ati MOVBE; v4 - AVX-512 ) .
  • Atilẹyin ti a ṣafikun fun awọn eto RISC-V pẹlu aṣẹ baiti nla-endian. Ṣe afikun "-misa-spec=*" aṣayan lati yan ẹya ti ilana RISC-V ṣeto sipesifikesonu faaji. Atilẹyin ti a ṣafikun fun AdirẹsiSanitizer ati aabo akopọ nipa lilo awọn aami canary.
  • Ilọsiwaju ilọsiwaju ti ipo onínọmbà aimi “-fanalyzer”, eyiti o ṣe itupalẹ awọn ilana interprocedural awọn orisun ti awọn ipa ipaniyan koodu ati ṣiṣan data ninu eto naa. Ipo naa lagbara lati ṣawari awọn iṣoro ni ipele akopọ, gẹgẹbi awọn ipe ilọpo meji si iṣẹ ọfẹ () fun agbegbe iranti kan, jijo oluṣapejuwe faili, imukuro ati gbigbe awọn itọka asan, wọle si awọn bulọọki iranti ominira, lilo awọn iye ti ko ni ibẹrẹ, ati bẹbẹ lọ. Ninu ẹya tuntun:
    • Awọn koodu fun ipasẹ ipo eto ti jẹ atunko patapata. Awọn iṣoro pẹlu ṣiṣayẹwo awọn faili C ti o tobi pupọ ti ni ipinnu.
    • Atilẹyin C ++ ibẹrẹ ti ṣafikun.
    • Pipin iranti ati itupalẹ ipo iṣowo ti yọkuro lati malloc kan pato ati awọn iṣẹ ọfẹ, ati ni bayi ṣe atilẹyin titun/parẹ ati tuntun[]/parẹ[].
    • Awọn ikilọ tuntun ti a ṣafikun: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const and -Wanalyzer-write-to-string-literal.
    • Ṣafikun awọn aṣayan n ṣatunṣe aṣiṣe tuntun -fdump-analyzer-json ati -fno-analyzer-seese.
    • Agbara lati faagun olutupalẹ nipasẹ awọn afikun fun GCC ti ni imuse (fun apẹẹrẹ, a ti pese ohun itanna kan lati ṣayẹwo lilo ti ko tọ ti titiipa agbaye (GIL) ni CPython).

orisun: opennet.ru

Fi ọrọìwòye kun