summaryrefslogtreecommitdiff
path: root/gcc/loop-init.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/loop-init.c')
-rw-r--r--gcc/loop-init.c58
1 files changed, 42 insertions, 16 deletions
diff --git a/gcc/loop-init.c b/gcc/loop-init.c
index 0e0b0cf4c88..517474a545b 100644
--- a/gcc/loop-init.c
+++ b/gcc/loop-init.c
@@ -171,7 +171,7 @@ rtl_loop_init (void)
struct tree_opt_pass pass_rtl_loop_init =
{
- "loopinit", /* name */
+ "loop2_init", /* name */
NULL, /* gate */
rtl_loop_init, /* execute */
NULL, /* sub */
@@ -215,7 +215,7 @@ rtl_loop_done (void)
struct tree_opt_pass pass_rtl_loop_done =
{
- "loopdone", /* name */
+ "loop2_done", /* name */
NULL, /* gate */
rtl_loop_done, /* execute */
NULL, /* sub */
@@ -232,17 +232,23 @@ struct tree_opt_pass pass_rtl_loop_done =
/* Loop invariant code motion. */
+static bool
+gate_rtl_move_loop_invariants (void)
+{
+ return flag_move_loop_invariants;
+}
+
static void
rtl_move_loop_invariants (void)
{
- if (current_loops && flag_move_loop_invariants)
+ if (current_loops)
move_loop_invariants (current_loops);
}
struct tree_opt_pass pass_rtl_move_loop_invariants =
{
- "loop_invariant", /* name */
- NULL, /* gate */
+ "loop2_invariant", /* name */
+ gate_rtl_move_loop_invariants, /* gate */
rtl_move_loop_invariants, /* execute */
NULL, /* sub */
NULL, /* next */
@@ -258,17 +264,23 @@ struct tree_opt_pass pass_rtl_move_loop_invariants =
/* Loop unswitching for RTL. */
+static bool
+gate_rtl_unswitch (void)
+{
+ return flag_unswitch_loops;
+}
+
static void
rtl_unswitch (void)
{
- if (current_loops && flag_unswitch_loops)
+ if (current_loops)
unswitch_loops (current_loops);
}
struct tree_opt_pass pass_rtl_unswitch =
{
- "loop_unswitch", /* name */
- NULL, /* gate */
+ "loop2_unswitch", /* name */
+ gate_rtl_unswitch, /* gate */
rtl_unswitch, /* execute */
NULL, /* sub */
NULL, /* next */
@@ -284,11 +296,16 @@ struct tree_opt_pass pass_rtl_unswitch =
/* Loop unswitching for RTL. */
+static bool
+gate_rtl_unroll_and_peel_loops (void)
+{
+ return (flag_peel_loops || flag_unroll_loops || flag_unroll_all_loops);
+}
+
static void
rtl_unroll_and_peel_loops (void)
{
- if (current_loops
- && (flag_peel_loops || flag_unroll_loops || flag_unroll_all_loops))
+ if (current_loops)
{
int flags = 0;
@@ -305,8 +322,8 @@ rtl_unroll_and_peel_loops (void)
struct tree_opt_pass pass_rtl_unroll_and_peel_loops =
{
- "loop_unroll", /* name */
- NULL, /* gate */
+ "loop2_unroll", /* name */
+ gate_rtl_unroll_and_peel_loops, /* gate */
rtl_unroll_and_peel_loops, /* execute */
NULL, /* sub */
NULL, /* next */
@@ -322,20 +339,29 @@ struct tree_opt_pass pass_rtl_unroll_and_peel_loops =
/* The doloop optimization. */
+static bool
+gate_rtl_doloop (void)
+{
+#ifdef HAVE_doloop_end
+ return (flag_branch_on_count_reg && HAVE_doloop_end);
+#else
+ return 0;
+#endif
+}
+
static void
rtl_doloop (void)
{
#ifdef HAVE_doloop_end
- if (current_loops
- && (flag_branch_on_count_reg && HAVE_doloop_end))
+ if (current_loops)
doloop_optimize_loops (current_loops);
#endif
}
struct tree_opt_pass pass_rtl_doloop =
{
- "loop_doloop", /* name */
- NULL, /* gate */
+ "loop2_doloop", /* name */
+ gate_rtl_doloop, /* gate */
rtl_doloop, /* execute */
NULL, /* sub */
NULL, /* next */