1027 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s | FileCheck %s3; RUN: llc -use-constant-fp-for-scalable-splat < %s | FileCheck %s4 5target triple = "aarch64-unknown-linux-gnu"6 7;8; FADD9;10 11define <vscale x 8 x half> @fadd_h_immhalf(<vscale x 8 x half> %a) #0 {12; CHECK-LABEL: fadd_h_immhalf:13; CHECK: // %bb.0:14; CHECK-NEXT: ptrue p0.h15; CHECK-NEXT: fadd z0.h, p0/m, z0.h, #0.516; CHECK-NEXT: ret17 %out = fadd <vscale x 8 x half> %a, splat(half 0.500000e+00)18 ret <vscale x 8 x half> %out19}20 21define <vscale x 8 x half> @fadd_h_immone(<vscale x 8 x half> %a) #0 {22; CHECK-LABEL: fadd_h_immone:23; CHECK: // %bb.0:24; CHECK-NEXT: ptrue p0.h25; CHECK-NEXT: fadd z0.h, p0/m, z0.h, #1.026; CHECK-NEXT: ret27 %out = fadd <vscale x 8 x half> %a, splat(half 1.000000e+00)28 ret <vscale x 8 x half> %out29}30 31define <vscale x 4 x half> @fadd_4h_immhalf(<vscale x 4 x half> %a) #0 {32; CHECK-LABEL: fadd_4h_immhalf:33; CHECK: // %bb.0:34; CHECK-NEXT: ptrue p0.s35; CHECK-NEXT: fadd z0.h, p0/m, z0.h, #0.536; CHECK-NEXT: ret37 %out = fadd <vscale x 4 x half> %a, splat(half 0.500000e+00)38 ret <vscale x 4 x half> %out39}40 41define <vscale x 4 x half> @fadd_4h_immone(<vscale x 4 x half> %a) #0 {42; CHECK-LABEL: fadd_4h_immone:43; CHECK: // %bb.0:44; CHECK-NEXT: ptrue p0.s45; CHECK-NEXT: fadd z0.h, p0/m, z0.h, #1.046; CHECK-NEXT: ret47 %out = fadd <vscale x 4 x half> %a, splat(half 1.000000e+00)48 ret <vscale x 4 x half> %out49}50 51define <vscale x 2 x half> @fadd_2h_immhalf(<vscale x 2 x half> %a) #0 {52; CHECK-LABEL: fadd_2h_immhalf:53; CHECK: // %bb.0:54; CHECK-NEXT: ptrue p0.d55; CHECK-NEXT: fadd z0.h, p0/m, z0.h, #0.556; CHECK-NEXT: ret57 %out = fadd <vscale x 2 x half> %a, splat(half 0.500000e+00)58 ret <vscale x 2 x half> %out59}60 61define <vscale x 2 x half> @fadd_2h_immone(<vscale x 2 x half> %a) #0 {62; CHECK-LABEL: fadd_2h_immone:63; CHECK: // %bb.0:64; CHECK-NEXT: ptrue p0.d65; CHECK-NEXT: fadd z0.h, p0/m, z0.h, #1.066; CHECK-NEXT: ret67 %out = fadd <vscale x 2 x half> %a, splat(half 1.000000e+00)68 ret <vscale x 2 x half> %out69}70 71define <vscale x 4 x float> @fadd_s_immhalf(<vscale x 4 x float> %a) #0 {72; CHECK-LABEL: fadd_s_immhalf:73; CHECK: // %bb.0:74; CHECK-NEXT: ptrue p0.s75; CHECK-NEXT: fadd z0.s, p0/m, z0.s, #0.576; CHECK-NEXT: ret77 %out = fadd <vscale x 4 x float> %a, splat(float 0.500000e+00)78 ret <vscale x 4 x float> %out79}80 81define <vscale x 4 x float> @fadd_s_immone(<vscale x 4 x float> %a) #0 {82; CHECK-LABEL: fadd_s_immone:83; CHECK: // %bb.0:84; CHECK-NEXT: ptrue p0.s85; CHECK-NEXT: fadd z0.s, p0/m, z0.s, #1.086; CHECK-NEXT: ret87 %out = fadd <vscale x 4 x float> %a, splat(float 1.000000e+00)88 ret <vscale x 4 x float> %out89}90 91define <vscale x 2 x float> @fadd_2s_immhalf(<vscale x 2 x float> %a) #0 {92; CHECK-LABEL: fadd_2s_immhalf:93; CHECK: // %bb.0:94; CHECK-NEXT: ptrue p0.d95; CHECK-NEXT: fadd z0.s, p0/m, z0.s, #0.596; CHECK-NEXT: ret97 %out = fadd <vscale x 2 x float> %a, splat(float 0.500000e+00)98 ret <vscale x 2 x float> %out99}100 101define <vscale x 2 x float> @fadd_2s_immone(<vscale x 2 x float> %a) #0 {102; CHECK-LABEL: fadd_2s_immone:103; CHECK: // %bb.0:104; CHECK-NEXT: ptrue p0.d105; CHECK-NEXT: fadd z0.s, p0/m, z0.s, #1.0106; CHECK-NEXT: ret107 %out = fadd <vscale x 2 x float> %a, splat(float 1.000000e+00)108 ret <vscale x 2 x float> %out109}110 111 112define <vscale x 2 x double> @fadd_d_immhalf(<vscale x 2 x double> %a) #0 {113; CHECK-LABEL: fadd_d_immhalf:114; CHECK: // %bb.0:115; CHECK-NEXT: ptrue p0.d116; CHECK-NEXT: fadd z0.d, p0/m, z0.d, #0.5117; CHECK-NEXT: ret118 %out = fadd <vscale x 2 x double> %a, splat(double 0.500000e+00)119 ret <vscale x 2 x double> %out120}121 122define <vscale x 2 x double> @fadd_d_immone(<vscale x 2 x double> %a) #0 {123; CHECK-LABEL: fadd_d_immone:124; CHECK: // %bb.0:125; CHECK-NEXT: ptrue p0.d126; CHECK-NEXT: fadd z0.d, p0/m, z0.d, #1.0127; CHECK-NEXT: ret128 %out = fadd <vscale x 2 x double> %a, splat(double 1.000000e+00)129 ret <vscale x 2 x double> %out130}131 132;133; FMAX134;135 136define <vscale x 8 x half> @fmax_h_immzero(<vscale x 8 x half> %a) #0 {137; CHECK-LABEL: fmax_h_immzero:138; CHECK: // %bb.0:139; CHECK-NEXT: ptrue p0.h140; CHECK-NEXT: fmax z0.h, p0/m, z0.h, #0.0141; CHECK-NEXT: ret142 %out = call <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)143 ret <vscale x 8 x half> %out144}145 146define <vscale x 8 x half> @fmax_h_immone(<vscale x 8 x half> %a) #0 {147; CHECK-LABEL: fmax_h_immone:148; CHECK: // %bb.0:149; CHECK-NEXT: ptrue p0.h150; CHECK-NEXT: fmax z0.h, p0/m, z0.h, #1.0151; CHECK-NEXT: ret152 %out = call <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))153 ret <vscale x 8 x half> %out154}155 156define <vscale x 4 x half> @fmax_4h_immzero(<vscale x 4 x half> %a) #0 {157; CHECK-LABEL: fmax_4h_immzero:158; CHECK: // %bb.0:159; CHECK-NEXT: ptrue p0.s160; CHECK-NEXT: fmax z0.h, p0/m, z0.h, #0.0161; CHECK-NEXT: ret162 %out = call <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)163 ret <vscale x 4 x half> %out164}165 166define <vscale x 4 x half> @fmax_4h_immone(<vscale x 4 x half> %a) #0 {167; CHECK-LABEL: fmax_4h_immone:168; CHECK: // %bb.0:169; CHECK-NEXT: ptrue p0.s170; CHECK-NEXT: fmax z0.h, p0/m, z0.h, #1.0171; CHECK-NEXT: ret172 %out = call <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))173 ret <vscale x 4 x half> %out174}175 176define <vscale x 2 x half> @fmax_2h_immzero(<vscale x 2 x half> %a) #0 {177; CHECK-LABEL: fmax_2h_immzero:178; CHECK: // %bb.0:179; CHECK-NEXT: ptrue p0.d180; CHECK-NEXT: fmax z0.h, p0/m, z0.h, #0.0181; CHECK-NEXT: ret182 %out = call <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)183 ret <vscale x 2 x half> %out184}185 186define <vscale x 2 x half> @fmax_2h_immone(<vscale x 2 x half> %a) #0 {187; CHECK-LABEL: fmax_2h_immone:188; CHECK: // %bb.0:189; CHECK-NEXT: ptrue p0.d190; CHECK-NEXT: fmax z0.h, p0/m, z0.h, #1.0191; CHECK-NEXT: ret192 %out = call <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))193 ret <vscale x 2 x half> %out194}195 196define <vscale x 4 x float> @fmax_s_immzero(<vscale x 4 x float> %a) #0 {197; CHECK-LABEL: fmax_s_immzero:198; CHECK: // %bb.0:199; CHECK-NEXT: ptrue p0.s200; CHECK-NEXT: fmax z0.s, p0/m, z0.s, #0.0201; CHECK-NEXT: ret202 %out = call <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)203 ret <vscale x 4 x float> %out204}205 206define <vscale x 4 x float> @fmax_s_immone(<vscale x 4 x float> %a) #0 {207; CHECK-LABEL: fmax_s_immone:208; CHECK: // %bb.0:209; CHECK-NEXT: ptrue p0.s210; CHECK-NEXT: fmax z0.s, p0/m, z0.s, #1.0211; CHECK-NEXT: ret212 %out = call <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))213 ret <vscale x 4 x float> %out214}215 216define <vscale x 2 x float> @fmax_2s_immzero(<vscale x 2 x float> %a) #0 {217; CHECK-LABEL: fmax_2s_immzero:218; CHECK: // %bb.0:219; CHECK-NEXT: ptrue p0.d220; CHECK-NEXT: fmax z0.s, p0/m, z0.s, #0.0221; CHECK-NEXT: ret222 %out = call <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)223 ret <vscale x 2 x float> %out224}225 226define <vscale x 2 x float> @fmax_2s_immone(<vscale x 2 x float> %a) #0 {227; CHECK-LABEL: fmax_2s_immone:228; CHECK: // %bb.0:229; CHECK-NEXT: ptrue p0.d230; CHECK-NEXT: fmax z0.s, p0/m, z0.s, #1.0231; CHECK-NEXT: ret232 %out = call <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))233 ret <vscale x 2 x float> %out234}235 236define <vscale x 2 x double> @fmax_d_immzero(<vscale x 2 x double> %a) #0 {237; CHECK-LABEL: fmax_d_immzero:238; CHECK: // %bb.0:239; CHECK-NEXT: ptrue p0.d240; CHECK-NEXT: fmax z0.d, p0/m, z0.d, #0.0241; CHECK-NEXT: ret242 %out = call <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)243 ret <vscale x 2 x double> %out244}245 246define <vscale x 2 x double> @fmax_d_immone(<vscale x 2 x double> %a) #0 {247; CHECK-LABEL: fmax_d_immone:248; CHECK: // %bb.0:249; CHECK-NEXT: ptrue p0.d250; CHECK-NEXT: fmax z0.d, p0/m, z0.d, #1.0251; CHECK-NEXT: ret252 %out = call <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))253 ret <vscale x 2 x double> %out254}255 256;257; FMAXNM258;259 260define <vscale x 8 x half> @fmaxnm_h_immzero(<vscale x 8 x half> %a) #0 {261; CHECK-LABEL: fmaxnm_h_immzero:262; CHECK: // %bb.0:263; CHECK-NEXT: ptrue p0.h264; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #0.0265; CHECK-NEXT: ret266 %out = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)267 ret <vscale x 8 x half> %out268}269 270define <vscale x 8 x half> @fmaxnm_h_immone(<vscale x 8 x half> %a) #0 {271; CHECK-LABEL: fmaxnm_h_immone:272; CHECK: // %bb.0:273; CHECK-NEXT: ptrue p0.h274; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #1.0275; CHECK-NEXT: ret276 %out = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))277 ret <vscale x 8 x half> %out278}279 280define <vscale x 4 x half> @fmaxnm_4h_immzero(<vscale x 4 x half> %a) #0 {281; CHECK-LABEL: fmaxnm_4h_immzero:282; CHECK: // %bb.0:283; CHECK-NEXT: ptrue p0.s284; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #0.0285; CHECK-NEXT: ret286 %out = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)287 ret <vscale x 4 x half> %out288}289 290define <vscale x 4 x half> @fmaxnm_4h_immone(<vscale x 4 x half> %a) #0 {291; CHECK-LABEL: fmaxnm_4h_immone:292; CHECK: // %bb.0:293; CHECK-NEXT: ptrue p0.s294; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #1.0295; CHECK-NEXT: ret296 %out = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))297 ret <vscale x 4 x half> %out298}299 300define <vscale x 2 x half> @fmaxnm_2h_immzero(<vscale x 2 x half> %a) #0 {301; CHECK-LABEL: fmaxnm_2h_immzero:302; CHECK: // %bb.0:303; CHECK-NEXT: ptrue p0.d304; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #0.0305; CHECK-NEXT: ret306 %out = call <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)307 ret <vscale x 2 x half> %out308}309 310define <vscale x 2 x half> @fmaxnm_2h_immone(<vscale x 2 x half> %a) #0 {311; CHECK-LABEL: fmaxnm_2h_immone:312; CHECK: // %bb.0:313; CHECK-NEXT: ptrue p0.d314; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #1.0315; CHECK-NEXT: ret316 %out = call <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))317 ret <vscale x 2 x half> %out318}319 320define <vscale x 4 x float> @fmaxnm_s_immzero(<vscale x 4 x float> %a) #0 {321; CHECK-LABEL: fmaxnm_s_immzero:322; CHECK: // %bb.0:323; CHECK-NEXT: ptrue p0.s324; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, #0.0325; CHECK-NEXT: ret326 %out = call <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)327 ret <vscale x 4 x float> %out328}329 330define <vscale x 4 x float> @fmaxnm_s_immone(<vscale x 4 x float> %a) #0 {331; CHECK-LABEL: fmaxnm_s_immone:332; CHECK: // %bb.0:333; CHECK-NEXT: ptrue p0.s334; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, #1.0335; CHECK-NEXT: ret336 %out = call <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))337 ret <vscale x 4 x float> %out338}339 340define <vscale x 2 x float> @fmaxnm_2s_immzero(<vscale x 2 x float> %a) #0 {341; CHECK-LABEL: fmaxnm_2s_immzero:342; CHECK: // %bb.0:343; CHECK-NEXT: ptrue p0.d344; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, #0.0345; CHECK-NEXT: ret346 %out = call <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)347 ret <vscale x 2 x float> %out348}349 350define <vscale x 2 x float> @fmaxnm_2s_immone(<vscale x 2 x float> %a) #0 {351; CHECK-LABEL: fmaxnm_2s_immone:352; CHECK: // %bb.0:353; CHECK-NEXT: ptrue p0.d354; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, #1.0355; CHECK-NEXT: ret356 %out = call <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))357 ret <vscale x 2 x float> %out358}359 360define <vscale x 2 x double> @fmaxnm_d_immzero(<vscale x 2 x double> %a) #0 {361; CHECK-LABEL: fmaxnm_d_immzero:362; CHECK: // %bb.0:363; CHECK-NEXT: ptrue p0.d364; CHECK-NEXT: fmaxnm z0.d, p0/m, z0.d, #0.0365; CHECK-NEXT: ret366 %out = call <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)367 ret <vscale x 2 x double> %out368}369 370define <vscale x 2 x double> @fmaxnm_d_immone(<vscale x 2 x double> %a) #0 {371; CHECK-LABEL: fmaxnm_d_immone:372; CHECK: // %bb.0:373; CHECK-NEXT: ptrue p0.d374; CHECK-NEXT: fmaxnm z0.d, p0/m, z0.d, #1.0375; CHECK-NEXT: ret376 %out = call <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))377 ret <vscale x 2 x double> %out378}379 380;381; FMIN382;383 384define <vscale x 8 x half> @fmin_h_immzero(<vscale x 8 x half> %a) #0 {385; CHECK-LABEL: fmin_h_immzero:386; CHECK: // %bb.0:387; CHECK-NEXT: ptrue p0.h388; CHECK-NEXT: fmin z0.h, p0/m, z0.h, #0.0389; CHECK-NEXT: ret390 %out = call <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)391 ret <vscale x 8 x half> %out392}393 394define <vscale x 8 x half> @fmin_h_immone(<vscale x 8 x half> %a) #0 {395; CHECK-LABEL: fmin_h_immone:396; CHECK: // %bb.0:397; CHECK-NEXT: ptrue p0.h398; CHECK-NEXT: fmin z0.h, p0/m, z0.h, #1.0399; CHECK-NEXT: ret400 %out = call <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))401 ret <vscale x 8 x half> %out402}403 404define <vscale x 4 x half> @fmin_4h_immzero(<vscale x 4 x half> %a) #0 {405; CHECK-LABEL: fmin_4h_immzero:406; CHECK: // %bb.0:407; CHECK-NEXT: ptrue p0.s408; CHECK-NEXT: fmin z0.h, p0/m, z0.h, #0.0409; CHECK-NEXT: ret410 %out = call <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)411 ret <vscale x 4 x half> %out412}413 414define <vscale x 4 x half> @fmin_4h_immone(<vscale x 4 x half> %a) #0 {415; CHECK-LABEL: fmin_4h_immone:416; CHECK: // %bb.0:417; CHECK-NEXT: ptrue p0.s418; CHECK-NEXT: fmin z0.h, p0/m, z0.h, #1.0419; CHECK-NEXT: ret420 %out = call <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))421 ret <vscale x 4 x half> %out422}423 424define <vscale x 2 x half> @fmin_2h_immzero(<vscale x 2 x half> %a) #0 {425; CHECK-LABEL: fmin_2h_immzero:426; CHECK: // %bb.0:427; CHECK-NEXT: ptrue p0.d428; CHECK-NEXT: fmin z0.h, p0/m, z0.h, #0.0429; CHECK-NEXT: ret430 %out = call <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)431 ret <vscale x 2 x half> %out432}433 434define <vscale x 2 x half> @fmin_2h_immone(<vscale x 2 x half> %a) #0 {435; CHECK-LABEL: fmin_2h_immone:436; CHECK: // %bb.0:437; CHECK-NEXT: ptrue p0.d438; CHECK-NEXT: fmin z0.h, p0/m, z0.h, #1.0439; CHECK-NEXT: ret440 %out = call <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))441 ret <vscale x 2 x half> %out442}443 444define <vscale x 4 x float> @fmin_s_immzero(<vscale x 4 x float> %a) #0 {445; CHECK-LABEL: fmin_s_immzero:446; CHECK: // %bb.0:447; CHECK-NEXT: ptrue p0.s448; CHECK-NEXT: fmin z0.s, p0/m, z0.s, #0.0449; CHECK-NEXT: ret450 %out = call <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)451 ret <vscale x 4 x float> %out452}453 454define <vscale x 4 x float> @fmin_s_immone(<vscale x 4 x float> %a) #0 {455; CHECK-LABEL: fmin_s_immone:456; CHECK: // %bb.0:457; CHECK-NEXT: ptrue p0.s458; CHECK-NEXT: fmin z0.s, p0/m, z0.s, #1.0459; CHECK-NEXT: ret460 %out = call <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))461 ret <vscale x 4 x float> %out462}463 464define <vscale x 2 x float> @fmin_2s_immzero(<vscale x 2 x float> %a) #0 {465; CHECK-LABEL: fmin_2s_immzero:466; CHECK: // %bb.0:467; CHECK-NEXT: ptrue p0.d468; CHECK-NEXT: fmin z0.s, p0/m, z0.s, #0.0469; CHECK-NEXT: ret470 %out = call <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)471 ret <vscale x 2 x float> %out472}473 474define <vscale x 2 x float> @fmin_2s_immone(<vscale x 2 x float> %a) #0 {475; CHECK-LABEL: fmin_2s_immone:476; CHECK: // %bb.0:477; CHECK-NEXT: ptrue p0.d478; CHECK-NEXT: fmin z0.s, p0/m, z0.s, #1.0479; CHECK-NEXT: ret480 %out = call <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))481 ret <vscale x 2 x float> %out482}483 484define <vscale x 2 x double> @fmin_d_immzero(<vscale x 2 x double> %a) #0 {485; CHECK-LABEL: fmin_d_immzero:486; CHECK: // %bb.0:487; CHECK-NEXT: ptrue p0.d488; CHECK-NEXT: fmin z0.d, p0/m, z0.d, #0.0489; CHECK-NEXT: ret490 %out = call <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)491 ret <vscale x 2 x double> %out492}493 494define <vscale x 2 x double> @fmin_d_immone(<vscale x 2 x double> %a) #0 {495; CHECK-LABEL: fmin_d_immone:496; CHECK: // %bb.0:497; CHECK-NEXT: ptrue p0.d498; CHECK-NEXT: fmin z0.d, p0/m, z0.d, #1.0499; CHECK-NEXT: ret500 %out = call <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))501 ret <vscale x 2 x double> %out502}503 504;505; FMINNM506;507 508define <vscale x 8 x half> @fminnm_h_immzero(<vscale x 8 x half> %a) #0 {509; CHECK-LABEL: fminnm_h_immzero:510; CHECK: // %bb.0:511; CHECK-NEXT: ptrue p0.h512; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #0.0513; CHECK-NEXT: ret514 %out = call <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)515 ret <vscale x 8 x half> %out516}517 518define <vscale x 8 x half> @fminnm_h_immone(<vscale x 8 x half> %a) #0 {519; CHECK-LABEL: fminnm_h_immone:520; CHECK: // %bb.0:521; CHECK-NEXT: ptrue p0.h522; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #1.0523; CHECK-NEXT: ret524 %out = call <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))525 ret <vscale x 8 x half> %out526}527 528define <vscale x 4 x half> @fminnm_4h_immzero(<vscale x 4 x half> %a) #0 {529; CHECK-LABEL: fminnm_4h_immzero:530; CHECK: // %bb.0:531; CHECK-NEXT: ptrue p0.s532; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #0.0533; CHECK-NEXT: ret534 %out = call <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)535 ret <vscale x 4 x half> %out536}537 538define <vscale x 4 x half> @fminnm_4h_immone(<vscale x 4 x half> %a) #0 {539; CHECK-LABEL: fminnm_4h_immone:540; CHECK: // %bb.0:541; CHECK-NEXT: ptrue p0.s542; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #1.0543; CHECK-NEXT: ret544 %out = call <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))545 ret <vscale x 4 x half> %out546}547 548define <vscale x 2 x half> @fminnm_2h_immzero(<vscale x 2 x half> %a) #0 {549; CHECK-LABEL: fminnm_2h_immzero:550; CHECK: // %bb.0:551; CHECK-NEXT: ptrue p0.d552; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #0.0553; CHECK-NEXT: ret554 %out = call <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)555 ret <vscale x 2 x half> %out556}557 558define <vscale x 2 x half> @fminnm_2h_immone(<vscale x 2 x half> %a) #0 {559; CHECK-LABEL: fminnm_2h_immone:560; CHECK: // %bb.0:561; CHECK-NEXT: ptrue p0.d562; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #1.0563; CHECK-NEXT: ret564 %out = call <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))565 ret <vscale x 2 x half> %out566}567 568define <vscale x 4 x float> @fminnm_s_immzero(<vscale x 4 x float> %a) #0 {569; CHECK-LABEL: fminnm_s_immzero:570; CHECK: // %bb.0:571; CHECK-NEXT: ptrue p0.s572; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, #0.0573; CHECK-NEXT: ret574 %out = call <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)575 ret <vscale x 4 x float> %out576}577 578define <vscale x 4 x float> @fminnm_s_immone(<vscale x 4 x float> %a) #0 {579; CHECK-LABEL: fminnm_s_immone:580; CHECK: // %bb.0:581; CHECK-NEXT: ptrue p0.s582; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, #1.0583; CHECK-NEXT: ret584 %out = call <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))585 ret <vscale x 4 x float> %out586}587 588define <vscale x 2 x float> @fminnm_2s_immzero(<vscale x 2 x float> %a) #0 {589; CHECK-LABEL: fminnm_2s_immzero:590; CHECK: // %bb.0:591; CHECK-NEXT: ptrue p0.d592; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, #0.0593; CHECK-NEXT: ret594 %out = call <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)595 ret <vscale x 2 x float> %out596}597 598define <vscale x 2 x float> @fminnm_2s_immone(<vscale x 2 x float> %a) #0 {599; CHECK-LABEL: fminnm_2s_immone:600; CHECK: // %bb.0:601; CHECK-NEXT: ptrue p0.d602; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, #1.0603; CHECK-NEXT: ret604 %out = call <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))605 ret <vscale x 2 x float> %out606}607 608define <vscale x 2 x double> @fminnm_d_immzero(<vscale x 2 x double> %a) #0 {609; CHECK-LABEL: fminnm_d_immzero:610; CHECK: // %bb.0:611; CHECK-NEXT: ptrue p0.d612; CHECK-NEXT: fminnm z0.d, p0/m, z0.d, #0.0613; CHECK-NEXT: ret614 %out = call <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)615 ret <vscale x 2 x double> %out616}617 618define <vscale x 2 x double> @fminnm_d_immone(<vscale x 2 x double> %a) #0 {619; CHECK-LABEL: fminnm_d_immone:620; CHECK: // %bb.0:621; CHECK-NEXT: ptrue p0.d622; CHECK-NEXT: fminnm z0.d, p0/m, z0.d, #1.0623; CHECK-NEXT: ret624 %out = call <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))625 ret <vscale x 2 x double> %out626}627 628;629; FMUL630;631 632define <vscale x 8 x half> @fmul_h_immhalf(<vscale x 8 x half> %a) #0 {633; CHECK-LABEL: fmul_h_immhalf:634; CHECK: // %bb.0:635; CHECK-NEXT: ptrue p0.h636; CHECK-NEXT: fmul z0.h, p0/m, z0.h, #0.5637; CHECK-NEXT: ret638 %out = fmul <vscale x 8 x half> %a, splat(half 0.500000e+00)639 ret <vscale x 8 x half> %out640}641 642define <vscale x 8 x half> @fmul_h_immtwo(<vscale x 8 x half> %a) #0 {643; CHECK-LABEL: fmul_h_immtwo:644; CHECK: // %bb.0:645; CHECK-NEXT: fadd z0.h, z0.h, z0.h646; CHECK-NEXT: ret647 %out = fmul <vscale x 8 x half> %a, splat(half 2.000000e+00)648 ret <vscale x 8 x half> %out649}650 651define <vscale x 4 x half> @fmul_4h_immhalf(<vscale x 4 x half> %a) #0 {652; CHECK-LABEL: fmul_4h_immhalf:653; CHECK: // %bb.0:654; CHECK-NEXT: ptrue p0.s655; CHECK-NEXT: fmul z0.h, p0/m, z0.h, #0.5656; CHECK-NEXT: ret657 %out = fmul <vscale x 4 x half> %a, splat(half 0.500000e+00)658 ret <vscale x 4 x half> %out659}660 661define <vscale x 4 x half> @fmul_4h_immtwo(<vscale x 4 x half> %a) #0 {662; CHECK-LABEL: fmul_4h_immtwo:663; CHECK: // %bb.0:664; CHECK-NEXT: ptrue p0.s665; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z0.h666; CHECK-NEXT: ret667 %out = fmul <vscale x 4 x half> %a, splat(half 2.000000e+00)668 ret <vscale x 4 x half> %out669}670 671define <vscale x 2 x half> @fmul_2h_immhalf(<vscale x 2 x half> %a) #0 {672; CHECK-LABEL: fmul_2h_immhalf:673; CHECK: // %bb.0:674; CHECK-NEXT: ptrue p0.d675; CHECK-NEXT: fmul z0.h, p0/m, z0.h, #0.5676; CHECK-NEXT: ret677 %out = fmul <vscale x 2 x half> %a, splat(half 0.500000e+00)678 ret <vscale x 2 x half> %out679}680 681define <vscale x 2 x half> @fmul_2h_immtwo(<vscale x 2 x half> %a) #0 {682; CHECK-LABEL: fmul_2h_immtwo:683; CHECK: // %bb.0:684; CHECK-NEXT: ptrue p0.d685; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z0.h686; CHECK-NEXT: ret687 %out = fmul <vscale x 2 x half> %a, splat(half 2.000000e+00)688 ret <vscale x 2 x half> %out689}690 691define <vscale x 4 x float> @fmul_s_immhalf(<vscale x 4 x float> %a) #0 {692; CHECK-LABEL: fmul_s_immhalf:693; CHECK: // %bb.0:694; CHECK-NEXT: ptrue p0.s695; CHECK-NEXT: fmul z0.s, p0/m, z0.s, #0.5696; CHECK-NEXT: ret697 %out = fmul <vscale x 4 x float> %a, splat(float 0.500000e+00)698 ret <vscale x 4 x float> %out699}700 701define <vscale x 4 x float> @fmul_s_immtwo(<vscale x 4 x float> %a) #0 {702; CHECK-LABEL: fmul_s_immtwo:703; CHECK: // %bb.0:704; CHECK-NEXT: fadd z0.s, z0.s, z0.s705; CHECK-NEXT: ret706 %out = fmul <vscale x 4 x float> %a, splat(float 2.000000e+00)707 ret <vscale x 4 x float> %out708}709 710define <vscale x 2 x float> @fmul_2s_immhalf(<vscale x 2 x float> %a) #0 {711; CHECK-LABEL: fmul_2s_immhalf:712; CHECK: // %bb.0:713; CHECK-NEXT: ptrue p0.d714; CHECK-NEXT: fmul z0.s, p0/m, z0.s, #0.5715; CHECK-NEXT: ret716 %out = fmul <vscale x 2 x float> %a, splat(float 0.500000e+00)717 ret <vscale x 2 x float> %out718}719 720define <vscale x 2 x float> @fmul_2s_immtwo(<vscale x 2 x float> %a) #0 {721; CHECK-LABEL: fmul_2s_immtwo:722; CHECK: // %bb.0:723; CHECK-NEXT: ptrue p0.d724; CHECK-NEXT: fadd z0.s, p0/m, z0.s, z0.s725; CHECK-NEXT: ret726 %out = fmul <vscale x 2 x float> %a, splat(float 2.000000e+00)727 ret <vscale x 2 x float> %out728}729 730define <vscale x 2 x double> @fmul_d_immhalf(<vscale x 2 x double> %a) #0 {731; CHECK-LABEL: fmul_d_immhalf:732; CHECK: // %bb.0:733; CHECK-NEXT: ptrue p0.d734; CHECK-NEXT: fmul z0.d, p0/m, z0.d, #0.5735; CHECK-NEXT: ret736 %out = fmul <vscale x 2 x double> %a, splat(double 0.500000e+00)737 ret <vscale x 2 x double> %out738}739 740define <vscale x 2 x double> @fmul_d_immtwo(<vscale x 2 x double> %a) #0 {741; CHECK-LABEL: fmul_d_immtwo:742; CHECK: // %bb.0:743; CHECK-NEXT: fadd z0.d, z0.d, z0.d744; CHECK-NEXT: ret745 %out = fmul <vscale x 2 x double> %a, splat(double 2.000000e+00)746 ret <vscale x 2 x double> %out747}748 749;750; FSUB751;752 753define <vscale x 8 x half> @fsub_h_immhalf(<vscale x 8 x half> %a) #0 {754; CHECK-LABEL: fsub_h_immhalf:755; CHECK: // %bb.0:756; CHECK-NEXT: ptrue p0.h757; CHECK-NEXT: fsub z0.h, p0/m, z0.h, #0.5758; CHECK-NEXT: ret759 %out = fsub <vscale x 8 x half> %a, splat(half 0.500000e+00)760 ret <vscale x 8 x half> %out761}762 763define <vscale x 8 x half> @fsub_h_immone(<vscale x 8 x half> %a) #0 {764; CHECK-LABEL: fsub_h_immone:765; CHECK: // %bb.0:766; CHECK-NEXT: ptrue p0.h767; CHECK-NEXT: fsub z0.h, p0/m, z0.h, #1.0768; CHECK-NEXT: ret769 %out = fsub <vscale x 8 x half> %a, splat(half 1.000000e+00)770 ret <vscale x 8 x half> %out771}772 773define <vscale x 4 x half> @fsub_4h_immhalf(<vscale x 4 x half> %a) #0 {774; CHECK-LABEL: fsub_4h_immhalf:775; CHECK: // %bb.0:776; CHECK-NEXT: ptrue p0.s777; CHECK-NEXT: fsub z0.h, p0/m, z0.h, #0.5778; CHECK-NEXT: ret779 %out = fsub <vscale x 4 x half> %a, splat(half 0.500000e+00)780 ret <vscale x 4 x half> %out781}782 783define <vscale x 4 x half> @fsub_4h_immone(<vscale x 4 x half> %a) #0 {784; CHECK-LABEL: fsub_4h_immone:785; CHECK: // %bb.0:786; CHECK-NEXT: ptrue p0.s787; CHECK-NEXT: fsub z0.h, p0/m, z0.h, #1.0788; CHECK-NEXT: ret789 %out = fsub <vscale x 4 x half> %a, splat(half 1.000000e+00)790 ret <vscale x 4 x half> %out791}792 793define <vscale x 2 x half> @fsub_2h_immhalf(<vscale x 2 x half> %a) #0 {794; CHECK-LABEL: fsub_2h_immhalf:795; CHECK: // %bb.0:796; CHECK-NEXT: ptrue p0.d797; CHECK-NEXT: fsub z0.h, p0/m, z0.h, #0.5798; CHECK-NEXT: ret799 %out = fsub <vscale x 2 x half> %a, splat(half 0.500000e+00)800 ret <vscale x 2 x half> %out801}802 803define <vscale x 2 x half> @fsub_2h_immone(<vscale x 2 x half> %a) #0 {804; CHECK-LABEL: fsub_2h_immone:805; CHECK: // %bb.0:806; CHECK-NEXT: ptrue p0.d807; CHECK-NEXT: fsub z0.h, p0/m, z0.h, #1.0808; CHECK-NEXT: ret809 %out = fsub <vscale x 2 x half> %a, splat(half 1.000000e+00)810 ret <vscale x 2 x half> %out811}812 813define <vscale x 4 x float> @fsub_s_immhalf(<vscale x 4 x float> %a) #0 {814; CHECK-LABEL: fsub_s_immhalf:815; CHECK: // %bb.0:816; CHECK-NEXT: ptrue p0.s817; CHECK-NEXT: fsub z0.s, p0/m, z0.s, #0.5818; CHECK-NEXT: ret819 %out = fsub <vscale x 4 x float> %a, splat(float 0.500000e+00)820 ret <vscale x 4 x float> %out821}822 823define <vscale x 4 x float> @fsub_s_immone(<vscale x 4 x float> %a) #0 {824; CHECK-LABEL: fsub_s_immone:825; CHECK: // %bb.0:826; CHECK-NEXT: ptrue p0.s827; CHECK-NEXT: fsub z0.s, p0/m, z0.s, #1.0828; CHECK-NEXT: ret829 %out = fsub <vscale x 4 x float> %a, splat(float 1.000000e+00)830 ret <vscale x 4 x float> %out831}832 833define <vscale x 2 x float> @fsub_2s_immhalf(<vscale x 2 x float> %a) #0 {834; CHECK-LABEL: fsub_2s_immhalf:835; CHECK: // %bb.0:836; CHECK-NEXT: ptrue p0.d837; CHECK-NEXT: fsub z0.s, p0/m, z0.s, #0.5838; CHECK-NEXT: ret839 %out = fsub <vscale x 2 x float> %a, splat(float 0.500000e+00)840 ret <vscale x 2 x float> %out841}842 843define <vscale x 2 x float> @fsub_2s_immone(<vscale x 2 x float> %a) #0 {844; CHECK-LABEL: fsub_2s_immone:845; CHECK: // %bb.0:846; CHECK-NEXT: ptrue p0.d847; CHECK-NEXT: fsub z0.s, p0/m, z0.s, #1.0848; CHECK-NEXT: ret849 %out = fsub <vscale x 2 x float> %a, splat(float 1.000000e+00)850 ret <vscale x 2 x float> %out851}852 853define <vscale x 2 x double> @fsub_d_immhalf(<vscale x 2 x double> %a) #0 {854; CHECK-LABEL: fsub_d_immhalf:855; CHECK: // %bb.0:856; CHECK-NEXT: ptrue p0.d857; CHECK-NEXT: fsub z0.d, p0/m, z0.d, #0.5858; CHECK-NEXT: ret859 %out = fsub <vscale x 2 x double> %a, splat(double 0.500000e+00)860 ret <vscale x 2 x double> %out861}862 863define <vscale x 2 x double> @fsub_d_immone(<vscale x 2 x double> %a) #0 {864; CHECK-LABEL: fsub_d_immone:865; CHECK: // %bb.0:866; CHECK-NEXT: ptrue p0.d867; CHECK-NEXT: fsub z0.d, p0/m, z0.d, #1.0868; CHECK-NEXT: ret869 %out = fsub <vscale x 2 x double> %a, splat(double 1.000000e+00)870 ret <vscale x 2 x double> %out871}872 873;874; FSUBR875;876 877define <vscale x 8 x half> @fsubr_h_immhalf(<vscale x 8 x half> %a) #0 {878; CHECK-LABEL: fsubr_h_immhalf:879; CHECK: // %bb.0:880; CHECK-NEXT: ptrue p0.h881; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #0.5882; CHECK-NEXT: ret883 %out = fsub <vscale x 8 x half> splat(half 0.500000e+00), %a884 ret <vscale x 8 x half> %out885}886 887define <vscale x 8 x half> @fsubr_h_immone(<vscale x 8 x half> %a) #0 {888; CHECK-LABEL: fsubr_h_immone:889; CHECK: // %bb.0:890; CHECK-NEXT: ptrue p0.h891; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #1.0892; CHECK-NEXT: ret893 %out = fsub <vscale x 8 x half> splat(half 1.000000e+00), %a894 ret <vscale x 8 x half> %out895}896 897define <vscale x 4 x half> @fsubr_4h_immhalf(<vscale x 4 x half> %a) #0 {898; CHECK-LABEL: fsubr_4h_immhalf:899; CHECK: // %bb.0:900; CHECK-NEXT: ptrue p0.s901; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #0.5902; CHECK-NEXT: ret903 %out = fsub <vscale x 4 x half> splat(half 0.500000e+00), %a904 ret <vscale x 4 x half> %out905}906 907define <vscale x 4 x half> @fsubr_4h_immone(<vscale x 4 x half> %a) #0 {908; CHECK-LABEL: fsubr_4h_immone:909; CHECK: // %bb.0:910; CHECK-NEXT: ptrue p0.s911; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #1.0912; CHECK-NEXT: ret913 %out = fsub <vscale x 4 x half> splat(half 1.000000e+00), %a914 ret <vscale x 4 x half> %out915}916 917define <vscale x 2 x half> @fsubr_2h_immhalf(<vscale x 2 x half> %a) #0 {918; CHECK-LABEL: fsubr_2h_immhalf:919; CHECK: // %bb.0:920; CHECK-NEXT: ptrue p0.d921; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #0.5922; CHECK-NEXT: ret923 %out = fsub <vscale x 2 x half> splat(half 0.500000e+00), %a924 ret <vscale x 2 x half> %out925}926 927define <vscale x 2 x half> @fsubr_2h_immone(<vscale x 2 x half> %a) #0 {928; CHECK-LABEL: fsubr_2h_immone:929; CHECK: // %bb.0:930; CHECK-NEXT: ptrue p0.d931; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #1.0932; CHECK-NEXT: ret933 %out = fsub <vscale x 2 x half> splat(half 1.000000e+00), %a934 ret <vscale x 2 x half> %out935}936 937define <vscale x 4 x float> @fsubr_s_immhalf(<vscale x 4 x float> %a) #0 {938; CHECK-LABEL: fsubr_s_immhalf:939; CHECK: // %bb.0:940; CHECK-NEXT: ptrue p0.s941; CHECK-NEXT: fsubr z0.s, p0/m, z0.s, #0.5942; CHECK-NEXT: ret943 %out = fsub <vscale x 4 x float> splat(float 0.500000e+00), %a944 ret <vscale x 4 x float> %out945}946 947define <vscale x 4 x float> @fsubr_s_immone(<vscale x 4 x float> %a) #0 {948; CHECK-LABEL: fsubr_s_immone:949; CHECK: // %bb.0:950; CHECK-NEXT: ptrue p0.s951; CHECK-NEXT: fsubr z0.s, p0/m, z0.s, #1.0952; CHECK-NEXT: ret953 %out = fsub <vscale x 4 x float> splat(float 1.000000e+00), %a954 ret <vscale x 4 x float> %out955}956 957define <vscale x 2 x float> @fsubr_2s_immhalf(<vscale x 2 x float> %a) #0 {958; CHECK-LABEL: fsubr_2s_immhalf:959; CHECK: // %bb.0:960; CHECK-NEXT: ptrue p0.d961; CHECK-NEXT: fsubr z0.s, p0/m, z0.s, #0.5962; CHECK-NEXT: ret963 %out = fsub <vscale x 2 x float> splat(float 0.500000e+00), %a964 ret <vscale x 2 x float> %out965}966 967define <vscale x 2 x float> @fsubr_2s_immone(<vscale x 2 x float> %a) #0 {968; CHECK-LABEL: fsubr_2s_immone:969; CHECK: // %bb.0:970; CHECK-NEXT: ptrue p0.d971; CHECK-NEXT: fsubr z0.s, p0/m, z0.s, #1.0972; CHECK-NEXT: ret973 %out = fsub <vscale x 2 x float> splat(float 1.000000e+00), %a974 ret <vscale x 2 x float> %out975}976 977define <vscale x 2 x double> @fsubr_d_immhalf(<vscale x 2 x double> %a) #0 {978; CHECK-LABEL: fsubr_d_immhalf:979; CHECK: // %bb.0:980; CHECK-NEXT: ptrue p0.d981; CHECK-NEXT: fsubr z0.d, p0/m, z0.d, #0.5982; CHECK-NEXT: ret983 %out = fsub <vscale x 2 x double> splat(double 0.500000e+00), %a984 ret <vscale x 2 x double> %out985}986 987define <vscale x 2 x double> @fsubr_d_immone(<vscale x 2 x double> %a) #0 {988; CHECK-LABEL: fsubr_d_immone:989; CHECK: // %bb.0:990; CHECK-NEXT: ptrue p0.d991; CHECK-NEXT: fsubr z0.d, p0/m, z0.d, #1.0992; CHECK-NEXT: ret993 %out = fsub <vscale x 2 x double> splat(double 1.000000e+00), %a994 ret <vscale x 2 x double> %out995}996 997declare <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)998declare <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)999declare <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1000declare <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1001declare <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1002declare <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1003 1004declare <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1005declare <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)1006declare <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1007declare <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1008declare <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1009declare <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1010 1011declare <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1012declare <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)1013declare <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1014declare <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1015declare <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1016declare <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1017 1018declare <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1019declare <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)1020declare <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1021declare <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1022declare <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1023declare <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1024 1025attributes #0 = { "target-features"="+sve" }1026attributes #1 = { "target-features"="+sve,+use-experimental-zeroing-pseudos" }1027