[LLVMdev] [INCOMPLETE] [GC] Support wrapping vararg functions in statepoint

Philip Reames listmail at philipreames.com
Tue Jan 20 11:45:45 PST 2015


On 01/20/2015 11:28 AM, Ramkumar Ramachandra wrote:
> Philip Reames wrote:
>> I think I'm missing something here.  What leads you to believe that
>> visitCall doesn't handle vararg functions?
>>
>> Also, I see calls in both visitInvoke and visitCall.  I would assume these
>> are the primary entry points...
> I'm probably more confused about this than you are.
>
> The callchain is approximately SelectionDAGBuilder::LowerCallTo ->
> SelectionDAGBuilder::lowerInvokable -> TargetLowering::LowerCallTo ->
> X86TargetLowering::LowerCall. Now, the isVarArg information needs to
> be conveyed to LowerCall, and that happens via CLI.IsVarArg, which
> TargetLowering::LowerCallTo accepts as a parameter.
> SelectionDAGBuilder::LowerCallTo isn't passed that information, and
> doesn't compute it to send to lowerInvokable (which builds the CLI for
> TargetLowering::LowerCallTo).
>
> How could SelectionDAGBuilder::LowerCallTo possibly handle vararg?
Step 1 - you should write a test case and check

However, I'd expect - which may be completely wrong! - that the 'vararg 
ness' of the call is either a property of the actually callee, the 
callsite, or both.  Given we do pass the callee into CLI, it *might* 
happen that way.  In fact, looking at CLI::setCallee, this is exactly 
what I see. 
http://llvm.org/docs/doxygen/html/TargetLowering_8h_source.html#l02347

Philip




More information about the llvm-dev mailing list