1; RUN: not llvm-as < %s -o /dev/null 2>&1 | 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! 79 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} 86; CHECK: Intervals are overlapping 87 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} 94; CHECK: Intervals are contiguous 95 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} 102; CHECK: Intervals are not in order 103 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} 110; CHECK: Intervals are contiguous 111 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} 118; 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 143