Add trivial optimizations for select instructions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12317 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2004-03-12 05:52:32 +00:00
parent 9f24a077bd
commit 3d69f46d64

View File

@ -108,6 +108,7 @@ namespace {
Instruction *visitSetCondInst(BinaryOperator &I);
Instruction *visitShiftInst(ShiftInst &I);
Instruction *visitCastInst(CastInst &CI);
Instruction *visitSelectInst(SelectInst &CI);
Instruction *visitCallInst(CallInst &CI);
Instruction *visitInvokeInst(InvokeInst &II);
Instruction *visitPHINode(PHINode &PN);
@ -1931,6 +1932,20 @@ Instruction *InstCombiner::visitCastInst(CastInst &CI) {
return 0;
}
Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
if (ConstantBool *C = dyn_cast<ConstantBool>(SI.getCondition()))
if (C == ConstantBool::True)
return ReplaceInstUsesWith(SI, SI.getTrueValue());
else {
assert(C == ConstantBool::False);
return ReplaceInstUsesWith(SI, SI.getFalseValue());
}
// Other transformations are possible!
return 0;
}
// CallInst simplification
//
Instruction *InstCombiner::visitCallInst(CallInst &CI) {