1; RUN: opt < %s -disable-output -passes=indvars
2
3; Do not timeout (and do not crash).
4;
5; This test case used to take around 10 minutes to run (well, that of course
6; depends on which kind of build that is used and on which kind of server the
7; test is executed). There is a less reduced version of this test case in
8; PR51869 that takes much longer time to execute (I've not seen that one
9; terminate within reasonable time). Maybe this test case is reduced a bit too
10; much if being considered as a regression tests that would timeout without
11; the fix. It can at least be used to show compile time explosion that
12; happened when using isKnownPredicate inside ScalarEvolution::isImpliedCond.
13
14@v_228 = external dso_local global i32, align 1
15
16; Function Attrs: nounwind
17define dso_local i16 @main(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ptr %8, ptr %9, ptr %10, i1 %11) #0 {
18  br i1 %11, label %27, label %13
19
2013:                                               ; preds = %12
21  %14 = load i32, ptr @v_228, align 1
22  %15 = trunc i32 %14 to i16
23  %16 = mul i16 %15, 2
24  %17 = sub i16 10, %16
25  %18 = icmp ult i16 10, %16
26  %19 = icmp ult i16 %17, 1
27  %20 = or i1 %18, %19
28  br i1 %20, label %139, label %21
29
3021:                                               ; preds = %13
31  %22 = add i16 %16, 1
32  %23 = sub i16 10, %22
33  %24 = icmp ult i16 10, %22
34  %25 = icmp ult i16 %23, 1
35  %26 = or i1 %24, %25
36  br i1 %26, label %139, label %27
37
3827:                                               ; preds = %21, %12
39  %28 = load i16, ptr %1, align 1
40  br label %29
41
4229:                                               ; preds = %29, %27
43  %30 = phi i16 [ %28, %27 ], [ %31, %29 ]
44  %31 = add i16 %30, 1
45  %32 = icmp slt i16 %31, 28
46  br i1 %32, label %29, label %33
47
4833:                                               ; preds = %29
49  %34 = load i16, ptr %2, align 1
50  br label %35
51
5235:                                               ; preds = %43, %33
53  %36 = phi i16 [ %34, %33 ], [ %44, %43 ]
54  %37 = sext i16 %36 to i32
55  %38 = mul i32 %37, 2
56  %39 = sub i32 56, %38
57  %40 = icmp ult i32 56, %38
58  %41 = icmp ult i32 %39, 2
59  %42 = or i1 %40, %41
60  br i1 %42, label %139, label %43
61
6243:                                               ; preds = %35
63  %44 = add i16 %36, 1
64  %45 = icmp slt i16 %44, 28
65  br i1 %45, label %35, label %46
66
6746:                                               ; preds = %43
68  %47 = load i16, ptr %3, align 1
69  br label %48
70
7148:                                               ; preds = %55, %46
72  %49 = phi i16 [ %47, %46 ], [ %56, %55 ]
73  %50 = mul i16 %49, 4
74  %51 = sub i16 28, %50
75  %52 = icmp ult i16 28, %50
76  %53 = icmp ult i16 %51, 4
77  %54 = or i1 %52, %53
78  br i1 %54, label %139, label %55
79
8055:                                               ; preds = %48
81  %56 = add i16 %49, 1
82  %57 = icmp slt i16 %56, 7
83  br i1 %57, label %48, label %58
84
8558:                                               ; preds = %55
86  %59 = load i16, ptr %4, align 1
87  br label %60
88
8960:                                               ; preds = %67, %58
90  %61 = phi i16 [ %59, %58 ], [ %68, %67 ]
91  %62 = sext i16 %61 to i32
92  %63 = sub i32 1, %62
93  %64 = icmp ult i32 1, %62
94  %65 = icmp ult i32 %63, 1
95  %66 = or i1 %64, %65
96  br i1 %66, label %139, label %67
97
9867:                                               ; preds = %60
99  %68 = add i16 %61, 1
100  %69 = icmp slt i16 %68, 1
101  br i1 %69, label %60, label %70
102
10370:                                               ; preds = %67
104  %71 = load i16, ptr %5, align 1
105  br label %72
106
10772:                                               ; preds = %79, %70
108  %73 = phi i16 [ %71, %70 ], [ %80, %79 ]
109  %74 = sext i16 %73 to i32
110  %75 = sub i32 1, %74
111  %76 = icmp ult i32 1, %74
112  %77 = icmp ult i32 %75, 1
113  %78 = or i1 %76, %77
114  br i1 %78, label %139, label %79
115
11679:                                               ; preds = %72
117  %80 = add i16 %73, 1
118  %81 = icmp slt i16 %80, 1
119  br i1 %81, label %72, label %82
120
12182:                                               ; preds = %79
122  %83 = load i16, ptr %6, align 1
123  br label %84
124
12584:                                               ; preds = %91, %82
126  %85 = phi i16 [ %83, %82 ], [ %92, %91 ]
127  %86 = sext i16 %85 to i32
128  %87 = sub i32 1, %86
129  %88 = icmp ult i32 1, %86
130  %89 = icmp ult i32 %87, 1
131  %90 = or i1 %88, %89
132  br i1 %90, label %139, label %91
133
13491:                                               ; preds = %84
135  %92 = add i16 %85, 1
136  %93 = icmp slt i16 %92, 1
137  br i1 %93, label %84, label %94
138
13994:                                               ; preds = %91
140  %95 = load i16, ptr %7, align 1
141  br label %96
142
14396:                                               ; preds = %103, %94
144  %97 = phi i16 [ %95, %94 ], [ %104, %103 ]
145  %98 = sext i16 %97 to i32
146  %99 = sub i32 1, %98
147  %100 = icmp ult i32 1, %98
148  %101 = icmp ult i32 %99, 1
149  %102 = or i1 %100, %101
150  br i1 %102, label %139, label %103
151
152103:                                              ; preds = %96
153  %104 = add i16 %97, 1
154  %105 = icmp slt i16 %104, 1
155  br i1 %105, label %96, label %106
156
157106:                                              ; preds = %103
158  %107 = load i16, ptr %8, align 1
159  br label %108
160
161108:                                              ; preds = %115, %106
162  %109 = phi i16 [ %107, %106 ], [ %116, %115 ]
163  %110 = mul i16 %109, 4
164  %111 = sub i16 24, %110
165  %112 = icmp ult i16 24, %110
166  %113 = icmp ult i16 %111, 4
167  %114 = or i1 %112, %113
168  br i1 %114, label %139, label %115
169
170115:                                              ; preds = %108
171  %116 = add i16 %109, 1
172  %117 = icmp slt i16 %116, 6
173  br i1 %117, label %108, label %118
174
175118:                                              ; preds = %115
176  %119 = load i16, ptr %9, align 1
177  br label %120
178
179120:                                              ; preds = %128, %118
180  %121 = phi i16 [ %119, %118 ], [ %129, %128 ]
181  %122 = sext i16 %121 to i32
182  %123 = mul i32 %122, 2
183  %124 = sub i32 4, %123
184  %125 = icmp ult i32 4, %123
185  %126 = icmp ult i32 %124, 2
186  %127 = or i1 %125, %126
187  br i1 %127, label %139, label %128
188
189128:                                              ; preds = %120
190  %129 = add i16 %121, 1
191  %130 = icmp slt i16 %129, 2
192  br i1 %130, label %120, label %131
193
194131:                                              ; preds = %128
195  %132 = load i16, ptr %10, align 1
196  br label %133
197
198133:                                              ; preds = %133, %131
199  %134 = phi i16 [ %132, %131 ], [ %135, %133 ]
200  %135 = add i16 %134, 1
201  %136 = icmp slt i16 %135, 6
202  br i1 %136, label %133, label %137
203
204137:                                              ; preds = %133
205  %138 = load i16, ptr %0, align 1
206  ret i16 %138
207
208139:                                              ; preds = %120, %108, %96, %84, %72, %60, %48, %35, %21, %13
209  call void @llvm.trap() #2
210  unreachable
211}
212
213; Function Attrs: cold noreturn nounwind
214declare void @llvm.trap() #1
215
216attributes #0 = { nounwind }
217attributes #1 = { cold noreturn nounwind }
218attributes #2 = { noreturn nounwind }
219