mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-14 07:31:47 +00:00
[AVX-512] Add avx512f command lines to fast isel SSE select test.
Currently the fast isel code emits an avx1 instruction sequence even with avx512. This is different than normal isel. A follow up commit will fix this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288635 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
de0c130004
commit
999176953a
@ -3,6 +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
|
||||
|
||||
; Test all cmp predicates that can be used with SSE.
|
||||
|
||||
@ -20,6 +22,19 @@ define float @select_fcmp_oeq_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp oeq float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -40,6 +55,19 @@ define double @select_fcmp_oeq_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpeqsd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp oeq double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -61,6 +89,19 @@ define float @select_fcmp_ogt_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpltss %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ogt float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -82,6 +123,19 @@ define double @select_fcmp_ogt_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpltsd %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ogt double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -103,6 +157,19 @@ define float @select_fcmp_oge_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpless %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp oge float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -124,6 +191,19 @@ define double @select_fcmp_oge_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmplesd %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp oge double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -144,6 +224,19 @@ define float @select_fcmp_olt_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpltss %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp olt float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -164,6 +257,19 @@ define double @select_fcmp_olt_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpltsd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp olt double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -184,6 +290,19 @@ define float @select_fcmp_ole_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpless %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ole float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -204,6 +323,19 @@ define double @select_fcmp_ole_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmplesd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ole double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -224,6 +356,19 @@ define float @select_fcmp_ord_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpordss %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ord float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -244,6 +389,19 @@ define double @select_fcmp_ord_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpordsd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ord double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -264,6 +422,19 @@ define float @select_fcmp_uno_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpunordss %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp uno float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -284,6 +455,19 @@ define double @select_fcmp_uno_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpunordsd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp uno double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -304,6 +488,19 @@ define float @select_fcmp_ugt_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpnless %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ugt float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -324,6 +521,19 @@ define double @select_fcmp_ugt_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpnlesd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ugt double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -344,6 +554,19 @@ define float @select_fcmp_uge_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpnltss %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp uge float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -364,6 +587,19 @@ define double @select_fcmp_uge_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpnltsd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp uge double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -385,6 +621,19 @@ define float @select_fcmp_ult_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpnless %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ult float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -406,6 +655,19 @@ define double @select_fcmp_ult_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpnlesd %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ult double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -427,6 +689,19 @@ define float @select_fcmp_ule_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpnltss %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ule float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -448,6 +723,19 @@ define double @select_fcmp_ule_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpnltsd %xmm0, %xmm1, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp ule double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
@ -468,6 +756,19 @@ define float @select_fcmp_une_f32(float %a, float %b, float %c, float %d) {
|
||||
; AVX-NEXT: vcmpneqss %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp une float %a, %b
|
||||
%2 = select i1 %1, float %c, float %d
|
||||
@ -488,6 +789,19 @@ define double @select_fcmp_une_f64(double %a, double %b, double %c, double %d) {
|
||||
; AVX-NEXT: vcmpneqsd %xmm1, %xmm0, %xmm0
|
||||
; 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
|
||||
;
|
||||
%1 = fcmp une double %a, %b
|
||||
%2 = select i1 %1, double %c, double %d
|
||||
|
Loading…
Reference in New Issue
Block a user