From f4ddadddf99edb3fd2ec0585c7463278d2f0e70c Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Sat, 12 Feb 2005 01:08:33 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 +++++++ gcc/config/cris/cris.c | 50 ++++++++++-------------------------------- 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 71e5b151055..e70eb8bb461 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-02-12 Hans-Peter Nilsson + + 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 * tree-complex.c (expand_complex_libcall): New. diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index 5fc6804af72..a01fe1ec4d2 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -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; -- 2.30.2