aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGCall.h
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-03 00:07:12 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-03 00:07:12 +0000
commit40a6be686e5d5bb4198f1affda574e8a4b3a7710 (patch)
tree6216f275507740618af64dfc5e441e07085dbb8a /lib/CodeGen/CGCall.h
parent281481daeb97e56bb19e394efc34bfd4ab85a226 (diff)
Memoize CGFunctionInfo construction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63576 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGCall.h')
-rw-r--r--lib/CodeGen/CGCall.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/CodeGen/CGCall.h b/lib/CodeGen/CGCall.h
index aaab36ca83..611304900f 100644
--- a/lib/CodeGen/CGCall.h
+++ b/lib/CodeGen/CGCall.h
@@ -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