mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
Fix InstCombine/2004-04-04-InstCombineReplaceAllUsesWith.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12658 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ec3f8cd551
commit
15a76c0b35
@ -151,8 +151,15 @@ namespace {
|
|||||||
//
|
//
|
||||||
Instruction *ReplaceInstUsesWith(Instruction &I, Value *V) {
|
Instruction *ReplaceInstUsesWith(Instruction &I, Value *V) {
|
||||||
AddUsersToWorkList(I); // Add all modified instrs to worklist
|
AddUsersToWorkList(I); // Add all modified instrs to worklist
|
||||||
I.replaceAllUsesWith(V);
|
if (&I != V) {
|
||||||
return &I;
|
I.replaceAllUsesWith(V);
|
||||||
|
return &I;
|
||||||
|
} else {
|
||||||
|
// If we are replacing the instruction with itself, this must be in a
|
||||||
|
// segment of unreachable code, so just clobber the instruction.
|
||||||
|
I.replaceAllUsesWith(Constant::getNullValue(I.getType()));
|
||||||
|
return &I;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// EraseInstFromFunction - When dealing with an instruction that has side
|
// EraseInstFromFunction - When dealing with an instruction that has side
|
||||||
@ -424,7 +431,12 @@ Instruction *AssociativeOpt(BinaryOperator &Root, const Functor &F) {
|
|||||||
|
|
||||||
// Make what used to be the LHS of the root be the user of the root...
|
// Make what used to be the LHS of the root be the user of the root...
|
||||||
Value *ExtraOperand = TmpLHSI->getOperand(1);
|
Value *ExtraOperand = TmpLHSI->getOperand(1);
|
||||||
Root.replaceAllUsesWith(TmpLHSI); // Users now use TmpLHSI
|
if (&Root != TmpLHSI)
|
||||||
|
Root.replaceAllUsesWith(TmpLHSI); // Users now use TmpLHSI
|
||||||
|
else {
|
||||||
|
Root.replaceAllUsesWith(Constant::getNullValue(TmpLHSI->getType()));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
TmpLHSI->setOperand(1, &Root); // TmpLHSI now uses the root
|
TmpLHSI->setOperand(1, &Root); // TmpLHSI now uses the root
|
||||||
BB->getInstList().remove(&Root); // Remove root from the BB
|
BB->getInstList().remove(&Root); // Remove root from the BB
|
||||||
BB->getInstList().insert(TmpLHSI, &Root); // Insert root before TmpLHSI
|
BB->getInstList().insert(TmpLHSI, &Root); // Insert root before TmpLHSI
|
||||||
|
Loading…
x
Reference in New Issue
Block a user