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

--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tamar Christina <tnfch...@gcc.gnu.org>:

https://gcc.gnu.org/g:0135a90de5a99b51001b6152d8b548151ebfa1c3

commit r15-2099-g0135a90de5a99b51001b6152d8b548151ebfa1c3
Author: Tamar Christina <tamar.christ...@arm.com>
Date:   Wed Jul 17 16:22:14 2024 +0100

    middle-end: fix 0 offset creation and folding [PR115936]

    As shown in PR115936 SCEV and IVOPTS create an invalidate IV when the IV is
    a pointer type:

    ivtmp.39_65 = ivtmp.39_59 + 0B;

    where the IVs are DI mode and the offset is a pointer.
    This comes from this weird candidate:

    Candidate 8:
      Var befor: ivtmp.39_59
      Var after: ivtmp.39_65
      Incr POS: before exit test
      IV struct:
        Type:       sizetype
        Base:       0
        Step:       0B
        Biv:        N
        Overflowness wrto loop niter:       No-overflow

    This IV was always created just ended up not being used.

    This is created by SCEV.

    simple_iv_with_niters in the case where no CHREC is found creates an IV
with
    base == ev, offset == 0;

    however in this case EV is a POINTER_PLUS_EXPR and so the type is a
pointer.
    it ends up creating an unusable expression.

    gcc/ChangeLog:

            PR tree-optimization/115936
            * tree-scalar-evolution.cc (simple_iv_with_niters): Use sizetype
for
            pointers.
  • [Bug tree-optimization/115936] ... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to