]> granicus.if.org Git - llvm/commitdiff
[X86][AVX] Update VBROADCAST folds to always use v2i64 X86vzload
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 19 Feb 2019 16:33:17 +0000 (16:33 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 19 Feb 2019 16:33:17 +0000 (16:33 +0000)
The VBROADCAST combines and SimplifyDemandedVectorElts improvements mean that we now more consistently use shorter (128-bit) X86vzload input operands.

Follow up to D58053

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354346 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrAVX512.td
lib/Target/X86/X86InstrSSE.td
test/CodeGen/X86/insertelement-shuffle.ll
test/CodeGen/X86/vector-shuffle-combining-avx2.ll
test/CodeGen/X86/vector-shuffle-combining-avx512bw.ll

index 0fba8cb4d09f2e1155659ac687bad47d8f446239..c82d1703a0d9703dc2d9c0a2c6aeafdc10723928 100644 (file)
@@ -1378,7 +1378,7 @@ multiclass avx512_subvec_broadcast_rm_dq<bits<8> opc, string OpcodeStr,
 
 let Predicates = [HasAVX512] in {
   // 32-bit targets will fail to load a i64 directly but can use ZEXT_LOAD.
-  def : Pat<(v8i64 (X86VBroadcast (v8i64 (X86vzload addr:$src)))),
+  def : Pat<(v8i64 (X86VBroadcast (v2i64 (X86vzload addr:$src)))),
             (VPBROADCASTQZm addr:$src)>;
 }
 
@@ -1386,7 +1386,7 @@ let Predicates = [HasVLX] in {
   // 32-bit targets will fail to load a i64 directly but can use ZEXT_LOAD.
   def : Pat<(v2i64 (X86VBroadcast (v2i64 (X86vzload addr:$src)))),
             (VPBROADCASTQZ128m addr:$src)>;
-  def : Pat<(v4i64 (X86VBroadcast (v4i64 (X86vzload addr:$src)))),
+  def : Pat<(v4i64 (X86VBroadcast (v2i64 (X86vzload addr:$src)))),
             (VPBROADCASTQZ256m addr:$src)>;
 }
 let Predicates = [HasVLX, HasBWI] in {
index bc2622446bc8769f8769f3078173f5873656bcb5..a55b1489e9e53252d010bb326c0b35f4a287a8bd 100644 (file)
@@ -7850,7 +7850,7 @@ let Predicates = [HasAVX2, NoVLX] in {
   // 32-bit targets will fail to load a i64 directly but can use ZEXT_LOAD.
   def : Pat<(v2i64 (X86VBroadcast (v2i64 (X86vzload addr:$src)))),
             (VPBROADCASTQrm addr:$src)>;
-  def : Pat<(v4i64 (X86VBroadcast (v4i64 (X86vzload addr:$src)))),
+  def : Pat<(v4i64 (X86VBroadcast (v2i64 (X86vzload addr:$src)))),
             (VPBROADCASTQYrm addr:$src)>;
 
   def : Pat<(v4i32 (X86VBroadcast (v4i32 (scalar_to_vector (loadi32 addr:$src))))),
index 8880dda49848022b038f37d8e30809a3adc3dc13..5b44337785e13b7527f2a04b66bfdb4149b118b1 100644 (file)
@@ -95,8 +95,7 @@ define <8 x i64> @insert_subvector_into_undef(i32 %x0, i32 %x1) nounwind {
 ;
 ; X86_AVX512-LABEL: insert_subvector_into_undef:
 ; X86_AVX512:       # %bb.0:
-; X86_AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; X86_AVX512-NEXT:    vbroadcastsd %xmm0, %zmm0
+; X86_AVX512-NEXT:    vbroadcastsd {{[0-9]+}}(%esp), %zmm0
 ; X86_AVX512-NEXT:    retl
 ;
 ; X64_AVX512-LABEL: insert_subvector_into_undef:
index 963fb98f56a4c45068c4ec739964b730a1a7ee4e..bedf6823277706c83e44bc7ee63686692ce4a754 100644 (file)
@@ -655,8 +655,7 @@ define <16 x i8> @combine_pshufb_insertion_as_broadcast_v2i64(i64 %a0) {
 define <8 x i32> @combine_permd_insertion_as_broadcast_v4i64(i64 %a0) {
 ; X86-LABEL: combine_permd_insertion_as_broadcast_v4i64:
 ; X86:       # %bb.0:
-; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; X86-NEXT:    vbroadcastsd %xmm0, %ymm0
+; X86-NEXT:    vbroadcastsd {{[0-9]+}}(%esp), %ymm0
 ; X86-NEXT:    retl
 ;
 ; X64-LABEL: combine_permd_insertion_as_broadcast_v4i64:
index 6a295ba8cc5314c0608d57e8cdb5111952b472a3..b8efb26d6fcb91b838a9997270f2b44b43ddb2f0 100644 (file)
@@ -975,8 +975,7 @@ define <16 x float> @combine_vpermi2var_vpermvar_16f32_as_vperm2_zero(<16 x floa
 define <8 x i64> @combine_vpermvar_insertion_as_broadcast_v8i64(i64 %a0) {
 ; X86-LABEL: combine_vpermvar_insertion_as_broadcast_v8i64:
 ; X86:       # %bb.0:
-; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; X86-NEXT:    vbroadcastsd %xmm0, %zmm0
+; X86-NEXT:    vbroadcastsd {{[0-9]+}}(%esp), %zmm0
 ; X86-NEXT:    retl
 ;
 ; X64-LABEL: combine_vpermvar_insertion_as_broadcast_v8i64: