diff options
author | Laurynas Biveinis <laurynas.biveinis@gmail.com> | 2007-07-26 01:25:25 +0000 |
---|---|---|
committer | Laurynas Biveinis <laurynas.biveinis@gmail.com> | 2007-07-26 01:25:25 +0000 |
commit | f69451e25a798749b3a2eb17b11df3fb6b04b597 (patch) | |
tree | 75d80ff3c62724e8f4ecd22408607055091d173b | |
parent | 6edddb136698ac6f531ad2582b61aad6d9e35b17 (diff) |
Move some objects from GC to obstack in lambda-code.c
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/boehms-gc@126944 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/Makefile.in | 4 | ||||
-rw-r--r-- | gcc/lambda-code.c | 132 | ||||
-rw-r--r-- | gcc/lambda.h | 23 | ||||
-rw-r--r-- | gcc/tree-loop-linear.c | 11 |
4 files changed, 103 insertions, 67 deletions
diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 9dd1b78f500..aa4feaf99b3 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -805,7 +805,7 @@ PRETTY_PRINT_H = pretty-print.h input.h $(OBSTACK_H) DIAGNOSTIC_H = diagnostic.h diagnostic.def $(PRETTY_PRINT_H) options.h C_PRETTY_PRINT_H = c-pretty-print.h $(PRETTY_PRINT_H) $(C_COMMON_H) $(TREE_H) SCEV_H = tree-scalar-evolution.h $(GGC_H) tree-chrec.h $(PARAMS_H) -LAMBDA_H = lambda.h $(TREE_H) vec.h $(GGC_H) +LAMBDA_H = lambda.h $(TREE_H) vec.h $(GGC_H) $(OBSTACK_H) TREE_DATA_REF_H = tree-data-ref.h $(LAMBDA_H) VARRAY_H = varray.h $(MACHMODE_H) $(SYSTEM_H) coretypes.h $(TM_H) TREE_INLINE_H = tree-inline.h varray.h $(SPLAY_TREE_H) @@ -2623,7 +2623,7 @@ lambda-mat.o : lambda-mat.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \ lambda-trans.o: lambda-trans.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \ $(TM_H) coretypes.h $(TARGET_H) $(TREE_H) lambda-code.o: lambda-code.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \ - $(TM_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) \ + $(TM_H) $(OPTABS_H) $(OBSTACK_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) \ $(DIAGNOSTIC_H) $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) $(CFGLOOP_H) \ $(TREE_DATA_REF_H) $(SCEV_H) $(EXPR_H) coretypes.h $(TARGET_H) \ tree-chrec.h tree-pass.h vec.h vecprim.h diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c index 2a03fd31cd5..4158d914eef 100644 --- a/gcc/lambda-code.c +++ b/gcc/lambda-code.c @@ -34,6 +34,7 @@ #include "timevar.h" #include "cfgloop.h" #include "expr.h" +#include "obstack.h" #include "optabs.h" #include "tree-chrec.h" #include "tree-data-ref.h" @@ -143,8 +144,9 @@ typedef struct static bool lle_equal (lambda_linear_expression, lambda_linear_expression, int, int); -static lambda_lattice lambda_lattice_new (int, int); -static lambda_lattice lambda_lattice_compute_base (lambda_loopnest); +static lambda_lattice lambda_lattice_new (int, int, struct obstack *); +static lambda_lattice lambda_lattice_compute_base (lambda_loopnest, + struct obstack *); static tree find_induction_var_from_exit_cond (struct loop *); static bool can_convert_to_perfect_nest (struct loop *); @@ -152,11 +154,11 @@ static bool can_convert_to_perfect_nest (struct loop *); /* Create a new lambda body vector. */ lambda_body_vector -lambda_body_vector_new (int size) +lambda_body_vector_new (int size, struct obstack *lambda_obstack) { lambda_body_vector ret; - ret = ggc_alloc (sizeof (*ret)); + ret = (lambda_body_vector)obstack_alloc (lambda_obstack, sizeof (*ret)); LBV_COEFFICIENTS (ret) = lambda_vector_new (size); LBV_SIZE (ret) = size; LBV_DENOMINATOR (ret) = 1; @@ -168,7 +170,8 @@ lambda_body_vector_new (int size) lambda_body_vector lambda_body_vector_compute_new (lambda_trans_matrix transform, - lambda_body_vector vect) + lambda_body_vector vect, + struct obstack *lambda_obstack) { lambda_body_vector temp; int depth; @@ -178,7 +181,7 @@ lambda_body_vector_compute_new (lambda_trans_matrix transform, depth = LTM_ROWSIZE (transform); - temp = lambda_body_vector_new (depth); + temp = lambda_body_vector_new (depth, lambda_obstack); LBV_DENOMINATOR (temp) = LBV_DENOMINATOR (vect) * LTM_DENOMINATOR (transform); lambda_vector_matrix_mult (LBV_COEFFICIENTS (vect), depth, @@ -224,11 +227,14 @@ lle_equal (lambda_linear_expression lle1, lambda_linear_expression lle2, of invariants INVARIANTS. */ lambda_linear_expression -lambda_linear_expression_new (int dim, int invariants) +lambda_linear_expression_new (int dim, int invariants, + struct obstack * lambda_obstack) { lambda_linear_expression ret; - ret = ggc_alloc_cleared (sizeof (*ret)); + ret = (lambda_linear_expression)obstack_alloc (lambda_obstack, + sizeof (*ret)); + memset (ret, 0, sizeof (*ret)); LLE_COEFFICIENTS (ret) = lambda_vector_new (dim); LLE_CONSTANT (ret) = 0; @@ -326,12 +332,14 @@ print_lambda_loop (FILE * outfile, lambda_loop loop, int depth, number of invariants. */ lambda_loopnest -lambda_loopnest_new (int depth, int invariants) +lambda_loopnest_new (int depth, int invariants, struct obstack *lambda_obstack) { lambda_loopnest ret; - ret = ggc_alloc (sizeof (*ret)); + ret = (lambda_loopnest)obstack_alloc (lambda_obstack, sizeof (*ret)); - LN_LOOPS (ret) = ggc_alloc_cleared (depth * sizeof (lambda_loop)); + LN_LOOPS (ret) = (lambda_loop *)obstack_alloc (lambda_obstack, + sizeof (struct lambda_loop_s)); + memset (LN_LOOPS (ret), 0, sizeof (struct lambda_loop_s)); LN_DEPTH (ret) = depth; LN_INVARIANTS (ret) = invariants; @@ -358,10 +366,10 @@ print_lambda_loopnest (FILE * outfile, lambda_loopnest nest, char start) of invariants. */ static lambda_lattice -lambda_lattice_new (int depth, int invariants) +lambda_lattice_new (int depth, int invariants, struct obstack *lambda_obstack) { - lambda_lattice ret; - ret = ggc_alloc (sizeof (*ret)); + lambda_lattice ret = (lambda_lattice)obstack_alloc (lambda_obstack, + sizeof (*ret)); LATTICE_BASE (ret) = lambda_matrix_new (depth, depth); LATTICE_ORIGIN (ret) = lambda_vector_new (depth); LATTICE_ORIGIN_INVARIANTS (ret) = lambda_matrix_new (depth, invariants); @@ -378,7 +386,8 @@ lambda_lattice_new (int depth, int invariants) identity matrix) if NEST is a sparse space. */ static lambda_lattice -lambda_lattice_compute_base (lambda_loopnest nest) +lambda_lattice_compute_base (lambda_loopnest nest, + struct obstack *lambda_obstack) { lambda_lattice ret; int depth, invariants; @@ -391,7 +400,7 @@ lambda_lattice_compute_base (lambda_loopnest nest) depth = LN_DEPTH (nest); invariants = LN_INVARIANTS (nest); - ret = lambda_lattice_new (depth, invariants); + ret = lambda_lattice_new (depth, invariants, lambda_obstack); base = LATTICE_BASE (ret); for (i = 0; i < depth; i++) { @@ -475,13 +484,14 @@ lcm (int a, int b) A, B, and a are the coefficient matrix, invariant coefficient, and a vector of constants, respectively. */ -static lambda_loopnest +static lambda_loopnest compute_nest_using_fourier_motzkin (int size, - int depth, - int invariants, - lambda_matrix A, - lambda_matrix B, - lambda_vector a) + int depth, + int invariants, + lambda_matrix A, + lambda_matrix B, + lambda_vector a, + struct obstack *lambda_obstack) { int multiple, f1, f2; @@ -497,7 +507,7 @@ compute_nest_using_fourier_motzkin (int size, B1 = lambda_matrix_new (128, invariants); a1 = lambda_vector_new (128); - auxillary_nest = lambda_loopnest_new (depth, invariants); + auxillary_nest = lambda_loopnest_new (depth, invariants, lambda_obstack); for (i = depth - 1; i >= 0; i--) { @@ -510,8 +520,9 @@ compute_nest_using_fourier_motzkin (int size, if (A[j][i] < 0) { /* Any linear expression in the matrix with a coefficient less - than 0 becomes part of the new lower bound. */ - expression = lambda_linear_expression_new (depth, invariants); + than 0 becomes part of the new lower bound. */ + expression = lambda_linear_expression_new (depth, invariants, + lambda_obstack); for (k = 0; k < i; k++) LLE_COEFFICIENTS (expression)[k] = A[j][k]; @@ -534,8 +545,9 @@ compute_nest_using_fourier_motzkin (int size, else if (A[j][i] > 0) { /* Any linear expression with a coefficient greater than 0 - becomes part of the new upper bound. */ - expression = lambda_linear_expression_new (depth, invariants); + becomes part of the new upper bound. */ + expression = lambda_linear_expression_new (depth, invariants, + lambda_obstack); for (k = 0; k < i; k++) LLE_COEFFICIENTS (expression)[k] = -1 * A[j][k]; @@ -627,7 +639,8 @@ compute_nest_using_fourier_motzkin (int size, static lambda_loopnest lambda_compute_auxillary_space (lambda_loopnest nest, - lambda_trans_matrix trans) + lambda_trans_matrix trans, + struct obstack *lambda_obstack) { lambda_matrix A, B, A1, B1; lambda_vector a, a1; @@ -725,7 +738,7 @@ lambda_compute_auxillary_space (lambda_loopnest nest, /* Compute the lattice base x = base * y + origin, where y is the base space. */ - lattice = lambda_lattice_compute_base (nest); + lattice = lambda_lattice_compute_base (nest, lambda_obstack); /* Ax <= a + B then becomes ALy <= a+B - A*origin. L is the lattice base */ @@ -754,7 +767,7 @@ lambda_compute_auxillary_space (lambda_loopnest nest, lambda_matrix_mult (A1, invertedtrans, A, size, depth, depth); return compute_nest_using_fourier_motzkin (size, depth, invariants, - A, B1, a1); + A, B1, a1, lambda_obstack); } /* Compute the loop bounds for the target space, using the bounds of @@ -767,7 +780,8 @@ lambda_compute_auxillary_space (lambda_loopnest nest, static lambda_loopnest lambda_compute_target_space (lambda_loopnest auxillary_nest, - lambda_trans_matrix H, lambda_vector stepsigns) + lambda_trans_matrix H, lambda_vector stepsigns, + struct obstack * lambda_obstack) { lambda_matrix inverse, H1; int determinant, i, j; @@ -798,7 +812,7 @@ lambda_compute_target_space (lambda_loopnest auxillary_nest, target = lambda_matrix_new (depth, depth); lambda_matrix_mult (H1, inverse, target, depth, depth, depth); - target_nest = lambda_loopnest_new (depth, invariants); + target_nest = lambda_loopnest_new (depth, invariants, lambda_obstack); for (i = 0; i < depth; i++) { @@ -817,7 +831,8 @@ lambda_compute_target_space (lambda_loopnest auxillary_nest, for (j = 0; j < i; j++) target[i][j] = target[i][j] / gcd1; - expression = lambda_linear_expression_new (depth, invariants); + expression = lambda_linear_expression_new (depth, invariants, + lambda_obstack); lambda_vector_copy (target[i], LLE_COEFFICIENTS (expression), depth); LLE_DENOMINATOR (expression) = determinant / gcd1; LLE_CONSTANT (expression) = 0; @@ -840,7 +855,8 @@ lambda_compute_target_space (lambda_loopnest auxillary_nest, for (; auxillary_expr != NULL; auxillary_expr = LLE_NEXT (auxillary_expr)) { - target_expr = lambda_linear_expression_new (depth, invariants); + target_expr = lambda_linear_expression_new (depth, invariants, + lambda_obstack); lambda_vector_matrix_mult (LLE_COEFFICIENTS (auxillary_expr), depth, inverse, depth, LLE_COEFFICIENTS (target_expr)); @@ -897,7 +913,8 @@ lambda_compute_target_space (lambda_loopnest auxillary_nest, for (; auxillary_expr != NULL; auxillary_expr = LLE_NEXT (auxillary_expr)) { - target_expr = lambda_linear_expression_new (depth, invariants); + target_expr = lambda_linear_expression_new (depth, invariants, + lambda_obstack); lambda_vector_matrix_mult (LLE_COEFFICIENTS (auxillary_expr), depth, inverse, depth, LLE_COEFFICIENTS (target_expr)); @@ -1022,7 +1039,8 @@ lambda_compute_step_signs (lambda_trans_matrix trans, lambda_vector stepsigns) triangular portion. */ lambda_loopnest -lambda_loopnest_transform (lambda_loopnest nest, lambda_trans_matrix trans) +lambda_loopnest_transform (lambda_loopnest nest, lambda_trans_matrix trans, + struct obstack *lambda_obstack) { lambda_loopnest auxillary_nest, target_nest; @@ -1051,7 +1069,7 @@ lambda_loopnest_transform (lambda_loopnest nest, lambda_trans_matrix trans) } /* Compute the lattice base. */ - lattice = lambda_lattice_compute_base (nest); + lattice = lambda_lattice_compute_base (nest, lambda_obstack); trans1 = lambda_trans_matrix_new (depth, depth); /* Multiply the transformation matrix by the lattice base. */ @@ -1067,7 +1085,7 @@ lambda_loopnest_transform (lambda_loopnest nest, lambda_trans_matrix trans) /* Compute the auxiliary loop nest's space from the unimodular portion. */ - auxillary_nest = lambda_compute_auxillary_space (nest, U); + auxillary_nest = lambda_compute_auxillary_space (nest, U, lambda_obstack); /* Compute the loop step signs from the old step signs and the transformation matrix. */ @@ -1075,7 +1093,8 @@ lambda_loopnest_transform (lambda_loopnest nest, lambda_trans_matrix trans) /* Compute the target loop nest space from the auxiliary nest and the lower triangular matrix H. */ - target_nest = lambda_compute_target_space (auxillary_nest, H, stepsigns); + target_nest = lambda_compute_target_space (auxillary_nest, H, stepsigns, + lambda_obstack); origin = lambda_vector_new (depth); origin_invariants = lambda_matrix_new (depth, invariants); lambda_matrix_vector_mult (LTM_MATRIX (trans), depth, depth, @@ -1113,14 +1132,15 @@ lambda_loopnest_transform (lambda_loopnest nest, lambda_trans_matrix trans) static lambda_linear_expression gcc_tree_to_linear_expression (int depth, tree expr, VEC(tree,heap) *outerinductionvars, - VEC(tree,heap) *invariants, int extra) + VEC(tree,heap) *invariants, int extra, + struct obstack *lambda_obstack) { lambda_linear_expression lle = NULL; switch (TREE_CODE (expr)) { case INTEGER_CST: { - lle = lambda_linear_expression_new (depth, 2 * depth); + lle = lambda_linear_expression_new (depth, 2 * depth, lambda_obstack); LLE_CONSTANT (lle) = TREE_INT_CST_LOW (expr); if (extra != 0) LLE_CONSTANT (lle) += extra; @@ -1137,7 +1157,8 @@ gcc_tree_to_linear_expression (int depth, tree expr, { if (SSA_NAME_VAR (iv) == SSA_NAME_VAR (expr)) { - lle = lambda_linear_expression_new (depth, 2 * depth); + lle = lambda_linear_expression_new (depth, 2 * depth, + lambda_obstack); LLE_COEFFICIENTS (lle)[i] = 1; if (extra != 0) LLE_CONSTANT (lle) = extra; @@ -1150,7 +1171,8 @@ gcc_tree_to_linear_expression (int depth, tree expr, { if (SSA_NAME_VAR (invar) == SSA_NAME_VAR (expr)) { - lle = lambda_linear_expression_new (depth, 2 * depth); + lle = lambda_linear_expression_new (depth, 2 * depth, + lambda_obstack); LLE_INVARIANT_COEFFICIENTS (lle)[i] = 1; if (extra != 0) LLE_CONSTANT (lle) = extra; @@ -1213,7 +1235,8 @@ gcc_loop_to_lambda_loop (struct loop *loop, int depth, VEC(tree,heap) * outerinductionvars, VEC(tree,heap) ** lboundvars, VEC(tree,heap) ** uboundvars, - VEC(int,heap) ** steps) + VEC(int,heap) ** steps, + struct obstack *lambda_obstack) { tree phi; tree exit_cond; @@ -1338,14 +1361,14 @@ gcc_loop_to_lambda_loop (struct loop *loop, int depth, lboundvar = PHI_ARG_DEF (phi, 1); lbound = gcc_tree_to_linear_expression (depth, lboundvar, outerinductionvars, *invariants, - 0); + 0, lambda_obstack); } else { lboundvar = PHI_ARG_DEF (phi, 0); lbound = gcc_tree_to_linear_expression (depth, lboundvar, outerinductionvars, *invariants, - 0); + 0, lambda_obstack); } if (!lbound) @@ -1393,7 +1416,7 @@ gcc_loop_to_lambda_loop (struct loop *loop, int depth, ubound = gcc_tree_to_linear_expression (depth, uboundvar, outerinductionvars, - *invariants, extra); + *invariants, extra, lambda_obstack); uboundresult = build2 (PLUS_EXPR, TREE_TYPE (uboundvar), uboundvar, build_int_cst (TREE_TYPE (uboundvar), extra)); VEC_safe_push (tree, heap, *uboundvars, uboundresult); @@ -1460,7 +1483,8 @@ lambda_loopnest gcc_loopnest_to_lambda_loopnest (struct loops *currloops, struct loop *loop_nest, VEC(tree,heap) **inductionvars, - VEC(tree,heap) **invariants) + VEC(tree,heap) **invariants, + struct obstack *lambda_obstack) { lambda_loopnest ret = NULL; struct loop *temp = loop_nest; @@ -1482,7 +1506,7 @@ gcc_loopnest_to_lambda_loopnest (struct loops *currloops, newloop = gcc_loop_to_lambda_loop (temp, depth, invariants, &inductionvar, *inductionvars, &lboundvars, &uboundvars, - &steps); + &steps, lambda_obstack); if (!newloop) goto fail; @@ -1506,7 +1530,7 @@ gcc_loopnest_to_lambda_loopnest (struct loops *currloops, "Successfully converted loop nest to perfect loop nest.\n"); } - ret = lambda_loopnest_new (depth, 2 * depth); + ret = lambda_loopnest_new (depth, 2 * depth, lambda_obstack); for (i = 0; VEC_iterate (lambda_loop, loops, i, newloop); i++) LN_LOOPS (ret)[i] = newloop; @@ -1808,7 +1832,8 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest, VEC(tree,heap) *old_ivs, VEC(tree,heap) *invariants, lambda_loopnest new_loopnest, - lambda_trans_matrix transform) + lambda_trans_matrix transform, + struct obstack *lambda_obstack) { struct loop *temp; size_t i = 0; @@ -1951,10 +1976,11 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest, /* Compute the new expression for the induction variable. */ depth = VEC_length (tree, new_ivs); - lbv = lambda_body_vector_new (depth); + lbv = lambda_body_vector_new (depth, lambda_obstack); LBV_COEFFICIENTS (lbv)[i] = 1; - newlbv = lambda_body_vector_compute_new (transform, lbv); + newlbv = lambda_body_vector_compute_new (transform, lbv, + lambda_obstack); newiv = lbv_to_gcc_expression (newlbv, TREE_TYPE (oldiv), new_ivs, &stmts); diff --git a/gcc/lambda.h b/gcc/lambda.h index 5eb63997c0d..c55aff895f3 100644 --- a/gcc/lambda.h +++ b/gcc/lambda.h @@ -22,6 +22,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #ifndef LAMBDA_H #define LAMBDA_H +#include "obstack.h" #include "vec.h" /* An integer vector. A vector formally consists of an element of a vector @@ -98,7 +99,8 @@ typedef struct lambda_linear_expression_s #define LLE_DENOMINATOR(T) ((T)->denominator) #define LLE_NEXT(T) ((T)->next) -lambda_linear_expression lambda_linear_expression_new (int, int); +lambda_linear_expression lambda_linear_expression_new (int, int, + struct obstack *); void print_lambda_linear_expression (FILE *, lambda_linear_expression, int, int, char); @@ -138,8 +140,10 @@ typedef struct #define LN_DEPTH(T) ((T)->depth) #define LN_INVARIANTS(T) ((T)->invariants) -lambda_loopnest lambda_loopnest_new (int, int); -lambda_loopnest lambda_loopnest_transform (lambda_loopnest, lambda_trans_matrix); +lambda_loopnest lambda_loopnest_new (int, int, struct obstack *); +lambda_loopnest lambda_loopnest_transform (lambda_loopnest, + lambda_trans_matrix, + struct obstack *); struct loop; struct loops; bool perfect_nest_p (struct loop *); @@ -192,17 +196,20 @@ void lambda_matrix_vector_mult (lambda_matrix, int, int, lambda_vector, lambda_vector); bool lambda_trans_matrix_id_p (lambda_trans_matrix); -lambda_body_vector lambda_body_vector_new (int); -lambda_body_vector lambda_body_vector_compute_new (lambda_trans_matrix, - lambda_body_vector); +lambda_body_vector lambda_body_vector_new (int, struct obstack *); +lambda_body_vector lambda_body_vector_compute_new (lambda_trans_matrix, + lambda_body_vector, + struct obstack *); void print_lambda_body_vector (FILE *, lambda_body_vector); lambda_loopnest gcc_loopnest_to_lambda_loopnest (struct loops *, struct loop *, VEC(tree,heap) **, - VEC(tree,heap) **); + VEC(tree,heap) **, + struct obstack *); void lambda_loopnest_to_gcc_loopnest (struct loop *, VEC(tree,heap) *, VEC(tree,heap) *, - lambda_loopnest, lambda_trans_matrix); + lambda_loopnest, lambda_trans_matrix, + struct obstack *); static inline void lambda_vector_negate (lambda_vector, lambda_vector, int); diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c index e0f5bd2991b..be8f3f347de 100644 --- a/gcc/tree-loop-linear.c +++ b/gcc/tree-loop-linear.c @@ -245,7 +245,9 @@ linear_transform_loops (struct loops *loops) unsigned int i; VEC(tree,heap) *oldivs = NULL; VEC(tree,heap) *invariants = NULL; - + struct obstack lambda_obstack; + gcc_obstack_init (&lambda_obstack); + for (i = 1; i < loops->num; i++) { unsigned int depth = 0; @@ -320,7 +322,7 @@ linear_transform_loops (struct loops *loops) } before = gcc_loopnest_to_lambda_loopnest (loops, loop_nest, &oldivs, - &invariants); + &invariants, &lambda_obstack); if (!before) continue; @@ -331,7 +333,7 @@ linear_transform_loops (struct loops *loops) print_lambda_loopnest (dump_file, before, 'i'); } - after = lambda_loopnest_transform (before, trans); + after = lambda_loopnest_transform (before, trans, &lambda_obstack); if (dump_file) { @@ -340,7 +342,8 @@ linear_transform_loops (struct loops *loops) } lambda_loopnest_to_gcc_loopnest (loop_nest, oldivs, invariants, - after, trans); + after, trans, &lambda_obstack); + obstack_free (&lambda_obstack, NULL); modified = true; if (dump_file) |