From 82ddb33510bbbda7fba8ec3da4c09699ebb2ccf1 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sun, 14 Apr 2024 21:20:51 -0500 Subject: [PATCH] rbyd-rr: Rearranged pruning to only need lfsr_tag_unreachable* An excellent example of the sort of simplification that eagerly flipping gives us. By flipping _before_ pruning, all unavoidable alts are transformed into unreachable. This lets us check for one condition instead of two: code stack before: 34320 2864 after: 34224 (-0.3%) 2864 (+0.0%) code frame stack appendattr before: 2280 216 568 appendattr after: 2190 (-3.9%) 216 (+0.0%) 568 (+0.0%) --- lfs.c | 130 ++++++++++++++++++++-------------------------------------- 1 file changed, 45 insertions(+), 85 deletions(-) diff --git a/lfs.c b/lfs.c index 5ba837a3..ea0abc2b 100644 --- a/lfs.c +++ b/lfs.c @@ -967,41 +967,6 @@ static inline void lfsr_tag_trim2( lower_tag, upper_tag); } -static inline bool lfsr_tag_unavoidable( - lfsr_tag_t alt, lfsr_rid_t weight, - lfsr_srid_t lower_rid, lfsr_srid_t upper_rid, - lfsr_tag_t lower_tag, lfsr_tag_t upper_tag) { - if (lfsr_tag_isgt(alt)) { - return lfsr_tag_follow( - alt, weight, - lower_rid, upper_rid, - lower_rid-1, lower_tag+1); - } else { - return lfsr_tag_follow( - alt, weight, - lower_rid, upper_rid, - upper_rid-1, upper_tag-1); - } -} - -static inline bool lfsr_tag_unavoidable2( - lfsr_tag_t alt, lfsr_rid_t weight, - lfsr_tag_t alt2, lfsr_rid_t weight2, - lfsr_srid_t lower_rid, lfsr_srid_t upper_rid, - lfsr_tag_t lower_tag, lfsr_tag_t upper_tag) { - if (lfsr_tag_isred(alt2)) { - lfsr_tag_trim( - alt2, weight2, - &lower_rid, &upper_rid, - &lower_tag, &upper_tag); - } - - return lfsr_tag_unavoidable( - alt, weight, - lower_rid, upper_rid, - lower_tag, upper_tag); -} - static inline bool lfsr_tag_unreachable( lfsr_tag_t alt, lfsr_rid_t weight, lfsr_srid_t lower_rid, lfsr_srid_t upper_rid, @@ -2980,56 +2945,6 @@ trunk:; } } - // prune? - // b - // .-'| .-'| - // | b // .-'| => .-'| @@ -3067,6 +2982,51 @@ trunk:; lfs_swap32(&jump, &branch_); } + // prune? + // b + // .-'| .-'| + // |