mirror of git://gcc.gnu.org/git/gcc.git
re PR tree-optimization/72824 (Signed floating point zero semantics broken at optimization level -O3 (tree-loop-distribute-patterns))
PR tree-optimization/72824 * tree-loop-distribution.c (const_with_all_bytes_same): Verify real_zerop is not negative. * gcc.c-torture/execute/ieee/pr72824.c: New test. From-SVN: r239275
This commit is contained in:
parent
50bf47fdc0
commit
9e207d6fec
|
|
@ -1,3 +1,9 @@
|
|||
2016-08-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/72824
|
||||
* tree-loop-distribution.c (const_with_all_bytes_same): Verify
|
||||
real_zerop is not negative.
|
||||
|
||||
2016-08-09 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/71802
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
2016-08-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/72824
|
||||
* gcc.c-torture/execute/ieee/pr72824.c: New test.
|
||||
|
||||
2016-08-09 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/71802
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
/* PR tree-optimization/72824 */
|
||||
|
||||
static inline void
|
||||
foo (float *x, float value)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 32; ++i)
|
||||
x[i] = value;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
float x[32];
|
||||
foo (x, -0.f);
|
||||
if (__builtin_copysignf (1.0, x[3]) != -1.0f)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -750,12 +750,40 @@ const_with_all_bytes_same (tree val)
|
|||
int i, len;
|
||||
|
||||
if (integer_zerop (val)
|
||||
|| real_zerop (val)
|
||||
|| (TREE_CODE (val) == CONSTRUCTOR
|
||||
&& !TREE_CLOBBER_P (val)
|
||||
&& CONSTRUCTOR_NELTS (val) == 0))
|
||||
return 0;
|
||||
|
||||
if (real_zerop (val))
|
||||
{
|
||||
/* Only return 0 for +0.0, not for -0.0, which doesn't have
|
||||
an all bytes same memory representation. Don't transform
|
||||
-0.0 stores into +0.0 even for !HONOR_SIGNED_ZEROS. */
|
||||
switch (TREE_CODE (val))
|
||||
{
|
||||
case REAL_CST:
|
||||
if (!real_isneg (TREE_REAL_CST_PTR (val)))
|
||||
return 0;
|
||||
break;
|
||||
case COMPLEX_CST:
|
||||
if (!const_with_all_bytes_same (TREE_REALPART (val))
|
||||
&& !const_with_all_bytes_same (TREE_IMAGPART (val)))
|
||||
return 0;
|
||||
break;
|
||||
case VECTOR_CST:
|
||||
unsigned int j;
|
||||
for (j = 0; j < VECTOR_CST_NELTS (val); ++j)
|
||||
if (const_with_all_bytes_same (VECTOR_CST_ELT (val, i)))
|
||||
break;
|
||||
if (j == VECTOR_CST_NELTS (val))
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (CHAR_BIT != 8 || BITS_PER_UNIT != 8)
|
||||
return -1;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue