This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix remove_unused_locals (PR tree-optimization/33645)


On 10/11/07, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> As the first testcase below shows, remove_unused_locals can purge
> global (static) vars from unexpanded_var_list, even when they are actually
> used by some used static var initializer.  The testcase doesn't fail
> with -funit-at-a-time, because build_cgraph_edges already added the vars
> into varpool and so even when they are not present in unexpanded_var_list,
> they will be emitted if they are actually used.
>
> Simply not purging is_global_var vars from unexpanded_var_list would cause
> regression on attached pr33645-3.c, so this patch calls mark_all_vars_used
> on DECL_INITIAL of in unexpanded_var_list present is_global_vars that are
> known to be used (and does that recursively for newly such discovered vars).
>
> Regtested on x86_64-linux, ok for trunk?

This is ok.

Thanks,
Richard.

> 2007-10-11  Jakub Jelinek  <jakub@redhat.com>
>
>         PR tree-optimization/33645
>         * tree-ssa-live.c (mark_all_vars_used): Add data argument,
>         pass it to walk_tree.
>         (mark_all_vars_used_1): Pass data through to mark_all_vars_used.
>         When calling set_is_used on a VAR_DECL, if data is not NULL and
>         its DECL_UID is in the bitmap, call mark_all_vars_used on its
>         DECL_INITIAL after clearing the bit in bitmap.
>         (remove_unused_locals): Adjust mark_all_vars_used callers.
>         Instead of removing unused global vars from unexpanded_var_list
>         immediately record them in bitmap, call mark_all_vars_used on
>         all used global vars from unexpanded_var_list and only purge
>         global vars that weren't found used even during that step.
>
>         * gcc.dg/pr33645-1.c: New test.
>         * gcc.dg/pr33645-2.c: New test.
>         * gcc.dg/pr33645-3.c: New test.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]