[gcc/]
* graphite-isl-ast-to-gimple.c: (graphite_create_new_guard): New function. (translate_isl_ast_node_if): New function. (translate_isl_ast): Add calling of translate_isl_ast_node_if. [gcc/testsuite] * gcc.dg/graphite/isl-ast-gen-if-1.c: New testcase. From-SVN: r213109
This commit is contained in:
parent
fa42c489de
commit
333cc51843
|
@ -1,3 +1,12 @@
|
|||
2014-07-28 Roman Gareev <gareevroman@gmail.com>
|
||||
|
||||
* graphite-isl-ast-to-gimple.c:
|
||||
(graphite_create_new_guard): New function.
|
||||
(translate_isl_ast_node_if): New function.
|
||||
(translate_isl_ast): Add calling of translate_isl_ast_node_if.
|
||||
|
||||
* gcc.dg/graphite/isl-ast-gen-if-1.c: New testcase.
|
||||
|
||||
2014-07-27 Anthony Green <green@moxielogic.com>
|
||||
|
||||
* config.gcc: Add moxie-*-moxiebox* configuration.
|
||||
|
|
|
@ -645,6 +645,43 @@ translate_isl_ast_node_block (loop_p context_loop,
|
|||
isl_ast_node_list_free (node_list);
|
||||
return next_e;
|
||||
}
|
||||
|
||||
/* Creates a new if region corresponding to ISL's cond. */
|
||||
|
||||
static edge
|
||||
graphite_create_new_guard (edge entry_edge, __isl_take isl_ast_expr *if_cond,
|
||||
ivs_params &ip)
|
||||
{
|
||||
tree type =
|
||||
build_nonstandard_integer_type (graphite_expression_type_precision, 0);
|
||||
tree cond_expr = gcc_expression_from_isl_expression (type, if_cond, ip);
|
||||
edge exit_edge = create_empty_if_region_on_edge (entry_edge, cond_expr);
|
||||
return exit_edge;
|
||||
}
|
||||
|
||||
/* Translates an isl_ast_node_if to Gimple. */
|
||||
|
||||
static edge
|
||||
translate_isl_ast_node_if (loop_p context_loop,
|
||||
__isl_keep isl_ast_node *node,
|
||||
edge next_e, ivs_params &ip)
|
||||
{
|
||||
gcc_assert (isl_ast_node_get_type (node) == isl_ast_node_if);
|
||||
isl_ast_expr *if_cond = isl_ast_node_if_get_cond (node);
|
||||
edge last_e = graphite_create_new_guard (next_e, if_cond, ip);
|
||||
|
||||
edge true_e = get_true_edge_from_guard_bb (next_e->dest);
|
||||
isl_ast_node *then_node = isl_ast_node_if_get_then (node);
|
||||
translate_isl_ast (context_loop, then_node, true_e, ip);
|
||||
isl_ast_node_free (then_node);
|
||||
|
||||
edge false_e = get_false_edge_from_guard_bb (next_e->dest);
|
||||
isl_ast_node *else_node = isl_ast_node_if_get_else (node);
|
||||
if (isl_ast_node_get_type (else_node) != isl_ast_node_error)
|
||||
translate_isl_ast (context_loop, else_node, false_e, ip);
|
||||
isl_ast_node_free (else_node);
|
||||
return last_e;
|
||||
}
|
||||
|
||||
/* Translates an ISL AST node NODE to GCC representation in the
|
||||
context of a SESE. */
|
||||
|
@ -663,7 +700,8 @@ translate_isl_ast (loop_p context_loop, __isl_keep isl_ast_node *node,
|
|||
next_e, ip);
|
||||
|
||||
case isl_ast_node_if:
|
||||
return next_e;
|
||||
return translate_isl_ast_node_if (context_loop, node,
|
||||
next_e, ip);
|
||||
|
||||
case isl_ast_node_user:
|
||||
return translate_isl_ast_node_user (node, next_e, ip);
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -fgraphite-identity -fgraphite-code-generator=isl" } */
|
||||
|
||||
int st = 1;
|
||||
static void __attribute__((noinline))
|
||||
foo (int a[], int n)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
if (i < 25)
|
||||
a[i] = i;
|
||||
a[n - i] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static int __attribute__((noinline))
|
||||
array_sum (int a[])
|
||||
{
|
||||
int i, res = 0;
|
||||
for(i = 0; i < 50; i += st)
|
||||
res += a[i];
|
||||
return res;
|
||||
}
|
||||
|
||||
extern void abort ();
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int a[50];
|
||||
foo (a, 50);
|
||||
int res = array_sum (a);
|
||||
if (res != 49)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue