1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=APCS-GNU %s
2a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=AAPCS %s
316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
475d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define signext i8 @f0()
516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc signext i8 @f0()
616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarchar f0(void) {
716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar  return 0;
816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar}
916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
1075d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i8 @f1()
1116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i8 @f1()
1216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s1 { char f0; };
1316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s1 f1(void) {}
1416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
1575d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i16 @f2()
1616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i16 @f2()
1716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s2 { short f0; };
1816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s2 f2(void) {}
1916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
2075d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f3()
2116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f3()
2216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s3 { int f0; };
2316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s3 f3(void) {}
2416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
2575d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f4()
2616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f4()
2716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s4 { struct s4_0 { int f0; } f0; };
2816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s4 f4(void) {}
2916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
3075d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f5(
31410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: struct.s5* noalias sret
3216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f5()
3316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s5 { struct { } f0; int f1; };
3416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s5 f5(void) {}
3516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
3675d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f6(
37410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: struct.s6* noalias sret
3816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f6()
3916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s6 { int f0[1]; };
4016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s6 f6(void) {}
4116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
4275d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f7()
4316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc void @f7()
4416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s7 { struct { int : 0; } f0; };
4516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s7 f7(void) {}
4616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
4775d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f8(
48410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: struct.s8* noalias sret
4916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc void @f8()
5016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s8 { struct { int : 0; } f0[1]; };
5116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s8 f8(void) {}
5216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
5375d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f9()
5416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f9()
5516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s9 { int f0; int : 0; };
5616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s9 f9(void) {}
5716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
5875d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f10()
5916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f10()
6016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s10 { int f0; int : 0; int : 0; };
6116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s10 f10(void) {}
6216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
6375d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f11(
64410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: struct.s11* noalias sret
6516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f11()
6616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s11 { int : 0; int f0; };
6716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s11 f11(void) {}
6816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar
6975d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f12()
7016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar// AAPCS: define arm_aapcscc i32 @f12()
7116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarunion u12 { char f0; short f1; int f2; };
7216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarunion u12 f12(void) {}
73b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar
7475d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f13(
75410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: struct.s13* noalias sret
76b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar
77b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar// FIXME: This should return a float.
7875d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// AAPCS-FIXME: darm_aapcscc efine float @f13()
79b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarstruct s13 { float f0; };
80b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarstruct s13 f13(void) {}
81b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar
8275d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f14(
83410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: union.u14* noalias sret
84b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f14()
85b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarunion u14 { float f0; };
86b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarunion u14 f14(void) {}
87420255710694e958fa04bed1d80d96508949879eDaniel Dunbar
8875d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f15()
89420255710694e958fa04bed1d80d96508949879eDaniel Dunbar// AAPCS: define arm_aapcscc void @f15()
90420255710694e958fa04bed1d80d96508949879eDaniel Dunbarvoid f15(struct s7 a0) {}
91420255710694e958fa04bed1d80d96508949879eDaniel Dunbar
9275d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f16()
93420255710694e958fa04bed1d80d96508949879eDaniel Dunbar// AAPCS: define arm_aapcscc void @f16()
94420255710694e958fa04bed1d80d96508949879eDaniel Dunbarvoid f16(struct s8 a0) {}
95679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar
9675d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f17()
97679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f17()
98679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s17 { short f0 : 13; char f1 : 4; };
99679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s17 f17(void) {}
100679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar
10175d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f18()
102679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f18()
103679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s18 { short f0; char f1 : 4; };
104679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s18 f18(void) {}
105679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar
10675d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f19(
107410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: struct.s19* noalias sret
108679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f19()
109679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s19 { int f0; struct s8 f1; };
110679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s19 f19(void) {}
111679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar
11275d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define void @f20(
113410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: struct.s20* noalias sret
114679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f20()
115679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s20 { struct s8 f1; int f0; };
116679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s20 f20(void) {}
117679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar
11875d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i8 @f21()
119679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f21()
120679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s21 { struct {} f1; int f0 : 4; };
121679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s21 f21(void) {}
1224cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar
12375d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i16 @f22()
12475d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f23()
12575d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i64 @f24()
12675d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i128 @f25()
12775d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i64 @f26()
12875d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i128 @f27()
1294cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar// AAPCS: define arm_aapcscc i16 @f22()
1304cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f23()
131410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// AAPCS: define arm_aapcscc void @f24({{.*}} noalias sret
132410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// AAPCS: define arm_aapcscc void @f25({{.*}} noalias sret
133410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// AAPCS: define arm_aapcscc void @f26({{.*}} noalias sret
134410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// AAPCS: define arm_aapcscc void @f27({{.*}} noalias sret
1354cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex char       f22(void) {}
1364cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex short      f23(void) {}
1374cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex int        f24(void) {}
1384cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex long long  f25(void) {}
1394cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex float      f26(void) {}
1404cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex double     f27(void) {}
1414581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar
14275d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i16 @f28()
1434581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar// AAPCS: define arm_aapcscc i16 @f28()
1444581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s28 { _Complex char f0; };
1454581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s28 f28() {}
1464581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar
14775d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// APCS-GNU: define i32 @f29()
1484581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar// AAPCS: define arm_aapcscc i32 @f29()
1494581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s29 { _Complex short f0; };
1504581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s29 f29() {}
1514581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar
152410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// APCS-GNU: define void @f30({{.*}} noalias sret
153410ffb2bc5f072d58a73c14560345bcf77dec1ccJohn McCall// AAPCS: define arm_aapcscc void @f30({{.*}} noalias sret
1544581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s30 { _Complex int f0; };
1554581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s30 f30() {}
156