range.ll 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. ; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
  2. define i32 @test1(i32* %p) {
  3. ; CHECK: @test1(i32* %p)
  4. ; CHECK: %a = load i32, i32* %p, !range !0
  5. ; CHECK: %c = add i32 %a, %a
  6. %a = load i32, i32* %p, !range !0
  7. %b = load i32, i32* %p, !range !0
  8. %c = add i32 %a, %b
  9. ret i32 %c
  10. }
  11. define i32 @test2(i32* %p) {
  12. ; CHECK: @test2(i32* %p)
  13. ; CHECK: %a = load i32, i32* %p
  14. ; CHECK-NOT: range
  15. ; CHECK: %c = add i32 %a, %a
  16. %a = load i32, i32* %p, !range !0
  17. %b = load i32, i32* %p
  18. %c = add i32 %a, %b
  19. ret i32 %c
  20. }
  21. define i32 @test3(i32* %p) {
  22. ; CHECK: @test3(i32* %p)
  23. ; CHECK: %a = load i32, i32* %p, !range ![[DISJOINT_RANGE:[0-9]+]]
  24. ; CHECK: %c = add i32 %a, %a
  25. %a = load i32, i32* %p, !range !0
  26. %b = load i32, i32* %p, !range !1
  27. %c = add i32 %a, %b
  28. ret i32 %c
  29. }
  30. define i32 @test4(i32* %p) {
  31. ; CHECK: @test4(i32* %p)
  32. ; CHECK: %a = load i32, i32* %p, !range ![[MERGED_RANGE:[0-9]+]]
  33. ; CHECK: %c = add i32 %a, %a
  34. %a = load i32, i32* %p, !range !0
  35. %b = load i32, i32* %p, !range !2
  36. %c = add i32 %a, %b
  37. ret i32 %c
  38. }
  39. define i32 @test5(i32* %p) {
  40. ; CHECK: @test5(i32* %p)
  41. ; CHECK: %a = load i32, i32* %p, !range ![[MERGED_SIGNED_RANGE:[0-9]+]]
  42. ; CHECK: %c = add i32 %a, %a
  43. %a = load i32, i32* %p, !range !3
  44. %b = load i32, i32* %p, !range !4
  45. %c = add i32 %a, %b
  46. ret i32 %c
  47. }
  48. define i32 @test6(i32* %p) {
  49. ; CHECK: @test6(i32* %p)
  50. ; CHECK: %a = load i32, i32* %p, !range ![[MERGED_TEST6:[0-9]+]]
  51. ; CHECK: %c = add i32 %a, %a
  52. %a = load i32, i32* %p, !range !5
  53. %b = load i32, i32* %p, !range !6
  54. %c = add i32 %a, %b
  55. ret i32 %c
  56. }
  57. define i32 @test7(i32* %p) {
  58. ; CHECK: @test7(i32* %p)
  59. ; CHECK: %a = load i32, i32* %p, !range ![[MERGED_TEST7:[0-9]+]]
  60. ; CHECK: %c = add i32 %a, %a
  61. %a = load i32, i32* %p, !range !7
  62. %b = load i32, i32* %p, !range !8
  63. %c = add i32 %a, %b
  64. ret i32 %c
  65. }
  66. define i32 @test8(i32* %p) {
  67. ; CHECK: @test8(i32* %p)
  68. ; CHECK: %a = load i32, i32* %p
  69. ; CHECK-NOT: range
  70. ; CHECK: %c = add i32 %a, %a
  71. %a = load i32, i32* %p, !range !9
  72. %b = load i32, i32* %p, !range !10
  73. %c = add i32 %a, %b
  74. ret i32 %c
  75. }
  76. ; CHECK: ![[DISJOINT_RANGE]] = !{i32 0, i32 2, i32 3, i32 5}
  77. ; CHECK: ![[MERGED_RANGE]] = !{i32 0, i32 5}
  78. ; CHECK: ![[MERGED_SIGNED_RANGE]] = !{i32 -3, i32 -2, i32 1, i32 2}
  79. ; CHECK: ![[MERGED_TEST6]] = !{i32 10, i32 1}
  80. ; CHECK: ![[MERGED_TEST7]] = !{i32 3, i32 4, i32 5, i32 2}
  81. !0 = !{i32 0, i32 2}
  82. !1 = !{i32 3, i32 5}
  83. !2 = !{i32 2, i32 5}
  84. !3 = !{i32 -3, i32 -2}
  85. !4 = !{i32 1, i32 2}
  86. !5 = !{i32 10, i32 1}
  87. !6 = !{i32 12, i32 13}
  88. !7 = !{i32 1, i32 2, i32 3, i32 4}
  89. !8 = !{i32 5, i32 1}
  90. !9 = !{i32 1, i32 5}
  91. !10 = !{i32 5, i32 1}