[DAGCombiner] Don't ignore N2's undef elements in `foldVSelectOfConst… · llvm/llvm-project@0064565 (original) (raw)

Original file line number Diff line number Diff line change
@@ -302,3 +302,21 @@ define i32 @wrong_min_signbits(<2 x i16> %x) {
302 302 %t1 = bitcast <2 x i16> %sel to i32
303 303 ret i32 %t1
304 304 }
305 +
306 +define i32 @pr129181() {
307 +; SSE-LABEL: pr129181:
308 +; SSE: # %bb.0: # %entry
309 +; SSE-NEXT: xorl %eax, %eax
310 +; SSE-NEXT: retq
311 +;
312 +; AVX-LABEL: pr129181:
313 +; AVX: # %bb.0: # %entry
314 +; AVX-NEXT: xorl %eax, %eax
315 +; AVX-NEXT: retq
316 +entry:
317 +%x = insertelement <4 x i32> zeroinitializer, i32 0, i32 0
318 +%cmp = icmp ult <4 x i32> %x, splat (i32 1)
319 +%sel = select <4 x i1> %cmp, <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 0, i32 1, i32 poison>
320 +%reduce = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %sel)
321 +ret i32 %reduce
322 +}