Skip to content

Commit 0792478

Browse files
committed
[SCEV] Add tests with multiple NE guards and different orders.
Add additional test coverage for using NE guards added in 2d02726 (#160500)
1 parent 0a47024 commit 0792478

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s
3+
4+
declare void @foo()
5+
6+
; Tests with multiple guards for the same value and different values.
7+
8+
define void @test_guard_order_b_then_c_and_d(ptr %a, ptr %b, ptr %c, ptr %d) {
9+
; CHECK-LABEL: 'test_guard_order_b_then_c_and_d'
10+
; CHECK-NEXT: Classifying expressions for: @test_guard_order_b_then_c_and_d
11+
; CHECK-NEXT: %iv = phi ptr [ %a, %entry ], [ %iv.next, %loop ]
12+
; CHECK-NEXT: --> {%a,+,1}<%loop> U: full-set S: full-set Exits: (-1 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64) + %a) LoopDispositions: { %loop: Computable }
13+
; CHECK-NEXT: %iv.next = getelementptr i8, ptr %iv, i64 1
14+
; CHECK-NEXT: --> {(1 + %a),+,1}<%loop> U: full-set S: full-set Exits: ((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64) + %a) LoopDispositions: { %loop: Computable }
15+
; CHECK-NEXT: Determining loop execution counts for: @test_guard_order_b_then_c_and_d
16+
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64))
17+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 -2
18+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64))
19+
; CHECK-NEXT: Loop %loop: Trip multiple is 1
20+
;
21+
entry:
22+
%cmp.eq.b = icmp ne ptr %a, %b
23+
%cmp.eq.c = icmp ne ptr %a, %c
24+
%cmp.eq.d = icmp ne ptr %b, %d
25+
call void @llvm.assume(i1 %cmp.eq.b)
26+
call void @llvm.assume(i1 %cmp.eq.c)
27+
call void @llvm.assume(i1 %cmp.eq.d)
28+
br label %loop
29+
30+
loop:
31+
%iv = phi ptr [ %a, %entry ], [ %iv.next, %loop ]
32+
%iv.next = getelementptr i8, ptr %iv, i64 1
33+
call void @foo()
34+
%ec = icmp eq ptr %iv.next, %b
35+
br i1 %ec, label %exit, label %loop
36+
37+
exit:
38+
ret void
39+
}
40+
41+
define void @test_guard_order_d_then_c_and_b(ptr %a, ptr %b, ptr %c, ptr %d) {
42+
; CHECK-LABEL: 'test_guard_order_d_then_c_and_b'
43+
; CHECK-NEXT: Classifying expressions for: @test_guard_order_d_then_c_and_b
44+
; CHECK-NEXT: %iv = phi ptr [ %a, %entry ], [ %iv.next, %loop ]
45+
; CHECK-NEXT: --> {%a,+,1}<%loop> U: full-set S: full-set Exits: (-1 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64) + %a) LoopDispositions: { %loop: Computable }
46+
; CHECK-NEXT: %iv.next = getelementptr i8, ptr %iv, i64 1
47+
; CHECK-NEXT: --> {(1 + %a),+,1}<%loop> U: full-set S: full-set Exits: ((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64) + %a) LoopDispositions: { %loop: Computable }
48+
; CHECK-NEXT: Determining loop execution counts for: @test_guard_order_d_then_c_and_b
49+
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64))
50+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 -2
51+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64))
52+
; CHECK-NEXT: Loop %loop: Trip multiple is 1
53+
;
54+
entry:
55+
%cmp.eq.b = icmp ne ptr %a, %b
56+
%cmp.eq.c = icmp ne ptr %a, %c
57+
%cmp.eq.d = icmp ne ptr %b, %d
58+
call void @llvm.assume(i1 %cmp.eq.d)
59+
call void @llvm.assume(i1 %cmp.eq.c)
60+
call void @llvm.assume(i1 %cmp.eq.b)
61+
br label %loop
62+
63+
loop:
64+
%iv = phi ptr [ %a, %entry ], [ %iv.next, %loop ]
65+
%iv.next = getelementptr i8, ptr %iv, i64 1
66+
call void @foo()
67+
%ec = icmp eq ptr %iv.next, %b
68+
br i1 %ec, label %exit, label %loop
69+
70+
exit:
71+
ret void
72+
}

0 commit comments

Comments
 (0)