re PR rtl-optimization/72488 (wrong code (SIGFPE) at -Os and above on x86_64-linux-gnu (in the 64-bit mode))

2017-01-19  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/72488
	* tree-ssa-sccvn.c (run_scc_vn): When we abort the VN make
	sure to restore SSA info.
	* tree-ssa.c (verify_ssa): Verify SSA info is not shared.

From-SVN: r244623
This commit is contained in:
Richard Biener 2017-01-19 12:00:42 +00:00 committed by Richard Biener
parent 4f94fa1186
commit ed20a004e1
3 changed files with 48 additions and 15 deletions

View File

@ -1,3 +1,10 @@
2017-01-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/72488
* tree-ssa-sccvn.c (run_scc_vn): When we abort the VN make
sure to restore SSA info.
* tree-ssa.c (verify_ssa): Verify SSA info is not shared.
2017-01-19 Richard Earnshaw <rearnsha@arm.com>
PR rtl-optimization/79121

View File

@ -4844,6 +4844,7 @@ run_scc_vn (vn_lookup_kind default_vn_walk_kind_)
walker.walk (ENTRY_BLOCK_PTR_FOR_FN (cfun));
if (walker.fail)
{
scc_vn_restore_ssa_info ();
free_scc_vn ();
return false;
}

View File

@ -1027,24 +1027,49 @@ verify_ssa (bool check_modified_stmt, bool check_ssa_operands)
timevar_push (TV_TREE_SSA_VERIFY);
/* Keep track of SSA names present in the IL. */
size_t i;
tree name;
FOR_EACH_SSA_NAME (i, name, cfun)
{
gimple *stmt;
TREE_VISITED (name) = 0;
/* Keep track of SSA names present in the IL. */
size_t i;
tree name;
hash_map <void *, tree> ssa_info;
verify_ssa_name (name, virtual_operand_p (name));
stmt = SSA_NAME_DEF_STMT (name);
if (!gimple_nop_p (stmt))
FOR_EACH_SSA_NAME (i, name, cfun)
{
basic_block bb = gimple_bb (stmt);
if (verify_def (bb, definition_block,
name, stmt, virtual_operand_p (name)))
goto err;
gimple *stmt;
TREE_VISITED (name) = 0;
verify_ssa_name (name, virtual_operand_p (name));
stmt = SSA_NAME_DEF_STMT (name);
if (!gimple_nop_p (stmt))
{
basic_block bb = gimple_bb (stmt);
if (verify_def (bb, definition_block,
name, stmt, virtual_operand_p (name)))
goto err;
}
void *info = NULL;
if (POINTER_TYPE_P (TREE_TYPE (name)))
info = SSA_NAME_PTR_INFO (name);
else if (INTEGRAL_TYPE_P (TREE_TYPE (name)))
info = SSA_NAME_RANGE_INFO (name);
if (info)
{
bool existed;
tree &val = ssa_info.get_or_insert (info, &existed);
if (existed)
{
error ("shared SSA name info");
print_generic_expr (stderr, val, 0);
fprintf (stderr, " and ");
print_generic_expr (stderr, name, 0);
fprintf (stderr, "\n");
goto err;
}
else
val = name;
}
}
}