[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 07:37:14 PDT 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4ffc3c3726e9: [CostModel] Templatize EntryCost::Cost to allow custom cost metrics (authored by RKSimon).
Changed prior to commit:
https://reviews.llvm.org/D106351?vs=360112&id=360126#toc
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,16 +21,19 @@
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) {
- auto I = find_if(Tbl, [=](const CostTblEntry &Entry) {
+/// 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 CostTblEntryT<CostType> &Entry) {
return ISD == Entry.ISD && Ty == Entry.Type;
});
if (I != Tbl.end())
@@ -40,22 +43,32 @@
return nullptr;
}
+template <size_t N, class CostType>
+inline const CostTblEntryT<CostType> *
+CostTableLookup(const CostTblEntryT<CostType> (&Table)[N], int ISD, MVT Ty) {
+ // Wrapper to fix template argument deduction failures.
+ return CostTableLookup<CostType>(makeArrayRef(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 +76,14 @@
return nullptr;
}
+template <size_t N, class CostType>
+inline const TypeConversionCostTblEntryT<CostType> *
+ConvertCostTableLookup(const TypeConversionCostTblEntryT<CostType> (&Table)[N],
+ int ISD, MVT Dst, MVT Src) {
+ // Wrapper to fix template argument deduction failures.
+ return ConvertCostTableLookup<CostType>(makeArrayRef(Table), ISD, Dst, Src);
+}
+
} // namespace llvm
#endif /* LLVM_CODEGEN_COSTTABLE_H_ */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106351.360126.patch
Type: text/x-patch
Size: 2992 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210720/22ae2a66/attachment.bin>
More information about the llvm-commits
mailing list