[PATCH] D146102: [TTI] Add X86 target specific version of getPointersChainCost.
Valeriy Dmitriev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 16 10:27:02 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4c2299003fe1: [TTI] Add X86 target specific version of getPointersChainCost. (authored by vdmitrie).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D146102/new/
https://reviews.llvm.org/D146102
Files:
llvm/lib/Target/X86/X86TargetTransformInfo.cpp
llvm/lib/Target/X86/X86TargetTransformInfo.h
llvm/test/Transforms/SLPVectorizer/X86/remark_horcost.ll
llvm/test/Transforms/SLPVectorizer/X86/remark_not_all_parts.ll
Index: llvm/test/Transforms/SLPVectorizer/X86/remark_not_all_parts.ll
===================================================================
--- llvm/test/Transforms/SLPVectorizer/X86/remark_not_all_parts.ll
+++ llvm/test/Transforms/SLPVectorizer/X86/remark_not_all_parts.ll
@@ -62,7 +62,7 @@
; YAML-NEXT: Function: foo
; YAML-NEXT: Args:
; YAML-NEXT: - String: 'Stores SLP vectorized with cost '
- ; YAML-NEXT: - Cost: '-4'
+ ; YAML-NEXT: - Cost: '-1'
; YAML-NEXT: - String: ' and with tree size '
; YAML-NEXT: - TreeSize: '4'
Index: llvm/test/Transforms/SLPVectorizer/X86/remark_horcost.ll
===================================================================
--- llvm/test/Transforms/SLPVectorizer/X86/remark_horcost.ll
+++ llvm/test/Transforms/SLPVectorizer/X86/remark_horcost.ll
@@ -86,7 +86,7 @@
; YAML-NEXT: Function: foo
; YAML-NEXT: Args:
; YAML-NEXT: - String: 'Stores SLP vectorized with cost '
- ; YAML-NEXT: - Cost: '-14'
+ ; YAML-NEXT: - Cost: '-5'
; YAML-NEXT: - String: ' and with tree size '
; YAML-NEXT: - TreeSize: '4'
Index: llvm/lib/Target/X86/X86TargetTransformInfo.h
===================================================================
--- llvm/lib/Target/X86/X86TargetTransformInfo.h
+++ llvm/lib/Target/X86/X86TargetTransformInfo.h
@@ -177,6 +177,10 @@
Align Alignment,
TTI::TargetCostKind CostKind,
const Instruction *I);
+ InstructionCost getPointersChainCost(ArrayRef<const Value *> Ptrs,
+ const Value *Base,
+ const TTI::PointersChainInfo &Info,
+ TTI::TargetCostKind CostKind);
InstructionCost getAddressComputationCost(Type *PtrTy, ScalarEvolution *SE,
const SCEV *Ptr);
Index: llvm/lib/Target/X86/X86TargetTransformInfo.cpp
===================================================================
--- llvm/lib/Target/X86/X86TargetTransformInfo.cpp
+++ llvm/lib/Target/X86/X86TargetTransformInfo.cpp
@@ -4899,6 +4899,23 @@
return Cost + LT.first;
}
+InstructionCost X86TTIImpl::getPointersChainCost(
+ ArrayRef<const Value *> Ptrs, const Value *Base,
+ const TTI::PointersChainInfo &Info, TTI::TargetCostKind CostKind) {
+ if (Info.isSameBase() && Info.isKnownStride()) {
+ // If all the pointers have known stride all the differences are translated
+ // into constants. X86 memory addressing allows encoding it into
+ // displacement. So we just need to take the base GEP cost.
+ if (const auto *BaseGEP = dyn_cast<GetElementPtrInst>(Base)) {
+ SmallVector<const Value *> Indices(BaseGEP->indices());
+ return getGEPCost(BaseGEP->getSourceElementType(),
+ BaseGEP->getPointerOperand(), Indices, CostKind);
+ }
+ return TTI::TCC_Free;
+ }
+ return BaseT::getPointersChainCost(Ptrs, Base, Info, CostKind);
+}
+
InstructionCost X86TTIImpl::getAddressComputationCost(Type *Ty,
ScalarEvolution *SE,
const SCEV *Ptr) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146102.505868.patch
Type: text/x-patch
Size: 3369 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230316/9c4ed7d7/attachment.bin>
More information about the llvm-commits
mailing list