mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-12 22:26:14 +00:00
Be more careful when inserting reused instructions. This fixes CodeGen/Generic/2007-04-17-lsr-crash.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36231 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a00a5b95e7
commit
b1b2f0bc44
@ -71,15 +71,20 @@ Value *SCEVExpander::InsertCastOfTo(Instruction::CastOps opcode, Value *V,
|
|||||||
/// InsertBinop - Insert the specified binary operator, doing a small amount
|
/// InsertBinop - Insert the specified binary operator, doing a small amount
|
||||||
/// of work to avoid inserting an obviously redundant operation.
|
/// of work to avoid inserting an obviously redundant operation.
|
||||||
Value *SCEVExpander::InsertBinop(Instruction::BinaryOps Opcode, Value *LHS,
|
Value *SCEVExpander::InsertBinop(Instruction::BinaryOps Opcode, Value *LHS,
|
||||||
Value *RHS, Instruction *InsertPt) {
|
Value *RHS, Instruction *&InsertPt) {
|
||||||
// Do a quick scan to see if we have this binop nearby. If so, reuse it.
|
// Do a quick scan to see if we have this binop nearby. If so, reuse it.
|
||||||
unsigned ScanLimit = 6;
|
unsigned ScanLimit = 6;
|
||||||
for (BasicBlock::iterator IP = InsertPt, E = InsertPt->getParent()->begin();
|
for (BasicBlock::iterator IP = InsertPt, E = InsertPt->getParent()->begin();
|
||||||
ScanLimit; --IP, --ScanLimit) {
|
ScanLimit; --IP, --ScanLimit) {
|
||||||
if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(IP))
|
if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(IP))
|
||||||
if (BinOp->getOpcode() == Opcode && BinOp->getOperand(0) == LHS &&
|
if (BinOp->getOpcode() == Opcode && BinOp->getOperand(0) == LHS &&
|
||||||
BinOp->getOperand(1) == RHS)
|
BinOp->getOperand(1) == RHS) {
|
||||||
|
// If we found the instruction *at* the insert point, insert later
|
||||||
|
// instructions after it.
|
||||||
|
if (BinOp == InsertPt)
|
||||||
|
InsertPt = ++IP;
|
||||||
return BinOp;
|
return BinOp;
|
||||||
|
}
|
||||||
if (IP == E) break;
|
if (IP == E) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user