@josharian thank you for the ping! Quite obviously, I'm not going to submit anything for DSE in 1.11 :) Will try to get something working during the freeze. Michael Munday lives really close, so I might bribe him with a beer to help me hack on DSE.
I poked at this briefly yesterday. I think (but am not sure) that there are two issues here.
Clearing a T vs clearing a T. I think Michael’s recent struct CL might help. We should check.
DSE needs identical—like same v.ID—store dests. But decompose introduces new OffPtr Values for each decomposition. Doing CSE again before DSE would help but that is way too big a hammer. Unwrapping OffPtrs during DSE might do it, or having decompose somehow do in-flight CSE.
Just a quick note: while I was looking at reproducing #29892 I noticed that the LocalAddr and InlMark ops aren't specially handled by the dead store pass, so it will treat them as loads (preventing dead stores being eliminated if their mem arg is used as an input to one of the new ops). Possibly worth fixing if we revisit dead store elimination.