[llvm] r201904 - [Stackmaps] Move the target-independent frame index elimination for stackmaps and patchpoints into target-specific code.
Philip Reames
listmail at philipreames.com
Mon Feb 24 15:12:08 PST 2014
Juergen,
Just to note, I have an out of tree extension to patchpoint which relies
on being able to use RSP rather than RBP as the base for the stack
references. Adapting our code to handle your change won't be difficult,
I just wanted to point it out since you seem to be running with the
assumption that will never be the case.
At some point, it would make sense for me to upstream an option to
choose between RBP and RSP relative offsets. Different runtimes will
have different assumptions. I'll have to clean up my horribly hacky
code before I can do that though. :)
Philip
On 02/21/2014 03:29 PM, Juergen Ributzka wrote:
> Author: ributzka
> Date: Fri Feb 21 17:29:32 2014
> New Revision: 201904
>
> URL: http://llvm.org/viewvc/llvm-project?rev=201904&view=rev
> Log:
> [Stackmaps] Move the target-independent frame index elimination for stackmaps and patchpoints into target-specific code.
>
> The lowering of the frame index for stackmaps and patchpoints requires some
> target-specific magic and should therefore be handled in the target-specific
> eliminateFrameIndex method.
>
> This is related to <rdar://problem/16106219>
>
> Modified:
> llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>
> Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=201904&r1=201903&r2=201904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Fri Feb 21 17:29:32 2014
> @@ -779,18 +779,15 @@ void PEI::replaceFrameIndices(MachineBas
> // Frame indicies in debug values are encoded in a target independent
> // way with simply the frame index and offset rather than any
> // target-specific addressing mode.
> - if (MI->isDebugValue() ||
> - MI->getOpcode() == TargetOpcode::STACKMAP ||
> - MI->getOpcode() == TargetOpcode::PATCHPOINT) {
> - assert((!MI->isDebugValue() || i == 0) &&
> - "Frame indicies can only appear as the first operand of a "
> - "DBG_VALUE machine instruction");
> + if (MI->isDebugValue()) {
> + assert(i == 0 && "Frame indicies can only appear as the first "
> + "operand of a DBG_VALUE machine instruction");
> unsigned Reg;
> - MachineOperand &Offset = MI->getOperand(i + 1);
> + MachineOperand &Offset = MI->getOperand(1);
> Offset.setImm(Offset.getImm() +
> TFI->getFrameIndexReference(
> - Fn, MI->getOperand(i).getIndex(), Reg));
> - MI->getOperand(i).ChangeToRegister(Reg, false /*isDef*/);
> + Fn, MI->getOperand(0).getIndex(), Reg));
> + MI->getOperand(0).ChangeToRegister(Reg, false /*isDef*/);
> continue;
> }
>
>
> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=201904&r1=201903&r2=201904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Fri Feb 21 17:29:32 2014
> @@ -516,6 +516,15 @@ X86RegisterInfo::eliminateFrameIndex(Mac
> } else
> FIOffset = TFI->getFrameIndexOffset(MF, FrameIndex);
>
> + // The frame index format for stackmaps and patchpoints is different from the
> + // X86 format. It only has a FI and an offset.
> + if (Opc == TargetOpcode::STACKMAP || Opc == TargetOpcode::PATCHPOINT) {
> + assert(BasePtr == FramePtr && "Expected the FP as base register");
> + int64_t Offset = MI.getOperand(FIOperandNum + 1).getImm() + FIOffset;
> + MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset);
> + return;
> + }
> +
> if (MI.getOperand(FIOperandNum+3).isImm()) {
> // Offset is a 32-bit integer.
> int Imm = (int)(MI.getOperand(FIOperandNum + 3).getImm());
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list