On Thu, 2025-02-20 at 10:31 +0800, Jin Ma wrote:
> On Wed, 19 Feb 2025 21:53:32 +0800, Jeff Law wrote:
> > 
> > 
> > On 2/19/25 1:00 AM, Robin Dapp wrote:
> > > > > As I mentioned before, this may not be a good solution, as it risks 
> > > > > missing other
> > > > > optimization opportunities. As you pointed out, we need a more 
> > > > > general approach
> > > > > to fix it. Unfortunately, while I’m still trying to find a solution, 
> > > > > I currently
> > > > > don't have any other good ideas.
> > > > Changing the rounding modes isn't common, but it's not unheard of.  My
> > > > suspicion is that we need to expose the rounding mode assignment earlier
> > > > (at RTL generation time).
> > > > 
> > > > That may not work well with the current optimization of FRM, but I think
> > > > early exposure is the only viable path forward in my mind.  Depending on
> > > > the depth of the problems it may not be something we can fix in the
> > > > gcc-15 space.
> > > 
> > > With -frounding-math CSE doesn't do the replacement.  So we could argue 
> > > that
> > > a user should specify -frounding-math if they explicitly care about the
> > > behavior.  But on the other hand it's surprising if the user deliberately 
> > > used
> > > a rounding-mode setting instruction which doesn't work as intended.
> > > 
> > > Even if we wrapped those instructions in unspecs, couldn't other parts of 
> > > the
> > > program, that are compiled with the default -fno-roundin-math still lead 
> > > to
> > > unexpected results?
> > > 
> > > I  don't see any other way than to "hide" the behavior from optimizers 
> > > either
> > > in order to prevent folding of such patterns.
> > I didn't even know  the option existed!  Clearly necessary if we're 
> > using these builtins with non-default rounding modes.
> 
> I wasn't aware of the existence of this option either. These built-ins 
> require it.
> I suspect that it makes certain assumptions about the rounding modes in 
> floating-point
> calculations, such as in float_extend, which may prevent CSE optimizations. 
> Could
> this also lead to lost optimization opportunities in other areas that don't 
> require
> this option? I'm not sure.
> 
> I suspect that the best approach would be to define relevant
> attributes (perhaps similar to -frounding-math) within specific related 
> patterns/built-ins 
> to inform optimizers we are using a rounding mode and to avoid 
> over-optimization.

The "special pattern" is supposed to be #pragma STDC FENV_ACCESS that
we've not implemented.  See https://gcc.gnu.org/PR34678.

-- 
Xi Ruoyao <xry...@xry111.site>
School of Aerospace Science and Technology, Xidian University

Reply via email to