xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/stack-alignment.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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