Commit f4ddaddd by Hans-Peter Nilsson Committed by Hans-Peter Nilsson

re PR regression/19898 (cris-elf testsuite failure:…

re PR regression/19898 (cris-elf testsuite failure: gcc.c-torture/execute/strlen-1.c execution, -O2 and higher)

	PR regression/19898.
	* config/cris/cris.c (cris_notice_update_cc): When testing if insn
	changes cc_status, use apply modified_in_p to part of cc_status
	and insn, not cris_reg_overlap_mentioned_p on SET_DEST of insn
	body.

From-SVN: r94914
parent 7e7e470f
2005-02-12 Hans-Peter Nilsson <hp@axis.com>
PR regression/19898.
* config/cris/cris.c (cris_notice_update_cc): When testing if insn
changes cc_status, use apply modified_in_p to part of cc_status
and insn, not cris_reg_overlap_mentioned_p on SET_DEST of insn
body.
2005-02-11 Richard Henderson <rth@redhat.com>
* tree-complex.c (expand_complex_libcall): New.
......
......@@ -1834,13 +1834,11 @@ cris_notice_update_cc (rtx exp, rtx insn)
if (GET_CODE (exp) == SET)
{
if (cc_status.value1
&& cris_reg_overlap_mentioned_p (SET_DEST (exp),
cc_status.value1))
&& modified_in_p (cc_status.value1, insn))
cc_status.value1 = 0;
if (cc_status.value2
&& cris_reg_overlap_mentioned_p (SET_DEST (exp),
cc_status.value2))
&& modified_in_p (cc_status.value2, insn))
cc_status.value2 = 0;
}
return;
......@@ -1970,14 +1968,12 @@ cris_notice_update_cc (rtx exp, rtx insn)
{
/* There's no CC0 change when clearing a register or
memory. Just check for overlap. */
if ((cc_status.value1
&& cris_reg_overlap_mentioned_p (SET_DEST (exp),
cc_status.value1)))
if (cc_status.value1
&& modified_in_p (cc_status.value1, insn))
cc_status.value1 = 0;
if ((cc_status.value2
&& cris_reg_overlap_mentioned_p (SET_DEST (exp),
cc_status.value2)))
if (cc_status.value2
&& modified_in_p (cc_status.value2, insn))
cc_status.value2 = 0;
return;
......@@ -2009,14 +2005,12 @@ cris_notice_update_cc (rtx exp, rtx insn)
{
/* When SET to MEM, then CC is not changed (except for
overlap). */
if ((cc_status.value1
&& cris_reg_overlap_mentioned_p (SET_DEST (exp),
cc_status.value1)))
if (cc_status.value1
&& modified_in_p (cc_status.value1, insn))
cc_status.value1 = 0;
if ((cc_status.value2
&& cris_reg_overlap_mentioned_p (SET_DEST (exp),
cc_status.value2)))
if (cc_status.value2
&& modified_in_p (cc_status.value2, insn))
cc_status.value2 = 0;
return;
......@@ -2053,31 +2047,11 @@ cris_notice_update_cc (rtx exp, rtx insn)
/* For "move.S rz,[rx=ry+o]" and "clear.S [rx=ry+o]",
say flags are not changed, except for overlap. */
if (cc_status.value1
&& cris_reg_overlap_mentioned_p (XEXP
(XVECEXP
(exp, 0, 0), 0),
cc_status.value1))
cc_status.value1 = 0;
if (cc_status.value1
&& cris_reg_overlap_mentioned_p (XEXP
(XVECEXP
(exp, 0, 1), 0),
cc_status.value1))
&& modified_in_p (cc_status.value1, insn))
cc_status.value1 = 0;
if (cc_status.value2
&& cris_reg_overlap_mentioned_p (XEXP
(XVECEXP
(exp, 0, 0), 0),
cc_status.value2))
cc_status.value2 = 0;
if (cc_status.value2
&& cris_reg_overlap_mentioned_p (XEXP
(XVECEXP
(exp, 0, 1), 0),
cc_status.value2))
&& modified_in_p (cc_status.value2, insn))
cc_status.value2 = 0;
return;
......
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