blob: 3ae3b8ecd21fbdacd47c509dbdb192f9eda15647 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// 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
Daniel Dunbar16a08082009-09-14 00:56:55 +00003
Rafael Espindola75d0f822010-06-16 17:49:52 +00004// APCS-GNU: define signext i8 @f0()
Daniel Dunbar16a08082009-09-14 00:56:55 +00005// AAPCS: define arm_aapcscc signext i8 @f0()
6char f0(void) {
7 return 0;
8}
9
Rafael Espindola75d0f822010-06-16 17:49:52 +000010// APCS-GNU: define i8 @f1()
Daniel Dunbar16a08082009-09-14 00:56:55 +000011// AAPCS: define arm_aapcscc i8 @f1()
12struct s1 { char f0; };
13struct s1 f1(void) {}
14
Rafael Espindola75d0f822010-06-16 17:49:52 +000015// APCS-GNU: define i16 @f2()
Daniel Dunbar16a08082009-09-14 00:56:55 +000016// AAPCS: define arm_aapcscc i16 @f2()
17struct s2 { short f0; };
18struct s2 f2(void) {}
19
Rafael Espindola75d0f822010-06-16 17:49:52 +000020// APCS-GNU: define i32 @f3()
Daniel Dunbar16a08082009-09-14 00:56:55 +000021// AAPCS: define arm_aapcscc i32 @f3()
22struct s3 { int f0; };
23struct s3 f3(void) {}
24
Rafael Espindola75d0f822010-06-16 17:49:52 +000025// APCS-GNU: define i32 @f4()
Daniel Dunbar16a08082009-09-14 00:56:55 +000026// AAPCS: define arm_aapcscc i32 @f4()
27struct s4 { struct s4_0 { int f0; } f0; };
28struct s4 f4(void) {}
29
Rafael Espindola75d0f822010-06-16 17:49:52 +000030// APCS-GNU: define void @f5(
John McCall410ffb22011-08-25 23:04:34 +000031// APCS-GNU: struct.s5* noalias sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000032// AAPCS: define arm_aapcscc i32 @f5()
33struct s5 { struct { } f0; int f1; };
34struct s5 f5(void) {}
35
Rafael Espindola75d0f822010-06-16 17:49:52 +000036// APCS-GNU: define void @f6(
John McCall410ffb22011-08-25 23:04:34 +000037// APCS-GNU: struct.s6* noalias sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000038// AAPCS: define arm_aapcscc i32 @f6()
39struct s6 { int f0[1]; };
40struct s6 f6(void) {}
41
Rafael Espindola75d0f822010-06-16 17:49:52 +000042// APCS-GNU: define void @f7()
Daniel Dunbar16a08082009-09-14 00:56:55 +000043// AAPCS: define arm_aapcscc void @f7()
44struct s7 { struct { int : 0; } f0; };
45struct s7 f7(void) {}
46
Rafael Espindola75d0f822010-06-16 17:49:52 +000047// APCS-GNU: define void @f8(
John McCall410ffb22011-08-25 23:04:34 +000048// APCS-GNU: struct.s8* noalias sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000049// AAPCS: define arm_aapcscc void @f8()
50struct s8 { struct { int : 0; } f0[1]; };
51struct s8 f8(void) {}
52
Rafael Espindola75d0f822010-06-16 17:49:52 +000053// APCS-GNU: define i32 @f9()
Daniel Dunbar16a08082009-09-14 00:56:55 +000054// AAPCS: define arm_aapcscc i32 @f9()
55struct s9 { int f0; int : 0; };
56struct s9 f9(void) {}
57
Rafael Espindola75d0f822010-06-16 17:49:52 +000058// APCS-GNU: define i32 @f10()
Daniel Dunbar16a08082009-09-14 00:56:55 +000059// AAPCS: define arm_aapcscc i32 @f10()
60struct s10 { int f0; int : 0; int : 0; };
61struct s10 f10(void) {}
62
Rafael Espindola75d0f822010-06-16 17:49:52 +000063// APCS-GNU: define void @f11(
John McCall410ffb22011-08-25 23:04:34 +000064// APCS-GNU: struct.s11* noalias sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000065// AAPCS: define arm_aapcscc i32 @f11()
66struct s11 { int : 0; int f0; };
67struct s11 f11(void) {}
68
Rafael Espindola75d0f822010-06-16 17:49:52 +000069// APCS-GNU: define i32 @f12()
Daniel Dunbar16a08082009-09-14 00:56:55 +000070// AAPCS: define arm_aapcscc i32 @f12()
71union u12 { char f0; short f1; int f2; };
72union u12 f12(void) {}
Daniel Dunbarb0d58192009-09-14 02:20:34 +000073
Rafael Espindola75d0f822010-06-16 17:49:52 +000074// APCS-GNU: define void @f13(
John McCall410ffb22011-08-25 23:04:34 +000075// APCS-GNU: struct.s13* noalias sret
Daniel Dunbarb0d58192009-09-14 02:20:34 +000076
77// FIXME: This should return a float.
Rafael Espindola75d0f822010-06-16 17:49:52 +000078// AAPCS-FIXME: darm_aapcscc efine float @f13()
Daniel Dunbarb0d58192009-09-14 02:20:34 +000079struct s13 { float f0; };
80struct s13 f13(void) {}
81
Rafael Espindola75d0f822010-06-16 17:49:52 +000082// APCS-GNU: define void @f14(
John McCall410ffb22011-08-25 23:04:34 +000083// APCS-GNU: union.u14* noalias sret
Daniel Dunbarb0d58192009-09-14 02:20:34 +000084// AAPCS: define arm_aapcscc i32 @f14()
85union u14 { float f0; };
86union u14 f14(void) {}
Daniel Dunbar42025572009-09-14 21:54:03 +000087
Rafael Espindola75d0f822010-06-16 17:49:52 +000088// APCS-GNU: define void @f15()
Daniel Dunbar42025572009-09-14 21:54:03 +000089// AAPCS: define arm_aapcscc void @f15()
90void f15(struct s7 a0) {}
91
Rafael Espindola75d0f822010-06-16 17:49:52 +000092// APCS-GNU: define void @f16()
Daniel Dunbar42025572009-09-14 21:54:03 +000093// AAPCS: define arm_aapcscc void @f16()
94void f16(struct s8 a0) {}
Daniel Dunbar679855a2010-01-29 03:22:29 +000095
Rafael Espindola75d0f822010-06-16 17:49:52 +000096// APCS-GNU: define i32 @f17()
Daniel Dunbar679855a2010-01-29 03:22:29 +000097// AAPCS: define arm_aapcscc i32 @f17()
98struct s17 { short f0 : 13; char f1 : 4; };
99struct s17 f17(void) {}
100
Rafael Espindola75d0f822010-06-16 17:49:52 +0000101// APCS-GNU: define i32 @f18()
Daniel Dunbar679855a2010-01-29 03:22:29 +0000102// AAPCS: define arm_aapcscc i32 @f18()
103struct s18 { short f0; char f1 : 4; };
104struct s18 f18(void) {}
105
Rafael Espindola75d0f822010-06-16 17:49:52 +0000106// APCS-GNU: define void @f19(
John McCall410ffb22011-08-25 23:04:34 +0000107// APCS-GNU: struct.s19* noalias sret
Daniel Dunbar679855a2010-01-29 03:22:29 +0000108// AAPCS: define arm_aapcscc i32 @f19()
109struct s19 { int f0; struct s8 f1; };
110struct s19 f19(void) {}
111
Rafael Espindola75d0f822010-06-16 17:49:52 +0000112// APCS-GNU: define void @f20(
John McCall410ffb22011-08-25 23:04:34 +0000113// APCS-GNU: struct.s20* noalias sret
Daniel Dunbar679855a2010-01-29 03:22:29 +0000114// AAPCS: define arm_aapcscc i32 @f20()
115struct s20 { struct s8 f1; int f0; };
116struct s20 f20(void) {}
117
Rafael Espindola75d0f822010-06-16 17:49:52 +0000118// APCS-GNU: define i8 @f21()
Daniel Dunbar679855a2010-01-29 03:22:29 +0000119// AAPCS: define arm_aapcscc i32 @f21()
120struct s21 { struct {} f1; int f0 : 4; };
121struct s21 f21(void) {}
Daniel Dunbar4cc753f2010-02-01 23:31:19 +0000122
Rafael Espindola75d0f822010-06-16 17:49:52 +0000123// 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()
Daniel Dunbar4cc753f2010-02-01 23:31:19 +0000129// AAPCS: define arm_aapcscc i16 @f22()
130// AAPCS: define arm_aapcscc i32 @f23()
John McCall410ffb22011-08-25 23:04:34 +0000131// 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
Daniel Dunbar4cc753f2010-02-01 23:31:19 +0000135_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) {}
Daniel Dunbar45815812010-02-01 23:31:26 +0000141
Rafael Espindola75d0f822010-06-16 17:49:52 +0000142// APCS-GNU: define i16 @f28()
Daniel Dunbar45815812010-02-01 23:31:26 +0000143// AAPCS: define arm_aapcscc i16 @f28()
144struct s28 { _Complex char f0; };
145struct s28 f28() {}
146
Rafael Espindola75d0f822010-06-16 17:49:52 +0000147// APCS-GNU: define i32 @f29()
Daniel Dunbar45815812010-02-01 23:31:26 +0000148// AAPCS: define arm_aapcscc i32 @f29()
149struct s29 { _Complex short f0; };
150struct s29 f29() {}
151
John McCall410ffb22011-08-25 23:04:34 +0000152// APCS-GNU: define void @f30({{.*}} noalias sret
153// AAPCS: define arm_aapcscc void @f30({{.*}} noalias sret
Daniel Dunbar45815812010-02-01 23:31:26 +0000154struct s30 { _Complex int f0; };
155struct s30 f30() {}