diff options
author | Jakub Jelinek <jakub@redhat.com> | 2014-01-29 12:02:46 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2014-01-29 12:02:46 +0100 |
commit | 09b22f48d435d158761a02117facec4daa7395fb (patch) | |
tree | 4b721b57c74c1349afc462b869e17ae0bdb8fa90 /gcc/tree-cfg.h | |
parent | 42eb8bd17982621ad29ec491053851fd2d0d740e (diff) | |
download | gcc-09b22f48d435d158761a02117facec4daa7395fb.zip gcc-09b22f48d435d158761a02117facec4daa7395fb.tar.gz gcc-09b22f48d435d158761a02117facec4daa7395fb.tar.bz2 |
re PR middle-end/59917 (ICE in calc_dfs_tree, at dominance.c:401)
PR middle-end/59917
PR tree-optimization/59920
* tree.c (build_common_builtin_nodes): Remove
__builtin_setjmp_dispatcher initialization.
* omp-low.h (make_gimple_omp_edges): Add a new int * argument.
* profile.c (branch_prob): Use gsi_start_nondebug_after_labels_bb
instead of gsi_after_labels + manually skipping debug stmts.
Don't ignore bbs with BUILT_IN_SETJMP_DISPATCHER, instead
ignore bbs with IFN_ABNORMAL_DISPATCHER.
* tree-inline.c (copy_edges_for_bb): Remove
can_make_abnormal_goto argument, instead add abnormal_goto_dest
argument. Ignore computed_goto_p stmts. Don't call
make_abnormal_goto_edges. If a call might need abnormal edges
for non-local gotos, see if it already has an edge to
IFN_ABNORMAL_DISPATCHER or if it is IFN_ABNORMAL_DISPATCHER
with true argument, don't do anything then, otherwise add
EDGE_ABNORMAL from the call's bb to abnormal_goto_dest.
(copy_cfg_body): Compute abnormal_goto_dest, adjust copy_edges_for_bb
caller.
* gimple-low.c (struct lower_data): Remove calls_builtin_setjmp.
(lower_function_body): Don't emit __builtin_setjmp_dispatcher.
(lower_stmt): Don't set data->calls_builtin_setjmp.
(lower_builtin_setjmp): Adjust comment.
* builtins.def (BUILT_IN_SETJMP_DISPATCHER): Remove.
* tree-cfg.c (found_computed_goto): Remove.
(factor_computed_gotos): Remove.
(make_goto_expr_edges): Return bool, true for computed gotos.
Don't call make_abnormal_goto_edges.
(build_gimple_cfg): Don't set found_computed_goto, don't call
factor_computed_gotos.
(computed_goto_p): No longer static.
(make_blocks): Don't set found_computed_goto.
(get_abnormal_succ_dispatcher, handle_abnormal_edges): New functions.
(make_edges): If make_goto_expr_edges returns true, push bb
into ab_edge_goto vector, for stmt_can_make_abnormal_goto calls
instead of calling make_abnormal_goto_edges push bb into ab_edge_call
vector. Record mapping between bbs and OpenMP regions if there
are any, adjust make_gimple_omp_edges caller. Call
handle_abnormal_edges.
(make_abnormal_goto_edges): Remove.
* tree-cfg.h (make_abnormal_goto_edges): Remove.
(computed_goto_p, get_abnormal_succ_dispatcher): New prototypes.
* internal-fn.c (expand_ABNORMAL_DISPATCHER): New function.
* builtins.c (expand_builtin): Don't handle
BUILT_IN_SETJMP_DISPATCHER.
* internal-fn.def (ABNORMAL_DISPATCHER): New.
* omp-low.c (make_gimple_omp_edges): Add region_idx argument, when
filling *region also set *region_idx to (*region)->entry->index.
* gcc.dg/pr59920-1.c: New test.
* gcc.dg/pr59920-2.c: New test.
* gcc.dg/pr59920-3.c: New test.
* c-c++-common/gomp/pr59917-1.c: New test.
* c-c++-common/gomp/pr59917-2.c: New test.
From-SVN: r207231
Diffstat (limited to 'gcc/tree-cfg.h')
-rw-r--r-- | gcc/tree-cfg.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-cfg.h b/gcc/tree-cfg.h index babbd2d..a115df5 100644 --- a/gcc/tree-cfg.h +++ b/gcc/tree-cfg.h @@ -31,7 +31,6 @@ extern void start_recording_case_labels (void); extern void end_recording_case_labels (void); extern basic_block label_to_block_fn (struct function *, tree); #define label_to_block(t) (label_to_block_fn (cfun, t)) -extern void make_abnormal_goto_edges (basic_block, bool); extern void cleanup_dead_labels (void); extern void group_case_labels_stmt (gimple); extern void group_case_labels (void); @@ -46,7 +45,9 @@ extern void gimple_debug_cfg (int); extern void gimple_dump_cfg (FILE *, int); extern void dump_cfg_stats (FILE *); extern void debug_cfg_stats (void); +extern bool computed_goto_p (gimple); extern bool stmt_can_make_abnormal_goto (gimple); +extern basic_block get_abnormal_succ_dispatcher (basic_block); extern bool is_ctrl_stmt (gimple); extern bool is_ctrl_altering_stmt (gimple); extern bool simple_goto_p (gimple); |