blob: ac14a5959d1f1f064a6aeb1afe573ea88a6073d7 [file] [log] [blame]
Kristof Beyls933de7a2015-01-08 15:09:14 +00001; RUN: llc -verify-machineinstrs < %s -mtriple=armv4t | FileCheck %s -check-prefix=CHECK-v4A32
2; RUN: llc -verify-machineinstrs < %s -mtriple=armv7a | FileCheck %s -check-prefix=CHECK-v7A32
3; RUN: llc -verify-machineinstrs < %s -mtriple=thumbv7a | FileCheck %s -check-prefix=CHECK-THUMB2
4; FIXME: There are no tests for Thumb1 since dynamic stack alignment is not supported for
5; Thumb1.
6
7define i32 @f_bic_can_be_used_align() nounwind {
8entry:
9; CHECK-LABEL: f_bic_can_be_used_align:
10; CHECK-v7A32: bfc sp, #0, #8
11; CHECK-v4A32: bic sp, sp, #255
12; CHECK-THUMB2: mov r4, sp
13; CHECK-THUMB2-NEXT: bfc r4, #0, #8
14; CHECK-THUMB2-NEXT: mov sp, r4
15 %x = alloca i32, align 256
16 store volatile i32 0, i32* %x, align 256
17 ret i32 0
18}
19
20define i32 @f_too_large_for_bic_align() nounwind {
21entry:
22; CHECK-LABEL: f_too_large_for_bic_align:
23; CHECK-v7A32: bfc sp, #0, #9
24; CHECK-v4A32: lsr sp, sp, #9
25; CHECK-v4A32: lsl sp, sp, #9
26; CHECK-THUMB2: mov r4, sp
27; CHECK-THUMB2-NEXT: bfc r4, #0, #9
28; CHECK-THUMB2-NEXT: mov sp, r4
29 %x = alloca i32, align 512
30 store volatile i32 0, i32* %x, align 512
31 ret i32 0
32}
33
34define i8* @f_alignedDPRCS2Spills(double* %d) #0 {
35entry:
36; CHECK-LABEL: f_too_large_for_bic_align:
37; CHECK-v7A32: bfc sp, #0, #12
38; CHECK-v4A32: lsr sp, sp, #12
39; CHECK-v4A32: lsl sp, sp, #12
40; CHECK-THUMB2: bfc r4, #0, #12
41; CHECK-THUMB2-NEXT: mov sp, r4
42 %a = alloca i8, align 4096
David Blaikiea79ac142015-02-27 21:17:42 +000043 %0 = load double, double* %d, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000044 %arrayidx1 = getelementptr inbounds double, double* %d, i32 1
David Blaikiea79ac142015-02-27 21:17:42 +000045 %1 = load double, double* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000046 %arrayidx2 = getelementptr inbounds double, double* %d, i32 2
David Blaikiea79ac142015-02-27 21:17:42 +000047 %2 = load double, double* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000048 %arrayidx3 = getelementptr inbounds double, double* %d, i32 3
David Blaikiea79ac142015-02-27 21:17:42 +000049 %3 = load double, double* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000050 %arrayidx4 = getelementptr inbounds double, double* %d, i32 4
David Blaikiea79ac142015-02-27 21:17:42 +000051 %4 = load double, double* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000052 %arrayidx5 = getelementptr inbounds double, double* %d, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +000053 %5 = load double, double* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000054 %arrayidx6 = getelementptr inbounds double, double* %d, i32 6
David Blaikiea79ac142015-02-27 21:17:42 +000055 %6 = load double, double* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000056 %arrayidx7 = getelementptr inbounds double, double* %d, i32 7
David Blaikiea79ac142015-02-27 21:17:42 +000057 %7 = load double, double* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000058 %arrayidx8 = getelementptr inbounds double, double* %d, i32 8
David Blaikiea79ac142015-02-27 21:17:42 +000059 %8 = load double, double* %arrayidx8, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000060 %arrayidx9 = getelementptr inbounds double, double* %d, i32 9
David Blaikiea79ac142015-02-27 21:17:42 +000061 %9 = load double, double* %arrayidx9, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000062 %arrayidx10 = getelementptr inbounds double, double* %d, i32 10
David Blaikiea79ac142015-02-27 21:17:42 +000063 %10 = load double, double* %arrayidx10, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000064 %arrayidx11 = getelementptr inbounds double, double* %d, i32 11
David Blaikiea79ac142015-02-27 21:17:42 +000065 %11 = load double, double* %arrayidx11, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000066 %arrayidx12 = getelementptr inbounds double, double* %d, i32 12
David Blaikiea79ac142015-02-27 21:17:42 +000067 %12 = load double, double* %arrayidx12, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000068 %arrayidx13 = getelementptr inbounds double, double* %d, i32 13
David Blaikiea79ac142015-02-27 21:17:42 +000069 %13 = load double, double* %arrayidx13, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000070 %arrayidx14 = getelementptr inbounds double, double* %d, i32 14
David Blaikiea79ac142015-02-27 21:17:42 +000071 %14 = load double, double* %arrayidx14, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000072 %arrayidx15 = getelementptr inbounds double, double* %d, i32 15
David Blaikiea79ac142015-02-27 21:17:42 +000073 %15 = load double, double* %arrayidx15, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000074 %arrayidx16 = getelementptr inbounds double, double* %d, i32 16
David Blaikiea79ac142015-02-27 21:17:42 +000075 %16 = load double, double* %arrayidx16, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000076 %arrayidx17 = getelementptr inbounds double, double* %d, i32 17
David Blaikiea79ac142015-02-27 21:17:42 +000077 %17 = load double, double* %arrayidx17, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000078 %arrayidx18 = getelementptr inbounds double, double* %d, i32 18
David Blaikiea79ac142015-02-27 21:17:42 +000079 %18 = load double, double* %arrayidx18, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000080 %arrayidx19 = getelementptr inbounds double, double* %d, i32 19
David Blaikiea79ac142015-02-27 21:17:42 +000081 %19 = load double, double* %arrayidx19, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000082 %arrayidx20 = getelementptr inbounds double, double* %d, i32 20
David Blaikiea79ac142015-02-27 21:17:42 +000083 %20 = load double, double* %arrayidx20, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000084 %arrayidx21 = getelementptr inbounds double, double* %d, i32 21
David Blaikiea79ac142015-02-27 21:17:42 +000085 %21 = load double, double* %arrayidx21, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000086 %arrayidx22 = getelementptr inbounds double, double* %d, i32 22
David Blaikiea79ac142015-02-27 21:17:42 +000087 %22 = load double, double* %arrayidx22, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000088 %arrayidx23 = getelementptr inbounds double, double* %d, i32 23
David Blaikiea79ac142015-02-27 21:17:42 +000089 %23 = load double, double* %arrayidx23, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000090 %arrayidx24 = getelementptr inbounds double, double* %d, i32 24
David Blaikiea79ac142015-02-27 21:17:42 +000091 %24 = load double, double* %arrayidx24, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000092 %arrayidx25 = getelementptr inbounds double, double* %d, i32 25
David Blaikiea79ac142015-02-27 21:17:42 +000093 %25 = load double, double* %arrayidx25, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000094 %arrayidx26 = getelementptr inbounds double, double* %d, i32 26
David Blaikiea79ac142015-02-27 21:17:42 +000095 %26 = load double, double* %arrayidx26, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000096 %arrayidx27 = getelementptr inbounds double, double* %d, i32 27
David Blaikiea79ac142015-02-27 21:17:42 +000097 %27 = load double, double* %arrayidx27, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000098 %arrayidx28 = getelementptr inbounds double, double* %d, i32 28
David Blaikiea79ac142015-02-27 21:17:42 +000099 %28 = load double, double* %arrayidx28, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000100 %arrayidx29 = getelementptr inbounds double, double* %d, i32 29
David Blaikiea79ac142015-02-27 21:17:42 +0000101 %29 = load double, double* %arrayidx29, align 4
Kristof Beyls933de7a2015-01-08 15:09:14 +0000102 %div = fdiv double %29, %28
103 %div30 = fdiv double %div, %27
104 %div31 = fdiv double %div30, %26
105 %div32 = fdiv double %div31, %25
106 %div33 = fdiv double %div32, %24
107 %div34 = fdiv double %div33, %23
108 %div35 = fdiv double %div34, %22
109 %div36 = fdiv double %div35, %21
110 %div37 = fdiv double %div36, %20
111 %div38 = fdiv double %div37, %19
112 %div39 = fdiv double %div38, %18
113 %div40 = fdiv double %div39, %17
114 %div41 = fdiv double %div40, %16
115 %div42 = fdiv double %div41, %15
116 %div43 = fdiv double %div42, %14
117 %div44 = fdiv double %div43, %13
118 %div45 = fdiv double %div44, %12
119 %div46 = fdiv double %div45, %11
120 %div47 = fdiv double %div46, %10
121 %div48 = fdiv double %div47, %9
122 %div49 = fdiv double %div48, %8
123 %div50 = fdiv double %div49, %7
124 %div51 = fdiv double %div50, %6
125 %div52 = fdiv double %div51, %5
126 %div53 = fdiv double %div52, %4
127 %div54 = fdiv double %div53, %3
128 %div55 = fdiv double %div54, %2
129 %div56 = fdiv double %div55, %1
130 %div57 = fdiv double %div56, %0
131 %div58 = fdiv double %0, %1
132 %div59 = fdiv double %div58, %2
133 %div60 = fdiv double %div59, %3
134 %div61 = fdiv double %div60, %4
135 %div62 = fdiv double %div61, %5
136 %div63 = fdiv double %div62, %6
137 %div64 = fdiv double %div63, %7
138 %div65 = fdiv double %div64, %8
139 %div66 = fdiv double %div65, %9
140 %div67 = fdiv double %div66, %10
141 %div68 = fdiv double %div67, %11
142 %div69 = fdiv double %div68, %12
143 %div70 = fdiv double %div69, %13
144 %div71 = fdiv double %div70, %14
145 %div72 = fdiv double %div71, %15
146 %div73 = fdiv double %div72, %16
147 %div74 = fdiv double %div73, %17
148 %div75 = fdiv double %div74, %18
149 %div76 = fdiv double %div75, %19
150 %div77 = fdiv double %div76, %20
151 %div78 = fdiv double %div77, %21
152 %div79 = fdiv double %div78, %22
153 %div80 = fdiv double %div79, %23
154 %div81 = fdiv double %div80, %24
155 %div82 = fdiv double %div81, %25
156 %div83 = fdiv double %div82, %26
157 %div84 = fdiv double %div83, %27
158 %div85 = fdiv double %div84, %28
159 %div86 = fdiv double %div85, %29
160 %mul = fmul double %div57, %div86
161 %conv = fptosi double %mul to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000162 %add.ptr = getelementptr inbounds i8, i8* %a, i32 %conv
Kristof Beyls933de7a2015-01-08 15:09:14 +0000163 ret i8* %add.ptr
164}