summaryrefslogtreecommitdiff
path: root/include/llvm/iMemory.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-08-22 23:37:20 +0000
committerChris Lattner <sabre@nondot.org>2002-08-22 23:37:20 +0000
commitcc63f1c67456f41b25e8ccb8c1dce72067ddbadf (patch)
tree52db175350fef9c25f1efd36dfbb1f0ee627ce9a /include/llvm/iMemory.h
parentd145c2172fc54160c5edf199a1a96fca492e19bc (diff)
downloadllvm-cc63f1c67456f41b25e8ccb8c1dce72067ddbadf.tar.gz
llvm-cc63f1c67456f41b25e8ccb8c1dce72067ddbadf.tar.bz2
llvm-cc63f1c67456f41b25e8ccb8c1dce72067ddbadf.tar.xz
Eliminated the MemAccessInst class, folding contents into GEP class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3487 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/iMemory.h')
-rw-r--r--include/llvm/iMemory.h103
1 files changed, 36 insertions, 67 deletions
diff --git a/include/llvm/iMemory.h b/include/llvm/iMemory.h
index fd502315c4..ab1b593387 100644
--- a/include/llvm/iMemory.h
+++ b/include/llvm/iMemory.h
@@ -128,70 +128,6 @@ struct FreeInst : public Instruction {
//===----------------------------------------------------------------------===//
-// MemAccessInst Class
-//===----------------------------------------------------------------------===//
-//
-// MemAccessInst - Common base class of GetElementPtrInst...
-//
-class MemAccessInst : public Instruction {
-protected:
- inline MemAccessInst(const Type *Ty, unsigned Opcode,
- const std::string &Nam = "")
- : Instruction(Ty, Opcode, Nam) {}
-public:
- // getIndexedType - Returns the type of the element that would be loaded with
- // a load instruction with the specified parameters.
- //
- // A null type is returned if the indices are invalid for the specified
- // pointer type.
- //
- static const Type *getIndexedType(const Type *Ptr,
- const std::vector<Value*> &Indices,
- bool AllowStructLeaf = false);
-
- inline op_iterator idx_begin() {
- return op_begin()+getFirstIndexOperandNumber();
- }
- inline const_op_iterator idx_begin() const {
- return op_begin()+getFirstIndexOperandNumber();
- }
- inline op_iterator idx_end() { return op_end(); }
- inline const_op_iterator idx_end() const { return op_end(); }
-
-
- std::vector<Value*> copyIndices() const {
- return std::vector<Value*>(idx_begin(), idx_end());
- }
-
- Value *getPointerOperand() {
- return getOperand(getFirstIndexOperandNumber()-1);
- }
- const Value *getPointerOperand() const {
- return getOperand(getFirstIndexOperandNumber()-1);
- }
-
- virtual unsigned getFirstIndexOperandNumber() const = 0;
-
- inline unsigned getNumIndices() const { // Note: always non-negative
- return (getNumOperands() - getFirstIndexOperandNumber());
- }
-
- inline bool hasIndices() const {
- return getNumIndices() > 0;
- }
-
- // Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const MemAccessInst *) { return true; }
- static inline bool classof(const Instruction *I) {
- return I->getOpcode() == GetElementPtr;
- }
- static inline bool classof(const Value *V) {
- return isa<Instruction>(V) && classof(cast<Instruction>(V));
- }
-};
-
-
-//===----------------------------------------------------------------------===//
// LoadInst Class
//===----------------------------------------------------------------------===//
@@ -253,9 +189,9 @@ public:
// GetElementPtrInst Class
//===----------------------------------------------------------------------===//
-class GetElementPtrInst : public MemAccessInst {
+class GetElementPtrInst : public Instruction {
GetElementPtrInst(const GetElementPtrInst &EPI)
- : MemAccessInst((Type*)EPI.getType(), GetElementPtr) {
+ : Instruction((Type*)EPI.getType(), GetElementPtr) {
Operands.reserve(EPI.Operands.size());
for (unsigned i = 0, E = EPI.Operands.size(); i != E; ++i)
Operands.push_back(Use(EPI.Operands[i], this));
@@ -264,13 +200,46 @@ public:
GetElementPtrInst(Value *Ptr, const std::vector<Value*> &Idx,
const std::string &Name = "");
virtual Instruction *clone() const { return new GetElementPtrInst(*this); }
- virtual unsigned getFirstIndexOperandNumber() const { return 1; }
// getType - Overload to return most specific pointer type...
inline const PointerType *getType() const {
return (PointerType*)Instruction::getType();
}
+ /// getIndexedType - Returns the type of the element that would be loaded with
+ /// a load instruction with the specified parameters.
+ ///
+ /// A null type is returned if the indices are invalid for the specified
+ /// pointer type.
+ ///
+ static const Type *getIndexedType(const Type *Ptr,
+ const std::vector<Value*> &Indices,
+ bool AllowStructLeaf = false);
+
+ inline op_iterator idx_begin() {
+ return op_begin()+1;
+ }
+ inline const_op_iterator idx_begin() const {
+ return op_begin()+1;
+ }
+ inline op_iterator idx_end() { return op_end(); }
+ inline const_op_iterator idx_end() const { return op_end(); }
+
+ Value *getPointerOperand() {
+ return getOperand(0);
+ }
+ const Value *getPointerOperand() const {
+ return getOperand(0);
+ }
+
+ inline unsigned getNumIndices() const { // Note: always non-negative
+ return getNumOperands() - 1;
+ }
+
+ inline bool hasIndices() const {
+ return getNumOperands() > 1;
+ }
+
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const GetElementPtrInst *) { return true; }
static inline bool classof(const Instruction *I) {