text: //===-- CostTable.h - Instruction Cost Table handling -----------*- C++ -*-===//
  //
  //                     The LLVM Compiler Infrastructure
  //
  // This file is distributed under the University of Illinois Open Source
  // License. See LICENSE.TXT for details.
  //
  //===----------------------------------------------------------------------===//
  ///
  /// \file
  /// \brief Cost tables and simple lookup functions
  ///
  //===----------------------------------------------------------------------===//
  
  #ifndef LLVM_TARGET_COSTTABLE_H_
  #define LLVM_TARGET_COSTTABLE_H_
  
  #include "llvm/ADT/ArrayRef.h"
  #include "llvm/ADT/STLExtras.h"
  #include "llvm/CodeGen/MachineValueType.h"
  
  namespace llvm {
  
  /// Cost Table Entry
  struct CostTblEntry {
    int ISD;
    MVT::SimpleValueType Type;
    unsigned Cost;
  };
  
  /// 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) {
      return ISD == Entry.ISD && Ty == Entry.Type;
    });
    if (I != Tbl.end())
      return I;
  
    // Could not find an entry.
    return nullptr;
  }
  
  /// Type Conversion Cost Table
  struct TypeConversionCostTblEntry {
    int ISD;
    MVT::SimpleValueType Dst;
    MVT::SimpleValueType Src;
    unsigned Cost;
  };
  
  /// Find in type conversion cost table, TypeTy must be comparable to CompareTy
  /// by ==
  inline const TypeConversionCostTblEntry *
  ConvertCostTableLookup(ArrayRef<TypeConversionCostTblEntry> 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;
    });
    if (I != Tbl.end())
      return I;
  
    // Could not find an entry.
    return nullptr;
  }
  
  } // namespace llvm
  
  
  #endif /* LLVM_TARGET_COSTTABLE_H_ */
  