xref: /llvm-project/llvm/lib/Target/RISCV/GISel/RISCVRegisterBankInfo.h (revision a79db96ec0decca4fe45579e039cf5589345b3ed)
14be39288SPhilip Reames //===-- RISCVRegisterBankInfo.h ---------------------------------*- C++ -*-===//
24be39288SPhilip Reames //
34be39288SPhilip Reames // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44be39288SPhilip Reames // See https://llvm.org/LICENSE.txt for license information.
54be39288SPhilip Reames // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
64be39288SPhilip Reames //
74be39288SPhilip Reames //===----------------------------------------------------------------------===//
84be39288SPhilip Reames /// \file
929463612SCraig Topper /// This file declares the targeting of the RegisterBankInfo class for RISC-V.
104be39288SPhilip Reames /// \todo This should be generated by TableGen.
114be39288SPhilip Reames //===----------------------------------------------------------------------===//
124be39288SPhilip Reames 
134be39288SPhilip Reames #ifndef LLVM_LIB_TARGET_RISCV_RISCVREGISTERBANKINFO_H
144be39288SPhilip Reames #define LLVM_LIB_TARGET_RISCV_RISCVREGISTERBANKINFO_H
154be39288SPhilip Reames 
164be39288SPhilip Reames #include "llvm/CodeGen/RegisterBankInfo.h"
174be39288SPhilip Reames 
184be39288SPhilip Reames #define GET_REGBANK_DECLARATIONS
194be39288SPhilip Reames #include "RISCVGenRegisterBank.inc"
204be39288SPhilip Reames 
214be39288SPhilip Reames namespace llvm {
224be39288SPhilip Reames 
234be39288SPhilip Reames class TargetRegisterInfo;
244be39288SPhilip Reames 
254be39288SPhilip Reames class RISCVGenRegisterBankInfo : public RegisterBankInfo {
264be39288SPhilip Reames protected:
274be39288SPhilip Reames #define GET_TARGET_REGBANK_CLASS
284be39288SPhilip Reames #include "RISCVGenRegisterBank.inc"
294be39288SPhilip Reames };
304be39288SPhilip Reames 
314be39288SPhilip Reames /// This class provides the information for the target register banks.
324be39288SPhilip Reames class RISCVRegisterBankInfo final : public RISCVGenRegisterBankInfo {
334be39288SPhilip Reames public:
34aa7eace8SNitin John Raj   RISCVRegisterBankInfo(unsigned HwMode);
35d9320e22SCraig Topper 
36d9320e22SCraig Topper   const InstructionMapping &
37d9320e22SCraig Topper   getInstrMapping(const MachineInstr &MI) const override;
38c44ac52eSCraig Topper 
39c44ac52eSCraig Topper private:
409e88a207SCraig Topper   /// \returns true if \p MI only uses and defines FPRs.
419e88a207SCraig Topper   bool hasFPConstraints(const MachineInstr &MI, const MachineRegisterInfo &MRI,
429e88a207SCraig Topper                         const TargetRegisterInfo &TRI) const;
439e88a207SCraig Topper 
44c44ac52eSCraig Topper   /// \returns true if \p MI only uses FPRs.
45c44ac52eSCraig Topper   bool onlyUsesFP(const MachineInstr &MI, const MachineRegisterInfo &MRI,
46c44ac52eSCraig Topper                   const TargetRegisterInfo &TRI) const;
47c44ac52eSCraig Topper 
48*6976dac0SMichael Maitland   /// \returns true if any use of \p Def only user FPRs.
49*6976dac0SMichael Maitland   bool anyUseOnlyUseFP(Register Def, const MachineRegisterInfo &MRI,
50*6976dac0SMichael Maitland                        const TargetRegisterInfo &TRI) const;
51*6976dac0SMichael Maitland 
52c44ac52eSCraig Topper   /// \returns true if \p MI only defines FPRs.
53c44ac52eSCraig Topper   bool onlyDefinesFP(const MachineInstr &MI, const MachineRegisterInfo &MRI,
54c44ac52eSCraig Topper                      const TargetRegisterInfo &TRI) const;
554be39288SPhilip Reames };
564be39288SPhilip Reames } // end namespace llvm
574be39288SPhilip Reames #endif
58