diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-05-19 03:53:17 +0000 |
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-05-19 03:53:17 +0000 |
| commit | b784ed36c0cefd3d3289417143deecb6a7b81622 (patch) | |
| tree | 8a96c7cb95f7103cf064233acbb19ddbbdab8986 /llvm/test/Transforms/GuardWidening/basic.ll | |
| parent | 590614c1e19199a0e109dcef5a61128e5a62fede (diff) | |
| download | bcm5719-llvm-b784ed36c0cefd3d3289417143deecb6a7b81622.tar.gz bcm5719-llvm-b784ed36c0cefd3d3289417143deecb6a7b81622.zip | |
[GuardWidening] Use getEquivalentICmp to fold constant compares
`ConstantRange::getEquivalentICmp` is more general, and better
factored.
llvm-svn: 270019
Diffstat (limited to 'llvm/test/Transforms/GuardWidening/basic.ll')
| -rw-r--r-- | llvm/test/Transforms/GuardWidening/basic.ll | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/llvm/test/Transforms/GuardWidening/basic.ll b/llvm/test/Transforms/GuardWidening/basic.ll index cb49eebcbab..5b746a5d7dd 100644 --- a/llvm/test/Transforms/GuardWidening/basic.ll +++ b/llvm/test/Transforms/GuardWidening/basic.ll @@ -126,7 +126,7 @@ leave: define void @f_5(i32 %a) { ; CHECK-LABEL: @f_5( entry: -; CHECK: %wide.chk = icmp ugt i32 %a, 10 +; CHECK: %wide.chk = icmp uge i32 %a, 11 ; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 %wide.chk) [ "deopt"() ] ; CHECK: br i1 undef, label %left, label %right @@ -335,3 +335,47 @@ entry: call void(i1, ...) @llvm.experimental.guard(i1 %cond) [ "deopt"() ] ret void } + +define void @f_13(i32 %a) { +; CHECK-LABEL: @f_13( +entry: +; CHECK: %wide.chk = icmp ult i32 %a, 10 +; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 %wide.chk) [ "deopt"() ] +; CHECK: br i1 undef, label %left, label %right + + %cond_0 = icmp ult i32 %a, 14 + call void(i1, ...) @llvm.experimental.guard(i1 %cond_0) [ "deopt"() ] + br i1 undef, label %left, label %right + +left: + %cond_1 = icmp slt i32 %a, 10 + call void(i1, ...) @llvm.experimental.guard(i1 %cond_1) [ "deopt"() ] + ret void + +right: + ret void +} + +define void @f_14(i32 %a) { +; CHECK-LABEL: @f_14( +entry: +; CHECK: %cond_0 = icmp ult i32 %a, 14 +; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 %cond_0) [ "deopt"() ] +; CHECK: br i1 undef, label %left, label %right + + %cond_0 = icmp ult i32 %a, 14 + call void(i1, ...) @llvm.experimental.guard(i1 %cond_0) [ "deopt"() ] + br i1 undef, label %left, label %right + +left: +; CHECK: left: +; CHECK: %cond_1 = icmp sgt i32 %a, 10 +; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 %cond_1) [ "deopt"() ] + + %cond_1 = icmp sgt i32 %a, 10 + call void(i1, ...) @llvm.experimental.guard(i1 %cond_1) [ "deopt"() ] + ret void + +right: + ret void +} |

