From b61ea03d2dc7cb1852d1cf401a22f1f6935972ad Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 7 Jan 2008 14:49:36 +0000 Subject: [PATCH] re PR tree-optimization/34683 (SSA rewriting in the loop unroller causes quadratic behavior) 2008-01-07 Richard Guenther PR tree-optimization/34683 * tree-ssa-sccvn.c (vuses_to_vec): Pre-allocate the vector of VOPs of the needed size to save memory. Use VEC_quick_push to save compile-time. (vdefs_to_vec): Likewise. From-SVN: r131375 --- gcc/ChangeLog | 9 +++++++++ gcc/tree-ssa-sccvn.c | 8 ++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 446b03b33ed..4ec6bff6fa5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,13 @@ +2008-01-07 Richard Guenther + + PR tree-optimization/34683 + * tree-ssa-sccvn.c (vuses_to_vec): Pre-allocate the vector of + VOPs of the needed size to save memory. Use VEC_quick_push + to save compile-time. + (vdefs_to_vec): Likewise. + 2008-01-07 Sa Liu + * config/spu/spu.md (divdf3): Genetate inline code for double division. The implementation doesn't handle INF or NAN, therefore it only applies when -ffinite-math-only is given. diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index a14c2a749cf..035c81120b8 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -389,8 +389,10 @@ vuses_to_vec (tree stmt, VEC (tree, gc) **result) if (!stmt) return; + *result = VEC_alloc (tree, gc, num_ssa_operands (stmt, SSA_OP_VIRTUAL_USES)); + FOR_EACH_SSA_TREE_OPERAND (vuse, stmt, iter, SSA_OP_VIRTUAL_USES) - VEC_safe_push (tree, gc, *result, vuse); + VEC_quick_push (tree, *result, vuse); if (VEC_length (tree, *result) > 1) sort_vuses (*result); @@ -421,8 +423,10 @@ vdefs_to_vec (tree stmt, VEC (tree, gc) **result) if (!stmt) return; + *result = VEC_alloc (tree, gc, num_ssa_operands (stmt, SSA_OP_VIRTUAL_DEFS)); + FOR_EACH_SSA_TREE_OPERAND (vdef, stmt, iter, SSA_OP_VIRTUAL_DEFS) - VEC_safe_push (tree, gc, *result, vdef); + VEC_quick_push (tree, *result, vdef); if (VEC_length (tree, *result) > 1) sort_vuses (*result);