maxmin.ll 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. ; RUN: opt < %s -instsimplify -S | FileCheck %s
  2. define i1 @max1(i32 %x, i32 %y) {
  3. ; CHECK-LABEL: @max1(
  4. %c = icmp sgt i32 %x, %y
  5. %m = select i1 %c, i32 %x, i32 %y
  6. %r = icmp slt i32 %m, %x
  7. ret i1 %r
  8. ; CHECK: ret i1 false
  9. }
  10. define i1 @max2(i32 %x, i32 %y) {
  11. ; CHECK-LABEL: @max2(
  12. %c = icmp sge i32 %x, %y
  13. %m = select i1 %c, i32 %x, i32 %y
  14. %r = icmp sge i32 %m, %x
  15. ret i1 %r
  16. ; CHECK: ret i1 true
  17. }
  18. define i1 @max3(i32 %x, i32 %y) {
  19. ; CHECK-LABEL: @max3(
  20. %c = icmp ugt i32 %x, %y
  21. %m = select i1 %c, i32 %x, i32 %y
  22. %r = icmp ult i32 %m, %x
  23. ret i1 %r
  24. ; CHECK: ret i1 false
  25. }
  26. define i1 @max4(i32 %x, i32 %y) {
  27. ; CHECK-LABEL: @max4(
  28. %c = icmp uge i32 %x, %y
  29. %m = select i1 %c, i32 %x, i32 %y
  30. %r = icmp uge i32 %m, %x
  31. ret i1 %r
  32. ; CHECK: ret i1 true
  33. }
  34. define i1 @max5(i32 %x, i32 %y) {
  35. ; CHECK-LABEL: @max5(
  36. %c = icmp sgt i32 %x, %y
  37. %m = select i1 %c, i32 %x, i32 %y
  38. %r = icmp sgt i32 %x, %m
  39. ret i1 %r
  40. ; CHECK: ret i1 false
  41. }
  42. define i1 @max6(i32 %x, i32 %y) {
  43. ; CHECK-LABEL: @max6(
  44. %c = icmp sge i32 %x, %y
  45. %m = select i1 %c, i32 %x, i32 %y
  46. %r = icmp sle i32 %x, %m
  47. ret i1 %r
  48. ; CHECK: ret i1 true
  49. }
  50. define i1 @max7(i32 %x, i32 %y) {
  51. ; CHECK-LABEL: @max7(
  52. %c = icmp ugt i32 %x, %y
  53. %m = select i1 %c, i32 %x, i32 %y
  54. %r = icmp ugt i32 %x, %m
  55. ret i1 %r
  56. ; CHECK: ret i1 false
  57. }
  58. define i1 @max8(i32 %x, i32 %y) {
  59. ; CHECK-LABEL: @max8(
  60. %c = icmp uge i32 %x, %y
  61. %m = select i1 %c, i32 %x, i32 %y
  62. %r = icmp ule i32 %x, %m
  63. ret i1 %r
  64. ; CHECK: ret i1 true
  65. }
  66. define i1 @min1(i32 %x, i32 %y) {
  67. ; CHECK-LABEL: @min1(
  68. %c = icmp sgt i32 %x, %y
  69. %m = select i1 %c, i32 %y, i32 %x
  70. %r = icmp sgt i32 %m, %x
  71. ret i1 %r
  72. ; CHECK: ret i1 false
  73. }
  74. define i1 @min2(i32 %x, i32 %y) {
  75. ; CHECK-LABEL: @min2(
  76. %c = icmp sge i32 %x, %y
  77. %m = select i1 %c, i32 %y, i32 %x
  78. %r = icmp sle i32 %m, %x
  79. ret i1 %r
  80. ; CHECK: ret i1 true
  81. }
  82. define i1 @min3(i32 %x, i32 %y) {
  83. ; CHECK-LABEL: @min3(
  84. %c = icmp ugt i32 %x, %y
  85. %m = select i1 %c, i32 %y, i32 %x
  86. %r = icmp ugt i32 %m, %x
  87. ret i1 %r
  88. ; CHECK: ret i1 false
  89. }
  90. define i1 @min4(i32 %x, i32 %y) {
  91. ; CHECK-LABEL: @min4(
  92. %c = icmp uge i32 %x, %y
  93. %m = select i1 %c, i32 %y, i32 %x
  94. %r = icmp ule i32 %m, %x
  95. ret i1 %r
  96. ; CHECK: ret i1 true
  97. }
  98. define i1 @min5(i32 %x, i32 %y) {
  99. ; CHECK-LABEL: @min5(
  100. %c = icmp sgt i32 %x, %y
  101. %m = select i1 %c, i32 %y, i32 %x
  102. %r = icmp slt i32 %x, %m
  103. ret i1 %r
  104. ; CHECK: ret i1 false
  105. }
  106. define i1 @min6(i32 %x, i32 %y) {
  107. ; CHECK-LABEL: @min6(
  108. %c = icmp sge i32 %x, %y
  109. %m = select i1 %c, i32 %y, i32 %x
  110. %r = icmp sge i32 %x, %m
  111. ret i1 %r
  112. ; CHECK: ret i1 true
  113. }
  114. define i1 @min7(i32 %x, i32 %y) {
  115. ; CHECK-LABEL: @min7(
  116. %c = icmp ugt i32 %x, %y
  117. %m = select i1 %c, i32 %y, i32 %x
  118. %r = icmp ult i32 %x, %m
  119. ret i1 %r
  120. ; CHECK: ret i1 false
  121. }
  122. define i1 @min8(i32 %x, i32 %y) {
  123. ; CHECK-LABEL: @min8(
  124. %c = icmp uge i32 %x, %y
  125. %m = select i1 %c, i32 %y, i32 %x
  126. %r = icmp uge i32 %x, %m
  127. ret i1 %r
  128. ; CHECK: ret i1 true
  129. }
  130. define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
  131. ; CHECK-LABEL: @maxmin1(
  132. %c1 = icmp sge i32 %x, %y
  133. %max = select i1 %c1, i32 %x, i32 %y
  134. %c2 = icmp sge i32 %x, %z
  135. %min = select i1 %c2, i32 %z, i32 %x
  136. %c = icmp sge i32 %max, %min
  137. ret i1 %c
  138. ; CHECK: ret i1 true
  139. }
  140. define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
  141. ; CHECK-LABEL: @maxmin2(
  142. %c1 = icmp sge i32 %x, %y
  143. %max = select i1 %c1, i32 %x, i32 %y
  144. %c2 = icmp sge i32 %x, %z
  145. %min = select i1 %c2, i32 %z, i32 %x
  146. %c = icmp sgt i32 %min, %max
  147. ret i1 %c
  148. ; CHECK: ret i1 false
  149. }
  150. define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
  151. ; CHECK-LABEL: @maxmin3(
  152. %c1 = icmp sge i32 %x, %y
  153. %max = select i1 %c1, i32 %x, i32 %y
  154. %c2 = icmp sge i32 %x, %z
  155. %min = select i1 %c2, i32 %z, i32 %x
  156. %c = icmp sle i32 %min, %max
  157. ret i1 %c
  158. ; CHECK: ret i1 true
  159. }
  160. define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
  161. ; CHECK-LABEL: @maxmin4(
  162. %c1 = icmp sge i32 %x, %y
  163. %max = select i1 %c1, i32 %x, i32 %y
  164. %c2 = icmp sge i32 %x, %z
  165. %min = select i1 %c2, i32 %z, i32 %x
  166. %c = icmp slt i32 %max, %min
  167. ret i1 %c
  168. ; CHECK: ret i1 false
  169. }
  170. define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
  171. ; CHECK-LABEL: @maxmin5(
  172. %c1 = icmp uge i32 %x, %y
  173. %max = select i1 %c1, i32 %x, i32 %y
  174. %c2 = icmp uge i32 %x, %z
  175. %min = select i1 %c2, i32 %z, i32 %x
  176. %c = icmp uge i32 %max, %min
  177. ret i1 %c
  178. ; CHECK: ret i1 true
  179. }
  180. define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
  181. ; CHECK-LABEL: @maxmin6(
  182. %c1 = icmp uge i32 %x, %y
  183. %max = select i1 %c1, i32 %x, i32 %y
  184. %c2 = icmp uge i32 %x, %z
  185. %min = select i1 %c2, i32 %z, i32 %x
  186. %c = icmp ugt i32 %min, %max
  187. ret i1 %c
  188. ; CHECK: ret i1 false
  189. }
  190. define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
  191. ; CHECK-LABEL: @maxmin7(
  192. %c1 = icmp uge i32 %x, %y
  193. %max = select i1 %c1, i32 %x, i32 %y
  194. %c2 = icmp uge i32 %x, %z
  195. %min = select i1 %c2, i32 %z, i32 %x
  196. %c = icmp ule i32 %min, %max
  197. ret i1 %c
  198. ; CHECK: ret i1 true
  199. }
  200. define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
  201. ; CHECK-LABEL: @maxmin8(
  202. %c1 = icmp uge i32 %x, %y
  203. %max = select i1 %c1, i32 %x, i32 %y
  204. %c2 = icmp uge i32 %x, %z
  205. %min = select i1 %c2, i32 %z, i32 %x
  206. %c = icmp ult i32 %max, %min
  207. ret i1 %c
  208. ; CHECK: ret i1 false
  209. }
  210. define i1 @eqcmp1(i32 %x, i32 %y) {
  211. ; CHECK-LABEL: @eqcmp1(
  212. %c = icmp sge i32 %x, %y
  213. %max = select i1 %c, i32 %x, i32 %y
  214. %r = icmp eq i32 %max, %x
  215. ret i1 %r
  216. ; CHECK: ret i1 %c
  217. }
  218. define i1 @eqcmp2(i32 %x, i32 %y) {
  219. ; CHECK-LABEL: @eqcmp2(
  220. %c = icmp sge i32 %x, %y
  221. %max = select i1 %c, i32 %x, i32 %y
  222. %r = icmp eq i32 %x, %max
  223. ret i1 %r
  224. ; CHECK: ret i1 %c
  225. }
  226. define i1 @eqcmp3(i32 %x, i32 %y) {
  227. ; CHECK-LABEL: @eqcmp3(
  228. %c = icmp uge i32 %x, %y
  229. %max = select i1 %c, i32 %x, i32 %y
  230. %r = icmp eq i32 %max, %x
  231. ret i1 %r
  232. ; CHECK: ret i1 %c
  233. }
  234. define i1 @eqcmp4(i32 %x, i32 %y) {
  235. ; CHECK-LABEL: @eqcmp4(
  236. %c = icmp uge i32 %x, %y
  237. %max = select i1 %c, i32 %x, i32 %y
  238. %r = icmp eq i32 %x, %max
  239. ret i1 %r
  240. ; CHECK: ret i1 %c
  241. }