[llvm-dev] ABI-specific Stack Pointer Register?

Reid Kleckner via llvm-dev llvm-dev at lists.llvm.org
Fri Dec 6 15:08:10 PST 2019


On Thu, Dec 5, 2019 at 9:35 AM Kavon Farvardin <kavon at farvard.in> wrote:

> On Wed, 2019-12-04 at 12:45 -0800, Reid Kleckner wrote:
>
> From past conversations, I was under the impression that GHC functions are
> really "stackless", they use CPS: they run, perform some computation,
> update the passed-in virtual stack registers, and then return with some
> sort of tail call, preserving and updating the set of registers which were
> passed in. Why does it matter if LLVM spills intermediate data to the
> architectural stack if it clears it all off on exit?
>
>
> The problem is with LLVM's code generation, where some values that could
> be re-materialized (jump table offsets, constants) are instead spilled to
> the architectural stack instead of the virtual stack. Rather than try to
> fix or work round this behavior, I am considering an extension to LLVM in
> concert with GC Statepoints so that the code generator's "architectural"
> stack is the same our "virtual" stack by defining a different ABI, starting
> with a change to the stack pointer register.
>

That's reasonable. Essentially, there are actually points in the frame
where you want parseable state, it's not enough to be parseable only on
entry and exit.


>
> Regarding the feasibility of it, I think it's actually feasible. Depending
> on how radical the changes you need are, I would recommend subclassing the
> TargetFrameLowering classes and providing new implementations of
> emitPrologue, emitEpilogue, and getFrameIndexReference. The X86
> emitPrologue codepath is already very, very complicated, and handles far
> too many special cases. Much of the complexity comes from CFI, and that
> wouldn't be a concern with an alternative stack.
>
>
> My main concern with the changes were around instruction selection being
> dependent on the ABI and the flexibility of frame layout (e.g., where
> register spills go relative to allocas) so that the garbage collector can
> still parse the stack. Do you think there would be any issues there?
>

My understanding is that spill slots are just regular stack objects, so
they'll appear near allocas.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191206/0b6aecc0/attachment.html>


More information about the llvm-dev mailing list