Bug 55283

Summary: EON performance regression at -O2 due to loop unrolling changes
Product: gcc Reporter: Jan Hubicka <hubicka>
Component: middle-endAssignee: Not yet assigned to anyone <unassigned>
Status: UNCONFIRMED ---    
Severity: normal Keywords: missed-optimization
Priority: P3    
Version: 4.8.0   
Target Milestone: ---   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed:

Description Jan Hubicka 2012-11-12 10:44:02 UTC
EON regressed by about 20% at -O2 due to

2012-11-06  Jan Hubicka  <jh@suse.cz>

        * cfgloopanal.c (get_loop_hot_path): New function.
        * tree-ssa-lop-ivcanon.c (struct loop_size): Add CONSTANT_IV,
        NUM_NON_PURE_CALLS_ON_HOT_PATH, NUM_PURE_CALLS_ON_HOT_PATH,
        NUM_BRANCHES_ON_HOT_PATH.
        (tree_estimate_loop_size): Compute the new values.
        (try_unroll_loop_completely): Disable unrolling of loops with only
        calls or too many branches.
        (tree_unroll_loops_completely): Deal also with outer loops of hot loops.
        * cfgloop.h (get_loop_hot_path): Declare.
        * params.def (PARAM_MAX_PEEL_BRANCHES): New parameters.
        * invoke.texi (max-peel-branches): Document.

This seems to be bad cost model on array accesses because we unroll only for size at -O2