xref: /llvm-project/llvm/test/Transforms/GVN/noalias.ll (revision 46a08579f2b86e39b367b83ff4ca0e92302d2168)
1; RUN: opt -passes=gvn -S < %s | FileCheck %s
2
3define i32 @test1(ptr %p, ptr %q) {
4; CHECK-LABEL: @test1(ptr %p, ptr %q)
5; CHECK: load i32, ptr %p, align 4, !noalias ![[SCOPE1:[0-9]+]]
6; CHECK: %c = add i32 %a, %a
7  %a = load i32, ptr %p, !noalias !3
8  %b = load i32, ptr %p
9  %c = add i32 %a, %b
10  ret i32 %c
11}
12
13define i32 @test2(ptr %p, ptr %q) {
14; CHECK-LABEL: @test2(ptr %p, ptr %q)
15; CHECK: load i32, ptr %p, align 4, !alias.scope ![[SCOPE1]]
16; CHECK: %c = add i32 %a, %a
17  %a = load i32, ptr %p, !alias.scope !3
18  %b = load i32, ptr %p, !alias.scope !3
19  %c = add i32 %a, %b
20  ret i32 %c
21}
22
23define i32 @test3(ptr %p, ptr %q) {
24; CHECK-LABEL: @test3(ptr %p, ptr %q)
25; CHECK: load i32, ptr %p, align 4, !alias.scope ![[SCOPE2:[0-9]+]]
26; CHECK: %c = add i32 %a, %a
27  %a = load i32, ptr %p, !alias.scope !4
28  %b = load i32, ptr %p, !alias.scope !5
29  %c = add i32 %a, %b
30  ret i32 %c
31}
32
33; CHECK:   ![[SCOPE1]] = !{!{{[0-9]+}}}
34; CHECK:   ![[SCOPE2]] = !{!{{[0-9]+}}}
35declare i32 @foo(ptr) readonly
36
37!0 = distinct !{!0, !2, !"callee0: %a"}
38!1 = distinct !{!1, !2, !"callee0: %b"}
39!2 = distinct !{!2, !"callee0"}
40
41!3 = !{!0}
42!4 = !{!1}
43!5 = !{!0, !1}
44