Skip to content

Commit 34b9cd8

Browse files
committed
Update TTI to add enum value representing MaskKind to isLegalMaskedLoad/Store
1 parent 861d812 commit 34b9cd8

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
@@ -810,16 +810,20 @@ class TargetTransformInfo {
810810
LLVM_ABI AddressingModeKind
811811
getPreferredAddressingMode(const Loop *L, ScalarEvolution *SE) const;
812812

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

824828
/// Return true if the target supports nontemporal store.
825829
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
@@ -468,14 +468,16 @@ TargetTransformInfo::getPreferredAddressingMode(const Loop *L,
468468

469469
bool TargetTransformInfo::isLegalMaskedStore(Type *DataType, Align Alignment,
470470
unsigned AddressSpace,
471-
bool IsMaskConstant) const {
471+
TTI::MaskKind MaskKind) const {
472472
return TTIImpl->isLegalMaskedStore(DataType, Alignment, AddressSpace,
473-
IsMaskConstant);
473+
MaskKind);
474474
}
475475

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

481483
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
@@ -599,9 +599,8 @@ Value *NVPTXTTIImpl::rewriteIntrinsicWithAddressSpace(IntrinsicInst *II,
599599

600600
bool NVPTXTTIImpl::isLegalMaskedStore(Type *DataTy, Align Alignment,
601601
unsigned AddrSpace,
602-
bool IsMaskConstant) const {
603-
604-
if (!IsMaskConstant)
602+
TTI::MaskKind MaskKind) const {
603+
if (MaskKind != TTI::MaskKind::ConstantMask)
605604
return false;
606605

607606
// We currently only support this feature for 256-bit vectors, so the
@@ -624,6 +623,17 @@ bool NVPTXTTIImpl::isLegalMaskedStore(Type *DataTy, Align Alignment,
624623
return false;
625624
}
626625

626+
bool NVPTXTTIImpl::isLegalMaskedLoad(Type *DataTy, Align Alignment,
627+
unsigned /*AddrSpace*/,
628+
TTI::MaskKind MaskKind) const {
629+
if (MaskKind != TTI::MaskKind::ConstantMask)
630+
return false;
631+
632+
if (Alignment < DL.getTypeStoreSize(DataTy))
633+
return false;
634+
return true;
635+
}
636+
627637
unsigned NVPTXTTIImpl::getLoadStoreVecRegBitWidth(unsigned AddrSpace) const {
628638
// 256 bit loads/stores are currently only supported for global address space
629639
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)