re PR tree-optimization/24627 (xntp miscompiled)
authorDiego Novillo <dnovillo@redhat.com>
Fri, 4 Nov 2005 19:56:28 +0000 (19:56 +0000)
committerDiego Novillo <dnovillo@gcc.gnu.org>
Fri, 4 Nov 2005 19:56:28 +0000 (14:56 -0500)
PR 24627
* tree-ssa-dce.c (pass_dce, pass_dce_loop, pass_cd_dce): Use
TODO_update_ssa instead of TODO_update_ssa_no_phi.

testsuite/

PR 24627
* gcc.dg/tree-ssa/pr24627.c: New test.

From-SVN: r106502

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr24627.c [new file with mode: 0644]
gcc/tree-ssa-dce.c

index efcd296..b7c1bb9 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-03  Diego Novillo  <dnovillo@redhat.com>
+
+       PR 24627
+       * tree-ssa-dce.c (pass_dce, pass_dce_loop, pass_cd_dce): Use
+       TODO_update_ssa instead of TODO_update_ssa_no_phi.
+
 2005-11-04  Sebastian Pop  <pop@cri.ensmp.fr>
 
        PR/18595
index 06c38e6..7e49aa2 100644 (file)
@@ -1,3 +1,8 @@
+2005-11-04  Diego Novillo  <dnovillo@redhat.com>
+
+       PR 24627
+       * gcc.dg/tree-ssa/pr24627.c: New test.
+
 2005-11-04 Paul Brook  <paul@codesourcery.com>
 
        * gcc.dg/tls/opt-10.c: New test.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr24627.c b/gcc/testsuite/gcc.dg/tree-ssa/pr24627.c
new file mode 100644 (file)
index 0000000..011410c
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do run } */
+/* { dg-options "-O" } */
+
+extern void abort (void);
+typedef unsigned int u_int32;
+
+typedef struct {
+  union {u_int32 Xl_ui;} Ul_i;
+  union {u_int32 Xl_uf;} Ul_f;
+} l_fp;
+
+void
+dolfptoa (short ndec)
+{
+  l_fp work, ftmp;
+
+  work.Ul_i.Xl_ui = 0;
+  work.Ul_f.Xl_uf = 0x535f3d8;
+
+  while (ndec > 0)
+    {
+      u_int32 lo_tmp;
+      u_int32 hi_tmp;
+
+      ndec--;
+      work.Ul_i.Xl_ui = 0;
+      work.Ul_i.Xl_ui <<= 1;
+      if ((work.Ul_f.Xl_uf) & 0x80000000)
+       (work.Ul_i.Xl_ui) |= 0x1;
+      (work.Ul_f.Xl_uf) <<= 1;
+
+      ftmp = work;
+      (work.Ul_i.Xl_ui) <<= 1;
+      if ((work.Ul_f.Xl_uf) & 0x80000000)
+       (work.Ul_i.Xl_ui) |= 0x1;
+      (work.Ul_f.Xl_uf) <<= 1;
+
+      (work.Ul_i.Xl_ui) <<= 1;
+      if ((work.Ul_f.Xl_uf) & 0x80000000)
+       (work.Ul_i.Xl_ui) |= 0x1;
+      (work.Ul_f.Xl_uf) <<= 1;
+
+      lo_tmp = ((work.Ul_f.Xl_uf) & 0xffff) + ((ftmp.Ul_f.Xl_uf) & 0xffff);
+      hi_tmp = (((work.Ul_f.Xl_uf) >> 16) & 0xffff)
+               + (((ftmp.Ul_f.Xl_uf) >> 16) & 0xffff);
+
+      if (lo_tmp & 0x10000)
+       hi_tmp++;
+
+      (work.Ul_f.Xl_uf) = ((hi_tmp & 0xffff) << 16) | (lo_tmp & 0xffff);
+      (work.Ul_i.Xl_ui) += (ftmp.Ul_i.Xl_ui);
+
+      if (hi_tmp & 0x10000)
+       (work.Ul_i.Xl_ui)++;
+
+
+      if (!(work.Ul_i.Xl_ui < 10))
+       abort ();
+    }
+}
+
+int main()
+{
+  dolfptoa(6);
+  return 0;
+}
index ebdbc25..24738fe 100644 (file)
@@ -977,7 +977,7 @@ struct tree_opt_pass pass_dce =
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
   TODO_dump_func 
-    | TODO_update_ssa_no_phi 
+    | TODO_update_ssa
     | TODO_cleanup_cfg
     | TODO_ggc_collect
     | TODO_verify_ssa,                 /* todo_flags_finish */
@@ -998,7 +998,7 @@ struct tree_opt_pass pass_dce_loop =
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
   TODO_dump_func 
-    | TODO_update_ssa_no_phi 
+    | TODO_update_ssa
     | TODO_cleanup_cfg
     | TODO_verify_ssa,                 /* todo_flags_finish */
   0                                    /* letter */
@@ -1018,7 +1018,7 @@ struct tree_opt_pass pass_cd_dce =
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
   TODO_dump_func
-    | TODO_update_ssa_no_phi
+    | TODO_update_ssa
     | TODO_cleanup_cfg
     | TODO_ggc_collect
     | TODO_verify_ssa