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/CodeGen/MachineValueType.h"
     20 
     21 namespace llvm {
     22 
     23 /// Cost Table Entry
     24 struct CostTblEntry {
     25   int ISD;
     26   MVT::SimpleValueType Type;
     27   unsigned Cost;
     28 };
     29 
     30 /// Find in cost table, TypeTy must be comparable to CompareTy by ==
     31 inline const CostTblEntry *CostTableLookup(ArrayRef<CostTblEntry> Tbl,
     32                                            int ISD, MVT Ty) {
     33   auto I = std::find_if(Tbl.begin(), Tbl.end(),
     34                         [=](const CostTblEntry &Entry) {
     35                           return ISD == Entry.ISD && Ty == Entry.Type; });
     36   if (I != Tbl.end())
     37     return I;
     38 
     39   // Could not find an entry.
     40   return nullptr;
     41 }
     42 
     43 /// Type Conversion Cost Table
     44 struct TypeConversionCostTblEntry {
     45   int ISD;
     46   MVT::SimpleValueType Dst;
     47   MVT::SimpleValueType Src;
     48   unsigned Cost;
     49 };
     50 
     51 /// Find in type conversion cost table, TypeTy must be comparable to CompareTy
     52 /// by ==
     53 inline const TypeConversionCostTblEntry *
     54 ConvertCostTableLookup(ArrayRef<TypeConversionCostTblEntry> Tbl,
     55                        int ISD, MVT Dst, MVT Src) {
     56   auto I = std::find_if(Tbl.begin(), Tbl.end(),
     57                         [=](const TypeConversionCostTblEntry &Entry) {
     58                           return ISD == Entry.ISD && Src == Entry.Src &&
     59                                  Dst == Entry.Dst;
     60                         });
     61   if (I != Tbl.end())
     62     return I;
     63 
     64   // Could not find an entry.
     65   return nullptr;
     66 }
     67 
     68 } // namespace llvm
     69 
     70 
     71 #endif /* LLVM_TARGET_COSTTABLE_H_ */
     72