WebAssemblyTargetMachine.h revision 309124
1285163Sdim// WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*- 2285163Sdim// 3285163Sdim// The LLVM Compiler Infrastructure 4285163Sdim// 5285163Sdim// This file is distributed under the University of Illinois Open Source 6285163Sdim// License. See LICENSE.TXT for details. 7285163Sdim// 8285163Sdim//===----------------------------------------------------------------------===// 9285163Sdim/// 10285163Sdim/// \file 11285163Sdim/// \brief This file declares the WebAssembly-specific subclass of 12285163Sdim/// TargetMachine. 13285163Sdim/// 14285163Sdim//===----------------------------------------------------------------------===// 15285163Sdim 16285163Sdim#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H 17285163Sdim#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H 18285163Sdim 19285163Sdim#include "WebAssemblySubtarget.h" 20285163Sdim#include "llvm/Target/TargetMachine.h" 21285163Sdim 22285163Sdimnamespace llvm { 23285163Sdim 24285163Sdimclass WebAssemblyTargetMachine final : public LLVMTargetMachine { 25285163Sdim std::unique_ptr<TargetLoweringObjectFile> TLOF; 26285163Sdim mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap; 27285163Sdim 28285163Sdimpublic: 29285163Sdim WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU, 30285163Sdim StringRef FS, const TargetOptions &Options, 31309124Sdim Optional<Reloc::Model> RM, CodeModel::Model CM, 32285163Sdim CodeGenOpt::Level OL); 33285163Sdim 34285163Sdim ~WebAssemblyTargetMachine() override; 35285163Sdim const WebAssemblySubtarget * 36285163Sdim getSubtargetImpl(const Function &F) const override; 37285163Sdim 38285163Sdim // Pass Pipeline Configuration 39285163Sdim TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 40285163Sdim 41285163Sdim TargetLoweringObjectFile *getObjFileLowering() const override { 42285163Sdim return TLOF.get(); 43285163Sdim } 44285163Sdim 45285163Sdim /// \brief Get the TargetIRAnalysis for this target. 46285163Sdim TargetIRAnalysis getTargetIRAnalysis() override; 47309124Sdim 48309124Sdim bool usesPhysRegsForPEI() const override { return false; } 49285163Sdim}; 50285163Sdim 51285163Sdim} // end namespace llvm 52285163Sdim 53285163Sdim#endif 54