mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Use it to avoid repeating ourselves too often. Also store MVT::SimpleValueType in the TTI tables so they can be statically initialized, MVT's constructors create bloated initialization code otherwise. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188095 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- 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_ */
 |