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