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.

Diff:
---
 gcc/tree-scalar-evolution.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc
index 5aa95a2497a3..abb2bad77737 100644
--- a/gcc/tree-scalar-evolution.cc
+++ b/gcc/tree-scalar-evolution.cc
@@ -3243,7 +3243,11 @@ simple_iv_with_niters (class loop *wrto_loop, class loop 
*use_loop,
   if (tree_does_not_contain_chrecs (ev))
     {
       iv->base = ev;
-      iv->step = build_int_cst (TREE_TYPE (ev), 0);
+      tree ev_type = TREE_TYPE (ev);
+      if (POINTER_TYPE_P (ev_type))
+       ev_type = sizetype;
+
+      iv->step = build_int_cst (ev_type, 0);
       iv->no_overflow = true;
       return true;
     }

Reply via email to