@@ -551,6 +551,8 @@ define i32 @select_xor_icmp_bad_6(i32 %x, i32 %y, i32 %z) {
551
551
ret i32 %C
552
552
}
553
553
554
+ ; FIXME: Value equivalence substitution is all-or-nothing, so needs a scalar compare.
555
+
554
556
define <2 x i8 > @select_xor_icmp_vec_bad (<2 x i8 > %x , <2 x i8 > %y , <2 x i8 > %z ) {
555
557
; CHECK-LABEL: @select_xor_icmp_vec_bad(
556
558
; CHECK-NEXT: [[A:%.*]] = icmp eq <2 x i8> [[X:%.*]], <i8 5, i8 3>
@@ -564,6 +566,18 @@ define <2 x i8> @select_xor_icmp_vec_bad(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z)
564
566
ret <2 x i8 > %C
565
567
}
566
568
569
+ ; FIXME: Value equivalence substitution is all-or-nothing, so needs a scalar compare.
570
+
571
+ define <2 x i32 > @vec_select_no_equivalence (<2 x i32 > %x ) {
572
+ ; CHECK-LABEL: @vec_select_no_equivalence(
573
+ ; CHECK-NEXT: ret <2 x i32> [[X:%.*]]
574
+ ;
575
+ %x10 = shufflevector <2 x i32 > %x , <2 x i32 > undef , <2 x i32 > <i32 1 , i32 0 >
576
+ %cond = icmp eq <2 x i32 > %x , zeroinitializer
577
+ %s = select <2 x i1 > %cond , <2 x i32 > %x10 , <2 x i32 > %x
578
+ ret <2 x i32 > %s
579
+ }
580
+
567
581
; Folding this would only be legal if we sanitized undef to 0.
568
582
define <2 x i8 > @select_xor_icmp_vec_undef (<2 x i8 > %x , <2 x i8 > %y , <2 x i8 > %z ) {
569
583
; CHECK-LABEL: @select_xor_icmp_vec_undef(
0 commit comments