Commit 9e207d6f by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/72824 (Signed floating point zero semantics broken at…

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
parent 50bf47fd
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
......
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
......
/* 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;
......
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