call-and-invoke-with-ranges.ll 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. ; RUN: opt -mergefunc -S < %s | FileCheck %s
  2. define i8 @call_with_range() {
  3. bitcast i8 0 to i8 ; dummy to make the function large enough
  4. %out = call i8 @dummy(), !range !0
  5. ret i8 %out
  6. }
  7. define i8 @call_no_range() {
  8. ; CHECK-LABEL: @call_no_range
  9. ; CHECK-NEXT: bitcast i8 0 to i8
  10. ; CHECK-NEXT: %out = call i8 @dummy()
  11. ; CHECK-NEXT: ret i8 %out
  12. bitcast i8 0 to i8
  13. %out = call i8 @dummy()
  14. ret i8 %out
  15. }
  16. define i8 @call_different_range() {
  17. ; CHECK-LABEL: @call_different_range
  18. ; CHECK-NEXT: bitcast i8 0 to i8
  19. ; CHECK-NEXT: %out = call i8 @dummy(), !range !1
  20. ; CHECK-NEXT: ret i8 %out
  21. bitcast i8 0 to i8
  22. %out = call i8 @dummy(), !range !1
  23. ret i8 %out
  24. }
  25. define i8 @invoke_with_range() personality i8* undef {
  26. %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
  27. next:
  28. ret i8 %out
  29. lpad:
  30. %pad = landingpad { i8*, i32 } cleanup
  31. resume { i8*, i32 } zeroinitializer
  32. }
  33. define i8 @invoke_no_range() personality i8* undef {
  34. ; CHECK-LABEL: @invoke_no_range()
  35. ; CHECK-NEXT: invoke i8 @dummy
  36. %out = invoke i8 @dummy() to label %next unwind label %lpad
  37. next:
  38. ret i8 %out
  39. lpad:
  40. %pad = landingpad { i8*, i32 } cleanup
  41. resume { i8*, i32 } zeroinitializer
  42. }
  43. define i8 @invoke_different_range() personality i8* undef {
  44. ; CHECK-LABEL: @invoke_different_range()
  45. ; CHECK-NEXT: invoke i8 @dummy
  46. %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !1
  47. next:
  48. ret i8 %out
  49. lpad:
  50. %pad = landingpad { i8*, i32 } cleanup
  51. resume { i8*, i32 } zeroinitializer
  52. }
  53. define i8 @call_with_same_range() {
  54. ; CHECK-LABEL: @call_with_same_range
  55. ; CHECK: tail call i8 @call_with_range
  56. bitcast i8 0 to i8
  57. %out = call i8 @dummy(), !range !0
  58. ret i8 %out
  59. }
  60. define i8 @invoke_with_same_range() personality i8* undef {
  61. ; CHECK-LABEL: @invoke_with_same_range()
  62. ; CHECK: tail call i8 @invoke_with_range()
  63. %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
  64. next:
  65. ret i8 %out
  66. lpad:
  67. %pad = landingpad { i8*, i32 } cleanup
  68. resume { i8*, i32 } zeroinitializer
  69. }
  70. declare i8 @dummy();
  71. declare i32 @__gxx_personality_v0(...)
  72. !0 = !{i8 0, i8 2}
  73. !1 = !{i8 5, i8 7}