108619006SBjorn Pettersson; RUN: opt < %s -disable-output -passes=indvars 208619006SBjorn Pettersson 308619006SBjorn Pettersson; Do not timeout (and do not crash). 408619006SBjorn Pettersson; 508619006SBjorn Pettersson; This test case used to take around 10 minutes to run (well, that of course 608619006SBjorn Pettersson; depends on which kind of build that is used and on which kind of server the 708619006SBjorn Pettersson; test is executed). There is a less reduced version of this test case in 808619006SBjorn Pettersson; PR51869 that takes much longer time to execute (I've not seen that one 908619006SBjorn Pettersson; terminate within reasonable time). Maybe this test case is reduced a bit too 1008619006SBjorn Pettersson; much if being considered as a regression tests that would timeout without 1108619006SBjorn Pettersson; the fix. It can at least be used to show compile time explosion that 1208619006SBjorn Pettersson; happened when using isKnownPredicate inside ScalarEvolution::isImpliedCond. 1308619006SBjorn Pettersson 1408619006SBjorn Pettersson@v_228 = external dso_local global i32, align 1 1508619006SBjorn Pettersson 1608619006SBjorn Pettersson; Function Attrs: nounwind 17*92619956SNikita Popovdefine 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 { 1808619006SBjorn Pettersson br i1 %11, label %27, label %13 1908619006SBjorn Pettersson 2008619006SBjorn Pettersson13: ; preds = %12 21*92619956SNikita Popov %14 = load i32, ptr @v_228, align 1 2208619006SBjorn Pettersson %15 = trunc i32 %14 to i16 2308619006SBjorn Pettersson %16 = mul i16 %15, 2 2408619006SBjorn Pettersson %17 = sub i16 10, %16 2508619006SBjorn Pettersson %18 = icmp ult i16 10, %16 2608619006SBjorn Pettersson %19 = icmp ult i16 %17, 1 2708619006SBjorn Pettersson %20 = or i1 %18, %19 2808619006SBjorn Pettersson br i1 %20, label %139, label %21 2908619006SBjorn Pettersson 3008619006SBjorn Pettersson21: ; preds = %13 3108619006SBjorn Pettersson %22 = add i16 %16, 1 3208619006SBjorn Pettersson %23 = sub i16 10, %22 3308619006SBjorn Pettersson %24 = icmp ult i16 10, %22 3408619006SBjorn Pettersson %25 = icmp ult i16 %23, 1 3508619006SBjorn Pettersson %26 = or i1 %24, %25 3608619006SBjorn Pettersson br i1 %26, label %139, label %27 3708619006SBjorn Pettersson 3808619006SBjorn Pettersson27: ; preds = %21, %12 39*92619956SNikita Popov %28 = load i16, ptr %1, align 1 4008619006SBjorn Pettersson br label %29 4108619006SBjorn Pettersson 4208619006SBjorn Pettersson29: ; preds = %29, %27 4308619006SBjorn Pettersson %30 = phi i16 [ %28, %27 ], [ %31, %29 ] 4408619006SBjorn Pettersson %31 = add i16 %30, 1 4508619006SBjorn Pettersson %32 = icmp slt i16 %31, 28 4608619006SBjorn Pettersson br i1 %32, label %29, label %33 4708619006SBjorn Pettersson 4808619006SBjorn Pettersson33: ; preds = %29 49*92619956SNikita Popov %34 = load i16, ptr %2, align 1 5008619006SBjorn Pettersson br label %35 5108619006SBjorn Pettersson 5208619006SBjorn Pettersson35: ; preds = %43, %33 5308619006SBjorn Pettersson %36 = phi i16 [ %34, %33 ], [ %44, %43 ] 5408619006SBjorn Pettersson %37 = sext i16 %36 to i32 5508619006SBjorn Pettersson %38 = mul i32 %37, 2 5608619006SBjorn Pettersson %39 = sub i32 56, %38 5708619006SBjorn Pettersson %40 = icmp ult i32 56, %38 5808619006SBjorn Pettersson %41 = icmp ult i32 %39, 2 5908619006SBjorn Pettersson %42 = or i1 %40, %41 6008619006SBjorn Pettersson br i1 %42, label %139, label %43 6108619006SBjorn Pettersson 6208619006SBjorn Pettersson43: ; preds = %35 6308619006SBjorn Pettersson %44 = add i16 %36, 1 6408619006SBjorn Pettersson %45 = icmp slt i16 %44, 28 6508619006SBjorn Pettersson br i1 %45, label %35, label %46 6608619006SBjorn Pettersson 6708619006SBjorn Pettersson46: ; preds = %43 68*92619956SNikita Popov %47 = load i16, ptr %3, align 1 6908619006SBjorn Pettersson br label %48 7008619006SBjorn Pettersson 7108619006SBjorn Pettersson48: ; preds = %55, %46 7208619006SBjorn Pettersson %49 = phi i16 [ %47, %46 ], [ %56, %55 ] 7308619006SBjorn Pettersson %50 = mul i16 %49, 4 7408619006SBjorn Pettersson %51 = sub i16 28, %50 7508619006SBjorn Pettersson %52 = icmp ult i16 28, %50 7608619006SBjorn Pettersson %53 = icmp ult i16 %51, 4 7708619006SBjorn Pettersson %54 = or i1 %52, %53 7808619006SBjorn Pettersson br i1 %54, label %139, label %55 7908619006SBjorn Pettersson 8008619006SBjorn Pettersson55: ; preds = %48 8108619006SBjorn Pettersson %56 = add i16 %49, 1 8208619006SBjorn Pettersson %57 = icmp slt i16 %56, 7 8308619006SBjorn Pettersson br i1 %57, label %48, label %58 8408619006SBjorn Pettersson 8508619006SBjorn Pettersson58: ; preds = %55 86*92619956SNikita Popov %59 = load i16, ptr %4, align 1 8708619006SBjorn Pettersson br label %60 8808619006SBjorn Pettersson 8908619006SBjorn Pettersson60: ; preds = %67, %58 9008619006SBjorn Pettersson %61 = phi i16 [ %59, %58 ], [ %68, %67 ] 9108619006SBjorn Pettersson %62 = sext i16 %61 to i32 9208619006SBjorn Pettersson %63 = sub i32 1, %62 9308619006SBjorn Pettersson %64 = icmp ult i32 1, %62 9408619006SBjorn Pettersson %65 = icmp ult i32 %63, 1 9508619006SBjorn Pettersson %66 = or i1 %64, %65 9608619006SBjorn Pettersson br i1 %66, label %139, label %67 9708619006SBjorn Pettersson 9808619006SBjorn Pettersson67: ; preds = %60 9908619006SBjorn Pettersson %68 = add i16 %61, 1 10008619006SBjorn Pettersson %69 = icmp slt i16 %68, 1 10108619006SBjorn Pettersson br i1 %69, label %60, label %70 10208619006SBjorn Pettersson 10308619006SBjorn Pettersson70: ; preds = %67 104*92619956SNikita Popov %71 = load i16, ptr %5, align 1 10508619006SBjorn Pettersson br label %72 10608619006SBjorn Pettersson 10708619006SBjorn Pettersson72: ; preds = %79, %70 10808619006SBjorn Pettersson %73 = phi i16 [ %71, %70 ], [ %80, %79 ] 10908619006SBjorn Pettersson %74 = sext i16 %73 to i32 11008619006SBjorn Pettersson %75 = sub i32 1, %74 11108619006SBjorn Pettersson %76 = icmp ult i32 1, %74 11208619006SBjorn Pettersson %77 = icmp ult i32 %75, 1 11308619006SBjorn Pettersson %78 = or i1 %76, %77 11408619006SBjorn Pettersson br i1 %78, label %139, label %79 11508619006SBjorn Pettersson 11608619006SBjorn Pettersson79: ; preds = %72 11708619006SBjorn Pettersson %80 = add i16 %73, 1 11808619006SBjorn Pettersson %81 = icmp slt i16 %80, 1 11908619006SBjorn Pettersson br i1 %81, label %72, label %82 12008619006SBjorn Pettersson 12108619006SBjorn Pettersson82: ; preds = %79 122*92619956SNikita Popov %83 = load i16, ptr %6, align 1 12308619006SBjorn Pettersson br label %84 12408619006SBjorn Pettersson 12508619006SBjorn Pettersson84: ; preds = %91, %82 12608619006SBjorn Pettersson %85 = phi i16 [ %83, %82 ], [ %92, %91 ] 12708619006SBjorn Pettersson %86 = sext i16 %85 to i32 12808619006SBjorn Pettersson %87 = sub i32 1, %86 12908619006SBjorn Pettersson %88 = icmp ult i32 1, %86 13008619006SBjorn Pettersson %89 = icmp ult i32 %87, 1 13108619006SBjorn Pettersson %90 = or i1 %88, %89 13208619006SBjorn Pettersson br i1 %90, label %139, label %91 13308619006SBjorn Pettersson 13408619006SBjorn Pettersson91: ; preds = %84 13508619006SBjorn Pettersson %92 = add i16 %85, 1 13608619006SBjorn Pettersson %93 = icmp slt i16 %92, 1 13708619006SBjorn Pettersson br i1 %93, label %84, label %94 13808619006SBjorn Pettersson 13908619006SBjorn Pettersson94: ; preds = %91 140*92619956SNikita Popov %95 = load i16, ptr %7, align 1 14108619006SBjorn Pettersson br label %96 14208619006SBjorn Pettersson 14308619006SBjorn Pettersson96: ; preds = %103, %94 14408619006SBjorn Pettersson %97 = phi i16 [ %95, %94 ], [ %104, %103 ] 14508619006SBjorn Pettersson %98 = sext i16 %97 to i32 14608619006SBjorn Pettersson %99 = sub i32 1, %98 14708619006SBjorn Pettersson %100 = icmp ult i32 1, %98 14808619006SBjorn Pettersson %101 = icmp ult i32 %99, 1 14908619006SBjorn Pettersson %102 = or i1 %100, %101 15008619006SBjorn Pettersson br i1 %102, label %139, label %103 15108619006SBjorn Pettersson 15208619006SBjorn Pettersson103: ; preds = %96 15308619006SBjorn Pettersson %104 = add i16 %97, 1 15408619006SBjorn Pettersson %105 = icmp slt i16 %104, 1 15508619006SBjorn Pettersson br i1 %105, label %96, label %106 15608619006SBjorn Pettersson 15708619006SBjorn Pettersson106: ; preds = %103 158*92619956SNikita Popov %107 = load i16, ptr %8, align 1 15908619006SBjorn Pettersson br label %108 16008619006SBjorn Pettersson 16108619006SBjorn Pettersson108: ; preds = %115, %106 16208619006SBjorn Pettersson %109 = phi i16 [ %107, %106 ], [ %116, %115 ] 16308619006SBjorn Pettersson %110 = mul i16 %109, 4 16408619006SBjorn Pettersson %111 = sub i16 24, %110 16508619006SBjorn Pettersson %112 = icmp ult i16 24, %110 16608619006SBjorn Pettersson %113 = icmp ult i16 %111, 4 16708619006SBjorn Pettersson %114 = or i1 %112, %113 16808619006SBjorn Pettersson br i1 %114, label %139, label %115 16908619006SBjorn Pettersson 17008619006SBjorn Pettersson115: ; preds = %108 17108619006SBjorn Pettersson %116 = add i16 %109, 1 17208619006SBjorn Pettersson %117 = icmp slt i16 %116, 6 17308619006SBjorn Pettersson br i1 %117, label %108, label %118 17408619006SBjorn Pettersson 17508619006SBjorn Pettersson118: ; preds = %115 176*92619956SNikita Popov %119 = load i16, ptr %9, align 1 17708619006SBjorn Pettersson br label %120 17808619006SBjorn Pettersson 17908619006SBjorn Pettersson120: ; preds = %128, %118 18008619006SBjorn Pettersson %121 = phi i16 [ %119, %118 ], [ %129, %128 ] 18108619006SBjorn Pettersson %122 = sext i16 %121 to i32 18208619006SBjorn Pettersson %123 = mul i32 %122, 2 18308619006SBjorn Pettersson %124 = sub i32 4, %123 18408619006SBjorn Pettersson %125 = icmp ult i32 4, %123 18508619006SBjorn Pettersson %126 = icmp ult i32 %124, 2 18608619006SBjorn Pettersson %127 = or i1 %125, %126 18708619006SBjorn Pettersson br i1 %127, label %139, label %128 18808619006SBjorn Pettersson 18908619006SBjorn Pettersson128: ; preds = %120 19008619006SBjorn Pettersson %129 = add i16 %121, 1 19108619006SBjorn Pettersson %130 = icmp slt i16 %129, 2 19208619006SBjorn Pettersson br i1 %130, label %120, label %131 19308619006SBjorn Pettersson 19408619006SBjorn Pettersson131: ; preds = %128 195*92619956SNikita Popov %132 = load i16, ptr %10, align 1 19608619006SBjorn Pettersson br label %133 19708619006SBjorn Pettersson 19808619006SBjorn Pettersson133: ; preds = %133, %131 19908619006SBjorn Pettersson %134 = phi i16 [ %132, %131 ], [ %135, %133 ] 20008619006SBjorn Pettersson %135 = add i16 %134, 1 20108619006SBjorn Pettersson %136 = icmp slt i16 %135, 6 20208619006SBjorn Pettersson br i1 %136, label %133, label %137 20308619006SBjorn Pettersson 20408619006SBjorn Pettersson137: ; preds = %133 205*92619956SNikita Popov %138 = load i16, ptr %0, align 1 20608619006SBjorn Pettersson ret i16 %138 20708619006SBjorn Pettersson 20808619006SBjorn Pettersson139: ; preds = %120, %108, %96, %84, %72, %60, %48, %35, %21, %13 20908619006SBjorn Pettersson call void @llvm.trap() #2 21008619006SBjorn Pettersson unreachable 21108619006SBjorn Pettersson} 21208619006SBjorn Pettersson 21308619006SBjorn Pettersson; Function Attrs: cold noreturn nounwind 21408619006SBjorn Petterssondeclare void @llvm.trap() #1 21508619006SBjorn Pettersson 21608619006SBjorn Petterssonattributes #0 = { nounwind } 21708619006SBjorn Petterssonattributes #1 = { cold noreturn nounwind } 21808619006SBjorn Petterssonattributes #2 = { noreturn nounwind } 219