1// WebAssemblyRegisterInfo.h - WebAssembly Register Information Impl -*- 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/// \brief This file contains the WebAssembly implementation of the
12/// WebAssemblyRegisterInfo class.
13///
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYREGISTERINFO_H
17#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYREGISTERINFO_H
18
19#define GET_REGINFO_HEADER
20#include "WebAssemblyGenRegisterInfo.inc"
21
22namespace llvm {
23
24class MachineFunction;
25class RegScavenger;
26class TargetRegisterClass;
27class Triple;
28
29class WebAssemblyRegisterInfo final : public WebAssemblyGenRegisterInfo {
30  const Triple &TT;
31
32public:
33  explicit WebAssemblyRegisterInfo(const Triple &TT);
34
35  // Code Generation virtual methods.
36  const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
37  BitVector getReservedRegs(const MachineFunction &MF) const override;
38  void eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj,
39                           unsigned FIOperandNum,
40                           RegScavenger *RS = nullptr) const override;
41
42  // Debug information queries.
43  unsigned getFrameRegister(const MachineFunction &MF) const override;
44
45  const TargetRegisterClass *
46  getPointerRegClass(const MachineFunction &MF,
47                     unsigned Kind = 0) const override;
48};
49
50} // end namespace llvm
51
52#endif
53