From b074e3264176b097bf9e9b9b4359af3394cad58e Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Fri, 28 Jan 2011 03:28:10 +0000 Subject: Fold select + select where both selects are on the same condition. llvm-svn: 124469 --- llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp index ff41ab834b1..97abc769ae5 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -792,6 +792,19 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) { if (Instruction *NV = FoldOpIntoPhi(SI)) return NV; + if (SelectInst *TrueSI = dyn_cast(TrueVal)) { + if (TrueSI->getCondition() == CondVal) { + SI.setOperand(1, TrueSI->getTrueValue()); + return &SI; + } + } + if (SelectInst *FalseSI = dyn_cast(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); -- cgit v1.2.3