aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2002-08-04 20:51:05 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2002-08-04 20:51:05 +0000
commit99d4a38c77cf26706d5deedf170748a6fc4e97d8 (patch)
treeab70b5b399e9727c65f47ea42ffebb9282c28138
parent1b51b1b4f9c191c070554df5d1f86b5aeefd0453 (diff)
Bug fix in SetOperandsForMemInstr: handle leading zeros correctly
when folding or not folding GEPs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3245 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/SparcV9/SparcV9InstrSelection.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
index b9dcd6deb1..1b27d32583 100644
--- a/lib/Target/SparcV9/SparcV9InstrSelection.cpp
+++ b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
@@ -995,18 +995,22 @@ SetOperandsForMemInstr(vector<MachineInstr*>& mvec,
// If we have only constant indices, fold chains of constant indices
// in this and any preceding GetElemPtr instructions.
+ bool foldedGEPs = false;
if (allConstantIndices &&
(ptrChild->getOpLabel() == Instruction::GetElementPtr ||
ptrChild->getOpLabel() == GetElemPtrIdx))
- if (Value* newPtr = FoldGetElemChain((InstructionNode*) ptrChild, idxVec))
+ if (Value* newPtr = FoldGetElemChain((InstructionNode*) ptrChild, idxVec)) {
ptrVal = newPtr;
+ foldedGEPs = true;
+ }
// Append the index vector of the current instruction, if any.
- // Discard any leading [0] index.
- if (memInst->getNumIndices() > 0)
+ // Skip the leading [0] index if preceding GEPs were folded into this.
+ if (memInst->getNumIndices() > 0) {
+ assert((!foldedGEPs || IsZero(*memInst->idx_begin())) && "1st index not 0");
idxVec.insert(idxVec.end(),
- memInst->idx_begin() + IsZero(*memInst->idx_begin()),
- memInst->idx_end());
+ memInst->idx_begin() + foldedGEPs, memInst->idx_end());
+ }
// Now create the appropriate operands for the machine instruction
SetMemOperands_Internal(mvec, mvecI, vmInstrNode,