Rakirina berhevoka berhevkarê LLVM 15.0

Piştî şeş mehên pêşveçûnê, serbestberdana projeya LLVM 15.0 hate pêşkêş kirin - amûrek lihevhatî ya GCC (berhevkar, optimîzator û hilberînerên kodê) ku bernameyan di bitkoda navîn a rêwerzên virtual yên mîna RISC-ê de berhev dike (makîneyek virtual ya nizm bi pergala optimîzasyona pir-astî). Pseudokoda hatî çêkirin dikare bi karanîna berhevkarek JIT-ê rasterast di dema pêkanîna bernameyê de li rêwerzên makîneyê were veguheztin.

Pêşveçûnên sereke di Clang 15.0 de:

  • Ji bo pergalên li ser bingeha mîmariya x86, ala "-fzero-call-used-regs" hate zêdekirin, ku piştrast dike ku hemî tomarên CPU yên ku di fonksiyonê de têne bikar anîn berî vegerandina kontrolê ji fonksiyonê li sifirê têne vegerandin. Ev vebijark dihêle hûn li hember rijandina agahiyê ji fonksiyonan biparêzin û jimara blokên ku ji bo avakirina alavên ROP (Bernameya Veger-Oriented) di îstîsmaran de bi qasî 20% kêm bikin kêm bikin.
  • Randomîzekirina cîhê bîranîna strukturên ji bo koda C-yê hatî bicîh kirin, ku di bûyera îstismarkirina qelsiyan de derxistina daneyan ji avahiyan tevlihev dike. Randomîzekirin bi karanîna taybetmendiyên randomize_layout û no_randomize_layout ve tê girtin û jêbirin, û pêdivî ye ku tovek bi karanîna ala "-frandomize-layout-seed" an "-frandomize-layout-seed-file" were danîn.
  • ala "-fstrict-flex-arrays=" zêde kir ", bi ku hûn dikarin sînorên ji bo hêmanek rêza nerm a di avahiyan de kontrol bikin (Endamên Array-ê yên Flexible, komek bi mezinahiya nediyar li dawiya avahîsaziyê). Dema ku li ser 0 were danîn (default), hêmana paşîn a avahiyek bi rêzek her gav wekî rêzek maqûl tê hilanîn, 1 - tenê mezinahiyên [], [0] û [1] wekî rêzek maqûl têne hilberandin, 2 - tenê mezinahî [] û [0] wekî rêzek maqûl têne hilberandin.
  • Piştgiriya ceribandinê ji bo zimanê C-wek HLSL (Zimanê Şader-Asta Bilind), ku di DirectX-ê de ji bo nivîsandina shaderan tê bikar anîn, zêde kir.
  • "Parametreya -Warray" hat zêdekirin da ku li ser fonksiyonên serdest ên bi daxuyaniyên argumanên hevaheng ên ku bi rêzikên dirêjiya sabît û guhêrbar ve girêdayî ne hişyar bikin.
  • Lihevhatina bi MSVC re çêtir kirin. Piştgiriyek ji bo "#pragma function" zêde kir (telîmat dide berhevkar ku li şûna berfirehkirina hundurîn bangek fonksiyonê çêbike) û "#pragma alloc_text" (navê beşê bi koda fonksiyonê diyar dike) ku di MSVC de hatî peyda kirin. Ji bo alayên MSVC-lihevhatî / JMC û / JMC piştgirî zêde kir.
  • Xebat ji bo piştgirîkirina standardên pêşerojê yên C2X û C++23 berdewam dike. Ji bo zimanê C, yên jêrîn têne bicîh kirin: taybetmendiya noreturn, peyvên sereke yên derewîn û rast, tîpa _BitInt(N) ji bo hejmarên kûrahiya bitek diyarkirî, makroyên *_WIDTH, pêşgira u8 ji bo karakterên kodkirî yên UTF-8.

    Ji bo C++, jêrîn têne bicîh kirin: yekbûna modulê, îzolekirina ABI ya endamên fonksiyonê, fermana destpêkirina dînamîkî ya guhêrbarên ne-herêmî yên di modulan de, operatorên nîşana piralî, otomatîk (x), guhêrbarên ne-biwêj, goto û etîketên di fonksiyonan de wekî constexpr hatine ragihandin. , rêzikên revê veqetandin, tîpên revê bi nav kirin.

  • Kapasîteyên ku bi piştgiriya OpenCL û OpenMP ve girêdayî ne hatine berfireh kirin. Piştgiriyek ji bo dirêjkirina OpenCL cl_khr_subgroup_rotate zêde kir.
  • Ji bo mîmariya x86, parastin li hember qelsiyên di pêvajoyan de ku ji ber pêkanîna spekulatîf a rêwerzan piştî operasyonên bazdanê yên bê şert û merc hatine zêdekirin. Pirsgirêk ji ber pêvajoyek pêşîlêgirtinê ya rêwerzan di cih de li dû fermana şaxê di bîranînê de (SLS, Spekulasyona Rêza Rast) pêk tê. Ji bo çalakkirina parastinê, vebijarka "-mharden-sls=[ne|hemû|veger|nerasterast-jmp]" tê pêşniyar kirin.
  • Ji bo platformên ku piştgirîya dirêjkirina SSE2 dikin, celeb _Float16 hatîye zêdekirin, ku di rewşa nebûna piştgirîyê de ji bo rêwerzên AVX512-FP16 bi karanîna celebê float-ê tête emûl kirin.
  • Ala "-m[no-]rdpru" lê zêde kir da ku karanîna rêwerza RDPRU kontrol bike, ku bi pêvajoyên AMD Zen2-ê dest pê dike.
  • Alaya "-mfunction-return=thunk-extern" lê zêde kir da ku li hember xirapbûna RETBLEED biparêze, ku bi lêzêdekirina rêzek rêwerzan ku tevlêbûna mekanîzmaya darvekirina spekulatîf ji bo şaxên nerasterast dixebitîne.

Nûvekirinên sereke di LLVM 15.0 de:

  • Piştgiriya Cortex-M85 CPU, Armv9-A, Armv9.1-A û Armv9.2-A mîmarî, dirêjkirina Armv8.1-M PACBTI-M.
  • Piştgiriyek ceribandinê ya ji bo DirectX-ê hate zêdekirin ku formata DXIL (Zimanê Navbirî yê DirectX) ku ji bo shaderên DirectX tê bikar anîn piştgirî dike. Di dema kombûnê de bi diyarkirina parametreya “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” ve piştgir tê çalak kirin.
  • Libc++ pêkanîna taybetmendiyên nû yên standardên C++20 û C++2b didomîne, di nav de temamkirina pêkanîna pirtûkxaneya "format" û guhertoya ceribandinê ya pêşniyarkirî ya pirtûkxaneya "range".
  • Ji bo mîmariyên x86, PowerPC û RISC-V paşverûyên çêtir kirin.
  • Kapasîteyên girêdana LLD û debuggerê LLDB zêde bûne.

Source: opennet.ru

Add a comment