Remove much cruft from the MemAccessInst instruction

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1298 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2001-11-14 11:27:58 +00:00
parent c2ae4f6d3b
commit 65ea171409
9 changed files with 41 additions and 41 deletions

View File

@ -182,16 +182,19 @@ public:
const vector<ConstPoolVal*> &Indices,
bool AllowStructLeaf = false);
const vector<ConstPoolVal*> &getIndices() const { return indexVec; }
inline bool hasIndices() const { return !indexVec.empty(); }
virtual Value *getPtrOperand() = 0;
Value *getPointerOperand() {
return getOperand(getFirstIndexOperandNumber()-1);
}
const Value *getPointerOperand() const {
return ((MemAccessInst*)this)->getPtrOperand();
return getOperand(getFirstIndexOperandNumber()-1);
}
virtual int getFirstOffsetIdx() const = 0;
virtual unsigned getFirstIndexOperandNumber() const = 0;
const vector<ConstPoolVal*> &getIndices() const { return indexVec; }
inline bool hasIndices() const {
return getNumOperands() <= getFirstIndexOperandNumber();
}
};
@ -213,8 +216,8 @@ public:
virtual Instruction *clone() const { return new LoadInst(*this); }
virtual const char *getOpcodeName() const { return "load"; }
virtual Value *getPtrOperand() { return this->getOperand(0); }
virtual int getFirstOffsetIdx() const { return (this->getNumOperands() > 1)? 1 : -1; }
virtual unsigned getFirstIndexOperandNumber() const { return 1; }
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const LoadInst *) { return true; }
@ -247,8 +250,7 @@ public:
virtual const char *getOpcodeName() const { return "store"; }
virtual bool hasSideEffects() const { return true; }
virtual Value *getPtrOperand() { return this->getOperand(1); }
virtual int getFirstOffsetIdx() const { return (this->getNumOperands() > 2)? 2 : -1;}
virtual unsigned getFirstIndexOperandNumber() const { return 2; }
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const StoreInst *) { return true; }
@ -277,8 +279,7 @@ public:
const string &Name = "");
virtual Instruction *clone() const { return new GetElementPtrInst(*this); }
virtual const char *getOpcodeName() const { return "getelementptr"; }
virtual Value *getPtrOperand() { return this->getOperand(0); }
virtual int getFirstOffsetIdx() const { return (this->getNumOperands() > 1)? 1 : -1;}
virtual unsigned getFirstIndexOperandNumber() const { return 1; }
inline bool isArraySelector() const { return !isStructSelector(); }
bool isStructSelector() const;

View File

@ -76,7 +76,7 @@ InstructionNode::InstructionNode(Instruction* I)
}
else if ((opLabel == Instruction::Load ||
opLabel == Instruction::GetElementPtr) &&
((MemAccessInst*)I)->getFirstOffsetIdx() > 0)
cast<MemAccessInst>(I)->hasIndices())
{
opLabel = opLabel + 100; // load/getElem with index vector
}

View File

@ -117,7 +117,7 @@ FoldGetElemChain(const InstructionNode* getElemInstrNode,
getElemInstrNode->getInstruction();
// Initialize return values from the incoming instruction
Value* ptrVal = getElemInst->getPtrOperand();
Value* ptrVal = getElemInst->getPointerOperand();
chainIdxVec = getElemInst->getIndices(); // copies index vector values
// Now chase the chain of getElementInstr instructions, if any
@ -131,7 +131,7 @@ FoldGetElemChain(const InstructionNode* getElemInstrNode,
const vector<ConstPoolVal*>& idxVec = getElemInst->getIndices();
// Get the pointer value out of ptrChild and *prepend* its index vector
ptrVal = getElemInst->getPtrOperand();
ptrVal = getElemInst->getPointerOperand();
chainIdxVec.insert(chainIdxVec.begin(), idxVec.begin(), idxVec.end());
ptrChild = ptrChild->leftChild();

View File

@ -76,7 +76,7 @@ InstructionNode::InstructionNode(Instruction* I)
}
else if ((opLabel == Instruction::Load ||
opLabel == Instruction::GetElementPtr) &&
((MemAccessInst*)I)->getFirstOffsetIdx() > 0)
cast<MemAccessInst>(I)->hasIndices())
{
opLabel = opLabel + 100; // load/getElem with index vector
}

View File

@ -117,7 +117,7 @@ FoldGetElemChain(const InstructionNode* getElemInstrNode,
getElemInstrNode->getInstruction();
// Initialize return values from the incoming instruction
Value* ptrVal = getElemInst->getPtrOperand();
Value* ptrVal = getElemInst->getPointerOperand();
chainIdxVec = getElemInst->getIndices(); // copies index vector values
// Now chase the chain of getElementInstr instructions, if any
@ -131,7 +131,7 @@ FoldGetElemChain(const InstructionNode* getElemInstrNode,
const vector<ConstPoolVal*>& idxVec = getElemInst->getIndices();
// Get the pointer value out of ptrChild and *prepend* its index vector
ptrVal = getElemInst->getPtrOperand();
ptrVal = getElemInst->getPointerOperand();
chainIdxVec.insert(chainIdxVec.begin(), idxVec.begin(), idxVec.end());
ptrChild = ptrChild->leftChild();

View File

@ -781,17 +781,16 @@ SetOperandsForMemInstr(MachineInstr* minstr,
// Use the pointer value and the index vector from the Mem instruction.
// If it is an array reference, get the array offset value.
//
ptrVal = memInst->getPtrOperand();
ptrVal = memInst->getPointerOperand();
const Type* opType =
((const PointerType*) ptrVal->getType())->getValueType();
const Type* opType = cast<PointerType>(ptrVal->getType())->getValueType();
if (opType->isArrayType())
{
assert((memInst->getNumOperands()
== (unsigned) 1 + memInst->getFirstOffsetIdx())
== (unsigned) 1 + memInst->getFirstIndexOperandNumber())
&& "Array refs must be lowered before Instruction Selection");
arrayOffsetVal = memInst->getOperand(memInst->getFirstOffsetIdx());
arrayOffsetVal = memInst->getOperand(memInst->getFirstIndexOperandNumber());
}
}
@ -1835,7 +1834,7 @@ GetInstructionsByRule(InstructionNode* subtreeRoot,
GetElementPtrInst* getElemInst =
cast<GetElementPtrInst>(subtreeRoot->getInstruction());
const PointerType* ptrType =
(const PointerType*) getElemInst->getPtrOperand()->getType();
cast<PointerType>(getElemInst->getPointerOperand()->getType());
if (! ptrType->getValueType()->isArrayType())
{// we don't need a separate instr
numInstr = 0; // don't forward operand!

View File

@ -131,8 +131,8 @@ bool ExpressionConvertableToType(Value *V, const Type *Ty,
if (!CPV[i]->isNullValue()) return false;
}
if (!ExpressionConvertableToType(LI->getPtrOperand(), PointerType::get(Ty),
CTMap))
if (!ExpressionConvertableToType(LI->getPointerOperand(),
PointerType::get(Ty), CTMap))
return false;
break;
}
@ -163,7 +163,7 @@ bool ExpressionConvertableToType(Value *V, const Type *Ty,
// get to the right type...
//
vector<ConstPoolVal*> Indices = GEP->getIndices();
const Type *BaseType = GEP->getPtrOperand()->getType();
const Type *BaseType = GEP->getPointerOperand()->getType();
while (Indices.size() &&
cast<ConstPoolUInt>(Indices.back())->getValue() == 0) {
@ -268,7 +268,7 @@ Value *ConvertExpressionToType(Value *V, const Type *Ty, ValueMapCache &VMC) {
Res = new LoadInst(ConstPoolVal::getNullConstant(PointerType::get(Ty)),
Name);
VMC.ExprMap[I] = Res;
Res->setOperand(0, ConvertExpressionToType(LI->getPtrOperand(),
Res->setOperand(0, ConvertExpressionToType(LI->getPointerOperand(),
PointerType::get(Ty), VMC));
assert(Res->getOperand(0)->getType() == PointerType::get(Ty));
assert(Ty == Res->getType());
@ -310,7 +310,7 @@ Value *ConvertExpressionToType(Value *V, const Type *Ty, ValueMapCache &VMC) {
// get to the right type...
//
vector<ConstPoolVal*> Indices = GEP->getIndices();
const Type *BaseType = GEP->getPtrOperand()->getType();
const Type *BaseType = GEP->getPointerOperand()->getType();
const Type *PVTy = cast<PointerType>(Ty)->getValueType();
Res = 0;
while (Indices.size() &&
@ -318,9 +318,9 @@ Value *ConvertExpressionToType(Value *V, const Type *Ty, ValueMapCache &VMC) {
Indices.pop_back();
if (GetElementPtrInst::getIndexedType(BaseType, Indices, true) == PVTy) {
if (Indices.size() == 0) {
Res = new CastInst(GEP->getPtrOperand(), BaseType); // NOOP
Res = new CastInst(GEP->getPointerOperand(), BaseType); // NOOP
} else {
Res = new GetElementPtrInst(GEP->getPtrOperand(), Indices, Name);
Res = new GetElementPtrInst(GEP->getPointerOperand(), Indices, Name);
}
break;
}
@ -549,7 +549,7 @@ static bool OperandConvertableToType(User *U, Value *V, const Type *Ty,
// get to the right type...
//
vector<ConstPoolVal*> Indices = GEP->getIndices();
const Type *BaseType = GEP->getPtrOperand()->getType();
const Type *BaseType = GEP->getPointerOperand()->getType();
while (Indices.size() &&
cast<ConstPoolUInt>(Indices.back())->getValue() == 0) {
@ -713,7 +713,7 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
// get to the right type...
//
vector<ConstPoolVal*> Indices = GEP->getIndices();
const Type *BaseType = GEP->getPtrOperand()->getType();
const Type *BaseType = GEP->getPointerOperand()->getType();
const Type *PVTy = cast<PointerType>(Ty)->getValueType();
Res = 0;
while (Indices.size() &&
@ -721,9 +721,9 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
Indices.pop_back();
if (GetElementPtrInst::getIndexedType(BaseType, Indices, true) == PVTy) {
if (Indices.size() == 0) {
Res = new CastInst(GEP->getPtrOperand(), BaseType); // NOOP
Res = new CastInst(GEP->getPointerOperand(), BaseType); // NOOP
} else {
Res = new GetElementPtrInst(GEP->getPtrOperand(), Indices, Name);
Res = new GetElementPtrInst(GEP->getPointerOperand(), Indices, Name);
}
break;
}

View File

@ -310,7 +310,7 @@ InsertLoadInst(StoreInst* storeInst,
BasicBlock *bb,
BasicBlock::iterator &BBI)
{
LoadInst* loadInst = new LoadInst(storeInst->getPtrOperand(),
LoadInst* loadInst = new LoadInst(storeInst->getPointerOperand(),
storeInst->getIndices());
BBI = bb->getInstList().insert(BBI, loadInst) + 1;
return loadInst;

View File

@ -630,7 +630,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
} else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
Value *Val = SI->getOperand(0);
Value *Pointer = SI->getPtrOperand();
Value *Pointer = SI->getPointerOperand();
// Peephole optimize the following instructions:
// %t1 = getelementptr {<...>} * %StructPtr, <element indices>
@ -648,7 +648,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
PRINT_PEEPHOLE2("gep-store:in", GEP, SI);
ReplaceInstWithInst(BB->getInstList(), BI,
SI = new StoreInst(Val, GEP->getPtrOperand(),
SI = new StoreInst(Val, GEP->getPointerOperand(),
Indices));
PRINT_PEEPHOLE1("gep-store:out", SI);
return true;
@ -685,7 +685,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
} else if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
Value *Pointer = LI->getPtrOperand();
Value *Pointer = LI->getPointerOperand();
// Peephole optimize the following instructions:
// %t1 = getelementptr {<...>} * %StructPtr, <element indices>
@ -703,7 +703,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
PRINT_PEEPHOLE2("gep-load:in", GEP, LI);
ReplaceInstWithInst(BB->getInstList(), BI,
LI = new LoadInst(GEP->getPtrOperand(),
LI = new LoadInst(GEP->getPointerOperand(),
Indices));
PRINT_PEEPHOLE1("gep-load:out", LI);
return true;