adjust-for-sminmax.ll 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. ; RUN: opt < %s -instcombine -S | grep "icmp s[lg]t i32 %n, 0" | count 16
  2. ; Instcombine should recognize that this code can be adjusted
  3. ; to fit the canonical smax/smin pattern.
  4. define i32 @floor_a(i32 %n) {
  5. %t = icmp sgt i32 %n, -1
  6. %m = select i1 %t, i32 %n, i32 0
  7. ret i32 %m
  8. }
  9. define i32 @ceil_a(i32 %n) {
  10. %t = icmp slt i32 %n, 1
  11. %m = select i1 %t, i32 %n, i32 0
  12. ret i32 %m
  13. }
  14. define i32 @floor_b(i32 %n) {
  15. %t = icmp sgt i32 %n, 0
  16. %m = select i1 %t, i32 %n, i32 0
  17. ret i32 %m
  18. }
  19. define i32 @ceil_b(i32 %n) {
  20. %t = icmp slt i32 %n, 0
  21. %m = select i1 %t, i32 %n, i32 0
  22. ret i32 %m
  23. }
  24. define i32 @floor_c(i32 %n) {
  25. %t = icmp sge i32 %n, 0
  26. %m = select i1 %t, i32 %n, i32 0
  27. ret i32 %m
  28. }
  29. define i32 @ceil_c(i32 %n) {
  30. %t = icmp sle i32 %n, 0
  31. %m = select i1 %t, i32 %n, i32 0
  32. ret i32 %m
  33. }
  34. define i32 @floor_d(i32 %n) {
  35. %t = icmp sge i32 %n, 1
  36. %m = select i1 %t, i32 %n, i32 0
  37. ret i32 %m
  38. }
  39. define i32 @ceil_d(i32 %n) {
  40. %t = icmp sle i32 %n, -1
  41. %m = select i1 %t, i32 %n, i32 0
  42. ret i32 %m
  43. }
  44. define i32 @floor_e(i32 %n) {
  45. %t = icmp sgt i32 %n, -1
  46. %m = select i1 %t, i32 %n, i32 0
  47. ret i32 %m
  48. }
  49. define i32 @ceil_e(i32 %n) {
  50. %t = icmp slt i32 %n, 1
  51. %m = select i1 %t, i32 %n, i32 0
  52. ret i32 %m
  53. }
  54. define i32 @floor_f(i32 %n) {
  55. %t = icmp sgt i32 %n, 0
  56. %m = select i1 %t, i32 %n, i32 0
  57. ret i32 %m
  58. }
  59. define i32 @ceil_f(i32 %n) {
  60. %t = icmp slt i32 %n, 0
  61. %m = select i1 %t, i32 %n, i32 0
  62. ret i32 %m
  63. }
  64. define i32 @floor_g(i32 %n) {
  65. %t = icmp sge i32 %n, 0
  66. %m = select i1 %t, i32 %n, i32 0
  67. ret i32 %m
  68. }
  69. define i32 @ceil_g(i32 %n) {
  70. %t = icmp sle i32 %n, 0
  71. %m = select i1 %t, i32 %n, i32 0
  72. ret i32 %m
  73. }
  74. define i32 @floor_h(i32 %n) {
  75. %t = icmp sge i32 %n, 1
  76. %m = select i1 %t, i32 %n, i32 0
  77. ret i32 %m
  78. }
  79. define i32 @ceil_h(i32 %n) {
  80. %t = icmp sle i32 %n, -1
  81. %m = select i1 %t, i32 %n, i32 0
  82. ret i32 %m
  83. }