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, 312cab237bSDimitry Andric Optional<Reloc::Model> RM, 322cab237bSDimitry Andric Optional<CodeModel::Model> CM, CodeGenOpt::Level OL, 332cab237bSDimitry Andric bool JIT); 343dac3a9bSDimitry Andric 353dac3a9bSDimitry Andric ~WebAssemblyTargetMachine() override; 363dac3a9bSDimitry Andric const WebAssemblySubtarget * 373dac3a9bSDimitry Andric getSubtargetImpl(const Function &F) const override; 383dac3a9bSDimitry Andric 393dac3a9bSDimitry Andric // Pass Pipeline Configuration 403dac3a9bSDimitry Andric TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 413dac3a9bSDimitry Andric 423dac3a9bSDimitry Andric TargetLoweringObjectFile *getObjFileLowering() const override { 433dac3a9bSDimitry Andric return TLOF.get(); 443dac3a9bSDimitry Andric } 453dac3a9bSDimitry Andric 46da09e106SDimitry Andric TargetTransformInfo getTargetTransformInfo(const Function &F) override; 473ca95b02SDimitry Andric 483ca95b02SDimitry Andric bool usesPhysRegsForPEI() const override { return false; } 493dac3a9bSDimitry Andric }; 503dac3a9bSDimitry Andric 513dac3a9bSDimitry Andric } // end namespace llvm 523dac3a9bSDimitry Andric 533dac3a9bSDimitry Andric #endif 54