https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72835
kugan at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kugan at gcc dot gnu.org --- Comment #3 from kugan at gcc dot gnu.org --- Looking into it. diff of .115t.dse2 and .116t.reassoc1 is for the c++ testcase: + unsigned int _16; + unsigned int _17; + unsigned int _18; <bb 2>: _1 = s1.m2; _2 = (unsigned int) _1; _3 = s1.m3; _4 = (unsigned int) _3; - _5 = -_4; - _6 = _2 * _5; + _5 = _4; + _6 = _5 * _2; var_32.0_7 = var_32; _8 = (unsigned int) var_32.0_7; _9 = s1.m1; _10 = (unsigned int) _9; - _11 = -_10; - _12 = _8 * _11; - c_14 = _6 + _12; + _11 = _10; + _12 = _11 * _8; + _16 = _12 + _6; + _18 = _16; + _17 = -_18; + c_14 = _17; if (c_14 != 4098873984) Also works with -fno-tree-vrp