Commit d9f20424 by J"orn Rennecke Committed by Joern Rennecke

cse.c (insert_regs): Also in REG case...

	* cse.c (insert_regs): Also in REG case: When finding an invalid
	value, and we make a new quantity, make sure that it won't be
	mistaken by for a valid one by mention_regs.

From-SVN: r35679
parent c8fa6556
Mon Aug 14 18:51:44 2000 J"orn Rennecke <amylaar@cygnus.co.uk>
* cse.c (insert_regs): Also in REG case: When finding an invalid
value, and we make a new quantity, make sure that it won't be
mistaken by for a valid one by mention_regs.
2000-08-13 Ralf Gtlein <ralf.guetlein@aranea.de> 2000-08-13 Ralf Gtlein <ralf.guetlein@aranea.de>
* h8300.md: Remove obsolete peepholes. * h8300.md: Remove obsolete peepholes.
......
...@@ -1244,6 +1244,19 @@ insert_regs (x, classp, modified) ...@@ -1244,6 +1244,19 @@ insert_regs (x, classp, modified)
return 1; return 1;
} }
/* Mention_regs for a SUBREG checks if REG_TICK is exactly one larger
than REG_IN_TABLE to find out if there was only a single preceding
invalidation - for the SUBREG - or another one, which would be
for the full register. However, if we find here that REG_TICK
indicates that the register is invalid, it means that it has
been invalidated in a separate operation. The SUBREG might be used
now (then this is a recursive call), or we might use the full REG
now and a SUBREG of it later. So bump up REG_TICK so that
mention_regs will do the right thing. */
if (! modified
&& REG_IN_TABLE (regno) >= 0
&& REG_TICK (regno) == REG_IN_TABLE (regno) + 1)
REG_TICK (regno)++;
make_new_qty (regno, GET_MODE (x)); make_new_qty (regno, GET_MODE (x));
return 1; return 1;
} }
...@@ -1263,15 +1276,6 @@ insert_regs (x, classp, modified) ...@@ -1263,15 +1276,6 @@ insert_regs (x, classp, modified)
unsigned int regno = REGNO (SUBREG_REG (x)); unsigned int regno = REGNO (SUBREG_REG (x));
insert_regs (SUBREG_REG (x), NULL_PTR, 0); insert_regs (SUBREG_REG (x), NULL_PTR, 0);
/* Mention_regs checks if REG_TICK is exactly one larger than
REG_IN_TABLE to find out if there was only a single preceding
invalidation - for the SUBREG - or another one, which would be
for the full register. Since we don't invalidate the SUBREG
here first, we might have to bump up REG_TICK so that mention_regs
will do the right thing. */
if (REG_IN_TABLE (regno) >= 0
&& REG_TICK (regno) == REG_IN_TABLE (regno) + 1)
REG_TICK (regno)++;
mention_regs (x); mention_regs (x);
return 1; return 1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment