SJSIR versus NIR is the wrong question. The correct question is: do you want Scala.js language semantics or Scala Native language semantics?
If you want Scala.js language semantics, compile Scala.js IR to WasmGC.
If you want Scala Native language semantics, compile NIR to Wasm with linear memory (or maybe WasmGC anyway, but there will be some semantics like direct access to the object layout that will be lost).
Oh and, if you want Scala/JVM language semantics, then perhaps TeaVM is the right solution.
IMO, the avenue that is the most promising is as the proposal was written: take Scala.js language semantics, and compile SJSIR to WasmGC. The Scala.js IR is at a very good abstraction level to be compiled to WasmGC. Even its control flow structures have direct equivalences in wasm (fun fact: Scala.js IR and Wasm independently and concurrently invented the same “labelled block expression” control structure).
The linker front-end (to put it simply: dce + IR-level optimizations) can be reused out of the box, indeed. Only the LinkerBackend
needs rewriting.