optimization/8165: builtin string functions SEGV on alpha-pc-linux-gnu at -O2

Glen Nakamura glen@imodulo.com
Tue Oct 8 16:13:00 GMT 2002


On Tue, Oct 08, 2002 at 03:20:53PM -0700, Richard Henderson wrote:
> I get the feeling this is simply papering over the problem.
> I'll continue to investigate...

Thanks, you are quite possibly right.

There was a bunch of things happening, and I don't fully understand
the semantics of REG_EQUAL notes.  I don't have the original rtx dumps,
but from memory things looked like this before gcse:

SET A
...
BEGIN_LOOP
...
SET B
USE B REG_EQUAL B

After gcse USE B is replaced with USE A, but REG_EQUAL still refers to B:

SET A
...
BEGIN_LOOP
...
SET B
USE A REG_EQUAL B

Then I think the loop pass moved USE A out of the loop (above SET B):

SET A
...
USE A REG_EQUAL B
BEGIN_LOOP
...
SET B

Eventually, SET B is determined dead and removed but the REG_EQUAL
referring to it still exists... Then for some reason, the REG_EQUAL note
gets used and bad things happen.  One bad side-effect is that life-analysis
determines B is live at the entry of basic block 0.  I hope this helps.

- glen



More information about the Gcc-bugs mailing list