1285163Sdim// WebAssemblyRegisterInfo.h - WebAssembly Register Information Impl -*- C++ -*-
2285163Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6285163Sdim//
7285163Sdim//===----------------------------------------------------------------------===//
8285163Sdim///
9285163Sdim/// \file
10341825Sdim/// This file contains the WebAssembly implementation of the
11285163Sdim/// WebAssemblyRegisterInfo class.
12285163Sdim///
13285163Sdim//===----------------------------------------------------------------------===//
14285163Sdim
15285163Sdim#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYREGISTERINFO_H
16285163Sdim#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYREGISTERINFO_H
17285163Sdim
18286684Sdim#define GET_REGINFO_HEADER
19286684Sdim#include "WebAssemblyGenRegisterInfo.inc"
20286684Sdim
21285163Sdimnamespace llvm {
22285163Sdim
23285163Sdimclass MachineFunction;
24285163Sdimclass RegScavenger;
25285163Sdimclass TargetRegisterClass;
26285163Sdimclass Triple;
27285163Sdim
28286684Sdimclass WebAssemblyRegisterInfo final : public WebAssemblyGenRegisterInfo {
29285163Sdim  const Triple &TT;
30285163Sdim
31285163Sdimpublic:
32285163Sdim  explicit WebAssemblyRegisterInfo(const Triple &TT);
33286684Sdim
34286684Sdim  // Code Generation virtual methods.
35286684Sdim  const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
36286684Sdim  BitVector getReservedRegs(const MachineFunction &MF) const override;
37286684Sdim  void eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj,
38286684Sdim                           unsigned FIOperandNum,
39286684Sdim                           RegScavenger *RS = nullptr) const override;
40286684Sdim
41286684Sdim  // Debug information queries.
42353358Sdim  Register getFrameRegister(const MachineFunction &MF) const override;
43286684Sdim
44296417Sdim  const TargetRegisterClass *
45296417Sdim  getPointerRegClass(const MachineFunction &MF,
46296417Sdim                     unsigned Kind = 0) const override;
47341825Sdim  // This does not apply to wasm.
48341825Sdim  const uint32_t *getNoPreservedMask() const override { return nullptr; }
49285163Sdim};
50285163Sdim
51285163Sdim} // end namespace llvm
52285163Sdim
53285163Sdim#endif
54