mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-10 06:03:52 +00:00
[AVX-512] Promote 512-bit integer loads to v8i64 similar to what is done for 128/256-bit vectors for overall consistency.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278318 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e0ce251bcc
commit
d91ccf52e2
@ -1419,6 +1419,7 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
||||
setOperationAction(ISD::MSCATTER, VT, Custom);
|
||||
}
|
||||
for (auto VT : { MVT::v64i8, MVT::v32i16, MVT::v16i32 }) {
|
||||
setOperationPromotedToType(ISD::LOAD, VT, MVT::v8i64);
|
||||
setOperationPromotedToType(ISD::SELECT, VT, MVT::v8i64);
|
||||
}
|
||||
}// has AVX-512
|
||||
|
@ -77,15 +77,15 @@ class X86VectorVTInfo<int numelts, ValueType eltvt, RegisterClass rc,
|
||||
!if (!eq (TypeVariantName, "i"),
|
||||
!if (!eq (Size, 128), "v2i64",
|
||||
!if (!eq (Size, 256), "v4i64",
|
||||
VTName)), VTName));
|
||||
!if (!eq (Size, 512), "v8i64",
|
||||
VTName))), VTName));
|
||||
|
||||
PatFrag AlignedLdFrag = !cast<PatFrag>("alignedload" #
|
||||
!if (!eq (TypeVariantName, "i"),
|
||||
!if (!eq (Size, 128), "v2i64",
|
||||
!if (!eq (Size, 256), "v4i64",
|
||||
!if (!eq (Size, 512),
|
||||
!if (!eq (EltSize, 64), "v8i64", "v16i32"),
|
||||
VTName))), VTName));
|
||||
!if (!eq (TypeVariantName, "i"),
|
||||
!if (!eq (Size, 128), "v2i64",
|
||||
!if (!eq (Size, 256), "v4i64",
|
||||
!if (!eq (Size, 512), "v8i64",
|
||||
VTName))), VTName));
|
||||
|
||||
PatFrag ScalarLdFrag = !cast<PatFrag>("load" # EltVT);
|
||||
|
||||
@ -3443,11 +3443,11 @@ let Predicates = [HasAVX512], AddedComplexity = 400 in {
|
||||
(VMOVNTDQAZrm addr:$src)>;
|
||||
def : Pat<(v8i64 (alignednontemporalload addr:$src)),
|
||||
(VMOVNTDQAZrm addr:$src)>;
|
||||
def : Pat<(v16i32 (alignednontemporalload addr:$src)),
|
||||
def : Pat<(v16i32 (bitconvert (v8i64 (alignednontemporalload addr:$src)))),
|
||||
(VMOVNTDQAZrm addr:$src)>;
|
||||
def : Pat<(v32i16 (alignednontemporalload addr:$src)),
|
||||
def : Pat<(v32i16 (bitconvert (v8i64 (alignednontemporalload addr:$src)))),
|
||||
(VMOVNTDQAZrm addr:$src)>;
|
||||
def : Pat<(v64i8 (alignednontemporalload addr:$src)),
|
||||
def : Pat<(v64i8 (bitconvert (v8i64 (alignednontemporalload addr:$src)))),
|
||||
(VMOVNTDQAZrm addr:$src)>;
|
||||
}
|
||||
|
||||
|
@ -367,7 +367,7 @@ define <64 x i8> @splatconstant_shift_v64i8(<64 x i8> %a) nounwind {
|
||||
; AVX512BW: ## BB#0:
|
||||
; AVX512BW-NEXT: vpsrlw $3, %zmm0, %zmm0
|
||||
; AVX512BW-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0
|
||||
; AVX512BW-NEXT: vmovdqu8 {{.*#+}} zmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
|
||||
; AVX512BW-NEXT: vmovdqa64 {{.*#+}} zmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
|
||||
; AVX512BW-NEXT: vpxorq %zmm1, %zmm0, %zmm0
|
||||
; AVX512BW-NEXT: vpsubb %zmm1, %zmm0, %zmm0
|
||||
; AVX512BW-NEXT: retq
|
||||
|
Loading…
Reference in New Issue
Block a user