[llvm] r279574 - [stackmaps] Extract out magic constants [NFCI]

Richard Smith via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 23 15:12:04 PDT 2016


On Tue, Aug 23, 2016 at 3:06 PM, Mehdi Amini via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Hi Philip,
>
> I assume it is a work-in-progress, but just to let you know I have a
> warning with this:
>
> /llvm/src/include/llvm/CodeGen/StackMaps.h:35:23: warning: private field
> 'MI' is not used [-Wunused-private-field]
>   const MachineInstr *MI;
>                       ^
>

We're seeing this too; please fix or revert, this breaks -Werror builds.


>
>> Mehdi
>
>
> > On Aug 23, 2016, at 2:21 PM, Philip Reames via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
> >
> > Author: reames
> > Date: Tue Aug 23 16:21:43 2016
> > New Revision: 279574
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=279574&view=rev
> > Log:
> > [stackmaps] Extract out magic constants [NFCI]
> >
> > This is a first step towards clarifying the exact MI semantics of
> stackmap's "live values".
> >
> >
> > Modified:
> >    llvm/trunk/include/llvm/CodeGen/StackMaps.h
> >    llvm/trunk/lib/CodeGen/StackMaps.cpp
> >    llvm/trunk/lib/CodeGen/TargetInstrInfo.cpp
> >
> > Modified: llvm/trunk/include/llvm/CodeGen/StackMaps.h
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/CodeGen/StackMaps.h?rev=279574&r1=279573&r2=279574&view=diff
> > ============================================================
> ==================
> > --- llvm/trunk/include/llvm/CodeGen/StackMaps.h (original)
> > +++ llvm/trunk/include/llvm/CodeGen/StackMaps.h Tue Aug 23 16:21:43 2016
> > @@ -22,6 +22,29 @@ class AsmPrinter;
> > class MCExpr;
> > class MCStreamer;
> >
> > +/// \brief MI-level stackmap operands.
> > +///
> > +/// MI slackmap operations take the form:
> > +/// <id>, <numBytes>, live args...
> > +class StackMapOpers {
> > +public:
> > +  /// Enumerate the meta operands.
> > +  enum { IDPos, NBytesPos };
> > +
> > +private:
> > +  const MachineInstr *MI;
> > +
> > +public:
> > +  explicit StackMapOpers(const MachineInstr *MI);
> > +
> > +  /// Get the operand index of the variable list of non-argument
> operands.
> > +  /// These hold the "live state".
> > +  unsigned getVarIdx() const {
> > +    // Skip ID, nShadowBytes.
> > +    return 2;
> > +  }
> > +};
> > +
> > /// \brief MI-level patchpoint operands.
> > ///
> > /// MI patchpoint operations take the form:
> >
> > Modified: llvm/trunk/lib/CodeGen/StackMaps.cpp
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> CodeGen/StackMaps.cpp?rev=279574&r1=279573&r2=279574&view=diff
> > ============================================================
> ==================
> > --- llvm/trunk/lib/CodeGen/StackMaps.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/StackMaps.cpp Tue Aug 23 16:21:43 2016
> > @@ -35,6 +35,12 @@ static cl::opt<int> StackMapVersion(
> >
> > const char *StackMaps::WSMP = "Stack Maps: ";
> >
> > +StackMapOpers::StackMapOpers(const MachineInstr *MI)
> > +  : MI(MI) {
> > +  assert(getVarIdx() <= MI->getNumOperands() &&
> > +         "invalid stackmap definition");
> > +}
> > +
> > PatchPointOpers::PatchPointOpers(const MachineInstr *MI)
> >     : MI(MI), HasDef(MI->getOperand(0).isReg() &&
> MI->getOperand(0).isDef() &&
> >                      !MI->getOperand(0).isImplicit()),
> > @@ -343,8 +349,9 @@ void StackMaps::recordStackMapOpers(cons
> > void StackMaps::recordStackMap(const MachineInstr &MI) {
> >   assert(MI.getOpcode() == TargetOpcode::STACKMAP && "expected
> stackmap");
> >
> > -  int64_t ID = MI.getOperand(0).getImm();
> > -  recordStackMapOpers(MI, ID, std::next(MI.operands_begin(), 2),
> > +  StackMapOpers opers(&MI);
> > +  const int64_t ID = MI.getOperand(PatchPointOpers::IDPos).getImm();
> > +  recordStackMapOpers(MI, ID, std::next(MI.operands_begin(),
> opers.getVarIdx()),
> >                       MI.operands_end());
> > }
> >
> > @@ -352,7 +359,7 @@ void StackMaps::recordPatchPoint(const M
> >   assert(MI.getOpcode() == TargetOpcode::PATCHPOINT && "expected
> patchpoint");
> >
> >   PatchPointOpers opers(&MI);
> > -  int64_t ID = opers.getMetaOper(PatchPointOpers::IDPos).getImm();
> > +  const int64_t ID = opers.getMetaOper(PatchPointOpers::IDPos).
> getImm();
> >
> >   auto MOI = std::next(MI.operands_begin(), opers.getStackMapStartIdx());
> >   recordStackMapOpers(MI, ID, MOI, MI.operands_end(),
> >
> > Modified: llvm/trunk/lib/CodeGen/TargetInstrInfo.cpp
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> CodeGen/TargetInstrInfo.cpp?rev=279574&r1=279573&r2=279574&view=diff
> > ============================================================
> ==================
> > --- llvm/trunk/lib/CodeGen/TargetInstrInfo.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/TargetInstrInfo.cpp Tue Aug 23 16:21:43 2016
> > @@ -437,11 +437,15 @@ static MachineInstr *foldPatchpoint(Mach
> >                                     const TargetInstrInfo &TII) {
> >   unsigned StartIdx = 0;
> >   switch (MI.getOpcode()) {
> > -  case TargetOpcode::STACKMAP:
> > -    StartIdx = 2; // Skip ID, nShadowBytes.
> > +  case TargetOpcode::STACKMAP: {
> > +    // StackMapLiveValues are foldable
> > +    StackMapOpers opers(&MI);
> > +    StartIdx = opers.getVarIdx();
> >     break;
> > +  }
> >   case TargetOpcode::PATCHPOINT: {
> > -    // For PatchPoint, the call args are not foldable.
> > +    // For PatchPoint, the call args are not foldable (even if reported
> in the
> > +    // stackmap e.g. via anyregcc).
> >     PatchPointOpers opers(&MI);
> >     StartIdx = opers.getVarIdx();
> >     break;
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160823/34f9c845/attachment.html>


More information about the llvm-commits mailing list