[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