Line data Source code
1 : //==- WebAssemblyTargetTransformInfo.h - WebAssembly-specific TTI -*- 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 : /// This file a TargetTransformInfo::Concept conforming object specific
12 : /// to the WebAssembly target machine.
13 : ///
14 : /// It uses the target's detailed information to provide more precise answers to
15 : /// certain TTI queries, while letting the target independent and default TTI
16 : /// implementations handle the rest.
17 : ///
18 : //===----------------------------------------------------------------------===//
19 :
20 : #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETTRANSFORMINFO_H
21 : #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETTRANSFORMINFO_H
22 :
23 : #include "WebAssemblyTargetMachine.h"
24 : #include "llvm/CodeGen/BasicTTIImpl.h"
25 : #include <algorithm>
26 :
27 : namespace llvm {
28 :
29 24631 : class WebAssemblyTTIImpl final : public BasicTTIImplBase<WebAssemblyTTIImpl> {
30 : typedef BasicTTIImplBase<WebAssemblyTTIImpl> BaseT;
31 : typedef TargetTransformInfo TTI;
32 : friend BaseT;
33 :
34 : const WebAssemblySubtarget *ST;
35 : const WebAssemblyTargetLowering *TLI;
36 :
37 0 : const WebAssemblySubtarget *getST() const { return ST; }
38 0 : const WebAssemblyTargetLowering *getTLI() const { return TLI; }
39 :
40 : public:
41 24631 : WebAssemblyTTIImpl(const WebAssemblyTargetMachine *TM, const Function &F)
42 24631 : : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)),
43 24631 : TLI(ST->getTargetLowering()) {}
44 :
45 : /// \name Scalar TTI Implementations
46 : /// @{
47 :
48 : // TODO: Implement more Scalar TTI for WebAssembly
49 :
50 : TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth) const;
51 :
52 : /// @}
53 :
54 : /// \name Vector TTI Implementations
55 : /// @{
56 :
57 : unsigned getNumberOfRegisters(bool Vector);
58 : unsigned getRegisterBitWidth(bool Vector) const;
59 : unsigned getArithmeticInstrCost(
60 : unsigned Opcode, Type *Ty,
61 : TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
62 : TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
63 : TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
64 : TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
65 : ArrayRef<const Value *> Args = ArrayRef<const Value *>());
66 : unsigned getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index);
67 :
68 : /// @}
69 : };
70 :
71 : } // end namespace llvm
72 :
73 : #endif
|