blob: 9ae736d8413a2f3892373344d693e6e6647b5bed [file] [log] [blame]
Ulrich Weigand1f6666a2015-03-31 12:52:27 +00001//===-- SystemZTargetTransformInfo.h - SystemZ-specific TTI ---------------===//
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#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETTRANSFORMINFO_H
11#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETTRANSFORMINFO_H
12
13#include "SystemZTargetMachine.h"
14#include "llvm/Analysis/TargetTransformInfo.h"
15#include "llvm/CodeGen/BasicTTIImpl.h"
16
17namespace llvm {
18
19class SystemZTTIImpl : public BasicTTIImplBase<SystemZTTIImpl> {
20 typedef BasicTTIImplBase<SystemZTTIImpl> BaseT;
21 typedef TargetTransformInfo TTI;
22 friend BaseT;
23
24 const SystemZSubtarget *ST;
25 const SystemZTargetLowering *TLI;
26
27 const SystemZSubtarget *getST() const { return ST; }
28 const SystemZTargetLowering *getTLI() const { return TLI; }
29
30public:
Eric Christophera4e5d3c2015-09-16 23:38:13 +000031 explicit SystemZTTIImpl(const SystemZTargetMachine *TM, const Function &F)
Mehdi Amini5010ebf2015-07-09 02:08:42 +000032 : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)),
33 TLI(ST->getTargetLowering()) {}
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000034
35 // Provide value semantics. MSVC requires that we spell all of these out.
36 SystemZTTIImpl(const SystemZTTIImpl &Arg)
37 : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST), TLI(Arg.TLI) {}
38 SystemZTTIImpl(SystemZTTIImpl &&Arg)
39 : BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)),
40 TLI(std::move(Arg.TLI)) {}
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000041
42 /// \name Scalar TTI Implementations
43 /// @{
44
Chandler Carruth93205eb2015-08-05 18:08:10 +000045 int getIntImmCost(const APInt &Imm, Type *Ty);
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000046
Chandler Carruth93205eb2015-08-05 18:08:10 +000047 int getIntImmCost(unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty);
48 int getIntImmCost(Intrinsic::ID IID, unsigned Idx, const APInt &Imm,
49 Type *Ty);
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000050
Ulrich Weigandb4012182015-03-31 12:56:33 +000051 TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth);
52
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000053 /// @}
Ulrich Weigandce4c1092015-05-05 19:25:42 +000054
55 /// \name Vector TTI Implementations
56 /// @{
57
58 unsigned getNumberOfRegisters(bool Vector);
59 unsigned getRegisterBitWidth(bool Vector);
60
61 /// @}
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000062};
63
64} // end namespace llvm
65
66#endif