Commit 5720520f by Richard Sandiford Committed by Richard Sandiford

* sched-deps.c (sched_analyze): Check HARD_REGNO_CALL_PART_CLOBBERED.

From-SVN: r59300
parent 4392ebd3
2002-11-20 Richard Sandiford <rsandifo@redhat.com> 2002-11-20 Richard Sandiford <rsandifo@redhat.com>
* sched-deps.c (sched_analyze): Check HARD_REGNO_CALL_PART_CLOBBERED.
2002-11-20 Richard Sandiford <rsandifo@redhat.com>
* config/sh/sh.md (udivsi3): Don't put udivsi3_i4_media instructions * config/sh/sh.md (udivsi3): Don't put udivsi3_i4_media instructions
into a libcall block. into a libcall block.
(divsi3): Likewise divsi3_i4_media. (divsi3): Likewise divsi3_i4_media.
......
...@@ -1287,8 +1287,12 @@ sched_analyze (deps, head, tail) ...@@ -1287,8 +1287,12 @@ sched_analyze (deps, head, tail)
SET_REGNO_REG_SET (reg_pending_sets, i); SET_REGNO_REG_SET (reg_pending_sets, i);
SET_REGNO_REG_SET (reg_pending_uses, i); SET_REGNO_REG_SET (reg_pending_uses, i);
} }
/* Other call-clobbered hard regs may be clobbered. */ /* Other call-clobbered hard regs may be clobbered.
else if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) Since we only have a choice between 'might be clobbered'
and 'definitely not clobbered', we must include all
partly call-clobbered registers here. */
else if (HARD_REGNO_CALL_PART_CLOBBERED (i, reg_raw_mode[i])
|| TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
SET_REGNO_REG_SET (reg_pending_clobbers, i); SET_REGNO_REG_SET (reg_pending_clobbers, i);
/* We don't know what set of fixed registers might be used /* We don't know what set of fixed registers might be used
by the function, but it is certain that the stack pointer by the function, but it is certain that the stack pointer
......
2002-11-20 Richard Sandiford <rsandifo@redhat.com> 2002-11-20 Richard Sandiford <rsandifo@redhat.com>
* gcc.c-torture/execute/20021120-3.c: New test.
2002-11-20 Richard Sandiford <rsandifo@redhat.com>
* gcc.c-torture/execute/20021120-2.c: New test. * gcc.c-torture/execute/20021120-2.c: New test.
2002-11-20 Richard Sandiford <rsandifo@redhat.com> 2002-11-20 Richard Sandiford <rsandifo@redhat.com>
......
/* Test whether a partly call-clobbered register will be moved over a call.
Although the original test case didn't use any GNUisms, it proved
difficult to reduce without the named register extension. */
#if __SH64__ == 32
#define LOC asm ("r10")
#else
#define LOC
#endif
unsigned int foo (char *c, unsigned int x, unsigned int y)
{
register unsigned int z LOC;
sprintf (c, "%d", x / y);
z = x + 1;
return z / (y + 1);
}
int main ()
{
char c[16];
if (foo (c, ~1U, 4) != (~0U / 5))
abort ();
exit (0);
}
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