Sgaoileadh an t-sreath compiler GCC 12

Às deidh bliadhna de leasachadh, chaidh an t-sreath compiler an-asgaidh GCC 12.1 a leigeil ma sgaoil, a ’chiad fhoillseachadh cudromach anns a’ mheur ùr GCC 12.x. A rèir an sgeama àireamhan fuasglaidh ùr, chaidh dreach 12.0 a chleachdadh sa phròiseas leasachaidh, agus goirid mus deach GCC 12.1 a leigeil ma sgaoil, bha meur GCC 13.0 air a dhol a-mach mar-thà, air a’ bhunait a bhiodh an ath fhoillseachadh mòr, GCC 13.1, a chruthachadh. Air 23 Cèitean, bidh am pròiseact a’ comharrachadh 35 bliadhna bho chaidh a’ chiad deasachadh de GCC a stèidheachadh.

Atharraichean mòra:

  • Taic a bharrachd airson cruth deasbaid CTF (Compact Type Format), a bheir seachad stòradh teann de dh’ fhiosrachadh mu sheòrsan C, ceanglaichean eadar gnìomhan agus samhlaidhean deasbaid. Nuair a tha e freumhaichte ann an nithean ELF, tha an cruth a’ ceadachadh clàran caractar EFL a chleachdadh gus dùblachadh dàta a sheachnadh.
  • Chan eilear a’ moladh taic airson cruth stòraidh fiosrachaidh deasbaid “STABS”, a chaidh a chruthachadh anns na 1980n.
  • Tha obair a’ leantainn gus taic a leudachadh airson inbhean C2X agus C++23 san àm ri teachd airson na cànanan C agus C ++. Mar eisimpleir, chaidh taic airson an abairt “ma tha consteval” a chur ris; ceadaichte auto a chleachdadh ann an argamaidean gnìomh (“f (auto (g ()))”)); tha cleachdadh caochladairean neo-litireil, goto agus bileagan ceadaichte ann an gnìomhan air an ainmeachadh mar constexpr; taic a bharrachd airson gnìomhaiche clàr-amais ioma-thaobhach[]; ann an ma tha, airson agus suidse, comasan blocaichean tòiseachaidh air an leudachadh (“airson (a’ cleachdadh T = int; T e : v)”).
  • Tha Leabharlann Coitcheann C ++ air taic nas fheàrr a thoirt do na h-earrannan deuchainneach de na h-inbhean C ++20 agus C ++23. Taic a bharrachd airson std::move_only_function, , std :: basic_string :: resize_and_overwrite, , agus std::invoke_r. Ceadaichte std ::unique_ptr, std :: vector, std :: basic_string, std :: roghnach agus std :: caochladh ann an gnìomhan constexpr a chleachdadh.
  • Tha aghaidh Fortran a’ toirt làn thaic don t-sònrachadh TS 29113, a tha a’ toirt cunntas air comasan airson dèanamh cinnteach à comas giùlain eadar còd Fortran agus C.
  • Taic a bharrachd airson an leudachadh __builtin_shufflevector(vec1, vec2, index1, index2, ...) a chaidh a chur ri Clang roimhe seo, a tha a’ tabhann aon ghairm gus obrachaidhean cumanta vector shuffle agus shuffle a dhèanamh.
  • Nuair a bhios tu a’ cleachdadh na h-ìre optimization “-O2”, tha vectarization air a chomasachadh gu bunaiteach (tha na modhan -ftree-vectorize agus -fvect-cost-model = glè shaor air an comasachadh). Tha am modail gu math saor a’ ceadachadh vectarization a-mhàin mas urrainn don chòd vectar a dhol an àite a’ chòd sgalar a thathar a’ vectorized.
  • Chaidh modh “-ftrivial-auto-var-init” a chur ris gus leigeil le caochladairean a thòiseachadh gu soilleir air a’ chruach gus sùil a chumail air cùisean agus casg a chuir air so-leòntachd co-cheangailte ri cleachdadh caochladairean neo-aithnichte.
  • Airson cànanan C agus C++, chaidh gnìomh togte __builtin_dynamic_object_size a chur ris gus meud nì a dhearbhadh, a tha co-chosmhail ri gnìomh coltach ri Clang.
  • Airson na cànanan C agus C ++, chaidh taic don fheart “nach eil ri fhaighinn” a chuir ris (mar eisimpleir, faodaidh tu gnìomhan a chomharrachadh a ghineas mearachd ma dh'fheuchas tu rin cleachdadh).
  • Airson cànanan C agus C ++, chaidh taic airson stiùiridhean ro-ghiollachd “#elidfef” agus “#elifndef” a chur ris.
  • Chaidh bratach “-Wbidi-chars” a chuir ris gus rabhadh a thaisbeanadh ma thèid caractaran UTF-8 a chleachdadh gu ceàrr, ag atharrachadh an òrdugh anns a bheil teacsa dà-thaobhach air a thaisbeanadh.
  • Chaidh bratach “-Warray-compare” a chur ris gus rabhadh a thaisbeanadh nuair a thathar a’ feuchainn ri coimeas a dhèanamh eadar dà oparan a tha a’ toirt iomradh air arrays.
  • Cur an gnìomh inbhean OpenMP 5.0 agus 5.1 (Ioma-phròiseasadh Fosgailte), a tha a’ mìneachadh an API agus dòighean airson dòighean prògramadh co-shìnte a chuir an sàs air siostaman ioma-cridhe agus tar-chinealach (CPU + GPU / DSP) le aonadan cuimhne agus vectorization co-roinnte (SIMD). , air leantainn.
  • Buileachadh nas fheàrr air sònrachadh prògramadh co-shìnte OpenACC 2.6, a tha a’ mìneachadh innealan airson gnìomhachd luchdachadh sìos air GPUs agus pròiseasairean sònraichte leithid NVIDIA PTX.
  • Chaidh taic airson stiùireadh leudaichte Intel AVX86-FP512 agus an seòrsa _Float16 a chur ri backend gineadh còd airson ailtireachd x16.
  • Airson ailtireachd x86, chaidh dìon a chuir ris an aghaidh so-leòntachd ann am pròiseasairean air adhbhrachadh le bhith a’ coileanadh stiùireadh tuairmeasach às deidh gnìomhachd leum air adhart gun chumhachan. Tha an duilgheadas a’ tachairt mar thoradh air giullachd ro-chasg air stiùireadh dìreach às deidh an stiùireadh meur mar chuimhneachan (SLS, Straight Line Speculation). Gus dìon a chomasachadh, thathas a’ moladh an roghainn “-mharden-sls”.
  • Lorgadh a bharrachd air cleachdadh caochladairean neo-aithnichte don anailisiche statach deuchainneach. Taic tòiseachaidh air a chur ris airson mion-sgrùdadh còd cruinneachaidh ann an cuir a-steach in-loidhne. Rianachd cuimhne nas fheàrr. Chaidh an còd airson giullachd abairtean suidse ath-sgrìobhadh.
  • Chuir sinn 30 fios ùr ri libgccjit, leabharlann co-roinnte airson gineadair còd a fhighe a-steach do phròiseasan eile agus a chleachdadh gus JIT bytecode a chuir ri chèile ann an còd inneal.
  • Chaidh taic airson uidheamachd CO-RE (Compile Once - Run Everywhere) a chuir ris an deireadh-sheachdain airson còd byte BPF a ghineadh, a leigeas leat còd phrògraman eBPF a chuir ri chèile airson an kernel Linux dìreach aon turas agus cleachd luchdan uile-choitcheann sònraichte a dh’ atharraicheas an prògram air a luchdachadh chun kernel gnàthach agus cruth Seòrsan BPF). Bidh CO-RE a’ fuasgladh duilgheadas so-ghiùlain phrògraman eBPF cruinnichte, nach gabhadh a chleachdadh roimhe seo ach anns an dreach den kernel airson an deach an cur ri chèile, leis gu bheil suidheachadh eileamaidean ann an structaran dàta ag atharrachadh bho dhreach gu dreach.
  • Bidh cùl-taic RISC-V a’ cur taic ri leudachadh ailtireachd seata stiùiridh ùr zba, zbb, zbc agus zbs, a bharrachd air leudachadh ISA airson gnìomhachd criptografach vector is sgalar. Gu gnàthach, gheibhear taic airson sònrachadh RISC-V ISA 20191213. Chaidh a’ bhratach -mtune=thead-c906 a chur ris gus optimachadh a chomasachadh airson coraichean T-HEAD c906.
  • Chaidh taic airson an t-seòrsa __int128_t/integer (seòrsa = 16) a chur ri backend gineadh còd airson AMD GPUs stèidhichte air microarchitecture GCN. Tha e comasach suas ri buidhnean obrach 40 a chleachdadh airson gach aonad coimpiutaireachd (CU) agus suas ri aghaidhean stiùiridh 16 (aghaidh tonn, seata de snàithleanan air an cur gu bàs aig an aon àm leis an Einnsean SIMD) gach buidheann. Roimhe sin, cha robh ach aon oir stiùiridh airson gach CU ceadaichte.
  • Tha backend NVPTX, a chaidh a dhealbhadh gus còd a ghineadh a’ cleachdadh ailtireachd seata stiùiridh NVIDIA PTX (Co-shìnte Thread Execution), air cur ris a’ chomas na brataichean “-march”, “-mptx” agus “-march-map” a chleachdadh. Taic airson PTX ISA sm_53, sm_70, sm_75 agus sm_80. Is e an ailtireachd bunaiteach sm_30.
  • Anns an deireadh-sheachdain airson pròiseasairean PowerPC / PowerPC64 / RS6000, chaidh buileachadh gnìomhan togte ath-sgrìobhadh. Tha na gnìomhan togte __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar agus __builtin_tfiar are seted.
  • Taic airson Arm Ampere-64 (-mcpu / -mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) agus Arm Cortex-X710 (cortex-x2). Taic a bharrachd airson roghainnean ailtireachd ARMv2 ùra airson an cleachdadh leis an roghainn “-march”: armv8-a, armv8.7-a, armv8.8-a. Cur an gnìomh gnìomhan C a bharrachd air an togail a-steach don inneal-cruinneachaidh (Intrinsics) airson luchdachadh atamach agus sàbhaladh dàta gu cuimhne, stèidhichte air cleachdadh stiùireadh ARM leudaichte (ls9). Taic a bharrachd airson a bhith a’ luathachadh gnìomhan memcpy, memmove agus memset a’ cleachdadh an leudachadh mopsoption ARM.
  • Chuir sinn modh sgrùdaidh ùr ris “-fsanitize = shadow-call-stack” (ShadowCallStack), nach eil ri fhaighinn an-dràsta ach airson ailtireachd AArch64 agus a bhios ag obair nuair a bhios e a’ togail còd leis an roghainn “-ffixed-r18”. Tha am modh a’ toirt dìon an aghaidh a bhith a’ sgrìobhadh thairis air an t-seòladh tilleadh bho ghnìomh ma thachras tar-shruth bufair air a’ chruaich. Is e brìgh an dìon an seòladh tilleadh a shàbhaladh ann an stac “sgàil” air leth às deidh dhut smachd a ghluasad gu gnìomh agus an seòladh seo fhaighinn air ais mus fhàg thu an gnìomh.

Source: fosgailtenet.ru

Cuir beachd ann