[llvm] r279574 - [stackmaps] Extract out magic constants [NFCI]
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 23 15:06:46 PDT 2016
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;
^
—
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
More information about the llvm-commits
mailing list