https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114995
--- Comment #11 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- Just to clarify. prange as well as irange keep a value/mask pair where we can store alignment info, so every calculation (range-op) along the way can track this properly. Now, for pointers we loose this information across passes because of the union in SSA_NAME_RANGE_INFO (struct tree_ssa_name) which keeps the range info in an ptr_info_def, not a proper vrange_storage. It's in my long term TODO list to propose we properly track pointer ranges once prange comes live. Note that IPA keeps alignment info on the side, so part of this info is kept across passes. But I assume they're doing this, because originally ranges didn't have alignment (value/mask) info associated with them.