Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -864,10 +864,8 @@ class TargetTransformInfoImplBase {
}

virtual InstructionCost
getStridedMemoryOpCost(unsigned Opcode, Type *DataTy, const Value *Ptr,
bool VariableMask, Align Alignment,
TTI::TargetCostKind CostKind,
const Instruction *I = nullptr) const {
getStridedMemoryOpCost(const MemIntrinsicCostAttributes &MICA,
TTI::TargetCostKind CostKind) const {
return InstructionCost::getInvalid();
}

Expand Down
32 changes: 11 additions & 21 deletions llvm/include/llvm/CodeGen/BasicTTIImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1599,19 +1599,19 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
/*IsGatherScatter*/ true, CostKind);
}

InstructionCost getStridedMemoryOpCost(unsigned Opcode, Type *DataTy,
const Value *Ptr, bool VariableMask,
Align Alignment,
TTI::TargetCostKind CostKind,
const Instruction *I) const override {
InstructionCost
getStridedMemoryOpCost(const MemIntrinsicCostAttributes &MICA,
TTI::TargetCostKind CostKind) const override {
// For a target without strided memory operations (or for an illegal
// operation type on one which does), assume we lower to a gather/scatter
// operation. (Which may in turn be scalarized.)
unsigned IID = Opcode == Instruction::Load ? Intrinsic::masked_gather
: Intrinsic::masked_scatter;
unsigned IID = MICA.getID() == Intrinsic::experimental_vp_strided_load
? Intrinsic::masked_gather
: Intrinsic::masked_scatter;
return thisT()->getGatherScatterOpCost(
MemIntrinsicCostAttributes(IID, DataTy, Ptr, VariableMask, Alignment,
I),
MemIntrinsicCostAttributes(IID, MICA.getDataType(), MICA.getPointer(),
MICA.getVariableMask(), MICA.getAlignment(),
MICA.getInst()),
Comment on lines -1610 to +1614
Copy link
Contributor Author

@arcbbb arcbbb Dec 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#169885 stacks on top of this and will clean up the logic here.

CostKind);
}

Expand Down Expand Up @@ -3062,21 +3062,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
getMemIntrinsicInstrCost(const MemIntrinsicCostAttributes &MICA,
TTI::TargetCostKind CostKind) const override {
unsigned Id = MICA.getID();
Type *DataTy = MICA.getDataType();
const Value *Ptr = MICA.getPointer();
const Instruction *I = MICA.getInst();
bool VariableMask = MICA.getVariableMask();
Align Alignment = MICA.getAlignment();

switch (Id) {
case Intrinsic::experimental_vp_strided_load:
case Intrinsic::experimental_vp_strided_store: {
unsigned Opcode = Id == Intrinsic::experimental_vp_strided_load
? Instruction::Load
: Instruction::Store;
return thisT()->getStridedMemoryOpCost(Opcode, DataTy, Ptr, VariableMask,
Alignment, CostKind, I);
}
case Intrinsic::experimental_vp_strided_store:
return thisT()->getStridedMemoryOpCost(MICA, CostKind);
case Intrinsic::masked_scatter:
case Intrinsic::masked_gather:
case Intrinsic::vp_scatter:
Expand Down
22 changes: 14 additions & 8 deletions llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1212,14 +1212,20 @@ InstructionCost RISCVTTIImpl::getExpandCompressMemoryOpCost(
LT.first * getRISCVInstructionCost(Opcodes, LT.second, CostKind);
}

InstructionCost RISCVTTIImpl::getStridedMemoryOpCost(
unsigned Opcode, Type *DataTy, const Value *Ptr, bool VariableMask,
Align Alignment, TTI::TargetCostKind CostKind, const Instruction *I) const {
if (((Opcode == Instruction::Load || Opcode == Instruction::Store) &&
!isLegalStridedLoadStore(DataTy, Alignment)) ||
(Opcode != Instruction::Load && Opcode != Instruction::Store))
return BaseT::getStridedMemoryOpCost(Opcode, DataTy, Ptr, VariableMask,
Alignment, CostKind, I);
InstructionCost
RISCVTTIImpl::getStridedMemoryOpCost(const MemIntrinsicCostAttributes &MICA,
TTI::TargetCostKind CostKind) const {

unsigned Opcode = MICA.getID() == Intrinsic::experimental_vp_strided_load
? Instruction::Load
: Instruction::Store;

Type *DataTy = MICA.getDataType();
Align Alignment = MICA.getAlignment();
const Instruction *I = MICA.getInst();

if (!isLegalStridedLoadStore(DataTy, Alignment))
return BaseT::getStridedMemoryOpCost(MICA, CostKind);

if (CostKind == TTI::TCK_CodeSize)
return TTI::TCC_Basic;
Expand Down
8 changes: 3 additions & 5 deletions llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,11 +202,9 @@ class RISCVTTIImpl final : public BasicTTIImplBase<RISCVTTIImpl> {
getExpandCompressMemoryOpCost(const MemIntrinsicCostAttributes &MICA,
TTI::TargetCostKind CostKind) const override;

InstructionCost getStridedMemoryOpCost(unsigned Opcode, Type *DataTy,
const Value *Ptr, bool VariableMask,
Align Alignment,
TTI::TargetCostKind CostKind,
const Instruction *I) const override;
InstructionCost
getStridedMemoryOpCost(const MemIntrinsicCostAttributes &MICA,
TTI::TargetCostKind CostKind) const override;

InstructionCost
getCostOfKeepingLiveOverCall(ArrayRef<Type *> Tys) const override;
Expand Down
Loading