aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-04-13 10:35:32 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-04-13 10:35:32 +0200
commitfdd332545cacd845162103bf9855c4605be73584 (patch)
tree2c2fff0f0c8d64c99dc10974991256116f113a2f /gcc/builtins.c
parent6888a172d3e9a19921783a31fd8bce5bde8a9c31 (diff)
downloadgcc-fdd332545cacd845162103bf9855c4605be73584.zip
gcc-fdd332545cacd845162103bf9855c4605be73584.tar.gz
gcc-fdd332545cacd845162103bf9855c4605be73584.tar.bz2
re PR middle-end/81657 (FAIL: gcc.dg/20050503-1.c scan-assembler-not call)
PR middle-end/81657 * expr.h (enum block_op_methods): Add BLOCK_OP_NO_LIBCALL_RET. * expr.c (emit_block_move_hints): Handle BLOCK_OP_NO_LIBCALL_RET. * builtins.c (expand_builtin_memory_copy_args): Use BLOCK_OP_NO_LIBCALL_RET method for mempcpy with non-ignored target, handle dest_addr == pc_rtx. * gcc.dg/string-opt-1.c: Remove bogus comment. Expect a mempcpy call. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r259366
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index ababee5..93c617e 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -3650,12 +3650,16 @@ expand_builtin_memory_copy_args (tree dest, tree src, tree len,
set_mem_align (src_mem, src_align);
/* Copy word part most expediently. */
- dest_addr = emit_block_move_hints (dest_mem, src_mem, len_rtx,
- CALL_EXPR_TAILCALL (exp)
- && (endp == 0 || target == const0_rtx)
- ? BLOCK_OP_TAILCALL : BLOCK_OP_NORMAL,
+ enum block_op_methods method = BLOCK_OP_NORMAL;
+ if (CALL_EXPR_TAILCALL (exp) && (endp == 0 || target == const0_rtx))
+ method = BLOCK_OP_TAILCALL;
+ if (endp == 1 && target != const0_rtx)
+ method = BLOCK_OP_NO_LIBCALL_RET;
+ dest_addr = emit_block_move_hints (dest_mem, src_mem, len_rtx, method,
expected_align, expected_size,
min_size, max_size, probable_max_size);
+ if (dest_addr == pc_rtx)
+ return NULL_RTX;
if (dest_addr == 0)
{