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?