From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 80529 invoked by alias); 2 Dec 2015 23:56:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 80507 invoked by uid 89); 2 Dec 2015 23:56:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 02 Dec 2015 23:56:15 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-01.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1a4HFr-0005nR-Lw from Tom_deVries@mentor.com ; Wed, 02 Dec 2015 15:56:12 -0800 Received: from [127.0.0.1] (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.3.224.2; Wed, 2 Dec 2015 23:56:10 +0000 Subject: Re: [PATCH] [graphite] handle missing isl_ast_expr To: Sebastian Pop , References: <1449094634-18288-1-git-send-email-s.pop@samsung.com> CC: , , From: Tom de Vries Message-ID: <565F8516.4070406@mentor.com> Date: Wed, 02 Dec 2015 23:56:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <1449094634-18288-1-git-send-email-s.pop@samsung.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 8bit X-SW-Source: 2015-12/txt/msg00382.txt.bz2 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 > +#endif > +#include > +#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; > +} >