* [PATCH] [graphite] handle missing isl_ast_expr
@ 2015-12-02 22:17 Sebastian Pop
2015-12-02 23:56 ` Tom de Vries
0 siblings, 1 reply; 4+ messages in thread
From: Sebastian Pop @ 2015-12-02 22:17 UTC (permalink / raw)
To: sebpop; +Cc: richard.guenther, gcc-patches, hiraditya, Sebastian Pop
From ISL's documentation, isl_ast_op_zdiv_r is equal to zero iff the remainder
on integer division is zero. Code generate a modulo operation for that.
* graphite-isl-ast-to-gimple.c (binary_op_to_tree): Handle isl_ast_op_zdiv_r.
(gcc_expression_from_isl_expr_op): Same.
* gcc.dg/graphite/id-28.c: New.
---
gcc/graphite-isl-ast-to-gimple.c | 2 +
gcc/testsuite/gcc.dg/graphite/id-28.c | 72 +++++++++++++++++++++++++++++++++++
2 files changed, 74 insertions(+)
create mode 100644 gcc/testsuite/gcc.dg/graphite/id-28.c
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index 497b200..06a2062 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -588,6 +588,7 @@ binary_op_to_tree (tree type, __isl_take isl_ast_expr *expr, ivs_params &ip)
}
return fold_build2 (TRUNC_DIV_EXPR, type, tree_lhs_expr, tree_rhs_expr);
+ case isl_ast_op_zdiv_r:
case isl_ast_op_pdiv_r:
/* As ISL operates on arbitrary precision numbers, we may end up with
division by 2^64 that is folded to 0. */
@@ -758,6 +759,7 @@ gcc_expression_from_isl_expr_op (tree type, __isl_take isl_ast_expr *expr,
case isl_ast_op_pdiv_q:
case isl_ast_op_pdiv_r:
case isl_ast_op_fdiv_q:
+ case isl_ast_op_zdiv_r:
case isl_ast_op_and:
case isl_ast_op_or:
case isl_ast_op_eq:
diff --git a/gcc/testsuite/gcc.dg/graphite/id-28.c b/gcc/testsuite/gcc.dg/graphite/id-28.c
new file mode 100644
index 0000000..e3f2368
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/id-28.c
@@ -0,0 +1,72 @@
+/* { dg-options "-fcilkplus -floop-nest-optimize -O3" } */
+
+#if HAVE_IO
+#include <stdio.h>
+#endif
+#include <math.h>
+#define NUMBER 5
+
+int func1 (int *a1, int *a2)
+{
+ return __sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER:1]);
+}
+
+int func2 (int *a1, int *a2)
+{
+ return (__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) +
+ __sec_reduce_mul (a1[0:NUMBER] + a2[0:NUMBER]));
+}
+
+int func3 (int *a1, int *a2)
+{
+ return (int) sqrt ((double)(__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) +
+ a2[0] + a2[1] + a2[3]));
+}
+
+int func4 (int *a1, int *a2)
+{
+ return a1[NUMBER-1] * (__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) + a2[0] + a2[1] + a2[3])/a1[NUMBER-2];
+}
+int main(void)
+{
+ int array[NUMBER], array2[NUMBER];
+ int return_value = 0;
+ int ii = 0;
+ int argc = 1;
+ __asm volatile ("" : "+r" (argc));
+ for (ii = 0; ii < NUMBER; ii++)
+ {
+ array[ii] = argc; /* This should calculate to 1. */
+ array2[ii] = argc * argc + argc; /* This should calculate to 2. */
+ }
+
+ return_value = func1 (array, array2);
+#if HAVE_IO
+ printf("Return_value = %d\n", return_value);
+#endif
+ if (return_value != (2+2+2+2+2))
+ return 1;
+
+ return_value = func2 (array2, array);
+#if HAVE_IO
+ printf("Return_value = %d\n", return_value);
+#endif
+ if (return_value != (3*3*3*3*3) + (2+2+2+2+2))
+ return 2;
+
+ return_value = func3 (array, array2);
+#if HAVE_IO
+ printf("Return_value = %d\n", return_value);
+#endif
+ if (return_value != 4)
+ return 3;
+
+ return_value = func4 (array, array2);
+#if HAVE_IO
+ printf("Return_value = %d\n", return_value);
+#endif
+ if (return_value != 16)
+ return 4;
+
+ return 0;
+}
--
1.9.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] [graphite] handle missing isl_ast_expr
2015-12-02 22:17 [PATCH] [graphite] handle missing isl_ast_expr Sebastian Pop
@ 2015-12-02 23:56 ` Tom de Vries
2015-12-03 8:49 ` Fix buildbreaker with isl 0.14 Tom de Vries
0 siblings, 1 reply; 4+ messages in thread
From: Tom de Vries @ 2015-12-02 23:56 UTC (permalink / raw)
To: Sebastian Pop, sebpop; +Cc: richard.guenther, gcc-patches, hiraditya
Hi,
This break the build for me, with isl 0.14.
...
src/gcc/graphite-isl-ast-to-gimple.c: In member function ‘tree_node*
translate_isl_ast_to_gimple::binary_op_to_tree(tree, isl_ast_expr*,
ivs_params&)Â’:
src/gcc/graphite-isl-ast-to-gimple.c:591:10: error: ‘isl_ast_op_zdiv_r’
was not declared in this scope
case isl_ast_op_zdiv_r:
^
...
Thanks,
- Tom
On 02/12/15 23:17, Sebastian Pop wrote:
> From ISL's documentation, isl_ast_op_zdiv_r is equal to zero iff the remainder
> on integer division is zero. Code generate a modulo operation for that.
>
> * graphite-isl-ast-to-gimple.c (binary_op_to_tree): Handle isl_ast_op_zdiv_r.
> (gcc_expression_from_isl_expr_op): Same.
>
> * gcc.dg/graphite/id-28.c: New.
> ---
> gcc/graphite-isl-ast-to-gimple.c | 2 +
> gcc/testsuite/gcc.dg/graphite/id-28.c | 72 +++++++++++++++++++++++++++++++++++
> 2 files changed, 74 insertions(+)
> create mode 100644 gcc/testsuite/gcc.dg/graphite/id-28.c
>
> diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
> index 497b200..06a2062 100644
> --- a/gcc/graphite-isl-ast-to-gimple.c
> +++ b/gcc/graphite-isl-ast-to-gimple.c
> @@ -588,6 +588,7 @@ binary_op_to_tree (tree type, __isl_take isl_ast_expr *expr, ivs_params &ip)
> }
> return fold_build2 (TRUNC_DIV_EXPR, type, tree_lhs_expr, tree_rhs_expr);
>
> + case isl_ast_op_zdiv_r:
> case isl_ast_op_pdiv_r:
> /* As ISL operates on arbitrary precision numbers, we may end up with
> division by 2^64 that is folded to 0. */
> @@ -758,6 +759,7 @@ gcc_expression_from_isl_expr_op (tree type, __isl_take isl_ast_expr *expr,
> case isl_ast_op_pdiv_q:
> case isl_ast_op_pdiv_r:
> case isl_ast_op_fdiv_q:
> + case isl_ast_op_zdiv_r:
> case isl_ast_op_and:
> case isl_ast_op_or:
> case isl_ast_op_eq:
> diff --git a/gcc/testsuite/gcc.dg/graphite/id-28.c b/gcc/testsuite/gcc.dg/graphite/id-28.c
> new file mode 100644
> index 0000000..e3f2368
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/graphite/id-28.c
> @@ -0,0 +1,72 @@
> +/* { dg-options "-fcilkplus -floop-nest-optimize -O3" } */
> +
> +#if HAVE_IO
> +#include <stdio.h>
> +#endif
> +#include <math.h>
> +#define NUMBER 5
> +
> +int func1 (int *a1, int *a2)
> +{
> + return __sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER:1]);
> +}
> +
> +int func2 (int *a1, int *a2)
> +{
> + return (__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) +
> + __sec_reduce_mul (a1[0:NUMBER] + a2[0:NUMBER]));
> +}
> +
> +int func3 (int *a1, int *a2)
> +{
> + return (int) sqrt ((double)(__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) +
> + a2[0] + a2[1] + a2[3]));
> +}
> +
> +int func4 (int *a1, int *a2)
> +{
> + return a1[NUMBER-1] * (__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) + a2[0] + a2[1] + a2[3])/a1[NUMBER-2];
> +}
> +int main(void)
> +{
> + int array[NUMBER], array2[NUMBER];
> + int return_value = 0;
> + int ii = 0;
> + int argc = 1;
> + __asm volatile ("" : "+r" (argc));
> + for (ii = 0; ii < NUMBER; ii++)
> + {
> + array[ii] = argc; /* This should calculate to 1. */
> + array2[ii] = argc * argc + argc; /* This should calculate to 2. */
> + }
> +
> + return_value = func1 (array, array2);
> +#if HAVE_IO
> + printf("Return_value = %d\n", return_value);
> +#endif
> + if (return_value != (2+2+2+2+2))
> + return 1;
> +
> + return_value = func2 (array2, array);
> +#if HAVE_IO
> + printf("Return_value = %d\n", return_value);
> +#endif
> + if (return_value != (3*3*3*3*3) + (2+2+2+2+2))
> + return 2;
> +
> + return_value = func3 (array, array2);
> +#if HAVE_IO
> + printf("Return_value = %d\n", return_value);
> +#endif
> + if (return_value != 4)
> + return 3;
> +
> + return_value = func4 (array, array2);
> +#if HAVE_IO
> + printf("Return_value = %d\n", return_value);
> +#endif
> + if (return_value != 16)
> + return 4;
> +
> + return 0;
> +}
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Fix buildbreaker with isl 0.14
2015-12-02 23:56 ` Tom de Vries
@ 2015-12-03 8:49 ` Tom de Vries
2015-12-03 10:04 ` Richard Biener
0 siblings, 1 reply; 4+ messages in thread
From: Tom de Vries @ 2015-12-03 8:49 UTC (permalink / raw)
To: Sebastian Pop, sebpop; +Cc: richard.guenther, gcc-patches, hiraditya
[-- Attachment #1: Type: text/plain, Size: 1179 bytes --]
[ was: Re: [PATCH] [graphite] handle missing isl_ast_expr ]
On 03/12/15 00:56, Tom de Vries wrote:
> Hi,
>
> This break the build for me, with isl 0.14.
>
> ...
> src/gcc/graphite-isl-ast-to-gimple.c: In member function ‘tree_node*
> translate_isl_ast_to_gimple::binary_op_to_tree(tree, isl_ast_expr*,
> ivs_params&)Â’:
> src/gcc/graphite-isl-ast-to-gimple.c:591:10: error: ‘isl_ast_op_zdiv_r’
> was not declared in this scope
> case isl_ast_op_zdiv_r:
> ^
> ...
>
> Thanks,
> - Tom
>
> On 02/12/15 23:17, Sebastian Pop wrote:
>> From ISL's documentation, isl_ast_op_zdiv_r is equal to zero iff the
>> remainder
>> on integer division is zero. Code generate a modulo operation for that.
>>
>> * graphite-isl-ast-to-gimple.c (binary_op_to_tree): Handle
>> isl_ast_op_zdiv_r.
>> (gcc_expression_from_isl_expr_op): Same.
>>
>> * gcc.dg/graphite/id-28.c: New.
this patch fixes the build breaker with isl 0.14 for me. I'm using the
HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS macro (which is set for isl
0.15, and not before) to guard the code handling isl_ast_op_zdiv_r
(which I suppose is new in isl 0.15).
OK for trunk?
Thanks,
- Tom
[-- Attachment #2: 0001-Guard-isl_ast_op_zdiv_r-usage-with-HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS.patch --]
[-- Type: text/x-patch, Size: 1338 bytes --]
Guard isl_ast_op_zdiv_r usage with HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
2015-12-03 Tom de Vries <tom@codesourcery.com>
* graphite-isl-ast-to-gimple.c (binary_op_to_tree)
(gcc_expression_from_isl_expr_op): Guard isl_ast_op_zdiv_r usage with
HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS.
---
gcc/graphite-isl-ast-to-gimple.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index 06a2062..20eb80f 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -588,7 +588,9 @@ binary_op_to_tree (tree type, __isl_take isl_ast_expr *expr, ivs_params &ip)
}
return fold_build2 (TRUNC_DIV_EXPR, type, tree_lhs_expr, tree_rhs_expr);
+#if HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
case isl_ast_op_zdiv_r:
+#endif
case isl_ast_op_pdiv_r:
/* As ISL operates on arbitrary precision numbers, we may end up with
division by 2^64 that is folded to 0. */
@@ -759,7 +761,9 @@ gcc_expression_from_isl_expr_op (tree type, __isl_take isl_ast_expr *expr,
case isl_ast_op_pdiv_q:
case isl_ast_op_pdiv_r:
case isl_ast_op_fdiv_q:
+#if HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
case isl_ast_op_zdiv_r:
+#endif
case isl_ast_op_and:
case isl_ast_op_or:
case isl_ast_op_eq:
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Fix buildbreaker with isl 0.14
2015-12-03 8:49 ` Fix buildbreaker with isl 0.14 Tom de Vries
@ 2015-12-03 10:04 ` Richard Biener
0 siblings, 0 replies; 4+ messages in thread
From: Richard Biener @ 2015-12-03 10:04 UTC (permalink / raw)
To: Tom de Vries; +Cc: Sebastian Pop, Sebastian Pop, GCC Patches, hiraditya
On Thu, Dec 3, 2015 at 9:49 AM, Tom de Vries <Tom_deVries@mentor.com> wrote:
> [ was: Re: [PATCH] [graphite] handle missing isl_ast_expr ]
>
> On 03/12/15 00:56, Tom de Vries wrote:
>>
>> Hi,
>>
>> This break the build for me, with isl 0.14.
>>
>> ...
>> src/gcc/graphite-isl-ast-to-gimple.c: In member function ‘tree_node*
>> translate_isl_ast_to_gimple::binary_op_to_tree(tree, isl_ast_expr*,
>> ivs_params&)’:
>> src/gcc/graphite-isl-ast-to-gimple.c:591:10: error: ‘isl_ast_op_zdiv_r’
>> was not declared in this scope
>> case isl_ast_op_zdiv_r:
>> ^
>> ...
>>
>> Thanks,
>> - Tom
>>
>> On 02/12/15 23:17, Sebastian Pop wrote:
>>>
>>> From ISL's documentation, isl_ast_op_zdiv_r is equal to zero iff the
>>> remainder
>>> on integer division is zero. Code generate a modulo operation for that.
>>>
>>> * graphite-isl-ast-to-gimple.c (binary_op_to_tree): Handle
>>> isl_ast_op_zdiv_r.
>>> (gcc_expression_from_isl_expr_op): Same.
>>>
>>> * gcc.dg/graphite/id-28.c: New.
>
>
> this patch fixes the build breaker with isl 0.14 for me. I'm using the
> HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS macro (which is set for isl
> 0.15, and not before) to guard the code handling isl_ast_op_zdiv_r (which I
> suppose is new in isl 0.15).
>
> OK for trunk?
Ok. Ideally we'd get another configure check for this (who knows if
either of both
guarded things will vanish in future but with different versions...)
Thanks,
Richard.
> Thanks,
> - Tom
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-12-03 10:04 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-02 22:17 [PATCH] [graphite] handle missing isl_ast_expr Sebastian Pop
2015-12-02 23:56 ` Tom de Vries
2015-12-03 8:49 ` Fix buildbreaker with isl 0.14 Tom de Vries
2015-12-03 10:04 ` Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).