https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127968
--- Comment #2 from Drea Pinski <pinskia at gcc dot gnu.org> ---
Shouldn't:
return (operand_equal_p (load_ref->mem.base, store_ref->mem.base, 0)
&& known_eq (load_ref->mem.size, store_ref->mem.size)
&& known_eq (load_ref->mem.offset, store_ref->mem.offset));
Be a range check to check for partial overlapping first and then an exact
match?
That is:
if ([offset1, offset1+size1] overlaps [offset2, offset2+size2])
then it is not safe to hoist
