1 ; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
3 define i32 @test1(i32* %p) {
4 ; CHECK: @test1(i32* %p)
5 ; CHECK: %a = load i32* %p, !range !0
6 ; CHECK: %c = add i32 %a, %a
7 %a = load i32* %p, !range !0
8 %b = load i32* %p, !range !0
13 define i32 @test2(i32* %p) {
14 ; CHECK: @test2(i32* %p)
15 ; CHECK: %a = load i32* %p
17 ; CHECK: %c = add i32 %a, %a
18 %a = load i32* %p, !range !0
24 define i32 @test3(i32* %p) {
25 ; CHECK: @test3(i32* %p)
26 ; CHECK: %a = load i32* %p, !range ![[DISJOINT_RANGE:[0-9]+]]
27 ; CHECK: %c = add i32 %a, %a
28 %a = load i32* %p, !range !0
29 %b = load i32* %p, !range !1
34 define i32 @test4(i32* %p) {
35 ; CHECK: @test4(i32* %p)
36 ; CHECK: %a = load i32* %p, !range ![[MERGED_RANGE:[0-9]+]]
37 ; CHECK: %c = add i32 %a, %a
38 %a = load i32* %p, !range !0
39 %b = load i32* %p, !range !2
44 define i32 @test5(i32* %p) {
45 ; CHECK: @test5(i32* %p)
46 ; CHECK: %a = load i32* %p, !range ![[MERGED_SIGNED_RANGE:[0-9]+]]
47 ; CHECK: %c = add i32 %a, %a
48 %a = load i32* %p, !range !3
49 %b = load i32* %p, !range !4
54 define i32 @test6(i32* %p) {
55 ; CHECK: @test6(i32* %p)
56 ; CHECK: %a = load i32* %p, !range ![[MERGED_TEST6:[0-9]+]]
57 ; CHECK: %c = add i32 %a, %a
58 %a = load i32* %p, !range !5
59 %b = load i32* %p, !range !6
64 define i32 @test7(i32* %p) {
65 ; CHECK: @test7(i32* %p)
66 ; CHECK: %a = load i32* %p, !range ![[MERGED_TEST7:[0-9]+]]
67 ; CHECK: %c = add i32 %a, %a
68 %a = load i32* %p, !range !7
69 %b = load i32* %p, !range !8
74 define i32 @test8(i32* %p) {
75 ; CHECK: @test8(i32* %p)
76 ; CHECK: %a = load i32* %p
78 ; CHECK: %c = add i32 %a, %a
79 %a = load i32* %p, !range !9
80 %b = load i32* %p, !range !10
85 ; CHECK: ![[DISJOINT_RANGE]] = metadata !{i32 0, i32 2, i32 3, i32 5}
86 ; CHECK: ![[MERGED_RANGE]] = metadata !{i32 0, i32 5}
87 ; CHECK: ![[MERGED_SIGNED_RANGE]] = metadata !{i32 -3, i32 -2, i32 1, i32 2}
88 ; CHECK: ![[MERGED_TEST6]] = metadata !{i32 10, i32 1}
89 ; CHECK: ![[MERGED_TEST7]] = metadata !{i32 3, i32 4, i32 5, i32 2}
91 !0 = metadata !{i32 0, i32 2}
92 !1 = metadata !{i32 3, i32 5}
93 !2 = metadata !{i32 2, i32 5}
94 !3 = metadata !{i32 -3, i32 -2}
95 !4 = metadata !{i32 1, i32 2}
96 !5 = metadata !{i32 10, i32 1}
97 !6 = metadata !{i32 12, i32 13}
98 !7 = metadata !{i32 1, i32 2, i32 3, i32 4}
99 !8 = metadata !{i32 5, i32 1}
100 !9 = metadata !{i32 1, i32 5}
101 !10 = metadata !{i32 5, i32 1}