(expand_divmod): Don't make REG_NOTE if last insn's destination isn't
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Jul 1994 18:06:24 +0000 (18:06 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Jul 1994 18:06:24 +0000 (18:06 +0000)
QUOTIENT.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7798 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/expmed.c

index e2cba0d..994451a 100644 (file)
@@ -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;
          }