mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[InstCombine] Fix for assert build failures caused by r218721
The icmp-select-icmp optimization made the implicit assumption that the select-icmp instructions are in the same block and asserted on it. The fix explicitly checks for that condition and conservatively suppresses the optimization when it is violated. llvm-svn: 218735
This commit is contained in:
parent
6ffdf68855
commit
a5e5769ed3
@ -2442,7 +2442,7 @@ static bool swapMayExposeCSEOpportunities(const Value * Op0,
|
||||
bool InstCombiner::dominatesAllUses(const Instruction *DI,
|
||||
const Instruction *UI,
|
||||
const BasicBlock *DB) const {
|
||||
assert(DI && DI->getParent() == UI->getParent() &&
|
||||
assert(DI && UI && DI->getParent() == UI->getParent() &&
|
||||
"definition and use must be in the same block");
|
||||
// DominatorTree available?
|
||||
if (!DT)
|
||||
@ -2468,6 +2468,12 @@ static bool isChainSelectCmpBranch(const SelectInst *SI) {
|
||||
auto *IC = dyn_cast<ICmpInst>(BI->getCondition());
|
||||
if (!IC || (IC->getOperand(0) != SI && IC->getOperand(1) != SI))
|
||||
return false;
|
||||
// FIXME: Conservatively suppress the optimization when the IC
|
||||
// has a parent different from SI (including no parent). Otherwise
|
||||
// the assertion in dominatesAllUses() fires and causes a build failure.
|
||||
// Make the optimization safe w/o this condition.
|
||||
if (SI->getParent() != IC->getParent())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user