Home | History | Annotate | Download | only in Target
      1 //===-- CostTable.h - Instruction Cost Table handling -----------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 ///
     10 /// \file
     11 /// \brief Cost tables and simple lookup functions
     12 ///
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef LLVM_TARGET_COSTTABLE_H_
     16 #define LLVM_TARGET_COSTTABLE_H_
     17 
     18 #include "llvm/ADT/ArrayRef.h"
     19 #include "llvm/ADT/STLExtras.h"
     20 #include "llvm/CodeGen/MachineValueType.h"
     21 
     22 namespace llvm {
     23 
     24 /// Cost Table Entry
     25 struct CostTblEntry {
     26   int ISD;
     27   MVT::SimpleValueType Type;
     28   unsigned Cost;
     29 };
     30 
     31 /// Find in cost table, TypeTy must be comparable to CompareTy by ==
     32 inline const CostTblEntry *CostTableLookup(ArrayRef<CostTblEntry> Tbl,
     33                                            int ISD, MVT Ty) {
     34   auto I = find_if(Tbl, [=](const CostTblEntry &Entry) {
     35     return ISD == Entry.ISD && Ty == Entry.Type;
     36   });
     37   if (I != Tbl.end())
     38     return I;
     39 
     40   // Could not find an entry.
     41   return nullptr;
     42 }
     43 
     44 /// Type Conversion Cost Table
     45 struct TypeConversionCostTblEntry {
     46   int ISD;
     47   MVT::SimpleValueType Dst;
     48   MVT::SimpleValueType Src;
     49   unsigned Cost;
     50 };
     51 
     52 /// Find in type conversion cost table, TypeTy must be comparable to CompareTy
     53 /// by ==
     54 inline const TypeConversionCostTblEntry *
     55 ConvertCostTableLookup(ArrayRef<TypeConversionCostTblEntry> Tbl,
     56                        int ISD, MVT Dst, MVT Src) {
     57   auto I = find_if(Tbl, [=](const TypeConversionCostTblEntry &Entry) {
     58     return ISD == Entry.ISD && Src == Entry.Src && Dst == Entry.Dst;
     59   });
     60   if (I != Tbl.end())
     61     return I;
     62 
     63   // Could not find an entry.
     64   return nullptr;
     65 }
     66 
     67 } // namespace llvm
     68 
     69 
     70 #endif /* LLVM_TARGET_COSTTABLE_H_ */
     71