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
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
; RUN: opt -simplifycfg -enable-mssa-loop-dependency -S --preserve-ll-uselistorder %s | FileCheck %s
; REQUIRES: x86-registered-target
; CHECK-LABEL: @n
; CHECK: uselistorder i16 0, { 3, 2, 4, 1, 5, 0, 6 }

; Note: test was added in an effort to ensure determinism when updating memoryssa. See PR42574.
; If the uselistorder check becomes no longer relevant, the test can be disabled or removed.

%rec9 = type { i16, i32, i32 }

@a = global [1 x [1 x %rec9]] zeroinitializer

define i16 @n() {
  br label %..split_crit_edge

..split_crit_edge:                                ; preds = %0
  br label %.split

bb4.us4:                                          ; preds = %bb2.split.us32, %bb6.us28
  %i.4.01.us5 = phi i16 [ %_tmp49.us30, %bb6.us28 ]
  br label %g.exit4.us21

bb1.i.us14:                                       ; preds = %bb4.us4
  br label %g.exit4.us21

g.exit4.us21:                                     ; preds = %bb1.i.us14, %g.exit4.critedge.us9
  %i.4.02.us22 = phi i16 [ %i.4.01.us5, %bb4.us4 ], [ %i.4.01.us5, %bb1.i.us14 ]
  br label %bb6.us28

bb5.us26:                                         ; preds = %g.exit4.us21
  br label %bb6.us28

bb6.us28:                                         ; preds = %bb5.us26, %g.exit4.us21
  %i.4.03.us29 = phi i16 [ %i.4.02.us22, %bb5.us26 ], [ %i.4.02.us22, %g.exit4.us21 ]
  %_tmp49.us30 = add nuw nsw i16 %i.4.03.us29, 1
  br label %bb4.us4

bb4.us.us:                                        ; preds = %bb2.split.us.us, %bb6.us.us
  %i.4.01.us.us = phi i16  [ %_tmp49.us.us, %bb6.us.us ]
  br label %bb1.i.us.us

bb1.i.us.us:                                      ; preds = %bb4.us.us
  br label %g.exit4.us.us

g.exit4.us.us:                                    ; preds = %bb1.i.us.us, %g.exit4.critedge.us.us
  %i.4.02.us.us = phi i16 [ %i.4.01.us.us, %bb1.i.us.us ]
  br label %bb5.us.us

bb5.us.us:                                        ; preds = %g.exit4.us.us
  br label %bb6.us.us

bb6.us.us:                                        ; preds = %bb5.us.us, %g.exit4.us.us
  %i.4.03.us.us = phi i16 [ %i.4.02.us.us, %bb5.us.us ]
  %_tmp49.us.us = add nuw nsw i16 %i.4.03.us.us, 1
  br label %bb4.us.us


.split:                                           ; preds = %..split_crit_edge
  br label %bb2

bb2:                                              ; preds = %.split, %bb7
  %h.3.0 = phi i16 [ undef, %.split ], [ %_tmp53, %bb7 ]
  br label %bb2.bb2.split_crit_edge

bb2.bb2.split_crit_edge:                          ; preds = %bb2
  br label %bb2.split

bb2.split.us:                                     ; preds = %bb2
  br label %bb4.us

bb4.us:                                           ; preds = %bb6.us, %bb2.split.us
  %i.4.01.us = phi i16 [ 0, %bb2.split.us ]
  br label %bb1.i.us

g.exit4.critedge.us:                              ; preds = %bb4.us
  br label %g.exit4.us

bb1.i.us:                                         ; preds = %bb4.us
  br label %g.exit4.us

g.exit4.us:                                       ; preds = %bb1.i.us, %g.exit4.critedge.us
  %i.4.02.us = phi i16 [ %i.4.01.us, %g.exit4.critedge.us ], [ %i.4.01.us, %bb1.i.us ]
  br label %bb5.us

bb5.us:                                           ; preds = %g.exit4.us
  br label %bb7

bb2.split:                                        ; preds = %bb2.bb2.split_crit_edge
  br label %bb4

bb4:                                              ; preds = %bb2.split, %bb6
  %i.4.01 = phi i16 [ 0, %bb2.split ]
  %_tmp16 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 0
  %_tmp17 = load i16, i16* %_tmp16, align 1
  br label %g.exit4.critedge

bb1.i:                                            ; preds = %bb4
  br label %g.exit4

g.exit4.critedge:                                 ; preds = %bb4
  %_tmp28.c = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 1
  %_tmp29.c = load i32, i32* %_tmp28.c, align 1
  %_tmp30.c = trunc i32 %_tmp29.c to i16
  br label %g.exit4

g.exit4:                                          ; preds = %g.exit4.critedge, %bb1.i
  %i.4.02 = phi i16 [ %i.4.01, %g.exit4.critedge ], [ %i.4.01, %bb1.i ]
  %_tmp41 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.02, i32 2
  br label %bb6

bb5:                                              ; preds = %g.exit4
  br label %bb6

bb6:                                              ; preds = %bb5, %g.exit4
  %i.4.03 = phi i16 [ %i.4.02, %bb5 ], [ %i.4.02, %g.exit4 ]
  %_tmp49 = add nuw nsw i16 %i.4.03, 1
  br label %bb7

bb7:                                              ; preds = %bb7.us-lcssa.us, %bb7.us-lcssa
  %_tmp53 = add nsw i16 %h.3.0, 1
  br label %bb2
}