diff options
author | Laurynas Biveinis <laurynas.biveinis@gmail.com> | 2010-04-22 12:42:15 +0000 |
---|---|---|
committer | Laurynas Biveinis <lauras@gcc.gnu.org> | 2010-04-22 12:42:15 +0000 |
commit | f873b20530f315ec0691a6c71ce4b430143975c6 (patch) | |
tree | 378620453122ae49e7bf7e0d9a64259baa14bbcd /gcc/lambda-mat.c | |
parent | b99279f36bd0bd5865cce14d6bb93db25101a5d4 (diff) | |
download | gcc-f873b20530f315ec0691a6c71ce4b430143975c6.zip gcc-f873b20530f315ec0691a6c71ce4b430143975c6.tar.gz gcc-f873b20530f315ec0691a6c71ce4b430143975c6.tar.bz2 |
tree-parloops.c (loop_parallel_p): New argument parloop_obstack.
2010-04-22 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.
From-SVN: r158644
Diffstat (limited to 'gcc/lambda-mat.c')
-rw-r--r-- | gcc/lambda-mat.c | 73 |
1 files changed, 11 insertions, 62 deletions
diff --git a/gcc/lambda-mat.c b/gcc/lambda-mat.c index fb9098b..50fdb69 100644 --- a/gcc/lambda-mat.c +++ b/gcc/lambda-mat.c @@ -27,18 +27,16 @@ along with GCC; see the file COPYING3. If not see #include "tree-flow.h" #include "lambda.h" -static void lambda_matrix_get_column (lambda_matrix, int, int, - lambda_vector); - /* Allocate a matrix of M rows x N cols. */ lambda_matrix -lambda_matrix_new (int m, int n) +lambda_matrix_new (int m, int n, struct obstack * lambda_obstack) { lambda_matrix mat; int i; - mat = GGC_NEWVEC (lambda_vector, m); + mat = (lambda_matrix) obstack_alloc (lambda_obstack, + sizeof (lambda_vector *) * m); for (i = 0; i < m; i++) mat[i] = lambda_vector_new (n); @@ -165,19 +163,6 @@ lambda_matrix_mult (lambda_matrix mat1, lambda_matrix mat2, } } -/* Get column COL from the matrix MAT and store it in VEC. MAT has - N rows, so the length of VEC must be N. */ - -static void -lambda_matrix_get_column (lambda_matrix mat, int n, int col, - lambda_vector vec) -{ - int i; - - for (i = 0; i < n; i++) - vec[i] = mat[i][col]; -} - /* Delete rows r1 to r2 (not including r2). */ void @@ -307,10 +292,12 @@ lambda_matrix_col_mc (lambda_matrix mat, int m, int c1, int const1) When MAT is a 2 x 2 matrix, we don't go through the whole process, because it is easily inverted by inspection and it is a very common case. */ -static int lambda_matrix_inverse_hard (lambda_matrix, lambda_matrix, int); +static int lambda_matrix_inverse_hard (lambda_matrix, lambda_matrix, int, + struct obstack *); int -lambda_matrix_inverse (lambda_matrix mat, lambda_matrix inv, int n) +lambda_matrix_inverse (lambda_matrix mat, lambda_matrix inv, int n, + struct obstack * lambda_obstack) { if (n == 2) { @@ -335,20 +322,21 @@ lambda_matrix_inverse (lambda_matrix mat, lambda_matrix inv, int n) return det; } else - return lambda_matrix_inverse_hard (mat, inv, n); + return lambda_matrix_inverse_hard (mat, inv, n, lambda_obstack); } /* If MAT is not a special case, invert it the hard way. */ static int -lambda_matrix_inverse_hard (lambda_matrix mat, lambda_matrix inv, int n) +lambda_matrix_inverse_hard (lambda_matrix mat, lambda_matrix inv, int n, + struct obstack * lambda_obstack) { lambda_vector row; lambda_matrix temp; int i, j; int determinant; - temp = lambda_matrix_new (n, n); + temp = lambda_matrix_new (n, n, lambda_obstack); lambda_matrix_copy (mat, temp, n, n); lambda_matrix_id (inv, n); @@ -592,45 +580,6 @@ lambda_matrix_first_nz_vec (lambda_matrix mat, int rowsize, int colsize, return rowsize; } -/* Calculate the projection of E sub k to the null space of B. */ - -void -lambda_matrix_project_to_null (lambda_matrix B, int rowsize, - int colsize, int k, lambda_vector x) -{ - lambda_matrix M1, M2, M3, I; - int determinant; - - /* Compute c(I-B^T inv(B B^T) B) e sub k. */ - - /* M1 is the transpose of B. */ - M1 = lambda_matrix_new (colsize, colsize); - lambda_matrix_transpose (B, M1, rowsize, colsize); - - /* M2 = B * B^T */ - M2 = lambda_matrix_new (colsize, colsize); - lambda_matrix_mult (B, M1, M2, rowsize, colsize, rowsize); - - /* M3 = inv(M2) */ - M3 = lambda_matrix_new (colsize, colsize); - determinant = lambda_matrix_inverse (M2, M3, rowsize); - - /* M2 = B^T (inv(B B^T)) */ - lambda_matrix_mult (M1, M3, M2, colsize, rowsize, rowsize); - - /* M1 = B^T (inv(B B^T)) B */ - lambda_matrix_mult (M2, B, M1, colsize, rowsize, colsize); - lambda_matrix_negate (M1, M1, colsize, colsize); - - I = lambda_matrix_new (colsize, colsize); - lambda_matrix_id (I, colsize); - - lambda_matrix_add_mc (I, determinant, M1, 1, M2, colsize, colsize); - - lambda_matrix_get_column (M2, colsize, k - 1, x); - -} - /* Multiply a vector VEC by a matrix MAT. MAT is an M*N matrix, and VEC is a vector with length N. The result is stored in DEST which must be a vector of length M. */ |