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
This commit is contained in:
parent
86c24ba677
commit
04976c6e07
@ -1,3 +1,9 @@
|
||||
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
|
||||
|
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
27
gcc/testsuite/gcc.dg/torture/pr71522.c
Normal file
27
gcc/testsuite/gcc.dg/torture/pr71522.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* { 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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user