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