From 4cdf6deb504a3d511623497433f27ccb6a8cb345 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 1 Aug 2024 10:28:50 -0700 Subject: [PATCH] Remove a branch in happy path in addWrites --- ConflictSet.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 9d138e4..51780e6 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -3174,19 +3174,24 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { assert(writeVersion >= newestVersionFullPrecision); - if (writeVersion > newestVersionFullPrecision + kNominalVersionWindow) { - destroyTree(root); - init(writeVersion - kNominalVersionWindow); - } + if (oldestExtantVersion < writeVersion - kMaxCorrectVersionWindow) + [[unlikely]] { + if (writeVersion > newestVersionFullPrecision + kNominalVersionWindow) { + destroyTree(root); + init(writeVersion - kNominalVersionWindow); + } - newestVersionFullPrecision = writeVersion; - newest_version.set(newestVersionFullPrecision); - setOldestVersion( - std::max(oldestVersionFullPrecision, - newestVersionFullPrecision - kNominalVersionWindow)); - while (oldestExtantVersion < - newestVersionFullPrecision - kMaxCorrectVersionWindow) { - gcScanStep(1000); + newestVersionFullPrecision = writeVersion; + newest_version.set(newestVersionFullPrecision); + setOldestVersion(newestVersionFullPrecision - kNominalVersionWindow); + while (oldestExtantVersion < + newestVersionFullPrecision - kMaxCorrectVersionWindow) { + gcScanStep(1000); + } + } else { + newestVersionFullPrecision = writeVersion; + newest_version.set(newestVersionFullPrecision); + setOldestVersion(newestVersionFullPrecision - kNominalVersionWindow); } for (int i = 0; i < count; ++i) {