[llvm-dev] Custom call lowering - where?

Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Thu Aug 10 11:38:36 PDT 2017


On 8/10/2017 1:49 AM, Jon Chesterfield via llvm-dev wrote:
> The CallingConv.td file can specify CCCustom and ISelLowering has 
> LowerFormalArguments. The existing uses of CCCustom pick a register to 
> pass an unmodified argument in and LowerFormalArguments is mostly 
> concerned with marking registers as live, though I think provides 
> enough information that I can munge the DAG there.
>
> I would like to pass a scalar type (marked as a register class) in a 
> vector register. I essentially want to wrap the argument in a 
> SCALAR_TO_VECTOR ISD node before calling a function and unwrap it 
> using EXTRACT_VECTOR_ELT or similar within the function.
>
> Where should I introduce these additional nodes, or should it be 
> possible to achieve this via CCCustom?

See RetCC_ARM_APCS_Custom_f64/ARMTargetLowering::LowerCallResult for an 
straightforward example of how CCCustom works in practice.  You can 
generate whatever conversion code you need in your call lowering code.

-Eli

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project



More information about the llvm-dev mailing list