mirror of git://gcc.gnu.org/git/gcc.git
re PR target/65369 (nettle test failure on powerpc64le-linux-gnu when built with -O3)
PR tree-optimization/65369 * tree-vect-stmts.c (vectorizable_load) <case dr_explicit_realign>: Set bump to vs * TYPE_SIZE_UNIT (elem_type) - 1 instead of (vs - 1) * TYPE_SIZE_UNIT (elem_type). * gcc.c-torture/execute/pr65369.c: New test. From-SVN: r221435
This commit is contained in:
parent
c2f41ffd24
commit
d88981fc3e
|
|
@ -1,5 +1,10 @@
|
||||||
2015-03-14 Jakub Jelinek <jakub@redhat.com>
|
2015-03-14 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/65369
|
||||||
|
* tree-vect-stmts.c (vectorizable_load) <case dr_explicit_realign>:
|
||||||
|
Set bump to vs * TYPE_SIZE_UNIT (elem_type) - 1 instead of
|
||||||
|
(vs - 1) * TYPE_SIZE_UNIT (elem_type).
|
||||||
|
|
||||||
PR tree-optimization/65418
|
PR tree-optimization/65418
|
||||||
* tree-ssa-reassoc.c (extract_bit_test_mask): If there
|
* tree-ssa-reassoc.c (extract_bit_test_mask): If there
|
||||||
are casts in the first PLUS_EXPR operand, ensure tbias and
|
are casts in the first PLUS_EXPR operand, ensure tbias and
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
2015-03-14 Jakub Jelinek <jakub@redhat.com>
|
2015-03-14 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/65369
|
||||||
|
* gcc.c-torture/execute/pr65369.c: New test.
|
||||||
|
|
||||||
PR tree-optimization/65418
|
PR tree-optimization/65418
|
||||||
* gcc.c-torture/execute/pr65418-1.c: New test.
|
* gcc.c-torture/execute/pr65418-1.c: New test.
|
||||||
* gcc.c-torture/execute/pr65418-2.c: New test.
|
* gcc.c-torture/execute/pr65418-2.c: New test.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
/* PR tree-optimization/65369 */
|
||||||
|
|
||||||
|
static const char data[] =
|
||||||
|
"12345678901234567890123456789012345678901234567890"
|
||||||
|
"123456789012345678901234567890";
|
||||||
|
|
||||||
|
__attribute__ ((noinline))
|
||||||
|
static void foo (const unsigned int *buf)
|
||||||
|
{
|
||||||
|
if (__builtin_memcmp (buf, data, 64))
|
||||||
|
__builtin_abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((noinline))
|
||||||
|
static void bar (const unsigned char *block)
|
||||||
|
{
|
||||||
|
unsigned int buf[16];
|
||||||
|
__builtin_memcpy (buf + 0, block + 0, 4);
|
||||||
|
__builtin_memcpy (buf + 1, block + 4, 4);
|
||||||
|
__builtin_memcpy (buf + 2, block + 8, 4);
|
||||||
|
__builtin_memcpy (buf + 3, block + 12, 4);
|
||||||
|
__builtin_memcpy (buf + 4, block + 16, 4);
|
||||||
|
__builtin_memcpy (buf + 5, block + 20, 4);
|
||||||
|
__builtin_memcpy (buf + 6, block + 24, 4);
|
||||||
|
__builtin_memcpy (buf + 7, block + 28, 4);
|
||||||
|
__builtin_memcpy (buf + 8, block + 32, 4);
|
||||||
|
__builtin_memcpy (buf + 9, block + 36, 4);
|
||||||
|
__builtin_memcpy (buf + 10, block + 40, 4);
|
||||||
|
__builtin_memcpy (buf + 11, block + 44, 4);
|
||||||
|
__builtin_memcpy (buf + 12, block + 48, 4);
|
||||||
|
__builtin_memcpy (buf + 13, block + 52, 4);
|
||||||
|
__builtin_memcpy (buf + 14, block + 56, 4);
|
||||||
|
__builtin_memcpy (buf + 15, block + 60, 4);
|
||||||
|
foo (buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
unsigned char input[sizeof data + 16] __attribute__((aligned (16)));
|
||||||
|
__builtin_memset (input, 0, sizeof input);
|
||||||
|
__builtin_memcpy (input + 1, data, sizeof data);
|
||||||
|
bar (input + 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -6468,9 +6468,8 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
|
||||||
case dr_explicit_realign:
|
case dr_explicit_realign:
|
||||||
{
|
{
|
||||||
tree ptr, bump;
|
tree ptr, bump;
|
||||||
tree vs_minus_1;
|
|
||||||
|
|
||||||
vs_minus_1 = size_int (TYPE_VECTOR_SUBPARTS (vectype) - 1);
|
tree vs = size_int (TYPE_VECTOR_SUBPARTS (vectype));
|
||||||
|
|
||||||
if (compute_in_loop)
|
if (compute_in_loop)
|
||||||
msq = vect_setup_realignment (first_stmt, gsi,
|
msq = vect_setup_realignment (first_stmt, gsi,
|
||||||
|
|
@ -6499,8 +6498,9 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
|
||||||
vect_finish_stmt_generation (stmt, new_stmt, gsi);
|
vect_finish_stmt_generation (stmt, new_stmt, gsi);
|
||||||
msq = new_temp;
|
msq = new_temp;
|
||||||
|
|
||||||
bump = size_binop (MULT_EXPR, vs_minus_1,
|
bump = size_binop (MULT_EXPR, vs,
|
||||||
TYPE_SIZE_UNIT (elem_type));
|
TYPE_SIZE_UNIT (elem_type));
|
||||||
|
bump = size_binop (MINUS_EXPR, bump, size_one_node);
|
||||||
ptr = bump_vector_ptr (dataref_ptr, NULL, gsi, stmt, bump);
|
ptr = bump_vector_ptr (dataref_ptr, NULL, gsi, stmt, bump);
|
||||||
new_stmt = gimple_build_assign
|
new_stmt = gimple_build_assign
|
||||||
(NULL_TREE, BIT_AND_EXPR, ptr,
|
(NULL_TREE, BIT_AND_EXPR, ptr,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue