forked from OSchip/llvm-project
219 lines
6.9 KiB
LLVM
219 lines
6.9 KiB
LLVM
; 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 }
|