summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-11-25 21:27:53 +0000
committerChris Lattner <sabre@nondot.org>2007-11-25 21:27:53 +0000
commitc00e8adfe0ec5149e3f952e4c99c67942c9367ef (patch)
tree8a00b643d1057518cd7357a834c81d96bc08bfad /llvm
parentbd9df0f200ed7192f46eef53b6645781e9bb1982 (diff)
downloadbcm5719-llvm-c00e8adfe0ec5149e3f952e4c99c67942c9367ef.tar.gz
bcm5719-llvm-c00e8adfe0ec5149e3f952e4c99c67942c9367ef.zip
Implement PR1822
llvm-svn: 44318
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Transforms/Scalar/InstructionCombining.cpp7
-rw-r--r--llvm/test/Transforms/InstCombine/select.ll14
2 files changed, 18 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index 85fd2c3bdb7..e90d1909ae4 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -7326,6 +7326,13 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
return BinaryOperator::createOr(NotCond, TrueVal);
}
}
+
+ // select a, b, a -> a&b
+ // select a, a, b -> a|b
+ if (CondVal == TrueVal)
+ return BinaryOperator::createOr(CondVal, FalseVal);
+ else if (CondVal == FalseVal)
+ return BinaryOperator::createAnd(CondVal, TrueVal);
}
// Selecting between two integer constants?
diff --git a/llvm/test/Transforms/InstCombine/select.ll b/llvm/test/Transforms/InstCombine/select.ll
index ccc63c2553d..aac7603e082 100644
--- a/llvm/test/Transforms/InstCombine/select.ll
+++ b/llvm/test/Transforms/InstCombine/select.ll
@@ -1,8 +1,7 @@
; This test makes sure that these instructions are properly eliminated.
+; PR1822
-; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \
-; RUN: not grep select
-; END.
+; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep select
implementation
@@ -180,3 +179,12 @@ short %test22(int %x) {
ret short %retval
}
+bool %test23(bool %a, bool %b) {
+ %c = select bool %a, bool %b, bool %a
+ ret bool %c
+}
+
+bool %test24(bool %a, bool %b) {
+ %c = select bool %a, bool %a, bool %b
+ ret bool %c
+}
OpenPOWER on IntegriCloud