From 82cea5e8bf532fda4f25f9a972154900978e3412 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 2 Jul 2019 09:44:47 +0000 Subject: [PATCH] cfgexpand.c (pass_expand::execute): Deal specially with instructions to be inserted on single successor edge of the... * cfgexpand.c (pass_expand::execute): Deal specially with instructions to be inserted on single successor edge of the entry block. Then call commit_edge_insertions instead of inserting the instructions manually. * cfgrtl.c (commit_edge_insertions): Do not verify flow info during RTL expansion. From-SVN: r272929 --- gcc/ChangeLog | 8 ++++++++ gcc/cfgexpand.c | 40 +++++++++++++++------------------------- gcc/cfgrtl.c | 3 ++- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a19368c348b..c206ab6e839 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2019-07-02 Eric Botcazou + + * cfgexpand.c (pass_expand::execute): Deal specially with instructions + to be inserted on single successor edge of the entry block. Then call + commit_edge_insertions instead of inserting the instructions manually. + * cfgrtl.c (commit_edge_insertions): Do not verify flow info during + RTL expansion. + 2019-07-02 Richard Biener * tree-core.h (enum tree_index): Add TI_CHREC_DONT_KNOW and diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 4e1ee7096e0..1e84d2c4a4e 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -6576,37 +6576,27 @@ pass_expand::execute (function *fun) split edges which edge insertions might do. */ rebuild_jump_labels (get_insns ()); - FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (fun), - EXIT_BLOCK_PTR_FOR_FN (fun), next_bb) + /* If we have a single successor to the entry block, put the pending insns + after parm birth, but before NOTE_INSNS_FUNCTION_BEG. */ + if (single_succ_p (ENTRY_BLOCK_PTR_FOR_FN (fun))) { - edge e; - edge_iterator ei; - for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); ) + edge e = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (fun)); + if (e->insns.r) { - if (e->insns.r) - { - rebuild_jump_labels_chain (e->insns.r); - /* Put insns after parm birth, but before - NOTE_INSNS_FUNCTION_BEG. */ - if (e->src == ENTRY_BLOCK_PTR_FOR_FN (fun) - && single_succ_p (ENTRY_BLOCK_PTR_FOR_FN (fun))) - { - rtx_insn *insns = e->insns.r; - e->insns.r = NULL; - if (NOTE_P (parm_birth_insn) - && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG) - emit_insn_before_noloc (insns, parm_birth_insn, e->dest); - else - emit_insn_after_noloc (insns, parm_birth_insn, e->dest); - } - else - commit_one_edge_insertion (e); - } + rtx_insn *insns = e->insns.r; + e->insns.r = NULL; + rebuild_jump_labels_chain (insns); + if (NOTE_P (parm_birth_insn) + && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG) + emit_insn_before_noloc (insns, parm_birth_insn, e->dest); else - ei_next (&ei); + emit_insn_after_noloc (insns, parm_birth_insn, e->dest); } } + /* Otherwise, as well as for other edges, take the usual way. */ + commit_edge_insertions (); + /* We're done expanding trees to RTL. */ currently_expanding_to_rtl = 0; diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index a6e4c1bf572..fb0350daa97 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -2105,7 +2105,8 @@ commit_edge_insertions (void) which will be done by fixup_partitions. */ fixup_partitions (); - checking_verify_flow_info (); + if (!currently_expanding_to_rtl) + checking_verify_flow_info (); FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb) -- 2.30.2