range-2.ll 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. ; RUN: llvm-as < %s -o /dev/null
  2. define i8 @f1(i8* %x) {
  3. entry:
  4. %y = load i8, i8* %x, align 1, !range !0
  5. ret i8 %y
  6. }
  7. !0 = !{i8 0, i8 1}
  8. define i8 @f2(i8* %x) {
  9. entry:
  10. %y = load i8, i8* %x, align 1, !range !1
  11. ret i8 %y
  12. }
  13. !1 = !{i8 255, i8 1}
  14. define i8 @f3(i8* %x) {
  15. entry:
  16. %y = load i8, i8* %x, align 1, !range !2
  17. ret i8 %y
  18. }
  19. !2 = !{i8 1, i8 3, i8 5, i8 42}
  20. define i8 @f4(i8* %x) {
  21. entry:
  22. %y = load i8, i8* %x, align 1, !range !3
  23. ret i8 %y
  24. }
  25. !3 = !{i8 -1, i8 0, i8 1, i8 2}
  26. define i8 @f5(i8* %x) {
  27. entry:
  28. %y = load i8, i8* %x, align 1, !range !4
  29. ret i8 %y
  30. }
  31. !4 = !{i8 -1, i8 0, i8 1, i8 -2}
  32. ; We can annotate the range of the return value of a CALL.
  33. define void @call_all(i8* %x) {
  34. entry:
  35. %v1 = call i8 @f1(i8* %x), !range !0
  36. %v2 = call i8 @f2(i8* %x), !range !1
  37. %v3 = call i8 @f3(i8* %x), !range !2
  38. %v4 = call i8 @f4(i8* %x), !range !3
  39. %v5 = call i8 @f5(i8* %x), !range !4
  40. ret void
  41. }
  42. ; We can annotate the range of the return value of an INVOKE.
  43. define void @invoke_all(i8* %x) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
  44. entry:
  45. %v1 = invoke i8 @f1(i8* %x) to label %cont unwind label %lpad, !range !0
  46. %v2 = invoke i8 @f2(i8* %x) to label %cont unwind label %lpad, !range !1
  47. %v3 = invoke i8 @f3(i8* %x) to label %cont unwind label %lpad, !range !2
  48. %v4 = invoke i8 @f4(i8* %x) to label %cont unwind label %lpad, !range !3
  49. %v5 = invoke i8 @f5(i8* %x) to label %cont unwind label %lpad, !range !4
  50. cont:
  51. ret void
  52. lpad:
  53. %4 = landingpad { i8*, i32 }
  54. filter [0 x i8*] zeroinitializer
  55. ret void
  56. }
  57. declare i32 @__gxx_personality_v0(...)