Disable vectorization when building with ICC 14.0

We have found that ICC 14.0 produces bad simd code that causes
vtkm worklets to throw SIGBUS signals. This issue was resolved in
ICC 15.0
This commit is contained in:
Robert Maynard 2016-03-16 12:43:33 -04:00
parent 177b31f330
commit 8818cfc600
2 changed files with 10 additions and 1 deletions

@ -116,6 +116,11 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(avx2_flags -xCORE-AVX2)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
message(STATUS "While Intel ICC 14.0 and lower support #pragma simd")
message(STATUS "The code that is generated in testing has caused SIGBUS")
message(STATUS "runtime signals to be thrown. We recommend you upgrade")
message(STATUS "or disable vectorization.")
elseif (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
list(APPEND vec_levels avx avx2)
else()
list(APPEND vec_levels avx avx2 avx512 knl)

@ -170,8 +170,12 @@
//Determine if current compiler supports vectorization pragma's
//if so set the define VTKM_COMPILER_SUPPORTS_VECTOR_PRAGMAS
//
//While ICC 14 does support simd pragma, in testing we find that the
//simd code produces SIGBUS and isn't safe to use.
//
#if ( defined(VTKM_GCC) && ( __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9) ) ) || \
( defined(VTKM_ICC) && (__INTEL_COMPILER >= 1400) ) || \
( defined(VTKM_ICC) && (__INTEL_COMPILER >= 1500) ) || \
( defined(VTKM_CLANG) && defined(__apple_build_version__) && (__apple_build_version__ >= 7000000) ) || \
( defined(VTKM_CLANG) && !defined(__apple_build_version__) && (__clang_major__ > 3) ) || \
( defined(VTKM_CLANG) && !defined(__apple_build_version__) && (__clang_major__ == 3 && __clang_minor__ >= 5) )