Lẹhin oṣu mẹfa ti idagbasoke, itusilẹ ti iṣẹ akanṣe LLVM 15.0 ni a gbekalẹ - ohun elo irinṣẹ ibaramu GCC (awọn olupilẹṣẹ, awọn olupilẹṣẹ ati awọn olupilẹṣẹ koodu) ti o ṣajọ awọn eto sinu bitcode agbedemeji ti RISC-bii awọn ilana foju (ẹrọ foju ipele kekere pẹlu kan olona-ipele ti o dara ju eto). Pseudocode ti ipilẹṣẹ le ṣe iyipada nipa lilo olupilẹṣẹ JIT sinu awọn ilana ẹrọ taara ni akoko ipaniyan eto.
Awọn ilọsiwaju pataki ni Clang 15.0:
- Fun awọn ọna ṣiṣe ti o da lori x86 faaji, asia “-fzero-call-loed-regs” ti ṣafikun, eyiti o rii daju pe gbogbo awọn iforukọsilẹ Sipiyu ti a lo ninu iṣẹ naa ni a tunto si odo ṣaaju ki o to pada iṣakoso lati iṣẹ naa. Aṣayan yii n gba ọ laaye lati daabobo lodi si jijo alaye lati awọn iṣẹ ati dinku nọmba awọn bulọọki ti o dara fun kikọ awọn ohun elo ROP (Eto Iwa-pada-pada) ni awọn ilokulo nipasẹ isunmọ 20%.
- Randomization ti ibi iranti ti awọn ẹya fun koodu C ti ni imuse, eyiti o ṣe idiju isediwon data lati awọn ẹya ni iṣẹlẹ ti ilokulo awọn ailagbara. Randomization ti wa ni titan ati pipa ni lilo randomize_layout ati no_randomize_layout awọn abuda, ati pe o nilo lati ṣeto irugbin kan nipa lilo asia "-frandomize-layout-seed" tabi "-frandomize-layout-seed-file".
- Ṣe afikun "-fstrict-flex-arrays=" flag ", pẹlu eyi ti o le šakoso awọn aala fun a rọ orun ano ni awọn ẹya (Rọ orun omo egbe, ohun orun ti ailopin iwọn ni opin ti awọn be). Nigbati o ba ṣeto si 0 (aiyipada), apakan ti o kẹhin ti igbekalẹ pẹlu ọna-apapọ nigbagbogbo ni ilọsiwaju bi ọna ti o rọ, 1 - awọn iwọn nikan [], [0] ati [1] ni a ṣe ilana bi apẹrẹ rọ, 2 - awọn iwọn nikan. [] ati [0] ti wa ni ilọsiwaju bi a rọ orun.
- Atilẹyin esiperimenta ti a ṣafikun fun ede C-bii HLSL (Ede Shader Ipele giga), ti a lo ninu DirectX fun kikọ awọn shaders.
- Fikun "-Warray-parameter" lati kilọ nipa awọn iṣẹ aṣepari pẹlu awọn ikede ariyanjiyan aibaramu ti o ni nkan ṣe pẹlu awọn ọna agbedemeji-ti o wa titi ati oniyipada.
- Imudara ibamu pẹlu MSVC. Atilẹyin ti a ṣafikun fun “iṣẹ #pragma” (sọtọ olupilẹṣẹ lati ṣe ipilẹṣẹ ipe iṣẹ dipo imugboroja inline) ati “#pragma alloc_text” (ṣalaye orukọ apakan pẹlu koodu iṣẹ) ti a pese ni MSVC. Atilẹyin ti a ṣafikun fun ibaramu MSVC / JMC ati / awọn asia JMC.
- Iṣẹ tẹsiwaju lati ṣe atilẹyin fun ojo iwaju C2X ati C ++ 23 awọn ajohunše. Fun ede C, atẹle naa ni imuse: abuda noreturn, awọn koko-ọrọ eke ati otitọ, iru _BitInt(N) fun awọn odidi ti ijinle bit ti a fun, *_WIDTH macros, ìpele u8 fun UTF-8 awọn ohun kikọ silẹ.
Fun C ++, atẹle naa ni imuse: iṣọpọ module, ipinya ABI ti awọn ọmọ ẹgbẹ iṣẹ, paṣẹ ipilẹṣẹ agbara ti awọn oniyipada ti kii ṣe agbegbe ni awọn modulu, awọn oniṣẹ atọka multidimensional, auto(x), awọn oniyipada ti kii-gangan, goto ati awọn aami ninu awọn iṣẹ ti a kede bi constexpr , delimited ona abayo lesese, ti a npè ni ona abayo kikọ.
- Awọn agbara ti o ni nkan ṣe pẹlu OpenCL ati atilẹyin OpenMP ti pọ si. Atilẹyin ti a ṣafikun fun itẹsiwaju OpenCL cl_khr_subgroup_rotate.
- Fun faaji x86, aabo ti ni afikun lodi si awọn ailagbara ninu awọn ilana ti o fa nipasẹ ipaniyan akiyesi ti awọn ilana lẹhin awọn iṣẹ fo siwaju lainidi. Iṣoro naa waye nitori sisẹ iṣaaju-emptive ti awọn ilana lẹsẹkẹsẹ ti o tẹle itọnisọna ẹka ni iranti (SLS, Speculation Line Straight). Lati mu aabo ṣiṣẹ, aṣayan “-mharden-sls=[ko si |gbogbo|pada|indirect-jmp]” jẹ idamọran.
- Fun awọn iru ẹrọ ti o ṣe atilẹyin itẹsiwaju SSE2, a ti ṣafikun iru _Float16, eyiti o ṣe apẹẹrẹ nipa lilo iru omi loju omi ni ọran aini atilẹyin fun awọn ilana AVX512-FP16.
- Fikun asia "-m [no-] rdpru" lati ṣakoso lilo ilana RDPRU, atilẹyin bẹrẹ pẹlu awọn ilana AMD Zen2.
- Ṣe afikun asia "-mfunction-return=thunk-extern" lati daabobo lodi si ailagbara RETBLEED, eyiti o ṣiṣẹ nipa fifi ilana ilana kan kun ti o yọkuro ikopa ti ilana ipaniyan arosọ fun awọn ẹka aiṣe-taara.
Awọn imotuntun bọtini ni LLVM 15.0:
- Atilẹyin ti a ṣafikun fun Cortex-M85 CPU, Armv9-A, Armv9.1-A ati Armv9.2-A architectures, Armv8.1-M PACBTI-M awọn amugbooro.
- A ti ṣafikun ẹhin esiperimenta fun DirectX ti o ṣe atilẹyin ọna kika DXIL (DirectX Intermediate Language) ti a lo fun awọn ojiji DirectX. A ti mu ẹhin ẹhin ṣiṣẹ nipa sisọ pato “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” paramita lakoko apejọ.
- Libc++ tẹsiwaju lati ṣe awọn ẹya tuntun ti awọn iṣedede C ++ 20 ati C ++ 2b, pẹlu ipari imuse ti ile-ikawe “kika” ati ẹya esiperimenta ti a pinnu ti ile-ikawe “awọn sakani”.
- Ilọsiwaju backends fun x86, PowerPC ati RISC-V faaji.
- Awọn agbara ti ọna asopọ LLD ati LLDB debugger ti ni ilọsiwaju.
orisun: opennet.ru
