-//===----------------------------------------------------------------------===//
-// MemAccessInst Class
-//===----------------------------------------------------------------------===//
-//
-// MemAccessInst - Common base class of LoadInst, StoreInst, and
-// 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() == Load || I->getOpcode() == Store ||
- I->getOpcode() == GetElementPtr;
- }
- static inline bool classof(const Value *V) {
- return isa<Instruction>(V) && classof(cast<Instruction>(V));
- }
-};
-
-