On Thu, May 19, 2016 at 10:12 AM, Kugan Vivekanandarajah <kugan.vivekanandara...@linaro.org> wrote: > Hi Martin, > > Thanks for the fix. Just to elaborate (as mentioned in PR) > > At tree-ssa-reassoc.c:3897, we have: > > stmt: > _15 = _4 + c_7(D); > > oe->op def_stmt: > _17 = c_7(D) * 3; > > > <bb 2>: > a1_6 = s_5(D) * 2; > _1 = (long int) a1_6; > x1_8 = _1 + c_7(D); > a2_9 = s_5(D) * 4; > _2 = (long int) a2_9; > a3_11 = s_5(D) * 6; > _3 = (long int) a3_11; > _16 = x1_8 + c_7(D); > _18 = _1 + _2; > _4 = _16 + _2; > _15 = _4 + c_7(D); > _17 = c_7(D) * 3; > x_13 = _15 + _3; > return x_13; > > > The root cause of this the place in which we are adding (_17 = c_7(D) > * 3). Finding the right place is not always straightforward as this > case shows. > > We could try Martin Liška's approach, We could also move _17 = c_7(D) > * 3; at tree-ssa-reassoc.c:3897 satisfy the gcc_assert. We could do > this based on the use count of _17. > > > This patch does this. I have no preferences. Any thoughts ?
I think the issue may be that you fail to set changed to true for the degenerate case of ending up with a multiply only. Not sure because neither patch contains a testcase. Richard. > > Thanks, > Kugan > > > > On 19 May 2016 at 18:04, Martin Liška <mli...@suse.cz> wrote: >> Hello. >> >> Following patch fixes the ICE as it defensively finds the right >> place where a new STMT should be inserted. >> >> Patch bootstraps on x86_64-linux-gnu and no new regression is introduced. >> >> Ready for trunk? >> Thanks, >> Martin