[Bug debug/68302] [5/6 Regression] ICE with debugging enabled on mips
sje at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Dec 8 22:10:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68302
--- Comment #13 from Steve Ellcey <sje at gcc dot gnu.org> ---
Thanks for the trace. I am still not sure I understand what is going on but I
wonder if you could try commenting out this code under the "case 'e'" code in
rtx_equal_for_cselib_1.
#if 0
if (i == 1
&& targetm.commutative_p (x, UNKNOWN)
&& rtx_equal_for_cselib_1 (XEXP (x, 1), XEXP (y, 0), memmode)
&& rtx_equal_for_cselib_1 (XEXP (x, 0), XEXP (y, 1), memmode))
return 1;
#endif
I think something is going wrong when we get here with x of:
(plus:SI (value/u:SI 60:60 @0x2335948/0x2391aa0)
(value/u:SI 15:4257 @0x2335678/0x2353978))
and y of:
(plus:SI (plus:SI (value/u:SI 60:60 @0x2335948/0x2391aa0)
(value/u:SI 15:4257 @0x2335678/0x2353978))
(value/u:SI 15:4257 @0x2335678/0x2353978))
I am not sure why that would send you into an infinite loop but
I think it might. Possibly due to having the value of 15 in the
expression twice. I think the reason you see it and I don't
might be related to new_cselib_val. It creates pointers
to values and I think GCC sorts things based on those pointers
at some point and the difference in how things are allocated
by pool_alloc in new_cselib_val might be the reason you get the
problem and I don't.
More information about the Gcc-bugs
mailing list