[X86] Call getScalarSizeInBits() instead of getScalarType().getScalarSizeInBits(...
[oota-llvm.git] / test / Transforms / GVN / range.ll
1 ; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
2
3 define i32 @test1(i32* %p) {
4 ; CHECK-LABEL: @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
13 define i32 @test2(i32* %p) {
14 ; CHECK-LABEL: @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
24 define i32 @test3(i32* %p) {
25 ; CHECK-LABEL: @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
34 define i32 @test4(i32* %p) {
35 ; CHECK-LABEL: @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
44 define i32 @test5(i32* %p) {
45 ; CHECK-LABEL: @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
54 define i32 @test6(i32* %p) {
55 ; CHECK-LABEL: @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
64 define i32 @test7(i32* %p) {
65 ; CHECK-LABEL: @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
74 define i32 @test8(i32* %p) {
75 ; CHECK-LABEL: @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 -5, i32 -2, i32 1, i32 5}
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 -5, i32 -2}
95 !4 = !{i32 1, i32 5}
96 !5 = !{i32 10, i32 1}
97 !6 = !{i32 12, i32 16}
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}