(Mostly for discussion, not yet ready for real review)
This contains fixes for two cases where we might invalidate inbounds and leave it stale in the IR (a miscompile). Case 1 is when switching to an IV with no dynamically live uses, and case 2 is when doing pre-to-post conversion on the same pointer type IV.
Regardless of whether we actually take this approach for the bugs, the move from hasConcreteDef to the programHasUB approach is worthwhile. Several test cases *improve* substantially with only that part.
In fact, the fix for case 1 is minor in terms of test quality, possible a positive. It's case 2 which is seen to have fairly wide impact (as expected). The core question is, do we have a better approach for case 2?