1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -debug-only=isel -o /dev/null 2>&1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker@a = global [1024 x i32] zeroinitializer, align 16 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @reduce_add() { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: reduce_add 8*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 9*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 10*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 11*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 12*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 13*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 14*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 15*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 16*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 17*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 18*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} add 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workermin.iters.checked: 21*9880d681SAndroid Build Coastguard Worker br label %vector.body 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workervector.body: 24*9880d681SAndroid Build Coastguard Worker %index = phi i64 [ 0, %min.iters.checked ], [ %index.next.4, %vector.body ] 25*9880d681SAndroid Build Coastguard Worker %vec.phi = phi <4 x i32> [ zeroinitializer, %min.iters.checked ], [ %28, %vector.body ] 26*9880d681SAndroid Build Coastguard Worker %vec.phi4 = phi <4 x i32> [ zeroinitializer, %min.iters.checked ], [ %29, %vector.body ] 27*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds [1024 x i32], [1024 x i32]* @a, i64 0, i64 %index 28*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32* %0 to <4 x i32>* 29*9880d681SAndroid Build Coastguard Worker %wide.load = load <4 x i32>, <4 x i32>* %1, align 16 30*9880d681SAndroid Build Coastguard Worker %2 = getelementptr i32, i32* %0, i64 4 31*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32* %2 to <4 x i32>* 32*9880d681SAndroid Build Coastguard Worker %wide.load5 = load <4 x i32>, <4 x i32>* %3, align 16 33*9880d681SAndroid Build Coastguard Worker %4 = add nsw <4 x i32> %wide.load, %vec.phi 34*9880d681SAndroid Build Coastguard Worker %5 = add nsw <4 x i32> %wide.load5, %vec.phi4 35*9880d681SAndroid Build Coastguard Worker %index.next = add nuw nsw i64 %index, 8 36*9880d681SAndroid Build Coastguard Worker %6 = getelementptr inbounds [1024 x i32], [1024 x i32]* @a, i64 0, i64 %index.next 37*9880d681SAndroid Build Coastguard Worker %7 = bitcast i32* %6 to <4 x i32>* 38*9880d681SAndroid Build Coastguard Worker %wide.load.1 = load <4 x i32>, <4 x i32>* %7, align 16 39*9880d681SAndroid Build Coastguard Worker %8 = getelementptr i32, i32* %6, i64 4 40*9880d681SAndroid Build Coastguard Worker %9 = bitcast i32* %8 to <4 x i32>* 41*9880d681SAndroid Build Coastguard Worker %wide.load5.1 = load <4 x i32>, <4 x i32>* %9, align 16 42*9880d681SAndroid Build Coastguard Worker %10 = add nsw <4 x i32> %wide.load.1, %4 43*9880d681SAndroid Build Coastguard Worker %11 = add nsw <4 x i32> %wide.load5.1, %5 44*9880d681SAndroid Build Coastguard Worker %index.next.1 = add nsw i64 %index, 16 45*9880d681SAndroid Build Coastguard Worker %12 = getelementptr inbounds [1024 x i32], [1024 x i32]* @a, i64 0, i64 %index.next.1 46*9880d681SAndroid Build Coastguard Worker %13 = bitcast i32* %12 to <4 x i32>* 47*9880d681SAndroid Build Coastguard Worker %wide.load.2 = load <4 x i32>, <4 x i32>* %13, align 16 48*9880d681SAndroid Build Coastguard Worker %14 = getelementptr i32, i32* %12, i64 4 49*9880d681SAndroid Build Coastguard Worker %15 = bitcast i32* %14 to <4 x i32>* 50*9880d681SAndroid Build Coastguard Worker %wide.load5.2 = load <4 x i32>, <4 x i32>* %15, align 16 51*9880d681SAndroid Build Coastguard Worker %16 = add nsw <4 x i32> %wide.load.2, %10 52*9880d681SAndroid Build Coastguard Worker %17 = add nsw <4 x i32> %wide.load5.2, %11 53*9880d681SAndroid Build Coastguard Worker %index.next.2 = add nsw i64 %index, 24 54*9880d681SAndroid Build Coastguard Worker %18 = getelementptr inbounds [1024 x i32], [1024 x i32]* @a, i64 0, i64 %index.next.2 55*9880d681SAndroid Build Coastguard Worker %19 = bitcast i32* %18 to <4 x i32>* 56*9880d681SAndroid Build Coastguard Worker %wide.load.3 = load <4 x i32>, <4 x i32>* %19, align 16 57*9880d681SAndroid Build Coastguard Worker %20 = getelementptr i32, i32* %18, i64 4 58*9880d681SAndroid Build Coastguard Worker %21 = bitcast i32* %20 to <4 x i32>* 59*9880d681SAndroid Build Coastguard Worker %wide.load5.3 = load <4 x i32>, <4 x i32>* %21, align 16 60*9880d681SAndroid Build Coastguard Worker %22 = add nsw <4 x i32> %wide.load.3, %16 61*9880d681SAndroid Build Coastguard Worker %23 = add nsw <4 x i32> %wide.load5.3, %17 62*9880d681SAndroid Build Coastguard Worker %index.next.3 = add nsw i64 %index, 32 63*9880d681SAndroid Build Coastguard Worker %24 = getelementptr inbounds [1024 x i32], [1024 x i32]* @a, i64 0, i64 %index.next.3 64*9880d681SAndroid Build Coastguard Worker %25 = bitcast i32* %24 to <4 x i32>* 65*9880d681SAndroid Build Coastguard Worker %wide.load.4 = load <4 x i32>, <4 x i32>* %25, align 16 66*9880d681SAndroid Build Coastguard Worker %26 = getelementptr i32, i32* %24, i64 4 67*9880d681SAndroid Build Coastguard Worker %27 = bitcast i32* %26 to <4 x i32>* 68*9880d681SAndroid Build Coastguard Worker %wide.load5.4 = load <4 x i32>, <4 x i32>* %27, align 16 69*9880d681SAndroid Build Coastguard Worker %28 = add nsw <4 x i32> %wide.load.4, %22 70*9880d681SAndroid Build Coastguard Worker %29 = add nsw <4 x i32> %wide.load5.4, %23 71*9880d681SAndroid Build Coastguard Worker %index.next.4 = add nsw i64 %index, 40 72*9880d681SAndroid Build Coastguard Worker %30 = icmp eq i64 %index.next.4, 1000 73*9880d681SAndroid Build Coastguard Worker br i1 %30, label %middle.block, label %vector.body 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workermiddle.block: 76*9880d681SAndroid Build Coastguard Worker %.lcssa10 = phi <4 x i32> [ %29, %vector.body ] 77*9880d681SAndroid Build Coastguard Worker %.lcssa = phi <4 x i32> [ %28, %vector.body ] 78*9880d681SAndroid Build Coastguard Worker %bin.rdx = add <4 x i32> %.lcssa10, %.lcssa 79*9880d681SAndroid Build Coastguard Worker %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef> 80*9880d681SAndroid Build Coastguard Worker %bin.rdx6 = add <4 x i32> %bin.rdx, %rdx.shuf 81*9880d681SAndroid Build Coastguard Worker %rdx.shuf7 = shufflevector <4 x i32> %bin.rdx6, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef> 82*9880d681SAndroid Build Coastguard Worker %bin.rdx8 = add <4 x i32> %bin.rdx6, %rdx.shuf7 83*9880d681SAndroid Build Coastguard Worker %31 = extractelement <4 x i32> %bin.rdx8, i32 0 84*9880d681SAndroid Build Coastguard Worker ret i32 %31 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine i32 @reduce_and() { 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: reduce_and 89*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 90*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 91*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 92*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 93*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 94*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 95*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 96*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 97*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} and 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerentry: 100*9880d681SAndroid Build Coastguard Worker br label %vector.body 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workervector.body: 103*9880d681SAndroid Build Coastguard Worker %lsr.iv = phi i64 [ %lsr.iv.next, %vector.body ], [ -4096, %entry ] 104*9880d681SAndroid Build Coastguard Worker %vec.phi = phi <4 x i32> [ <i32 -1, i32 -1, i32 -1, i32 -1>, %entry ], [ %6, %vector.body ] 105*9880d681SAndroid Build Coastguard Worker %vec.phi9 = phi <4 x i32> [ <i32 -1, i32 -1, i32 -1, i32 -1>, %entry ], [ %7, %vector.body ] 106*9880d681SAndroid Build Coastguard Worker %uglygep33 = getelementptr i8, i8* bitcast ([1024 x i32]* @a to i8*), i64 %lsr.iv 107*9880d681SAndroid Build Coastguard Worker %uglygep3334 = bitcast i8* %uglygep33 to <4 x i32>* 108*9880d681SAndroid Build Coastguard Worker %scevgep35 = getelementptr <4 x i32>, <4 x i32>* %uglygep3334, i64 256 109*9880d681SAndroid Build Coastguard Worker %wide.load = load <4 x i32>, <4 x i32>* %scevgep35, align 16 110*9880d681SAndroid Build Coastguard Worker %scevgep36 = getelementptr <4 x i32>, <4 x i32>* %uglygep3334, i64 257 111*9880d681SAndroid Build Coastguard Worker %wide.load10 = load <4 x i32>, <4 x i32>* %scevgep36, align 16 112*9880d681SAndroid Build Coastguard Worker %0 = and <4 x i32> %wide.load, %vec.phi 113*9880d681SAndroid Build Coastguard Worker %1 = and <4 x i32> %wide.load10, %vec.phi9 114*9880d681SAndroid Build Coastguard Worker %uglygep30 = getelementptr i8, i8* bitcast ([1024 x i32]* @a to i8*), i64 %lsr.iv 115*9880d681SAndroid Build Coastguard Worker %uglygep3031 = bitcast i8* %uglygep30 to <4 x i32>* 116*9880d681SAndroid Build Coastguard Worker %scevgep32 = getelementptr <4 x i32>, <4 x i32>* %uglygep3031, i64 258 117*9880d681SAndroid Build Coastguard Worker %wide.load.1 = load <4 x i32>, <4 x i32>* %scevgep32, align 16 118*9880d681SAndroid Build Coastguard Worker %uglygep27 = getelementptr i8, i8* bitcast ([1024 x i32]* @a to i8*), i64 %lsr.iv 119*9880d681SAndroid Build Coastguard Worker %uglygep2728 = bitcast i8* %uglygep27 to <4 x i32>* 120*9880d681SAndroid Build Coastguard Worker %scevgep29 = getelementptr <4 x i32>, <4 x i32>* %uglygep2728, i64 259 121*9880d681SAndroid Build Coastguard Worker %wide.load10.1 = load <4 x i32>, <4 x i32>* %scevgep29, align 16 122*9880d681SAndroid Build Coastguard Worker %2 = and <4 x i32> %wide.load.1, %0 123*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %wide.load10.1, %1 124*9880d681SAndroid Build Coastguard Worker %uglygep24 = getelementptr i8, i8* bitcast ([1024 x i32]* @a to i8*), i64 %lsr.iv 125*9880d681SAndroid Build Coastguard Worker %uglygep2425 = bitcast i8* %uglygep24 to <4 x i32>* 126*9880d681SAndroid Build Coastguard Worker %scevgep26 = getelementptr <4 x i32>, <4 x i32>* %uglygep2425, i64 260 127*9880d681SAndroid Build Coastguard Worker %wide.load.2 = load <4 x i32>, <4 x i32>* %scevgep26, align 16 128*9880d681SAndroid Build Coastguard Worker %uglygep21 = getelementptr i8, i8* bitcast ([1024 x i32]* @a to i8*), i64 %lsr.iv 129*9880d681SAndroid Build Coastguard Worker %uglygep2122 = bitcast i8* %uglygep21 to <4 x i32>* 130*9880d681SAndroid Build Coastguard Worker %scevgep23 = getelementptr <4 x i32>, <4 x i32>* %uglygep2122, i64 261 131*9880d681SAndroid Build Coastguard Worker %wide.load10.2 = load <4 x i32>, <4 x i32>* %scevgep23, align 16 132*9880d681SAndroid Build Coastguard Worker %4 = and <4 x i32> %wide.load.2, %2 133*9880d681SAndroid Build Coastguard Worker %5 = and <4 x i32> %wide.load10.2, %3 134*9880d681SAndroid Build Coastguard Worker %uglygep18 = getelementptr i8, i8* bitcast ([1024 x i32]* @a to i8*), i64 %lsr.iv 135*9880d681SAndroid Build Coastguard Worker %uglygep1819 = bitcast i8* %uglygep18 to <4 x i32>* 136*9880d681SAndroid Build Coastguard Worker %scevgep20 = getelementptr <4 x i32>, <4 x i32>* %uglygep1819, i64 262 137*9880d681SAndroid Build Coastguard Worker %wide.load.3 = load <4 x i32>, <4 x i32>* %scevgep20, align 16 138*9880d681SAndroid Build Coastguard Worker %uglygep = getelementptr i8, i8* bitcast ([1024 x i32]* @a to i8*), i64 %lsr.iv 139*9880d681SAndroid Build Coastguard Worker %uglygep17 = bitcast i8* %uglygep to <4 x i32>* 140*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr <4 x i32>, <4 x i32>* %uglygep17, i64 263 141*9880d681SAndroid Build Coastguard Worker %wide.load10.3 = load <4 x i32>, <4 x i32>* %scevgep, align 16 142*9880d681SAndroid Build Coastguard Worker %6 = and <4 x i32> %wide.load.3, %4 143*9880d681SAndroid Build Coastguard Worker %7 = and <4 x i32> %wide.load10.3, %5 144*9880d681SAndroid Build Coastguard Worker %lsr.iv.next = add nsw i64 %lsr.iv, 128 145*9880d681SAndroid Build Coastguard Worker %8 = icmp eq i64 %lsr.iv.next, 0 146*9880d681SAndroid Build Coastguard Worker br i1 %8, label %middle.block, label %vector.body 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workermiddle.block: 149*9880d681SAndroid Build Coastguard Worker %bin.rdx = and <4 x i32> %7, %6 150*9880d681SAndroid Build Coastguard Worker %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef> 151*9880d681SAndroid Build Coastguard Worker %bin.rdx11 = and <4 x i32> %bin.rdx, %rdx.shuf 152*9880d681SAndroid Build Coastguard Worker %rdx.shuf12 = shufflevector <4 x i32> %bin.rdx11, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef> 153*9880d681SAndroid Build Coastguard Worker %bin.rdx13 = and <4 x i32> %bin.rdx11, %rdx.shuf12 154*9880d681SAndroid Build Coastguard Worker %9 = extractelement <4 x i32> %bin.rdx13, i32 0 155*9880d681SAndroid Build Coastguard Worker ret i32 %9 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Workerdefine float @reduce_add_float(float* nocapture readonly %a) { 159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: reduce_add_float 160*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 161*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 162*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 163*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 164*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 165*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 166*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 167*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 168*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 169*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 170*9880d681SAndroid Build Coastguard Worker; CHECK: Detected a reduction operation: {{.*}} fadd fast 171*9880d681SAndroid Build Coastguard Worker; 172*9880d681SAndroid Build Coastguard Workerentry: 173*9880d681SAndroid Build Coastguard Worker br label %vector.body 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workervector.body: 176*9880d681SAndroid Build Coastguard Worker %index = phi i64 [ 0, %entry ], [ %index.next.4, %vector.body ] 177*9880d681SAndroid Build Coastguard Worker %vec.phi = phi <4 x float> [ zeroinitializer, %entry ], [ %28, %vector.body ] 178*9880d681SAndroid Build Coastguard Worker %vec.phi9 = phi <4 x float> [ zeroinitializer, %entry ], [ %29, %vector.body ] 179*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds float, float* %a, i64 %index 180*9880d681SAndroid Build Coastguard Worker %1 = bitcast float* %0 to <4 x float>* 181*9880d681SAndroid Build Coastguard Worker %wide.load = load <4 x float>, <4 x float>* %1, align 4 182*9880d681SAndroid Build Coastguard Worker %2 = getelementptr float, float* %0, i64 4 183*9880d681SAndroid Build Coastguard Worker %3 = bitcast float* %2 to <4 x float>* 184*9880d681SAndroid Build Coastguard Worker %wide.load10 = load <4 x float>, <4 x float>* %3, align 4 185*9880d681SAndroid Build Coastguard Worker %4 = fadd fast <4 x float> %wide.load, %vec.phi 186*9880d681SAndroid Build Coastguard Worker %5 = fadd fast <4 x float> %wide.load10, %vec.phi9 187*9880d681SAndroid Build Coastguard Worker %index.next = add nuw nsw i64 %index, 8 188*9880d681SAndroid Build Coastguard Worker %6 = getelementptr inbounds float, float* %a, i64 %index.next 189*9880d681SAndroid Build Coastguard Worker %7 = bitcast float* %6 to <4 x float>* 190*9880d681SAndroid Build Coastguard Worker %wide.load.1 = load <4 x float>, <4 x float>* %7, align 4 191*9880d681SAndroid Build Coastguard Worker %8 = getelementptr float, float* %6, i64 4 192*9880d681SAndroid Build Coastguard Worker %9 = bitcast float* %8 to <4 x float>* 193*9880d681SAndroid Build Coastguard Worker %wide.load10.1 = load <4 x float>, <4 x float>* %9, align 4 194*9880d681SAndroid Build Coastguard Worker %10 = fadd fast <4 x float> %wide.load.1, %4 195*9880d681SAndroid Build Coastguard Worker %11 = fadd fast <4 x float> %wide.load10.1, %5 196*9880d681SAndroid Build Coastguard Worker %index.next.1 = add nsw i64 %index, 16 197*9880d681SAndroid Build Coastguard Worker %12 = getelementptr inbounds float, float* %a, i64 %index.next.1 198*9880d681SAndroid Build Coastguard Worker %13 = bitcast float* %12 to <4 x float>* 199*9880d681SAndroid Build Coastguard Worker %wide.load.2 = load <4 x float>, <4 x float>* %13, align 4 200*9880d681SAndroid Build Coastguard Worker %14 = getelementptr float, float* %12, i64 4 201*9880d681SAndroid Build Coastguard Worker %15 = bitcast float* %14 to <4 x float>* 202*9880d681SAndroid Build Coastguard Worker %wide.load10.2 = load <4 x float>, <4 x float>* %15, align 4 203*9880d681SAndroid Build Coastguard Worker %16 = fadd fast <4 x float> %wide.load.2, %10 204*9880d681SAndroid Build Coastguard Worker %17 = fadd fast <4 x float> %wide.load10.2, %11 205*9880d681SAndroid Build Coastguard Worker %index.next.2 = add nsw i64 %index, 24 206*9880d681SAndroid Build Coastguard Worker %18 = getelementptr inbounds float, float* %a, i64 %index.next.2 207*9880d681SAndroid Build Coastguard Worker %19 = bitcast float* %18 to <4 x float>* 208*9880d681SAndroid Build Coastguard Worker %wide.load.3 = load <4 x float>, <4 x float>* %19, align 4 209*9880d681SAndroid Build Coastguard Worker %20 = getelementptr float, float* %18, i64 4 210*9880d681SAndroid Build Coastguard Worker %21 = bitcast float* %20 to <4 x float>* 211*9880d681SAndroid Build Coastguard Worker %wide.load10.3 = load <4 x float>, <4 x float>* %21, align 4 212*9880d681SAndroid Build Coastguard Worker %22 = fadd fast <4 x float> %wide.load.3, %16 213*9880d681SAndroid Build Coastguard Worker %23 = fadd fast <4 x float> %wide.load10.3, %17 214*9880d681SAndroid Build Coastguard Worker %index.next.3 = add nsw i64 %index, 32 215*9880d681SAndroid Build Coastguard Worker %24 = getelementptr inbounds float, float* %a, i64 %index.next.3 216*9880d681SAndroid Build Coastguard Worker %25 = bitcast float* %24 to <4 x float>* 217*9880d681SAndroid Build Coastguard Worker %wide.load.4 = load <4 x float>, <4 x float>* %25, align 4 218*9880d681SAndroid Build Coastguard Worker %26 = getelementptr float, float* %24, i64 4 219*9880d681SAndroid Build Coastguard Worker %27 = bitcast float* %26 to <4 x float>* 220*9880d681SAndroid Build Coastguard Worker %wide.load10.4 = load <4 x float>, <4 x float>* %27, align 4 221*9880d681SAndroid Build Coastguard Worker %28 = fadd fast <4 x float> %wide.load.4, %22 222*9880d681SAndroid Build Coastguard Worker %29 = fadd fast <4 x float> %wide.load10.4, %23 223*9880d681SAndroid Build Coastguard Worker %index.next.4 = add nsw i64 %index, 40 224*9880d681SAndroid Build Coastguard Worker %30 = icmp eq i64 %index.next.4, 1000 225*9880d681SAndroid Build Coastguard Worker br i1 %30, label %middle.block, label %vector.body 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Workermiddle.block: 228*9880d681SAndroid Build Coastguard Worker %.lcssa15 = phi <4 x float> [ %29, %vector.body ] 229*9880d681SAndroid Build Coastguard Worker %.lcssa = phi <4 x float> [ %28, %vector.body ] 230*9880d681SAndroid Build Coastguard Worker %bin.rdx = fadd fast <4 x float> %.lcssa15, %.lcssa 231*9880d681SAndroid Build Coastguard Worker %rdx.shuf = shufflevector <4 x float> %bin.rdx, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef> 232*9880d681SAndroid Build Coastguard Worker %bin.rdx11 = fadd fast <4 x float> %bin.rdx, %rdx.shuf 233*9880d681SAndroid Build Coastguard Worker %rdx.shuf12 = shufflevector <4 x float> %bin.rdx11, <4 x float> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef> 234*9880d681SAndroid Build Coastguard Worker %bin.rdx13 = fadd fast <4 x float> %bin.rdx11, %rdx.shuf12 235*9880d681SAndroid Build Coastguard Worker %31 = extractelement <4 x float> %bin.rdx13, i32 0 236*9880d681SAndroid Build Coastguard Worker ret float %31 237*9880d681SAndroid Build Coastguard Worker} 238