reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
; RUN: opt -S -licm -loop-unroll < %s
;
; This test contains a carefully rotated set of three nested loops. The middle
; loop can be unrolled leaving one copy of the inner loop inside the outer
; loop. Because of how LICM works, when this middle loop is unrolled and
; removed, its alias set tracker is destroyed and no longer available when LICM
; runs on the outer loop.

define void @f() {
entry:
  br label %l1

l2.l1.loopexit_crit_edge:
  br label %l1.loopexit

l1.loopexit:
  br label %l1.backedge

l1:
  br i1 undef, label %l1.backedge, label %l2.preheader

l1.backedge:
  br label %l1

l2.preheader:
  br i1 true, label %l1.loopexit, label %l3.preheader.lr.ph

l3.preheader.lr.ph:
  br label %l3.preheader

l2.loopexit:
  br i1 true, label %l2.l1.loopexit_crit_edge, label %l3.preheader

l3.preheader:
  br label %l3

l3:
  br i1 true, label %l3, label %l2.loopexit
}