Commit 434c8f4b by Richard Guenther Committed by Richard Biener

re PR tree-optimization/43213 (Worse code generated with -O2)

2010-03-01  Richard Guenther  <rguenther@suse.de>

	PR middle-end/43213
	* expr.c (expand_assignment): Use the alias-oracle to tell
	if the rhs aliases the result decl.

	* gcc.dg/pr43213.c: New testcase.

From-SVN: r157142
parent 291c0a12
2010-03-01 Richard Guenther <rguenther@suse.de>
PR middle-end/43213
* expr.c (expand_assignment): Use the alias-oracle to tell
if the rhs aliases the result decl.
2010-03-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2010-03-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR pch/14940 PR pch/14940
......
...@@ -4432,9 +4432,11 @@ expand_assignment (tree to, tree from, bool nontemporal) ...@@ -4432,9 +4432,11 @@ expand_assignment (tree to, tree from, bool nontemporal)
/* In case we are returning the contents of an object which overlaps /* In case we are returning the contents of an object which overlaps
the place the value is being stored, use a safe function when copying the place the value is being stored, use a safe function when copying
a value through a pointer into a structure value return block. */ a value through a pointer into a structure value return block. */
if (TREE_CODE (to) == RESULT_DECL && TREE_CODE (from) == INDIRECT_REF if (TREE_CODE (to) == RESULT_DECL
&& TREE_CODE (from) == INDIRECT_REF
&& ADDR_SPACE_GENERIC_P && ADDR_SPACE_GENERIC_P
(TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (from, 0))))) (TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (from, 0)))))
&& refs_may_alias_p (to, from)
&& cfun->returns_struct && cfun->returns_struct
&& !cfun->returns_pcc_struct) && !cfun->returns_pcc_struct)
{ {
......
2010-03-01 Richard Guenther <rguenther@suse.de>
PR middle-end/43213
* gcc.dg/pr43213.c: New testcase.
2010-03-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2010-03-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* lib/target-supports.exp (check_effective_target_ucn_nocache): * lib/target-supports.exp (check_effective_target_ucn_nocache):
......
/* { dg-do compile } */
struct S {
int i;
};
struct S f(int i)
{
return *(struct S *)&i;
}
/* { dg-final { scan-assembler-not "memmove" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment