forked from OSchip/llvm-project
parent
7403751e16
commit
e0be82956b
|
@ -86,7 +86,18 @@ const CGFunctionInfo &CodeGenTypes::getFunctionInfo(QualType ResTy,
|
|||
|
||||
const CGFunctionInfo &CodeGenTypes::getFunctionInfo(QualType ResTy,
|
||||
const llvm::SmallVector<QualType, 16> &ArgTys) {
|
||||
return *new CGFunctionInfo(ResTy, ArgTys);
|
||||
// Lookup or create unique function info.
|
||||
llvm::FoldingSetNodeID ID;
|
||||
CGFunctionInfo::Profile(ID, ResTy, ArgTys.begin(), ArgTys.end());
|
||||
|
||||
void *InsertPos = 0;
|
||||
CGFunctionInfo *FI = FunctionInfos.FindNodeOrInsertPos(ID, InsertPos);
|
||||
if (FI)
|
||||
return *FI;
|
||||
|
||||
FI = new CGFunctionInfo(ResTy, ArgTys);
|
||||
FunctionInfos.InsertNode(FI, InsertPos);
|
||||
return *FI;
|
||||
}
|
||||
|
||||
/***/
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#ifndef CLANG_CODEGEN_CGCALL_H
|
||||
#define CLANG_CODEGEN_CGCALL_H
|
||||
|
||||
#include <llvm/ADT/FoldingSet.h>
|
||||
#include "clang/AST/Type.h"
|
||||
|
||||
#include "CGValue.h"
|
||||
|
@ -49,7 +50,7 @@ namespace CodeGen {
|
|||
|
||||
/// CGFunctionInfo - Class to encapsulate the information about a
|
||||
/// function definition.
|
||||
class CGFunctionInfo {
|
||||
class CGFunctionInfo : public llvm::FoldingSetNode {
|
||||
llvm::SmallVector<QualType, 16> ArgTypes;
|
||||
|
||||
public:
|
||||
|
@ -62,6 +63,19 @@ namespace CodeGen {
|
|||
arg_iterator arg_end() const;
|
||||
|
||||
QualType getReturnType() const { return ArgTypes[0]; }
|
||||
|
||||
void Profile(llvm::FoldingSetNodeID &ID) {
|
||||
Profile(ID, getReturnType(), arg_begin(), arg_end());
|
||||
}
|
||||
template<class Iterator>
|
||||
static void Profile(llvm::FoldingSetNodeID &ID,
|
||||
QualType ResTy,
|
||||
Iterator begin,
|
||||
Iterator end) {
|
||||
ResTy.Profile(ID);
|
||||
for (; begin != end; ++begin)
|
||||
begin->Profile(ID);
|
||||
}
|
||||
};
|
||||
} // end namespace CodeGen
|
||||
} // end namespace clang
|
||||
|
|
|
@ -100,6 +100,9 @@ class CodeGenTypes {
|
|||
/// field no. This info is populated by record organizer.
|
||||
llvm::DenseMap<const FieldDecl *, unsigned> FieldInfo;
|
||||
|
||||
/// FunctionInfos - Hold memoized CGFunctionInfo results.
|
||||
llvm::FoldingSet<CGFunctionInfo> FunctionInfos;
|
||||
|
||||
public:
|
||||
class BitFieldInfo {
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue