Line data Source code
1 : // WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*-
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : ///
10 : /// \file
11 : /// This file declares the WebAssembly-specific subclass of
12 : /// TargetMachine.
13 : ///
14 : //===----------------------------------------------------------------------===//
15 :
16 : #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
17 : #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
18 :
19 : #include "WebAssemblySubtarget.h"
20 : #include "llvm/Target/TargetMachine.h"
21 :
22 : namespace llvm {
23 :
24 : class WebAssemblyTargetMachine final : public LLVMTargetMachine {
25 : std::unique_ptr<TargetLoweringObjectFile> TLOF;
26 : mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap;
27 :
28 : public:
29 : WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
30 : StringRef FS, const TargetOptions &Options,
31 : Optional<Reloc::Model> RM,
32 : Optional<CodeModel::Model> CM, CodeGenOpt::Level OL,
33 : bool JIT);
34 :
35 : ~WebAssemblyTargetMachine() override;
36 : const WebAssemblySubtarget *
37 : getSubtargetImpl(const Function &F) const override;
38 :
39 : // Pass Pipeline Configuration
40 : TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
41 :
42 9793 : TargetLoweringObjectFile *getObjFileLowering() const override {
43 9793 : return TLOF.get();
44 : }
45 :
46 : TargetTransformInfo getTargetTransformInfo(const Function &F) override;
47 :
48 2983 : bool usesPhysRegsForPEI() const override { return false; }
49 : };
50 :
51 : } // end namespace llvm
52 :
53 : #endif
|