https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63577

Jeffrey A. Law <law at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at redhat dot com
            Summary|[4.9/5/6 Regression]: Huge  |[4.9/5 Regression]: Huge
                   |compile time and memory     |compile time and memory
                   |usage with -O and not -fPIC |usage with -O and not -fPIC

--- Comment #14 from Jeffrey A. Law <law at redhat dot com> ---
So two changes are responsible for huge improvements here.

First is Richi's fix for 63677:

   2014-11-20   Richard Biener  <rguent...@suse.de>

        PR tree-optimization/63677
        * tree-ssa-dom.c: Include gimplify.h for unshare_expr.
        (avail_exprs_stack): Make a vector of pairs.
        (struct hash_expr_elt): Replace stmt member with vop member.
        (expr_elt_hasher::equal): Simplify.
        (initialize_hash_element): Adjust.
        (initialize_hash_element_from_expr): Likewise.
        (dom_opt_dom_walker::thread_across_edge): Likewise.
        (record_cond): Likewise.
        (dom_opt_dom_walker::before_dom_children): Likewise.
        (print_expr_hash_elt): Likewise.
        (remove_local_expressions_from_table): Restore previous state
        if requested.
        (record_equivalences_from_stmt): Record &x + CST as constant
        &MEM[&x, CST] for further propagation.
        (vuse_eq): New function.
        (lookup_avail_expr): For loads use the alias oracle to see
        whether a candidate from the expr hash is usable.
        (avail_expr_hash): Do not hash VUSEs.

        * gcc.dg/tree-ssa/ssa-dom-cse-2.c: New testcase.
        * gcc.dg/tree-ssa/ssa-dom-cse-3.c: Likewise.

Which reduces the memory consumption by ~.5G, presumably by simplifying things
in the tree optimizers, long before we get into the RTL bits.

Second is the introduction of the early DSE pass by Jan which removes another
1/2G of memory and the remaining time of significance in combine.

Author: hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Wed Apr 22 01:32:14 2015 +0000

        PR ipa/65076
        * passes.def (early_optimizations): Add pass_dse.

        * g++.dg/tree-ssa/pr61034.C: Update template.
        * g++.dg/warn/Warray-bounds.C: Harden for DSE.
        * gcc.dg/Warray-bounds-11.c: Likewise.
        * gcc.dg/Warray-bounds.c: Likewise.



I'm going to declare this regression fixed for gcc-6.  Given the timing of the
two patches which helped here, it's a good bet that gcc-4.9 is, of course, bad
and that gcc-5 improved, but was still bad.

Reply via email to