sink-common-code.ll 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. ; RUN: opt < %s -simplifycfg -S | FileCheck %s
  2. define zeroext i1 @test1(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks) {
  3. entry:
  4. br i1 %flag, label %if.then, label %if.else
  5. ; CHECK-LABEL: test1
  6. ; CHECK: add
  7. ; CHECK: select
  8. ; CHECK: icmp
  9. ; CHECK-NOT: br
  10. if.then:
  11. %cmp = icmp uge i32 %blksA, %nblks
  12. %frombool1 = zext i1 %cmp to i8
  13. br label %if.end
  14. if.else:
  15. %add = add i32 %nblks, %blksB
  16. %cmp2 = icmp ule i32 %add, %blksA
  17. %frombool3 = zext i1 %cmp2 to i8
  18. br label %if.end
  19. if.end:
  20. %obeys.0 = phi i8 [ %frombool1, %if.then ], [ %frombool3, %if.else ]
  21. %tobool4 = icmp ne i8 %obeys.0, 0
  22. ret i1 %tobool4
  23. }
  24. define zeroext i1 @test2(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks) {
  25. entry:
  26. br i1 %flag, label %if.then, label %if.else
  27. ; CHECK-LABEL: test2
  28. ; CHECK: add
  29. ; CHECK: select
  30. ; CHECK: icmp
  31. ; CHECK-NOT: br
  32. if.then:
  33. %cmp = icmp uge i32 %blksA, %nblks
  34. %frombool1 = zext i1 %cmp to i8
  35. br label %if.end
  36. if.else:
  37. %add = add i32 %nblks, %blksB
  38. %cmp2 = icmp uge i32 %blksA, %add
  39. %frombool3 = zext i1 %cmp2 to i8
  40. br label %if.end
  41. if.end:
  42. %obeys.0 = phi i8 [ %frombool1, %if.then ], [ %frombool3, %if.else ]
  43. %tobool4 = icmp ne i8 %obeys.0, 0
  44. ret i1 %tobool4
  45. }
  46. declare i32 @foo(i32, i32) nounwind readnone
  47. define i32 @test3(i1 zeroext %flag, i32 %x, i32 %y) {
  48. entry:
  49. br i1 %flag, label %if.then, label %if.else
  50. if.then:
  51. %x0 = call i32 @foo(i32 %x, i32 0) nounwind readnone
  52. %y0 = call i32 @foo(i32 %x, i32 1) nounwind readnone
  53. br label %if.end
  54. if.else:
  55. %x1 = call i32 @foo(i32 %y, i32 0) nounwind readnone
  56. %y1 = call i32 @foo(i32 %y, i32 1) nounwind readnone
  57. br label %if.end
  58. if.end:
  59. %xx = phi i32 [ %x0, %if.then ], [ %x1, %if.else ]
  60. %yy = phi i32 [ %y0, %if.then ], [ %y1, %if.else ]
  61. %ret = add i32 %xx, %yy
  62. ret i32 %ret
  63. }
  64. ; CHECK-LABEL: test3
  65. ; CHECK: select
  66. ; CHECK: call
  67. ; CHECK: call
  68. ; CHECK: add
  69. ; CHECK-NOT: br