comparison test/Verifier/range-1.ll @ 83:60c9769439b8 LLVM3.7

LLVM 3.7
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 18 Feb 2015 14:55:36 +0900
parents 54457678186b
children afa8332a0e37
comparison
equal deleted inserted replaced
78:af83660cff7b 83:60c9769439b8
3 define void @f1(i8* %x) { 3 define void @f1(i8* %x) {
4 entry: 4 entry:
5 store i8 0, i8* %x, align 1, !range !0 5 store i8 0, i8* %x, align 1, !range !0
6 ret void 6 ret void
7 } 7 }
8 !0 = metadata !{i8 0, i8 1} 8 !0 = !{i8 0, i8 1}
9 ; CHECK: Ranges are only for loads, calls and invokes! 9 ; CHECK: Ranges are only for loads, calls and invokes!
10 ; CHECK-NEXT: store i8 0, i8* %x, align 1, !range !0 10 ; CHECK-NEXT: store i8 0, i8* %x, align 1, !range !0
11 11
12 define i8 @f2(i8* %x) { 12 define i8 @f2(i8* %x) {
13 entry: 13 entry:
14 %y = load i8* %x, align 1, !range !1 14 %y = load i8* %x, align 1, !range !1
15 ret i8 %y 15 ret i8 %y
16 } 16 }
17 !1 = metadata !{} 17 !1 = !{}
18 ; CHECK: It should have at least one range! 18 ; CHECK: It should have at least one range!
19 ; CHECK-NEXT: metadata
20 19
21 define i8 @f3(i8* %x) { 20 define i8 @f3(i8* %x) {
22 entry: 21 entry:
23 %y = load i8* %x, align 1, !range !2 22 %y = load i8* %x, align 1, !range !2
24 ret i8 %y 23 ret i8 %y
25 } 24 }
26 !2 = metadata !{i8 0} 25 !2 = !{i8 0}
27 ; CHECK: Unfinished range! 26 ; CHECK: Unfinished range!
28 27
29 define i8 @f4(i8* %x) { 28 define i8 @f4(i8* %x) {
30 entry: 29 entry:
31 %y = load i8* %x, align 1, !range !3 30 %y = load i8* %x, align 1, !range !3
32 ret i8 %y 31 ret i8 %y
33 } 32 }
34 !3 = metadata !{double 0.0, i8 0} 33 !3 = !{double 0.0, i8 0}
35 ; CHECK: The lower limit must be an integer! 34 ; CHECK: The lower limit must be an integer!
36 35
37 define i8 @f5(i8* %x) { 36 define i8 @f5(i8* %x) {
38 entry: 37 entry:
39 %y = load i8* %x, align 1, !range !4 38 %y = load i8* %x, align 1, !range !4
40 ret i8 %y 39 ret i8 %y
41 } 40 }
42 !4 = metadata !{i8 0, double 0.0} 41 !4 = !{i8 0, double 0.0}
43 ; CHECK: The upper limit must be an integer! 42 ; CHECK: The upper limit must be an integer!
44 43
45 define i8 @f6(i8* %x) { 44 define i8 @f6(i8* %x) {
46 entry: 45 entry:
47 %y = load i8* %x, align 1, !range !5 46 %y = load i8* %x, align 1, !range !5
48 ret i8 %y 47 ret i8 %y
49 } 48 }
50 !5 = metadata !{i32 0, i8 0} 49 !5 = !{i32 0, i8 0}
51 ; CHECK: Range types must match load type! 50 ; CHECK: Range types must match instruction type!
52 ; CHECK: %y = load 51 ; CHECK: %y = load
53 52
54 define i8 @f7(i8* %x) { 53 define i8 @f7(i8* %x) {
55 entry: 54 entry:
56 %y = load i8* %x, align 1, !range !6 55 %y = load i8* %x, align 1, !range !6
57 ret i8 %y 56 ret i8 %y
58 } 57 }
59 !6 = metadata !{i8 0, i32 0} 58 !6 = !{i8 0, i32 0}
60 ; CHECK: Range types must match load type! 59 ; CHECK: Range types must match instruction type!
61 ; CHECK: %y = load 60 ; CHECK: %y = load
62 61
63 define i8 @f8(i8* %x) { 62 define i8 @f8(i8* %x) {
64 entry: 63 entry:
65 %y = load i8* %x, align 1, !range !7 64 %y = load i8* %x, align 1, !range !7
66 ret i8 %y 65 ret i8 %y
67 } 66 }
68 !7 = metadata !{i32 0, i32 0} 67 !7 = !{i32 0, i32 0}
69 ; CHECK: Range types must match load type! 68 ; CHECK: Range types must match instruction type!
70 ; CHECK: %y = load 69 ; CHECK: %y = load
71 70
72 define i8 @f9(i8* %x) { 71 define i8 @f9(i8* %x) {
73 entry: 72 entry:
74 %y = load i8* %x, align 1, !range !8 73 %y = load i8* %x, align 1, !range !8
75 ret i8 %y 74 ret i8 %y
76 } 75 }
77 !8 = metadata !{i8 0, i8 0} 76 !8 = !{i8 0, i8 0}
78 ; CHECK: Range must not be empty! 77 ; CHECK: Range must not be empty!
79 78
80 define i8 @f10(i8* %x) { 79 define i8 @f10(i8* %x) {
81 entry: 80 entry:
82 %y = load i8* %x, align 1, !range !9 81 %y = load i8* %x, align 1, !range !9
83 ret i8 %y 82 ret i8 %y
84 } 83 }
85 !9 = metadata !{i8 0, i8 2, i8 1, i8 3} 84 !9 = !{i8 0, i8 2, i8 1, i8 3}
86 ; CHECK: Intervals are overlapping 85 ; CHECK: Intervals are overlapping
87 86
88 define i8 @f11(i8* %x) { 87 define i8 @f11(i8* %x) {
89 entry: 88 entry:
90 %y = load i8* %x, align 1, !range !10 89 %y = load i8* %x, align 1, !range !10
91 ret i8 %y 90 ret i8 %y
92 } 91 }
93 !10 = metadata !{i8 0, i8 2, i8 2, i8 3} 92 !10 = !{i8 0, i8 2, i8 2, i8 3}
94 ; CHECK: Intervals are contiguous 93 ; CHECK: Intervals are contiguous
95 94
96 define i8 @f12(i8* %x) { 95 define i8 @f12(i8* %x) {
97 entry: 96 entry:
98 %y = load i8* %x, align 1, !range !11 97 %y = load i8* %x, align 1, !range !11
99 ret i8 %y 98 ret i8 %y
100 } 99 }
101 !11 = metadata !{i8 1, i8 2, i8 -1, i8 0} 100 !11 = !{i8 1, i8 2, i8 -1, i8 0}
102 ; CHECK: Intervals are not in order 101 ; CHECK: Intervals are not in order
103 102
104 define i8 @f13(i8* %x) { 103 define i8 @f13(i8* %x) {
105 entry: 104 entry:
106 %y = load i8* %x, align 1, !range !12 105 %y = load i8* %x, align 1, !range !12
107 ret i8 %y 106 ret i8 %y
108 } 107 }
109 !12 = metadata !{i8 1, i8 3, i8 5, i8 1} 108 !12 = !{i8 1, i8 3, i8 5, i8 1}
110 ; CHECK: Intervals are contiguous 109 ; CHECK: Intervals are contiguous
111 110
112 define i8 @f14(i8* %x) { 111 define i8 @f14(i8* %x) {
113 entry: 112 entry:
114 %y = load i8* %x, align 1, !range !13 113 %y = load i8* %x, align 1, !range !13
115 ret i8 %y 114 ret i8 %y
116 } 115 }
117 !13 = metadata !{i8 1, i8 3, i8 5, i8 2} 116 !13 = !{i8 1, i8 3, i8 5, i8 2}
118 ; CHECK: Intervals are overlapping 117 ; CHECK: Intervals are overlapping
119 118
120 define i8 @f15(i8* %x) { 119 define i8 @f15(i8* %x) {
121 entry: 120 entry:
122 %y = load i8* %x, align 1, !range !14 121 %y = load i8* %x, align 1, !range !14
123 ret i8 %y 122 ret i8 %y
124 } 123 }
125 !14 = metadata !{i8 10, i8 1, i8 12, i8 13} 124 !14 = !{i8 10, i8 1, i8 12, i8 13}
126 ; CHECK: Intervals are overlapping 125 ; CHECK: Intervals are overlapping
127 126
128 define i8 @f16(i8* %x) { 127 define i8 @f16(i8* %x) {
129 entry: 128 entry:
130 %y = load i8* %x, align 1, !range !16 129 %y = load i8* %x, align 1, !range !16
131 ret i8 %y 130 ret i8 %y
132 } 131 }
133 !16 = metadata !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 2} 132 !16 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 2}
134 ; CHECK: Intervals are overlapping 133 ; CHECK: Intervals are overlapping
135 134
136 define i8 @f17(i8* %x) { 135 define i8 @f17(i8* %x) {
137 entry: 136 entry:
138 %y = load i8* %x, align 1, !range !17 137 %y = load i8* %x, align 1, !range !17
139 ret i8 %y 138 ret i8 %y
140 } 139 }
141 !17 = metadata !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 1} 140 !17 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 1}
142 ; CHECK: Intervals are contiguous 141 ; CHECK: Intervals are contiguous
142
143 define i8 @f18() {
144 entry:
145 %y = call i8 undef(), !range !18
146 ret i8 %y
147 }
148 !18 = !{}
149 ; CHECK: It should have at least one range!