Commit 04976c6e by Richard Biener Committed by Richard Biener

re PR tree-optimization/71522 (Wrong optimization of memcpy through a var of type long double)

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

	PR tree-optimization/71522
	* tree-ssa.c (non_rewritable_lvalue_p): Do not rewrite non-float
	copying into float copying.

	* gcc.dg/torture/pr71522.c: New testcase.

From-SVN: r237429
parent 86c24ba6
2016-06-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/71522
* tree-ssa.c (non_rewritable_lvalue_p): Do not rewrite non-float
copying into float copying.
2016-06-14 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/71520
......
2016-06-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/71522
* gcc.dg/torture/pr71522.c: New testcase.
2016-06-14 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/71520
......
/* { dg-do run } */
#if __SIZEOF_LONG_DOUBLE__ == 16
#define STR "AAAAAAAAAAAAAAA"
#elif __SIZEOF_LONG_DOUBLE__ == 12
#define STR "AAAAAAAAAAA"
#elif __SIZEOF_LONG_DOUBLE__ == 8
#define STR "AAAAAAA"
#elif __SIZEOF_LONG_DOUBLE__ == 4
#define STR "AAA"
#else
#define STR "A"
#endif
int main()
{
long double d;
char s[sizeof d];
__builtin_memcpy(&d, STR, sizeof d);
__builtin_memcpy(&s, &d, sizeof s);
if (__builtin_strncmp (s, STR, sizeof s) != 0)
__builtin_abort ();
return 0;
}
......@@ -1300,6 +1300,10 @@ non_rewritable_lvalue_p (tree lhs)
|| (INTEGRAL_TYPE_P (TREE_TYPE (lhs))
&& (TYPE_PRECISION (TREE_TYPE (decl))
>= TYPE_PRECISION (TREE_TYPE (lhs)))))
/* Make sure we are not re-writing non-float copying into float
copying as that can incur normalization. */
&& (! FLOAT_TYPE_P (TREE_TYPE (decl))
|| types_compatible_p (TREE_TYPE (lhs), TREE_TYPE (decl)))
&& (TREE_THIS_VOLATILE (decl) == TREE_THIS_VOLATILE (lhs)))
return false;
......
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