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