brintos

brintos / llvm-project-archived public Read only

0
0
Text · 70.5 KiB · 87cce80 Raw
1584 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s3 4define void @vaddq(ptr %x, ptr %y, i32 %n, i32 %z) {5; CHECK-LABEL: vaddq:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    .save {r7, lr}8; CHECK-NEXT:    push {r7, lr}9; CHECK-NEXT:    cmp r2, #110; CHECK-NEXT:    it lt11; CHECK-NEXT:    poplt {r7, pc}12; CHECK-NEXT:  .LBB0_1: @ %for.body.preheader13; CHECK-NEXT:    dlstp.32 lr, r214; CHECK-NEXT:  .LBB0_2: @ %for.body15; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=116; CHECK-NEXT:    vldrw.u32 q0, [r0], #1617; CHECK-NEXT:    vadd.i32 q0, q0, r318; CHECK-NEXT:    vstrw.32 q0, [r1], #1619; CHECK-NEXT:    letp lr, .LBB0_220; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup21; CHECK-NEXT:    pop {r7, pc}22entry:23  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 024  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer25  %cmp11 = icmp sgt i32 %n, 026  br i1 %cmp11, label %for.body, label %for.cond.cleanup27 28for.cond.cleanup:                                 ; preds = %for.body, %entry29  ret void30 31for.body:                                         ; preds = %entry, %for.body32  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]33  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]34  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]35  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)36  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)37  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 438  %2 = add <4 x i32> %1, %.splat39  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)40  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 441  %sub = add nsw i32 %i.012, -442  %cmp = icmp sgt i32 %i.012, 443  br i1 %cmp, label %for.body, label %for.cond.cleanup44}45 46define void @vadd(ptr %s1, i32 %c0, i32 %N) {47; CHECK-LABEL: vadd:48; CHECK:       @ %bb.0: @ %entry49; CHECK-NEXT:    .save {r7, lr}50; CHECK-NEXT:    push {r7, lr}51; CHECK-NEXT:    cmp r2, #152; CHECK-NEXT:    it lt53; CHECK-NEXT:    poplt {r7, pc}54; CHECK-NEXT:  .LBB1_1: @ %while.body.lr.ph55; CHECK-NEXT:    dlstp.32 lr, r256; CHECK-NEXT:  .LBB1_2: @ %while.body57; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=158; CHECK-NEXT:    vldrw.u32 q0, [r0]59; CHECK-NEXT:    vadd.i32 q0, q0, r160; CHECK-NEXT:    vstrw.32 q0, [r0], #1661; CHECK-NEXT:    letp lr, .LBB1_262; CHECK-NEXT:  @ %bb.3: @ %while.end63; CHECK-NEXT:    pop {r7, pc}64entry:65  %cmp11 = icmp sgt i32 %N, 066  br i1 %cmp11, label %while.body.lr.ph, label %while.end67 68while.body.lr.ph:                                 ; preds = %entry69  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 070  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer71  br label %while.body72 73while.body:                                       ; preds = %while.body.lr.ph, %while.body74  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]75  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]76  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)77  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)78  %2 = tail call <4 x i32> @llvm.arm.mve.add.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, <4 x i1> %0, <4 x i32> %1)79  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)80  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 481  %sub = add nsw i32 %N.addr.012, -482  %cmp = icmp sgt i32 %N.addr.012, 483  br i1 %cmp, label %while.body, label %while.end84 85while.end:                                        ; preds = %while.body, %entry86  ret void87}88 89define void @vsubq(ptr %x, ptr %y, i32 %n, i32 %z) {90; CHECK-LABEL: vsubq:91; CHECK:       @ %bb.0: @ %entry92; CHECK-NEXT:    .save {r7, lr}93; CHECK-NEXT:    push {r7, lr}94; CHECK-NEXT:    cmp r2, #195; CHECK-NEXT:    it lt96; CHECK-NEXT:    poplt {r7, pc}97; CHECK-NEXT:  .LBB2_1: @ %for.body.preheader98; CHECK-NEXT:    dlstp.32 lr, r299; CHECK-NEXT:  .LBB2_2: @ %for.body100; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1101; CHECK-NEXT:    vldrw.u32 q0, [r0], #16102; CHECK-NEXT:    vsub.i32 q0, q0, r3103; CHECK-NEXT:    vstrw.32 q0, [r1], #16104; CHECK-NEXT:    letp lr, .LBB2_2105; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup106; CHECK-NEXT:    pop {r7, pc}107entry:108  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0109  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer110  %cmp11 = icmp sgt i32 %n, 0111  br i1 %cmp11, label %for.body, label %for.cond.cleanup112 113for.cond.cleanup:                                 ; preds = %for.body, %entry114  ret void115 116for.body:                                         ; preds = %entry, %for.body117  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]118  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]119  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]120  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)121  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)122  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4123  %2 = sub <4 x i32> %1, %.splat124  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)125  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4126  %sub = add nsw i32 %i.012, -4127  %cmp = icmp sgt i32 %i.012, 4128  br i1 %cmp, label %for.body, label %for.cond.cleanup129}130 131define void @vsub(ptr %s1, i32 %c0, i32 %N) {132; CHECK-LABEL: vsub:133; CHECK:       @ %bb.0: @ %entry134; CHECK-NEXT:    .save {r7, lr}135; CHECK-NEXT:    push {r7, lr}136; CHECK-NEXT:    cmp r2, #1137; CHECK-NEXT:    it lt138; CHECK-NEXT:    poplt {r7, pc}139; CHECK-NEXT:  .LBB3_1: @ %while.body.lr.ph140; CHECK-NEXT:    dlstp.32 lr, r2141; CHECK-NEXT:  .LBB3_2: @ %while.body142; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1143; CHECK-NEXT:    vldrw.u32 q0, [r0]144; CHECK-NEXT:    vsub.i32 q0, q0, r1145; CHECK-NEXT:    vstrw.32 q0, [r0], #16146; CHECK-NEXT:    letp lr, .LBB3_2147; CHECK-NEXT:  @ %bb.3: @ %while.end148; CHECK-NEXT:    pop {r7, pc}149entry:150  %cmp11 = icmp sgt i32 %N, 0151  br i1 %cmp11, label %while.body.lr.ph, label %while.end152 153while.body.lr.ph:                                 ; preds = %entry154  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0155  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer156  br label %while.body157 158while.body:                                       ; preds = %while.body.lr.ph, %while.body159  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]160  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]161  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)162  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)163  %2 = tail call <4 x i32> @llvm.arm.mve.sub.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, <4 x i1> %0, <4 x i32> %1)164  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)165  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4166  %sub = add nsw i32 %N.addr.012, -4167  %cmp = icmp sgt i32 %N.addr.012, 4168  br i1 %cmp, label %while.body, label %while.end169 170while.end:                                        ; preds = %while.body, %entry171  ret void172}173 174define void @vmulq(ptr %x, ptr %y, i32 %n, i32 %z) {175; CHECK-LABEL: vmulq:176; CHECK:       @ %bb.0: @ %entry177; CHECK-NEXT:    .save {r7, lr}178; CHECK-NEXT:    push {r7, lr}179; CHECK-NEXT:    cmp r2, #1180; CHECK-NEXT:    it lt181; CHECK-NEXT:    poplt {r7, pc}182; CHECK-NEXT:  .LBB4_1: @ %for.body.preheader183; CHECK-NEXT:    dlstp.32 lr, r2184; CHECK-NEXT:  .LBB4_2: @ %for.body185; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1186; CHECK-NEXT:    vldrw.u32 q0, [r0], #16187; CHECK-NEXT:    vmul.i32 q0, q0, r3188; CHECK-NEXT:    vstrw.32 q0, [r1], #16189; CHECK-NEXT:    letp lr, .LBB4_2190; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup191; CHECK-NEXT:    pop {r7, pc}192entry:193  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0194  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer195  %cmp11 = icmp sgt i32 %n, 0196  br i1 %cmp11, label %for.body, label %for.cond.cleanup197 198for.cond.cleanup:                                 ; preds = %for.body, %entry199  ret void200 201for.body:                                         ; preds = %entry, %for.body202  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]203  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]204  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]205  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)206  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)207  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4208  %2 = mul <4 x i32> %1, %.splat209  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)210  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4211  %sub = add nsw i32 %i.012, -4212  %cmp = icmp sgt i32 %i.012, 4213  br i1 %cmp, label %for.body, label %for.cond.cleanup214}215 216define void @vmul(ptr %s1, i32 %c0, i32 %N) {217; CHECK-LABEL: vmul:218; CHECK:       @ %bb.0: @ %entry219; CHECK-NEXT:    .save {r7, lr}220; CHECK-NEXT:    push {r7, lr}221; CHECK-NEXT:    cmp r2, #1222; CHECK-NEXT:    it lt223; CHECK-NEXT:    poplt {r7, pc}224; CHECK-NEXT:  .LBB5_1: @ %while.body.lr.ph225; CHECK-NEXT:    dlstp.32 lr, r2226; CHECK-NEXT:  .LBB5_2: @ %while.body227; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1228; CHECK-NEXT:    vldrw.u32 q0, [r0]229; CHECK-NEXT:    vmul.i32 q0, q0, r1230; CHECK-NEXT:    vstrw.32 q0, [r0], #16231; CHECK-NEXT:    letp lr, .LBB5_2232; CHECK-NEXT:  @ %bb.3: @ %while.end233; CHECK-NEXT:    pop {r7, pc}234entry:235  %cmp11 = icmp sgt i32 %N, 0236  br i1 %cmp11, label %while.body.lr.ph, label %while.end237 238while.body.lr.ph:                                 ; preds = %entry239  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0240  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer241  br label %while.body242 243while.body:                                       ; preds = %while.body.lr.ph, %while.body244  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]245  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]246  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)247  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)248  %2 = tail call <4 x i32> @llvm.arm.mve.mul.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, <4 x i1> %0, <4 x i32> %1)249  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)250  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4251  %sub = add nsw i32 %N.addr.012, -4252  %cmp = icmp sgt i32 %N.addr.012, 4253  br i1 %cmp, label %while.body, label %while.end254 255while.end:                                        ; preds = %while.body, %entry256  ret void257}258 259define void @vqaddq(ptr %x, ptr %y, i32 %n, i32 %z) {260; CHECK-LABEL: vqaddq:261; CHECK:       @ %bb.0: @ %entry262; CHECK-NEXT:    .save {r7, lr}263; CHECK-NEXT:    push {r7, lr}264; CHECK-NEXT:    cmp r2, #1265; CHECK-NEXT:    it lt266; CHECK-NEXT:    poplt {r7, pc}267; CHECK-NEXT:  .LBB6_1: @ %for.body.preheader268; CHECK-NEXT:    dlstp.32 lr, r2269; CHECK-NEXT:  .LBB6_2: @ %for.body270; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1271; CHECK-NEXT:    vldrw.u32 q0, [r0], #16272; CHECK-NEXT:    vqadd.s32 q0, q0, r3273; CHECK-NEXT:    vstrw.32 q0, [r1], #16274; CHECK-NEXT:    letp lr, .LBB6_2275; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup276; CHECK-NEXT:    pop {r7, pc}277entry:278  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0279  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer280  %cmp11 = icmp sgt i32 %n, 0281  br i1 %cmp11, label %for.body, label %for.cond.cleanup282 283for.cond.cleanup:                                 ; preds = %for.body, %entry284  ret void285 286for.body:                                         ; preds = %entry, %for.body287  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]288  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]289  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]290  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)291  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)292  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4293  %2 = tail call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %1, <4 x i32> %.splat)294  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)295  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4296  %sub = add nsw i32 %i.012, -4297  %cmp = icmp sgt i32 %i.012, 4298  br i1 %cmp, label %for.body, label %for.cond.cleanup299}300 301define void @vqaddqu(ptr %x, ptr %y, i32 %n, i32 %z) {302; CHECK-LABEL: vqaddqu:303; CHECK:       @ %bb.0: @ %entry304; CHECK-NEXT:    .save {r7, lr}305; CHECK-NEXT:    push {r7, lr}306; CHECK-NEXT:    cmp r2, #1307; CHECK-NEXT:    it lt308; CHECK-NEXT:    poplt {r7, pc}309; CHECK-NEXT:  .LBB7_1: @ %for.body.preheader310; CHECK-NEXT:    dlstp.32 lr, r2311; CHECK-NEXT:  .LBB7_2: @ %for.body312; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1313; CHECK-NEXT:    vldrw.u32 q0, [r0], #16314; CHECK-NEXT:    vqadd.u32 q0, q0, r3315; CHECK-NEXT:    vstrw.32 q0, [r1], #16316; CHECK-NEXT:    letp lr, .LBB7_2317; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup318; CHECK-NEXT:    pop {r7, pc}319entry:320  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0321  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer322  %cmp11 = icmp sgt i32 %n, 0323  br i1 %cmp11, label %for.body, label %for.cond.cleanup324 325for.cond.cleanup:                                 ; preds = %for.body, %entry326  ret void327 328for.body:                                         ; preds = %entry, %for.body329  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]330  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]331  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]332  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)333  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)334  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4335  %2 = tail call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %1, <4 x i32> %.splat)336  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)337  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4338  %sub = add nsw i32 %i.012, -4339  %cmp = icmp sgt i32 %i.012, 4340  br i1 %cmp, label %for.body, label %for.cond.cleanup341}342 343define void @vqadd(ptr %s1, i32 %c0, i32 %N) {344; CHECK-LABEL: vqadd:345; CHECK:       @ %bb.0: @ %entry346; CHECK-NEXT:    .save {r7, lr}347; CHECK-NEXT:    push {r7, lr}348; CHECK-NEXT:    cmp r2, #1349; CHECK-NEXT:    it lt350; CHECK-NEXT:    poplt {r7, pc}351; CHECK-NEXT:  .LBB8_1: @ %while.body.lr.ph352; CHECK-NEXT:    dlstp.32 lr, r2353; CHECK-NEXT:  .LBB8_2: @ %while.body354; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1355; CHECK-NEXT:    vldrw.u32 q0, [r0]356; CHECK-NEXT:    vqadd.s32 q0, q0, r1357; CHECK-NEXT:    vstrw.32 q0, [r0], #16358; CHECK-NEXT:    letp lr, .LBB8_2359; CHECK-NEXT:  @ %bb.3: @ %while.end360; CHECK-NEXT:    pop {r7, pc}361entry:362  %cmp11 = icmp sgt i32 %N, 0363  br i1 %cmp11, label %while.body.lr.ph, label %while.end364 365while.body.lr.ph:                                 ; preds = %entry366  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0367  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer368  br label %while.body369 370while.body:                                       ; preds = %while.body.lr.ph, %while.body371  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]372  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]373  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)374  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)375  %2 = tail call <4 x i32> @llvm.arm.mve.qadd.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, i32 0, <4 x i1> %0, <4 x i32> %1)376  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)377  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4378  %sub = add nsw i32 %N.addr.012, -4379  %cmp = icmp sgt i32 %N.addr.012, 4380  br i1 %cmp, label %while.body, label %while.end381 382while.end:                                        ; preds = %while.body, %entry383  ret void384}385 386define void @vqsubq(ptr %x, ptr %y, i32 %n, i32 %z) {387; CHECK-LABEL: vqsubq:388; CHECK:       @ %bb.0: @ %entry389; CHECK-NEXT:    .save {r7, lr}390; CHECK-NEXT:    push {r7, lr}391; CHECK-NEXT:    cmp r2, #1392; CHECK-NEXT:    it lt393; CHECK-NEXT:    poplt {r7, pc}394; CHECK-NEXT:  .LBB9_1: @ %for.body.preheader395; CHECK-NEXT:    dlstp.32 lr, r2396; CHECK-NEXT:  .LBB9_2: @ %for.body397; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1398; CHECK-NEXT:    vldrw.u32 q0, [r0], #16399; CHECK-NEXT:    vqsub.s32 q0, q0, r3400; CHECK-NEXT:    vstrw.32 q0, [r1], #16401; CHECK-NEXT:    letp lr, .LBB9_2402; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup403; CHECK-NEXT:    pop {r7, pc}404entry:405  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0406  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer407  %cmp11 = icmp sgt i32 %n, 0408  br i1 %cmp11, label %for.body, label %for.cond.cleanup409 410for.cond.cleanup:                                 ; preds = %for.body, %entry411  ret void412 413for.body:                                         ; preds = %entry, %for.body414  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]415  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]416  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]417  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)418  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)419  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4420  %2 = tail call <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %1, <4 x i32> %.splat)421  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)422  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4423  %sub = add nsw i32 %i.012, -4424  %cmp = icmp sgt i32 %i.012, 4425  br i1 %cmp, label %for.body, label %for.cond.cleanup426}427 428define void @vqsubqu(ptr %x, ptr %y, i32 %n, i32 %z) {429; CHECK-LABEL: vqsubqu:430; CHECK:       @ %bb.0: @ %entry431; CHECK-NEXT:    .save {r7, lr}432; CHECK-NEXT:    push {r7, lr}433; CHECK-NEXT:    cmp r2, #1434; CHECK-NEXT:    it lt435; CHECK-NEXT:    poplt {r7, pc}436; CHECK-NEXT:  .LBB10_1: @ %for.body.preheader437; CHECK-NEXT:    dlstp.32 lr, r2438; CHECK-NEXT:  .LBB10_2: @ %for.body439; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1440; CHECK-NEXT:    vldrw.u32 q0, [r0], #16441; CHECK-NEXT:    vqsub.u32 q0, q0, r3442; CHECK-NEXT:    vstrw.32 q0, [r1], #16443; CHECK-NEXT:    letp lr, .LBB10_2444; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup445; CHECK-NEXT:    pop {r7, pc}446entry:447  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0448  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer449  %cmp11 = icmp sgt i32 %n, 0450  br i1 %cmp11, label %for.body, label %for.cond.cleanup451 452for.cond.cleanup:                                 ; preds = %for.body, %entry453  ret void454 455for.body:                                         ; preds = %entry, %for.body456  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]457  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]458  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]459  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)460  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)461  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4462  %2 = tail call <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %1, <4 x i32> %.splat)463  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)464  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4465  %sub = add nsw i32 %i.012, -4466  %cmp = icmp sgt i32 %i.012, 4467  br i1 %cmp, label %for.body, label %for.cond.cleanup468}469 470define void @vqsub(ptr %s1, i32 %c0, i32 %N) {471; CHECK-LABEL: vqsub:472; CHECK:       @ %bb.0: @ %entry473; CHECK-NEXT:    .save {r7, lr}474; CHECK-NEXT:    push {r7, lr}475; CHECK-NEXT:    cmp r2, #1476; CHECK-NEXT:    it lt477; CHECK-NEXT:    poplt {r7, pc}478; CHECK-NEXT:  .LBB11_1: @ %while.body.lr.ph479; CHECK-NEXT:    dlstp.32 lr, r2480; CHECK-NEXT:  .LBB11_2: @ %while.body481; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1482; CHECK-NEXT:    vldrw.u32 q0, [r0]483; CHECK-NEXT:    vqsub.s32 q0, q0, r1484; CHECK-NEXT:    vstrw.32 q0, [r0], #16485; CHECK-NEXT:    letp lr, .LBB11_2486; CHECK-NEXT:  @ %bb.3: @ %while.end487; CHECK-NEXT:    pop {r7, pc}488entry:489  %cmp11 = icmp sgt i32 %N, 0490  br i1 %cmp11, label %while.body.lr.ph, label %while.end491 492while.body.lr.ph:                                 ; preds = %entry493  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0494  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer495  br label %while.body496 497while.body:                                       ; preds = %while.body.lr.ph, %while.body498  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]499  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]500  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)501  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)502  %2 = tail call <4 x i32> @llvm.arm.mve.qsub.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, i32 0, <4 x i1> %0, <4 x i32> %1)503  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)504  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4505  %sub = add nsw i32 %N.addr.012, -4506  %cmp = icmp sgt i32 %N.addr.012, 4507  br i1 %cmp, label %while.body, label %while.end508 509while.end:                                        ; preds = %while.body, %entry510  ret void511}512 513define void @vhaddq(ptr %x, ptr %y, i32 %n, i32 %z) {514; CHECK-LABEL: vhaddq:515; CHECK:       @ %bb.0: @ %entry516; CHECK-NEXT:    .save {r7, lr}517; CHECK-NEXT:    push {r7, lr}518; CHECK-NEXT:    cmp r2, #1519; CHECK-NEXT:    it lt520; CHECK-NEXT:    poplt {r7, pc}521; CHECK-NEXT:  .LBB12_1: @ %for.body.preheader522; CHECK-NEXT:    dlstp.32 lr, r2523; CHECK-NEXT:  .LBB12_2: @ %for.body524; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1525; CHECK-NEXT:    vldrw.u32 q0, [r0], #16526; CHECK-NEXT:    vhadd.s32 q0, q0, r3527; CHECK-NEXT:    vstrw.32 q0, [r1], #16528; CHECK-NEXT:    letp lr, .LBB12_2529; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup530; CHECK-NEXT:    pop {r7, pc}531entry:532  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0533  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer534  %cmp11 = icmp sgt i32 %n, 0535  br i1 %cmp11, label %for.body, label %for.cond.cleanup536 537for.cond.cleanup:                                 ; preds = %for.body, %entry538  ret void539 540for.body:                                         ; preds = %entry, %for.body541  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]542  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]543  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]544  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)545  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)546  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4547  %2 = tail call <4 x i32> @llvm.arm.mve.vhadd.v4i32(<4 x i32> %1, <4 x i32> %.splat, i32 0)548  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)549  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4550  %sub = add nsw i32 %i.012, -4551  %cmp = icmp sgt i32 %i.012, 4552  br i1 %cmp, label %for.body, label %for.cond.cleanup553}554 555define void @vhadd(ptr %s1, i32 %c0, i32 %N) {556; CHECK-LABEL: vhadd:557; CHECK:       @ %bb.0: @ %entry558; CHECK-NEXT:    .save {r7, lr}559; CHECK-NEXT:    push {r7, lr}560; CHECK-NEXT:    cmp r2, #1561; CHECK-NEXT:    it lt562; CHECK-NEXT:    poplt {r7, pc}563; CHECK-NEXT:  .LBB13_1: @ %while.body.lr.ph564; CHECK-NEXT:    dlstp.32 lr, r2565; CHECK-NEXT:  .LBB13_2: @ %while.body566; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1567; CHECK-NEXT:    vldrw.u32 q0, [r0]568; CHECK-NEXT:    vhadd.s32 q0, q0, r1569; CHECK-NEXT:    vstrw.32 q0, [r0], #16570; CHECK-NEXT:    letp lr, .LBB13_2571; CHECK-NEXT:  @ %bb.3: @ %while.end572; CHECK-NEXT:    pop {r7, pc}573entry:574  %cmp11 = icmp sgt i32 %N, 0575  br i1 %cmp11, label %while.body.lr.ph, label %while.end576 577while.body.lr.ph:                                 ; preds = %entry578  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0579  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer580  br label %while.body581 582while.body:                                       ; preds = %while.body.lr.ph, %while.body583  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]584  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]585  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)586  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)587  %2 = tail call <4 x i32> @llvm.arm.mve.hadd.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, i32 0, <4 x i1> %0, <4 x i32> %1)588  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)589  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4590  %sub = add nsw i32 %N.addr.012, -4591  %cmp = icmp sgt i32 %N.addr.012, 4592  br i1 %cmp, label %while.body, label %while.end593 594while.end:                                        ; preds = %while.body, %entry595  ret void596}597 598define void @vhsubq(ptr %x, ptr %y, i32 %n, i32 %z) {599; CHECK-LABEL: vhsubq:600; CHECK:       @ %bb.0: @ %entry601; CHECK-NEXT:    .save {r7, lr}602; CHECK-NEXT:    push {r7, lr}603; CHECK-NEXT:    cmp r2, #1604; CHECK-NEXT:    it lt605; CHECK-NEXT:    poplt {r7, pc}606; CHECK-NEXT:  .LBB14_1: @ %for.body.preheader607; CHECK-NEXT:    dlstp.32 lr, r2608; CHECK-NEXT:  .LBB14_2: @ %for.body609; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1610; CHECK-NEXT:    vldrw.u32 q0, [r0], #16611; CHECK-NEXT:    vhsub.s32 q0, q0, r3612; CHECK-NEXT:    vstrw.32 q0, [r1], #16613; CHECK-NEXT:    letp lr, .LBB14_2614; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup615; CHECK-NEXT:    pop {r7, pc}616entry:617  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0618  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer619  %cmp11 = icmp sgt i32 %n, 0620  br i1 %cmp11, label %for.body, label %for.cond.cleanup621 622for.cond.cleanup:                                 ; preds = %for.body, %entry623  ret void624 625for.body:                                         ; preds = %entry, %for.body626  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]627  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]628  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]629  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)630  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)631  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4632  %2 = tail call <4 x i32> @llvm.arm.mve.vhsub.v4i32(<4 x i32> %1, <4 x i32> %.splat, i32 0)633  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)634  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4635  %sub = add nsw i32 %i.012, -4636  %cmp = icmp sgt i32 %i.012, 4637  br i1 %cmp, label %for.body, label %for.cond.cleanup638}639 640define void @vhsub(ptr %s1, i32 %c0, i32 %N) {641; CHECK-LABEL: vhsub:642; CHECK:       @ %bb.0: @ %entry643; CHECK-NEXT:    .save {r7, lr}644; CHECK-NEXT:    push {r7, lr}645; CHECK-NEXT:    cmp r2, #1646; CHECK-NEXT:    it lt647; CHECK-NEXT:    poplt {r7, pc}648; CHECK-NEXT:  .LBB15_1: @ %while.body.lr.ph649; CHECK-NEXT:    dlstp.32 lr, r2650; CHECK-NEXT:  .LBB15_2: @ %while.body651; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1652; CHECK-NEXT:    vldrw.u32 q0, [r0]653; CHECK-NEXT:    vhsub.s32 q0, q0, r1654; CHECK-NEXT:    vstrw.32 q0, [r0], #16655; CHECK-NEXT:    letp lr, .LBB15_2656; CHECK-NEXT:  @ %bb.3: @ %while.end657; CHECK-NEXT:    pop {r7, pc}658entry:659  %cmp11 = icmp sgt i32 %N, 0660  br i1 %cmp11, label %while.body.lr.ph, label %while.end661 662while.body.lr.ph:                                 ; preds = %entry663  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0664  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer665  br label %while.body666 667while.body:                                       ; preds = %while.body.lr.ph, %while.body668  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]669  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]670  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)671  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)672  %2 = tail call <4 x i32> @llvm.arm.mve.hsub.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, i32 0, <4 x i1> %0, <4 x i32> %1)673  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)674  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4675  %sub = add nsw i32 %N.addr.012, -4676  %cmp = icmp sgt i32 %N.addr.012, 4677  br i1 %cmp, label %while.body, label %while.end678 679while.end:                                        ; preds = %while.body, %entry680  ret void681}682 683define void @vqdmullbq(ptr %x, ptr %y, i32 %n, i32 %z) {684; CHECK-LABEL: vqdmullbq:685; CHECK:       @ %bb.0: @ %entry686; CHECK-NEXT:    .save {r7, lr}687; CHECK-NEXT:    push {r7, lr}688; CHECK-NEXT:    cmp r2, #1689; CHECK-NEXT:    it lt690; CHECK-NEXT:    poplt {r7, pc}691; CHECK-NEXT:  .LBB16_1: @ %for.body.preheader692; CHECK-NEXT:    dlstp.32 lr, r2693; CHECK-NEXT:  .LBB16_2: @ %for.body694; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1695; CHECK-NEXT:    vldrw.u32 q0, [r0], #16696; CHECK-NEXT:    vqdmullb.s32 q1, q0, r3697; CHECK-NEXT:    vstrw.32 q1, [r1], #16698; CHECK-NEXT:    letp lr, .LBB16_2699; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup700; CHECK-NEXT:    pop {r7, pc}701entry:702  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0703  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer704  %cmp11 = icmp sgt i32 %n, 0705  br i1 %cmp11, label %for.body, label %for.cond.cleanup706 707for.cond.cleanup:                                 ; preds = %for.body, %entry708  ret void709 710for.body:                                         ; preds = %entry, %for.body711  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]712  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]713  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]714  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)715  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)716  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4717  %2 = tail call <2 x i64> @llvm.arm.mve.vqdmull.v2i64.v4i32(<4 x i32> %1, <4 x i32> %.splat, i32 0)718  %3 = bitcast <2 x i64> %2 to <4 x i32>719  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %3, ptr %y.addr.013, i32 4, <4 x i1> %0)720  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4721  %sub = add nsw i32 %i.012, -4722  %cmp = icmp sgt i32 %i.012, 4723  br i1 %cmp, label %for.body, label %for.cond.cleanup724}725 726 727define void @vqdmull(ptr %s1, i32 %c0, i32 %N) {728; CHECK-LABEL: vqdmull:729; CHECK:       @ %bb.0: @ %entry730; CHECK-NEXT:    .save {r7, lr}731; CHECK-NEXT:    push {r7, lr}732; CHECK-NEXT:    cmp r2, #1733; CHECK-NEXT:    it lt734; CHECK-NEXT:    poplt {r7, pc}735; CHECK-NEXT:  .LBB17_1: @ %while.body.lr.ph736; CHECK-NEXT:    dlstp.32 lr, r2737; CHECK-NEXT:  .LBB17_2: @ %while.body738; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1739; CHECK-NEXT:    vldrh.s32 q0, [r0]740; CHECK-NEXT:    vqdmullb.s16 q0, q0, r1741; CHECK-NEXT:    vstrw.32 q0, [r0], #16742; CHECK-NEXT:    letp lr, .LBB17_2743; CHECK-NEXT:  @ %bb.3: @ %while.end744; CHECK-NEXT:    pop {r7, pc}745entry:746  %cmp11 = icmp sgt i32 %N, 0747  br i1 %cmp11, label %while.body.lr.ph, label %while.end748 749while.body.lr.ph:                                 ; preds = %entry750  %conv = trunc i32 %c0 to i16751  %.splatinsert = insertelement <8 x i16> undef, i16 %conv, i32 0752  %.splat = shufflevector <8 x i16> %.splatinsert, <8 x i16> undef, <8 x i32> zeroinitializer753  br label %while.body754 755while.body:                                       ; preds = %while.body.lr.ph, %while.body756  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]757  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]758  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)759  %1 = tail call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %s1.addr.013, i32 2, <4 x i1> %0, <4 x i16> zeroinitializer)760  %2 = sext <4 x i16> %1 to <4 x i32>761  %3 = bitcast <4 x i32> %2 to <8 x i16>762  %4 = tail call <4 x i32> @llvm.arm.mve.vqdmull.predicated.v4i32.v8i16.v4i1(<8 x i16> %3, <8 x i16> %.splat, i32 0, <4 x i1> %0, <4 x i32> %2)763  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %4, ptr %s1.addr.013, i32 4, <4 x i1> %0)764  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4765  %sub = add nsw i32 %N.addr.012, -4766  %cmp = icmp sgt i32 %N.addr.012, 4767  br i1 %cmp, label %while.body, label %while.end768 769while.end:                                        ; preds = %while.body, %entry770  ret void771}772 773define void @vqdmulhq(ptr %x, ptr %y, i32 %n, i32 %z) {774; CHECK-LABEL: vqdmulhq:775; CHECK:       @ %bb.0: @ %entry776; CHECK-NEXT:    .save {r7, lr}777; CHECK-NEXT:    push {r7, lr}778; CHECK-NEXT:    cmp r2, #1779; CHECK-NEXT:    it lt780; CHECK-NEXT:    poplt {r7, pc}781; CHECK-NEXT:  .LBB18_1: @ %for.body.preheader782; CHECK-NEXT:    dlstp.32 lr, r2783; CHECK-NEXT:  .LBB18_2: @ %for.body784; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1785; CHECK-NEXT:    vldrw.u32 q0, [r0], #16786; CHECK-NEXT:    vqdmulh.s32 q0, q0, r3787; CHECK-NEXT:    vstrw.32 q0, [r1], #16788; CHECK-NEXT:    letp lr, .LBB18_2789; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup790; CHECK-NEXT:    pop {r7, pc}791entry:792  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0793  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer794  %cmp11 = icmp sgt i32 %n, 0795  br i1 %cmp11, label %for.body, label %for.cond.cleanup796 797for.cond.cleanup:                                 ; preds = %for.body, %entry798  ret void799 800for.body:                                         ; preds = %entry, %for.body801  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]802  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]803  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]804  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)805  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)806  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4807  %2 = tail call <4 x i32> @llvm.arm.mve.vqdmulh.v4i32(<4 x i32> %1, <4 x i32> %.splat)808  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)809  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4810  %sub = add nsw i32 %i.012, -4811  %cmp = icmp sgt i32 %i.012, 4812  br i1 %cmp, label %for.body, label %for.cond.cleanup813}814 815define void @vqdmulh(ptr %s1, i32 %c0, i32 %N) {816; CHECK-LABEL: vqdmulh:817; CHECK:       @ %bb.0: @ %entry818; CHECK-NEXT:    .save {r7, lr}819; CHECK-NEXT:    push {r7, lr}820; CHECK-NEXT:    cmp r2, #1821; CHECK-NEXT:    it lt822; CHECK-NEXT:    poplt {r7, pc}823; CHECK-NEXT:  .LBB19_1: @ %while.body.lr.ph824; CHECK-NEXT:    dlstp.32 lr, r2825; CHECK-NEXT:  .LBB19_2: @ %while.body826; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1827; CHECK-NEXT:    vldrw.u32 q0, [r0]828; CHECK-NEXT:    vqdmulh.s32 q0, q0, r1829; CHECK-NEXT:    vstrw.32 q0, [r0], #16830; CHECK-NEXT:    letp lr, .LBB19_2831; CHECK-NEXT:  @ %bb.3: @ %while.end832; CHECK-NEXT:    pop {r7, pc}833entry:834  %cmp11 = icmp sgt i32 %N, 0835  br i1 %cmp11, label %while.body.lr.ph, label %while.end836 837while.body.lr.ph:                                 ; preds = %entry838  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0839  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer840  br label %while.body841 842while.body:                                       ; preds = %while.body.lr.ph, %while.body843  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]844  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]845  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)846  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)847  %2 = tail call <4 x i32> @llvm.arm.mve.qdmulh.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, <4 x i1> %0, <4 x i32> %1)848  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)849  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4850  %sub = add nsw i32 %N.addr.012, -4851  %cmp = icmp sgt i32 %N.addr.012, 4852  br i1 %cmp, label %while.body, label %while.end853 854while.end:                                        ; preds = %while.body, %entry855  ret void856}857 858define void @vqrdmulhq(ptr %x, ptr %y, i32 %n, i32 %z) {859; CHECK-LABEL: vqrdmulhq:860; CHECK:       @ %bb.0: @ %entry861; CHECK-NEXT:    .save {r7, lr}862; CHECK-NEXT:    push {r7, lr}863; CHECK-NEXT:    cmp r2, #1864; CHECK-NEXT:    it lt865; CHECK-NEXT:    poplt {r7, pc}866; CHECK-NEXT:  .LBB20_1: @ %for.body.preheader867; CHECK-NEXT:    dlstp.32 lr, r2868; CHECK-NEXT:  .LBB20_2: @ %for.body869; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1870; CHECK-NEXT:    vldrw.u32 q0, [r0], #16871; CHECK-NEXT:    vqrdmulh.s32 q0, q0, r3872; CHECK-NEXT:    vstrw.32 q0, [r1], #16873; CHECK-NEXT:    letp lr, .LBB20_2874; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup875; CHECK-NEXT:    pop {r7, pc}876entry:877  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0878  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer879  %cmp11 = icmp sgt i32 %n, 0880  br i1 %cmp11, label %for.body, label %for.cond.cleanup881 882for.cond.cleanup:                                 ; preds = %for.body, %entry883  ret void884 885for.body:                                         ; preds = %entry, %for.body886  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]887  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]888  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]889  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)890  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)891  %add.ptr = getelementptr inbounds i32, ptr %x.addr.014, i32 4892  %2 = tail call <4 x i32> @llvm.arm.mve.vqrdmulh.v4i32(<4 x i32> %1, <4 x i32> %.splat)893  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)894  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.013, i32 4895  %sub = add nsw i32 %i.012, -4896  %cmp = icmp sgt i32 %i.012, 4897  br i1 %cmp, label %for.body, label %for.cond.cleanup898}899 900define void @vqrdmulh(ptr %s1, i32 %c0, i32 %N) {901; CHECK-LABEL: vqrdmulh:902; CHECK:       @ %bb.0: @ %entry903; CHECK-NEXT:    .save {r7, lr}904; CHECK-NEXT:    push {r7, lr}905; CHECK-NEXT:    cmp r2, #1906; CHECK-NEXT:    it lt907; CHECK-NEXT:    poplt {r7, pc}908; CHECK-NEXT:  .LBB21_1: @ %while.body.lr.ph909; CHECK-NEXT:    dlstp.32 lr, r2910; CHECK-NEXT:  .LBB21_2: @ %while.body911; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1912; CHECK-NEXT:    vldrw.u32 q0, [r0]913; CHECK-NEXT:    vqrdmulh.s32 q0, q0, r1914; CHECK-NEXT:    vstrw.32 q0, [r0], #16915; CHECK-NEXT:    letp lr, .LBB21_2916; CHECK-NEXT:  @ %bb.3: @ %while.end917; CHECK-NEXT:    pop {r7, pc}918entry:919  %cmp11 = icmp sgt i32 %N, 0920  br i1 %cmp11, label %while.body.lr.ph, label %while.end921 922while.body.lr.ph:                                 ; preds = %entry923  %.splatinsert = insertelement <4 x i32> undef, i32 %c0, i32 0924  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer925  br label %while.body926 927while.body:                                       ; preds = %while.body.lr.ph, %while.body928  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]929  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]930  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)931  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)932  %2 = tail call <4 x i32> @llvm.arm.mve.qrdmulh.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %.splat, <4 x i1> %0, <4 x i32> %1)933  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)934  %add.ptr = getelementptr inbounds i32, ptr %s1.addr.013, i32 4935  %sub = add nsw i32 %N.addr.012, -4936  %cmp = icmp sgt i32 %N.addr.012, 4937  br i1 %cmp, label %while.body, label %while.end938 939while.end:                                        ; preds = %while.body, %entry940  ret void941}942 943define void @vmlaq(ptr %x, ptr %y, i32 %n, i32 %z) {944; CHECK-LABEL: vmlaq:945; CHECK:       @ %bb.0: @ %entry946; CHECK-NEXT:    .save {r7, lr}947; CHECK-NEXT:    push {r7, lr}948; CHECK-NEXT:    cmp r2, #1949; CHECK-NEXT:    it lt950; CHECK-NEXT:    poplt {r7, pc}951; CHECK-NEXT:  .LBB22_1: @ %for.body.preheader952; CHECK-NEXT:    dlstp.32 lr, r2953; CHECK-NEXT:  .LBB22_2: @ %for.body954; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1955; CHECK-NEXT:    vldrw.u32 q0, [r1]956; CHECK-NEXT:    vldrw.u32 q1, [r0], #16957; CHECK-NEXT:    vmla.i32 q1, q0, r3958; CHECK-NEXT:    vstrw.32 q1, [r1], #16959; CHECK-NEXT:    letp lr, .LBB22_2960; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup961; CHECK-NEXT:    pop {r7, pc}962entry:963  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 0964  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer965  %cmp14 = icmp sgt i32 %n, 0966  br i1 %cmp14, label %for.body, label %for.cond.cleanup967 968for.cond.cleanup:                                 ; preds = %for.body, %entry969  ret void970 971for.body:                                         ; preds = %entry, %for.body972  %x.addr.017 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]973  %y.addr.016 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]974  %i.015 = phi i32 [ %sub, %for.body ], [ %n, %entry ]975  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.015)976  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.017, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)977  %add.ptr = getelementptr inbounds i32, ptr %x.addr.017, i32 4978  %2 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %y.addr.016, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)979  %3 = mul <4 x i32> %2, %.splat980  %4 = add <4 x i32> %3, %1981  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %4, ptr %y.addr.016, i32 4, <4 x i1> %0)982  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.016, i32 4983  %sub = add nsw i32 %i.015, -4984  %cmp = icmp sgt i32 %i.015, 4985  br i1 %cmp, label %for.body, label %for.cond.cleanup986}987 988define void @vmlaqp(ptr %x, ptr %y, i32 %n, i32 %z) {989; CHECK-LABEL: vmlaqp:990; CHECK:       @ %bb.0: @ %entry991; CHECK-NEXT:    .save {r7, lr}992; CHECK-NEXT:    push {r7, lr}993; CHECK-NEXT:    cmp r2, #1994; CHECK-NEXT:    it lt995; CHECK-NEXT:    poplt {r7, pc}996; CHECK-NEXT:  .LBB23_1: @ %for.body.preheader997; CHECK-NEXT:    dlstp.32 lr, r2998; CHECK-NEXT:  .LBB23_2: @ %for.body999; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11000; CHECK-NEXT:    vldrw.u32 q0, [r1]1001; CHECK-NEXT:    vldrw.u32 q1, [r0], #161002; CHECK-NEXT:    vmla.i32 q1, q0, r31003; CHECK-NEXT:    vstrw.32 q1, [r1], #161004; CHECK-NEXT:    letp lr, .LBB23_21005; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1006; CHECK-NEXT:    pop {r7, pc}1007entry:1008  %cmp15 = icmp sgt i32 %n, 01009  br i1 %cmp15, label %for.body, label %for.cond.cleanup1010 1011for.cond.cleanup:                                 ; preds = %for.body, %entry1012  ret void1013 1014for.body:                                         ; preds = %entry, %for.body1015  %x.addr.018 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1016  %y.addr.017 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1017  %i.016 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1018  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.016)1019  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.018, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)1020  %add.ptr = getelementptr inbounds i32, ptr %x.addr.018, i32 41021  %2 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %y.addr.017, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)1022  %3 = tail call <4 x i32> @llvm.arm.mve.vmla.n.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %2, i32 %z, <4 x i1> %0)1023  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %3, ptr %y.addr.017, i32 4, <4 x i1> %0)1024  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.017, i32 41025  %sub = add nsw i32 %i.016, -41026  %cmp = icmp sgt i32 %i.016, 41027  br i1 %cmp, label %for.body, label %for.cond.cleanup1028}1029 1030define void @vmlasq(ptr %x, ptr %y, i32 %n, i32 %z) {1031; CHECK-LABEL: vmlasq:1032; CHECK:       @ %bb.0: @ %entry1033; CHECK-NEXT:    .save {r7, lr}1034; CHECK-NEXT:    push {r7, lr}1035; CHECK-NEXT:    cmp r2, #11036; CHECK-NEXT:    it lt1037; CHECK-NEXT:    poplt {r7, pc}1038; CHECK-NEXT:  .LBB24_1: @ %for.body.preheader1039; CHECK-NEXT:    dlstp.32 lr, r21040; CHECK-NEXT:  .LBB24_2: @ %for.body1041; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11042; CHECK-NEXT:    vldrw.u32 q0, [r0], #161043; CHECK-NEXT:    vldrw.u32 q1, [r1]1044; CHECK-NEXT:    vmlas.i32 q1, q0, r31045; CHECK-NEXT:    vstrw.32 q1, [r1], #161046; CHECK-NEXT:    letp lr, .LBB24_21047; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1048; CHECK-NEXT:    pop {r7, pc}1049entry:1050  %.splatinsert = insertelement <4 x i32> poison, i32 %z, i32 01051  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer1052  %cmp14 = icmp sgt i32 %n, 01053  br i1 %cmp14, label %for.body, label %for.cond.cleanup1054 1055for.cond.cleanup:                                 ; preds = %for.body, %entry1056  ret void1057 1058for.body:                                         ; preds = %entry, %for.body1059  %x.addr.017 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1060  %y.addr.016 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1061  %i.015 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1062  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.015)1063  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.017, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)1064  %add.ptr = getelementptr inbounds i32, ptr %x.addr.017, i32 41065  %2 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %y.addr.016, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)1066  %3 = mul <4 x i32> %2, %11067  %4 = add <4 x i32> %3, %.splat1068  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %4, ptr %y.addr.016, i32 4, <4 x i1> %0)1069  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.016, i32 41070  %sub = add nsw i32 %i.015, -41071  %cmp = icmp sgt i32 %i.015, 41072  br i1 %cmp, label %for.body, label %for.cond.cleanup1073}1074 1075define void @vmlasqp(ptr %x, ptr %y, i32 %n, i32 %z) {1076; CHECK-LABEL: vmlasqp:1077; CHECK:       @ %bb.0: @ %entry1078; CHECK-NEXT:    .save {r7, lr}1079; CHECK-NEXT:    push {r7, lr}1080; CHECK-NEXT:    cmp r2, #11081; CHECK-NEXT:    it lt1082; CHECK-NEXT:    poplt {r7, pc}1083; CHECK-NEXT:  .LBB25_1: @ %for.body.preheader1084; CHECK-NEXT:    dlstp.32 lr, r21085; CHECK-NEXT:  .LBB25_2: @ %for.body1086; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11087; CHECK-NEXT:    vldrw.u32 q0, [r1]1088; CHECK-NEXT:    vldrw.u32 q1, [r0], #161089; CHECK-NEXT:    vmlas.i32 q1, q0, r31090; CHECK-NEXT:    vstrw.32 q1, [r1], #161091; CHECK-NEXT:    letp lr, .LBB25_21092; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1093; CHECK-NEXT:    pop {r7, pc}1094entry:1095  %cmp15 = icmp sgt i32 %n, 01096  br i1 %cmp15, label %for.body, label %for.cond.cleanup1097 1098for.cond.cleanup:                                 ; preds = %for.body, %entry1099  ret void1100 1101for.body:                                         ; preds = %entry, %for.body1102  %x.addr.018 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1103  %y.addr.017 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1104  %i.016 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1105  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.016)1106  %1 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %x.addr.018, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)1107  %add.ptr = getelementptr inbounds i32, ptr %x.addr.018, i32 41108  %2 = tail call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %y.addr.017, i32 4, <4 x i1> %0, <4 x i32> zeroinitializer)1109  %3 = tail call <4 x i32> @llvm.arm.mve.vmlas.n.predicated.v4i32.v4i1(<4 x i32> %1, <4 x i32> %2, i32 %z, <4 x i1> %0)1110  tail call void @llvm.masked.store.v4i32.p0(<4 x i32> %3, ptr %y.addr.017, i32 4, <4 x i1> %0)1111  %add.ptr1 = getelementptr inbounds i32, ptr %y.addr.017, i32 41112  %sub = add nsw i32 %i.016, -41113  %cmp = icmp sgt i32 %i.016, 41114  br i1 %cmp, label %for.body, label %for.cond.cleanup1115}1116 1117define void @vaddqf(ptr %x, ptr %y, i32 %n, float %z) {1118; CHECK-LABEL: vaddqf:1119; CHECK:       @ %bb.0: @ %entry1120; CHECK-NEXT:    .save {r7, lr}1121; CHECK-NEXT:    push {r7, lr}1122; CHECK-NEXT:    cmp r2, #11123; CHECK-NEXT:    it lt1124; CHECK-NEXT:    poplt {r7, pc}1125; CHECK-NEXT:  .LBB26_1: @ %for.body.preheader1126; CHECK-NEXT:    dlstp.32 lr, r21127; CHECK-NEXT:  .LBB26_2: @ %for.body1128; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11129; CHECK-NEXT:    vldrw.u32 q0, [r0], #161130; CHECK-NEXT:    vadd.f32 q0, q0, r31131; CHECK-NEXT:    vstrw.32 q0, [r1], #161132; CHECK-NEXT:    letp lr, .LBB26_21133; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1134; CHECK-NEXT:    pop {r7, pc}1135entry:1136  %.splatinsert = insertelement <4 x float> poison, float %z, i32 01137  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1138  %cmp11 = icmp sgt i32 %n, 01139  br i1 %cmp11, label %for.body, label %for.cond.cleanup1140 1141for.cond.cleanup:                                 ; preds = %for.body, %entry1142  ret void1143 1144for.body:                                         ; preds = %entry, %for.body1145  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1146  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1147  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1148  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)1149  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1150  %add.ptr = getelementptr inbounds float, ptr %x.addr.014, i32 41151  %2 = fadd fast <4 x float> %1, %.splat1152  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)1153  %add.ptr1 = getelementptr inbounds float, ptr %y.addr.013, i32 41154  %sub = add nsw i32 %i.012, -41155  %cmp = icmp sgt i32 %i.012, 41156  br i1 %cmp, label %for.body, label %for.cond.cleanup1157}1158 1159define void @vaddf(ptr %s1, float %c0, i32 %N) {1160; CHECK-LABEL: vaddf:1161; CHECK:       @ %bb.0: @ %entry1162; CHECK-NEXT:    .save {r7, lr}1163; CHECK-NEXT:    push {r7, lr}1164; CHECK-NEXT:    cmp r2, #11165; CHECK-NEXT:    it lt1166; CHECK-NEXT:    poplt {r7, pc}1167; CHECK-NEXT:  .LBB27_1: @ %while.body.lr.ph1168; CHECK-NEXT:    dlstp.32 lr, r21169; CHECK-NEXT:  .LBB27_2: @ %while.body1170; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11171; CHECK-NEXT:    vldrw.u32 q0, [r0]1172; CHECK-NEXT:    vadd.f32 q0, q0, r11173; CHECK-NEXT:    vstrw.32 q0, [r0], #161174; CHECK-NEXT:    letp lr, .LBB27_21175; CHECK-NEXT:  @ %bb.3: @ %while.end1176; CHECK-NEXT:    pop {r7, pc}1177entry:1178  %cmp11 = icmp sgt i32 %N, 01179  br i1 %cmp11, label %while.body.lr.ph, label %while.end1180 1181while.body.lr.ph:                                 ; preds = %entry1182  %.splatinsert = insertelement <4 x float> undef, float %c0, i32 01183  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer1184  br label %while.body1185 1186while.body:                                       ; preds = %while.body.lr.ph, %while.body1187  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]1188  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]1189  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)1190  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1191  %2 = tail call fast <4 x float> @llvm.arm.mve.add.predicated.v4f32.v4i1(<4 x float> %1, <4 x float> %.splat, <4 x i1> %0, <4 x float> %1)1192  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)1193  %add.ptr = getelementptr inbounds float, ptr %s1.addr.013, i32 41194  %sub = add nsw i32 %N.addr.012, -41195  %cmp = icmp sgt i32 %N.addr.012, 41196  br i1 %cmp, label %while.body, label %while.end1197 1198while.end:                                        ; preds = %while.body, %entry1199  ret void1200}1201 1202define void @vsubqf(ptr %x, ptr %y, i32 %n, float %z) {1203; CHECK-LABEL: vsubqf:1204; CHECK:       @ %bb.0: @ %entry1205; CHECK-NEXT:    .save {r7, lr}1206; CHECK-NEXT:    push {r7, lr}1207; CHECK-NEXT:    cmp r2, #11208; CHECK-NEXT:    it lt1209; CHECK-NEXT:    poplt {r7, pc}1210; CHECK-NEXT:  .LBB28_1: @ %for.body.preheader1211; CHECK-NEXT:    dlstp.32 lr, r21212; CHECK-NEXT:  .LBB28_2: @ %for.body1213; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11214; CHECK-NEXT:    vldrw.u32 q0, [r0], #161215; CHECK-NEXT:    vsub.f32 q0, q0, r31216; CHECK-NEXT:    vstrw.32 q0, [r1], #161217; CHECK-NEXT:    letp lr, .LBB28_21218; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1219; CHECK-NEXT:    pop {r7, pc}1220entry:1221  %.splatinsert = insertelement <4 x float> poison, float %z, i32 01222  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1223  %cmp11 = icmp sgt i32 %n, 01224  br i1 %cmp11, label %for.body, label %for.cond.cleanup1225 1226for.cond.cleanup:                                 ; preds = %for.body, %entry1227  ret void1228 1229for.body:                                         ; preds = %entry, %for.body1230  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1231  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1232  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1233  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)1234  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1235  %add.ptr = getelementptr inbounds float, ptr %x.addr.014, i32 41236  %2 = fsub fast <4 x float> %1, %.splat1237  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)1238  %add.ptr1 = getelementptr inbounds float, ptr %y.addr.013, i32 41239  %sub = add nsw i32 %i.012, -41240  %cmp = icmp sgt i32 %i.012, 41241  br i1 %cmp, label %for.body, label %for.cond.cleanup1242}1243 1244define void @vsubf(ptr %s1, float %c0, i32 %N) {1245; CHECK-LABEL: vsubf:1246; CHECK:       @ %bb.0: @ %entry1247; CHECK-NEXT:    .save {r7, lr}1248; CHECK-NEXT:    push {r7, lr}1249; CHECK-NEXT:    cmp r2, #11250; CHECK-NEXT:    it lt1251; CHECK-NEXT:    poplt {r7, pc}1252; CHECK-NEXT:  .LBB29_1: @ %while.body.lr.ph1253; CHECK-NEXT:    dlstp.32 lr, r21254; CHECK-NEXT:  .LBB29_2: @ %while.body1255; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11256; CHECK-NEXT:    vldrw.u32 q0, [r0]1257; CHECK-NEXT:    vsub.f32 q0, q0, r11258; CHECK-NEXT:    vstrw.32 q0, [r0], #161259; CHECK-NEXT:    letp lr, .LBB29_21260; CHECK-NEXT:  @ %bb.3: @ %while.end1261; CHECK-NEXT:    pop {r7, pc}1262entry:1263  %cmp11 = icmp sgt i32 %N, 01264  br i1 %cmp11, label %while.body.lr.ph, label %while.end1265 1266while.body.lr.ph:                                 ; preds = %entry1267  %.splatinsert = insertelement <4 x float> undef, float %c0, i32 01268  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer1269  br label %while.body1270 1271while.body:                                       ; preds = %while.body.lr.ph, %while.body1272  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]1273  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]1274  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)1275  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1276  %2 = tail call fast <4 x float> @llvm.arm.mve.sub.predicated.v4f32.v4i1(<4 x float> %1, <4 x float> %.splat, <4 x i1> %0, <4 x float> %1)1277  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)1278  %add.ptr = getelementptr inbounds float, ptr %s1.addr.013, i32 41279  %sub = add nsw i32 %N.addr.012, -41280  %cmp = icmp sgt i32 %N.addr.012, 41281  br i1 %cmp, label %while.body, label %while.end1282 1283while.end:                                        ; preds = %while.body, %entry1284  ret void1285}1286 1287define void @vmulqf(ptr %x, ptr %y, i32 %n, float %z) {1288; CHECK-LABEL: vmulqf:1289; CHECK:       @ %bb.0: @ %entry1290; CHECK-NEXT:    .save {r7, lr}1291; CHECK-NEXT:    push {r7, lr}1292; CHECK-NEXT:    cmp r2, #11293; CHECK-NEXT:    it lt1294; CHECK-NEXT:    poplt {r7, pc}1295; CHECK-NEXT:  .LBB30_1: @ %for.body.preheader1296; CHECK-NEXT:    dlstp.32 lr, r21297; CHECK-NEXT:  .LBB30_2: @ %for.body1298; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11299; CHECK-NEXT:    vldrw.u32 q0, [r0], #161300; CHECK-NEXT:    vmul.f32 q0, q0, r31301; CHECK-NEXT:    vstrw.32 q0, [r1], #161302; CHECK-NEXT:    letp lr, .LBB30_21303; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1304; CHECK-NEXT:    pop {r7, pc}1305entry:1306  %.splatinsert = insertelement <4 x float> poison, float %z, i32 01307  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1308  %cmp11 = icmp sgt i32 %n, 01309  br i1 %cmp11, label %for.body, label %for.cond.cleanup1310 1311for.cond.cleanup:                                 ; preds = %for.body, %entry1312  ret void1313 1314for.body:                                         ; preds = %entry, %for.body1315  %x.addr.014 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1316  %y.addr.013 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1317  %i.012 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1318  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.012)1319  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %x.addr.014, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1320  %add.ptr = getelementptr inbounds float, ptr %x.addr.014, i32 41321  %2 = fmul fast <4 x float> %1, %.splat1322  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %2, ptr %y.addr.013, i32 4, <4 x i1> %0)1323  %add.ptr1 = getelementptr inbounds float, ptr %y.addr.013, i32 41324  %sub = add nsw i32 %i.012, -41325  %cmp = icmp sgt i32 %i.012, 41326  br i1 %cmp, label %for.body, label %for.cond.cleanup1327}1328 1329define void @vmulf(ptr %s1, float %c0, i32 %N) {1330; CHECK-LABEL: vmulf:1331; CHECK:       @ %bb.0: @ %entry1332; CHECK-NEXT:    .save {r7, lr}1333; CHECK-NEXT:    push {r7, lr}1334; CHECK-NEXT:    cmp r2, #11335; CHECK-NEXT:    it lt1336; CHECK-NEXT:    poplt {r7, pc}1337; CHECK-NEXT:  .LBB31_1: @ %while.body.lr.ph1338; CHECK-NEXT:    dlstp.32 lr, r21339; CHECK-NEXT:  .LBB31_2: @ %while.body1340; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11341; CHECK-NEXT:    vldrw.u32 q0, [r0]1342; CHECK-NEXT:    vmul.f32 q0, q0, r11343; CHECK-NEXT:    vstrw.32 q0, [r0], #161344; CHECK-NEXT:    letp lr, .LBB31_21345; CHECK-NEXT:  @ %bb.3: @ %while.end1346; CHECK-NEXT:    pop {r7, pc}1347entry:1348  %cmp11 = icmp sgt i32 %N, 01349  br i1 %cmp11, label %while.body.lr.ph, label %while.end1350 1351while.body.lr.ph:                                 ; preds = %entry1352  %.splatinsert = insertelement <4 x float> undef, float %c0, i32 01353  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer1354  br label %while.body1355 1356while.body:                                       ; preds = %while.body.lr.ph, %while.body1357  %s1.addr.013 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]1358  %N.addr.012 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]1359  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.012)1360  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %s1.addr.013, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1361  %2 = tail call fast <4 x float> @llvm.arm.mve.mul.predicated.v4f32.v4i1(<4 x float> %1, <4 x float> %.splat, <4 x i1> %0, <4 x float> %1)1362  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %2, ptr %s1.addr.013, i32 4, <4 x i1> %0)1363  %add.ptr = getelementptr inbounds float, ptr %s1.addr.013, i32 41364  %sub = add nsw i32 %N.addr.012, -41365  %cmp = icmp sgt i32 %N.addr.012, 41366  br i1 %cmp, label %while.body, label %while.end1367 1368while.end:                                        ; preds = %while.body, %entry1369  ret void1370}1371 1372define void @vfmaq(ptr %x, ptr %y, i32 %n, float %z) {1373; CHECK-LABEL: vfmaq:1374; CHECK:       @ %bb.0: @ %entry1375; CHECK-NEXT:    .save {r7, lr}1376; CHECK-NEXT:    push {r7, lr}1377; CHECK-NEXT:    cmp r2, #11378; CHECK-NEXT:    it lt1379; CHECK-NEXT:    poplt {r7, pc}1380; CHECK-NEXT:  .LBB32_1: @ %for.body.preheader1381; CHECK-NEXT:    dlstp.32 lr, r21382; CHECK-NEXT:  .LBB32_2: @ %for.body1383; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11384; CHECK-NEXT:    vldrw.u32 q0, [r1]1385; CHECK-NEXT:    vldrw.u32 q1, [r0], #161386; CHECK-NEXT:    vfma.f32 q1, q0, r31387; CHECK-NEXT:    vstrw.32 q1, [r1], #161388; CHECK-NEXT:    letp lr, .LBB32_21389; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1390; CHECK-NEXT:    pop {r7, pc}1391entry:1392  %.splatinsert = insertelement <4 x float> poison, float %z, i32 01393  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1394  %cmp14 = icmp sgt i32 %n, 01395  br i1 %cmp14, label %for.body, label %for.cond.cleanup1396 1397for.cond.cleanup:                                 ; preds = %for.body, %entry1398  ret void1399 1400for.body:                                         ; preds = %entry, %for.body1401  %x.addr.017 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1402  %y.addr.016 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1403  %i.015 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1404  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.015)1405  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %x.addr.017, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1406  %add.ptr = getelementptr inbounds float, ptr %x.addr.017, i32 41407  %2 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %y.addr.016, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1408  %3 = tail call fast <4 x float> @llvm.fma.v4f32(<4 x float> %2, <4 x float> %.splat, <4 x float> %1)1409  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %3, ptr %y.addr.016, i32 4, <4 x i1> %0)1410  %add.ptr1 = getelementptr inbounds float, ptr %y.addr.016, i32 41411  %sub = add nsw i32 %i.015, -41412  %cmp = icmp sgt i32 %i.015, 41413  br i1 %cmp, label %for.body, label %for.cond.cleanup1414}1415 1416define void @vfma(ptr %s1, ptr %s2, float %c0, i32 %N) {1417; CHECK-LABEL: vfma:1418; CHECK:       @ %bb.0: @ %entry1419; CHECK-NEXT:    .save {r7, lr}1420; CHECK-NEXT:    push {r7, lr}1421; CHECK-NEXT:    cmp r3, #11422; CHECK-NEXT:    it lt1423; CHECK-NEXT:    poplt {r7, pc}1424; CHECK-NEXT:  .LBB33_1: @ %while.body.lr.ph1425; CHECK-NEXT:    dlstp.32 lr, r31426; CHECK-NEXT:  .LBB33_2: @ %while.body1427; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11428; CHECK-NEXT:    vldrw.u32 q0, [r1]1429; CHECK-NEXT:    vldrw.u32 q1, [r0]1430; CHECK-NEXT:    vfma.f32 q1, q0, r21431; CHECK-NEXT:    vstrw.32 q1, [r0], #161432; CHECK-NEXT:    letp lr, .LBB33_21433; CHECK-NEXT:  @ %bb.3: @ %while.end1434; CHECK-NEXT:    pop {r7, pc}1435entry:1436  %cmp12 = icmp sgt i32 %N, 01437  br i1 %cmp12, label %while.body.lr.ph, label %while.end1438 1439while.body.lr.ph:                                 ; preds = %entry1440  %.splatinsert = insertelement <4 x float> undef, float %c0, i32 01441  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer1442  br label %while.body1443 1444while.body:                                       ; preds = %while.body.lr.ph, %while.body1445  %s1.addr.014 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]1446  %N.addr.013 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]1447  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.013)1448  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %s1.addr.014, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1449  %2 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %s2, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1450  %3 = tail call fast <4 x float> @llvm.arm.mve.fma.predicated.v4f32.v4i1(<4 x float> %2, <4 x float> %.splat, <4 x float> %1, <4 x i1> %0)1451  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %3, ptr %s1.addr.014, i32 4, <4 x i1> %0)1452  %add.ptr = getelementptr inbounds float, ptr %s1.addr.014, i32 41453  %sub = add nsw i32 %N.addr.013, -41454  %cmp = icmp sgt i32 %N.addr.013, 41455  br i1 %cmp, label %while.body, label %while.end1456 1457while.end:                                        ; preds = %while.body, %entry1458  ret void1459}1460 1461define void @vfmasq(ptr %x, ptr %y, i32 %n, float %z) {1462; CHECK-LABEL: vfmasq:1463; CHECK:       @ %bb.0: @ %entry1464; CHECK-NEXT:    .save {r7, lr}1465; CHECK-NEXT:    push {r7, lr}1466; CHECK-NEXT:    cmp r2, #11467; CHECK-NEXT:    it lt1468; CHECK-NEXT:    poplt {r7, pc}1469; CHECK-NEXT:  .LBB34_1: @ %for.body.preheader1470; CHECK-NEXT:    dlstp.32 lr, r21471; CHECK-NEXT:  .LBB34_2: @ %for.body1472; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11473; CHECK-NEXT:    vldrw.u32 q0, [r1]1474; CHECK-NEXT:    vldrw.u32 q1, [r0], #161475; CHECK-NEXT:    vfmas.f32 q1, q0, r31476; CHECK-NEXT:    vstrw.32 q1, [r1], #161477; CHECK-NEXT:    letp lr, .LBB34_21478; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1479; CHECK-NEXT:    pop {r7, pc}1480entry:1481  %.splatinsert = insertelement <4 x float> poison, float %z, i32 01482  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1483  %cmp14 = icmp sgt i32 %n, 01484  br i1 %cmp14, label %for.body, label %for.cond.cleanup1485 1486for.cond.cleanup:                                 ; preds = %for.body, %entry1487  ret void1488 1489for.body:                                         ; preds = %entry, %for.body1490  %x.addr.017 = phi ptr [ %add.ptr, %for.body ], [ %x, %entry ]1491  %y.addr.016 = phi ptr [ %add.ptr1, %for.body ], [ %y, %entry ]1492  %i.015 = phi i32 [ %sub, %for.body ], [ %n, %entry ]1493  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %i.015)1494  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %x.addr.017, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1495  %add.ptr = getelementptr inbounds float, ptr %x.addr.017, i32 41496  %2 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %y.addr.016, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1497  %3 = tail call fast <4 x float> @llvm.fma.v4f32(<4 x float> %1, <4 x float> %2, <4 x float> %.splat)1498  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %3, ptr %y.addr.016, i32 4, <4 x i1> %0)1499  %add.ptr1 = getelementptr inbounds float, ptr %y.addr.016, i32 41500  %sub = add nsw i32 %i.015, -41501  %cmp = icmp sgt i32 %i.015, 41502  br i1 %cmp, label %for.body, label %for.cond.cleanup1503}1504 1505define void @vfmas(ptr %s1, ptr %s2, float %c0, i32 %N) {1506; CHECK-LABEL: vfmas:1507; CHECK:       @ %bb.0: @ %entry1508; CHECK-NEXT:    .save {r7, lr}1509; CHECK-NEXT:    push {r7, lr}1510; CHECK-NEXT:    cmp r3, #11511; CHECK-NEXT:    it lt1512; CHECK-NEXT:    poplt {r7, pc}1513; CHECK-NEXT:  .LBB35_1: @ %while.body.lr.ph1514; CHECK-NEXT:    dlstp.32 lr, r31515; CHECK-NEXT:  .LBB35_2: @ %while.body1516; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11517; CHECK-NEXT:    vldrw.u32 q0, [r1]1518; CHECK-NEXT:    vldrw.u32 q1, [r0]1519; CHECK-NEXT:    vfmas.f32 q1, q0, r21520; CHECK-NEXT:    vstrw.32 q1, [r0], #161521; CHECK-NEXT:    letp lr, .LBB35_21522; CHECK-NEXT:  @ %bb.3: @ %while.end1523; CHECK-NEXT:    pop {r7, pc}1524entry:1525  %cmp12 = icmp sgt i32 %N, 01526  br i1 %cmp12, label %while.body.lr.ph, label %while.end1527 1528while.body.lr.ph:                                 ; preds = %entry1529  %.splatinsert = insertelement <4 x float> undef, float %c0, i32 01530  %.splat = shufflevector <4 x float> %.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer1531  br label %while.body1532 1533while.body:                                       ; preds = %while.body.lr.ph, %while.body1534  %s1.addr.014 = phi ptr [ %s1, %while.body.lr.ph ], [ %add.ptr, %while.body ]1535  %N.addr.013 = phi i32 [ %N, %while.body.lr.ph ], [ %sub, %while.body ]1536  %0 = tail call <4 x i1> @llvm.arm.mve.vctp32(i32 %N.addr.013)1537  %1 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %s1.addr.014, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1538  %2 = tail call fast <4 x float> @llvm.masked.load.v4f32.p0(ptr %s2, i32 4, <4 x i1> %0, <4 x float> zeroinitializer)1539  %3 = tail call fast <4 x float> @llvm.fma.v4f32(<4 x float> %1, <4 x float> %2, <4 x float> %.splat)1540  %4 = select <4 x i1> %0, <4 x float> %3, <4 x float> %11541  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %3, ptr %s1.addr.014, i32 4, <4 x i1> %0)1542  %add.ptr = getelementptr inbounds float, ptr %s1.addr.014, i32 41543  %sub = add nsw i32 %N.addr.013, -41544  %cmp = icmp sgt i32 %N.addr.013, 41545  br i1 %cmp, label %while.body, label %while.end1546 1547while.end:                                        ; preds = %while.body, %entry1548  ret void1549}1550 1551declare <4 x i1> @llvm.arm.mve.vctp32(i32)1552declare <4 x i16> @llvm.masked.load.v4i16.p0(ptr, i32 immarg, <4 x i1>, <4 x i16>)1553declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32 immarg, <4 x i1>, <4 x i32>)1554declare <4 x float> @llvm.masked.load.v4f32.p0(ptr, i32 immarg, <4 x i1>, <4 x float>)1555declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32 immarg, <4 x i1>)1556declare void @llvm.masked.store.v4f32.p0(<4 x float>, ptr, i32 immarg, <4 x i1>)1557 1558declare <4 x i32> @llvm.arm.mve.add.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i1>, <4 x i32>)1559declare <4 x i32> @llvm.arm.mve.sub.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i1>, <4 x i32>)1560declare <4 x i32> @llvm.arm.mve.mul.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i1>, <4 x i32>)1561declare <4 x i32> @llvm.arm.mve.qadd.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>, <4 x i32>)1562declare <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32>, <4 x i32>)1563declare <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32>, <4 x i32>)1564declare <4 x i32> @llvm.arm.mve.qsub.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>, <4 x i32>)1565declare <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32>, <4 x i32>)1566declare <4 x i32> @llvm.usub.sat.v4i32(<4 x i32>, <4 x i32>)1567declare <4 x i32> @llvm.arm.mve.hadd.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>, <4 x i32>)1568declare <4 x i32> @llvm.arm.mve.vhadd.v4i32(<4 x i32>, <4 x i32>, i32)1569declare <4 x i32> @llvm.arm.mve.hsub.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>, <4 x i32>)1570declare <4 x i32> @llvm.arm.mve.vhsub.v4i32(<4 x i32>, <4 x i32>, i32)1571declare <2 x i64> @llvm.arm.mve.vqdmull.v2i64.v4i32(<4 x i32>, <4 x i32>, i32) #11572declare <4 x i32> @llvm.arm.mve.vqdmull.predicated.v4i32.v8i16.v4i1(<8 x i16>, <8 x i16>, i32, <4 x i1>, <4 x i32>)1573declare <4 x i32> @llvm.arm.mve.qdmulh.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i1>, <4 x i32>)1574declare <4 x i32> @llvm.arm.mve.vqdmulh.v4i32(<4 x i32>, <4 x i32>)1575declare <4 x i32> @llvm.arm.mve.qrdmulh.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i1>, <4 x i32>)1576declare <4 x i32> @llvm.arm.mve.vqrdmulh.v4i32(<4 x i32>, <4 x i32>)1577declare <4 x i32> @llvm.arm.mve.vmla.n.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>)1578declare <4 x i32> @llvm.arm.mve.vmlas.n.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, i32, <4 x i1>)1579declare <4 x float> @llvm.arm.mve.add.predicated.v4f32.v4i1(<4 x float>, <4 x float>, <4 x i1>, <4 x float>)1580declare <4 x float> @llvm.arm.mve.sub.predicated.v4f32.v4i1(<4 x float>, <4 x float>, <4 x i1>, <4 x float>)1581declare <4 x float> @llvm.arm.mve.mul.predicated.v4f32.v4i1(<4 x float>, <4 x float>, <4 x i1>, <4 x float>)1582declare <4 x float> @llvm.arm.mve.fma.predicated.v4f32.v4i1(<4 x float>, <4 x float>, <4 x float>, <4 x i1>)1583declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)1584