Skip to content

Commit 8e7140a

Browse files
committed
Update TTI to add enum value representing MaskKind to isLegalMaskedLoad/Store
1 parent 68ab338 commit 8e7140a

15 files changed

+81
-47
lines changed

llvm/include/llvm/Analysis/TargetTransformInfo.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -813,16 +813,20 @@ class TargetTransformInfo {
813813
LLVM_ABI AddressingModeKind
814814
getPreferredAddressingMode(const Loop *L, ScalarEvolution *SE) const;
815815

816-
/// Return true if the target supports masked store. A value of false for
817-
/// IsMaskConstant indicates that the mask could either be variable or
818-
/// constant. This is for targets that only support masked store with a
819-
/// constant mask.
820-
LLVM_ABI bool isLegalMaskedStore(Type *DataType, Align Alignment,
821-
unsigned AddressSpace,
822-
bool IsMaskConstant = false) const;
816+
/// Some targets only support masked load/store with a constant mask.
817+
enum MaskKind {
818+
VariableOrConstantMask,
819+
ConstantMask,
820+
};
821+
822+
/// Return true if the target supports masked store.
823+
LLVM_ABI bool
824+
isLegalMaskedStore(Type *DataType, Align Alignment, unsigned AddressSpace,
825+
MaskKind MaskKind = VariableOrConstantMask) const;
823826
/// Return true if the target supports masked load.
824-
LLVM_ABI bool isLegalMaskedLoad(Type *DataType, Align Alignment,
825-
unsigned AddressSpace) const;
827+
LLVM_ABI bool
828+
isLegalMaskedLoad(Type *DataType, Align Alignment, unsigned AddressSpace,
829+
MaskKind MaskKind = VariableOrConstantMask) const;
826830

827831
/// Return true if the target supports nontemporal store.
828832
LLVM_ABI bool isLegalNTStore(Type *DataType, Align Alignment) const;

llvm/include/llvm/Analysis/TargetTransformInfoImpl.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,12 +310,13 @@ class TargetTransformInfoImplBase {
310310

311311
virtual bool isLegalMaskedStore(Type *DataType, Align Alignment,
312312
unsigned AddressSpace,
313-
bool IsMaskConstant) const {
313+
TTI::MaskKind MaskKind) const {
314314
return false;
315315
}
316316

317317
virtual bool isLegalMaskedLoad(Type *DataType, Align Alignment,
318-
unsigned AddressSpace) const {
318+
unsigned AddressSpace,
319+
TTI::MaskKind MaskKind) const {
319320
return false;
320321
}
321322

llvm/lib/Analysis/TargetTransformInfo.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -469,14 +469,16 @@ TargetTransformInfo::getPreferredAddressingMode(const Loop *L,
469469

470470
bool TargetTransformInfo::isLegalMaskedStore(Type *DataType, Align Alignment,
471471
unsigned AddressSpace,
472-
bool IsMaskConstant) const {
472+
TTI::MaskKind MaskKind) const {
473473
return TTIImpl->isLegalMaskedStore(DataType, Alignment, AddressSpace,
474-
IsMaskConstant);
474+
MaskKind);
475475
}
476476

477477
bool TargetTransformInfo::isLegalMaskedLoad(Type *DataType, Align Alignment,
478-
unsigned AddressSpace) const {
479-
return TTIImpl->isLegalMaskedLoad(DataType, Alignment, AddressSpace);
478+
unsigned AddressSpace,
479+
TTI::MaskKind MaskKind) const {
480+
return TTIImpl->isLegalMaskedLoad(DataType, Alignment, AddressSpace,
481+
MaskKind);
480482
}
481483

482484
bool TargetTransformInfo::isLegalNTStore(Type *DataType,

llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,13 +316,14 @@ class AArch64TTIImpl final : public BasicTTIImplBase<AArch64TTIImpl> {
316316
}
317317

318318
bool isLegalMaskedLoad(Type *DataType, Align Alignment,
319-
unsigned /*AddressSpace*/) const override {
319+
unsigned /*AddressSpace*/,
320+
TTI::MaskKind /*MaskKind*/) const override {
320321
return isLegalMaskedLoadStore(DataType, Alignment);
321322
}
322323

323324
bool isLegalMaskedStore(Type *DataType, Align Alignment,
324325
unsigned /*AddressSpace*/,
325-
bool /*IsMaskConstant*/) const override {
326+
TTI::MaskKind /*MaskKind*/) const override {
326327
return isLegalMaskedLoadStore(DataType, Alignment);
327328
}
328329

llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1125,7 +1125,8 @@ bool ARMTTIImpl::isProfitableLSRChainElement(Instruction *I) const {
11251125
}
11261126

11271127
bool ARMTTIImpl::isLegalMaskedLoad(Type *DataTy, Align Alignment,
1128-
unsigned /*AddressSpace*/) const {
1128+
unsigned /*AddressSpace*/,
1129+
TTI::MaskKind /*MaskKind*/) const {
11291130
if (!EnableMaskedLoadStores || !ST->hasMVEIntegerOps())
11301131
return false;
11311132

llvm/lib/Target/ARM/ARMTargetTransformInfo.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,12 @@ class ARMTTIImpl final : public BasicTTIImplBase<ARMTTIImpl> {
186186

187187
bool isProfitableLSRChainElement(Instruction *I) const override;
188188

189-
bool isLegalMaskedLoad(Type *DataTy, Align Alignment,
190-
unsigned AddressSpace) const override;
189+
bool isLegalMaskedLoad(Type *DataTy, Align Alignment, unsigned AddressSpace,
190+
TTI::MaskKind MaskKind) const override;
191191

192192
bool isLegalMaskedStore(Type *DataTy, Align Alignment, unsigned AddressSpace,
193-
bool /*IsMaskConstant*/) const override {
194-
return isLegalMaskedLoad(DataTy, Alignment, AddressSpace);
193+
TTI::MaskKind MaskKind) const override {
194+
return isLegalMaskedLoad(DataTy, Alignment, AddressSpace, MaskKind);
195195
}
196196

197197
bool forceScalarizeMaskedGather(VectorType *VTy,

llvm/lib/Target/Hexagon/HexagonTargetTransformInfo.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,14 +342,15 @@ InstructionCost HexagonTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val,
342342

343343
bool HexagonTTIImpl::isLegalMaskedStore(Type *DataType, Align /*Alignment*/,
344344
unsigned /*AddressSpace*/,
345-
bool /*IsMaskConstant*/) const {
345+
TTI::MaskKind /*MaskKind*/) const {
346346
// This function is called from scalarize-masked-mem-intrin, which runs
347347
// in pre-isel. Use ST directly instead of calling isHVXVectorType.
348348
return HexagonMaskedVMem && ST.isTypeForHVX(DataType);
349349
}
350350

351351
bool HexagonTTIImpl::isLegalMaskedLoad(Type *DataType, Align /*Alignment*/,
352-
unsigned /*AddressSpace*/) const {
352+
unsigned /*AddressSpace*/,
353+
TTI::MaskKind /*MaskKind*/) const {
353354
// This function is called from scalarize-masked-mem-intrin, which runs
354355
// in pre-isel. Use ST directly instead of calling isHVXVectorType.
355356
return HexagonMaskedVMem && ST.isTypeForHVX(DataType);

llvm/lib/Target/Hexagon/HexagonTargetTransformInfo.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,9 @@ class HexagonTTIImpl final : public BasicTTIImplBase<HexagonTTIImpl> {
167167

168168
bool isLegalMaskedStore(Type *DataType, Align Alignment,
169169
unsigned AddressSpace,
170-
bool IsMaskConstant) const override;
171-
bool isLegalMaskedLoad(Type *DataType, Align Alignment,
172-
unsigned AddressSpace) const override;
170+
TTI::MaskKind MaskKind) const override;
171+
bool isLegalMaskedLoad(Type *DataType, Align Alignment, unsigned AddressSpace,
172+
TTI::MaskKind MaskKind) const override;
173173

174174
/// @}
175175

llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -594,9 +594,8 @@ Value *NVPTXTTIImpl::rewriteIntrinsicWithAddressSpace(IntrinsicInst *II,
594594

595595
bool NVPTXTTIImpl::isLegalMaskedStore(Type *DataTy, Align Alignment,
596596
unsigned AddrSpace,
597-
bool IsMaskConstant) const {
598-
599-
if (!IsMaskConstant)
597+
TTI::MaskKind MaskKind) const {
598+
if (MaskKind != TTI::MaskKind::ConstantMask)
600599
return false;
601600

602601
// We currently only support this feature for 256-bit vectors, so the
@@ -619,6 +618,17 @@ bool NVPTXTTIImpl::isLegalMaskedStore(Type *DataTy, Align Alignment,
619618
return false;
620619
}
621620

621+
bool NVPTXTTIImpl::isLegalMaskedLoad(Type *DataTy, Align Alignment,
622+
unsigned /*AddrSpace*/,
623+
TTI::MaskKind MaskKind) const {
624+
if (MaskKind != TTI::MaskKind::ConstantMask)
625+
return false;
626+
627+
if (Alignment < DL.getTypeStoreSize(DataTy))
628+
return false;
629+
return true;
630+
}
631+
622632
unsigned NVPTXTTIImpl::getLoadStoreVecRegBitWidth(unsigned AddrSpace) const {
623633
// 256 bit loads/stores are currently only supported for global address space
624634
if (ST->has256BitVectorLoadStore(AddrSpace))

llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,10 @@ class NVPTXTTIImpl final : public BasicTTIImplBase<NVPTXTTIImpl> {
182182
Intrinsic::ID IID) const override;
183183

184184
bool isLegalMaskedStore(Type *DataType, Align Alignment, unsigned AddrSpace,
185-
bool IsMaskConstant) const override;
185+
TTI::MaskKind MaskKind) const override;
186+
187+
bool isLegalMaskedLoad(Type *DataType, Align Alignment, unsigned AddrSpace,
188+
TTI::MaskKind MaskKind) const override;
186189

187190
unsigned getLoadStoreVecRegBitWidth(unsigned AddrSpace) const override;
188191

0 commit comments

Comments
 (0)