diff options
author | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2012-11-27 02:46:43 +0000 |
---|---|---|
committer | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2012-11-27 02:46:43 +0000 |
commit | c9715fc7c329c85e0b7aa0884c9209fa1fe5b819 (patch) | |
tree | e6e30eb5d0c69e4eba75ac316ddf6f3c623ebc73 /lib/CodeGen/TargetInfo.cpp | |
parent | 3fa3c44d624d2df9ef2649ca1a7efa97d81b36d8 (diff) |
This patch addresses an incompatibility relative to the 64-bit PowerPC
ELF ABI.
Complex values are to be passed in registers as though the real and
imaginary parts were passed as separate parameters. Prior to this
patch, complex values were passed as byval aggregates. It turns out
that specifying getDirect() for all complex types when classifying the
argument type results in the desired behavior.
The new Clang test case verifies that the correct LLVM IR is generated
for caller and callee for each of the underlying types for _Complex.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168673 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/TargetInfo.cpp')
-rw-r--r-- | lib/CodeGen/TargetInfo.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index 4cff08125a..1582eb6354 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -2777,6 +2777,9 @@ PPC64_SVR4_ABIInfo::isPromotableTypeForABI(QualType Ty) const { ABIArgInfo PPC64_SVR4_ABIInfo::classifyArgumentType(QualType Ty) const { + if (Ty->isAnyComplexType()) + return ABIArgInfo::getDirect(); + if (isAggregateTypeForABI(Ty)) { // Records with non trivial destructors/constructors should not be passed // by value. |