brintos

brintos / llvm-project-archived public Read only

0
0
Text · 55.0 KiB · 57389ad Raw
1340 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve < %s | FileCheck %s3 4define <vscale x 8 x half> @fmla_h_sel(<vscale x 8 x i1> %pred, <vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {5; CHECK-LABEL: fmla_h_sel:6; CHECK:       // %bb.0:7; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h8; CHECK-NEXT:    ret9  %mul = fmul contract <vscale x 8 x half> %m1, %m210  %add = fadd contract <vscale x 8 x half> %acc, %mul11  %res = select <vscale x 8 x i1> %pred, <vscale x 8 x half> %add, <vscale x 8 x half> %acc12  ret <vscale x 8 x half> %res13}14 15define <vscale x 4 x half> @fmla_hx4_sel(<vscale x 4 x i1> %pred, <vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {16; CHECK-LABEL: fmla_hx4_sel:17; CHECK:       // %bb.0:18; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h19; CHECK-NEXT:    ret20  %mul = fmul contract <vscale x 4 x half> %m1, %m221  %add = fadd contract <vscale x 4 x half> %acc, %mul22  %res = select <vscale x 4 x i1> %pred, <vscale x 4 x half> %add, <vscale x 4 x half> %acc23  ret <vscale x 4 x half> %res24}25 26define <vscale x 2 x half> @fmla_hx2_sel(<vscale x 2 x i1> %pred, <vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {27; CHECK-LABEL: fmla_hx2_sel:28; CHECK:       // %bb.0:29; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h30; CHECK-NEXT:    ret31  %mul = fmul contract <vscale x 2 x half> %m1, %m232  %add = fadd contract <vscale x 2 x half> %acc, %mul33  %res = select <vscale x 2 x i1> %pred, <vscale x 2 x half> %add, <vscale x 2 x half> %acc34  ret <vscale x 2 x half> %res35}36 37define <vscale x 4 x float> @fmla_s_sel(<vscale x 4 x i1> %pred, <vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {38; CHECK-LABEL: fmla_s_sel:39; CHECK:       // %bb.0:40; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s41; CHECK-NEXT:    ret42  %mul = fmul contract <vscale x 4 x float> %m1, %m243  %add = fadd contract <vscale x 4 x float> %acc, %mul44  %res = select <vscale x 4 x i1> %pred, <vscale x 4 x float> %add, <vscale x 4 x float> %acc45  ret <vscale x 4 x float> %res46}47 48define <vscale x 2 x float> @fmla_sx2_sel(<vscale x 2 x i1> %pred, <vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {49; CHECK-LABEL: fmla_sx2_sel:50; CHECK:       // %bb.0:51; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s52; CHECK-NEXT:    ret53  %mul = fmul contract <vscale x 2 x float> %m1, %m254  %add = fadd contract <vscale x 2 x float> %acc, %mul55  %res = select <vscale x 2 x i1> %pred, <vscale x 2 x float> %add, <vscale x 2 x float> %acc56  ret <vscale x 2 x float> %res57}58 59define <vscale x 2 x double> @fmla_d_sel(<vscale x 2 x i1> %pred, <vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {60; CHECK-LABEL: fmla_d_sel:61; CHECK:       // %bb.0:62; CHECK-NEXT:    fmla z0.d, p0/m, z1.d, z2.d63; CHECK-NEXT:    ret64  %mul = fmul contract <vscale x 2 x double> %m1, %m265  %add = fadd contract <vscale x 2 x double> %acc, %mul66  %res = select <vscale x 2 x i1> %pred, <vscale x 2 x double> %add, <vscale x 2 x double> %acc67  ret <vscale x 2 x double> %res68}69 70define <vscale x 8 x half> @fmls_h_sel(<vscale x 8 x i1> %pred, <vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {71; CHECK-LABEL: fmls_h_sel:72; CHECK:       // %bb.0:73; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h74; CHECK-NEXT:    ret75  %mul = fmul contract <vscale x 8 x half> %m1, %m276  %sub = fsub contract <vscale x 8 x half> %acc, %mul77  %res = select <vscale x 8 x i1> %pred, <vscale x 8 x half> %sub, <vscale x 8 x half> %acc78  ret <vscale x 8 x half> %res79}80 81define <vscale x 4 x half> @fmls_hx4_sel(<vscale x 4 x i1> %pred, <vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {82; CHECK-LABEL: fmls_hx4_sel:83; CHECK:       // %bb.0:84; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h85; CHECK-NEXT:    ret86  %mul = fmul contract <vscale x 4 x half> %m1, %m287  %sub = fsub contract <vscale x 4 x half> %acc, %mul88  %res = select <vscale x 4 x i1> %pred, <vscale x 4 x half> %sub, <vscale x 4 x half> %acc89  ret <vscale x 4 x half> %res90}91 92define <vscale x 2 x half> @fmls_hx2_sel(<vscale x 2 x i1> %pred, <vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {93; CHECK-LABEL: fmls_hx2_sel:94; CHECK:       // %bb.0:95; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h96; CHECK-NEXT:    ret97  %mul = fmul contract <vscale x 2 x half> %m1, %m298  %sub = fsub contract <vscale x 2 x half> %acc, %mul99  %res = select <vscale x 2 x i1> %pred, <vscale x 2 x half> %sub, <vscale x 2 x half> %acc100  ret <vscale x 2 x half> %res101}102 103define <vscale x 4 x float> @fmls_s_sel(<vscale x 4 x i1> %pred, <vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {104; CHECK-LABEL: fmls_s_sel:105; CHECK:       // %bb.0:106; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s107; CHECK-NEXT:    ret108  %mul = fmul contract <vscale x 4 x float> %m1, %m2109  %sub = fsub contract <vscale x 4 x float> %acc, %mul110  %res = select <vscale x 4 x i1> %pred, <vscale x 4 x float> %sub, <vscale x 4 x float> %acc111  ret <vscale x 4 x float> %res112}113 114define <vscale x 2 x float> @fmls_sx2_sel(<vscale x 2 x i1> %pred, <vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {115; CHECK-LABEL: fmls_sx2_sel:116; CHECK:       // %bb.0:117; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s118; CHECK-NEXT:    ret119  %mul = fmul contract <vscale x 2 x float> %m1, %m2120  %sub = fsub contract <vscale x 2 x float> %acc, %mul121  %res = select <vscale x 2 x i1> %pred, <vscale x 2 x float> %sub, <vscale x 2 x float> %acc122  ret <vscale x 2 x float> %res123}124 125define <vscale x 2 x double> @fmls_d_sel(<vscale x 2 x i1> %pred, <vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {126; CHECK-LABEL: fmls_d_sel:127; CHECK:       // %bb.0:128; CHECK-NEXT:    fmls z0.d, p0/m, z1.d, z2.d129; CHECK-NEXT:    ret130  %mul = fmul contract <vscale x 2 x double> %m1, %m2131  %sub = fsub contract <vscale x 2 x double> %acc, %mul132  %res = select <vscale x 2 x i1> %pred, <vscale x 2 x double> %sub, <vscale x 2 x double> %acc133  ret <vscale x 2 x double> %res134}135 136define <vscale x 8 x half> @fmad_h(<vscale x 8 x half> %m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc) {137; CHECK-LABEL: fmad_h:138; CHECK:       // %bb.0:139; CHECK-NEXT:    ptrue p0.h140; CHECK-NEXT:    fmad z0.h, p0/m, z1.h, z2.h141; CHECK-NEXT:    ret142  %mul = fmul contract <vscale x 8 x half> %m1, %m2143  %res = fadd contract <vscale x 8 x half> %acc, %mul144  ret <vscale x 8 x half> %res145}146 147define <vscale x 4 x half> @fmad_hx4(<vscale x 4 x half> %m1, <vscale x 4 x half> %m2, <vscale x 4 x half> %acc) {148; CHECK-LABEL: fmad_hx4:149; CHECK:       // %bb.0:150; CHECK-NEXT:    ptrue p0.s151; CHECK-NEXT:    fmad z0.h, p0/m, z1.h, z2.h152; CHECK-NEXT:    ret153  %mul = fmul contract <vscale x 4 x half> %m1, %m2154  %res = fadd contract <vscale x 4 x half> %acc, %mul155  ret <vscale x 4 x half> %res156}157 158define <vscale x 2 x half> @fmad_hx2(<vscale x 2 x half> %m1, <vscale x 2 x half> %m2, <vscale x 2 x half> %acc) {159; CHECK-LABEL: fmad_hx2:160; CHECK:       // %bb.0:161; CHECK-NEXT:    ptrue p0.d162; CHECK-NEXT:    fmad z0.h, p0/m, z1.h, z2.h163; CHECK-NEXT:    ret164  %mul = fmul contract <vscale x 2 x half> %m1, %m2165  %res = fadd contract <vscale x 2 x half> %acc, %mul166  ret <vscale x 2 x half> %res167}168 169define <vscale x 4 x float> @fmad_s(<vscale x 4 x float> %m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc) {170; CHECK-LABEL: fmad_s:171; CHECK:       // %bb.0:172; CHECK-NEXT:    ptrue p0.s173; CHECK-NEXT:    fmad z0.s, p0/m, z1.s, z2.s174; CHECK-NEXT:    ret175  %mul = fmul contract <vscale x 4 x float> %m1, %m2176  %res = fadd contract <vscale x 4 x float> %acc, %mul177  ret <vscale x 4 x float> %res178}179 180define <vscale x 2 x float> @fmad_sx2(<vscale x 2 x float> %m1, <vscale x 2 x float> %m2, <vscale x 2 x float> %acc) {181; CHECK-LABEL: fmad_sx2:182; CHECK:       // %bb.0:183; CHECK-NEXT:    ptrue p0.d184; CHECK-NEXT:    fmad z0.s, p0/m, z1.s, z2.s185; CHECK-NEXT:    ret186  %mul = fmul contract <vscale x 2 x float> %m1, %m2187  %res = fadd contract <vscale x 2 x float> %acc, %mul188  ret <vscale x 2 x float> %res189}190 191define <vscale x 2 x double> @fmad_d(<vscale x 2 x double> %m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc) {192; CHECK-LABEL: fmad_d:193; CHECK:       // %bb.0:194; CHECK-NEXT:    ptrue p0.d195; CHECK-NEXT:    fmad z0.d, p0/m, z1.d, z2.d196; CHECK-NEXT:    ret197  %mul = fmul contract <vscale x 2 x double> %m1, %m2198  %res = fadd contract <vscale x 2 x double> %acc, %mul199  ret <vscale x 2 x double> %res200}201 202define <vscale x 8 x half> @fmla_h(<vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {203; CHECK-LABEL: fmla_h:204; CHECK:       // %bb.0:205; CHECK-NEXT:    ptrue p0.h206; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h207; CHECK-NEXT:    ret208  %mul = fmul contract <vscale x 8 x half> %m1, %m2209  %res = fadd contract <vscale x 8 x half> %acc, %mul210  ret <vscale x 8 x half> %res211}212 213define <vscale x 4 x half> @fmla_hx4(<vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {214; CHECK-LABEL: fmla_hx4:215; CHECK:       // %bb.0:216; CHECK-NEXT:    ptrue p0.s217; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h218; CHECK-NEXT:    ret219  %mul = fmul contract <vscale x 4 x half> %m1, %m2220  %res = fadd contract <vscale x 4 x half> %acc, %mul221  ret <vscale x 4 x half> %res222}223 224define <vscale x 2 x half> @fmla_hx2(<vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {225; CHECK-LABEL: fmla_hx2:226; CHECK:       // %bb.0:227; CHECK-NEXT:    ptrue p0.d228; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h229; CHECK-NEXT:    ret230  %mul = fmul contract <vscale x 2 x half> %m1, %m2231  %res = fadd contract <vscale x 2 x half> %acc, %mul232  ret <vscale x 2 x half> %res233}234 235define <vscale x 4 x float> @fmla_s(<vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {236; CHECK-LABEL: fmla_s:237; CHECK:       // %bb.0:238; CHECK-NEXT:    ptrue p0.s239; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s240; CHECK-NEXT:    ret241  %mul = fmul contract <vscale x 4 x float> %m1, %m2242  %res = fadd contract <vscale x 4 x float> %acc, %mul243  ret <vscale x 4 x float> %res244}245 246define <vscale x 2 x float> @fmla_sx2(<vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {247; CHECK-LABEL: fmla_sx2:248; CHECK:       // %bb.0:249; CHECK-NEXT:    ptrue p0.d250; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s251; CHECK-NEXT:    ret252  %mul = fmul contract <vscale x 2 x float> %m1, %m2253  %res = fadd contract <vscale x 2 x float> %acc, %mul254  ret <vscale x 2 x float> %res255}256 257define <vscale x 2 x double> @fmla_d(<vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {258; CHECK-LABEL: fmla_d:259; CHECK:       // %bb.0:260; CHECK-NEXT:    ptrue p0.d261; CHECK-NEXT:    fmla z0.d, p0/m, z1.d, z2.d262; CHECK-NEXT:    ret263  %mul = fmul contract <vscale x 2 x double> %m1, %m2264  %res = fadd contract <vscale x 2 x double> %acc, %mul265  ret <vscale x 2 x double> %res266}267 268define <vscale x 8 x half> @fmls_h(<vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {269; CHECK-LABEL: fmls_h:270; CHECK:       // %bb.0:271; CHECK-NEXT:    ptrue p0.h272; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h273; CHECK-NEXT:    ret274  %mul = fmul contract <vscale x 8 x half> %m1, %m2275  %res = fsub contract <vscale x 8 x half> %acc, %mul276  ret <vscale x 8 x half> %res277}278 279define <vscale x 4 x half> @fmls_hx4(<vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {280; CHECK-LABEL: fmls_hx4:281; CHECK:       // %bb.0:282; CHECK-NEXT:    ptrue p0.s283; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h284; CHECK-NEXT:    ret285  %mul = fmul contract <vscale x 4 x half> %m1, %m2286  %res = fsub contract <vscale x 4 x half> %acc, %mul287  ret <vscale x 4 x half> %res288}289 290define <vscale x 2 x half> @fmls_hx2(<vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {291; CHECK-LABEL: fmls_hx2:292; CHECK:       // %bb.0:293; CHECK-NEXT:    ptrue p0.d294; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h295; CHECK-NEXT:    ret296  %mul = fmul contract <vscale x 2 x half> %m1, %m2297  %res = fsub contract <vscale x 2 x half> %acc, %mul298  ret <vscale x 2 x half> %res299}300 301define <vscale x 4 x float> @fmls_s(<vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {302; CHECK-LABEL: fmls_s:303; CHECK:       // %bb.0:304; CHECK-NEXT:    ptrue p0.s305; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s306; CHECK-NEXT:    ret307  %mul = fmul contract <vscale x 4 x float> %m1, %m2308  %res = fsub contract <vscale x 4 x float> %acc, %mul309  ret <vscale x 4 x float> %res310}311 312define <vscale x 2 x float> @fmls_sx2(<vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {313; CHECK-LABEL: fmls_sx2:314; CHECK:       // %bb.0:315; CHECK-NEXT:    ptrue p0.d316; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s317; CHECK-NEXT:    ret318  %mul = fmul contract <vscale x 2 x float> %m1, %m2319  %res = fsub contract <vscale x 2 x float> %acc, %mul320  ret <vscale x 2 x float> %res321}322 323define <vscale x 2 x double> @fmls_d(<vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {324; CHECK-LABEL: fmls_d:325; CHECK:       // %bb.0:326; CHECK-NEXT:    ptrue p0.d327; CHECK-NEXT:    fmls z0.d, p0/m, z1.d, z2.d328; CHECK-NEXT:    ret329  %mul = fmul contract <vscale x 2 x double> %m1, %m2330  %res = fsub contract <vscale x 2 x double> %acc, %mul331  ret <vscale x 2 x double> %res332}333 334define <vscale x 8 x half> @fmsb_h(<vscale x 8 x half> %m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc) {335; CHECK-LABEL: fmsb_h:336; CHECK:       // %bb.0:337; CHECK-NEXT:    ptrue p0.h338; CHECK-NEXT:    fmsb z0.h, p0/m, z1.h, z2.h339; CHECK-NEXT:    ret340  %mul = fmul contract <vscale x 8 x half> %m1, %m2341  %res = fsub contract <vscale x 8 x half> %acc, %mul342  ret <vscale x 8 x half> %res343}344 345define <vscale x 4 x half> @fmsb_hx4(<vscale x 4 x half> %m1, <vscale x 4 x half> %m2, <vscale x 4 x half> %acc) {346; CHECK-LABEL: fmsb_hx4:347; CHECK:       // %bb.0:348; CHECK-NEXT:    ptrue p0.s349; CHECK-NEXT:    fmsb z0.h, p0/m, z1.h, z2.h350; CHECK-NEXT:    ret351  %mul = fmul contract <vscale x 4 x half> %m1, %m2352  %res = fsub contract <vscale x 4 x half> %acc, %mul353  ret <vscale x 4 x half> %res354}355 356define <vscale x 2 x half> @fmsb_hx2(<vscale x 2 x half> %m1, <vscale x 2 x half> %m2, <vscale x 2 x half> %acc) {357; CHECK-LABEL: fmsb_hx2:358; CHECK:       // %bb.0:359; CHECK-NEXT:    ptrue p0.d360; CHECK-NEXT:    fmsb z0.h, p0/m, z1.h, z2.h361; CHECK-NEXT:    ret362  %mul = fmul contract <vscale x 2 x half> %m1, %m2363  %res = fsub contract <vscale x 2 x half> %acc, %mul364  ret <vscale x 2 x half> %res365}366 367define <vscale x 4 x float> @fmsb_s(<vscale x 4 x float> %m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc) {368; CHECK-LABEL: fmsb_s:369; CHECK:       // %bb.0:370; CHECK-NEXT:    ptrue p0.s371; CHECK-NEXT:    fmsb z0.s, p0/m, z1.s, z2.s372; CHECK-NEXT:    ret373  %mul = fmul contract <vscale x 4 x float> %m1, %m2374  %res = fsub contract <vscale x 4 x float> %acc, %mul375  ret <vscale x 4 x float> %res376}377 378define <vscale x 2 x float> @fmsb_sx2(<vscale x 2 x float> %m1, <vscale x 2 x float> %m2, <vscale x 2 x float> %acc) {379; CHECK-LABEL: fmsb_sx2:380; CHECK:       // %bb.0:381; CHECK-NEXT:    ptrue p0.d382; CHECK-NEXT:    fmsb z0.s, p0/m, z1.s, z2.s383; CHECK-NEXT:    ret384  %mul = fmul contract <vscale x 2 x float> %m1, %m2385  %res = fsub contract <vscale x 2 x float> %acc, %mul386  ret <vscale x 2 x float> %res387}388 389define <vscale x 2 x double> @fmsb_d(<vscale x 2 x double> %m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc) {390; CHECK-LABEL: fmsb_d:391; CHECK:       // %bb.0:392; CHECK-NEXT:    ptrue p0.d393; CHECK-NEXT:    fmsb z0.d, p0/m, z1.d, z2.d394; CHECK-NEXT:    ret395  %mul = fmul contract <vscale x 2 x double> %m1, %m2396  %res = fsub contract <vscale x 2 x double> %acc, %mul397  ret <vscale x 2 x double> %res398}399 400define <vscale x 8 x half> @fnmad_h(<vscale x 8 x half> %m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc) {401; CHECK-LABEL: fnmad_h:402; CHECK:       // %bb.0:403; CHECK-NEXT:    ptrue p0.h404; CHECK-NEXT:    fnmad z0.h, p0/m, z1.h, z2.h405; CHECK-NEXT:    ret406  %neg_m1 = fneg contract <vscale x 8 x half> %m1407  %mul = fmul contract <vscale x 8 x half> %neg_m1, %m2408  %res = fsub contract <vscale x 8 x half> %mul, %acc409  ret <vscale x 8 x half> %res410}411 412define <vscale x 4 x half> @fnmad_hx4(<vscale x 4 x half> %m1, <vscale x 4 x half> %m2, <vscale x 4 x half> %acc) {413; CHECK-LABEL: fnmad_hx4:414; CHECK:       // %bb.0:415; CHECK-NEXT:    ptrue p0.s416; CHECK-NEXT:    fnmad z0.h, p0/m, z1.h, z2.h417; CHECK-NEXT:    ret418  %neg_m1 = fneg contract <vscale x 4 x half> %m1419  %mul = fmul contract <vscale x 4 x half> %neg_m1, %m2420  %res = fsub contract <vscale x 4 x half> %mul, %acc421  ret <vscale x 4 x half> %res422}423 424define <vscale x 2 x half> @fnmad_hx2(<vscale x 2 x half> %m1, <vscale x 2 x half> %m2, <vscale x 2 x half> %acc) {425; CHECK-LABEL: fnmad_hx2:426; CHECK:       // %bb.0:427; CHECK-NEXT:    ptrue p0.d428; CHECK-NEXT:    fnmad z0.h, p0/m, z1.h, z2.h429; CHECK-NEXT:    ret430  %neg_m1 = fneg contract <vscale x 2 x half> %m1431  %mul = fmul contract <vscale x 2 x half> %neg_m1, %m2432  %res = fsub contract <vscale x 2 x half> %mul, %acc433  ret <vscale x 2 x half> %res434}435 436define <vscale x 4 x float> @fnmad_s(<vscale x 4 x float> %m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc) {437; CHECK-LABEL: fnmad_s:438; CHECK:       // %bb.0:439; CHECK-NEXT:    ptrue p0.s440; CHECK-NEXT:    fnmad z0.s, p0/m, z1.s, z2.s441; CHECK-NEXT:    ret442  %neg_m1 = fneg contract <vscale x 4 x float> %m1443  %mul = fmul contract <vscale x 4 x float> %neg_m1, %m2444  %res = fsub contract <vscale x 4 x float> %mul, %acc445  ret <vscale x 4 x float> %res446}447 448define <vscale x 2 x float> @fnmad_sx2(<vscale x 2 x float> %m1, <vscale x 2 x float> %m2, <vscale x 2 x float> %acc) {449; CHECK-LABEL: fnmad_sx2:450; CHECK:       // %bb.0:451; CHECK-NEXT:    ptrue p0.d452; CHECK-NEXT:    fnmad z0.s, p0/m, z1.s, z2.s453; CHECK-NEXT:    ret454  %neg_m1 = fneg contract <vscale x 2 x float> %m1455  %mul = fmul contract <vscale x 2 x float> %neg_m1, %m2456  %res = fsub contract <vscale x 2 x float> %mul, %acc457  ret <vscale x 2 x float> %res458}459 460define <vscale x 2 x double> @fnmad_d(<vscale x 2 x double> %m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc) {461; CHECK-LABEL: fnmad_d:462; CHECK:       // %bb.0:463; CHECK-NEXT:    ptrue p0.d464; CHECK-NEXT:    fnmad z0.d, p0/m, z1.d, z2.d465; CHECK-NEXT:    ret466  %neg_m1 = fneg contract <vscale x 2 x double> %m1467  %mul = fmul contract <vscale x 2 x double> %neg_m1, %m2468  %res = fsub contract <vscale x 2 x double> %mul, %acc469  ret <vscale x 2 x double> %res470}471 472define <vscale x 8 x half> @fnmla_h(<vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {473; CHECK-LABEL: fnmla_h:474; CHECK:       // %bb.0:475; CHECK-NEXT:    ptrue p0.h476; CHECK-NEXT:    fnmla z0.h, p0/m, z1.h, z2.h477; CHECK-NEXT:    ret478  %neg_m1 = fneg contract <vscale x 8 x half> %m1479  %mul = fmul contract <vscale x 8 x half> %neg_m1, %m2480  %res = fsub contract <vscale x 8 x half> %mul, %acc481  ret <vscale x 8 x half> %res482}483 484define <vscale x 4 x half> @fnmla_hx4(<vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {485; CHECK-LABEL: fnmla_hx4:486; CHECK:       // %bb.0:487; CHECK-NEXT:    ptrue p0.s488; CHECK-NEXT:    fnmla z0.h, p0/m, z1.h, z2.h489; CHECK-NEXT:    ret490  %neg_m1 = fneg contract <vscale x 4 x half> %m1491  %mul = fmul contract <vscale x 4 x half> %neg_m1, %m2492  %res = fsub contract <vscale x 4 x half> %mul, %acc493  ret <vscale x 4 x half> %res494}495 496define <vscale x 2 x half> @fnmla_hx2(<vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {497; CHECK-LABEL: fnmla_hx2:498; CHECK:       // %bb.0:499; CHECK-NEXT:    ptrue p0.d500; CHECK-NEXT:    fnmla z0.h, p0/m, z1.h, z2.h501; CHECK-NEXT:    ret502  %neg_m1 = fneg contract <vscale x 2 x half> %m1503  %mul = fmul contract <vscale x 2 x half> %neg_m1, %m2504  %res = fsub contract <vscale x 2 x half> %mul, %acc505  ret <vscale x 2 x half> %res506}507 508define <vscale x 4 x float> @fnmla_s(<vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {509; CHECK-LABEL: fnmla_s:510; CHECK:       // %bb.0:511; CHECK-NEXT:    ptrue p0.s512; CHECK-NEXT:    fnmla z0.s, p0/m, z1.s, z2.s513; CHECK-NEXT:    ret514  %neg_m1 = fneg contract <vscale x 4 x float> %m1515  %mul = fmul contract <vscale x 4 x float> %neg_m1, %m2516  %res = fsub contract <vscale x 4 x float> %mul, %acc517  ret <vscale x 4 x float> %res518}519 520define <vscale x 2 x float> @fnmla_sx2(<vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {521; CHECK-LABEL: fnmla_sx2:522; CHECK:       // %bb.0:523; CHECK-NEXT:    ptrue p0.d524; CHECK-NEXT:    fnmla z0.s, p0/m, z1.s, z2.s525; CHECK-NEXT:    ret526  %neg_m1 = fneg contract <vscale x 2 x float> %m1527  %mul = fmul contract <vscale x 2 x float> %neg_m1, %m2528  %res = fsub contract <vscale x 2 x float> %mul, %acc529  ret <vscale x 2 x float> %res530}531 532define <vscale x 2 x double> @fnmla_d(<vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {533; CHECK-LABEL: fnmla_d:534; CHECK:       // %bb.0:535; CHECK-NEXT:    ptrue p0.d536; CHECK-NEXT:    fnmla z0.d, p0/m, z1.d, z2.d537; CHECK-NEXT:    ret538  %neg_m1 = fneg contract <vscale x 2 x double> %m1539  %mul = fmul contract <vscale x 2 x double> %neg_m1, %m2540  %res = fsub contract <vscale x 2 x double> %mul, %acc541  ret <vscale x 2 x double> %res542}543 544define <vscale x 8 x half> @fnmla_h_reversed(<vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {545; CHECK-LABEL: fnmla_h_reversed:546; CHECK:       // %bb.0:547; CHECK-NEXT:    ptrue p0.h548; CHECK-NEXT:    fnmla z0.h, p0/m, z1.h, z2.h549; CHECK-NEXT:    ret550  %mul = fmul contract <vscale x 8 x half> %m1, %m2551  %add = fadd contract <vscale x 8 x half> %mul, %acc552  %res = fneg contract nsz <vscale x 8 x half> %add553  ret <vscale x 8 x half> %res554}555 556define <vscale x 4 x half> @fnmla_hx4_reversed(<vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {557; CHECK-LABEL: fnmla_hx4_reversed:558; CHECK:       // %bb.0:559; CHECK-NEXT:    ptrue p0.s560; CHECK-NEXT:    fnmla z0.h, p0/m, z1.h, z2.h561; CHECK-NEXT:    ret562  %mul = fmul contract <vscale x 4 x half> %m1, %m2563  %add = fadd contract <vscale x 4 x half> %mul, %acc564  %res = fneg contract nsz <vscale x 4 x half> %add565  ret <vscale x 4 x half> %res566}567 568define <vscale x 2 x half> @fnmla_hx2_reversed(<vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {569; CHECK-LABEL: fnmla_hx2_reversed:570; CHECK:       // %bb.0:571; CHECK-NEXT:    ptrue p0.d572; CHECK-NEXT:    fnmla z0.h, p0/m, z1.h, z2.h573; CHECK-NEXT:    ret574  %mul = fmul contract <vscale x 2 x half> %m1, %m2575  %add = fadd contract <vscale x 2 x half> %mul, %acc576  %res = fneg contract nsz <vscale x 2 x half> %add577  ret <vscale x 2 x half> %res578}579 580define <vscale x 4 x float> @fnmla_s_reversed(<vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {581; CHECK-LABEL: fnmla_s_reversed:582; CHECK:       // %bb.0:583; CHECK-NEXT:    ptrue p0.s584; CHECK-NEXT:    fnmla z0.s, p0/m, z1.s, z2.s585; CHECK-NEXT:    ret586  %mul = fmul contract <vscale x 4 x float> %m1, %m2587  %add = fadd contract <vscale x 4 x float> %mul, %acc588  %res = fneg contract nsz <vscale x 4 x float> %add589  ret <vscale x 4 x float> %res590}591 592define <vscale x 2 x float> @fnmla_sx2_reversed(<vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {593; CHECK-LABEL: fnmla_sx2_reversed:594; CHECK:       // %bb.0:595; CHECK-NEXT:    ptrue p0.d596; CHECK-NEXT:    fnmla z0.s, p0/m, z1.s, z2.s597; CHECK-NEXT:    ret598  %mul = fmul contract <vscale x 2 x float> %m1, %m2599  %add = fadd contract <vscale x 2 x float> %mul, %acc600  %res = fneg contract nsz <vscale x 2 x float> %add601  ret <vscale x 2 x float> %res602}603 604define <vscale x 2 x double> @fnmla_d_reversed(<vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {605; CHECK-LABEL: fnmla_d_reversed:606; CHECK:       // %bb.0:607; CHECK-NEXT:    ptrue p0.d608; CHECK-NEXT:    fnmla z0.d, p0/m, z1.d, z2.d609; CHECK-NEXT:    ret610  %mul = fmul contract <vscale x 2 x double> %m1, %m2611  %add = fadd contract <vscale x 2 x double> %mul, %acc612  %res = fneg contract nsz <vscale x 2 x double> %add613  ret <vscale x 2 x double> %res614}615 616define <vscale x 8 x half> @signed_zeros_negtest_fnmla_h_reversed(<vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {617; CHECK-LABEL: signed_zeros_negtest_fnmla_h_reversed:618; CHECK:       // %bb.0:619; CHECK-NEXT:    ptrue p0.h620; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h621; CHECK-NEXT:    fneg z0.h, p0/m, z0.h622; CHECK-NEXT:    ret623  %mul = fmul contract <vscale x 8 x half> %m1, %m2624  %add = fadd contract <vscale x 8 x half> %mul, %acc625  %res = fneg contract <vscale x 8 x half> %add626  ret <vscale x 8 x half> %res627}628 629define <vscale x 4 x half> @signed_zeros_negtest_fnmla_hx4_reversed(<vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {630; CHECK-LABEL: signed_zeros_negtest_fnmla_hx4_reversed:631; CHECK:       // %bb.0:632; CHECK-NEXT:    ptrue p0.s633; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h634; CHECK-NEXT:    fneg z0.h, p0/m, z0.h635; CHECK-NEXT:    ret636  %mul = fmul contract <vscale x 4 x half> %m1, %m2637  %add = fadd contract <vscale x 4 x half> %mul, %acc638  %res = fneg contract <vscale x 4 x half> %add639  ret <vscale x 4 x half> %res640}641 642define <vscale x 2 x half> @signed_zeros_negtest_fnmla_hx2_reversed(<vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {643; CHECK-LABEL: signed_zeros_negtest_fnmla_hx2_reversed:644; CHECK:       // %bb.0:645; CHECK-NEXT:    ptrue p0.d646; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h647; CHECK-NEXT:    fneg z0.h, p0/m, z0.h648; CHECK-NEXT:    ret649  %mul = fmul contract <vscale x 2 x half> %m1, %m2650  %add = fadd contract <vscale x 2 x half> %mul, %acc651  %res = fneg contract <vscale x 2 x half> %add652  ret <vscale x 2 x half> %res653}654 655define <vscale x 4 x float> @signed_zeros_negtest_fnmla_s_reversed(<vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {656; CHECK-LABEL: signed_zeros_negtest_fnmla_s_reversed:657; CHECK:       // %bb.0:658; CHECK-NEXT:    ptrue p0.s659; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s660; CHECK-NEXT:    fneg z0.s, p0/m, z0.s661; CHECK-NEXT:    ret662  %mul = fmul contract <vscale x 4 x float> %m1, %m2663  %add = fadd contract <vscale x 4 x float> %mul, %acc664  %res = fneg contract <vscale x 4 x float> %add665  ret <vscale x 4 x float> %res666}667 668define <vscale x 2 x float> @signed_zeros_negtest_fnmla_sx2_reversed(<vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {669; CHECK-LABEL: signed_zeros_negtest_fnmla_sx2_reversed:670; CHECK:       // %bb.0:671; CHECK-NEXT:    ptrue p0.d672; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s673; CHECK-NEXT:    fneg z0.s, p0/m, z0.s674; CHECK-NEXT:    ret675  %mul = fmul contract <vscale x 2 x float> %m1, %m2676  %add = fadd contract <vscale x 2 x float> %mul, %acc677  %res = fneg contract <vscale x 2 x float> %add678  ret <vscale x 2 x float> %res679}680 681define <vscale x 2 x double> @signed_zeros_negtest_fnmla_d_reversed(<vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {682; CHECK-LABEL: signed_zeros_negtest_fnmla_d_reversed:683; CHECK:       // %bb.0:684; CHECK-NEXT:    ptrue p0.d685; CHECK-NEXT:    fmla z0.d, p0/m, z1.d, z2.d686; CHECK-NEXT:    fneg z0.d, p0/m, z0.d687; CHECK-NEXT:    ret688  %mul = fmul contract <vscale x 2 x double> %m1, %m2689  %add = fadd contract <vscale x 2 x double> %mul, %acc690  %res = fneg contract <vscale x 2 x double> %add691  ret <vscale x 2 x double> %res692}693 694define <vscale x 8 x half> @fnmls_h(<vscale x 8 x half> %acc, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2) {695; CHECK-LABEL: fnmls_h:696; CHECK:       // %bb.0:697; CHECK-NEXT:    ptrue p0.h698; CHECK-NEXT:    fnmls z0.h, p0/m, z1.h, z2.h699; CHECK-NEXT:    ret700  %mul = fmul contract <vscale x 8 x half> %m1, %m2701  %res = fsub contract <vscale x 8 x half> %mul, %acc702  ret <vscale x 8 x half> %res703}704 705define <vscale x 4 x half> @fnmls_hx4(<vscale x 4 x half> %acc, <vscale x 4 x half> %m1, <vscale x 4 x half> %m2) {706; CHECK-LABEL: fnmls_hx4:707; CHECK:       // %bb.0:708; CHECK-NEXT:    ptrue p0.s709; CHECK-NEXT:    fnmls z0.h, p0/m, z1.h, z2.h710; CHECK-NEXT:    ret711  %mul = fmul contract <vscale x 4 x half> %m1, %m2712  %res = fsub contract <vscale x 4 x half> %mul, %acc713  ret <vscale x 4 x half> %res714}715 716define <vscale x 2 x half> @fnmls_hx2(<vscale x 2 x half> %acc, <vscale x 2 x half> %m1, <vscale x 2 x half> %m2) {717; CHECK-LABEL: fnmls_hx2:718; CHECK:       // %bb.0:719; CHECK-NEXT:    ptrue p0.d720; CHECK-NEXT:    fnmls z0.h, p0/m, z1.h, z2.h721; CHECK-NEXT:    ret722  %mul = fmul contract <vscale x 2 x half> %m1, %m2723  %res = fsub contract <vscale x 2 x half> %mul, %acc724  ret <vscale x 2 x half> %res725}726 727define <vscale x 4 x float> @fnmls_s(<vscale x 4 x float> %acc, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2) {728; CHECK-LABEL: fnmls_s:729; CHECK:       // %bb.0:730; CHECK-NEXT:    ptrue p0.s731; CHECK-NEXT:    fnmls z0.s, p0/m, z1.s, z2.s732; CHECK-NEXT:    ret733  %mul = fmul contract <vscale x 4 x float> %m1, %m2734  %res = fsub contract <vscale x 4 x float> %mul, %acc735  ret <vscale x 4 x float> %res736}737 738define <vscale x 2 x float> @fnmls_sx2(<vscale x 2 x float> %acc, <vscale x 2 x float> %m1, <vscale x 2 x float> %m2) {739; CHECK-LABEL: fnmls_sx2:740; CHECK:       // %bb.0:741; CHECK-NEXT:    ptrue p0.d742; CHECK-NEXT:    fnmls z0.s, p0/m, z1.s, z2.s743; CHECK-NEXT:    ret744  %mul = fmul contract <vscale x 2 x float> %m1, %m2745  %res = fsub contract <vscale x 2 x float> %mul, %acc746  ret <vscale x 2 x float> %res747}748 749define <vscale x 2 x double> @fnmls_d(<vscale x 2 x double> %acc, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2) {750; CHECK-LABEL: fnmls_d:751; CHECK:       // %bb.0:752; CHECK-NEXT:    ptrue p0.d753; CHECK-NEXT:    fnmls z0.d, p0/m, z1.d, z2.d754; CHECK-NEXT:    ret755  %mul = fmul contract <vscale x 2 x double> %m1, %m2756  %res = fsub contract <vscale x 2 x double> %mul, %acc757  ret <vscale x 2 x double> %res758}759 760define <vscale x 8 x half> @fnmsb_h(<vscale x 8 x half> %m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc) {761; CHECK-LABEL: fnmsb_h:762; CHECK:       // %bb.0:763; CHECK-NEXT:    ptrue p0.h764; CHECK-NEXT:    fnmsb z0.h, p0/m, z1.h, z2.h765; CHECK-NEXT:    ret766  %mul = fmul contract <vscale x 8 x half> %m1, %m2767  %res = fsub contract <vscale x 8 x half> %mul, %acc768  ret <vscale x 8 x half> %res769}770 771define <vscale x 4 x half> @fnmsb_hx4(<vscale x 4 x half> %m1, <vscale x 4 x half> %m2, <vscale x 4 x half> %acc) {772; CHECK-LABEL: fnmsb_hx4:773; CHECK:       // %bb.0:774; CHECK-NEXT:    ptrue p0.s775; CHECK-NEXT:    fnmsb z0.h, p0/m, z1.h, z2.h776; CHECK-NEXT:    ret777  %mul = fmul contract <vscale x 4 x half> %m1, %m2778  %res = fsub contract <vscale x 4 x half> %mul, %acc779  ret <vscale x 4 x half> %res780}781 782define <vscale x 2 x half> @fnmsb_hx2(<vscale x 2 x half> %m1, <vscale x 2 x half> %m2, <vscale x 2 x half> %acc) {783; CHECK-LABEL: fnmsb_hx2:784; CHECK:       // %bb.0:785; CHECK-NEXT:    ptrue p0.d786; CHECK-NEXT:    fnmsb z0.h, p0/m, z1.h, z2.h787; CHECK-NEXT:    ret788  %mul = fmul contract <vscale x 2 x half> %m1, %m2789  %res = fsub contract <vscale x 2 x half> %mul, %acc790  ret <vscale x 2 x half> %res791}792 793define <vscale x 4 x float> @fnmsb_s(<vscale x 4 x float> %m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc) {794; CHECK-LABEL: fnmsb_s:795; CHECK:       // %bb.0:796; CHECK-NEXT:    ptrue p0.s797; CHECK-NEXT:    fnmsb z0.s, p0/m, z1.s, z2.s798; CHECK-NEXT:    ret799  %mul = fmul contract <vscale x 4 x float> %m1, %m2800  %res = fsub contract <vscale x 4 x float> %mul, %acc801  ret <vscale x 4 x float> %res802}803 804define <vscale x 2 x float> @fnmsb_sx2(<vscale x 2 x float> %m1, <vscale x 2 x float> %m2, <vscale x 2 x float> %acc) {805; CHECK-LABEL: fnmsb_sx2:806; CHECK:       // %bb.0:807; CHECK-NEXT:    ptrue p0.d808; CHECK-NEXT:    fnmsb z0.s, p0/m, z1.s, z2.s809; CHECK-NEXT:    ret810  %mul = fmul contract <vscale x 2 x float> %m1, %m2811  %res = fsub contract <vscale x 2 x float> %mul, %acc812  ret <vscale x 2 x float> %res813}814 815define <vscale x 2 x double> @fnmsb_d(<vscale x 2 x double> %m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc) {816; CHECK-LABEL: fnmsb_d:817; CHECK:       // %bb.0:818; CHECK-NEXT:    ptrue p0.d819; CHECK-NEXT:    fnmsb z0.d, p0/m, z1.d, z2.d820; CHECK-NEXT:    ret821  %mul = fmul contract <vscale x 2 x double> %m1, %m2822  %res = fsub contract <vscale x 2 x double> %mul, %acc823  ret <vscale x 2 x double> %res824}825 826 827define <vscale x 8 x half> @fadd_h_sel(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x i1> %mask) {828; CHECK-LABEL: fadd_h_sel:829; CHECK:       // %bb.0:830; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, z1.h831; CHECK-NEXT:    ret832  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %b, <vscale x 8 x half> zeroinitializer833  %fadd = fadd nsz <vscale x 8 x half> %a, %sel834  ret <vscale x 8 x half> %fadd835}836 837define <vscale x 4 x float> @fadd_s_sel(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x i1> %mask) {838; CHECK-LABEL: fadd_s_sel:839; CHECK:       // %bb.0:840; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, z1.s841; CHECK-NEXT:    ret842  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %b, <vscale x 4 x float> zeroinitializer843  %fadd = fadd nsz <vscale x 4 x float> %a, %sel844  ret <vscale x 4 x float> %fadd845}846 847define <vscale x 2 x double> @fadd_d_sel(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x i1> %mask) {848; CHECK-LABEL: fadd_d_sel:849; CHECK:       // %bb.0:850; CHECK-NEXT:    fadd z0.d, p0/m, z0.d, z1.d851; CHECK-NEXT:    ret852  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %b, <vscale x 2 x double> zeroinitializer853  %fadd = fadd nsz <vscale x 2 x double> %a, %sel854  ret <vscale x 2 x double> %fadd855}856 857define <vscale x 8 x half> @fsub_h_sel(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x i1> %mask) {858; CHECK-LABEL: fsub_h_sel:859; CHECK:       // %bb.0:860; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, z1.h861; CHECK-NEXT:    ret862  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %b, <vscale x 8 x half> zeroinitializer863  %fsub = fsub <vscale x 8 x half> %a, %sel864  ret <vscale x 8 x half> %fsub865}866 867define <vscale x 4 x float> @fsub_s_sel(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x i1> %mask) {868; CHECK-LABEL: fsub_s_sel:869; CHECK:       // %bb.0:870; CHECK-NEXT:    fsub z0.s, p0/m, z0.s, z1.s871; CHECK-NEXT:    ret872  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %b, <vscale x 4 x float> zeroinitializer873  %fsub = fsub <vscale x 4 x float> %a, %sel874  ret <vscale x 4 x float> %fsub875}876 877define <vscale x 2 x double> @fsub_d_sel(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x i1> %mask) {878; CHECK-LABEL: fsub_d_sel:879; CHECK:       // %bb.0:880; CHECK-NEXT:    fsub z0.d, p0/m, z0.d, z1.d881; CHECK-NEXT:    ret882  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %b, <vscale x 2 x double> zeroinitializer883  %fsub = fsub <vscale x 2 x double> %a, %sel884  ret <vscale x 2 x double> %fsub885}886 887 888 889define <vscale x 8 x half> @fadd_h_sel_negzero(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x i1> %mask) {890; CHECK-LABEL: fadd_h_sel_negzero:891; CHECK:       // %bb.0:892; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, z1.h893; CHECK-NEXT:    ret894  %nz = fneg <vscale x 8 x half> zeroinitializer895  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %b, <vscale x 8 x half> %nz896  %fadd = fadd <vscale x 8 x half> %a, %sel897  ret <vscale x 8 x half> %fadd898}899 900define <vscale x 4 x float> @fadd_s_sel_negzero(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x i1> %mask) {901; CHECK-LABEL: fadd_s_sel_negzero:902; CHECK:       // %bb.0:903; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, z1.s904; CHECK-NEXT:    ret905  %nz = fneg <vscale x 4 x float> zeroinitializer906  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %b, <vscale x 4 x float> %nz907  %fadd = fadd <vscale x 4 x float> %a, %sel908  ret <vscale x 4 x float> %fadd909}910 911define <vscale x 2 x double> @fadd_d_sel_negzero(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x i1> %mask) {912; CHECK-LABEL: fadd_d_sel_negzero:913; CHECK:       // %bb.0:914; CHECK-NEXT:    fadd z0.d, p0/m, z0.d, z1.d915; CHECK-NEXT:    ret916  %nz = fneg <vscale x 2 x double> zeroinitializer917  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %b, <vscale x 2 x double> %nz918  %fadd = fadd <vscale x 2 x double> %a, %sel919  ret <vscale x 2 x double> %fadd920}921 922define <vscale x 8 x half> @fsub_h_sel_negzero(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x i1> %mask) {923; CHECK-LABEL: fsub_h_sel_negzero:924; CHECK:       // %bb.0:925; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, z1.h926; CHECK-NEXT:    ret927  %nz = fneg <vscale x 8 x half> zeroinitializer928  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %b, <vscale x 8 x half> %nz929  %fsub = fsub nsz <vscale x 8 x half> %a, %sel930  ret <vscale x 8 x half> %fsub931}932 933define <vscale x 4 x float> @fsub_s_sel_negzero(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x i1> %mask) {934; CHECK-LABEL: fsub_s_sel_negzero:935; CHECK:       // %bb.0:936; CHECK-NEXT:    fsub z0.s, p0/m, z0.s, z1.s937; CHECK-NEXT:    ret938  %nz = fneg <vscale x 4 x float> zeroinitializer939  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %b, <vscale x 4 x float> %nz940  %fsub = fsub nsz <vscale x 4 x float> %a, %sel941  ret <vscale x 4 x float> %fsub942}943 944define <vscale x 2 x double> @fsub_d_sel_negzero(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x i1> %mask) {945; CHECK-LABEL: fsub_d_sel_negzero:946; CHECK:       // %bb.0:947; CHECK-NEXT:    fsub z0.d, p0/m, z0.d, z1.d948; CHECK-NEXT:    ret949  %nz = fneg <vscale x 2 x double> zeroinitializer950  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %b, <vscale x 2 x double> %nz951  %fsub = fsub nsz <vscale x 2 x double> %a, %sel952  ret <vscale x 2 x double> %fsub953}954 955 956define <vscale x 8 x half> @fadd_sel_fmul_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {957; CHECK-LABEL: fadd_sel_fmul_h:958; CHECK:       // %bb.0:959; CHECK-NEXT:    movi v3.2d, #0000000000000000960; CHECK-NEXT:    fmul z1.h, z1.h, z2.h961; CHECK-NEXT:    sel z1.h, p0, z1.h, z3.h962; CHECK-NEXT:    fadd z0.h, z0.h, z1.h963; CHECK-NEXT:    ret964  %fmul = fmul <vscale x 8 x half> %b, %c965  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> zeroinitializer966  %fadd = fadd contract <vscale x 8 x half> %a, %sel967  ret <vscale x 8 x half> %fadd968}969 970define <vscale x 4 x float> @fadd_sel_fmul_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {971; CHECK-LABEL: fadd_sel_fmul_s:972; CHECK:       // %bb.0:973; CHECK-NEXT:    movi v3.2d, #0000000000000000974; CHECK-NEXT:    fmul z1.s, z1.s, z2.s975; CHECK-NEXT:    sel z1.s, p0, z1.s, z3.s976; CHECK-NEXT:    fadd z0.s, z0.s, z1.s977; CHECK-NEXT:    ret978  %fmul = fmul <vscale x 4 x float> %b, %c979  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> zeroinitializer980  %fadd = fadd contract <vscale x 4 x float> %a, %sel981  ret <vscale x 4 x float> %fadd982}983 984define <vscale x 2 x double> @fadd_sel_fmul_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {985; CHECK-LABEL: fadd_sel_fmul_d:986; CHECK:       // %bb.0:987; CHECK-NEXT:    movi v3.2d, #0000000000000000988; CHECK-NEXT:    fmul z1.d, z1.d, z2.d989; CHECK-NEXT:    sel z1.d, p0, z1.d, z3.d990; CHECK-NEXT:    fadd z0.d, z0.d, z1.d991; CHECK-NEXT:    ret992  %fmul = fmul <vscale x 2 x double> %b, %c993  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> zeroinitializer994  %fadd = fadd contract <vscale x 2 x double> %a, %sel995  ret <vscale x 2 x double> %fadd996}997 998define <vscale x 8 x half> @fsub_sel_fmul_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {999; CHECK-LABEL: fsub_sel_fmul_h:1000; CHECK:       // %bb.0:1001; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h1002; CHECK-NEXT:    ret1003  %fmul = fmul <vscale x 8 x half> %b, %c1004  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> zeroinitializer1005  %fsub = fsub contract <vscale x 8 x half> %a, %sel1006  ret <vscale x 8 x half> %fsub1007}1008 1009define <vscale x 4 x float> @fsub_sel_fmul_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1010; CHECK-LABEL: fsub_sel_fmul_s:1011; CHECK:       // %bb.0:1012; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s1013; CHECK-NEXT:    ret1014  %fmul = fmul <vscale x 4 x float> %b, %c1015  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> zeroinitializer1016  %fsub = fsub contract <vscale x 4 x float> %a, %sel1017  ret <vscale x 4 x float> %fsub1018}1019 1020define <vscale x 2 x double> @fsub_sel_fmul_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {1021; CHECK-LABEL: fsub_sel_fmul_d:1022; CHECK:       // %bb.0:1023; CHECK-NEXT:    fmls z0.d, p0/m, z1.d, z2.d1024; CHECK-NEXT:    ret1025  %fmul = fmul <vscale x 2 x double> %b, %c1026  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> zeroinitializer1027  %fsub = fsub contract <vscale x 2 x double> %a, %sel1028  ret <vscale x 2 x double> %fsub1029}1030 1031define <vscale x 8 x half> @fadd_sel_fmul_h_nsz(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {1032; CHECK-LABEL: fadd_sel_fmul_h_nsz:1033; CHECK:       // %bb.0:1034; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h1035; CHECK-NEXT:    ret1036  %fmul = fmul <vscale x 8 x half> %b, %c1037  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> zeroinitializer1038  %fadd = fadd nsz contract <vscale x 8 x half> %a, %sel1039  ret <vscale x 8 x half> %fadd1040}1041 1042define <vscale x 4 x float> @fadd_sel_fmul_s_nsz(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1043; CHECK-LABEL: fadd_sel_fmul_s_nsz:1044; CHECK:       // %bb.0:1045; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s1046; CHECK-NEXT:    ret1047  %fmul = fmul <vscale x 4 x float> %b, %c1048  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> zeroinitializer1049  %fadd = fadd nsz contract <vscale x 4 x float> %a, %sel1050  ret <vscale x 4 x float> %fadd1051}1052 1053define <vscale x 2 x double> @fadd_sel_fmul_d_nsz(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {1054; CHECK-LABEL: fadd_sel_fmul_d_nsz:1055; CHECK:       // %bb.0:1056; CHECK-NEXT:    fmla z0.d, p0/m, z1.d, z2.d1057; CHECK-NEXT:    ret1058  %fmul = fmul <vscale x 2 x double> %b, %c1059  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> zeroinitializer1060  %fadd = fadd nsz contract <vscale x 2 x double> %a, %sel1061  ret <vscale x 2 x double> %fadd1062}1063 1064define <vscale x 8 x half> @fsub_sel_fmul_h_nsz(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {1065; CHECK-LABEL: fsub_sel_fmul_h_nsz:1066; CHECK:       // %bb.0:1067; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h1068; CHECK-NEXT:    ret1069  %fmul = fmul <vscale x 8 x half> %b, %c1070  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> zeroinitializer1071  %fsub = fsub nsz contract <vscale x 8 x half> %a, %sel1072  ret <vscale x 8 x half> %fsub1073}1074 1075define <vscale x 4 x float> @fsub_sel_fmul_s_nsz(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1076; CHECK-LABEL: fsub_sel_fmul_s_nsz:1077; CHECK:       // %bb.0:1078; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s1079; CHECK-NEXT:    ret1080  %fmul = fmul <vscale x 4 x float> %b, %c1081  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> zeroinitializer1082  %fsub = fsub nsz contract <vscale x 4 x float> %a, %sel1083  ret <vscale x 4 x float> %fsub1084}1085 1086define <vscale x 2 x double> @fsub_sel_fmul_d_nsz(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {1087; CHECK-LABEL: fsub_sel_fmul_d_nsz:1088; CHECK:       // %bb.0:1089; CHECK-NEXT:    fmls z0.d, p0/m, z1.d, z2.d1090; CHECK-NEXT:    ret1091  %fmul = fmul <vscale x 2 x double> %b, %c1092  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> zeroinitializer1093  %fsub = fsub nsz contract <vscale x 2 x double> %a, %sel1094  ret <vscale x 2 x double> %fsub1095}1096 1097 1098define <vscale x 8 x half> @fadd_sel_fmul_h_negzero(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {1099; CHECK-LABEL: fadd_sel_fmul_h_negzero:1100; CHECK:       // %bb.0:1101; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h1102; CHECK-NEXT:    ret1103  %fmul = fmul <vscale x 8 x half> %b, %c1104  %nz = fneg <vscale x 8 x half> zeroinitializer1105  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> %nz1106  %fadd = fadd contract <vscale x 8 x half> %a, %sel1107  ret <vscale x 8 x half> %fadd1108}1109 1110define <vscale x 4 x float> @fadd_sel_fmul_s_negzero(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1111; CHECK-LABEL: fadd_sel_fmul_s_negzero:1112; CHECK:       // %bb.0:1113; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s1114; CHECK-NEXT:    ret1115  %fmul = fmul <vscale x 4 x float> %b, %c1116  %nz = fneg <vscale x 4 x float> zeroinitializer1117  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> %nz1118  %fadd = fadd contract <vscale x 4 x float> %a, %sel1119  ret <vscale x 4 x float> %fadd1120}1121 1122define <vscale x 2 x double> @fadd_sel_fmul_d_negzero(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {1123; CHECK-LABEL: fadd_sel_fmul_d_negzero:1124; CHECK:       // %bb.0:1125; CHECK-NEXT:    fmla z0.d, p0/m, z1.d, z2.d1126; CHECK-NEXT:    ret1127  %fmul = fmul <vscale x 2 x double> %b, %c1128  %nz = fneg <vscale x 2 x double> zeroinitializer1129  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> %nz1130  %fadd = fadd contract <vscale x 2 x double> %a, %sel1131  ret <vscale x 2 x double> %fadd1132}1133 1134define <vscale x 8 x half> @fsub_sel_fmul_h_negzero(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {1135; CHECK-LABEL: fsub_sel_fmul_h_negzero:1136; CHECK:       // %bb.0:1137; CHECK-NEXT:    dupm z3.h, #0x80001138; CHECK-NEXT:    fmul z1.h, z1.h, z2.h1139; CHECK-NEXT:    sel z1.h, p0, z1.h, z3.h1140; CHECK-NEXT:    fsub z0.h, z0.h, z1.h1141; CHECK-NEXT:    ret1142  %fmul = fmul <vscale x 8 x half> %b, %c1143  %nz = fneg <vscale x 8 x half> zeroinitializer1144  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> %nz1145  %fsub = fsub contract <vscale x 8 x half> %a, %sel1146  ret <vscale x 8 x half> %fsub1147}1148 1149define <vscale x 4 x float> @fsub_sel_fmul_s_negzero(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1150; CHECK-LABEL: fsub_sel_fmul_s_negzero:1151; CHECK:       // %bb.0:1152; CHECK-NEXT:    mov z3.s, #0x800000001153; CHECK-NEXT:    fmul z1.s, z1.s, z2.s1154; CHECK-NEXT:    sel z1.s, p0, z1.s, z3.s1155; CHECK-NEXT:    fsub z0.s, z0.s, z1.s1156; CHECK-NEXT:    ret1157  %fmul = fmul <vscale x 4 x float> %b, %c1158  %nz = fneg <vscale x 4 x float> zeroinitializer1159  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> %nz1160  %fsub = fsub contract <vscale x 4 x float> %a, %sel1161  ret <vscale x 4 x float> %fsub1162}1163 1164define <vscale x 2 x double> @fsub_sel_fmul_d_negzero(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {1165; CHECK-LABEL: fsub_sel_fmul_d_negzero:1166; CHECK:       // %bb.0:1167; CHECK-NEXT:    mov z3.d, #0x80000000000000001168; CHECK-NEXT:    fmul z1.d, z1.d, z2.d1169; CHECK-NEXT:    sel z1.d, p0, z1.d, z3.d1170; CHECK-NEXT:    fsub z0.d, z0.d, z1.d1171; CHECK-NEXT:    ret1172  %fmul = fmul <vscale x 2 x double> %b, %c1173  %nz = fneg <vscale x 2 x double> zeroinitializer1174  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> %nz1175  %fsub = fsub contract <vscale x 2 x double> %a, %sel1176  ret <vscale x 2 x double> %fsub1177}1178 1179 1180 1181define <vscale x 8 x half> @fadd_sel_fmul_h_negzero_nsz(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {1182; CHECK-LABEL: fadd_sel_fmul_h_negzero_nsz:1183; CHECK:       // %bb.0:1184; CHECK-NEXT:    fmla z0.h, p0/m, z1.h, z2.h1185; CHECK-NEXT:    ret1186  %fmul = fmul <vscale x 8 x half> %b, %c1187  %nz = fneg <vscale x 8 x half> zeroinitializer1188  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> %nz1189  %fadd = fadd nsz contract <vscale x 8 x half> %a, %sel1190  ret <vscale x 8 x half> %fadd1191}1192 1193define <vscale x 4 x float> @fadd_sel_fmul_s_negzero_nsz(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1194; CHECK-LABEL: fadd_sel_fmul_s_negzero_nsz:1195; CHECK:       // %bb.0:1196; CHECK-NEXT:    fmla z0.s, p0/m, z1.s, z2.s1197; CHECK-NEXT:    ret1198  %fmul = fmul <vscale x 4 x float> %b, %c1199  %nz = fneg <vscale x 4 x float> zeroinitializer1200  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> %nz1201  %fadd = fadd nsz contract <vscale x 4 x float> %a, %sel1202  ret <vscale x 4 x float> %fadd1203}1204 1205define <vscale x 2 x double> @fadd_sel_fmul_d_negzero_nsz(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {1206; CHECK-LABEL: fadd_sel_fmul_d_negzero_nsz:1207; CHECK:       // %bb.0:1208; CHECK-NEXT:    fmla z0.d, p0/m, z1.d, z2.d1209; CHECK-NEXT:    ret1210  %fmul = fmul <vscale x 2 x double> %b, %c1211  %nz = fneg <vscale x 2 x double> zeroinitializer1212  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> %nz1213  %fadd = fadd nsz contract <vscale x 2 x double> %a, %sel1214  ret <vscale x 2 x double> %fadd1215}1216 1217define <vscale x 8 x half> @fsub_sel_fmul_h_negzero_nsz(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %mask) {1218; CHECK-LABEL: fsub_sel_fmul_h_negzero_nsz:1219; CHECK:       // %bb.0:1220; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h1221; CHECK-NEXT:    ret1222  %fmul = fmul <vscale x 8 x half> %b, %c1223  %nz = fneg <vscale x 8 x half> zeroinitializer1224  %sel = select <vscale x 8 x i1> %mask, <vscale x 8 x half> %fmul, <vscale x 8 x half> %nz1225  %fsub = fsub nsz contract <vscale x 8 x half> %a, %sel1226  ret <vscale x 8 x half> %fsub1227}1228 1229define <vscale x 4 x float> @fsub_sel_fmul_s_negzero_nsz(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1230; CHECK-LABEL: fsub_sel_fmul_s_negzero_nsz:1231; CHECK:       // %bb.0:1232; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s1233; CHECK-NEXT:    ret1234  %fmul = fmul <vscale x 4 x float> %b, %c1235  %nz = fneg <vscale x 4 x float> zeroinitializer1236  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> %nz1237  %fsub = fsub nsz contract <vscale x 4 x float> %a, %sel1238  ret <vscale x 4 x float> %fsub1239}1240 1241define <vscale x 2 x double> @fsub_sel_fmul_d_negzero_nsz(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %mask) {1242; CHECK-LABEL: fsub_sel_fmul_d_negzero_nsz:1243; CHECK:       // %bb.0:1244; CHECK-NEXT:    fmls z0.d, p0/m, z1.d, z2.d1245; CHECK-NEXT:    ret1246  %fmul = fmul <vscale x 2 x double> %b, %c1247  %nz = fneg <vscale x 2 x double> zeroinitializer1248  %sel = select <vscale x 2 x i1> %mask, <vscale x 2 x double> %fmul, <vscale x 2 x double> %nz1249  %fsub = fsub nsz contract <vscale x 2 x double> %a, %sel1250  ret <vscale x 2 x double> %fsub1251}1252 1253 1254 1255; Verify combine requires contract fast-math flag.1256define <vscale x 4 x float> @fadd_sel_fmul_no_contract_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %mask) {1257; CHECK-LABEL: fadd_sel_fmul_no_contract_s:1258; CHECK:       // %bb.0:1259; CHECK-NEXT:    fmul z1.s, z1.s, z2.s1260; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, z1.s1261; CHECK-NEXT:    ret1262  %fmul = fmul <vscale x 4 x float> %b, %c1263  %sel = select <vscale x 4 x i1> %mask, <vscale x 4 x float> %fmul, <vscale x 4 x float> zeroinitializer1264  %fadd = fadd nsz <vscale x 4 x float> %a, %sel1265  ret <vscale x 4 x float> %fadd1266}1267 1268define <vscale x 8 x half> @fma_sel_h_different_arg_order(<vscale x 8 x i1> %pred, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc) {1269; CHECK-LABEL: fma_sel_h_different_arg_order:1270; CHECK:       // %bb.0:1271; CHECK-NEXT:    fmla z2.h, p0/m, z0.h, z1.h1272; CHECK-NEXT:    mov z0.d, z2.d1273; CHECK-NEXT:    ret1274  %mul.add = call <vscale x 8 x half> @llvm.fma.nxv8f16(<vscale x 8 x half> %m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc)1275  %masked.mul.add = select <vscale x 8 x i1> %pred, <vscale x 8 x half> %mul.add, <vscale x 8 x half> %acc1276  ret <vscale x 8 x half> %masked.mul.add1277}1278 1279define <vscale x 4 x float> @fma_sel_s_different_arg_order(<vscale x 4 x i1> %pred, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc) {1280; CHECK-LABEL: fma_sel_s_different_arg_order:1281; CHECK:       // %bb.0:1282; CHECK-NEXT:    fmla z2.s, p0/m, z0.s, z1.s1283; CHECK-NEXT:    mov z0.d, z2.d1284; CHECK-NEXT:    ret1285  %mul.add = call <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float> %m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc)1286  %masked.mul.add = select <vscale x 4 x i1> %pred, <vscale x 4 x float> %mul.add, <vscale x 4 x float> %acc1287  ret <vscale x 4 x float> %masked.mul.add1288}1289 1290define <vscale x 2 x double> @fma_sel_d_different_arg_order(<vscale x 2 x i1> %pred, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc) {1291; CHECK-LABEL: fma_sel_d_different_arg_order:1292; CHECK:       // %bb.0:1293; CHECK-NEXT:    fmla z2.d, p0/m, z0.d, z1.d1294; CHECK-NEXT:    mov z0.d, z2.d1295; CHECK-NEXT:    ret1296  %mul.add = call <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double> %m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc)1297  %masked.mul.add = select <vscale x 2 x i1> %pred, <vscale x 2 x double> %mul.add, <vscale x 2 x double> %acc1298  ret <vscale x 2 x double> %masked.mul.add1299}1300 1301define <vscale x 8 x half> @fnma_sel_h_different_arg_order(<vscale x 8 x i1> %pred, <vscale x 8 x half> %m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc) {1302; CHECK-LABEL: fnma_sel_h_different_arg_order:1303; CHECK:       // %bb.0:1304; CHECK-NEXT:    fmls z2.h, p0/m, z0.h, z1.h1305; CHECK-NEXT:    mov z0.d, z2.d1306; CHECK-NEXT:    ret1307  %neg_m1 = fneg contract <vscale x 8 x half> %m11308  %mul.add = call <vscale x 8 x half> @llvm.fma.nxv8f16(<vscale x 8 x half> %neg_m1, <vscale x 8 x half> %m2, <vscale x 8 x half> %acc)1309  %masked.mul.add = select <vscale x 8 x i1> %pred, <vscale x 8 x half> %mul.add, <vscale x 8 x half> %acc1310  ret <vscale x 8 x half> %masked.mul.add1311}1312 1313define <vscale x 4 x float> @fnma_sel_s_different_arg_order(<vscale x 4 x i1> %pred, <vscale x 4 x float> %m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc) {1314; CHECK-LABEL: fnma_sel_s_different_arg_order:1315; CHECK:       // %bb.0:1316; CHECK-NEXT:    fmls z2.s, p0/m, z0.s, z1.s1317; CHECK-NEXT:    mov z0.d, z2.d1318; CHECK-NEXT:    ret1319  %neg_m1 = fneg contract <vscale x 4 x float> %m11320  %mul.add = call <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float> %neg_m1, <vscale x 4 x float> %m2, <vscale x 4 x float> %acc)1321  %masked.mul.add = select <vscale x 4 x i1> %pred, <vscale x 4 x float> %mul.add, <vscale x 4 x float> %acc1322  ret <vscale x 4 x float> %masked.mul.add1323}1324 1325define <vscale x 2 x double> @fnma_sel_d_different_arg_order(<vscale x 2 x i1> %pred, <vscale x 2 x double> %m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc) {1326; CHECK-LABEL: fnma_sel_d_different_arg_order:1327; CHECK:       // %bb.0:1328; CHECK-NEXT:    fmls z2.d, p0/m, z0.d, z1.d1329; CHECK-NEXT:    mov z0.d, z2.d1330; CHECK-NEXT:    ret1331  %neg_m1 = fneg contract <vscale x 2 x double> %m11332  %mul.add = call <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double> %neg_m1, <vscale x 2 x double> %m2, <vscale x 2 x double> %acc)1333  %masked.mul.add = select <vscale x 2 x i1> %pred, <vscale x 2 x double> %mul.add, <vscale x 2 x double> %acc1334  ret <vscale x 2 x double> %masked.mul.add1335}1336 1337declare <vscale x 8 x half> @llvm.fma.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)1338declare <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)1339declare <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)1340