Mercurial > hg > CbC > CbC_llvm
view include/llvm/Target/CostTable.h @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 7d135dc70f03 |
line wrap: on
line source
//===-- CostTable.h - Instruction Cost Table handling -----------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// \file /// \brief Cost tables and simple lookup functions /// //===----------------------------------------------------------------------===// #ifndef LLVM_TARGET_COSTTABLE_H_ #define LLVM_TARGET_COSTTABLE_H_ namespace llvm { /// Cost Table Entry template <class TypeTy> struct CostTblEntry { int ISD; TypeTy Type; unsigned Cost; }; /// Find in cost table, TypeTy must be comparable to CompareTy by == template <class TypeTy, class CompareTy> int CostTableLookup(const CostTblEntry<TypeTy> *Tbl, unsigned len, int ISD, CompareTy Ty) { for (unsigned int i = 0; i < len; ++i) if (ISD == Tbl[i].ISD && Ty == Tbl[i].Type) return i; // Could not find an entry. return -1; } /// Find in cost table, TypeTy must be comparable to CompareTy by == template <class TypeTy, class CompareTy, unsigned N> int CostTableLookup(const CostTblEntry<TypeTy>(&Tbl)[N], int ISD, CompareTy Ty) { return CostTableLookup(Tbl, N, ISD, Ty); } /// Type Conversion Cost Table template <class TypeTy> struct TypeConversionCostTblEntry { int ISD; TypeTy Dst; TypeTy Src; unsigned Cost; }; /// Find in type conversion cost table, TypeTy must be comparable to CompareTy /// by == template <class TypeTy, class CompareTy> int ConvertCostTableLookup(const TypeConversionCostTblEntry<TypeTy> *Tbl, unsigned len, int ISD, CompareTy Dst, CompareTy Src) { for (unsigned int i = 0; i < len; ++i) if (ISD == Tbl[i].ISD && Src == Tbl[i].Src && Dst == Tbl[i].Dst) return i; // Could not find an entry. return -1; } /// Find in type conversion cost table, TypeTy must be comparable to CompareTy /// by == template <class TypeTy, class CompareTy, unsigned N> int ConvertCostTableLookup(const TypeConversionCostTblEntry<TypeTy>(&Tbl)[N], int ISD, CompareTy Dst, CompareTy Src) { return ConvertCostTableLookup(Tbl, N, ISD, Dst, Src); } } // namespace llvm #endif /* LLVM_TARGET_COSTTABLE_H_ */