Commit 9215b328 by Richard Biener Committed by Richard Biener

tree-cfg.c (label_for_bb): Remove global var.

2019-07-23  Richard Biener  <rguenther@suse.de>

	* tree-cfg.c (label_for_bb): Remove global var.
	(main_block_label): Take label_for_bb as argument.
	(cleanup_dead_labels_eh): Likewise, adjust.
	(cleanup_dead_labels): Adjust.

From-SVN: r273716
parent 0ac608a2
2019-07-23 Richard Biener <rguenther@suse.de>
* tree-cfg.c (label_for_bb): Remove global var.
(main_block_label): Take label_for_bb as argument.
(cleanup_dead_labels_eh): Likewise, adjust.
(cleanup_dead_labels): Adjust.
2019-07-22 Paul A. Clarke <pc@us.ibm.com> 2019-07-22 Paul A. Clarke <pc@us.ibm.com>
* doc/extend.texi (Basic PowerPC Built-in Functions Available on all * doc/extend.texi (Basic PowerPC Built-in Functions Available on all
......
...@@ -1437,19 +1437,19 @@ make_gimple_asm_edges (basic_block bb) ...@@ -1437,19 +1437,19 @@ make_gimple_asm_edges (basic_block bb)
(almost) no new labels should be created. */ (almost) no new labels should be created. */
/* A map from basic block index to the leading label of that block. */ /* A map from basic block index to the leading label of that block. */
static struct label_record struct label_record
{ {
/* The label. */ /* The label. */
tree label; tree label;
/* True if the label is referenced from somewhere. */ /* True if the label is referenced from somewhere. */
bool used; bool used;
} *label_for_bb; };
/* Given LABEL return the first label in the same basic block. */ /* Given LABEL return the first label in the same basic block. */
static tree static tree
main_block_label (tree label) main_block_label (tree label, label_record *label_for_bb)
{ {
basic_block bb = label_to_block (cfun, label); basic_block bb = label_to_block (cfun, label);
tree main_label = label_for_bb[bb->index].label; tree main_label = label_for_bb[bb->index].label;
...@@ -1468,7 +1468,7 @@ main_block_label (tree label) ...@@ -1468,7 +1468,7 @@ main_block_label (tree label)
/* Clean up redundant labels within the exception tree. */ /* Clean up redundant labels within the exception tree. */
static void static void
cleanup_dead_labels_eh (void) cleanup_dead_labels_eh (label_record *label_for_bb)
{ {
eh_landing_pad lp; eh_landing_pad lp;
eh_region r; eh_region r;
...@@ -1481,7 +1481,7 @@ cleanup_dead_labels_eh (void) ...@@ -1481,7 +1481,7 @@ cleanup_dead_labels_eh (void)
for (i = 1; vec_safe_iterate (cfun->eh->lp_array, i, &lp); ++i) for (i = 1; vec_safe_iterate (cfun->eh->lp_array, i, &lp); ++i)
if (lp && lp->post_landing_pad) if (lp && lp->post_landing_pad)
{ {
lab = main_block_label (lp->post_landing_pad); lab = main_block_label (lp->post_landing_pad, label_for_bb);
if (lab != lp->post_landing_pad) if (lab != lp->post_landing_pad)
{ {
EH_LANDING_PAD_NR (lp->post_landing_pad) = 0; EH_LANDING_PAD_NR (lp->post_landing_pad) = 0;
...@@ -1503,7 +1503,7 @@ cleanup_dead_labels_eh (void) ...@@ -1503,7 +1503,7 @@ cleanup_dead_labels_eh (void)
{ {
lab = c->label; lab = c->label;
if (lab) if (lab)
c->label = main_block_label (lab); c->label = main_block_label (lab, label_for_bb);
} }
} }
break; break;
...@@ -1511,7 +1511,7 @@ cleanup_dead_labels_eh (void) ...@@ -1511,7 +1511,7 @@ cleanup_dead_labels_eh (void)
case ERT_ALLOWED_EXCEPTIONS: case ERT_ALLOWED_EXCEPTIONS:
lab = r->u.allowed.label; lab = r->u.allowed.label;
if (lab) if (lab)
r->u.allowed.label = main_block_label (lab); r->u.allowed.label = main_block_label (lab, label_for_bb);
break; break;
} }
} }
...@@ -1526,7 +1526,8 @@ void ...@@ -1526,7 +1526,8 @@ void
cleanup_dead_labels (void) cleanup_dead_labels (void)
{ {
basic_block bb; basic_block bb;
label_for_bb = XCNEWVEC (struct label_record, last_basic_block_for_fn (cfun)); label_record *label_for_bb = XCNEWVEC (struct label_record,
last_basic_block_for_fn (cfun));
/* Find a suitable label for each block. We use the first user-defined /* Find a suitable label for each block. We use the first user-defined
label if there is one, or otherwise just the first label we see. */ label if there is one, or otherwise just the first label we see. */
...@@ -1582,7 +1583,7 @@ cleanup_dead_labels (void) ...@@ -1582,7 +1583,7 @@ cleanup_dead_labels (void)
label = gimple_cond_true_label (cond_stmt); label = gimple_cond_true_label (cond_stmt);
if (label) if (label)
{ {
new_label = main_block_label (label); new_label = main_block_label (label, label_for_bb);
if (new_label != label) if (new_label != label)
gimple_cond_set_true_label (cond_stmt, new_label); gimple_cond_set_true_label (cond_stmt, new_label);
} }
...@@ -1590,7 +1591,7 @@ cleanup_dead_labels (void) ...@@ -1590,7 +1591,7 @@ cleanup_dead_labels (void)
label = gimple_cond_false_label (cond_stmt); label = gimple_cond_false_label (cond_stmt);
if (label) if (label)
{ {
new_label = main_block_label (label); new_label = main_block_label (label, label_for_bb);
if (new_label != label) if (new_label != label)
gimple_cond_set_false_label (cond_stmt, new_label); gimple_cond_set_false_label (cond_stmt, new_label);
} }
...@@ -1607,7 +1608,7 @@ cleanup_dead_labels (void) ...@@ -1607,7 +1608,7 @@ cleanup_dead_labels (void)
{ {
tree case_label = gimple_switch_label (switch_stmt, i); tree case_label = gimple_switch_label (switch_stmt, i);
label = CASE_LABEL (case_label); label = CASE_LABEL (case_label);
new_label = main_block_label (label); new_label = main_block_label (label, label_for_bb);
if (new_label != label) if (new_label != label)
CASE_LABEL (case_label) = new_label; CASE_LABEL (case_label) = new_label;
} }
...@@ -1622,7 +1623,7 @@ cleanup_dead_labels (void) ...@@ -1622,7 +1623,7 @@ cleanup_dead_labels (void)
for (i = 0; i < n; ++i) for (i = 0; i < n; ++i)
{ {
tree cons = gimple_asm_label_op (asm_stmt, i); tree cons = gimple_asm_label_op (asm_stmt, i);
tree label = main_block_label (TREE_VALUE (cons)); tree label = main_block_label (TREE_VALUE (cons), label_for_bb);
TREE_VALUE (cons) = label; TREE_VALUE (cons) = label;
} }
break; break;
...@@ -1635,7 +1636,7 @@ cleanup_dead_labels (void) ...@@ -1635,7 +1636,7 @@ cleanup_dead_labels (void)
{ {
ggoto *goto_stmt = as_a <ggoto *> (stmt); ggoto *goto_stmt = as_a <ggoto *> (stmt);
label = gimple_goto_dest (goto_stmt); label = gimple_goto_dest (goto_stmt);
new_label = main_block_label (label); new_label = main_block_label (label, label_for_bb);
if (new_label != label) if (new_label != label)
gimple_goto_set_dest (goto_stmt, new_label); gimple_goto_set_dest (goto_stmt, new_label);
} }
...@@ -1648,7 +1649,7 @@ cleanup_dead_labels (void) ...@@ -1648,7 +1649,7 @@ cleanup_dead_labels (void)
label = gimple_transaction_label_norm (txn); label = gimple_transaction_label_norm (txn);
if (label) if (label)
{ {
new_label = main_block_label (label); new_label = main_block_label (label, label_for_bb);
if (new_label != label) if (new_label != label)
gimple_transaction_set_label_norm (txn, new_label); gimple_transaction_set_label_norm (txn, new_label);
} }
...@@ -1656,7 +1657,7 @@ cleanup_dead_labels (void) ...@@ -1656,7 +1657,7 @@ cleanup_dead_labels (void)
label = gimple_transaction_label_uninst (txn); label = gimple_transaction_label_uninst (txn);
if (label) if (label)
{ {
new_label = main_block_label (label); new_label = main_block_label (label, label_for_bb);
if (new_label != label) if (new_label != label)
gimple_transaction_set_label_uninst (txn, new_label); gimple_transaction_set_label_uninst (txn, new_label);
} }
...@@ -1664,7 +1665,7 @@ cleanup_dead_labels (void) ...@@ -1664,7 +1665,7 @@ cleanup_dead_labels (void)
label = gimple_transaction_label_over (txn); label = gimple_transaction_label_over (txn);
if (label) if (label)
{ {
new_label = main_block_label (label); new_label = main_block_label (label, label_for_bb);
if (new_label != label) if (new_label != label)
gimple_transaction_set_label_over (txn, new_label); gimple_transaction_set_label_over (txn, new_label);
} }
...@@ -1677,7 +1678,7 @@ cleanup_dead_labels (void) ...@@ -1677,7 +1678,7 @@ cleanup_dead_labels (void)
} }
/* Do the same for the exception region tree labels. */ /* Do the same for the exception region tree labels. */
cleanup_dead_labels_eh (); cleanup_dead_labels_eh (label_for_bb);
/* Finally, purge dead labels. All user-defined labels and labels that /* Finally, purge dead labels. All user-defined labels and labels that
can be the target of non-local gotos and labels which have their can be the target of non-local gotos and labels which have their
......
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