summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorGerolf Hoflehner <ghoflehner@apple.com>2014-10-01 03:24:39 +0000
committerGerolf Hoflehner <ghoflehner@apple.com>2014-10-01 03:24:39 +0000
commit19fc3dafc8bf92fa62adcdfbd4377d0280137b2f (patch)
tree26ea56995f5f18267ba0aed5682f51a825303c2e /llvm/lib/Transforms
parent26cb9b8d2da4d401ea6a6fe6567fe32a46bfa65c (diff)
downloadbcm5719-llvm-19fc3dafc8bf92fa62adcdfbd4377d0280137b2f.tar.gz
bcm5719-llvm-19fc3dafc8bf92fa62adcdfbd4377d0280137b2f.zip
[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
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index c264e256605..e10eab1f81a 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -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;
}
OpenPOWER on IntegriCloud