@@ -1,3 +1,10 @@
+2014-02-18 Balaji V. Iyer <balaji.v.iyer@intel.com>
+
+ * include/cilk/common.h (__CILKRTS_ABI_VERSION): Set the ABI version
+ to 1 instead of 0.
+ * runtime/cilk-abi-cilk-for.cpp (cilk_for_recursive): Added a fix to
+ initialize stack frame correctly.
+
2014-02-10 Balaji V. Iyer <balaji.v.iyer@intel.com>
PR target/59691
@@ -317,13 +317,12 @@ namespace cilk {
#ifndef __CILKRTS_ABI_VERSION
# ifdef IN_CILK_RUNTIME
# define __CILKRTS_ABI_VERSION 1
-# elif __INTEL_COMPILER > 1200
- // Intel compiler version >= 12.1
-# define __CILKRTS_ABI_VERSION 1
-# else
- // Compiler does not support ABI version 1
- // (Non-Intel compiler or Intel compiler prior to version 12.1).
+# elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER <= 1200)
+ // Intel compilers prior to version 12.1 support only ABI 0
# define __CILKRTS_ABI_VERSION 0
+# else
+ // Non-Intel compiler or Intel compiler after version 12.0.
+# define __CILKRTS_ABI_VERSION 1
# endif
#endif
@@ -256,9 +256,19 @@ tail_recurse:
// argument list of the spawned function, hence the call to
// capture_spawn_arg_stack_frame().
__cilkrts_stack_frame *sf;
+#if defined(__GNUC__) && ! defined(__INTEL_COMPILER) && ! defined(__clang__)
+ // The current version of gcc initializes the sf structure eagerly.
+ // We can take advantage of this fact to avoid calling
+ // `capture_spawn_arg_stack_frame` when compiling with gcc.
+ // Remove this if the "shrink-wrap" optimization is implemented.
+ sf = w->current_stack_frame;
+ _Cilk_spawn cilk_for_recursive(low, mid, body, data, grain, w,
+ loop_root_pedigree);
+#else
_Cilk_spawn cilk_for_recursive(low, mid, body, data, grain,
capture_spawn_arg_stack_frame(sf, w),
loop_root_pedigree);
+#endif
w = sf->worker;
low = mid;