Skip to content

Commit 42303d9

Browse files
nikiccuviper
authored andcommitted
[LAA] Add test for llvm#79137 (NFC)
(cherry picked from commit 0c02b2e)
1 parent 0b9a95f commit 42303d9

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 4
2+
; RUN: opt -passes='print<access-info>' -disable-output 2>&1 < %s | FileCheck %s
3+
4+
; PR79137: If the noalias.scope.decl is located inside the loop, we cannot
5+
; assume that the accesses don't alias across iterations.
6+
7+
define void @test_scope_in_loop(ptr %arg, i64 %num) {
8+
; CHECK-LABEL: 'test_scope_in_loop'
9+
; CHECK-NEXT: loop:
10+
; CHECK-NEXT: Memory dependences are safe
11+
; CHECK-NEXT: Dependences:
12+
; CHECK-NEXT: Run-time memory checks:
13+
; CHECK-NEXT: Grouped accesses:
14+
; CHECK-EMPTY:
15+
; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
16+
; CHECK-NEXT: SCEV assumptions:
17+
; CHECK-EMPTY:
18+
; CHECK-NEXT: Expressions re-written:
19+
;
20+
entry:
21+
%icmp = icmp ult i64 %num, 2
22+
br i1 %icmp, label %exit, label %preheader
23+
24+
preheader:
25+
%arg.1 = getelementptr inbounds i8, ptr %arg, i64 1
26+
%end = add i64 %num, -2
27+
br label %loop
28+
29+
loop:
30+
%prev.ptr = phi ptr [ %cur.ptr, %loop ], [ %arg, %preheader ]
31+
%iv = phi i64 [ %iv.next, %loop ], [ 0, %preheader ]
32+
%cur.ptr = getelementptr inbounds i8, ptr %arg.1, i64 %iv
33+
call void @llvm.experimental.noalias.scope.decl(metadata !0)
34+
call void @llvm.experimental.noalias.scope.decl(metadata !3)
35+
%load.prev = load i8, ptr %prev.ptr, align 1, !alias.scope !0, !noalias !3
36+
%load.cur = load i8, ptr %cur.ptr, align 1, !alias.scope !3
37+
%add = add i8 %load.cur, %load.prev
38+
store i8 %add, ptr %cur.ptr, align 1, !alias.scope !3
39+
%iv.next = add nuw i64 %iv, 1
40+
%cmp = icmp eq i64 %iv, %end
41+
br i1 %cmp, label %exit, label %loop
42+
43+
exit:
44+
ret void
45+
}
46+
47+
define void @test_scope_out_of_loop(ptr %arg, i64 %num) {
48+
; CHECK-LABEL: 'test_scope_out_of_loop'
49+
; CHECK-NEXT: loop:
50+
; CHECK-NEXT: Memory dependences are safe
51+
; CHECK-NEXT: Dependences:
52+
; CHECK-NEXT: Run-time memory checks:
53+
; CHECK-NEXT: Grouped accesses:
54+
; CHECK-EMPTY:
55+
; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
56+
; CHECK-NEXT: SCEV assumptions:
57+
; CHECK-EMPTY:
58+
; CHECK-NEXT: Expressions re-written:
59+
;
60+
entry:
61+
%icmp = icmp ult i64 %num, 2
62+
br i1 %icmp, label %exit, label %preheader
63+
64+
preheader:
65+
call void @llvm.experimental.noalias.scope.decl(metadata !0)
66+
call void @llvm.experimental.noalias.scope.decl(metadata !3)
67+
%arg.1 = getelementptr inbounds i8, ptr %arg, i64 1
68+
%end = add i64 %num, -2
69+
br label %loop
70+
71+
loop:
72+
%prev.ptr = phi ptr [ %cur.ptr, %loop ], [ %arg, %preheader ]
73+
%iv = phi i64 [ %iv.next, %loop ], [ 0, %preheader ]
74+
%cur.ptr = getelementptr inbounds i8, ptr %arg.1, i64 %iv
75+
%load.prev = load i8, ptr %prev.ptr, align 1, !alias.scope !0, !noalias !3
76+
%load.cur = load i8, ptr %cur.ptr, align 1, !alias.scope !3
77+
%add = add i8 %load.cur, %load.prev
78+
store i8 %add, ptr %cur.ptr, align 1, !alias.scope !3
79+
%iv.next = add nuw i64 %iv, 1
80+
%cmp = icmp eq i64 %iv, %end
81+
br i1 %cmp, label %exit, label %loop
82+
83+
exit:
84+
ret void
85+
}
86+
87+
declare void @llvm.experimental.noalias.scope.decl(metadata)
88+
89+
!0 = !{!1}
90+
!1 = distinct !{!1, !2}
91+
!2 = distinct !{!2}
92+
!3 = !{!4}
93+
!4 = distinct !{!4, !5}
94+
!5 = distinct !{!5}

0 commit comments

Comments
 (0)