WebAssemblyTargetMachine.h revision 287506
1186545Srwatson// WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*-
2191273Srwatson//
3186545Srwatson//                     The LLVM Compiler Infrastructure
4186545Srwatson//
5186545Srwatson// This file is distributed under the University of Illinois Open Source
6186545Srwatson// License. See LICENSE.TXT for details.
7186545Srwatson//
8186545Srwatson//===----------------------------------------------------------------------===//
9186545Srwatson///
10186545Srwatson/// \file
11186545Srwatson/// \brief This file declares the WebAssembly-specific subclass of
12186545Srwatson/// TargetMachine.
13186545Srwatson///
14186545Srwatson//===----------------------------------------------------------------------===//
15186545Srwatson
16186545Srwatson#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
17186545Srwatson#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
18186545Srwatson
19186545Srwatson#include "WebAssemblySubtarget.h"
20186545Srwatson#include "llvm/Target/TargetMachine.h"
21186545Srwatson
22186545Srwatsonnamespace llvm {
23186545Srwatson
24186545Srwatsonclass WebAssemblyTargetMachine final : public LLVMTargetMachine {
25186545Srwatson  std::unique_ptr<TargetLoweringObjectFile> TLOF;
26186545Srwatson  mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap;
27186545Srwatson
28186545Srwatsonpublic:
29186545Srwatson  WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
30186545Srwatson                           StringRef FS, const TargetOptions &Options,
31186545Srwatson                           Reloc::Model RM, CodeModel::Model CM,
32186545Srwatson                           CodeGenOpt::Level OL);
33186545Srwatson
34186545Srwatson  ~WebAssemblyTargetMachine() override;
35186545Srwatson  const WebAssemblySubtarget *
36187214Srwatson  getSubtargetImpl(const Function &F) const override;
37186545Srwatson
38187214Srwatson  // Pass Pipeline Configuration
39186545Srwatson  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
40187214Srwatson
41186545Srwatson  TargetLoweringObjectFile *getObjFileLowering() const override {
42186545Srwatson    return TLOF.get();
43186545Srwatson  }
44186545Srwatson
45186545Srwatson  /// \brief Get the TargetIRAnalysis for this target.
46186545Srwatson  TargetIRAnalysis getTargetIRAnalysis() override;
47186545Srwatson};
48186545Srwatson
49186545Srwatson} // end namespace llvm
50186545Srwatson
51186545Srwatson#endif
52186545Srwatson