branch-phi-thread.ll 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. ; RUN: opt < %s -simplifycfg -adce -S | \
  2. ; RUN: not grep "call void @f1"
  3. ; END.
  4. declare void @f1()
  5. declare void @f2()
  6. declare void @f3()
  7. declare void @f4()
  8. define i32 @test1(i32 %X, i1 %D) {
  9. E:
  10. %C = icmp eq i32 %X, 0 ; <i1> [#uses=2]
  11. br i1 %C, label %T, label %F
  12. T: ; preds = %A, %E
  13. br i1 %C, label %B, label %A
  14. A: ; preds = %T
  15. call void @f1( )
  16. br i1 %D, label %T, label %F
  17. B: ; preds = %T
  18. call void @f2( )
  19. ret i32 345
  20. F: ; preds = %A, %E
  21. call void @f3( )
  22. ret i32 123
  23. }
  24. define i32 @test2(i32 %X, i1 %D) {
  25. E:
  26. %C = icmp eq i32 %X, 0 ; <i1> [#uses=2]
  27. br i1 %C, label %T, label %F
  28. T: ; preds = %A, %E
  29. %P = phi i1 [ true, %E ], [ %C, %A ] ; <i1> [#uses=1]
  30. br i1 %P, label %B, label %A
  31. A: ; preds = %T
  32. call void @f1( )
  33. br i1 %D, label %T, label %F
  34. B: ; preds = %T
  35. call void @f2( )
  36. ret i32 345
  37. F: ; preds = %A, %E
  38. call void @f3( )
  39. ret i32 123
  40. }
  41. define i32 @test3(i32 %X, i1 %D, i32* %AP, i32* %BP) {
  42. E:
  43. %C = icmp eq i32 %X, 0 ; <i1> [#uses=2]
  44. br i1 %C, label %T, label %F
  45. T: ; preds = %A, %E
  46. call void @f3( )
  47. %XX = load i32, i32* %AP ; <i32> [#uses=1]
  48. store i32 %XX, i32* %BP
  49. br i1 %C, label %B, label %A
  50. A: ; preds = %T
  51. call void @f1( )
  52. br i1 %D, label %T, label %F
  53. B: ; preds = %T
  54. call void @f2( )
  55. ret i32 345
  56. F: ; preds = %A, %E
  57. call void @f3( )
  58. ret i32 123
  59. }