mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 23:23:38 -04:00
[IAI,LV] Add support for vectorizing predicated strided accesses using masked
interleave-group The vectorizer currently does not attempt to create interleave-groups that contain predicated loads/stores; predicated strided accesses can currently be vectorized only using masked gather/scatter or scalarization. This patch makes predicated loads/stores candidates for forming interleave-groups during the Loop-Vectorizer's analysis, and adds the proper support for masked-interleave- groups to the Loop-Vectorizer's planning and transformation stages. The patch also extends the TTI API to allow querying the cost of masked interleave groups (which each target can control); Targets that support masked vector loads/ stores may choose to enable this feature and allow vectorizing predicated strided loads/stores using masked wide loads/stores and shuffles. Reviewers: Ayal, hsaito, dcaballe, fhahn, javed.absar Reviewed By: Ayal Differential Revision: https://reviews.llvm.org/D53011 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344472 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -268,6 +268,10 @@ bool TargetTransformInfo::enableInterleavedAccessVectorization() const {
|
||||
return TTIImpl->enableInterleavedAccessVectorization();
|
||||
}
|
||||
|
||||
bool TargetTransformInfo::enableMaskedInterleavedAccessVectorization() const {
|
||||
return TTIImpl->enableMaskedInterleavedAccessVectorization();
|
||||
}
|
||||
|
||||
bool TargetTransformInfo::isFPVectorizationPotentiallyUnsafe() const {
|
||||
return TTIImpl->isFPVectorizationPotentiallyUnsafe();
|
||||
}
|
||||
@@ -515,9 +519,9 @@ int TargetTransformInfo::getGatherScatterOpCost(unsigned Opcode, Type *DataTy,
|
||||
|
||||
int TargetTransformInfo::getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
unsigned Alignment, unsigned AddressSpace) const {
|
||||
int Cost = TTIImpl->getInterleavedMemoryOpCost(Opcode, VecTy, Factor, Indices,
|
||||
Alignment, AddressSpace);
|
||||
unsigned Alignment, unsigned AddressSpace, bool IsMasked) const {
|
||||
int Cost = TTIImpl->getInterleavedMemoryOpCost(
|
||||
Opcode, VecTy, Factor, Indices, Alignment, AddressSpace, IsMasked);
|
||||
assert(Cost >= 0 && "TTI should not produce negative costs!");
|
||||
return Cost;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user