tree-sra.c (decide_block_copy): Disable scalarization of sub-elements.
authorDevang Patel <dpatel@apple.com>
Thu, 31 Mar 2005 00:58:26 +0000 (16:58 -0800)
committerDevang Patel <dpatel@gcc.gnu.org>
Thu, 31 Mar 2005 00:58:26 +0000 (16:58 -0800)
     * tree-sra.c (decide_block_copy): Disable scalarization of sub-elements.
     * g++.dg/tree-sra/ssa-sra-3.C: New test.

From-SVN: r97301

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/ssa-sra-3.C [new file with mode: 0644]
gcc/tree-sra.c

index dd95c1b2ecdec4795f20411bf121c0f7ca1c6a8c..f144088d9e6e40a7d4ed3d8f7e033bd511a4c0b0 100644 (file)
@@ -1,3 +1,7 @@
+2005-03-29  Devang Patel  <dpatel@apple.com>
+
+       * tree-sra.c (decide_block_copy): Disable scalarization of sub-elements.
+       
 2005-03-30  Stuart Hastings  <stuart@apple.com>
            Dale Johannesen  <dalej@apple.com>
 
index 13fa5ac5a35dfc2d5e70297b5a8a326611a159a4..a02d78e5a0755893e1d8c355cca79341df7f179e 100644 (file)
@@ -1,3 +1,7 @@
+2005-03-30  Devang Patel  <dpatel@apple.com>
+
+       * g++.dg/tree-sra/ssa-sra-3.C: New test.
+
 2005-03-30  Dale Johannesen  <dalej@apple.com>
 
        * gcc.dg/20020919-1.c:  Remove unnecessary conditional.
diff --git a/gcc/testsuite/g++.dg/tree-ssa/ssa-sra-3.C b/gcc/testsuite/g++.dg/tree-ssa/ssa-sra-3.C
new file mode 100644 (file)
index 0000000..2a2d89c
--- /dev/null
@@ -0,0 +1,83 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* Test check use_block_copy bit propagation in sra element hierarchy.  */
+
+typedef unsigned char UINT8 ;
+typedef unsigned int UINT ;
+class C4
+{
+public:
+  int xy[2];
+};
+
+class C3
+{
+public:
+  inline void
+  Reset()
+  {
+    C4 const mvMax = {0x7fff, 0x7fff};
+
+    m42(0,mvMax); 
+    m42(1,mvMax);
+    m43(0);
+  };
+
+  inline void m42 (UINT  i, C4 mv)
+  {
+    mMv[i] = mv;
+  };
+
+
+
+  inline void  m43(UINT j)
+  {
+    m44 (j);
+    d41 = j + 1;
+  };
+
+private:
+
+  C4 mMv[2];
+  UINT8 d41;
+  inline void m44 (UINT j) const {};
+};
+
+class C2
+{
+private:
+  bool valid;
+};
+
+class C1
+{
+public:
+  void m1(C3 *c);
+
+private:
+  const C2 * d1[2];
+  void m2(C3 *m);
+};                                                                                                                                                                           
+
+void C1::m1 (C3 *r)
+{
+  C3 x;
+  m2(&x);
+}
+void C1::m2(C3 *x)
+{
+  C3 m3;
+  int i;
+  m3.Reset ();
+  for(i=0; i<2; i++)
+    {
+      const C2 * r = d1[i];
+      if (r!=__null)
+        {
+         C4 const c400 = {0,0};
+          m3.m42 (i, c400);
+         
+        }
+    }
+}   
+
index f8aeebe573e71e69a30ec4f1d0ff896b5ee08e11..2fb23bd6022eca5276935b34b89c8954a681ea77 100644 (file)
@@ -1299,6 +1299,12 @@ decide_block_copy (struct sra_elt *elt)
          fputc ('\n', dump_file);
        }
 
+      /* Disable scalarization of sub-elements */
+      for (c = elt->children; c; c = c->sibling)
+       {
+         c->cannot_scalarize = 1;
+         decide_block_copy (c);
+       }
       return false;
     }