* Fix PR tree-optimization/46494
@ 2011-02-14 11:04 Eric Botcazou
2011-02-14 12:17 ` Richard Guenther
0 siblings, 1 reply; 2+ messages in thread
From: Eric Botcazou @ 2011-02-14 11:04 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1553 bytes --]
Hi,
this fixes an assertion in verify_flow_info with yet another fancy combination
of options. As diagnosed by Jakub, loop_optimizer_finalize prematurely calls
verify_flow_info before the TODO_cleanup_cfg of VRP.
The patch removes the call to verify_flow_info from loop_optimizer_finalize
and instead adds TODO_verify_flow to the appropriate passes. The rationale
is that some passes just do:
loop_optimizer_init
/* some read-only analysis */
loop_optimizer_finalize
so returning a TODO from loop_optimizer_finalize seems overkill; for them, the
patch doesn't add the TODO_verify_flow either; this gets rid of the ia64 hack
in the process because all involved passes are run before RA now.
Tested on i586-suse-linux, OK for the mainline?
2011-02-14 Eric Botcazou <ebotcazou@adacore.com>
PR tree-optimization/46494
* loop-unroll.c (split_edge_and_insert): Adjust comment.
* loop-init.c (loop_optimizer_finalize): Do not call verify_flow_info.
(pass_rtl_loop_done): Add TODO_verify_flow.
* fwprop.c (pass_rtl_fwprop): Likewise.
* modulo-sched.c (pass_sms): Likewise.
* tree-ssa-dom.c (pass_dominator): Likewise.
* tree-ssa-loop-ch.c (pass_ch): Likewise.
* tree-ssa-loop.c (pass_complete_unrolli): Likewise.
(pass_tree_loop_done): Likewise.
* tree-ssa-pre.c (execute_pre): Likewise.
* tree-ssa-reassoc.c (pass_reassoc): Likewise.
* tree-ssa-sink.c (pass_sink_code): Likewise.
* tree-vrp.c (pass_vrp): Likewise.
2011-02-14 Eric Botcazou <ebotcazou@adacore.com>
* gcc.dg/pr46494.c: New test.
--
Eric Botcazou
[-- Attachment #2: pr46494.c --]
[-- Type: text/x-csrc, Size: 189 bytes --]
/* { dg-do compile }
/* { dg-options "-O -fno-tree-ccp -fno-tree-fre -ftree-vrp" } */
extern void foo (void) __attribute__((noreturn));
void g (void)
{
void (*f) (void) = foo;
f ();
}
[-- Attachment #3: pr46494.diff --]
[-- Type: text/x-diff, Size: 6944 bytes --]
Index: tree-vrp.c
===================================================================
--- tree-vrp.c (revision 169914)
+++ tree-vrp.c (working copy)
@@ -7764,9 +7764,10 @@ struct gimple_opt_pass pass_vrp =
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_cleanup_cfg
- | TODO_ggc_collect
+ | TODO_update_ssa
| TODO_verify_ssa
+ | TODO_verify_flow
| TODO_dump_func
- | TODO_update_ssa /* todo_flags_finish */
+ | TODO_ggc_collect /* todo_flags_finish */
}
};
Index: fwprop.c
===================================================================
--- fwprop.c (revision 169914)
+++ fwprop.c (working copy)
@@ -1471,8 +1471,10 @@ struct rtl_opt_pass pass_rtl_fwprop =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_df_finish | TODO_verify_rtl_sharing |
- TODO_dump_func /* todo_flags_finish */
+ TODO_df_finish
+ | TODO_verify_flow
+ | TODO_verify_rtl_sharing
+ | TODO_dump_func /* todo_flags_finish */
}
};
Index: tree-ssa-loop-ch.c
===================================================================
--- tree-ssa-loop-ch.c (revision 169914)
+++ tree-ssa-loop-ch.c (working copy)
@@ -276,7 +276,9 @@ struct gimple_opt_pass pass_ch =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_cleanup_cfg | TODO_dump_func
- | TODO_verify_ssa /* todo_flags_finish */
+ TODO_cleanup_cfg
+ | TODO_verify_ssa
+ | TODO_verify_flow
+ | TODO_dump_func /* todo_flags_finish */
}
};
Index: modulo-sched.c
===================================================================
--- modulo-sched.c (revision 169914)
+++ modulo-sched.c (working copy)
@@ -2897,9 +2897,11 @@ struct rtl_opt_pass pass_sms =
0, /* properties_provided */
0, /* properties_destroyed */
TODO_dump_func, /* todo_flags_start */
- TODO_df_finish | TODO_verify_rtl_sharing |
- TODO_dump_func |
- TODO_ggc_collect /* todo_flags_finish */
+ TODO_df_finish
+ | TODO_verify_flow
+ | TODO_verify_rtl_sharing
+ | TODO_dump_func
+ | TODO_ggc_collect /* todo_flags_finish */
}
};
Index: tree-ssa-dom.c
===================================================================
--- tree-ssa-dom.c (revision 169914)
+++ tree-ssa-dom.c (working copy)
@@ -799,10 +799,11 @@ struct gimple_opt_pass pass_dominator =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_dump_func
+ TODO_cleanup_cfg
| TODO_update_ssa
- | TODO_cleanup_cfg
- | TODO_verify_ssa /* todo_flags_finish */
+ | TODO_verify_ssa
+ | TODO_verify_flow
+ | TODO_dump_func /* todo_flags_finish */
}
};
Index: loop-init.c
===================================================================
--- loop-init.c (revision 169914)
+++ loop-init.c (working copy)
@@ -123,14 +123,6 @@ loop_optimizer_finalize (void)
{
bb->loop_father = NULL;
}
-
- /* Checking. */
-#ifdef ENABLE_CHECKING
- /* FIXME: no point to verify flow info after bundling on ia64. Use this
- hack for achieving this. */
- if (!reload_completed)
- verify_flow_info ();
-#endif
}
\f
@@ -235,7 +227,9 @@ struct rtl_opt_pass pass_rtl_loop_done =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_dump_func | TODO_verify_rtl_sharing /* todo_flags_finish */
+ TODO_verify_flow
+ | TODO_verify_rtl_sharing
+ | TODO_dump_func /* todo_flags_finish */
}
};
Index: tree-ssa-sink.c
===================================================================
--- tree-ssa-sink.c (revision 169914)
+++ tree-ssa-sink.c (working copy)
@@ -604,8 +604,9 @@ struct gimple_opt_pass pass_sink_code =
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_update_ssa
+ | TODO_verify_ssa
+ | TODO_verify_flow
| TODO_dump_func
- | TODO_ggc_collect
- | TODO_verify_ssa /* todo_flags_finish */
+ | TODO_ggc_collect /* todo_flags_finish */
}
};
Index: tree-ssa-loop.c
===================================================================
--- tree-ssa-loop.c (revision 169914)
+++ tree-ssa-loop.c (working copy)
@@ -528,7 +528,8 @@ struct gimple_opt_pass pass_complete_unr
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_dump_func
+ TODO_verify_flow
+ | TODO_dump_func
| TODO_ggc_collect /* todo_flags_finish */
}
};
@@ -670,6 +671,8 @@ struct gimple_opt_pass pass_tree_loop_do
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_cleanup_cfg | TODO_dump_func /* todo_flags_finish */
+ TODO_cleanup_cfg
+ | TODO_verify_flow
+ | TODO_dump_func /* todo_flags_finish */
}
};
Index: loop-unroll.c
===================================================================
--- loop-unroll.c (revision 169914)
+++ loop-unroll.c (working copy)
@@ -900,7 +900,7 @@ split_edge_and_insert (edge e, rtx insns
CFG. For this purpose we used to set the BB_SUPERBLOCK flag on BB
and call break_superblocks when going out of cfglayout mode. But it
turns out that this never happens; and that if it does ever happen,
- the verify_flow_info call in loop_optimizer_finalize would fail.
+ the TODO_verify_flow at the end of the RTL loop passes would fail.
There are two reasons why we expected we could have control flow insns
in INSNS. The first is when a comparison has to be done in parts, and
Index: tree-ssa-pre.c
===================================================================
--- tree-ssa-pre.c (revision 169914)
+++ tree-ssa-pre.c (working copy)
@@ -4909,7 +4909,10 @@ execute_pre (bool do_fre)
clear_expression_ids ();
free_scc_vn ();
if (!do_fre)
- remove_dead_inserted_code ();
+ {
+ remove_dead_inserted_code ();
+ todo |= TODO_verify_flow;
+ }
scev_finalize ();
fini_pre (do_fre);
Index: tree-ssa-reassoc.c
===================================================================
--- tree-ssa-reassoc.c (revision 169914)
+++ tree-ssa-reassoc.c (working copy)
@@ -2282,7 +2282,10 @@ struct gimple_opt_pass pass_reassoc =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_dump_func | TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
+ TODO_verify_ssa
+ | TODO_verify_flow
+ | TODO_dump_func
+ | TODO_ggc_collect /* todo_flags_finish */
}
};
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Fix PR tree-optimization/46494
2011-02-14 11:04 Fix PR tree-optimization/46494 Eric Botcazou
@ 2011-02-14 12:17 ` Richard Guenther
0 siblings, 0 replies; 2+ messages in thread
From: Richard Guenther @ 2011-02-14 12:17 UTC (permalink / raw)
To: Eric Botcazou; +Cc: gcc-patches
On Mon, Feb 14, 2011 at 11:36 AM, Eric Botcazou <ebotcazou@adacore.com> wrote:
> Hi,
>
> this fixes an assertion in verify_flow_info with yet another fancy combination
> of options. As diagnosed by Jakub, loop_optimizer_finalize prematurely calls
> verify_flow_info before the TODO_cleanup_cfg of VRP.
>
> The patch removes the call to verify_flow_info from loop_optimizer_finalize
> and instead adds TODO_verify_flow to the appropriate passes. The rationale
> is that some passes just do:
>
> loop_optimizer_init
>
> /* some read-only analysis */
>
> loop_optimizer_finalize
>
> so returning a TODO from loop_optimizer_finalize seems overkill; for them, the
> patch doesn't add the TODO_verify_flow either; this gets rid of the ia64 hack
> in the process because all involved passes are run before RA now.
>
> Tested on i586-suse-linux, OK for the mainline?
Ok.
Thanks,
Richard.
>
> 2011-02-14 Eric Botcazou <ebotcazou@adacore.com>
>
> PR tree-optimization/46494
> * loop-unroll.c (split_edge_and_insert): Adjust comment.
> * loop-init.c (loop_optimizer_finalize): Do not call verify_flow_info.
> (pass_rtl_loop_done): Add TODO_verify_flow.
> * fwprop.c (pass_rtl_fwprop): Likewise.
> * modulo-sched.c (pass_sms): Likewise.
> * tree-ssa-dom.c (pass_dominator): Likewise.
> * tree-ssa-loop-ch.c (pass_ch): Likewise.
> * tree-ssa-loop.c (pass_complete_unrolli): Likewise.
> (pass_tree_loop_done): Likewise.
> * tree-ssa-pre.c (execute_pre): Likewise.
> * tree-ssa-reassoc.c (pass_reassoc): Likewise.
> * tree-ssa-sink.c (pass_sink_code): Likewise.
> * tree-vrp.c (pass_vrp): Likewise.
>
>
> 2011-02-14 Eric Botcazou <ebotcazou@adacore.com>
>
> * gcc.dg/pr46494.c: New test.
>
>
> --
> Eric Botcazou
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-02-14 12:06 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-14 11:04 Fix PR tree-optimization/46494 Eric Botcazou
2011-02-14 12:17 ` Richard Guenther
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).