Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / Analysis / ScalarEvolution / max-expr-cache.ll
blob6aaf55dba10224b971ab2929e739adbf3c3eda32
1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2 ; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
4 ; SCEV would take a long time to compute SCEV expressions for this IR.  If SCEV
5 ; finishes in < 1 second then the bug is fixed.
7 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
8 target triple = "x86_64--linux-gnu"
10 define void @smax(i32 %tmp3) {
11 ; CHECK-LABEL: 'smax'
12 ; CHECK-NEXT:  Classifying expressions for: @smax
13 ; CHECK-NEXT:    %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
14 ; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%bb4> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
15 ; CHECK-NEXT:    %tmp6 = trunc i64 %tmp5 to i32
16 ; CHECK-NEXT:    --> {0,+,1}<%bb4> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
17 ; CHECK-NEXT:    %tmp7 = shl nsw i32 %tmp6, 8
18 ; CHECK-NEXT:    --> {0,+,256}<%bb4> U: [0,-255) S: [-2147483648,2147483393) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
19 ; CHECK-NEXT:    %tmp8 = sub nsw i32 %tmp3, %tmp7
20 ; CHECK-NEXT:    --> {%tmp3,+,-256}<%bb4> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
21 ; CHECK-NEXT:    %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
22 ; CHECK-NEXT:    --> (256 smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
23 ; CHECK-NEXT:    %tmp11 = add nsw i32 %tmp10, 1
24 ; CHECK-NEXT:    --> (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483647,258) S: [-2147483647,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
25 ; CHECK-NEXT:    %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
26 ; CHECK-NEXT:    --> ((1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,258) S: [-2147483648,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
27 ; CHECK-NEXT:    %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
28 ; CHECK-NEXT:    --> (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
29 ; CHECK-NEXT:    %tmp16 = add nsw i32 %tmp15, 1
30 ; CHECK-NEXT:    --> (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483647,258) S: [-2147483647,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
31 ; CHECK-NEXT:    %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
32 ; CHECK-NEXT:    --> ((1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,258) S: [-2147483648,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
33 ; CHECK-NEXT:    %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
34 ; CHECK-NEXT:    --> (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
35 ; CHECK-NEXT:    %tmp21 = add nsw i32 %tmp20, 1
36 ; CHECK-NEXT:    --> (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483647,258) S: [-2147483647,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
37 ; CHECK-NEXT:    %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
38 ; CHECK-NEXT:    --> ((1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,258) S: [-2147483648,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
39 ; CHECK-NEXT:    %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
40 ; CHECK-NEXT:    --> (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
41 ; CHECK-NEXT:    %tmp26 = add nsw i32 %tmp25, 1
42 ; CHECK-NEXT:    --> (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483647,258) S: [-2147483647,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
43 ; CHECK-NEXT:    %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
44 ; CHECK-NEXT:    --> ((1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,258) S: [-2147483648,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
45 ; CHECK-NEXT:    %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
46 ; CHECK-NEXT:    --> (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
47 ; CHECK-NEXT:    %tmp31 = add nsw i32 %tmp30, 1
48 ; CHECK-NEXT:    --> (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483647,258) S: [-2147483647,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
49 ; CHECK-NEXT:    %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
50 ; CHECK-NEXT:    --> ((1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,258) S: [-2147483648,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
51 ; CHECK-NEXT:    %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
52 ; CHECK-NEXT:    --> (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
53 ; CHECK-NEXT:    %tmp36 = add nsw i32 %tmp35, 1
54 ; CHECK-NEXT:    --> (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483647,258) S: [-2147483647,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
55 ; CHECK-NEXT:    %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
56 ; CHECK-NEXT:    --> ((1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,258) S: [-2147483648,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
57 ; CHECK-NEXT:    %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
58 ; CHECK-NEXT:    --> (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
59 ; CHECK-NEXT:    %tmp41 = add nsw i32 %tmp40, 1
60 ; CHECK-NEXT:    --> (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483647,258) S: [-2147483647,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
61 ; CHECK-NEXT:    %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
62 ; CHECK-NEXT:    --> ((1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,258) S: [-2147483648,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
63 ; CHECK-NEXT:    %tmp44 = add nsw i32 %tmp10, 7
64 ; CHECK-NEXT:    --> (7 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> U: [-2147483641,264) S: [-2147483641,264) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
65 ; CHECK-NEXT:    %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
66 ; CHECK-NEXT:    --> (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
67 ; CHECK-NEXT:    %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
68 ; CHECK-NEXT:    --> ((7 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smax (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>)) U: [-2147483641,264) S: [-2147483641,264) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
69 ; CHECK-NEXT:    %tmp49 = ashr i32 %tmp48, 3
70 ; CHECK-NEXT:    --> %tmp49 U: [-268435456,268435456) S: [-268435456,268435456) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
71 ; CHECK-NEXT:    %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
72 ; CHECK-NEXT:    --> (0 smax %tmp49) U: [0,268435456) S: [0,268435456) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
73 ; CHECK-NEXT:    %tmp52 = zext i32 %tmp51 to i64
74 ; CHECK-NEXT:    --> (zext i32 (0 smax %tmp49) to i64) U: [0,268435456) S: [0,268435456) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
75 ; CHECK-NEXT:    %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
76 ; CHECK-NEXT:    --> {undef,+,1}<nsw><%bb53> U: full-set S: full-set Exits: (-1 + (zext i32 (0 smax %tmp49) to i64))<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
77 ; CHECK-NEXT:    %tmp55 = trunc i64 %tmp54 to i32
78 ; CHECK-NEXT:    --> {(trunc i64 undef to i32),+,1}<%bb53> U: full-set S: full-set Exits: (-1 + (0 smax %tmp49))<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
79 ; CHECK-NEXT:    %tmp56 = shl nsw i32 %tmp55, 3
80 ; CHECK-NEXT:    --> {(8 * (trunc i64 undef to i32)),+,8}<%bb53> U: [0,-7) S: [-2147483648,2147483641) Exits: (-8 + (8 * (0 smax %tmp49))<nuw><nsw>)<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
81 ; CHECK-NEXT:    %tmp57 = sext i32 %tmp56 to i64
82 ; CHECK-NEXT:    --> (sext i32 {(8 * (trunc i64 undef to i32)),+,8}<%bb53> to i64) U: [0,-7) S: [-2147483648,2147483641) Exits: (-8 + (8 * (zext i32 (0 smax %tmp49) to i64))<nuw><nsw>)<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
83 ; CHECK-NEXT:    %tmp58 = getelementptr inbounds i8, ptr null, i64 %tmp57
84 ; CHECK-NEXT:    --> ((sext i32 {(8 * (trunc i64 undef to i32)),+,8}<%bb53> to i64) + null) U: [0,-7) S: [-2147483648,2147483641) Exits: (-8 + (8 * (zext i32 (0 smax %tmp49) to i64))<nuw><nsw> + null) LoopDispositions: { %bb53: Computable, %bb4: Variant }
85 ; CHECK-NEXT:    %tmp59 = add nsw i64 %tmp54, 1
86 ; CHECK-NEXT:    --> {(1 + undef),+,1}<nsw><%bb53> U: full-set S: full-set Exits: (zext i32 (0 smax %tmp49) to i64) LoopDispositions: { %bb53: Computable, %bb4: Variant }
87 ; CHECK-NEXT:    %tmp62 = add nuw nsw i64 %tmp5, 1
88 ; CHECK-NEXT:    --> {1,+,1}<nuw><%bb4> U: [1,0) S: [1,0) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
89 ; CHECK-NEXT:  Determining loop execution counts for: @smax
90 ; CHECK-NEXT:  Loop %bb53: backedge-taken count is (-1 + (zext i32 (0 smax %tmp49) to i64) + (-1 * undef))
91 ; CHECK-NEXT:  Loop %bb53: constant max backedge-taken count is -1
92 ; CHECK-NEXT:  Loop %bb53: symbolic max backedge-taken count is (-1 + (zext i32 (0 smax %tmp49) to i64) + (-1 * undef))
93 ; CHECK-NEXT:  Loop %bb53: Predicated backedge-taken count is (-1 + (zext i32 (0 smax %tmp49) to i64) + (-1 * undef))
94 ; CHECK-NEXT:   Predicates:
95 ; CHECK:       Loop %bb53: Trip multiple is 1
96 ; CHECK-NEXT:  Loop %bb4: <multiple exits> Unpredictable backedge-taken count.
97 ; CHECK-NEXT:  Loop %bb4: Unpredictable constant max backedge-taken count.
98 ; CHECK-NEXT:  Loop %bb4: Unpredictable symbolic max backedge-taken count.
99 ; CHECK-NEXT:  Loop %bb4: Unpredictable predicated backedge-taken count.
101 entry:
102   br label %bb4
104 bb4:
105   %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
106   %tmp6 = trunc i64 %tmp5 to i32
107   %tmp7 = shl nsw i32 %tmp6, 8
108   %tmp8 = sub nsw i32 %tmp3, %tmp7
109   %tmp9 = icmp slt i32 %tmp8, 256
110   %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
111   %tmp11 = add nsw i32 %tmp10, 1
112   %tmp12 = icmp sgt i32 %tmp8, %tmp11
113   %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
114   %tmp14 = icmp slt i32 %tmp13, 256
115   %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
116   %tmp16 = add nsw i32 %tmp15, 1
117   %tmp17 = icmp sgt i32 %tmp8, %tmp16
118   %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
119   %tmp19 = icmp slt i32 %tmp18, 256
120   %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
121   %tmp21 = add nsw i32 %tmp20, 1
122   %tmp22 = icmp sgt i32 %tmp8, %tmp21
123   %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
124   %tmp24 = icmp slt i32 %tmp23, 256
125   %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
126   %tmp26 = add nsw i32 %tmp25, 1
127   %tmp27 = icmp sgt i32 %tmp8, %tmp26
128   %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
129   %tmp29 = icmp slt i32 %tmp28, 256
130   %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
131   %tmp31 = add nsw i32 %tmp30, 1
132   %tmp32 = icmp sgt i32 %tmp8, %tmp31
133   %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
134   %tmp34 = icmp slt i32 %tmp33, 256
135   %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
136   %tmp36 = add nsw i32 %tmp35, 1
137   %tmp37 = icmp sgt i32 %tmp8, %tmp36
138   %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
139   %tmp39 = icmp slt i32 %tmp38, 256
140   %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
141   %tmp41 = add nsw i32 %tmp40, 1
142   %tmp42 = icmp sgt i32 %tmp8, %tmp41
143   %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
144   %tmp44 = add nsw i32 %tmp10, 7
145   %tmp45 = icmp slt i32 %tmp43, 256
146   %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
147   %tmp47 = icmp sgt i32 %tmp44, %tmp46
148   %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
149   %tmp49 = ashr i32 %tmp48, 3
150   %tmp50 = icmp sgt i32 %tmp49, 0
151   %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
152   %tmp52 = zext i32 %tmp51 to i64
153   br label %bb53
155 bb53:
156   %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
157   %tmp55 = trunc i64 %tmp54 to i32
158   %tmp56 = shl nsw i32 %tmp55, 3
159   %tmp57 = sext i32 %tmp56 to i64
160   %tmp58 = getelementptr inbounds i8, ptr null, i64 %tmp57
161   store i8 undef, ptr %tmp58, align 8
162   %tmp59 = add nsw i64 %tmp54, 1
163   %tmp60 = icmp eq i64 %tmp59, %tmp52
164   br i1 %tmp60, label %bb61, label %bb53
166 bb61:
167   %tmp62 = add nuw nsw i64 %tmp5, 1
168   br label %bb4
172 define void @umax(i32 %tmp3) {
173 ; CHECK-LABEL: 'umax'
174 ; CHECK-NEXT:  Classifying expressions for: @umax
175 ; CHECK-NEXT:    %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
176 ; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%bb4> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
177 ; CHECK-NEXT:    %tmp6 = trunc i64 %tmp5 to i32
178 ; CHECK-NEXT:    --> {0,+,1}<%bb4> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
179 ; CHECK-NEXT:    %tmp7 = shl nsw i32 %tmp6, 8
180 ; CHECK-NEXT:    --> {0,+,256}<%bb4> U: [0,-255) S: [-2147483648,2147483393) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
181 ; CHECK-NEXT:    %tmp8 = sub nsw i32 %tmp3, %tmp7
182 ; CHECK-NEXT:    --> {%tmp3,+,-256}<%bb4> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
183 ; CHECK-NEXT:    %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
184 ; CHECK-NEXT:    --> (256 umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
185 ; CHECK-NEXT:    %tmp11 = add nsw i32 %tmp10, 1
186 ; CHECK-NEXT:    --> (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
187 ; CHECK-NEXT:    %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
188 ; CHECK-NEXT:    --> ((1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,258) S: [0,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
189 ; CHECK-NEXT:    %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
190 ; CHECK-NEXT:    --> (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
191 ; CHECK-NEXT:    %tmp16 = add nsw i32 %tmp15, 1
192 ; CHECK-NEXT:    --> (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
193 ; CHECK-NEXT:    %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
194 ; CHECK-NEXT:    --> ((1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,258) S: [0,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
195 ; CHECK-NEXT:    %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
196 ; CHECK-NEXT:    --> (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
197 ; CHECK-NEXT:    %tmp21 = add nsw i32 %tmp20, 1
198 ; CHECK-NEXT:    --> (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
199 ; CHECK-NEXT:    %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
200 ; CHECK-NEXT:    --> ((1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,258) S: [0,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
201 ; CHECK-NEXT:    %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
202 ; CHECK-NEXT:    --> (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
203 ; CHECK-NEXT:    %tmp26 = add nsw i32 %tmp25, 1
204 ; CHECK-NEXT:    --> (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
205 ; CHECK-NEXT:    %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
206 ; CHECK-NEXT:    --> ((1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,258) S: [0,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
207 ; CHECK-NEXT:    %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
208 ; CHECK-NEXT:    --> (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
209 ; CHECK-NEXT:    %tmp31 = add nsw i32 %tmp30, 1
210 ; CHECK-NEXT:    --> (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
211 ; CHECK-NEXT:    %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
212 ; CHECK-NEXT:    --> ((1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,258) S: [0,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
213 ; CHECK-NEXT:    %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
214 ; CHECK-NEXT:    --> (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
215 ; CHECK-NEXT:    %tmp36 = add nsw i32 %tmp35, 1
216 ; CHECK-NEXT:    --> (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
217 ; CHECK-NEXT:    %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
218 ; CHECK-NEXT:    --> ((1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,258) S: [0,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
219 ; CHECK-NEXT:    %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
220 ; CHECK-NEXT:    --> (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
221 ; CHECK-NEXT:    %tmp41 = add nsw i32 %tmp40, 1
222 ; CHECK-NEXT:    --> (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
223 ; CHECK-NEXT:    %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
224 ; CHECK-NEXT:    --> ((1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,258) S: [0,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
225 ; CHECK-NEXT:    %tmp44 = add nsw i32 %tmp10, 7
226 ; CHECK-NEXT:    --> (7 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [7,264) S: [7,264) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
227 ; CHECK-NEXT:    %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
228 ; CHECK-NEXT:    --> (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
229 ; CHECK-NEXT:    %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
230 ; CHECK-NEXT:    --> ((7 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umax (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>)) U: [7,264) S: [7,264) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
231 ; CHECK-NEXT:    %tmp49 = ashr i32 %tmp48, 3
232 ; CHECK-NEXT:    --> %tmp49 U: [0,128) S: [0,128) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
233 ; CHECK-NEXT:    %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
234 ; CHECK-NEXT:    --> %tmp49 U: [0,128) S: [0,128) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
235 ; CHECK-NEXT:    %tmp52 = zext i32 %tmp51 to i64
236 ; CHECK-NEXT:    --> (zext i32 %tmp49 to i64) U: [0,128) S: [0,128) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
237 ; CHECK-NEXT:    %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
238 ; CHECK-NEXT:    --> {undef,+,1}<nsw><%bb53> U: full-set S: full-set Exits: (-1 + (zext i32 %tmp49 to i64))<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
239 ; CHECK-NEXT:    %tmp55 = trunc i64 %tmp54 to i32
240 ; CHECK-NEXT:    --> {(trunc i64 undef to i32),+,1}<%bb53> U: full-set S: full-set Exits: (-1 + %tmp49)<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
241 ; CHECK-NEXT:    %tmp56 = shl nsw i32 %tmp55, 3
242 ; CHECK-NEXT:    --> {(8 * (trunc i64 undef to i32)),+,8}<%bb53> U: [0,-7) S: [-2147483648,2147483641) Exits: (-8 + (8 * %tmp49)<nuw><nsw>)<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
243 ; CHECK-NEXT:    %tmp57 = sext i32 %tmp56 to i64
244 ; CHECK-NEXT:    --> (sext i32 {(8 * (trunc i64 undef to i32)),+,8}<%bb53> to i64) U: [0,-7) S: [-2147483648,2147483641) Exits: (-8 + (8 * (zext i32 %tmp49 to i64))<nuw><nsw>)<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
245 ; CHECK-NEXT:    %tmp58 = getelementptr inbounds i8, ptr null, i64 %tmp57
246 ; CHECK-NEXT:    --> ((sext i32 {(8 * (trunc i64 undef to i32)),+,8}<%bb53> to i64) + null) U: [0,-7) S: [-2147483648,2147483641) Exits: (-8 + (8 * (zext i32 %tmp49 to i64))<nuw><nsw> + null) LoopDispositions: { %bb53: Computable, %bb4: Variant }
247 ; CHECK-NEXT:    %tmp59 = add nsw i64 %tmp54, 1
248 ; CHECK-NEXT:    --> {(1 + undef),+,1}<nsw><%bb53> U: full-set S: full-set Exits: (zext i32 %tmp49 to i64) LoopDispositions: { %bb53: Computable, %bb4: Variant }
249 ; CHECK-NEXT:    %tmp62 = add nuw nsw i64 %tmp5, 1
250 ; CHECK-NEXT:    --> {1,+,1}<nuw><%bb4> U: [1,0) S: [1,0) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
251 ; CHECK-NEXT:  Determining loop execution counts for: @umax
252 ; CHECK-NEXT:  Loop %bb53: backedge-taken count is (-1 + (zext i32 %tmp49 to i64) + (-1 * undef))
253 ; CHECK-NEXT:  Loop %bb53: constant max backedge-taken count is -1
254 ; CHECK-NEXT:  Loop %bb53: symbolic max backedge-taken count is (-1 + (zext i32 %tmp49 to i64) + (-1 * undef))
255 ; CHECK-NEXT:  Loop %bb53: Predicated backedge-taken count is (-1 + (zext i32 %tmp49 to i64) + (-1 * undef))
256 ; CHECK-NEXT:   Predicates:
257 ; CHECK:       Loop %bb53: Trip multiple is 1
258 ; CHECK-NEXT:  Loop %bb4: <multiple exits> Unpredictable backedge-taken count.
259 ; CHECK-NEXT:  Loop %bb4: Unpredictable constant max backedge-taken count.
260 ; CHECK-NEXT:  Loop %bb4: Unpredictable symbolic max backedge-taken count.
261 ; CHECK-NEXT:  Loop %bb4: Unpredictable predicated backedge-taken count.
263 entry:
264   br label %bb4
266 bb4:
267   %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
268   %tmp6 = trunc i64 %tmp5 to i32
269   %tmp7 = shl nsw i32 %tmp6, 8
270   %tmp8 = sub nsw i32 %tmp3, %tmp7
271   %tmp9 = icmp ult i32 %tmp8, 256
272   %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
273   %tmp11 = add nsw i32 %tmp10, 1
274   %tmp12 = icmp ugt i32 %tmp8, %tmp11
275   %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
276   %tmp14 = icmp ult i32 %tmp13, 256
277   %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
278   %tmp16 = add nsw i32 %tmp15, 1
279   %tmp17 = icmp ugt i32 %tmp8, %tmp16
280   %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
281   %tmp19 = icmp ult i32 %tmp18, 256
282   %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
283   %tmp21 = add nsw i32 %tmp20, 1
284   %tmp22 = icmp ugt i32 %tmp8, %tmp21
285   %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
286   %tmp24 = icmp ult i32 %tmp23, 256
287   %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
288   %tmp26 = add nsw i32 %tmp25, 1
289   %tmp27 = icmp ugt i32 %tmp8, %tmp26
290   %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
291   %tmp29 = icmp ult i32 %tmp28, 256
292   %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
293   %tmp31 = add nsw i32 %tmp30, 1
294   %tmp32 = icmp ugt i32 %tmp8, %tmp31
295   %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
296   %tmp34 = icmp ult i32 %tmp33, 256
297   %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
298   %tmp36 = add nsw i32 %tmp35, 1
299   %tmp37 = icmp ugt i32 %tmp8, %tmp36
300   %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
301   %tmp39 = icmp ult i32 %tmp38, 256
302   %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
303   %tmp41 = add nsw i32 %tmp40, 1
304   %tmp42 = icmp ugt i32 %tmp8, %tmp41
305   %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
306   %tmp44 = add nsw i32 %tmp10, 7
307   %tmp45 = icmp ult i32 %tmp43, 256
308   %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
309   %tmp47 = icmp ugt i32 %tmp44, %tmp46
310   %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
311   %tmp49 = ashr i32 %tmp48, 3
312   %tmp50 = icmp ugt i32 %tmp49, 0
313   %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
314   %tmp52 = zext i32 %tmp51 to i64
315   br label %bb53
317 bb53:
318   %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
319   %tmp55 = trunc i64 %tmp54 to i32
320   %tmp56 = shl nsw i32 %tmp55, 3
321   %tmp57 = sext i32 %tmp56 to i64
322   %tmp58 = getelementptr inbounds i8, ptr null, i64 %tmp57
323   store i8 undef, ptr %tmp58, align 8
324   %tmp59 = add nsw i64 %tmp54, 1
325   %tmp60 = icmp eq i64 %tmp59, %tmp52
326   br i1 %tmp60, label %bb61, label %bb53
328 bb61:
329   %tmp62 = add nuw nsw i64 %tmp5, 1
330   br label %bb4