From 775eaa4d83458393a34aa6197ff823b63d6078fd Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 3 Oct 2019 00:33:39 +0200 Subject: [PATCH] re PR rtl-optimization/91976 (RTL check: expected code 'const_int', have 'reg' in emit_block_move_hints, at expr.c:1627) PR rtl-optimization/91976 * expr.c (emit_block_move_hints): Don't call can_move_by_pieces if size is not CONST_INT_P, set pieces_ok to false in that case. Simplify CONST_INT_P (size) && pieces_ok to pieces_ok. Formatting fix. From-SVN: r276495 --- gcc/ChangeLog | 7 +++++++ gcc/expr.c | 18 ++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 371e7bc13dd..6aff2cd4371 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-10-03 Jakub Jelinek + + PR rtl-optimization/91976 + * expr.c (emit_block_move_hints): Don't call can_move_by_pieces if + size is not CONST_INT_P, set pieces_ok to false in that case. Simplify + CONST_INT_P (size) && pieces_ok to pieces_ok. Formatting fix. + 2019-10-02 Martin Sebor PR tree-optimization/80936 diff --git a/gcc/expr.c b/gcc/expr.c index bd6a71a4e2f..c4210547aee 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -1624,16 +1624,18 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method, set_mem_size (y, const_size); } - bool pieces_ok = can_move_by_pieces (INTVAL (size), align); + bool pieces_ok = false; + if (CONST_INT_P (size)) + pieces_ok = can_move_by_pieces (INTVAL (size), align); bool pattern_ok = false; - if (!CONST_INT_P (size) || !pieces_ok || might_overlap) + if (!pieces_ok || might_overlap) { - pattern_ok = - emit_block_move_via_pattern (x, y, size, align, - expected_align, expected_size, - min_size, max_size, probable_max_size, - might_overlap); + pattern_ok + = emit_block_move_via_pattern (x, y, size, align, + expected_align, expected_size, + min_size, max_size, probable_max_size, + might_overlap); if (!pattern_ok && might_overlap) { /* Do not try any of the other methods below as they are not safe @@ -1645,7 +1647,7 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method, if (pattern_ok) ; - else if (CONST_INT_P (size) && pieces_ok) + else if (pieces_ok) move_by_pieces (x, y, INTVAL (size), align, RETURN_BEGIN); else if (may_use_call && !might_overlap && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (x)) -- 2.30.2