aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/InstrSelectionSupport.h2
-rw-r--r--lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp6
-rw-r--r--lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp6
-rw-r--r--lib/Target/SparcV9/SparcV9InstrSelection.cpp27
4 files changed, 16 insertions, 25 deletions
diff --git a/include/llvm/CodeGen/InstrSelectionSupport.h b/include/llvm/CodeGen/InstrSelectionSupport.h
index 90b3af713d..2cce1dc754 100644
--- a/include/llvm/CodeGen/InstrSelectionSupport.h
+++ b/include/llvm/CodeGen/InstrSelectionSupport.h
@@ -54,7 +54,7 @@ int64_t GetConstantValueAsSignedInt (const Value *V,
//---------------------------------------------------------------------------
Value* FoldGetElemChain (const InstructionNode* getElemInstrNode,
- vector<Constant*>& chainIdxVec);
+ vector<Value*>& chainIdxVec);
//------------------------------------------------------------------------
diff --git a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
index 468bd8f5b6..30d9c7eb78 100644
--- a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
+++ b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
@@ -111,14 +111,14 @@ GetConstantValueAsSignedInt(const Value *V,
Value*
FoldGetElemChain(const InstructionNode* getElemInstrNode,
- vector<Constant*>& chainIdxVec)
+ vector<Value*>& chainIdxVec)
{
MemAccessInst* getElemInst = (MemAccessInst*)
getElemInstrNode->getInstruction();
// Initialize return values from the incoming instruction
Value* ptrVal = getElemInst->getPointerOperand();
- chainIdxVec = getElemInst->getIndicesBROKEN(); // copies index vector values
+ chainIdxVec = getElemInst->copyIndices();
// Now chase the chain of getElementInstr instructions, if any
InstrTreeNode* ptrChild = getElemInstrNode->leftChild();
@@ -128,7 +128,7 @@ FoldGetElemChain(const InstructionNode* getElemInstrNode,
// Child is a GetElemPtr instruction
getElemInst = (MemAccessInst*)
((InstructionNode*) ptrChild)->getInstruction();
- const vector<Constant*>& idxVec = getElemInst->getIndicesBROKEN();
+ const vector<Value*>& idxVec = getElemInst->copyIndices();
// Get the pointer value out of ptrChild and *prepend* its index vector
ptrVal = getElemInst->getPointerOperand();
diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
index 468bd8f5b6..30d9c7eb78 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
@@ -111,14 +111,14 @@ GetConstantValueAsSignedInt(const Value *V,
Value*
FoldGetElemChain(const InstructionNode* getElemInstrNode,
- vector<Constant*>& chainIdxVec)
+ vector<Value*>& chainIdxVec)
{
MemAccessInst* getElemInst = (MemAccessInst*)
getElemInstrNode->getInstruction();
// Initialize return values from the incoming instruction
Value* ptrVal = getElemInst->getPointerOperand();
- chainIdxVec = getElemInst->getIndicesBROKEN(); // copies index vector values
+ chainIdxVec = getElemInst->copyIndices();
// Now chase the chain of getElementInstr instructions, if any
InstrTreeNode* ptrChild = getElemInstrNode->leftChild();
@@ -128,7 +128,7 @@ FoldGetElemChain(const InstructionNode* getElemInstrNode,
// Child is a GetElemPtr instruction
getElemInst = (MemAccessInst*)
((InstructionNode*) ptrChild)->getInstruction();
- const vector<Constant*>& idxVec = getElemInst->getIndicesBROKEN();
+ const vector<Value*>& idxVec = getElemInst->copyIndices();
// Get the pointer value out of ptrChild and *prepend* its index vector
ptrVal = getElemInst->getPointerOperand();
diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
index 21212199a8..c4fe735672 100644
--- a/lib/Target/SparcV9/SparcV9InstrSelection.cpp
+++ b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
@@ -34,7 +34,7 @@ static void SetMemOperands_Internal (MachineInstr* minstr,
const InstructionNode* vmInstrNode,
Value* ptrVal,
Value* arrayOffsetVal,
- const vector<Constant*>& idxVec,
+ const vector<Value*>& idxVec,
const TargetMachine& target);
@@ -742,9 +742,7 @@ SetOperandsForMemInstr(MachineInstr* minstr,
// The major work here is to extract these for all 3 instruction types
// and then call the common function SetMemOperands_Internal().
//
- const vector<Constant*> OLDIDXVEC = memInst->getIndicesBROKEN();
- const vector<Constant*>* idxVec = &OLDIDXVEC; //FIXME
- vector<Constant*>* newIdxVec = NULL;
+ vector<Value*> idxVec;
Value* ptrVal;
Value* arrayOffsetVal = NULL;
@@ -765,12 +763,8 @@ SetOperandsForMemInstr(MachineInstr* minstr,
// instruction into one single index vector.
// Finally, we never fold for an array instruction so make that NULL.
- newIdxVec = new vector<Constant*>;
- ptrVal = FoldGetElemChain((InstructionNode*) ptrChild, *newIdxVec);
-
- newIdxVec->insert(newIdxVec->end(), idxVec->begin(), idxVec->end());
- idxVec = newIdxVec;
-
+ ptrVal = FoldGetElemChain((InstructionNode*) ptrChild, idxVec);
+ idxVec.insert(idxVec.end(), memInst->idx_begin(), memInst->idx_end());
assert(!((PointerType*)ptrVal->getType())->getElementType()->isArrayType()
&& "GetElemPtr cannot be folded into array refs in selection");
}
@@ -778,7 +772,8 @@ SetOperandsForMemInstr(MachineInstr* minstr,
{
// There is no GetElemPtr instruction.
// Use the pointer value and the index vector from the Mem instruction.
- // If it is an array reference, get the array offset value.
+ // If it is an array reference, check that it has been lowered to
+ // at most a single offset, then get the array offset value.
//
ptrVal = memInst->getPointerOperand();
@@ -788,16 +783,12 @@ SetOperandsForMemInstr(MachineInstr* minstr,
assert((memInst->getNumOperands()
== (unsigned) 1 + memInst->getFirstIndexOperandNumber())
&& "Array refs must be lowered before Instruction Selection");
-
- arrayOffsetVal = memInst->getOperand(memInst->getFirstIndexOperandNumber());
+ arrayOffsetVal = * memInst->idx_begin();
}
}
SetMemOperands_Internal(minstr, vmInstrNode, ptrVal, arrayOffsetVal,
- *idxVec, target);
-
- if (newIdxVec != NULL)
- delete newIdxVec;
+ idxVec, target);
}
@@ -806,7 +797,7 @@ SetMemOperands_Internal(MachineInstr* minstr,
const InstructionNode* vmInstrNode,
Value* ptrVal,
Value* arrayOffsetVal,
- const vector<Constant*>& idxVec,
+ const vector<Value*>& idxVec,
const TargetMachine& target)
{
MemAccessInst* memInst = (MemAccessInst*) vmInstrNode->getInstruction();