On Thu, Oct 4, 2012 at 2:22 AM, Iyer, Balaji V <balaji.v.i...@intel.com> wrote: > Hi Joseph, > Did you get a chance to look at this submission? I think I have fixed > all the changes you have mentioned. Is it OK for trunk? > > Thanks, > > Balaji V. Iyer. > >>-----Original Message----- >>From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches- >>ow...@gcc.gnu.org] On Behalf Of Iyer, Balaji V >>Sent: Wednesday, September 26, 2012 7:16 PM >>To: Joseph Myers >>Cc: gcc-patches@gcc.gnu.org; al...@redhat.com; r...@redhat.com; >>l...@redhat.com >>Subject: RE: [PATCH] Cilk Plus merging to trunk (2 of n) >> >>Hello Joseph, >> In my last patch, I forgot to add the change Richard Guenther wanted me >>to make. He wanted me to move the ARRAY_NOTATION_REF node from tree.def >>to c-family/c-common.def. Here is a new one that has this change. I am sorry >>for >>this. >> >>Here are ChangeLog entries: >> >>gcc/ChangeLog >>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >> >> * tree.h (array_notation_reduce_type): Added new enumerator.
This should be moved to c-tree.h then, and ... >> * Makefile.in (OBJS): Added array-notation-common.o. >> * doc/passes.texi (Cilk Plus Transformation): Documented array >> notation and overall transformations for Cilk Plus. >> * doc/invoke.texi (C Dialect Options): Documented -fcilkplus flag. >> * doc/generic.texi (Storage References): Documented >>ARRAY_NOTATION_REF >> tree addition. >> * tree-pretty-pretty.c (dump_generic_node): Added ARRAY_NOTATION_REF >> case. ... this to c-pretty-print.c and >> * array-notation-common.c: New file. ... this to the c-common/ directory. Basically this should be a completely frontend-only patch. Richard. >>gcc/c-family/ChangeLog >>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >> >> * c-common.h (build_array_notation_expr): New function declaration. >> (ARRAY_NOTATION_ARRAY): Added new #define. >> (ARRAY_NOTATION_CHECK): Likewise. >> (ARRAY_NOTATION_START): Likewise. >> (ARRAY_NOTATION_LENGTH): Likewise. >> (ARRAY_NOTATION_STRIDE): Likewise. >> (ARRAY_NOTATION_TYPE): Likewise. >> * c-common.def: Added new tree ARRAY_NOTATION_REF. >> * c-common.c (c_define_builtins): Added a call to initialize array >> notation builtin functions. >> (c_common_init_ts): Set ARRAY_NOTATION_REF as typed. >> * c.opt (-fcilkplus): Define new command line switch. >> >>gcc/c/ChangeLog >>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >> >> * c-typeck.c (convert_arguments): Added a check if tree contains >> array notation expressions before throwing errors or doing anything. >> * Make-lang.in (C_AND_OBJC_OBJS): Added c-array-notation.o. >> * c-parser.c (c_parser_compound_statement): Check if array notation >> code >> is used in tree, if so, then transform them into appropriate C code. >> (c_parser_expr_no_commas): Check if array notation is used in LHS or >> RHS, if so, then build array notation expression instead of regular >> modify. >> (c_parser_postfix_expression_after_primary): Added a check for >> colon(s) >> after square braces, if so then handle it like an array notation. >> Also, >> break up array notations in unary op if found. >> (c_parser_array_notation): New function. >> * c-array-notation.c: New file. >> >>gcc/testsuite/ChangeLog >>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >> >> * gcc.dg/cilk-plus/array_notation/execute/execute.exp: New script. >> * gcc.dg/cilk-plus/array_notation/compile/compile.exp: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/errors.exp: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/sec_implicit_ex.c: New test. >> * gcc.dg/cilk-plus/array_notation/execute/if_test.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/gather_scatter.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double2.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_custom.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/array_test_ND.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/array_test2.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/execute/array_test1.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/sec_implicit_ex.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/gather_scatter.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double2.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/array_test_ND.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/if_test.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double.c: >> Likewise. >> * gcc.dg/cilk-plus/array_notation/compile/array_test1.c: Likewise >> * gcc.dg/cilk-plus/array_notation/compile/array_test2.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit2.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/rank_mismatch.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error2.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error3.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/parse_error4.c: Likewise. >> * gcc.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind.c: >> Likewise. >> >>Thanks, >> >>Balaji V. Iyer. >> >>>-----Original Message----- >>>From: Iyer, Balaji V >>>Sent: Wednesday, September 26, 2012 5:54 PM >>>To: 'Joseph Myers' >>>Cc: gcc-patches@gcc.gnu.org; al...@redhat.com; r...@redhat.com; >>>l...@redhat.com >>>Subject: RE: [PATCH] Cilk Plus merging to trunk (2 of n) >>> >>>Hello Joseph, >>> Please see my responses below and I have attached a fixed patch: >>> >>>>-----Original Message----- >>>>From: Joseph Myers [mailto:jos...@codesourcery.com] >>>>Sent: Sunday, September 23, 2012 4:45 PM >>>>To: Iyer, Balaji V >>>>Cc: gcc-patches@gcc.gnu.org; al...@redhat.com; r...@redhat.com; >>>>l...@redhat.com >>>>Subject: Re: [PATCH] Cilk Plus merging to trunk (2 of n) >>>> >>>>On Sun, 23 Sep 2012, Iyer, Balaji V wrote: >>>> >>>>> Hello Everyone, >>>>> Attached, please find a patch that will implement Cilk Plus >>>>> Array Notations for the C compiler. Array notations are indented to >>>>> allow programmers to directly express parallelism in their programs. >>>>> Array notations can be used to possibly see a more predictable >>>>> performance improvement, hardware resource-utilization and >>>>> vectorization. To enable the compiler recognize array notation >>>>> syntax, we have added a flag "-fcilkplus." If this flag is not used, >>>>> none of these changes are visible to the compiler user. For more >>>>> information and examples about array notations please see Chapter 4 >>>>> in the Cilk Plus Specification >>>>> >>>>(http://software.intel.com/sites/default/files/m/6/3/1/cilk_plus_langu >>>>a >>>>ge_specif >>>>ication.pdf). >>>> >>>>There seem to be a lot of deficiencies in this specification. I list >>>>some here - I don't want answers in email explaining what is intended >>>>(unless it's already explained in the specification and I missed it), >>>>I want the specification revised to describe things in closer relation >>>>to C standard terms, and then you can answer in email pointing to the >>>>relevant wording in the improved specification - and to the testcases >>>>in your patch verifying that the semantics are properly implemented, >>>>but without needing to elaborate beyond pointing to specification text >>>>and >>>testcases for each question. >>>> >>>>What syntax productions, in C11 terms, are <array base>, <lower >>>>bound>, <length> and <stride> in the syntax given for section >>>>operators? Are there constraints that <lower bound>, <length> and >>>><stride> must be of integer >>>type? >>>>Are there other constraints on their types and values? >>>>(For example, must anything be constant? If there isn't such a >>>>requirement, what exactly is the requirement that "The right-hand side >>>>expression must have the same rank and size as the array context." - >>>>if a constraint, in what cases is it a constraint? Maybe a constraint >>>>that values must match if integer constant expressions, with >>>>non-matching runtime values, at least one not an integer constant >>>>expression, being undefined behavior at runtime, for example? What >>>>anyway is "size" in that quoted sentence? Unlike "rank" and "shape", >>>>it doesn't seem to be a defined term.) >>>> >>>>What do you mean, in standard terms, by "must have a declared size"? >>>>How is this defined in relation to standard C array-to-pointer decay? >>>>What about adjustment of function parameter types? What about array >>>>sizes >>>declared as [*]? >>>>What if the <array base> is in parentheses? >>>> >>>>Should I take it, from the absence of any restrictions mentioned on >>>>this subject, that the array that is sectioned may have elements of >>>>arbitrary type - so it's valid to operate this way on arrays of >>>>pointers, complex numbers or structures, for example? But that the >>>>usual constraints on assignment apply, so that if you try A[:] = B[:] >>>>where A and B are two-dimensional arrays, this is a constraint >>>>violation, because the elements that would be assigned elementwise are >>>themselves still arrays and C doesn't allow array assignment? >>>> >>>>Is it valid or invalid to have an expression of the form (A[1:2])[1:2] >>>>with parentheses around a partial array section expression, of which a >>>>further section is taken? It's not in the syntax given, but that >>>>syntax doesn't actually show the precise syntax productions added to C11. >>>> >>>>What is the type of an array section expression? What is the result >>>>of applying sizeof to such an expression? What about GNU C typeof? >>>>Use in >>>>C11 _Generic? >>>> >>>>Can such expressions be used in conditional expressions, scalar ? >>>>section >>>>: other-section? If you'd defined types, at least this could be >>>>deduced from the existing C rules on conditional expressions that say >>>>what the >>>permitted types are. >>>>Can you use them with comma operators, A[:] = (B, C[:])? It's far >>>>from clear from the document as-is to what extent such expressions >>>>have an existence with types and values like normal expressions, in >>>>which case this would of course be permitted, as opposed to being >>>>special-case things for >>>the RHS of assignments. >>>> >>>>You say (4.3.2.2) that certain operators are applied with the same >>>>precedence and rules on permitted operands as for scalars. What >>>>promotions apply? If operations are carried out on two signed char >>>>arrays, for example, are the elements considered to be promoted to >>>>int, resulting in an expression whose type is thought of as a section >>>>of an array of int, which may then be converted back to signed char if >>>>stored in a signed char array? (Thus, internal operations take place >>>>in int and what would have been overflow in signed char would not >>>>cause undefined >>>>behavior.) >>>> >>>>In general, do such conversions apply between different operands, and >>>>on assignment? >>>> >>>>I note you do not mention shift operators in the list in 4.3.2.2 of >>>>those permitted - obviously that requires testcases that they are duly >>>>rejected. >>>> >>>>Are functions such as __sec_reduce_add defined to apply the relevant >>>>operation to an accumulated value and each element of the section in >>>>turn, in some unspecified order? Or may it evaluate, for example, a >>>>sum of four elements as (a >>>>+ b) + (c + d)? What about if a user function is provided? >>>> >>>>I take it each function has constraints corresponding to those on the >>>>relevant arithmetic operation? (For example, __sec_reduce_add >>>>couldn't be called for >>>>pointers.) Can the *zero functions be called for pointers (testing >>>>whether they are NULL)? What about the *max* and *min* functions? >>>>What about those functions for floating-point - do they follow the >>>>semantics of fmax / fmin regarding NaNs? Are the results unspecified >>>>if the answer is a floating-point zero and both +0.0 and -0.0 are present? >>> >>>Here is a link to the latest spec. This should clear several of the >>>questions you are seeking. >>>(http://software.intel.com/sites/default/files/m/4/e/7/3/1/40297- >>>Intel_Cilk_plus_lang_spec_2.htm#array) >>> >>>> >>>>(Regarding the patch itself, see my previous comments on previous >>>>patches in this series. For example: >>>> >>>>* All functions should have comments explaining the semantics of their >>>>arguments and return values. >>> >>>Fixed. Please see attached patch. >>> >>>> >>>>* Diagnostic function calls should have explicit locations passed. >>> >>>Fixed. >>> >>>> >>>>* Every diagnostic (that's not an ICE) should have a corresponding >>>>testcase in the testsuite for the associated cases of invalid code - I >>>>see no tests using dg-error at all in this patch. Every case where >>>>the specification says something is not permitted should have an >>>>associated check in the compiler, diagnostic and testcase. >>> >>>Added. Please see testsuite/gcc.dg/cilk-plus/errors directory in the patch. >>> >>>> >>>>* Diagnostic formatting also needs fixing to follow the GNU Coding >>>>Standards. >>>> >>>>* The usage >>>> >>>>+ error ("__sec_implicit_index parameter must be constant integer " >>>>+ "expression"); >>>>+ error ("Bailing out due to previous error"); >>>>+ exit (ICE_EXIT_CODE); >>>> >>>>should be avoided. Front-end code should never need to call exit >>>>directly. If you have an internal error - something that should not >>>>be possible for any user code, valid or invalid - use internal_error. >>>>If an error can occur for invalid user code, just call error_at and >>>>allow the compiler to continue execution to find further problems in >>>>the user's code, >>>without bailing out. >>> >>>Fixed. >>> >>>> >>>>* There should be nothing x86-specific about the testcases so they >>>>shouldn't need to be conditioned on x86 targets. >>> >>>OK, removed from the scripts. >>> >>>> >>>>* Avoid using "int" as a type in the compiler to count the number of >>>>some entity on the host, use size_t instead, there's no need to add >>>>new cases that will cause trouble when someone wants to build a >>>>program with 2^31 of something, although there are plenty of such cases >>already. >>> >>>OK. >>> >>>> >>>>* Instead of casting the result of xmalloc, use existing macros such >>>>as >>>XNEWVEC. >>> >>>Fixed. >>> >>>> >>>>* Use @option not @code for option named in the manual. >>> >>>Fixed. >>> >>>> >>>>* Instead of declaring non-static functions >>>> >>>>+int extract_sec_implicit_index_arg (tree); bool >>>>+is_sec_implicit_index_fn (tree); void array_notation_init_builtins >>>>+(void); >>>> >>>>in a source file (array-notation-common.c), either make them static or >>>>declare them in an appropriate header included everywhere needing >>>>those >>>declarations. >>> >>>Fixed. >>> >>>> >>> >>>Attached, please find a fixed patch for array notation for C. OK for trunk? >>> >>>Here is the ChangeLog for the Changes: >>> >>>gcc/ChangeLog >>>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >>> >>> * tree.h (array_notation_reduce_type): Added new enumerator. >>> (ARRAY_NOTATION_ARRAY): Added new #define. >>> (ARRAY_NOTATION_CHECK): Likewise. >>> (ARRAY_NOTATION_START): Likewise. >>> (ARRAY_NOTATION_LENGTH): Likewise. >>> (ARRAY_NOTATION_STRIDE): Likewise. >>> (ARRAY_NOTATION_TYPE): Likewise. >>> * tree.def: Added new tree ARRAY_NOTATION_REF. >>> * Makefile.in (OBJS): Added array-notation-common.o. >>> * doc/passes.texi (Cilk Plus Transformation): Documented array >>> notation and overall transformations for Cilk Plus. >>> * doc/invoke.texi (C Dialect Options): Documented -fcilkplus flag. >>> * doc/generic.texi (Storage References): Documented >>>ARRAY_NOTATION_REF >>> tree addition. >>> * tree-pretty-pretty.c (dump_generic_node): Added ARRAY_NOTATION_REF >>> case. >>> * array-notation-common.c: New file. >>> >>>gcc/c-family/ChangeLog >>> >>>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >>> >>> * c-common.h (build_array_notation_expr): New function declaration. >>> * c-common.c (c_define_builtins): Added a call to initialize array >>> notation builtin functions. >>> * c.opt (-fcilkplus): Define new command line switch. >>> >>>gcc/c/ChangeLog >>> >>>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >>> >>> * c-typeck.c (convert_arguments): Added a check if tree contains >>> array notation expressions before throwing errors or doing anything. >>> * Make-lang.in (C_AND_OBJC_OBJS): Added c-array-notation.o. >>> * c-parser.c (c_parser_compound_statement): Check if array notation >>> code >>> is used in tree, if so, then transform them into appropriate C code. >>> (c_parser_expr_no_commas): Check if array notation is used in LHS or >>> RHS, if so, then build array notation expression instead of regular >>> modify. >>> (c_parser_postfix_expression_after_primary): Added a check for >>> colon(s) >>> after square braces, if so then handle it like an array notation. >>> Also, >>> break up array notations in unary op if found. >>> (c_parser_array_notation): New function. >>> * c-array-notation.c: New file. >>> >>> >>>gcc/testsuite/ChangeLog >>>2012-09-26 Balaji V. Iyer <balaji.v.i...@intel.com> >>> >>> * gcc.dg/cilk-plus/array_notation/execute/execute.exp: New script. >>> * gcc.dg/cilk-plus/array_notation/compile/compile.exp: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/errors.exp: Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/sec_implicit_ex.c: New >>> test. >>> * gcc.dg/cilk-plus/array_notation/execute/if_test.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/gather_scatter.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double2.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_custom.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/array_test_ND.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/array_test2.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/array_test1.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/sec_implicit_ex.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/gather_scatter.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double2.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/array_test_ND.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/if_test.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/array_test1.c: Likewise >>> * gcc.dg/cilk-plus/array_notation/compile/array_test2.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit2.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/rank_mismatch.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error2.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error3.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error4.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind.c: >>> Likewise. >>> >>>Thanks, >>> >>>Balaji V. Iyer. >>> >>>>There may also be other issues.) >>>> >>>>-- >>>>Joseph S. Myers >>>>jos...@codesourcery.com