summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/arm-arguments.c
diff options
context:
space:
mode:
authorOliver Stannard <oliver.stannard@arm.com>2014-03-12 14:02:50 +0000
committerOliver Stannard <oliver.stannard@arm.com>2014-03-12 14:02:50 +0000
commit7c3c09e23fe4b2752dbbf957d6bebbf72e7b0319 (patch)
treeed1cd4427f1323a6b6e326834dd86179f6203c38 /clang/test/CodeGen/arm-arguments.c
parent61c76cc56fc4481425e65f69eb32eece5d7c08df (diff)
downloadbcm5719-llvm-7c3c09e23fe4b2752dbbf957d6bebbf72e7b0319.tar.gz
bcm5719-llvm-7c3c09e23fe4b2752dbbf957d6bebbf72e7b0319.zip
ARM: Correct alignment of structs passed as byval pointer
When a struct has bitfields overlapping with other members (as required by the AAPCS), clang uses a packed struct to represent this. If such a struct is large enough for clang to pass it as a byval pointer (>64 bytes), we need to set the alignment of the argument to match the original type. llvm-svn: 203660
Diffstat (limited to 'clang/test/CodeGen/arm-arguments.c')
-rw-r--r--clang/test/CodeGen/arm-arguments.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/clang/test/CodeGen/arm-arguments.c b/clang/test/CodeGen/arm-arguments.c
index b6bac9ac44a..2c5df91c58a 100644
--- a/clang/test/CodeGen/arm-arguments.c
+++ b/clang/test/CodeGen/arm-arguments.c
@@ -176,8 +176,8 @@ void f32(struct s32 s) { }
// PR13350
struct s33 { char buf[32*32]; };
void f33(struct s33 s) { }
-// APCS-GNU-LABEL: define void @f33(%struct.s33* byval %s)
-// AAPCS-LABEL: define arm_aapcscc void @f33(%struct.s33* byval %s)
+// APCS-GNU-LABEL: define void @f33(%struct.s33* byval align 1 %s)
+// AAPCS-LABEL: define arm_aapcscc void @f33(%struct.s33* byval align 1 %s)
// PR14048
struct s34 { char c; };
@@ -209,14 +209,14 @@ float32x4_t f35(int i, s35_with_align s1, s35_with_align s2) {
*(float32x4_t *)&s2);
return v;
}
-// APCS-GNU-LABEL: define <4 x float> @f35(i32 %i, %struct.s35* byval, %struct.s35* byval)
+// APCS-GNU-LABEL: define <4 x float> @f35(i32 %i, %struct.s35* byval align 16, %struct.s35* byval align 16)
// APCS-GNU: %[[a:.*]] = alloca %struct.s35, align 16
// APCS-GNU: %[[b:.*]] = bitcast %struct.s35* %[[a]] to i8*
// APCS-GNU: %[[c:.*]] = bitcast %struct.s35* %0 to i8*
// APCS-GNU: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %[[b]], i8* %[[c]]
// APCS-GNU: %[[d:.*]] = bitcast %struct.s35* %[[a]] to <4 x float>*
// APCS-GNU: load <4 x float>* %[[d]], align 16
-// AAPCS-LABEL: define arm_aapcscc <4 x float> @f35(i32 %i, %struct.s35* byval, %struct.s35* byval)
+// AAPCS-LABEL: define arm_aapcscc <4 x float> @f35(i32 %i, %struct.s35* byval align 16, %struct.s35* byval align 16)
// AAPCS: %[[a:.*]] = alloca %struct.s35, align 16
// AAPCS: %[[b:.*]] = bitcast %struct.s35* %[[a]] to i8*
// AAPCS: %[[c:.*]] = bitcast %struct.s35* %0 to i8*
OpenPOWER on IntegriCloud