diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2007-02-20 22:11:52 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2007-02-20 22:11:52 +0000 |
commit | ea8f106d4c4e16933ef9bbd8bbd5a8588cd6c53f (patch) | |
tree | cbbca2e4e5c53d02da8c53c3ab7269794ce135b2 /gcc | |
parent | b241831b6d7dfd5107299ad17f8b5c8d5e8967c7 (diff) | |
download | gcc-ea8f106d4c4e16933ef9bbd8bbd5a8588cd6c53f.zip gcc-ea8f106d4c4e16933ef9bbd8bbd5a8588cd6c53f.tar.gz gcc-ea8f106d4c4e16933ef9bbd8bbd5a8588cd6c53f.tar.bz2 |
rtlanal.c (find_reg_equal_equiv_note): Do not find REG_EQ* notes on an insn with multiple sets...
* rtlanal.c (find_reg_equal_equiv_note): Do not find REG_EQ*
notes on an insn with multiple sets, even if single_set returns
non-NULL for that insn.
From-SVN: r122177
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/rtlanal.c | 9 |
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf0fbcd..cbb93b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-02-20 Steven Bosscher <steven@gcc.gnu.org> + + * rtlanal.c (find_reg_equal_equiv_note): Do not find REG_EQ* + notes on an insn with multiple sets, even if single_set returns + non-NULL for that insn. + 2007-02-20 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * fold-const.c (tree_expr_nonnegative_warnv_p): Handle scalb, diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 2d15663..b23eec4 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -1676,11 +1676,18 @@ find_reg_equal_equiv_note (rtx insn) if (!INSN_P (insn)) return 0; + for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) if (REG_NOTE_KIND (link) == REG_EQUAL || REG_NOTE_KIND (link) == REG_EQUIV) { - if (single_set (insn) == 0) + /* FIXME: We should never have REG_EQUAL/REG_EQUIV notes on + insns that have multiple sets. Checking single_set to + make sure of this is not the proper check, as explained + in the comment in set_unique_reg_note. + + This should be changed into an assert. */ + if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn)) return 0; return link; } |