@@ -211,41 +211,41 @@ define i32 @p15_commutativity2(i32 %x, i32 %y) {
211211define <2 x i32 > @n17_ult_zero (<2 x i32 > %x , <2 x i32 > %y ) {
212212; CHECK-LABEL: @n17_ult_zero(
213213; CHECK-NEXT: [[T:%.*]] = icmp ult <2 x i32> [[X:%.*]], <i32 65536, i32 0>
214- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 65535 >
214+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 -1 >
215215; CHECK-NEXT: ret <2 x i32> [[R]]
216216;
217217 %t = icmp ult <2 x i32 > %x , <i32 65536 , i32 0 >
218- %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 65535 >
218+ %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 - 1 >
219219 ret <2 x i32 > %r
220220}
221221define <2 x i32 > @n18_ugt_allones (<2 x i32 > %x , <2 x i32 > %y ) {
222222; CHECK-LABEL: @n18_ugt_allones(
223223; CHECK-NEXT: [[T:%.*]] = icmp ugt <2 x i32> [[X:%.*]], <i32 65534, i32 -1>
224- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 65535 >
224+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 0 >
225225; CHECK-NEXT: ret <2 x i32> [[R]]
226226;
227227 %t = icmp ugt <2 x i32 > %x , <i32 65534 , i32 -1 >
228- %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 65535 >
228+ %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 0 >
229229 ret <2 x i32 > %r
230230}
231231define <2 x i32 > @n19_slt_int_min (<2 x i32 > %x , <2 x i32 > %y ) {
232232; CHECK-LABEL: @n19_slt_int_min(
233233; CHECK-NEXT: [[T:%.*]] = icmp slt <2 x i32> [[X:%.*]], <i32 65536, i32 -2147483648>
234- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 65535 >
234+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 2147483647 >
235235; CHECK-NEXT: ret <2 x i32> [[R]]
236236;
237237 %t = icmp slt <2 x i32 > %x , <i32 65536 , i32 -2147483648 >
238- %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 65535 >
238+ %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 2147483647 >
239239 ret <2 x i32 > %r
240240}
241241define <2 x i32 > @n20_sgt_int_max (<2 x i32 > %x , <2 x i32 > %y ) {
242242; CHECK-LABEL: @n20_sgt_int_max(
243243; CHECK-NEXT: [[T:%.*]] = icmp sgt <2 x i32> [[X:%.*]], <i32 65534, i32 2147483647>
244- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 65535 >
244+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[T]], <2 x i32> [[Y:%.*]], <2 x i32> <i32 65535, i32 -2147483648 >
245245; CHECK-NEXT: ret <2 x i32> [[R]]
246246;
247247 %t = icmp sgt <2 x i32 > %x , <i32 65534 , i32 2147483647 >
248- %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 65535 >
248+ %r = select <2 x i1 > %t , <2 x i32 > %y , <2 x i32 > <i32 65535 , i32 - 2147483648 >
249249 ret <2 x i32 > %r
250250}
251251
@@ -296,3 +296,25 @@ define i32 @n24_ult_65534(i32 %x, i32 %y) {
296296 %r = select i1 %t , i32 %y , i32 65535
297297 ret i32 %r
298298}
299+
300+ ; If we already have a match, it's good enough.
301+ define i32 @n25_all_good0 (i32 %x , i32 %y ) {
302+ ; CHECK-LABEL: @n25_all_good0(
303+ ; CHECK-NEXT: [[T:%.*]] = icmp ult i32 [[X:%.*]], 65536
304+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[T]], i32 65535, i32 65536
305+ ; CHECK-NEXT: ret i32 [[R]]
306+ ;
307+ %t = icmp ult i32 %x , 65536
308+ %r = select i1 %t , i32 65535 , i32 65536
309+ ret i32 %r
310+ }
311+ define i32 @n26_all_good1 (i32 %x , i32 %y ) {
312+ ; CHECK-LABEL: @n26_all_good1(
313+ ; CHECK-NEXT: [[T:%.*]] = icmp ult i32 [[X:%.*]], 65536
314+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[T]], i32 65536, i32 65535
315+ ; CHECK-NEXT: ret i32 [[R]]
316+ ;
317+ %t = icmp ult i32 %x , 65536
318+ %r = select i1 %t , i32 65536 , i32 65535
319+ ret i32 %r
320+ }
0 commit comments