OSDN Git Service

2007-07-03 Daniel Berlin <dberlin@dberlin.org>
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jul 2007 12:55:13 +0000 (12:55 +0000)
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jul 2007 12:55:13 +0000 (12:55 +0000)
* tree-ssa-sccvn.c (set_ssa_val_to): Check for operand_equal_p
before declaring inequality.

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/ssa-pre-1.c [new file with mode: 0644]
gcc/tree-ssa-sccvn.c

index b21e230..d8ed672 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-03  Daniel Berlin  <dberlin@dberlin.org>
+
+       * tree-ssa-sccvn.c (set_ssa_val_to): Check for operand_equal_p
+       before declaring inequality.
+
 2007-07-03  Rask Ingemann Lambertsen  <rask@sygehus.dk>
 
        * combine.c (recog_for_combine): Log the success or failure of
index 1d3db36..609643e 100644 (file)
@@ -1,3 +1,7 @@
+2007-07-02  Daniel Berlin  <dberlin@dberlin.org>
+
+       * gcc.c-torture/compile/ssa-pre-1.c: New test.
+
 2007-07-03  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/20888
diff --git a/gcc/testsuite/gcc.c-torture/compile/ssa-pre-1.c b/gcc/testsuite/gcc.c-torture/compile/ssa-pre-1.c
new file mode 100644 (file)
index 0000000..eda370d
--- /dev/null
@@ -0,0 +1,19 @@
+void washQtoM3(double m[9], double q[4]);
+double sqrt(double);
+int f(int samp)
+{
+      double clp[2], xyz[3], q[4], len;
+      double mRF[9];
+      int xi;
+      for (xi=0; xi<samp; xi++)
+           {
+                   q[0] = 1.0;
+                   q[1] = ( ((double)(1)-(-1))*((double)((float)xi)-(-0.5)) / ((double)(samp-0.5)-(-0.5)) + (-1));
+                   q[2] = ( ((double)(1)-(-1))*((double)((float)0)-(-0.5)) / ((double)(samp-0.5)-(-0.5)) + (-1));
+                   q[3] = ( ((double)(1)-(-1))*((double)((float)0)-(-0.5)) / ((double)(samp-0.5)-(-0.5)) + (-1));
+                   len = (sqrt((((q))[0]*((q))[0] + ((q))[1]*((q))[1] + ((q))[2]*((q))[2] + ((q))[3]*((q))[3])));
+                 ((q)[0] = (q)[0]*1.0/len, (q)[1] = (q)[1]*1.0/len, (q)[2] = (q)[2]*1.0/len, (q)[3] = (q)[3]*1.0/len);
+                washQtoM3(mRF, q);
+                     }
+      return 0;
+}
index b0db122..0f08229 100644 (file)
@@ -1014,6 +1014,7 @@ print_scc (FILE *out, VEC (tree, heap) *scc)
 static inline bool
 set_ssa_val_to (tree from, tree to)
 {
+  tree currval;
   gcc_assert (to != NULL);
 
   /* Make sure we don't create chains of copies, so that we get the
@@ -1037,7 +1038,9 @@ set_ssa_val_to (tree from, tree to)
       fprintf (dump_file, "\n");
     }
 
-  if (SSA_VAL (from) != to)
+  currval = SSA_VAL (from);
+
+  if (currval != to  && !operand_equal_p (currval, to, OEP_PURE_SAME))
     {
       SSA_VAL (from) = to;
       return true;