Zhang via llvm-dev
2021-Mar-22 07:36 UTC
[llvm-dev] Understanding TargetLowering::LowerCall
For CallSites that contains a GlobalValue as one of the arguments, where exactly does the lowering from GlobalAddress to iPTR took place?. I'm assuming it should be handled in TargetLowering::LowerCall where target-dependent DAG Nodes got created depending on CCValAssign::isRegLoc() but from my testing it seems like isRegLoc() is true even for GlobalAddress arguments. What am I misunderstanding here? Zhang -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210322/0de73bc0/attachment.html>
Tim Northover via llvm-dev
2021-Mar-22 09:57 UTC
[llvm-dev] Understanding TargetLowering::LowerCall
On Mon, 22 Mar 2021 at 07:36, Zhang via llvm-dev <llvm-dev at lists.llvm.org> wrote:> For CallSites that contains a GlobalValue as one of the arguments, where exactly does the lowering from GlobalAddress to iPTR took place?.It's generally no different for a callsite than any other GlobalValue user. The generic SelectionDAGBuilder code will create a GlobalAddress SDNode with iPTR type because the type of a GlobalValue is actually a pointer to the type of the underlying object. The call lowering code will get this iPTR node, and may well decide to pass it to the callee in a register. As for the GlobalAddress node, that goes through normal lowering to a target-specific instruction sequence to materialize the address of the global object. Often this is via custom C++ in LegalizeDAG (i.e. `setOperationAction(ISD::GlobalValue, MVT::i64, Custom)`). Cheers. Tim.