<div dir="ltr">On Wed, Aug 26, 2015 at 12:49 AM, Vedant Kumar <span dir="ltr"><<a href="mailto:vedant_kumar@apple.com" target="_blank">vedant_kumar@apple.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Erik,<br>
<br>
Thanks for the patch! I have a few comments --<br>
<br>
>>     case 'a':<br>
>> -    return Name == "acos" || Name == "asin" || Name == "atan" || Name =="atan2";<br>
>> +    return Name == "acos" || Name == "asin" || Name == "atan" ||<br>
>> +      Name =="atan2" || Name == "acosf" || Name == "asinf" || Name == "atanf" ||<br>
>> +      Name =="atan2f";<br>
<br>
<br>
This is fine for now.<br>
<br>
A note for later: I've noticed that there is a pattern in llvm where we use long chains of short-circuited string comparisons (e.g StringSwitch). We should have a variant of StringSwitch which runs in time proportional to the length of the longest string in the switch, instead of the number of strings in the switch. A fast, easy-to-use, trie-backed interface would be ideal. This would be a good place to use it.<br></blockquote><div><br></div><div>Yes, I agree. In practice, even a trie may be overkill -- my laptop can compare 32 (or 16?) characters in a single instruction, so padding the string and then a few compares may be faster in practice than handling branching in a trie. Anyway -- that's an exercise for the future.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">>> +define float @test_atan2f() nounwind uwtable ssp {<br>
>> +entry:<br>
>> +; CHECK-LABEL: @test_atan2f(<br>
>> +; CHECK-NOT: call<br>
>> +  %0 = call float @atan2f(float 3.000000e+00, float 4.000000e+00)<br>
>> +  ret float %0<br>
>> +}<br>
>><br>
>> +; Shouldn't fold because of -fno-builtin<br>
>> +define float @atan2f_() nounwind uwtable ssp {<br>
>> +; FNOBUILTIN-LABEL: @atan2f_(<br>
>> +; FNOBUILTIN: %1 = call float @atan2f(float 3.000000e+00, float 4.000000e+00)<br>
>> +  %1 = call float @atan2f(float 3.000000e+00, float 4.000000e+00)<br>
>> +  ret float %1<br>
>> +}<br>
<br>
I've noticed many pairs of test functions like the one above. Can this pair be combined into one function? E.g:<br>
<br>
>> +define float @atan2f_() nounwind uwtable ssp {<br>
>> +; CHECK-LABEL: @_atan2f(<br>
>> +; FNOBUILTIN-LABEL: @atan2f_(<br>
>> +; CHECK-NOT: call<br>
>> +; FNOBUILTIN: %1 = call float @atan2f(float 3.000000e+00, float 4.000000e+00)<br>
>> +  %1 = call float @atan2f(float 3.000000e+00, float 4.000000e+00)<br>
>> +  ret float %1<br>
>> +}<br></blockquote><div><br></div><div>I don't know, I'm not too familiar with the test system. These are two different tests: in one, the call should be eliminated (constant-folded), in the other case, it should not. Do you have a pointer to documentation or other examples that cover this detail?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">If so, it would be nice to reduce the test case size. Apart from that, please run clang-format -style=llvm on your changes. Everything else looks good.<br></blockquote><div><br></div><div>I attach the updated (re-formatted) patch.</div><div><br></div><div>-erik</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">vedant<br>
<div><div class="h5"><br>
On Aug 25, 2015, at 1:14 PM, Erik Schnetter via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
<br>
> It seems that constant propagation for single precision math functions (such as tanf) is already working, but was not enabled. This patch enables these for many single-precision functions, and adds respective test cases.<br>
><br>
> List of newly handled functions: acosf asinf atanf atan2f ceilf coshf expf exp2f fabsf floorf fmodf logf log10f powf sinhf tanf tanhf<br>
><br>
> -erik<br>
><br>
> --<br>
> Erik Schnetter <<a href="mailto:schnetter@gmail.com">schnetter@gmail.com</a>> <a href="http://www.perimeterinstitute.ca/personal/eschnetter/" rel="noreferrer" target="_blank">http://www.perimeterinstitute.ca/personal/eschnetter/</a><br>
</div></div>> <constprop.diff>_______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Dcommits&d=BQIGaQ&c=eEvniauFctOgLOKGJOplqw&r=nRkKAYlatRp-Wgk-tAtmRg&m=zIeTq7C24I26_ny62rhiVNnPUKhiL-ttf5E5SdvSYfM&s=hnzB8DZ-EJj3yM7S-bYX5mwxBMka0n18KAACB3fEHcQ&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Dcommits&d=BQIGaQ&c=eEvniauFctOgLOKGJOplqw&r=nRkKAYlatRp-Wgk-tAtmRg&m=zIeTq7C24I26_ny62rhiVNnPUKhiL-ttf5E5SdvSYfM&s=hnzB8DZ-EJj3yM7S-bYX5mwxBMka0n18KAACB3fEHcQ&e=</a><br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Erik Schnetter <<a href="mailto:schnetter@gmail.com" target="_blank">schnetter@gmail.com</a>> <a href="http://www.perimeterinstitute.ca/personal/eschnetter/" target="_blank">http://www.perimeterinstitute.ca/personal/eschnetter/</a><br></div>
</div></div>