; 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(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 {
br i1 %11, label %27, label %13
13: ; preds = %12
%14 = load i32, ptr @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, ptr %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, ptr %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, ptr %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, ptr %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, ptr %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, ptr %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, ptr %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, ptr %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, ptr %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, ptr %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, ptr %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 }