aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-03-14 13:25:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-03-14 13:25:27 +0000
commitbaa09dc5c951213452446689466ad889656b9936 (patch)
treedb95685f90a8eeb45ae9b08911a3d046e8db2389 /gcc/tree-cfg.c
parent27814aed3462d6bdce3c653e5e66d5e58cf4a5e7 (diff)
downloadgcc-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.c54
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] " : "");