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; After widening_mul: _5 = 3.33333333333333314829616256247390992939472198486328125e-1 - _4; _8 = .FMA (_5, 1.229999999999999982236431605997495353221893310546875e-1, _4); I think it's obvious, widening_mul choose to transform later 2 STMTs: _6 = _5 * 1.229999999999999982236431605997495353221893310546875e-1; _8 = _4 + _6; into: _8 = .FMA (_5, 1.229999999999999982236431605997495353221893310546875e-1, _4); without any re-association.