[PATCH] D15759: [Statepoints] Use Indirect operands for spill slots

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 23 14:12:21 PST 2015


reames created this revision.
reames added reviewers: atrick, sanjoy, igor-laevsky, qcolombet.
reames added a subscriber: llvm-commits.
Herald added a subscriber: sanjoy.

Teach the statepoint lowering code to emit Indirect stackmap entries for spill inserted by StatepointLowering (i.e. SelectionDAG), but Direct stackmap entries for in-IR allocas which represent manual stack slots.  This is what the docs call for (http://llvm.org/docs/StackMaps.html#stack-map-format), but we've been emitting both as Direct.  This was pointed out recently on the mailing list as a bug.  It also blocks http://reviews.llvm.org/D15632 which extends the lowering to handle vector-of-pointers since only Indirect references can encode a variable sized slot. 

To implement this, I introduced a new flag on the StackObject class used to maintian information about stack slots.  I original considered (and prototyped in http://reviews.llvm.org/D15632), the idea of using the existing isSpillSlot flag, but end up deciding that was a bit too risky and that the cost of adding a new flag was low.  Having the new flag will also allow us - in the future - to emit better comments in verbose assembly which indicate where a particular stack spill around a call comes from.  (deopt, gc, regalloc).

http://reviews.llvm.org/D15759

Files:
  include/llvm/CodeGen/MachineFrameInfo.h
  lib/CodeGen/SelectionDAG/StatepointLowering.cpp
  lib/CodeGen/TargetLoweringBase.cpp
  test/CodeGen/X86/statepoint-stackmap-format.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15759.43557.patch
Type: text/x-patch
Size: 9574 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151223/9cb3dc0c/attachment.bin>


More information about the llvm-commits mailing list