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