Message ID | 1299817406-16745-7-git-send-email-froydnj@codesourcery.com |
---|---|
State | New |
Headers | show |
On Fri, Mar 11, 2011 at 5:23 AM, Nathan Froyd <froydnj@codesourcery.com> wrote: > This patch begins a subseries of patches aimed at removing TREE_CHAIN > from expression trees. tree-cfg.c uses TREE_CHAIN for some analysis > steps on CASE_LABEL_EXPRs. I looked at this for a while, thinking it'd > be easy to use VECs instead, but AFAICS, it wasn't. I went for the next > best thing, hiding TREE_CHAIN usage behind CASE_CHAIN; doing this will > enable swapping out the TREE_CHAIN for a TREE_OPERAND at a later point. Ok for 4.7. Thanks, Richard. > -Nathan > > * tree.h (CASE_CHAIN): Define. > * tree-cfg.c (edge_to_cases_cleanup, get_cases_for_edge): Use it. > (gimple_redirect_edge_and_branch): Likewise. > > diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c > index 1f533a3..bdce4cb 100644 > --- a/gcc/tree-cfg.c > +++ b/gcc/tree-cfg.c > @@ -838,8 +838,8 @@ edge_to_cases_cleanup (const void *key ATTRIBUTE_UNUSED, void **value, > > for (t = (tree) *value; t; t = next) > { > - next = TREE_CHAIN (t); > - TREE_CHAIN (t) = NULL; > + next = CASE_CHAIN (t); > + CASE_CHAIN (t) = NULL; > } > > *value = NULL; > @@ -922,7 +922,7 @@ get_cases_for_edge (edge e, gimple t) > /* Add it to the chain of CASE_LABEL_EXPRs referencing E, or create > a new chain. */ > slot = pointer_map_insert (edge_to_cases, this_edge); > - TREE_CHAIN (elt) = (tree) *slot; > + CASE_CHAIN (elt) = (tree) *slot; > *slot = elt; > } > > @@ -4900,7 +4900,7 @@ gimple_redirect_edge_and_branch (edge e, basic_block dest) > { > last = cases; > CASE_LABEL (cases) = label; > - cases = TREE_CHAIN (cases); > + cases = CASE_CHAIN (cases); > } > > /* If there was already an edge in the CFG, then we need > @@ -4909,8 +4909,8 @@ gimple_redirect_edge_and_branch (edge e, basic_block dest) > { > tree cases2 = get_cases_for_edge (e2, stmt); > > - TREE_CHAIN (last) = TREE_CHAIN (cases2); > - TREE_CHAIN (cases2) = first; > + CASE_CHAIN (last) = CASE_CHAIN (cases2); > + CASE_CHAIN (cases2) = first; > } > bitmap_set_bit (touched_switch_bbs, gimple_bb (stmt)->index); > } > diff --git a/gcc/tree.h b/gcc/tree.h > index 35479f9..58b3b9d 100644 > --- a/gcc/tree.h > +++ b/gcc/tree.h > @@ -1689,6 +1689,7 @@ extern void protected_set_expr_location (tree, location_t); > #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0) > #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1) > #define CASE_LABEL(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2) > +#define CASE_CHAIN(NODE) TREE_CHAIN (CASE_LABEL_EXPR_CHECK (NODE)) > > /* The operands of a TARGET_MEM_REF. Operands 0 and 1 have to match > corresponding MEM_REF operands. */ > -- > 1.7.0.4 > >
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 1f533a3..bdce4cb 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -838,8 +838,8 @@ edge_to_cases_cleanup (const void *key ATTRIBUTE_UNUSED, void **value, for (t = (tree) *value; t; t = next) { - next = TREE_CHAIN (t); - TREE_CHAIN (t) = NULL; + next = CASE_CHAIN (t); + CASE_CHAIN (t) = NULL; } *value = NULL; @@ -922,7 +922,7 @@ get_cases_for_edge (edge e, gimple t) /* Add it to the chain of CASE_LABEL_EXPRs referencing E, or create a new chain. */ slot = pointer_map_insert (edge_to_cases, this_edge); - TREE_CHAIN (elt) = (tree) *slot; + CASE_CHAIN (elt) = (tree) *slot; *slot = elt; } @@ -4900,7 +4900,7 @@ gimple_redirect_edge_and_branch (edge e, basic_block dest) { last = cases; CASE_LABEL (cases) = label; - cases = TREE_CHAIN (cases); + cases = CASE_CHAIN (cases); } /* If there was already an edge in the CFG, then we need @@ -4909,8 +4909,8 @@ gimple_redirect_edge_and_branch (edge e, basic_block dest) { tree cases2 = get_cases_for_edge (e2, stmt); - TREE_CHAIN (last) = TREE_CHAIN (cases2); - TREE_CHAIN (cases2) = first; + CASE_CHAIN (last) = CASE_CHAIN (cases2); + CASE_CHAIN (cases2) = first; } bitmap_set_bit (touched_switch_bbs, gimple_bb (stmt)->index); } diff --git a/gcc/tree.h b/gcc/tree.h index 35479f9..58b3b9d 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1689,6 +1689,7 @@ extern void protected_set_expr_location (tree, location_t); #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0) #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1) #define CASE_LABEL(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2) +#define CASE_CHAIN(NODE) TREE_CHAIN (CASE_LABEL_EXPR_CHECK (NODE)) /* The operands of a TARGET_MEM_REF. Operands 0 and 1 have to match corresponding MEM_REF operands. */