This is the mail archive of the 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][RFC] Remove RTL loop unswitching


On Tue, 15 Apr 2014 11:26:29 +0200 (CEST), Richard Biener <> wrote:
> This removes RTL loop unswitching

> 2014-04-15  Richard Biener  <>
> 	* (OBJS): Remove loop-unswitch.o.
> 	* loop-unswitch.c: Delete.
> 	* tree-pass.h (make_pass_rtl_unswitch): Remove.
> 	* passes.def (pass_rtl_unswitch): Likewise.
> 	* loop-init.c (gate_rtl_unswitch): Likewise.
> 	(rtl_unswitch): Likewise.
> 	(pass_data_rtl_unswitch): Likewise.
> 	(pass_rtl_unswitch): Likewise.
> 	(make_pass_rtl_unswitch): Likewise.
> 	* rtl.h (reversed_condition): Likewise.
> 	(compare_and_jump_seq): Likewise.
> 	* loop-iv.c (reversed_condition): Move here from loop-unswitch.c
> 	and make static.
> 	* loop-unroll.c (compare_and_jump_seq): Likewise.

I found some more; OK to commit?  Is a non-bootstrap build enough for
this, or is a full bootstrap build and test needed?

commit 8a703b1e7adc6001f665a12f93601382e3eea806
Author: Thomas Schwinge <>
Date:   Wed May 7 13:01:47 2014 +0200

    More gcc/loop-unswitch.c cleanup.
    	* cfgloop.h (unswitch_loops): Remove.
    	* doc/passes.texi: Remove references to loop-unswitch.c
    	* timevar.def (TV_LOOP_UNSWITCH): Remove.

diff --git gcc/cfgloop.h gcc/cfgloop.h
index ab8b809..62a656a 100644
--- gcc/cfgloop.h
+++ gcc/cfgloop.h
@@ -711,8 +711,6 @@ extern void loop_optimizer_init (unsigned);
 extern void loop_optimizer_finalize (void);
 /* Optimization passes.  */
-extern void unswitch_loops (void);
   UAP_PEEL = 1,		/* Enables loop peeling.  */
diff --git gcc/doc/passes.texi gcc/doc/passes.texi
index 2727b2c..fb064db 100644
--- gcc/doc/passes.texi
+++ gcc/doc/passes.texi
@@ -474,10 +474,7 @@ merging and induction variable elimination.  The pass is implemented in
 Loop unswitching.  This pass moves the conditional jumps that are invariant
 out of the loops.  To achieve this, a duplicate of the loop is created for
 each possible outcome of conditional jump(s).  The pass is implemented in
-@file{tree-ssa-loop-unswitch.c}.  This pass should eventually replace the
-RTL level loop unswitching in @file{loop-unswitch.c}, but currently
-the RTL level pass is not completely redundant yet due to deficiencies
-in tree level alias analysis.
 The optimizations also use various utility functions contained in
 @file{tree-ssa-loop-manip.c}, @file{cfgloop.c}, @file{cfgloopanal.c} and
@@ -793,8 +790,8 @@ The source files @file{cfgloopanal.c} and @file{cfgloopmanip.c} contain
 generic loop analysis and manipulation code.  Initialization and finalization
 of loop structures is handled by @file{loop-init.c}.
 A loop invariant motion pass is implemented in @file{loop-invariant.c}.
-Basic block level optimizations---unrolling, peeling and unswitching loops---
-are implemented in @file{loop-unswitch.c} and @file{loop-unroll.c}.
+Basic block level optimizations---unrolling, and peeling loops---
+are implemented in @file{loop-unroll.c}.
 Replacing of the exit condition of loops by special machine-dependent
 instructions is handled by @file{loop-doloop.c}.
diff --git gcc/timevar.def gcc/timevar.def
index 9faf98b..2db1943 100644
--- gcc/timevar.def
+++ gcc/timevar.def
@@ -207,7 +207,6 @@ DEFTIMEVAR (TV_DSE2                  , "dead store elim2")
 DEFTIMEVAR (TV_LOOP                  , "loop analysis")
 DEFTIMEVAR (TV_LOOP_INIT	     , "loop init")
 DEFTIMEVAR (TV_LOOP_MOVE_INVARIANTS  , "loop invariant motion")
-DEFTIMEVAR (TV_LOOP_UNSWITCH         , "loop unswitching")
 DEFTIMEVAR (TV_LOOP_UNROLL           , "loop unrolling")
 DEFTIMEVAR (TV_LOOP_DOLOOP           , "loop doloop")
 DEFTIMEVAR (TV_LOOP_FINI	     , "loop fini")


Attachment: pgponAyNHYLXP.pgp
Description: PGP signature

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