nsw.ll 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. ; RUN: opt < %s -instcombine -S | FileCheck %s
  2. ; CHECK-LABEL: @sub1(
  3. ; CHECK: %y = sub i32 0, %x
  4. ; CHECK: %z = sdiv i32 %y, 337
  5. ; CHECK: ret i32 %z
  6. define i32 @sub1(i32 %x) {
  7. %y = sub i32 0, %x
  8. %z = sdiv i32 %y, 337
  9. ret i32 %z
  10. }
  11. ; CHECK-LABEL: @sub2(
  12. ; CHECK: %z = sdiv i32 %x, -337
  13. ; CHECK: ret i32 %z
  14. define i32 @sub2(i32 %x) {
  15. %y = sub nsw i32 0, %x
  16. %z = sdiv i32 %y, 337
  17. ret i32 %z
  18. }
  19. ; CHECK-LABEL: @shl_icmp(
  20. ; CHECK: %B = icmp eq i64 %X, 0
  21. ; CHECK: ret i1 %B
  22. define i1 @shl_icmp(i64 %X) nounwind {
  23. %A = shl nuw i64 %X, 2 ; X/4
  24. %B = icmp eq i64 %A, 0
  25. ret i1 %B
  26. }
  27. ; CHECK-LABEL: @shl1(
  28. ; CHECK: %B = shl nuw nsw i64 %A, 8
  29. ; CHECK: ret i64 %B
  30. define i64 @shl1(i64 %X, i64* %P) nounwind {
  31. %A = and i64 %X, 312
  32. store i64 %A, i64* %P ; multiple uses of A.
  33. %B = shl i64 %A, 8
  34. ret i64 %B
  35. }
  36. ; CHECK-LABEL: @preserve1(
  37. ; CHECK: add nsw i32 %x, 5
  38. define i32 @preserve1(i32 %x) nounwind {
  39. %add = add nsw i32 %x, 2
  40. %add3 = add nsw i32 %add, 3
  41. ret i32 %add3
  42. }
  43. ; CHECK-LABEL: @nopreserve1(
  44. ; CHECK: add i8 %x, -126
  45. define i8 @nopreserve1(i8 %x) nounwind {
  46. %add = add nsw i8 %x, 127
  47. %add3 = add nsw i8 %add, 3
  48. ret i8 %add3
  49. }
  50. ; CHECK-LABEL: @nopreserve2(
  51. ; CHECK: add i8 %x, 3
  52. define i8 @nopreserve2(i8 %x) nounwind {
  53. %add = add i8 %x, 1
  54. %add3 = add nsw i8 %add, 2
  55. ret i8 %add3
  56. }
  57. ; CHECK-LABEL: @nopreserve3(
  58. ; CHECK: add i8 %A, %B
  59. ; CHECK: add i8
  60. define i8 @nopreserve3(i8 %A, i8 %B) nounwind {
  61. %x = add i8 %A, 10
  62. %y = add i8 %B, 10
  63. %add = add nsw i8 %x, %y
  64. ret i8 %add
  65. }
  66. ; CHECK-LABEL: @nopreserve4(
  67. ; CHECK: add i8 %A, %B
  68. ; CHECK: add i8
  69. define i8 @nopreserve4(i8 %A, i8 %B) nounwind {
  70. %x = add nsw i8 %A, 10
  71. %y = add nsw i8 %B, 10
  72. %add = add nsw i8 %x, %y
  73. ret i8 %add
  74. }