range-1.ll 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. ; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
  2. define void @f1(i8* %x) {
  3. entry:
  4. store i8 0, i8* %x, align 1, !range !0
  5. ret void
  6. }
  7. !0 = !{i8 0, i8 1}
  8. ; CHECK: Ranges are only for loads, calls and invokes!
  9. ; CHECK-NEXT: store i8 0, i8* %x, align 1, !range !0
  10. define i8 @f2(i8* %x) {
  11. entry:
  12. %y = load i8, i8* %x, align 1, !range !1
  13. ret i8 %y
  14. }
  15. !1 = !{}
  16. ; CHECK: It should have at least one range!
  17. define i8 @f3(i8* %x) {
  18. entry:
  19. %y = load i8, i8* %x, align 1, !range !2
  20. ret i8 %y
  21. }
  22. !2 = !{i8 0}
  23. ; CHECK: Unfinished range!
  24. define i8 @f4(i8* %x) {
  25. entry:
  26. %y = load i8, i8* %x, align 1, !range !3
  27. ret i8 %y
  28. }
  29. !3 = !{double 0.0, i8 0}
  30. ; CHECK: The lower limit must be an integer!
  31. define i8 @f5(i8* %x) {
  32. entry:
  33. %y = load i8, i8* %x, align 1, !range !4
  34. ret i8 %y
  35. }
  36. !4 = !{i8 0, double 0.0}
  37. ; CHECK: The upper limit must be an integer!
  38. define i8 @f6(i8* %x) {
  39. entry:
  40. %y = load i8, i8* %x, align 1, !range !5
  41. ret i8 %y
  42. }
  43. !5 = !{i32 0, i8 0}
  44. ; CHECK: Range types must match instruction type!
  45. ; CHECK: %y = load
  46. define i8 @f7(i8* %x) {
  47. entry:
  48. %y = load i8, i8* %x, align 1, !range !6
  49. ret i8 %y
  50. }
  51. !6 = !{i8 0, i32 0}
  52. ; CHECK: Range types must match instruction type!
  53. ; CHECK: %y = load
  54. define i8 @f8(i8* %x) {
  55. entry:
  56. %y = load i8, i8* %x, align 1, !range !7
  57. ret i8 %y
  58. }
  59. !7 = !{i32 0, i32 0}
  60. ; CHECK: Range types must match instruction type!
  61. ; CHECK: %y = load
  62. define i8 @f9(i8* %x) {
  63. entry:
  64. %y = load i8, i8* %x, align 1, !range !8
  65. ret i8 %y
  66. }
  67. !8 = !{i8 0, i8 0}
  68. ; CHECK: Range must not be empty!
  69. define i8 @f10(i8* %x) {
  70. entry:
  71. %y = load i8, i8* %x, align 1, !range !9
  72. ret i8 %y
  73. }
  74. !9 = !{i8 0, i8 2, i8 1, i8 3}
  75. ; CHECK: Intervals are overlapping
  76. define i8 @f11(i8* %x) {
  77. entry:
  78. %y = load i8, i8* %x, align 1, !range !10
  79. ret i8 %y
  80. }
  81. !10 = !{i8 0, i8 2, i8 2, i8 3}
  82. ; CHECK: Intervals are contiguous
  83. define i8 @f12(i8* %x) {
  84. entry:
  85. %y = load i8, i8* %x, align 1, !range !11
  86. ret i8 %y
  87. }
  88. !11 = !{i8 1, i8 2, i8 -1, i8 0}
  89. ; CHECK: Intervals are not in order
  90. define i8 @f13(i8* %x) {
  91. entry:
  92. %y = load i8, i8* %x, align 1, !range !12
  93. ret i8 %y
  94. }
  95. !12 = !{i8 1, i8 3, i8 5, i8 1}
  96. ; CHECK: Intervals are contiguous
  97. define i8 @f14(i8* %x) {
  98. entry:
  99. %y = load i8, i8* %x, align 1, !range !13
  100. ret i8 %y
  101. }
  102. !13 = !{i8 1, i8 3, i8 5, i8 2}
  103. ; CHECK: Intervals are overlapping
  104. define i8 @f15(i8* %x) {
  105. entry:
  106. %y = load i8, i8* %x, align 1, !range !14
  107. ret i8 %y
  108. }
  109. !14 = !{i8 10, i8 1, i8 12, i8 13}
  110. ; CHECK: Intervals are overlapping
  111. define i8 @f16(i8* %x) {
  112. entry:
  113. %y = load i8, i8* %x, align 1, !range !16
  114. ret i8 %y
  115. }
  116. !16 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 2}
  117. ; CHECK: Intervals are overlapping
  118. define i8 @f17(i8* %x) {
  119. entry:
  120. %y = load i8, i8* %x, align 1, !range !17
  121. ret i8 %y
  122. }
  123. !17 = !{i8 1, i8 3, i8 4, i8 5, i8 6, i8 1}
  124. ; CHECK: Intervals are contiguous
  125. define i8 @f18() {
  126. entry:
  127. %y = call i8 undef(), !range !18
  128. ret i8 %y
  129. }
  130. !18 = !{}
  131. ; CHECK: It should have at least one range!