diff --git a/llvm/lib/Target/RISCV/RISCVRegisterInfo.h b/llvm/lib/Target/RISCV/RISCVRegisterInfo.h index e46fe8ecb900..943c4f2627cf 100644 --- a/llvm/lib/Target/RISCV/RISCVRegisterInfo.h +++ b/llvm/lib/Target/RISCV/RISCVRegisterInfo.h @@ -112,11 +112,33 @@ struct RISCVRegisterInfo : public RISCVGenRegisterInfo { bool doesRegClassHavePseudoInitUndef( const TargetRegisterClass *RC) const override { + return isVRRegClass(RC); + } + + static bool isVRRegClass(const TargetRegisterClass *RC) { return RISCV::VRRegClass.hasSubClassEq(RC) || RISCV::VRM2RegClass.hasSubClassEq(RC) || RISCV::VRM4RegClass.hasSubClassEq(RC) || RISCV::VRM8RegClass.hasSubClassEq(RC); } + + static bool isVRNRegClass(const TargetRegisterClass *RC) { + return RISCV::VRN2M1RegClass.hasSubClassEq(RC) || + RISCV::VRN2M2RegClass.hasSubClassEq(RC) || + RISCV::VRN2M4RegClass.hasSubClassEq(RC) || + RISCV::VRN3M1RegClass.hasSubClassEq(RC) || + RISCV::VRN3M2RegClass.hasSubClassEq(RC) || + RISCV::VRN4M1RegClass.hasSubClassEq(RC) || + RISCV::VRN4M2RegClass.hasSubClassEq(RC) || + RISCV::VRN5M1RegClass.hasSubClassEq(RC) || + RISCV::VRN6M1RegClass.hasSubClassEq(RC) || + RISCV::VRN7M1RegClass.hasSubClassEq(RC) || + RISCV::VRN8M1RegClass.hasSubClassEq(RC); + } + + static bool isRVVRegClass(const TargetRegisterClass *RC) { + return isVRRegClass(RC) || isVRNRegClass(RC); + } }; } diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp index 6fe0abaccb9d..ae1a6f179a49 100644 --- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp +++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp @@ -278,21 +278,7 @@ public: static bool onlyAllocateRVVReg(const TargetRegisterInfo &TRI, const TargetRegisterClass &RC) { - return RISCV::VRRegClass.hasSubClassEq(&RC) || - RISCV::VRM2RegClass.hasSubClassEq(&RC) || - RISCV::VRM4RegClass.hasSubClassEq(&RC) || - RISCV::VRM8RegClass.hasSubClassEq(&RC) || - RISCV::VRN2M1RegClass.hasSubClassEq(&RC) || - RISCV::VRN2M2RegClass.hasSubClassEq(&RC) || - RISCV::VRN2M4RegClass.hasSubClassEq(&RC) || - RISCV::VRN3M1RegClass.hasSubClassEq(&RC) || - RISCV::VRN3M2RegClass.hasSubClassEq(&RC) || - RISCV::VRN4M1RegClass.hasSubClassEq(&RC) || - RISCV::VRN4M2RegClass.hasSubClassEq(&RC) || - RISCV::VRN5M1RegClass.hasSubClassEq(&RC) || - RISCV::VRN6M1RegClass.hasSubClassEq(&RC) || - RISCV::VRN7M1RegClass.hasSubClassEq(&RC) || - RISCV::VRN8M1RegClass.hasSubClassEq(&RC); + return RISCVRegisterInfo::isRVVRegClass(&RC); } static FunctionPass *useDefaultRegisterAllocator() { return nullptr; }