Obviously, not ready to check in... I was thinking about the assume and guard patches currently out for review and/or recently landed by Max and I. Something was really bugging me, and I finally realized what it was. The code we were adding in LICM was essentially duplicating support already in AliasSetTracker and BasicAA. We were extending the existing code structure, but it raised the question of whether this was the right approach.
This patch demonstrates that yes, all the special casing can be deleted. It needs cleanup (and a lot more testing), but it's rather telling there are no test changes observed. And BasicAA+AST is generally more powerful than the special cases which previously was in LICM. (I need to find such an example for a test.)
Anyone see a problem with this basic idea? I'm worried this is too good to be true and I must be missing something...