Skip to content

Commit 6c0c88c

Browse files
jpbronstedMongoDB Bot
authored and
MongoDB Bot
committed
SERVER-105664 tag forced inlining decisions that are for temporarily buying back v5 toolchain regressions (#36846)
GitOrigin-RevId: acbec25e7902d3a0e8e817550879080499566fd3
1 parent 1712ddd commit 6c0c88c

File tree

6 files changed

+29
-19
lines changed

6 files changed

+29
-19
lines changed

src/mongo/bson/column/bsoncolumn.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace bsoncolumn {
3232

3333
template <class Buffer>
3434
requires Appendable<Buffer>
35-
MONGO_COMPILER_ALWAYS_INLINE void BSONColumnBlockBased::decompress(Buffer& buffer) const {
35+
MONGO_COMPILER_ALWAYS_INLINE_GCC14 void BSONColumnBlockBased::decompress(Buffer& buffer) const {
3636
const char* ptr = _binary;
3737
const char* end = _binary + _size;
3838
BSONType type = EOO; // needs to be set as something else before deltas are parsed

src/mongo/bson/column/simple8b.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -369,11 +369,11 @@ inline size_t visitAll(const char* buffer,
369369
const VisitMissing& visitMissing);
370370

371371
template <typename T, typename Visit, typename VisitMissing>
372-
MONGO_COMPILER_ALWAYS_INLINE inline size_t visitAll(const char* buffer,
373-
size_t size,
374-
uint64_t& prevNonRLE,
375-
const Visit& visit,
376-
const VisitMissing& visitMissing) {
372+
MONGO_COMPILER_ALWAYS_INLINE_GCC14 inline size_t visitAll(const char* buffer,
373+
size_t size,
374+
uint64_t& prevNonRLE,
375+
const Visit& visit,
376+
const VisitMissing& visitMissing) {
377377
return visitAll<T>(buffer, size, prevNonRLE, visit, [&visit]() { visit(0); }, visitMissing);
378378
}
379379

src/mongo/bson/column/simple8b.inl

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -795,11 +795,11 @@ T decodeLastSlot(uint64_t encoded) {
795795

796796
// Decodes and visits all slots in simple8b block.
797797
template <typename T, typename Visit, typename VisitZero, typename VisitMissing>
798-
MONGO_COMPILER_ALWAYS_INLINE inline size_t decodeAndVisit(uint64_t encoded,
799-
uint64_t* prevNonRLE,
800-
const Visit& visit,
801-
const VisitZero& visitZero,
802-
const VisitMissing& visitMissing) {
798+
MONGO_COMPILER_ALWAYS_INLINE_GCC14 inline size_t decodeAndVisit(uint64_t encoded,
799+
uint64_t* prevNonRLE,
800+
const Visit& visit,
801+
const VisitZero& visitZero,
802+
const VisitMissing& visitMissing) {
803803
auto selector = encoded & simple8b_internal::kBaseSelectorMask;
804804
if (selector != simple8b_internal::kRleSelector) {
805805
*prevNonRLE = encoded;
@@ -1192,12 +1192,12 @@ T decodeAndPrefixSum(uint64_t encoded, T& prefix, uint64_t* prevNonRLE) {
11921192
} // namespace
11931193

11941194
template <typename T, typename Visit, typename VisitZero, typename VisitMissing>
1195-
MONGO_COMPILER_ALWAYS_INLINE size_t visitAll(const char* buffer,
1196-
size_t size,
1197-
uint64_t& prevNonRLE,
1198-
const Visit& visit,
1199-
const VisitZero& visitZero,
1200-
const VisitMissing& visitMissing) {
1195+
MONGO_COMPILER_ALWAYS_INLINE_GCC14 size_t visitAll(const char* buffer,
1196+
size_t size,
1197+
uint64_t& prevNonRLE,
1198+
const Visit& visit,
1199+
const VisitZero& visitZero,
1200+
const VisitMissing& visitMissing) {
12011201
size_t numVisited = 0;
12021202
invariant(size % 8 == 0);
12031203
const char* end = buffer + size;

src/mongo/db/exec/sbe/values/ts_block.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class BlockBasedDecompressAdaptor {
7070
_positions.reserve(expectedCount);
7171
}
7272

73-
MONGO_COMPILER_ALWAYS_INLINE void push_back(const Element& e) {
73+
MONGO_COMPILER_ALWAYS_INLINE_GCC14 void push_back(const Element& e) {
7474
auto [tag, val] = e;
7575
_allValuesShallow = _allValuesShallow && value::isShallowType(tag);
7676
_tags.push_back(tag);

src/mongo/db/pipeline/percentile_algo_accurate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class AccuratePercentile : public PercentileAlgorithm, public PartialPercentile<
4949
public:
5050
AccuratePercentile() = default; // no config required for this algorithm
5151

52-
MONGO_COMPILER_ALWAYS_INLINE void incorporate(double input) final {
52+
MONGO_COMPILER_ALWAYS_INLINE_GCC14 void incorporate(double input) final {
5353
if (std::isnan(input)) {
5454
return;
5555
}

src/mongo/platform/compiler.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,16 @@
164164
#define MONGO_COMPILER_ALWAYS_INLINE_
165165
#endif
166166

167+
/**
168+
* Force a function to be inlined as a temporary measure to buy-back performance regressions
169+
* downstream of the switch to using the v5 toolchain.
170+
* TODO(SERVER-105707): Reevaluate each use of this macro once we have enabled LTO/PGO and
171+
* other post-compilation optimizations; for each, either delete the use or change it to use
172+
* MONGO_COMPILER_ALWAYS_INLINE, committing the forced inlining choice permanently. Then delete
173+
* this macro definition.
174+
*/
175+
#define MONGO_COMPILER_ALWAYS_INLINE_GCC14 MONGO_COMPILER_ALWAYS_INLINE
176+
167177
/**
168178
* Tells the compiler that it can assume that this line will never execute.
169179
* Unlike with MONGO_UNREACHABLE, there is no runtime check and reaching this

0 commit comments

Comments
 (0)