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]

[3.4 PATCH] doloop loop unrolling regression fix


This patch is intended for GCC 3.4. It enables the GCC 3.4 new
unroller to work with loops optimized by the doloop optimization
(this is a frequent case on PowerPC).
It corrects the performance regression seen for the GCC 3.4 on PowerPC
platforms for the option -funroll-loops (the option 
-fbranch-count-reg that enables the doloop optimization is by 
default enabled).

For the option -funroll-loops (-fbranch-count-reg by 
default enabled), the patch gains more then 4% improvement 
overall CFSPEC2000 (f77, c) on Power4 with 3 benchmarks 
showing around 10% improvement (wupise, swim, art). 
For overall CINTSPEC2000 no significant changes.

Testing (bootstrapping + regression tests) was done on Power4, x86 
and IA 64. Bootstrapping was done by adding -funroll-loops to -O2 
level of optimization (as our changes affect the unrolling). 
Regression test passed successfully.
On Power4, the patch has been tested on SPECPU2000 
benchmark and no regression.
On IPA the applications Blitz++ and FTensor were compiled and run with 
-funroll-loops and no regressions.

Mircea Namolaru

2004-02-15  Mircea Namolaru  <namolaru@il.ibm.com>

        * cfgloop.h (get_var_set_from_bct, is_bct_cond): Declaration of 
new
        functions.
        * cfgloopanal.c: Include loop.h.
        (get_var_set_from_bct, is_bct_cond): New functions.
        (blocks_single_set_registers, count_loop_iterations, 
simple_increment):
        Handle branch and count jumps.
        * doloop.c (doloop_condition_get): Export.
        * loop-init.c (fixup_loop_exit_succesor): New function.
        (loop_optimizer_finalize): Handle loops ending with branch and 
count
        jumps.
        * loop-unroll.c: Include toplev.h
        (discard_increment, expand_bct): New functions.
        (peel_loop_completely,
        unroll_loop_constant_iterations, unroll_loop_runtime_iterations):
        Handle the removal of branch and count jumps.
        * loop.h (doloop_condition_get): Declare.



Attachment: diff34
Description: Binary data


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