diff --git a/llvm/test/CodeGen/X86/fminimum-fmaximum.ll b/llvm/test/CodeGen/X86/fminimum-fmaximum.ll index 8905d2bce5e92..a279f1e937e69 100644 --- a/llvm/test/CodeGen/X86/fminimum-fmaximum.ll +++ b/llvm/test/CodeGen/X86/fminimum-fmaximum.ll @@ -1322,3 +1322,47 @@ define <4 x float> @test_fmaximum_vector_zero(<4 x float> %x) { %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> ) ret <4 x float> %r } + +; PR77805: Check that signed zeroes are handled correctly in this case (FIXME) +define <4 x float> @test_fmaximum_v4f32_splat(<4 x float> %x, float %y) { +; SSE2-LABEL: test_fmaximum_v4f32_splat: +; SSE2: # %bb.0: +; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0,0,0] +; SSE2-NEXT: movaps %xmm0, %xmm2 +; SSE2-NEXT: cmpunordps %xmm0, %xmm2 +; SSE2-NEXT: movaps %xmm0, %xmm3 +; SSE2-NEXT: andps %xmm2, %xmm3 +; SSE2-NEXT: maxps %xmm1, %xmm0 +; SSE2-NEXT: andnps %xmm0, %xmm2 +; SSE2-NEXT: orps %xmm3, %xmm2 +; SSE2-NEXT: movaps %xmm2, %xmm0 +; SSE2-NEXT: retq +; +; AVX1-LABEL: test_fmaximum_v4f32_splat: +; AVX1: # %bb.0: +; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,0,0,0] +; AVX1-NEXT: vmaxps %xmm1, %xmm0, %xmm1 +; AVX1-NEXT: vcmpunordps %xmm0, %xmm0, %xmm2 +; AVX1-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 +; AVX1-NEXT: retq +; +; AVX512-LABEL: test_fmaximum_v4f32_splat: +; AVX512: # %bb.0: +; AVX512-NEXT: vbroadcastss %xmm1, %xmm1 +; AVX512-NEXT: vmaxps %xmm1, %xmm0, %xmm1 +; AVX512-NEXT: vcmpunordps %xmm0, %xmm0, %xmm2 +; AVX512-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 +; AVX512-NEXT: retq +; +; X86-LABEL: test_fmaximum_v4f32_splat: +; X86: # %bb.0: +; X86-NEXT: vbroadcastss {{[0-9]+}}(%esp), %xmm1 +; X86-NEXT: vmaxps %xmm1, %xmm0, %xmm1 +; X86-NEXT: vcmpunordps %xmm0, %xmm0, %xmm2 +; X86-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 +; X86-NEXT: retl + %splatinsert = insertelement <4 x float> poison, float %y, i64 0 + %vec = shufflevector <4 x float> %splatinsert, <4 x float> poison, <4 x i32> zeroinitializer + %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> %vec) readnone + ret <4 x float> %r +}