[InstCombine] Signed saturation patterns
[llvm-core.git] / lib / Target / WebAssembly / WebAssemblyTargetMachine.h
blob850e6b9a9e9e0e29f4e8744b06c11d98958d0447
1 // WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*-
2 //
3 // 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
6 //
7 //===----------------------------------------------------------------------===//
8 ///
9 /// \file
10 /// This file declares the WebAssembly-specific subclass of
11 /// TargetMachine.
12 ///
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
16 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
18 #include "WebAssemblySubtarget.h"
19 #include "llvm/Target/TargetMachine.h"
21 namespace llvm {
23 class WebAssemblyTargetMachine final : public LLVMTargetMachine {
24 std::unique_ptr<TargetLoweringObjectFile> TLOF;
25 mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap;
27 public:
28 WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
29 StringRef FS, const TargetOptions &Options,
30 Optional<Reloc::Model> RM,
31 Optional<CodeModel::Model> CM, CodeGenOpt::Level OL,
32 bool JIT);
34 ~WebAssemblyTargetMachine() override;
36 const WebAssemblySubtarget *getSubtargetImpl(std::string CPU,
37 std::string FS) const;
38 const WebAssemblySubtarget *
39 getSubtargetImpl(const Function &F) const override;
41 // Pass Pipeline Configuration
42 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
44 TargetLoweringObjectFile *getObjFileLowering() const override {
45 return TLOF.get();
48 TargetTransformInfo getTargetTransformInfo(const Function &F) override;
50 bool usesPhysRegsForPEI() const override { return false; }
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;
61 } // end namespace llvm
63 #endif