13dac3a9bSDimitry Andric // WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*- 23dac3a9bSDimitry Andric // 33dac3a9bSDimitry Andric // The LLVM Compiler Infrastructure 43dac3a9bSDimitry Andric // 53dac3a9bSDimitry Andric // This file is distributed under the University of Illinois Open Source 63dac3a9bSDimitry Andric // License. See LICENSE.TXT for details. 73dac3a9bSDimitry Andric // 83dac3a9bSDimitry Andric //===----------------------------------------------------------------------===// 93dac3a9bSDimitry Andric /// 103dac3a9bSDimitry Andric /// \file 113dac3a9bSDimitry Andric /// \brief This file declares the WebAssembly-specific subclass of 123dac3a9bSDimitry Andric /// TargetMachine. 133dac3a9bSDimitry Andric /// 143dac3a9bSDimitry Andric //===----------------------------------------------------------------------===// 153dac3a9bSDimitry Andric 163dac3a9bSDimitry Andric #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H 173dac3a9bSDimitry Andric #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H 183dac3a9bSDimitry Andric 193dac3a9bSDimitry Andric #include "WebAssemblySubtarget.h" 203dac3a9bSDimitry Andric #include "llvm/Target/TargetMachine.h" 213dac3a9bSDimitry Andric 223dac3a9bSDimitry Andric namespace llvm { 233dac3a9bSDimitry Andric 243dac3a9bSDimitry Andric class WebAssemblyTargetMachine final : public LLVMTargetMachine { 253dac3a9bSDimitry Andric std::unique_ptr<TargetLoweringObjectFile> TLOF; 263dac3a9bSDimitry Andric mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap; 273dac3a9bSDimitry Andric 283dac3a9bSDimitry Andric public: 293dac3a9bSDimitry Andric WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU, 303dac3a9bSDimitry Andric StringRef FS, const TargetOptions &Options, 313dac3a9bSDimitry Andric Reloc::Model RM, CodeModel::Model CM, 323dac3a9bSDimitry Andric CodeGenOpt::Level OL); 333dac3a9bSDimitry Andric 343dac3a9bSDimitry Andric ~WebAssemblyTargetMachine() override; 353dac3a9bSDimitry Andric const WebAssemblySubtarget * 363dac3a9bSDimitry Andric getSubtargetImpl(const Function &F) const override; 373dac3a9bSDimitry Andric 383dac3a9bSDimitry Andric // Pass Pipeline Configuration 393dac3a9bSDimitry Andric TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 403dac3a9bSDimitry Andric 413dac3a9bSDimitry Andric TargetLoweringObjectFile *getObjFileLowering() const override { 423dac3a9bSDimitry Andric return TLOF.get(); 433dac3a9bSDimitry Andric } 443dac3a9bSDimitry Andric 453dac3a9bSDimitry Andric /// \brief Get the TargetIRAnalysis for this target. 463dac3a9bSDimitry Andric TargetIRAnalysis getTargetIRAnalysis() override; 473dac3a9bSDimitry Andric }; 483dac3a9bSDimitry Andric 493dac3a9bSDimitry Andric } // end namespace llvm 503dac3a9bSDimitry Andric 513dac3a9bSDimitry Andric #endif 52