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