diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-10-31 17:10:41 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-10-31 17:10:41 +0000 |
commit | e9f6a717dd9003b597defee48567431a7db7f9f4 (patch) | |
tree | 86216c56bf04dbd677475b810e77250b26a7297d /clang/lib/CodeGen/ABIInfo.h | |
parent | 47e7646ebbf1591120bb530fdc85504a1e47fafa (diff) | |
download | bcm5719-llvm-e9f6a717dd9003b597defee48567431a7db7f9f4.tar.gz bcm5719-llvm-e9f6a717dd9003b597defee48567431a7db7f9f4.zip |
Fix ARM HVA classification of classes with non-virtual bases
Reuse the PPC64 HVA detection algorithm for ARM and AArch64. This is a
nice code deduplication, since they are roughly identical. A few virtual
method extension points are needed to understand how big an HVA can be
and what element types it can have for a given architecture.
Also make the record expansion code work in the presence of non-virtual
bases.
Reviewed By: uweigand, asl
Differential Revision: http://reviews.llvm.org/D6045
llvm-svn: 220972
Diffstat (limited to 'clang/lib/CodeGen/ABIInfo.h')
-rw-r--r-- | clang/lib/CodeGen/ABIInfo.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/ABIInfo.h b/clang/lib/CodeGen/ABIInfo.h index 9ca576630be..2976b605d39 100644 --- a/clang/lib/CodeGen/ABIInfo.h +++ b/clang/lib/CodeGen/ABIInfo.h @@ -73,6 +73,15 @@ namespace clang { // abstract this out. virtual llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty, CodeGen::CodeGenFunction &CGF) const = 0; + + virtual bool isHomogeneousAggregateBaseType(QualType Ty) const; + + virtual bool isHomogeneousAggregateSmallEnough(const Type *Base, + uint64_t Members) const; + + bool isHomogeneousAggregate(QualType Ty, const Type *&Base, + uint64_t &Members) const; + }; } // end namespace clang |