Eliminated the MemAccessInst class, folding contents into GEP class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3488 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/Support/InstVisitor.h b/include/llvm/Support/InstVisitor.h
index c48f155..a41a514 100644
--- a/include/llvm/Support/InstVisitor.h
+++ b/include/llvm/Support/InstVisitor.h
@@ -54,7 +54,7 @@
// Forward declare the intermediate types...
class TerminatorInst; class BinaryOperator;
-class AllocationInst; class MemAccessInst;
+class AllocationInst;
#define DELEGATE(CLASS_TO_VISIT) \
@@ -166,7 +166,7 @@
RetTy visitFreeInst(FreeInst &I) { DELEGATE(Instruction); }
RetTy visitLoadInst(LoadInst &I) { DELEGATE(Instruction); }
RetTy visitStoreInst(StoreInst &I) { DELEGATE(Instruction); }
- RetTy visitGetElementPtrInst(GetElementPtrInst &I){ DELEGATE(MemAccessInst); }
+ RetTy visitGetElementPtrInst(GetElementPtrInst &I){ DELEGATE(Instruction); }
RetTy visitPHINode(PHINode &I) { DELEGATE(Instruction); }
RetTy visitCastInst(CastInst &I) { DELEGATE(Instruction); }
RetTy visitCallInst(CallInst &I) { DELEGATE(Instruction); }
@@ -179,7 +179,6 @@
RetTy visitTerminatorInst(TerminatorInst &I) { DELEGATE(Instruction); }
RetTy visitBinaryOperator(BinaryOperator &I) { DELEGATE(Instruction); }
RetTy visitAllocationInst(AllocationInst &I) { DELEGATE(Instruction); }
- RetTy visitMemAccessInst (MemAccessInst &I) { DELEGATE(Instruction); }
// If the user wants a 'default' case, they can choose to override this
// function. If this function is not overloaded in the users subclass, then
diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp
index d5c488f..e561aca 100644
--- a/lib/Analysis/DataStructure/Local.cpp
+++ b/lib/Analysis/DataStructure/Local.cpp
@@ -101,7 +101,7 @@
// getSubscriptedNode - Perform the basic getelementptr functionality that
// must be factored out of gep, load and store while they are all MAI's.
//
- DSNode *getSubscriptedNode(MemAccessInst &MAI, DSNode *Ptr);
+ DSNode *getSubscriptedNode(GetElementPtrInst &GEP, DSNode *Ptr);
};
}
@@ -218,16 +218,15 @@
// getSubscriptedNode - Perform the basic getelementptr functionality that must
// be factored out of gep, load and store while they are all MAI's.
//
-DSNode *GraphBuilder::getSubscriptedNode(MemAccessInst &MAI, DSNode *Ptr) {
- for (unsigned i = MAI.getFirstIndexOperandNumber(), e = MAI.getNumOperands();
- i != e; ++i)
- if (MAI.getOperand(i)->getType() == Type::UIntTy)
+DSNode *GraphBuilder::getSubscriptedNode(GetElementPtrInst &GEP, DSNode *Ptr) {
+ for (unsigned i = 1, e = GEP.getNumOperands(); i != e; ++i)
+ if (GEP.getOperand(i)->getType() == Type::UIntTy)
Ptr = getLink(Ptr, 0);
- else if (MAI.getOperand(i)->getType() == Type::UByteTy)
- Ptr = getLink(Ptr, cast<ConstantUInt>(MAI.getOperand(i))->getValue());
+ else if (GEP.getOperand(i)->getType() == Type::UByteTy)
+ Ptr = getLink(Ptr, cast<ConstantUInt>(GEP.getOperand(i))->getValue());
- if (MAI.getFirstIndexOperandNumber() == MAI.getNumOperands())
- Ptr = getLink(Ptr, 0); // All MAI's have an implicit 0 if nothing else.
+ if (GEP.getNumOperands() == 1)
+ Ptr = getLink(Ptr, 0); // All GEP's have an implicit 0 if nothing else.
return Ptr;
}
diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
index 2c07df5..8d3c4438 100644
--- a/lib/Target/SparcV9/SparcV9InstrSelection.cpp
+++ b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
@@ -963,7 +963,8 @@
const InstructionNode* vmInstrNode,
const TargetMachine& target)
{
- MemAccessInst* memInst = (MemAccessInst*) vmInstrNode->getInstruction();
+ GetElementPtrInst* memInst =
+ cast<GetElementPtrInst>(vmInstrNode->getInstruction());
// Variables to hold the index vector and ptr value.
// The major work here is to extract these for all 3 instruction types
@@ -982,7 +983,7 @@
: vmInstrNode->leftChild());
// Check if all indices are constant for this instruction
- for (MemAccessInst::op_iterator OI=memInst->idx_begin(),OE=memInst->idx_end();
+ for (User::op_iterator OI=memInst->idx_begin(),OE=memInst->idx_end();
allConstantIndices && OI != OE; ++OI)
if (! isa<Constant>(*OI))
allConstantIndices = false;
@@ -1024,7 +1025,8 @@
bool allConstantIndices,
const TargetMachine& target)
{
- MemAccessInst* memInst = (MemAccessInst*) vmInstrNode->getInstruction();
+ GetElementPtrInst* memInst =
+ cast<GetElementPtrInst>(vmInstrNode->getInstruction());
// Initialize so we default to storing the offset in a register.
int64_t smallConstOffset = 0;
@@ -1035,7 +1037,7 @@
// Check if there is an index vector and if so, compute the
// right offset for structures and for arrays
//
- if (idxVec.size() > 0)
+ if (!idxVec.empty())
{
const PointerType* ptrType = cast<PointerType>(ptrVal->getType());
diff --git a/lib/Transforms/IPO/MutateStructTypes.cpp b/lib/Transforms/IPO/MutateStructTypes.cpp
index 2059f9f..e5bad67 100644
--- a/lib/Transforms/IPO/MutateStructTypes.cpp
+++ b/lib/Transforms/IPO/MutateStructTypes.cpp
@@ -413,15 +413,9 @@
break;
case Instruction::Load:
- assert(cast<MemAccessInst>(I).idx_begin() ==
- cast<MemAccessInst>(I).idx_end() &&
- "Indexing loads not supported!");
NewI = new LoadInst(ConvertValue(I.getOperand(0)));
break;
case Instruction::Store:
- assert(cast<MemAccessInst>(I).idx_begin() ==
- cast<MemAccessInst>(I).idx_end() &&
- "Indexing loads not supported!");
NewI = new StoreInst(ConvertValue(I.getOperand(0)),
ConvertValue(I.getOperand(1)));
break;