This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] [loop] Move various lambda* types to obstack out of GC


(Most of description is copy pasted from the similar C parser patch I
just posted)

Variables of types lambda_trans_matrix, lambda_matrix, lambda_loop,
struct access_matrix
are allocated by GC while GC machinery in fact knows nothing about
them, since there are no paths from any GC root to any such variable.
This happens to work as a sort of short lifetime scratch allocation
with the current GC implementation: such objects are collected on the
next ggc_collect call. However this is an unsupported GC
implementation detail and a hindrance for any GC changes.

I put those objects in an obstack instead. In some places they were
already used (tree-loop-linear.c:linear_transform_loops). A big part
of the patch is
related to just passing down a pointer to the obstack from the
function which defines life time for these objects
(tree-parloops.c:parallelize_loops,
tree-data-ref.c:analyze_subscript_affine_affine) to the functions
which do the actual allocation
(lambda-trans.c:lambda_trans_matrix_new,
lambda-mat.c:lambda_matrix_new, lambda-code.c:build_access_matrix)
with quite a few intermediate
functions. In some places there were obstacks already used.

lambda_loop_new was a macro in lambda.h. Since it was only used in
lambda-code.c, I made it a static function there. Also I have removed
unused static functions in lambda-mat.c: lambda_matrix_get_column and
lambda_matrix_project_to_null.

This patch was in gc-improv branch for a few months and was tested
virtually on all the different architectures compile farm has together
with the rest of the branch.

Now bootstrapped/regtested on x86_64/linux together with the rest of
today's patches.

OK for trunk?

2010-04-21  Laurynas Biveinis  <laurynas.biveinis@gmail.com>

	* tree-parloops.c (loop_parallel_p): New argument
	parloop_obstack.  Pass it down.
	(parallelize_loops): New variable parloop_obstack.  Initialize it,
	pass it down, free it.

	* tree-loop-linear.c (linear_transform_loops): Pass down
	lambda_obstack.

	* tree-data-ref.h (lambda_compute_access_matrices): New argument
	of type struct obstack *.

	* tree-data-ref.c (analyze_subscript_affine_affine): New variable
	scratch_obstack.  Initialize it, pass down, free it.

	* lambda.h (lambda_loop_new): Remove.
	(lambda_matrix_new, lambda_matrix_inverse)
	(lambda_trans_matrix_new, lambda_trans_matrix_inverse): New
	argument of type struct obstack *.

	* lambda-trans.c (lambda_trans_matrix_new): New argument
	lambda_obstack.  Pass it down, use obstack allocation for ret.
	(lambda_trans_matrix_inverse): New argument lambda_obstack.  Pass
	it down.

	* lambda-mat.c (lambda_matrix_get_column)
	(lambda_matrix_project_to_null): Remove.
	(lambda_matrix_new): New argument lambda_obstack.  Use obstack
	allocation for mat.
	(lambda_matrix_inverse_hard, lambda_matrix_inverse): New argument
	lambda_obstack.

	* lambda-code.c (lambda_loop_new): New function.
	(lambda_lattice_new, compute_nest_using_fourier_motzkin)
	(lambda_compute_auxillary_space, lambda_compute_target_space)
	(lambda_loopnest_transform, gcc_loop_to_lambda_loop)
	(lambda_loopnest_to_gcc_loopnest): Pass down lambda_obstack.
	(build_access_matrix): New argument lambda_obstack.  Use obstack
	allocation for am.
	(lambda_compute_step_signs, lambda_compute_access_matrices): New
	argument lambda_obstack.  Pass it down.

-- 
Laurynas

Attachment: loop-obstack.patch
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]