https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94311
--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> --- For PHIs we could use the cache but I see we're simply dropping the BLOCKs there (now that block location is encoded in the location we _do_ have a location BLOCK there as well). At least /* Do not cache a location - we do not have API to get pointer to the location in PHI statement and we may trigger reallocation. */ the comment is wrong in both regards. The API is gimple_phi_arg which yields a phi_arg_d * which has the location member. And re-allocation shouldn't happen because len = EDGE_COUNT (bb->preds); result = create_phi_node (phi_result, bb); so preds are set up and create_phi_node ensures there's enough capacity. So it boils down to the same issue that BLOCKs are not handled by the location cache. I don't remember exactly but in principle we do not need any BLOCKs on stmts in LTRANS (inline diagnostics uses it though). Amending the location cache with a BLOCK pointer should be possible but I wonder how to sort them? I guess same location usually means same BLOCK. Otherwise sort after BLOCK_NUMBER? That is, the idea would then be to apply the location cache only at the end of input_function.