re PR rtl-optimization/34415 (Possible miscompilation on MIPS)

gcc/
	PR rtl-optimization/34415
	* df.h (DF_LR_IN, DF_LR_OUT): Update comments.
	* resource.c (mark_target_live_regs): Use DF_LR_IN rather than
	df_get_live_in.  Don't handle pseudos.

gcc/testsuite/
	PR rtl-optimization/34415
	* gcc.c-torture/execute/pr34415.c: New test.

From-SVN: r130987
This commit is contained in:
Richard Sandiford 2007-12-16 09:54:34 +00:00 committed by Richard Sandiford
parent cf79e38637
commit 30c6f45db6
5 changed files with 50 additions and 12 deletions

View File

@ -1,3 +1,10 @@
2007-12-16 Richard Sandiford <rsandifo@nildram.co.uk>
PR rtl-optimization/34415
* df.h (DF_LR_IN, DF_LR_OUT): Update comments.
* resource.c (mark_target_live_regs): Use DF_LR_IN rather than
df_get_live_in. Don't handle pseudos.
2007-12-16 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/34003

View File

@ -559,9 +559,9 @@ struct df
#define DF_LIVE_IN(BB) (DF_LIVE_BB_INFO(BB)->in)
#define DF_LIVE_OUT(BB) (DF_LIVE_BB_INFO(BB)->out)
/* These macros are currently used by only reg-stack since it is not
tolerant of uninitialized variables. This intolerance should be
fixed because it causes other problems. */
/* These macros are used by passes that are not tolerant of
uninitialized variables. This intolerance should eventually
be fixed. */
#define DF_LR_IN(BB) (DF_LR_BB_INFO(BB)->in)
#define DF_LR_OUT(BB) (DF_LR_BB_INFO(BB)->out)

View File

@ -958,9 +958,8 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
TARGET. Otherwise, we must assume everything is live. */
if (b != -1)
{
regset regs_live = df_get_live_in (BASIC_BLOCK (b));
regset regs_live = DF_LR_IN (BASIC_BLOCK (b));
rtx start_insn, stop_insn;
reg_set_iterator rsi;
/* Compute hard regs live at start of block -- this is the real hard regs
marked live, plus live pseudo regs that have been renumbered to
@ -968,13 +967,6 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
REG_SET_TO_HARD_REG_SET (current_live_regs, regs_live);
EXECUTE_IF_SET_IN_REG_SET (regs_live, FIRST_PSEUDO_REGISTER, i, rsi)
{
if (reg_renumber[i] >= 0)
add_to_hard_reg_set (&current_live_regs, PSEUDO_REGNO_MODE (i),
reg_renumber[i]);
}
/* Get starting and ending insn, handling the case where each might
be a SEQUENCE. */
start_insn = (b == ENTRY_BLOCK_PTR->next_bb->index ?

View File

@ -1,3 +1,8 @@
2007-12-16 Richard Sandiford <rsandifo@nildram.co.uk>
PR rtl-optimization/34415
* gcc.c-torture/execute/pr34415.c: New test.
2007-12-16 Danny Smith <dannysmith@users.sourceforge.net>
* gcc.target/i386/fastcall-1.c: (f4): Change return type to

View File

@ -0,0 +1,34 @@
const char *__attribute__((noinline))
foo (const char *p)
{
const char *end;
int len = 1;
for (;;)
{
int c = *p;
c = (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
if (c == 'B')
end = p;
else if (c == 'A')
{
end = p;
do
p++;
while (*p == '+');
}
else
break;
p++;
len++;
}
if (len > 2 && *p == ':')
p = end;
return p;
}
int
main (void)
{
const char *input = "Bbb:";
return foo (input) != input + 2;
}