Dne 2018-12-20 15:36, Martin Jambor napsal:
Hi,

Ping:

On Fri, Dec 07 2018, Martin Jambor wrote:
Hi,

the patch below adds alias analysis (AA) walk limiting to all
walk_alias_vdefs calls invoked as IPA-CP and ipa-fnsummary summary
generation.  Eventually the two should be unified into just one phase
but that is something for stage1.  This patch gives them both
independent budgets, both initialized to
PARAM_VALUE(PARAM_IPA_MAX_AA_STEPS) - as a consequence, the real limit
is twice the given value.

I'm not sure whether the ipa-prop AA limiting was written before
walk_alias_vdefs had its limit parameter added, but I changed the code
to use it and also modified the budget counter to go from the parameter
value down to zero as opposed to incrementing it and checking manually
before each call into AA.  I always pass the current budget + 1 to
walk_alias_vdefs limit so that I do not have to check whether it is zero
which means no limiting at all, and also so that loads from a parameter
right at the top of a function get detected as unmodified even if some
previous analysis already used up all the budget.

As far as the testcase for PR 87615 is concerned, this patch makes the
compile time go down from approx. 340 seconds to about 160 seconds on my
desktop and IPA-CP gets zeros in -ftime-reportbut we still do not reach
the 40 second compile time we get with -fno-ipa-cp -fno-inline.

Bootstrapped and tested on x86_64-linux.  OK for trunk?

Thanks,

Martin


2018-12-06  Martin Jambor  <mjam...@suse.cz>

        PR ipa/87615
        * ipa-prop.h (struct ipa_func_body_info): Replaced field aa_walked
        with aa_walk_budget.
        * cgraph.h (ipa_polymorphic_call_context::get_dynamic_type): Add
        aa_walk_budget_p parameter.
        * ipa-fnsummary.c (unmodified_parm_1): New parameter fbi.  Limit AA
        walk.  Updated all callers.
        (unmodified_parm): New parameter fbi, pass it to unmodified_parm_1.
        (eliminated_by_inlining_prob): New parameter fbi, pass it on to
        unmodified_parm.
        (will_be_nonconstant_expr_predicate): New parameter fbi, removed
        parameter info.  Extract info from fbi.  Pass fbi to recursive calls
        and to unmodified_parm.
        (phi_result_unknown_predicate): New parameter fbi, removed parameter
        info, updated call to will_be_nonconstant_expr_predicate.
        (param_change_prob): New parameter fbi, limit AA walking.
        (analyze_function_body): Initialize aa_walk_budget in fbi.  Update
        calls to various above functions.
        * ipa-polymorphic-call.c (get_dynamic_type): Add aa_walk_budget_p
        parameter.  Use it to limit AA walking.
        * ipa-prop.c (detect_type_change_from_memory_writes): New parameter
        fbi, limit AA walk.
        (detect_type_change): New parameter fbi, pass it on to
        detect_type_change_from_memory_writes.
        (detect_type_change_ssa): Likewise.
        (aa_overwalked): Removed.
        (parm_preserved_before_stmt_p): Assume fbi is never NULL, stream line
        accordingly, adjust to the neew AA limiting scheme.
        (parm_ref_data_preserved_p): Likewise.
        (ipa_compute_jump_functions_for_edge): Adjust call to
        get_dynamic_type.
        (ipa_analyze_call_uses): Likewise.
        (ipa_analyze_virtual_call_uses): Pass fbi to detect_type_change_ssa.
        (ipa_analyze_node): Initialize aa_walk_budget.
        (ipcp_transform_function): Likewise.
        * tree-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt): Update call
        to get_dynamic_type.

OK

--- a/gcc/ipa-fnsummary.c
+++ b/gcc/ipa-fnsummary.c
@@ -941,7 +941,8 @@ mark_modified (ao_ref *ao ATTRIBUTE_UNUSED, tree
vdef ATTRIBUTE_UNUSED,
    PARM_DECL) will be stored to *SIZE_P in that case too.  */

I guess to make coding standards happy, you should document new parametrs.
Honza

Reply via email to