CostTable.h revision 326938
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_CODEGEN_COSTTABLE_H_ 16#define LLVM_CODEGEN_COSTTABLE_H_ 17 18#include "llvm/ADT/ArrayRef.h" 19#include "llvm/ADT/STLExtras.h" 20#include "llvm/CodeGen/MachineValueType.h" 21 22namespace llvm { 23 24/// Cost Table Entry 25struct 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 == 32inline 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 45struct 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 == 54inline const TypeConversionCostTblEntry * 55ConvertCostTableLookup(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#endif /* LLVM_CODEGEN_COSTTABLE_H_ */ 70