Kamora likhoeli tse tšeletseng tsa nts'etsopele, LLVM 22.1.0 e lokollotsoe. E nts'etsapele lisebelisoa (li-compilers, li-optimizer, le li-generator tsa khoutu) tse kopanyang mananeo ho ba bitcode e mahareng ea litaelo tsa sebele tse kang RISC (mochini oa sebele oa maemo a tlase o nang le sistimi ea ntlafatso ea maemo a mangata). Khoutu ea pseudo e hlahisitsoeng e ka fetoloa ho ba khoutu ea mochini bakeng sa sethala se fanoeng sa sepheo kapa ea sebelisoa ke compiler ea just-in-time (JIT) ho hlahisa litaelo tsa mochini ka kotloloho nakong ea ts'ebetso ea lenaneo. Ho latela mahlale a LLVM, projeke e nts'etsapele compiler ea Clang, e tšehetsang lipuo tsa lenaneo la C, C++, le Objective-C. Ho qala ka lekala la 18.x, projeke e ile ea fetohela morerong o mocha oa linomoro tsa mofuta, ho latela hore na tokollo ea 0 ("N.0") e sebelisoa nakong ea nts'etsopele, 'me mofuta oa pele o tsitsitseng o na le nomoro ea "N.1."
Lintlafatso ho Clang 22 li kenyelletsa:
- Tšehetso e ekelitsoeng bakeng sa matšoao a kabo ea memori (Allocation Tokens) bakeng sa ho tšoaea mesebetsi ea kabo ea memori e etsoang ka ho sebelisa mesebetsi e kang malloc e nang le sesupo se ikhethang. Matšoao a kabo a lumella ho hlophisa tlhahisoleseling ea heap, ho nolofatsa ho lemoha ho lutla ha memori, le ho nolofalletsa ho bokella lintho ho latela morero oa tsona kapa mekhoa ea phetoho (mohlala, ho arola data ea "ho chesa" ho "serame"). Ho nolofalletsa, sebelisa folakha ea "-fsanitize=alloc-token".
- Likarolo tse amanang le puo ea C:
- Tlhaloso ea moralo e hlalosang mokhoa oa ho phethahatsa o "liehisitsoeng" o kentsoeng tšebetsong e se e kentsoe tšebetsong, e lumellang liketso ho etsoa ha sekala sa hona joale se tsoa. Folakha ea "-fdefer-ts" e ekelitsoe ho nolofalletsa tšehetso ea "liehisitsoe".
- Mosebetsi o kentsweng kahare __builtin_stack_address() o ekeditswe, o bontsha mosebetsi o tshwanang ho GCC. Mosebetsi ona o kgutlisa aterese ya stack e arolang sebaka sa stack sa mosebetsi wa hajwale o bitswang __builtin_stack_address() le mesebetsi e latelang eo o e bitsang.
- Bokhoni bo ntseng bo ntlafatsoa bakeng sa maemo a tlang a C2y:
- Tšehetso e ekelitsoeng bakeng sa li-loop tse reheletsoeng ka mabitso, e u lumellang ho abela mabitso ho li-loop le lipolelo tsa switch, tse ka hlalosoang lipolelong tsa break le continue ho hlalosa ka ho hlaka loop eo u lokelang ho tsoa ho eona. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
- Ho kenngwa tshebetsong ha macro e kentsweng kahare ya "__COUNTER__", e reretsweng ho hlahisa mabitso a ikgethang a ikgethang, ho atolositswe mme ho kenyelleditswe tekanyetsong. Moedi wa mehala ya 2147483647 ho macro ena o se o beilwe; ho feta moedi ona ho tla hlahisa phoso.
- Temoso e tlositsoeng (-Wstatic-in-line) ha ho sebelisoa mesebetsi e sa fetoheng kapa lintho tse fetohang ka hare ho mesebetsi tse phatlalalitsoeng e le "extern inline".
- Bokhoni bo hlalositsoe ho maemo a C23 C:
- Faele ea hlooho ea float.h joale e tšehetsa li-macro tsa FLT_SNAN, DBL_SNAN, le LDBL_SNAN, tse kenyang tšebetsong boleng ba NaN bo nang le matšoao (bo bakang mokhelo ha bo sebelisoa mesebetsing ea lipalo) bakeng sa mefuta ea float, double, le long double.
- E lokisitse phoso moo mefuta e fapaneng e sa boleloang ka mabitso e neng e nkoa e lumellana ka har'a yuniti e tšoanang ea phetolelo haeba e ne e e-na le masimo a tšoanang.
- Folakha ea "-MG" e neng e sebelisoa ho hlokomoloha lifaele tsa hlooho tse sieo nakong ea ho hlahloba ho itšetleha ka eona e atolositsoe ho litaelo tsa "#embed" 'me joale e hatella phoso ea "file not found" ha faele e boletsoeng taelong ea "#embed" e le sieo.
- Likarolo tse amanang le C++:
- Bokhoni ba ho sebelisa litlamo tse hlophisitsoeng moelelong oa "constexpr", joalo ka ha ho ntlafalitsoe tlhalosong ea C++2c (C++26), bo ekelitsoe. Sena se bolela hore litšupiso tsa lipolelo tse sa fetoheng joale ka botsona e ka ba lipolelo tse sa fetoheng. Tšehetso e kenngoa tšebetsong bakeng sa lihlopha le meaho e bonolo (li-tuple ha li so tšehetsoe). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Jwalo ka ha ho hlokeha ho latela maemo a C++20, dithibelo jwale di fetolelwa sebopehong se tlwaelehileng pele di hlahlojwa, e leng se dumellang melaetsa e nepahetseng ya tlhahlobo le ho sebetsana ka nepo le diphoso tsa ho nkela sebaka diqetong tsa template tse sebediswang feela ho concept-id.
- E kentse lelapa la mesebetsi e kentsweng kahare "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" ho fumana hore na di-operator tsa papiso "<", ">", "<=", le ">=" di entswe ho tswa ho operator ya "<=>".
- Paramethara ea "-Wincompatible-pointer-types" e fetotsoe ho hlahisa phoso ho e-na le temoso. Ho khutlela boitšoarong bo fetileng, sebelisa khetho ea "-Wno-error=incompatible-pointer-types".
- Mesebetsi e kentsweng ka hare e ekeditswe __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, le __builtin_dedup_pack. Mohlala, builtin_dedup_pack e o dumella ho tlosa dikopi tse tshwanang lenaneng la mefuta: ho sebedisa MyTypeList = TypeList<__builtin_dedup_pack ...>; // mofuta o hlahang e tla ba TypeList
- Ha ho lokisoa boitšoaro bo sa hlalosoang ka UBSan (-fsanitize=undefined -fsanitize-trap=undefined), tlhahisoleseding ea sesosa sa liphoso joale e kenyelelitsoe tlhahisoleseling e hlahisitsoeng ea ho lokisoa. Folakha ea "-fsanitize-debug-trap-reasons" e ekelitsoe ho totobatsa boemo ba lintlha tlhahisoleselingng ea liphoso. E ka beoa ho "basic" bakeng sa litlhaloso tse akaretsang (mohlala, "Integer addition overflowed") le "detailed" ho kenyelletsa tlhahisoleseling e qaqileng (mohlala, "signed integer addition overflow in 'a + b'").
- E kentse lifolakha tse ncha tsa komporo:
- "-f[no-]sanitize-debug-trap-mabaka" ho laola hore na mabaka a mekhelo a kentswe tlhahisoleseding ya ho lokisa diphoso ha ho bokellwa ka mokgwa wa "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", le "-fsanitize-alloc-token-extended" ho laola di-token tsa kabo ya memori.
- "-fmatrix-memory-layout" ho laola sebopeho sa memori sa mefuta ya matrix (mohlala, kholomo-kholo bakeng sa kholomo-kholo, mola-kholo bakeng sa mola-kholo).
- Mesebetsi jwale e na le tšobotsi ya "malloc_span", e tshwanang le tšobotsi ya malloc empa e sebetsa mesebetsing e kgutlisang dibopeho tse kang span tse nang le pointer le tshimo e nang le boholo kapa pointer qetellong ya boloko.
- E kentse tšobotsi ea "modular_format" ho khetha ka mokhoa o feto-fetohang ts'ebetsong e hlokahalang e hokahaneng ka mokhoa o tsitsitseng oa ts'ebetso ea printf nakong ea khokahano.
- Lisebelisoa tsa tlhahlobo ea tlhahlobo le ea ho se fetohe li atolositsoe, ho ekelitsoe liteko tse ncha (lintlafatso tse 'maloa tse amanang le tlhahlobo).
- Lintho tse ling tse ka hare bakeng sa katoloso ea SSE, AVX, le AVX512 li ekelitsoe ho X86 backend. Mekhoa ea kaho e ekelitsoe bakeng sa li-CPU tsa Intel tse thehiloeng ho meralo e menyenyane ea Wildcat Lake (-march=wildcatlake) le Nova Lake (-march=novalake).
- Karolo ya morao ya AArch64 jwale e tshehetsa Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), le diprosesa tsa Arm C1-Ultra (c1-ultra). Mesebetsi e meng e kentsweng kahare e ekeditswe bakeng sa ditaelo tsa FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], le FCVTA[US]. Tshehetso ya Function Multi-Versioning (FMV) e tsitsitse. Basebedisi jwale ba ka feta bohlokwa ba mefuta e fapaneng ya mesebetsi.
- Tšehetso e ekelitsoeng bakeng sa meralo ea LoongArch32 (LA32R, LA32S).
- Li-backend tse ntlafalitsoeng bakeng sa meralo ea ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, le PowerPC.
Source: opennet.ru
