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