arm-arguments.c revision 1067d05041db25301cd923712870bcf97db6d8bc
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() {} 156a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov 157a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// PR11905 158a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanovstruct s31 { char x; }; 159a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanovvoid f31(struct s31 s) { } 160a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// AAPCS: @f31([1 x i32] %s.coerce) 161a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// AAPCS: %s = alloca %struct.s31, align 4 1621067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// AAPCS: alloca [1 x i32] 1631067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// AAPCS: store [1 x i32] %s.coerce, [1 x i32]* 164a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// APCS-GNU: @f31([1 x i32] %s.coerce) 165a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// APCS-GNU: %s = alloca %struct.s31, align 4 1661067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// APCS-GNU: alloca [1 x i32] 1671067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// APCS-GNU: store [1 x i32] %s.coerce, [1 x i32]* 168