Commit 30c6f45d by Richard Sandiford Committed by Richard Sandiford

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
parent cf79e386
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> 2007-12-16 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/34003 PR bootstrap/34003
...@@ -559,9 +559,9 @@ struct df ...@@ -559,9 +559,9 @@ struct df
#define DF_LIVE_IN(BB) (DF_LIVE_BB_INFO(BB)->in) #define DF_LIVE_IN(BB) (DF_LIVE_BB_INFO(BB)->in)
#define DF_LIVE_OUT(BB) (DF_LIVE_BB_INFO(BB)->out) #define DF_LIVE_OUT(BB) (DF_LIVE_BB_INFO(BB)->out)
/* These macros are currently used by only reg-stack since it is not /* These macros are used by passes that are not tolerant of
tolerant of uninitialized variables. This intolerance should be uninitialized variables. This intolerance should eventually
fixed because it causes other problems. */ be fixed. */
#define DF_LR_IN(BB) (DF_LR_BB_INFO(BB)->in) #define DF_LR_IN(BB) (DF_LR_BB_INFO(BB)->in)
#define DF_LR_OUT(BB) (DF_LR_BB_INFO(BB)->out) #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) ...@@ -958,9 +958,8 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
TARGET. Otherwise, we must assume everything is live. */ TARGET. Otherwise, we must assume everything is live. */
if (b != -1) 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; rtx start_insn, stop_insn;
reg_set_iterator rsi;
/* Compute hard regs live at start of block -- this is the real hard regs /* 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 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) ...@@ -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); 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 /* Get starting and ending insn, handling the case where each might
be a SEQUENCE. */ be a SEQUENCE. */
start_insn = (b == ENTRY_BLOCK_PTR->next_bb->index ? start_insn = (b == ENTRY_BLOCK_PTR->next_bb->index ?
......
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> 2007-12-16 Danny Smith <dannysmith@users.sourceforge.net>
* gcc.target/i386/fastcall-1.c: (f4): Change return type to * gcc.target/i386/fastcall-1.c: (f4): Change return type to
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;
}
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