xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/VE/VERegisterInfo.h (revision 480093f4440d54b30b3025afeac24b48f2ba7a2e)
1*480093f4SDimitry Andric //===-- VERegisterInfo.h - VE Register Information Impl ---------*- C++ -*-===//
2*480093f4SDimitry Andric //
3*480093f4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*480093f4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*480093f4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*480093f4SDimitry Andric //
7*480093f4SDimitry Andric //===----------------------------------------------------------------------===//
8*480093f4SDimitry Andric //
9*480093f4SDimitry Andric // This file contains the VE implementation of the TargetRegisterInfo class.
10*480093f4SDimitry Andric //
11*480093f4SDimitry Andric //===----------------------------------------------------------------------===//
12*480093f4SDimitry Andric 
13*480093f4SDimitry Andric #ifndef LLVM_LIB_TARGET_VE_VEREGISTERINFO_H
14*480093f4SDimitry Andric #define LLVM_LIB_TARGET_VE_VEREGISTERINFO_H
15*480093f4SDimitry Andric 
16*480093f4SDimitry Andric #include "llvm/CodeGen/TargetRegisterInfo.h"
17*480093f4SDimitry Andric 
18*480093f4SDimitry Andric #define GET_REGINFO_HEADER
19*480093f4SDimitry Andric #include "VEGenRegisterInfo.inc"
20*480093f4SDimitry Andric 
21*480093f4SDimitry Andric namespace llvm {
22*480093f4SDimitry Andric struct VERegisterInfo : public VEGenRegisterInfo {
23*480093f4SDimitry Andric public:
24*480093f4SDimitry Andric   VERegisterInfo();
25*480093f4SDimitry Andric 
26*480093f4SDimitry Andric   /// Code Generation virtual methods...
27*480093f4SDimitry Andric   const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
28*480093f4SDimitry Andric   const uint32_t *getCallPreservedMask(const MachineFunction &MF,
29*480093f4SDimitry Andric                                        CallingConv::ID CC) const override;
30*480093f4SDimitry Andric   const uint32_t *getNoPreservedMask() const override;
31*480093f4SDimitry Andric 
32*480093f4SDimitry Andric   BitVector getReservedRegs(const MachineFunction &MF) const override;
33*480093f4SDimitry Andric   bool isConstantPhysReg(unsigned PhysReg) const override;
34*480093f4SDimitry Andric 
35*480093f4SDimitry Andric   const TargetRegisterClass *getPointerRegClass(const MachineFunction &MF,
36*480093f4SDimitry Andric                                                 unsigned Kind) const override;
37*480093f4SDimitry Andric 
38*480093f4SDimitry Andric   void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
39*480093f4SDimitry Andric                            unsigned FIOperandNum,
40*480093f4SDimitry Andric                            RegScavenger *RS = nullptr) const override;
41*480093f4SDimitry Andric 
42*480093f4SDimitry Andric   Register getFrameRegister(const MachineFunction &MF) const override;
43*480093f4SDimitry Andric 
44*480093f4SDimitry Andric   bool canRealignStack(const MachineFunction &MF) const override;
45*480093f4SDimitry Andric };
46*480093f4SDimitry Andric 
47*480093f4SDimitry Andric } // namespace llvm
48*480093f4SDimitry Andric 
49*480093f4SDimitry Andric #endif
50