]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/arm-arguments.c
Vendor import of clang release_30 branch r142614:
[FreeBSD/FreeBSD.git] / test / CodeGen / arm-arguments.c
1 // RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=APCS-GNU %s
2 // RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=AAPCS %s
3
4 // APCS-GNU: define signext i8 @f0()
5 // AAPCS: define arm_aapcscc signext i8 @f0()
6 char f0(void) {
7   return 0;
8 }
9
10 // APCS-GNU: define i8 @f1()
11 // AAPCS: define arm_aapcscc i8 @f1()
12 struct s1 { char f0; };
13 struct s1 f1(void) {}
14
15 // APCS-GNU: define i16 @f2()
16 // AAPCS: define arm_aapcscc i16 @f2()
17 struct s2 { short f0; };
18 struct s2 f2(void) {}
19
20 // APCS-GNU: define i32 @f3()
21 // AAPCS: define arm_aapcscc i32 @f3()
22 struct s3 { int f0; };
23 struct s3 f3(void) {}
24
25 // APCS-GNU: define i32 @f4()
26 // AAPCS: define arm_aapcscc i32 @f4()
27 struct s4 { struct s4_0 { int f0; } f0; };
28 struct s4 f4(void) {}
29
30 // APCS-GNU: define void @f5(
31 // APCS-GNU: struct.s5* noalias sret
32 // AAPCS: define arm_aapcscc i32 @f5()
33 struct s5 { struct { } f0; int f1; };
34 struct s5 f5(void) {}
35
36 // APCS-GNU: define void @f6(
37 // APCS-GNU: struct.s6* noalias sret
38 // AAPCS: define arm_aapcscc i32 @f6()
39 struct s6 { int f0[1]; };
40 struct s6 f6(void) {}
41
42 // APCS-GNU: define void @f7()
43 // AAPCS: define arm_aapcscc void @f7()
44 struct s7 { struct { int : 0; } f0; };
45 struct s7 f7(void) {}
46
47 // APCS-GNU: define void @f8(
48 // APCS-GNU: struct.s8* noalias sret
49 // AAPCS: define arm_aapcscc void @f8()
50 struct s8 { struct { int : 0; } f0[1]; };
51 struct s8 f8(void) {}
52
53 // APCS-GNU: define i32 @f9()
54 // AAPCS: define arm_aapcscc i32 @f9()
55 struct s9 { int f0; int : 0; };
56 struct s9 f9(void) {}
57
58 // APCS-GNU: define i32 @f10()
59 // AAPCS: define arm_aapcscc i32 @f10()
60 struct s10 { int f0; int : 0; int : 0; };
61 struct s10 f10(void) {}
62
63 // APCS-GNU: define void @f11(
64 // APCS-GNU: struct.s11* noalias sret
65 // AAPCS: define arm_aapcscc i32 @f11()
66 struct s11 { int : 0; int f0; };
67 struct s11 f11(void) {}
68
69 // APCS-GNU: define i32 @f12()
70 // AAPCS: define arm_aapcscc i32 @f12()
71 union u12 { char f0; short f1; int f2; };
72 union u12 f12(void) {}
73
74 // APCS-GNU: define void @f13(
75 // APCS-GNU: struct.s13* noalias sret
76
77 // FIXME: This should return a float.
78 // AAPCS-FIXME: darm_aapcscc efine float @f13()
79 struct s13 { float f0; };
80 struct s13 f13(void) {}
81
82 // APCS-GNU: define void @f14(
83 // APCS-GNU: union.u14* noalias sret
84 // AAPCS: define arm_aapcscc i32 @f14()
85 union u14 { float f0; };
86 union u14 f14(void) {}
87
88 // APCS-GNU: define void @f15()
89 // AAPCS: define arm_aapcscc void @f15()
90 void f15(struct s7 a0) {}
91
92 // APCS-GNU: define void @f16()
93 // AAPCS: define arm_aapcscc void @f16()
94 void f16(struct s8 a0) {}
95
96 // APCS-GNU: define i32 @f17()
97 // AAPCS: define arm_aapcscc i32 @f17()
98 struct s17 { short f0 : 13; char f1 : 4; };
99 struct s17 f17(void) {}
100
101 // APCS-GNU: define i32 @f18()
102 // AAPCS: define arm_aapcscc i32 @f18()
103 struct s18 { short f0; char f1 : 4; };
104 struct s18 f18(void) {}
105
106 // APCS-GNU: define void @f19(
107 // APCS-GNU: struct.s19* noalias sret
108 // AAPCS: define arm_aapcscc i32 @f19()
109 struct s19 { int f0; struct s8 f1; };
110 struct s19 f19(void) {}
111
112 // APCS-GNU: define void @f20(
113 // APCS-GNU: struct.s20* noalias sret
114 // AAPCS: define arm_aapcscc i32 @f20()
115 struct s20 { struct s8 f1; int f0; };
116 struct s20 f20(void) {}
117
118 // APCS-GNU: define i8 @f21()
119 // AAPCS: define arm_aapcscc i32 @f21()
120 struct s21 { struct {} f1; int f0 : 4; };
121 struct s21 f21(void) {}
122
123 // APCS-GNU: define i16 @f22()
124 // APCS-GNU: define i32 @f23()
125 // APCS-GNU: define i64 @f24()
126 // APCS-GNU: define i128 @f25()
127 // APCS-GNU: define i64 @f26()
128 // APCS-GNU: define i128 @f27()
129 // AAPCS: define arm_aapcscc i16 @f22()
130 // AAPCS: define arm_aapcscc i32 @f23()
131 // AAPCS: define arm_aapcscc void @f24({{.*}} noalias sret
132 // AAPCS: define arm_aapcscc void @f25({{.*}} noalias sret
133 // AAPCS: define arm_aapcscc void @f26({{.*}} noalias sret
134 // AAPCS: define arm_aapcscc void @f27({{.*}} noalias sret
135 _Complex char       f22(void) {}
136 _Complex short      f23(void) {}
137 _Complex int        f24(void) {}
138 _Complex long long  f25(void) {}
139 _Complex float      f26(void) {}
140 _Complex double     f27(void) {}
141
142 // APCS-GNU: define i16 @f28()
143 // AAPCS: define arm_aapcscc i16 @f28()
144 struct s28 { _Complex char f0; };
145 struct s28 f28() {}
146
147 // APCS-GNU: define i32 @f29()
148 // AAPCS: define arm_aapcscc i32 @f29()
149 struct s29 { _Complex short f0; };
150 struct s29 f29() {}
151
152 // APCS-GNU: define void @f30({{.*}} noalias sret
153 // AAPCS: define arm_aapcscc void @f30({{.*}} noalias sret
154 struct s30 { _Complex int f0; };
155 struct s30 f30() {}