On Sun, Dec 14, 2025 at 6:17 AM Kugan Vivekanandarajah <[email protected]> wrote: > > Hi, > This a patch fixes Bug 123067] by checking for partial aliasing in self write > test in LICM. > > Bootstrapped and regression tested with no new regressions. > > gcc/ChangeLog: > > 2025-12-09 Kugan Vivekanandarajah <[email protected]> > > PR middle-end/123067 > * tree-ssa-loop-im.cc (is_self_write): > > gcc/testsuite/ChangeLog: > > 2025-12-09 Kugan Vivekanandarajah <[email protected]> > > PR middle-end/123067 > * gcc.dg/licm-self-write-partial-alias.c: New test. > Is this OK?
+ /* Verify there is no partial aliasing. */ + if (!mem_refs_may_alias_p (load_ref, store_ref, + &memory_accesses.ttae_cache, true)) + return true; /* Disjoint: safe to hoist. */ this is redundant? If they are not aliasing then the caller would already say so? + /* They may alias. Verify exact same location. */ + 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)); this looks incomplete. See mem_ref_hasher::equal. That is, dependent on ->ref_decomposed the compare should look different, merging .offset with the MEM_REF offset in base. Maybe we can factor out a helper like bool im_compare_access_position_and_size (ao_ref *ref1, ao_ref *ref2) for this? Thanks, Richard. > Thanks, > Kugan > > > >
