Fold select + select where both selects are on the same condition.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124469 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky
2011-01-28 03:28:10 +00:00
parent 1ffb533699
commit df3bfae151
2 changed files with 29 additions and 1 deletions

View File

@@ -792,6 +792,19 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
if (Instruction *NV = FoldOpIntoPhi(SI))
return NV;
if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) {
if (TrueSI->getCondition() == CondVal) {
SI.setOperand(1, TrueSI->getTrueValue());
return &SI;
}
}
if (SelectInst *FalseSI = dyn_cast<SelectInst>(FalseVal)) {
if (FalseSI->getCondition() == CondVal) {
SI.setOperand(2, FalseSI->getFalseValue());
return &SI;
}
}
if (BinaryOperator::isNot(CondVal)) {
SI.setOperand(0, BinaryOperator::getNotArgument(CondVal));
SI.setOperand(1, FalseVal);