[InstCombine] Signed saturation tests. NFC
[llvm-complete.git] / test / Transforms / GVN / range.ll
blobfd5fa56b617dac3a61302c836649bbccf2519490
1 ; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
3 define i32 @test1(i32* %p) {
4 ; CHECK-LABEL: @test1(i32* %p)
5 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE0:[0-9]+]]
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
13 define i32 @test2(i32* %p) {
14 ; CHECK-LABEL: @test2(i32* %p)
15 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE0]]
16 ; CHECK: %c = add i32 %a, %a
17   %a = load i32, i32* %p, !range !0
18   %b = load i32, i32* %p
19   %c = add i32 %a, %b
20   ret i32 %c
23 define i32 @test3(i32* %p) {
24 ; CHECK-LABEL: @test3(i32* %p)
25 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE0]]
26 ; CHECK: %c = add i32 %a, %a
27   %a = load i32, i32* %p, !range !0
28   %b = load i32, i32* %p, !range !1
29   %c = add i32 %a, %b
30   ret i32 %c
33 define i32 @test4(i32* %p) {
34 ; CHECK-LABEL: @test4(i32* %p)
35 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE0]]
36 ; CHECK: %c = add i32 %a, %a
37   %a = load i32, i32* %p, !range !0
38   %b = load i32, i32* %p, !range !2
39   %c = add i32 %a, %b
40   ret i32 %c
43 define i32 @test5(i32* %p) {
44 ; CHECK-LABEL: @test5(i32* %p)
45 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE3:[0-9]+]]
46 ; CHECK: %c = add i32 %a, %a
47   %a = load i32, i32* %p, !range !3
48   %b = load i32, i32* %p, !range !4
49   %c = add i32 %a, %b
50   ret i32 %c
53 define i32 @test6(i32* %p) {
54 ; CHECK-LABEL: @test6(i32* %p)
55 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE5:[0-9]+]]
56 ; CHECK: %c = add i32 %a, %a
57   %a = load i32, i32* %p, !range !5
58   %b = load i32, i32* %p, !range !6
59   %c = add i32 %a, %b
60   ret i32 %c
63 define i32 @test7(i32* %p) {
64 ; CHECK-LABEL: @test7(i32* %p)
65 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE7:[0-9]+]]
66 ; CHECK: %c = add i32 %a, %a
67   %a = load i32, i32* %p, !range !7
68   %b = load i32, i32* %p, !range !8
69   %c = add i32 %a, %b
70   ret i32 %c
73 define i32 @test8(i32* %p) {
74 ; CHECK-LABEL: @test8(i32* %p)
75 ; CHECK: %a = load i32, i32* %p, !range ![[RANGE9:[0-9]+]]
76 ; CHECK-NOT: range
77 ; CHECK: %c = add i32 %a, %a
78   %a = load i32, i32* %p, !range !9
79   %b = load i32, i32* %p, !range !10
80   %c = add i32 %a, %b
81   ret i32 %c
84 ; CHECK: ![[RANGE0]] = !{i32 0, i32 2}
85 ; CHECK: ![[RANGE3]] = !{i32 -5, i32 -2}
86 ; CHECK: ![[RANGE5]] = !{i32 10, i32 1}
87 ; CHECK: ![[RANGE7]] = !{i32 1, i32 2, i32 3, i32 4}
88 ; CHECK: ![[RANGE9]] = !{i32 1, i32 5}
90 !0 = !{i32 0, i32 2}
91 !1 = !{i32 3, i32 5}
92 !2 = !{i32 2, i32 5}
93 !3 = !{i32 -5, i32 -2}
94 !4 = !{i32 1, i32 5}
95 !5 = !{i32 10, i32 1}
96 !6 = !{i32 12, i32 16}
97 !7 = !{i32 1, i32 2, i32 3, i32 4}
98 !8 = !{i32 5, i32 1}
99 !9 = !{i32 1, i32 5}
100 !10 = !{i32 5, i32 1}