Hi Sam,
Just a quick comment: yes, we want LICM for Turboshaft, but it's not quite the right time to implement it: before adding more risk via additional optimizations, we need to ship what we have, that's turned out to be difficult enough.
The status quo is that we rely on Loop Peeling plus subsequent Load Elimination and GVN, but we know that there are cases where we decide not to peel but would nevertheless like to hoist some stuff out of the loop. On the flip side, when it does trigger, the current strategy is more powerful: operations that can throw (JS) or trap (Wasm) cannot be LICM'ed (because the loop could run for zero iterations in practice), but they can be deduplicated after Peeling.
Of course, it's always a good time to learn how stuff works, so I don't want to discourage that :-)
Cheers,
Jakob