diff options
author | Richard Biener <rguenther@suse.de> | 2019-03-14 13:25:27 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-03-14 13:25:27 +0000 |
commit | baa09dc5c951213452446689466ad889656b9936 (patch) | |
tree | db95685f90a8eeb45ae9b08911a3d046e8db2389 /gcc/tree-cfg.c | |
parent | 27814aed3462d6bdce3c653e5e66d5e58cf4a5e7 (diff) | |
download | gcc-baa09dc5c951213452446689466ad889656b9936.zip gcc-baa09dc5c951213452446689466ad889656b9936.tar.gz gcc-baa09dc5c951213452446689466ad889656b9936.tar.bz2 |
c-tree.h (enum c_declspec_il): New.
2019-03-14 Richard Biener <rguenther@suse.de>
c/
* c-tree.h (enum c_declspec_il): New.
(struct c_declspecs): Merge gimple_p and rtl_p into declspec_il
enum bitfield.
* c-parser.c (c_parser_declaration_or_fndef): Adjust accordingly.
Pass start pass and declspec_il to c_parser_parse_gimple_body.
(c_parser_declspecs): Adjust.
* gimple-parser.c: Include cfg.h, cfghooks.h, cfganal.h, tree-cfg.h,
gimple-iterator.h, cfgloop.h, tree-phinodes.h, tree-into-ssa.h
and bitmap.h.
(struct gimple_parser): New.
(gimple_parser::push_edge): New method.
(c_parser_gimple_parse_bb_spec): New helper.
(c_parser_parse_gimple_body): Get start pass and IL specification.
Initialize SSA and CFG.
(c_parser_gimple_compound_statement): Handle CFG and SSA build.
Build a gimple_parser parsing state and pass it along.
(c_parser_gimple_statement): Change intermittend __PHI internal
function argument for the edge.
(c_parser_gimple_or_rtl_pass_list): Handle ssa, cfg flags.
(c_parser_gimple_goto_stmt): Record edges to build.
(c_parser_gimple_if_stmt): Likewise.
* gimple-parser.h (c_parser_parse_gimple_body): Adjust.
(c_parser_gimple_or_rtl_pass_list): Likewise.
* gimple-pretty-print.c: Include cfgloop.h.
(dump_gimple_phi): Adjust.
(dump_gimple_bb_header): Dump loop header for GIMPLE.
(pp_cfg_jump): Adjust.
(dump_implicit_edges): Dump fallthru to next block for GIMPLE as well.
* tree-cfg.c (build_gimple_cfg): Remove lower_phi_internal_fn call.
(lower_phi_internal_fn): Remove.
(verify_gimple_call): Remove IFN_PHI special-casing.
(dump_function_to_file): Dump IL state.
* tree-into-ssa.c (rewrite_add_phi_arguments): Revert changes
done to deal with PHI nodes being present in non-SSA state.
* gcc.dg/gimplefe-13.c: Adjust.
* gcc.dg/gimplefe-14.c: Likewise.
* gcc.dg/gimplefe-17.c: Likewise.
* gcc.dg/gimplefe-18.c: Likewise.
* gcc.dg/gimplefe-7.c: Likewise.
* gcc.dg/torture/pr89595.c: Likewise.
* gcc.dg/tree-ssa/cunroll-13.c: Likewise.
* gcc.dg/tree-ssa/ivopt_mult_1g.c: Likewise.
* gcc.dg/tree-ssa/ivopt_mult_2g.c: Likewise.
* gcc.dg/tree-ssa/scev-3.c: Likewise.
* gcc.dg/tree-ssa/scev-4.c: Likewise.
* gcc.dg/tree-ssa/scev-5.c: Likewise.
* gcc.dg/vect/vect-cond-arith-2.c: Likewise.
* gcc.target/aarch64/sve/loop_add_6.c: Likewise.
From-SVN: r269682
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 54 |
1 files changed, 5 insertions, 49 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 805e872..0dc94ea 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -171,7 +171,6 @@ static bool gimple_can_merge_blocks_p (basic_block, basic_block); static void remove_bb (basic_block); static edge find_taken_edge_computed_goto (basic_block, tree); static edge find_taken_edge_cond_expr (const gcond *, tree); -static void lower_phi_internal_fn (); void init_empty_tree_cfg_for_function (struct function *fn) @@ -246,7 +245,6 @@ build_gimple_cfg (gimple_seq seq) discriminator_per_locus = new hash_table<locus_discrim_hasher> (13); make_edges (); assign_discriminators (); - lower_phi_internal_fn (); cleanup_dead_labels (); delete discriminator_per_locus; discriminator_per_locus = NULL; @@ -359,47 +357,6 @@ replace_loop_annotate (void) } } -/* Lower internal PHI function from GIMPLE FE. */ - -static void -lower_phi_internal_fn () -{ - basic_block bb, pred = NULL; - gimple_stmt_iterator gsi; - tree lhs; - gphi *phi_node; - gimple *stmt; - - /* After edge creation, handle __PHI function from GIMPLE FE. */ - FOR_EACH_BB_FN (bb, cfun) - { - for (gsi = gsi_after_labels (bb); !gsi_end_p (gsi);) - { - stmt = gsi_stmt (gsi); - if (! gimple_call_internal_p (stmt, IFN_PHI)) - break; - - lhs = gimple_call_lhs (stmt); - phi_node = create_phi_node (lhs, bb); - - /* Add arguments to the PHI node. */ - for (unsigned i = 0; i < gimple_call_num_args (stmt); ++i) - { - tree arg = gimple_call_arg (stmt, i); - if (TREE_CODE (arg) == LABEL_DECL) - pred = label_to_block (cfun, arg); - else - { - edge e = find_edge (pred, bb); - add_phi_arg (phi_node, arg, e, UNKNOWN_LOCATION); - } - } - - gsi_remove (&gsi, true); - } - } -} - static unsigned int execute_build_cfg (void) { @@ -3337,11 +3294,6 @@ verify_gimple_call (gcall *stmt) debug_generic_stmt (fn); return true; } - /* FIXME : for passing label as arg in internal fn PHI from GIMPLE FE*/ - else if (gimple_call_internal_fn (stmt) == IFN_PHI) - { - return false; - } } else { @@ -7922,7 +7874,11 @@ dump_function_to_file (tree fndecl, FILE *file, dump_flags_t flags) { print_generic_expr (file, TREE_TYPE (TREE_TYPE (fndecl)), dump_flags | TDF_SLIM); - fprintf (file, " __GIMPLE ()\n%s (", function_name (fun)); + fprintf (file, " __GIMPLE (%s)\n%s (", + (fun->curr_properties & PROP_ssa) ? "ssa" + : (fun->curr_properties & PROP_cfg) ? "cfg" + : "", + function_name (fun)); } else fprintf (file, "%s %s(", function_name (fun), tmclone ? "[tm-clone] " : ""); |