Fix glibc -O2 iso646.i abort.
authorJim Wilson <wilson@cygnus.com>
Fri, 7 Jul 2000 23:43:28 +0000 (23:43 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 7 Jul 2000 23:43:28 +0000 (16:43 -0700)
* config/ia64/ia64.c (rws_access_reg): New local write_count.  If
is_predicate_reg, then take max write_count of register pair.

From-SVN: r34915

gcc/ChangeLog
gcc/config/ia64/ia64.c

index 3174880..33a9e0f 100644 (file)
@@ -1,3 +1,8 @@
+2000-07-07  Jim Wilson  <wilson@cygnus.com>
+
+       * config/ia64/ia64.c (rws_access_reg): New local write_count.  If
+       is_predicate_reg, then take max write_count of register pair.
+
 2000-07-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * tradcpp.c (main): Rename label `include' to `add_include' to
index e6dbd10..1b0e0c3 100644 (file)
@@ -2313,6 +2313,8 @@ rws_access_reg (regno, flags, pred)
 
   if (flags.is_write)
     {
+      int write_count;
+
       /* One insn writes same reg multiple times?  */
       if (rws_insn[regno].write_count > 0)
        abort ();
@@ -2328,7 +2330,12 @@ rws_access_reg (regno, flags, pred)
       if (is_predicate_reg)
        rws_update (rws_insn, regno + 1, flags, pred);
 
-      switch (rws_sum[regno].write_count)
+      /* ??? Likewise.  */
+      write_count = rws_sum[regno].write_count;
+      if (is_predicate_reg)
+       write_count = MAX (write_count, rws_sum[regno + 1].write_count);
+
+      switch (write_count)
        {
        case 0:
          /* The register has not been written yet.  */