summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InstCombine/max-of-nots.ll
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2015-04-30 04:56:04 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2015-04-30 04:56:04 +0000
commit08e95b47032d100f9d40dbf09fb7c8559d1ca505 (patch)
tree3e8e7382595f66970b812605f5df7593ae579f4b /llvm/test/Transforms/InstCombine/max-of-nots.ll
parenta8c178f280806d6a0fadb8067e9e433a61e3296b (diff)
downloadbcm5719-llvm-08e95b47032d100f9d40dbf09fb7c8559d1ca505.tar.gz
bcm5719-llvm-08e95b47032d100f9d40dbf09fb7c8559d1ca505.zip
[InstCombine] Add new rule for MIN(MAX(~A, ~B), ~C) et. al.
Summary: Optimizing these well are especially interesting for IRCE since it "clamps" values by generating this sort of pattern through SCEV expressions. Depends on D9352. Reviewers: majnemer Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9353 llvm-svn: 236203
Diffstat (limited to 'llvm/test/Transforms/InstCombine/max-of-nots.ll')
-rw-r--r--llvm/test/Transforms/InstCombine/max-of-nots.ll17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/max-of-nots.ll b/llvm/test/Transforms/InstCombine/max-of-nots.ll
index 41e3038cbe2..dd9c54b0673 100644
--- a/llvm/test/Transforms/InstCombine/max-of-nots.ll
+++ b/llvm/test/Transforms/InstCombine/max-of-nots.ll
@@ -66,3 +66,20 @@ define i32 @compute_min_pessimization(i32 %x, i32 %y) {
%min = sub i32 -1, %not_min
ret i32 %min
}
+
+define i32 @max_of_nots(i32 %x, i32 %y) {
+; CHECK-LABEL: @max_of_nots(
+; CHECK-NEXT: icmp
+; CHECK-NEXT: select
+; CHECK-NEXT: icmp
+; CHECK-NEXT: select
+; CHECK-NEXT: xor
+; CHECK-NEXT: ret
+ %c0 = icmp sgt i32 %y, 0
+ %xor_y = xor i32 %y, -1
+ %s0 = select i1 %c0, i32 %xor_y, i32 -1
+ %xor_x = xor i32 %x, -1
+ %c1 = icmp slt i32 %s0, %xor_x
+ %smax96 = select i1 %c1, i32 %xor_x, i32 %s0
+ ret i32 %smax96
+}
OpenPOWER on IntegriCloud