Skip to content

Commit 8b0831f

Browse files
authored
Add benchmark for a fixpoint iteration with nested cycles (#1001)
* Add benchmark for a fixpoint iteration with nested cycles * Fix clippy warning
1 parent adf0556 commit 8b0831f

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

benches/dataflow.rs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,46 @@ fn dataflow(criterion: &mut Criterion) {
167167
});
168168
}
169169

170-
criterion_group!(benches, dataflow);
170+
/// Emulates a data flow problem of the form:
171+
/// ```py
172+
/// self.x0 = self.x1 + self.x2 + self.x3 + self.x4
173+
/// self.x1 = self.x0 + self.x2 + self.x3 + self.x4
174+
/// self.x2 = self.x0 + self.x1 + self.x3 + self.x4
175+
/// self.x3 = self.x0 + self.x1 + self.x2 + self.x4
176+
/// self.x4 = 0
177+
/// ```
178+
fn nested(criterion: &mut Criterion) {
179+
criterion.bench_function("converge_diverge_nested", |b| {
180+
b.iter_batched_ref(
181+
|| {
182+
let mut db = salsa::DatabaseImpl::new();
183+
184+
let def_x0 = Definition::new(&db, None, 0);
185+
let def_x1 = Definition::new(&db, None, 0);
186+
let def_x2 = Definition::new(&db, None, 0);
187+
let def_x3 = Definition::new(&db, None, 0);
188+
let def_x4 = Definition::new(&db, None, 0);
189+
190+
let use_x0 = Use::new(&db, vec![def_x1, def_x2, def_x3, def_x4]);
191+
let use_x1 = Use::new(&db, vec![def_x0, def_x2, def_x3, def_x4]);
192+
let use_x2 = Use::new(&db, vec![def_x0, def_x1, def_x3, def_x4]);
193+
let use_x3 = Use::new(&db, vec![def_x0, def_x1, def_x3, def_x4]);
194+
195+
def_x0.set_base(&mut db).to(Some(use_x0));
196+
def_x1.set_base(&mut db).to(Some(use_x1));
197+
def_x2.set_base(&mut db).to(Some(use_x2));
198+
def_x3.set_base(&mut db).to(Some(use_x3));
199+
200+
(db, def_x0)
201+
},
202+
|(db, def_x0)| {
203+
// All symbols converge on 0.
204+
assert_eq!(infer_definition(db, *def_x0), Type::Values(Box::from([0])));
205+
},
206+
BatchSize::LargeInput,
207+
);
208+
});
209+
}
210+
211+
criterion_group!(benches, dataflow, nested);
171212
criterion_main!(benches);

components/salsa-macro-rules/src/unexpected_cycle_recovery.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
macro_rules! unexpected_cycle_recovery {
66
($db:ident, $value:ident, $count:ident, $($other_inputs:ident),*) => {{
77
std::mem::drop($db);
8-
std::mem::drop(($($other_inputs),*));
8+
std::mem::drop(($($other_inputs,)*));
99
panic!("cannot recover from cycle")
1010
}};
1111
}
@@ -14,7 +14,7 @@ macro_rules! unexpected_cycle_recovery {
1414
macro_rules! unexpected_cycle_initial {
1515
($db:ident, $($other_inputs:ident),*) => {{
1616
std::mem::drop($db);
17-
std::mem::drop(($($other_inputs),*));
17+
std::mem::drop(($($other_inputs,)*));
1818
panic!("no cycle initial value")
1919
}};
2020
}

0 commit comments

Comments
 (0)