From f3086433753354e0e09358f0c32cf78a8d9cef72 Mon Sep 17 00:00:00 2001 From: pascal Date: Sat, 18 Jul 2026 22:42:48 +0200 Subject: [PATCH] improve BufferedUnionScorer::advance --- src/query/union/buffered_union.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/query/union/buffered_union.rs b/src/query/union/buffered_union.rs index 8540b860d..36789ef43 100644 --- a/src/query/union/buffered_union.rs +++ b/src/query/union/buffered_union.rs @@ -144,19 +144,18 @@ where TScorer: Scorer, TScoreCombiner: ScoreCombiner, { - #[inline] fn advance(&mut self) -> DocId { - if self.advance_buffered() { - return self.doc; + // A loop rather than two sequential advance_buffered calls + // produces a single inlined copy + loop { + if self.advance_buffered() { + return self.doc; + } + if !self.refill() { + self.doc = TERMINATED; + return TERMINATED; + } } - if !self.refill() { - self.doc = TERMINATED; - return TERMINATED; - } - if !self.advance_buffered() { - return TERMINATED; - } - self.doc } fn fill_buffer(&mut self, buffer: &mut [DocId; COLLECT_BLOCK_BUFFER_LEN]) -> usize {