diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2023-12-19 12:11:47 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2023-12-19 12:11:47 +0200 |
commit | 3c080fb4fad3e1c1e34f74a7b84a443137adc9f2 (patch) | |
tree | 14054a5b85934af610522166e2c77fce0117027d /src/backend | |
parent | 20847013642127e75ee4fe3ddb8228a1fb4b652f (diff) | |
download | postgresql-3c080fb4fad3e1c1e34f74a7b84a443137adc9f2.tar.gz postgresql-3c080fb4fad3e1c1e34f74a7b84a443137adc9f2.zip |
Simplify newNode() by removing special cases
- Remove MemoryContextAllocZeroAligned(). It was supposed to be a
faster version of MemoryContextAllocZero(), but modern compilers turn
the MemSetLoop() into a call to memset() anyway, making it more or
less identical to MemoryContextAllocZero(). That was the only user of
MemSetTest, MemSetLoop, so remove those too, as well as palloc0fast().
- Convert newNode() to a static inline function. When this was
originally originally written, it was written as a macro because
testing showed that gcc didn't inline the size check as we
intended. Modern compiler versions do, and now that it just calls
palloc0() there is no size-check to inline anyway.
One nice effect is that the palloc0() takes one less argument than
MemoryContextAllocZeroAligned(), which saves a few instructions in the
callers of newNode().
Reviewed-by: Peter Eisentraut, Tom Lane, John Naylor, Thomas Munro
Discussion: https://www.postgresql.org/message-id/b51f1fa7-7e6a-4ecc-936d-90a8a1659e7c@iki.fi
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/nodes/Makefile | 1 | ||||
-rw-r--r-- | src/backend/nodes/meson.build | 1 | ||||
-rw-r--r-- | src/backend/nodes/nodes.c | 31 | ||||
-rw-r--r-- | src/backend/utils/mmgr/mcxt.c | 38 |
4 files changed, 0 insertions, 71 deletions
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile index ebbe9052cb7..66bbad8e6e0 100644 --- a/src/backend/nodes/Makefile +++ b/src/backend/nodes/Makefile @@ -23,7 +23,6 @@ OBJS = \ makefuncs.o \ multibitmapset.o \ nodeFuncs.o \ - nodes.o \ outfuncs.o \ params.o \ print.o \ diff --git a/src/backend/nodes/meson.build b/src/backend/nodes/meson.build index 31467a12d3b..1efbf2c11ca 100644 --- a/src/backend/nodes/meson.build +++ b/src/backend/nodes/meson.build @@ -7,7 +7,6 @@ backend_sources += files( 'makefuncs.c', 'multibitmapset.c', 'nodeFuncs.c', - 'nodes.c', 'params.c', 'print.c', 'read.c', diff --git a/src/backend/nodes/nodes.c b/src/backend/nodes/nodes.c deleted file mode 100644 index 1913a4bdf7d..00000000000 --- a/src/backend/nodes/nodes.c +++ /dev/null @@ -1,31 +0,0 @@ -/*------------------------------------------------------------------------- - * - * nodes.c - * support code for nodes (now that we have removed the home-brew - * inheritance system, our support code for nodes is much simpler) - * - * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * src/backend/nodes/nodes.c - * - * HISTORY - * Andrew Yu Oct 20, 1994 file creation - * - *------------------------------------------------------------------------- - */ -#include "postgres.h" - -#include "nodes/nodes.h" - -/* - * Support for newNode() macro - * - * In a GCC build there is no need for the global variable newNodeMacroHolder. - * However, we create it anyway, to support the case of a non-GCC-built - * loadable module being loaded into a GCC-built backend. - */ - -Node *newNodeMacroHolder; diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index 9fc83f11f6f..4b30fcaebd0 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -1092,44 +1092,6 @@ MemoryContextAllocZero(MemoryContext context, Size size) } /* - * MemoryContextAllocZeroAligned - * MemoryContextAllocZero where length is suitable for MemSetLoop - * - * This might seem overly specialized, but it's not because newNode() - * is so often called with compile-time-constant sizes. - */ -void * -MemoryContextAllocZeroAligned(MemoryContext context, Size size) -{ - void *ret; - - Assert(MemoryContextIsValid(context)); - AssertNotInCriticalSection(context); - - if (!AllocSizeIsValid(size)) - elog(ERROR, "invalid memory alloc request size %zu", size); - - context->isReset = false; - - ret = context->methods->alloc(context, size); - if (unlikely(ret == NULL)) - { - MemoryContextStats(TopMemoryContext); - ereport(ERROR, - (errcode(ERRCODE_OUT_OF_MEMORY), - errmsg("out of memory"), - errdetail("Failed on request of size %zu in memory context \"%s\".", - size, context->name))); - } - - VALGRIND_MEMPOOL_ALLOC(context, ret, size); - - MemSetLoop(ret, 0, size); - - return ret; -} - -/* * MemoryContextAllocExtended * Allocate space within the specified context using the given flags. */ |