From aaf0283f6686aab07e497afd839820a826841fad Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Fri, 23 Feb 2024 12:12:01 -0800 Subject: [PATCH] Prefer getChild to getChildGeq in happy path Saves instructions according to cachegrind --- ConflictSet.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index b6b910e..9558e43 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -811,8 +811,9 @@ bool checkPointRead(Node *n, const std::span key, goto downLeftSpine; } - int c = getChildGeq(n, remaining[0]); - if (c != remaining[0]) { + auto *child = getChild(n, remaining[0]); + if (child == nullptr) { + int c = getChildGeq(n, remaining[0]); if (c >= 0) { n = getChildExists(n, c); goto downLeftSpine; @@ -822,7 +823,7 @@ bool checkPointRead(Node *n, const std::span key, } } - n = getChildExists(n, c); + n = child; remaining = remaining.subspan(1, remaining.size() - 1); if (n->partialKeyLen > 0) { @@ -968,8 +969,9 @@ bool checkRangeStartsWith(Node *n, std::span key, int begin, return maxBetweenExclusive(n, begin, end) <= readVersion; } - int c = getChildGeq(n, remaining[0]); - if (c != remaining[0]) { + auto *child = getChild(n, remaining[0]); + if (child == nullptr) { + int c = getChildGeq(n, remaining[0]); if (c >= 0) { n = getChildExists(n, c); goto downLeftSpine; @@ -979,7 +981,7 @@ bool checkRangeStartsWith(Node *n, std::span key, int begin, } } - n = getChildExists(n, c); + n = child; remaining = remaining.subspan(1, remaining.size() - 1); if (n->partialKeyLen > 0) { @@ -1066,8 +1068,9 @@ struct CheckRangeLeftSide { } } - int c = getChildGeq(n, remaining[0]); - if (c != remaining[0]) { + auto *child = getChild(n, remaining[0]); + if (child == nullptr) { + int c = getChildGeq(n, remaining[0]); if (c >= 0) { if (searchPathLen < prefixLen) { n = getChildExists(n, c); @@ -1082,7 +1085,7 @@ struct CheckRangeLeftSide { } } - n = getChildExists(n, c); + n = child; remaining = remaining.subspan(1, remaining.size() - 1); ++searchPathLen; @@ -1208,8 +1211,9 @@ struct CheckRangeRightSide { return true; } - int c = getChildGeq(n, remaining[0]); - if (c != remaining[0]) { + auto *child = getChild(n, remaining[0]); + if (child == nullptr) { + int c = getChildGeq(n, remaining[0]); if (c >= 0) { n = getChildExists(n, c); return downLeftSpine(); @@ -1218,7 +1222,7 @@ struct CheckRangeRightSide { } } - n = getChildExists(n, c); + n = child; remaining = remaining.subspan(1, remaining.size() - 1); ++searchPathLen; @@ -1585,8 +1589,9 @@ struct FirstGeqStepwise { return downLeftSpine(); } - int c = getChildGeq(n, remaining[0]); - if (c != remaining[0]) { + auto *child = getChild(n, remaining[0]); + if (child == nullptr) { + int c = getChildGeq(n, remaining[0]); if (c >= 0) { n = getChildExists(n, c); return downLeftSpine(); @@ -1596,7 +1601,7 @@ struct FirstGeqStepwise { } } - n = getChildExists(n, c); + n = child; remaining = remaining.subspan(1, remaining.size() - 1); if (n->partialKeyLen > 0) {