diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-04-30 04:56:04 +0000 | 
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-04-30 04:56:04 +0000 | 
| commit | 08e95b47032d100f9d40dbf09fb7c8559d1ca505 (patch) | |
| tree | 3e8e7382595f66970b812605f5df7593ae579f4b /llvm/test/Transforms/InstCombine/max-of-nots.ll | |
| parent | a8c178f280806d6a0fadb8067e9e433a61e3296b (diff) | |
| download | bcm5719-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.ll | 17 | 
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 +}  | 

