[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