<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Apr 4, 2016 at 10:41 AM Joerg Sonnenberger via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, Apr 04, 2016 at 09:49:24AM -0700, Reid Kleckner via llvm-dev wrote:<br>
> An optional MPFR dependency would also be pretty painful. I expect it will<br>
> frequently be missing and will not be exercised by most buildbots.<br>
<br>
IMO if constant folding of transcendental functions makes a significant<br>
difference for your program, you likely are doing something strange<br>
already. I don't think it matters much for a lot of use cases, so having<br>
an optional dependency for this seems to be fine.</blockquote><div><br></div><div>I think that if transcendental functions are sufficiently unimportant, we shouldn't support them at all. We should have consistent behavior rather than ending up with nearly impossible to triage issues because one person's Clang used MPFR and the other didn't.</div><div><br></div><div>While I think the optimizer should be able to constant fold transcendentals as a matter of core competency, I don't have very strong opinions about it for the reasons you cite -- I don't have use cases.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> Note that the<br>
non-transcendental functions are quite a different deal, especially<br>
reasonable well behaving functions like log and exp.<br></blockquote><div><br></div><div>Agreed, and I feel very strongly that we should support both log and exp, and it has no business being optional.</div><div><br></div><div>But clearly the right way to do this is to start from the bottom and work our way up. We should add the easiest ones first and incrementally add support. I particularly like the suggestions from Hal about how to make this a tractable engineering task.</div></div></div>