re PR rtl-optimization/49429 (dse.c change (r175063) causes execution failures)
PR rtl-optimization/49429 PR target/49454 PR rtl-optimization/86334 PR target/88906 * expr.c (emit_block_move_hints): Move marking of MEM_EXPRs addressable from here... (emit_block_op_via_libcall): ... to here. * gcc.target/i386/pr86334.c: New test. * gcc.target/i386/pr88906.c: New test. From-SVN: r268138
This commit is contained in:
parent
c4d825b5e7
commit
c4814f99ed
5 changed files with 70 additions and 8 deletions
|
@ -1,3 +1,13 @@
|
|||
2019-01-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/49429
|
||||
PR target/49454
|
||||
PR rtl-optimization/86334
|
||||
PR target/88906
|
||||
* expr.c (emit_block_move_hints): Move marking of MEM_EXPRs
|
||||
addressable from here...
|
||||
(emit_block_op_via_libcall): ... to here.
|
||||
|
||||
2019-01-22 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-vect-loop.c (vect_analyze_loop_operations): Use
|
||||
|
|
17
gcc/expr.c
17
gcc/expr.c
|
@ -1631,14 +1631,6 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method,
|
|||
if (may_use_call < 0)
|
||||
return pc_rtx;
|
||||
|
||||
/* Since x and y are passed to a libcall, mark the corresponding
|
||||
tree EXPR as addressable. */
|
||||
tree y_expr = MEM_EXPR (y);
|
||||
tree x_expr = MEM_EXPR (x);
|
||||
if (y_expr)
|
||||
mark_addressable (y_expr);
|
||||
if (x_expr)
|
||||
mark_addressable (x_expr);
|
||||
retval = emit_block_copy_via_libcall (x, y, size,
|
||||
method == BLOCK_OP_TAILCALL);
|
||||
}
|
||||
|
@ -1884,6 +1876,15 @@ emit_block_op_via_libcall (enum built_in_function fncode, rtx dst, rtx src,
|
|||
tree call_expr, dst_tree, src_tree, size_tree;
|
||||
machine_mode size_mode;
|
||||
|
||||
/* Since dst and src are passed to a libcall, mark the corresponding
|
||||
tree EXPR as addressable. */
|
||||
tree dst_expr = MEM_EXPR (dst);
|
||||
tree src_expr = MEM_EXPR (src);
|
||||
if (dst_expr)
|
||||
mark_addressable (dst_expr);
|
||||
if (src_expr)
|
||||
mark_addressable (src_expr);
|
||||
|
||||
dst_addr = copy_addr_to_reg (XEXP (dst, 0));
|
||||
dst_addr = convert_memory_address (ptr_mode, dst_addr);
|
||||
dst_tree = make_tree (ptr_type_node, dst_addr);
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2019-01-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/49429
|
||||
PR target/49454
|
||||
PR rtl-optimization/86334
|
||||
PR target/88906
|
||||
* gcc.target/i386/pr86334.c: New test.
|
||||
* gcc.target/i386/pr88906.c: New test.
|
||||
|
||||
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/88949
|
||||
|
|
21
gcc/testsuite/gcc.target/i386/pr86334.c
Normal file
21
gcc/testsuite/gcc.target/i386/pr86334.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* PR rtl-optimization/86334 */
|
||||
/* { dg-do run { target ia32 } } */
|
||||
/* { dg-options "-O -march=i386 -mtune=athlon -minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:align -Wno-psabi" } */
|
||||
|
||||
typedef int V __attribute__ ((vector_size (64)));
|
||||
|
||||
static inline V
|
||||
foo (V g)
|
||||
{
|
||||
g[0] = 4;
|
||||
return g;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
V x = foo ((V) { });
|
||||
if (x[0] != 4 || x[1] || x[2] || x[3] || x[4] || x[5] || x[6] || x[7])
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
21
gcc/testsuite/gcc.target/i386/pr88906.c
Normal file
21
gcc/testsuite/gcc.target/i386/pr88906.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* PR target/88906 */
|
||||
/* { dg-do run { target ia32 } } */
|
||||
/* { dg-options "-O -march=i386 -mtune=k6 -minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:align -Wno-psabi" } */
|
||||
|
||||
typedef unsigned V __attribute__ ((vector_size (16)));
|
||||
|
||||
static inline V
|
||||
foo (V v)
|
||||
{
|
||||
__builtin_sub_overflow (0, 0, &v[0]);
|
||||
return v;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
V v = foo ((V) { ~0 });
|
||||
if (v[0] || v[1] || v[2] || v[3])
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue