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