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 18namespace llvm { 19 20/// Cost Table Entry 21template <class TypeTy> 22struct CostTblEntry { 23 int ISD; 24 TypeTy Type; 25 unsigned Cost; 26}; 27 28/// Find in cost table, TypeTy must be comparable to CompareTy by == 29template <class TypeTy, class CompareTy> 30int CostTableLookup(const CostTblEntry<TypeTy> *Tbl, unsigned len, int ISD, 31 CompareTy Ty) { 32 for (unsigned int i = 0; i < len; ++i) 33 if (ISD == Tbl[i].ISD && Ty == Tbl[i].Type) 34 return i; 35 36 // Could not find an entry. 37 return -1; 38} 39 40/// Find in cost table, TypeTy must be comparable to CompareTy by == 41template <class TypeTy, class CompareTy, unsigned N> 42int CostTableLookup(const CostTblEntry<TypeTy>(&Tbl)[N], int ISD, 43 CompareTy Ty) { 44 return CostTableLookup(Tbl, N, ISD, Ty); 45} 46 47/// Type Conversion Cost Table 48template <class TypeTy> 49struct TypeConversionCostTblEntry { 50 int ISD; 51 TypeTy Dst; 52 TypeTy Src; 53 unsigned Cost; 54}; 55 56/// Find in type conversion cost table, TypeTy must be comparable to CompareTy 57/// by == 58template <class TypeTy, class CompareTy> 59int ConvertCostTableLookup(const TypeConversionCostTblEntry<TypeTy> *Tbl, 60 unsigned len, int ISD, CompareTy Dst, 61 CompareTy Src) { 62 for (unsigned int i = 0; i < len; ++i) 63 if (ISD == Tbl[i].ISD && Src == Tbl[i].Src && Dst == Tbl[i].Dst) 64 return i; 65 66 // Could not find an entry. 67 return -1; 68} 69 70/// Find in type conversion cost table, TypeTy must be comparable to CompareTy 71/// by == 72template <class TypeTy, class CompareTy, unsigned N> 73int ConvertCostTableLookup(const TypeConversionCostTblEntry<TypeTy>(&Tbl)[N], 74 int ISD, CompareTy Dst, CompareTy Src) { 75 return ConvertCostTableLookup(Tbl, N, ISD, Dst, Src); 76} 77 78} // namespace llvm 79 80 81#endif /* LLVM_TARGET_COSTTABLE_H_ */ 82