(mark_set_1, mark_used_regs): Clean up usages of ALL_NEEDED; change to
SOME_NOT_NEEDED and set properly. From-SVN: r11967
This commit is contained in:
parent
d1b0168185
commit
cb9e8ad176
42
gcc/flow.c
42
gcc/flow.c
|
@ -2006,8 +2006,8 @@ mark_set_1 (needed, dead, x, insn, significant)
|
||||||
register int offset = regno / REGSET_ELT_BITS;
|
register int offset = regno / REGSET_ELT_BITS;
|
||||||
register REGSET_ELT_TYPE bit
|
register REGSET_ELT_TYPE bit
|
||||||
= (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
|
= (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
|
||||||
REGSET_ELT_TYPE all_needed = (needed[offset] & bit);
|
|
||||||
REGSET_ELT_TYPE some_needed = (needed[offset] & bit);
|
REGSET_ELT_TYPE some_needed = (needed[offset] & bit);
|
||||||
|
REGSET_ELT_TYPE some_not_needed = (~ needed[offset]) & bit;
|
||||||
|
|
||||||
/* Mark it as a significant register for this basic block. */
|
/* Mark it as a significant register for this basic block. */
|
||||||
if (significant)
|
if (significant)
|
||||||
|
@ -2030,17 +2030,17 @@ mark_set_1 (needed, dead, x, insn, significant)
|
||||||
n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
|
n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
|
||||||
while (--n > 0)
|
while (--n > 0)
|
||||||
{
|
{
|
||||||
|
REGSET_ELT_TYPE n_bit
|
||||||
|
= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
|
||||||
|
|
||||||
if (significant)
|
if (significant)
|
||||||
significant[(regno + n) / REGSET_ELT_BITS]
|
significant[(regno + n) / REGSET_ELT_BITS] |= n_bit;
|
||||||
|= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
|
|
||||||
dead[(regno + n) / REGSET_ELT_BITS]
|
dead[(regno + n) / REGSET_ELT_BITS] |= n_bit;
|
||||||
|= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
|
|
||||||
some_needed
|
some_needed
|
||||||
|= (needed[(regno + n) / REGSET_ELT_BITS]
|
|= (needed[(regno + n) / REGSET_ELT_BITS] & n_bit);
|
||||||
& (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
|
some_not_needed
|
||||||
all_needed
|
|= ((~ needed[(regno + n) / REGSET_ELT_BITS]) & n_bit);
|
||||||
&= (needed[(regno + n) / REGSET_ELT_BITS]
|
|
||||||
& (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Additional data to record if this is the final pass. */
|
/* Additional data to record if this is the final pass. */
|
||||||
|
@ -2092,7 +2092,7 @@ mark_set_1 (needed, dead, x, insn, significant)
|
||||||
reg_live_length[regno]++;
|
reg_live_length[regno]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (all_needed)
|
if (! some_not_needed)
|
||||||
{
|
{
|
||||||
/* Make a logical link from the next following insn
|
/* Make a logical link from the next following insn
|
||||||
that uses this register, back to this insn.
|
that uses this register, back to this insn.
|
||||||
|
@ -2435,10 +2435,11 @@ mark_used_regs (needed, live, x, final, insn)
|
||||||
register int offset = regno / REGSET_ELT_BITS;
|
register int offset = regno / REGSET_ELT_BITS;
|
||||||
register REGSET_ELT_TYPE bit
|
register REGSET_ELT_TYPE bit
|
||||||
= (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
|
= (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
|
||||||
REGSET_ELT_TYPE all_needed = needed[offset] & bit;
|
|
||||||
REGSET_ELT_TYPE some_needed = needed[offset] & bit;
|
REGSET_ELT_TYPE some_needed = needed[offset] & bit;
|
||||||
|
REGSET_ELT_TYPE some_not_needed = (~ needed[offset]) & bit;
|
||||||
|
|
||||||
live[offset] |= bit;
|
live[offset] |= bit;
|
||||||
|
|
||||||
/* A hard reg in a wide mode may really be multiple registers.
|
/* A hard reg in a wide mode may really be multiple registers.
|
||||||
If so, mark all of them just like the first. */
|
If so, mark all of them just like the first. */
|
||||||
if (regno < FIRST_PSEUDO_REGISTER)
|
if (regno < FIRST_PSEUDO_REGISTER)
|
||||||
|
@ -2479,14 +2480,13 @@ mark_used_regs (needed, live, x, final, insn)
|
||||||
n = HARD_REGNO_NREGS (regno, GET_MODE (x));
|
n = HARD_REGNO_NREGS (regno, GET_MODE (x));
|
||||||
while (--n > 0)
|
while (--n > 0)
|
||||||
{
|
{
|
||||||
live[(regno + n) / REGSET_ELT_BITS]
|
REGSET_ELT_TYPE n_bit
|
||||||
|= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
|
= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
|
||||||
some_needed
|
|
||||||
|= (needed[(regno + n) / REGSET_ELT_BITS]
|
live[(regno + n) / REGSET_ELT_BITS] |= n_bit;
|
||||||
& (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
|
some_needed |= (needed[(regno + n) / REGSET_ELT_BITS] & n_bit);
|
||||||
all_needed
|
some_not_needed
|
||||||
&= (needed[(regno + n) / REGSET_ELT_BITS]
|
|= ((~ needed[(regno + n) / REGSET_ELT_BITS]) & n_bit);
|
||||||
& (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (final)
|
if (final)
|
||||||
|
@ -2530,7 +2530,7 @@ mark_used_regs (needed, live, x, final, insn)
|
||||||
we do not make a REG_DEAD note; likewise if we already
|
we do not make a REG_DEAD note; likewise if we already
|
||||||
made such a note. */
|
made such a note. */
|
||||||
|
|
||||||
if (! all_needed
|
if (some_not_needed
|
||||||
&& ! dead_or_set_p (insn, x)
|
&& ! dead_or_set_p (insn, x)
|
||||||
#if 0
|
#if 0
|
||||||
&& (regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
|
&& (regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
|
||||||
|
|
Loading…
Reference in New Issue