[Openmp-commits] [PATCH] D130928: [OpenMP][libomp] Cleanup __kmpc_flush() code
Jonathan Peyton via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Thu Sep 8 14:17:36 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGe5ac98fa0150: [OpenMP][libomp] Cleanup __kmpc_flush() code (authored by jlpeyton).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D130928/new/
https://reviews.llvm.org/D130928
Files:
openmp/runtime/src/kmp_csupport.cpp
openmp/runtime/src/kmp_os.h
Index: openmp/runtime/src/kmp_os.h
===================================================================
--- openmp/runtime/src/kmp_os.h
+++ openmp/runtime/src/kmp_os.h
@@ -1058,6 +1058,15 @@
#endif
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
+#if KMP_MIC
+// fence-style instructions do not exist, but lock; xaddl $0,(%rsp) can be used.
+// We shouldn't need it, though, since the ABI rules require that
+// * If the compiler generates NGO stores it also generates the fence
+// * If users hand-code NGO stores they should insert the fence
+// therefore no incomplete unordered stores should be visible.
+#define KMP_MFENCE() /* Nothing */
+#define KMP_SFENCE() /* Nothing */
+#else
#if KMP_COMPILER_ICC || KMP_COMPILER_ICX
#define KMP_MFENCE_() _mm_mfence()
#define KMP_SFENCE_() _mm_sfence()
@@ -1076,6 +1085,7 @@
KMP_MFENCE_(); \
}
#define KMP_SFENCE() KMP_SFENCE_()
+#endif
#else
#define KMP_MFENCE() KMP_MB()
#define KMP_SFENCE() KMP_MB()
Index: openmp/runtime/src/kmp_csupport.cpp
===================================================================
--- openmp/runtime/src/kmp_csupport.cpp
+++ openmp/runtime/src/kmp_csupport.cpp
@@ -668,45 +668,7 @@
KC_TRACE(10, ("__kmpc_flush: called\n"));
/* need explicit __mf() here since use volatile instead in library */
- KMP_MB(); /* Flush all pending memory write invalidates. */
-
-#if (KMP_ARCH_X86 || KMP_ARCH_X86_64)
-#if KMP_MIC
-// fence-style instructions do not exist, but lock; xaddl $0,(%rsp) can be used.
-// We shouldn't need it, though, since the ABI rules require that
-// * If the compiler generates NGO stores it also generates the fence
-// * If users hand-code NGO stores they should insert the fence
-// therefore no incomplete unordered stores should be visible.
-#else
- // C74404
- // This is to address non-temporal store instructions (sfence needed).
- // The clflush instruction is addressed either (mfence needed).
- // Probably the non-temporal load monvtdqa instruction should also be
- // addressed.
- // mfence is a SSE2 instruction. Do not execute it if CPU is not SSE2.
- if (!__kmp_cpuinfo.initialized) {
- __kmp_query_cpuid(&__kmp_cpuinfo);
- }
- if (!__kmp_cpuinfo.flags.sse2) {
- // CPU cannot execute SSE2 instructions.
- } else {
-#if KMP_COMPILER_ICC || KMP_COMPILER_ICX
- _mm_mfence();
-#elif KMP_COMPILER_MSVC
- MemoryBarrier();
-#else
- __sync_synchronize();
-#endif // KMP_COMPILER_ICC || KMP_COMPILER_ICX
- }
-#endif // KMP_MIC
-#elif (KMP_ARCH_ARM || KMP_ARCH_AARCH64 || KMP_ARCH_MIPS || KMP_ARCH_MIPS64 || \
- KMP_ARCH_RISCV64)
-// Nothing to see here move along
-#elif KMP_ARCH_PPC64
-// Nothing needed here (we have a real MB above).
-#else
-#error Unknown or unsupported architecture
-#endif
+ KMP_MFENCE(); /* Flush all pending memory write invalidates. */
#if OMPT_SUPPORT && OMPT_OPTIONAL
if (ompt_enabled.ompt_callback_flush) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D130928.458866.patch
Type: text/x-patch
Size: 2951 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20220908/cde9c876/attachment-0001.bin>
More information about the Openmp-commits
mailing list