1*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s -mtriple=armv4t | FileCheck %s -check-prefix=CHECK-v4A32 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s -mtriple=armv7a | FileCheck %s -check-prefix=CHECK-v7A32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s -mtriple=thumbv7a | FileCheck %s -check-prefix=CHECK-THUMB2 4*9880d681SAndroid Build Coastguard Worker; FIXME: There are no tests for Thumb1 since dynamic stack alignment is not supported for 5*9880d681SAndroid Build Coastguard Worker; Thumb1. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine i32 @f_bic_can_be_used_align() nounwind { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_bic_can_be_used_align: 10*9880d681SAndroid Build Coastguard Worker; CHECK-v7A32: bfc sp, #0, #8 11*9880d681SAndroid Build Coastguard Worker; CHECK-v4A32: bic sp, sp, #255 12*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2: mov r4, sp 13*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2-NEXT: bfc r4, #0, #8 14*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2-NEXT: mov sp, r4 15*9880d681SAndroid Build Coastguard Worker %x = alloca i32, align 256 16*9880d681SAndroid Build Coastguard Worker store volatile i32 0, i32* %x, align 256 17*9880d681SAndroid Build Coastguard Worker ret i32 0 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i32 @f_too_large_for_bic_align() nounwind { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_too_large_for_bic_align: 23*9880d681SAndroid Build Coastguard Worker; CHECK-v7A32: bfc sp, #0, #9 24*9880d681SAndroid Build Coastguard Worker; CHECK-v4A32: lsr sp, sp, #9 25*9880d681SAndroid Build Coastguard Worker; CHECK-v4A32: lsl sp, sp, #9 26*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2: mov r4, sp 27*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2-NEXT: bfc r4, #0, #9 28*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2-NEXT: mov sp, r4 29*9880d681SAndroid Build Coastguard Worker %x = alloca i32, align 512 30*9880d681SAndroid Build Coastguard Worker store volatile i32 0, i32* %x, align 512 31*9880d681SAndroid Build Coastguard Worker ret i32 0 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine i8* @f_alignedDPRCS2Spills(double* %d) #0 { 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_too_large_for_bic_align: 37*9880d681SAndroid Build Coastguard Worker; CHECK-v7A32: bfc sp, #0, #12 38*9880d681SAndroid Build Coastguard Worker; CHECK-v4A32: lsr sp, sp, #12 39*9880d681SAndroid Build Coastguard Worker; CHECK-v4A32: lsl sp, sp, #12 40*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2: bfc r4, #0, #12 41*9880d681SAndroid Build Coastguard Worker; CHECK-THUMB2-NEXT: mov sp, r4 42*9880d681SAndroid Build Coastguard Worker %a = alloca i8, align 4096 43*9880d681SAndroid Build Coastguard Worker %0 = load double, double* %d, align 4 44*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds double, double* %d, i32 1 45*9880d681SAndroid Build Coastguard Worker %1 = load double, double* %arrayidx1, align 4 46*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds double, double* %d, i32 2 47*9880d681SAndroid Build Coastguard Worker %2 = load double, double* %arrayidx2, align 4 48*9880d681SAndroid Build Coastguard Worker %arrayidx3 = getelementptr inbounds double, double* %d, i32 3 49*9880d681SAndroid Build Coastguard Worker %3 = load double, double* %arrayidx3, align 4 50*9880d681SAndroid Build Coastguard Worker %arrayidx4 = getelementptr inbounds double, double* %d, i32 4 51*9880d681SAndroid Build Coastguard Worker %4 = load double, double* %arrayidx4, align 4 52*9880d681SAndroid Build Coastguard Worker %arrayidx5 = getelementptr inbounds double, double* %d, i32 5 53*9880d681SAndroid Build Coastguard Worker %5 = load double, double* %arrayidx5, align 4 54*9880d681SAndroid Build Coastguard Worker %arrayidx6 = getelementptr inbounds double, double* %d, i32 6 55*9880d681SAndroid Build Coastguard Worker %6 = load double, double* %arrayidx6, align 4 56*9880d681SAndroid Build Coastguard Worker %arrayidx7 = getelementptr inbounds double, double* %d, i32 7 57*9880d681SAndroid Build Coastguard Worker %7 = load double, double* %arrayidx7, align 4 58*9880d681SAndroid Build Coastguard Worker %arrayidx8 = getelementptr inbounds double, double* %d, i32 8 59*9880d681SAndroid Build Coastguard Worker %8 = load double, double* %arrayidx8, align 4 60*9880d681SAndroid Build Coastguard Worker %arrayidx9 = getelementptr inbounds double, double* %d, i32 9 61*9880d681SAndroid Build Coastguard Worker %9 = load double, double* %arrayidx9, align 4 62*9880d681SAndroid Build Coastguard Worker %arrayidx10 = getelementptr inbounds double, double* %d, i32 10 63*9880d681SAndroid Build Coastguard Worker %10 = load double, double* %arrayidx10, align 4 64*9880d681SAndroid Build Coastguard Worker %arrayidx11 = getelementptr inbounds double, double* %d, i32 11 65*9880d681SAndroid Build Coastguard Worker %11 = load double, double* %arrayidx11, align 4 66*9880d681SAndroid Build Coastguard Worker %arrayidx12 = getelementptr inbounds double, double* %d, i32 12 67*9880d681SAndroid Build Coastguard Worker %12 = load double, double* %arrayidx12, align 4 68*9880d681SAndroid Build Coastguard Worker %arrayidx13 = getelementptr inbounds double, double* %d, i32 13 69*9880d681SAndroid Build Coastguard Worker %13 = load double, double* %arrayidx13, align 4 70*9880d681SAndroid Build Coastguard Worker %arrayidx14 = getelementptr inbounds double, double* %d, i32 14 71*9880d681SAndroid Build Coastguard Worker %14 = load double, double* %arrayidx14, align 4 72*9880d681SAndroid Build Coastguard Worker %arrayidx15 = getelementptr inbounds double, double* %d, i32 15 73*9880d681SAndroid Build Coastguard Worker %15 = load double, double* %arrayidx15, align 4 74*9880d681SAndroid Build Coastguard Worker %arrayidx16 = getelementptr inbounds double, double* %d, i32 16 75*9880d681SAndroid Build Coastguard Worker %16 = load double, double* %arrayidx16, align 4 76*9880d681SAndroid Build Coastguard Worker %arrayidx17 = getelementptr inbounds double, double* %d, i32 17 77*9880d681SAndroid Build Coastguard Worker %17 = load double, double* %arrayidx17, align 4 78*9880d681SAndroid Build Coastguard Worker %arrayidx18 = getelementptr inbounds double, double* %d, i32 18 79*9880d681SAndroid Build Coastguard Worker %18 = load double, double* %arrayidx18, align 4 80*9880d681SAndroid Build Coastguard Worker %arrayidx19 = getelementptr inbounds double, double* %d, i32 19 81*9880d681SAndroid Build Coastguard Worker %19 = load double, double* %arrayidx19, align 4 82*9880d681SAndroid Build Coastguard Worker %arrayidx20 = getelementptr inbounds double, double* %d, i32 20 83*9880d681SAndroid Build Coastguard Worker %20 = load double, double* %arrayidx20, align 4 84*9880d681SAndroid Build Coastguard Worker %arrayidx21 = getelementptr inbounds double, double* %d, i32 21 85*9880d681SAndroid Build Coastguard Worker %21 = load double, double* %arrayidx21, align 4 86*9880d681SAndroid Build Coastguard Worker %arrayidx22 = getelementptr inbounds double, double* %d, i32 22 87*9880d681SAndroid Build Coastguard Worker %22 = load double, double* %arrayidx22, align 4 88*9880d681SAndroid Build Coastguard Worker %arrayidx23 = getelementptr inbounds double, double* %d, i32 23 89*9880d681SAndroid Build Coastguard Worker %23 = load double, double* %arrayidx23, align 4 90*9880d681SAndroid Build Coastguard Worker %arrayidx24 = getelementptr inbounds double, double* %d, i32 24 91*9880d681SAndroid Build Coastguard Worker %24 = load double, double* %arrayidx24, align 4 92*9880d681SAndroid Build Coastguard Worker %arrayidx25 = getelementptr inbounds double, double* %d, i32 25 93*9880d681SAndroid Build Coastguard Worker %25 = load double, double* %arrayidx25, align 4 94*9880d681SAndroid Build Coastguard Worker %arrayidx26 = getelementptr inbounds double, double* %d, i32 26 95*9880d681SAndroid Build Coastguard Worker %26 = load double, double* %arrayidx26, align 4 96*9880d681SAndroid Build Coastguard Worker %arrayidx27 = getelementptr inbounds double, double* %d, i32 27 97*9880d681SAndroid Build Coastguard Worker %27 = load double, double* %arrayidx27, align 4 98*9880d681SAndroid Build Coastguard Worker %arrayidx28 = getelementptr inbounds double, double* %d, i32 28 99*9880d681SAndroid Build Coastguard Worker %28 = load double, double* %arrayidx28, align 4 100*9880d681SAndroid Build Coastguard Worker %arrayidx29 = getelementptr inbounds double, double* %d, i32 29 101*9880d681SAndroid Build Coastguard Worker %29 = load double, double* %arrayidx29, align 4 102*9880d681SAndroid Build Coastguard Worker %div = fdiv double %29, %28 103*9880d681SAndroid Build Coastguard Worker %div30 = fdiv double %div, %27 104*9880d681SAndroid Build Coastguard Worker %div31 = fdiv double %div30, %26 105*9880d681SAndroid Build Coastguard Worker %div32 = fdiv double %div31, %25 106*9880d681SAndroid Build Coastguard Worker %div33 = fdiv double %div32, %24 107*9880d681SAndroid Build Coastguard Worker %div34 = fdiv double %div33, %23 108*9880d681SAndroid Build Coastguard Worker %div35 = fdiv double %div34, %22 109*9880d681SAndroid Build Coastguard Worker %div36 = fdiv double %div35, %21 110*9880d681SAndroid Build Coastguard Worker %div37 = fdiv double %div36, %20 111*9880d681SAndroid Build Coastguard Worker %div38 = fdiv double %div37, %19 112*9880d681SAndroid Build Coastguard Worker %div39 = fdiv double %div38, %18 113*9880d681SAndroid Build Coastguard Worker %div40 = fdiv double %div39, %17 114*9880d681SAndroid Build Coastguard Worker %div41 = fdiv double %div40, %16 115*9880d681SAndroid Build Coastguard Worker %div42 = fdiv double %div41, %15 116*9880d681SAndroid Build Coastguard Worker %div43 = fdiv double %div42, %14 117*9880d681SAndroid Build Coastguard Worker %div44 = fdiv double %div43, %13 118*9880d681SAndroid Build Coastguard Worker %div45 = fdiv double %div44, %12 119*9880d681SAndroid Build Coastguard Worker %div46 = fdiv double %div45, %11 120*9880d681SAndroid Build Coastguard Worker %div47 = fdiv double %div46, %10 121*9880d681SAndroid Build Coastguard Worker %div48 = fdiv double %div47, %9 122*9880d681SAndroid Build Coastguard Worker %div49 = fdiv double %div48, %8 123*9880d681SAndroid Build Coastguard Worker %div50 = fdiv double %div49, %7 124*9880d681SAndroid Build Coastguard Worker %div51 = fdiv double %div50, %6 125*9880d681SAndroid Build Coastguard Worker %div52 = fdiv double %div51, %5 126*9880d681SAndroid Build Coastguard Worker %div53 = fdiv double %div52, %4 127*9880d681SAndroid Build Coastguard Worker %div54 = fdiv double %div53, %3 128*9880d681SAndroid Build Coastguard Worker %div55 = fdiv double %div54, %2 129*9880d681SAndroid Build Coastguard Worker %div56 = fdiv double %div55, %1 130*9880d681SAndroid Build Coastguard Worker %div57 = fdiv double %div56, %0 131*9880d681SAndroid Build Coastguard Worker %div58 = fdiv double %0, %1 132*9880d681SAndroid Build Coastguard Worker %div59 = fdiv double %div58, %2 133*9880d681SAndroid Build Coastguard Worker %div60 = fdiv double %div59, %3 134*9880d681SAndroid Build Coastguard Worker %div61 = fdiv double %div60, %4 135*9880d681SAndroid Build Coastguard Worker %div62 = fdiv double %div61, %5 136*9880d681SAndroid Build Coastguard Worker %div63 = fdiv double %div62, %6 137*9880d681SAndroid Build Coastguard Worker %div64 = fdiv double %div63, %7 138*9880d681SAndroid Build Coastguard Worker %div65 = fdiv double %div64, %8 139*9880d681SAndroid Build Coastguard Worker %div66 = fdiv double %div65, %9 140*9880d681SAndroid Build Coastguard Worker %div67 = fdiv double %div66, %10 141*9880d681SAndroid Build Coastguard Worker %div68 = fdiv double %div67, %11 142*9880d681SAndroid Build Coastguard Worker %div69 = fdiv double %div68, %12 143*9880d681SAndroid Build Coastguard Worker %div70 = fdiv double %div69, %13 144*9880d681SAndroid Build Coastguard Worker %div71 = fdiv double %div70, %14 145*9880d681SAndroid Build Coastguard Worker %div72 = fdiv double %div71, %15 146*9880d681SAndroid Build Coastguard Worker %div73 = fdiv double %div72, %16 147*9880d681SAndroid Build Coastguard Worker %div74 = fdiv double %div73, %17 148*9880d681SAndroid Build Coastguard Worker %div75 = fdiv double %div74, %18 149*9880d681SAndroid Build Coastguard Worker %div76 = fdiv double %div75, %19 150*9880d681SAndroid Build Coastguard Worker %div77 = fdiv double %div76, %20 151*9880d681SAndroid Build Coastguard Worker %div78 = fdiv double %div77, %21 152*9880d681SAndroid Build Coastguard Worker %div79 = fdiv double %div78, %22 153*9880d681SAndroid Build Coastguard Worker %div80 = fdiv double %div79, %23 154*9880d681SAndroid Build Coastguard Worker %div81 = fdiv double %div80, %24 155*9880d681SAndroid Build Coastguard Worker %div82 = fdiv double %div81, %25 156*9880d681SAndroid Build Coastguard Worker %div83 = fdiv double %div82, %26 157*9880d681SAndroid Build Coastguard Worker %div84 = fdiv double %div83, %27 158*9880d681SAndroid Build Coastguard Worker %div85 = fdiv double %div84, %28 159*9880d681SAndroid Build Coastguard Worker %div86 = fdiv double %div85, %29 160*9880d681SAndroid Build Coastguard Worker %mul = fmul double %div57, %div86 161*9880d681SAndroid Build Coastguard Worker %conv = fptosi double %mul to i32 162*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i8, i8* %a, i32 %conv 163*9880d681SAndroid Build Coastguard Worker ret i8* %add.ptr 164*9880d681SAndroid Build Coastguard Worker} 165