[llvm-dev] creating Intrinsic DAG Node

Matt Arsenault via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 2 09:35:30 PST 2016


> On Feb 2, 2016, at 09:29, Ryan Taylor via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> I'm trying to 'lower' an operation that needs to create a node in the SD that is an intrinsic call.... what is the best way to do this?
> 
> I see in the DAGBuilder it calls 'setValue' which adds to the map NodeMap[V] where V is the key and the passed in SDValue is the value but I'm not sure this is a good way to do it since these are local to SelectionDAGBuilder and the lowering needs to happen in XXXISelLowering.cpp.
> 
> Thanks.
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

SelectionDAGBuilder creates INTRINSIC_W_CHAIN, INTRINSIC_WO_CHAIN, or INTRINSIC_VOID nodes. You want to emit those with the intrinsic ID as a TargetConstant the first operand (or second with chains). I would recommend though for these cases, if you want to emit emit them in the backend, it’s a bit nicer to lower these to a custom node, and select on that. It’s a bit nicer than having to add the intrinsic ID everywhere. Most of the AMDGPU intrinsics are handled this way.

-Matt


More information about the llvm-dev mailing list