Hi Kewen & Segher, Thanks so much for your review comments.
On 22/9/2022 上午 10:28, Kewen.Lin wrote: > on 2022/9/22 05:56, Segher Boessenkool wrote: >> Hi! >> >> On Fri, Jun 24, 2022 at 10:02:19AM +0800, HAO CHEN GUI wrote: >>> This patch also binds __builtin_vsx_xs[min/max]dp to fmin/max instead >>> of smin/max. So the builtins always generate xs[min/max]dp on all >>> platforms. >> >> But how does this not blow up with -ffast-math? > > Indeed. Since it guards with "TARGET_VSX && !flag_finite_math_only", > the bifs seem to cause ICE at -ffast-math. > > Haochen, could you double check it? I tested it with "-ffast-math". fmin/max functions are converted to MIN/MAX_EXPR in gimple lower pass. But the built-ins are not and hit the ICE. I thought the built-ins are folded to MIN/MAX_EXPR like vec_ versions' when fast-math is set. In fact they're not. Sorry for that. I made a patch to fold these two built-ins to MIN/MAX_EXPR when fast-math is set. Then the built-ins are converted to MIN/MAX_EXPR and expanded to smin/max. Thanks for pointing out the problem! > >> >> In the other direction I am worried that the unspecs will degrade >> performance (relative to smin/smax) when -ffast-math *is* active (and >> this new builtin code and pattern doesn't blow up). > > For fmin/fmax it would be fine, since they are transformed to {MAX,MIN} > EXPR in middle end, and yes, it can degrade for the bifs, although IMHO > the previous expansion to smin/smax contradicts with the bif names (users > expect to map them to xs{min,max}dp than others). > >> >> I still think we should get RTL codes for this, to have access to proper >> floating point min/max semantics always and everywhere. "fmin" and >> "fmax" seem to be good names :-) > > It would be good, especially if we have observed some uses of these bifs > and further opportunities around them. :) > Shall we submit a PR to add fmin/fmax to RTL codes? > BR, > Kewen