1*44a14a6aSChris Bieneman //===- DirectXTargetMachine.h - DirectX Target Implementation ---*- C++ -*-===//
2*44a14a6aSChris Bieneman //
3*44a14a6aSChris Bieneman // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*44a14a6aSChris Bieneman // See https://llvm.org/LICENSE.txt for license information.
5*44a14a6aSChris Bieneman // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*44a14a6aSChris Bieneman //
7*44a14a6aSChris Bieneman //===----------------------------------------------------------------------===//
8*44a14a6aSChris Bieneman ///
9*44a14a6aSChris Bieneman //===----------------------------------------------------------------------===//
10*44a14a6aSChris Bieneman 
11*44a14a6aSChris Bieneman #ifndef LLVM_DIRECTX_DIRECTXTARGETMACHINE_H
12*44a14a6aSChris Bieneman #define LLVM_DIRECTX_DIRECTXTARGETMACHINE_H
13*44a14a6aSChris Bieneman 
14*44a14a6aSChris Bieneman #include "DirectXSubtarget.h"
15*44a14a6aSChris Bieneman #include "llvm/Target/TargetMachine.h"
16*44a14a6aSChris Bieneman 
17*44a14a6aSChris Bieneman namespace llvm {
18*44a14a6aSChris Bieneman class Function;
19*44a14a6aSChris Bieneman class DirectXTargetMachine : public LLVMTargetMachine {
20*44a14a6aSChris Bieneman   std::unique_ptr<TargetLoweringObjectFile> TLOF;
21*44a14a6aSChris Bieneman   std::unique_ptr<DirectXSubtarget> Subtarget;
22*44a14a6aSChris Bieneman 
23*44a14a6aSChris Bieneman public:
24*44a14a6aSChris Bieneman   DirectXTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
25*44a14a6aSChris Bieneman                        StringRef FS, const TargetOptions &Options,
26*44a14a6aSChris Bieneman                        Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
27*44a14a6aSChris Bieneman                        CodeGenOpt::Level OL, bool JIT);
28*44a14a6aSChris Bieneman 
29*44a14a6aSChris Bieneman   ~DirectXTargetMachine() override;
30*44a14a6aSChris Bieneman 
31*44a14a6aSChris Bieneman   bool addPassesToEmitFile(PassManagerBase &PM, raw_pwrite_stream &Out,
32*44a14a6aSChris Bieneman                            raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
33*44a14a6aSChris Bieneman                            bool DisableVerify,
34*44a14a6aSChris Bieneman                            MachineModuleInfoWrapperPass *MMIWP) override;
35*44a14a6aSChris Bieneman 
36*44a14a6aSChris Bieneman   bool addPassesToEmitMC(PassManagerBase &PM, MCContext *&Ctx,
37*44a14a6aSChris Bieneman                          raw_pwrite_stream &Out, bool DisableVerify) override;
38*44a14a6aSChris Bieneman 
39*44a14a6aSChris Bieneman   const DirectXSubtarget *getSubtargetImpl(const Function &) const override;
40*44a14a6aSChris Bieneman 
41*44a14a6aSChris Bieneman   TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
42*44a14a6aSChris Bieneman 
getObjFileLowering()43*44a14a6aSChris Bieneman   TargetLoweringObjectFile *getObjFileLowering() const override {
44*44a14a6aSChris Bieneman     return TLOF.get();
45*44a14a6aSChris Bieneman   }
46*44a14a6aSChris Bieneman 
47*44a14a6aSChris Bieneman   TargetTransformInfo getTargetTransformInfo(const Function &F) const override;
48*44a14a6aSChris Bieneman };
49*44a14a6aSChris Bieneman } // namespace llvm
50*44a14a6aSChris Bieneman 
51*44a14a6aSChris Bieneman #endif // LLVM_DIRECTX_DIRECTXTARGETMACHINE_H
52