mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 16:09:57 +00:00
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
This commit is contained in:
parent
1b51b1b4f9
commit
99d4a38c77
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user