mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
LVI: Recognize the form instcombine canonicalizes range checks into when forming constant ranges.
This could probably be made a lot smarter, but this is a common case and doesn't require LVI to scan a lot of code. With this change CVP can optimize away the "shift == 0" case in Hashing.h that only gets hit when "shift" is in a range not containing 0. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151919 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
43
test/Transforms/CorrelatedValuePropagation/range.ll
Normal file
43
test/Transforms/CorrelatedValuePropagation/range.ll
Normal file
@@ -0,0 +1,43 @@
|
||||
; RUN: opt -correlated-propagation -S < %s | FileCheck %s
|
||||
|
||||
declare i32 @foo()
|
||||
|
||||
define i32 @test1(i32 %a) nounwind {
|
||||
%a.off = add i32 %a, -8
|
||||
%cmp = icmp ult i32 %a.off, 8
|
||||
br i1 %cmp, label %then, label %else
|
||||
|
||||
then:
|
||||
%dead = icmp eq i32 %a, 7
|
||||
br i1 %dead, label %end, label %else
|
||||
|
||||
else:
|
||||
ret i32 1
|
||||
|
||||
end:
|
||||
ret i32 2
|
||||
|
||||
; CHECK: @test1
|
||||
; CHECK: then:
|
||||
; CHECK-NEXT: br i1 false, label %end, label %else
|
||||
}
|
||||
|
||||
define i32 @test2(i32 %a) nounwind {
|
||||
%a.off = add i32 %a, -8
|
||||
%cmp = icmp ult i32 %a.off, 8
|
||||
br i1 %cmp, label %then, label %else
|
||||
|
||||
then:
|
||||
%dead = icmp ugt i32 %a, 15
|
||||
br i1 %dead, label %end, label %else
|
||||
|
||||
else:
|
||||
ret i32 1
|
||||
|
||||
end:
|
||||
ret i32 2
|
||||
|
||||
; CHECK: @test2
|
||||
; CHECK: then:
|
||||
; CHECK-NEXT: br i1 false, label %end, label %else
|
||||
}
|
Reference in New Issue
Block a user