diff options
author | Balaji V. Iyer <balaji.v.iyer@intel.com> | 2013-06-25 20:41:21 +0000 |
---|---|---|
committer | Balaji V. Iyer <bviyer@gcc.gnu.org> | 2013-06-25 13:41:21 -0700 |
commit | 713b46fafe2e7079c1820254468c20e999ef85a5 (patch) | |
tree | d0304bbb6ee06694d451892f81119e01d2141350 /gcc/c-family | |
parent | 818cac82f73e867779c7c62c42f256d9983ef5d1 (diff) | |
download | gcc-713b46fafe2e7079c1820254468c20e999ef85a5.zip gcc-713b46fafe2e7079c1820254468c20e999ef85a5.tar.gz gcc-713b46fafe2e7079c1820254468c20e999ef85a5.tar.bz2 |
Replaced Dynamic arrays with vec trees in Array Notation for C.
gcc/c-family/ChangeLog
2013-06-21 Balaji V. Iyer <balaji.v.iyer@intel.com>
* array-notation-common.c (length_mismatch_in_expr): Changed the
parameter type's from a dynamic array to a vec_tree. Also removed
the size parameters.
* c-common.h (length_mismatch_in_expr_p): Fixed prototype's as per
the change above.
gcc/cp/ChangeLog
2013-06-21 Balaji V. Iyer <balaji.v.iyer@intel.com>
* cp-array-notation.c (cp_length_mismatch_in_expr_p): Remove.
(expand_an_in_modify_expr): Changed a function call from the above
removed function to length_mismatch_in_expr_p.
gcc/c/ChangeLog
2013-06-21 Balaji V. Iyer <balaji.v.iyer@intel.com>
* c-array-notation.c (make_triplet_val_inv): New function.
(create_cmp_incr): Likewise.
(create_array_refs): Likewise.
(fix_builtin_array_notation_fn): Replaced all mallocs with tree vec.
Also modularized common parts between functions and called the function.
(build_array_notation_expr): Likewise.
(fix_conditional_array_notations_1): Likewise.
(fix_array_notation_expr): Likewise.
(fix_array_notation_call_expr): Likewise.
From-SVN: r200405
Diffstat (limited to 'gcc/c-family')
-rw-r--r-- | gcc/c-family/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/c-family/array-notation-common.c | 40 | ||||
-rw-r--r-- | gcc/c-family/c-common.h | 2 |
3 files changed, 30 insertions, 20 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 03269e9..bc73a80 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -4,6 +4,14 @@ * c-cppbuiltin.c (c_cpp_builtins): Likewise. * c-opts.c (c_common_post_options): Likewise. +2013-06-21 Balaji V. Iyer <balaji.v.iyer@intel.com> + + * array-notation-common.c (length_mismatch_in_expr): Changed the + parameter type's from a dynamic array to a vec_tree. Also removed + the size parameters. + * c-common.h (length_mismatch_in_expr_p): Fixed prototype's as per + the change above. + 2013-06-21 Balaji V. Iyer <balaji.v.iyer@intel.com> * c-common.h (struct cilkplus_an_parts): New structure. diff --git a/gcc/c-family/array-notation-common.c b/gcc/c-family/array-notation-common.c index 0e2a431..8eab89b 100644 --- a/gcc/c-family/array-notation-common.c +++ b/gcc/c-family/array-notation-common.c @@ -75,35 +75,37 @@ extract_sec_implicit_index_arg (location_t location, tree fn) return return_int; } -/* Returns true if there is length mismatch among expressions - on the same dimension and on the same side of the equal sign. The - expressions (or ARRAY_NOTATION lengths) are passed in through 2-D array - **LIST where X and Y indicate first and second dimension sizes of LIST, - respectively. */ +/* Returns true if there is a length mismatch among exprssions that are at the + same dimension and one the same side of the equal sign. The Array notation + lengths (LIST->LENGTH) is passed in as a 2D vector of trees. */ bool -length_mismatch_in_expr_p (location_t loc, tree **list, size_t x, size_t y) +length_mismatch_in_expr_p (location_t loc, vec<vec<an_parts> >list) { size_t ii, jj; - tree start = NULL_TREE; - HOST_WIDE_INT l_start, l_node; + tree length = NULL_TREE; + HOST_WIDE_INT l_length, l_node; + + size_t x = list.length (); + size_t y = list[0].length (); + for (jj = 0; jj < y; jj++) { - start = NULL_TREE; + length = NULL_TREE; for (ii = 0; ii < x; ii++) { - if (!start) - start = list[ii][jj]; - else if (TREE_CODE (start) == INTEGER_CST) + if (!length) + length = list[ii][jj].length; + else if (TREE_CODE (length) == INTEGER_CST) { - /* If start is a INTEGER, and list[ii][jj] is an integer then + /* If length is a INTEGER, and list[ii][jj] is an integer then check if they are equal. If they are not equal then return true. */ - if (TREE_CODE (list[ii][jj]) == INTEGER_CST) + if (TREE_CODE (list[ii][jj].length) == INTEGER_CST) { - l_node = int_cst_value (list[ii][jj]); - l_start = int_cst_value (start); - if (absu_hwi (l_start) != absu_hwi (l_node)) + l_node = int_cst_value (list[ii][jj].length); + l_length = int_cst_value (length); + if (absu_hwi (l_length) != absu_hwi (l_node)) { error_at (loc, "length mismatch in expression"); return true; @@ -111,9 +113,9 @@ length_mismatch_in_expr_p (location_t loc, tree **list, size_t x, size_t y) } } else - /* We set the start node as the current node just in case it turns + /* We set the length node as the current node just in case it turns out to be an integer. */ - start = list[ii][jj]; + length = list[ii][jj].length; } } return false; diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 95d3ccf..625c301 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -1193,7 +1193,7 @@ extern bool contains_array_notation_expr (tree); extern tree expand_array_notation_exprs (tree); extern tree fix_conditional_array_notations (tree); extern tree find_correct_array_notation_type (tree); -extern bool length_mismatch_in_expr_p (location_t, tree **, size_t, size_t); +extern bool length_mismatch_in_expr_p (location_t, vec<vec<an_parts> >); extern enum built_in_function is_cilkplus_reduce_builtin (tree); extern bool find_rank (location_t, tree, tree, bool, size_t *); extern void extract_array_notation_exprs (tree, bool, vec<tree, va_gc> **); |