/* If stride and start are of same type and the induction var
is not, convert induction variable to stride's type. */
if (TREE_TYPE (start) == TREE_TYPE (stride)
&& TREE_TYPE (stride) != TREE_TYPE (var))
{
st = start;
str = stride;
v = build_c_cast (loc, TREE_TYPE (str), var);
}
else if (TREE_TYPE (start) != TREE_TYPE (stride))
{
/* If we reach here, then the stride and start are of
different types, and so it doesn't really matter what
the induction variable type is, convert everything to
integer. The reason why we pick an integer
instead of something like size_t is because the stride
and length can be + or -. */
st = build_c_cast (loc, ptrdiff_type_node, start);
str = build_c_cast (loc, ptrdiff_type_node, stride);
v = build_c_cast (loc, ptrdiff_type_node, var);
}
else
{
st = start;
str = stride;
v = var;
}
+ tree ii_tree = array_exprs[ii][jj];
+ (*node)[ii][jj].is_vector = true;
+ (*node)[ii][jj].value = ARRAY_NOTATION_ARRAY (ii_tree);
+ (*node)[ii][jj].start = ARRAY_NOTATION_START (ii_tree);
+ (*node)[ii][jj].length =
+ fold_build1 (CONVERT_EXPR, integer_type_node,
+ ARRAY_NOTATION_LENGTH (ii_tree));
+ (*node)[ii][jj].stride =
+ fold_build1 (CONVERT_EXPR, integer_type_node,
+ ARRAY_NOTATION_STRIDE (ii_tree));
+ stride = RECUR (ARRAY_NOTATION_STRIDE (t));
+ if (!cilkplus_an_triplet_types_ok_p (loc, start_index, length, stride,
+ TREE_TYPE (op1)))
+ RETURN (error_mark_node);