<div dir="ltr"><span style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">Hi,</span><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">Clang is currently unable to constant fold calls to math.h functions such as logl(), expl() etc.</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">The problem is that APFloat doesn't have these functions, so Clang is forced to rely on the host math library. Because long double isn't portable, we only ever query the host math library for double or float results.</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">I can see three methods for allowing constant folding for types that are larger than double, some more expensive than others:</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">  1. Introduce a dependency on libMPFR, as GCC does. The dependency could be hard or soft, with a fallback to the current behaviour if it doesn't exist.</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">  2. Write the trancendental functions ourselves in APFloat (yuck!)</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">  3. If the long double format on the compiler host is the same as the target, use the host library.</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">(2) is the hardest. (3) is the easiest, but only works in a subset of cases and I really don't like the idea of better output when compiling on one platform compared to another (with equivalent targets).</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">What do people think about (1)? Or is this completely out of the question?</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">Cheers,</div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px"><br></div><div style="color:rgb(33,33,33);font-size:13px;line-height:19.5px">James</div></div>