summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-08-08 06:19:24 +0000
committerCraig Topper <craig.topper@intel.com>2017-08-08 06:19:24 +0000
commit8e351e90186a9f31625694f1b28443cc82f7a38a (patch)
tree7987f7c5270de2fd9762ae9c89fc20fc08277916 /llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
parent327e9ecb0d7ee4a9841c67c72f3f890bd65832ea (diff)
downloadbcm5719-llvm-8e351e90186a9f31625694f1b28443cc82f7a38a.tar.gz
bcm5719-llvm-8e351e90186a9f31625694f1b28443cc82f7a38a.zip
[InstCombine] Cast to BinaryOperator earlier in foldSelectIntoOp to simplify the code.
We no longer need the explicit operand count check or the later dynamic cast. llvm-svn: 310339
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
index 92f3c1d9d89..4de2902bde8 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
@@ -80,7 +80,7 @@ static Value *generateMinMaxSelectPattern(InstCombiner::BuilderTy &Builder,
/// a bitmask indicating which operands of this instruction are foldable if they
/// equal the other incoming value of the select.
///
-static unsigned getSelectFoldableOperands(Instruction *I) {
+static unsigned getSelectFoldableOperands(BinaryOperator *I) {
switch (I->getOpcode()) {
case Instruction::Add:
case Instruction::Mul:
@@ -100,7 +100,7 @@ static unsigned getSelectFoldableOperands(Instruction *I) {
/// For the same transformation as the previous function, return the identity
/// constant that goes into the select.
-static Constant *getSelectFoldableConstant(Instruction *I) {
+static Constant *getSelectFoldableConstant(BinaryOperator *I) {
switch (I->getOpcode()) {
default: llvm_unreachable("This cannot happen!");
case Instruction::Add:
@@ -237,9 +237,8 @@ Instruction *InstCombiner::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,
Value *FalseVal) {
// See the comment above GetSelectFoldableOperands for a description of the
// transformation we are doing here.
- if (Instruction *TVI = dyn_cast<Instruction>(TrueVal)) {
- if (TVI->hasOneUse() && TVI->getNumOperands() == 2 &&
- !isa<Constant>(FalseVal)) {
+ if (auto *TVI = dyn_cast<BinaryOperator>(TrueVal)) {
+ if (TVI->hasOneUse() && !isa<Constant>(FalseVal)) {
if (unsigned SFO = getSelectFoldableOperands(TVI)) {
unsigned OpToFold = 0;
if ((SFO & 1) && FalseVal == TVI->getOperand(0)) {
@@ -256,10 +255,9 @@ Instruction *InstCombiner::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,
if (!isa<Constant>(OOp) || isSelect01(C, cast<Constant>(OOp))) {
Value *NewSel = Builder.CreateSelect(SI.getCondition(), OOp, C);
NewSel->takeName(TVI);
- BinaryOperator *TVI_BO = cast<BinaryOperator>(TVI);
- BinaryOperator *BO = BinaryOperator::Create(TVI_BO->getOpcode(),
+ BinaryOperator *BO = BinaryOperator::Create(TVI->getOpcode(),
FalseVal, NewSel);
- BO->copyIRFlags(TVI_BO);
+ BO->copyIRFlags(TVI);
return BO;
}
}
@@ -267,9 +265,8 @@ Instruction *InstCombiner::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,
}
}
- if (Instruction *FVI = dyn_cast<Instruction>(FalseVal)) {
- if (FVI->hasOneUse() && FVI->getNumOperands() == 2 &&
- !isa<Constant>(TrueVal)) {
+ if (auto *FVI = dyn_cast<BinaryOperator>(FalseVal)) {
+ if (FVI->hasOneUse() && !isa<Constant>(TrueVal)) {
if (unsigned SFO = getSelectFoldableOperands(FVI)) {
unsigned OpToFold = 0;
if ((SFO & 1) && TrueVal == FVI->getOperand(0)) {
@@ -286,10 +283,9 @@ Instruction *InstCombiner::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,
if (!isa<Constant>(OOp) || isSelect01(C, cast<Constant>(OOp))) {
Value *NewSel = Builder.CreateSelect(SI.getCondition(), C, OOp);
NewSel->takeName(FVI);
- BinaryOperator *FVI_BO = cast<BinaryOperator>(FVI);
- BinaryOperator *BO = BinaryOperator::Create(FVI_BO->getOpcode(),
+ BinaryOperator *BO = BinaryOperator::Create(FVI->getOpcode(),
TrueVal, NewSel);
- BO->copyIRFlags(FVI_BO);
+ BO->copyIRFlags(FVI);
return BO;
}
}
OpenPOWER on IntegriCloud