diff options
author | wehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-05 05:47:36 +0000 |
---|---|---|
committer | wehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-05 05:47:36 +0000 |
commit | 7e6224aba0b1981132291490d8069812ec0ff519 (patch) | |
tree | ab8e7d78c735260db81c354ad6ada82224f8c855 /gcc/emit-rtl.c | |
parent | 70494897e897cfe5a82d808523dfa643bf077e5b (diff) | |
download | gcc-7e6224aba0b1981132291490d8069812ec0ff519.tar.gz |
* emit-rtl.c (set_unique_reg_note): Don't set
a REG_EQUAL or REG_EQUIV note if multiple sets
are present.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47657 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 3c2d8475598..6a30769cecb 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -4068,11 +4068,30 @@ set_unique_reg_note (insn, kind, datum) { rtx note = find_reg_note (insn, kind, NULL_RTX); - /* Don't add ASM_OPERAND REG_EQUAL/REG_EQUIV notes. - It serves no useful purpose and breaks eliminate_regs. */ - if ((kind == REG_EQUAL || kind == REG_EQUIV) - && GET_CODE (datum) == ASM_OPERANDS) - return NULL_RTX; + switch (kind) + { + case REG_EQUAL: + case REG_EQUIV: + /* Don't add REG_EQUAL/REG_EQUIV notes if the insn + has multiple sets (some callers assume single_set + means the insn only has one set, when in fact it + means the insn only has one * useful * set). */ + if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn)) + { + if (note) + abort (); + return NULL_RTX; + } + + /* Don't add ASM_OPERAND REG_EQUAL/REG_EQUIV notes. + It serves no useful purpose and breaks eliminate_regs. */ + if (GET_CODE (datum) == ASM_OPERANDS) + return NULL_RTX; + break; + + default: + break; + } if (note) { |