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> 2010-03-02 Reza Yazdani <reza.yazdani@amd.com>
PR middle-end/42640 PR middle-end/42640
......
...@@ -7399,9 +7399,9 @@ vt_initialize (void) ...@@ -7399,9 +7399,9 @@ vt_initialize (void)
{ {
rtx insn; rtx insn;
HOST_WIDE_INT pre, post = 0; HOST_WIDE_INT pre, post = 0;
int count;
unsigned int next_uid_before = cselib_get_next_uid (); unsigned int next_uid_before = cselib_get_next_uid ();
unsigned int next_uid_after = next_uid_before; unsigned int next_uid_after = next_uid_before;
basic_block first_bb, last_bb;
if (MAY_HAVE_DEBUG_INSNS) if (MAY_HAVE_DEBUG_INSNS)
{ {
...@@ -7411,55 +7411,70 @@ vt_initialize (void) ...@@ -7411,55 +7411,70 @@ vt_initialize (void)
cselib_get_next_uid ()); 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. */ /* Count the number of micro operations. */
VTI (bb)->n_mos = 0; FOR_BB_BETWEEN (bb, first_bb, last_bb->next_bb, next_bb)
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
insn = NEXT_INSN (insn))
{ {
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 (!frame_pointer_needed)
if (pre)
{ {
VTI (bb)->n_mos++; insn_stack_adjust_offset_pre_post (insn, &pre, &post);
if (dump_file && (dump_flags & TDF_DETAILS)) if (pre)
log_op_type (GEN_INT (pre), bb, insn, {
MO_ADJUST, dump_file); 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)) 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);
}
} }
} if (!cselib_hook_called)
cselib_hook_called = false; count_with_sets (insn, 0, 0);
if (MAY_HAVE_DEBUG_INSNS) if (CALL_P (insn))
{
cselib_process_insn (insn);
if (dump_file && (dump_flags & TDF_DETAILS))
{ {
print_rtl_single (dump_file, insn); VTI (bb)->n_mos++;
dump_cselib_table (dump_file); 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) if (MAY_HAVE_DEBUG_INSNS)
{ {
cselib_preserve_only_values (false); cselib_preserve_only_values (false);
...@@ -7472,58 +7487,66 @@ vt_initialize (void) ...@@ -7472,58 +7487,66 @@ vt_initialize (void)
} }
/* Add the micro-operations to the array. */ /* Add the micro-operations to the array. */
VTI (bb)->mos = XNEWVEC (micro_operation, VTI (bb)->n_mos); FOR_BB_BETWEEN (bb, first_bb, last_bb->next_bb, next_bb)
VTI (bb)->n_mos = 0;
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
insn = NEXT_INSN (insn))
{ {
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 (!frame_pointer_needed)
if (pre)
{ {
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->type = MO_ADJUST;
mo->u.adjust = pre; mo->u.adjust = pre;
mo->insn = insn; mo->insn = insn;
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn, log_op_type (PATTERN (insn), bb, insn,
MO_ADJUST, dump_file); MO_ADJUST, dump_file);
}
} }
}
cselib_hook_called = false; cselib_hook_called = false;
if (MAY_HAVE_DEBUG_INSNS) if (MAY_HAVE_DEBUG_INSNS)
{
cselib_process_insn (insn);
if (dump_file && (dump_flags & TDF_DETAILS))
{ {
print_rtl_single (dump_file, insn); cselib_process_insn (insn);
dump_cselib_table (dump_file); if (dump_file && (dump_flags & TDF_DETAILS))
{
print_rtl_single (dump_file, insn);
dump_cselib_table (dump_file);
}
} }
} if (!cselib_hook_called)
if (!cselib_hook_called) add_with_sets (insn, 0, 0);
add_with_sets (insn, 0, 0);
if (!frame_pointer_needed && post) if (!frame_pointer_needed && post)
{ {
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++; micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
mo->type = MO_ADJUST; mo->type = MO_ADJUST;
mo->u.adjust = post; mo->u.adjust = post;
mo->insn = insn; mo->insn = insn;
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
log_op_type (PATTERN (insn), bb, insn, log_op_type (PATTERN (insn), bb, insn,
MO_ADJUST, dump_file); 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) if (MAY_HAVE_DEBUG_INSNS)
{ {
cselib_preserve_only_values (true); 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