diff --git a/llvm/test/CodeGen/X86/vec-strict-cmp-128.ll b/llvm/test/CodeGen/X86/vec-strict-cmp-128.ll index 3b56e01149154b..7e11f262560301 100644 --- a/llvm/test/CodeGen/X86/vec-strict-cmp-128.ll +++ b/llvm/test/CodeGen/X86/vec-strict-cmp-128.ll @@ -5,6 +5,8 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=CHECK,AVX,AVX-64 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=CHECK,AVX512-32 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=CHECK,AVX512-64 +; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,AVX512F-32 +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,AVX512F-64 define <4 x i32> @test_v4f32_oeq_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 { ; SSE-32-LABEL: test_v4f32_oeq_q: @@ -64,6 +66,36 @@ define <4 x i32> @test_v4f32_oeq_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpeqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_oeq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_oeq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -189,6 +221,36 @@ define <4 x i32> @test_v4f32_ogt_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmplt_oqps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ogt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmplt_oqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ogt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -314,6 +376,36 @@ define <4 x i32> @test_v4f32_oge_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmple_oqps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_oge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmple_oqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_oge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -438,6 +530,36 @@ define <4 x i32> @test_v4f32_olt_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmplt_oqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_olt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmplt_oqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_olt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -562,6 +684,36 @@ define <4 x i32> @test_v4f32_ole_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmple_oqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ole_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmple_oqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ole_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -634,6 +786,36 @@ define <4 x i32> @test_v4f32_one_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpneq_oqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_one_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneq_oqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_one_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_oqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -699,6 +881,36 @@ define <4 x i32> @test_v4f32_ord_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpordps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ord_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpordps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ord_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpordps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -771,6 +983,36 @@ define <4 x i32> @test_v4f32_ueq_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpeq_uqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ueq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeq_uqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ueq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_uqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -895,6 +1137,36 @@ define <4 x i32> @test_v4f32_ugt_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnle_uqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ugt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnle_uqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ugt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -1019,6 +1291,36 @@ define <4 x i32> @test_v4f32_uge_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnlt_uqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_uge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnlt_uqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_uge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -1144,6 +1446,36 @@ define <4 x i32> @test_v4f32_ult_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnle_uqps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ult_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnle_uqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ult_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -1269,6 +1601,36 @@ define <4 x i32> @test_v4f32_ule_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnlt_uqps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ule_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnlt_uqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ule_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -1334,6 +1696,36 @@ define <4 x i32> @test_v4f32_une_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpneqps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_une_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_une_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -1399,6 +1791,36 @@ define <4 x i32> @test_v4f32_uno_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpunordps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_uno_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpunordps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_uno_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunordps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 @@ -1464,6 +1886,36 @@ define <2 x i64> @test_v2f64_oeq_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpeqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_oeq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_oeq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -1555,6 +2007,36 @@ define <2 x i64> @test_v2f64_ogt_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmplt_oqpd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ogt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmplt_oqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ogt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -1646,6 +2128,36 @@ define <2 x i64> @test_v2f64_oge_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmple_oqpd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_oge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmple_oqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_oge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -1736,6 +2248,36 @@ define <2 x i64> @test_v2f64_olt_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmplt_oqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_olt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmplt_oqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_olt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -1826,6 +2368,36 @@ define <2 x i64> @test_v2f64_ole_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmple_oqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ole_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmple_oqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ole_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -1898,6 +2470,36 @@ define <2 x i64> @test_v2f64_one_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpneq_oqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_one_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneq_oqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_one_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_oqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -1963,6 +2565,36 @@ define <2 x i64> @test_v2f64_ord_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpordpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ord_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpordpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ord_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpordpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -2035,6 +2667,36 @@ define <2 x i64> @test_v2f64_ueq_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpeq_uqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ueq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeq_uqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ueq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_uqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -2125,6 +2787,36 @@ define <2 x i64> @test_v2f64_ugt_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnle_uqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ugt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnle_uqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ugt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -2215,6 +2907,36 @@ define <2 x i64> @test_v2f64_uge_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnlt_uqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_uge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnlt_uqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_uge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -2306,6 +3028,36 @@ define <2 x i64> @test_v2f64_ult_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnle_uqpd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ult_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnle_uqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ult_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -2397,6 +3149,36 @@ define <2 x i64> @test_v2f64_ule_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnlt_uqpd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ule_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnlt_uqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ule_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -2462,6 +3244,36 @@ define <2 x i64> @test_v2f64_une_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpneqpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_une_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_une_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -2527,6 +3339,36 @@ define <2 x i64> @test_v2f64_uno_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpunordpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_uno_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpunordpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_uno_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunordpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 @@ -2597,6 +3439,36 @@ define <4 x i32> @test_v4f32_oeq_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpeq_osps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_oeq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeq_osps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_oeq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_osps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -2664,6 +3536,36 @@ define <4 x i32> @test_v4f32_ogt_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpltps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ogt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpltps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ogt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -2731,6 +3633,36 @@ define <4 x i32> @test_v4f32_oge_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpleps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_oge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpleps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_oge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpleps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -2796,6 +3728,36 @@ define <4 x i32> @test_v4f32_olt_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpltps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_olt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpltps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_olt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -2861,6 +3823,36 @@ define <4 x i32> @test_v4f32_ole_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpleps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ole_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpleps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ole_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpleps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -2937,6 +3929,36 @@ define <4 x i32> @test_v4f32_one_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpneq_osps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_one_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneq_osps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_one_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_osps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -3007,6 +4029,36 @@ define <4 x i32> @test_v4f32_ord_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpord_sps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ord_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpord_sps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ord_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpord_sps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -3083,6 +4135,36 @@ define <4 x i32> @test_v4f32_ueq_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpeq_usps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ueq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeq_usps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ueq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_usps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -3148,6 +4230,36 @@ define <4 x i32> @test_v4f32_ugt_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnleps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ugt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnleps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ugt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnleps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -3213,6 +4325,36 @@ define <4 x i32> @test_v4f32_uge_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnltps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_uge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnltps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_uge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -3280,6 +4422,36 @@ define <4 x i32> @test_v4f32_ult_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnleps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ult_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnleps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ult_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnleps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -3347,6 +4519,36 @@ define <4 x i32> @test_v4f32_ule_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpnltps %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_ule_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnltps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_ule_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -3417,6 +4619,36 @@ define <4 x i32> @test_v4f32_une_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpneq_usps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_une_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneq_usps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_une_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_usps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -3487,6 +4719,36 @@ define <4 x i32> @test_v4f32_uno_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, ; AVX512-64-NEXT: vcmpunord_sps %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f32_uno_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpunord_sps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f32_uno_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunord_sps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32( <4 x float> %f1, <4 x float> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 @@ -3557,6 +4819,36 @@ define <2 x i64> @test_v2f64_oeq_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpeq_ospd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_oeq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeq_ospd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_oeq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_ospd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -3624,6 +4916,36 @@ define <2 x i64> @test_v2f64_ogt_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpltpd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ogt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpltpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ogt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -3691,6 +5013,36 @@ define <2 x i64> @test_v2f64_oge_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmplepd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_oge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmplepd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_oge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmplepd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -3756,6 +5108,36 @@ define <2 x i64> @test_v2f64_olt_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpltpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_olt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpltpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_olt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -3821,6 +5203,36 @@ define <2 x i64> @test_v2f64_ole_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmplepd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ole_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmplepd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ole_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmplepd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -3897,6 +5309,36 @@ define <2 x i64> @test_v2f64_one_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpneq_ospd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_one_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneq_ospd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_one_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_ospd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -3967,6 +5409,36 @@ define <2 x i64> @test_v2f64_ord_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpord_spd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ord_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpord_spd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ord_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpord_spd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -4043,6 +5515,36 @@ define <2 x i64> @test_v2f64_ueq_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpeq_uspd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ueq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpeq_uspd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ueq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_uspd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -4108,6 +5610,36 @@ define <2 x i64> @test_v2f64_ugt_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnlepd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ugt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnlepd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ugt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlepd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -4173,6 +5705,36 @@ define <2 x i64> @test_v2f64_uge_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnltpd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_uge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnltpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_uge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -4240,6 +5802,36 @@ define <2 x i64> @test_v2f64_ult_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnlepd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ult_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnlepd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ult_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlepd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -4307,6 +5899,36 @@ define <2 x i64> @test_v2f64_ule_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpnltpd %xmm2, %xmm3, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_ule_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpnltpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_ule_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -4377,6 +5999,36 @@ define <2 x i64> @test_v2f64_une_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpneq_uspd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_une_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpneq_uspd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_une_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_uspd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -4447,6 +6099,36 @@ define <2 x i64> @test_v2f64_uno_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, ; AVX512-64-NEXT: vcmpunord_spd %xmm3, %xmm2, %k1 ; AVX512-64-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f64_uno_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vcmpunord_spd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f64_uno_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm3 killed $xmm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunord_spd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64( <2 x double> %f1, <2 x double> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 diff --git a/llvm/test/CodeGen/X86/vec-strict-cmp-256.ll b/llvm/test/CodeGen/X86/vec-strict-cmp-256.ll index 583c2b484cf302..225aebfeb65a89 100644 --- a/llvm/test/CodeGen/X86/vec-strict-cmp-256.ll +++ b/llvm/test/CodeGen/X86/vec-strict-cmp-256.ll @@ -3,6 +3,8 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=CHECK,AVX,AVX-64 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=CHECK,AVX512-32 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=CHECK,AVX512-64 +; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,AVX512F-32 +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,AVX512F-64 define <8 x i32> @test_v8f32_oeq_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { ; AVX-32-LABEL: test_v8f32_oeq_q: @@ -40,6 +42,34 @@ define <8 x i32> @test_v8f32_oeq_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpeqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_oeq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_oeq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -84,6 +114,34 @@ define <8 x i32> @test_v8f32_ogt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ogt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmplt_oqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ogt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -128,6 +186,34 @@ define <8 x i32> @test_v8f32_oge_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmple_oqps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_oge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmple_oqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_oge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -171,6 +257,34 @@ define <8 x i32> @test_v8f32_olt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_olt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmplt_oqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_olt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -214,6 +328,34 @@ define <8 x i32> @test_v8f32_ole_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmple_oqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ole_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmple_oqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ole_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -257,6 +399,34 @@ define <8 x i32> @test_v8f32_one_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_one_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneq_oqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_one_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_oqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -300,6 +470,34 @@ define <8 x i32> @test_v8f32_ord_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpordps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ord_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpordps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ord_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpordps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -343,6 +541,34 @@ define <8 x i32> @test_v8f32_ueq_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ueq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeq_uqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ueq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_uqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -386,6 +612,34 @@ define <8 x i32> @test_v8f32_ugt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ugt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnle_uqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ugt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -429,6 +683,34 @@ define <8 x i32> @test_v8f32_uge_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_uge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnlt_uqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_uge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -473,6 +755,34 @@ define <8 x i32> @test_v8f32_ult_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ult_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnle_uqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ult_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -517,6 +827,34 @@ define <8 x i32> @test_v8f32_ule_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ule_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnlt_uqps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ule_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -560,6 +898,34 @@ define <8 x i32> @test_v8f32_une_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpneqps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_une_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneqps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_une_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneqps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -603,6 +969,34 @@ define <8 x i32> @test_v8f32_uno_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpunordps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_uno_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpunordps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_uno_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunordps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 @@ -646,6 +1040,34 @@ define <4 x i64> @test_v4f64_oeq_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpeqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_oeq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_oeq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -690,6 +1112,34 @@ define <4 x i64> @test_v4f64_ogt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ogt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmplt_oqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ogt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -734,6 +1184,34 @@ define <4 x i64> @test_v4f64_oge_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_oge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmple_oqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_oge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -777,6 +1255,34 @@ define <4 x i64> @test_v4f64_olt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_olt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmplt_oqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_olt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmplt_oqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -820,6 +1326,34 @@ define <4 x i64> @test_v4f64_ole_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ole_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmple_oqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ole_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmple_oqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -863,6 +1397,34 @@ define <4 x i64> @test_v4f64_one_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_one_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneq_oqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_one_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_oqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -906,6 +1468,34 @@ define <4 x i64> @test_v4f64_ord_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpordpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ord_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpordpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ord_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpordpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -949,6 +1539,34 @@ define <4 x i64> @test_v4f64_ueq_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ueq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeq_uqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ueq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_uqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -992,6 +1610,34 @@ define <4 x i64> @test_v4f64_ugt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ugt_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnle_uqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ugt_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -1035,6 +1681,34 @@ define <4 x i64> @test_v4f64_uge_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_uge_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnlt_uqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_uge_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -1079,6 +1753,34 @@ define <4 x i64> @test_v4f64_ult_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ult_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnle_uqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ult_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnle_uqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -1123,6 +1825,34 @@ define <4 x i64> @test_v4f64_ule_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ule_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnlt_uqpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ule_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlt_uqpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -1166,6 +1896,34 @@ define <4 x i64> @test_v4f64_une_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpneqpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_une_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneqpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_une_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneqpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -1209,6 +1967,34 @@ define <4 x i64> @test_v4f64_uno_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpunordpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_uno_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpunordpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_uno_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunordpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 @@ -1252,6 +2038,34 @@ define <8 x i32> @test_v8f32_oeq_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_oeq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeq_osps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_oeq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_osps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -1296,6 +2110,34 @@ define <8 x i32> @test_v8f32_ogt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpltps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ogt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpltps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ogt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -1340,6 +2182,34 @@ define <8 x i32> @test_v8f32_oge_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpleps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_oge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpleps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_oge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpleps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -1383,6 +2253,34 @@ define <8 x i32> @test_v8f32_olt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpltps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_olt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpltps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_olt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -1426,6 +2324,34 @@ define <8 x i32> @test_v8f32_ole_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpleps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ole_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpleps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ole_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpleps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -1469,6 +2395,34 @@ define <8 x i32> @test_v8f32_one_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_one_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneq_osps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_one_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_osps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -1512,6 +2466,34 @@ define <8 x i32> @test_v8f32_ord_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpord_sps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ord_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpord_sps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ord_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpord_sps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -1555,6 +2537,34 @@ define <8 x i32> @test_v8f32_ueq_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ueq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeq_usps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ueq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_usps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -1598,6 +2608,34 @@ define <8 x i32> @test_v8f32_ugt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnleps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ugt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnleps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ugt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnleps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -1641,6 +2679,34 @@ define <8 x i32> @test_v8f32_uge_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnltps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_uge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnltps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_uge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -1685,6 +2751,34 @@ define <8 x i32> @test_v8f32_ult_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnleps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ult_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnleps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ult_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnleps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -1729,6 +2823,34 @@ define <8 x i32> @test_v8f32_ule_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpnltps %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_ule_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnltps %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_ule_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltps %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -1772,6 +2894,34 @@ define <8 x i32> @test_v8f32_une_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_une_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneq_usps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_une_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_usps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -1815,6 +2965,34 @@ define <8 x i32> @test_v8f32_uno_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, ; AVX512-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v8f32_uno_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpunord_sps %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v8f32_uno_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunord_sps %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( <8 x float> %f1, <8 x float> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 @@ -1858,6 +3036,34 @@ define <4 x i64> @test_v4f64_oeq_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_oeq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeq_ospd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_oeq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_ospd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 @@ -1902,6 +3108,34 @@ define <4 x i64> @test_v4f64_ogt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpltpd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ogt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpltpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ogt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -1946,6 +3180,34 @@ define <4 x i64> @test_v4f64_oge_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmplepd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_oge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmplepd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_oge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmplepd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"oge", metadata !"fpexcept.strict") #0 @@ -1989,6 +3251,34 @@ define <4 x i64> @test_v4f64_olt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpltpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_olt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpltpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_olt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpltpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"olt", metadata !"fpexcept.strict") #0 @@ -2032,6 +3322,34 @@ define <4 x i64> @test_v4f64_ole_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmplepd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ole_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmplepd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ole_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmplepd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ole", metadata !"fpexcept.strict") #0 @@ -2075,6 +3393,34 @@ define <4 x i64> @test_v4f64_one_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_one_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneq_ospd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_one_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_ospd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"one", metadata !"fpexcept.strict") #0 @@ -2118,6 +3464,34 @@ define <4 x i64> @test_v4f64_ord_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpord_spd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ord_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpord_spd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ord_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpord_spd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ord", metadata !"fpexcept.strict") #0 @@ -2161,6 +3535,34 @@ define <4 x i64> @test_v4f64_ueq_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ueq_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpeq_uspd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ueq_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpeq_uspd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 @@ -2204,6 +3606,34 @@ define <4 x i64> @test_v4f64_ugt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnlepd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ugt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnlepd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ugt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlepd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 @@ -2247,6 +3677,34 @@ define <4 x i64> @test_v4f64_uge_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnltpd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_uge_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnltpd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_uge_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltpd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"uge", metadata !"fpexcept.strict") #0 @@ -2291,6 +3749,34 @@ define <4 x i64> @test_v4f64_ult_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnlepd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ult_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnlepd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ult_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnlepd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ult", metadata !"fpexcept.strict") #0 @@ -2335,6 +3821,34 @@ define <4 x i64> @test_v4f64_ule_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpnltpd %ymm2, %ymm3, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_ule_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpnltpd %zmm2, %zmm3, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_ule_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpnltpd %zmm2, %zmm3, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"ule", metadata !"fpexcept.strict") #0 @@ -2378,6 +3892,34 @@ define <4 x i64> @test_v4f64_une_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_une_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpneq_uspd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_une_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpneq_uspd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"une", metadata !"fpexcept.strict") #0 @@ -2421,6 +3963,34 @@ define <4 x i64> @test_v4f64_uno_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, ; AVX512-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %k1 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v4f64_uno_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-32, %esp +; AVX512F-32-NEXT: subl $32, %esp +; AVX512F-32-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 +; AVX512F-32-NEXT: vcmpunord_spd %zmm3, %zmm2, %k1 +; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v4f64_uno_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $ymm3 killed $ymm3 def $zmm3 +; AVX512F-64-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2 +; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 +; AVX512F-64-NEXT: vcmpunord_spd %zmm3, %zmm2, %k1 +; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 +; AVX512F-64-NEXT: retq %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( <4 x double> %f1, <4 x double> %f2, metadata !"uno", metadata !"fpexcept.strict") #0 diff --git a/llvm/test/CodeGen/X86/vec-strict-cmp-sub128.ll b/llvm/test/CodeGen/X86/vec-strict-cmp-sub128.ll index 6dbac0e8ff6b34..1858a6f4e273e3 100644 --- a/llvm/test/CodeGen/X86/vec-strict-cmp-sub128.ll +++ b/llvm/test/CodeGen/X86/vec-strict-cmp-sub128.ll @@ -5,6 +5,8 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=CHECK,AVX,AVX-64 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=CHECK,AVX512-32 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=CHECK,AVX512-64 +; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,AVX512F-32 +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=CHECK,AVX512F-64 define <2 x i32> @test_v2f32_ogt_s(<2 x i32> %a, <2 x i32> %b, <2 x float> %f1, <2 x float> %f2) #0 { ; SSE-32-LABEL: test_v2f32_ogt_s: @@ -137,6 +139,61 @@ define <2 x i32> @test_v2f32_ogt_s(<2 x i32> %a, <2 x i32> %b, <2 x float> %f1, ; AVX512-64-NEXT: korw %k1, %k0, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f32_ogt_s: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: movw $-3, %ax +; AVX512F-32-NEXT: kmovw %eax, %k0 +; AVX512F-32-NEXT: vcomiss %xmm3, %xmm2 +; AVX512F-32-NEXT: seta %al +; AVX512F-32-NEXT: andl $1, %eax +; AVX512F-32-NEXT: kmovw %eax, %k1 +; AVX512F-32-NEXT: kandw %k0, %k1, %k0 +; AVX512F-32-NEXT: vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3] +; AVX512F-32-NEXT: vmovshdup {{.*#+}} xmm2 = xmm2[1,1,3,3] +; AVX512F-32-NEXT: vcomiss %xmm3, %xmm2 +; AVX512F-32-NEXT: seta %al +; AVX512F-32-NEXT: kmovw %eax, %k1 +; AVX512F-32-NEXT: kshiftlw $15, %k1, %k1 +; AVX512F-32-NEXT: kshiftrw $14, %k1, %k1 +; AVX512F-32-NEXT: korw %k1, %k0, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f32_ogt_s: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: movw $-3, %ax +; AVX512F-64-NEXT: kmovw %eax, %k0 +; AVX512F-64-NEXT: vcomiss %xmm3, %xmm2 +; AVX512F-64-NEXT: seta %al +; AVX512F-64-NEXT: andl $1, %eax +; AVX512F-64-NEXT: kmovw %eax, %k1 +; AVX512F-64-NEXT: kandw %k0, %k1, %k0 +; AVX512F-64-NEXT: vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3] +; AVX512F-64-NEXT: vmovshdup {{.*#+}} xmm2 = xmm2[1,1,3,3] +; AVX512F-64-NEXT: vcomiss %xmm3, %xmm2 +; AVX512F-64-NEXT: seta %al +; AVX512F-64-NEXT: kmovw %eax, %k1 +; AVX512F-64-NEXT: kshiftlw $15, %k1, %k1 +; AVX512F-64-NEXT: kshiftrw $14, %k1, %k1 +; AVX512F-64-NEXT: korw %k1, %k0, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32( <2 x float> %f1, <2 x float> %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 @@ -295,6 +352,73 @@ define <2 x i32> @test_v2f32_oeq_q(<2 x i32> %a, <2 x i32> %b, <2 x float> %f1, ; AVX512-64-NEXT: korw %k0, %k1, %k1 ; AVX512-64-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1} ; AVX512-64-NEXT: retq +; +; AVX512F-32-LABEL: test_v2f32_oeq_q: +; AVX512F-32: # %bb.0: +; AVX512F-32-NEXT: pushl %ebp +; AVX512F-32-NEXT: movl %esp, %ebp +; AVX512F-32-NEXT: andl $-16, %esp +; AVX512F-32-NEXT: subl $16, %esp +; AVX512F-32-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-32-NEXT: vmovaps 8(%ebp), %xmm3 +; AVX512F-32-NEXT: vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3] +; AVX512F-32-NEXT: vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3] +; AVX512F-32-NEXT: vucomiss %xmm4, %xmm5 +; AVX512F-32-NEXT: setnp %al +; AVX512F-32-NEXT: sete %cl +; AVX512F-32-NEXT: testb %al, %cl +; AVX512F-32-NEXT: setne %al +; AVX512F-32-NEXT: kmovw %eax, %k0 +; AVX512F-32-NEXT: kshiftlw $15, %k0, %k0 +; AVX512F-32-NEXT: kshiftrw $14, %k0, %k0 +; AVX512F-32-NEXT: vucomiss %xmm3, %xmm2 +; AVX512F-32-NEXT: setnp %al +; AVX512F-32-NEXT: sete %cl +; AVX512F-32-NEXT: testb %al, %cl +; AVX512F-32-NEXT: setne %al +; AVX512F-32-NEXT: andl $1, %eax +; AVX512F-32-NEXT: kmovw %eax, %k1 +; AVX512F-32-NEXT: movw $-3, %ax +; AVX512F-32-NEXT: kmovw %eax, %k2 +; AVX512F-32-NEXT: kandw %k2, %k1, %k1 +; AVX512F-32-NEXT: korw %k0, %k1, %k1 +; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-32-NEXT: movl %ebp, %esp +; AVX512F-32-NEXT: popl %ebp +; AVX512F-32-NEXT: vzeroupper +; AVX512F-32-NEXT: retl +; +; AVX512F-64-LABEL: test_v2f32_oeq_q: +; AVX512F-64: # %bb.0: +; AVX512F-64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 +; AVX512F-64-NEXT: vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3] +; AVX512F-64-NEXT: vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3] +; AVX512F-64-NEXT: vucomiss %xmm4, %xmm5 +; AVX512F-64-NEXT: setnp %al +; AVX512F-64-NEXT: sete %cl +; AVX512F-64-NEXT: testb %al, %cl +; AVX512F-64-NEXT: setne %al +; AVX512F-64-NEXT: kmovw %eax, %k0 +; AVX512F-64-NEXT: kshiftlw $15, %k0, %k0 +; AVX512F-64-NEXT: kshiftrw $14, %k0, %k0 +; AVX512F-64-NEXT: vucomiss %xmm3, %xmm2 +; AVX512F-64-NEXT: setnp %al +; AVX512F-64-NEXT: sete %cl +; AVX512F-64-NEXT: testb %al, %cl +; AVX512F-64-NEXT: setne %al +; AVX512F-64-NEXT: andl $1, %eax +; AVX512F-64-NEXT: kmovw %eax, %k1 +; AVX512F-64-NEXT: movw $-3, %ax +; AVX512F-64-NEXT: kmovw %eax, %k2 +; AVX512F-64-NEXT: kandw %k2, %k1, %k1 +; AVX512F-64-NEXT: korw %k0, %k1, %k1 +; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} +; AVX512F-64-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 +; AVX512F-64-NEXT: vzeroupper +; AVX512F-64-NEXT: retq %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32( <2 x float> %f1, <2 x float> %f2, metadata !"oeq", metadata !"fpexcept.strict") #0