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>
CostTableLookup(const CostTblEntry<TypeTy> * Tbl,unsigned len,int ISD,TypeTy Ty)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>
ConvertCostTableLookup(const TypeConversionCostTblEntry<TypeTy> * Tbl,unsigned len,int ISD,TypeTy Dst,TypeTy Src)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