On Wed, Aug 1, 2012 at 4:09 PM, Michael Matz <m...@suse.de> wrote:
> Hi,
>
> this removes the last member of var_ann_d, a bit used only locally in
> remove_unused_locals, so we can as well just use a bitmap.  (The funny
> renaming of the member I had to do because gengtype doesn't like empty
> structs, the whole thing will be removed momentarily with the third
> patch).
>
> The only remaining semantic of var_ann now is "if it's non-zero it's a
> non-global variable that was put into referenced_vars".
>
> Regstrapped on x86_64-linux (with the other two patches).  Okay for trunk?

Ok.   Would be nice to now unify global and local var handling with a single
bitmap.

Thanks,
Richard.

>
> Ciao,
> Michael.
> --
>         * tree-flow.h (struct var_ann_d): Rename used member.
>         (set_is_used): Don't declare.
>         * tree-flow-inline.h (clear_is_used): Remove.
>         (set_is_used, is_used_p): Move to ...
>         * tree-ssa-live.c (set_is_used, is_used_p): ... here, and use
>         on the side bitmap.
>         (usedvars): New bitmap.
>         (dump_scope_block): Don't dump unusedness.
>         (remove_unused_locals): Allocate and free usedvars.
>         * tree-nrv.c (tree_nrv): Don't clear used flags here.
>
> Index: gcc/tree-flow-inline.h
> ===================================================================
> *** gcc.orig/tree-flow-inline.h 2012-08-01 15:58:33.000000000 +0200
> --- gcc/tree-flow-inline.h      2012-08-01 16:00:42.000000000 +0200
> *************** phi_arg_index_from_use (use_operand_p us
> *** 558,590 ****
>    return index;
>   }
>
> - /* Mark VAR as used, so that it'll be preserved during rtl expansion.  */
> -
> - static inline void
> - set_is_used (tree var)
> - {
> -   var_ann_t ann = var_ann (var);
> -   ann->used = true;
> - }
> -
> - /* Clear VAR's used flag.  */
> -
> - static inline void
> - clear_is_used (tree var)
> - {
> -   var_ann_t ann = var_ann (var);
> -   ann->used = false;
> - }
> -
> - /* Return true if VAR is marked as used.  */
> -
> - static inline bool
> - is_used_p (tree var)
> - {
> -   var_ann_t ann = var_ann (var);
> -   return ann->used;
> - }
> -
>   /* Return true if T (assumed to be a DECL) is a global variable.
>      A variable is considered global if its storage is not automatic.  */
>
> --- 558,563 ----
> Index: gcc/tree-flow.h
> ===================================================================
> *** gcc.orig/tree-flow.h        2012-08-01 15:59:35.000000000 +0200
> --- gcc/tree-flow.h     2012-08-01 16:00:42.000000000 +0200
> *************** enum need_phi_state {
> *** 180,186 ****
>   struct GTY(()) var_ann_d {
>     /* Nonzero if this variable was used after SSA optimizations were
>        applied.  We set this when translating out of SSA form.  */
> !   unsigned used : 1;
>   };
>
>
> --- 180,186 ----
>   struct GTY(()) var_ann_d {
>     /* Nonzero if this variable was used after SSA optimizations were
>        applied.  We set this when translating out of SSA form.  */
> !   unsigned donotuse : 1;
>   };
>
>
> *************** extern enum move_pos movement_possibilit
> *** 741,747 ****
>   char *get_lsm_tmp_name (tree, unsigned);
>
>   /* In tree-flow-inline.h  */
> - static inline void set_is_used (tree);
>   static inline bool unmodifiable_var_p (const_tree);
>   static inline bool ref_contains_array_ref (const_tree);
>
> --- 741,746 ----
> Index: gcc/tree-nrv.c
> ===================================================================
> *** gcc.orig/tree-nrv.c 2012-08-01 15:58:33.000000000 +0200
> --- gcc/tree-nrv.c      2012-08-01 16:00:42.000000000 +0200
> *************** tree_nrv (void)
> *** 261,268 ****
>     SET_DECL_VALUE_EXPR (found, result);
>     DECL_HAS_VALUE_EXPR_P (found) = 1;
>
> -   /* FOUND is no longer used.  Ensure it gets removed.  */
> -   clear_is_used (found);
>     return 0;
>   }
>
> --- 261,266 ----
> Index: gcc/tree-ssa-live.c
> ===================================================================
> *** gcc.orig/tree-ssa-live.c    2012-08-01 15:59:35.000000000 +0200
> --- gcc/tree-ssa-live.c 2012-08-01 16:00:42.000000000 +0200
> *************** partition_view_bitmap (var_map map, bitm
> *** 329,334 ****
> --- 329,352 ----
>   }
>
>
> + static bitmap usedvars;
> +
> + /* Mark VAR as used, so that it'll be preserved during rtl expansion.  */
> +
> + static inline void
> + set_is_used (tree var)
> + {
> +   bitmap_set_bit (usedvars, DECL_UID (var));
> + }
> +
> + /* Return true if VAR is marked as used.  */
> +
> + static inline bool
> + is_used_p (tree var)
> + {
> +   return bitmap_bit_p (usedvars, DECL_UID (var));
> + }
> +
>   static inline void mark_all_vars_used (tree *, void *data);
>
>   /* Helper function for mark_all_vars_used, called via walk_tree.  */
> *************** dump_scope_block (FILE *file, int indent
> *** 623,636 ****
>     fprintf (file, " \n");
>     for (var = BLOCK_VARS (scope); var; var = DECL_CHAIN (var))
>       {
> -       bool used = false;
> -
> -       if (var_ann (var))
> -       used = is_used_p (var);
> -
>         fprintf (file, "%*s", indent, "");
>         print_generic_decl (file, var, flags);
> !       fprintf (file, "%s\n", used ? "" : " (unused)");
>       }
>     for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (scope); i++)
>       {
> --- 641,649 ----
>     fprintf (file, " \n");
>     for (var = BLOCK_VARS (scope); var; var = DECL_CHAIN (var))
>       {
>         fprintf (file, "%*s", indent, "");
>         print_generic_decl (file, var, flags);
> !       fprintf (file, "\n");
>       }
>     for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (scope); i++)
>       {
> *************** remove_unused_locals (void)
> *** 695,703 ****
>
>     mark_scope_block_unused (DECL_INITIAL (current_function_decl));
>
> !   /* Assume all locals are unused.  */
> !   FOR_EACH_REFERENCED_VAR (cfun, t, rvi)
> !     clear_is_used (t);
>
>     /* Assume all globals in local decls are unused.  */
>     global_unused_vars = BITMAP_ALLOC (NULL);
> --- 708,714 ----
>
>     mark_scope_block_unused (DECL_INITIAL (current_function_decl));
>
> !   usedvars = BITMAP_ALLOC (NULL);
>
>     /* Assume all globals in local decls are unused.  */
>     global_unused_vars = BITMAP_ALLOC (NULL);
> *************** remove_unused_locals (void)
> *** 850,855 ****
> --- 861,867 ----
>                                global_unused_vars);
>
>     BITMAP_FREE (global_unused_vars);
> +   BITMAP_FREE (usedvars);
>
>     if (dump_file && (dump_flags & TDF_DETAILS))
>       {

Reply via email to