xref: /llvm-project/llvm/test/Analysis/ScalarEvolution/max-expr-cache.ll (revision 8b5b294ec2cf876bc5eb5bd5fcb56ef487e36d60)
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
3
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.
6
7target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
8target triple = "x86_64--linux-gnu"
9
10define 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 i64 -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: Trip multiple is 1
94; CHECK-NEXT:  Loop %bb4: <multiple exits> Unpredictable backedge-taken count.
95; CHECK-NEXT:  Loop %bb4: Unpredictable constant max backedge-taken count.
96; CHECK-NEXT:  Loop %bb4: Unpredictable symbolic max backedge-taken count.
97;
98entry:
99  br label %bb4
100
101bb4:
102  %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
103  %tmp6 = trunc i64 %tmp5 to i32
104  %tmp7 = shl nsw i32 %tmp6, 8
105  %tmp8 = sub nsw i32 %tmp3, %tmp7
106  %tmp9 = icmp slt i32 %tmp8, 256
107  %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
108  %tmp11 = add nsw i32 %tmp10, 1
109  %tmp12 = icmp sgt i32 %tmp8, %tmp11
110  %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
111  %tmp14 = icmp slt i32 %tmp13, 256
112  %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
113  %tmp16 = add nsw i32 %tmp15, 1
114  %tmp17 = icmp sgt i32 %tmp8, %tmp16
115  %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
116  %tmp19 = icmp slt i32 %tmp18, 256
117  %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
118  %tmp21 = add nsw i32 %tmp20, 1
119  %tmp22 = icmp sgt i32 %tmp8, %tmp21
120  %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
121  %tmp24 = icmp slt i32 %tmp23, 256
122  %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
123  %tmp26 = add nsw i32 %tmp25, 1
124  %tmp27 = icmp sgt i32 %tmp8, %tmp26
125  %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
126  %tmp29 = icmp slt i32 %tmp28, 256
127  %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
128  %tmp31 = add nsw i32 %tmp30, 1
129  %tmp32 = icmp sgt i32 %tmp8, %tmp31
130  %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
131  %tmp34 = icmp slt i32 %tmp33, 256
132  %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
133  %tmp36 = add nsw i32 %tmp35, 1
134  %tmp37 = icmp sgt i32 %tmp8, %tmp36
135  %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
136  %tmp39 = icmp slt i32 %tmp38, 256
137  %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
138  %tmp41 = add nsw i32 %tmp40, 1
139  %tmp42 = icmp sgt i32 %tmp8, %tmp41
140  %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
141  %tmp44 = add nsw i32 %tmp10, 7
142  %tmp45 = icmp slt i32 %tmp43, 256
143  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
144  %tmp47 = icmp sgt i32 %tmp44, %tmp46
145  %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
146  %tmp49 = ashr i32 %tmp48, 3
147  %tmp50 = icmp sgt i32 %tmp49, 0
148  %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
149  %tmp52 = zext i32 %tmp51 to i64
150  br label %bb53
151
152bb53:
153  %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
154  %tmp55 = trunc i64 %tmp54 to i32
155  %tmp56 = shl nsw i32 %tmp55, 3
156  %tmp57 = sext i32 %tmp56 to i64
157  %tmp58 = getelementptr inbounds i8, ptr null, i64 %tmp57
158  store i8 undef, ptr %tmp58, align 8
159  %tmp59 = add nsw i64 %tmp54, 1
160  %tmp60 = icmp eq i64 %tmp59, %tmp52
161  br i1 %tmp60, label %bb61, label %bb53
162
163bb61:
164  %tmp62 = add nuw nsw i64 %tmp5, 1
165  br label %bb4
166}
167
168
169define void @umax(i32 %tmp3) {
170; CHECK-LABEL: 'umax'
171; CHECK-NEXT:  Classifying expressions for: @umax
172; CHECK-NEXT:    %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
173; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%bb4> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
174; CHECK-NEXT:    %tmp6 = trunc i64 %tmp5 to i32
175; CHECK-NEXT:    --> {0,+,1}<%bb4> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
176; CHECK-NEXT:    %tmp7 = shl nsw i32 %tmp6, 8
177; CHECK-NEXT:    --> {0,+,256}<%bb4> U: [0,-255) S: [-2147483648,2147483393) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
178; CHECK-NEXT:    %tmp8 = sub nsw i32 %tmp3, %tmp7
179; CHECK-NEXT:    --> {%tmp3,+,-256}<%bb4> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
180; CHECK-NEXT:    %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
181; CHECK-NEXT:    --> (256 umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
182; CHECK-NEXT:    %tmp11 = add nsw i32 %tmp10, 1
183; CHECK-NEXT:    --> (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [1,258) S: [1,258) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
184; CHECK-NEXT:    %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
185; 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 }
186; CHECK-NEXT:    %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
187; 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 }
188; CHECK-NEXT:    %tmp16 = add nsw i32 %tmp15, 1
189; 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 }
190; CHECK-NEXT:    %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
191; 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 }
192; CHECK-NEXT:    %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
193; 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 }
194; CHECK-NEXT:    %tmp21 = add nsw i32 %tmp20, 1
195; 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 }
196; CHECK-NEXT:    %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
197; 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 }
198; CHECK-NEXT:    %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
199; 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 }
200; CHECK-NEXT:    %tmp26 = add nsw i32 %tmp25, 1
201; 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 }
202; CHECK-NEXT:    %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
203; 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 }
204; CHECK-NEXT:    %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
205; 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 }
206; CHECK-NEXT:    %tmp31 = add nsw i32 %tmp30, 1
207; 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 }
208; CHECK-NEXT:    %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
209; 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 }
210; CHECK-NEXT:    %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
211; 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 }
212; CHECK-NEXT:    %tmp36 = add nsw i32 %tmp35, 1
213; 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 }
214; CHECK-NEXT:    %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
215; 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 }
216; CHECK-NEXT:    %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
217; 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 }
218; CHECK-NEXT:    %tmp41 = add nsw i32 %tmp40, 1
219; 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 }
220; CHECK-NEXT:    %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
221; 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 }
222; CHECK-NEXT:    %tmp44 = add nsw i32 %tmp10, 7
223; CHECK-NEXT:    --> (7 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> U: [7,264) S: [7,264) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
224; CHECK-NEXT:    %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
225; 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 }
226; CHECK-NEXT:    %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
227; 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 }
228; CHECK-NEXT:    %tmp49 = ashr i32 %tmp48, 3
229; CHECK-NEXT:    --> %tmp49 U: [-268435456,268435456) S: [-268435456,268435456) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
230; CHECK-NEXT:    %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
231; CHECK-NEXT:    --> %tmp49 U: [-268435456,268435456) S: [-268435456,268435456) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
232; CHECK-NEXT:    %tmp52 = zext i32 %tmp51 to i64
233; CHECK-NEXT:    --> (zext i32 %tmp49 to i64) U: [0,4294967296) S: [0,4294967296) Exits: <<Unknown>> LoopDispositions: { %bb4: Variant, %bb53: Invariant }
234; CHECK-NEXT:    %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
235; 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 }
236; CHECK-NEXT:    %tmp55 = trunc i64 %tmp54 to i32
237; CHECK-NEXT:    --> {(trunc i64 undef to i32),+,1}<%bb53> U: full-set S: full-set Exits: (-1 + %tmp49)<nsw> LoopDispositions: { %bb53: Computable, %bb4: Variant }
238; CHECK-NEXT:    %tmp56 = shl nsw i32 %tmp55, 3
239; CHECK-NEXT:    --> {(8 * (trunc i64 undef to i32)),+,8}<%bb53> U: [0,-7) S: [-2147483648,2147483641) Exits: (-8 + (8 * %tmp49)<nsw>) LoopDispositions: { %bb53: Computable, %bb4: Variant }
240; CHECK-NEXT:    %tmp57 = sext i32 %tmp56 to i64
241; CHECK-NEXT:    --> (sext i32 {(8 * (trunc i64 undef to i32)),+,8}<%bb53> to i64) U: [0,-7) S: [-2147483648,2147483641) Exits: (sext i32 (-8 + (8 * %tmp49)<nsw>) to i64) LoopDispositions: { %bb53: Computable, %bb4: Variant }
242; CHECK-NEXT:    %tmp58 = getelementptr inbounds i8, ptr null, i64 %tmp57
243; CHECK-NEXT:    --> ((sext i32 {(8 * (trunc i64 undef to i32)),+,8}<%bb53> to i64) + null) U: [0,-7) S: [-2147483648,2147483641) Exits: ((sext i32 (-8 + (8 * %tmp49)<nsw>) to i64) + null) LoopDispositions: { %bb53: Computable, %bb4: Variant }
244; CHECK-NEXT:    %tmp59 = add nsw i64 %tmp54, 1
245; CHECK-NEXT:    --> {(1 + undef),+,1}<nsw><%bb53> U: full-set S: full-set Exits: (zext i32 %tmp49 to i64) LoopDispositions: { %bb53: Computable, %bb4: Variant }
246; CHECK-NEXT:    %tmp62 = add nuw nsw i64 %tmp5, 1
247; CHECK-NEXT:    --> {1,+,1}<nuw><%bb4> U: [1,0) S: [1,0) Exits: <<Unknown>> LoopDispositions: { %bb4: Computable, %bb53: Invariant }
248; CHECK-NEXT:  Determining loop execution counts for: @umax
249; CHECK-NEXT:  Loop %bb53: backedge-taken count is (-1 + (zext i32 %tmp49 to i64) + (-1 * undef))
250; CHECK-NEXT:  Loop %bb53: constant max backedge-taken count is i64 -1
251; CHECK-NEXT:  Loop %bb53: symbolic max backedge-taken count is (-1 + (zext i32 %tmp49 to i64) + (-1 * undef))
252; CHECK-NEXT:  Loop %bb53: Trip multiple is 1
253; CHECK-NEXT:  Loop %bb4: <multiple exits> Unpredictable backedge-taken count.
254; CHECK-NEXT:  Loop %bb4: Unpredictable constant max backedge-taken count.
255; CHECK-NEXT:  Loop %bb4: Unpredictable symbolic max backedge-taken count.
256;
257entry:
258  br label %bb4
259
260bb4:
261  %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
262  %tmp6 = trunc i64 %tmp5 to i32
263  %tmp7 = shl nsw i32 %tmp6, 8
264  %tmp8 = sub nsw i32 %tmp3, %tmp7
265  %tmp9 = icmp ult i32 %tmp8, 256
266  %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
267  %tmp11 = add nsw i32 %tmp10, 1
268  %tmp12 = icmp ugt i32 %tmp8, %tmp11
269  %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
270  %tmp14 = icmp ult i32 %tmp13, 256
271  %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
272  %tmp16 = add nsw i32 %tmp15, 1
273  %tmp17 = icmp ugt i32 %tmp8, %tmp16
274  %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
275  %tmp19 = icmp ult i32 %tmp18, 256
276  %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
277  %tmp21 = add nsw i32 %tmp20, 1
278  %tmp22 = icmp ugt i32 %tmp8, %tmp21
279  %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
280  %tmp24 = icmp ult i32 %tmp23, 256
281  %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
282  %tmp26 = add nsw i32 %tmp25, 1
283  %tmp27 = icmp ugt i32 %tmp8, %tmp26
284  %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
285  %tmp29 = icmp ult i32 %tmp28, 256
286  %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
287  %tmp31 = add nsw i32 %tmp30, 1
288  %tmp32 = icmp ugt i32 %tmp8, %tmp31
289  %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
290  %tmp34 = icmp ult i32 %tmp33, 256
291  %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
292  %tmp36 = add nsw i32 %tmp35, 1
293  %tmp37 = icmp ugt i32 %tmp8, %tmp36
294  %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
295  %tmp39 = icmp ult i32 %tmp38, 256
296  %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
297  %tmp41 = add nsw i32 %tmp40, 1
298  %tmp42 = icmp ugt i32 %tmp8, %tmp41
299  %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
300  %tmp44 = add nsw i32 %tmp10, 7
301  %tmp45 = icmp ult i32 %tmp43, 256
302  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
303  %tmp47 = icmp ugt i32 %tmp44, %tmp46
304  %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
305  %tmp49 = ashr i32 %tmp48, 3
306  %tmp50 = icmp ugt i32 %tmp49, 0
307  %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
308  %tmp52 = zext i32 %tmp51 to i64
309  br label %bb53
310
311bb53:
312  %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
313  %tmp55 = trunc i64 %tmp54 to i32
314  %tmp56 = shl nsw i32 %tmp55, 3
315  %tmp57 = sext i32 %tmp56 to i64
316  %tmp58 = getelementptr inbounds i8, ptr null, i64 %tmp57
317  store i8 undef, ptr %tmp58, align 8
318  %tmp59 = add nsw i64 %tmp54, 1
319  %tmp60 = icmp eq i64 %tmp59, %tmp52
320  br i1 %tmp60, label %bb61, label %bb53
321
322bb61:
323  %tmp62 = add nuw nsw i64 %tmp5, 1
324  br label %bb4
325}
326