From 69adb1f0331c63ea50509de49b570261a017b00b Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sat, 25 Jan 2025 14:09:43 -0600 Subject: [PATCH] rbyd: Trying to get separate r/b diverged trimming working The conflicts between y-pruning and diverged-pruning are proving difficult to resolve... This is a step backwards but also a work in progress: test_rbyd+balance before: 156/385878 failed test_rbyd+balance after: 312/385878 failed (+100.0%) Code changes: code stack ctx before: 38644 2624 640 after: 38860 (+0.6%) 2624 (+0.0%) 640 (+0.0%) --- lfs.c | 58 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/lfs.c b/lfs.c index aa73eaeb..cdb1a5f7 100644 --- a/lfs.c +++ b/lfs.c @@ -3866,32 +3866,32 @@ trunk:; // .-'| .--' // 3 4 3 4 x } else if (diverged) { -// diverging = lfsr_tag_diverging2( -// alt, weight, -// p[0].alt, p[0].weight, -// lower_rid, upper_rid, -// a_rid, a_tag, -// b_rid, b_tag); -// diverging_red = lfsr_tag_isred(p[0].alt) -// && lfsr_tag_diverging( -// p[0].alt, p[0].weight, -// lower_rid, upper_rid, -// a_rid, a_tag, -// b_rid, b_tag); -// if (diverging_red) { -// LFS_DEBUG("%04x->%04x: div r pruning", -// branch, lfsr_rbyd_eoff(rbyd)); -// // trim so alt is pruned -// lfsr_tag_trim( -// p[0].alt, p[0].weight, -// &lower_rid, &upper_rid, -// &lower_tag, &upper_tag); -// p[0].weight = 0; -// -// lfsr_rbyd_p_pop(p); -// -// // TODO prune? (trim?) -// } + diverging = lfsr_tag_diverging2( + alt, weight, + p[0].alt, p[0].weight, + lower_rid, upper_rid, + a_rid, a_tag, + b_rid, b_tag); + diverging_red = lfsr_tag_isred(p[0].alt) + && lfsr_tag_diverging( + p[0].alt, p[0].weight, + lower_rid, upper_rid, + a_rid, a_tag, + b_rid, b_tag); + if (diverging_red) { + LFS_DEBUG("%04x->%04x: div r pruning", + branch, lfsr_rbyd_eoff(rbyd)); + // trim so alt is pruned + lfsr_tag_trim( + p[0].alt, p[0].weight, + &lower_rid, &upper_rid, + &lower_tag, &upper_tag); + p[0].weight = 0; + + lfsr_rbyd_p_pop(p); + + // TODO prune? (trim?) + } diverging = lfsr_tag_diverging2( alt, weight, @@ -3899,9 +3899,9 @@ trunk:; lower_rid, upper_rid, a_rid, a_tag, b_rid, b_tag); - if (diverging) { -// && (!lfsr_tag_isred(alt) -// || lfsr_tag_isred(p[0].alt))) { + if (diverging + && (!lfsr_tag_isred(alt) + || lfsr_tag_isred(p[0].alt))) { LFS_DEBUG("%04x->%04x: div trimming", branch, lfsr_rbyd_eoff(rbyd)); // trim so alt is pruned