mirror of git://gcc.gnu.org/git/gcc.git
re PR debug/53740 (--enable-checking=yes,rtl bootstrap failure with ada)
PR debug/53740 PR debug/52983 PR debug/48866 * dce.c (word_dce_process_block): Check whether inserting debug temps are needed even for needed insns. (dce_process_block): Likewise. * df-problems.c (dead_debug_add): Add comment about multi-regs. (dead_debug_insert_temp): Likewise. Don't subreg when we're setting fewer regs than a multi-reg requires. From-SVN: r189036
This commit is contained in:
parent
b94a8a1239
commit
6f9e260c80
|
|
@ -1,3 +1,15 @@
|
||||||
|
2012-06-28 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
|
PR debug/53740
|
||||||
|
PR debug/52983
|
||||||
|
PR debug/48866
|
||||||
|
* dce.c (word_dce_process_block): Check whether inserting debug
|
||||||
|
temps are needed even for needed insns.
|
||||||
|
(dce_process_block): Likewise.
|
||||||
|
* df-problems.c (dead_debug_add): Add comment about multi-regs.
|
||||||
|
(dead_debug_insert_temp): Likewise. Don't subreg when we're
|
||||||
|
setting fewer regs than a multi-reg requires.
|
||||||
|
|
||||||
2012-06-27 Richard Henderson <rth@redhat.com>
|
2012-06-27 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* config/alpha/alpha.c (alpha_dimode_u): New.
|
* config/alpha/alpha.c (alpha_dimode_u): New.
|
||||||
|
|
|
||||||
14
gcc/dce.c
14
gcc/dce.c
|
|
@ -864,9 +864,12 @@ word_dce_process_block (basic_block bb, bool redo_out)
|
||||||
anything in local_live. */
|
anything in local_live. */
|
||||||
if (marked_insn_p (insn))
|
if (marked_insn_p (insn))
|
||||||
df_word_lr_simulate_uses (insn, local_live);
|
df_word_lr_simulate_uses (insn, local_live);
|
||||||
|
|
||||||
/* Insert debug temps for dead REGs used in subsequent debug
|
/* Insert debug temps for dead REGs used in subsequent debug
|
||||||
insns. */
|
insns. We may have to emit a debug temp even if the insn
|
||||||
else if (debug.used && !bitmap_empty_p (debug.used))
|
was marked, in case the debug use was after the point of
|
||||||
|
death. */
|
||||||
|
if (debug.used && !bitmap_empty_p (debug.used))
|
||||||
{
|
{
|
||||||
df_ref *def_rec;
|
df_ref *def_rec;
|
||||||
|
|
||||||
|
|
@ -963,9 +966,12 @@ dce_process_block (basic_block bb, bool redo_out, bitmap au)
|
||||||
anything in local_live. */
|
anything in local_live. */
|
||||||
if (needed)
|
if (needed)
|
||||||
df_simulate_uses (insn, local_live);
|
df_simulate_uses (insn, local_live);
|
||||||
|
|
||||||
/* Insert debug temps for dead REGs used in subsequent debug
|
/* Insert debug temps for dead REGs used in subsequent debug
|
||||||
insns. */
|
insns. We may have to emit a debug temp even if the insn
|
||||||
else if (debug.used && !bitmap_empty_p (debug.used))
|
was marked, in case the debug use was after the point of
|
||||||
|
death. */
|
||||||
|
if (debug.used && !bitmap_empty_p (debug.used))
|
||||||
for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
|
for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
|
||||||
dead_debug_insert_temp (&debug, DF_REF_REGNO (*def_rec), insn,
|
dead_debug_insert_temp (&debug, DF_REF_REGNO (*def_rec), insn,
|
||||||
DEBUG_TEMP_BEFORE_WITH_VALUE);
|
DEBUG_TEMP_BEFORE_WITH_VALUE);
|
||||||
|
|
|
||||||
|
|
@ -3179,6 +3179,9 @@ dead_debug_add (struct dead_debug *debug, df_ref use, unsigned int uregno)
|
||||||
if (!debug->used)
|
if (!debug->used)
|
||||||
debug->used = BITMAP_ALLOC (NULL);
|
debug->used = BITMAP_ALLOC (NULL);
|
||||||
|
|
||||||
|
/* ??? If we dealt with split multi-registers below, we should set
|
||||||
|
all registers for the used mode in case of hardware
|
||||||
|
registers. */
|
||||||
bitmap_set_bit (debug->used, uregno);
|
bitmap_set_bit (debug->used, uregno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3269,6 +3272,15 @@ dead_debug_insert_temp (struct dead_debug *debug, unsigned int uregno,
|
||||||
/* Hmm... Something's fishy, we should be setting REG here. */
|
/* Hmm... Something's fishy, we should be setting REG here. */
|
||||||
if (REGNO (dest) != REGNO (reg))
|
if (REGNO (dest) != REGNO (reg))
|
||||||
breg = NULL;
|
breg = NULL;
|
||||||
|
/* If we're not overwriting all the hardware registers that
|
||||||
|
setting REG in its mode would, we won't know what to bind
|
||||||
|
the debug temp to. ??? We could bind the debug_expr to a
|
||||||
|
CONCAT or PARALLEL with the split multi-registers, and
|
||||||
|
replace them as we found the corresponding sets. */
|
||||||
|
else if (REGNO (reg) < FIRST_PSEUDO_REGISTER
|
||||||
|
&& (hard_regno_nregs[REGNO (reg)][GET_MODE (reg)]
|
||||||
|
!= hard_regno_nregs[REGNO (reg)][GET_MODE (dest)]))
|
||||||
|
breg = NULL;
|
||||||
/* Ok, it's the same (hardware) REG, but with a different
|
/* Ok, it's the same (hardware) REG, but with a different
|
||||||
mode, so SUBREG it. */
|
mode, so SUBREG it. */
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue