aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog18
-rw-r--r--gcc/cfgbuild.c7
-rw-r--r--gcc/dwarf2cfi.c14
-rw-r--r--gcc/function.h2
-rw-r--r--gcc/jump.c8
-rw-r--r--gcc/reload1.c9
6 files changed, 37 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dbdae27..e85db1a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,23 @@
2014-08-27 David Malcolm <dmalcolm@redhat.com>
+ * function.h (struct expr_status): Strengthen field
+ "x_forced_labels" from rtx to rtx_expr_list *.
+
+ * cfgbuild.c (make_edges): Split local "x" into two locals,
+ strengthening one from rtx to rtx_expr_list *, and using methods
+ of said class.
+ * dwarf2cfi.c (create_trace_edges): Split local "lab" out; within
+ loop over forced_labels, introduce strengthen it from rtx to
+ rtx_expr_list *, using methods to clarify the code.
+ * jump.c (rebuild_jump_labels_1): Strengthen local "insn" from rtx
+ to rtx_expr_list *, using methods of said class to clarify the
+ code.
+ * reload1.c (set_initial_label_offsets): Split local "x" into two
+ per-loop variables, strengthening the first from rtx to
+ rtx_expr_list * and using methods.
+
+2014-08-27 David Malcolm <dmalcolm@redhat.com>
+
* coretypes.h (class rtx_expr_list): Add forward declaration.
* emit-rtl.c (gen_rtx_EXPR_LIST): New.
* gengenrtl.c (special_rtx): Add EXPR_LIST.
diff --git a/gcc/cfgbuild.c b/gcc/cfgbuild.c
index dd6ed7a..05adac0 100644
--- a/gcc/cfgbuild.c
+++ b/gcc/cfgbuild.c
@@ -219,7 +219,6 @@ make_edges (basic_block min, basic_block max, int update_p)
FOR_BB_BETWEEN (bb, min, max->next_bb, next_bb)
{
rtx_insn *insn;
- rtx x;
enum rtx_code code;
edge e;
edge_iterator ei;
@@ -285,8 +284,8 @@ make_edges (basic_block min, basic_block max, int update_p)
everything on the forced_labels list. */
else if (computed_jump_p (insn))
{
- for (x = forced_labels; x; x = XEXP (x, 1))
- make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL);
+ for (rtx_expr_list *x = forced_labels; x; x = x->next ())
+ make_label_edge (edge_cache, bb, x->element (), EDGE_ABNORMAL);
}
/* Returns create an exit out. */
@@ -338,7 +337,7 @@ make_edges (basic_block min, basic_block max, int update_p)
taken, then only calls to those functions or to other
nested functions that use them could possibly do
nonlocal gotos. */
- for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
+ for (rtx x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
make_label_edge (edge_cache, bb, XEXP (x, 0),
EDGE_ABNORMAL | EDGE_ABNORMAL_CALL);
}
diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c
index 25571fa..3f4a0ad 100644
--- a/gcc/dwarf2cfi.c
+++ b/gcc/dwarf2cfi.c
@@ -2286,7 +2286,7 @@ maybe_record_trace_start_abnormal (rtx start, rtx origin)
static void
create_trace_edges (rtx insn)
{
- rtx tmp, lab;
+ rtx tmp;
int i, n;
if (JUMP_P (insn))
@@ -2303,14 +2303,14 @@ create_trace_edges (rtx insn)
n = GET_NUM_ELEM (vec);
for (i = 0; i < n; ++i)
{
- lab = XEXP (RTVEC_ELT (vec, i), 0);
+ rtx lab = XEXP (RTVEC_ELT (vec, i), 0);
maybe_record_trace_start (lab, insn);
}
}
else if (computed_jump_p (insn))
{
- for (lab = forced_labels; lab; lab = XEXP (lab, 1))
- maybe_record_trace_start (XEXP (lab, 0), insn);
+ for (rtx_expr_list *lab = forced_labels; lab; lab = lab->next ())
+ maybe_record_trace_start (lab->element (), insn);
}
else if (returnjump_p (insn))
;
@@ -2319,13 +2319,13 @@ create_trace_edges (rtx insn)
n = ASM_OPERANDS_LABEL_LENGTH (tmp);
for (i = 0; i < n; ++i)
{
- lab = XEXP (ASM_OPERANDS_LABEL (tmp, i), 0);
+ rtx lab = XEXP (ASM_OPERANDS_LABEL (tmp, i), 0);
maybe_record_trace_start (lab, insn);
}
}
else
{
- lab = JUMP_LABEL (insn);
+ rtx lab = JUMP_LABEL (insn);
gcc_assert (lab != NULL);
maybe_record_trace_start (lab, insn);
}
@@ -2338,7 +2338,7 @@ create_trace_edges (rtx insn)
/* Process non-local goto edges. */
if (can_nonlocal_goto (insn))
- for (lab = nonlocal_goto_handler_labels; lab; lab = XEXP (lab, 1))
+ for (rtx lab = nonlocal_goto_handler_labels; lab; lab = XEXP (lab, 1))
maybe_record_trace_start_abnormal (XEXP (lab, 0), insn);
}
else if (rtx_sequence *seq = dyn_cast <rtx_sequence *> (PATTERN (insn)))
diff --git a/gcc/function.h b/gcc/function.h
index 28a20f3..ba7597c 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -135,7 +135,7 @@ struct GTY(()) expr_status {
rtx x_apply_args_value;
/* List of labels that must never be deleted. */
- rtx x_forced_labels;
+ rtx_expr_list *x_forced_labels;
};
typedef struct call_site_record_d *call_site_record;
diff --git a/gcc/jump.c b/gcc/jump.c
index a28300c..b8d3d52 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -74,7 +74,7 @@ static int returnjump_p_1 (rtx *, void *);
static void
rebuild_jump_labels_1 (rtx_insn *f, bool count_forced)
{
- rtx insn;
+ rtx_expr_list *insn;
timevar_push (TV_REBUILD_JUMP);
init_label_info (f);
@@ -85,9 +85,9 @@ rebuild_jump_labels_1 (rtx_insn *f, bool count_forced)
count doesn't drop to zero. */
if (count_forced)
- for (insn = forced_labels; insn; insn = XEXP (insn, 1))
- if (LABEL_P (XEXP (insn, 0)))
- LABEL_NUSES (XEXP (insn, 0))++;
+ for (insn = forced_labels; insn; insn = insn->next ())
+ if (LABEL_P (insn->element ()))
+ LABEL_NUSES (insn->element ())++;
timevar_pop (TV_REBUILD_JUMP);
}
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 2bb8005..f7acd65 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -3909,14 +3909,13 @@ set_initial_eh_label_offset (rtx label)
static void
set_initial_label_offsets (void)
{
- rtx x;
memset (offsets_known_at, 0, num_labels);
- for (x = forced_labels; x; x = XEXP (x, 1))
- if (XEXP (x, 0))
- set_label_offsets (XEXP (x, 0), NULL, 1);
+ for (rtx_expr_list *x = forced_labels; x; x = x->next ())
+ if (x->element ())
+ set_label_offsets (x->element (), NULL, 1);
- for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
+ for (rtx x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
if (XEXP (x, 0))
set_label_offsets (XEXP (x, 0), NULL, 1);