Index: openmp/runtime/cmake/LibompHandleFlags.cmake =================================================================== --- openmp/runtime/cmake/LibompHandleFlags.cmake +++ openmp/runtime/cmake/LibompHandleFlags.cmake @@ -38,7 +38,6 @@ libomp_append(flags_local -Wstringop-overflow=0 LIBOMP_HAVE_WSTRINGOP_OVERFLOW_FLAG) libomp_append(flags_local -Wno-stringop-truncation LIBOMP_HAVE_WNO_STRINGOP_TRUNCATION_FLAG) libomp_append(flags_local -Wno-switch LIBOMP_HAVE_WNO_SWITCH_FLAG) - libomp_append(flags_local -Wno-uninitialized LIBOMP_HAVE_WNO_UNINITIALIZED_FLAG) libomp_append(flags_local -Wno-unused-but-set-variable LIBOMP_HAVE_WNO_UNUSED_BUT_SET_VARIABLE_FLAG) libomp_append(flags_local /GS LIBOMP_HAVE_GS_FLAG) libomp_append(flags_local /EHsc LIBOMP_HAVE_EHSC_FLAG) Index: openmp/runtime/cmake/config-ix.cmake =================================================================== --- openmp/runtime/cmake/config-ix.cmake +++ openmp/runtime/cmake/config-ix.cmake @@ -59,7 +59,6 @@ check_cxx_compiler_flag(-Wstringop-overflow=0 LIBOMP_HAVE_WSTRINGOP_OVERFLOW_FLAG) check_cxx_compiler_flag(-Wno-stringop-truncation LIBOMP_HAVE_WNO_STRINGOP_TRUNCATION_FLAG) check_cxx_compiler_flag(-Wno-switch LIBOMP_HAVE_WNO_SWITCH_FLAG) -check_cxx_compiler_flag(-Wno-uninitialized LIBOMP_HAVE_WNO_UNINITIALIZED_FLAG) check_cxx_compiler_flag(-Wno-unused-but-set-variable LIBOMP_HAVE_WNO_UNUSED_BUT_SET_VARIABLE_FLAG) check_cxx_compiler_flag(-msse2 LIBOMP_HAVE_MSSE2_FLAG) check_cxx_compiler_flag(-ftls-model=initial-exec LIBOMP_HAVE_FTLS_MODEL_FLAG) Index: openmp/runtime/src/kmp_atomic.cpp =================================================================== --- openmp/runtime/src/kmp_atomic.cpp +++ openmp/runtime/src/kmp_atomic.cpp @@ -785,36 +785,6 @@ } \ } -#if USE_CMPXCHG_FIX -// 2007-06-25: -// workaround for C78287 (complex(kind=4) data type). lin_32, lin_32e, win_32 -// and win_32e are affected (I verified the asm). Compiler ignores the volatile -// qualifier of the temp_val in the OP_CMPXCHG macro. This is a problem of the -// compiler. Related tracker is C76005, targeted to 11.0. I verified the asm of -// the workaround. -#define OP_CMPXCHG_WORKAROUND(TYPE, BITS, OP) \ - { \ - struct _sss { \ - TYPE cmp; \ - kmp_int##BITS *vvv; \ - }; \ - struct _sss old_value, new_value; \ - old_value.vvv = (kmp_int##BITS *)&old_value.cmp; \ - new_value.vvv = (kmp_int##BITS *)&new_value.cmp; \ - *old_value.vvv = *(volatile kmp_int##BITS *)lhs; \ - new_value.cmp = old_value.cmp OP rhs; \ - while (!KMP_COMPARE_AND_STORE_ACQ##BITS( \ - (kmp_int##BITS *)lhs, *VOLATILE_CAST(kmp_int##BITS *) old_value.vvv, \ - *VOLATILE_CAST(kmp_int##BITS *) new_value.vvv)) { \ - KMP_DO_PAUSE; \ - \ - *old_value.vvv = *(volatile kmp_int##BITS *)lhs; \ - new_value.cmp = old_value.cmp OP rhs; \ - } \ - } -// end of the first part of the workaround for C78287 -#endif // USE_CMPXCHG_FIX - #if KMP_ARCH_X86 || KMP_ARCH_X86_64 // ------------------------------------------------------------------------ @@ -833,17 +803,6 @@ OP_GOMP_CRITICAL(OP## =, GOMP_FLAG) \ OP_CMPXCHG(TYPE, BITS, OP) \ } -#if USE_CMPXCHG_FIX -// ------------------------------------------------------------------------- -// workaround for C78287 (complex(kind=4) data type) -#define ATOMIC_CMPXCHG_WORKAROUND(TYPE_ID, OP_ID, TYPE, BITS, OP, LCK_ID, \ - MASK, GOMP_FLAG) \ - ATOMIC_BEGIN(TYPE_ID, OP_ID, TYPE, void) \ - OP_GOMP_CRITICAL(OP## =, GOMP_FLAG) \ - OP_CMPXCHG_WORKAROUND(TYPE, BITS, OP) \ - } -// end of the second part of the workaround for C78287 -#endif // USE_CMPXCHG_FIX #else // ------------------------------------------------------------------------- @@ -872,22 +831,6 @@ OP_CRITICAL(OP## =, LCK_ID) /* unaligned address - use critical */ \ } \ } -#if USE_CMPXCHG_FIX -// ------------------------------------------------------------------------- -// workaround for C78287 (complex(kind=4) data type) -#define ATOMIC_CMPXCHG_WORKAROUND(TYPE_ID, OP_ID, TYPE, BITS, OP, LCK_ID, \ - MASK, GOMP_FLAG) \ - ATOMIC_BEGIN(TYPE_ID, OP_ID, TYPE, void) \ - OP_GOMP_CRITICAL(OP## =, GOMP_FLAG) \ - if (!((kmp_uintptr_t)lhs & 0x##MASK)) { \ - OP_CMPXCHG(TYPE, BITS, OP) /* aligned address */ \ - } else { \ - KMP_CHECK_GTID; \ - OP_CRITICAL(OP## =, LCK_ID) /* unaligned address - use critical */ \ - } \ - } -// end of the second part of the workaround for C78287 -#endif // USE_CMPXCHG_FIX #endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */ // Routines for ATOMIC 4-byte operands addition and subtraction @@ -1293,23 +1236,14 @@ #endif // KMP_HAVE_QUAD // routines for complex types -#if USE_CMPXCHG_FIX -// workaround for C78287 (complex(kind=4) data type) -ATOMIC_CMPXCHG_WORKAROUND(cmplx4, add, kmp_cmplx32, 64, +, 8c, 7, - 1) // __kmpc_atomic_cmplx4_add -ATOMIC_CMPXCHG_WORKAROUND(cmplx4, sub, kmp_cmplx32, 64, -, 8c, 7, - 1) // __kmpc_atomic_cmplx4_sub -ATOMIC_CMPXCHG_WORKAROUND(cmplx4, mul, kmp_cmplx32, 64, *, 8c, 7, - 1) // __kmpc_atomic_cmplx4_mul -ATOMIC_CMPXCHG_WORKAROUND(cmplx4, div, kmp_cmplx32, 64, /, 8c, 7, - 1) // __kmpc_atomic_cmplx4_div -// end of the workaround for C78287 -#else -ATOMIC_CRITICAL(cmplx4, add, kmp_cmplx32, +, 8c, 1) // __kmpc_atomic_cmplx4_add -ATOMIC_CRITICAL(cmplx4, sub, kmp_cmplx32, -, 8c, 1) // __kmpc_atomic_cmplx4_sub -ATOMIC_CRITICAL(cmplx4, mul, kmp_cmplx32, *, 8c, 1) // __kmpc_atomic_cmplx4_mul -ATOMIC_CRITICAL(cmplx4, div, kmp_cmplx32, /, 8c, 1) // __kmpc_atomic_cmplx4_div -#endif // USE_CMPXCHG_FIX +ATOMIC_CMPXCHG(cmplx4, add, kmp_cmplx32, 64, +, 8c, 7, + 1) // __kmpc_atomic_cmplx4_add +ATOMIC_CMPXCHG(cmplx4, sub, kmp_cmplx32, 64, -, 8c, 7, + 1) // __kmpc_atomic_cmplx4_sub +ATOMIC_CMPXCHG(cmplx4, mul, kmp_cmplx32, 64, *, 8c, 7, + 1) // __kmpc_atomic_cmplx4_mul +ATOMIC_CMPXCHG(cmplx4, div, kmp_cmplx32, 64, /, 8c, 7, + 1) // __kmpc_atomic_cmplx4_div ATOMIC_CRITICAL(cmplx8, add, kmp_cmplx64, +, 16c, 1) // __kmpc_atomic_cmplx8_add ATOMIC_CRITICAL(cmplx8, sub, kmp_cmplx64, -, 16c, 1) // __kmpc_atomic_cmplx8_sub @@ -1807,23 +1741,12 @@ #if KMP_ARCH_X86 || KMP_ARCH_X86_64 // ------------------------------------------------------------------------ // X86 or X86_64: no alignment problems ==================================== -#if USE_CMPXCHG_FIX -// workaround for C78287 (complex(kind=4) data type) -#define ATOMIC_CMPXCHG_CMPLX(TYPE_ID, TYPE, OP_ID, BITS, OP, RTYPE_ID, RTYPE, \ - LCK_ID, MASK, GOMP_FLAG) \ - ATOMIC_BEGIN_MIX(TYPE_ID, TYPE, OP_ID, RTYPE_ID, RTYPE) \ - OP_GOMP_CRITICAL(OP## =, GOMP_FLAG) \ - OP_CMPXCHG_WORKAROUND(TYPE, BITS, OP) \ - } -// end of the second part of the workaround for C78287 -#else #define ATOMIC_CMPXCHG_CMPLX(TYPE_ID, TYPE, OP_ID, BITS, OP, RTYPE_ID, RTYPE, \ LCK_ID, MASK, GOMP_FLAG) \ ATOMIC_BEGIN_MIX(TYPE_ID, TYPE, OP_ID, RTYPE_ID, RTYPE) \ OP_GOMP_CRITICAL(OP## =, GOMP_FLAG) \ OP_CMPXCHG(TYPE, BITS, OP) \ } -#endif // USE_CMPXCHG_FIX #else // ------------------------------------------------------------------------ // Code for other architectures that don't handle unaligned accesses. Index: openmp/runtime/src/kmp_os.h =================================================================== --- openmp/runtime/src/kmp_os.h +++ openmp/runtime/src/kmp_os.h @@ -960,11 +960,6 @@ #define KMP_USE_BGET 1 #endif -// Switches for OSS builds -#ifndef USE_CMPXCHG_FIX -#define USE_CMPXCHG_FIX 1 -#endif - // Enable dynamic user lock #define KMP_USE_DYNAMIC_LOCK 1