Commit d9a6979d by Jakub Jelinek Committed by Jakub Jelinek

var-tracking.c (vt_initialize): Scan insns in ebb chunks instead of bb.

	* var-tracking.c (vt_initialize): Scan insns in ebb chunks instead
	of bb.

Co-Authored-By: Steven Bosscher <steven@gcc.gnu.org>

From-SVN: r157164
parent 2542496c
2010-03-02 Jakub Jelinek <jakub@redhat.com>
Steven Bosscher <steven@gcc.gnu.org>
* var-tracking.c (vt_initialize): Scan insns in ebb chunks instead
of bb.
2010-03-02 Reza Yazdani <reza.yazdani@amd.com>
PR middle-end/42640
......
......@@ -7399,9 +7399,9 @@ vt_initialize (void)
{
rtx insn;
HOST_WIDE_INT pre, post = 0;
int count;
unsigned int next_uid_before = cselib_get_next_uid ();
unsigned int next_uid_after = next_uid_before;
basic_block first_bb, last_bb;
if (MAY_HAVE_DEBUG_INSNS)
{
......@@ -7411,55 +7411,70 @@ vt_initialize (void)
cselib_get_next_uid ());
}
first_bb = bb;
for (;;)
{
edge e;
if (bb->next_bb == EXIT_BLOCK_PTR
|| ! single_pred_p (bb->next_bb))
break;
e = find_edge (bb, bb->next_bb);
if (! e || (e->flags & EDGE_FALLTHRU) == 0)
break;
bb = bb->next_bb;
}
last_bb = bb;
/* Count the number of micro operations. */
VTI (bb)->n_mos = 0;
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
insn = NEXT_INSN (insn))
FOR_BB_BETWEEN (bb, first_bb, last_bb->next_bb, next_bb)
{
if (INSN_P (insn))
VTI (bb)->n_mos = 0;
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
insn = NEXT_INSN (insn))
{
if (!frame_pointer_needed)
if (INSN_P (insn))
{
insn_stack_adjust_offset_pre_post (insn, &pre, &post);
if (pre)
if (!frame_pointer_needed)
{
VTI (bb)->n_mos++;
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (GEN_INT (pre), bb, insn,
MO_ADJUST, dump_file);
insn_stack_adjust_offset_pre_post (insn, &pre, &post);
if (pre)
{
VTI (bb)->n_mos++;
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (GEN_INT (pre), bb, insn,
MO_ADJUST, dump_file);
}
if (post)
{
VTI (bb)->n_mos++;
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (GEN_INT (post), bb, insn,
MO_ADJUST, dump_file);
}
}
if (post)
cselib_hook_called = false;
if (MAY_HAVE_DEBUG_INSNS)
{
VTI (bb)->n_mos++;
cselib_process_insn (insn);
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (GEN_INT (post), bb, insn,
MO_ADJUST, dump_file);
{
print_rtl_single (dump_file, insn);
dump_cselib_table (dump_file);
}
}
}
cselib_hook_called = false;
if (MAY_HAVE_DEBUG_INSNS)
{
cselib_process_insn (insn);
if (dump_file && (dump_flags & TDF_DETAILS))
if (!cselib_hook_called)
count_with_sets (insn, 0, 0);
if (CALL_P (insn))
{
print_rtl_single (dump_file, insn);
dump_cselib_table (dump_file);
VTI (bb)->n_mos++;
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn,
MO_CALL, dump_file);
}
}
if (!cselib_hook_called)
count_with_sets (insn, 0, 0);
if (CALL_P (insn))
{
VTI (bb)->n_mos++;
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn,
MO_CALL, dump_file);
}
}
}
count = VTI (bb)->n_mos;
if (MAY_HAVE_DEBUG_INSNS)
{
cselib_preserve_only_values (false);
......@@ -7472,58 +7487,66 @@ vt_initialize (void)
}
/* Add the micro-operations to the array. */
VTI (bb)->mos = XNEWVEC (micro_operation, VTI (bb)->n_mos);
VTI (bb)->n_mos = 0;
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
insn = NEXT_INSN (insn))
FOR_BB_BETWEEN (bb, first_bb, last_bb->next_bb, next_bb)
{
if (INSN_P (insn))
int count = VTI (bb)->n_mos;
VTI (bb)->mos = XNEWVEC (micro_operation, count);
VTI (bb)->n_mos = 0;
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
insn = NEXT_INSN (insn))
{
if (!frame_pointer_needed)
if (INSN_P (insn))
{
insn_stack_adjust_offset_pre_post (insn, &pre, &post);
if (pre)
if (!frame_pointer_needed)
{
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
insn_stack_adjust_offset_pre_post (insn, &pre, &post);
if (pre)
{
micro_operation *mo
= VTI (bb)->mos + VTI (bb)->n_mos++;
mo->type = MO_ADJUST;
mo->u.adjust = pre;
mo->insn = insn;
mo->type = MO_ADJUST;
mo->u.adjust = pre;
mo->insn = insn;
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn,
MO_ADJUST, dump_file);
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn,
MO_ADJUST, dump_file);
}
}
}
cselib_hook_called = false;
if (MAY_HAVE_DEBUG_INSNS)
{
cselib_process_insn (insn);
if (dump_file && (dump_flags & TDF_DETAILS))
cselib_hook_called = false;
if (MAY_HAVE_DEBUG_INSNS)
{
print_rtl_single (dump_file, insn);
dump_cselib_table (dump_file);
cselib_process_insn (insn);
if (dump_file && (dump_flags & TDF_DETAILS))
{
print_rtl_single (dump_file, insn);
dump_cselib_table (dump_file);
}
}
}
if (!cselib_hook_called)
add_with_sets (insn, 0, 0);
if (!cselib_hook_called)
add_with_sets (insn, 0, 0);
if (!frame_pointer_needed && post)
{
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
if (!frame_pointer_needed && post)
{
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
mo->type = MO_ADJUST;
mo->u.adjust = post;
mo->insn = insn;
mo->type = MO_ADJUST;
mo->u.adjust = post;
mo->insn = insn;
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn,
MO_ADJUST, dump_file);
if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn,
MO_ADJUST, dump_file);
}
}
}
gcc_assert (count == VTI (bb)->n_mos);
}
gcc_assert (count == VTI (bb)->n_mos);
bb = last_bb;
if (MAY_HAVE_DEBUG_INSNS)
{
cselib_preserve_only_values (true);
......
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