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