Use the SP32 physical register as the base for FrameIndex lowering. Update it and the __stack_pointer global var in the prolog and epilog. Extend the mapping of virtual registers to wasm locals to include the physical registers.
Rather than modify the target-independent PrologEpilogInserter (which asserts that there are no virtual registers left) Include a slightly-modified copy for Wasm that does not have this assertion and only clears the virtual registers if scavenging was needed (which of course it isn't for wasm).
It isn't stated so, but the passes above are ordered in the order that they run (except for Relooper, which is not currently run). Would you mind moving the PEI pass up just below RegColoring?