[LLVMdev] Calling-convention lowering proposal
gohman at apple.com
Sun Apr 26 17:37:49 PDT 2009
On Apr 24, 2009, at 10:27 AM, Sanjiv Gupta wrote:
> Dan Gohman wrote:
>> Attached is a patch which significantly reworks how calls, incoming
>> arguments, and outgoing return values are lowered. It's a major
>> affecting all targets, so I'm looking for feedback on the approach.
>> The goal of the patch is to eliminate a bunch of awkward code,
>> eliminate some unnecessary differences between targets, and to
>> facilitate future refactoring and feature work.
>> This patch gets rid of ISD::CALL, ISD::FORMAL_ARGUMENTS, ISD::RET,
>> ISD::ISD::ARG_FLAGS, as well as the old LowerArguments and
>> hooks. To replace them, it adds three new TargetLowering hooks:
>> LowerCall, LowerFormalArguments, and LowerReturn. These hooks provide
>> targets with the same information as the special nodes, except in an
>> immediately usable form instead of awkwardly encoded as SDNode
>> operands. The patch also re-works a substantial portion of the
>> target-independent tail-call code. The patch also includes changes
>> for all in-tree targets to use the new hooks.
>> Beyond dejagnu and some manual assembly output inspection,
>> so far I've only tested this on x86 targets. I'm not in a hurry
>> with this; I'm just looking for input at this point.
> Hi Dan,
> I quickly ran my tests with your changes and a few of them breaks
> llc while a few other have incorrect assembly. I am attaching
> the .bc files here. The llc options I use --pre-RA-sched=list-burr
> and -regalloc=pbqp
> fun_in_expr3.bc (llc breaks)
> struct_args_5.bc (incorrect assemly, execution fails)
> char_char.bc (llc breaks)
Thanks for the testing and the testcases. PIC16 is certainly the most
complicated of the bunch :-}. I have fixes for each of these, and with
them I've verified that a patched llc is emitting the same output as an
unpatched llc, with one exception which I believe is ok. I'll post
details and an updated patch soon.
More information about the llvm-dev