diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-07-27 14:06:24 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-07-27 14:06:24 -0400 |
commit | 4e430df869819102d953369c7bc8e5a0cff2f6eb (patch) | |
tree | 137ff80a8e8ca26b2c68893d18ed9e075070f8e7 /gcc/expmed.c | |
parent | ad2e7dd004513e4877bf837f4113815ada04c7f0 (diff) | |
download | gcc-4e430df869819102d953369c7bc8e5a0cff2f6eb.zip gcc-4e430df869819102d953369c7bc8e5a0cff2f6eb.tar.gz gcc-4e430df869819102d953369c7bc8e5a0cff2f6eb.tar.bz2 |
(expand_divmod): Don't make REG_NOTE if last insn's destination isn't
QUOTIENT.
From-SVN: r7798
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r-- | gcc/expmed.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c index e2cba0d..994451a 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -2568,7 +2568,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) rtx quotient = 0, remainder = 0; rtx last; int size; - rtx insn; + rtx insn, set; optab optab1, optab2; int op1_is_constant, op1_is_pow2; @@ -2813,10 +2813,13 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) } insn = get_last_insn (); - REG_NOTES (insn) - = gen_rtx (EXPR_LIST, REG_EQUAL, - gen_rtx (UDIV, compute_mode, op0, op1), - REG_NOTES (insn)); + if (insn != last + && (set = single_set (insn)) != 0 + && SET_DEST (set) == quotient) + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_EQUAL, + gen_rtx (UDIV, compute_mode, op0, op1), + REG_NOTES (insn)); } else /* TRUNC_DIV, signed */ { @@ -2878,11 +2881,14 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) if (d < 0) { insn = get_last_insn (); - REG_NOTES (insn) - = gen_rtx (EXPR_LIST, REG_EQUAL, - gen_rtx (DIV, compute_mode, op0, - GEN_INT (abs_d)), - REG_NOTES (insn)); + if (insn != last + && (set = single_set (insn)) != 0 + && SET_DEST (set) == quotient) + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_EQUAL, + gen_rtx (DIV, compute_mode, op0, + GEN_INT (abs_d)), + REG_NOTES (insn)); quotient = expand_unop (compute_mode, neg_optab, quotient, quotient, 0); @@ -2935,14 +2941,14 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) } } - if (quotient != 0) - { - insn = get_last_insn (); - REG_NOTES (insn) - = gen_rtx (EXPR_LIST, REG_EQUAL, - gen_rtx (DIV, compute_mode, op0, op1), - REG_NOTES (insn)); - } + insn = get_last_insn (); + if (insn != last + && (set = single_set (insn)) != 0 + && SET_DEST (set) == quotient) + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_EQUAL, + gen_rtx (DIV, compute_mode, op0, op1), + REG_NOTES (insn)); } break; } |