Hello William, > However, it does not fix http://gcc.gnu.org/PR45671, which surprises me > as it was marked as a duplicate of this one. Any thoughts on why this > isn't sufficient to reassociate the linear chain of adds? > > Test case: > > int myfunction (int a, int b, int c, int d, int e, int f, int g, int h) > { > int ret; > > ret = a + b + c + d + e + f + g + h; > return ret; > > } > > >
Reassociation does not work for signed integers because signed integer is not wrap-around type in C. You can change it by passing -fwrapv option but it will disable other useful optimization. Reassociation of signed integers without this option is not a trivial question because in that case you may introduce overflows and therefore undefined behavior. BR Ilya