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/ADT/STLExtras.h" 20 #include "llvm/CodeGen/MachineValueType.h" 21 22 namespace llvm { 23 24 /// Cost Table Entry 25 struct 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 == 32 inline 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 45 struct 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 == 54 inline const TypeConversionCostTblEntry * 55 ConvertCostTableLookup(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 70 #endif /* LLVM_TARGET_COSTTABLE_H_ */ 71