[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / Verifier / range-1.ll
blobed1b6dc60fa678e38d525401c30469a500ee676d
1 ; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
3 define void @f1(ptr %x) {
4 entry:
5   store i8 0, ptr %x, align 1, !range !0
6   ret void
8 !0 = !{i8 0, i8 1}
9 ; CHECK: Ranges are only for loads, calls and invokes!
10 ; CHECK-NEXT: store i8 0, ptr %x, align 1, !range !0
12 define i8 @f2(ptr %x) {
13 entry:
14   %y = load i8, ptr %x, align 1, !range !1
15   ret i8 %y
17 !1 = !{}
18 ; CHECK: It should have at least one range!
20 define i8 @f3(ptr %x) {
21 entry:
22   %y = load i8, ptr %x, align 1, !range !2
23   ret i8 %y
25 !2 = !{i8 0}
26 ; CHECK: Unfinished range!
28 define i8 @f4(ptr %x) {
29 entry:
30   %y = load i8, ptr %x, align 1, !range !3
31   ret i8 %y
33 !3 = !{double 0.0, i8 0}
34 ; CHECK: The lower limit must be an integer!
36 define i8 @f5(ptr %x) {
37 entry:
38   %y = load i8, ptr %x, align 1, !range !4
39   ret i8 %y
41 !4 = !{i8 0, double 0.0}
42 ; CHECK: The upper limit must be an integer!
44 define i8 @f6(ptr %x) {
45 entry:
46   %y = load i8, ptr %x, align 1, !range !5
47   ret i8 %y
49 !5 = !{i32 0, i8 0}
50 ; CHECK: Range types must match instruction type!
51 ; CHECK:  %y = load
53 define i8 @f7(ptr %x) {
54 entry:
55   %y = load i8, ptr %x, align 1, !range !6
56   ret i8 %y
58 !6 = !{i8 0, i32 0}
59 ; CHECK: Range types must match instruction type!
60 ; CHECK:  %y = load
62 define i8 @f8(ptr %x) {
63 entry:
64   %y = load i8, ptr %x, align 1, !range !7
65   ret i8 %y
67 !7 = !{i32 0, i32 0}
68 ; CHECK: Range types must match instruction type!
69 ; CHECK:  %y = load
71 define i8 @f9(ptr %x) {
72 entry:
73   %y = load i8, ptr %x, align 1, !range !8
74   ret i8 %y
76 !8 = !{i8 0, i8 0}
77 ; CHECK: Range must not be empty!
79 define i8 @f10(ptr %x) {
80 entry:
81   %y = load i8, ptr %x, align 1, !range !9
82   ret i8 %y
84 !9 = !{i8 0, i8 2, i8 1, i8 3}
85 ; CHECK: Intervals are overlapping
87 define i8 @f11(ptr %x) {
88 entry:
89   %y = load i8, ptr %x, align 1, !range !10
90   ret i8 %y
92 !10 = !{i8 0, i8 2, i8 2, i8 3}
93 ; CHECK: Intervals are contiguous
95 define i8 @f12(ptr %x) {
96 entry:
97   %y = load i8, ptr %x, align 1, !range !11
98   ret i8 %y
100 !11 = !{i8 1, i8 2, i8 -1, i8 0}
101 ; CHECK: Intervals are not in order
103 define i8 @f13(ptr %x) {
104 entry:
105   %y = load i8, ptr %x, align 1, !range !12
106   ret i8 %y
108 !12 = !{i8 1, i8 3, i8 5, i8 1}
109 ; CHECK: Intervals are contiguous
111 define i8 @f14(ptr %x) {
112 entry:
113   %y = load i8, ptr %x, align 1, !range !13
114   ret i8 %y
116 !13 = !{i8 1, i8 3, i8 5, i8 2}
117 ; CHECK: Intervals are overlapping
119 define i8 @f15(ptr %x) {
120 entry:
121   %y = load i8, ptr %x, align 1, !range !14
122   ret i8 %y
124 !14 = !{i8 10, i8 1, i8 12, i8 13}
125 ; CHECK: Intervals are overlapping
127 define i8 @f16(ptr %x) {
128 entry:
129   %y = load i8, ptr %x, align 1, !range !16
130   ret i8 %y
132 !16 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 2}
133 ; CHECK: Intervals are overlapping
135 define i8 @f17(ptr %x) {
136 entry:
137   %y = load i8, ptr %x, align 1, !range !17
138   ret i8 %y
140 !17 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 1}
141 ; CHECK: Intervals are contiguous
143 define i8 @f18() {
144 entry:
145   %y = call i8 undef(), !range !18
146   ret i8 %y
148 !18 = !{}
149 ; CHECK: It should have at least one range!
151 define <2 x i8> @vector_range_wrong_type(ptr %x) {
152   %y = load <2 x i8>, ptr %x, !range !19
153   ret <2 x i8> %y
155 !19 = !{i16 0, i16 10}
156 ; CHECK: Range types must match instruction type!
158 define i32 @range_assert(ptr %x) {
159   %y = load i32, ptr %x, !range !20
160   ret i32 %y
162 ; CHECK: The upper and lower limits cannot be the same value{{$}}
163 !20 = !{i32 123, i32 123}