Import libcilkrts Build 4467 (PR target/68945)
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Thu, 1 Dec 2016 14:48:49 +0000 (14:48 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Thu, 1 Dec 2016 14:48:49 +0000 (14:48 +0000)
PR target/68945
Merge from upstream, version 2.0.4467.0.
Fix typo in git URL.
* aclocal.m4, configure, Makefile.in: Regenerate.

From-SVN: r243112

29 files changed:
libcilkrts/ChangeLog
libcilkrts/Makefile.am
libcilkrts/Makefile.in
libcilkrts/README
libcilkrts/configure
libcilkrts/configure.ac
libcilkrts/configure.tgt
libcilkrts/include/cilk/cilk_undocumented.h
libcilkrts/include/internal/cilk_version.h
libcilkrts/include/internal/rev.mk
libcilkrts/runtime/cilk-abi.c
libcilkrts/runtime/cilk_fiber-unix.cpp
libcilkrts/runtime/cilk_fiber.h
libcilkrts/runtime/config/arm/os-fence.h
libcilkrts/runtime/config/sparc/cilk-abi-vla.c [new file with mode: 0644]
libcilkrts/runtime/config/sparc/os-fence.h [new file with mode: 0644]
libcilkrts/runtime/config/sparc/os-unix-sysdep.c [new file with mode: 0644]
libcilkrts/runtime/except-gcc.cpp
libcilkrts/runtime/global_state.cpp
libcilkrts/runtime/global_state.h
libcilkrts/runtime/jmpbuf.h
libcilkrts/runtime/linux-symbols.ver
libcilkrts/runtime/local_state.h
libcilkrts/runtime/mac-symbols.txt
libcilkrts/runtime/os-unix.c
libcilkrts/runtime/record-replay.cpp
libcilkrts/runtime/scheduler.c
libcilkrts/runtime/scheduler.h
libcilkrts/runtime/sysdep-unix.c

index 68ca82a76ee2aa424a72ba116ede98707ce87f29..443f0a2e2a903afe45de577da292e329a88cc924 100644 (file)
@@ -1,3 +1,10 @@
+2016-12-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       PR target/68945
+       Merge from upstream, version 2.0.4467.0.
+       Fix typo in git URL.
+       * aclocal.m4, configure, Makefile.in: Regenerate.
+
 2016-11-15  Matthias Klose  <doko@ubuntu.com>
 
        * configure: Regenerate.
index 3736a636fb179c50c27e07d75bd78d141534c296..1dec6aa25a16e0e9f8ea38c46a8ad18e95a12390 100644 (file)
@@ -54,7 +54,7 @@ GENERAL_FLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/runtime -I$(top_srcdir)/
 # Enable Intel Cilk Plus extension
 GENERAL_FLAGS += -fcilkplus
 
-# Always generate unwind tables
+#Always generate unwind tables
 GENERAL_FLAGS += -funwind-tables
 
 AM_CFLAGS = $(XCFLAGS) $(GENERAL_FLAGS) -std=c99
index ff88e9dab89e808ec8e302cffcb0785e59bd4f54..6520b16012c18b24166e1555cdf8d534617bba9a 100644 (file)
@@ -396,7 +396,7 @@ ACLOCAL_AMFLAGS = -I .. -I ../config
 
 # Enable Intel Cilk Plus extension
 
-# Always generate unwind tables
+#Always generate unwind tables
 GENERAL_FLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/runtime \
        -I$(top_srcdir)/runtime/config/$(config_dir) \
        -I$(top_srcdir)/runtime/sslib -DIN_CILK_RUNTIME=1 -fcilkplus \
@@ -455,7 +455,7 @@ libcilkrts_la_SOURCES = \
   runtime/sysdep-unix.c            \
   runtime/worker_mutex.c
 
-CILK_REVISION = 4420
+CILK_REVISION = 4467
 
 # Load the $(REVISION) value.
 
index d3503f44e34d3b8338f60db7237ad133988f1171..54f8b0442947699eb6a2f82b8047841f690fa86b 100644 (file)
@@ -1,14 +1,16 @@
-Intel(R) Cilk(TM) Plus runtime library
+Intel(R) Cilk(TM) Plus Runtime Library
 
 Index:
-1. BUILDING
-2. USING
-3. DOXYGEN DOCUMENTATION
-4. QUESTIONS OR BUGS
-5. CONTRIBUTIONS
+1. BUILDING WITH AUTOMAKE
+2. BUILDING WITH CMAKE
+3. INSTALLING TO VXWORKS
+4. USING
+5. DOXYGEN DOCUMENTATION
+6. QUESTIONS OR BUGS
+7. CONTRIBUTIONS
 
 #
-#  1. BUILDING:
+#  1. BUILDING WITH AUTOMAKE:
 #
 
 To distribute applications that use the Intel Cilk Plus language
@@ -40,22 +42,87 @@ configure script:
 
 % ./configure --prefix=/your/path/to/lib
 
-It is also possible to use CMake if the above method does not apply
-well in your environment. Instruction is available in CMakeLists.txt.
+#
+#  2. BUILDING WITH CMAKE:
+#
+
+To distribute applications that use the Intel Cilk Plus language
+extensions to non-development systems, you need to build the Intel
+Cilk Plus runtime library and distribute it with your application.
+This instruction describes the build process using CMake*, which
+supports Linux*, Windows*, and OS X*.  It is fine to use this process
+to build a Linux library, but it is highly recommended to use the
+more mature build process described above when building on Linux.
+
+You need the CMake tool and a C/C++ compiler that supports the Intel
+Cilk Plus language extensions, and the requirements for each operating
+systems are:
+
+Common:
+    CMake 3.0.0 or later
+    Make tools such as make (Linux, OS X) or nmake (Windows)
+Linux:
+    GCC* 4.9.2 or later, or Intel(R) C++ Compiler v12.1 or later
+Windows:
+    Intel C++ Compiler v12.1 or later
+    Visual Studio* 2010 or later
+OS X:
+    Cilk-enabled branch of Clang*/LLVM* (http://cilkplus.github.io),
+    or Intel C++ Compiler v12.1 or later
+
+The common steps to build the libraries are 1) invoke cmake with
+appropriate options, 2) invoke a make tool available on the system.
+The following examples show build processes on OS X and Windows.
+
+OS X:
+    % mkdir ./build && cd ./build
+    % cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
+            -DCMAKE_INSTALL_PREFIX=./install ..
+    % make && make install
+
+Windows:
+    % mkdir .\build && cd .\build
+    % cmake -G "NMake Makefiles" -DCMAKE_C_COMPILER=icl \
+            -DCMAKE_CXX_COMPILER=icl -DCMAKE_INSTALL_PREFIX=.\install ..
+    % nmake && nmake install
+
+#
+#  3. INSTALLING TO VXWORKS OS
+#
+
+For Windows host, run VxWorks_Install.bat.
+For Linux host, run VxWorks_Install.sh.
+
+You may need to give environment variable WIND_BASE to indicate VxWorks
+installation path.
+
+Create a VSB project, and you will see a layer named "CILKPLUS_KERNEL".
+Enable it and build the project.
+
+Create a VIP project with ICC and add component INCLUDE_CILKPLUS, then you
+will get support of Intel Cilk Plus features in VxWorks.
 
 #
-#  2. USING:
+#  4. USING:
 #
 
 The Intel(R) C++ Compiler will automatically try to bring in the
 Intel Cilk Plus runtime in any program that uses the relevant
-features.  GCC requires explicit linking of both the library and
-its dependencies (libpthread, libdl).  For example:
+features.  GCC and Clang requires an explicit compiler option,
+-fcilkplus, to enable Intel Cilk Plus language extensions.
+For example,
+
+% gcc -fcilkplus -o foo.exe foo.c
+% clang -fcilkplus -o foo.exe foo.c 
+
+Older GCC versions (e.g., 4.8 cilkplus branch) requires explicit linking
+of both the library and its dependencies (libpthread, libdl).
+For example:
 
 % gcc foo.c -lcilkrts -lpthread -ldl
 
 #
-#  3. DOXYGEN DOCUMENTATION:
+#  5. DOXYGEN DOCUMENTATION:
 #
 
 The library source has Doxygen markup.  Generate HTML documentation
@@ -64,7 +131,7 @@ based on the markup by changing directory into runtime and running:
 % doxygen doxygen.cfg
 
 #
-#  4. QUESTIONS OR BUGS:
+#  6. QUESTIONS OR BUGS:
 #
 
 Issues with the Intel Cilk Plus runtime can be addressed in the Intel
@@ -72,7 +139,7 @@ Cilk Plus forums:
 http://software.intel.com/en-us/forums/intel-cilk-plus/
 
 #
-#  5. CONTRIBUTIONS:
+#  7. CONTRIBUTIONS:
 #
 
 The Intel Cilk Plus runtime library is dual licensed. The upstream copy
@@ -85,6 +152,13 @@ contributed to the upstream version via http://cilkplus.org/.
 Thanks to Tobias Burnus for showing us the magic to make gcc and g++
 automatically include the Cilk Plus runtime.
 
+Thanks to Eric Olson for sharing his patch for Raspberry Pi* with us.
+
+Thanks to Rainer Orth for submitting patches for exception handling and
+enabling Cilk Plus on the SPARC* architecture.
+
 ------------------------
 Intel and Cilk are trademarks of Intel Corporation in the U.S. and/or
 other countries.
+
+*Other names and brands may be claimed as the property of others.
index c04df2bafba4998da47618defd37578346d01bfd..ecf88eee2a9bec9ca3fe6dfe69d1e9c03f2d2edc 100644 (file)
@@ -5676,6 +5676,50 @@ _ACEOF
 fi
 
 
+# Check for dl functions
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dladdr in -ldl" >&5
+$as_echo_n "checking for dladdr in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dladdr+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dladdr ();
+int
+main ()
+{
+return dladdr ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dladdr=yes
+else
+  ac_cv_lib_dl_dladdr=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dladdr" >&5
+$as_echo "$ac_cv_lib_dl_dladdr" >&6; }
+if test "x$ac_cv_lib_dl_dladdr" = x""yes; then :
+
+$as_echo "#define HAVE_DLADDR 1" >>confdefs.h
+
+fi
+
+
 # Check whether the target supports protected visibility.
 save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS -Werror"
@@ -5766,11 +5810,7 @@ esac
 # contains information on what's needed
 case "${target}" in
 
-  x86_64-*-*)
-    config_dir="x86"
-    ;;
-
-  i?86-*-*)
+  i?86-*-* | x86_64-*-*)
     config_dir="x86"
     ;;
 
@@ -5778,6 +5818,10 @@ case "${target}" in
     config_dir="arm"
     ;;
 
+  sparc*-*-*)
+    config_dir="sparc"
+    ;;
+
   *)
     config_dir="generic"
     ;;
@@ -11893,7 +11937,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11896 "configure"
+#line 11940 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11999,7 +12043,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12002 "configure"
+#line 12046 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
index 39efeb4f532bcc1036f035b3fb0fbdb2cc9afece..8270e0b8bd9d025c50e3fac2209ca4aa76da4614 100644 (file)
@@ -69,6 +69,10 @@ AC_PROG_CXX
 AC_CONFIG_FILES([Makefile libcilkrts.spec])
 AC_FUNC_ALLOCA
 
+# Check for dl functions
+AC_CHECK_LIB(dl, dladdr,
+             [AC_DEFINE(HAVE_DLADDR, 1, [Define if you have dladdr()])])
+
 # Check whether the target supports protected visibility.
 save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS -Werror"
@@ -141,11 +145,7 @@ esac
 # contains information on what's needed
 case "${target}" in
 
-  x86_64-*-*)
-    config_dir="x86"
-    ;;
-
-  i?86-*-*)
+  i?86-*-* | x86_64-*-*)
     config_dir="x86"
     ;;
 
@@ -153,6 +153,10 @@ case "${target}" in
     config_dir="arm"
     ;;
 
+  sparc*-*-*)
+    config_dir="sparc"
+    ;;
+
   *)
     config_dir="generic"
     ;;
index 7f0befc870c25e91614750c3e178b61c528b40cb..71f69b0840a3aedabe12a1867ab7ac825ae5b0c2 100644 (file)
 
 # Disable Cilk Runtime library for unsupported architectures.
 case "${target}" in
-  x86_64-*-*)
-    ;;
-  i?86-*-*)
+  i?86-*-* | x86_64-*-*)
     ;;
   arm-*-*)
     ;;
+  sparc*-*-*)
+    ;;
   *-*-*)
     UNSUPPORTED=1
     ;;
index 5f4a8c5dff16fabd41166397453d382726776fd2..71a51ec52d6b4a89b19382eec7fa7248db91360e 100644 (file)
@@ -106,9 +106,6 @@ size_t __cilkrts_get_stack_size(void);
 CILK_EXPORT __CILKRTS_NOTHROW
 void __cilkrts_dump_stats(void);
 
-CILK_EXPORT __CILKRTS_NOTHROW
-int __cilkrts_irml_version(void);
-
 struct __cilk_tbb_unwatch_thunk;
 struct __cilk_tbb_stack_op_thunk;
 
index 95e1f2ec5443da2ee5c7648fa19bdb98123e5329..c997b026f9d1b653f1fd484915422a3e0a0e9811 100644 (file)
 
 #define VERSION_MAJOR 2
 #define VERSION_MINOR 0
-#define VERSION_BUILD 4420
+#define VERSION_BUILD 4467
 #define VERSION_REV 0
-#define VERSION_STRING "2,0,4420,0"
-#define VERSION_HASH "3b2d6aa9059c"
+#define VERSION_STRING "2,0,4467,0"
+#define VERSION_HASH "b7e54d87bd17"
 #define VERSION_BRANCH "eng"
-#define TBB_REV_NUMBER "14788"
-#define VERSION_YEAR "2015"
+#define TBB_REV_NUMBER ""
+#define VERSION_YEAR "2016"
index 96ffdc4aa4e6ed4db37bf04018085f44e76e56b8..cd78865739b5f03bae252186653ef62334f99bff 100644 (file)
@@ -49,4 +49,4 @@
 #
 # It was automatically generated by cilkrts/include/internal/Makefile
 
-CILK_REVISION = 4420
+CILK_REVISION = 4467
index 35bb413bf0a2212eb41fe681f9ab858741d9cd35..8487873f00e1b0882b97762e16401785b9968bbd 100644 (file)
@@ -709,7 +709,6 @@ __cilkrts_watch_stack(__cilk_tbb_unwatch_thunk *u,
     return 0;   /* Success! */
 }
 
-
 // This function must be called only within a continuation, within the stack
 // frame of the continuation itself.
 CILK_API_INT __cilkrts_synched(void)
index d59bfcae4cb561f0d021aa84b8b68e14cab676f9..c38c49f553846b2ae482bce97e0bba9607c5b770 100644 (file)
@@ -220,7 +220,7 @@ NORETURN cilk_fiber_sysdep::run()
         // enough extra space from the top of the stack we are
         // switching to for any temporaries required for this run()
         // function.
-        JMPBUF_SP(m_resume_jmpbuf) = m_stack_base - frame_size;
+        JMPBUF_SP(m_resume_jmpbuf) = CILK_ADJUST_SP(m_stack_base - frame_size);
 
         // GCC doesn't allow us to call __builtin_longjmp in the same function
         // that calls __builtin_setjmp, so it's been moved into it's own
index d91687aa57a237a731e28fddb756205221f30276..43057f22a155d43f2223a606e4629d524c9616b4 100644 (file)
  *
  * A value of 0 means no debugging.
  * Higher values generate more debugging output.
+ *
  */
-#define FIBER_DEBUG 0
 
+#ifndef FIBER_DEBUG
+#define FIBER_DEBUG 0
+#endif
 /**
  * @brief Flag for validating reference counts.
  * 
index 67e157a19e54cf4cf869d965fa84c55833d68cb8..779a2dc04858572bb53efd9b62c3df036f2f3a23 100644 (file)
  *  for your assistance in helping us improve Cilk Plus.
  **************************************************************************/
 
+// __atomic_* intrinsics are available since GCC 4.7.
+#define HAVE_ATOMIC_INTRINSICS defined(__GNUC__) && \
+                               (__GNUC__ * 10 + __GNUC_MINOR__ >= 47)
+
+// GCC before 4.4 does not implement __sync_synchronize properly
+#define HAVE_SYNC_INTRINSICS defined(__GNUC__) && \
+                             (__GNUC__ * 10 + __GNUC_MINOR__ >= 44)
+
 /*
  * void __cilkrts_fence(void)
  *
  * the CPUID instruction).
  */
 
-// COMMON_SYSDEP void __cilkrts_fence(void); ///< MFENCE instruction
-# define __cilkrts_fence() __asm__ __volatile__ ("mcr   p15,0,%[t],c7,c10,4\n" :: [t] "r" (0) : "memory");
+#if HAVE_ATOMIC_INTRINSICS
+#   define __cilkrts_fence() __atomic_thread_fence(__ATOMIC_SEQ_CST)
+#elif HAVE_SYNC_INTRINSICS
+#   define __cilkrts_fence() __sync_synchronize()
+#else
+#   define __cilkrts_fence()
+// Leaving this code just in case.
+//# define __cilkrts_fence() __asm__ __volatile__ ("mcr   p15,0,%[t],c7,c10,4\n" :: [t] "r" (0) : "memory");
+#endif
diff --git a/libcilkrts/runtime/config/sparc/cilk-abi-vla.c b/libcilkrts/runtime/config/sparc/cilk-abi-vla.c
new file mode 100644 (file)
index 0000000..cf88d99
--- /dev/null
@@ -0,0 +1,115 @@
+/* cilk-abi-vla.cpp                  -*-C++-*-
+ *
+ *************************************************************************
+ *
+ *  Copyright (C) 2013-2016, Intel Corporation
+ *  All rights reserved.
+ *  
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in
+ *      the documentation and/or other materials provided with the
+ *      distribution.
+ *    * Neither the name of Intel Corporation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *  
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ *  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+ *  WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  POSSIBILITY OF SUCH DAMAGE.
+ *  
+ *  *********************************************************************
+ *  
+ *  PLEASE NOTE: This file is a downstream copy of a file mainitained in
+ *  a repository at cilkplus.org. Changes made to this file that are not
+ *  submitted through the contribution process detailed at
+ *  http://www.cilkplus.org/submit-cilk-contribution will be lost the next
+ *  time that a new version is released. Changes only submitted to the
+ *  GNU compiler collection or posted to the git repository at
+ *  https://bitbucket.org/intelcilkruntime/intel-cilk-runtime.git are
+ *  not tracked.
+ *  
+ *  We welcome your contributions to this open source project. Thank you
+ *  for your assistance in helping us improve Cilk Plus.
+ *
+ **************************************************************************/
+
+/*
+ * Implementation of Variable Length Array (VLA) ABI.
+ *
+ * The compiler calls these functions to allocate Variable Length Arrays
+ * at runtime.  The compiler must guarantee that __cilkrts_stack_free() is
+ * called to cleanup any memory allocated by __cilkrts_stack_alloc().
+ *
+ * This generic implementation always allocates the memory from the heap.
+ * Optimally, the implementation should expand the frame of the calling
+ * function if possible, since that will be faster.  See the x86 version
+ * for one possible implementation.
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "internal/abi.h"
+#include "cilk-abi-vla-internal.h"
+
+// Allocate space for a variable length array
+CILK_ABI(__cilkrts_void_ptr)
+__cilkrts_stack_alloc(
+    __cilkrts_stack_frame *sf,
+    size_t size,
+    size_t distance_from_sp_to_alloca_area,
+    uint32_t align,     // align is always >= minimum stack alignment and
+                        // >= ptr_size as well, and must be a power of 2.
+    uint32_t needs_tag  // non-zero if the pointer being returned needs to
+                        // be tagged
+)
+{
+    // full_size will be a multiple of align, and contains
+    // enough extra space to allocate a marker.
+    size_t full_size = (size + align - 1) & ~(align - 1);
+
+    // Allocate memory from the heap.  The compiler is responsible
+    // for guaranteeing us a chance to free it before the function
+    // exits
+
+    return (void *)vla_internal_heap_alloc(sf, full_size, align);
+}
+
+// Free the space allocated for a variable length array.
+CILK_ABI(void)
+__cilkrts_stack_free(
+    __cilkrts_stack_frame *sf,
+    void *p,
+    size_t size,
+    size_t distance_from_sp_to_alloca_area,
+    uint32_t align, // same requirements as for align in allocation,
+                    // and must match alignment that was passed when
+                    // doing the allocation 
+    uint32_t known_from_stack  // non-zero if this is known to be allocated
+                               // on the stack, and therefore has no tag
+)
+{
+    // full_size will be a multiple of align, and contains
+    // enough extra space to allocate a marker if one was needed.
+    size_t full_size = (size + align - 1) & ~(align - 1);
+
+    // Just free the allocated memory to the heap since we don't know
+    // how to expand/contract the calling frame
+    vla_internal_heap_free(p, full_size);
+}
diff --git a/libcilkrts/runtime/config/sparc/os-fence.h b/libcilkrts/runtime/config/sparc/os-fence.h
new file mode 100644 (file)
index 0000000..24e7993
--- /dev/null
@@ -0,0 +1,64 @@
+/* os.h                  -*-C++-*-
+ *
+ *************************************************************************
+ *
+ *  Copyright (C) 2009-2016, Intel Corporation
+ *  All rights reserved.
+ *  
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in
+ *      the documentation and/or other materials provided with the
+ *      distribution.
+ *    * Neither the name of Intel Corporation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *  
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ *  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+ *  WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  POSSIBILITY OF SUCH DAMAGE.
+ *  
+ *  *********************************************************************
+ *  
+ *  PLEASE NOTE: This file is a downstream copy of a file mainitained in
+ *  a repository at cilkplus.org. Changes made to this file that are not
+ *  submitted through the contribution process detailed at
+ *  http://www.cilkplus.org/submit-cilk-contribution will be lost the next
+ *  time that a new version is released. Changes only submitted to the
+ *  GNU compiler collection or posted to the git repository at
+ *  https://bitbucket.org/intelcilkruntime/intel-cilk-runtime.git are
+ *  not tracked.
+ *  
+ *  We welcome your contributions to this open source project. Thank you
+ *  for your assistance in helping us improve Cilk Plus.
+ **************************************************************************/
+
+// GCC before 4.4 does not implement __sync_synchronize properly
+#define HAVE_SYNC_INTRINSICS defined(__GNUC__) && \
+                             (__GNUC__ * 10 + __GNUC_MINOR__ >= 44)
+
+/*
+ * void __cilkrts_fence(void)
+ */
+
+#if HAVE_SYNC_INTRINSICS
+#   define __cilkrts_fence() __sync_synchronize()
+#elif defined(__GNUC__)
+#   define __cilkrts_fence() __asm__ volatile ("membar #StoreLoad" ::: "memory")
+#else
+COMMON_SYSDEP void __cilkrts_fence(void);
+#endif
diff --git a/libcilkrts/runtime/config/sparc/os-unix-sysdep.c b/libcilkrts/runtime/config/sparc/os-unix-sysdep.c
new file mode 100644 (file)
index 0000000..997e9f6
--- /dev/null
@@ -0,0 +1,115 @@
+/* os-unix-sysdep.c                  -*-C-*-
+ *
+ *************************************************************************
+ *
+ *  Copyright (C) 2009-2016, Intel Corporation
+ *  All rights reserved.
+ *  
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in
+ *      the documentation and/or other materials provided with the
+ *      distribution.
+ *    * Neither the name of Intel Corporation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *  
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ *  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+ *  WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  POSSIBILITY OF SUCH DAMAGE.
+ *  
+ *  *********************************************************************
+ *  
+ *  PLEASE NOTE: This file is a downstream copy of a file mainitained in
+ *  a repository at cilkplus.org. Changes made to this file that are not
+ *  submitted through the contribution process detailed at
+ *  http://www.cilkplus.org/submit-cilk-contribution will be lost the next
+ *  time that a new version is released. Changes only submitted to the
+ *  GNU compiler collection or posted to the git repository at
+ *  https://bitbucket.org/intelcilkruntime/intel-cilk-runtime.git are
+ *  not tracked.
+ *  
+ *  We welcome your contributions to this open source project. Thank you
+ *  for your assistance in helping us improve Cilk Plus.
+ *************************************************************************
+ *
+ * This file contains system-specific code for sparc-based systems
+ */
+
+#include "os.h"
+#include "sysdep.h"
+
+/*
+ * The cycle counter is used for debugging.  This function is only called if
+ * CILK_PROFILE is defined when the runtime is built.
+ */
+COMMON_SYSDEP unsigned long long __cilkrts_getticks(void)
+{
+    unsigned long long tick;
+#ifdef __sparcv9
+    __asm__ volatile("rd %%tick, %0" : "=r"(tick));
+#else
+    __asm__ volatile("rd %%tick, %L0\n"
+                     "srlx %L0, 32, %H0"
+                     : "=r"(tick));
+#endif
+    return tick;
+}
+
+/*
+ * A "short pause" - called from the Cilk runtime's spinloops.
+ */
+COMMON_SYSDEP void __cilkrts_short_pause(void)
+{
+    /* Spin around for 8 cycles.  */
+    __asm__ volatile("rd %ccr, %g0");
+    __asm__ volatile("rd %ccr, %g0");
+    __asm__ volatile("rd %ccr, %g0");
+    __asm__ volatile("rd %ccr, %g0");
+}
+
+/*
+ * Interlocked exchange - used to implement the Cilk runtime's spinloops
+ */
+COMMON_SYSDEP int __cilkrts_xchg(volatile int *ptr, int x)
+{
+    x = __sync_lock_test_and_set(ptr, x);
+    return x;
+}
+
+
+/*
+ * Restore the floating point state that is stored in a stack frame at each
+ * spawn.  This should be called each time a frame is resumed.
+ *
+ * Only valid for IA32 and Intel64 processors.
+ */
+void restore_x86_fp_state (__cilkrts_stack_frame *sf)
+{
+}
+
+
+/*
+ * Save the floating point state to the __cilkrts_stack_frame at each spawn.
+ *
+ * Architecture-specific - Should only be needed on IA32 and Intel64
+ * processors.
+ */
+void sysdep_save_fp_ctrl_state(__cilkrts_stack_frame *sf)
+{
+}
+
index 4940acb41f7a1789988f30962924c153a78fdf2c..7fc6e6b79b0250828575e81d18ad6c6c228bbb88 100644 (file)
@@ -60,7 +60,9 @@
 #include <stdint.h>
 #include <typeinfo>
 
+#ifndef DEBUG_EXCEPTIONS
 #define DEBUG_EXCEPTIONS 0
+#endif
 
 struct pending_exception_info
 {
index 2af6697b27a4ed6795c29bab6c3afc1ac7c31430..6c77b5f766af0b45ed67dac628fc74504613a91e 100644 (file)
@@ -579,7 +579,6 @@ global_state_t* cilkg_init_global_state()
     g->stack_size = cilkos_validate_stack_size(g->stack_size);
     g->failure_to_allocate_stack = 0;
 
-
     return g;
 }
 
index 527a4b54e4504b50d68bdb669b39fe1143d4134e..f5937b89c7b6b97618e457d203670f5e766e2e8d 100644 (file)
@@ -215,7 +215,6 @@ struct global_state_t { /* COMMON_PORTABLE */
     /// Global fiber pool
     cilk_fiber_pool fiber_pool;
 
-
     /**
      * @brief Track whether the runtime has failed to allocate a
      * stack.
index 0ce7ff8dbb28c06644732ae7bf2cfc183208557d..9ae2fd24bd3d266ef045e50d7374bb5bc08ca0ff 100644 (file)
  */
 #define SP(SF) JMPBUF_SP((SF)->ctx)
 
+/**
+ * @brief Some architecture-dependent stack adjustment.
+ */
+#if defined(__sparcv9)
+    // Subtract sparc v9 stack bias so the actual stack starts at the
+    // allocated area.
+#   define CILK_ADJUST_SP(SP) ((SP) - 2047)
+#   define CILK_UNADJUST_SP(SP) ((SP) + 2047)
+#else
+#   define CILK_ADJUST_SP(SP) (SP)
+#   define CILK_UNADJUST_SP(SP) (SP)
+#endif
 
 __CILKRTS_BEGIN_EXTERN_C
 
@@ -120,7 +132,7 @@ __CILKRTS_BEGIN_EXTERN_C
  */
 inline char *__cilkrts_get_sp(__cilkrts_stack_frame *sf)
 {
-    return (char *)SP(sf);
+    return (char *)CILK_UNADJUST_SP(SP(sf));
 }
 
 /**
index d6568421a50cfe244133e6441f12bd9fbd788262..57b4e8a08a9c6a7753ccaf3cd054c326de41d459 100644 (file)
@@ -71,7 +71,6 @@ CILKABI0
     __cilkrts_hyperobject_dealloc;
     __cilkrts_hyperobject_noop_destroy;
     __cilkrts_init;
-    __cilkrts_irml_version;
     __cilkrts_leave_frame;
     __cilkrts_metacall;
     __cilkrts_rethrow;
index d16599f1add45038ba44df38a483e2c3b971a930..9b286853d0318a5162b7c54e34060352063069f3 100644 (file)
@@ -359,6 +359,13 @@ struct local_state  /* COMMON_PORTABLE */
      */
     unsigned int steal_failure_count;
 
+    /**
+     * Record indicating that the worker stole work at least once.
+     *
+     * [local read/write]
+     */
+    int has_stolen;
+
     /**
      * 1 if work was stolen from another worker.  When true, this will flag
      * setup_for_execution_pedigree to increment the pedigree when we resume
index efec3e984fd0c2e39981257ed27d509a672e07c6..29bf4817a665d956a1ce0ea9c8dbe9d902d28966 100644 (file)
@@ -33,7 +33,6 @@ ___cilkrts_hyperobject_alloc
 ___cilkrts_hyperobject_dealloc
 ___cilkrts_hyperobject_noop_destroy
 ___cilkrts_init
-
 ___cilkrts_leave_frame
 ___cilkrts_metacall
 ___cilkrts_resume
index d339daf7026835f1db40506295eabbca8e63ebe0..c419fb68abfac00bc08c8365ffda680e3ac7cce6 100644 (file)
@@ -432,7 +432,9 @@ COMMON_SYSDEP void __cilkrts_idle(void)
 #elif defined(__MIC__)
     _mm_delay_32(1024);
 #elif defined(__linux__) || \
-      defined(__APPLE__)
+      defined(__APPLE__) || \
+      defined(__CYGWIN__)
+      
     usleep(10000);
 #else
 # error "Unsupported architecture"
@@ -452,6 +454,7 @@ COMMON_SYSDEP void __cilkrts_yield(void)
 {
 #if defined(__ANDROID__)  || \
     defined(__APPLE__)    || \
+    defined(__CYGWIN__)   || \
     defined(__FreeBSD__)  || \
     defined(__VXWORKS__)  || \
     (defined(__sun__) && defined(__svr4__))
index 293c99ae65fad39f2e77137eb95f3eaeb8a53af2..d92d28fc233fae7bc35a0952d18712f4cc51bf3e 100644 (file)
@@ -262,7 +262,7 @@ char * walk_pedigree_nodes(char *p, const __cilkrts_pedigree *pnode)
     if (pnode->parent)
     {
         p = walk_pedigree_nodes(p, pnode->parent);
-        p += cilk_snprintf_s(p, PEDIGREE_BUFF_SIZE, "%s", (char *) "_");
+        p += cilk_snprintf_s(p, PEDIGREE_BUFF_SIZE, "%s", (char *)"_");
     }
     return p + cilk_snprintf_l(p, PEDIGREE_BUFF_SIZE, "%" PRIu64, pnode->rank);
 }
index 538c43104f3a01d596ebba980a22ba1be4823aa1..82c9e02af086907ae191fa2be301c6567ea3b55b 100644 (file)
@@ -1789,20 +1789,27 @@ static full_frame* check_for_work(__cilkrts_worker *w)
         if (NULL == ff) {
             // Punish the worker for failing to steal.
             // No quantum for you!
-            if (w->l->steal_failure_count > 30000) {
-                // Punish more if the worker has been doing unsuccessful steals
-                // for a long time. After return from the idle state, it will
-                // be given a grace period to react quickly.
+            unsigned int max_fails = w->g->max_steal_failures << 1;
+            if (w->l->has_stolen == 0 &&
+                w->l->steal_failure_count % max_fails == max_fails - 1) {
+                // Idle briefly if the worker has never stolen anything for
+                // the given grace period
                 __cilkrts_idle();
-                w->l->steal_failure_count -= 300;
             } else {
                 __cilkrts_yield();
             }
             w->l->steal_failure_count++;
+            if (w->l->steal_failure_count > (max_fails << 8)) {
+                // Reset the flag after certain amount of failures
+                // - This will reduce cpu time in top-level synched regions
+                // - max_fails can be controlled by user (CILK_STEAL_FAILURES)
+                w->l->has_stolen = 0;
+            }
         } else {
             // Reset steal_failure_count since there is obviously still work to
             // be done.
             w->l->steal_failure_count = 0;
+            w->l->has_stolen = 1;
         }
     }
     return ff;
@@ -2912,6 +2919,7 @@ __cilkrts_worker *make_worker(global_state_t *g,
     w->l->stats = NULL;
 #endif    
     w->l->steal_failure_count = 0;
+    w->l->has_stolen = 0;
 
     w->l->work_stolen = 0;
 
index 74c45096fca4d517337c276203e4a1b8d3e00452..9546001bdeb49d4b4846795a7189b8b9ae072f99 100644 (file)
@@ -85,7 +85,10 @@ __CILKRTS_BEGIN_EXTERN_C
  * Print debugging messages and assertions for parallel reducers. 0 is
  * no debugging.  A higher value generates more output.
  */
+
+#ifndef REDPAR_DEBUG
 #define REDPAR_DEBUG 0
+#endif
 
 /**
  * @brief Lock the worker mutex to allow exclusive access to the
index 611934a9bbf97873e17ed5587e118a7fcae22909..0b99008b82bcce44560e5ade365eb09d7d53d9ba 100644 (file)
@@ -465,7 +465,7 @@ char* sysdep_reset_jump_buffers_for_resume(cilk_fiber* fiber,
 
     CILK_ASSERT(fiber);
     void* sp = (void*)get_sp_for_executing_sf(cilk_fiber_get_stack_base(fiber), ff, sf);
-    SP(sf) = sp;
+    SP(sf) = CILK_ADJUST_SP(sp);
 
     /* Debugging: make sure stack is accessible. */
     ((volatile char *)sp)[-1];
@@ -495,7 +495,7 @@ NORETURN sysdep_longjmp_to_sf(char* new_sp,
 #endif
 
     // Set the stack pointer.
-    SP(sf) = new_sp;
+    SP(sf) = CILK_ADJUST_SP(new_sp);
 
 #ifdef RESTORE_X86_FP_STATE
     if (CILK_FRAME_VERSION_VALUE(sf->flags) >= 1) {
@@ -568,7 +568,7 @@ static const char *get_runtime_path ()
 {
     // dladdr is a glibc extension. If it's available, use it to find the path
     // for libcilkrts.so
-#ifdef _GNU_SOURCE
+#if HAVE_DLADDR
     Dl_info info;
     if (0 != dladdr(dummy_function, &info))
         return info.dli_fname;
@@ -689,7 +689,6 @@ static void write_version_file (global_state_t *g, int n)
     // ==================
     // System cores: 8
     // Cilk workers requested: 8
-    // Thread creator: Private
 
     fprintf(fp, "\nThread information\n");
     fprintf(fp, "==================\n");
@@ -699,11 +698,6 @@ static void write_version_file (global_state_t *g, int n)
     fprintf(fp, "System cores: %d\n", (int)sysconf(_SC_NPROCESSORS_ONLN));
 #endif    
     fprintf(fp, "Cilk workers requested: %d\n", n);
-#if (PARALLEL_THREAD_CREATE)
-        fprintf(fp, "Thread creator: Private (parallel)\n");
-#else
-        fprintf(fp, "Thread creator: Private\n");
-#endif
 
     if (fp != stderr && fp != stdout) fclose(fp);
     else fflush(fp); // flush the handle buffer if it is stdout or stderr.