OSDN Git Service

2006-09-06 James E Wilson <wilson@specifix.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Sep 2006 04:24:24 +0000 (04:24 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Sep 2006 04:24:24 +0000 (04:24 +0000)
        PR rtl-opt/27883
        * flow.c (update_life_info): If UPDATE_LIFE_LOCAL and PROP_DEATH_NOTES
        then call count_or_remove_death_notes.

2006-09-06  Andrew Pinski  <pinskia@physics.uc.edu>

        PR rtl-opt/27883
        * g++.dg/opt/copysign-1.C: New test.

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

gcc/ChangeLog
gcc/flow.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/copysign-1.C [new file with mode: 0644]

index dd11014..580bf89 100644 (file)
@@ -1,3 +1,9 @@
+2006-09-06  James E Wilson  <wilson@specifix.com>
+
+       PR rtl-opt/27883
+       * flow.c (update_life_info): If UPDATE_LIFE_LOCAL and PROP_DEATH_NOTES
+       then call count_or_remove_death_notes.
+
 2006-09-06  Jason Merrill  <jason@redhat.com>
 
        PR c++/27371
 2006-09-06  Jason Merrill  <jason@redhat.com>
 
        PR c++/27371
index 1adba71..47e49f4 100644 (file)
@@ -647,6 +647,17 @@ update_life_info (sbitmap blocks, enum update_life_extent extent,
        count_or_remove_death_notes (blocks,
                                     prop_flags & PROP_POST_REGSTACK ? -1 : 1);
     }
        count_or_remove_death_notes (blocks,
                                     prop_flags & PROP_POST_REGSTACK ? -1 : 1);
     }
+  else
+    {
+      /* FIXME: This can go when the dataflow branch has been merged in.  */
+      /* For a local update, if we are creating new REG_DEAD notes, then we
+        must delete the old ones first to avoid conflicts if they are
+        different.  */
+      if (prop_flags & PROP_DEATH_NOTES)
+       count_or_remove_death_notes (blocks,
+                                    prop_flags & PROP_POST_REGSTACK ? -1 : 1);
+    }
+                                    
 
   /* Clear log links in case we are asked to (re)compute them.  */
   if (prop_flags & PROP_LOG_LINKS)
 
   /* Clear log links in case we are asked to (re)compute them.  */
   if (prop_flags & PROP_LOG_LINKS)
index 6e7bd99..0e052be 100644 (file)
@@ -1,3 +1,8 @@
+2006-09-06  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR rtl-opt/27883
+       * g++.dg/opt/copysign-1.C: New test.
+
 2006-09-06  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/28903
 2006-09-06  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/28903
diff --git a/gcc/testsuite/g++.dg/opt/copysign-1.C b/gcc/testsuite/g++.dg/opt/copysign-1.C
new file mode 100644 (file)
index 0000000..347bec2
--- /dev/null
@@ -0,0 +1,10 @@
+// { dg-options "-O2" }
+// { dg-do compile }
+// PR rtl-opt/27883
+// MIPS used to ICE because local flow update
+// was not removing an invalid REG_DEAD.
+
+
+double copysign (double x, double y);
+double GetDouble();
+double a = copysign (1.0, GetDouble());