Home | History | Annotate | Download | only in LICM
      1 ; RUN: opt -S -licm -loop-unroll < %s
      2 ;
      3 ; This test contains a carefully rotated set of three nested loops. The middle
      4 ; loop can be unrolled leaving one copy of the inner loop inside the outer
      5 ; loop. Because of how LICM works, when this middle loop is unrolled and
      6 ; removed, its alias set tracker is destroyed and no longer available when LICM
      7 ; runs on the outer loop.
      8 
      9 define void @f() {
     10 entry:
     11   br label %l1
     12 
     13 l2.l1.loopexit_crit_edge:
     14   br label %l1.loopexit
     15 
     16 l1.loopexit:
     17   br label %l1.backedge
     18 
     19 l1:
     20   br i1 undef, label %l1.backedge, label %l2.preheader
     21 
     22 l1.backedge:
     23   br label %l1
     24 
     25 l2.preheader:
     26   br i1 true, label %l1.loopexit, label %l3.preheader.lr.ph
     27 
     28 l3.preheader.lr.ph:
     29   br label %l3.preheader
     30 
     31 l2.loopexit:
     32   br i1 true, label %l2.l1.loopexit_crit_edge, label %l3.preheader
     33 
     34 l3.preheader:
     35   br label %l3
     36 
     37 l3:
     38   br i1 true, label %l3, label %l2.loopexit
     39 }
     40