From: hubicka Date: Fri, 9 Aug 2013 11:44:27 +0000 (+0000) Subject: * lto-streamer-out.c (output_function): Renumber PHIs. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=62732f86aad129e1e50c0a919e5094a57c2697ac;p=thirdparty%2Fgcc.git * lto-streamer-out.c (output_function): Renumber PHIs. * lto-streamer-in.c (input_function): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201627 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8d80204803eb..ef8197630c41 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-08-09 Jan Hubicka + + * lto-streamer-out.c (output_function): Renumber PHIs. + * lto-streamer-in.c (input_function): Likewise. + 2013-08-09 James Greenhalgh * config/aarch64/aarch64-simd-builtins.def (get_lane_signed): Remove. diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index 70a87d1738ba..9dc8438aa477 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -908,6 +908,11 @@ input_function (tree fn_decl, struct data_in *data_in, FOR_ALL_BB (bb) { gimple_stmt_iterator gsi; + for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple stmt = gsi_stmt (gsi); + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); + } for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple stmt = gsi_stmt (gsi); @@ -917,7 +922,14 @@ input_function (tree fn_decl, struct data_in *data_in, stmts = (gimple *) xcalloc (gimple_stmt_max_uid (fn), sizeof (gimple)); FOR_ALL_BB (bb) { - gimple_stmt_iterator bsi = gsi_start_bb (bb); + gimple_stmt_iterator bsi = gsi_start_phis (bb); + while (!gsi_end_p (bsi)) + { + gimple stmt = gsi_stmt (bsi); + gsi_next (&bsi); + stmts[gimple_uid (stmt)] = stmt; + } + bsi = gsi_start_bb (bb); while (!gsi_end_p (bsi)) { gimple stmt = gsi_stmt (bsi); diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index 5649bd8443e6..ea0ff177c47e 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -1792,12 +1792,32 @@ output_function (struct cgraph_node *node) FOR_ALL_BB (bb) { gimple_stmt_iterator gsi; + for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple stmt = gsi_stmt (gsi); + + /* Virtual PHIs are not going to be streamed. */ + if (!virtual_operand_p (gimple_phi_result (stmt))) + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); + } for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple stmt = gsi_stmt (gsi); gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); } } + /* To avoid keeping duplicate gimple IDs in the statements, renumber + virtual phis now. */ + FOR_ALL_BB (bb) + { + gimple_stmt_iterator gsi; + for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple stmt = gsi_stmt (gsi); + if (virtual_operand_p (gimple_phi_result (stmt))) + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); + } + } /* Output the code for the function. */ FOR_ALL_BB_FN (bb, fn)