• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
2
3define i32 @test1(i32* %p) {
4; CHECK: @test1(i32* %p)
5; CHECK: %a = load i32, i32* %p, !range !0
6; CHECK: %c = add i32 %a, %a
7  %a = load i32, i32* %p, !range !0
8  %b = load i32, i32* %p, !range !0
9  %c = add i32 %a, %b
10  ret i32 %c
11}
12
13define i32 @test2(i32* %p) {
14; CHECK: @test2(i32* %p)
15; CHECK: %a = load i32, i32* %p
16; CHECK-NOT: range
17; CHECK: %c = add i32 %a, %a
18  %a = load i32, i32* %p, !range !0
19  %b = load i32, i32* %p
20  %c = add i32 %a, %b
21  ret i32 %c
22}
23
24define i32 @test3(i32* %p) {
25; CHECK: @test3(i32* %p)
26; CHECK: %a = load i32, i32* %p, !range ![[DISJOINT_RANGE:[0-9]+]]
27; CHECK: %c = add i32 %a, %a
28  %a = load i32, i32* %p, !range !0
29  %b = load i32, i32* %p, !range !1
30  %c = add i32 %a, %b
31  ret i32 %c
32}
33
34define i32 @test4(i32* %p) {
35; CHECK: @test4(i32* %p)
36; CHECK: %a = load i32, i32* %p, !range ![[MERGED_RANGE:[0-9]+]]
37; CHECK: %c = add i32 %a, %a
38  %a = load i32, i32* %p, !range !0
39  %b = load i32, i32* %p, !range !2
40  %c = add i32 %a, %b
41  ret i32 %c
42}
43
44define i32 @test5(i32* %p) {
45; CHECK: @test5(i32* %p)
46; CHECK: %a = load i32, i32* %p, !range ![[MERGED_SIGNED_RANGE:[0-9]+]]
47; CHECK: %c = add i32 %a, %a
48  %a = load i32, i32* %p, !range !3
49  %b = load i32, i32* %p, !range !4
50  %c = add i32 %a, %b
51  ret i32 %c
52}
53
54define i32 @test6(i32* %p) {
55; CHECK: @test6(i32* %p)
56; CHECK: %a = load i32, i32* %p, !range ![[MERGED_TEST6:[0-9]+]]
57; CHECK: %c = add i32 %a, %a
58  %a = load i32, i32* %p, !range !5
59  %b = load i32, i32* %p, !range !6
60  %c = add i32 %a, %b
61  ret i32 %c
62}
63
64define i32 @test7(i32* %p) {
65; CHECK: @test7(i32* %p)
66; CHECK: %a = load i32, i32* %p, !range ![[MERGED_TEST7:[0-9]+]]
67; CHECK: %c = add i32 %a, %a
68  %a = load i32, i32* %p, !range !7
69  %b = load i32, i32* %p, !range !8
70  %c = add i32 %a, %b
71  ret i32 %c
72}
73
74define i32 @test8(i32* %p) {
75; CHECK: @test8(i32* %p)
76; CHECK: %a = load i32, i32* %p
77; CHECK-NOT: range
78; CHECK: %c = add i32 %a, %a
79  %a = load i32, i32* %p, !range !9
80  %b = load i32, i32* %p, !range !10
81  %c = add i32 %a, %b
82  ret i32 %c
83}
84
85; CHECK: ![[DISJOINT_RANGE]] = !{i32 0, i32 2, i32 3, i32 5}
86; CHECK: ![[MERGED_RANGE]] = !{i32 0, i32 5}
87; CHECK: ![[MERGED_SIGNED_RANGE]] = !{i32 -3, i32 -2, i32 1, i32 2}
88; CHECK: ![[MERGED_TEST6]] = !{i32 10, i32 1}
89; CHECK: ![[MERGED_TEST7]] = !{i32 3, i32 4, i32 5, i32 2}
90
91!0 = !{i32 0, i32 2}
92!1 = !{i32 3, i32 5}
93!2 = !{i32 2, i32 5}
94!3 = !{i32 -3, i32 -2}
95!4 = !{i32 1, i32 2}
96!5 = !{i32 10, i32 1}
97!6 = !{i32 12, i32 13}
98!7 = !{i32 1, i32 2, i32 3, i32 4}
99!8 = !{i32 5, i32 1}
100!9 = !{i32 1, i32 5}
101!10 = !{i32 5, i32 1}
102