backport: re PR tree-optimization/85257 (wrong code with -O -fno-tree-ccp and reading zeroed vector member)
Backported from mainline 2018-04-07 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/85257 * fold-const.c (native_encode_vector): If not all elts could fit and off is -1, return 0 rather than offset. * tree-ssa-sccvn.c (vn_reference_lookup_3): Pass (offset - offset2) / BITS_PER_UNIT as 4th argument to native_encode_expr. Verify len * BITS_PER_UNIT >= maxsizei. Don't adjust buffer in native_interpret_expr call. * gcc.dg/pr85257.c: New test. From-SVN: r261951
This commit is contained in:
parent
7b42eb87dc
commit
b8e47758b5
@ -1,6 +1,16 @@
|
||||
2018-06-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
2018-04-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/85257
|
||||
* fold-const.c (native_encode_vector): If not all elts could fit
|
||||
and off is -1, return 0 rather than offset.
|
||||
* tree-ssa-sccvn.c (vn_reference_lookup_3): Pass
|
||||
(offset - offset2) / BITS_PER_UNIT as 4th argument to
|
||||
native_encode_expr. Verify len * BITS_PER_UNIT >= maxsizei. Don't
|
||||
adjust buffer in native_interpret_expr call.
|
||||
|
||||
2018-04-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/85252
|
||||
|
@ -7205,7 +7205,7 @@ native_encode_vector (const_tree expr, unsigned char *ptr, int len, int off)
|
||||
return 0;
|
||||
offset += res;
|
||||
if (offset >= len)
|
||||
return offset;
|
||||
return (off == -1 && i < count - 1) ? 0 : offset;
|
||||
if (off != -1)
|
||||
off = 0;
|
||||
}
|
||||
|
@ -1,6 +1,11 @@
|
||||
2018-06-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
2018-04-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/85257
|
||||
* gcc.dg/pr85257.c: New test.
|
||||
|
||||
2018-04-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/85252
|
||||
|
20
gcc/testsuite/gcc.dg/pr85257.c
Normal file
20
gcc/testsuite/gcc.dg/pr85257.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* PR tree-optimization/85257 */
|
||||
/* { dg-do run { target int128 } } */
|
||||
/* { dg-options "-O2 -fno-tree-ccp" } */
|
||||
|
||||
typedef __int128 V __attribute__ ((__vector_size__ (16 * sizeof (__int128))));
|
||||
|
||||
__int128 __attribute__ ((noinline, noclone))
|
||||
foo (void)
|
||||
{
|
||||
V v = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
|
||||
return v[5];
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if (foo () != 6)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
@ -1981,8 +1981,9 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_,
|
||||
if (TREE_CODE (rhs) == SSA_NAME)
|
||||
rhs = SSA_VAL (rhs);
|
||||
len = native_encode_expr (gimple_assign_rhs1 (def_stmt),
|
||||
buffer, sizeof (buffer));
|
||||
if (len > 0)
|
||||
buffer, sizeof (buffer),
|
||||
(offset - offset2) / BITS_PER_UNIT);
|
||||
if (len > 0 && len * BITS_PER_UNIT >= ref->size)
|
||||
{
|
||||
tree type = vr->type;
|
||||
/* Make sure to interpret in a type that has a range
|
||||
@ -1991,10 +1992,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_,
|
||||
&& ref->size != TYPE_PRECISION (vr->type))
|
||||
type = build_nonstandard_integer_type (ref->size,
|
||||
TYPE_UNSIGNED (type));
|
||||
tree val = native_interpret_expr (type,
|
||||
buffer
|
||||
+ ((offset - offset2)
|
||||
/ BITS_PER_UNIT),
|
||||
tree val = native_interpret_expr (type, buffer,
|
||||
ref->size / BITS_PER_UNIT);
|
||||
/* If we chop off bits because the types precision doesn't
|
||||
match the memory access size this is ok when optimizing
|
||||
|
Loading…
Reference in New Issue
Block a user