Ukukhishwa kwe-LLVM 15.0 compiler suite

Ngemva kwezinyanga eziyisithupha zokuthuthukiswa, kwethulwa ukukhishwa kwephrojekthi ye-LLVM 15.0 - ikhithi yamathuluzi ehambisana ne-GCC (abahlanganisi, izithuthukisi kanye namakhodi akhiqiza amakhodi) ehlanganisa izinhlelo zibe yi-bitcode ephakathi yemiyalelo ye-RISC efana ne-virtual (umshini wezinga eliphansi one- uhlelo lokusebenzisa amazinga amaningi). I-pseudocode ekhiqiziwe ingaguqulwa kusetshenziswa i-JIT compiler ibe imiyalelo yomshini ngokuqondile ngesikhathi sokwenziwa kohlelo.

Ukuthuthukiswa okukhulu ku-Clang 15.0:

  • Kumasistimu asekelwe esakhiweni se-x86, ifulegi elithi β€œ-fzero-call-used-regs” lengeziwe, eliqinisekisa ukuthi wonke amarejista e-CPU asetshenziswe emsebenzini asethwa kabusha ukuze abe uziro ngaphambi kokubuyisela ukulawula emsebenzini. Le nketho ikuvumela ukuthi uvikele ekuvuzeni kolwazi emisebenzini futhi unciphise inani lamabhulokhi afanele ukwakha amagajethi e-ROP (Return-Oriented Programming) ekuxhasweni cishe ngo-20%.
  • Ukwenziwa ngokungahleliwe kokubekwa kwenkumbulo yezakhiwo zekhodi C kusetshenzisiwe, okwenza kube nzima ukukhishwa kwedatha ezakhiweni uma kwenzeka kuxhashazwa ubungozi. Ukwenza okungahleliwe kuvuliwe futhi kuvaliwe kusetshenziswa i-randomize_layout kanye nezichasiso_ze-randomize_layout, futhi kudinga ukusetha imbewu kusetshenziswa ifulege elithi "-frandomize-layout-seed" noma elithi "-frandomize-layout-seed-file".
  • Kwengezwe ifulegi elithi "-fstrict-flex-arrays=" ", ongalawula ngayo imingcele yesici sohlelo oluguquguqukayo ezakhiweni (Amalungu E-Flexible Array, uhlu lobukhulu obungenamkhawulo ekugcineni kwesakhiwo). Uma isethwe ku-0 (okuzenzakalelayo), ingxenye yokugcina yesakhiwo enohlelo ihlale icutshungulwa njengohlelo oluguquguqukayo, 1 - osayizi kuphela [], [0] kanye no-[1] acutshungulwa njengohlelo oluguquguqukayo, 2 - osayizi kuphela. [] kanye ne-[0] acutshungulwa njengohlelo oluvumelana nezimo.
  • Kwengezwe usekelo lokuhlola lolimi olufana no-C lwe-HLSL (Ulimi Lwe-Shader Lwezinga Eliphezulu), olusetshenziswa ku-DirectX ekubhaleni imithunzi.
  • Kwengezwe "-Ipharamitha ye-Warray" ukuze ixwayise mayelana nemisebenzi engaphezulu enezimemezelo zempikiswano ezingahambelani ezihlotshaniswa namalungu afanayo angaguquki nobude obuguquguqukayo.
  • Ukuhambisana okuthuthukisiwe ne-MSVC. Ukwesekwa okwengeziwe "komsebenzi we-#pragma" (kuyala umhlanganisi ukuthi enze ikholi yokusebenza esikhundleni sokunwetshwa okusemgqeni) kanye "ne-"#pragma alloc_text" (ichaza igama lesigaba ngekhodi yokusebenza) enikezwe ku-MSVC. Ukwesekwa okwengeziwe kwamafulege ahambisana ne-MSVC /JMC kanye/ne-JMC.
  • Umsebenzi uyaqhubeka nokusekela amazinga e-C2X kanye ne-C++23 ezayo. Olimini elingu-C, okulandelayo kuyasetshenziswa: isibaluli se-noreturn, amagama angukhiye angamanga neqiniso, uhlobo lwe-_BitInt(N) lwezinombolo eziphelele zokushona kancane okunikeziwe, *_WIDTH amamakhro, isiqalo se-u8 sezinhlamvu ezibethelwe ze-UTF-8.

    Ku-C++, okulandelayo kuyasetshenziswa: ukuhlanganisa amamojula, ukuhlukaniswa kwe-ABI kwamalungu omsebenzi, ku-oda ukuqaliswa okuguquguqukayo kokuguquguqukayo okungekona okwasendaweni kumamojula, ama-opharetha wenkomba ye-multidimensional, i-auto(x), okuguquguqukayo okungewona wangempela, i-goto namalebula emisebenzini emenyezelwe njenge-constexpr , ukulandelana kokuphunyuka okulinganiselwe, okuqanjwe izinhlamvu zokuphunyuka.

  • Amandla ahlotshaniswa ne-OpenCL ne-OpenMP ukwesekwa anwetshiwe. Usekelo olungeziwe lwesandiso se-OpenCL cl_khr_subgroup_rotate.
  • Ngokwakheka kwe-x86, isivikelo sengeziwe ngokumelene nokuba sengozini kumaphrosesa okubangelwa ukukhishwa okuqagelayo kwemiyalelo ngemva kwemisebenzi yokugxuma eya phambili engenamibandela. Inkinga yenzeka ngenxa yokucutshungulwa kwangaphambili kwemiyalelo ngokushesha kulandela imiyalelo yegatsha kumemori (SLS, Straight Line Speculation). Ukuze unike amandla ukuvikela, inketho ethi β€œ-mharden-sls=[none|all|return|indirect-jmp]” iyaphakanyiswa.
  • Kumapulatifomu asekela isandiso se-SSE2, uhlobo lwe-_Float16 lwengeziwe, olulingiswa kusetshenziswa uhlobo lwe-float esimweni sokuntuleka kokusekelwa kwemiyalelo ye-AVX512-FP16.
  • Kwengezwe ifulegi elithi "-m[no-]rdpru" ukuze kulawulwe ukusetshenziswa komyalelo we-RDPRU, osekelwa kuqala ngamaphrosesa we-AMD Zen2.
  • Kwengezwe ifulegi elithi "-mfunction-return=thunk-extern" ukuze kuvikelwe ifulegi le-RETBLEED, elisebenza ngokwengeza imiyalelo elandelanayo engabandakanyi ukubandakanyeka kwendlela yokuqagela yokuqagela yamagatsha angaqondile.

Izinto ezintsha ezibalulekile ku-LLVM 15.0:

  • Usekelo olungeziwe lwe-Cortex-M85 CPU, i-Armv9-A, i-Armv9.1-A ne-Armv9.2-A yezakhiwo, izandiso ze-Armv8.1-M PACBTI-M.
  • I-backend yokuhlola ye-DirectX yengeziwe esekela ifomethi ye-DXIL (DirectX Intermediate Language) esetshenziselwa ama-shader we-DirectX. Indawo engemuva inikwe amandla ngokucacisa ipharamitha ethi β€œ-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” phakathi nokuhlanganisa.
  • I-Libc++ iyaqhubeka nokusebenzisa izici ezintsha zamazinga e-C++20 kanye ne-C++2b, okuhlanganisa ukuqedwa kokusetshenziswa komtapo "wefomethi" kanye nenguqulo yokuhlola ehlongozwayo yomtapo "wamabanga".
  • Okungemuva okuthuthukisiwe kwezakhiwo ze-x86, i-PowerPC ne-RISC-V.
  • Amandla esixhumanisi se-LLD nesilungisi sephutha se-LLDB athuthukisiwe.

Source: opennet.ru

Engeza amazwana