1 ; RUN: opt < %s -disable-output -passes=indvars
3 ; Do not timeout (and do not crash).
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.
14 @v_228 = external dso_local global i32, align 1
16 ; Function Attrs: nounwind
17 define 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
21 %14 = load i32, ptr @v_228, align 1
22 %15 = trunc i32 %14 to i16
25 %18 = icmp ult i16 10, %16
26 %19 = icmp ult i16 %17, 1
28 br i1 %20, label %139, label %21
33 %24 = icmp ult i16 10, %22
34 %25 = icmp ult i16 %23, 1
36 br i1 %26, label %139, label %27
38 27: ; preds = %21, %12
39 %28 = load i16, ptr %1, align 1
42 29: ; preds = %29, %27
43 %30 = phi i16 [ %28, %27 ], [ %31, %29 ]
45 %32 = icmp slt i16 %31, 28
46 br i1 %32, label %29, label %33
49 %34 = load i16, ptr %2, align 1
52 35: ; preds = %43, %33
53 %36 = phi i16 [ %34, %33 ], [ %44, %43 ]
54 %37 = sext i16 %36 to i32
57 %40 = icmp ult i32 56, %38
58 %41 = icmp ult i32 %39, 2
60 br i1 %42, label %139, label %43
64 %45 = icmp slt i16 %44, 28
65 br i1 %45, label %35, label %46
68 %47 = load i16, ptr %3, align 1
71 48: ; preds = %55, %46
72 %49 = phi i16 [ %47, %46 ], [ %56, %55 ]
75 %52 = icmp ult i16 28, %50
76 %53 = icmp ult i16 %51, 4
78 br i1 %54, label %139, label %55
82 %57 = icmp slt i16 %56, 7
83 br i1 %57, label %48, label %58
86 %59 = load i16, ptr %4, align 1
89 60: ; preds = %67, %58
90 %61 = phi i16 [ %59, %58 ], [ %68, %67 ]
91 %62 = sext i16 %61 to i32
93 %64 = icmp ult i32 1, %62
94 %65 = icmp ult i32 %63, 1
96 br i1 %66, label %139, label %67
100 %69 = icmp slt i16 %68, 1
101 br i1 %69, label %60, label %70
104 %71 = load i16, ptr %5, align 1
107 72: ; preds = %79, %70
108 %73 = phi i16 [ %71, %70 ], [ %80, %79 ]
109 %74 = sext i16 %73 to i32
111 %76 = icmp ult i32 1, %74
112 %77 = icmp ult i32 %75, 1
114 br i1 %78, label %139, label %79
118 %81 = icmp slt i16 %80, 1
119 br i1 %81, label %72, label %82
122 %83 = load i16, ptr %6, align 1
125 84: ; preds = %91, %82
126 %85 = phi i16 [ %83, %82 ], [ %92, %91 ]
127 %86 = sext i16 %85 to i32
129 %88 = icmp ult i32 1, %86
130 %89 = icmp ult i32 %87, 1
132 br i1 %90, label %139, label %91
136 %93 = icmp slt i16 %92, 1
137 br i1 %93, label %84, label %94
140 %95 = load i16, ptr %7, align 1
143 96: ; preds = %103, %94
144 %97 = phi i16 [ %95, %94 ], [ %104, %103 ]
145 %98 = sext i16 %97 to i32
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
153 %104 = add i16 %97, 1
154 %105 = icmp slt i16 %104, 1
155 br i1 %105, label %96, label %106
158 %107 = load i16, ptr %8, align 1
161 108: ; 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
171 %116 = add i16 %109, 1
172 %117 = icmp slt i16 %116, 6
173 br i1 %117, label %108, label %118
176 %119 = load i16, ptr %9, align 1
179 120: ; 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
190 %129 = add i16 %121, 1
191 %130 = icmp slt i16 %129, 2
192 br i1 %130, label %120, label %131
195 %132 = load i16, ptr %10, align 1
198 133: ; 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
205 %138 = load i16, ptr %0, align 1
208 139: ; preds = %120, %108, %96, %84, %72, %60, %48, %35, %21, %13
209 call void @llvm.trap() #2
213 ; Function Attrs: cold noreturn nounwind
214 declare void @llvm.trap() #1
216 attributes #0 = { nounwind }
217 attributes #1 = { cold noreturn nounwind }
218 attributes #2 = { noreturn nounwind }