diff options
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index c9d2424..5765316 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -4297,8 +4297,19 @@ tree_duplicate_bb (basic_block bb) { basic_block new_bb; block_stmt_iterator bsi, bsi_tgt; + tree phi; + def_optype defs; + v_may_def_optype v_may_defs; + v_must_def_optype v_must_defs; + unsigned j; new_bb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb); + + for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi)) + { + mark_for_rewrite (PHI_RESULT (phi)); + } + bsi_tgt = bsi_start (new_bb); for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) { @@ -4308,6 +4319,21 @@ tree_duplicate_bb (basic_block bb) if (TREE_CODE (stmt) == LABEL_EXPR) continue; + /* Record the definitions. */ + get_stmt_operands (stmt); + + defs = STMT_DEF_OPS (stmt); + for (j = 0; j < NUM_DEFS (defs); j++) + mark_for_rewrite (DEF_OP (defs, j)); + + v_may_defs = STMT_V_MAY_DEF_OPS (stmt); + for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++) + mark_for_rewrite (V_MAY_DEF_RESULT (v_may_defs, j)); + + v_must_defs = STMT_V_MUST_DEF_OPS (stmt); + for (j = 0; j < NUM_V_MUST_DEFS (v_must_defs); j++) + mark_for_rewrite (V_MUST_DEF_OP (v_must_defs, j)); + copy = unshare_expr (stmt); /* Copy also the virtual operands. */ |