https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98866
--- Comment #1 from Andrew Macleod <amacleod at redhat dot com> --- Very large function (16000+ basic blocks) with a lot of exception regions, and a pattern whereby about 300 pointers are live to all the regions. We spend a lot of time propagating an unchanging non-zero property around. My observation is that if a pointer evaluates to [1, +INF] at its definition (ie, the address of something), there will never be a meaningful range to track. a comparison to NULL will be folded as appropriate, and there is no need to track [UNDEFINED] on the un-taken edge as the branch will be folded and the edge removed. The range will remain [1, +INF] on the other edge. a comparison to some other pointer will likewise not result in a change of the range [1, +INF]. Relational/symbolic tracking could decide to fold the comparison away or propagate the ssa_name, but again, it will not change the range from [1, +INF] I think I can extend the invariant tweak to the cache to also include pointers which evaluate to [1, +INF] at their definition to be "invariant" as well and thus not be included in the on-entry cache. This appears to resolve the time issue. testing is underway