mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 07:17:36 +00:00
IRCE: use SCEVs instead of llvm::Value's for intermediate
calculations. Semantically non-functional change. This gets rid of some of the SCEV -> Value -> SCEV round tripping and the Construct(SMin|SMax)Of and MaybeSimplify helper routines. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230150 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -37,10 +37,14 @@ define void @multiple_access_no_preloop(
|
||||
; CHECK-LABEL: multiple_access_no_preloop
|
||||
|
||||
; CHECK-LABEL: loop.preheader:
|
||||
; CHECK: [[smaller_len_cmp:[^ ]+]] = icmp slt i32 %len.a, %len.b
|
||||
; CHECK: [[smaller_len:[^ ]+]] = select i1 [[smaller_len_cmp]], i32 %len.a, i32 %len.b
|
||||
; CHECK: [[upper_bound_cmp:[^ ]+]] = icmp slt i32 %n, %3
|
||||
; CHECK: [[upper_bound:[^ ]+]] = select i1 %5, i32 %n, i32 %3
|
||||
; CHECK: [[not_len_b:[^ ]+]] = sub i32 -1, %len.b
|
||||
; CHECK: [[not_len_a:[^ ]+]] = sub i32 -1, %len.a
|
||||
; CHECK: [[smax_not_len_cond:[^ ]+]] = icmp sgt i32 [[not_len_b]], [[not_len_a]]
|
||||
; CHECK: [[smax_not_len:[^ ]+]] = select i1 [[smax_not_len_cond]], i32 [[not_len_b]], i32 [[not_len_a]]
|
||||
; CHECK: [[not_n:[^ ]+]] = sub i32 -1, %n
|
||||
; CHECK: [[not_upper_limit_cond:[^ ]+]] = icmp sgt i32 [[smax_not_len]], [[not_n]]
|
||||
; CHECK: [[not_upper_limit:[^ ]+]] = select i1 [[not_upper_limit_cond]], i32 [[smax_not_len]], i32 [[not_n]]
|
||||
; CHECK: [[upper_limit:[^ ]+]] = sub i32 -1, [[not_upper_limit]]
|
||||
|
||||
; CHECK-LABEL: loop:
|
||||
; CHECK: br i1 true, label %in.bounds.a, label %out.of.bounds
|
||||
@@ -49,7 +53,7 @@ define void @multiple_access_no_preloop(
|
||||
; CHECK: br i1 true, label %in.bounds.b, label %out.of.bounds
|
||||
|
||||
; CHECK-LABEL: in.bounds.b:
|
||||
; CHECK: [[main_loop_cond:[^ ]+]] = icmp slt i32 %idx.next, [[upper_bound]]
|
||||
; CHECK: [[main_loop_cond:[^ ]+]] = icmp slt i32 %idx.next, [[upper_limit]]
|
||||
; CHECK: br i1 [[main_loop_cond]], label %loop, label %main.exit.selector
|
||||
|
||||
; CHECK-LABEL: in.bounds.b.postloop:
|
||||
|
||||
@@ -83,9 +83,11 @@ define void @single_access_no_preloop_with_offset(i32 *%arr, i32 *%a_len_ptr, i3
|
||||
; CHECK-LABEL: single_access_no_preloop_with_offset
|
||||
|
||||
; CHECK-LABEL: loop.preheader:
|
||||
; CHECK: [[safe_range_end:[^ ]+]] = sub i32 %len, 4
|
||||
; CHECK: [[exit_main_loop_at_cmp:[^ ]+]] = icmp slt i32 %n, [[safe_range_end]]
|
||||
; CHECK: [[exit_main_loop_at:[^ ]+]] = select i1 [[exit_main_loop_at_cmp]], i32 %n, i32 [[safe_range_end]]
|
||||
; CHECK: [[not_n:[^ ]+]] = sub i32 -1, %n
|
||||
; CHECK: [[not_safe_range_end:[^ ]+]] = sub i32 3, %len
|
||||
; CHECK: [[not_exit_main_loop_at_cmp:[^ ]+]] = icmp sgt i32 [[not_n]], [[not_safe_range_end]]
|
||||
; CHECK: [[not_exit_main_loop_at:[^ ]+]] = select i1 [[not_exit_main_loop_at_cmp]], i32 [[not_n]], i32 [[not_safe_range_end]]
|
||||
; CHECK: [[exit_main_loop_at:[^ ]+]] = sub i32 -1, [[not_exit_main_loop_at]]
|
||||
; CHECK: [[enter_main_loop:[^ ]+]] = icmp slt i32 0, [[exit_main_loop_at]]
|
||||
; CHECK: br i1 [[enter_main_loop]], label %loop, label %main.pseudo.exit
|
||||
|
||||
|
||||
@@ -29,12 +29,16 @@ define void @single_access_with_preloop(i32 *%arr, i32 *%a_len_ptr, i32 %n, i32
|
||||
}
|
||||
|
||||
; CHECK-LABEL: loop.preheader:
|
||||
; CHECK: [[safe_start:[^ ]+]] = sub i32 0, %offset
|
||||
; CHECK: [[safe_end:[^ ]+]] = sub i32 %len, %offset
|
||||
; CHECK: [[exit_preloop_at_cond:[^ ]+]] = icmp slt i32 %n, [[safe_start]]
|
||||
; CHECK: [[exit_preloop_at:[^ ]+]] = select i1 [[exit_preloop_at_cond]], i32 %n, i32 [[safe_start]]
|
||||
; CHECK: [[exit_mainloop_at_cond:[^ ]+]] = icmp slt i32 %n, [[safe_end]]
|
||||
; CHECK: [[exit_mainloop_at:[^ ]+]] = select i1 [[exit_mainloop_at_cond]], i32 %n, i32 [[safe_end]]
|
||||
; CHECK: [[not_safe_start:[^ ]+]] = add i32 %offset, -1
|
||||
; CHECK: [[not_n:[^ ]+]] = sub i32 -1, %n
|
||||
; CHECK: [[not_exit_preloop_at_cond:[^ ]+]] = icmp sgt i32 [[not_safe_start]], [[not_n]]
|
||||
; CHECK: [[not_exit_preloop_at:[^ ]+]] = select i1 [[not_exit_preloop_at_cond]], i32 [[not_safe_start]], i32 [[not_n]]
|
||||
; CHECK: [[exit_preloop_at:[^ ]+]] = sub i32 -1, [[not_exit_preloop_at]]
|
||||
|
||||
; CHECK: [[not_safe_end:[^ ]+]] = sub i32 [[not_safe_start]], %len
|
||||
; CHECK: [[not_exit_mainloop_at_cond:[^ ]+]] = icmp sgt i32 [[not_safe_end]], [[not_n]]
|
||||
; CHECK: [[not_exit_mainloop_at:[^ ]+]] = select i1 [[not_exit_mainloop_at_cond]], i32 [[not_safe_end]], i32 [[not_n]]
|
||||
; CHECK: [[exit_mainloop_at:[^ ]+]] = sub i32 -1, [[not_exit_mainloop_at]]
|
||||
|
||||
; CHECK-LABEL: in.bounds:
|
||||
; CHECK: [[continue_mainloop_cond:[^ ]+]] = icmp slt i32 %idx.next, [[exit_mainloop_at]]
|
||||
|
||||
Reference in New Issue
Block a user