Look at this bug for why we had to revert to Flush: https://bugs.webkit.org/show_bug.cgi?id=150760
Ok, so I was looking at other code, but realized maybe why there was a bug in the first place w/ GetById. DFGSpeculativeJIT64.cpp calls SpeculateCellOperand::use() on the base before compiling the IC. This might effect OSR exit data if the GetById is the last use of the base. I suspect this is why PhantomLocal was broken in that program. This also means that we should probably look at other use() calls to make sure they're sound w.r.t exceptions.
It looks like there is a strength reduction rule that may rewrite Flush to PhantomLocal, and it has no concept of exception handling. So there is a chance there is some program that breaks because of the use() call and a Flush being rewritten as PhantomLocal.