rollup merge of #20463: amaranth/black_box_output
By returning the passed value black_box can be used on data being passed to a function being benchmarked. This ensures the compiler does not optimize the function for the input which could result in the entire function being optimized away.
This commit is contained in:
commit
baee2049eb
@ -2526,7 +2526,7 @@ mod bitv_bench {
|
||||
for _ in range(0u, 100) {
|
||||
bitv |= 1 << ((r.next_u32() as uint) % u32::BITS);
|
||||
}
|
||||
black_box(&bitv)
|
||||
black_box(&bitv);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2538,7 +2538,7 @@ mod bitv_bench {
|
||||
for _ in range(0u, 100) {
|
||||
bitv.set((r.next_u32() as uint) % BENCH_BITS, true);
|
||||
}
|
||||
black_box(&bitv)
|
||||
black_box(&bitv);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -2841,7 +2841,7 @@ mod bench {
|
||||
let s = "ศไทย中华Việt Nam; Mary had a little lamb, Little lamb";
|
||||
|
||||
b.iter(|| {
|
||||
for ch in s.chars() { black_box(ch) }
|
||||
for ch in s.chars() { black_box(ch); }
|
||||
});
|
||||
}
|
||||
|
||||
@ -2869,7 +2869,7 @@ mod bench {
|
||||
let s = "ศไทย中华Việt Nam; Mary had a little lamb, Little lamb";
|
||||
|
||||
b.iter(|| {
|
||||
for ch in s.chars().rev() { black_box(ch) }
|
||||
for ch in s.chars().rev() { black_box(ch); }
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1332,10 +1332,11 @@ impl MetricMap {
|
||||
/// elimination.
|
||||
///
|
||||
/// This function is a no-op, and does not even read from `dummy`.
|
||||
pub fn black_box<T>(dummy: T) {
|
||||
pub fn black_box<T>(dummy: T) -> T {
|
||||
// we need to "use" the argument in some way LLVM can't
|
||||
// introspect.
|
||||
unsafe {asm!("" : : "r"(&dummy))}
|
||||
dummy
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user