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 21namespace llvm { 22 23/// Cost Table Entry 24struct 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 == 31inline 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 44struct 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 == 53inline const TypeConversionCostTblEntry * 54ConvertCostTableLookup(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