Prefer getChild to getChildGeq in happy path

Saves instructions according to cachegrind
This commit is contained in:
2024-02-23 12:12:01 -08:00
parent 259f47664a
commit aaf0283f66

View File

@@ -811,8 +811,9 @@ bool checkPointRead(Node *n, const std::span<const uint8_t> key,
goto downLeftSpine; goto downLeftSpine;
} }
auto *child = getChild(n, remaining[0]);
if (child == nullptr) {
int c = getChildGeq(n, remaining[0]); int c = getChildGeq(n, remaining[0]);
if (c != remaining[0]) {
if (c >= 0) { if (c >= 0) {
n = getChildExists(n, c); n = getChildExists(n, c);
goto downLeftSpine; goto downLeftSpine;
@@ -822,7 +823,7 @@ bool checkPointRead(Node *n, const std::span<const uint8_t> key,
} }
} }
n = getChildExists(n, c); n = child;
remaining = remaining.subspan(1, remaining.size() - 1); remaining = remaining.subspan(1, remaining.size() - 1);
if (n->partialKeyLen > 0) { if (n->partialKeyLen > 0) {
@@ -968,8 +969,9 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
return maxBetweenExclusive(n, begin, end) <= readVersion; return maxBetweenExclusive(n, begin, end) <= readVersion;
} }
auto *child = getChild(n, remaining[0]);
if (child == nullptr) {
int c = getChildGeq(n, remaining[0]); int c = getChildGeq(n, remaining[0]);
if (c != remaining[0]) {
if (c >= 0) { if (c >= 0) {
n = getChildExists(n, c); n = getChildExists(n, c);
goto downLeftSpine; goto downLeftSpine;
@@ -979,7 +981,7 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
} }
} }
n = getChildExists(n, c); n = child;
remaining = remaining.subspan(1, remaining.size() - 1); remaining = remaining.subspan(1, remaining.size() - 1);
if (n->partialKeyLen > 0) { if (n->partialKeyLen > 0) {
@@ -1066,8 +1068,9 @@ struct CheckRangeLeftSide {
} }
} }
auto *child = getChild(n, remaining[0]);
if (child == nullptr) {
int c = getChildGeq(n, remaining[0]); int c = getChildGeq(n, remaining[0]);
if (c != remaining[0]) {
if (c >= 0) { if (c >= 0) {
if (searchPathLen < prefixLen) { if (searchPathLen < prefixLen) {
n = getChildExists(n, c); n = getChildExists(n, c);
@@ -1082,7 +1085,7 @@ struct CheckRangeLeftSide {
} }
} }
n = getChildExists(n, c); n = child;
remaining = remaining.subspan(1, remaining.size() - 1); remaining = remaining.subspan(1, remaining.size() - 1);
++searchPathLen; ++searchPathLen;
@@ -1208,8 +1211,9 @@ struct CheckRangeRightSide {
return true; return true;
} }
auto *child = getChild(n, remaining[0]);
if (child == nullptr) {
int c = getChildGeq(n, remaining[0]); int c = getChildGeq(n, remaining[0]);
if (c != remaining[0]) {
if (c >= 0) { if (c >= 0) {
n = getChildExists(n, c); n = getChildExists(n, c);
return downLeftSpine(); return downLeftSpine();
@@ -1218,7 +1222,7 @@ struct CheckRangeRightSide {
} }
} }
n = getChildExists(n, c); n = child;
remaining = remaining.subspan(1, remaining.size() - 1); remaining = remaining.subspan(1, remaining.size() - 1);
++searchPathLen; ++searchPathLen;
@@ -1585,8 +1589,9 @@ struct FirstGeqStepwise {
return downLeftSpine(); return downLeftSpine();
} }
auto *child = getChild(n, remaining[0]);
if (child == nullptr) {
int c = getChildGeq(n, remaining[0]); int c = getChildGeq(n, remaining[0]);
if (c != remaining[0]) {
if (c >= 0) { if (c >= 0) {
n = getChildExists(n, c); n = getChildExists(n, c);
return downLeftSpine(); return downLeftSpine();
@@ -1596,7 +1601,7 @@ struct FirstGeqStepwise {
} }
} }
n = getChildExists(n, c); n = child;
remaining = remaining.subspan(1, remaining.size() - 1); remaining = remaining.subspan(1, remaining.size() - 1);
if (n->partialKeyLen > 0) { if (n->partialKeyLen > 0) {