blob: 7a317fca8f2cf04daba78b28abb4f15aa0f1345b [file] [log] [blame]
Rafael Espindola39dd3282012-03-24 00:14:51 +00001; RUN: not llvm-as < %s -o /dev/null |& FileCheck %s
2
3define void @f1(i8* %x) {
4entry:
5 store i8 0, i8* %x, align 1, !range !0
6 ret void
7}
8!0 = metadata !{i8 0, i8 1}
9; CHECK: Ranges are only for loads!
10; CHECK-NEXT: store i8 0, i8* %x, align 1, !range !0
11
12define i8 @f2(i8* %x) {
13entry:
14 %y = load i8* %x, align 1, !range !1
15 ret i8 %y
16}
17!1 = metadata !{}
18; CHECK: It should have at least one range!
19; CHECK-NEXT: metadata
20
21define i8 @f3(i8* %x) {
22entry:
23 %y = load i8* %x, align 1, !range !2
24 ret i8 %y
25}
26!2 = metadata !{i8 0}
27; CHECK: Unfinished range!
28
29define i8 @f4(i8* %x) {
30entry:
31 %y = load i8* %x, align 1, !range !3
32 ret i8 %y
33}
34!3 = metadata !{double 0.0, i8 0}
35; CHECK: The lower limit must be an integer!
36
37define i8 @f5(i8* %x) {
38entry:
39 %y = load i8* %x, align 1, !range !4
40 ret i8 %y
41}
42!4 = metadata !{i8 0, double 0.0}
43; CHECK: The upper limit must be an integer!
44
45define i8 @f6(i8* %x) {
46entry:
47 %y = load i8* %x, align 1, !range !5
48 ret i8 %y
49}
50!5 = metadata !{i32 0, i8 0}
51; CHECK: Range types must match load type!
52; CHECK: %y = load
53
54define i8 @f7(i8* %x) {
55entry:
56 %y = load i8* %x, align 1, !range !6
57 ret i8 %y
58}
59!6 = metadata !{i8 0, i32 0}
60; CHECK: Range types must match load type!
61; CHECK: %y = load
62
63define i8 @f8(i8* %x) {
64entry:
65 %y = load i8* %x, align 1, !range !7
66 ret i8 %y
67}
68!7 = metadata !{i32 0, i32 0}
69; CHECK: Range types must match load type!
70; CHECK: %y = load
71
72define i8 @f9(i8* %x) {
73entry:
74 %y = load i8* %x, align 1, !range !8
75 ret i8 %y
76}
77!8 = metadata !{i8 0, i8 0}
78; CHECK: Range must not be empty!
Rafael Espindolac49b29e2012-05-31 13:45:46 +000079
80define i8 @f10(i8* %x) {
81entry:
82 %y = load i8* %x, align 1, !range !9
83 ret i8 %y
84}
85!9 = metadata !{i8 0, i8 2, i8 1, i8 3}
Rafael Espindolaa1b95f52012-05-31 16:04:26 +000086; CHECK: Intervals are overlapping
Rafael Espindolac49b29e2012-05-31 13:45:46 +000087
88define i8 @f11(i8* %x) {
89entry:
90 %y = load i8* %x, align 1, !range !10
91 ret i8 %y
92}
93!10 = metadata !{i8 0, i8 2, i8 2, i8 3}
Rafael Espindolaa1b95f52012-05-31 16:04:26 +000094; CHECK: Intervals are contiguous
Rafael Espindolac49b29e2012-05-31 13:45:46 +000095
96define i8 @f12(i8* %x) {
97entry:
98 %y = load i8* %x, align 1, !range !11
99 ret i8 %y
100}
101!11 = metadata !{i8 1, i8 2, i8 -1, i8 0}
Rafael Espindolaa1b95f52012-05-31 16:04:26 +0000102; CHECK: Intervals are not in order
Rafael Espindolac49b29e2012-05-31 13:45:46 +0000103
104define i8 @f13(i8* %x) {
105entry:
106 %y = load i8* %x, align 1, !range !12
107 ret i8 %y
108}
109!12 = metadata !{i8 1, i8 3, i8 5, i8 1}
Rafael Espindolaa1b95f52012-05-31 16:04:26 +0000110; CHECK: Intervals are contiguous
Rafael Espindolac49b29e2012-05-31 13:45:46 +0000111
112define i8 @f14(i8* %x) {
113entry:
114 %y = load i8* %x, align 1, !range !13
115 ret i8 %y
116}
117!13 = metadata !{i8 1, i8 3, i8 5, i8 2}
Rafael Espindolaa1b95f52012-05-31 16:04:26 +0000118; CHECK: Intervals are overlapping
119
120define i8 @f15(i8* %x) {
121entry:
122 %y = load i8* %x, align 1, !range !14
123 ret i8 %y
124}
125!14 = metadata !{i8 10, i8 1, i8 12, i8 13}
126; CHECK: Intervals are overlapping
127
128define i8 @f16(i8* %x) {
129entry:
130 %y = load i8* %x, align 1, !range !16
131 ret i8 %y
132}
133!16 = metadata !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 2}
134; CHECK: Intervals are overlapping
135
136define i8 @f17(i8* %x) {
137entry:
138 %y = load i8* %x, align 1, !range !17
139 ret i8 %y
140}
141!17 = metadata !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 1}
142; CHECK: Intervals are contiguous