diff --git a/include/llvm/Support/InstVisitor.h b/include/llvm/Support/InstVisitor.h index c48f155d997..a41a5148ade 100644 --- a/include/llvm/Support/InstVisitor.h +++ b/include/llvm/Support/InstVisitor.h @@ -54,7 +54,7 @@ class Module; // Forward declare the intermediate types... class TerminatorInst; class BinaryOperator; -class AllocationInst; class MemAccessInst; +class AllocationInst; #define DELEGATE(CLASS_TO_VISIT) \ @@ -166,7 +166,7 @@ struct InstVisitor { 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 @@ struct InstVisitor { 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 d5c488f05c3..e561aca2105 100644 --- a/lib/Analysis/DataStructure/Local.cpp +++ b/lib/Analysis/DataStructure/Local.cpp @@ -101,7 +101,7 @@ namespace { // 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 @@ DSNode *GraphBuilder::getLink(DSNode *Node, unsigned Link) { // 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(MAI.getOperand(i))->getValue()); + else if (GEP.getOperand(i)->getType() == Type::UByteTy) + Ptr = getLink(Ptr, cast(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/Sparc/SparcInstrSelection.cpp b/lib/Target/Sparc/SparcInstrSelection.cpp index 2c07df5eabe..8d3c443877a 100644 --- a/lib/Target/Sparc/SparcInstrSelection.cpp +++ b/lib/Target/Sparc/SparcInstrSelection.cpp @@ -963,7 +963,8 @@ SetOperandsForMemInstr(vector& mvec, const InstructionNode* vmInstrNode, const TargetMachine& target) { - MemAccessInst* memInst = (MemAccessInst*) vmInstrNode->getInstruction(); + GetElementPtrInst* memInst = + cast(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 @@ SetOperandsForMemInstr(vector& mvec, : 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(*OI)) allConstantIndices = false; @@ -1024,7 +1025,8 @@ SetMemOperands_Internal(vector& mvec, bool allConstantIndices, const TargetMachine& target) { - MemAccessInst* memInst = (MemAccessInst*) vmInstrNode->getInstruction(); + GetElementPtrInst* memInst = + cast(vmInstrNode->getInstruction()); // Initialize so we default to storing the offset in a register. int64_t smallConstOffset = 0; @@ -1035,7 +1037,7 @@ SetMemOperands_Internal(vector& mvec, // 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(ptrVal->getType()); diff --git a/lib/Transforms/IPO/MutateStructTypes.cpp b/lib/Transforms/IPO/MutateStructTypes.cpp index 2059f9f2a90..e5bad67f5ea 100644 --- a/lib/Transforms/IPO/MutateStructTypes.cpp +++ b/lib/Transforms/IPO/MutateStructTypes.cpp @@ -413,15 +413,9 @@ void MutateStructTypes::transformFunction(Function *m) { break; case Instruction::Load: - assert(cast(I).idx_begin() == - cast(I).idx_end() && - "Indexing loads not supported!"); NewI = new LoadInst(ConvertValue(I.getOperand(0))); break; case Instruction::Store: - assert(cast(I).idx_begin() == - cast(I).idx_end() && - "Indexing loads not supported!"); NewI = new StoreInst(ConvertValue(I.getOperand(0)), ConvertValue(I.getOperand(1))); break;