@@ -309,3 +309,28 @@ define <2 x float> @select_fcmp_fadd_une_zero_vec(<2 x float> %x, <2 x float> %y
309309 %retval = select <2 x i1 > %fcmp , <2 x float > %x , <2 x float > %fadd
310310 ret <2 x float > %retval
311311}
312+
313+ define <2 x i8 > @select_vec_op_const_no_undef (<2 x i8 > %x ) {
314+ ; CHECK-LABEL: define <2 x i8> @select_vec_op_const_no_undef(
315+ ; CHECK-SAME: <2 x i8> [[X:%.*]]) {
316+ ; CHECK-NEXT: [[XZ:%.*]] = icmp eq <2 x i8> [[X]], <i8 1, i8 2>
317+ ; CHECK-NEXT: [[XR:%.*]] = select <2 x i1> [[XZ]], <2 x i8> <i8 1, i8 2>, <2 x i8> <i8 4, i8 3>
318+ ; CHECK-NEXT: ret <2 x i8> [[XR]]
319+ ;
320+ %xz = icmp eq <2 x i8 > %x , <i8 1 , i8 2 >
321+ %xr = select <2 x i1 > %xz , <2 x i8 > %x , <2 x i8 > <i8 4 , i8 3 >
322+ ret <2 x i8 > %xr
323+ }
324+
325+ ; FIXME: This is a miscompile.
326+ define <2 x i8 > @select_vec_op_const_undef (<2 x i8 > %x ) {
327+ ; CHECK-LABEL: define <2 x i8> @select_vec_op_const_undef(
328+ ; CHECK-SAME: <2 x i8> [[X:%.*]]) {
329+ ; CHECK-NEXT: [[XZ:%.*]] = icmp eq <2 x i8> [[X]], <i8 1, i8 undef>
330+ ; CHECK-NEXT: [[XR:%.*]] = select <2 x i1> [[XZ]], <2 x i8> <i8 1, i8 undef>, <2 x i8> <i8 4, i8 3>
331+ ; CHECK-NEXT: ret <2 x i8> [[XR]]
332+ ;
333+ %xz = icmp eq <2 x i8 > %x , <i8 1 , i8 undef >
334+ %xr = select <2 x i1 > %xz , <2 x i8 > %x , <2 x i8 > <i8 4 , i8 3 >
335+ ret <2 x i8 > %xr
336+ }
0 commit comments