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:
parent
cf79e38637
commit
30c6f45db6
|
@ -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
|
||||
|
|
6
gcc/df.h
6
gcc/df.h
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 (¤t_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 ?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue