73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
| //==- WebAssemblyTargetTransformInfo.h - WebAssembly-specific TTI -*- C++ -*-=//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| ///
 | |
| /// \file
 | |
| /// This file a TargetTransformInfo::Concept conforming object specific
 | |
| /// to the WebAssembly target machine.
 | |
| ///
 | |
| /// It uses the target's detailed information to provide more precise answers to
 | |
| /// certain TTI queries, while letting the target independent and default TTI
 | |
| /// implementations handle the rest.
 | |
| ///
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETTRANSFORMINFO_H
 | |
| #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETTRANSFORMINFO_H
 | |
| 
 | |
| #include "WebAssemblyTargetMachine.h"
 | |
| #include "llvm/CodeGen/BasicTTIImpl.h"
 | |
| #include <algorithm>
 | |
| 
 | |
| namespace llvm {
 | |
| 
 | |
| class WebAssemblyTTIImpl final : public BasicTTIImplBase<WebAssemblyTTIImpl> {
 | |
|   typedef BasicTTIImplBase<WebAssemblyTTIImpl> BaseT;
 | |
|   typedef TargetTransformInfo TTI;
 | |
|   friend BaseT;
 | |
| 
 | |
|   const WebAssemblySubtarget *ST;
 | |
|   const WebAssemblyTargetLowering *TLI;
 | |
| 
 | |
|   const WebAssemblySubtarget *getST() const { return ST; }
 | |
|   const WebAssemblyTargetLowering *getTLI() const { return TLI; }
 | |
| 
 | |
| public:
 | |
|   WebAssemblyTTIImpl(const WebAssemblyTargetMachine *TM, const Function &F)
 | |
|       : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)),
 | |
|         TLI(ST->getTargetLowering()) {}
 | |
| 
 | |
|   /// \name Scalar TTI Implementations
 | |
|   /// @{
 | |
| 
 | |
|   // TODO: Implement more Scalar TTI for WebAssembly
 | |
| 
 | |
|   TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth) const;
 | |
| 
 | |
|   /// @}
 | |
| 
 | |
|   /// \name Vector TTI Implementations
 | |
|   /// @{
 | |
| 
 | |
|   unsigned getNumberOfRegisters(bool Vector);
 | |
|   unsigned getRegisterBitWidth(bool Vector) const;
 | |
|   unsigned getArithmeticInstrCost(
 | |
|       unsigned Opcode, Type *Ty,
 | |
|       TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
 | |
|       TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
 | |
|       TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
 | |
|       TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
 | |
|       ArrayRef<const Value *> Args = ArrayRef<const Value *>());
 | |
|   unsigned getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index);
 | |
| 
 | |
|   /// @}
 | |
| };
 | |
| 
 | |
| } // end namespace llvm
 | |
| 
 | |
| #endif
 |