diff options
author | Reid Kleckner <rnk@google.com> | 2016-05-02 17:41:07 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2016-05-02 17:41:07 +0000 |
commit | 0404605dda562b3ba70030014c838f7209e05342 (patch) | |
tree | 6bfdf564c0bf103c5643e966004fea9527e2b406 /clang/test/CodeGen/windows-struct-abi.c | |
parent | 1f520e5c98a0fbeaa1347ea1e58a3f58721ae98c (diff) | |
download | bcm5719-llvm-0404605dda562b3ba70030014c838f7209e05342.tar.gz bcm5719-llvm-0404605dda562b3ba70030014c838f7209e05342.zip |
Expand aggregate arguments more often on 32-bit Windows
Before this change, we would pass all non-HFA record arguments on
Windows with byval. Byval often blocks optimizations and results in bad
code generation. Windows now uses the existing workaround that other
x86_32 platforms use.
I also expanded the workaround to handle C++ records with constructors
on Windows. On non-Windows platforms, we have to keep generating the
same LLVM IR prototypes if we want our bitcode to be ABI compatible.
Otherwise we will encounter mismatch issues like PR21573.
Essentially fixes PR27522 in Clang instead of LLVM.
Reviewers: hans
Differential Revision: http://reviews.llvm.org/D19756
llvm-svn: 268261
Diffstat (limited to 'clang/test/CodeGen/windows-struct-abi.c')
-rw-r--r-- | clang/test/CodeGen/windows-struct-abi.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/test/CodeGen/windows-struct-abi.c b/clang/test/CodeGen/windows-struct-abi.c index 4b4a6f1b5db..1631f61db90 100644 --- a/clang/test/CodeGen/windows-struct-abi.c +++ b/clang/test/CodeGen/windows-struct-abi.c @@ -10,7 +10,7 @@ struct f1 return_f1(void) { while (1); } void receive_f1(struct f1 a0) { } -// CHECK: define void @receive_f1(%struct.f1* byval align 4 %a0) +// CHECK: define void @receive_f1(float %a0.0) struct f2 { float f; @@ -23,7 +23,7 @@ struct f2 return_f2(void) { while (1); } void receive_f2(struct f2 a0) { } -// CHECK: define void @receive_f2(%struct.f2* byval align 4 %a0) +// CHECK: define void @receive_f2(float %a0.0, float %a0.1) struct f4 { float f; @@ -38,5 +38,5 @@ struct f4 return_f4(void) { while (1); } void receive_f4(struct f4 a0) { } -// CHECK: define void @receive_f4(%struct.f4* byval align 4 %a0) +// CHECK: define void @receive_f4(float %a0.0, float %a0.1, float %a0.2, float %a0.3) |