1b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin//===-- CostTable.h - Instruction Cost Table handling -----------*- C++ -*-===// 2b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin// 3b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin// The LLVM Compiler Infrastructure 4b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin// 5b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin// This file is distributed under the University of Illinois Open Source 6b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin// License. See LICENSE.TXT for details. 7b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin// 8b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin//===----------------------------------------------------------------------===// 9b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// 10b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// \file 11b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// \brief Cost tables and simple lookup functions 12b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// 13b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin//===----------------------------------------------------------------------===// 14b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 15b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin#ifndef LLVM_TARGET_COSTTABLE_H_ 16b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin#define LLVM_TARGET_COSTTABLE_H_ 17b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 18b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golinnamespace llvm { 19b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 20b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// Cost Table Entry 21b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golintemplate <class TypeTy> 22b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golinstruct CostTblEntry { 23b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin int ISD; 24b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin TypeTy Type; 25b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin unsigned Cost; 26b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin}; 27b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 28b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// Find in cost table, TypeTy must be comparable by == 29b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golintemplate <class TypeTy> 30b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golinint CostTableLookup(const CostTblEntry<TypeTy> *Tbl, 31b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin unsigned len, int ISD, TypeTy Ty) { 32b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin for (unsigned int i = 0; i < len; ++i) 33b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin if (Tbl[i].ISD == ISD && Tbl[i].Type == Ty) 34b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin return i; 35b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 36b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin // Could not find an entry. 37b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin return -1; 38b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin} 39b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 40b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// Type Conversion Cost Table 41b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golintemplate <class TypeTy> 42b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golinstruct TypeConversionCostTblEntry { 43b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin int ISD; 44b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin TypeTy Dst; 45b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin TypeTy Src; 46b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin unsigned Cost; 47b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin}; 48b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 49b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin/// Find in type conversion cost table, TypeTy must be comparable by == 50b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golintemplate <class TypeTy> 51b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golinint ConvertCostTableLookup(const TypeConversionCostTblEntry<TypeTy> *Tbl, 52b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin unsigned len, int ISD, TypeTy Dst, TypeTy Src) { 53b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin for (unsigned int i = 0; i < len; ++i) 54b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin if (Tbl[i].ISD == ISD && Tbl[i].Src == Src && Tbl[i].Dst == Dst) 55b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin return i; 56b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 57b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin // Could not find an entry. 58b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin return -1; 59b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin} 60b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 61b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin} // namespace llvm 62b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 63b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin 64b3755e7fa2e386e9bd348eda6b1876ae09c1bf99Renato Golin#endif /* LLVM_TARGET_COSTTABLE_H_ */ 65