forked from OSchip/llvm-project
[X86][AVX512BW] Fixed 512-bit PSHUFB shuffle mask decode and added combine test.
PSHUFB decoder was assuming that input was 128 or 256-bit vector only. llvm-svn: 262661
This commit is contained in:
parent
05920b14c8
commit
f33cb61471
|
@ -314,9 +314,9 @@ void DecodePSHUFBMask(ArrayRef<uint64_t> RawMask,
|
|||
ShuffleMask.push_back(M);
|
||||
continue;
|
||||
}
|
||||
// For AVX vectors with 32 bytes the base of the shuffle is the half of
|
||||
// the vector we're inside.
|
||||
int Base = i < 16 ? 0 : 16;
|
||||
// For 256/512-bit vectors the base of the shuffle is the 128-bit
|
||||
// subvector we're inside.
|
||||
int Base = (i / 16) * 16;
|
||||
// If the high bit (7) of the byte is set, the element is zeroed.
|
||||
if (M & (1 << 7))
|
||||
ShuffleMask.push_back(SM_SentinelZero);
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512bw | FileCheck %s
|
||||
|
||||
declare <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
|
||||
|
||||
define <64 x i8> @combine_pshufb_identity(<64 x i8> %x0) {
|
||||
; CHECK-LABEL: combine_pshufb_identity:
|
||||
; CHECK: # BB#0:
|
||||
; CHECK-NEXT: retq
|
||||
%select = bitcast <8 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> to <64 x i8>
|
||||
%mask = bitcast <16 x i32> <i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051> to <64 x i8>
|
||||
%res0 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %x0, <64 x i8> %mask, <64 x i8> %select, i64 -1)
|
||||
%res1 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %res0, <64 x i8> %mask, <64 x i8> %select, i64 -1)
|
||||
ret <64 x i8> %res1
|
||||
}
|
Loading…
Reference in New Issue