|  | // WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*- | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | /// | 
|  | /// \file | 
|  | /// This file declares the WebAssembly-specific subclass of | 
|  | /// TargetMachine. | 
|  | /// | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H | 
|  | #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H | 
|  |  | 
|  | #include "WebAssemblySubtarget.h" | 
|  | #include "llvm/CodeGen/CodeGenTargetMachineImpl.h" | 
|  | #include <optional> | 
|  |  | 
|  | namespace llvm { | 
|  |  | 
|  | class WebAssemblyTargetMachine final : public CodeGenTargetMachineImpl { | 
|  | std::unique_ptr<TargetLoweringObjectFile> TLOF; | 
|  | mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap; | 
|  | bool UsesMultivalueABI = false; | 
|  |  | 
|  | public: | 
|  | WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU, | 
|  | StringRef FS, const TargetOptions &Options, | 
|  | std::optional<Reloc::Model> RM, | 
|  | std::optional<CodeModel::Model> CM, | 
|  | CodeGenOptLevel OL, bool JIT); | 
|  |  | 
|  | ~WebAssemblyTargetMachine() override; | 
|  |  | 
|  | const WebAssemblySubtarget *getSubtargetImpl() const; | 
|  | const WebAssemblySubtarget *getSubtargetImpl(std::string CPU, | 
|  | std::string FS) const; | 
|  | const WebAssemblySubtarget * | 
|  | getSubtargetImpl(const Function &F) const override; | 
|  |  | 
|  | // Pass Pipeline Configuration | 
|  | TargetPassConfig *createPassConfig(PassManagerBase &PM) override; | 
|  |  | 
|  | TargetLoweringObjectFile *getObjFileLowering() const override { | 
|  | return TLOF.get(); | 
|  | } | 
|  |  | 
|  | MachineFunctionInfo * | 
|  | createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, | 
|  | const TargetSubtargetInfo *STI) const override; | 
|  |  | 
|  | TargetTransformInfo getTargetTransformInfo(const Function &F) const override; | 
|  |  | 
|  | bool usesPhysRegsForValues() const override { return false; } | 
|  |  | 
|  | yaml::MachineFunctionInfo *createDefaultFuncInfoYAML() const override; | 
|  | yaml::MachineFunctionInfo * | 
|  | convertFuncInfoToYAML(const MachineFunction &MF) const override; | 
|  | bool parseMachineFunctionInfo(const yaml::MachineFunctionInfo &, | 
|  | PerFunctionMIParsingState &PFS, | 
|  | SMDiagnostic &Error, | 
|  | SMRange &SourceRange) const override; | 
|  |  | 
|  | bool usesMultivalueABI() const { return UsesMultivalueABI; } | 
|  | }; | 
|  |  | 
|  | } // end namespace llvm | 
|  |  | 
|  | #endif |