181ad6265SDimitry Andric //===- DirectXTargetMachine.h - DirectX Target Implementation ---*- C++ -*-===// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric /// 981ad6265SDimitry Andric //===----------------------------------------------------------------------===// 1081ad6265SDimitry Andric 1181ad6265SDimitry Andric #ifndef LLVM_DIRECTX_DIRECTXTARGETMACHINE_H 1281ad6265SDimitry Andric #define LLVM_DIRECTX_DIRECTXTARGETMACHINE_H 1381ad6265SDimitry Andric 1481ad6265SDimitry Andric #include "DirectXSubtarget.h" 1581ad6265SDimitry Andric #include "llvm/Target/TargetMachine.h" 16bdd1243dSDimitry Andric #include <optional> 1781ad6265SDimitry Andric 1881ad6265SDimitry Andric namespace llvm { 1981ad6265SDimitry Andric class Function; 2081ad6265SDimitry Andric class DirectXTargetMachine : public LLVMTargetMachine { 2181ad6265SDimitry Andric std::unique_ptr<TargetLoweringObjectFile> TLOF; 2281ad6265SDimitry Andric std::unique_ptr<DirectXSubtarget> Subtarget; 2381ad6265SDimitry Andric 2481ad6265SDimitry Andric public: 2581ad6265SDimitry Andric DirectXTargetMachine(const Target &T, const Triple &TT, StringRef CPU, 2681ad6265SDimitry Andric StringRef FS, const TargetOptions &Options, 27bdd1243dSDimitry Andric std::optional<Reloc::Model> RM, 285f757f3fSDimitry Andric std::optional<CodeModel::Model> CM, CodeGenOptLevel OL, 29bdd1243dSDimitry Andric bool JIT); 3081ad6265SDimitry Andric 3181ad6265SDimitry Andric ~DirectXTargetMachine() override; 3281ad6265SDimitry Andric 3381ad6265SDimitry Andric bool addPassesToEmitFile(PassManagerBase &PM, raw_pwrite_stream &Out, 3481ad6265SDimitry Andric raw_pwrite_stream *DwoOut, CodeGenFileType FileType, 3581ad6265SDimitry Andric bool DisableVerify, 3681ad6265SDimitry Andric MachineModuleInfoWrapperPass *MMIWP) override; 3781ad6265SDimitry Andric 3881ad6265SDimitry Andric bool addPassesToEmitMC(PassManagerBase &PM, MCContext *&Ctx, 3981ad6265SDimitry Andric raw_pwrite_stream &Out, bool DisableVerify) override; 4081ad6265SDimitry Andric 4181ad6265SDimitry Andric const DirectXSubtarget *getSubtargetImpl(const Function &) const override; 4281ad6265SDimitry Andric 4381ad6265SDimitry Andric TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 4481ad6265SDimitry Andric 4581ad6265SDimitry Andric TargetLoweringObjectFile *getObjFileLowering() const override { 4681ad6265SDimitry Andric return TLOF.get(); 4781ad6265SDimitry Andric } 4881ad6265SDimitry Andric 4981ad6265SDimitry Andric TargetTransformInfo getTargetTransformInfo(const Function &F) const override; 50*0fca6ea1SDimitry Andric void registerPassBuilderCallbacks(PassBuilder &PB) override; 5181ad6265SDimitry Andric }; 5281ad6265SDimitry Andric } // namespace llvm 5381ad6265SDimitry Andric 5481ad6265SDimitry Andric #endif // LLVM_DIRECTX_DIRECTXTARGETMACHINE_H 55