Skip to content
Snippets Groups Projects
  • Balaji V. Iyer's avatar
    939b37da
    Added _Cilk_spawn and _Cilk_sync (2 cilk keywords) for C. · 939b37da
    Balaji V. Iyer authored
    gcc/ChangeLog:
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* builtins.c (is_builtin_name): Added a check for __cilkrts_detach and
    	__cilkrts_pop_frame.  If matched, then return true for built-in
    	function name.
    	(expand_builtin): Added BUILT_IN_CILK_DETACH and
    	BUILT_IN_CILK_POP_FRAME case.
    	* langhooks-def.h (lhd_install_body_with_frame_cleanup): New prototype.
    	(lhs_cilk_detect_spawn): Likewise.
    	(LANG_HOOKS_DECLS): Added LANG_HOOKS_CILKPLUS.
    	(LANG_HOOKS_CILKPLUS_DETECT_SPAWN_AND_UNWRAP): New #define.
    	(LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise.
    	(LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): Likewise.
    	(LANG_HOOKS_CILKPLUS): Likewise.
    	* tree.h (CILK_SPAWN_FN): Likewise.
    	* builtin.def (DEF_CILK_BUILTIN_STUB): Likewise.
    	* Makefile.in (C_COMMON_OBJS): Added c-family/cilk.o.
    	(OBJS): Added cilk-common.o.
    	(CILK_H): Added a new define.
    	(gimplify.o): Added CILK_H into dependency list.
    	(builtins.o): Likewise.
    	(ipa-inline.o): Likewise.
    	(ipa-inline-analysis.o): Likewise.
    	(BUILTINS_DEF): Added cilk-builtins.def.
    	* langhooks.c (lhd_install_body_with_frame_cleanup): New function.
    	(lhd_cilk_detect_spawn): Likewise.
    	* langhooks.h (lang_hooks_for_cilkplus): New struct.
    	(struct lang_hooks): Added new field called "cilkplus."
    	* cilk-common.c: New file.
    	* cilk.h: Likewise.
    	* cilk-builtins.def: Likewise.
    	* cppbuiltin.c (define_builtin_macros_for_compilation_flags): Added
    	"__cilk" macro and set it to 200.
    	* function.h (struct function::cilk_frame_decl): New field.
    	(struct function::is_cilk_function): Likewise.
    	(struct function::calls_cilk_spawn): Likewise.
    	* gimplify.c (gimplify_call_expr): Added a check if the function call
    	being gimplified is a spawn detach point.  If so, then add pop_frame
    	and detach function calls.
    	(gimplify_expr): Added a CILK_SPAWN_STMT and CILK_SYNC_STMT case
    	for gimplifying _Cilk_spawn and _Cilk_sync statements.
    	(gimplify_return_expr): Added a check for _Cilk_spawn usage in
    	function.  If so, added a _Cilk_sync and gimplified it.
    	(gimplify_modify_expr): Added a check for _Cilk_spawn in MODIFY and
    	INIT_EXPRs.  If so, then call gimplify_cilk_spawn.
    	* ipa-inline-analysis (initialize_inline_failed): Prevent inlining of
    	spawner function.
    	(can_inline_edge_p): Prevent inling of spawnee function.
    	* ira.c (ira_setup_eliminable_regset): Force usage of frame pointer
    	for functions that use Cilk keywords.
    	* tree-inline.h (struct copy_body_data::remap_var_for_cilk): New field.
    	* tree-pretty-print.c (dump_generic_node): Added CILK_SPAWN_STMT and
    	CILK_SYNC_STMT cases.
    	* tree.def (DEFTREECODE): Added CILK_SPAWN_STMT and CILK_SYNC_STMT
    	trees.
    	* generic.texi (CILK_SPAWN_STMT): Added documentation for _Cilk_spawn.
    	(CILK_SYNC_STMT): Added documentation for _Cilk_sync.
    	* passes.texi (Cilk Keywords): New section that describes the compiler
    	code changes for handling Cilk Keywords.
    
    gcc/c/ChangeLog:
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* c-decl.c (finish_function): Added a call for insert_cilk_frame when
    	a spawning function is found.
    	* c-objc-common.h (LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): New #define.
    	(LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise.
    	(LANG_HOOKS_CILKPLUS_DETECT_SPAWN_AND_UNWRAP): Likewise.
    	* c-parser.c (c_parser_statement_after_labels): Added RID_CILK_SYNC
    	case.
    	(c_parser_postfix_expression): Added RID_CILK_SPAWN case.
    	* c-typeck.c (build_compound_expr): Reject _Cilk_spawn in a comma
    	expr.
    	(c_finish_return): Added a check to reject _Cilk_spawn in return
    	expression.
    	(build_cilk_spawn): New function.
    	(build_cilk_sync): Likewise.
    	* Makefile.in (c-decl.o): Added cilk.h in dependency list.
    
    gcc/c-family/ChangeLog
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* c-common.c (c_common_reswords[]): Added _Cilk_spawn and _Cilk_sync
    	fields.
    	(c_define_builtins): Called cilk_init_builtins if Cilk Plus is
    	enabled.
    	* c-common.h (enum rid): Added RID_CILK_SPAWN and RID_CILK_SYNC.
    	(insert_cilk_frame): New prototype.
    	(cilk_init_builtins): Likewise.
    	(gimplify_cilk_spawn): Likewise.
    	(c_cilk_install_body_w_frame_cleanup): Likewise.
    	(cilk_detect_spawn_and_unwrap): Likewise.
    	(cilk_set_spawn_marker): Likewise.
    	(build_cilk_sync): Likewise.
    	(build_cilk_spawn): Likewise.
    	* cilk.c: New file.
    
    gcc/lto/ChangeLog
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* Make-lang.in (lto/lto-lang.o): Added cilk.h in dependency list.
    	* lto-lang.c (lto_init): Added a call to cilk_init_builtins if Cilk
    	Plus is enabled.
    
    gcc/testsuite/ChangeLog
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* c-c++-common/cilk-plus/CK/compound_cilk_spawn.c: New test.
    	* c-c++-common/cilk-plus/CK/concec_cilk_spawn.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib.c: Likewise.
    	* c-c++-common/cilk-plus/CK/no_args_error.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawnee_inline.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawner_inline.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawning_arg.c: Likewise.
    	* c-c++-common/cilk-plus/CK/steal_check.c: Likewise.
    	* c-c++-common/cilk-plus/CK/test__cilk.c: Likewise.
    	* c-c++-common/cilk-plus/CK/varargs_test.c: Likewise.
    	* c-c++-common/cilk-plus/CK/sync_wo_spawn.c: Likewise.
    	* c-c++-common/cilk-plus/CK/invalid_spawn.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawn_in_return.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib_init_expr_xy.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib_no_sync.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib_no_return.c: Likewise.
    	* gcc.dg/cilk-plus/cilk-plus.exp: Added support to run Cilk Keywords
    	test stored in c-c++-common.  Also, added the Cilk runtime's library
    	to the ld_library_path.
    
    From-SVN: r204172
    939b37da
    History
    Added _Cilk_spawn and _Cilk_sync (2 cilk keywords) for C.
    Balaji V. Iyer authored
    gcc/ChangeLog:
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* builtins.c (is_builtin_name): Added a check for __cilkrts_detach and
    	__cilkrts_pop_frame.  If matched, then return true for built-in
    	function name.
    	(expand_builtin): Added BUILT_IN_CILK_DETACH and
    	BUILT_IN_CILK_POP_FRAME case.
    	* langhooks-def.h (lhd_install_body_with_frame_cleanup): New prototype.
    	(lhs_cilk_detect_spawn): Likewise.
    	(LANG_HOOKS_DECLS): Added LANG_HOOKS_CILKPLUS.
    	(LANG_HOOKS_CILKPLUS_DETECT_SPAWN_AND_UNWRAP): New #define.
    	(LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise.
    	(LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): Likewise.
    	(LANG_HOOKS_CILKPLUS): Likewise.
    	* tree.h (CILK_SPAWN_FN): Likewise.
    	* builtin.def (DEF_CILK_BUILTIN_STUB): Likewise.
    	* Makefile.in (C_COMMON_OBJS): Added c-family/cilk.o.
    	(OBJS): Added cilk-common.o.
    	(CILK_H): Added a new define.
    	(gimplify.o): Added CILK_H into dependency list.
    	(builtins.o): Likewise.
    	(ipa-inline.o): Likewise.
    	(ipa-inline-analysis.o): Likewise.
    	(BUILTINS_DEF): Added cilk-builtins.def.
    	* langhooks.c (lhd_install_body_with_frame_cleanup): New function.
    	(lhd_cilk_detect_spawn): Likewise.
    	* langhooks.h (lang_hooks_for_cilkplus): New struct.
    	(struct lang_hooks): Added new field called "cilkplus."
    	* cilk-common.c: New file.
    	* cilk.h: Likewise.
    	* cilk-builtins.def: Likewise.
    	* cppbuiltin.c (define_builtin_macros_for_compilation_flags): Added
    	"__cilk" macro and set it to 200.
    	* function.h (struct function::cilk_frame_decl): New field.
    	(struct function::is_cilk_function): Likewise.
    	(struct function::calls_cilk_spawn): Likewise.
    	* gimplify.c (gimplify_call_expr): Added a check if the function call
    	being gimplified is a spawn detach point.  If so, then add pop_frame
    	and detach function calls.
    	(gimplify_expr): Added a CILK_SPAWN_STMT and CILK_SYNC_STMT case
    	for gimplifying _Cilk_spawn and _Cilk_sync statements.
    	(gimplify_return_expr): Added a check for _Cilk_spawn usage in
    	function.  If so, added a _Cilk_sync and gimplified it.
    	(gimplify_modify_expr): Added a check for _Cilk_spawn in MODIFY and
    	INIT_EXPRs.  If so, then call gimplify_cilk_spawn.
    	* ipa-inline-analysis (initialize_inline_failed): Prevent inlining of
    	spawner function.
    	(can_inline_edge_p): Prevent inling of spawnee function.
    	* ira.c (ira_setup_eliminable_regset): Force usage of frame pointer
    	for functions that use Cilk keywords.
    	* tree-inline.h (struct copy_body_data::remap_var_for_cilk): New field.
    	* tree-pretty-print.c (dump_generic_node): Added CILK_SPAWN_STMT and
    	CILK_SYNC_STMT cases.
    	* tree.def (DEFTREECODE): Added CILK_SPAWN_STMT and CILK_SYNC_STMT
    	trees.
    	* generic.texi (CILK_SPAWN_STMT): Added documentation for _Cilk_spawn.
    	(CILK_SYNC_STMT): Added documentation for _Cilk_sync.
    	* passes.texi (Cilk Keywords): New section that describes the compiler
    	code changes for handling Cilk Keywords.
    
    gcc/c/ChangeLog:
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* c-decl.c (finish_function): Added a call for insert_cilk_frame when
    	a spawning function is found.
    	* c-objc-common.h (LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): New #define.
    	(LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise.
    	(LANG_HOOKS_CILKPLUS_DETECT_SPAWN_AND_UNWRAP): Likewise.
    	* c-parser.c (c_parser_statement_after_labels): Added RID_CILK_SYNC
    	case.
    	(c_parser_postfix_expression): Added RID_CILK_SPAWN case.
    	* c-typeck.c (build_compound_expr): Reject _Cilk_spawn in a comma
    	expr.
    	(c_finish_return): Added a check to reject _Cilk_spawn in return
    	expression.
    	(build_cilk_spawn): New function.
    	(build_cilk_sync): Likewise.
    	* Makefile.in (c-decl.o): Added cilk.h in dependency list.
    
    gcc/c-family/ChangeLog
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* c-common.c (c_common_reswords[]): Added _Cilk_spawn and _Cilk_sync
    	fields.
    	(c_define_builtins): Called cilk_init_builtins if Cilk Plus is
    	enabled.
    	* c-common.h (enum rid): Added RID_CILK_SPAWN and RID_CILK_SYNC.
    	(insert_cilk_frame): New prototype.
    	(cilk_init_builtins): Likewise.
    	(gimplify_cilk_spawn): Likewise.
    	(c_cilk_install_body_w_frame_cleanup): Likewise.
    	(cilk_detect_spawn_and_unwrap): Likewise.
    	(cilk_set_spawn_marker): Likewise.
    	(build_cilk_sync): Likewise.
    	(build_cilk_spawn): Likewise.
    	* cilk.c: New file.
    
    gcc/lto/ChangeLog
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* Make-lang.in (lto/lto-lang.o): Added cilk.h in dependency list.
    	* lto-lang.c (lto_init): Added a call to cilk_init_builtins if Cilk
    	Plus is enabled.
    
    gcc/testsuite/ChangeLog
    2013-10-29  Balaji V. Iyer  <balaji.v.iyer@intel.com>
    
    	* c-c++-common/cilk-plus/CK/compound_cilk_spawn.c: New test.
    	* c-c++-common/cilk-plus/CK/concec_cilk_spawn.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib.c: Likewise.
    	* c-c++-common/cilk-plus/CK/no_args_error.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawnee_inline.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawner_inline.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawning_arg.c: Likewise.
    	* c-c++-common/cilk-plus/CK/steal_check.c: Likewise.
    	* c-c++-common/cilk-plus/CK/test__cilk.c: Likewise.
    	* c-c++-common/cilk-plus/CK/varargs_test.c: Likewise.
    	* c-c++-common/cilk-plus/CK/sync_wo_spawn.c: Likewise.
    	* c-c++-common/cilk-plus/CK/invalid_spawn.c: Likewise.
    	* c-c++-common/cilk-plus/CK/spawn_in_return.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib_init_expr_xy.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib_no_sync.c: Likewise.
    	* c-c++-common/cilk-plus/CK/fib_no_return.c: Likewise.
    	* gcc.dg/cilk-plus/cilk-plus.exp: Added support to run Cilk Keywords
    	test stored in c-c++-common.  Also, added the Cilk runtime's library
    	to the ld_library_path.
    
    From-SVN: r204172