[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