jump.c (mark_modified_reg): Allow jump threading if condition codes are represented...
authorJakub Jelinek <jakub@redhat.com>
Fri, 8 Jun 2001 17:43:09 +0000 (19:43 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 8 Jun 2001 17:43:09 +0000 (19:43 +0200)
* jump.c (mark_modified_reg): Allow jump threading if condition
codes are represented by a hard register.

From-SVN: r43030

gcc/ChangeLog
gcc/jump.c

index f75f9b1521dc13cacecf4ef9ca4cf688f65823a3..2bcea06f39a6983cb385b420c204901e38859c84 100644 (file)
@@ -1,3 +1,8 @@
+2001-06-08  Jakub Jelinek  <jakub@redhat.com>
+
+       * jump.c (mark_modified_reg): Allow jump threading if condition
+       codes are represented by a hard register.
+
 2001-06-08  Jakub Jelinek  <jakub@redhat.com>
 
        * config/ia64/ia64.c (ia64_function_arg): Use [SDT]Fmode as gr_mode
index 5d5c6d6e796dc6bdb7e02e9101cac2275d508c76..feb7b4d8ca36d716817320a5edb96d682a31f203 100644 (file)
@@ -3763,7 +3763,7 @@ static int modified_mem;
 static void
 mark_modified_reg (dest, x, data)
      rtx dest;
-     rtx x ATTRIBUTE_UNUSED;
+     rtx x;
      void *data ATTRIBUTE_UNUSED;
 {
   int regno;
@@ -3781,7 +3781,13 @@ mark_modified_reg (dest, x, data)
   regno = REGNO (dest);
   if (regno >= FIRST_PSEUDO_REGISTER)
     modified_regs[regno] = 1;
-  else
+  /* Don't consider a hard condition code register as modified,
+     if it is only being set.  thread_jumps will check if it is set
+     to the same value.  */
+  else if (GET_MODE_CLASS (GET_MODE (dest)) != MODE_CC
+          || GET_CODE (x) != SET
+          || ! rtx_equal_p (dest, SET_DEST (x))
+          || HARD_REGNO_NREGS (regno, GET_MODE (dest)) != 1)
     for (i = 0; i < HARD_REGNO_NREGS (regno, GET_MODE (dest)); i++)
       modified_regs[regno + i] = 1;
 }