Add short-circuiting back to range checks
This commit is contained in:
@@ -3410,7 +3410,8 @@ PRESERVE_NONE void done_common_prefix_iter(CheckJob *job,
|
|||||||
|
|
||||||
job->remaining = job->begin;
|
job->remaining = job->begin;
|
||||||
|
|
||||||
auto c = getChild(job->n, job->remaining[0]);
|
auto [c, maxV] = getChildAndMaxVersion(job->n, job->remaining[0]);
|
||||||
|
job->maxV = maxV;
|
||||||
Node *child = c;
|
Node *child = c;
|
||||||
if (child == nullptr) {
|
if (child == nullptr) {
|
||||||
auto c = getChildGeq(job->n, job->remaining[0]);
|
auto c = getChildGeq(job->n, job->remaining[0]);
|
||||||
@@ -3463,7 +3464,7 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) {
|
|||||||
job->setResult(false);
|
job->setResult(false);
|
||||||
MUSTTAIL return complete(job, context);
|
MUSTTAIL return complete(job, context);
|
||||||
}
|
}
|
||||||
if (maxVersion(n) > job->readVersion) {
|
if (job->maxV > job->readVersion) {
|
||||||
job->setResult(false);
|
job->setResult(false);
|
||||||
MUSTTAIL return complete(job, context);
|
MUSTTAIL return complete(job, context);
|
||||||
}
|
}
|
||||||
@@ -3488,7 +3489,7 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) {
|
|||||||
job->setResult(false);
|
job->setResult(false);
|
||||||
MUSTTAIL return complete(job, context);
|
MUSTTAIL return complete(job, context);
|
||||||
}
|
}
|
||||||
if (maxVersion(n) > job->readVersion) {
|
if (job->maxV > job->readVersion) {
|
||||||
job->setResult(false);
|
job->setResult(false);
|
||||||
MUSTTAIL return complete(job, context);
|
MUSTTAIL return complete(job, context);
|
||||||
}
|
}
|
||||||
@@ -3499,8 +3500,13 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) {
|
|||||||
|
|
||||||
++context->tls->range_read_iterations_accum;
|
++context->tls->range_read_iterations_accum;
|
||||||
|
|
||||||
|
if (job->maxV <= job->readVersion) {
|
||||||
|
job->continuation = done_left_side_iter;
|
||||||
|
MUSTTAIL return job->continuation(job, context);
|
||||||
|
}
|
||||||
|
|
||||||
if (job->remaining.size() == 0) {
|
if (job->remaining.size() == 0) {
|
||||||
if (maxVersion(n) > job->readVersion) {
|
if (job->maxV > job->readVersion) {
|
||||||
job->setResult(false);
|
job->setResult(false);
|
||||||
MUSTTAIL return complete(job, context);
|
MUSTTAIL return complete(job, context);
|
||||||
} else {
|
} else {
|
||||||
@@ -3515,7 +3521,8 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) {
|
|||||||
MUSTTAIL return complete(job, context);
|
MUSTTAIL return complete(job, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto c = getChild(n, job->remaining[0]);
|
auto [c, maxV] = getChildAndMaxVersion(job->n, job->remaining[0]);
|
||||||
|
job->maxV = maxV;
|
||||||
Node *child = c;
|
Node *child = c;
|
||||||
if (child == nullptr) {
|
if (child == nullptr) {
|
||||||
auto c = getChildGeq(n, job->remaining[0]);
|
auto c = getChildGeq(n, job->remaining[0]);
|
||||||
|
Reference in New Issue
Block a user