https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113255

--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
So this:

static void
expand_set_or_cpymem_prologue_epilogue_by_misaligned_moves (rtx destmem, rtx
srcmem,
...
      /* See how many bytes we skipped.  */
      saveddest = expand_simple_binop (GET_MODE (*destptr), MINUS, saveddest,
                                       *destptr,
                                       saveddest, 1, OPTAB_DIRECT);
      /* Adjust srcptr and count.  */
      if (!issetmem)
        *srcptr = expand_simple_binop (GET_MODE (*srcptr), MINUS, *srcptr,
                                       saveddest, *srcptr, 1, OPTAB_DIRECT);

is the problematical op, but I'm not seeing an easy way to avoid the MINUS
here.  It's also difficult to match (minus (..) (and ... aligning-cst))
in find_base_term as the AND is exposed via CSELIB values only.

find_base_term is known broken but base_alias_check continues to be "useful"
for aliasing with spill slots mostly.  find_base_term tries to do ad-hoc
points-to analysis but is not conservative in any way - it doesn't even
have a way to say a final "I don't know" which means there's no way to
perform a conservative correction to it.  In fact I don't think we can
make it conservative.

Reply via email to