This internal function is separated from fill to encourage optimizers to inline fill, hence
propagating its @branchHint to usage sites. If these functions are combined, fill is large
enough that LLVM is reluctant to inline it, forcing usages of APIs like takeInt to go through
an expensive runtime function call just to figure out that the data is, in fact, already in the
buffer.
Missing this optimization can result in wall-clock time for the most affected benchmarks increasing by a factor of 5 or more.
fn fillUnbuffered(r: *Reader, n: usize) Error!void
fn fillUnbuffered(r: *Reader, n: usize) Error!void {
try rebase(r, n);
var bufs: [1][]u8 = .{""};
while (r.end < r.seek + n) _ = try r.vtable.readVec(r, &bufs);
}