mirror of git://gcc.gnu.org/git/gcc.git
re PR rtl-optimization/50205 (ICE: in code_motion_path_driver, at sel-sched.c:6581 with -fselective-scheduling2 and custom flags)
PR rtl-optimization/50205 * sel-sched.c (count_occurrences_1): Simplify on the assumption that p->x is a register. Forbid substitution when the same register is found in a different mode. (count_occurrences_equiv): Assert that 'what' is a register. * gcc.dg/pr50205.c: New. From-SVN: r180135
This commit is contained in:
parent
748c511454
commit
ea3f6aa862
|
|
@ -1,3 +1,11 @@
|
|||
2011-10-18 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
PR rtl-optimization/50205
|
||||
* sel-sched.c (count_occurrences_1): Simplify on the assumption that
|
||||
p->x is a register. Forbid substitution when the same register is
|
||||
found in a different mode.
|
||||
(count_occurrences_equiv): Assert that 'what' is a register.
|
||||
|
||||
2011-10-18 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/50767
|
||||
|
|
|
|||
|
|
@ -813,18 +813,12 @@ count_occurrences_1 (rtx *cur_rtx, void *arg)
|
|||
{
|
||||
rtx_search_arg_p p = (rtx_search_arg_p) arg;
|
||||
|
||||
/* The last param FOR_GCSE is true, because otherwise it performs excessive
|
||||
substitutions like
|
||||
r8 = r33
|
||||
r16 = r33
|
||||
for the last insn it presumes r33 equivalent to r8, so it changes it to
|
||||
r33. Actually, there's no change, but it spoils debugging. */
|
||||
if (exp_equiv_p (*cur_rtx, p->x, 0, true))
|
||||
if (REG_P (*cur_rtx) && REGNO (*cur_rtx) == REGNO (p->x))
|
||||
{
|
||||
/* Bail out if we occupy more than one register. */
|
||||
if (REG_P (*cur_rtx)
|
||||
&& HARD_REGISTER_P (*cur_rtx)
|
||||
&& hard_regno_nregs[REGNO(*cur_rtx)][GET_MODE (*cur_rtx)] > 1)
|
||||
/* Bail out if mode is different or more than one register is used. */
|
||||
if (GET_MODE (*cur_rtx) != GET_MODE (p->x)
|
||||
|| (HARD_REGISTER_P (*cur_rtx)
|
||||
&& hard_regno_nregs[REGNO(*cur_rtx)][GET_MODE (*cur_rtx)] > 1))
|
||||
{
|
||||
p->n = 0;
|
||||
return 1;
|
||||
|
|
@ -837,7 +831,6 @@ count_occurrences_1 (rtx *cur_rtx, void *arg)
|
|||
}
|
||||
|
||||
if (GET_CODE (*cur_rtx) == SUBREG
|
||||
&& REG_P (p->x)
|
||||
&& (!REG_P (SUBREG_REG (*cur_rtx))
|
||||
|| REGNO (SUBREG_REG (*cur_rtx)) == REGNO (p->x)))
|
||||
{
|
||||
|
|
@ -859,6 +852,7 @@ count_occurrences_equiv (rtx what, rtx where)
|
|||
{
|
||||
struct rtx_search_arg arg;
|
||||
|
||||
gcc_assert (REG_P (what));
|
||||
arg.x = what;
|
||||
arg.n = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
2011-10-18 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
PR rtl-optimization/50205
|
||||
* gcc.dg/pr50205.c: New.
|
||||
|
||||
2011-10-18 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/50767
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
|
||||
/* { dg-options "-O2 -fno-cprop-registers -fno-dce -fno-forward-propagate -fselective-scheduling2 -funroll-loops -fno-web" } */
|
||||
extern int a[];
|
||||
|
||||
void foo (void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 199; i++)
|
||||
{
|
||||
if (a[i] != i)
|
||||
__builtin_abort ();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue