summaryrefslogtreecommitdiff
path: root/libcilkrts
diff options
context:
space:
mode:
authorbviyer <bviyer@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-19 03:43:21 +0000
committerbviyer <bviyer@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-19 03:43:21 +0000
commit76a2f4fff059dc28d4e481fbef538828478ff22e (patch)
tree122619ab8476ac382844c8e13cb6a27127b78948 /libcilkrts
parent70d26ff65e921d9a00d5b7b7ba8b4c693953527c (diff)
downloadgcc-76a2f4fff059dc28d4e481fbef538828478ff22e.tar.gz
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. + git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207870 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcilkrts')
-rw-r--r--libcilkrts/ChangeLog7
-rw-r--r--libcilkrts/include/cilk/common.h11
-rw-r--r--libcilkrts/runtime/cilk-abi-cilk-for.cpp10
3 files changed, 22 insertions, 6 deletions
diff --git a/libcilkrts/ChangeLog b/libcilkrts/ChangeLog
index c340785992d..434b974d635 100644
--- a/libcilkrts/ChangeLog
+++ b/libcilkrts/ChangeLog
@@ -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
diff --git a/libcilkrts/include/cilk/common.h b/libcilkrts/include/cilk/common.h
index d2c84fa95a2..97dd66e0639 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 4fa6dcec82a..4cd04f521cf 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;