diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2006-12-23 18:58:04 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2006-12-23 18:58:04 +0000 |
commit | 1b0d847874af8690916795b5a1bfe36204738ad6 (patch) | |
tree | 1851fc9f32a3b21ddbe4b038708455976e644eff /lib | |
parent | 283e20708bbc7682cbcf1356abe1b59cda28b932 (diff) | |
download | llvm-1b0d847874af8690916795b5a1bfe36204738ad6.tar.gz llvm-1b0d847874af8690916795b5a1bfe36204738ad6.tar.bz2 llvm-1b0d847874af8690916795b5a1bfe36204738ad6.tar.xz |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Scalar/InstructionCombining.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 205dfef84a..3397530482 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -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) { |