diff options
author | Oliver Stannard <oliver.stannard@arm.com> | 2014-03-12 14:02:50 +0000 |
---|---|---|
committer | Oliver Stannard <oliver.stannard@arm.com> | 2014-03-12 14:02:50 +0000 |
commit | 7c3c09e23fe4b2752dbbf957d6bebbf72e7b0319 (patch) | |
tree | ed1cd4427f1323a6b6e326834dd86179f6203c38 /clang/test/CodeGen/arm-arguments.c | |
parent | 61c76cc56fc4481425e65f69eb32eece5d7c08df (diff) | |
download | bcm5719-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.c | 8 |
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* |