; RUN: opt < %s -disable-output -passes=indvars ; Do not timeout (and do not crash). ; ; This test case used to take around 10 minutes to run (well, that of course ; depends on which kind of build that is used and on which kind of server the ; test is executed). There is a less reduced version of this test case in ; PR51869 that takes much longer time to execute (I've not seen that one ; terminate within reasonable time). Maybe this test case is reduced a bit too ; much if being considered as a regression tests that would timeout without ; the fix. It can at least be used to show compile time explosion that ; happened when using isKnownPredicate inside ScalarEvolution::isImpliedCond. @v_228 = external dso_local global i32, align 1 ; Function Attrs: nounwind define dso_local i16 @main(i16* %0, i16* %1, i16* %2, i16* %3, i16* %4, i16* %5, i16* %6, i16* %7, i16* %8, i16* %9, i16* %10, i1 %11) #0 { br i1 %11, label %27, label %13 13: ; preds = %12 %14 = load i32, i32* @v_228, align 1 %15 = trunc i32 %14 to i16 %16 = mul i16 %15, 2 %17 = sub i16 10, %16 %18 = icmp ult i16 10, %16 %19 = icmp ult i16 %17, 1 %20 = or i1 %18, %19 br i1 %20, label %139, label %21 21: ; preds = %13 %22 = add i16 %16, 1 %23 = sub i16 10, %22 %24 = icmp ult i16 10, %22 %25 = icmp ult i16 %23, 1 %26 = or i1 %24, %25 br i1 %26, label %139, label %27 27: ; preds = %21, %12 %28 = load i16, i16* %1, align 1 br label %29 29: ; preds = %29, %27 %30 = phi i16 [ %28, %27 ], [ %31, %29 ] %31 = add i16 %30, 1 %32 = icmp slt i16 %31, 28 br i1 %32, label %29, label %33 33: ; preds = %29 %34 = load i16, i16* %2, align 1 br label %35 35: ; preds = %43, %33 %36 = phi i16 [ %34, %33 ], [ %44, %43 ] %37 = sext i16 %36 to i32 %38 = mul i32 %37, 2 %39 = sub i32 56, %38 %40 = icmp ult i32 56, %38 %41 = icmp ult i32 %39, 2 %42 = or i1 %40, %41 br i1 %42, label %139, label %43 43: ; preds = %35 %44 = add i16 %36, 1 %45 = icmp slt i16 %44, 28 br i1 %45, label %35, label %46 46: ; preds = %43 %47 = load i16, i16* %3, align 1 br label %48 48: ; preds = %55, %46 %49 = phi i16 [ %47, %46 ], [ %56, %55 ] %50 = mul i16 %49, 4 %51 = sub i16 28, %50 %52 = icmp ult i16 28, %50 %53 = icmp ult i16 %51, 4 %54 = or i1 %52, %53 br i1 %54, label %139, label %55 55: ; preds = %48 %56 = add i16 %49, 1 %57 = icmp slt i16 %56, 7 br i1 %57, label %48, label %58 58: ; preds = %55 %59 = load i16, i16* %4, align 1 br label %60 60: ; preds = %67, %58 %61 = phi i16 [ %59, %58 ], [ %68, %67 ] %62 = sext i16 %61 to i32 %63 = sub i32 1, %62 %64 = icmp ult i32 1, %62 %65 = icmp ult i32 %63, 1 %66 = or i1 %64, %65 br i1 %66, label %139, label %67 67: ; preds = %60 %68 = add i16 %61, 1 %69 = icmp slt i16 %68, 1 br i1 %69, label %60, label %70 70: ; preds = %67 %71 = load i16, i16* %5, align 1 br label %72 72: ; preds = %79, %70 %73 = phi i16 [ %71, %70 ], [ %80, %79 ] %74 = sext i16 %73 to i32 %75 = sub i32 1, %74 %76 = icmp ult i32 1, %74 %77 = icmp ult i32 %75, 1 %78 = or i1 %76, %77 br i1 %78, label %139, label %79 79: ; preds = %72 %80 = add i16 %73, 1 %81 = icmp slt i16 %80, 1 br i1 %81, label %72, label %82 82: ; preds = %79 %83 = load i16, i16* %6, align 1 br label %84 84: ; preds = %91, %82 %85 = phi i16 [ %83, %82 ], [ %92, %91 ] %86 = sext i16 %85 to i32 %87 = sub i32 1, %86 %88 = icmp ult i32 1, %86 %89 = icmp ult i32 %87, 1 %90 = or i1 %88, %89 br i1 %90, label %139, label %91 91: ; preds = %84 %92 = add i16 %85, 1 %93 = icmp slt i16 %92, 1 br i1 %93, label %84, label %94 94: ; preds = %91 %95 = load i16, i16* %7, align 1 br label %96 96: ; preds = %103, %94 %97 = phi i16 [ %95, %94 ], [ %104, %103 ] %98 = sext i16 %97 to i32 %99 = sub i32 1, %98 %100 = icmp ult i32 1, %98 %101 = icmp ult i32 %99, 1 %102 = or i1 %100, %101 br i1 %102, label %139, label %103 103: ; preds = %96 %104 = add i16 %97, 1 %105 = icmp slt i16 %104, 1 br i1 %105, label %96, label %106 106: ; preds = %103 %107 = load i16, i16* %8, align 1 br label %108 108: ; preds = %115, %106 %109 = phi i16 [ %107, %106 ], [ %116, %115 ] %110 = mul i16 %109, 4 %111 = sub i16 24, %110 %112 = icmp ult i16 24, %110 %113 = icmp ult i16 %111, 4 %114 = or i1 %112, %113 br i1 %114, label %139, label %115 115: ; preds = %108 %116 = add i16 %109, 1 %117 = icmp slt i16 %116, 6 br i1 %117, label %108, label %118 118: ; preds = %115 %119 = load i16, i16* %9, align 1 br label %120 120: ; preds = %128, %118 %121 = phi i16 [ %119, %118 ], [ %129, %128 ] %122 = sext i16 %121 to i32 %123 = mul i32 %122, 2 %124 = sub i32 4, %123 %125 = icmp ult i32 4, %123 %126 = icmp ult i32 %124, 2 %127 = or i1 %125, %126 br i1 %127, label %139, label %128 128: ; preds = %120 %129 = add i16 %121, 1 %130 = icmp slt i16 %129, 2 br i1 %130, label %120, label %131 131: ; preds = %128 %132 = load i16, i16* %10, align 1 br label %133 133: ; preds = %133, %131 %134 = phi i16 [ %132, %131 ], [ %135, %133 ] %135 = add i16 %134, 1 %136 = icmp slt i16 %135, 6 br i1 %136, label %133, label %137 137: ; preds = %133 %138 = load i16, i16* %0, align 1 ret i16 %138 139: ; preds = %120, %108, %96, %84, %72, %60, %48, %35, %21, %13 call void @llvm.trap() #2 unreachable } ; Function Attrs: cold noreturn nounwind declare void @llvm.trap() #1 attributes #0 = { nounwind } attributes #1 = { cold noreturn nounwind } attributes #2 = { noreturn nounwind }