Commits

Michael Gottesman committed afe47fdfce1
Ensure that cast optimizer properly invalidates analyses in both ConstantPropagation and SimplifyCFG. The usage in ConstantPropagation required checking if a branch was passed to the erase action since in Constant Propagation we want to only invalidate ProgramFlow if possible. I already fixed this part in r29604. In this commit, I cleaned up the code by adding/using a "PreserveKindBuilder" that a pass can use to conveniently accumulate invalidations. This part of the change is just a refactoring. In the case of SimplifyCFG we always invalidate everything, we do not need to do any special checking beyond making sure that a non-null value is passed back from the cast optimizer. From my investigations in the cast optimizer, it appears that this always occurs currently. But just in case some future code is added that allows for a nullptr to come back after it has made modifications, I added code that ensures that we properly set MadeChange if we modify any instructions. Since this currently can not happen, I can not write a test for it that is meaningful. In the case of SILCombine, we do not perform transformations that invalidate the CFG, so the current method of using SILCombine's RAUW and inst erase hooks handle the situation correctly. Swift SVN r29778