https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87168
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- It shows a few things, first, SSA names defined before the value-numbered region are not considered "available". So for _1 = ...; region_begin: _2 = _1; _3 = _2; we'd not optimize to _2 = _1; _3 = _1; then it shows, that 5093 /* Look for sth available at the definition block of the argument. 5094 This avoids inconsistencies between availability there which 5095 decides if the stmt can be removed and availability at the 5096 use site. The SSA property ensures that things available 5097 at the definition are also available at uses. */ computes bogus availability when the above isn't handled correctly (or we make things available at places where there's dominating stuff available).