For PR1065:

Don't allow CmpInst instances to be processed in FoldSelectOpOp because
you can't easily swap their operands.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32753 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer 2006-12-23 18:58:04 +00:00
parent 283e20708b
commit 1b0d847874

View File

@ -6555,13 +6555,7 @@ Instruction *InstCombiner::FoldSelectOpOp(SelectInst &SI, Instruction *TI,
}
// Only handle binary, compare and shift operators here.
if (!isa<ShiftInst>(TI) && !isa<BinaryOperator>(TI) && !isa<CmpInst>(TI))
return 0;
// If the CmpInst predicates don't match, then the instructions aren't the
// same and we can't continue.
if (isa<CmpInst>(TI) && isa<CmpInst>(FI) &&
(cast<CmpInst>(TI)->getPredicate() != cast<CmpInst>(FI)->getPredicate()))
if (!isa<ShiftInst>(TI) && !isa<BinaryOperator>(TI))
return 0;
// Figure out if the operations have any operands in common.
@ -6603,12 +6597,13 @@ Instruction *InstCombiner::FoldSelectOpOp(SelectInst &SI, Instruction *TI,
return BinaryOperator::create(BO->getOpcode(), MatchOp, NewSI);
else
return BinaryOperator::create(BO->getOpcode(), NewSI, MatchOp);
} else {
if (MatchIsOpZero)
return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), MatchOp, NewSI);
else
return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), NewSI, MatchOp);
}
assert(isa<ShiftInst>(TI) && "Should only have Shift here");
if (MatchIsOpZero)
return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), MatchOp, NewSI);
else
return new ShiftInst(cast<ShiftInst>(TI)->getOpcode(), NewSI, MatchOp);
}
Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {