Commit 775eaa4d by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/91976 (RTL check: expected code 'const_int', have 'reg'…

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
parent 1006c9d4
2019-10-03 Jakub Jelinek <jakub@redhat.com>
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 <msebor@redhat.com> 2019-10-02 Martin Sebor <msebor@redhat.com>
PR tree-optimization/80936 PR tree-optimization/80936
......
...@@ -1624,16 +1624,18 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method, ...@@ -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); 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; bool pattern_ok = false;
if (!CONST_INT_P (size) || !pieces_ok || might_overlap) if (!pieces_ok || might_overlap)
{ {
pattern_ok = pattern_ok
emit_block_move_via_pattern (x, y, size, align, = emit_block_move_via_pattern (x, y, size, align,
expected_align, expected_size, expected_align, expected_size,
min_size, max_size, probable_max_size, min_size, max_size, probable_max_size,
might_overlap); might_overlap);
if (!pattern_ok && might_overlap) if (!pattern_ok && might_overlap)
{ {
/* Do not try any of the other methods below as they are not safe /* 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, ...@@ -1645,7 +1647,7 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method,
if (pattern_ok) 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); move_by_pieces (x, y, INTVAL (size), align, RETURN_BEGIN);
else if (may_use_call && !might_overlap else if (may_use_call && !might_overlap
&& ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (x)) && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (x))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment