Sgaoileadh an t-sreath cruinneachaidh LLVM 15.0

Às deidh sia mìosan de leasachadh, chaidh sgaoileadh a’ phròiseict LLVM 15.0 a thaisbeanadh - pasgan inneal a tha co-chosmhail ri GCC (luchd-cruinneachaidh, optimizers agus gineadairean còd) a bhios a ’cur ri chèile prògraman ann an còd bit eadar-mheadhanach de stiùiridhean brìgheil coltach ri RISC (inneal brìgheil aig ìre ìosal le inneal-lìonaidh. siostam optimization ioma-ìre). Faodar am pseudocode a chaidh a chruthachadh a thionndadh le bhith a’ cleachdadh inneal-cruinneachaidh JIT gu stiùireadh inneal gu dìreach aig àm coileanadh a’ phrògraim.

Leasachaidhean mòra ann an Clang 15.0:

  • Airson siostaman stèidhichte air ailtireachd x86, chaidh a’ bhratach “-fzero-call-used-regs” a chur ris, a nì cinnteach gu bheil a h-uile clàr CPU a thathar a’ cleachdadh san ghnìomh air an ath-shuidheachadh gu neoni mus till iad air ais smachd bhon ghnìomh. Leigidh an roghainn seo leat dìon an aghaidh aodion fiosrachaidh bho ghnìomhan agus lughdaich an àireamh de bhlocaichean a tha iomchaidh airson a bhith a’ togail innealan ROP (Prògramadh a tha ag amas air Tilleadh) ann an cleachdaidhean le timcheall air 20%.
  • Thathas air thuaiream suidheachadh cuimhne de structaran airson còd C a chuir an gnìomh, a tha duilich a bhith a’ toirt a-mach dàta bho structaran ma thèid brath a ghabhail air so-leòntachd. Tha Randomization air a thionndadh air agus dheth a’ cleachdadh na buadhan randomize_layout agus no_randomize_layout, agus feumar sìol a shuidheachadh a’ cleachdadh a’ bhratach “-frandomize-layout-seed” no “-frandomize-layout-seed-file”.
  • Chaidh bratach "-fstrict-flex-arrays=" a chur ris ", leis an urrainn dhut smachd a chumail air na crìochan airson eileamaid sreath sùbailte ann an structaran (Buill Array Sùbailte, sreath de mheud neo-chinnteach aig deireadh an structair). Nuair a thèid a shuidheachadh gu 0 (bunaiteach), tha an eileamaid mu dheireadh den structar le sreath an-còmhnaidh air a phròiseasadh mar raon sùbailte, 1 - chan eil ach meudan [], [0] agus [1] air an giullachd mar raon sùbailte, 2 - meudan a-mhàin Tha [] agus [0] air an giullachd mar raon sùbailte.
  • Taic deuchainneach a bharrachd airson cànan coltach ri C HLSL (Cànan Àrd-ìre Shader), air a chleachdadh ann an DirectX airson sgàilearan a sgrìobhadh.
  • Chaidh “-Warray-parameter” a chuir ris gus rabhadh a thoirt mu bhith a’ dol thairis air gnìomhan le dearbhaidhean argamaid neo-fhreagarrach co-cheangailte ri rèilichean fad stèidhichte agus caochlaideach.
  • Co-chòrdalachd nas fheàrr le MSVC. Taic a bharrachd airson “#pragma function” (a ’toirt stiùireadh don neach-cruinneachaidh gairm gnìomh a ghineadh an àite leudachadh in-loidhne) agus“ # pragma alloc_text ”(a’ mìneachadh ainm na h-earrainn leis a ’chòd gnìomh) air a thoirt seachad ann an MSVC. Taic a bharrachd airson brataichean MSVC / JMC agus / JMC.
  • Tha obair a’ leantainn gus taic a thoirt do inbhean C2X agus C ++23 san àm ri teachd. Airson a’ chànan C, tha na leanas air an cur an gnìomh: am feart noreturn, na prìomh fhaclan meallta agus fìor, an seòrsa _BitInt(N) airson àireamhan iomlan de dhoimhneachd beagan, * _WIDTH macros, an ro-leasachan u8 airson caractaran còdaichte UTF-8.

    Airson C ++, tha na leanas air an cur an gnìomh: aonachadh mhodalan, iomallachd buill gnìomh ABI, tòiseachadh fiùghantach de chaochladairean neo-ionadail ann am modalan, gnìomhaichean clàr-amais ioma-thaobhach, auto(x), caochladairean neo-litireil, goto agus bileagan ann an gnìomhan air an ainmeachadh mar constexpr , sreathan teiche cuibhrichte, caractaran teicheadh ​​​​ainmichte.

  • Chaidh na comasan co-cheangailte ri taic OpenCL agus OpenMP a leudachadh. Taic a bharrachd airson an leudachadh OpenCL cl_khr_subgroup_rotate.
  • 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, thathar a’ moladh an roghainn “-mharden-sls =[none | all | return | indirect-jmp]”.
  • Airson àrd-ùrlaran a bheir taic don leudachadh SSE2, chaidh an seòrsa _Float16 a chur ris, a tha air aithris le bhith a’ cleachdadh an seòrsa fleòdraidh gun fhios nach eil taic ann airson stiùireadh AVX512-FP16.
  • Chaidh bratach “-m[no-]rdpru” a chur ris gus smachd a chumail air cleachdadh an stiùiridh RDPRU, le taic bho bhith a’ tòiseachadh le pròiseasairean AMD Zen2.
  • Chuir sinn a’ bhratach “-mfunction-return=thunk-extern” ris gus dìon an-aghaidh so-leòntachd RETBLEED, a bhios ag obair le bhith a’ cur sreath de stiùiridhean a-steach a tha a’ dùnadh a-mach a bhith an sàs anns an uidheamachd cur an gnìomh tuairmeasach airson meuran neo-dhìreach.

Prìomh innleachdan ann an LLVM 15.0:

  • Taic a bharrachd airson ailtireachd Cortex-M85 CPU, Armv9-A, Armv9.1-A agus Armv9.2-A, leudachain Armv8.1-M PACBTI-M.
  • Chaidh backend deuchainneach airson DirectX a chuir ris a bheir taic don fhòrmat DXIL (Cànan Eadar-mheadhanach DirectX) a thathas a’ cleachdadh airson shaders DirectX. Tha an backend air a chomasachadh le bhith a’ sònrachadh am paramadair “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” aig àm co-chruinneachadh.
  • Tha Libc ++ a’ leantainn air adhart a’ buileachadh feartan ùra de na h-inbhean C++20 agus C++2b, a’ gabhail a-steach crìochnachadh buileachadh an leabharlainn “cruth” agus an dreach deuchainneach a thathar a’ moladh den leabharlann “raointean”.
  • Backends nas fheàrr airson ailtireachd x86, PowerPC agus RISC-V.
  • Chaidh comasan an neach-ceangail LLD agus an dì-bhugadair LLDB a leasachadh.

Source: fosgailtenet.ru

Cuir beachd ann