[llvm-dev] mapping calls to exp() to expf opcode

Phil Tomson via llvm-dev llvm-dev at lists.llvm.org
Fri Sep 2 15:58:54 PDT 2016


After spending some time in the debugger, the difference between the sqrt
and exp2, sin and cos seems to be that the Attribute::ReadNone is set on
sqrt and not on the other functions (the other CallInst's). Is there a way
to set this attribute from tablegen (in <Target>InstrInfo.td)?

Phil

On Fri, Sep 2, 2016 at 2:10 PM, Phil Tomson <phil.a.tomson at gmail.com> wrote:

> Both of them have 'Legal' (as well as sin and cos), but that doesn't make
> any difference - I still don't see exp, exp2, sin or cos show up as opcodes
> in the assembly. For some reason calls to sqrt show up as opcodes (sqrtf) -
> I'm puzzled as to what is different with sqrt.
>
> Phil
>
>
>
> On Thu, Sep 1, 2016 at 10:44 AM, Ryan Taylor <ryta1203 at gmail.com> wrote:
>
>> Phil,
>>
>>   Are you seeing the fexp2 SDNode with -view-legalize-dags and then a
>> call with -view-dag-combine2-dags?
>>
>>   In XXXISelLowering.cpp please try to explicitly make fexp2 'legal', ie
>> "setOperationAction(ISD::FEXP2, MVT::f32, Legal);
>> setOperationAction(ISD::FEXP2, MVT::f64, Legal)". This worked for me, I am
>> now no longer getting a call and am now getting an ISEL error (not matching
>> SDNode in tablegen, which is what you want since it's legal on your target).
>>
>>   I find this confusing since the default is suppose to be 'Legal' from
>> my understanding but LLVM is not always consistent this way, the community
>> has decided to do things 'this way' or 'that way' depending on 'what's
>> common' sometimes.
>>
>> Thanks,
>>
>> -Ryan
>>
>> On Wed, Aug 31, 2016 at 6:40 PM, Phil Tomson via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> We've got both an sqrtf and an expf opcode in our architecture. If I
>>> call sqrt() on the C side, I see the sqrtf opcode show up in the generated
>>> assembly. However, if I call exp() on the C side, I don't see the expf
>>> opcode show up on the generated assembly, I see a call to an exp function
>>> from libm.
>>>
>>> Here's what we've got in our TargetInstrinfo.td file for both of these
>>> instructions:
>>> def SQRTF64 : Other2ROp< 0b0001101, "sqrtF", fsqrt, OpInfo_F64,
>>> II_ELEMF3 >;
>>> def SQRTF32 : Other2ROp< 0b0001101, "sqrtF", fsqrt, OpInfo_F32,
>>> II_ELEMF1 >;
>>>
>>> def EXPF64 :   Other2ROp< 0b0001010, "expF", fexp2, OpInfo_F64,
>>> II_ELEMF3 >;
>>> def EXPF32 :   Other2ROp< 0b0001010, "expF", fexp2, OpInfo_F32,
>>> II_ELEMF1 >;
>>>
>>>
>>> ..essentially the same kind of definition for both SQRTF and EXPF, but
>>> for the latter I don't see expf opcodes being generated.
>>>
>>> Any idea what might be missing for exp?
>>>
>>> Phil
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160902/73b7b71a/attachment.html>


More information about the llvm-dev mailing list