[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:02:33 PDT 2021


RKSimon updated this revision to Diff 360112.
RKSimon added a comment.

Thanks for the reviews - tidied up the code as suggested (it'd taken so long to get the template code to work I'd rather over complicated it all.....)


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,33 @@
   return nullptr;
 }
 
+template <size_t N, class CostType>
+inline const CostTblEntryT<CostType> *
+CostTableLookup(const llvm::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 +77,14 @@
   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>(makeArrayRef(Table), ISD, Dst, Src);
+}
+
 } // namespace llvm
 
 #endif /* LLVM_CODEGEN_COSTTABLE_H_ */


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106351.360112.patch
Type: text/x-patch
Size: 3006 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210720/8d0db63e/attachment.bin>


More information about the llvm-commits mailing list