4
4
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5
5
target triple = "x86_64-unknown-linux-gnu"
6
6
7
- define void @max_backedge_taken_count_by_wrapping1 (i8 %N , i8* %ptr ) {
8
- ; CHECK-LABEL: Determining loop execution counts for: @max_backedge_taken_count_by_wrapping1
7
+ define void @max_backedge_taken_count_by_wrapping1_nsw_nuw (i8 %N , i8* %ptr ) {
8
+ ; CHECK-LABEL: Determining loop execution counts for: @max_backedge_taken_count_by_wrapping1_nsw_nuw
9
9
; CHECK-NEXT: Loop %loop: backedge-taken count is (%N /u 4)
10
10
; CHECK-NEXT: Loop %loop: max backedge-taken count is 63
11
11
; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (%N /u 4)
@@ -25,18 +25,38 @@ exit:
25
25
ret void
26
26
}
27
27
28
- ; TODO: Max backedge taken count could be improved.
29
- define void @max_backedge_taken_count_by_wrapping2 (i8 %N , i8* %ptr ) {
28
+ define void @max_backedge_taken_count_by_wrapping1_nuw (i8 %N , i8* %ptr ) {
29
+ ; CHECK-LABEL: Determining loop execution counts for: @max_backedge_taken_count_by_wrapping1_nuw
30
+ ; CHECK-NEXT: Loop %loop: backedge-taken count is (%N /u 4)
31
+ ; CHECK-NEXT: Loop %loop: max backedge-taken count is 63
32
+ ; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (%N /u 4)
33
+ ;
34
+ entry:
35
+ br label %loop
36
+
37
+ loop:
38
+ %iv = phi i8 [ 0 , %entry ], [ %iv.next , %loop ]
39
+ %gep = getelementptr i8 , i8* %ptr , i8 %iv
40
+ store i8 %iv , i8* %gep
41
+ %iv.next = add nuw i8 %iv , 4
42
+ %ec = icmp ne i8 %iv , %N
43
+ br i1 %ec , label %loop , label %exit
44
+
45
+ exit:
46
+ ret void
47
+ }
48
+
49
+ define void @max_backedge_taken_count_by_wrapping2_nsw_nuw (i8 %N , i8* %ptr ) {
30
50
; CHECK-LABEL: Determining loop execution counts for: @max_backedge_taken_count_by_wrapping2
31
- ; CHECK-NEXT: Loop %loop: backedge-taken count is ((-128 + %N) /u 4)
51
+ ; CHECK-NEXT: Loop %loop: backedge-taken count is ((-64 + %N) /u 4)
32
52
; CHECK-NEXT: Loop %loop: max backedge-taken count is 63
33
- ; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-128 + %N) /u 4)
53
+ ; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-64 + %N) /u 4)
34
54
;
35
55
entry:
36
56
br label %loop
37
57
38
58
loop:
39
- %iv = phi i8 [ 128 , %entry ], [ %iv.next , %loop ]
59
+ %iv = phi i8 [ 64 , %entry ], [ %iv.next , %loop ]
40
60
%gep = getelementptr i8 , i8* %ptr , i8 %iv
41
61
store i8 %iv , i8* %gep
42
62
%iv.next = add nuw nsw i8 %iv , 4
46
66
exit:
47
67
ret void
48
68
}
69
+
70
+ define void @max_backedge_taken_count_by_wrapping2_nuw (i8 %N , i8* %ptr ) {
71
+ ; CHECK-LABEL: Determining loop execution counts for: @max_backedge_taken_count_by_wrapping2
72
+ ; CHECK-NEXT: Loop %loop: backedge-taken count is ((-64 + %N) /u 4)
73
+ ; CHECK-NEXT: Loop %loop: max backedge-taken count is 63
74
+ ; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((-64 + %N) /u 4)
75
+ ;
76
+ entry:
77
+ br label %loop
78
+
79
+ loop:
80
+ %iv = phi i8 [ 64 , %entry ], [ %iv.next , %loop ]
81
+ %gep = getelementptr i8 , i8* %ptr , i8 %iv
82
+ store i8 %iv , i8* %gep
83
+ %iv.next = add nuw i8 %iv , 4
84
+ %ec = icmp ne i8 %iv , %N
85
+ br i1 %ec , label %loop , label %exit
86
+
87
+ exit:
88
+ ret void
89
+ }
0 commit comments