aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-07-19 00:58:47 +0000
committerChris Lattner <sabre@nondot.org>2004-07-19 00:58:47 +0000
commit52eb13c58e63e277e83f94f3015dfc0e39a211ee (patch)
treea23d0aaf7d821909778e6b29ec73295b894dea70
parent9344063f5ffa46466e51af30cffdb72730b2db32 (diff)
inline classof implementations, eliminate use of virtual methods.
classof<ConstantXXX> is now MUCH faster than it used to be. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14986 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Constants.h74
1 files changed, 33 insertions, 41 deletions
diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h
index 0fc8989808..c03072a18a 100644
--- a/include/llvm/Constants.h
+++ b/include/llvm/Constants.h
@@ -16,6 +16,7 @@
#define LLVM_CONSTANTS_H
#include "llvm/Constant.h"
+#include "llvm/Type.h"
#include "Support/DataTypes.h"
namespace llvm {
@@ -77,9 +78,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantIntegral *) { return true; }
- static bool classof(const Constant *CPV); // defined in Constants.cpp
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ V->getType()->isIntegral();
}
};
@@ -113,11 +114,8 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantBool *) { return true; }
- static bool classof(const Constant *CPV) {
- return (CPV == True) | (CPV == False);
- }
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return (V == True) | (V == False);
}
};
@@ -155,9 +153,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantInt *) { return true; }
- static bool classof(const Constant *CPV); // defined in Constants.cpp
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ V->getType()->isInteger();
}
};
@@ -209,9 +207,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
///
static inline bool classof(const ConstantSInt *) { return true; }
- static bool classof(const Constant *CPV); // defined in Constants.cpp
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ V->getType()->isSigned();
}
};
@@ -245,9 +243,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantUInt *) { return true; }
- static bool classof(const Constant *CPV); // defined in Constants.cpp
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ V->getType()->isUnsigned();
}
};
@@ -302,9 +300,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantFP *) { return true; }
- static bool classof(const Constant *CPV); // defined in Constants.cpp
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ V->getType()->isFloatingPoint();
}
};
@@ -315,7 +313,8 @@ class ConstantAggregateZero : public Constant {
friend struct ConstantCreator<ConstantAggregateZero, Type, char>;
ConstantAggregateZero(const ConstantAggregateZero &); // DO NOT IMPLEMENT
protected:
- ConstantAggregateZero(const Type *Ty) : Constant(Ty) {}
+ ConstantAggregateZero(const Type *Ty)
+ : Constant(Ty, ConstantAggregateZeroVal) {}
public:
/// get() - static factory method for creating a null aggregate. It is
/// illegal to call this method with a non-aggregate type.
@@ -331,10 +330,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
///
- static inline bool classof(const ConstantAggregateZero *) { return true; }
- static bool classof(const Constant *CPV);
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const ConstantAggregateZero *) { return true; }
+ static bool classof(const Value *V) {
+ return V->getValueType() == ConstantAggregateZeroVal;
}
};
@@ -384,9 +382,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantArray *) { return true; }
- static bool classof(const Constant *CPV); // defined in Constants.cpp
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ V->getType()->getTypeID() == Type::ArrayTyID;
}
};
@@ -429,9 +427,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantStruct *) { return true; }
- static bool classof(const Constant *CPV); // defined in Constants.cpp
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ V->getType()->getTypeID() == Type::StructTyID;
}
};
@@ -458,9 +456,9 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantPointerNull *) { return true; }
- static bool classof(const Constant *CPV);
- static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ static bool classof(const Value *V) {
+ return V->getValueType() == SimpleConstantVal &&
+ isa<PointerType>(V->getType());
}
};
@@ -565,9 +563,6 @@ public:
/// getOpcodeName - Return a string representation for an opcode.
const char *getOpcodeName() const;
- /// isConstantExpr - Return true if this is a ConstantExpr
- virtual bool isConstantExpr() const { return true; }
-
virtual void destroyConstant();
virtual void replaceUsesOfWithOnConstant(Value *From, Value *To,
bool DisableChecking = false);
@@ -583,11 +578,8 @@ public:
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ConstantExpr *) { return true; }
- static inline bool classof(const Constant *CPV) {
- return CPV->isConstantExpr();
- }
static inline bool classof(const Value *V) {
- return isa<Constant>(V) && classof(cast<Constant>(V));
+ return V->getValueType() == ConstantExprVal;
}
};