ifcvt.c (EDGE_COMPLEX): Move definition ...
authorJohn Wehle <john@feith.com>
Wed, 14 Jun 2000 07:41:57 +0000 (07:41 +0000)
committerJohn Wehle <wehle@gcc.gnu.org>
Wed, 14 Jun 2000 07:41:57 +0000 (07:41 +0000)
* ifcvt.c (EDGE_COMPLEX): Move definition ...
* basic-block.h (EDGE_COMPLEX): ... here.

* loop.c (check_dbra_loop): Specify the register when
generating REG_NONNEG notes and don't generate duplicates.

From-SVN: r34542

gcc/ChangeLog
gcc/basic-block.h
gcc/ifcvt.c
gcc/loop.c

index a62f254d1c89e4c2fc8fae999dead36382156d88..969d873a8ddc5d6e2cdb01aed2711e09816cba2e 100644 (file)
@@ -1,3 +1,11 @@
+Wed Jun 14 03:39:58 EDT 2000  John Wehle  (john@feith.com)
+
+       * ifcvt.c (EDGE_COMPLEX): Move definition ...
+       * basic-block.h (EDGE_COMPLEX): ... here.
+
+       * loop.c (check_dbra_loop): Specify the register when
+       generating REG_NONNEG notes and don't generate duplicates.
+
 2000-06-13  Jakub Jelinek  <jakub@redhat.com>
 
        * tree.h (TYPE_USER_ALIGN, DECL_USER_ALIGN): Define.
index df170c0eed8fd10c2d334b579f965a260ae0067a..633bdafdb202ba066e96126e06e7dd689c5361ea 100644 (file)
@@ -138,6 +138,8 @@ typedef struct edge_def {
 #define EDGE_EH                        16
 #define EDGE_FAKE              32
 
+#define EDGE_COMPLEX   (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH)
+
 
 /* Basic block information indexed by block number.  */
 typedef struct basic_block_def {
index 4e803ce7d4720cfab81a8bc10e3fc68436b4cbd3..54ad8a73a6f2ffdd285c2ed5abdfe8f9f8645a60 100644 (file)
@@ -51,8 +51,6 @@
 #define MAX_CONDITIONAL_EXECUTE   (BRANCH_COST + 1)
 #endif
 
-#define EDGE_COMPLEX   (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH)
-
 #define NULL_EDGE      ((struct edge_def *)NULL)
 #define NULL_BLOCK     ((struct basic_block_def *)NULL)
 
index 0e9d56c3822f1dd8aec1cb29bd8e778560f63c57..066ef931111dc3a40eb6c70170da09ebf0f4a0be 100644 (file)
@@ -7835,9 +7835,10 @@ check_dbra_loop (loop, insn_count)
              % (-INTVAL (bl->biv->add_val))) == 0)
        {
          /* register always nonnegative, add REG_NOTE to branch */
-         REG_NOTES (PREV_INSN (loop_end))
-           = gen_rtx_EXPR_LIST (REG_NONNEG, NULL_RTX,
-                                REG_NOTES (PREV_INSN (loop_end)));
+         if (! find_reg_note (jump, REG_NONNEG, NULL_RTX))
+           REG_NOTES (jump)
+             = gen_rtx_EXPR_LIST (REG_NONNEG, bl->biv->dest_reg,
+                                  REG_NOTES (jump));
          bl->nonneg = 1;
 
          return 1;
@@ -7860,9 +7861,10 @@ check_dbra_loop (loop, insn_count)
              && ! reg_set_between_p (bl->biv->dest_reg, p, loop_start)
              && INTVAL (bl->biv->add_val) == -1)
            {
-             REG_NOTES (PREV_INSN (loop_end))
-               = gen_rtx_EXPR_LIST (REG_NONNEG, NULL_RTX,
-                                    REG_NOTES (PREV_INSN (loop_end)));
+             if (! find_reg_note (jump, REG_NONNEG, NULL_RTX))
+               REG_NOTES (jump)
+                 = gen_rtx_EXPR_LIST (REG_NONNEG, bl->biv->dest_reg,
+                                      REG_NOTES (jump));
              bl->nonneg = 1;
 
              return 1;
@@ -8260,7 +8262,7 @@ check_dbra_loop (loop, insn_count)
                      /* Increment of LABEL_NUSES done above.  */
                      /* Register is now always nonnegative,
                         so add REG_NONNEG note to the branch.  */
-                     REG_NOTES (tem) = gen_rtx_EXPR_LIST (REG_NONNEG, NULL_RTX,
+                     REG_NOTES (tem) = gen_rtx_EXPR_LIST (REG_NONNEG, reg,
                                                           REG_NOTES (tem));
                    }
                  bl->nonneg = 1;