]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/56461 (GCC is leaking lots of memory)
authorJakub Jelinek <jakub@redhat.com>
Wed, 27 Feb 2013 22:06:21 +0000 (23:06 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 27 Feb 2013 22:06:21 +0000 (23:06 +0100)
PR middle-end/56461
* tree-vect-data-refs.c (vect_permute_load_chain): Avoid using copy
method on dr_chain and result_chain.

From-SVN: r196325

gcc/ChangeLog
gcc/tree-vect-data-refs.c

index 7cc49fa929ed149dd6148272dc35b068e496dee4..08fd6b81a27a39e5597d57afefb6ca5c8a075da9 100644 (file)
@@ -1,5 +1,9 @@
 2013-02-27  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/56461
+       * tree-vect-data-refs.c (vect_permute_load_chain): Avoid using copy
+       method on dr_chain and result_chain.
+
        PR middle-end/56461
        * tree-ssa-loop-niter.c (maybe_lower_iteration_bound): Call
        pointer_set_destroy on not_executed_last_iteration.
index 74d8c3a41fa97dc230a3cd5e5bb564afe297a284..bf5a7b7731ff9a02c4169ae4b017031c3df88316 100644 (file)
@@ -4673,7 +4673,9 @@ vect_permute_load_chain (vec<tree> dr_chain,
   unsigned nelt = TYPE_VECTOR_SUBPARTS (vectype);
   unsigned char *sel = XALLOCAVEC (unsigned char, nelt);
 
-  *result_chain = dr_chain.copy ();
+  result_chain->quick_grow (length);
+  memcpy (result_chain->address (), dr_chain.address (),
+         length * sizeof (tree));
 
   for (i = 0; i < nelt; ++i)
     sel[i] = i * 2;
@@ -4708,7 +4710,8 @@ vect_permute_load_chain (vec<tree> dr_chain,
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          (*result_chain)[j/2+length/2] = data_ref;
        }
-      dr_chain = result_chain->copy ();
+      memcpy (dr_chain.address (), result_chain->address (),
+             length * sizeof (tree));
     }
 }