diff options
author | Artur Pilipenko <apilipenko@azulsystems.com> | 2016-08-12 10:14:11 +0000 |
---|---|---|
committer | Artur Pilipenko <apilipenko@azulsystems.com> | 2016-08-12 10:14:11 +0000 |
commit | 6669f253d582f3de896737001f8e67c84bab5b0e (patch) | |
tree | 4f7a85e05a3cf73067c38b92b43fc0f4e518fa71 /llvm/test/Transforms/CorrelatedValuePropagation/range.ll | |
parent | 05e760ec4b53cac179dc5dfc4d3f76e1024a097e (diff) | |
download | bcm5719-llvm-6669f253d582f3de896737001f8e67c84bab5b0e.tar.gz bcm5719-llvm-6669f253d582f3de896737001f8e67c84bab5b0e.zip |
[LVI] Take range metadata into account while calculating icmp condition constraints
Take range metadata into account for conditions like this:
%length = load i32, i32* %length_ptr, !range !{i32 0, i32 2147483647}
%cmp = icmp ult i32 %a, %length
This is a common pattern for range checks where the length of the array is dynamically loaded.
Reviewed By: sanjoy
Differential Revision: https://reviews.llvm.org/D23267
llvm-svn: 278496
Diffstat (limited to 'llvm/test/Transforms/CorrelatedValuePropagation/range.ll')
-rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/range.ll | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/range.ll b/llvm/test/Transforms/CorrelatedValuePropagation/range.ll index dac6ce4224a..216b7f32434 100644 --- a/llvm/test/Transforms/CorrelatedValuePropagation/range.ll +++ b/llvm/test/Transforms/CorrelatedValuePropagation/range.ll @@ -445,3 +445,20 @@ then: else: ret i1 false } + +@limit = external global i32 +define i1 @test15(i32 %a) { +; CHECK-LABEL: @test15( +; CHECK: then: +; CHECK-NEXT: ret i1 false + %limit = load i32, i32* @limit, !range !{i32 0, i32 256} + %cmp = icmp ult i32 %a, %limit + br i1 %cmp, label %then, label %else + +then: + %result = icmp eq i32 %a, 255 + ret i1 %result + +else: + ret i1 false +} |