Coming back to this thread, because the switch statement thread popped up in the MLIR forums and the switch statement RFC got me thinking about Calyx and “FSM + datapath” modelling in general.
How much of the Calyx control sub-language overlaps with the MLIR SCF dialect?
I don’t think this is a 1:1 mapping, but the following seem pretty similar
seq <> scf.for
par <> scf.parallel
if <> scf.if
while <> scf.while
I think there is also a loose correspondence between
invoke <> std.call
which isn’t part of the SCF dialect, but is also already upstream in MLIR.
Anyway, I had this thought and wanted to share it. I’ve been focused on the handshaking side of things, but it would be great if we could reuse some of the SCF dialect on the statically scheduled side of things.