aboutsummaryrefslogtreecommitdiff
path: root/gcc/expmed.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-07-27 14:06:24 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-07-27 14:06:24 -0400
commit4e430df869819102d953369c7bc8e5a0cff2f6eb (patch)
tree137ff80a8e8ca26b2c68893d18ed9e075070f8e7 /gcc/expmed.c
parentad2e7dd004513e4877bf837f4113815ada04c7f0 (diff)
downloadgcc-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.c42
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;
}