[PATCH] D106351: [CostModel] Templatize EntryCost::Cost to allow custom cost metrics
Simon Pilgrim via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 20 03:25:22 PDT 2021
RKSimon updated this revision to Diff 360068.
RKSimon added a comment.
Consistently using CostType for template param
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D106351/new/
https://reviews.llvm.org/D106351
Files:
llvm/include/llvm/CodeGen/CostTable.h
Index: llvm/include/llvm/CodeGen/CostTable.h
===================================================================
--- llvm/include/llvm/CodeGen/CostTable.h
+++ llvm/include/llvm/CodeGen/CostTable.h
@@ -21,15 +21,18 @@
namespace llvm {
/// Cost Table Entry
-struct CostTblEntry {
+template <typename CostType>
+struct CostTblEntryT {
int ISD;
MVT::SimpleValueType Type;
- unsigned Cost;
+ CostType Cost;
};
+using CostTblEntry = CostTblEntryT<unsigned>;
-/// Find in cost table, TypeTy must be comparable to CompareTy by ==
-inline const CostTblEntry *CostTableLookup(ArrayRef<CostTblEntry> Tbl,
- int ISD, MVT Ty) {
+/// Find in cost table.
+template <class CostType>
+inline const CostTblEntryT<CostType> *
+CostTableLookup(ArrayRef<CostTblEntryT<CostType>> Tbl, int ISD, MVT Ty) {
auto I = find_if(Tbl, [=](const CostTblEntry &Entry) {
return ISD == Entry.ISD && Ty == Entry.Type;
});
@@ -40,22 +43,34 @@
return nullptr;
}
+template <size_t N, class CostType>
+inline const CostTblEntry *
+CostTableLookup(const llvm::CostTblEntryT<CostType> (&Table)[N], int ISD,
+ MVT Ty) {
+ // Wrapper to fix template argument deduction failures.
+ return CostTableLookup<CostType>(
+ llvm::ArrayRef<llvm::CostTblEntryT<CostType>>(Table), ISD, Ty);
+}
+
/// Type Conversion Cost Table
-struct TypeConversionCostTblEntry {
+template <typename CostType>
+struct TypeConversionCostTblEntryT {
int ISD;
MVT::SimpleValueType Dst;
MVT::SimpleValueType Src;
- unsigned Cost;
+ CostType Cost;
};
+using TypeConversionCostTblEntry = TypeConversionCostTblEntryT<unsigned>;
-/// Find in type conversion cost table, TypeTy must be comparable to CompareTy
-/// by ==
-inline const TypeConversionCostTblEntry *
-ConvertCostTableLookup(ArrayRef<TypeConversionCostTblEntry> Tbl,
+/// Find in type conversion cost table.
+template <class CostType>
+inline const TypeConversionCostTblEntryT<CostType> *
+ConvertCostTableLookup(ArrayRef<TypeConversionCostTblEntryT<CostType>> Tbl,
int ISD, MVT Dst, MVT Src) {
- auto I = find_if(Tbl, [=](const TypeConversionCostTblEntry &Entry) {
- return ISD == Entry.ISD && Src == Entry.Src && Dst == Entry.Dst;
- });
+ auto I =
+ find_if(Tbl, [=](const TypeConversionCostTblEntryT<CostType> &Entry) {
+ return ISD == Entry.ISD && Src == Entry.Src && Dst == Entry.Dst;
+ });
if (I != Tbl.end())
return I;
@@ -63,6 +78,16 @@
return nullptr;
}
+template <size_t N, class CostType>
+inline const TypeConversionCostTblEntryT<CostType> *ConvertCostTableLookup(
+ const llvm::TypeConversionCostTblEntryT<CostType> (&Table)[N], int ISD,
+ MVT Dst, MVT Src) {
+ // Wrapper to fix template argument deduction failures.
+ return ConvertCostTableLookup<CostType>(
+ llvm::ArrayRef<TypeConversionCostTblEntryT<CostType>>(Table), ISD, Dst,
+ Src);
+}
+
} // namespace llvm
#endif /* LLVM_CODEGEN_COSTTABLE_H_ */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106351.360068.patch
Type: text/x-patch
Size: 3000 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210720/f72c0bf2/attachment.bin>
More information about the llvm-commits
mailing list