[llvm-dev] Check for isConstantPhysReg() in bool LiveRangeCalc::findReachingDefs
Great Indian Bison via llvm-dev
llvm-dev at lists.llvm.org
Mon Feb 15 02:38:49 PST 2021
Thanks Bjorn,
I see what you are suggesting
15 // The physregs aliasing Unit are the roots and their super-registers.
16 // Create all values as dead defs before extending to uses. Note that roots
17 // may share super-registers. That's OK because createDeadDefs() is
18 // idempotent. It is very rare for a register unit to have multiple roots, so
19 // uniquing super-registers is probably not worthwhile.
20 bool IsReserved = false;
21 for (MCRegUnitRootIterator Root(Unit, TRI); Root.isValid(); ++Root) {
22 bool IsRootReserved = true;
23 for (MCSuperRegIterator Super(*Root, TRI, /*IncludeSelf=*/true);
24 Super.isValid(); ++Super) {
25 MCRegister Reg = *Super;
26 if (!MRI->reg_empty(Reg))
27 LICalc->createDeadDefs(LR, Reg);
28 // A register unit is considered reserved if all its roots and all their
29 // super registers are reserved.
30 if (!MRI->isReserved(Reg))
31 IsRootReserved = false;
32 }
33 IsReserved |= IsRootReserved;
However say I mark super register as reserved but one of sub register fails isReserved() check then is it incorrect way to define a super register?
Sent with ProtonMail Secure Email.
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Sunday, February 14, 2021 9:54 PM, Björn Pettersson A <bjorn.a.pettersson at ericsson.com> wrote:
> > -----Original Message-----
> > From: llvm-dev llvm-dev-bounces at lists.llvm.org On Behalf Of Great
> > Indian Bison via llvm-dev
> > Sent: den 14 februari 2021 05:53
> > To: llvm-dev at lists.llvm.org
> > Subject: [llvm-dev] Check for isConstantPhysReg() in bool
> > LiveRangeCalc::findReachingDefs
> > Hello LLVMDevs,
> > Should following code in bool LiveRangeCalc::findReachingDefs() check for
> > isConstantPhysReg()?
> > Or there is a code which should prevent error below to hit for constant
> > physical register?
>
> Not sure, but maybe it is assumed that a constant physical register also
> should be defined as being "reserved". And if I recall it correctly
> liveness isn't calculated for reserved registers.
>
> > 2 if (Register::isPhysicalRegister(PhysReg) && !MBB-
> >
> > > isLiveIn(PhysReg)) {
> > > 1 MBB->getParent()->verify();
> > > 225 const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo();
> > > 1 errs() << "The register " << printReg(PhysReg, TRI)
> > > 2 << " needs to be live in to " << printMBBReference(*MBB)
> > > 3 << ", but is missing from the live-in list.\n";
> > > 4 report_fatal_error("Invalid global physical register");
> > > 5 }
> >
> > Thanks!
> > GI Bison.
> > Sent with https://protonmail.com Secure Email.
More information about the llvm-dev
mailing list