[PATCH] MIR Serialization: Serialize the UsesPhysRegMask from machine register info.

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 7 09:32:09 PDT 2015


> On 2015-Aug-05, at 16:26, Alex L <arphaman at gmail.com> wrote:
> 
> 
> 
> 2015-08-05 14:17 GMT-07:00 Duncan P. N. Exon Smith <dexonsmith at apple.com>:
> 
> > On 2015-Jul-30, at 16:47, Alex L <arphaman at gmail.com> wrote:
> >
> > Hi,
> >
> > This patch serializes the UsesPhysRegMask register mask from the machine register
> > information class. The mask is serialized as an inverted 'calleeSavedRegisters' mask
> > to keep the output minimal. It uses the following syntax:
> >
> > calleeSavedRegisters: [ '%bh', '%bl', '%bp', '%bpl', '%bx', '%ebp', '%ebx',
> >                         '%rbp', '%rbx', '%r12', '%r13', '%r14', '%r15',
> >                         '%r12b', '%r13b', '%r14b', '%r15b', '%r12d', '%r13d',
> >                         '%r14d', '%r15d', '%r12w', '%r13w', '%r14w', '%r15w' ]
> >
> > As you can see, the sub registers are included in this mask as well.
> >
> > This patch also allows the MIR parser to infer this mask from the register mask
> > operands if the machine function doesn't specify it.
> >
> > Cheers,
> > Alex
> > <0001-MIR-Serialization-serialize-the-UsesPhysRegMask-from.patch>
> 
> > From ca446d1f7a90691ffcc0c1ac16855e5b0eb7a9d0 Mon Sep 17 00:00:00 2001
> > From: Alex Lorenz <arphaman at gmail.com>
> > Date: Thu, 30 Jul 2015 16:37:25 -0700
> > Subject: [PATCH] MIR Serialization: serialize the UsesPhysRegMask from
> >  register info
> >
> > ---
> >  include/llvm/CodeGen/MIRYamlMapping.h              |  2 +
> >  include/llvm/CodeGen/MachineRegisterInfo.h         |  4 +
> >  lib/CodeGen/MIRParser/MIRParser.cpp                | 31 ++++++++
> >  lib/CodeGen/MIRPrinter.cpp                         | 12 +++
> >  .../MIR/X86/used-physical-register-info.mir        | 89 ++++++++++++++++++++++
> >  5 files changed, 138 insertions(+)
> >  create mode 100644 test/CodeGen/MIR/X86/used-physical-register-info.mir
> >
> > diff --git a/lib/CodeGen/MIRPrinter.cpp b/lib/CodeGen/MIRPrinter.cpp
> > index f34cef7..9ce7e19 100644
> > --- a/lib/CodeGen/MIRPrinter.cpp
> > +++ b/lib/CodeGen/MIRPrinter.cpp
> > @@ -213,6 +213,18 @@ void MIRPrinter::convert(yaml::MachineFunction &MF,
> >        printReg(I->second, LiveIn.VirtualRegister, TRI);
> >      MF.LiveIns.push_back(LiveIn);
> >    }
> > +  // The used physical register mask is printed as an inverted callee saved
> > +  // register mask.
> > +  const BitVector &UsedPhysRegMask = RegInfo.getUsedPhysRegsMask();
> > +  if (UsedPhysRegMask.none())
> > +    return;
> 
> Will this cause a problem on the parsing side?  In particular, won't the
> reader infer "the default set" here?  To put it another way, how do you
> express in MIR that no registers should be marked callee-saved?
> 
> So, this none condition is triggered only when the machine function
> doesn't have any register mask operands. Because of that, we don't
> really want to serialize it as this mask isn't really active in this case.
> And the parser will try to infer it when parsing it back in this case,
> but I think it's better if it will do that - if the MIR file wasn't modified
> the result mask will stay exactly the same as it was before it was
> serialized, and otherwise, if the user modified the MIR file and added
> some instructions with register mask operands then the parser will
> compute the mask correctly.
> 
> But I have updated the patch anyway with a related feature - so now the
> parser won't infer the mask when you specify an empty array of
> callee-saved registers. Although I'm not sure if it's really that useful,
> you wouldn't normally want to have an empty array here anyway.
>  
> 
> > +  for (unsigned I = 0, E = UsedPhysRegMask.size(); I != E; ++I) {
> > +    if (!UsedPhysRegMask[I]) {
> > +      yaml::FlowStringValue Reg;
> > +      printReg(I, Reg, TRI);
> > +      MF.CalleeSavedRegisters.push_back(Reg);
> > +    }
> > +  }
> >  }
> >
> >  void MIRPrinter::convert(ModuleSlotTracker &MST,
> 
> 
> <0001-MIR-Serialization-serialize-the-UsesPhysRegMask-from.patch>

Okay, LGTM.


More information about the llvm-commits mailing list