diff options
| author | Craig Topper <craig.topper@gmail.com> | 2016-12-05 04:51:31 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2016-12-05 04:51:31 +0000 |
| commit | 7ef6ea324a0ce651aedd3d3b6bc40a76674b85da (patch) | |
| tree | 6966003d130b028ab7b1528294283a6270ac67a8 /llvm/test/CodeGen | |
| parent | 227d4279a8e176ee196b6b6aa5e778e4986a1f6e (diff) | |
| download | bcm5719-llvm-7ef6ea324a0ce651aedd3d3b6bc40a76674b85da.tar.gz bcm5719-llvm-7ef6ea324a0ce651aedd3d3b6bc40a76674b85da.zip | |
[AVX-512] Teach fast isel to use masked compare and movss for handling scalar cmp and select sequence when AVX-512 is enabled. This matches the behavior of normal isel.
llvm-svn: 288636
Diffstat (limited to 'llvm/test/CodeGen')
| -rw-r--r-- | llvm/test/CodeGen/X86/fast-isel-select-sse.ll | 436 |
1 files changed, 146 insertions, 290 deletions
diff --git a/llvm/test/CodeGen/X86/fast-isel-select-sse.ll b/llvm/test/CodeGen/X86/fast-isel-select-sse.ll index 9c24118e41d..502260d03f5 100644 --- a/llvm/test/CodeGen/X86/fast-isel-select-sse.ll +++ b/llvm/test/CodeGen/X86/fast-isel-select-sse.ll @@ -3,8 +3,8 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=SSE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefix=AVX ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -fast-isel -fast-isel-abort=1 -mattr=avx | FileCheck %s --check-prefix=AVX -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512SLOW -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -fast-isel -fast-isel-abort=1 -mattr=avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512FAST +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefix=AVX512 +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -fast-isel -fast-isel-abort=1 -mattr=avx512f | FileCheck %s --check-prefix=AVX512 ; Test all cmp predicates that can be used with SSE. @@ -23,18 +23,12 @@ define float @select_fcmp_oeq_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_oeq_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpeqss %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_oeq_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_oeq_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpeqss %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp oeq float %a, %b %2 = select i1 %1, float %c, float %d @@ -56,18 +50,12 @@ define double @select_fcmp_oeq_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_oeq_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpeqsd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_oeq_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpeqsd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_oeq_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpeqsd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp oeq double %a, %b %2 = select i1 %1, double %c, double %d @@ -90,18 +78,12 @@ define float @select_fcmp_ogt_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ogt_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpltss %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ogt_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpltss %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ogt_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpltss %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ogt float %a, %b %2 = select i1 %1, float %c, float %d @@ -124,18 +106,12 @@ define double @select_fcmp_ogt_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ogt_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpltsd %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ogt_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpltsd %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ogt_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpltsd %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ogt double %a, %b %2 = select i1 %1, double %c, double %d @@ -158,18 +134,12 @@ define float @select_fcmp_oge_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_oge_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpless %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_oge_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpless %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_oge_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpless %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp oge float %a, %b %2 = select i1 %1, float %c, float %d @@ -192,18 +162,12 @@ define double @select_fcmp_oge_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_oge_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmplesd %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_oge_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmplesd %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_oge_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmplesd %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp oge double %a, %b %2 = select i1 %1, double %c, double %d @@ -225,18 +189,12 @@ define float @select_fcmp_olt_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_olt_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpltss %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_olt_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpltss %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_olt_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpltss %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp olt float %a, %b %2 = select i1 %1, float %c, float %d @@ -258,18 +216,12 @@ define double @select_fcmp_olt_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_olt_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpltsd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_olt_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpltsd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_olt_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpltsd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp olt double %a, %b %2 = select i1 %1, double %c, double %d @@ -291,18 +243,12 @@ define float @select_fcmp_ole_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ole_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpless %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ole_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpless %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ole_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpless %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ole float %a, %b %2 = select i1 %1, float %c, float %d @@ -324,18 +270,12 @@ define double @select_fcmp_ole_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ole_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmplesd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ole_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmplesd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ole_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmplesd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ole double %a, %b %2 = select i1 %1, double %c, double %d @@ -357,18 +297,12 @@ define float @select_fcmp_ord_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ord_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpordss %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ord_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpordss %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ord_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpordss %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ord float %a, %b %2 = select i1 %1, float %c, float %d @@ -390,18 +324,12 @@ define double @select_fcmp_ord_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ord_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpordsd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ord_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpordsd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ord_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpordsd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ord double %a, %b %2 = select i1 %1, double %c, double %d @@ -423,18 +351,12 @@ define float @select_fcmp_uno_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_uno_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpunordss %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_uno_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpunordss %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_uno_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpunordss %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp uno float %a, %b %2 = select i1 %1, float %c, float %d @@ -456,18 +378,12 @@ define double @select_fcmp_uno_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_uno_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpunordsd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_uno_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpunordsd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_uno_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpunordsd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp uno double %a, %b %2 = select i1 %1, double %c, double %d @@ -489,18 +405,12 @@ define float @select_fcmp_ugt_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ugt_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnless %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ugt_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnless %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ugt_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnless %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ugt float %a, %b %2 = select i1 %1, float %c, float %d @@ -522,18 +432,12 @@ define double @select_fcmp_ugt_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ugt_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnlesd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ugt_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnlesd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ugt_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnlesd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ugt double %a, %b %2 = select i1 %1, double %c, double %d @@ -555,18 +459,12 @@ define float @select_fcmp_uge_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_uge_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnltss %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_uge_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnltss %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_uge_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnltss %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp uge float %a, %b %2 = select i1 %1, float %c, float %d @@ -588,18 +486,12 @@ define double @select_fcmp_uge_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_uge_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnltsd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_uge_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnltsd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_uge_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnltsd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp uge double %a, %b %2 = select i1 %1, double %c, double %d @@ -622,18 +514,12 @@ define float @select_fcmp_ult_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ult_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnless %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ult_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnless %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ult_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnless %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ult float %a, %b %2 = select i1 %1, float %c, float %d @@ -656,18 +542,12 @@ define double @select_fcmp_ult_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ult_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnlesd %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ult_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnlesd %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ult_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnlesd %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ult double %a, %b %2 = select i1 %1, double %c, double %d @@ -690,18 +570,12 @@ define float @select_fcmp_ule_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ule_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnltss %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ule_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnltss %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ule_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnltss %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ule float %a, %b %2 = select i1 %1, float %c, float %d @@ -724,18 +598,12 @@ define double @select_fcmp_ule_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_ule_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpnltsd %xmm0, %xmm1, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_ule_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpnltsd %xmm0, %xmm1, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_ule_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpnltsd %xmm0, %xmm1, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp ule double %a, %b %2 = select i1 %1, double %c, double %d @@ -757,18 +625,12 @@ define float @select_fcmp_une_f32(float %a, float %b, float %c, float %d) { ; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_une_f32: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpneqss %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovaps %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_une_f32: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpneqss %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_une_f32: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpneqss %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovaps %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp une float %a, %b %2 = select i1 %1, float %c, float %d @@ -790,18 +652,12 @@ define double @select_fcmp_une_f64(double %a, double %b, double %c, double %d) { ; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 ; AVX-NEXT: retq ; -; AVX512SLOW-LABEL: select_fcmp_une_f64: -; AVX512SLOW: # BB#0: -; AVX512SLOW-NEXT: vcmpneqsd %xmm1, %xmm0, %k1 -; AVX512SLOW-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} -; AVX512SLOW-NEXT: vmovapd %xmm3, %xmm0 -; AVX512SLOW-NEXT: retq -; -; AVX512FAST-LABEL: select_fcmp_une_f64: -; AVX512FAST: # BB#0: -; AVX512FAST-NEXT: vcmpneqsd %xmm1, %xmm0, %xmm0 -; AVX512FAST-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 -; AVX512FAST-NEXT: retq +; AVX512-LABEL: select_fcmp_une_f64: +; AVX512: # BB#0: +; AVX512-NEXT: vcmpneqsd %xmm1, %xmm0, %k1 +; AVX512-NEXT: vmovsd %xmm2, %xmm0, %xmm3 {%k1} +; AVX512-NEXT: vmovapd %xmm3, %xmm0 +; AVX512-NEXT: retq ; %1 = fcmp une double %a, %b %2 = select i1 %1, double %c, double %d |

