brintos

brintos / llvm-project-archived public Read only

0
0
Text · 98.9 KiB · c7661a1 Raw
2475 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 -tail-predication=enabled -verify-machineinstrs %s -o - | FileCheck %s3 4define i32 @add_i32(ptr nocapture readonly %x, i32 %n) {5; CHECK-LABEL: add_i32:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    .save {r7, lr}8; CHECK-NEXT:    push {r7, lr}9; CHECK-NEXT:    cmp r1, #110; CHECK-NEXT:    blt .LBB0_311; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader12; CHECK-NEXT:    mov r12, r013; CHECK-NEXT:    cmp r1, #414; CHECK-NEXT:    bhs .LBB0_415; CHECK-NEXT:  @ %bb.2:16; CHECK-NEXT:    movs r3, #017; CHECK-NEXT:    movs r0, #018; CHECK-NEXT:    b .LBB0_719; CHECK-NEXT:  .LBB0_3:20; CHECK-NEXT:    movs r0, #021; CHECK-NEXT:    pop {r7, pc}22; CHECK-NEXT:  .LBB0_4: @ %vector.ph23; CHECK-NEXT:    bic r3, r1, #324; CHECK-NEXT:    movs r2, #125; CHECK-NEXT:    subs r0, r3, #426; CHECK-NEXT:    add.w lr, r2, r0, lsr #227; CHECK-NEXT:    movs r0, #028; CHECK-NEXT:    mov r2, r1229; CHECK-NEXT:  .LBB0_5: @ %vector.body30; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=131; CHECK-NEXT:    vldrw.u32 q0, [r2], #1632; CHECK-NEXT:    vaddva.u32 r0, q033; CHECK-NEXT:    le lr, .LBB0_534; CHECK-NEXT:  @ %bb.6: @ %middle.block35; CHECK-NEXT:    cmp r3, r136; CHECK-NEXT:    it eq37; CHECK-NEXT:    popeq {r7, pc}38; CHECK-NEXT:  .LBB0_7: @ %for.body.preheader139; CHECK-NEXT:    sub.w lr, r1, r340; CHECK-NEXT:    add.w r2, r12, r3, lsl #241; CHECK-NEXT:  .LBB0_8: @ %for.body42; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=143; CHECK-NEXT:    ldr r1, [r2], #444; CHECK-NEXT:    add r0, r145; CHECK-NEXT:    le lr, .LBB0_846; CHECK-NEXT:  @ %bb.9: @ %for.cond.cleanup47; CHECK-NEXT:    pop {r7, pc}48entry:49  %cmp6 = icmp sgt i32 %n, 050  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup51 52for.body.preheader:                               ; preds = %entry53  %min.iters.check = icmp ult i32 %n, 454  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph55 56vector.ph:                                        ; preds = %for.body.preheader57  %n.vec = and i32 %n, -458  br label %vector.body59 60vector.body:                                      ; preds = %vector.body, %vector.ph61  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]62  %vec.phi = phi i32 [ 0, %vector.ph ], [ %3, %vector.body ]63  %0 = getelementptr inbounds i32, ptr %x, i32 %index64  %1 = bitcast ptr %0 to ptr65  %wide.load = load <4 x i32>, ptr %1, align 466  %2 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %wide.load)67  %3 = add i32 %2, %vec.phi68  %index.next = add i32 %index, 469  %4 = icmp eq i32 %index.next, %n.vec70  br i1 %4, label %middle.block, label %vector.body71 72middle.block:                                     ; preds = %vector.body73  %cmp.n = icmp eq i32 %n.vec, %n74  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader175 76for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader77  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]78  %r.07.ph = phi i32 [ 0, %for.body.preheader ], [ %3, %middle.block ]79  br label %for.body80 81for.body:                                         ; preds = %for.body.preheader1, %for.body82  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]83  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]84  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.0885  %5 = load i32, ptr %arrayidx, align 486  %add = add nsw i32 %5, %r.0787  %inc = add nuw nsw i32 %i.08, 188  %exitcond = icmp eq i32 %inc, %n89  br i1 %exitcond, label %for.cond.cleanup, label %for.body90 91for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry92  %r.0.lcssa = phi i32 [ 0, %entry ], [ %3, %middle.block ], [ %add, %for.body ]93  ret i32 %r.0.lcssa94}95 96define i32 @mul_i32(ptr nocapture readonly %x, i32 %n) {97; CHECK-LABEL: mul_i32:98; CHECK:       @ %bb.0: @ %entry99; CHECK-NEXT:    .save {r4, lr}100; CHECK-NEXT:    push {r4, lr}101; CHECK-NEXT:    movs r2, #1102; CHECK-NEXT:    cmp r1, #1103; CHECK-NEXT:    blt .LBB1_8104; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader105; CHECK-NEXT:    cmp r1, #4106; CHECK-NEXT:    bhs .LBB1_3107; CHECK-NEXT:  @ %bb.2:108; CHECK-NEXT:    mov.w r12, #0109; CHECK-NEXT:    b .LBB1_6110; CHECK-NEXT:  .LBB1_3: @ %vector.ph111; CHECK-NEXT:    bic r12, r1, #3112; CHECK-NEXT:    vmov.i32 q0, #0x1113; CHECK-NEXT:    sub.w r3, r12, #4114; CHECK-NEXT:    add.w lr, r2, r3, lsr #2115; CHECK-NEXT:    mov r2, r0116; CHECK-NEXT:  .LBB1_4: @ %vector.body117; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1118; CHECK-NEXT:    vldrw.u32 q1, [r2], #16119; CHECK-NEXT:    vmul.i32 q0, q1, q0120; CHECK-NEXT:    le lr, .LBB1_4121; CHECK-NEXT:  @ %bb.5: @ %middle.block122; CHECK-NEXT:    vmov lr, r3, d1123; CHECK-NEXT:    cmp r12, r1124; CHECK-NEXT:    vmov r2, r4, d0125; CHECK-NEXT:    mul r3, lr, r3126; CHECK-NEXT:    mul r2, r4, r2127; CHECK-NEXT:    mul r2, r3, r2128; CHECK-NEXT:    beq .LBB1_8129; CHECK-NEXT:  .LBB1_6: @ %for.body.preheader1130; CHECK-NEXT:    sub.w lr, r1, r12131; CHECK-NEXT:    add.w r0, r0, r12, lsl #2132; CHECK-NEXT:  .LBB1_7: @ %for.body133; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1134; CHECK-NEXT:    ldr r1, [r0], #4135; CHECK-NEXT:    muls r2, r1, r2136; CHECK-NEXT:    le lr, .LBB1_7137; CHECK-NEXT:  .LBB1_8: @ %for.cond.cleanup138; CHECK-NEXT:    mov r0, r2139; CHECK-NEXT:    pop {r4, pc}140entry:141  %cmp6 = icmp sgt i32 %n, 0142  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup143 144for.body.preheader:                               ; preds = %entry145  %min.iters.check = icmp ult i32 %n, 4146  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph147 148vector.ph:                                        ; preds = %for.body.preheader149  %n.vec = and i32 %n, -4150  br label %vector.body151 152vector.body:                                      ; preds = %vector.body, %vector.ph153  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]154  %vec.phi = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %vector.ph ], [ %2, %vector.body ]155  %0 = getelementptr inbounds i32, ptr %x, i32 %index156  %1 = bitcast ptr %0 to ptr157  %wide.load = load <4 x i32>, ptr %1, align 4158  %2 = mul <4 x i32> %wide.load, %vec.phi159  %index.next = add i32 %index, 4160  %3 = icmp eq i32 %index.next, %n.vec161  br i1 %3, label %middle.block, label %vector.body162 163middle.block:                                     ; preds = %vector.body164  %4 = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %2)165  %cmp.n = icmp eq i32 %n.vec, %n166  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1167 168for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader169  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]170  %r.07.ph = phi i32 [ 1, %for.body.preheader ], [ %4, %middle.block ]171  br label %for.body172 173for.body:                                         ; preds = %for.body.preheader1, %for.body174  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]175  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]176  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.08177  %5 = load i32, ptr %arrayidx, align 4178  %add = mul nsw i32 %5, %r.07179  %inc = add nuw nsw i32 %i.08, 1180  %exitcond = icmp eq i32 %inc, %n181  br i1 %exitcond, label %for.cond.cleanup, label %for.body182 183for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry184  %r.0.lcssa = phi i32 [ 1, %entry ], [ %4, %middle.block ], [ %add, %for.body ]185  ret i32 %r.0.lcssa186}187 188define i32 @and_i32(ptr nocapture readonly %x, i32 %n) {189; CHECK-LABEL: and_i32:190; CHECK:       @ %bb.0: @ %entry191; CHECK-NEXT:    .save {r4, lr}192; CHECK-NEXT:    push {r4, lr}193; CHECK-NEXT:    cmp r1, #1194; CHECK-NEXT:    blt .LBB2_3195; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader196; CHECK-NEXT:    cmp r1, #4197; CHECK-NEXT:    bhs .LBB2_4198; CHECK-NEXT:  @ %bb.2:199; CHECK-NEXT:    mov.w r2, #-1200; CHECK-NEXT:    movs r3, #0201; CHECK-NEXT:    b .LBB2_7202; CHECK-NEXT:  .LBB2_3:203; CHECK-NEXT:    mov.w r2, #-1204; CHECK-NEXT:    mov r0, r2205; CHECK-NEXT:    pop {r4, pc}206; CHECK-NEXT:  .LBB2_4: @ %vector.ph207; CHECK-NEXT:    bic r3, r1, #3208; CHECK-NEXT:    movs r2, #1209; CHECK-NEXT:    sub.w r12, r3, #4210; CHECK-NEXT:    vmov.i8 q0, #0xff211; CHECK-NEXT:    add.w lr, r2, r12, lsr #2212; CHECK-NEXT:    mov r2, r0213; CHECK-NEXT:  .LBB2_5: @ %vector.body214; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1215; CHECK-NEXT:    vldrw.u32 q1, [r2], #16216; CHECK-NEXT:    vand q0, q1, q0217; CHECK-NEXT:    le lr, .LBB2_5218; CHECK-NEXT:  @ %bb.6: @ %middle.block219; CHECK-NEXT:    vmov lr, r12, d1220; CHECK-NEXT:    cmp r3, r1221; CHECK-NEXT:    vmov r2, r4, d0222; CHECK-NEXT:    and.w r12, r12, lr223; CHECK-NEXT:    and.w r2, r2, r4224; CHECK-NEXT:    and.w r2, r2, r12225; CHECK-NEXT:    beq .LBB2_9226; CHECK-NEXT:  .LBB2_7: @ %for.body.preheader1227; CHECK-NEXT:    sub.w lr, r1, r3228; CHECK-NEXT:    add.w r0, r0, r3, lsl #2229; CHECK-NEXT:  .LBB2_8: @ %for.body230; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1231; CHECK-NEXT:    ldr r1, [r0], #4232; CHECK-NEXT:    ands r2, r1233; CHECK-NEXT:    le lr, .LBB2_8234; CHECK-NEXT:  .LBB2_9: @ %for.cond.cleanup235; CHECK-NEXT:    mov r0, r2236; CHECK-NEXT:    pop {r4, pc}237entry:238  %cmp6 = icmp sgt i32 %n, 0239  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup240 241for.body.preheader:                               ; preds = %entry242  %min.iters.check = icmp ult i32 %n, 4243  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph244 245vector.ph:                                        ; preds = %for.body.preheader246  %n.vec = and i32 %n, -4247  br label %vector.body248 249vector.body:                                      ; preds = %vector.body, %vector.ph250  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]251  %vec.phi = phi <4 x i32> [ <i32 -1, i32 -1, i32 -1, i32 -1>, %vector.ph ], [ %2, %vector.body ]252  %0 = getelementptr inbounds i32, ptr %x, i32 %index253  %1 = bitcast ptr %0 to ptr254  %wide.load = load <4 x i32>, ptr %1, align 4255  %2 = and <4 x i32> %wide.load, %vec.phi256  %index.next = add i32 %index, 4257  %3 = icmp eq i32 %index.next, %n.vec258  br i1 %3, label %middle.block, label %vector.body259 260middle.block:                                     ; preds = %vector.body261  %4 = call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %2)262  %cmp.n = icmp eq i32 %n.vec, %n263  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1264 265for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader266  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]267  %r.07.ph = phi i32 [ -1, %for.body.preheader ], [ %4, %middle.block ]268  br label %for.body269 270for.body:                                         ; preds = %for.body.preheader1, %for.body271  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]272  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]273  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.08274  %5 = load i32, ptr %arrayidx, align 4275  %add = and i32 %5, %r.07276  %inc = add nuw nsw i32 %i.08, 1277  %exitcond = icmp eq i32 %inc, %n278  br i1 %exitcond, label %for.cond.cleanup, label %for.body279 280for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry281  %r.0.lcssa = phi i32 [ -1, %entry ], [ %4, %middle.block ], [ %add, %for.body ]282  ret i32 %r.0.lcssa283}284 285define i32 @or_i32(ptr nocapture readonly %x, i32 %n) {286; CHECK-LABEL: or_i32:287; CHECK:       @ %bb.0: @ %entry288; CHECK-NEXT:    .save {r4, lr}289; CHECK-NEXT:    push {r4, lr}290; CHECK-NEXT:    cmp r1, #1291; CHECK-NEXT:    blt .LBB3_3292; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader293; CHECK-NEXT:    cmp r1, #4294; CHECK-NEXT:    bhs .LBB3_4295; CHECK-NEXT:  @ %bb.2:296; CHECK-NEXT:    movs r3, #0297; CHECK-NEXT:    movs r2, #0298; CHECK-NEXT:    b .LBB3_7299; CHECK-NEXT:  .LBB3_3:300; CHECK-NEXT:    movs r2, #0301; CHECK-NEXT:    mov r0, r2302; CHECK-NEXT:    pop {r4, pc}303; CHECK-NEXT:  .LBB3_4: @ %vector.ph304; CHECK-NEXT:    bic r3, r1, #3305; CHECK-NEXT:    movs r2, #1306; CHECK-NEXT:    sub.w r12, r3, #4307; CHECK-NEXT:    vmov.i32 q0, #0x0308; CHECK-NEXT:    add.w lr, r2, r12, lsr #2309; CHECK-NEXT:    mov r2, r0310; CHECK-NEXT:  .LBB3_5: @ %vector.body311; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1312; CHECK-NEXT:    vldrw.u32 q1, [r2], #16313; CHECK-NEXT:    vorr q0, q1, q0314; CHECK-NEXT:    le lr, .LBB3_5315; CHECK-NEXT:  @ %bb.6: @ %middle.block316; CHECK-NEXT:    vmov lr, r12, d1317; CHECK-NEXT:    cmp r3, r1318; CHECK-NEXT:    vmov r2, r4, d0319; CHECK-NEXT:    orr.w r12, r12, lr320; CHECK-NEXT:    orr.w r2, r2, r4321; CHECK-NEXT:    orr.w r2, r2, r12322; CHECK-NEXT:    beq .LBB3_9323; CHECK-NEXT:  .LBB3_7: @ %for.body.preheader1324; CHECK-NEXT:    sub.w lr, r1, r3325; CHECK-NEXT:    add.w r0, r0, r3, lsl #2326; CHECK-NEXT:  .LBB3_8: @ %for.body327; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1328; CHECK-NEXT:    ldr r1, [r0], #4329; CHECK-NEXT:    orrs r2, r1330; CHECK-NEXT:    le lr, .LBB3_8331; CHECK-NEXT:  .LBB3_9: @ %for.cond.cleanup332; CHECK-NEXT:    mov r0, r2333; CHECK-NEXT:    pop {r4, pc}334entry:335  %cmp6 = icmp sgt i32 %n, 0336  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup337 338for.body.preheader:                               ; preds = %entry339  %min.iters.check = icmp ult i32 %n, 4340  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph341 342vector.ph:                                        ; preds = %for.body.preheader343  %n.vec = and i32 %n, -4344  br label %vector.body345 346vector.body:                                      ; preds = %vector.body, %vector.ph347  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]348  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %2, %vector.body ]349  %0 = getelementptr inbounds i32, ptr %x, i32 %index350  %1 = bitcast ptr %0 to ptr351  %wide.load = load <4 x i32>, ptr %1, align 4352  %2 = or <4 x i32> %wide.load, %vec.phi353  %index.next = add i32 %index, 4354  %3 = icmp eq i32 %index.next, %n.vec355  br i1 %3, label %middle.block, label %vector.body356 357middle.block:                                     ; preds = %vector.body358  %4 = call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %2)359  %cmp.n = icmp eq i32 %n.vec, %n360  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1361 362for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader363  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]364  %r.07.ph = phi i32 [ 0, %for.body.preheader ], [ %4, %middle.block ]365  br label %for.body366 367for.body:                                         ; preds = %for.body.preheader1, %for.body368  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]369  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]370  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.08371  %5 = load i32, ptr %arrayidx, align 4372  %add = or i32 %5, %r.07373  %inc = add nuw nsw i32 %i.08, 1374  %exitcond = icmp eq i32 %inc, %n375  br i1 %exitcond, label %for.cond.cleanup, label %for.body376 377for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry378  %r.0.lcssa = phi i32 [ 0, %entry ], [ %4, %middle.block ], [ %add, %for.body ]379  ret i32 %r.0.lcssa380}381 382define i32 @xor_i32(ptr nocapture readonly %x, i32 %n) {383; CHECK-LABEL: xor_i32:384; CHECK:       @ %bb.0: @ %entry385; CHECK-NEXT:    .save {r4, lr}386; CHECK-NEXT:    push {r4, lr}387; CHECK-NEXT:    cmp r1, #1388; CHECK-NEXT:    blt .LBB4_3389; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader390; CHECK-NEXT:    cmp r1, #4391; CHECK-NEXT:    bhs .LBB4_4392; CHECK-NEXT:  @ %bb.2:393; CHECK-NEXT:    movs r3, #0394; CHECK-NEXT:    movs r2, #0395; CHECK-NEXT:    b .LBB4_7396; CHECK-NEXT:  .LBB4_3:397; CHECK-NEXT:    movs r2, #0398; CHECK-NEXT:    mov r0, r2399; CHECK-NEXT:    pop {r4, pc}400; CHECK-NEXT:  .LBB4_4: @ %vector.ph401; CHECK-NEXT:    bic r3, r1, #3402; CHECK-NEXT:    movs r2, #1403; CHECK-NEXT:    sub.w r12, r3, #4404; CHECK-NEXT:    vmov.i32 q0, #0x0405; CHECK-NEXT:    add.w lr, r2, r12, lsr #2406; CHECK-NEXT:    mov r2, r0407; CHECK-NEXT:  .LBB4_5: @ %vector.body408; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1409; CHECK-NEXT:    vldrw.u32 q1, [r2], #16410; CHECK-NEXT:    veor q0, q1, q0411; CHECK-NEXT:    le lr, .LBB4_5412; CHECK-NEXT:  @ %bb.6: @ %middle.block413; CHECK-NEXT:    vmov lr, r12, d1414; CHECK-NEXT:    cmp r3, r1415; CHECK-NEXT:    vmov r2, r4, d0416; CHECK-NEXT:    eor.w r12, r12, lr417; CHECK-NEXT:    eor.w r2, r2, r4418; CHECK-NEXT:    eor.w r2, r2, r12419; CHECK-NEXT:    beq .LBB4_9420; CHECK-NEXT:  .LBB4_7: @ %for.body.preheader1421; CHECK-NEXT:    sub.w lr, r1, r3422; CHECK-NEXT:    add.w r0, r0, r3, lsl #2423; CHECK-NEXT:  .LBB4_8: @ %for.body424; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1425; CHECK-NEXT:    ldr r1, [r0], #4426; CHECK-NEXT:    eors r2, r1427; CHECK-NEXT:    le lr, .LBB4_8428; CHECK-NEXT:  .LBB4_9: @ %for.cond.cleanup429; CHECK-NEXT:    mov r0, r2430; CHECK-NEXT:    pop {r4, pc}431entry:432  %cmp6 = icmp sgt i32 %n, 0433  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup434 435for.body.preheader:                               ; preds = %entry436  %min.iters.check = icmp ult i32 %n, 4437  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph438 439vector.ph:                                        ; preds = %for.body.preheader440  %n.vec = and i32 %n, -4441  br label %vector.body442 443vector.body:                                      ; preds = %vector.body, %vector.ph444  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]445  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %2, %vector.body ]446  %0 = getelementptr inbounds i32, ptr %x, i32 %index447  %1 = bitcast ptr %0 to ptr448  %wide.load = load <4 x i32>, ptr %1, align 4449  %2 = xor <4 x i32> %wide.load, %vec.phi450  %index.next = add i32 %index, 4451  %3 = icmp eq i32 %index.next, %n.vec452  br i1 %3, label %middle.block, label %vector.body453 454middle.block:                                     ; preds = %vector.body455  %4 = call i32 @llvm.vector.reduce.xor.v4i32(<4 x i32> %2)456  %cmp.n = icmp eq i32 %n.vec, %n457  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1458 459for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader460  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]461  %r.07.ph = phi i32 [ 0, %for.body.preheader ], [ %4, %middle.block ]462  br label %for.body463 464for.body:                                         ; preds = %for.body.preheader1, %for.body465  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]466  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]467  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.08468  %5 = load i32, ptr %arrayidx, align 4469  %add = xor i32 %5, %r.07470  %inc = add nuw nsw i32 %i.08, 1471  %exitcond = icmp eq i32 %inc, %n472  br i1 %exitcond, label %for.cond.cleanup, label %for.body473 474for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry475  %r.0.lcssa = phi i32 [ 0, %entry ], [ %4, %middle.block ], [ %add, %for.body ]476  ret i32 %r.0.lcssa477}478 479define float @fadd_f32(ptr nocapture readonly %x, i32 %n) {480; CHECK-LABEL: fadd_f32:481; CHECK:       @ %bb.0: @ %entry482; CHECK-NEXT:    .save {r7, lr}483; CHECK-NEXT:    push {r7, lr}484; CHECK-NEXT:    cmp r1, #1485; CHECK-NEXT:    blt .LBB5_3486; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader487; CHECK-NEXT:    cmp r1, #4488; CHECK-NEXT:    bhs .LBB5_4489; CHECK-NEXT:  @ %bb.2:490; CHECK-NEXT:    vldr s0, .LCPI5_0491; CHECK-NEXT:    movs r2, #0492; CHECK-NEXT:    b .LBB5_7493; CHECK-NEXT:  .LBB5_3:494; CHECK-NEXT:    vldr s0, .LCPI5_0495; CHECK-NEXT:    vmov r0, s0496; CHECK-NEXT:    pop {r7, pc}497; CHECK-NEXT:  .LBB5_4: @ %vector.ph498; CHECK-NEXT:    bic r2, r1, #3499; CHECK-NEXT:    movs r3, #1500; CHECK-NEXT:    sub.w r12, r2, #4501; CHECK-NEXT:    vmov.i32 q0, #0x0502; CHECK-NEXT:    add.w lr, r3, r12, lsr #2503; CHECK-NEXT:    mov r3, r0504; CHECK-NEXT:  .LBB5_5: @ %vector.body505; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1506; CHECK-NEXT:    vldrw.u32 q1, [r3], #16507; CHECK-NEXT:    vadd.f32 q0, q1, q0508; CHECK-NEXT:    le lr, .LBB5_5509; CHECK-NEXT:  @ %bb.6: @ %middle.block510; CHECK-NEXT:    vadd.f32 s2, s2, s3511; CHECK-NEXT:    cmp r2, r1512; CHECK-NEXT:    vadd.f32 s0, s0, s1513; CHECK-NEXT:    vadd.f32 s0, s0, s2514; CHECK-NEXT:    beq .LBB5_9515; CHECK-NEXT:  .LBB5_7: @ %for.body.preheader1516; CHECK-NEXT:    sub.w lr, r1, r2517; CHECK-NEXT:    add.w r0, r0, r2, lsl #2518; CHECK-NEXT:  .LBB5_8: @ %for.body519; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1520; CHECK-NEXT:    vldmia r0!, {s2}521; CHECK-NEXT:    vadd.f32 s0, s2, s0522; CHECK-NEXT:    le lr, .LBB5_8523; CHECK-NEXT:  .LBB5_9: @ %for.cond.cleanup524; CHECK-NEXT:    vmov r0, s0525; CHECK-NEXT:    pop {r7, pc}526; CHECK-NEXT:    .p2align 2527; CHECK-NEXT:  @ %bb.10:528; CHECK-NEXT:  .LCPI5_0:529; CHECK-NEXT:    .long 0x00000000 @ float 0530entry:531  %cmp6 = icmp sgt i32 %n, 0532  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup533 534for.body.preheader:                               ; preds = %entry535  %min.iters.check = icmp ult i32 %n, 4536  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph537 538vector.ph:                                        ; preds = %for.body.preheader539  %n.vec = and i32 %n, -4540  br label %vector.body541 542vector.body:                                      ; preds = %vector.body, %vector.ph543  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]544  %vec.phi = phi <4 x float> [ zeroinitializer, %vector.ph ], [ %2, %vector.body ]545  %0 = getelementptr inbounds float, ptr %x, i32 %index546  %1 = bitcast ptr %0 to ptr547  %wide.load = load <4 x float>, ptr %1, align 4548  %2 = fadd fast <4 x float> %wide.load, %vec.phi549  %index.next = add i32 %index, 4550  %3 = icmp eq i32 %index.next, %n.vec551  br i1 %3, label %middle.block, label %vector.body552 553middle.block:                                     ; preds = %vector.body554  %4 = call fast float @llvm.vector.reduce.fadd.f32.v4f32(float 0.000000e+00, <4 x float> %2)555  %cmp.n = icmp eq i32 %n.vec, %n556  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1557 558for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader559  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]560  %r.07.ph = phi float [ 0.000000e+00, %for.body.preheader ], [ %4, %middle.block ]561  br label %for.body562 563for.body:                                         ; preds = %for.body.preheader1, %for.body564  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]565  %r.07 = phi float [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]566  %arrayidx = getelementptr inbounds float, ptr %x, i32 %i.08567  %5 = load float, ptr %arrayidx, align 4568  %add = fadd fast float %5, %r.07569  %inc = add nuw nsw i32 %i.08, 1570  %exitcond = icmp eq i32 %inc, %n571  br i1 %exitcond, label %for.cond.cleanup, label %for.body572 573for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry574  %r.0.lcssa = phi float [ 0.000000e+00, %entry ], [ %4, %middle.block ], [ %add, %for.body ]575  ret float %r.0.lcssa576}577 578define float @fmul_f32(ptr nocapture readonly %x, i32 %n) {579; CHECK-LABEL: fmul_f32:580; CHECK:       @ %bb.0: @ %entry581; CHECK-NEXT:    .save {r7, lr}582; CHECK-NEXT:    push {r7, lr}583; CHECK-NEXT:    cmp r1, #1584; CHECK-NEXT:    blt .LBB6_3585; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader586; CHECK-NEXT:    cmp r1, #4587; CHECK-NEXT:    bhs .LBB6_4588; CHECK-NEXT:  @ %bb.2:589; CHECK-NEXT:    vmov.f32 s0, #1.000000e+00590; CHECK-NEXT:    movs r2, #0591; CHECK-NEXT:    b .LBB6_7592; CHECK-NEXT:  .LBB6_3:593; CHECK-NEXT:    vmov.f32 s0, #1.000000e+00594; CHECK-NEXT:    vmov r0, s0595; CHECK-NEXT:    pop {r7, pc}596; CHECK-NEXT:  .LBB6_4: @ %vector.ph597; CHECK-NEXT:    bic r2, r1, #3598; CHECK-NEXT:    movs r3, #1599; CHECK-NEXT:    sub.w r12, r2, #4600; CHECK-NEXT:    vmov.f32 q0, #1.000000e+00601; CHECK-NEXT:    add.w lr, r3, r12, lsr #2602; CHECK-NEXT:    mov r3, r0603; CHECK-NEXT:  .LBB6_5: @ %vector.body604; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1605; CHECK-NEXT:    vldrw.u32 q1, [r3], #16606; CHECK-NEXT:    vmul.f32 q0, q1, q0607; CHECK-NEXT:    le lr, .LBB6_5608; CHECK-NEXT:  @ %bb.6: @ %middle.block609; CHECK-NEXT:    vmul.f32 s2, s2, s3610; CHECK-NEXT:    cmp r2, r1611; CHECK-NEXT:    vmul.f32 s0, s0, s1612; CHECK-NEXT:    vmul.f32 s0, s0, s2613; CHECK-NEXT:    beq .LBB6_9614; CHECK-NEXT:  .LBB6_7: @ %for.body.preheader1615; CHECK-NEXT:    sub.w lr, r1, r2616; CHECK-NEXT:    add.w r0, r0, r2, lsl #2617; CHECK-NEXT:  .LBB6_8: @ %for.body618; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1619; CHECK-NEXT:    vldmia r0!, {s2}620; CHECK-NEXT:    vmul.f32 s0, s2, s0621; CHECK-NEXT:    le lr, .LBB6_8622; CHECK-NEXT:  .LBB6_9: @ %for.cond.cleanup623; CHECK-NEXT:    vmov r0, s0624; CHECK-NEXT:    pop {r7, pc}625entry:626  %cmp6 = icmp sgt i32 %n, 0627  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup628 629for.body.preheader:                               ; preds = %entry630  %min.iters.check = icmp ult i32 %n, 4631  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph632 633vector.ph:                                        ; preds = %for.body.preheader634  %n.vec = and i32 %n, -4635  br label %vector.body636 637vector.body:                                      ; preds = %vector.body, %vector.ph638  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]639  %vec.phi = phi <4 x float> [ <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %vector.ph ], [ %2, %vector.body ]640  %0 = getelementptr inbounds float, ptr %x, i32 %index641  %1 = bitcast ptr %0 to ptr642  %wide.load = load <4 x float>, ptr %1, align 4643  %2 = fmul fast <4 x float> %wide.load, %vec.phi644  %index.next = add i32 %index, 4645  %3 = icmp eq i32 %index.next, %n.vec646  br i1 %3, label %middle.block, label %vector.body647 648middle.block:                                     ; preds = %vector.body649  %4 = call fast float @llvm.vector.reduce.fmul.f32.v4f32(float 1.000000e+00, <4 x float> %2)650  %cmp.n = icmp eq i32 %n.vec, %n651  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1652 653for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader654  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]655  %r.07.ph = phi float [ 1.000000e+00, %for.body.preheader ], [ %4, %middle.block ]656  br label %for.body657 658for.body:                                         ; preds = %for.body.preheader1, %for.body659  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]660  %r.07 = phi float [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]661  %arrayidx = getelementptr inbounds float, ptr %x, i32 %i.08662  %5 = load float, ptr %arrayidx, align 4663  %add = fmul fast float %5, %r.07664  %inc = add nuw nsw i32 %i.08, 1665  %exitcond = icmp eq i32 %inc, %n666  br i1 %exitcond, label %for.cond.cleanup, label %for.body667 668for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry669  %r.0.lcssa = phi float [ 1.000000e+00, %entry ], [ %4, %middle.block ], [ %add, %for.body ]670  ret float %r.0.lcssa671}672 673define i32 @smin_i32(ptr nocapture readonly %x, i32 %n) {674; CHECK-LABEL: smin_i32:675; CHECK:       @ %bb.0: @ %entry676; CHECK-NEXT:    .save {r7, lr}677; CHECK-NEXT:    push {r7, lr}678; CHECK-NEXT:    cmp r1, #1679; CHECK-NEXT:    blt .LBB7_3680; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader681; CHECK-NEXT:    cmp r1, #4682; CHECK-NEXT:    bhs .LBB7_4683; CHECK-NEXT:  @ %bb.2:684; CHECK-NEXT:    mvn r2, #-2147483648685; CHECK-NEXT:    movs r3, #0686; CHECK-NEXT:    b .LBB7_7687; CHECK-NEXT:  .LBB7_3:688; CHECK-NEXT:    mvn r2, #-2147483648689; CHECK-NEXT:    mov r0, r2690; CHECK-NEXT:    pop {r7, pc}691; CHECK-NEXT:  .LBB7_4: @ %vector.ph692; CHECK-NEXT:    bic r3, r1, #3693; CHECK-NEXT:    movs r2, #1694; CHECK-NEXT:    sub.w r12, r3, #4695; CHECK-NEXT:    vmvn.i32 q0, #0x80000000696; CHECK-NEXT:    add.w lr, r2, r12, lsr #2697; CHECK-NEXT:    mov r2, r0698; CHECK-NEXT:  .LBB7_5: @ %vector.body699; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1700; CHECK-NEXT:    vldrw.u32 q1, [r2], #16701; CHECK-NEXT:    vmin.s32 q0, q0, q1702; CHECK-NEXT:    le lr, .LBB7_5703; CHECK-NEXT:  @ %bb.6: @ %middle.block704; CHECK-NEXT:    mvn r2, #-2147483648705; CHECK-NEXT:    cmp r3, r1706; CHECK-NEXT:    vminv.s32 r2, q0707; CHECK-NEXT:    beq .LBB7_9708; CHECK-NEXT:  .LBB7_7: @ %for.body.preheader1709; CHECK-NEXT:    sub.w lr, r1, r3710; CHECK-NEXT:    add.w r0, r0, r3, lsl #2711; CHECK-NEXT:  .LBB7_8: @ %for.body712; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1713; CHECK-NEXT:    ldr r1, [r0], #4714; CHECK-NEXT:    cmp r2, r1715; CHECK-NEXT:    csel r2, r2, r1, lt716; CHECK-NEXT:    le lr, .LBB7_8717; CHECK-NEXT:  .LBB7_9: @ %for.cond.cleanup718; CHECK-NEXT:    mov r0, r2719; CHECK-NEXT:    pop {r7, pc}720entry:721  %cmp6 = icmp sgt i32 %n, 0722  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup723 724for.body.preheader:                               ; preds = %entry725  %min.iters.check = icmp ult i32 %n, 4726  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph727 728vector.ph:                                        ; preds = %for.body.preheader729  %n.vec = and i32 %n, -4730  br label %vector.body731 732vector.body:                                      ; preds = %vector.body, %vector.ph733  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]734  %vec.phi = phi <4 x i32> [ <i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647>, %vector.ph ], [ %3, %vector.body ]735  %0 = getelementptr inbounds i32, ptr %x, i32 %index736  %1 = bitcast ptr %0 to ptr737  %wide.load = load <4 x i32>, ptr %1, align 4738  %2 = icmp slt <4 x i32> %vec.phi, %wide.load739  %3 = select <4 x i1> %2, <4 x i32> %vec.phi, <4 x i32> %wide.load740  %index.next = add i32 %index, 4741  %4 = icmp eq i32 %index.next, %n.vec742  br i1 %4, label %middle.block, label %vector.body743 744middle.block:                                     ; preds = %vector.body745  %5 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %3)746  %cmp.n = icmp eq i32 %n.vec, %n747  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1748 749for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader750  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]751  %r.07.ph = phi i32 [ 2147483647, %for.body.preheader ], [ %5, %middle.block ]752  br label %for.body753 754for.body:                                         ; preds = %for.body.preheader1, %for.body755  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]756  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]757  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.08758  %6 = load i32, ptr %arrayidx, align 4759  %c = icmp slt i32 %r.07, %6760  %add = select i1 %c, i32 %r.07, i32 %6761  %inc = add nuw nsw i32 %i.08, 1762  %exitcond = icmp eq i32 %inc, %n763  br i1 %exitcond, label %for.cond.cleanup, label %for.body764 765for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry766  %r.0.lcssa = phi i32 [ 2147483647, %entry ], [ %5, %middle.block ], [ %add, %for.body ]767  ret i32 %r.0.lcssa768}769 770define i32 @smin_i32_inloop(ptr nocapture readonly %x, i32 %n) {771; CHECK-LABEL: smin_i32_inloop:772; CHECK:       @ %bb.0: @ %entry773; CHECK-NEXT:    .save {r7, lr}774; CHECK-NEXT:    push {r7, lr}775; CHECK-NEXT:    cmp r1, #1776; CHECK-NEXT:    blt .LBB8_3777; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader778; CHECK-NEXT:    mov r12, r0779; CHECK-NEXT:    cmp r1, #4780; CHECK-NEXT:    bhs .LBB8_4781; CHECK-NEXT:  @ %bb.2:782; CHECK-NEXT:    mvn r0, #-2147483648783; CHECK-NEXT:    movs r3, #0784; CHECK-NEXT:    b .LBB8_7785; CHECK-NEXT:  .LBB8_3:786; CHECK-NEXT:    mvn r0, #-2147483648787; CHECK-NEXT:    pop {r7, pc}788; CHECK-NEXT:  .LBB8_4: @ %vector.ph789; CHECK-NEXT:    bic r3, r1, #3790; CHECK-NEXT:    movs r2, #1791; CHECK-NEXT:    subs r0, r3, #4792; CHECK-NEXT:    add.w lr, r2, r0, lsr #2793; CHECK-NEXT:    mvn r0, #-2147483648794; CHECK-NEXT:    mov r2, r12795; CHECK-NEXT:  .LBB8_5: @ %vector.body796; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1797; CHECK-NEXT:    vldrw.u32 q0, [r2], #16798; CHECK-NEXT:    vminv.s32 r0, q0799; CHECK-NEXT:    le lr, .LBB8_5800; CHECK-NEXT:  @ %bb.6: @ %middle.block801; CHECK-NEXT:    cmp r3, r1802; CHECK-NEXT:    it eq803; CHECK-NEXT:    popeq {r7, pc}804; CHECK-NEXT:  .LBB8_7: @ %for.body.preheader1805; CHECK-NEXT:    sub.w lr, r1, r3806; CHECK-NEXT:    add.w r2, r12, r3, lsl #2807; CHECK-NEXT:  .LBB8_8: @ %for.body808; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1809; CHECK-NEXT:    ldr r1, [r2], #4810; CHECK-NEXT:    cmp r0, r1811; CHECK-NEXT:    csel r0, r0, r1, lt812; CHECK-NEXT:    le lr, .LBB8_8813; CHECK-NEXT:  @ %bb.9: @ %for.cond.cleanup814; CHECK-NEXT:    pop {r7, pc}815entry:816  %cmp6 = icmp sgt i32 %n, 0817  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup818 819for.body.preheader:                               ; preds = %entry820  %min.iters.check = icmp ult i32 %n, 4821  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph822 823vector.ph:                                        ; preds = %for.body.preheader824  %n.vec = and i32 %n, -4825  br label %vector.body826 827vector.body:                                      ; preds = %vector.body, %vector.ph828  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]829  %vec.phi = phi i32 [ 2147483647, %vector.ph ], [ %3, %vector.body ]830  %0 = getelementptr inbounds i32, ptr %x, i32 %index831  %1 = bitcast ptr %0 to ptr832  %wide.load = load <4 x i32>, ptr %1, align 4833  %l5 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %wide.load)834  %2 = icmp slt i32 %vec.phi, %l5835  %3 = select i1 %2, i32 %vec.phi, i32 %l5836  %index.next = add i32 %index, 4837  %4 = icmp eq i32 %index.next, %n.vec838  br i1 %4, label %middle.block, label %vector.body839 840middle.block:                                     ; preds = %vector.body841  %5 = phi i32 [ %3, %vector.body ]842  %cmp.n = icmp eq i32 %n.vec, %n843  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1844 845for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader846  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]847  %r.07.ph = phi i32 [ 2147483647, %for.body.preheader ], [ %5, %middle.block ]848  br label %for.body849 850for.body:                                         ; preds = %for.body.preheader1, %for.body851  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]852  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]853  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.08854  %6 = load i32, ptr %arrayidx, align 4855  %c = icmp slt i32 %r.07, %6856  %add = select i1 %c, i32 %r.07, i32 %6857  %inc = add nuw nsw i32 %i.08, 1858  %exitcond = icmp eq i32 %inc, %n859  br i1 %exitcond, label %for.cond.cleanup, label %for.body860 861for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry862  %r.0.lcssa = phi i32 [ 2147483647, %entry ], [ %5, %middle.block ], [ %add, %for.body ]863  ret i32 %r.0.lcssa864}865 866define i32 @smax_i32(ptr nocapture readonly %x, i32 %n) {867; CHECK-LABEL: smax_i32:868; CHECK:       @ %bb.0: @ %entry869; CHECK-NEXT:    .save {r7, lr}870; CHECK-NEXT:    push {r7, lr}871; CHECK-NEXT:    cmp r1, #1872; CHECK-NEXT:    blt .LBB9_3873; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader874; CHECK-NEXT:    cmp r1, #4875; CHECK-NEXT:    bhs .LBB9_4876; CHECK-NEXT:  @ %bb.2:877; CHECK-NEXT:    mov.w r2, #-2147483648878; CHECK-NEXT:    movs r3, #0879; CHECK-NEXT:    b .LBB9_7880; CHECK-NEXT:  .LBB9_3:881; CHECK-NEXT:    mov.w r2, #-2147483648882; CHECK-NEXT:    mov r0, r2883; CHECK-NEXT:    pop {r7, pc}884; CHECK-NEXT:  .LBB9_4: @ %vector.ph885; CHECK-NEXT:    bic r3, r1, #3886; CHECK-NEXT:    movs r2, #1887; CHECK-NEXT:    sub.w r12, r3, #4888; CHECK-NEXT:    vmov.i32 q0, #0x80000000889; CHECK-NEXT:    add.w lr, r2, r12, lsr #2890; CHECK-NEXT:    mov r2, r0891; CHECK-NEXT:  .LBB9_5: @ %vector.body892; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1893; CHECK-NEXT:    vldrw.u32 q1, [r2], #16894; CHECK-NEXT:    vmax.s32 q0, q0, q1895; CHECK-NEXT:    le lr, .LBB9_5896; CHECK-NEXT:  @ %bb.6: @ %middle.block897; CHECK-NEXT:    mov.w r2, #-2147483648898; CHECK-NEXT:    cmp r3, r1899; CHECK-NEXT:    vmaxv.s32 r2, q0900; CHECK-NEXT:    beq .LBB9_9901; CHECK-NEXT:  .LBB9_7: @ %for.body.preheader1902; CHECK-NEXT:    sub.w lr, r1, r3903; CHECK-NEXT:    add.w r0, r0, r3, lsl #2904; CHECK-NEXT:  .LBB9_8: @ %for.body905; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1906; CHECK-NEXT:    ldr r1, [r0], #4907; CHECK-NEXT:    cmp r2, r1908; CHECK-NEXT:    csel r2, r2, r1, gt909; CHECK-NEXT:    le lr, .LBB9_8910; CHECK-NEXT:  .LBB9_9: @ %for.cond.cleanup911; CHECK-NEXT:    mov r0, r2912; CHECK-NEXT:    pop {r7, pc}913entry:914  %cmp6 = icmp sgt i32 %n, 0915  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup916 917for.body.preheader:                               ; preds = %entry918  %min.iters.check = icmp ult i32 %n, 4919  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph920 921vector.ph:                                        ; preds = %for.body.preheader922  %n.vec = and i32 %n, -4923  br label %vector.body924 925vector.body:                                      ; preds = %vector.body, %vector.ph926  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]927  %vec.phi = phi <4 x i32> [ <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>, %vector.ph ], [ %3, %vector.body ]928  %0 = getelementptr inbounds i32, ptr %x, i32 %index929  %1 = bitcast ptr %0 to ptr930  %wide.load = load <4 x i32>, ptr %1, align 4931  %2 = icmp sgt <4 x i32> %vec.phi, %wide.load932  %3 = select <4 x i1> %2, <4 x i32> %vec.phi, <4 x i32> %wide.load933  %index.next = add i32 %index, 4934  %4 = icmp eq i32 %index.next, %n.vec935  br i1 %4, label %middle.block, label %vector.body936 937middle.block:                                     ; preds = %vector.body938  %5 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %3)939  %cmp.n = icmp eq i32 %n.vec, %n940  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1941 942for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader943  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]944  %r.07.ph = phi i32 [ -2147483648, %for.body.preheader ], [ %5, %middle.block ]945  br label %for.body946 947for.body:                                         ; preds = %for.body.preheader1, %for.body948  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]949  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]950  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.08951  %6 = load i32, ptr %arrayidx, align 4952  %c = icmp sgt i32 %r.07, %6953  %add = select i1 %c, i32 %r.07, i32 %6954  %inc = add nuw nsw i32 %i.08, 1955  %exitcond = icmp eq i32 %inc, %n956  br i1 %exitcond, label %for.cond.cleanup, label %for.body957 958for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry959  %r.0.lcssa = phi i32 [ -2147483648, %entry ], [ %5, %middle.block ], [ %add, %for.body ]960  ret i32 %r.0.lcssa961}962 963define i32 @smax_i32_inloop(ptr nocapture readonly %x, i32 %n) {964; CHECK-LABEL: smax_i32_inloop:965; CHECK:       @ %bb.0: @ %entry966; CHECK-NEXT:    .save {r7, lr}967; CHECK-NEXT:    push {r7, lr}968; CHECK-NEXT:    cmp r1, #1969; CHECK-NEXT:    blt .LBB10_3970; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader971; CHECK-NEXT:    mov r12, r0972; CHECK-NEXT:    cmp r1, #4973; CHECK-NEXT:    bhs .LBB10_4974; CHECK-NEXT:  @ %bb.2:975; CHECK-NEXT:    mov.w r0, #-2147483648976; CHECK-NEXT:    movs r3, #0977; CHECK-NEXT:    b .LBB10_7978; CHECK-NEXT:  .LBB10_3:979; CHECK-NEXT:    mov.w r0, #-2147483648980; CHECK-NEXT:    pop {r7, pc}981; CHECK-NEXT:  .LBB10_4: @ %vector.ph982; CHECK-NEXT:    bic r3, r1, #3983; CHECK-NEXT:    movs r2, #1984; CHECK-NEXT:    subs r0, r3, #4985; CHECK-NEXT:    add.w lr, r2, r0, lsr #2986; CHECK-NEXT:    mov.w r0, #-2147483648987; CHECK-NEXT:    mov r2, r12988; CHECK-NEXT:  .LBB10_5: @ %vector.body989; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1990; CHECK-NEXT:    vldrw.u32 q0, [r2], #16991; CHECK-NEXT:    vmaxv.s32 r0, q0992; CHECK-NEXT:    le lr, .LBB10_5993; CHECK-NEXT:  @ %bb.6: @ %middle.block994; CHECK-NEXT:    cmp r3, r1995; CHECK-NEXT:    it eq996; CHECK-NEXT:    popeq {r7, pc}997; CHECK-NEXT:  .LBB10_7: @ %for.body.preheader1998; CHECK-NEXT:    sub.w lr, r1, r3999; CHECK-NEXT:    add.w r2, r12, r3, lsl #21000; CHECK-NEXT:  .LBB10_8: @ %for.body1001; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11002; CHECK-NEXT:    ldr r1, [r2], #41003; CHECK-NEXT:    cmp r0, r11004; CHECK-NEXT:    csel r0, r0, r1, gt1005; CHECK-NEXT:    le lr, .LBB10_81006; CHECK-NEXT:  @ %bb.9: @ %for.cond.cleanup1007; CHECK-NEXT:    pop {r7, pc}1008entry:1009  %cmp6 = icmp sgt i32 %n, 01010  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup1011 1012for.body.preheader:                               ; preds = %entry1013  %min.iters.check = icmp ult i32 %n, 41014  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph1015 1016vector.ph:                                        ; preds = %for.body.preheader1017  %n.vec = and i32 %n, -41018  br label %vector.body1019 1020vector.body:                                      ; preds = %vector.body, %vector.ph1021  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1022  %vec.phi = phi i32 [ -2147483648, %vector.ph ], [ %3, %vector.body ]1023  %0 = getelementptr inbounds i32, ptr %x, i32 %index1024  %1 = bitcast ptr %0 to ptr1025  %wide.load = load <4 x i32>, ptr %1, align 41026  %l5 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %wide.load)1027  %2 = icmp sgt i32 %vec.phi, %l51028  %3 = select i1 %2, i32 %vec.phi, i32 %l51029  %index.next = add i32 %index, 41030  %4 = icmp eq i32 %index.next, %n.vec1031  br i1 %4, label %middle.block, label %vector.body1032 1033middle.block:                                     ; preds = %vector.body1034  %5 = phi i32 [ %3, %vector.body ]1035  %cmp.n = icmp eq i32 %n.vec, %n1036  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader11037 1038for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader1039  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]1040  %r.07.ph = phi i32 [ -2147483648, %for.body.preheader ], [ %5, %middle.block ]1041  br label %for.body1042 1043for.body:                                         ; preds = %for.body.preheader1, %for.body1044  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]1045  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]1046  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.081047  %6 = load i32, ptr %arrayidx, align 41048  %c = icmp sgt i32 %r.07, %61049  %add = select i1 %c, i32 %r.07, i32 %61050  %inc = add nuw nsw i32 %i.08, 11051  %exitcond = icmp eq i32 %inc, %n1052  br i1 %exitcond, label %for.cond.cleanup, label %for.body1053 1054for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry1055  %r.0.lcssa = phi i32 [ -2147483648, %entry ], [ %5, %middle.block ], [ %add, %for.body ]1056  ret i32 %r.0.lcssa1057}1058 1059define i32 @umin_i32(ptr nocapture readonly %x, i32 %n) {1060; CHECK-LABEL: umin_i32:1061; CHECK:       @ %bb.0: @ %entry1062; CHECK-NEXT:    .save {r7, lr}1063; CHECK-NEXT:    push {r7, lr}1064; CHECK-NEXT:    cmp r1, #11065; CHECK-NEXT:    blt .LBB11_31066; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader1067; CHECK-NEXT:    cmp r1, #41068; CHECK-NEXT:    bhs .LBB11_41069; CHECK-NEXT:  @ %bb.2:1070; CHECK-NEXT:    mov.w r2, #-11071; CHECK-NEXT:    movs r3, #01072; CHECK-NEXT:    b .LBB11_71073; CHECK-NEXT:  .LBB11_3:1074; CHECK-NEXT:    mov.w r2, #-11075; CHECK-NEXT:    mov r0, r21076; CHECK-NEXT:    pop {r7, pc}1077; CHECK-NEXT:  .LBB11_4: @ %vector.ph1078; CHECK-NEXT:    bic r3, r1, #31079; CHECK-NEXT:    movs r2, #11080; CHECK-NEXT:    sub.w r12, r3, #41081; CHECK-NEXT:    vmov.i8 q0, #0xff1082; CHECK-NEXT:    add.w lr, r2, r12, lsr #21083; CHECK-NEXT:    mov r2, r01084; CHECK-NEXT:  .LBB11_5: @ %vector.body1085; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11086; CHECK-NEXT:    vldrw.u32 q1, [r2], #161087; CHECK-NEXT:    vmin.u32 q0, q0, q11088; CHECK-NEXT:    le lr, .LBB11_51089; CHECK-NEXT:  @ %bb.6: @ %middle.block1090; CHECK-NEXT:    mov.w r2, #-11091; CHECK-NEXT:    cmp r3, r11092; CHECK-NEXT:    vminv.u32 r2, q01093; CHECK-NEXT:    beq .LBB11_91094; CHECK-NEXT:  .LBB11_7: @ %for.body.preheader11095; CHECK-NEXT:    sub.w lr, r1, r31096; CHECK-NEXT:    add.w r0, r0, r3, lsl #21097; CHECK-NEXT:  .LBB11_8: @ %for.body1098; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11099; CHECK-NEXT:    ldr r1, [r0], #41100; CHECK-NEXT:    cmp r2, r11101; CHECK-NEXT:    csel r2, r2, r1, lo1102; CHECK-NEXT:    le lr, .LBB11_81103; CHECK-NEXT:  .LBB11_9: @ %for.cond.cleanup1104; CHECK-NEXT:    mov r0, r21105; CHECK-NEXT:    pop {r7, pc}1106entry:1107  %cmp6 = icmp sgt i32 %n, 01108  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup1109 1110for.body.preheader:                               ; preds = %entry1111  %min.iters.check = icmp ult i32 %n, 41112  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph1113 1114vector.ph:                                        ; preds = %for.body.preheader1115  %n.vec = and i32 %n, -41116  br label %vector.body1117 1118vector.body:                                      ; preds = %vector.body, %vector.ph1119  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1120  %vec.phi = phi <4 x i32> [ <i32 -1, i32 -1, i32 -1, i32 -1>, %vector.ph ], [ %3, %vector.body ]1121  %0 = getelementptr inbounds i32, ptr %x, i32 %index1122  %1 = bitcast ptr %0 to ptr1123  %wide.load = load <4 x i32>, ptr %1, align 41124  %2 = icmp ult <4 x i32> %vec.phi, %wide.load1125  %3 = select <4 x i1> %2, <4 x i32> %vec.phi, <4 x i32> %wide.load1126  %index.next = add i32 %index, 41127  %4 = icmp eq i32 %index.next, %n.vec1128  br i1 %4, label %middle.block, label %vector.body1129 1130middle.block:                                     ; preds = %vector.body1131  %5 = call i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %3)1132  %cmp.n = icmp eq i32 %n.vec, %n1133  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader11134 1135for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader1136  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]1137  %r.07.ph = phi i32 [ -1, %for.body.preheader ], [ %5, %middle.block ]1138  br label %for.body1139 1140for.body:                                         ; preds = %for.body.preheader1, %for.body1141  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]1142  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]1143  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.081144  %6 = load i32, ptr %arrayidx, align 41145  %c = icmp ult i32 %r.07, %61146  %add = select i1 %c, i32 %r.07, i32 %61147  %inc = add nuw nsw i32 %i.08, 11148  %exitcond = icmp eq i32 %inc, %n1149  br i1 %exitcond, label %for.cond.cleanup, label %for.body1150 1151for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry1152  %r.0.lcssa = phi i32 [ -1, %entry ], [ %5, %middle.block ], [ %add, %for.body ]1153  ret i32 %r.0.lcssa1154}1155 1156define i32 @umin_i32_inloop(ptr nocapture readonly %x, i32 %n) {1157; CHECK-LABEL: umin_i32_inloop:1158; CHECK:       @ %bb.0: @ %entry1159; CHECK-NEXT:    .save {r7, lr}1160; CHECK-NEXT:    push {r7, lr}1161; CHECK-NEXT:    cmp r1, #11162; CHECK-NEXT:    blt .LBB12_31163; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader1164; CHECK-NEXT:    mov r12, r01165; CHECK-NEXT:    cmp r1, #41166; CHECK-NEXT:    bhs .LBB12_41167; CHECK-NEXT:  @ %bb.2:1168; CHECK-NEXT:    mov.w r0, #-11169; CHECK-NEXT:    movs r3, #01170; CHECK-NEXT:    b .LBB12_71171; CHECK-NEXT:  .LBB12_3:1172; CHECK-NEXT:    mov.w r0, #-11173; CHECK-NEXT:    pop {r7, pc}1174; CHECK-NEXT:  .LBB12_4: @ %vector.ph1175; CHECK-NEXT:    bic r3, r1, #31176; CHECK-NEXT:    movs r2, #11177; CHECK-NEXT:    subs r0, r3, #41178; CHECK-NEXT:    add.w lr, r2, r0, lsr #21179; CHECK-NEXT:    mov.w r0, #-11180; CHECK-NEXT:    mov r2, r121181; CHECK-NEXT:  .LBB12_5: @ %vector.body1182; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11183; CHECK-NEXT:    vldrw.u32 q0, [r2], #161184; CHECK-NEXT:    vminv.u32 r0, q01185; CHECK-NEXT:    le lr, .LBB12_51186; CHECK-NEXT:  @ %bb.6: @ %middle.block1187; CHECK-NEXT:    cmp r3, r11188; CHECK-NEXT:    it eq1189; CHECK-NEXT:    popeq {r7, pc}1190; CHECK-NEXT:  .LBB12_7: @ %for.body.preheader11191; CHECK-NEXT:    sub.w lr, r1, r31192; CHECK-NEXT:    add.w r2, r12, r3, lsl #21193; CHECK-NEXT:  .LBB12_8: @ %for.body1194; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11195; CHECK-NEXT:    ldr r1, [r2], #41196; CHECK-NEXT:    cmp r0, r11197; CHECK-NEXT:    csel r0, r0, r1, hi1198; CHECK-NEXT:    le lr, .LBB12_81199; CHECK-NEXT:  @ %bb.9: @ %for.cond.cleanup1200; CHECK-NEXT:    pop {r7, pc}1201entry:1202  %cmp6 = icmp sgt i32 %n, 01203  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup1204 1205for.body.preheader:                               ; preds = %entry1206  %min.iters.check = icmp ult i32 %n, 41207  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph1208 1209vector.ph:                                        ; preds = %for.body.preheader1210  %n.vec = and i32 %n, -41211  br label %vector.body1212 1213vector.body:                                      ; preds = %vector.body, %vector.ph1214  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1215  %vec.phi = phi i32 [ -1, %vector.ph ], [ %3, %vector.body ]1216  %0 = getelementptr inbounds i32, ptr %x, i32 %index1217  %1 = bitcast ptr %0 to ptr1218  %wide.load = load <4 x i32>, ptr %1, align 41219  %l5 = call i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %wide.load)1220  %2 = icmp ult i32 %vec.phi, %l51221  %3 = select i1 %2, i32 %vec.phi, i32 %l51222  %index.next = add i32 %index, 41223  %4 = icmp eq i32 %index.next, %n.vec1224  br i1 %4, label %middle.block, label %vector.body1225 1226middle.block:                                     ; preds = %vector.body1227  %5 = phi i32 [ %3, %vector.body ]1228  %cmp.n = icmp eq i32 %n.vec, %n1229  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader11230 1231for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader1232  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]1233  %r.07.ph = phi i32 [ -1, %for.body.preheader ], [ %5, %middle.block ]1234  br label %for.body1235 1236for.body:                                         ; preds = %for.body.preheader1, %for.body1237  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]1238  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]1239  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.081240  %6 = load i32, ptr %arrayidx, align 41241  %c = icmp ugt i32 %r.07, %61242  %add = select i1 %c, i32 %r.07, i32 %61243  %inc = add nuw nsw i32 %i.08, 11244  %exitcond = icmp eq i32 %inc, %n1245  br i1 %exitcond, label %for.cond.cleanup, label %for.body1246 1247for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry1248  %r.0.lcssa = phi i32 [ -1, %entry ], [ %5, %middle.block ], [ %add, %for.body ]1249  ret i32 %r.0.lcssa1250}1251 1252define i32 @umax_i32(ptr nocapture readonly %x, i32 %n) {1253; CHECK-LABEL: umax_i32:1254; CHECK:       @ %bb.0: @ %entry1255; CHECK-NEXT:    .save {r7, lr}1256; CHECK-NEXT:    push {r7, lr}1257; CHECK-NEXT:    cmp r1, #11258; CHECK-NEXT:    blt .LBB13_31259; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader1260; CHECK-NEXT:    cmp r1, #41261; CHECK-NEXT:    bhs .LBB13_41262; CHECK-NEXT:  @ %bb.2:1263; CHECK-NEXT:    movs r3, #01264; CHECK-NEXT:    movs r2, #01265; CHECK-NEXT:    b .LBB13_71266; CHECK-NEXT:  .LBB13_3:1267; CHECK-NEXT:    movs r2, #01268; CHECK-NEXT:    mov r0, r21269; CHECK-NEXT:    pop {r7, pc}1270; CHECK-NEXT:  .LBB13_4: @ %vector.ph1271; CHECK-NEXT:    bic r3, r1, #31272; CHECK-NEXT:    movs r2, #11273; CHECK-NEXT:    sub.w r12, r3, #41274; CHECK-NEXT:    vmov.i32 q0, #0x01275; CHECK-NEXT:    add.w lr, r2, r12, lsr #21276; CHECK-NEXT:    mov r2, r01277; CHECK-NEXT:  .LBB13_5: @ %vector.body1278; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11279; CHECK-NEXT:    vldrw.u32 q1, [r2], #161280; CHECK-NEXT:    vmax.u32 q0, q0, q11281; CHECK-NEXT:    le lr, .LBB13_51282; CHECK-NEXT:  @ %bb.6: @ %middle.block1283; CHECK-NEXT:    movs r2, #01284; CHECK-NEXT:    cmp r3, r11285; CHECK-NEXT:    vmaxv.u32 r2, q01286; CHECK-NEXT:    beq .LBB13_91287; CHECK-NEXT:  .LBB13_7: @ %for.body.preheader11288; CHECK-NEXT:    sub.w lr, r1, r31289; CHECK-NEXT:    add.w r0, r0, r3, lsl #21290; CHECK-NEXT:  .LBB13_8: @ %for.body1291; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11292; CHECK-NEXT:    ldr r1, [r0], #41293; CHECK-NEXT:    cmp r2, r11294; CHECK-NEXT:    csel r2, r2, r1, hi1295; CHECK-NEXT:    le lr, .LBB13_81296; CHECK-NEXT:  .LBB13_9: @ %for.cond.cleanup1297; CHECK-NEXT:    mov r0, r21298; CHECK-NEXT:    pop {r7, pc}1299entry:1300  %cmp6 = icmp sgt i32 %n, 01301  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup1302 1303for.body.preheader:                               ; preds = %entry1304  %min.iters.check = icmp ult i32 %n, 41305  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph1306 1307vector.ph:                                        ; preds = %for.body.preheader1308  %n.vec = and i32 %n, -41309  br label %vector.body1310 1311vector.body:                                      ; preds = %vector.body, %vector.ph1312  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1313  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %3, %vector.body ]1314  %0 = getelementptr inbounds i32, ptr %x, i32 %index1315  %1 = bitcast ptr %0 to ptr1316  %wide.load = load <4 x i32>, ptr %1, align 41317  %2 = icmp ugt <4 x i32> %vec.phi, %wide.load1318  %3 = select <4 x i1> %2, <4 x i32> %vec.phi, <4 x i32> %wide.load1319  %index.next = add i32 %index, 41320  %4 = icmp eq i32 %index.next, %n.vec1321  br i1 %4, label %middle.block, label %vector.body1322 1323middle.block:                                     ; preds = %vector.body1324  %5 = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> %3)1325  %cmp.n = icmp eq i32 %n.vec, %n1326  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader11327 1328for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader1329  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]1330  %r.07.ph = phi i32 [ 0, %for.body.preheader ], [ %5, %middle.block ]1331  br label %for.body1332 1333for.body:                                         ; preds = %for.body.preheader1, %for.body1334  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]1335  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]1336  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.081337  %6 = load i32, ptr %arrayidx, align 41338  %c = icmp ugt i32 %r.07, %61339  %add = select i1 %c, i32 %r.07, i32 %61340  %inc = add nuw nsw i32 %i.08, 11341  %exitcond = icmp eq i32 %inc, %n1342  br i1 %exitcond, label %for.cond.cleanup, label %for.body1343 1344for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry1345  %r.0.lcssa = phi i32 [ 0, %entry ], [ %5, %middle.block ], [ %add, %for.body ]1346  ret i32 %r.0.lcssa1347}1348 1349define i32 @umax_i32_inloop(ptr nocapture readonly %x, i32 %n) {1350; CHECK-LABEL: umax_i32_inloop:1351; CHECK:       @ %bb.0: @ %entry1352; CHECK-NEXT:    .save {r7, lr}1353; CHECK-NEXT:    push {r7, lr}1354; CHECK-NEXT:    cmp r1, #11355; CHECK-NEXT:    blt .LBB14_31356; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader1357; CHECK-NEXT:    mov r12, r01358; CHECK-NEXT:    cmp r1, #41359; CHECK-NEXT:    bhs .LBB14_41360; CHECK-NEXT:  @ %bb.2:1361; CHECK-NEXT:    movs r3, #01362; CHECK-NEXT:    movs r0, #01363; CHECK-NEXT:    b .LBB14_71364; CHECK-NEXT:  .LBB14_3:1365; CHECK-NEXT:    movs r0, #01366; CHECK-NEXT:    pop {r7, pc}1367; CHECK-NEXT:  .LBB14_4: @ %vector.ph1368; CHECK-NEXT:    bic r3, r1, #31369; CHECK-NEXT:    movs r2, #11370; CHECK-NEXT:    subs r0, r3, #41371; CHECK-NEXT:    add.w lr, r2, r0, lsr #21372; CHECK-NEXT:    movs r0, #01373; CHECK-NEXT:    mov r2, r121374; CHECK-NEXT:  .LBB14_5: @ %vector.body1375; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11376; CHECK-NEXT:    vldrw.u32 q0, [r2], #161377; CHECK-NEXT:    vmaxv.u32 r0, q01378; CHECK-NEXT:    le lr, .LBB14_51379; CHECK-NEXT:  @ %bb.6: @ %middle.block1380; CHECK-NEXT:    cmp r3, r11381; CHECK-NEXT:    it eq1382; CHECK-NEXT:    popeq {r7, pc}1383; CHECK-NEXT:  .LBB14_7: @ %for.body.preheader11384; CHECK-NEXT:    sub.w lr, r1, r31385; CHECK-NEXT:    add.w r2, r12, r3, lsl #21386; CHECK-NEXT:  .LBB14_8: @ %for.body1387; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11388; CHECK-NEXT:    ldr r1, [r2], #41389; CHECK-NEXT:    cmp r0, r11390; CHECK-NEXT:    csel r0, r0, r1, hi1391; CHECK-NEXT:    le lr, .LBB14_81392; CHECK-NEXT:  @ %bb.9: @ %for.cond.cleanup1393; CHECK-NEXT:    pop {r7, pc}1394entry:1395  %cmp6 = icmp sgt i32 %n, 01396  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup1397 1398for.body.preheader:                               ; preds = %entry1399  %min.iters.check = icmp ult i32 %n, 41400  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph1401 1402vector.ph:                                        ; preds = %for.body.preheader1403  %n.vec = and i32 %n, -41404  br label %vector.body1405 1406vector.body:                                      ; preds = %vector.body, %vector.ph1407  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1408  %vec.phi = phi i32 [ 0, %vector.ph ], [ %3, %vector.body ]1409  %0 = getelementptr inbounds i32, ptr %x, i32 %index1410  %1 = bitcast ptr %0 to ptr1411  %wide.load = load <4 x i32>, ptr %1, align 41412  %l5 = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> %wide.load)1413  %2 = icmp ugt i32 %vec.phi, %l51414  %3 = select i1 %2, i32 %vec.phi, i32 %l51415  %index.next = add i32 %index, 41416  %4 = icmp eq i32 %index.next, %n.vec1417  br i1 %4, label %middle.block, label %vector.body1418 1419middle.block:                                     ; preds = %vector.body1420  %5 = phi i32 [ %3, %vector.body ]1421  %cmp.n = icmp eq i32 %n.vec, %n1422  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader11423 1424for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader1425  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]1426  %r.07.ph = phi i32 [ 0, %for.body.preheader ], [ %5, %middle.block ]1427  br label %for.body1428 1429for.body:                                         ; preds = %for.body.preheader1, %for.body1430  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]1431  %r.07 = phi i32 [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]1432  %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.081433  %6 = load i32, ptr %arrayidx, align 41434  %c = icmp ugt i32 %r.07, %61435  %add = select i1 %c, i32 %r.07, i32 %61436  %inc = add nuw nsw i32 %i.08, 11437  %exitcond = icmp eq i32 %inc, %n1438  br i1 %exitcond, label %for.cond.cleanup, label %for.body1439 1440for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry1441  %r.0.lcssa = phi i32 [ 0, %entry ], [ %5, %middle.block ], [ %add, %for.body ]1442  ret i32 %r.0.lcssa1443}1444 1445define float @fmin_f32(ptr nocapture readonly %x, i32 %n) {1446; CHECK-LABEL: fmin_f32:1447; CHECK:       @ %bb.0: @ %entry1448; CHECK-NEXT:    .save {r7, lr}1449; CHECK-NEXT:    push {r7, lr}1450; CHECK-NEXT:    cmp r1, #11451; CHECK-NEXT:    blt .LBB15_31452; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader1453; CHECK-NEXT:    cmp r1, #41454; CHECK-NEXT:    bhs .LBB15_41455; CHECK-NEXT:  @ %bb.2:1456; CHECK-NEXT:    vldr s0, .LCPI15_01457; CHECK-NEXT:    movs r2, #01458; CHECK-NEXT:    b .LBB15_71459; CHECK-NEXT:  .LBB15_3:1460; CHECK-NEXT:    vldr s0, .LCPI15_01461; CHECK-NEXT:    vmov r0, s01462; CHECK-NEXT:    pop {r7, pc}1463; CHECK-NEXT:  .LBB15_4: @ %vector.ph1464; CHECK-NEXT:    bic r2, r1, #31465; CHECK-NEXT:    movs r3, #11466; CHECK-NEXT:    sub.w r12, r2, #41467; CHECK-NEXT:    vmov.i32 q0, #0x01468; CHECK-NEXT:    add.w lr, r3, r12, lsr #21469; CHECK-NEXT:    mov r3, r01470; CHECK-NEXT:  .LBB15_5: @ %vector.body1471; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11472; CHECK-NEXT:    vldrw.u32 q1, [r3], #161473; CHECK-NEXT:    vcmp.f32 lt, q0, q11474; CHECK-NEXT:    vpsel q0, q0, q11475; CHECK-NEXT:    le lr, .LBB15_51476; CHECK-NEXT:  @ %bb.6: @ %middle.block1477; CHECK-NEXT:    vminnm.f32 s2, s2, s31478; CHECK-NEXT:    vminnm.f32 s0, s0, s11479; CHECK-NEXT:    vminnm.f32 s0, s0, s21480; CHECK-NEXT:    cmp r2, r11481; CHECK-NEXT:    beq .LBB15_91482; CHECK-NEXT:  .LBB15_7: @ %for.body.preheader11483; CHECK-NEXT:    sub.w lr, r1, r21484; CHECK-NEXT:    add.w r0, r0, r2, lsl #21485; CHECK-NEXT:  .LBB15_8: @ %for.body1486; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11487; CHECK-NEXT:    vldmia r0!, {s2}1488; CHECK-NEXT:    vcmp.f32 s0, s21489; CHECK-NEXT:    vmrs APSR_nzcv, fpscr1490; CHECK-NEXT:    vselge.f32 s0, s2, s01491; CHECK-NEXT:    le lr, .LBB15_81492; CHECK-NEXT:  .LBB15_9: @ %for.cond.cleanup1493; CHECK-NEXT:    vmov r0, s01494; CHECK-NEXT:    pop {r7, pc}1495; CHECK-NEXT:    .p2align 21496; CHECK-NEXT:  @ %bb.10:1497; CHECK-NEXT:  .LCPI15_0:1498; CHECK-NEXT:    .long 0x00000000 @ float 01499entry:1500  %cmp6 = icmp sgt i32 %n, 01501  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup1502 1503for.body.preheader:                               ; preds = %entry1504  %min.iters.check = icmp ult i32 %n, 41505  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph1506 1507vector.ph:                                        ; preds = %for.body.preheader1508  %n.vec = and i32 %n, -41509  br label %vector.body1510 1511vector.body:                                      ; preds = %vector.body, %vector.ph1512  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1513  %vec.phi = phi <4 x float> [ zeroinitializer, %vector.ph ], [ %3, %vector.body ]1514  %0 = getelementptr inbounds float, ptr %x, i32 %index1515  %1 = bitcast ptr %0 to ptr1516  %wide.load = load <4 x float>, ptr %1, align 41517  %2 = fcmp ult <4 x float> %vec.phi, %wide.load1518  %3 = select <4 x i1> %2, <4 x float> %vec.phi, <4 x float> %wide.load1519  %index.next = add i32 %index, 41520  %4 = icmp eq i32 %index.next, %n.vec1521  br i1 %4, label %middle.block, label %vector.body1522 1523middle.block:                                     ; preds = %vector.body1524  %5 = call float @llvm.vector.reduce.fmin.v4f32(<4 x float> %3)1525  %cmp.n = icmp eq i32 %n.vec, %n1526  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader11527 1528for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader1529  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]1530  %r.07.ph = phi float [ 0.0, %for.body.preheader ], [ %5, %middle.block ]1531  br label %for.body1532 1533for.body:                                         ; preds = %for.body.preheader1, %for.body1534  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]1535  %r.07 = phi float [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]1536  %arrayidx = getelementptr inbounds float, ptr %x, i32 %i.081537  %6 = load float, ptr %arrayidx, align 41538  %c = fcmp ult float %r.07, %61539  %add = select i1 %c, float %r.07, float %61540  %inc = add nuw nsw i32 %i.08, 11541  %exitcond = icmp eq i32 %inc, %n1542  br i1 %exitcond, label %for.cond.cleanup, label %for.body1543 1544for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry1545  %r.0.lcssa = phi float [ 0.0, %entry ], [ %5, %middle.block ], [ %add, %for.body ]1546  ret float %r.0.lcssa1547}1548 1549define float @fmax_f32(ptr nocapture readonly %x, i32 %n) {1550; CHECK-LABEL: fmax_f32:1551; CHECK:       @ %bb.0: @ %entry1552; CHECK-NEXT:    .save {r7, lr}1553; CHECK-NEXT:    push {r7, lr}1554; CHECK-NEXT:    cmp r1, #11555; CHECK-NEXT:    blt .LBB16_31556; CHECK-NEXT:  @ %bb.1: @ %for.body.preheader1557; CHECK-NEXT:    cmp r1, #41558; CHECK-NEXT:    bhs .LBB16_41559; CHECK-NEXT:  @ %bb.2:1560; CHECK-NEXT:    vldr s0, .LCPI16_01561; CHECK-NEXT:    movs r2, #01562; CHECK-NEXT:    b .LBB16_71563; CHECK-NEXT:  .LBB16_3:1564; CHECK-NEXT:    vldr s0, .LCPI16_01565; CHECK-NEXT:    vmov r0, s01566; CHECK-NEXT:    pop {r7, pc}1567; CHECK-NEXT:  .LBB16_4: @ %vector.ph1568; CHECK-NEXT:    bic r2, r1, #31569; CHECK-NEXT:    movs r3, #11570; CHECK-NEXT:    sub.w r12, r2, #41571; CHECK-NEXT:    vmov.i32 q0, #0x01572; CHECK-NEXT:    add.w lr, r3, r12, lsr #21573; CHECK-NEXT:    mov r3, r01574; CHECK-NEXT:  .LBB16_5: @ %vector.body1575; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11576; CHECK-NEXT:    vldrw.u32 q1, [r3], #161577; CHECK-NEXT:    vcmp.f32 lt, q1, q01578; CHECK-NEXT:    vpsel q0, q0, q11579; CHECK-NEXT:    le lr, .LBB16_51580; CHECK-NEXT:  @ %bb.6: @ %middle.block1581; CHECK-NEXT:    vmaxnm.f32 s2, s2, s31582; CHECK-NEXT:    vmaxnm.f32 s0, s0, s11583; CHECK-NEXT:    vmaxnm.f32 s0, s0, s21584; CHECK-NEXT:    cmp r2, r11585; CHECK-NEXT:    beq .LBB16_91586; CHECK-NEXT:  .LBB16_7: @ %for.body.preheader11587; CHECK-NEXT:    sub.w lr, r1, r21588; CHECK-NEXT:    add.w r0, r0, r2, lsl #21589; CHECK-NEXT:  .LBB16_8: @ %for.body1590; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11591; CHECK-NEXT:    vldmia r0!, {s2}1592; CHECK-NEXT:    vcmp.f32 s2, s01593; CHECK-NEXT:    vmrs APSR_nzcv, fpscr1594; CHECK-NEXT:    vselge.f32 s0, s2, s01595; CHECK-NEXT:    le lr, .LBB16_81596; CHECK-NEXT:  .LBB16_9: @ %for.cond.cleanup1597; CHECK-NEXT:    vmov r0, s01598; CHECK-NEXT:    pop {r7, pc}1599; CHECK-NEXT:    .p2align 21600; CHECK-NEXT:  @ %bb.10:1601; CHECK-NEXT:  .LCPI16_0:1602; CHECK-NEXT:    .long 0x00000000 @ float 01603entry:1604  %cmp6 = icmp sgt i32 %n, 01605  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup1606 1607for.body.preheader:                               ; preds = %entry1608  %min.iters.check = icmp ult i32 %n, 41609  br i1 %min.iters.check, label %for.body.preheader1, label %vector.ph1610 1611vector.ph:                                        ; preds = %for.body.preheader1612  %n.vec = and i32 %n, -41613  br label %vector.body1614 1615vector.body:                                      ; preds = %vector.body, %vector.ph1616  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1617  %vec.phi = phi <4 x float> [ zeroinitializer, %vector.ph ], [ %3, %vector.body ]1618  %0 = getelementptr inbounds float, ptr %x, i32 %index1619  %1 = bitcast ptr %0 to ptr1620  %wide.load = load <4 x float>, ptr %1, align 41621  %2 = fcmp ugt <4 x float> %vec.phi, %wide.load1622  %3 = select <4 x i1> %2, <4 x float> %vec.phi, <4 x float> %wide.load1623  %index.next = add i32 %index, 41624  %4 = icmp eq i32 %index.next, %n.vec1625  br i1 %4, label %middle.block, label %vector.body1626 1627middle.block:                                     ; preds = %vector.body1628  %5 = call float @llvm.vector.reduce.fmax.v4f32(<4 x float> %3)1629  %cmp.n = icmp eq i32 %n.vec, %n1630  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader11631 1632for.body.preheader1:                              ; preds = %middle.block, %for.body.preheader1633  %i.08.ph = phi i32 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]1634  %r.07.ph = phi float [ 0.0, %for.body.preheader ], [ %5, %middle.block ]1635  br label %for.body1636 1637for.body:                                         ; preds = %for.body.preheader1, %for.body1638  %i.08 = phi i32 [ %inc, %for.body ], [ %i.08.ph, %for.body.preheader1 ]1639  %r.07 = phi float [ %add, %for.body ], [ %r.07.ph, %for.body.preheader1 ]1640  %arrayidx = getelementptr inbounds float, ptr %x, i32 %i.081641  %6 = load float, ptr %arrayidx, align 41642  %c = fcmp ugt float %r.07, %61643  %add = select i1 %c, float %r.07, float %61644  %inc = add nuw nsw i32 %i.08, 11645  %exitcond = icmp eq i32 %inc, %n1646  br i1 %exitcond, label %for.cond.cleanup, label %for.body1647 1648for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry1649  %r.0.lcssa = phi float [ 0.0, %entry ], [ %5, %middle.block ], [ %add, %for.body ]1650  ret float %r.0.lcssa1651}1652 1653define i32 @add4i32(ptr noalias nocapture readonly %x, i32 %n) {1654; CHECK-LABEL: add4i32:1655; CHECK:       @ %bb.0: @ %entry1656; CHECK-NEXT:    .save {r7, lr}1657; CHECK-NEXT:    push {r7, lr}1658; CHECK-NEXT:    cbz r1, .LBB17_41659; CHECK-NEXT:  @ %bb.1: @ %vector.ph1660; CHECK-NEXT:    movs r2, #01661; CHECK-NEXT:    dlstp.32 lr, r11662; CHECK-NEXT:  .LBB17_2: @ %vector.body1663; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11664; CHECK-NEXT:    vldrw.u32 q0, [r0], #161665; CHECK-NEXT:    vaddva.u32 r2, q01666; CHECK-NEXT:    letp lr, .LBB17_21667; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1668; CHECK-NEXT:    mov r0, r21669; CHECK-NEXT:    pop {r7, pc}1670; CHECK-NEXT:  .LBB17_4:1671; CHECK-NEXT:    movs r2, #01672; CHECK-NEXT:    mov r0, r21673; CHECK-NEXT:    pop {r7, pc}1674entry:1675  %cmp6.not = icmp eq i32 %n, 01676  br i1 %cmp6.not, label %for.cond.cleanup, label %vector.ph1677 1678vector.ph:                                        ; preds = %entry1679  %n.rnd.up = add i32 %n, 31680  %n.vec = and i32 %n.rnd.up, -41681  br label %vector.body1682 1683vector.body:                                      ; preds = %vector.body, %vector.ph1684  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1685  %vec.phi = phi i32 [ 0, %vector.ph ], [ %4, %vector.body ]1686  %active.lane.mask = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index, i32 %n)1687  %0 = getelementptr inbounds i32, ptr %x, i32 %index1688  %1 = bitcast ptr %0 to ptr1689  %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %1, i32 4, <4 x i1> %active.lane.mask, <4 x i32> undef)1690  %2 = select <4 x i1> %active.lane.mask, <4 x i32> %wide.masked.load, <4 x i32> zeroinitializer1691  %3 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %2)1692  %4 = add i32 %3, %vec.phi1693  %index.next = add i32 %index, 41694  %5 = icmp eq i32 %index.next, %n.vec1695  br i1 %5, label %for.cond.cleanup, label %vector.body1696 1697for.cond.cleanup:                                 ; preds = %vector.body, %entry1698  %s.0.lcssa = phi i32 [ 0, %entry ], [ %4, %vector.body ]1699  ret i32 %s.0.lcssa1700}1701 1702define i32 @mla4i32(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {1703; CHECK-LABEL: mla4i32:1704; CHECK:       @ %bb.0: @ %entry1705; CHECK-NEXT:    .save {r7, lr}1706; CHECK-NEXT:    push {r7, lr}1707; CHECK-NEXT:    cbz r2, .LBB18_41708; CHECK-NEXT:  @ %bb.1: @ %vector.ph1709; CHECK-NEXT:    mov.w r12, #01710; CHECK-NEXT:    dlstp.32 lr, r21711; CHECK-NEXT:  .LBB18_2: @ %vector.body1712; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11713; CHECK-NEXT:    vldrw.u32 q0, [r0], #161714; CHECK-NEXT:    vldrw.u32 q1, [r1], #161715; CHECK-NEXT:    vmlava.u32 r12, q1, q01716; CHECK-NEXT:    letp lr, .LBB18_21717; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1718; CHECK-NEXT:    mov r0, r121719; CHECK-NEXT:    pop {r7, pc}1720; CHECK-NEXT:  .LBB18_4:1721; CHECK-NEXT:    mov.w r12, #01722; CHECK-NEXT:    mov r0, r121723; CHECK-NEXT:    pop {r7, pc}1724entry:1725  %cmp8.not = icmp eq i32 %n, 01726  br i1 %cmp8.not, label %for.cond.cleanup, label %vector.ph1727 1728vector.ph:                                        ; preds = %entry1729  %n.rnd.up = add i32 %n, 31730  %n.vec = and i32 %n.rnd.up, -41731  br label %vector.body1732 1733vector.body:                                      ; preds = %vector.body, %vector.ph1734  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1735  %vec.phi = phi i32 [ 0, %vector.ph ], [ %7, %vector.body ]1736  %active.lane.mask = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index, i32 %n)1737  %0 = getelementptr inbounds i32, ptr %x, i32 %index1738  %1 = bitcast ptr %0 to ptr1739  %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %1, i32 4, <4 x i1> %active.lane.mask, <4 x i32> undef)1740  %2 = getelementptr inbounds i32, ptr %y, i32 %index1741  %3 = bitcast ptr %2 to ptr1742  %wide.masked.load13 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %3, i32 4, <4 x i1> %active.lane.mask, <4 x i32> undef)1743  %4 = mul nsw <4 x i32> %wide.masked.load13, %wide.masked.load1744  %5 = select <4 x i1> %active.lane.mask, <4 x i32> %4, <4 x i32> zeroinitializer1745  %6 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %5)1746  %7 = add i32 %6, %vec.phi1747  %index.next = add i32 %index, 41748  %8 = icmp eq i32 %index.next, %n.vec1749  br i1 %8, label %for.cond.cleanup, label %vector.body1750 1751for.cond.cleanup:                                 ; preds = %vector.body, %entry1752  %s.0.lcssa = phi i32 [ 0, %entry ], [ %7, %vector.body ]1753  ret i32 %s.0.lcssa1754}1755 1756define i32 @add8i32(ptr noalias nocapture readonly %x, i32 %n) {1757; CHECK-LABEL: add8i32:1758; CHECK:       @ %bb.0: @ %entry1759; CHECK-NEXT:    .save {r7, lr}1760; CHECK-NEXT:    push {r7, lr}1761; CHECK-NEXT:    cbz r1, .LBB19_41762; CHECK-NEXT:  @ %bb.1: @ %vector.ph1763; CHECK-NEXT:    movs r2, #01764; CHECK-NEXT:    dlstp.16 lr, r11765; CHECK-NEXT:  .LBB19_2: @ %vector.body1766; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11767; CHECK-NEXT:    vldrh.u16 q0, [r0], #161768; CHECK-NEXT:    vaddva.s16 r2, q01769; CHECK-NEXT:    letp lr, .LBB19_21770; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1771; CHECK-NEXT:    mov r0, r21772; CHECK-NEXT:    pop {r7, pc}1773; CHECK-NEXT:  .LBB19_4:1774; CHECK-NEXT:    movs r2, #01775; CHECK-NEXT:    mov r0, r21776; CHECK-NEXT:    pop {r7, pc}1777entry:1778  %cmp6.not = icmp eq i32 %n, 01779  br i1 %cmp6.not, label %for.cond.cleanup, label %vector.ph1780 1781vector.ph:                                        ; preds = %entry1782  %n.rnd.up = add i32 %n, 71783  %n.vec = and i32 %n.rnd.up, -81784  br label %vector.body1785 1786vector.body:                                      ; preds = %vector.body, %vector.ph1787  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1788  %vec.phi = phi i32 [ 0, %vector.ph ], [ %5, %vector.body ]1789  %active.lane.mask = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 %index, i32 %n)1790  %0 = getelementptr inbounds i16, ptr %x, i32 %index1791  %1 = bitcast ptr %0 to ptr1792  %wide.masked.load = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %1, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)1793  %2 = sext <8 x i16> %wide.masked.load to <8 x i32>1794  %3 = select <8 x i1> %active.lane.mask, <8 x i32> %2, <8 x i32> zeroinitializer1795  %4 = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %3)1796  %5 = add i32 %4, %vec.phi1797  %index.next = add i32 %index, 81798  %6 = icmp eq i32 %index.next, %n.vec1799  br i1 %6, label %for.cond.cleanup, label %vector.body1800 1801for.cond.cleanup:                                 ; preds = %vector.body, %entry1802  %s.0.lcssa = phi i32 [ 0, %entry ], [ %5, %vector.body ]1803  ret i32 %s.0.lcssa1804}1805 1806define i32 @mla8i32(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {1807; CHECK-LABEL: mla8i32:1808; CHECK:       @ %bb.0: @ %entry1809; CHECK-NEXT:    .save {r7, lr}1810; CHECK-NEXT:    push {r7, lr}1811; CHECK-NEXT:    cbz r2, .LBB20_41812; CHECK-NEXT:  @ %bb.1: @ %vector.ph1813; CHECK-NEXT:    mov.w r12, #01814; CHECK-NEXT:    dlstp.16 lr, r21815; CHECK-NEXT:  .LBB20_2: @ %vector.body1816; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11817; CHECK-NEXT:    vldrh.u16 q0, [r0], #161818; CHECK-NEXT:    vldrh.u16 q1, [r1], #161819; CHECK-NEXT:    vmlava.s16 r12, q1, q01820; CHECK-NEXT:    letp lr, .LBB20_21821; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1822; CHECK-NEXT:    mov r0, r121823; CHECK-NEXT:    pop {r7, pc}1824; CHECK-NEXT:  .LBB20_4:1825; CHECK-NEXT:    mov.w r12, #01826; CHECK-NEXT:    mov r0, r121827; CHECK-NEXT:    pop {r7, pc}1828entry:1829  %cmp9.not = icmp eq i32 %n, 01830  br i1 %cmp9.not, label %for.cond.cleanup, label %vector.ph1831 1832vector.ph:                                        ; preds = %entry1833  %n.rnd.up = add i32 %n, 71834  %n.vec = and i32 %n.rnd.up, -81835  br label %vector.body1836 1837vector.body:                                      ; preds = %vector.body, %vector.ph1838  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1839  %vec.phi = phi i32 [ 0, %vector.ph ], [ %9, %vector.body ]1840  %active.lane.mask = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 %index, i32 %n)1841  %0 = getelementptr inbounds i16, ptr %x, i32 %index1842  %1 = bitcast ptr %0 to ptr1843  %wide.masked.load = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %1, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)1844  %2 = sext <8 x i16> %wide.masked.load to <8 x i32>1845  %3 = getelementptr inbounds i16, ptr %y, i32 %index1846  %4 = bitcast ptr %3 to ptr1847  %wide.masked.load14 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %4, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)1848  %5 = sext <8 x i16> %wide.masked.load14 to <8 x i32>1849  %6 = mul nsw <8 x i32> %5, %21850  %7 = select <8 x i1> %active.lane.mask, <8 x i32> %6, <8 x i32> zeroinitializer1851  %8 = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %7)1852  %9 = add i32 %8, %vec.phi1853  %index.next = add i32 %index, 81854  %10 = icmp eq i32 %index.next, %n.vec1855  br i1 %10, label %for.cond.cleanup, label %vector.body1856 1857for.cond.cleanup:                                 ; preds = %vector.body, %entry1858  %s.0.lcssa = phi i32 [ 0, %entry ], [ %9, %vector.body ]1859  ret i32 %s.0.lcssa1860}1861 1862define i32 @add16i32(ptr noalias nocapture readonly %x, i32 %n) {1863; CHECK-LABEL: add16i32:1864; CHECK:       @ %bb.0: @ %entry1865; CHECK-NEXT:    .save {r7, lr}1866; CHECK-NEXT:    push {r7, lr}1867; CHECK-NEXT:    cbz r1, .LBB21_41868; CHECK-NEXT:  @ %bb.1: @ %vector.ph1869; CHECK-NEXT:    movs r2, #01870; CHECK-NEXT:    dlstp.8 lr, r11871; CHECK-NEXT:  .LBB21_2: @ %vector.body1872; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11873; CHECK-NEXT:    vldrb.u8 q0, [r0], #161874; CHECK-NEXT:    vaddva.u8 r2, q01875; CHECK-NEXT:    letp lr, .LBB21_21876; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1877; CHECK-NEXT:    mov r0, r21878; CHECK-NEXT:    pop {r7, pc}1879; CHECK-NEXT:  .LBB21_4:1880; CHECK-NEXT:    movs r2, #01881; CHECK-NEXT:    mov r0, r21882; CHECK-NEXT:    pop {r7, pc}1883entry:1884  %cmp6.not = icmp eq i32 %n, 01885  br i1 %cmp6.not, label %for.cond.cleanup, label %vector.ph1886 1887vector.ph:                                        ; preds = %entry1888  %n.rnd.up = add i32 %n, 151889  %n.vec = and i32 %n.rnd.up, -161890  br label %vector.body1891 1892vector.body:                                      ; preds = %vector.body, %vector.ph1893  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1894  %vec.phi = phi i32 [ 0, %vector.ph ], [ %5, %vector.body ]1895  %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %n)1896  %0 = getelementptr inbounds i8, ptr %x, i32 %index1897  %1 = bitcast ptr %0 to ptr1898  %wide.masked.load = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %1, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)1899  %2 = zext <16 x i8> %wide.masked.load to <16 x i32>1900  %3 = select <16 x i1> %active.lane.mask, <16 x i32> %2, <16 x i32> zeroinitializer1901  %4 = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %3)1902  %5 = add i32 %4, %vec.phi1903  %index.next = add i32 %index, 161904  %6 = icmp eq i32 %index.next, %n.vec1905  br i1 %6, label %for.cond.cleanup, label %vector.body1906 1907for.cond.cleanup:                                 ; preds = %vector.body, %entry1908  %s.0.lcssa = phi i32 [ 0, %entry ], [ %5, %vector.body ]1909  ret i32 %s.0.lcssa1910}1911 1912define i32 @mla16i32(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {1913; CHECK-LABEL: mla16i32:1914; CHECK:       @ %bb.0: @ %entry1915; CHECK-NEXT:    .save {r7, lr}1916; CHECK-NEXT:    push {r7, lr}1917; CHECK-NEXT:    cbz r2, .LBB22_41918; CHECK-NEXT:  @ %bb.1: @ %vector.ph1919; CHECK-NEXT:    mov.w r12, #01920; CHECK-NEXT:    dlstp.8 lr, r21921; CHECK-NEXT:  .LBB22_2: @ %vector.body1922; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11923; CHECK-NEXT:    vldrb.u8 q0, [r0], #161924; CHECK-NEXT:    vldrb.u8 q1, [r1], #161925; CHECK-NEXT:    vmlava.u8 r12, q1, q01926; CHECK-NEXT:    letp lr, .LBB22_21927; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1928; CHECK-NEXT:    mov r0, r121929; CHECK-NEXT:    pop {r7, pc}1930; CHECK-NEXT:  .LBB22_4:1931; CHECK-NEXT:    mov.w r12, #01932; CHECK-NEXT:    mov r0, r121933; CHECK-NEXT:    pop {r7, pc}1934entry:1935  %cmp9.not = icmp eq i32 %n, 01936  br i1 %cmp9.not, label %for.cond.cleanup, label %vector.ph1937 1938vector.ph:                                        ; preds = %entry1939  %n.rnd.up = add i32 %n, 151940  %n.vec = and i32 %n.rnd.up, -161941  br label %vector.body1942 1943vector.body:                                      ; preds = %vector.body, %vector.ph1944  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]1945  %vec.phi = phi i32 [ 0, %vector.ph ], [ %9, %vector.body ]1946  %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %n)1947  %0 = getelementptr inbounds i8, ptr %x, i32 %index1948  %1 = bitcast ptr %0 to ptr1949  %wide.masked.load = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %1, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)1950  %2 = zext <16 x i8> %wide.masked.load to <16 x i32>1951  %3 = getelementptr inbounds i8, ptr %y, i32 %index1952  %4 = bitcast ptr %3 to ptr1953  %wide.masked.load14 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %4, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)1954  %5 = zext <16 x i8> %wide.masked.load14 to <16 x i32>1955  %6 = mul nuw nsw <16 x i32> %5, %21956  %7 = select <16 x i1> %active.lane.mask, <16 x i32> %6, <16 x i32> zeroinitializer1957  %8 = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %7)1958  %9 = add i32 %8, %vec.phi1959  %index.next = add i32 %index, 161960  %10 = icmp eq i32 %index.next, %n.vec1961  br i1 %10, label %for.cond.cleanup, label %vector.body1962 1963for.cond.cleanup:                                 ; preds = %vector.body, %entry1964  %s.0.lcssa = phi i32 [ 0, %entry ], [ %9, %vector.body ]1965  ret i32 %s.0.lcssa1966}1967 1968define signext i16 @add8i16(ptr noalias nocapture readonly %x, i32 %n) {1969; CHECK-LABEL: add8i16:1970; CHECK:       @ %bb.0: @ %entry1971; CHECK-NEXT:    .save {r7, lr}1972; CHECK-NEXT:    push {r7, lr}1973; CHECK-NEXT:    cbz r1, .LBB23_41974; CHECK-NEXT:  @ %bb.1: @ %vector.ph1975; CHECK-NEXT:    movs r2, #01976; CHECK-NEXT:    dlstp.16 lr, r11977; CHECK-NEXT:  .LBB23_2: @ %vector.body1978; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=11979; CHECK-NEXT:    vldrh.u16 q0, [r0], #161980; CHECK-NEXT:    vaddva.u16 r2, q01981; CHECK-NEXT:    letp lr, .LBB23_21982; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup1983; CHECK-NEXT:    sxth r0, r21984; CHECK-NEXT:    pop {r7, pc}1985; CHECK-NEXT:  .LBB23_4:1986; CHECK-NEXT:    movs r2, #01987; CHECK-NEXT:    sxth r0, r21988; CHECK-NEXT:    pop {r7, pc}1989entry:1990  %cmp8.not = icmp eq i32 %n, 01991  br i1 %cmp8.not, label %for.cond.cleanup, label %vector.ph1992 1993vector.ph:                                        ; preds = %entry1994  %n.rnd.up = add i32 %n, 71995  %n.vec = and i32 %n.rnd.up, -81996  br label %vector.body1997 1998vector.body:                                      ; preds = %vector.body, %vector.ph1999  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2000  %vec.phi = phi i16 [ 0, %vector.ph ], [ %4, %vector.body ]2001  %active.lane.mask = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 %index, i32 %n)2002  %0 = getelementptr inbounds i16, ptr %x, i32 %index2003  %1 = bitcast ptr %0 to ptr2004  %wide.masked.load = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %1, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)2005  %2 = select <8 x i1> %active.lane.mask, <8 x i16> %wide.masked.load, <8 x i16> zeroinitializer2006  %3 = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %2)2007  %4 = add i16 %3, %vec.phi2008  %index.next = add i32 %index, 82009  %5 = icmp eq i32 %index.next, %n.vec2010  br i1 %5, label %for.cond.cleanup, label %vector.body2011 2012for.cond.cleanup:                                 ; preds = %vector.body, %entry2013  %s.0.lcssa = phi i16 [ 0, %entry ], [ %4, %vector.body ]2014  ret i16 %s.0.lcssa2015}2016 2017define signext i16 @mla8i16(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {2018; CHECK-LABEL: mla8i16:2019; CHECK:       @ %bb.0: @ %entry2020; CHECK-NEXT:    .save {r7, lr}2021; CHECK-NEXT:    push {r7, lr}2022; CHECK-NEXT:    cbz r2, .LBB24_42023; CHECK-NEXT:  @ %bb.1: @ %vector.ph2024; CHECK-NEXT:    mov.w r12, #02025; CHECK-NEXT:    dlstp.16 lr, r22026; CHECK-NEXT:  .LBB24_2: @ %vector.body2027; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12028; CHECK-NEXT:    vldrh.u16 q0, [r0], #162029; CHECK-NEXT:    vldrh.u16 q1, [r1], #162030; CHECK-NEXT:    vmlava.u16 r12, q1, q02031; CHECK-NEXT:    letp lr, .LBB24_22032; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup2033; CHECK-NEXT:    sxth.w r0, r122034; CHECK-NEXT:    pop {r7, pc}2035; CHECK-NEXT:  .LBB24_4:2036; CHECK-NEXT:    mov.w r12, #02037; CHECK-NEXT:    sxth.w r0, r122038; CHECK-NEXT:    pop {r7, pc}2039entry:2040  %cmp11.not = icmp eq i32 %n, 02041  br i1 %cmp11.not, label %for.cond.cleanup, label %vector.ph2042 2043vector.ph:                                        ; preds = %entry2044  %n.rnd.up = add i32 %n, 72045  %n.vec = and i32 %n.rnd.up, -82046  br label %vector.body2047 2048vector.body:                                      ; preds = %vector.body, %vector.ph2049  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2050  %vec.phi = phi i16 [ 0, %vector.ph ], [ %7, %vector.body ]2051  %active.lane.mask = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 %index, i32 %n)2052  %0 = getelementptr inbounds i16, ptr %x, i32 %index2053  %1 = bitcast ptr %0 to ptr2054  %wide.masked.load = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %1, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)2055  %2 = getelementptr inbounds i16, ptr %y, i32 %index2056  %3 = bitcast ptr %2 to ptr2057  %wide.masked.load16 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %3, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)2058  %4 = mul <8 x i16> %wide.masked.load16, %wide.masked.load2059  %5 = select <8 x i1> %active.lane.mask, <8 x i16> %4, <8 x i16> zeroinitializer2060  %6 = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %5)2061  %7 = add i16 %6, %vec.phi2062  %index.next = add i32 %index, 82063  %8 = icmp eq i32 %index.next, %n.vec2064  br i1 %8, label %for.cond.cleanup, label %vector.body2065 2066for.cond.cleanup:                                 ; preds = %vector.body, %entry2067  %s.0.lcssa = phi i16 [ 0, %entry ], [ %7, %vector.body ]2068  ret i16 %s.0.lcssa2069}2070 2071define signext i16 @add16i16(ptr noalias nocapture readonly %x, i32 %n) {2072; CHECK-LABEL: add16i16:2073; CHECK:       @ %bb.0: @ %entry2074; CHECK-NEXT:    .save {r7, lr}2075; CHECK-NEXT:    push {r7, lr}2076; CHECK-NEXT:    cbz r1, .LBB25_42077; CHECK-NEXT:  @ %bb.1: @ %vector.ph2078; CHECK-NEXT:    movs r2, #02079; CHECK-NEXT:    dlstp.8 lr, r12080; CHECK-NEXT:  .LBB25_2: @ %vector.body2081; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12082; CHECK-NEXT:    vldrb.u8 q0, [r0], #162083; CHECK-NEXT:    vaddva.u8 r2, q02084; CHECK-NEXT:    letp lr, .LBB25_22085; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup2086; CHECK-NEXT:    sxth r0, r22087; CHECK-NEXT:    pop {r7, pc}2088; CHECK-NEXT:  .LBB25_4:2089; CHECK-NEXT:    movs r2, #02090; CHECK-NEXT:    sxth r0, r22091; CHECK-NEXT:    pop {r7, pc}2092entry:2093  %cmp8.not = icmp eq i32 %n, 02094  br i1 %cmp8.not, label %for.cond.cleanup, label %vector.ph2095 2096vector.ph:                                        ; preds = %entry2097  %n.rnd.up = add i32 %n, 152098  %n.vec = and i32 %n.rnd.up, -162099  br label %vector.body2100 2101vector.body:                                      ; preds = %vector.body, %vector.ph2102  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2103  %vec.phi = phi i16 [ 0, %vector.ph ], [ %5, %vector.body ]2104  %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %n)2105  %0 = getelementptr inbounds i8, ptr %x, i32 %index2106  %1 = bitcast ptr %0 to ptr2107  %wide.masked.load = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %1, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)2108  %2 = zext <16 x i8> %wide.masked.load to <16 x i16>2109  %3 = select <16 x i1> %active.lane.mask, <16 x i16> %2, <16 x i16> zeroinitializer2110  %4 = call i16 @llvm.vector.reduce.add.v16i16(<16 x i16> %3)2111  %5 = add i16 %4, %vec.phi2112  %index.next = add i32 %index, 162113  %6 = icmp eq i32 %index.next, %n.vec2114  br i1 %6, label %for.cond.cleanup, label %vector.body2115 2116for.cond.cleanup:                                 ; preds = %vector.body, %entry2117  %s.0.lcssa = phi i16 [ 0, %entry ], [ %5, %vector.body ]2118  ret i16 %s.0.lcssa2119}2120 2121define signext i16 @mla16i16(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {2122; CHECK-LABEL: mla16i16:2123; CHECK:       @ %bb.0: @ %entry2124; CHECK-NEXT:    .save {r7, lr}2125; CHECK-NEXT:    push {r7, lr}2126; CHECK-NEXT:    cbz r2, .LBB26_42127; CHECK-NEXT:  @ %bb.1: @ %vector.ph2128; CHECK-NEXT:    mov.w r12, #02129; CHECK-NEXT:    dlstp.8 lr, r22130; CHECK-NEXT:  .LBB26_2: @ %vector.body2131; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12132; CHECK-NEXT:    vldrb.u8 q0, [r0], #162133; CHECK-NEXT:    vldrb.u8 q1, [r1], #162134; CHECK-NEXT:    vmlava.u8 r12, q1, q02135; CHECK-NEXT:    letp lr, .LBB26_22136; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup2137; CHECK-NEXT:    sxth.w r0, r122138; CHECK-NEXT:    pop {r7, pc}2139; CHECK-NEXT:  .LBB26_4:2140; CHECK-NEXT:    mov.w r12, #02141; CHECK-NEXT:    sxth.w r0, r122142; CHECK-NEXT:    pop {r7, pc}2143entry:2144  %cmp13.not = icmp eq i32 %n, 02145  br i1 %cmp13.not, label %for.cond.cleanup, label %vector.ph2146 2147vector.ph:                                        ; preds = %entry2148  %n.rnd.up = add i32 %n, 152149  %n.vec = and i32 %n.rnd.up, -162150  br label %vector.body2151 2152vector.body:                                      ; preds = %vector.body, %vector.ph2153  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2154  %vec.phi = phi i16 [ 0, %vector.ph ], [ %9, %vector.body ]2155  %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %n)2156  %0 = getelementptr inbounds i8, ptr %x, i32 %index2157  %1 = bitcast ptr %0 to ptr2158  %wide.masked.load = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %1, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)2159  %2 = zext <16 x i8> %wide.masked.load to <16 x i16>2160  %3 = getelementptr inbounds i8, ptr %y, i32 %index2161  %4 = bitcast ptr %3 to ptr2162  %wide.masked.load18 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %4, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)2163  %5 = zext <16 x i8> %wide.masked.load18 to <16 x i16>2164  %6 = mul nuw <16 x i16> %5, %22165  %7 = select <16 x i1> %active.lane.mask, <16 x i16> %6, <16 x i16> zeroinitializer2166  %8 = call i16 @llvm.vector.reduce.add.v16i16(<16 x i16> %7)2167  %9 = add i16 %8, %vec.phi2168  %index.next = add i32 %index, 162169  %10 = icmp eq i32 %index.next, %n.vec2170  br i1 %10, label %for.cond.cleanup, label %vector.body2171 2172for.cond.cleanup:                                 ; preds = %vector.body, %entry2173  %s.0.lcssa = phi i16 [ 0, %entry ], [ %9, %vector.body ]2174  ret i16 %s.0.lcssa2175}2176 2177define zeroext i8 @add16i8(ptr noalias nocapture readonly %x, i32 %n) {2178; CHECK-LABEL: add16i8:2179; CHECK:       @ %bb.0: @ %entry2180; CHECK-NEXT:    .save {r7, lr}2181; CHECK-NEXT:    push {r7, lr}2182; CHECK-NEXT:    cbz r1, .LBB27_42183; CHECK-NEXT:  @ %bb.1: @ %vector.ph2184; CHECK-NEXT:    movs r2, #02185; CHECK-NEXT:    dlstp.8 lr, r12186; CHECK-NEXT:  .LBB27_2: @ %vector.body2187; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12188; CHECK-NEXT:    vldrb.u8 q0, [r0], #162189; CHECK-NEXT:    vaddva.u8 r2, q02190; CHECK-NEXT:    letp lr, .LBB27_22191; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup2192; CHECK-NEXT:    uxtb r0, r22193; CHECK-NEXT:    pop {r7, pc}2194; CHECK-NEXT:  .LBB27_4:2195; CHECK-NEXT:    movs r2, #02196; CHECK-NEXT:    uxtb r0, r22197; CHECK-NEXT:    pop {r7, pc}2198entry:2199  %cmp7.not = icmp eq i32 %n, 02200  br i1 %cmp7.not, label %for.cond.cleanup, label %vector.ph2201 2202vector.ph:                                        ; preds = %entry2203  %n.rnd.up = add i32 %n, 152204  %n.vec = and i32 %n.rnd.up, -162205  br label %vector.body2206 2207vector.body:                                      ; preds = %vector.body, %vector.ph2208  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2209  %vec.phi = phi i8 [ 0, %vector.ph ], [ %4, %vector.body ]2210  %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %n)2211  %0 = getelementptr inbounds i8, ptr %x, i32 %index2212  %1 = bitcast ptr %0 to ptr2213  %wide.masked.load = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %1, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)2214  %2 = select <16 x i1> %active.lane.mask, <16 x i8> %wide.masked.load, <16 x i8> zeroinitializer2215  %3 = call i8 @llvm.vector.reduce.add.v16i8(<16 x i8> %2)2216  %4 = add i8 %3, %vec.phi2217  %index.next = add i32 %index, 162218  %5 = icmp eq i32 %index.next, %n.vec2219  br i1 %5, label %for.cond.cleanup, label %vector.body2220 2221for.cond.cleanup:                                 ; preds = %vector.body, %entry2222  %s.0.lcssa = phi i8 [ 0, %entry ], [ %4, %vector.body ]2223  ret i8 %s.0.lcssa2224}2225 2226define zeroext i8 @mla16i8(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {2227; CHECK-LABEL: mla16i8:2228; CHECK:       @ %bb.0: @ %entry2229; CHECK-NEXT:    .save {r7, lr}2230; CHECK-NEXT:    push {r7, lr}2231; CHECK-NEXT:    cbz r2, .LBB28_42232; CHECK-NEXT:  @ %bb.1: @ %vector.ph2233; CHECK-NEXT:    mov.w r12, #02234; CHECK-NEXT:    dlstp.8 lr, r22235; CHECK-NEXT:  .LBB28_2: @ %vector.body2236; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12237; CHECK-NEXT:    vldrb.u8 q0, [r0], #162238; CHECK-NEXT:    vldrb.u8 q1, [r1], #162239; CHECK-NEXT:    vmlava.u8 r12, q1, q02240; CHECK-NEXT:    letp lr, .LBB28_22241; CHECK-NEXT:  @ %bb.3: @ %for.cond.cleanup2242; CHECK-NEXT:    uxtb.w r0, r122243; CHECK-NEXT:    pop {r7, pc}2244; CHECK-NEXT:  .LBB28_4:2245; CHECK-NEXT:    mov.w r12, #02246; CHECK-NEXT:    uxtb.w r0, r122247; CHECK-NEXT:    pop {r7, pc}2248entry:2249  %cmp10.not = icmp eq i32 %n, 02250  br i1 %cmp10.not, label %for.cond.cleanup, label %vector.ph2251 2252vector.ph:                                        ; preds = %entry2253  %n.rnd.up = add i32 %n, 152254  %n.vec = and i32 %n.rnd.up, -162255  br label %vector.body2256 2257vector.body:                                      ; preds = %vector.body, %vector.ph2258  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2259  %vec.phi = phi i8 [ 0, %vector.ph ], [ %7, %vector.body ]2260  %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %n)2261  %0 = getelementptr inbounds i8, ptr %x, i32 %index2262  %1 = bitcast ptr %0 to ptr2263  %wide.masked.load = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %1, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)2264  %2 = getelementptr inbounds i8, ptr %y, i32 %index2265  %3 = bitcast ptr %2 to ptr2266  %wide.masked.load15 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %3, i32 1, <16 x i1> %active.lane.mask, <16 x i8> undef)2267  %4 = mul <16 x i8> %wide.masked.load15, %wide.masked.load2268  %5 = select <16 x i1> %active.lane.mask, <16 x i8> %4, <16 x i8> zeroinitializer2269  %6 = call i8 @llvm.vector.reduce.add.v16i8(<16 x i8> %5)2270  %7 = add i8 %6, %vec.phi2271  %index.next = add i32 %index, 162272  %8 = icmp eq i32 %index.next, %n.vec2273  br i1 %8, label %for.cond.cleanup, label %vector.body2274 2275for.cond.cleanup:                                 ; preds = %vector.body, %entry2276  %s.0.lcssa = phi i8 [ 0, %entry ], [ %7, %vector.body ]2277  ret i8 %s.0.lcssa2278}2279 2280define i64 @add4i64(ptr noalias nocapture readonly %x, i32 %n) {2281; CHECK-LABEL: add4i64:2282; CHECK:       @ %bb.0: @ %entry2283; CHECK-NEXT:    .save {r7, lr}2284; CHECK-NEXT:    push {r7, lr}2285; CHECK-NEXT:    cbz r1, .LBB29_32286; CHECK-NEXT:  @ %bb.1: @ %vector.ph2287; CHECK-NEXT:    movs r2, #02288; CHECK-NEXT:    mov r3, r22289; CHECK-NEXT:    dlstp.32 lr, r12290; CHECK-NEXT:  .LBB29_2: @ %vector.body2291; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12292; CHECK-NEXT:    vldrw.u32 q0, [r0], #162293; CHECK-NEXT:    vaddlva.s32 r2, r3, q02294; CHECK-NEXT:    letp lr, .LBB29_22295; CHECK-NEXT:    b .LBB29_42296; CHECK-NEXT:  .LBB29_3:2297; CHECK-NEXT:    movs r2, #02298; CHECK-NEXT:    mov r3, r22299; CHECK-NEXT:  .LBB29_4: @ %for.cond.cleanup2300; CHECK-NEXT:    mov r0, r22301; CHECK-NEXT:    mov r1, r32302; CHECK-NEXT:    pop {r7, pc}2303entry:2304  %cmp6.not = icmp eq i32 %n, 02305  br i1 %cmp6.not, label %for.cond.cleanup, label %vector.ph2306 2307vector.ph:                                        ; preds = %entry2308  %n.rnd.up = add i32 %n, 32309  %n.vec = and i32 %n.rnd.up, -42310  br label %vector.body2311 2312vector.body:                                      ; preds = %vector.body, %vector.ph2313  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2314  %vec.phi = phi i64 [ 0, %vector.ph ], [ %5, %vector.body ]2315  %active.lane.mask = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index, i32 %n)2316  %0 = getelementptr inbounds i32, ptr %x, i32 %index2317  %1 = bitcast ptr %0 to ptr2318  %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %1, i32 4, <4 x i1> %active.lane.mask, <4 x i32> undef)2319  %2 = sext <4 x i32> %wide.masked.load to <4 x i64>2320  %3 = select <4 x i1> %active.lane.mask, <4 x i64> %2, <4 x i64> zeroinitializer2321  %4 = call i64 @llvm.vector.reduce.add.v4i64(<4 x i64> %3)2322  %5 = add i64 %4, %vec.phi2323  %index.next = add i32 %index, 42324  %6 = icmp eq i32 %index.next, %n.vec2325  br i1 %6, label %for.cond.cleanup, label %vector.body2326 2327for.cond.cleanup:                                 ; preds = %vector.body, %entry2328  %s.0.lcssa = phi i64 [ 0, %entry ], [ %5, %vector.body ]2329  ret i64 %s.0.lcssa2330}2331 2332define i64 @mla4i64(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {2333; CHECK-LABEL: mla4i64:2334; CHECK:       @ %bb.0: @ %entry2335; CHECK-NEXT:    .save {r7, lr}2336; CHECK-NEXT:    push {r7, lr}2337; CHECK-NEXT:    cbz r2, .LBB30_32338; CHECK-NEXT:  @ %bb.1: @ %vector.ph2339; CHECK-NEXT:    mov.w r12, #02340; CHECK-NEXT:    mov r3, r122341; CHECK-NEXT:    dlstp.32 lr, r22342; CHECK-NEXT:  .LBB30_2: @ %vector.body2343; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12344; CHECK-NEXT:    vldrw.u32 q0, [r0], #162345; CHECK-NEXT:    vldrw.u32 q1, [r1], #162346; CHECK-NEXT:    vmlalva.s32 r12, r3, q1, q02347; CHECK-NEXT:    letp lr, .LBB30_22348; CHECK-NEXT:    b .LBB30_42349; CHECK-NEXT:  .LBB30_3:2350; CHECK-NEXT:    mov.w r12, #02351; CHECK-NEXT:    mov r3, r122352; CHECK-NEXT:  .LBB30_4: @ %for.cond.cleanup2353; CHECK-NEXT:    mov r0, r122354; CHECK-NEXT:    mov r1, r32355; CHECK-NEXT:    pop {r7, pc}2356entry:2357  %cmp9.not = icmp eq i32 %n, 02358  br i1 %cmp9.not, label %for.cond.cleanup, label %vector.ph2359 2360vector.ph:                                        ; preds = %entry2361  %n.rnd.up = add i32 %n, 32362  %n.vec = and i32 %n.rnd.up, -42363  br label %vector.body2364 2365vector.body:                                      ; preds = %vector.body, %vector.ph2366  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2367  %vec.phi = phi i64 [ 0, %vector.ph ], [ %9, %vector.body ]2368  %active.lane.mask = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index, i32 %n)2369  %0 = getelementptr inbounds i32, ptr %x, i32 %index2370  %1 = bitcast ptr %0 to ptr2371  %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %1, i32 4, <4 x i1> %active.lane.mask, <4 x i32> undef)2372  %2 = sext <4 x i32> %wide.masked.load to <4 x i64>2373  %3 = getelementptr inbounds i32, ptr %y, i32 %index2374  %4 = bitcast ptr %3 to ptr2375  %wide.masked.load14 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %4, i32 4, <4 x i1> %active.lane.mask, <4 x i32> undef)2376  %5 = sext <4 x i32> %wide.masked.load14 to <4 x i64>2377  %6 = mul nsw <4 x i64> %5, %22378  %7 = select <4 x i1> %active.lane.mask, <4 x i64> %6, <4 x i64> zeroinitializer2379  %8 = call i64 @llvm.vector.reduce.add.v4i64(<4 x i64> %7)2380  %9 = add i64 %8, %vec.phi2381  %index.next = add i32 %index, 42382  %10 = icmp eq i32 %index.next, %n.vec2383  br i1 %10, label %for.cond.cleanup, label %vector.body2384 2385for.cond.cleanup:                                 ; preds = %vector.body, %entry2386  %s.0.lcssa = phi i64 [ 0, %entry ], [ %9, %vector.body ]2387  ret i64 %s.0.lcssa2388}2389 2390define i64 @mla8i64(ptr noalias nocapture readonly %x, ptr noalias nocapture readonly %y, i32 %n) {2391; CHECK-LABEL: mla8i64:2392; CHECK:       @ %bb.0: @ %entry2393; CHECK-NEXT:    .save {r7, lr}2394; CHECK-NEXT:    push {r7, lr}2395; CHECK-NEXT:    cbz r2, .LBB31_32396; CHECK-NEXT:  @ %bb.1: @ %vector.ph2397; CHECK-NEXT:    mov.w r12, #02398; CHECK-NEXT:    mov r3, r122399; CHECK-NEXT:    dlstp.16 lr, r22400; CHECK-NEXT:  .LBB31_2: @ %vector.body2401; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=12402; CHECK-NEXT:    vldrh.u16 q0, [r0], #162403; CHECK-NEXT:    vldrh.u16 q1, [r1], #162404; CHECK-NEXT:    vmlalva.s16 r12, r3, q1, q02405; CHECK-NEXT:    letp lr, .LBB31_22406; CHECK-NEXT:    b .LBB31_42407; CHECK-NEXT:  .LBB31_3:2408; CHECK-NEXT:    mov.w r12, #02409; CHECK-NEXT:    mov r3, r122410; CHECK-NEXT:  .LBB31_4: @ %for.cond.cleanup2411; CHECK-NEXT:    mov r0, r122412; CHECK-NEXT:    mov r1, r32413; CHECK-NEXT:    pop {r7, pc}2414entry:2415  %cmp9.not = icmp eq i32 %n, 02416  br i1 %cmp9.not, label %for.cond.cleanup, label %vector.ph2417 2418vector.ph:                                        ; preds = %entry2419  %n.rnd.up = add i32 %n, 72420  %n.vec = and i32 %n.rnd.up, -82421  br label %vector.body2422 2423vector.body:                                      ; preds = %vector.body, %vector.ph2424  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]2425  %vec.phi = phi i64 [ 0, %vector.ph ], [ %9, %vector.body ]2426  %active.lane.mask = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 %index, i32 %n)2427  %0 = getelementptr inbounds i16, ptr %x, i32 %index2428  %1 = bitcast ptr %0 to ptr2429  %wide.masked.load = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %1, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)2430  %2 = sext <8 x i16> %wide.masked.load to <8 x i64>2431  %3 = getelementptr inbounds i16, ptr %y, i32 %index2432  %4 = bitcast ptr %3 to ptr2433  %wide.masked.load14 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %4, i32 2, <8 x i1> %active.lane.mask, <8 x i16> undef)2434  %5 = sext <8 x i16> %wide.masked.load14 to <8 x i64>2435  %6 = mul nsw <8 x i64> %5, %22436  %7 = select <8 x i1> %active.lane.mask, <8 x i64> %6, <8 x i64> zeroinitializer2437  %8 = call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %7)2438  %9 = add i64 %8, %vec.phi2439  %index.next = add i32 %index, 82440  %10 = icmp eq i32 %index.next, %n.vec2441  br i1 %10, label %for.cond.cleanup, label %vector.body2442 2443for.cond.cleanup:                                 ; preds = %vector.body, %entry2444  %s.0.lcssa = phi i64 [ 0, %entry ], [ %9, %vector.body ]2445  ret i64 %s.0.lcssa2446}2447 2448declare <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32, i32) #12449declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32 immarg, <4 x i1>, <4 x i32>) #22450declare <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32, i32) #12451declare <8 x i16> @llvm.masked.load.v8i16.p0(ptr, i32 immarg, <8 x i1>, <8 x i16>) #22452declare i32 @llvm.vector.reduce.add.v8i32(<8 x i32>) #32453declare <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32, i32) #12454declare <16 x i8> @llvm.masked.load.v16i8.p0(ptr, i32 immarg, <16 x i1>, <16 x i8>) #22455declare i32 @llvm.vector.reduce.add.v16i32(<16 x i32>) #32456declare i16 @llvm.vector.reduce.add.v8i16(<8 x i16>) #32457declare i16 @llvm.vector.reduce.add.v16i16(<16 x i16>) #32458declare i8 @llvm.vector.reduce.add.v16i8(<16 x i8>) #32459declare i64 @llvm.vector.reduce.add.v4i64(<4 x i64>) #32460declare i64 @llvm.vector.reduce.add.v8i64(<8 x i64>) #32461 2462declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>)2463declare i32 @llvm.vector.reduce.mul.v4i32(<4 x i32>)2464declare i32 @llvm.vector.reduce.and.v4i32(<4 x i32>)2465declare i32 @llvm.vector.reduce.or.v4i32(<4 x i32>)2466declare i32 @llvm.vector.reduce.xor.v4i32(<4 x i32>)2467declare float @llvm.vector.reduce.fadd.f32.v4f32(float, <4 x float>)2468declare float @llvm.vector.reduce.fmul.f32.v4f32(float, <4 x float>)2469declare i32 @llvm.vector.reduce.smin.v4i32(<4 x i32>)2470declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>)2471declare i32 @llvm.vector.reduce.umin.v4i32(<4 x i32>)2472declare i32 @llvm.vector.reduce.umax.v4i32(<4 x i32>)2473declare float @llvm.vector.reduce.fmin.v4f32(<4 x float>)2474declare float @llvm.vector.reduce.fmax.v4f32(<4 x float>)2475