gimple-fold.c (gimple_fold_builtin_memory_op): Make sure to fold the RHS to a constant if possible.

2016-06-10  Richard Biener  <rguenther@suse.de>

	* gimple-fold.c (gimple_fold_builtin_memory_op): Make sure
	to fold the RHS to a constant if possible.

From-SVN: r237301
This commit is contained in:
Richard Biener 2016-06-10 11:44:47 +00:00 committed by Richard Biener
parent 2cfab6c0f7
commit 921b13d093
2 changed files with 19 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2016-06-10 Richard Biener <rguenther@suse.de>
* gimple-fold.c (gimple_fold_builtin_memory_op): Make sure
to fold the RHS to a constant if possible.
2016-06-10 Thomas Schwinge <thomas@codesourcery.com> 2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
PR middle-end/71373 PR middle-end/71373

View File

@ -1020,14 +1020,20 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
gimple *new_stmt; gimple *new_stmt;
if (is_gimple_reg_type (TREE_TYPE (srcvar))) if (is_gimple_reg_type (TREE_TYPE (srcvar)))
{ {
new_stmt = gimple_build_assign (NULL_TREE, srcvar); tree tem = fold_const_aggregate_ref (srcvar);
if (gimple_in_ssa_p (cfun)) if (tem)
srcvar = make_ssa_name (TREE_TYPE (srcvar), new_stmt); srcvar = tem;
else if (! is_gimple_min_invariant (srcvar))
srcvar = create_tmp_reg (TREE_TYPE (srcvar)); {
gimple_assign_set_lhs (new_stmt, srcvar); new_stmt = gimple_build_assign (NULL_TREE, srcvar);
gimple_set_vuse (new_stmt, gimple_vuse (stmt)); if (gimple_in_ssa_p (cfun))
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT); srcvar = make_ssa_name (TREE_TYPE (srcvar), new_stmt);
else
srcvar = create_tmp_reg (TREE_TYPE (srcvar));
gimple_assign_set_lhs (new_stmt, srcvar);
gimple_set_vuse (new_stmt, gimple_vuse (stmt));
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
}
} }
new_stmt = gimple_build_assign (destvar, srcvar); new_stmt = gimple_build_assign (destvar, srcvar);
gimple_set_vuse (new_stmt, gimple_vuse (stmt)); gimple_set_vuse (new_stmt, gimple_vuse (stmt));