diff options
author | Oliver Stannard <oliver.stannard@arm.com> | 2014-06-27 13:59:27 +0000 |
---|---|---|
committer | Oliver Stannard <oliver.stannard@arm.com> | 2014-06-27 13:59:27 +0000 |
commit | dc111a9e363412c7b1a3387333cb81049678c738 (patch) | |
tree | eeb3fa54607fae7cc0d3bcadbfca47f1c9574fca /tools | |
parent | 69f87edbebe7dc9b450482a4af0a3d6b55ef5c23 (diff) | |
download | clang-dc111a9e363412c7b1a3387333cb81049678c738.tar.gz clang-dc111a9e363412c7b1a3387333cb81049678c738.tar.bz2 clang-dc111a9e363412c7b1a3387333cb81049678c738.tar.xz |
[ARM] Fix AAPCS non-compliance caused by very large structs
This is a fix to the code in clang which inserts padding arguments to
ensure that the ARM backend can emit AAPCS-VFP compliant code. This code
needs to track the number of registers which have been allocated in order
to do this. When passing a very large struct (>64 bytes) by value, clang
emits IR which takes a pointer to the struct, but the backend converts this
back to passing the struct in registers and on the stack. The bug was that
this was being considered by clang to only use one register, meaning that
there were situations in which padding arguments were incorrectly emitted
by clang.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211898 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions