コード例 #1
0
ファイル: grouping.c プロジェクト: abhishek111226/sach
/* If "node" is a sequence, then check if it has any consecutive
 * leaves that should be merged together and store the results
 * in "grouping".
 *
 * In particular, call group_subsequence on each consecutive
 * sequence of (filtered) leaves among the children of "node".
 */
static isl_bool detect_groups(__isl_keep isl_schedule_node *node, void *user)
{
	int i, n, first;
	isl_bool has_only_leaves;
	struct ppcg_grouping *grouping = user;

	if (isl_schedule_node_get_type(node) != isl_schedule_node_sequence)
		return isl_bool_true;

	n = isl_schedule_node_n_children(node);
	if (n < 0)
		return isl_bool_error;

	first = -1;
	for (i = 0; i < n; ++i) {
		isl_schedule_node *child;
		enum isl_schedule_node_type type;

		child = isl_schedule_node_get_child(node, i);
		child = isl_schedule_node_child(child, 0);
		type = isl_schedule_node_get_type(child);
		isl_schedule_node_free(child);

		if (first >= 0 && type != isl_schedule_node_leaf) {
			if (group_subsequence(node, first, i - first,
						grouping) < 0)
				return isl_bool_error;
			first = -1;
		}
		if (first < 0 && type == isl_schedule_node_leaf)
			first = i;
	}
	if (first >= 0) {
		if (group_subsequence(node, first, n - first, grouping) < 0)
			return isl_bool_error;
	}

	return isl_bool_true;
}
コード例 #2
0
ファイル: isl_ast_gen.cpp プロジェクト: jleben/stream-lang
isl_schedule_node * mark_loop_type_separate(const isl::context & ctx, isl_schedule_node * node)
{
    isl::printer p(ctx);
    auto type = isl_schedule_node_get_type(node);
    if (type == isl_schedule_node_band)
    {
        int dims = isl_schedule_node_band_n_member(node);
        for (int d = 0; d < dims; ++d)
        {
            node = isl_schedule_node_band_member_set_ast_loop_type
                    (node, d, isl_ast_loop_separate);
        }
    }

    int n_children = isl_schedule_node_n_children(node);
    for (int c = 0; c < n_children; ++c)
    {
        node = isl_schedule_node_child(node, c);
        node = mark_loop_type_separate(ctx, node);
        node = isl_schedule_node_parent(node);
    }

    return node;
}