trapping-load-unreachable.ll 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. ; RUN: opt < %s -simplifycfg -S | FileCheck %s
  2. ; PR2967
  3. target datalayout =
  4. "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32"
  5. target triple = "i386-pc-linux-gnu"
  6. define void @test1(i32 %x) nounwind {
  7. entry:
  8. %0 = icmp eq i32 %x, 0 ; <i1> [#uses=1]
  9. br i1 %0, label %bb, label %return
  10. bb: ; preds = %entry
  11. %1 = load volatile i32, i32* null
  12. unreachable
  13. br label %return
  14. return: ; preds = %entry
  15. ret void
  16. ; CHECK-LABEL: @test1(
  17. ; CHECK: load volatile
  18. }
  19. ; rdar://7958343
  20. define void @test2() nounwind {
  21. entry:
  22. store i32 4,i32* null
  23. ret void
  24. ; CHECK-LABEL: @test2(
  25. ; CHECK: call void @llvm.trap
  26. ; CHECK: unreachable
  27. }
  28. ; PR7369
  29. define void @test3() nounwind {
  30. entry:
  31. store volatile i32 4, i32* null
  32. ret void
  33. ; CHECK-LABEL: @test3(
  34. ; CHECK: store volatile i32 4, i32* null
  35. ; CHECK: ret
  36. }
  37. ; Check store before unreachable.
  38. define void @test4(i1 %C, i32* %P) {
  39. ; CHECK-LABEL: @test4(
  40. ; CHECK: entry:
  41. ; CHECK-NEXT: br i1 %C
  42. entry:
  43. br i1 %C, label %T, label %F
  44. T:
  45. store volatile i32 0, i32* %P
  46. unreachable
  47. F:
  48. ret void
  49. }
  50. ; Check cmpxchg before unreachable.
  51. define void @test5(i1 %C, i32* %P) {
  52. ; CHECK-LABEL: @test5(
  53. ; CHECK: entry:
  54. ; CHECK-NEXT: br i1 %C
  55. entry:
  56. br i1 %C, label %T, label %F
  57. T:
  58. cmpxchg volatile i32* %P, i32 0, i32 1 seq_cst seq_cst
  59. unreachable
  60. F:
  61. ret void
  62. }
  63. ; Check atomicrmw before unreachable.
  64. define void @test6(i1 %C, i32* %P) {
  65. ; CHECK-LABEL: @test6(
  66. ; CHECK: entry:
  67. ; CHECK-NEXT: br i1 %C
  68. entry:
  69. br i1 %C, label %T, label %F
  70. T:
  71. atomicrmw volatile xchg i32* %P, i32 0 seq_cst
  72. unreachable
  73. F:
  74. ret void
  75. }