re PR debug/42861 (Spill slots not tracked during var-tracking)
PR debug/42861 * var-tracking.c (val_store): Add modified argument, obey it. Adjust callers. (count_uses): Move down logging of main. (compute_bb_dataflow): Use val_store for MO_VAL_USEs that don't need resolution. (emit_notes_in_bb): Likewise. From-SVN: r156292
This commit is contained in:
parent
e87da26377
commit
fb4cbb9f9e
|
@ -1,3 +1,13 @@
|
||||||
|
2010-01-27 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
|
PR debug/42861
|
||||||
|
* var-tracking.c (val_store): Add modified argument, obey it.
|
||||||
|
Adjust callers.
|
||||||
|
(count_uses): Move down logging of main.
|
||||||
|
(compute_bb_dataflow): Use val_store for MO_VAL_USEs that
|
||||||
|
don't need resolution.
|
||||||
|
(emit_notes_in_bb): Likewise.
|
||||||
|
|
||||||
2010-01-27 Richard Guenther <rguenther@suse.de>
|
2010-01-27 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR middle-end/42878
|
PR middle-end/42878
|
||||||
|
|
|
@ -1518,10 +1518,12 @@ var_mem_delete (dataflow_set *set, rtx loc, bool clobber)
|
||||||
delete_variable_part (set, loc, dv_from_decl (decl), offset);
|
delete_variable_part (set, loc, dv_from_decl (decl), offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Map a value to a location it was just stored in. */
|
/* Bind a value to a location it was just stored in. If MODIFIED
|
||||||
|
holds, assume the location was modified, detaching it from any
|
||||||
|
values bound to it. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
val_store (dataflow_set *set, rtx val, rtx loc, rtx insn)
|
val_store (dataflow_set *set, rtx val, rtx loc, rtx insn, bool modified)
|
||||||
{
|
{
|
||||||
cselib_val *v = CSELIB_VAL_PTR (val);
|
cselib_val *v = CSELIB_VAL_PTR (val);
|
||||||
|
|
||||||
|
@ -1547,7 +1549,8 @@ val_store (dataflow_set *set, rtx val, rtx loc, rtx insn)
|
||||||
|
|
||||||
if (REG_P (loc))
|
if (REG_P (loc))
|
||||||
{
|
{
|
||||||
var_regno_delete (set, REGNO (loc));
|
if (modified)
|
||||||
|
var_regno_delete (set, REGNO (loc));
|
||||||
var_reg_decl_set (set, loc, VAR_INIT_STATUS_INITIALIZED,
|
var_reg_decl_set (set, loc, VAR_INIT_STATUS_INITIALIZED,
|
||||||
dv_from_value (val), 0, NULL_RTX, INSERT);
|
dv_from_value (val), 0, NULL_RTX, INSERT);
|
||||||
}
|
}
|
||||||
|
@ -4530,11 +4533,6 @@ count_uses (rtx *ploc, void *cuip)
|
||||||
cselib_val *val;
|
cselib_val *val;
|
||||||
enum machine_mode mode = GET_MODE (loc);
|
enum machine_mode mode = GET_MODE (loc);
|
||||||
|
|
||||||
VTI (cui->bb)->n_mos++;
|
|
||||||
|
|
||||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
|
||||||
log_op_type (loc, cui->bb, cui->insn, mopt, dump_file);
|
|
||||||
|
|
||||||
switch (mopt)
|
switch (mopt)
|
||||||
{
|
{
|
||||||
case MO_VAL_LOC:
|
case MO_VAL_LOC:
|
||||||
|
@ -4550,12 +4548,15 @@ count_uses (rtx *ploc, void *cuip)
|
||||||
{
|
{
|
||||||
enum machine_mode address_mode
|
enum machine_mode address_mode
|
||||||
= targetm.addr_space.address_mode (MEM_ADDR_SPACE (loc));
|
= targetm.addr_space.address_mode (MEM_ADDR_SPACE (loc));
|
||||||
val = cselib_lookup (XEXP (loc, 0), address_mode, false);
|
val = cselib_lookup (XEXP (loc, 0), address_mode, 0);
|
||||||
|
|
||||||
if (val && !cselib_preserved_value_p (val))
|
if (val && !cselib_preserved_value_p (val))
|
||||||
{
|
{
|
||||||
VTI (cui->bb)->n_mos++;
|
VTI (cui->bb)->n_mos++;
|
||||||
cselib_preserve_value (val);
|
cselib_preserve_value (val);
|
||||||
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
|
log_op_type (XEXP (loc, 0), cui->bb, cui->insn,
|
||||||
|
MO_VAL_USE, dump_file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4578,6 +4579,9 @@ count_uses (rtx *ploc, void *cuip)
|
||||||
{
|
{
|
||||||
VTI (cui->bb)->n_mos++;
|
VTI (cui->bb)->n_mos++;
|
||||||
cselib_preserve_value (oval);
|
cselib_preserve_value (oval);
|
||||||
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
|
log_op_type (loc, cui->bb, cui->insn,
|
||||||
|
MO_VAL_USE, dump_file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4592,6 +4596,10 @@ count_uses (rtx *ploc, void *cuip)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VTI (cui->bb)->n_mos++;
|
||||||
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
|
log_op_type (loc, cui->bb, cui->insn, mopt, dump_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5331,6 +5339,8 @@ compute_bb_dataflow (basic_block bb)
|
||||||
|
|
||||||
if (VAL_NEEDS_RESOLUTION (loc))
|
if (VAL_NEEDS_RESOLUTION (loc))
|
||||||
val_resolve (out, val, vloc, insn);
|
val_resolve (out, val, vloc, insn);
|
||||||
|
else
|
||||||
|
val_store (out, val, uloc, insn, false);
|
||||||
|
|
||||||
if (VAL_HOLDS_TRACK_EXPR (loc))
|
if (VAL_HOLDS_TRACK_EXPR (loc))
|
||||||
{
|
{
|
||||||
|
@ -5422,7 +5432,7 @@ compute_bb_dataflow (basic_block bb)
|
||||||
else if (REG_P (uloc))
|
else if (REG_P (uloc))
|
||||||
var_regno_delete (out, REGNO (uloc));
|
var_regno_delete (out, REGNO (uloc));
|
||||||
|
|
||||||
val_store (out, val, vloc, insn);
|
val_store (out, val, vloc, insn, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -6951,6 +6961,8 @@ emit_notes_in_bb (basic_block bb, dataflow_set *set)
|
||||||
|
|
||||||
if (VAL_NEEDS_RESOLUTION (loc))
|
if (VAL_NEEDS_RESOLUTION (loc))
|
||||||
val_resolve (set, val, vloc, insn);
|
val_resolve (set, val, vloc, insn);
|
||||||
|
else
|
||||||
|
val_store (set, val, uloc, insn, false);
|
||||||
|
|
||||||
if (VAL_HOLDS_TRACK_EXPR (loc))
|
if (VAL_HOLDS_TRACK_EXPR (loc))
|
||||||
{
|
{
|
||||||
|
@ -7038,7 +7050,7 @@ emit_notes_in_bb (basic_block bb, dataflow_set *set)
|
||||||
else if (REG_P (uloc))
|
else if (REG_P (uloc))
|
||||||
var_regno_delete (set, REGNO (uloc));
|
var_regno_delete (set, REGNO (uloc));
|
||||||
|
|
||||||
val_store (set, val, vloc, insn);
|
val_store (set, val, vloc, insn, true);
|
||||||
|
|
||||||
emit_notes_for_changes (NEXT_INSN (insn), EMIT_NOTE_BEFORE_INSN,
|
emit_notes_for_changes (NEXT_INSN (insn), EMIT_NOTE_BEFORE_INSN,
|
||||||
set->vars);
|
set->vars);
|
||||||
|
|
Loading…
Reference in New Issue