https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113583
--- Comment #17 from rguenther at suse dot de <rguenther at suse dot de> --- On Wed, 7 Feb 2024, juzhe.zhong at rivai dot ai wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113583 > > --- Comment #16 from JuzheZhong <juzhe.zhong at rivai dot ai> --- > The FMA is generated in widening_mul PASS: > > Before widening_mul (fab1): > > _5 = 3.33333333333333314829616256247390992939472198486328125e-1 - _4; > _6 = _5 * 1.229999999999999982236431605997495353221893310546875e-1; > _8 = _4 + _6; So this is x + (CST1 - x) * CST2 which we might fold/associate to x * (1. - CST2) + CST1 * CST2 this looks like something for reassociation (it knows some rules, like what it does in undistribute_ops_list, I'm not sure if that comes into play here already, this would be doing the reverse before). A match.pd pattern also works, but it wouldn't be general enough to handle more complicated but similar cases.