[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / Analysis / ScalarEvolution / max-expr-cache.ll
blob8d401c3bb70fd409ac2d50ef5ced0c42d45bab7e
1 ; RUN: opt < %s -analyze -enable-new-pm=0 -scalar-evolution | FileCheck %s
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: Printing analysis 'Scalar Evolution Analysis' for function 'smax'
12 entry:
13   br label %bb4
15 bb4:
16   %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
17   %tmp6 = trunc i64 %tmp5 to i32
18   %tmp7 = shl nsw i32 %tmp6, 8
19   %tmp8 = sub nsw i32 %tmp3, %tmp7
20   %tmp9 = icmp slt i32 %tmp8, 256
21   %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
22   %tmp11 = add nsw i32 %tmp10, 1
23   %tmp12 = icmp sgt i32 %tmp8, %tmp11
24   %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
25   %tmp14 = icmp slt i32 %tmp13, 256
26   %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
27   %tmp16 = add nsw i32 %tmp15, 1
28   %tmp17 = icmp sgt i32 %tmp8, %tmp16
29   %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
30   %tmp19 = icmp slt i32 %tmp18, 256
31   %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
32   %tmp21 = add nsw i32 %tmp20, 1
33   %tmp22 = icmp sgt i32 %tmp8, %tmp21
34   %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
35   %tmp24 = icmp slt i32 %tmp23, 256
36   %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
37   %tmp26 = add nsw i32 %tmp25, 1
38   %tmp27 = icmp sgt i32 %tmp8, %tmp26
39   %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
40   %tmp29 = icmp slt i32 %tmp28, 256
41   %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
42   %tmp31 = add nsw i32 %tmp30, 1
43   %tmp32 = icmp sgt i32 %tmp8, %tmp31
44   %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
45   %tmp34 = icmp slt i32 %tmp33, 256
46   %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
47   %tmp36 = add nsw i32 %tmp35, 1
48   %tmp37 = icmp sgt i32 %tmp8, %tmp36
49   %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
50   %tmp39 = icmp slt i32 %tmp38, 256
51   %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
52   %tmp41 = add nsw i32 %tmp40, 1
53   %tmp42 = icmp sgt i32 %tmp8, %tmp41
54   %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
55   %tmp44 = add nsw i32 %tmp10, 7
56   %tmp45 = icmp slt i32 %tmp43, 256
57   %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
58 ; CHECK:  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
59 ; 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)
60   %tmp47 = icmp sgt i32 %tmp44, %tmp46
61   %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
62   %tmp49 = ashr i32 %tmp48, 3
63   %tmp50 = icmp sgt i32 %tmp49, 0
64   %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
65   %tmp52 = zext i32 %tmp51 to i64
66   br label %bb53
68 bb53:
69   %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
70   %tmp55 = trunc i64 %tmp54 to i32
71   %tmp56 = shl nsw i32 %tmp55, 3
72   %tmp57 = sext i32 %tmp56 to i64
73   %tmp58 = getelementptr inbounds i8, i8* null, i64 %tmp57
74   store i8 undef, i8* %tmp58, align 8
75   %tmp59 = add nsw i64 %tmp54, 1
76   %tmp60 = icmp eq i64 %tmp59, %tmp52
77   br i1 %tmp60, label %bb61, label %bb53
79 bb61:
80   %tmp62 = add nuw nsw i64 %tmp5, 1
81   br label %bb4
85 define void @umax(i32 %tmp3) {
86 ; CHECK-LABEL: Printing analysis 'Scalar Evolution Analysis' for function 'umax'
87 entry:
88   br label %bb4
90 bb4:
91   %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
92   %tmp6 = trunc i64 %tmp5 to i32
93   %tmp7 = shl nsw i32 %tmp6, 8
94   %tmp8 = sub nsw i32 %tmp3, %tmp7
95   %tmp9 = icmp ult i32 %tmp8, 256
96   %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
97   %tmp11 = add nsw i32 %tmp10, 1
98   %tmp12 = icmp ugt i32 %tmp8, %tmp11
99   %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
100   %tmp14 = icmp ult i32 %tmp13, 256
101   %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
102   %tmp16 = add nsw i32 %tmp15, 1
103   %tmp17 = icmp ugt i32 %tmp8, %tmp16
104   %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
105   %tmp19 = icmp ult i32 %tmp18, 256
106   %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
107   %tmp21 = add nsw i32 %tmp20, 1
108   %tmp22 = icmp ugt i32 %tmp8, %tmp21
109   %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
110   %tmp24 = icmp ult i32 %tmp23, 256
111   %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
112   %tmp26 = add nsw i32 %tmp25, 1
113   %tmp27 = icmp ugt i32 %tmp8, %tmp26
114   %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
115   %tmp29 = icmp ult i32 %tmp28, 256
116   %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
117   %tmp31 = add nsw i32 %tmp30, 1
118   %tmp32 = icmp ugt i32 %tmp8, %tmp31
119   %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
120   %tmp34 = icmp ult i32 %tmp33, 256
121   %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
122   %tmp36 = add nsw i32 %tmp35, 1
123   %tmp37 = icmp ugt i32 %tmp8, %tmp36
124   %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
125   %tmp39 = icmp ult i32 %tmp38, 256
126   %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
127   %tmp41 = add nsw i32 %tmp40, 1
128   %tmp42 = icmp ugt i32 %tmp8, %tmp41
129   %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
130   %tmp44 = add nsw i32 %tmp10, 7
131   %tmp45 = icmp ult i32 %tmp43, 256
132   %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
133 ; CHECK:  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
134 ; 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)
135   %tmp47 = icmp ugt i32 %tmp44, %tmp46
136   %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
137   %tmp49 = ashr i32 %tmp48, 3
138   %tmp50 = icmp ugt i32 %tmp49, 0
139   %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
140   %tmp52 = zext i32 %tmp51 to i64
141   br label %bb53
143 bb53:
144   %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
145   %tmp55 = trunc i64 %tmp54 to i32
146   %tmp56 = shl nsw i32 %tmp55, 3
147   %tmp57 = sext i32 %tmp56 to i64
148   %tmp58 = getelementptr inbounds i8, i8* null, i64 %tmp57
149   store i8 undef, i8* %tmp58, align 8
150   %tmp59 = add nsw i64 %tmp54, 1
151   %tmp60 = icmp eq i64 %tmp59, %tmp52
152   br i1 %tmp60, label %bb61, label %bb53
154 bb61:
155   %tmp62 = add nuw nsw i64 %tmp5, 1
156   br label %bb4