diff mbox

[06/18] define CASE_CHAIN accessor for CASE_LABEL_EXPR

Message ID 1299817406-16745-7-git-send-email-froydnj@codesourcery.com
State New
Headers show

Commit Message

Nathan Froyd March 11, 2011, 4:23 a.m. UTC
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.

-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.

Comments

Richard Biener March 11, 2011, 1:06 p.m. UTC | #1
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 mbox

Patch

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.  */