1f79470583759d20c20268711e6111461aefa8461Jim Grosbach// REQUIRES: arm-registered-target 22440fb1f91557912f8c43cb72201170254ae09f4Amara Emerson// RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-feature +neon -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=APCS-GNU %s 32440fb1f91557912f8c43cb72201170254ae09f4Amara Emerson// RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-feature +neon -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=AAPCS %s 416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define signext i8 @f0() 693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc signext i8 @f0() 716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarchar f0(void) { 816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar return 0; 916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar} 1016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 1193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i8 @f1() 1293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i8 @f1() 1316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s1 { char f0; }; 1416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s1 f1(void) {} 1516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 1693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i16 @f2() 1793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i16 @f2() 1816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s2 { short f0; }; 1916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s2 f2(void) {} 2016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 2193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f3() 2293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f3() 2316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s3 { int f0; }; 2416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s3 f3(void) {} 2516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 2693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f4() 2793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f4() 2816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s4 { struct s4_0 { int f0; } f0; }; 2916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s4 f4(void) {} 3016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 3193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f5( 325e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: struct.s5* noalias sret 3393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f5() 3416a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s5 { struct { } f0; int f1; }; 3516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s5 f5(void) {} 3616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 3793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f6( 385e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: struct.s6* noalias sret 3993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f6() 4016a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s6 { int f0[1]; }; 4116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s6 f6(void) {} 4216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 4393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f7() 4493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc void @f7() 4516a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s7 { struct { int : 0; } f0; }; 4616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s7 f7(void) {} 4716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 4893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f8( 495e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: struct.s8* noalias sret 5093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc void @f8() 5116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s8 { struct { int : 0; } f0[1]; }; 5216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s8 f8(void) {} 5316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 5493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f9() 5593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f9() 5616a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s9 { int f0; int : 0; }; 5716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s9 f9(void) {} 5816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 5993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f10() 6093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f10() 6116a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s10 { int f0; int : 0; int : 0; }; 6216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s10 f10(void) {} 6316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 6493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f11( 655e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: struct.s11* noalias sret 6693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f11() 6716a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s11 { int : 0; int f0; }; 6816a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarstruct s11 f11(void) {} 6916a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbar 7093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f12() 7193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f12() 7216a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarunion u12 { char f0; short f1; int f2; }; 7316a0808b7992db2c2ba78b387e1732bbb0fb371bDaniel Dunbarunion u12 f12(void) {} 74b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar 7593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f13( 765e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: struct.s13* noalias sret 77b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar 78b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar// FIXME: This should return a float. 7975d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// AAPCS-FIXME: darm_aapcscc efine float @f13() 80b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarstruct s13 { float f0; }; 81b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarstruct s13 f13(void) {} 82b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbar 8393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f14( 845e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: union.u14* noalias sret 8593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f14() 86b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarunion u14 { float f0; }; 87b0d58196808aba4b3d1a7488bd5566f3c0a83e89Daniel Dunbarunion u14 f14(void) {} 88420255710694e958fa04bed1d80d96508949879eDaniel Dunbar 8993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f15() 9093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc void @f15() 91420255710694e958fa04bed1d80d96508949879eDaniel Dunbarvoid f15(struct s7 a0) {} 92420255710694e958fa04bed1d80d96508949879eDaniel Dunbar 9393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f16() 9493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc void @f16() 95420255710694e958fa04bed1d80d96508949879eDaniel Dunbarvoid f16(struct s8 a0) {} 96679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar 9793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f17() 9893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f17() 99679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s17 { short f0 : 13; char f1 : 4; }; 100679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s17 f17(void) {} 101679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar 10293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f18() 10393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f18() 104679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s18 { short f0; char f1 : 4; }; 105679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s18 f18(void) {} 106679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar 10793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f19( 1085e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: struct.s19* noalias sret 10993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f19() 110679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s19 { int f0; struct s8 f1; }; 111679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s19 f19(void) {} 112679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar 11393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define void @f20( 1145e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: struct.s20* noalias sret 11593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f20() 116679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s20 { struct s8 f1; int f0; }; 117679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s20 f20(void) {} 118679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbar 11993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i8 @f21() 12093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f21() 121679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s21 { struct {} f1; int f0 : 4; }; 122679855a6e14fbc6c6838c566aa74c32f52f4f946Daniel Dunbarstruct s21 f21(void) {} 1234cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar 12493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i16 @f22() 12593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f23() 12693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i64 @f24() 12793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i128 @f25() 12893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i64 @f26() 12993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i128 @f27() 13093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i16 @f22() 13193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f23() 1325e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// AAPCS: define arm_aapcscc void @f24({{.*}} noalias sret 1335e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// AAPCS: define arm_aapcscc void @f25({{.*}} noalias sret 1345e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// AAPCS: define arm_aapcscc void @f26({{.*}} noalias sret 1355e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// AAPCS: define arm_aapcscc void @f27({{.*}} noalias sret 1364cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex char f22(void) {} 1374cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex short f23(void) {} 1384cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex int f24(void) {} 1394cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex long long f25(void) {} 1404cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex float f26(void) {} 1414cc753f4503931763cfb762a95928b44fcbe64e9Daniel Dunbar_Complex double f27(void) {} 1424581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar 14393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i16 @f28() 14493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i16 @f28() 1454581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s28 { _Complex char f0; }; 1464581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s28 f28() {} 1474581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar 14893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// APCS-GNU-LABEL: define i32 @f29() 14993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// AAPCS-LABEL: define arm_aapcscc i32 @f29() 1504581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s29 { _Complex short f0; }; 1514581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s29 f29() {} 1524581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbar 1535e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// APCS-GNU: define void @f30({{.*}} noalias sret 1545e31474b9c8348e8d0404264ae6a8775e34df6acBill Wendling// AAPCS: define arm_aapcscc void @f30({{.*}} noalias sret 1554581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s30 { _Complex int f0; }; 1564581581881d3f7349bf5a4b39d761bce688f9164Daniel Dunbarstruct s30 f30() {} 157a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov 158a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// PR11905 159a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanovstruct s31 { char x; }; 160a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanovvoid f31(struct s31 s) { } 161a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// AAPCS: @f31([1 x i32] %s.coerce) 162a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// AAPCS: %s = alloca %struct.s31, align 4 1631067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// AAPCS: alloca [1 x i32] 1641067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// AAPCS: store [1 x i32] %s.coerce, [1 x i32]* 165a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// APCS-GNU: @f31([1 x i32] %s.coerce) 166a6ce20ea10b1788ed1f266d5809a7ac2bca7bf1bEvgeniy Stepanov// APCS-GNU: %s = alloca %struct.s31, align 4 1671067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// APCS-GNU: alloca [1 x i32] 1681067d05041db25301cd923712870bcf97db6d8bcEvgeniy Stepanov// APCS-GNU: store [1 x i32] %s.coerce, [1 x i32]* 16979f30981fcd25c6ff88807372a2744af02a7690eEli Friedman 17079f30981fcd25c6ff88807372a2744af02a7690eEli Friedman// PR13562 17179f30981fcd25c6ff88807372a2744af02a7690eEli Friedmanstruct s32 { double x; }; 17279f30981fcd25c6ff88807372a2744af02a7690eEli Friedmanvoid f32(struct s32 s) { } 17379f30981fcd25c6ff88807372a2744af02a7690eEli Friedman// AAPCS: @f32([1 x i64] %s.coerce) 17479f30981fcd25c6ff88807372a2744af02a7690eEli Friedman// APCS-GNU: @f32([2 x i32] %s.coerce) 17516ba7c8498933781cff103058612e76e8045c798Manman Ren 17616ba7c8498933781cff103058612e76e8045c798Manman Ren// PR13350 17716ba7c8498933781cff103058612e76e8045c798Manman Renstruct s33 { char buf[32*32]; }; 17816ba7c8498933781cff103058612e76e8045c798Manman Renvoid f33(struct s33 s) { } 1793ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// APCS-GNU-LABEL: define void @f33(%struct.s33* byval align 4 %s) 1803ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// AAPCS-LABEL: define arm_aapcscc void @f33(%struct.s33* byval align 4 %s) 181f82232c8b73851337b83b954ba1292cf6475c7c5Chandler Carruth 182f82232c8b73851337b83b954ba1292cf6475c7c5Chandler Carruth// PR14048 183f82232c8b73851337b83b954ba1292cf6475c7c5Chandler Carruthstruct s34 { char c; }; 184f82232c8b73851337b83b954ba1292cf6475c7c5Chandler Carruthvoid f34(struct s34 s); 185f82232c8b73851337b83b954ba1292cf6475c7c5Chandler Carruthvoid g34(struct s34 *s) { f34(*s); } 186f82232c8b73851337b83b954ba1292cf6475c7c5Chandler Carruth// AAPCS: @g34(%struct.s34* %s) 187176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// AAPCS: %[[a:.*]] = alloca [1 x i32] 1883ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// AAPCS: load [1 x i32], [1 x i32]* %[[a]] 189885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren 190885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// rdar://12596507 191885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Renstruct s35 192885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren{ 193885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren float v[18]; //make sure byval is on. 194885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren} __attribute__((aligned(16))); 195885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Rentypedef struct s35 s35_with_align; 196885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren 197885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Rentypedef __attribute__((neon_vector_type(4))) float float32x4_t; 198885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Renstatic __attribute__((__always_inline__, __nodebug__)) float32x4_t vaddq_f32( 199885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren float32x4_t __a, float32x4_t __b) { 200885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren return __a + __b; 201885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren} 202885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Renfloat32x4_t f35(int i, s35_with_align s1, s35_with_align s2) { 203885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren float32x4_t v = vaddq_f32(*(float32x4_t *)&s1, 204885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren *(float32x4_t *)&s2); 205885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren return v; 206885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren} 2073ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// APCS-GNU-LABEL: define <4 x float> @f35(i32 %i, %struct.s35* byval align 4, %struct.s35* byval align 4) 208885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// APCS-GNU: %[[a:.*]] = alloca %struct.s35, align 16 209885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// APCS-GNU: %[[b:.*]] = bitcast %struct.s35* %[[a]] to i8* 210885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// APCS-GNU: %[[c:.*]] = bitcast %struct.s35* %0 to i8* 211885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// APCS-GNU: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %[[b]], i8* %[[c]] 212885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// APCS-GNU: %[[d:.*]] = bitcast %struct.s35* %[[a]] to <4 x float>* 2133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// APCS-GNU: load <4 x float>, <4 x float>* %[[d]], align 16 2143ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// AAPCS-LABEL: define arm_aapcscc <4 x float> @f35(i32 %i, %struct.s35* byval align 8, %struct.s35* byval align 8) 215885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// AAPCS: %[[a:.*]] = alloca %struct.s35, align 16 216885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// AAPCS: %[[b:.*]] = bitcast %struct.s35* %[[a]] to i8* 217885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// AAPCS: %[[c:.*]] = bitcast %struct.s35* %0 to i8* 218885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// AAPCS: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %[[b]], i8* %[[c]] 219885ad6928f8aca8e9f66eeece53e00364e14ea75Manman Ren// AAPCS: %[[d:.*]] = bitcast %struct.s35* %[[a]] to <4 x float>* 2203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// AAPCS: load <4 x float>, <4 x float>* %[[d]], align 16 221