On Tue, Jul 26, 2016 at 2:34 PM, kugan <kugan.vivekanandara...@linaro.org> wrote: > Hi Richard, > > > On 26/07/16 21:48, Richard Biener wrote: >> >> On Tue, Jul 26, 2016 at 5:13 AM, kugan >> <kugan.vivekanandara...@linaro.org> wrote: >>> >>> Hi, >>> >>> For testcase in pr71994, type of bb conditional result and the type of >>> the >>> PHI stmt are different (as om.0_1 is int and the first PHI argument is >>> _bool; PHI stmt uses a constant zero that comes from edge 2). Therefore >>> when >>> we optimize final range test stmt, we end up setting integer 1 for other >>> PHI >>> argument. This results in ICE. >>> >>> <bb 2>: >>> om.0_1 = om; >>> _2 = om.0_1 >= 0; >>> int _3 = (int) _2; >>> if (om.0_1 != 0) >>> goto <bb 3>; >>> else >>> goto <bb 4>; >>> >>> <bb 3>: >>> int _4 = om.0_1 & _3; >>> _Bool _12 = _4 != 0; >>> <bb 4>: >>> >>> # _Bool _13 = PHI <0(2), _12(3)> >>> >>> >>> IMHO, the fix should be that, we should check the type before replacing >>> the >>> value (punt otherwise). Attached patch does that. Bootstrapped and >>> regression tested on x86_64-linux-gnu with no new regressions. Is this OK >>> for trunk? >> >> >> Ugh, this is undocumented spaghetti code I am not familiar with. I >> can't see if it >> is safe to truncate a constant here so I'd feel safer to just punt >> instead. >> > > Please see the attached patch, which now constant truncation. Testing in > progress. Is this OK for trunk if there is no new regressions?
Yes. Thanks, Richard. > > Thanks, > Kugan > > gcc/testsuite/ChangeLog: > > 2016-07-26 Kugan Vivekanandarajah <kug...@linaro.org> > > * gcc.dg/torture/pr71994.c: New test. > > gcc/ChangeLog: > > 2016-07-26 Kugan Vivekanandarajah <kug...@linaro.org> > > * tree-ssa-reassoc.c (maybe_optimize_range_tests): Check type > compatibility.