ryan baird
2012-Sep-21 16:33 UTC
[LLVMdev] Seperate stack location for outgoing parameters and local variables for custom target?
I'm working on a target for the intermediate language of another compiler
(so it can benifit from LLVM's optimization stages). I'm working on LLVM
3.1 for now. I started the translater as a copy of the MIPS target so that
I can just modify it to produce the correct output.
I basically want to replace all of the local variables and incoming
parameters with values that look like this: LOC[i] (where i is the number
of the parameter). This can be done pretty easily if I want it to apply to
everything. However, outgoing parameters shouldn't be replaced by the
LOC[i] notation. I've seen that stack locations that are used for
parameters are sometimes also used for local variables.
So here's my question: Is there a way for me to modify my target to ensure
that no location on the stack will be used for both outgoing parameters and
other stack objects within a single function, and make it easy to
differentiate between outgoing parameters and other local variables?
I see that in the LowerCall function in ISelLowering.cpp, there's this code
(From the MIPS target):
* // Create the frame index object for this incoming parameter
LastFI = MFI->CreateFixedObject(ValVT.getSizeInBits()/8,
VA.getLocMemOffset(), true);
SDValue PtrOff = DAG.getFrameIndex(LastFI, getPointerTy());*
This looks like what I might want to change, but I'm not sure what's the
right thing to do. Here's what I tried to change it to:
*
LastFI = MFI->CreateStackObject(ValVT.getSizeInBits()/8,
VA.getLocMemOffset(), false);
SDValue PtrOff = DAG.getFrameIndex(LastFI, getPointerTy());*
If I did this, the parameters didn't collide with other local variables
anymore, but it ruined the original calculated offset and allignment (it
started at $sp+0 instead of 16 and the arguments ended up aligned at 8
instead of 4).
Is there a way to do something like this without the stack object being put
in a different place, and perhaps leave a way for me to find out from the
MachineFrameInfo later that this offset is for outgoing parameters?
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20120921/ff61f02f/attachment.html>
Possibly Parallel Threads
- [LLVMdev] Properly handling mem-loc arguments when prologue adjusts FP.
- [LLVMdev] RFC: PowerPC tail call optimization patch
- [LLVMdev] RFC: PowerPC tail call optimization patch
- [LLVMdev] RFC: PowerPC tail call optimization patch
- [LLVMdev] Pat operands matching example in ppc
