blob: 850e6b9a9e9e0e29f4e8744b06c11d98958d0447 [file] [log] [blame]
Dan Gohman10e730a2015-06-29 23:51:55 +00001// WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*-
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Dan Gohman10e730a2015-06-29 23:51:55 +00006//
7//===----------------------------------------------------------------------===//
8///
9/// \file
Adrian Prantl5f8f34e42018-05-01 15:54:18 +000010/// This file declares the WebAssembly-specific subclass of
Dan Gohman10e730a2015-06-29 23:51:55 +000011/// TargetMachine.
12///
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
16#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
17
18#include "WebAssemblySubtarget.h"
19#include "llvm/Target/TargetMachine.h"
20
21namespace llvm {
22
Matthias Braunbb8507e2017-10-12 22:57:28 +000023class WebAssemblyTargetMachine final : public LLVMTargetMachine {
Dan Gohman10e730a2015-06-29 23:51:55 +000024 std::unique_ptr<TargetLoweringObjectFile> TLOF;
25 mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap;
26
27public:
28 WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
29 StringRef FS, const TargetOptions &Options,
Daniel Jasper314ed202017-08-03 05:15:53 +000030 Optional<Reloc::Model> RM,
31 Optional<CodeModel::Model> CM, CodeGenOpt::Level OL,
32 bool JIT);
Dan Gohman10e730a2015-06-29 23:51:55 +000033
34 ~WebAssemblyTargetMachine() override;
Thomas Livelyf3b4f992019-02-28 18:39:08 +000035
36 const WebAssemblySubtarget *getSubtargetImpl(std::string CPU,
37 std::string FS) const;
Dan Gohman10e730a2015-06-29 23:51:55 +000038 const WebAssemblySubtarget *
39 getSubtargetImpl(const Function &F) const override;
40
41 // Pass Pipeline Configuration
42 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
43
44 TargetLoweringObjectFile *getObjFileLowering() const override {
45 return TLOF.get();
46 }
47
Sanjoy Das26d11ca2017-12-22 18:21:59 +000048 TargetTransformInfo getTargetTransformInfo(const Function &F) override;
Derek Schuff1aaf87e2016-05-17 08:49:59 +000049
Thomas Lively649aba92020-02-03 14:37:10 -080050 bool usesPhysRegsForPEI() const override { return false; }
Heejin Ahn52221d52019-03-26 17:35:35 +000051
52 yaml::MachineFunctionInfo *createDefaultFuncInfoYAML() const override;
53 yaml::MachineFunctionInfo *
54 convertFuncInfoToYAML(const MachineFunction &MF) const override;
55 bool parseMachineFunctionInfo(const yaml::MachineFunctionInfo &,
56 PerFunctionMIParsingState &PFS,
57 SMDiagnostic &Error,
58 SMRange &SourceRange) const override;
Dan Gohman10e730a2015-06-29 23:51:55 +000059};
60
61} // end namespace llvm
62
63#endif