@@ -17317,25 +17317,29 @@ SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op,
1731717317 return FrameAddr;
1731817318}
1731917319
17320- // FIXME? Maybe this could be a TableGen attribute on some registers and
17321- // this table could be generated automatically from RegInfo.
17320+ #define GET_REGISTER_MATCHER
17321+ #include "PPCGenAsmMatcher.inc"
17322+
1732217323Register PPCTargetLowering::getRegisterByName(const char* RegName, LLT VT,
1732317324 const MachineFunction &MF) const {
17324- bool isPPC64 = Subtarget.isPPC64();
1732517325
17326- bool is64Bit = isPPC64 && VT == LLT::scalar(64);
17327- if (!is64Bit && VT != LLT::scalar(32))
17326+ bool Is64Bit = Subtarget. isPPC64() && VT == LLT::scalar(64);
17327+ if (!Is64Bit && VT != LLT::scalar(32))
1732817328 report_fatal_error("Invalid register global variable type");
1732917329
17330- Register Reg = StringSwitch<Register>(RegName)
17331- .Case("r1", is64Bit ? PPC::X1 : PPC::R1)
17332- .Case("r2", isPPC64 ? Register() : PPC::R2)
17333- .Case("r13", (is64Bit ? PPC::X13 : PPC::R13))
17334- .Default(Register());
17330+ Register Reg = MatchRegisterName(RegName);
17331+ if (!Reg)
17332+ report_fatal_error(Twine("Invalid global name register \""
17333+ + StringRef(RegName) + "\"."));
17334+
17335+ // Convert GPR to GP8R register for 64bit.
17336+ if (Is64Bit && StringRef(RegName).starts_with_insensitive("r"))
17337+ Reg = Reg.id() - PPC::R0 + PPC::X0;
1733517338
17336- if (Reg)
17337- return Reg;
17338- report_fatal_error("Invalid register name global variable");
17339+ if (Subtarget.getRegisterInfo()->getReservedRegs(MF).test(Reg))
17340+ report_fatal_error(Twine("Trying to obtain non-reservable register \"" +
17341+ StringRef(RegName) + "\"."));
17342+ return Reg;
1733917343}
1734017344
1734117345bool PPCTargetLowering::isAccessedAsGotIndirect(SDValue GA) const {
0 commit comments