Hello Everyone,
        This patch will fix two minor issues in libcilkrts. First being that we 
default to ABI 0 and secondly, fix an issue to initialize the stack frame 
correctly. All the changes are in libcilkrts and does not cause any regression 
failures.

Thanks,

Balaji V. Iyer.
diff --git a/libcilkrts/ChangeLog b/libcilkrts/ChangeLog
index c340785..434b974 100644
--- a/libcilkrts/ChangeLog
+++ b/libcilkrts/ChangeLog
@@ -1,3 +1,10 @@
+2014-02-18  Balaji V. Iyer  <balaji.v.i...@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.i...@intel.com>
 
        PR target/59691
diff --git a/libcilkrts/include/cilk/common.h b/libcilkrts/include/cilk/common.h
index d2c84fa..97dd66e 100644
--- a/libcilkrts/include/cilk/common.h
+++ b/libcilkrts/include/cilk/common.h
@@ -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
 
diff --git a/libcilkrts/runtime/cilk-abi-cilk-for.cpp 
b/libcilkrts/runtime/cilk-abi-cilk-for.cpp
index 4fa6dce..4cd04f5 100644
--- a/libcilkrts/runtime/cilk-abi-cilk-for.cpp
+++ b/libcilkrts/runtime/cilk-abi-cilk-for.cpp
@@ -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;
 

Reply via email to