Itusilẹ ti LLVM 16.0 alakojo suite

Lẹhin oṣu mẹfa ti idagbasoke, itusilẹ ti iṣẹ akanṣe LLVM 16.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 16.0:

  • Iwọn C ++/ObjC ++ aiyipada jẹ gnu ++17 ( gnu ++ 14 tẹlẹ), eyiti o tumọ si awọn ẹya C ++ 17 pẹlu awọn amugbooro GNU ni atilẹyin nipasẹ aiyipada. Lati da ihuwasi iṣaaju pada, o le lo aṣayan "-std=gnu++14".
  • Awọn ẹya ilọsiwaju ti a ṣe ti o ni ibatan si boṣewa C++20:
    • Awọn iṣẹ ọmọ ẹgbẹ pataki ni ipo bintin,
    • Yiya awọn abuda eleto ni awọn iṣẹ lambda,
    • Oniṣẹ imudọgba inu awọn ikosile,
    • Aṣayan lati fi ọrọ-ọrọ iru orukọ silẹ ni diẹ ninu awọn ipo,
    • Ibẹrẹ apapọ apapọ ti o wulo ni awọn akomo ("Aggr(val1, val2)").
  • Awọn ẹya ti a ṣalaye ni boṣewa C ++ 2b ọjọ iwaju ti ni imuse:
    • O gba ọ laaye lati gbe awọn aami ni opin awọn ikosile agbo,
    • onišẹ aimi(),
    • onišẹ aimi[],
    • Ibamu pẹlu iru char8_t jẹ idaniloju,
    • Ibiti awọn lẹta ti a gba laaye fun lilo ninu "\N{...}" ti gbooro
    • Ṣe afikun agbara lati lo awọn oniyipada ti a kede bi “constexpr aimi” ninu awọn iṣẹ ti a kede bi constexpr.
  • Awọn ẹya ti a ṣalaye ni C2x boṣewa ti ọjọ iwaju ti ni imuse:
    • Lati mu ikilọ “-Wunused-label” kuro, abuda “[[le_unused]]” ni a gba laaye lati lo si awọn akole
    • O gba ọ laaye lati gbe awọn aami nibikibi laarin awọn ikosile agbo,
    • Irufẹ ti a ṣafikun ati typeof_unqual awọn oniṣẹ,
    • Iru nullptr_t tuntun kan ati igbagbogbo nullptr lati ṣalaye awọn itọka asan ti o le yipada si iru itọka eyikeyi ati ṣe aṣoju iyatọ ti NULL ti ko ni adehun si odidi ati awọn oriṣi ofo.
    • Ni ipo C2x, pipe macro va_start pẹlu nọmba oniyipada ti awọn ariyanjiyan (variadic) ti gba laaye.
  • Ni awọn ipo ibamu C99, C11, ati C17, awọn aṣayan aiyipada "-Wimplicit-function-declaration" ati "-Wimplicit-int" ni bayi ṣe aṣiṣe kan dipo ikilọ kan.
  • Lilo aiṣe-taara ti “asan *” (fun apẹẹrẹ “func ofo (ofo *p) {*p;}” ni ipo C++ ni bayi n ṣe aṣiṣe kan, ti o jọra si ISO C++, GCC, ICC ati MSVC.
  • Pato awọn aaye bit bi awọn operands itọnisọna (fun apẹẹrẹ "__asm ​​​​{mov eax, s.bf}") ninu awọn bulọọki apejọ inline ara Microsoft ni bayi n ṣe aṣiṣe kan.
  • Awọn iwadii ti a ṣafikun fun wiwa ti awọn ẹya oriṣiriṣi ati awọn ẹgbẹ pẹlu awọn orukọ kanna ni awọn modulu oriṣiriṣi.
  • Awọn agbara ti o ni nkan ṣe pẹlu OpenCL ati atilẹyin OpenMP ti pọ si. Awọn iwadii ti ilọsiwaju fun awọn awoṣe C++ ti a lo ninu awọn ariyanjiyan ekuro OpenCL. Ilọsiwaju queuing Àkọsílẹ support fun AMDGPU. Ipinnu nounwind ti wa ni afikun lainidi si gbogbo awọn iṣẹ. Atilẹyin ilọsiwaju fun awọn iṣẹ ti a ṣe sinu.
  • Ṣafikun agbara lati lo oniyipada ayika CLAG_CRASH_DIAGNOSTICS_DIR lati ṣalaye itọsọna ninu eyiti o ti fipamọ data iwadii jamba.
  • Atilẹyin Unicode ti ni imudojuiwọn si sipesifikesonu Unicode 15.0. Diẹ ninu awọn aami mathematiki ni a gba laaye ninu awọn idamọ, gẹgẹbi "₊" (fun apẹẹrẹ "xₖ₊₁ meji").
  • Atilẹyin ti a ṣafikun fun ikojọpọ awọn faili atunto pupọ (awọn faili atunto aiyipada ti kojọpọ ni akọkọ, ati lẹhinna awọn ti a sọ pato nipasẹ asia “-config=”, eyiti o le sọ ni akoko pupọ). Ilana aiyipada ti awọn faili atunto ikojọpọ ti yipada: clang akọkọ gbiyanju lati ṣajọpọ faili -.cfg, ati pe ti ko ba rii, o gbiyanju lati kojọpọ awọn faili meji .cfg ati .cfg. Lati mu awọn faili atunto ikojọpọ nipasẹ aiyipada, asia “--no-default-config” ti ṣafikun.
  • Lati rii daju pe awọn ile-itumọ le tun ṣe, o ṣee ṣe lati rọpo ọjọ lọwọlọwọ ati awọn iye akoko ni __DATE__, __TIME__ ati __TIMESTAMP__ macros pẹlu akoko ti a pato ni oniyipada agbegbe SOURCE_DATE_EPOCH.
  • Lati ṣayẹwo fun wiwa awọn iṣẹ ti a ṣe sinu (builtin) ti o le ṣee lo ni ipo ti awọn iduro, macro “__has_constexpr_builtin” ti ṣafikun.
  • Ṣafikun asia akopo tuntun "-fcoro-aligned-allocation" fun ipin fireemu coroutine titọ.
  • Flag "-fstrict-flex-arrays=" n ṣe atilẹyin fun ipele kẹta ti ijẹrisi ti awọn eroja ti o rọ ni awọn ẹya (Awọn ọmọ ẹgbẹ Array Flexible, titobi ti iwọn ailopin ni opin igbekalẹ). Ni ipele kẹta, iwọn "[]" nikan (fun apẹẹrẹ, "int b[]") ni a ṣe itọju bi apẹrẹ ti o rọ, ṣugbọn iwọn "[0]" (fun apẹẹrẹ, "int b[0]") kiise.
  • Fikun asia "-fmodule-output" lati jẹ ki awoṣe akojọpọ ipele-ọkan fun awọn modulu C ++ boṣewa.
  • Fikun-un ipo "-Rpass-analysis=stack-frame-layout" lati ṣe iranlọwọ ṣe iwadii awọn iṣoro pẹlu iṣeto fireemu akopọ.
  • Fi kun ẹya tuntun __ abuda __ ((target_version ("cpu_features"))) ati faagun iṣẹ ṣiṣe ti abuda __attribute__ ((target_clones ("cpu_features1",cpu_features2",...)))) lati yan awọn ẹya kan pato ti awọn ẹya ti a pese nipasẹ AArch64 Awọn Sipiyu.
  • Awọn irinṣẹ iwadii ti fẹ sii:
    • Ikilọ ti a ṣafikun “-Wsingle-bit-bitfield-constant-conversion” lati ṣe awari gigekuro ti ko tọ nigba fifi ọkan si aaye bitfield kan-bit ti o fowo si.
    • Awọn iwadii aisan ti awọn oniyipada constexpr ti ko ni ibẹrẹ ti gbooro.
    • Fikun-un "-Wcast-function-type-strict" ati "-Wincomompatible-function-pointer-types-strict" ikilo lati ṣe idanimọ awọn iṣoro ti o pọju pẹlu sisọ iru iṣẹ.
    • Awọn iwadii ti a ṣafikun fun lilo aṣiṣe tabi awọn orukọ module ti o wa ni ipamọ ni awọn bulọọki okeere.
    • Imudara ilọsiwaju ti awọn ọrọ-ọrọ “laifọwọyi” ti nsọnu ni awọn asọye.
    • Imuse ti ikilọ "-Winteger-overflow" ti ṣafikun awọn sọwedowo fun awọn ipo afikun ti o yori si ṣiṣan.
  • Atilẹyin imuse fun eto ilana ilana LoongArch (-march=loongarch64 tabi -march=la464), ti a lo ninu awọn ilana Loongson 3 5000 ati imuse RISC ISA tuntun, ti o jọra si MIPS ati RISC-V.

Awọn imotuntun bọtini ni LLVM 16.0:

  • LLVM koodu ti wa ni laaye lati lo eroja telẹ ni C ++ 17 bošewa.
  • Awọn ibeere ayika fun kikọ LLVM ti pọ si. Awọn irinṣẹ kikọ yẹ ki o ṣe atilẹyin bayi boṣewa C ++ 17, ie. Lati kọ, o nilo o kere GCC 7.1, Clang 5.0, Apple Clang 10.0 tabi Visual Studio 2019 16.7.
  • Afẹyinti fun faaji AArch64 ṣe afikun atilẹyin fun Cortex-A715, Cortex-X3 ati Neoverse V2 CPUs, apejọ fun RME MEC (Awọn ọrọ fifi ẹnọ kọ nkan iranti), awọn amugbooro Armv8.3 (Nọmba eka) ati Iṣẹ ṣiṣe Multi Versioning.
  • Ni ẹhin fun faaji ARM, atilẹyin fun Armv2, Armv2A, Armv3 ati awọn iru ẹrọ ibi-afẹde Armv3M ti dawọ duro, fun eyiti iran ti koodu to pe ko ṣe iṣeduro. Fi kun agbara lati ṣe ina koodu fun awọn ilana fun ṣiṣẹ pẹlu eka awọn nọmba.
  • Atilẹyin fun X86 faaji ti ṣe afikun atilẹyin fun itọnisọna ṣeto awọn ile-itumọ (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Atilẹyin ti a ṣafikun fun RDMSRLIST, RMSRLIST ati awọn ilana WRMSRNS. Awọn aṣayan imuṣe "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" ati "-mcpu=grandridge".
  • Ṣe afikun atilẹyin osise fun Syeed LoongArch.
  • Ilọsiwaju backends fun MIPS, PowerPC ati RISC-V faaji
  • Atilẹyin ti a ṣafikun fun ṣiṣatunṣe awọn iṣẹ ṣiṣe 64-bit fun faaji LoongArch si olutọpa LLDB. Imudara ilọsiwaju ti awọn aami aiṣedeede COFF. Ti pese sisẹ ti awọn DLL ẹda-ẹda ninu atokọ ti awọn modulu Windows ti kojọpọ.
  • Ninu ile-ikawe Libc++, iṣẹ akọkọ ni idojukọ lori imuse atilẹyin fun awọn ẹya tuntun ti awọn iṣedede C ++20 ati C ++23.
  • Asopọmọra LDD ni pataki dinku akoko sisopo nipasẹ isọdọtun wiwa sibugbepo adirẹsi ati awọn iṣẹ ipilẹṣẹ apakan. Atilẹyin ti a ṣafikun fun funmorawon apakan nipa lilo algorithm ZSTD.

orisun: opennet.ru

Fi ọrọìwòye kun