aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-family
diff options
context:
space:
mode:
authorBalaji V. Iyer <balaji.v.iyer@intel.com>2013-06-25 20:41:21 +0000
committerBalaji V. Iyer <bviyer@gcc.gnu.org>2013-06-25 13:41:21 -0700
commit713b46fafe2e7079c1820254468c20e999ef85a5 (patch)
treed0304bbb6ee06694d451892f81119e01d2141350 /gcc/c-family
parent818cac82f73e867779c7c62c42f256d9983ef5d1 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/c-family/array-notation-common.c40
-rw-r--r--gcc/c-family/c-common.h2
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> **);