xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/ssp-data-layout.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -stack-symbol-ordering=0 -disable-fp-elim -mtriple=x86_64-pc-linux-gnu -mcpu=corei7 -o - | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker;  This test is fairly fragile.  The goal is to ensure that "large" stack
3*9880d681SAndroid Build Coastguard Worker;  objects are allocated closest to the stack protector (i.e., farthest away
4*9880d681SAndroid Build Coastguard Worker;  from the Stack Pointer.)  In standard SSP mode this means that large (>=
5*9880d681SAndroid Build Coastguard Worker;  ssp-buffer-size) arrays and structures containing such arrays are
6*9880d681SAndroid Build Coastguard Worker;  closet to the protector.  With sspstrong and sspreq this means large
7*9880d681SAndroid Build Coastguard Worker;  arrays/structures-with-arrays are closest, followed by small (< ssp-buffer-size)
8*9880d681SAndroid Build Coastguard Worker;  arrays/structures-with-arrays, and then addr-taken variables.
9*9880d681SAndroid Build Coastguard Worker;
10*9880d681SAndroid Build Coastguard Worker;  Ideally, we only want verify that the objects appear in the correct groups
11*9880d681SAndroid Build Coastguard Worker;  and that the groups have the correct relative stack offset.  The ordering
12*9880d681SAndroid Build Coastguard Worker;  within a group is not relevant to this test.  Unfortunately, there is not
13*9880d681SAndroid Build Coastguard Worker;  an elegant way to do this, so just match the offset for each object.
14*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -disable-fp-elim -mtriple=x86_64-unknown-unknown -O0 -mcpu=corei7 -o - \
15*9880d681SAndroid Build Coastguard Worker; RUN:   | FileCheck --check-prefix=FAST-NON-LIN %s
16*9880d681SAndroid Build Coastguard Worker; FastISel was not setting the StackProtectorIndex when lowering
17*9880d681SAndroid Build Coastguard Worker; Intrinsic::stackprotector and as a result the stack re-arrangement code was
18*9880d681SAndroid Build Coastguard Worker; never applied.  This problem only shows up on non-Linux platforms because on
19*9880d681SAndroid Build Coastguard Worker; Linux the stack protector cookie is loaded from a special address space which
20*9880d681SAndroid Build Coastguard Worker; always triggers standard ISel.  Run a basic test to ensure that at -O0
21*9880d681SAndroid Build Coastguard Worker; on a non-linux target the data layout rules are triggered.
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker%struct.struct_large_char = type { [8 x i8] }
24*9880d681SAndroid Build Coastguard Worker%struct.struct_small_char = type { [2 x i8] }
25*9880d681SAndroid Build Coastguard Worker%struct.struct_large_nonchar = type { [8 x i32] }
26*9880d681SAndroid Build Coastguard Worker%struct.struct_small_nonchar = type { [2 x i16] }
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine void @layout_ssp() ssp {
29*9880d681SAndroid Build Coastguard Workerentry:
30*9880d681SAndroid Build Coastguard Worker; Expected stack layout for ssp is
31*9880d681SAndroid Build Coastguard Worker;  -16 large_char          . Group 1, nested arrays, arrays >= ssp-buffer-size
32*9880d681SAndroid Build Coastguard Worker;  -24 struct_large_char   .
33*9880d681SAndroid Build Coastguard Worker;  -28 scalar1             | Everything else
34*9880d681SAndroid Build Coastguard Worker;  -32 scalar2
35*9880d681SAndroid Build Coastguard Worker;  -36 scalar3
36*9880d681SAndroid Build Coastguard Worker;  -40 addr-of
37*9880d681SAndroid Build Coastguard Worker;  -44 small_nonchar
38*9880d681SAndroid Build Coastguard Worker;  -80 large_nonchar
39*9880d681SAndroid Build Coastguard Worker;  -82 small_char
40*9880d681SAndroid Build Coastguard Worker;  -88 struct_small_char
41*9880d681SAndroid Build Coastguard Worker;  -120 struct_large_nonchar
42*9880d681SAndroid Build Coastguard Worker;  -128 struct_small_nonchar
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; CHECK: layout_ssp:
45*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar1
46*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -28(
47*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar1
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar2
50*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -32(
51*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar2
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar3
54*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -36(
55*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar3
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_addrof
58*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -40(
59*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_addrof
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker; CHECK: get_small_nonchar
62*9880d681SAndroid Build Coastguard Worker; CHECK: movw %ax, -44(
63*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_small_nonchar
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_large_nonchar
66*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -80(
67*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_large_nonchar
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_small_char
70*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -82(
71*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_small_char
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_large_char
74*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -16(
75*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_large_char
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_large_char
78*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -24(
79*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_large_char
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_small_char
82*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -88(
83*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_small_char
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_large_nonchar
86*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -120(
87*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_large_nonchar
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_small_nonchar
90*9880d681SAndroid Build Coastguard Worker; CHECK: movw %ax, -128(
91*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_small_nonchar
92*9880d681SAndroid Build Coastguard Worker  %x = alloca i32, align 4
93*9880d681SAndroid Build Coastguard Worker  %y = alloca i32, align 4
94*9880d681SAndroid Build Coastguard Worker  %z = alloca i32, align 4
95*9880d681SAndroid Build Coastguard Worker  %ptr = alloca i32, align 4
96*9880d681SAndroid Build Coastguard Worker  %small2 = alloca [2 x i16], align 2
97*9880d681SAndroid Build Coastguard Worker  %large2 = alloca [8 x i32], align 16
98*9880d681SAndroid Build Coastguard Worker  %small = alloca [2 x i8], align 1
99*9880d681SAndroid Build Coastguard Worker  %large = alloca [8 x i8], align 1
100*9880d681SAndroid Build Coastguard Worker  %a = alloca %struct.struct_large_char, align 1
101*9880d681SAndroid Build Coastguard Worker  %b = alloca %struct.struct_small_char, align 1
102*9880d681SAndroid Build Coastguard Worker  %c = alloca %struct.struct_large_nonchar, align 8
103*9880d681SAndroid Build Coastguard Worker  %d = alloca %struct.struct_small_nonchar, align 2
104*9880d681SAndroid Build Coastguard Worker  %call = call i32 @get_scalar1()
105*9880d681SAndroid Build Coastguard Worker  store i32 %call, i32* %x, align 4
106*9880d681SAndroid Build Coastguard Worker  call void @end_scalar1()
107*9880d681SAndroid Build Coastguard Worker  %call1 = call i32 @get_scalar2()
108*9880d681SAndroid Build Coastguard Worker  store i32 %call1, i32* %y, align 4
109*9880d681SAndroid Build Coastguard Worker  call void @end_scalar2()
110*9880d681SAndroid Build Coastguard Worker  %call2 = call i32 @get_scalar3()
111*9880d681SAndroid Build Coastguard Worker  store i32 %call2, i32* %z, align 4
112*9880d681SAndroid Build Coastguard Worker  call void @end_scalar3()
113*9880d681SAndroid Build Coastguard Worker  %call3 = call i32 @get_addrof()
114*9880d681SAndroid Build Coastguard Worker  store i32 %call3, i32* %ptr, align 4
115*9880d681SAndroid Build Coastguard Worker  call void @end_addrof()
116*9880d681SAndroid Build Coastguard Worker  %call4 = call signext i16 @get_small_nonchar()
117*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [2 x i16], [2 x i16]* %small2, i32 0, i64 0
118*9880d681SAndroid Build Coastguard Worker  store i16 %call4, i16* %arrayidx, align 2
119*9880d681SAndroid Build Coastguard Worker  call void @end_small_nonchar()
120*9880d681SAndroid Build Coastguard Worker  %call5 = call i32 @get_large_nonchar()
121*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [8 x i32], [8 x i32]* %large2, i32 0, i64 0
122*9880d681SAndroid Build Coastguard Worker  store i32 %call5, i32* %arrayidx6, align 4
123*9880d681SAndroid Build Coastguard Worker  call void @end_large_nonchar()
124*9880d681SAndroid Build Coastguard Worker  %call7 = call signext i8 @get_small_char()
125*9880d681SAndroid Build Coastguard Worker  %arrayidx8 = getelementptr inbounds [2 x i8], [2 x i8]* %small, i32 0, i64 0
126*9880d681SAndroid Build Coastguard Worker  store i8 %call7, i8* %arrayidx8, align 1
127*9880d681SAndroid Build Coastguard Worker  call void @end_small_char()
128*9880d681SAndroid Build Coastguard Worker  %call9 = call signext i8 @get_large_char()
129*9880d681SAndroid Build Coastguard Worker  %arrayidx10 = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i64 0
130*9880d681SAndroid Build Coastguard Worker  store i8 %call9, i8* %arrayidx10, align 1
131*9880d681SAndroid Build Coastguard Worker  call void @end_large_char()
132*9880d681SAndroid Build Coastguard Worker  %call11 = call signext i8 @get_struct_large_char()
133*9880d681SAndroid Build Coastguard Worker  %foo = getelementptr inbounds %struct.struct_large_char, %struct.struct_large_char* %a, i32 0, i32 0
134*9880d681SAndroid Build Coastguard Worker  %arrayidx12 = getelementptr inbounds [8 x i8], [8 x i8]* %foo, i32 0, i64 0
135*9880d681SAndroid Build Coastguard Worker  store i8 %call11, i8* %arrayidx12, align 1
136*9880d681SAndroid Build Coastguard Worker  call void @end_struct_large_char()
137*9880d681SAndroid Build Coastguard Worker  %call13 = call signext i8 @get_struct_small_char()
138*9880d681SAndroid Build Coastguard Worker  %foo14 = getelementptr inbounds %struct.struct_small_char, %struct.struct_small_char* %b, i32 0, i32 0
139*9880d681SAndroid Build Coastguard Worker  %arrayidx15 = getelementptr inbounds [2 x i8], [2 x i8]* %foo14, i32 0, i64 0
140*9880d681SAndroid Build Coastguard Worker  store i8 %call13, i8* %arrayidx15, align 1
141*9880d681SAndroid Build Coastguard Worker  call void @end_struct_small_char()
142*9880d681SAndroid Build Coastguard Worker  %call16 = call i32 @get_struct_large_nonchar()
143*9880d681SAndroid Build Coastguard Worker  %foo17 = getelementptr inbounds %struct.struct_large_nonchar, %struct.struct_large_nonchar* %c, i32 0, i32 0
144*9880d681SAndroid Build Coastguard Worker  %arrayidx18 = getelementptr inbounds [8 x i32], [8 x i32]* %foo17, i32 0, i64 0
145*9880d681SAndroid Build Coastguard Worker  store i32 %call16, i32* %arrayidx18, align 4
146*9880d681SAndroid Build Coastguard Worker  call void @end_struct_large_nonchar()
147*9880d681SAndroid Build Coastguard Worker  %call19 = call signext i16 @get_struct_small_nonchar()
148*9880d681SAndroid Build Coastguard Worker  %foo20 = getelementptr inbounds %struct.struct_small_nonchar, %struct.struct_small_nonchar* %d, i32 0, i32 0
149*9880d681SAndroid Build Coastguard Worker  %arrayidx21 = getelementptr inbounds [2 x i16], [2 x i16]* %foo20, i32 0, i64 0
150*9880d681SAndroid Build Coastguard Worker  store i16 %call19, i16* %arrayidx21, align 2
151*9880d681SAndroid Build Coastguard Worker  call void @end_struct_small_nonchar()
152*9880d681SAndroid Build Coastguard Worker  %arraydecay = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i32 0
153*9880d681SAndroid Build Coastguard Worker  %arraydecay22 = getelementptr inbounds [2 x i8], [2 x i8]* %small, i32 0, i32 0
154*9880d681SAndroid Build Coastguard Worker  %arraydecay23 = getelementptr inbounds [8 x i32], [8 x i32]* %large2, i32 0, i32 0
155*9880d681SAndroid Build Coastguard Worker  %arraydecay24 = getelementptr inbounds [2 x i16], [2 x i16]* %small2, i32 0, i32 0
156*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %x, align 4
157*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %y, align 4
158*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %z, align 4
159*9880d681SAndroid Build Coastguard Worker  %coerce.dive = getelementptr %struct.struct_large_char, %struct.struct_large_char* %a, i32 0, i32 0
160*9880d681SAndroid Build Coastguard Worker  %3 = bitcast [8 x i8]* %coerce.dive to i64*
161*9880d681SAndroid Build Coastguard Worker  %4 = load i64, i64* %3, align 1
162*9880d681SAndroid Build Coastguard Worker  %coerce.dive25 = getelementptr %struct.struct_small_char, %struct.struct_small_char* %b, i32 0, i32 0
163*9880d681SAndroid Build Coastguard Worker  %5 = bitcast [2 x i8]* %coerce.dive25 to i16*
164*9880d681SAndroid Build Coastguard Worker  %6 = load i16, i16* %5, align 1
165*9880d681SAndroid Build Coastguard Worker  %coerce.dive26 = getelementptr %struct.struct_small_nonchar, %struct.struct_small_nonchar* %d, i32 0, i32 0
166*9880d681SAndroid Build Coastguard Worker  %7 = bitcast [2 x i16]* %coerce.dive26 to i32*
167*9880d681SAndroid Build Coastguard Worker  %8 = load i32, i32* %7, align 1
168*9880d681SAndroid Build Coastguard Worker  call void @takes_all(i64 %4, i16 %6, %struct.struct_large_nonchar* byval align 8 %c, i32 %8, i8* %arraydecay, i8* %arraydecay22, i32* %arraydecay23, i16* %arraydecay24, i32* %ptr, i32 %0, i32 %1, i32 %2)
169*9880d681SAndroid Build Coastguard Worker  ret void
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine void @layout_sspstrong() nounwind uwtable sspstrong {
173*9880d681SAndroid Build Coastguard Workerentry:
174*9880d681SAndroid Build Coastguard Worker; Expected stack layout for sspstrong is
175*9880d681SAndroid Build Coastguard Worker;   -48   large_nonchar          . Group 1, nested arrays,
176*9880d681SAndroid Build Coastguard Worker;   -56   large_char             .  arrays >= ssp-buffer-size
177*9880d681SAndroid Build Coastguard Worker;   -64   struct_large_char      .
178*9880d681SAndroid Build Coastguard Worker;   -96   struct_large_nonchar   .
179*9880d681SAndroid Build Coastguard Worker;   -100  small_non_char         | Group 2, nested arrays,
180*9880d681SAndroid Build Coastguard Worker;   -102  small_char             |  arrays < ssp-buffer-size
181*9880d681SAndroid Build Coastguard Worker;   -104  struct_small_char      |
182*9880d681SAndroid Build Coastguard Worker;   -112  struct_small_nonchar   |
183*9880d681SAndroid Build Coastguard Worker;   -116  addrof                 * Group 3, addr-of local
184*9880d681SAndroid Build Coastguard Worker;   -120  scalar                 + Group 4, everything else
185*9880d681SAndroid Build Coastguard Worker;   -124  scalar                 +
186*9880d681SAndroid Build Coastguard Worker;   -128  scalar                 +
187*9880d681SAndroid Build Coastguard Worker;
188*9880d681SAndroid Build Coastguard Worker; CHECK: layout_sspstrong:
189*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar1
190*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -120(
191*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar1
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar2
194*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -124(
195*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar2
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar3
198*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -128(
199*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar3
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_addrof
202*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -116(
203*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_addrof
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker; CHECK: get_small_nonchar
206*9880d681SAndroid Build Coastguard Worker; CHECK: movw %ax, -100(
207*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_small_nonchar
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_large_nonchar
210*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -48(
211*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_large_nonchar
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_small_char
214*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -102(
215*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_small_char
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_large_char
218*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -56(
219*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_large_char
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_large_char
222*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -64(
223*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_large_char
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_small_char
226*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -104(
227*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_small_char
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_large_nonchar
230*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -96(
231*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_large_nonchar
232*9880d681SAndroid Build Coastguard Worker
233*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_small_nonchar
234*9880d681SAndroid Build Coastguard Worker; CHECK: movw %ax, -112(
235*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_small_nonchar
236*9880d681SAndroid Build Coastguard Worker  %x = alloca i32, align 4
237*9880d681SAndroid Build Coastguard Worker  %y = alloca i32, align 4
238*9880d681SAndroid Build Coastguard Worker  %z = alloca i32, align 4
239*9880d681SAndroid Build Coastguard Worker  %ptr = alloca i32, align 4
240*9880d681SAndroid Build Coastguard Worker  %small2 = alloca [2 x i16], align 2
241*9880d681SAndroid Build Coastguard Worker  %large2 = alloca [8 x i32], align 16
242*9880d681SAndroid Build Coastguard Worker  %small = alloca [2 x i8], align 1
243*9880d681SAndroid Build Coastguard Worker  %large = alloca [8 x i8], align 1
244*9880d681SAndroid Build Coastguard Worker  %a = alloca %struct.struct_large_char, align 1
245*9880d681SAndroid Build Coastguard Worker  %b = alloca %struct.struct_small_char, align 1
246*9880d681SAndroid Build Coastguard Worker  %c = alloca %struct.struct_large_nonchar, align 8
247*9880d681SAndroid Build Coastguard Worker  %d = alloca %struct.struct_small_nonchar, align 2
248*9880d681SAndroid Build Coastguard Worker  %call = call i32 @get_scalar1()
249*9880d681SAndroid Build Coastguard Worker  store i32 %call, i32* %x, align 4
250*9880d681SAndroid Build Coastguard Worker  call void @end_scalar1()
251*9880d681SAndroid Build Coastguard Worker  %call1 = call i32 @get_scalar2()
252*9880d681SAndroid Build Coastguard Worker  store i32 %call1, i32* %y, align 4
253*9880d681SAndroid Build Coastguard Worker  call void @end_scalar2()
254*9880d681SAndroid Build Coastguard Worker  %call2 = call i32 @get_scalar3()
255*9880d681SAndroid Build Coastguard Worker  store i32 %call2, i32* %z, align 4
256*9880d681SAndroid Build Coastguard Worker  call void @end_scalar3()
257*9880d681SAndroid Build Coastguard Worker  %call3 = call i32 @get_addrof()
258*9880d681SAndroid Build Coastguard Worker  store i32 %call3, i32* %ptr, align 4
259*9880d681SAndroid Build Coastguard Worker  call void @end_addrof()
260*9880d681SAndroid Build Coastguard Worker  %call4 = call signext i16 @get_small_nonchar()
261*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [2 x i16], [2 x i16]* %small2, i32 0, i64 0
262*9880d681SAndroid Build Coastguard Worker  store i16 %call4, i16* %arrayidx, align 2
263*9880d681SAndroid Build Coastguard Worker  call void @end_small_nonchar()
264*9880d681SAndroid Build Coastguard Worker  %call5 = call i32 @get_large_nonchar()
265*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [8 x i32], [8 x i32]* %large2, i32 0, i64 0
266*9880d681SAndroid Build Coastguard Worker  store i32 %call5, i32* %arrayidx6, align 4
267*9880d681SAndroid Build Coastguard Worker  call void @end_large_nonchar()
268*9880d681SAndroid Build Coastguard Worker  %call7 = call signext i8 @get_small_char()
269*9880d681SAndroid Build Coastguard Worker  %arrayidx8 = getelementptr inbounds [2 x i8], [2 x i8]* %small, i32 0, i64 0
270*9880d681SAndroid Build Coastguard Worker  store i8 %call7, i8* %arrayidx8, align 1
271*9880d681SAndroid Build Coastguard Worker  call void @end_small_char()
272*9880d681SAndroid Build Coastguard Worker  %call9 = call signext i8 @get_large_char()
273*9880d681SAndroid Build Coastguard Worker  %arrayidx10 = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i64 0
274*9880d681SAndroid Build Coastguard Worker  store i8 %call9, i8* %arrayidx10, align 1
275*9880d681SAndroid Build Coastguard Worker  call void @end_large_char()
276*9880d681SAndroid Build Coastguard Worker  %call11 = call signext i8 @get_struct_large_char()
277*9880d681SAndroid Build Coastguard Worker  %foo = getelementptr inbounds %struct.struct_large_char, %struct.struct_large_char* %a, i32 0, i32 0
278*9880d681SAndroid Build Coastguard Worker  %arrayidx12 = getelementptr inbounds [8 x i8], [8 x i8]* %foo, i32 0, i64 0
279*9880d681SAndroid Build Coastguard Worker  store i8 %call11, i8* %arrayidx12, align 1
280*9880d681SAndroid Build Coastguard Worker  call void @end_struct_large_char()
281*9880d681SAndroid Build Coastguard Worker  %call13 = call signext i8 @get_struct_small_char()
282*9880d681SAndroid Build Coastguard Worker  %foo14 = getelementptr inbounds %struct.struct_small_char, %struct.struct_small_char* %b, i32 0, i32 0
283*9880d681SAndroid Build Coastguard Worker  %arrayidx15 = getelementptr inbounds [2 x i8], [2 x i8]* %foo14, i32 0, i64 0
284*9880d681SAndroid Build Coastguard Worker  store i8 %call13, i8* %arrayidx15, align 1
285*9880d681SAndroid Build Coastguard Worker  call void @end_struct_small_char()
286*9880d681SAndroid Build Coastguard Worker  %call16 = call i32 @get_struct_large_nonchar()
287*9880d681SAndroid Build Coastguard Worker  %foo17 = getelementptr inbounds %struct.struct_large_nonchar, %struct.struct_large_nonchar* %c, i32 0, i32 0
288*9880d681SAndroid Build Coastguard Worker  %arrayidx18 = getelementptr inbounds [8 x i32], [8 x i32]* %foo17, i32 0, i64 0
289*9880d681SAndroid Build Coastguard Worker  store i32 %call16, i32* %arrayidx18, align 4
290*9880d681SAndroid Build Coastguard Worker  call void @end_struct_large_nonchar()
291*9880d681SAndroid Build Coastguard Worker  %call19 = call signext i16 @get_struct_small_nonchar()
292*9880d681SAndroid Build Coastguard Worker  %foo20 = getelementptr inbounds %struct.struct_small_nonchar, %struct.struct_small_nonchar* %d, i32 0, i32 0
293*9880d681SAndroid Build Coastguard Worker  %arrayidx21 = getelementptr inbounds [2 x i16], [2 x i16]* %foo20, i32 0, i64 0
294*9880d681SAndroid Build Coastguard Worker  store i16 %call19, i16* %arrayidx21, align 2
295*9880d681SAndroid Build Coastguard Worker  call void @end_struct_small_nonchar()
296*9880d681SAndroid Build Coastguard Worker  %arraydecay = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i32 0
297*9880d681SAndroid Build Coastguard Worker  %arraydecay22 = getelementptr inbounds [2 x i8], [2 x i8]* %small, i32 0, i32 0
298*9880d681SAndroid Build Coastguard Worker  %arraydecay23 = getelementptr inbounds [8 x i32], [8 x i32]* %large2, i32 0, i32 0
299*9880d681SAndroid Build Coastguard Worker  %arraydecay24 = getelementptr inbounds [2 x i16], [2 x i16]* %small2, i32 0, i32 0
300*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %x, align 4
301*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %y, align 4
302*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %z, align 4
303*9880d681SAndroid Build Coastguard Worker  %coerce.dive = getelementptr %struct.struct_large_char, %struct.struct_large_char* %a, i32 0, i32 0
304*9880d681SAndroid Build Coastguard Worker  %3 = bitcast [8 x i8]* %coerce.dive to i64*
305*9880d681SAndroid Build Coastguard Worker  %4 = load i64, i64* %3, align 1
306*9880d681SAndroid Build Coastguard Worker  %coerce.dive25 = getelementptr %struct.struct_small_char, %struct.struct_small_char* %b, i32 0, i32 0
307*9880d681SAndroid Build Coastguard Worker  %5 = bitcast [2 x i8]* %coerce.dive25 to i16*
308*9880d681SAndroid Build Coastguard Worker  %6 = load i16, i16* %5, align 1
309*9880d681SAndroid Build Coastguard Worker  %coerce.dive26 = getelementptr %struct.struct_small_nonchar, %struct.struct_small_nonchar* %d, i32 0, i32 0
310*9880d681SAndroid Build Coastguard Worker  %7 = bitcast [2 x i16]* %coerce.dive26 to i32*
311*9880d681SAndroid Build Coastguard Worker  %8 = load i32, i32* %7, align 1
312*9880d681SAndroid Build Coastguard Worker  call void @takes_all(i64 %4, i16 %6, %struct.struct_large_nonchar* byval align 8 %c, i32 %8, i8* %arraydecay, i8* %arraydecay22, i32* %arraydecay23, i16* %arraydecay24, i32* %ptr, i32 %0, i32 %1, i32 %2)
313*9880d681SAndroid Build Coastguard Worker  ret void
314*9880d681SAndroid Build Coastguard Worker}
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Workerdefine void @layout_sspreq() nounwind uwtable sspreq {
317*9880d681SAndroid Build Coastguard Workerentry:
318*9880d681SAndroid Build Coastguard Worker; Expected stack layout for sspreq is the same as sspstrong
319*9880d681SAndroid Build Coastguard Worker;
320*9880d681SAndroid Build Coastguard Worker; CHECK: layout_sspreq:
321*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar1
322*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -120(
323*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar1
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar2
326*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -124(
327*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar2
328*9880d681SAndroid Build Coastguard Worker
329*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_scalar3
330*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -128(
331*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_scalar3
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_addrof
334*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -116(
335*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_addrof
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Worker; CHECK: get_small_nonchar
338*9880d681SAndroid Build Coastguard Worker; CHECK: movw %ax, -100(
339*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_small_nonchar
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_large_nonchar
342*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -48(
343*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_large_nonchar
344*9880d681SAndroid Build Coastguard Worker
345*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_small_char
346*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -102(
347*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_small_char
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_large_char
350*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -56(
351*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_large_char
352*9880d681SAndroid Build Coastguard Worker
353*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_large_char
354*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -64(
355*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_large_char
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_small_char
358*9880d681SAndroid Build Coastguard Worker; CHECK: movb %al, -104(
359*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_small_char
360*9880d681SAndroid Build Coastguard Worker
361*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_large_nonchar
362*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, -96(
363*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_large_nonchar
364*9880d681SAndroid Build Coastguard Worker
365*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} get_struct_small_nonchar
366*9880d681SAndroid Build Coastguard Worker; CHECK: movw %ax, -112(
367*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} end_struct_small_nonchar
368*9880d681SAndroid Build Coastguard Worker  %x = alloca i32, align 4
369*9880d681SAndroid Build Coastguard Worker  %y = alloca i32, align 4
370*9880d681SAndroid Build Coastguard Worker  %z = alloca i32, align 4
371*9880d681SAndroid Build Coastguard Worker  %ptr = alloca i32, align 4
372*9880d681SAndroid Build Coastguard Worker  %small2 = alloca [2 x i16], align 2
373*9880d681SAndroid Build Coastguard Worker  %large2 = alloca [8 x i32], align 16
374*9880d681SAndroid Build Coastguard Worker  %small = alloca [2 x i8], align 1
375*9880d681SAndroid Build Coastguard Worker  %large = alloca [8 x i8], align 1
376*9880d681SAndroid Build Coastguard Worker  %a = alloca %struct.struct_large_char, align 1
377*9880d681SAndroid Build Coastguard Worker  %b = alloca %struct.struct_small_char, align 1
378*9880d681SAndroid Build Coastguard Worker  %c = alloca %struct.struct_large_nonchar, align 8
379*9880d681SAndroid Build Coastguard Worker  %d = alloca %struct.struct_small_nonchar, align 2
380*9880d681SAndroid Build Coastguard Worker  %call = call i32 @get_scalar1()
381*9880d681SAndroid Build Coastguard Worker  store i32 %call, i32* %x, align 4
382*9880d681SAndroid Build Coastguard Worker  call void @end_scalar1()
383*9880d681SAndroid Build Coastguard Worker  %call1 = call i32 @get_scalar2()
384*9880d681SAndroid Build Coastguard Worker  store i32 %call1, i32* %y, align 4
385*9880d681SAndroid Build Coastguard Worker  call void @end_scalar2()
386*9880d681SAndroid Build Coastguard Worker  %call2 = call i32 @get_scalar3()
387*9880d681SAndroid Build Coastguard Worker  store i32 %call2, i32* %z, align 4
388*9880d681SAndroid Build Coastguard Worker  call void @end_scalar3()
389*9880d681SAndroid Build Coastguard Worker  %call3 = call i32 @get_addrof()
390*9880d681SAndroid Build Coastguard Worker  store i32 %call3, i32* %ptr, align 4
391*9880d681SAndroid Build Coastguard Worker  call void @end_addrof()
392*9880d681SAndroid Build Coastguard Worker  %call4 = call signext i16 @get_small_nonchar()
393*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [2 x i16], [2 x i16]* %small2, i32 0, i64 0
394*9880d681SAndroid Build Coastguard Worker  store i16 %call4, i16* %arrayidx, align 2
395*9880d681SAndroid Build Coastguard Worker  call void @end_small_nonchar()
396*9880d681SAndroid Build Coastguard Worker  %call5 = call i32 @get_large_nonchar()
397*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [8 x i32], [8 x i32]* %large2, i32 0, i64 0
398*9880d681SAndroid Build Coastguard Worker  store i32 %call5, i32* %arrayidx6, align 4
399*9880d681SAndroid Build Coastguard Worker  call void @end_large_nonchar()
400*9880d681SAndroid Build Coastguard Worker  %call7 = call signext i8 @get_small_char()
401*9880d681SAndroid Build Coastguard Worker  %arrayidx8 = getelementptr inbounds [2 x i8], [2 x i8]* %small, i32 0, i64 0
402*9880d681SAndroid Build Coastguard Worker  store i8 %call7, i8* %arrayidx8, align 1
403*9880d681SAndroid Build Coastguard Worker  call void @end_small_char()
404*9880d681SAndroid Build Coastguard Worker  %call9 = call signext i8 @get_large_char()
405*9880d681SAndroid Build Coastguard Worker  %arrayidx10 = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i64 0
406*9880d681SAndroid Build Coastguard Worker  store i8 %call9, i8* %arrayidx10, align 1
407*9880d681SAndroid Build Coastguard Worker  call void @end_large_char()
408*9880d681SAndroid Build Coastguard Worker  %call11 = call signext i8 @get_struct_large_char()
409*9880d681SAndroid Build Coastguard Worker  %foo = getelementptr inbounds %struct.struct_large_char, %struct.struct_large_char* %a, i32 0, i32 0
410*9880d681SAndroid Build Coastguard Worker  %arrayidx12 = getelementptr inbounds [8 x i8], [8 x i8]* %foo, i32 0, i64 0
411*9880d681SAndroid Build Coastguard Worker  store i8 %call11, i8* %arrayidx12, align 1
412*9880d681SAndroid Build Coastguard Worker  call void @end_struct_large_char()
413*9880d681SAndroid Build Coastguard Worker  %call13 = call signext i8 @get_struct_small_char()
414*9880d681SAndroid Build Coastguard Worker  %foo14 = getelementptr inbounds %struct.struct_small_char, %struct.struct_small_char* %b, i32 0, i32 0
415*9880d681SAndroid Build Coastguard Worker  %arrayidx15 = getelementptr inbounds [2 x i8], [2 x i8]* %foo14, i32 0, i64 0
416*9880d681SAndroid Build Coastguard Worker  store i8 %call13, i8* %arrayidx15, align 1
417*9880d681SAndroid Build Coastguard Worker  call void @end_struct_small_char()
418*9880d681SAndroid Build Coastguard Worker  %call16 = call i32 @get_struct_large_nonchar()
419*9880d681SAndroid Build Coastguard Worker  %foo17 = getelementptr inbounds %struct.struct_large_nonchar, %struct.struct_large_nonchar* %c, i32 0, i32 0
420*9880d681SAndroid Build Coastguard Worker  %arrayidx18 = getelementptr inbounds [8 x i32], [8 x i32]* %foo17, i32 0, i64 0
421*9880d681SAndroid Build Coastguard Worker  store i32 %call16, i32* %arrayidx18, align 4
422*9880d681SAndroid Build Coastguard Worker  call void @end_struct_large_nonchar()
423*9880d681SAndroid Build Coastguard Worker  %call19 = call signext i16 @get_struct_small_nonchar()
424*9880d681SAndroid Build Coastguard Worker  %foo20 = getelementptr inbounds %struct.struct_small_nonchar, %struct.struct_small_nonchar* %d, i32 0, i32 0
425*9880d681SAndroid Build Coastguard Worker  %arrayidx21 = getelementptr inbounds [2 x i16], [2 x i16]* %foo20, i32 0, i64 0
426*9880d681SAndroid Build Coastguard Worker  store i16 %call19, i16* %arrayidx21, align 2
427*9880d681SAndroid Build Coastguard Worker  call void @end_struct_small_nonchar()
428*9880d681SAndroid Build Coastguard Worker  %arraydecay = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i32 0
429*9880d681SAndroid Build Coastguard Worker  %arraydecay22 = getelementptr inbounds [2 x i8], [2 x i8]* %small, i32 0, i32 0
430*9880d681SAndroid Build Coastguard Worker  %arraydecay23 = getelementptr inbounds [8 x i32], [8 x i32]* %large2, i32 0, i32 0
431*9880d681SAndroid Build Coastguard Worker  %arraydecay24 = getelementptr inbounds [2 x i16], [2 x i16]* %small2, i32 0, i32 0
432*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %x, align 4
433*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %y, align 4
434*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %z, align 4
435*9880d681SAndroid Build Coastguard Worker  %coerce.dive = getelementptr %struct.struct_large_char, %struct.struct_large_char* %a, i32 0, i32 0
436*9880d681SAndroid Build Coastguard Worker  %3 = bitcast [8 x i8]* %coerce.dive to i64*
437*9880d681SAndroid Build Coastguard Worker  %4 = load i64, i64* %3, align 1
438*9880d681SAndroid Build Coastguard Worker  %coerce.dive25 = getelementptr %struct.struct_small_char, %struct.struct_small_char* %b, i32 0, i32 0
439*9880d681SAndroid Build Coastguard Worker  %5 = bitcast [2 x i8]* %coerce.dive25 to i16*
440*9880d681SAndroid Build Coastguard Worker  %6 = load i16, i16* %5, align 1
441*9880d681SAndroid Build Coastguard Worker  %coerce.dive26 = getelementptr %struct.struct_small_nonchar, %struct.struct_small_nonchar* %d, i32 0, i32 0
442*9880d681SAndroid Build Coastguard Worker  %7 = bitcast [2 x i16]* %coerce.dive26 to i32*
443*9880d681SAndroid Build Coastguard Worker  %8 = load i32, i32* %7, align 1
444*9880d681SAndroid Build Coastguard Worker  call void @takes_all(i64 %4, i16 %6, %struct.struct_large_nonchar* byval align 8 %c, i32 %8, i8* %arraydecay, i8* %arraydecay22, i32* %arraydecay23, i16* %arraydecay24, i32* %ptr, i32 %0, i32 %1, i32 %2)
445*9880d681SAndroid Build Coastguard Worker  ret void
446*9880d681SAndroid Build Coastguard Worker}
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Workerdefine void @fast_non_linux() ssp {
449*9880d681SAndroid Build Coastguard Workerentry:
450*9880d681SAndroid Build Coastguard Worker; FAST-NON-LIN: fast_non_linux:
451*9880d681SAndroid Build Coastguard Worker; FAST-NON-LIN: call{{l|q}} get_scalar1
452*9880d681SAndroid Build Coastguard Worker; FAST-NON-LIN: movl %eax, -20(
453*9880d681SAndroid Build Coastguard Worker; FAST-NON-LIN: call{{l|q}} end_scalar1
454*9880d681SAndroid Build Coastguard Worker
455*9880d681SAndroid Build Coastguard Worker; FAST-NON-LIN: call{{l|q}} get_large_char
456*9880d681SAndroid Build Coastguard Worker; FAST-NON-LIN: movb %al, -16(
457*9880d681SAndroid Build Coastguard Worker; FAST-NON-LIN: call{{l|q}} end_large_char
458*9880d681SAndroid Build Coastguard Worker  %x = alloca i32, align 4
459*9880d681SAndroid Build Coastguard Worker  %large = alloca [8 x i8], align 1
460*9880d681SAndroid Build Coastguard Worker  %call = call i32 @get_scalar1()
461*9880d681SAndroid Build Coastguard Worker  store i32 %call, i32* %x, align 4
462*9880d681SAndroid Build Coastguard Worker  call void @end_scalar1()
463*9880d681SAndroid Build Coastguard Worker  %call1 = call signext i8 @get_large_char()
464*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i64 0
465*9880d681SAndroid Build Coastguard Worker  store i8 %call1, i8* %arrayidx, align 1
466*9880d681SAndroid Build Coastguard Worker  call void @end_large_char()
467*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %x, align 4
468*9880d681SAndroid Build Coastguard Worker  %arraydecay = getelementptr inbounds [8 x i8], [8 x i8]* %large, i32 0, i32 0
469*9880d681SAndroid Build Coastguard Worker  call void @takes_two(i32 %0, i8* %arraydecay)
470*9880d681SAndroid Build Coastguard Worker  ret void
471*9880d681SAndroid Build Coastguard Worker}
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerdeclare i32 @get_scalar1()
474*9880d681SAndroid Build Coastguard Workerdeclare void @end_scalar1()
475*9880d681SAndroid Build Coastguard Worker
476*9880d681SAndroid Build Coastguard Workerdeclare i32 @get_scalar2()
477*9880d681SAndroid Build Coastguard Workerdeclare void @end_scalar2()
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Workerdeclare i32 @get_scalar3()
480*9880d681SAndroid Build Coastguard Workerdeclare void @end_scalar3()
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Workerdeclare i32 @get_addrof()
483*9880d681SAndroid Build Coastguard Workerdeclare void @end_addrof()
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Workerdeclare signext i16 @get_small_nonchar()
486*9880d681SAndroid Build Coastguard Workerdeclare void @end_small_nonchar()
487*9880d681SAndroid Build Coastguard Worker
488*9880d681SAndroid Build Coastguard Workerdeclare i32 @get_large_nonchar()
489*9880d681SAndroid Build Coastguard Workerdeclare void @end_large_nonchar()
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Workerdeclare signext i8 @get_small_char()
492*9880d681SAndroid Build Coastguard Workerdeclare void @end_small_char()
493*9880d681SAndroid Build Coastguard Worker
494*9880d681SAndroid Build Coastguard Workerdeclare signext i8 @get_large_char()
495*9880d681SAndroid Build Coastguard Workerdeclare void @end_large_char()
496*9880d681SAndroid Build Coastguard Worker
497*9880d681SAndroid Build Coastguard Workerdeclare signext i8 @get_struct_large_char()
498*9880d681SAndroid Build Coastguard Workerdeclare void @end_struct_large_char()
499*9880d681SAndroid Build Coastguard Worker
500*9880d681SAndroid Build Coastguard Workerdeclare signext i8 @get_struct_small_char()
501*9880d681SAndroid Build Coastguard Workerdeclare void @end_struct_small_char()
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Workerdeclare i32 @get_struct_large_nonchar()
504*9880d681SAndroid Build Coastguard Workerdeclare void @end_struct_large_nonchar()
505*9880d681SAndroid Build Coastguard Worker
506*9880d681SAndroid Build Coastguard Workerdeclare signext i16 @get_struct_small_nonchar()
507*9880d681SAndroid Build Coastguard Workerdeclare void @end_struct_small_nonchar()
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Workerdeclare void @takes_all(i64, i16, %struct.struct_large_nonchar* byval align 8, i32, i8*, i8*, i32*, i16*, i32*, i32, i32, i32)
510*9880d681SAndroid Build Coastguard Workerdeclare void @takes_two(i32, i8*)
511