With t2DoLoopDec we can be left with some extra MOV's in the preheaders of tail predicated loops. This removes them, in the same way we remove other dead variables.
I am hoping that is what TryRemove will do. It checks for things like corrupting IT blocks too.
I'm not super confident about this code late-backend dead code removal not causing some problems, but hope it's at least as sane as the existing checks. I have not seen any problems so far at least.
TryRemove is, relatively, robust :) I think you should just be able to pass ToRemove in place of ElementChain here, though I can't immediately remember why that isn't the case for the loop above.