From ffc5b2bbcd49e24c1806c0530aba553722e7285a Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 10 Jan 2013 13:42:27 +0000 Subject: [PATCH] re PR bootstrap/55792 (Bad memory access with profiledbootstrap and LTO) 2013-01-10 Richard Biener PR bootstrap/55792 * tree-into-ssa.c (rewrite_add_phi_arguments): Do not set locations for virtual PHI arguments. (rewrite_update_phi_arguments): Likewise. From-SVN: r195084 --- gcc/ChangeLog | 7 +++++++ gcc/tree-into-ssa.c | 37 ++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 52e8830..42f1bd8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-01-10 Richard Biener + + PR bootstrap/55792 + * tree-into-ssa.c (rewrite_add_phi_arguments): Do not set + locations for virtual PHI arguments. + (rewrite_update_phi_arguments): Likewise. + 2013-01-10 Joel Sherrill * config/v850/rtems.h (ASM_SPEC): Pass -m8byte-align and -mgcc-abi diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 2a38989..8f93b47 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -1355,13 +1355,18 @@ rewrite_add_phi_arguments (basic_block bb) for (gsi = gsi_start_phis (e->dest); !gsi_end_p (gsi); gsi_next (&gsi)) { - tree currdef; - gimple stmt; + tree currdef, res; + location_t loc; phi = gsi_stmt (gsi); - currdef = get_reaching_def (SSA_NAME_VAR (gimple_phi_result (phi))); - stmt = SSA_NAME_DEF_STMT (currdef); - add_phi_arg (phi, currdef, e, gimple_location (stmt)); + res = gimple_phi_result (phi); + currdef = get_reaching_def (SSA_NAME_VAR (res)); + /* Virtual operand PHI args do not need a location. */ + if (virtual_operand_p (res)) + loc = UNKNOWN_LOCATION; + else + loc = gimple_location (SSA_NAME_DEF_STMT (currdef)); + add_phi_arg (phi, currdef, e, loc); } } } @@ -2018,20 +2023,26 @@ rewrite_update_phi_arguments (basic_block bb) /* Update the argument if there is a reaching def. */ if (reaching_def) { - gimple stmt; source_location locus; int arg_i = PHI_ARG_INDEX_FROM_USE (arg_p); SET_USE (arg_p, reaching_def); - stmt = SSA_NAME_DEF_STMT (reaching_def); - /* Single element PHI nodes behave like copies, so get the - location from the phi argument. */ - if (gimple_code (stmt) == GIMPLE_PHI && - gimple_phi_num_args (stmt) == 1) - locus = gimple_phi_arg_location (stmt, 0); + /* Virtual operands do not need a location. */ + if (virtual_operand_p (reaching_def)) + locus = UNKNOWN_LOCATION; else - locus = gimple_location (stmt); + { + gimple stmt = SSA_NAME_DEF_STMT (reaching_def); + + /* Single element PHI nodes behave like copies, so get the + location from the phi argument. */ + if (gimple_code (stmt) == GIMPLE_PHI + && gimple_phi_num_args (stmt) == 1) + locus = gimple_phi_arg_location (stmt, 0); + else + locus = gimple_location (stmt); + } gimple_phi_arg_set_location (phi, arg_i, locus); } -- 2.7.4