Eliminated the MemAccessInst class, folding contents into GEP class.

llvm-svn: 3488
diff --git a/llvm/lib/Analysis/DataStructure/Local.cpp b/llvm/lib/Analysis/DataStructure/Local.cpp
index d5c488f..e561aca 100644
--- a/llvm/lib/Analysis/DataStructure/Local.cpp
+++ b/llvm/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/llvm/lib/Target/Sparc/SparcInstrSelection.cpp b/llvm/lib/Target/Sparc/SparcInstrSelection.cpp
index 2c07df5..8d3c443 100644
--- a/llvm/lib/Target/Sparc/SparcInstrSelection.cpp
+++ b/llvm/lib/Target/Sparc/SparcInstrSelection.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/llvm/lib/Transforms/IPO/MutateStructTypes.cpp b/llvm/lib/Transforms/IPO/MutateStructTypes.cpp
index 2059f9f..e5bad67 100644
--- a/llvm/lib/Transforms/IPO/MutateStructTypes.cpp
+++ b/llvm/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;