r218623 - Speedup ClangToLLVMArgMapping construction. NFC.
Alexey Samsonov
vonosmas at gmail.com
Mon Sep 29 13:30:23 PDT 2014
Author: samsonov
Date: Mon Sep 29 15:30:22 2014
New Revision: 218623
URL: http://llvm.org/viewvc/llvm-project?rev=218623&view=rev
Log:
Speedup ClangToLLVMArgMapping construction. NFC.
Add a method to calculate the number of arguments given QualType
expnads to. Use this method in ClangToLLVMArgMapping calculation.
This number may be cached in CodeGenTypes for efficiency, if needed.
Modified:
cfe/trunk/lib/CodeGen/CGCall.cpp
Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=218623&r1=218622&r2=218623&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGCall.cpp Mon Sep 29 15:30:22 2014
@@ -612,6 +612,23 @@ getTypeExpansion(QualType Ty, const ASTC
return llvm::make_unique<NoExpansion>();
}
+static int getExpansionSize(QualType Ty, const ASTContext &Context) {
+ auto Exp = getTypeExpansion(Ty, Context);
+ if (auto CAExp = dyn_cast<ConstantArrayExpansion>(Exp.get())) {
+ return CAExp->NumElts * getExpansionSize(CAExp->EltTy, Context);
+ }
+ if (auto RExp = dyn_cast<RecordExpansion>(Exp.get())) {
+ int Res = 0;
+ for (auto FD : RExp->Fields)
+ Res += getExpansionSize(FD->getType(), Context);
+ return Res;
+ }
+ if (isa<ComplexExpansion>(Exp.get()))
+ return 2;
+ assert(isa<NoExpansion>(Exp.get()));
+ return 1;
+}
+
void CodeGenTypes::GetExpandedTypes(QualType type,
SmallVectorImpl<llvm::Type*> &expandedTypes) {
auto Exp = getTypeExpansion(type, Context);
@@ -1222,12 +1239,7 @@ void ClangToLLVMArgMapping::construct(Co
IRArgs.NumberOfArgs = 0;
break;
case ABIArgInfo::Expand: {
- SmallVector<llvm::Type*, 8> Types;
- // FIXME: This is rather inefficient. Do we ever actually need to do
- // anything here? The result should be just reconstructed on the other
- // side, so extension should be a non-issue.
- CGM.getTypes().GetExpandedTypes(ArgType, Types);
- IRArgs.NumberOfArgs = Types.size();
+ IRArgs.NumberOfArgs = getExpansionSize(ArgType, CGM.getContext());
break;
}
}
More information about the cfe-commits
mailing list