forked from OSchip/llvm-project
[X86] Give unary PERMI priority over SHUF128 in lowerV8I64VectorShuffle to make it possible to fold a load.
llvm-svn: 317382
This commit is contained in:
parent
918e0ca77a
commit
d21a53f246
|
@ -13709,10 +13709,6 @@ static SDValue lowerV8I64VectorShuffle(const SDLoc &DL, ArrayRef<int> Mask,
|
||||||
assert(V2.getSimpleValueType() == MVT::v8i64 && "Bad operand type!");
|
assert(V2.getSimpleValueType() == MVT::v8i64 && "Bad operand type!");
|
||||||
assert(Mask.size() == 8 && "Unexpected mask size for v8 shuffle!");
|
assert(Mask.size() == 8 && "Unexpected mask size for v8 shuffle!");
|
||||||
|
|
||||||
if (SDValue Shuf128 =
|
|
||||||
lowerV4X128VectorShuffle(DL, MVT::v8i64, Mask, V1, V2, DAG))
|
|
||||||
return Shuf128;
|
|
||||||
|
|
||||||
if (V2.isUndef()) {
|
if (V2.isUndef()) {
|
||||||
// When the shuffle is mirrored between the 128-bit lanes of the unit, we
|
// When the shuffle is mirrored between the 128-bit lanes of the unit, we
|
||||||
// can use lower latency instructions that will operate on all four
|
// can use lower latency instructions that will operate on all four
|
||||||
|
@ -13734,6 +13730,10 @@ static SDValue lowerV8I64VectorShuffle(const SDLoc &DL, ArrayRef<int> Mask,
|
||||||
getV4X86ShuffleImm8ForMask(Repeated256Mask, DL, DAG));
|
getV4X86ShuffleImm8ForMask(Repeated256Mask, DL, DAG));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SDValue Shuf128 =
|
||||||
|
lowerV4X128VectorShuffle(DL, MVT::v8i64, Mask, V1, V2, DAG))
|
||||||
|
return Shuf128;
|
||||||
|
|
||||||
// Try to use shift instructions.
|
// Try to use shift instructions.
|
||||||
if (SDValue Shift = lowerVectorShuffleAsShift(DL, MVT::v8i64, V1, V2, Mask,
|
if (SDValue Shift = lowerVectorShuffleAsShift(DL, MVT::v8i64, V1, V2, Mask,
|
||||||
Zeroable, Subtarget, DAG))
|
Zeroable, Subtarget, DAG))
|
||||||
|
|
|
@ -1165,18 +1165,35 @@ define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
|
||||||
define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
|
define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
|
||||||
; AVX512F-LABEL: shuffle_v8i64_01014545:
|
; AVX512F-LABEL: shuffle_v8i64_01014545:
|
||||||
; AVX512F: # BB#0:
|
; AVX512F: # BB#0:
|
||||||
; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
|
; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
|
||||||
; AVX512F-NEXT: retq
|
; AVX512F-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512F-32-LABEL: shuffle_v8i64_01014545:
|
; AVX512F-32-LABEL: shuffle_v8i64_01014545:
|
||||||
; AVX512F-32: # BB#0:
|
; AVX512F-32: # BB#0:
|
||||||
; AVX512F-32-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
|
; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
|
||||||
; AVX512F-32-NEXT: retl
|
; AVX512F-32-NEXT: retl
|
||||||
|
|
||||||
%shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
|
%shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
|
||||||
ret <8 x i64> %shuffle
|
ret <8 x i64> %shuffle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define <8 x i64> @shuffle_v8i64_01014545_mem(<8 x i64>* %ptr, <8 x i64> %b) {
|
||||||
|
; AVX512F-LABEL: shuffle_v8i64_01014545_mem:
|
||||||
|
; AVX512F: # BB#0:
|
||||||
|
; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
|
||||||
|
; AVX512F-NEXT: retq
|
||||||
|
;
|
||||||
|
; AVX512F-32-LABEL: shuffle_v8i64_01014545_mem:
|
||||||
|
; AVX512F-32: # BB#0:
|
||||||
|
; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||||
|
; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
|
||||||
|
; AVX512F-32-NEXT: retl
|
||||||
|
|
||||||
|
%a = load <8 x i64>, <8 x i64>* %ptr
|
||||||
|
%shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
|
||||||
|
ret <8 x i64> %shuffle
|
||||||
|
}
|
||||||
|
|
||||||
define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
|
define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
|
||||||
;
|
;
|
||||||
; AVX512F-LABEL: shuffle_v8i64_00112233:
|
; AVX512F-LABEL: shuffle_v8i64_00112233:
|
||||||
|
|
Loading…
Reference in New Issue