blob: 170badc751a15b86a8afe261863233bc0257c031 [file] [log] [blame]
Chandler Carruth5da53432012-07-02 18:37:59 +00001; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
Rafael Espindolaef9f5502012-03-24 00:14:51 +00002
3define void @f1(i8* %x) {
4entry:
5 store i8 0, i8* %x, align 1, !range !0
6 ret void
7}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +00008!0 = !{i8 0, i8 1}
Jingyue Wu37fcb592014-06-19 16:50:16 +00009; CHECK: Ranges are only for loads, calls and invokes!
Rafael Espindolaef9f5502012-03-24 00:14:51 +000010; CHECK-NEXT: store i8 0, i8* %x, align 1, !range !0
11
12define i8 @f2(i8* %x) {
13entry:
David Blaikiea79ac142015-02-27 21:17:42 +000014 %y = load i8, i8* %x, align 1, !range !1
Rafael Espindolaef9f5502012-03-24 00:14:51 +000015 ret i8 %y
16}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000017!1 = !{}
Rafael Espindolaef9f5502012-03-24 00:14:51 +000018; CHECK: It should have at least one range!
Rafael Espindolaef9f5502012-03-24 00:14:51 +000019
20define i8 @f3(i8* %x) {
21entry:
David Blaikiea79ac142015-02-27 21:17:42 +000022 %y = load i8, i8* %x, align 1, !range !2
Rafael Espindolaef9f5502012-03-24 00:14:51 +000023 ret i8 %y
24}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000025!2 = !{i8 0}
Rafael Espindolaef9f5502012-03-24 00:14:51 +000026; CHECK: Unfinished range!
27
28define i8 @f4(i8* %x) {
29entry:
David Blaikiea79ac142015-02-27 21:17:42 +000030 %y = load i8, i8* %x, align 1, !range !3
Rafael Espindolaef9f5502012-03-24 00:14:51 +000031 ret i8 %y
32}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000033!3 = !{double 0.0, i8 0}
Rafael Espindolaef9f5502012-03-24 00:14:51 +000034; CHECK: The lower limit must be an integer!
35
36define i8 @f5(i8* %x) {
37entry:
David Blaikiea79ac142015-02-27 21:17:42 +000038 %y = load i8, i8* %x, align 1, !range !4
Rafael Espindolaef9f5502012-03-24 00:14:51 +000039 ret i8 %y
40}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000041!4 = !{i8 0, double 0.0}
Rafael Espindolaef9f5502012-03-24 00:14:51 +000042; CHECK: The upper limit must be an integer!
43
44define i8 @f6(i8* %x) {
45entry:
David Blaikiea79ac142015-02-27 21:17:42 +000046 %y = load i8, i8* %x, align 1, !range !5
Rafael Espindolaef9f5502012-03-24 00:14:51 +000047 ret i8 %y
48}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000049!5 = !{i32 0, i8 0}
Philip Reamesbf9676f2014-10-20 23:52:07 +000050; CHECK: Range types must match instruction type!
Rafael Espindolaef9f5502012-03-24 00:14:51 +000051; CHECK: %y = load
52
53define i8 @f7(i8* %x) {
54entry:
David Blaikiea79ac142015-02-27 21:17:42 +000055 %y = load i8, i8* %x, align 1, !range !6
Rafael Espindolaef9f5502012-03-24 00:14:51 +000056 ret i8 %y
57}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000058!6 = !{i8 0, i32 0}
Philip Reamesbf9676f2014-10-20 23:52:07 +000059; CHECK: Range types must match instruction type!
Rafael Espindolaef9f5502012-03-24 00:14:51 +000060; CHECK: %y = load
61
62define i8 @f8(i8* %x) {
63entry:
David Blaikiea79ac142015-02-27 21:17:42 +000064 %y = load i8, i8* %x, align 1, !range !7
Rafael Espindolaef9f5502012-03-24 00:14:51 +000065 ret i8 %y
66}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000067!7 = !{i32 0, i32 0}
Philip Reamesbf9676f2014-10-20 23:52:07 +000068; CHECK: Range types must match instruction type!
Rafael Espindolaef9f5502012-03-24 00:14:51 +000069; CHECK: %y = load
70
71define i8 @f9(i8* %x) {
72entry:
David Blaikiea79ac142015-02-27 21:17:42 +000073 %y = load i8, i8* %x, align 1, !range !8
Rafael Espindolaef9f5502012-03-24 00:14:51 +000074 ret i8 %y
75}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000076!8 = !{i8 0, i8 0}
Rafael Espindolaef9f5502012-03-24 00:14:51 +000077; CHECK: Range must not be empty!
Rafael Espindola97d77872012-05-31 13:45:46 +000078
79define i8 @f10(i8* %x) {
80entry:
David Blaikiea79ac142015-02-27 21:17:42 +000081 %y = load i8, i8* %x, align 1, !range !9
Rafael Espindola97d77872012-05-31 13:45:46 +000082 ret i8 %y
83}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000084!9 = !{i8 0, i8 2, i8 1, i8 3}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +000085; CHECK: Intervals are overlapping
Rafael Espindola97d77872012-05-31 13:45:46 +000086
87define i8 @f11(i8* %x) {
88entry:
David Blaikiea79ac142015-02-27 21:17:42 +000089 %y = load i8, i8* %x, align 1, !range !10
Rafael Espindola97d77872012-05-31 13:45:46 +000090 ret i8 %y
91}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000092!10 = !{i8 0, i8 2, i8 2, i8 3}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +000093; CHECK: Intervals are contiguous
Rafael Espindola97d77872012-05-31 13:45:46 +000094
95define i8 @f12(i8* %x) {
96entry:
David Blaikiea79ac142015-02-27 21:17:42 +000097 %y = load i8, i8* %x, align 1, !range !11
Rafael Espindola97d77872012-05-31 13:45:46 +000098 ret i8 %y
99}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000100!11 = !{i8 1, i8 2, i8 -1, i8 0}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000101; CHECK: Intervals are not in order
Rafael Espindola97d77872012-05-31 13:45:46 +0000102
103define i8 @f13(i8* %x) {
104entry:
David Blaikiea79ac142015-02-27 21:17:42 +0000105 %y = load i8, i8* %x, align 1, !range !12
Rafael Espindola97d77872012-05-31 13:45:46 +0000106 ret i8 %y
107}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000108!12 = !{i8 1, i8 3, i8 5, i8 1}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000109; CHECK: Intervals are contiguous
Rafael Espindola97d77872012-05-31 13:45:46 +0000110
111define i8 @f14(i8* %x) {
112entry:
David Blaikiea79ac142015-02-27 21:17:42 +0000113 %y = load i8, i8* %x, align 1, !range !13
Rafael Espindola97d77872012-05-31 13:45:46 +0000114 ret i8 %y
115}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000116!13 = !{i8 1, i8 3, i8 5, i8 2}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000117; CHECK: Intervals are overlapping
118
119define i8 @f15(i8* %x) {
120entry:
David Blaikiea79ac142015-02-27 21:17:42 +0000121 %y = load i8, i8* %x, align 1, !range !14
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000122 ret i8 %y
123}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000124!14 = !{i8 10, i8 1, i8 12, i8 13}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000125; CHECK: Intervals are overlapping
126
127define i8 @f16(i8* %x) {
128entry:
David Blaikiea79ac142015-02-27 21:17:42 +0000129 %y = load i8, i8* %x, align 1, !range !16
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000130 ret i8 %y
131}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000132!16 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 2}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000133; CHECK: Intervals are overlapping
134
135define i8 @f17(i8* %x) {
136entry:
David Blaikiea79ac142015-02-27 21:17:42 +0000137 %y = load i8, i8* %x, align 1, !range !17
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000138 ret i8 %y
139}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000140!17 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 1}
Rafael Espindolae3c5f3e2012-05-31 16:04:26 +0000141; CHECK: Intervals are contiguous
Philip Reamesbf9676f2014-10-20 23:52:07 +0000142
143define i8 @f18() {
144entry:
145 %y = call i8 undef(), !range !18
146 ret i8 %y
147}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000148!18 = !{}
Philip Reamesbf9676f2014-10-20 23:52:07 +0000149; CHECK: It should have at least one range!