[PATCH] [AVX512] Bring back vector-shuffle lowering support through broadcasts

Robert Khasanov rob.khasanov at gmail.com
Tue Oct 21 11:02:39 PDT 2014


Hi chandlerc,

I found that after your commit at rev219046 512-bit broadcasts lowering become non-optimal. Most of tests on broadcasting and embedded broadcasting were changed and they doesn’t produce efficient code.

Example below is from your commit changes (it’s the first test from test/CodeGen/X86/avx512-vbroadcast.ll): 

 define   <16 x i32> @_inreg16xi32(i32 %a) {
 ; CHECK-LABEL: _inreg16xi32:
 ; CHECK:       ## BB#0:
-; CHECK-NEXT:    vpbroadcastd %edi, %zmm0
+; CHECK-NEXT:    vmovd %edi, %xmm0
+; CHECK-NEXT:    vpbroadcastd %xmm0, %ymm0
+; CHECK-NEXT:    vinserti64x4 $1, %ymm0, %zmm0, %zmm0
 ; CHECK-NEXT:    retq
 %b = insertelement <16 x i32> undef, i32 %a, i32 0
  %c = shufflevector <16 x i32> %b, <16 x i32> undef, <16 x i32> zeroinitializer
   ret <16 x i32> %c
}

Here, 256-bit broadcast was generated instead of 512-bit one. 

I investigated the reason, found that in your version of vector-shuffle lowering there is no AVX-512 support. 

In this patch
1) I added vector-shuffle lowering through broadcasts
2) Removed asserts and branches likes because this is incorrect
-  assert(Subtarget->hasDQI() && "We can only lower v8i64 with AVX-512-DQI");
3) Fixed lowering tests

http://reviews.llvm.org/D5885

Files:
  lib/Target/X86/X86ISelLowering.cpp
  lib/Target/X86/X86InstrAVX512.td
  test/CodeGen/X86/avx512-arith.ll
  test/CodeGen/X86/avx512-vbroadcast.ll
  test/CodeGen/X86/avx512-vec-cmp.ll
  test/CodeGen/X86/vector-shuffle-512-v8.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D5885.15194.patch
Type: text/x-patch
Size: 11212 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141021/ed65fdfb/attachment.bin>


More information about the llvm-commits mailing list