[llvm-dev] creating Intrinsic DAG Node

Ryan Taylor via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 2 13:40:21 PST 2016


Matt,

  Here's the DAG code:

Op is the SDValue incoming (the node I want to lower).

SDValue result = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, SDLoc(Op),
      Op.getValueType(), DAG.getConstant(Intrinsic::my_intrinsic, SDLoc(Op),
      Op.getValueType()), Op.getOperand(0));


The type of the intrinsic call is the same as the type of Op, hence I'm
using Op.getValueType()

For the C code, I'm simply calling __builtin_myIntrinsic, where
__builtin_myIntrinsic has been added to the appropriate files in clang and
llvm and this maps down to the table gen just fine (we have lots of other
intrinsics working the same way but we've never done it directly in DAG).

On Tue, Feb 2, 2016 at 3:55 PM, Matt Arsenault <arsenm2 at gmail.com> wrote:

>
> > On Feb 2, 2016, at 12:43, Ryan Taylor <ryta1203 at gmail.com> wrote:
> >
> > Matt,
> >
> >   This seems to generate llvm.my_intrinsic just fine in the DAG, so no
> DAG errors; however, it won't match. For example, if I call the intrinsic
> from C, the DAG node looks to be named the same in dotty file but it won't
> match... am I missing something?
> >
> >   I've done it exactly the way it was done above. The DAG looks great
> but it won't match. Did I miss something?
> >
> > Thanks.
> >
>
> Are you using the right intrinsic type? Does it have a chain or result?
>
> How are you calling it from C? Are you declaring the intrinsic? This can
> fail if you mismatched the readnone or readonly to the actual intrinsic
> definition
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160202/210218a1/attachment.html>


More information about the llvm-dev mailing list