diff options
author | Thomas Munro <tmunro@postgresql.org> | 2024-07-30 22:12:42 +1200 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2024-07-30 22:59:30 +1200 |
commit | a011dc399cc82be07326c89c926bd5880160b1ba (patch) | |
tree | 0f6704d08dd5d86c95a132715553728a8f1881e8 /src | |
parent | 81385261362962deb9861b39b509aeffe213721d (diff) | |
download | postgresql-a011dc399cc82be07326c89c926bd5880160b1ba.tar.gz postgresql-a011dc399cc82be07326c89c926bd5880160b1ba.zip |
Require compiler barrier support.
Previously we had a fallback implementation of pg_compiler_barrier()
that called an empty function across a translation unit boundary so the
compiler couldn't see what it did. That shouldn't be needed on any
current systems, and might not even work with a link time optimizer.
Since we now require compiler-specific knowledge of how to implement
atomics, we should also know how to implement compiler barriers on a
hypothetical new system.
Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
Suggested-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/721bf39a-ed8a-44b0-8b8e-be3bd81db748%40technowledgy.de
Discussion: https://postgr.es/m/3351991.1697728588%40sss.pgh.pa.us
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/port/atomics.c | 8 | ||||
-rw-r--r-- | src/include/port/atomics.h | 3 | ||||
-rw-r--r-- | src/include/port/atomics/fallback.h | 15 |
3 files changed, 3 insertions, 23 deletions
diff --git a/src/backend/port/atomics.c b/src/backend/port/atomics.c index 6f1e014d0b8..19a84a7849d 100644 --- a/src/backend/port/atomics.c +++ b/src/backend/port/atomics.c @@ -40,14 +40,6 @@ pg_spinlock_barrier(void) } #endif -#ifdef PG_HAVE_COMPILER_BARRIER_EMULATION -void -pg_extern_compiler_barrier(void) -{ - /* do nothing */ -} -#endif - #ifdef PG_HAVE_ATOMIC_U64_SIMULATION diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h index c2ce10a718f..edb0ae40dc0 100644 --- a/src/include/port/atomics.h +++ b/src/include/port/atomics.h @@ -98,6 +98,9 @@ #if !defined(PG_HAVE_ATOMIC_U32_SUPPORT) #error "could not find an implementation of pg_atomic_uint32" #endif +#if !defined(pg_compiler_barrier_impl) +#error "could not find an implementation of pg_compiler_barrier" +#endif /* * Provide a spinlock-based implementation of the 64 bit variants, if diff --git a/src/include/port/atomics/fallback.h b/src/include/port/atomics/fallback.h index 8ffd1a8fd32..9f83827d83f 100644 --- a/src/include/port/atomics/fallback.h +++ b/src/include/port/atomics/fallback.h @@ -33,21 +33,6 @@ extern void pg_spinlock_barrier(void); #define pg_memory_barrier_impl pg_spinlock_barrier #endif -#ifndef pg_compiler_barrier_impl -/* - * If the compiler/arch combination does not provide compiler barriers, - * provide a fallback. The fallback simply consists of a function call into - * an externally defined function. That should guarantee compiler barrier - * semantics except for compilers that do inter translation unit/global - * optimization - those better provide an actual compiler barrier. - * - * A native compiler barrier for sure is a lot faster than this... - */ -#define PG_HAVE_COMPILER_BARRIER_EMULATION -extern void pg_extern_compiler_barrier(void); -#define pg_compiler_barrier_impl pg_extern_compiler_barrier -#endif - #if !defined(PG_HAVE_ATOMIC_U64_SUPPORT) |