===================================================================
@@ -342,6 +342,7 @@
NOT_BUILT_IN = 0,
BUILT_IN_FRONTEND,
BUILT_IN_MD,
+ BUILT_IN_CILK,
BUILT_IN_NORMAL
};
@@ -3680,7 +3681,7 @@
??? The bitfield needs to be able to hold all target function
codes as well. */
ENUM_BITFIELD(built_in_function) function_code : 11;
- ENUM_BITFIELD(built_in_class) built_in_class : 2;
+ ENUM_BITFIELD(built_in_class) built_in_class : 3;
unsigned static_ctor_flag : 1;
unsigned static_dtor_flag : 1;
===================================================================
@@ -149,6 +149,11 @@
DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
true, true, true, ATTRS, false, flag_tm)
+#undef DEF_CILK_BUILTIN_STUB
+#define DEF_CILK_BUILTIN_STUB(ENUM, NAME) \
+ DEF_BUILTIN (ENUM, NAME, BUILT_IN_CILK, BT_LAST, BT_LAST, false, false, \
+ false, ATTR_LAST, false, false)
+
/* Define an attribute list for math functions that are normally
"impure" because some of them may write into global memory for
`errno'. If !flag_errno_math they are instead "const". */
@@ -802,38 +807,39 @@
DEF_BUILTIN_STUB (BUILT_IN_EH_COPY_VALUES, "__builtin_eh_copy_values")
/* Cilk */
-DEF_BUILTIN_STUB(BUILT_IN_CILK_WORKER_ID, "__cilkrts_current_worker_id")
-DEF_BUILTIN_STUB(BUILT_IN_CILK_WORKER_PTR, "__cilkrts_current_worker")
-DEF_BUILTIN_STUB(BUILT_IN_CILK_DETACH, "__cilkrts_detach")
-DEF_BUILTIN_STUB(BUILT_IN_CILK_SYNCHED, "__cilkrts_synched")
-DEF_BUILTIN_STUB(BUILT_IN_CILK_STOLEN, "__cilkrts_was_stolen")
-DEF_BUILTIN_STUB(BUILT_IN_CILK_ENTER_FRAME, "__cilkrts_enter_frame")
-DEF_BUILTIN_STUB(BUILT_IN_CILK_POP_FRAME, "__cilkrts_pop_frame")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_ENTER_BEGIN, "__cilk_enter_begin")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_ENTER_H_BEGIN, "__cilk_enter_helper_begin")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_ENTER_END, "__cilk_enter_end")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_SPAWN_PREPARE, "__cilk_spawn_prepare")
-DEF_BUILTIN_STUB (BUILT_IN_SPAWN_OR_CONT, "__cilk_spawn_or_continue")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_DETACH_BEGIN, "__cilk_detach_begin")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_DETACH_END, "__cilk_detach_end")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_SYNC_BEGIN, "__cilk_sync_begin")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_SYNC_END, "__cilk_sync_end")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_LEAVE_BEGIN, "__cilk_leave_begin")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_LEAVE_END, "__cilk_leave_end")
-DEF_BUILTIN_STUB (BUILT_IN_CILKSCREEN_METACALL, "cilkscreen_metacall")
-DEF_BUILTIN_STUB (BUILT_IN_CILK_RESUME, "cilk_resume")
-DEF_BUILTIN_STUB (BUILT_IN_LEAVE_STOLEN, "cilk_leave_stolen")
-DEF_BUILTIN_STUB (BUILT_IN_SYNC_ABANDON, "cilk_sync_abandon")
-DEF_BUILTIN_STUB (BUILT_IN_CILKSCREEN_EN_INSTR,
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_WORKER_ID, "__cilkrts_current_worker_id")
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_WORKER_PTR, "__cilkrts_current_worker")
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_DETACH, "__cilkrts_detach")
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_SYNCHED, "__cilkrts_synched")
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_STOLEN, "__cilkrts_was_stolen")
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_ENTER_FRAME, "__cilkrts_enter_frame")
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_LEAVE_FRAME, "__cilkrts_leave_frame")
+DEF_CILK_BUILTIN_STUB(BUILT_IN_CILK_POP_FRAME, "__cilkrts_pop_frame")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_ENTER_BEGIN, "__cilk_enter_begin")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_ENTER_H_BEGIN, "__cilk_enter_helper_begin")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_ENTER_END, "__cilk_enter_end")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_SPAWN_PREPARE, "__cilk_spawn_prepare")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_SPAWN_OR_CONT, "__cilk_spawn_or_continue")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_DETACH_BEGIN, "__cilk_detach_begin")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_DETACH_END, "__cilk_detach_end")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_SYNC_BEGIN, "__cilk_sync_begin")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_SYNC_END, "__cilk_sync_end")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_LEAVE_BEGIN, "__cilk_leave_begin")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_LEAVE_END, "__cilk_leave_end")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILKSCREEN_METACALL, "cilkscreen_metacall")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILK_RESUME, "cilk_resume")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_LEAVE_STOLEN, "cilk_leave_stolen")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_SYNC_ABANDON, "cilk_sync_abandon")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILKSCREEN_EN_INSTR,
"cilkscreen_enable_instrumentation")
-DEF_BUILTIN_STUB (BUILT_IN_CILKSCREEN_DS_INSTR,
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILKSCREEN_DS_INSTR,
"cilkscreen_disable_instrumentation")
-DEF_BUILTIN_STUB (BUILT_IN_CILKSCREEN_DS_CHK, "cilkscreen_disable_checking")
-DEF_BUILTIN_STUB (BUILT_IN_CILKSCREEN_EN_CHK, "cilkscreen_enable_checking")
-DEF_BUILTIN_STUB (BUILT_IN_CILKSCREEN_AQUIRE_LOCK, "cilkscreen_aquire_lock")
-DEF_BUILTIN_STUB (BUILT_IN_CILKSCREEN_REL_LOCK, "cilkscreen_release_lock")
-DEF_BUILTIN_STUB (BUILT_IN_NOTIFY_ZC_INTRINSIC, "__notify_zc_intrinsic")
-DEF_BUILTIN_STUB (BUILT_IN_NOTIFY_INTRINSIC, "__notify_intrinsic")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILKSCREEN_DS_CHK, "cilkscreen_disable_checking")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILKSCREEN_EN_CHK, "cilkscreen_enable_checking")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILKSCREEN_AQUIRE_LOCK, "cilkscreen_aquire_lock")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_CILKSCREEN_REL_LOCK, "cilkscreen_release_lock")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_NOTIFY_ZC_INTRINSIC, "__notify_zc_intrinsic")
+DEF_CILK_BUILTIN_STUB (BUILT_IN_NOTIFY_INTRINSIC, "__notify_intrinsic")
/* Synchronization Primitives. */
#include "sync-builtins.def"
===================================================================
@@ -80,7 +80,11 @@
DECL_BUILT_IN_CLASS (fndecl) = BUILT_IN_NORMAL;
DECL_FUNCTION_CODE (fndecl) = code;
if (publish)
- fndecl = lang_hooks.decls.pushdecl (fndecl);
+ {
+ tree t = lang_hooks.decls.pushdecl (fndecl);
+ if (t)
+ fndecl = t;
+ }
set_builtin_decl (code, fndecl, true);
return fndecl;
}
@@ -293,27 +297,9 @@
mark_cold (cilk_leave_fndecl);
cilk_leave_fndecl = lang_hooks.decls.pushdecl (cilk_leave_fndecl);
- cilk_enter_fndecl = build_fn_decl ("__cilkrts_enter_frame", fptr_fun);
- mark_cold (cilk_enter_fndecl);
- cilk_enter_fndecl = lang_hooks.decls.pushdecl (cilk_enter_fndecl);
-
-
-
- cilk_pop_fndecl = install_builtin ("__cilkrts_pop_frame", fptr_fun,
- BUILT_IN_CILK_POP_FRAME, false);
-
- cilk_leave_fndecl = build_fn_decl ("__cilkrts_leave_frame", fptr_fun);
- mark_cold (cilk_leave_fndecl);
- cilk_leave_fndecl = lang_hooks.decls.pushdecl (cilk_leave_fndecl);
-
-
- cilk_sync_fndecl = build_fn_decl ("__cilkrts_sync", fptr_fun);
- mark_cold (cilk_leave_fndecl);
- /* Unlike ordinary library functions cilk_sync can throw. */
-
/* extern void __cilkrts_sync(void) */
cilk_sync_fndecl = build_fn_decl ("__cilkrts_sync", fptr_fun);
- mark_cold (cilk_leave_fndecl);
+ mark_cold (cilk_sync_fndecl);
/* Unlike ordinary library functions cilk_sync can throw.
Exceptions from spawns earlier in the same spawn scope
may be deferred until a sync. */
@@ -448,7 +434,8 @@
return expand_expr (field, NULL_RTX, VOIDmode, EXPAND_NORMAL);
}
-static tree get_frame_arg (tree call)
+static tree
+get_frame_arg (tree call)
{
tree arg, argtype;
@@ -461,7 +448,9 @@
return NULL_TREE;
argtype = TREE_TYPE (argtype);
- if (!lang_hooks.types_compatible_p (argtype, cilk_frame_type_decl))
+
+ if (lang_hooks.types_compatible_p &&
+ !lang_hooks.types_compatible_p (argtype, cilk_frame_type_decl))
return NULL_TREE;
return arg;
@@ -1059,8 +1048,7 @@
}
rtx
-expand_builtin_cilk_metadata (const char *annotation ATTRIBUTE_UNUSED,
- tree exp ATTRIBUTE_UNUSED)
+expand_builtin_cilk_metadata (const char *annotation, tree exp)
{
rtx metadata_label = NULL_RTX, call_insn = NULL_RTX;
rtx expr_list_rtx = NULL_RTX, ii_rtx = NULL_RTX, reg_rtx = NULL_RTX;
@@ -1114,8 +1102,11 @@
}
metadata_info.ptr_next = NULL;
insert_into_zca_list (metadata_info);
- if (cfun)
- cfun->calls_notify_intrinsic = 1;
+ if (cfun)
+ {
+ cfun->calls_notify_intrinsic = 1;
+ cfun->is_cilk_function = 1;
+ }
return const0_rtx;
}
===================================================================
@@ -316,4 +316,5 @@
extern enum elem_fn_parm_type find_elem_fn_parm_type (gimple, tree, tree *);
extern tree find_elem_fn_name (tree, tree, tree);
elem_fn_info *extract_elem_fn_values (tree);
+extern void array_notation_init_builtins (void);
#endif /* GCC_CILK_H */
===================================================================
@@ -35,6 +35,7 @@
#include "diagnostic-core.h"
#include "toplev.h"
#include "lto-streamer.h"
+#include "cilk.h"
static tree lto_type_for_size (unsigned, int);
@@ -666,6 +667,14 @@
lto_init_attributes ();
+ /* this function will initialize all the builtin functions required by
+ * the cilkplus port */
+ if (flag_enable_cilk)
+ {
+ cilk_init_builtins ();
+ array_notation_init_builtins ();
+ }
+
#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P,\
NONANSI_P, ATTRS, IMPLICIT, COND) \
if (NAME && COND) \
===================================================================
@@ -0,0 +1,5 @@
+2012-06-15 Balaji V. Iyer <balaji.v.iyer@intel.com>
+
+ * lto-lang.c (lto_define_builtins): If cilk flag is set we initialize
+ all array notation and cilk builtin functions.
+
===================================================================
@@ -1,3 +1,16 @@
+2012-06-15 Balaji V. Iyer <balaji.v.iyer@intel.com>
+
+ * cilk.c (install_builtin): Added a check if pushdecl is successful.
+ Only update the fndecl if it is.
+ (cilk_init_builtins): Removed duplicate code and changed fixed a small
+ bug.
+ (get_frame_arg): Added a check if compatable_p is available.
+ (expand_builtin_cilk_metadata): Removed attribute_unused for the parms,
+ and set is_cilk_function whenever notify_intrinsic is set.
+ * tree.h (GTY): Added a new enum field called BUILT_IN_CILK.
+ * builtins.def: Set the builtin type as BUILT_IN_CILK for all cilk
+ related functions.
+
2012-06-11 Balaji V. Iyer <balaji.v.iyer@intel.com>
* cilk.c (cilk_init_builtins): Made the stack frame structure runtime