blob: a870dd9ea015c456a20e9e160427997910d35ec4 [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
Jonas Paulsson58c5a7f2016-09-28 09:41:38 +000053 void getUnrollingPreferences(Loop *L, TTI::UnrollingPreferences &UP);
54
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000055 /// @}
Ulrich Weigandce4c1092015-05-05 19:25:42 +000056
57 /// \name Vector TTI Implementations
58 /// @{
59
60 unsigned getNumberOfRegisters(bool Vector);
61 unsigned getRegisterBitWidth(bool Vector);
62
63 /// @}
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000064};
65
66} // end namespace llvm
67
68#endif