[llvm-dev] creating Intrinsic DAG Node
Ryan Taylor via llvm-dev
llvm-dev at lists.llvm.org
Fri Jun 24 07:49:13 PDT 2016
given the following C code:
float b=16, a=0;
int main() {
float a = sqrt(b);
return0;
}
I'm trying to lower FSQRT down, but getting a casting issue, my code is:
SDValue XXXLowering::LowerFSQRT(SDValue Op, SelectionDAG &DAG) const {
SDLoc DL(Op);
EVT VT = Op.getValueType();
SDValue LHS = Op.getOperand(0);
SDValue newNode = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, DL, VT,
DAG.getTargetConstantFP(Intrinsic::my_intrinsic, DL, VT), LHS);
return newNode;
}
The error I'm getting is: Assertion 'isa<X>(Val) && "cast<Ty>() argument of
incompatible type!"
Is this the correct way to add intrinsic dag node?
Thanks.
On Tue, Feb 2, 2016 at 5:10 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:
> Matt,
>
> The added intrinsic in DAG looks like:
>
> 0xbedb698: i32 = llvm.MyIntrinsic 0xbedb200, 0xbedac18 [ORD=4]
>
> The builtin in DAG looks like:
>
> 0xbedb2a8: i32,ch = llvm 0xbedb158:1, 0xbedb200, 0xbedb158 [ORD=7] [ID=16]
>
> The only difference I'm seeing is the extra operand, which is a 'ch'
> from a load.
>
> 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/20160624/d92ebe07/attachment.html>
More information about the llvm-dev
mailing list