Move ABIArgInfo into CGFunctionInfo, computed on creation.
- Still have to convert some consumers over.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63610 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGCall.h b/lib/CodeGen/CGCall.h
index 6113049..95e561d 100644
--- a/lib/CodeGen/CGCall.h
+++ b/lib/CodeGen/CGCall.h
@@ -20,9 +20,13 @@
#include "CGValue.h"
+// FIXME: Restructure so we don't have to expose so much stuff.
+#include "ABIInfo.h"
+
namespace llvm {
- class Function;
struct AttributeWithIndex;
+ class Function;
+ class Type;
class Value;
template<typename T, unsigned> class SmallVector;
@@ -51,21 +55,35 @@
/// CGFunctionInfo - Class to encapsulate the information about a
/// function definition.
class CGFunctionInfo : public llvm::FoldingSetNode {
- llvm::SmallVector<QualType, 16> ArgTypes;
+ struct ArgInfo {
+ QualType type;
+ ABIArgInfo info;
+ };
+
+ unsigned NumArgs;
+ ArgInfo *Args;
public:
- typedef llvm::SmallVector<QualType, 16>::const_iterator arg_iterator;
+ typedef const ArgInfo *const_arg_iterator;
+ typedef ArgInfo *arg_iterator;
CGFunctionInfo(QualType ResTy,
const llvm::SmallVector<QualType, 16> &ArgTys);
+ ~CGFunctionInfo() { delete[] Args; }
- arg_iterator arg_begin() const;
- arg_iterator arg_end() const;
+ const_arg_iterator arg_begin() const { return Args + 1; }
+ const_arg_iterator arg_end() const { return Args + 1 + NumArgs; }
+ arg_iterator arg_begin() { return Args + 1; }
+ arg_iterator arg_end() { return Args + 1 + NumArgs; }
- QualType getReturnType() const { return ArgTypes[0]; }
+ QualType getReturnType() const { return Args[0].type; }
+
+ ABIArgInfo &getReturnInfo() { return Args[0].info; }
+ const ABIArgInfo &getReturnInfo() const { return Args[0].info; }
void Profile(llvm::FoldingSetNodeID &ID) {
- Profile(ID, getReturnType(), arg_begin(), arg_end());
+ for (arg_iterator it = arg_begin(), ie = arg_end(); it != ie; ++it)
+ it->type.Profile(ID);
}
template<class Iterator>
static void Profile(llvm::FoldingSetNodeID &ID,