diff --git a/bench/abc/optimized/bmcFx.ll b/bench/abc/optimized/bmcFx.ll index bdd1cce5949..6aac7c40c4a 100644 --- a/bench/abc/optimized/bmcFx.ll +++ b/bench/abc/optimized/bmcFx.ll @@ -1008,20 +1008,17 @@ Vec_IntPush.exit.i: ; preds = %Vec_IntPush.exit.si br i1 %or.cond41.i, label %._crit_edge45.i, label %.lr.ph44.preheader.i .lr.ph44.preheader.i: ; preds = %._crit_edge.i - %217 = add nsw i32 %.val37.i, -1 - %218 = add i32 %2, -1 - %umin.i = tail call i32 @llvm.umin.i32(i32 %217, i32 %218) - %219 = add nuw nsw i32 %umin.i, 1 - %wide.trip.count.i = zext nneg i32 %219 to i64 - %220 = load ptr, ptr %16, align 8, !tbaa !32 + %217 = zext i32 %2 to i64 + %218 = zext nneg i32 %.val37.i to i64 + %219 = load ptr, ptr %16, align 8, !tbaa !32 br label %.lr.ph44.i .lr.ph44.i: ; preds = %229, %.lr.ph44.preheader.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph44.preheader.i ], [ %indvars.iv.next.i, %229 ] + %indvars.iv.i = phi i64 [ 0, %.lr.ph44.preheader.i ], [ %indvars.iv.next.i, %228 ] %221 = getelementptr inbounds nuw i32, ptr %214, i64 %indvars.iv.i %222 = load i32, ptr %221, align 4, !tbaa !11 %223 = sext i32 %222 to i64 - %224 = getelementptr inbounds %struct.Tab_Obj_t_, ptr %220, i64 %223, i32 2 + %224 = getelementptr inbounds %struct.Tab_Obj_t_, ptr %219, i64 %223, i32 2 %225 = load i64, ptr %224, align 4 %226 = trunc i64 %225 to i32 %227 = and i32 %226, 131071 @@ -1055,8 +1052,10 @@ Vec_IntPush.exit.i: ; preds = %Vec_IntPush.exit.si %252 = and i32 %251, 32767 tail call fastcc void @Vec_IntPushTwo(ptr noundef nonnull %168, i32 noundef %249, i32 noundef %252) %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %exitcond.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i - br i1 %exitcond.i, label %._crit_edge45.i, label %.lr.ph44.i, !llvm.loop !41 + %exitcond.i = icmp samesign uge i64 %indvars.iv.next.i, %218 + %253 = icmp eq i64 %indvars.iv.next.i, %217 + %or.cond.i = or i1 %252, %253 + br i1 %or.cond.i, label %._crit_edge45.i, label %.lr.ph44.i, !llvm.loop !41 ._crit_edge45.i: ; preds = %229, %.lr.ph44.i, %._crit_edge.i %.not.i39.i = icmp eq ptr %.val38.i, null @@ -3027,9 +3026,6 @@ declare i32 @llvm.smax.i32(i32, i32) #15 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #15 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umin.i32(i32, i32) #15 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare range(i32 -1, 2) i32 @llvm.scmp.i32.i32(i32, i32) #15 diff --git a/bench/abc/optimized/wlcAbc.ll b/bench/abc/optimized/wlcAbc.ll index 48dc0fa2760..2dcc0b78d16 100644 --- a/bench/abc/optimized/wlcAbc.ll +++ b/bench/abc/optimized/wlcAbc.ll @@ -47,8 +47,8 @@ define void @Wlc_NtkPrintInputInfo(ptr noundef %0) local_unnamed_addr #0 { br label %51 12: ; preds = %.lr.ph, %42 - %indvars.iv87 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next88, %42 ] - %.05680 = phi i32 [ 0, %.lr.ph ], [ %spec.select, %42 ] + %indvars.iv87 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next88, %43 ] + %.05680 = phi i32 [ 0, %.lr.ph ], [ %spec.select, %43 ] %.val65 = load ptr, ptr %5, align 8, !tbaa !10 %.val66 = load ptr, ptr %6, align 8, !tbaa !11 %13 = getelementptr inbounds nuw i32, ptr %.val65, i64 %indvars.iv87 @@ -59,32 +59,31 @@ define void @Wlc_NtkPrintInputInfo(ptr noundef %0) local_unnamed_addr #0 { %.val67 = load i32, ptr %17, align 8, !tbaa !21 %18 = getelementptr i8, ptr %16, i64 12 %.val68 = load i32, ptr %18, align 4, !tbaa !23 - %19 = sub i32 %.val67, %.val68 + %19 = sub nsw i32 %.val67, %.val68 + %20 = tail call i32 @llvm.abs.i32(i32 %19, i1 true) %. = tail call i32 @llvm.smin.i32(i32 %.val67, i32 %.val68) %20 = ptrtoint ptr %16 to i64 %21 = zext nneg i32 %.05680 to i64 - %smax = tail call i32 @llvm.abs.i32(i32 %19, i1 false) - %22 = add nuw i32 %smax, 1 - %wide.trip.count = zext i32 %22 to i64 - br label %23 - -23: ; preds = %12, %32 - %indvars.iv = phi i64 [ 0, %12 ], [ %indvars.iv.next, %32 ] - %24 = load i16, ptr %16, align 8 - %25 = and i16 %24, 63 - %.not = icmp eq i16 %25, 3 - br i1 %.not, label %26, label %32 - -26: ; preds = %23 - %27 = load ptr, ptr %7, align 8, !tbaa !24 - %28 = getelementptr inbounds nuw i8, ptr %27, i64 %indvars.iv - %29 = getelementptr inbounds nuw i8, ptr %28, i64 %21 - %30 = load i8, ptr %29, align 1, !tbaa !25 - %31 = sext i8 %30 to i32 - br label %32 - -32: ; preds = %23, %26 - %33 = phi i32 [ %31, %26 ], [ 105, %23 ] + %23 = zext nneg i32 %20 to i64 + br label %24 + +24:; preds = %12, %33 + %indvars.iv = phi i64 [ 0, %12 ], [ %indvars.iv.next, %33 ] + %25 = load i16, ptr %16, align 8 + %26 = and i16 %25, 63 + %.not = icmp eq i16 %26, 3 + br i1 %.not, label %27, label %33 + +27: ; preds = %24 + %28 = load ptr, ptr %7, align 8, !tbaa !24 + %29 = getelementptr inbounds nuw i8, ptr %28, i64 %indvars.iv + %30 = getelementptr inbounds nuw i8, ptr %29, i64 %22 + %31 = load i8, ptr %30, align 1, !tbaa !25 + %32 = sext i8 %31 to i32 + br label %33 + +33:; preds = %24, %27 + %34 = phi i32 [ %32, %27 ], [ 105, %24 ] %.val71 = load ptr, ptr %6, align 8, !tbaa !11 %34 = ptrtoint ptr %.val71 to i64 %35 = sub i64 %20, %34 @@ -93,14 +92,13 @@ define void @Wlc_NtkPrintInputInfo(ptr noundef %0) local_unnamed_addr #0 { %38 = tail call ptr @Wlc_ObjName(ptr noundef nonnull %0, i32 noundef %37) #11 %39 = trunc i64 %indvars.iv to i32 %40 = add i32 %., %39 - %41 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2, ptr noundef nonnull @.str.2, ptr noundef %38, i32 noundef %40, i32 noundef %33) #11 + %41 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2, ptr noundef nonnull @.str.2, ptr noundef %38, i32 noundef %40, i32 noundef %34) #11 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %42, label %23, !llvm.loop !26 + %exitcond.not = icmp samesign ult i64 %indvars.iv, %23 + br i1 %exitcond.not, label %24, label %43, !llvm.loop !26 -42: ; preds = %32 - %43 = tail call i32 @llvm.abs.i32(i32 %19, i1 true) - %44 = add nuw nsw i32 %43, 1 +42: ; preds = %33 + %44 = add nuw nsw i32 %20, 1 %45 = load i16, ptr %16, align 8 %46 = and i16 %45, 63 %47 = icmp eq i16 %46, 3 @@ -206,14 +204,12 @@ define void @Wlc_NtkPrintInvStats(ptr noundef %0, ptr noundef readonly captures( %.val44 = load i32, ptr %17, align 8, !tbaa !21 %18 = getelementptr i8, ptr %13, i64 12 %.val45 = load i32, ptr %18, align 4, !tbaa !23 - %19 = sub i32 %.val44, %.val45 + %19 = sub nsw i32 %.val44, %.val45 %20 = tail call i32 @llvm.abs.i32(i32 %19, i1 true) %21 = add nuw nsw i32 %20, 1 %.val40 = load ptr, ptr %8, align 8, !tbaa !10 %22 = zext nneg i32 %.053 to i64 - %smax = tail call i32 @llvm.abs.i32(i32 %19, i1 false) - %23 = add nuw i32 %smax, 1 - %wide.trip.count = zext i32 %23 to i64 + %23 = zext nneg i32 %20 to i64 %invariant.gep = getelementptr inbounds nuw i32, ptr %.val40, i64 %22 br label %24 @@ -226,8 +222,8 @@ define void @Wlc_NtkPrintInvStats(ptr noundef %0, ptr noundef readonly captures( 26: ; preds = %24 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %27, label %24, !llvm.loop !31 + %exitcond.not = icmp samesign ult i64 %indvars.iv, %23 + br i1 %exitcond.not, label %24, label %27, !llvm.loop !31 27: ; preds = %24, %26 %.034.lcssa.in = phi i64 [ %indvars.iv, %24 ], [ %indvars.iv.next, %26 ] @@ -262,8 +258,8 @@ define void @Wlc_NtkPrintInvStats(ptr noundef %0, ptr noundef readonly captures( 44: ; preds = %36, %41 %indvars.iv.next56 = add nuw nsw i64 %indvars.iv55, 1 - %exitcond61.not = icmp eq i64 %indvars.iv.next56, %wide.trip.count - br i1 %exitcond61.not, label %45, label %36, !llvm.loop !32 + %exitcond61.not = icmp samesign ult i64 %indvars.iv55, %23 + br i1 %exitcond61.not, label %35, label %45, !llvm.loop !32 45: ; preds = %44 %putchar = tail call i32 @putchar(i32 10) @@ -426,14 +422,12 @@ define ptr @Wlc_NtkGetInv(ptr noundef %0, ptr noundef %1, ptr noundef readonly c %.val105 = load i32, ptr %66, align 8, !tbaa !21 %67 = getelementptr i8, ptr %62, i64 12 %.val106 = load i32, ptr %67, align 4, !tbaa !23 - %68 = sub i32 %.val105, %.val106 + %68 = sub nsw i32 %.val105, %.val106 %69 = call i32 @llvm.abs.i32(i32 %68, i1 true) %70 = add nuw nsw i32 %69, 1 %.val101 = load ptr, ptr %16, align 8, !tbaa !10 %71 = zext nneg i32 %.085121 to i64 - %smax = call i32 @llvm.abs.i32(i32 %68, i1 false) - %72 = add nuw i32 %smax, 1 - %wide.trip.count = zext i32 %72 to i64 + %72 = zext nneg i32 %69 to i64 %invariant.gep = getelementptr inbounds nuw i32, ptr %.val101, i64 %71 br label %73 @@ -446,8 +440,8 @@ define ptr @Wlc_NtkGetInv(ptr noundef %0, ptr noundef %1, ptr noundef readonly c 75: ; preds = %73 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %76, label %73, !llvm.loop !55 + %exitcond.not = icmp samesign ult i64 %indvars.iv, %72 + br i1 %exitcond.not, label %73, label %76, !llvm.loop !55 76: ; preds = %73, %75 %.087.lcssa.in = phi i64 [ %indvars.iv, %73 ], [ %indvars.iv.next, %75 ] @@ -487,8 +481,8 @@ define ptr @Wlc_NtkGetInv(ptr noundef %0, ptr noundef %1, ptr noundef readonly c 96: ; preds = %81, %86 %indvars.iv.next134 = add nuw nsw i64 %indvars.iv133, 1 - %exitcond139.not = icmp eq i64 %indvars.iv.next134, %wide.trip.count - br i1 %exitcond139.not, label %97, label %81, !llvm.loop !56 + %exitcond139.not = icmp samesign ult i64 %indvars.iv133, %72 + br i1 %exitcond139.not, label %81, label %97, !llvm.loop !56 97: ; preds = %96 %98 = add nuw nsw i32 %70, %.085121 diff --git a/bench/abc/optimized/wlnWlc.ll b/bench/abc/optimized/wlnWlc.ll index 26e39f55717..01673b81ed0 100644 --- a/bench/abc/optimized/wlnWlc.ll +++ b/bench/abc/optimized/wlnWlc.ll @@ -378,13 +378,11 @@ Wln_NtkCleanNameId.exit: ; preds = %Vec_IntGrow.exit.i. %.val269 = load i32, ptr %138, align 8, !tbaa !38 %139 = getelementptr i8, ptr %134, i64 12 %.val270 = load i32, ptr %139, align 4, !tbaa !40 - %140 = sub i32 %.val269, %.val270 + %140 = sub nsw i32 %.val269, %.val270 %141 = call i32 @llvm.abs.i32(i32 %140, i1 true) %142 = load ptr, ptr %91, align 8, !tbaa !42 %143 = sext i32 %.0220391 to i64 - %smax = call i32 @llvm.abs.i32(i32 %140, i1 false) - %144 = add nuw i32 %smax, 1 - %wide.trip.count = zext i32 %144 to i64 + %144 = zext nneg i32 %141 to i64 %invariant.gep = getelementptr i8, ptr %142, i64 %143 br label %145 @@ -397,8 +395,8 @@ Wln_NtkCleanNameId.exit: ; preds = %Vec_IntGrow.exit.i. 148: ; preds = %145 %indvars.iv.next423 = add nuw nsw i64 %indvars.iv422, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next423, %wide.trip.count - br i1 %exitcond.not, label %149, label %145, !llvm.loop !43 + %exitcond.not = icmp samesign ult i64 %indvars.iv422, %144 + br i1 %exitcond.not, label %145, label %149, !llvm.loop !43 149: ; preds = %145, %148 %.0219.lcssa.in = phi i64 [ %indvars.iv422, %145 ], [ %indvars.iv.next423, %148 ] diff --git a/bench/arrow/optimized/UriParse.ll b/bench/arrow/optimized/UriParse.ll index cffa6290410..ca7baa8283c 100644 --- a/bench/arrow/optimized/UriParse.ll +++ b/bench/arrow/optimized/UriParse.ll @@ -5183,7 +5183,7 @@ define internal fastcc ptr @uriParseIpFutureA(ptr noundef nonnull captures(none) 17: ; preds = %10 %18 = load i8, ptr %11, align 1, !tbaa !11 - switch i8 %18, label %49 [ + switch i8 %18, label %48 [ i8 48, label %19 i8 49, label %19 i8 50, label %19 @@ -5282,8 +5282,6 @@ uriParseHexZeroA.exit.thread: ; preds = %tailrecurse.i, %19, br i1 %.not21.i, label %.lr.ph.preheader.i, label %uriParseIpFutLoopA.exit .lr.ph.preheader.i: ; preds = %33 - %37 = ptrtoint ptr %2 to i64 - %scevgep.i = getelementptr i8, ptr inttoptr (i64 -1 to ptr), i64 %37 %.pre.i = load i8, ptr %36, align 1, !tbaa !11 br label %.lr.ph.i52 @@ -5373,12 +5371,12 @@ uriParseHexZeroA.exit.thread: ; preds = %tailrecurse.i, %19, 39: ; preds = %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52, %.lr.ph.i52 %40 = getelementptr inbounds nuw i8, ptr %.tr1622.i, i64 1 - %exitcond.not.i53 = icmp eq ptr %.tr1622.i, %scevgep.i - br i1 %exitcond.not.i53, label %46, label %41 + %exitcond.not.i53 = icmp ult ptr %39, %2 + br i1 %exitcond.not.i53, label %40, label %45 41: ; preds = %39 %42 = load i8, ptr %40, align 1, !tbaa !11 - switch i8 %42, label %46 [ + switch i8 %42, label %45 [ i8 33, label %.lr.ph.i52.backedge i8 36, label %.lr.ph.i52.backedge i8 38, label %.lr.ph.i52.backedge @@ -5472,7 +5470,7 @@ uriParseIpFutLoopA.exit: ; preds = %.lr.ph.i52, %33 br label %54 46: ; preds = %41, %39 - %.0.i51.ph = phi ptr [ %2, %39 ], [ %40, %41 ] + %.0.i51.ph = phi ptr [ %2, %38 ], [ %40, %40 ] %47 = getelementptr inbounds nuw i8, ptr %28, i64 40 store ptr %.0.i51.ph, ptr %47, align 8, !tbaa !40 %48 = getelementptr inbounds nuw i8, ptr %28, i64 72 @@ -5489,7 +5487,7 @@ uriParseIpFutLoopA.exit: ; preds = %.lr.ph.i52, %33 br label %54 54: ; preds = %uriParseIpFutLoopA.exit, %uriParseHexZeroA.exit.thread, %29, %46, %49, %12, %5 - %.0 = phi ptr [ null, %5 ], [ null, %12 ], [ null, %49 ], [ null, %uriParseHexZeroA.exit.thread ], [ null, %29 ], [ %.0.i51.ph, %46 ], [ null, %uriParseIpFutLoopA.exit ] + %.0 = phi ptr [ null, %5 ], [ null, %12 ], [ null, %48 ], [ null, %uriParseHexZeroA.exit.thread ], [ null, %29 ], [ %.0.i51.ph, %45 ], [ null, %uriParseIpFutLoopA.exit ] ret ptr %.0 } diff --git a/bench/boost/optimized/args_cmd.ll b/bench/boost/optimized/args_cmd.ll index 924e5ccad0f..fb7fd5a84c2 100644 --- a/bench/boost/optimized/args_cmd.ll +++ b/bench/boost/optimized/args_cmd.ll @@ -146958,16 +146958,12 @@ _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignIN9__gnu_cxx17__norm br i1 %.not2835.i.i.i, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i, label %.lr.ph.preheader.i.i.i .lr.ph.preheader.i.i.i: ; preds = %_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignIN9__gnu_cxx17__normal_iteratorIPKcS4_EEvEERS4_T_SC_.exit, %.critedge15.i.i.i - %indvars.iv.in = phi i64 [ %indvars.iv, %.critedge15.i.i.i ], [ %29, %_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignIN9__gnu_cxx17__normal_iteratorIPKcS4_EEvEERS4_T_SC_.exit ] %.sroa.018.036.i.i.i = phi ptr [ %37, %.critedge15.i.i.i ], [ %28, %_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignIN9__gnu_cxx17__normal_iteratorIPKcS4_EEvEERS4_T_SC_.exit ] - %indvars.iv = add i64 %indvars.iv.in, -1 - %.not = icmp eq i64 %indvars.iv, 0 - %31 = select i1 %.not, i64 1, i64 2 br label %.lr.ph.i.i.i .lr.ph.i.i.i: ; preds = %35, %.lr.ph.preheader.i.i.i - %.01230.i.i.i.idx = phi i64 [ %.01230.i.i.i.add, %35 ], [ 0, %.lr.ph.preheader.i.i.i ] - %.sroa.0.029.i.i.i = phi ptr [ %36, %35 ], [ %.sroa.018.036.i.i.i, %.lr.ph.preheader.i.i.i ] + %.01230.i.i.i.idx = phi i64 [ %.01230.i.i.i.add, %34 ], [ 0, %.lr.ph.preheader.i.i.i ] + %.sroa.0.029.i.i.i = phi ptr [ %36, %34 ], [ %.sroa.018.036.i.i.i, %.lr.ph.preheader.i.i.i ] %.01230.i.i.i.ptr.ptr = getelementptr inbounds nuw i8, ptr @.str.780, i64 %.01230.i.i.i.idx %32 = load i8, ptr %.sroa.0.029.i.i.i, align 1, !tbaa !24 %33 = load i8, ptr %.01230.i.i.i.ptr.ptr, align 1, !tbaa !24 @@ -146977,12 +146973,14 @@ _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignIN9__gnu_cxx17__norm 35: ; preds = %.lr.ph.i.i.i %36 = getelementptr inbounds nuw i8, ptr %.sroa.0.029.i.i.i, i64 1 %.01230.i.i.i.add = add nuw nsw i64 %.01230.i.i.i.idx, 1 - %exitcond = icmp eq i64 %.01230.i.i.i.add, %31 - br i1 %exitcond, label %.critedge.i.i.i, label %.lr.ph.i.i.i, !llvm.loop !2554 + %exitcond = icmp eq ptr %35, %30 + %.not.i.i.i = icmp eq i64 %.01230.i.i.i.add, 2 + %or.cond.i.i.i = select i1 %36, i1 true, i1 %.not.i.i.i + br i1 %or.cond.i.i.i, label %.critedge.i.i.i, label %.lr.ph.i.i.i, !llvm.loop !2554 .critedge.i.i.i: ; preds = %35, %.lr.ph.i.i.i - %.sroa.0.0.lcssa.ph.i.i.i = phi ptr [ %.sroa.0.029.i.i.i, %.lr.ph.i.i.i ], [ %36, %35 ] - %.012.lcssa.ph.i.i.i.idx = phi i64 [ %.01230.i.i.i.idx, %.lr.ph.i.i.i ], [ %31, %35 ] + %.sroa.0.0.lcssa.ph.i.i.i = phi ptr [ %.sroa.0.029.i.i.i, %.lr.ph.i.i.i ], [ %36, %34 ] + %.012.lcssa.ph.i.i.i.idx = phi i64 [ %.01230.i.i.i.idx, %.lr.ph.i.i.i ], [ %.01230.i.i.i.add, %34 ] %.not13.i.i.i = icmp eq i64 %.012.lcssa.ph.i.i.i.idx, 2 br i1 %.not13.i.i.i, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i, label %.critedge15.i.i.i diff --git a/bench/bullet3/optimized/btSoftBodyHelpers.ll b/bench/bullet3/optimized/btSoftBodyHelpers.ll index aec69e976a1..d5f2331d988 100644 --- a/bench/bullet3/optimized/btSoftBodyHelpers.ll +++ b/bench/bullet3/optimized/btSoftBodyHelpers.ll @@ -5428,12 +5428,8 @@ define dso_local noundef ptr @_ZN17btSoftBodyHelpers17CreateFromTriMeshER19btSof store ptr %29, ptr %20, align 8, !tbaa !37 store i32 %.098.lcssa, ptr %22, align 8, !tbaa !39 store i32 %.098.lcssa, ptr %21, align 4, !tbaa !38 - %30 = mul i32 %.098.lcssa, 3 - %smax122 = tail call i32 @llvm.smax.i32(i32 %30, i32 3) - %31 = add nsw i32 %smax122, -1 - %32 = udiv i32 %31, 3 - %33 = add nuw nsw i32 %32, 1 - %wide.trip.count123 = zext nneg i32 %33 to i64 + %30 = mul nsw i32 %.098.lcssa, 3 + %31 = zext nneg i32 %30 to i64 br label %.lr.ph107 .lr.ph107: ; preds = %.lr.ph.i60, %.lr.ph107 @@ -5442,21 +5438,21 @@ define dso_local noundef ptr @_ZN17btSoftBodyHelpers17CreateFromTriMeshER19btSof %34 = getelementptr inbounds nuw float, ptr %1, i64 %indvars.iv115 %35 = getelementptr inbounds nuw i8, ptr %34, i64 4 %36 = getelementptr inbounds nuw i8, ptr %34, i64 8 + %35 = load float, ptr %32, align 4, !tbaa !4 + %36 = load float, ptr %33, align 4, !tbaa !4 %37 = load float, ptr %34, align 4, !tbaa !4 - %38 = load float, ptr %35, align 4, !tbaa !4 - %39 = load float, ptr %36, align 4, !tbaa !4 - %40 = getelementptr inbounds nuw %class.btVector3, ptr %29, i64 %indvars.iv117 - store float %37, ptr %40, align 4 - %.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %40, i64 4 - store float %38, ptr %.sroa.4.0..sroa_idx, align 4 - %.sroa.5.0..sroa_idx = getelementptr inbounds nuw i8, ptr %40, i64 8 - store float %39, ptr %.sroa.5.0..sroa_idx, align 4 - %.sroa.6.0..sroa_idx = getelementptr inbounds nuw i8, ptr %40, i64 12 + %38 = getelementptr inbounds nuw %class.btVector3, ptr %29, i64 %indvars.iv117 + store float %35, ptr %38, align 4 + %40 = getelementptr inbounds nuw i8, ptr %38, i64 4 + store float %36, ptr %40, align 4 + %.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %38, i64 8 + store float %37, ptr %.sroa.4.0..sroa_idx, align 4 + %.sroa.5.0..sroa_idx = getelementptr inbounds nuw i8, ptr %38, i64 12 store float 0.000000e+00, ptr %.sroa.6.0..sroa_idx, align 4, !tbaa !35 %indvars.iv.next118 = add nuw nsw i64 %indvars.iv117, 1 %indvars.iv.next116 = add nuw nsw i64 %indvars.iv115, 3 - %exitcond124.not = icmp eq i64 %indvars.iv.next118, %wide.trip.count123 - br i1 %exitcond124.not, label %._crit_edge108, label %.lr.ph107, !llvm.loop !273 + %exitcond124.not = icmp samesign ult i64 %indvars.iv.next116, %31 + br i1 %exitcond124.not, label %.lr.ph107, label %._crit_edge108, !llvm.loop !273 41: ; preds = %14 %42 = landingpad { ptr, i32 } @@ -5487,7 +5483,7 @@ _ZN17btCollisionObjectnwEm.exit: ; preds = %._crit_edge108 br label %49 49: ; preds = %.lr.ph112, %84 - %indvars.iv129 = phi i64 [ 0, %.lr.ph112 ], [ %indvars.iv.next130, %84 ] + %indvars.iv129 = phi i64 [ 0, %.lr.ph112 ], [ %indvars.iv.next130, %83 ] call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #27 %50 = getelementptr inbounds nuw i32, ptr %2, i64 %indvars.iv129 %51 = load i32, ptr %50, align 4, !tbaa !61 @@ -5502,7 +5498,7 @@ _ZN17btCollisionObjectnwEm.exit: ; preds = %._crit_edge108 56: ; preds = %83 invoke void @_ZN10btSoftBody10appendFaceEiiiPNS_8MaterialE(ptr noundef nonnull align 8 dereferenceable(2064) %45, i32 noundef %51, i32 noundef %53, i32 noundef %55, ptr noundef null) - to label %84 unwind label %87 + to label %83 unwind label %87 57: ; preds = %._crit_edge108, %90 %58 = landingpad { ptr, i32 } @@ -5523,8 +5519,8 @@ _ZN17btCollisionObjectnwEm.exit: ; preds = %._crit_edge108 unreachable 64: ; preds = %49, %83 - %indvars.iv125 = phi i64 [ 0, %49 ], [ %indvars.iv.next126, %83 ] - %.044109 = phi i64 [ 2, %49 ], [ %indvars.iv125, %83 ] + %indvars.iv125 = phi i64 [ 0, %48 ], [ %indvars.iv.next126, %82 ] + %.044109 = phi i64 [ 2, %48 ], [ %indvars.iv125, %82 ] %65 = getelementptr inbounds nuw [3 x i32], ptr %8, i64 0, i64 %indvars.iv125 %66 = load i32, ptr %65, align 4, !tbaa !61 %67 = mul nsw i32 %66, %.098.lcssa @@ -5546,7 +5542,7 @@ _ZN17btCollisionObjectnwEm.exit: ; preds = %._crit_edge108 %80 = getelementptr inbounds i8, ptr %.pre.pre, i64 %79 store i8 1, ptr %80, align 1, !tbaa !272 invoke void @_ZN10btSoftBody10appendLinkEiiPNS_8MaterialEb(ptr noundef nonnull align 8 dereferenceable(2064) %45, i32 noundef %70, i32 noundef %66, ptr noundef null, i1 noundef zeroext false) - to label %83 unwind label %81 + to label %82 unwind label %81 81: ; preds = %76 %82 = landingpad { ptr, i32 } @@ -5571,7 +5567,7 @@ _ZN17btCollisionObjectnwEm.exit: ; preds = %._crit_edge108 br label %89 89: ; preds = %87, %81 - %.pn = phi { ptr, i32 } [ %82, %81 ], [ %88, %87 ] + %.pn = phi { ptr, i32 } [ %82, %80 ], [ %88, %86 ] call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #27 br label %_ZN17btCollisionObjectdlEPv.exit @@ -5580,7 +5576,7 @@ _ZN17btCollisionObjectnwEm.exit: ; preds = %._crit_edge108 90: ; preds = %._crit_edge113 invoke void @_ZN10btSoftBody20randomizeConstraintsEv(ptr noundef nonnull align 8 dereferenceable(2064) %45) - to label %91 unwind label %57 + to label %90 unwind label %57 91: ; preds = %90, %._crit_edge113 %92 = load ptr, ptr %20, align 8, !tbaa !37 @@ -5626,7 +5622,7 @@ _ZN20btAlignedObjectArrayIbED2Ev.exit: ; preds = %_ZN20btAlignedObjec ret ptr %45 _ZN17btCollisionObjectdlEPv.exit: ; preds = %59, %57, %89, %43, %41 - %.pn.pn.pn = phi { ptr, i32 } [ %44, %43 ], [ %42, %41 ], [ %.pn, %89 ], [ %58, %57 ], [ %60, %59 ] + %.pn.pn.pn = phi { ptr, i32 } [ %44, %42 ], [ %42, %40 ], [ %.pn, %88 ], [ %58, %56 ], [ %60, %58 ] call void @_ZN20btAlignedObjectArrayI9btVector3ED2Ev(ptr noundef nonnull align 8 dereferenceable(25) %7) #27 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #27 call void @_ZN20btAlignedObjectArrayIbED2Ev(ptr noundef nonnull align 8 dereferenceable(25) %6) #27 diff --git a/bench/cmake/optimized/cmHexFileConverter.ll b/bench/cmake/optimized/cmHexFileConverter.ll index b9af46b5a8c..2832228f896 100644 --- a/bench/cmake/optimized/cmHexFileConverter.ll +++ b/bench/cmake/optimized/cmHexFileConverter.ll @@ -230,7 +230,7 @@ _ZL11ChompStrlenPKc.exit.i.us: ; preds = %46, %41 50: ; preds = %_ZL11ChompStrlenPKc.exit.i.us %51 = load i8, ptr %28, align 1, !tbaa !4 - switch i8 %51, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge [ + switch i8 %51, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split53.us_crit_edge [ i8 53, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread72 i8 55, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread72 i8 56, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread72 @@ -257,35 +257,31 @@ _ZL11ChompStrlenPKc.exit.i.us: ; preds = %46, %41 .lr.ph.i.i.us: ; preds = %54 %57 = zext nneg i32 %.0.i.us to i64 - %58 = xor i32 %.0.i.us, -1 - %59 = add nsw i32 %55, %58 - %60 = lshr i32 %59, 1 - %61 = add nuw i32 %60, 1 - %wide.trip.count.i.i.us = zext i32 %61 to i64 - br label %62 - -62: ; preds = %68, %.lr.ph.i.i.us - %indvars.iv30.i.i.us = phi i64 [ 0, %.lr.ph.i.i.us ], [ %indvars.iv.next31.i.i.us, %68 ] - %indvars.iv.i.i.us = phi i64 [ %57, %.lr.ph.i.i.us ], [ %indvars.iv.next.i.i.us, %68 ] - %63 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.i.i.us - %64 = load i8, ptr %63, align 2, !tbaa !4 - store i8 %64, ptr %6, align 1, !tbaa !4 - %65 = getelementptr inbounds nuw i8, ptr %63, i64 1 - %66 = load i8, ptr %65, align 1, !tbaa !4 - store i8 %66, ptr %30, align 1, !tbaa !4 + %58 = zext nneg i32 %55 to i64 + br label %59 + +59:; preds = %65, %.lr.ph.i.i.us + %indvars.iv30.i.i.us = phi i64 [ 0, %.lr.ph.i.i.us ], [ %indvars.iv.next31.i.i.us, %65 ] + %indvars.iv.i.i.us = phi i64 [ %57, %.lr.ph.i.i.us ], [ %indvars.iv.next.i.i.us, %65 ] + %60 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.i.i.us + %61 = load i8, ptr %60, align 2, !tbaa !4 + store i8 %61, ptr %6, align 1, !tbaa !4 + %62 = getelementptr inbounds nuw i8, ptr %60, i64 1 + %63 = load i8, ptr %62, align 1, !tbaa !4 + store i8 %63, ptr %30, align 1, !tbaa !4 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #9 store i32 0, ptr %8, align 4, !tbaa !10 %67 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %6, ptr noundef nonnull @.str.2, ptr noundef nonnull %8) #9 %.not.i.i.us = icmp eq i32 %67, 1 br i1 %.not.i.i.us, label %68, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread74 -_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread74: ; preds = %62 +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread74: ; preds = %59 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9 call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #9 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %6) #9 br label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge -68: ; preds = %62 +68: ; preds = %59 %69 = load i32, ptr %8, align 4, !tbaa !10 %70 = trunc i32 %69 to i8 %71 = getelementptr inbounds nuw [256 x i8], ptr %7, i64 0, i64 %indvars.iv30.i.i.us @@ -293,16 +289,20 @@ _ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread74: ; preds = %62 %indvars.iv.next31.i.i.us = add nuw nsw i64 %indvars.iv30.i.i.us, 1 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9 %indvars.iv.next.i.i.us = add nuw nsw i64 %indvars.iv.i.i.us, 2 - %exitcond.not.i.i.us = icmp eq i64 %indvars.iv.next31.i.i.us, %wide.trip.count.i.i.us - br i1 %exitcond.not.i.i.us, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us, label %62, !llvm.loop !12 + %exitcond.not.i.i.us = icmp samesign ult i64 %indvars.iv.next.i.i.us, %58 + br i1 %exitcond.not.i.i.us, label %59, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us, !llvm.loop !12 -_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us: ; preds = %68, %54 - %.016.lcssa.i.i.us = phi i64 [ 0, %54 ], [ %wide.trip.count.i.i.us, %68 ] - %72 = call i64 @fwrite(ptr noundef nonnull %7, i64 noundef 1, i64 noundef %.016.lcssa.i.i.us, ptr noundef nonnull %14) - %73 = icmp eq i64 %72, %.016.lcssa.i.i.us +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us: ; preds = %65 + %70 = and i64 %indvars.iv.next31.i.i.us, 4294967295 + br label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us + +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us: ; preds = %54, %._crit_edge.loopexit.i.i.us + %.016.lcssa.i.i.us = phi i64 [ 0, %54 ], [ %70, %._crit_edge.loopexit.i.i.us ] + %71 = call i64 @fwrite(ptr noundef nonnull %7, i64 noundef 1, i64 noundef %.016.lcssa.i.i.us, ptr noundef nonnull %14) + %72 = icmp eq i64 %71, %.016.lcssa.i.i.us call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #9 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %6) #9 - br i1 %73, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread72, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge, !llvm.loop !9 + br i1 %72, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread72, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge, !llvm.loop !9 _ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge: ; preds = %50, %_ZL11ChompStrlenPKc.exit.i.us, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread74 br label %.split54.us, !llvm.loop !9 @@ -310,7 +310,7 @@ _ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge: ; preds .split.us55: ; preds = %23 br i1 %.not.us62, label %.split54.us, label %.lr.ph65 -_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78: ; preds = %94, %94, %94, %94, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58 +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78: ; preds = %94, %94, %94, %94, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57 %74 = call ptr @fgets(ptr noundef nonnull %9, i32 noundef 1024, ptr noundef nonnull %13) %.not.us57 = icmp eq ptr %74, null br i1 %.not.us57, label %.split54.us, label %.lr.ph65, !llvm.loop !9 @@ -322,7 +322,7 @@ _ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78: ; preds = %94, %94 %78 = and i64 %77, 4294967295 %79 = getelementptr inbounds nuw i8, ptr %9, i64 %78 %80 = load i8, ptr %79, align 1, !tbaa !4 - switch i8 %80, label %83 [ + switch i8 %80, label %82 [ i8 10, label %81 i8 13, label %81 ] @@ -332,7 +332,7 @@ _ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78: ; preds = %94, %94 br label %83 83: ; preds = %81, %.lr.ph65 - %.0.i.i27.us = phi i32 [ %82, %81 ], [ %76, %.lr.ph65 ] + %.0.i.i27.us = phi i32 [ %82, %80 ], [ %76, %.lr.ph64 ] %84 = add i32 %.0.i.i27.us, -1 %85 = zext i32 %84 to i64 %86 = getelementptr inbounds nuw i8, ptr %9, i64 %85 @@ -346,7 +346,7 @@ _ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78: ; preds = %94, %94 br label %_ZL11ChompStrlenPKc.exit.i28.us _ZL11ChompStrlenPKc.exit.i28.us: ; preds = %88, %83 - %.1.i.i29.us = phi i32 [ %84, %88 ], [ %.0.i.i27.us, %83 ] + %.1.i.i29.us = phi i32 [ %84, %87 ], [ %.0.i.i27.us, %82 ] %89 = add i32 %.1.i.i29.us, -11 %or.cond.i30.us = icmp ult i32 %89, 513 %90 = and i32 %.1.i.i29.us, 1 @@ -362,7 +362,7 @@ _ZL11ChompStrlenPKc.exit.i28.us: ; preds = %88, %83 94: ; preds = %_ZL11ChompStrlenPKc.exit.i28.us %95 = load i8, ptr %25, align 8, !tbaa !4 - switch i8 %95, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge [ + switch i8 %95, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57..split53.split.us_crit_edge [ i8 48, label %96 i8 49, label %96 i8 50, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78 @@ -377,66 +377,71 @@ _ZL11ChompStrlenPKc.exit.i28.us: ; preds = %88, %83 call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #9 %97 = add nsw i32 %.1.i.i29.us, -12 %98 = icmp ult i32 %97, -10 - br i1 %98, label %.lr.ph.i.i38.us, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58 + br i1 %98, label %.lr.ph.i.i38.us, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57 .lr.ph.i.i38.us: ; preds = %96 - %99 = lshr i32 %97, 1 - %100 = add nuw nsw i32 %99, 1 - %wide.trip.count.i.i39.us = zext nneg i32 %100 to i64 - br label %101 - -101: ; preds = %107, %.lr.ph.i.i38.us - %indvars.iv30.i.i40.us = phi i64 [ 0, %.lr.ph.i.i38.us ], [ %indvars.iv.next31.i.i44.us, %107 ] - %indvars.iv.i.i41.us = phi i64 [ 9, %.lr.ph.i.i38.us ], [ %indvars.iv.next.i.i45.us, %107 ] - %102 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.i.i41.us - %103 = load i8, ptr %102, align 1, !tbaa !4 - store i8 %103, ptr %3, align 1, !tbaa !4 - %104 = getelementptr inbounds nuw i8, ptr %102, i64 1 - %105 = load i8, ptr %104, align 1, !tbaa !4 - store i8 %105, ptr %27, align 1, !tbaa !4 + %98 = zext nneg i32 %.1.i.i29.us to i64 + %100 = add nsw i64 %98, -12 + %100 = lshr i64 %99, 1 + %101 = add nuw nsw i64 %100, 1 + br label %102 + +102:; preds = %108, %.lr.ph.i.i38.us + %indvars.iv.i.i41.us = phi i64 [ 0, %.lr.ph.i.i38.us ], [ %indvars.iv.next31.i.i43.us, %108 ] + %indvars.iv.i.i40.us = phi i64 [ 9, %.lr.ph.i.i38.us ], [ %indvars.iv.next.i.i44.us, %108 ] + %103 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.i.i40.us + %104 = load i8, ptr %103, align 1, !tbaa !4 + store i8 %104, ptr %3, align 1, !tbaa !4 + %105 = getelementptr inbounds nuw i8, ptr %103, i64 1 + %106 = load i8, ptr %105, align 1, !tbaa !4 + store i8 %106, ptr %27, align 1, !tbaa !4 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #9 store i32 0, ptr %5, align 4, !tbaa !10 %106 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %3, ptr noundef nonnull @.str.2, ptr noundef nonnull %5) #9 %.not.i.i42.us = icmp eq i32 %106, 1 br i1 %.not.i.i42.us, label %107, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread80 -_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread80: ; preds = %101 +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread80: ; preds = %102 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #9 call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #9 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %3) #9 br label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge -107: ; preds = %101 +107: ; preds = %102 %108 = load i32, ptr %5, align 4, !tbaa !10 %109 = trunc i32 %108 to i8 - %110 = getelementptr inbounds nuw [256 x i8], ptr %4, i64 0, i64 %indvars.iv30.i.i40.us + %110 = getelementptr inbounds nuw [256 x i8], ptr %4, i64 0, i64 %indvars.iv30.i.i39.us store i8 %109, ptr %110, align 1, !tbaa !4 - %indvars.iv.next31.i.i44.us = add nuw nsw i64 %indvars.iv30.i.i40.us, 1 + %indvars.iv.next31.i.i44.us = add nuw nsw i64 %indvars.iv30.i.i39.us, 1 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #9 - %indvars.iv.next.i.i45.us = add nuw nsw i64 %indvars.iv.i.i41.us, 2 - %exitcond.not.i.i46.us = icmp eq i64 %indvars.iv.next31.i.i44.us, %wide.trip.count.i.i39.us - br i1 %exitcond.not.i.i46.us, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58, label %101, !llvm.loop !12 - -_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58: ; preds = %107, %96 - %.016.lcssa.i.i35.us = phi i64 [ 0, %96 ], [ %wide.trip.count.i.i39.us, %107 ] - %111 = call i64 @fwrite(ptr noundef nonnull %4, i64 noundef 1, i64 noundef %.016.lcssa.i.i35.us, ptr noundef nonnull %14) - %112 = icmp eq i64 %111, %.016.lcssa.i.i35.us + %indvars.iv.next.i.i45.us = add nuw nsw i64 %indvars.iv.i.i40.us, 2 + %exitcond.not.i.i46.us = icmp eq i64 %indvars.iv.i.i41.us, %100 + br i1 %exitcond.not.i.i46.us, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58, label %102, !llvm.loop !12 + +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58: ; preds = %107 + %112 = and i64 %101, 4294967295 + br label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57 + +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57: ; preds = %95, %._crit_edge.loopexit.i.i45.us + %.016.lcssa.i.i35.us = phi i64 [ 0, %95 ], [ %112, %._crit_edge.loopexit.i.i45.us ] + %113 = call i64 @fwrite(ptr noundef nonnull %4, i64 noundef 1, i64 noundef %.016.lcssa.i.i35.us, ptr noundef nonnull %14) + %114 = icmp eq i64 %113, %.016.lcssa.i.i35.us call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #9 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %3) #9 - br i1 %112, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge, !llvm.loop !9 + br i1 %114, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78, label %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge, !llvm.loop !9 -_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge: ; preds = %94, %_ZL11ChompStrlenPKc.exit.i28.us, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread80 +_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge: ; preds = %94, %_ZL11ChompStrlenPKc.exit.i28.us, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread80 br label %.split54.us, !llvm.loop !9 .split54.us: ; preds = %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread72, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge, %.split.us55, %.split.us, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge - %.us-phi = phi i1 [ false, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split54.us_crit_edge ], [ false, %.split.us ], [ false, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58..split54.split.us_crit_edge ], [ false, %.split.us55 ], [ true, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread72 ], [ true, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us58.thread78 ] + %.us-phi = phi i1 [ false, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us..split53.us_crit_edge ], [ false, %.split.us ], [ false, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57..split53.split.us_crit_edge ], [ false, %.split.us54 ], [ true, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us.thread71 ], [ true, %_ZL23ConvertMotorolaSrecLinePKcP8_IO_FILE.exit.us57.thread77 ] %113 = call i32 @fclose(ptr noundef nonnull %13) %114 = call i32 @fclose(ptr noundef nonnull %14) call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %9) #9 br label %115 115: ; preds = %.split54.us, %21, %20, %2 - %.020 = phi i1 [ false, %2 ], [ %.us-phi, %.split54.us ], [ false, %21 ], [ false, %20 ] + %.020 = phi i1 [ false, %2 ], [ %.us-phi, %.split53.us ], [ false, %21 ], [ false, %20 ] ret i1 %.020 } diff --git a/bench/cvc5/optimized/bags_utils.ll b/bench/cvc5/optimized/bags_utils.ll index e72deb5bbb3..21ba46a3f57 100644 --- a/bench/cvc5/optimized/bags_utils.ll +++ b/bench/cvc5/optimized/bags_utils.ll @@ -16214,9 +16214,6 @@ _ZSt6fill_nIPjmjET_S1_T0_RKT1_.exit.loopexit.i.i.i.i.i29: ; preds = %.noexc33 %70 = getelementptr inbounds nuw i8, ptr %6, i64 8 store ptr %.0.i.i.i.i.i30.ph, ptr %70, align 8, !tbaa !249 %invariant.gep = getelementptr i8, ptr %46, i64 4 - %umax = call i64 @llvm.umax.i64(i64 %51, i64 2) - %71 = add nsw i64 %umax, -1 - %72 = lshr i64 %71, 1 br label %81 ._crit_edge: ; preds = %81, %69 @@ -16246,8 +16243,8 @@ _ZSt6fill_nIPjmjET_S1_T0_RKT1_.exit.loopexit.i.i.i.i.i29: ; preds = %.noexc33 br label %_ZNSt6vectorIjSaIjEED2Ev.exit40 81: ; preds = %.lr.ph, %81 - %.048 = phi i64 [ 0, %.lr.ph ], [ %88, %81 ] - %.01447 = phi i64 [ 0, %.lr.ph ], [ %87, %81 ] + %.048 = phi i64 [ 0, %.lr.ph ], [ %88, %79 ] + %.01447 = phi i64 [ 0, %.lr.ph ], [ %87, %79 ] %82 = getelementptr inbounds nuw i32, ptr %46, i64 %.01447 %83 = load i32, ptr %82, align 4, !tbaa !367 %84 = getelementptr inbounds nuw i32, ptr %56, i64 %.048 @@ -16258,8 +16255,8 @@ _ZSt6fill_nIPjmjET_S1_T0_RKT1_.exit.loopexit.i.i.i.i.i29: ; preds = %.noexc33 store i32 %85, ptr %86, align 4, !tbaa !367 %87 = add nuw i64 %.01447, 2 %88 = add nuw nsw i64 %.048, 1 - %exitcond.not = icmp eq i64 %.048, %72 - br i1 %exitcond.not, label %._crit_edge, label %81, !llvm.loop !368 + %exitcond.not = icmp ult i64 %85, %51 + br i1 %exitcond.not, label %79, label %._crit_edge, !llvm.loop !368 _ZSt9make_pairIRSt6vectorIjSaIjEES3_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_.exit: ; preds = %._crit_edge %89 = load ptr, ptr %6, align 8, !tbaa !242 @@ -16325,7 +16322,7 @@ _ZN4cvc58internal9ProjectOpD2Ev.exit: ; preds = %_ZNSt6vectorIjSaIjE br label %_ZNSt6vectorIjSaIjEED2Ev.exit40 _ZNSt6vectorIjSaIjEED2Ev.exit40: ; preds = %112, %109, %79 - %.pn = phi { ptr, i32 } [ %80, %79 ], [ %110, %109 ], [ %110, %112 ] + %.pn = phi { ptr, i32 } [ %80, %77 ], [ %110, %108 ], [ %110, %111 ] call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #23 %118 = load ptr, ptr %5, align 8, !tbaa !242 %.not.i.i.i41 = icmp eq ptr %118, null @@ -16341,12 +16338,12 @@ _ZNSt6vectorIjSaIjEED2Ev.exit40: ; preds = %112, %109, %79 br label %_ZNSt6vectorIjSaIjEED2Ev.exit42 _ZNSt6vectorIjSaIjEED2Ev.exit42: ; preds = %119, %_ZNSt6vectorIjSaIjEED2Ev.exit40, %77 - %.pn.pn = phi { ptr, i32 } [ %78, %77 ], [ %.pn, %_ZNSt6vectorIjSaIjEED2Ev.exit40 ], [ %.pn, %119 ] + %.pn.pn = phi { ptr, i32 } [ %78, %75 ], [ %.pn, %_ZNSt6vectorIjSaIjEED2Ev.exit40 ], [ %.pn, %118 ] call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #23 br label %125 125: ; preds = %_ZNSt6vectorIjSaIjEED2Ev.exit42, %75 - %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %_ZNSt6vectorIjSaIjEED2Ev.exit42 ], [ %76, %75 ] + %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %_ZNSt6vectorIjSaIjEED2Ev.exit42 ], [ %76, %73 ] %126 = load ptr, ptr %3, align 8, !tbaa !242 %.not.i.i.i.i43 = icmp eq ptr %126, null br i1 %.not.i.i.i.i43, label %_ZN4cvc58internal9ProjectOpD2Ev.exit44, label %127 @@ -16360,7 +16357,7 @@ _ZNSt6vectorIjSaIjEED2Ev.exit42: ; preds = %119, %_ZNSt6vectorI br label %_ZN4cvc58internal9ProjectOpD2Ev.exit44 _ZN4cvc58internal9ProjectOpD2Ev.exit44: ; preds = %127, %125, %73 - %.pn.pn.pn.pn = phi { ptr, i32 } [ %74, %73 ], [ %.pn.pn.pn, %125 ], [ %.pn.pn.pn, %127 ] + %.pn.pn.pn.pn = phi { ptr, i32 } [ %74, %71 ], [ %.pn.pn.pn, %124 ], [ %.pn.pn.pn, %126 ] call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #23 resume { ptr, i32 } %.pn.pn.pn.pn } diff --git a/bench/eastl/optimized/EAMemory.ll b/bench/eastl/optimized/EAMemory.ll index f0724ba2385..99c1be11850 100644 --- a/bench/eastl/optimized/EAMemory.ll +++ b/bench/eastl/optimized/EAMemory.ll @@ -968,32 +968,32 @@ while.cond18.preheader.i: ; preds = %sw.default for.cond21.preheader.lr.ph.i: ; preds = %while.cond18.preheader.i %cmp2227.not.i = icmp ne i64 %sourceByteCount, 0 tail call void @llvm.assume(i1 %cmp2227.not.i) - %29 = add i64 %sourceByteCount, -1 - br label %for.cond21.preheader.us.i - -for.cond21.preheader.us.i: ; preds = %for.cond21.while.cond18.loopexit_crit_edge.us.i, %for.cond21.preheader.lr.ph.i - %d.sroa.0.335.us.i = phi ptr [ %incdec.ptr28.us.i, %for.cond21.while.cond18.loopexit_crit_edge.us.i ], [ %pDestination, %for.cond21.preheader.lr.ph.i ] - %destByteCount.addr.334.us.i = phi i64 [ %32, %for.cond21.while.cond18.loopexit_crit_edge.us.i ], [ %destByteCount, %for.cond21.preheader.lr.ph.i ] - %30 = add i64 %destByteCount.addr.334.us.i, -1 - %umin.i = tail call i64 @llvm.umin.i64(i64 %30, i64 %29) br label %for.body26.us.i -for.body26.us.i: ; preds = %for.body26.us.i, %for.cond21.preheader.us.i - %i20.031.us.i = phi i64 [ 0, %for.cond21.preheader.us.i ], [ %inc.us.i, %for.body26.us.i ] - %s.sroa.0.230.us.i = phi ptr [ %pSource, %for.cond21.preheader.us.i ], [ %incdec.ptr27.us.i, %for.body26.us.i ] - %d.sroa.0.429.us.i = phi ptr [ %d.sroa.0.335.us.i, %for.cond21.preheader.us.i ], [ %incdec.ptr28.us.i, %for.body26.us.i ] +for.body26.us.i: ; preds = %for.body26.us.i.backedge, %for.cond21.preheader.lr.ph.i + %i20.031.us.i = phi i64 [ 0, %for.cond21.preheader.lr.ph.i ], [ %i20.031.us.i.be, %for.body26.us.i.backedge ] + %s.sroa.0.230.us.i = phi ptr [ %pSource, %for.cond21.preheader.lr.ph.i ], [ %s.sroa.0.230.us.i.be, %for.body26.us.i.backedge ] + %d.sroa.0.429.us.i = phi ptr [ %pDestination, %for.cond21.preheader.lr.ph.i ], [ %incdec.ptr28.us.i, %for.body26.us.i.backedge ] + %destByteCount.addr.428.us.i = phi i64 [ %destByteCount, %for.cond21.preheader.lr.ph.i ], [ %dec29.us.i, %for.body26.us.i.backedge ] %incdec.ptr27.us.i = getelementptr inbounds nuw i8, ptr %s.sroa.0.230.us.i, i64 1 %31 = load i8, ptr %s.sroa.0.230.us.i, align 1 %incdec.ptr28.us.i = getelementptr inbounds nuw i8, ptr %d.sroa.0.429.us.i, i64 1 store i8 %31, ptr %d.sroa.0.429.us.i, align 1 + %dec29.us.i = add i64 %destByteCount.addr.428.us.i, -1 %inc.us.i = add nuw i64 %i20.031.us.i, 1 - %exitcond.not.i = icmp eq i64 %i20.031.us.i, %umin.i - br i1 %exitcond.not.i, label %for.cond21.while.cond18.loopexit_crit_edge.us.i, label %for.body26.us.i, !llvm.loop !15 + %exitcond.not.i = icmp ult i64 %inc.us.i, %sourceByteCount + %tobool24.us.i = icmp ne i64 %dec29.us.i, 0 + %30 = select i1 %cmp22.us.i, i1 %tobool24.us.i, i1 false + br i1 %30, label %for.body26.us.i.backedge, label %for.cond21.while.cond18.loopexit_crit_edge.us.i + +for.body26.us.i.backedge: ; preds = %for.body26.us.i, %for.cond21.while.cond18.loopexit_crit_edge.us.i + %i20.031.us.i.be = phi i64 [ %inc.us.i, %for.body26.us.i ], [ 0, %for.cond21.while.cond18.loopexit_crit_edge.us.i ] + %s.sroa.0.230.us.i.be = phi ptr [ %incdec.ptr27.us.i, %for.body26.us.i ], [ %pSource, %for.cond21.while.cond18.loopexit_crit_edge.us.i ] + br label %for.body26.us.i, !llvm.loop !15 for.cond21.while.cond18.loopexit_crit_edge.us.i: ; preds = %for.body26.us.i - %32 = sub i64 %30, %umin.i - %tobool.not.us.i = icmp eq i64 %32, 0 - br i1 %tobool.not.us.i, label %sw.epilog, label %for.cond21.preheader.us.i, !llvm.loop !16 + %tobool.not.us.i = icmp eq i64 %dec29.us.i, 0 + br i1 %tobool.not.us.i, label %sw.epilog, label %for.body26.us.i.backedge while.cond.preheader.i: ; preds = %sw.default %cmp643.i = icmp ugt i64 %destByteCount, 3 @@ -1021,7 +1021,7 @@ for.body.us.i: ; preds = %for.body.us.i, %for %brmerge = select i1 %34, i1 true, i1 %cmp8.us.i %add.us.i.mux = select i1 %34, i64 %add.us.i, i64 0 %incdec.ptr.us.i.mux = select i1 %34, ptr %incdec.ptr.us.i, ptr %pSource - br i1 %brmerge, label %for.body.us.i, label %while.end.i29, !llvm.loop !17 + br i1 %brmerge, label %for.body.us.i, label %while.end.i29, !llvm.loop !16 while.end.i29: ; preds = %for.body.us.i, %while.cond.preheader.i %destByteCount.addr.0.lcssa.i = phi i64 [ %destByteCount, %while.cond.preheader.i ], [ %sub.us.i, %for.body.us.i ] @@ -1046,7 +1046,7 @@ while.body14.i: ; preds = %while.body14.i, %wh store i8 %35, ptr %d.sroa.0.254.i, align 1 %dec.i31 = add nsw i64 %destByteCount.addr.253.i, -1 %cmp13.not.i = icmp eq i64 %dec.i31, 0 - br i1 %cmp13.not.i, label %sw.epilog, label %while.body14.i, !llvm.loop !18 + br i1 %cmp13.not.i, label %sw.epilog, label %while.body14.i, !llvm.loop !17 sw.bb7: ; preds = %entry %v4.0.in.i = getelementptr inbounds nuw i8, ptr %pSource, i64 12 @@ -1088,7 +1088,7 @@ while.body.i40: ; preds = %while.cond.preheade %cmp71.i = icmp ne i64 %and70.i, 0 %cmp72.i = icmp ne i64 %dec.i41, 0 %39 = select i1 %cmp71.i, i1 %cmp72.i, i1 false - br i1 %39, label %while.body.i40, label %while.end.i33, !llvm.loop !19 + br i1 %39, label %while.body.i40, label %while.end.i33, !llvm.loop !18 while.end.i33: ; preds = %while.body.i40, %while.cond.preheader.i32 %v1.2.lcssa.i = phi i32 [ %v1.0.i, %while.cond.preheader.i32 ], [ %add74.i, %while.body.i40 ] @@ -1170,7 +1170,7 @@ while.body101.i: ; preds = %while.body101.i, %w %sub105.i = add i64 %byteCount.addr.2108.i, -16 %add.ptr106.i = getelementptr inbounds nuw i8, ptr %pDestination.2107.i, i64 16 %cmp100.i = icmp ugt i64 %sub105.i, 15 - br i1 %cmp100.i, label %while.body101.i, label %while.end107.i, !llvm.loop !20 + br i1 %cmp100.i, label %while.body101.i, label %while.end107.i, !llvm.loop !19 while.end107.i: ; preds = %while.body101.i, %if.end98.i %v4.1140.i = phi i32 [ %v4.1.i, %if.end98.i ], [ %v4.1139.i, %while.body101.i ] @@ -1206,7 +1206,7 @@ while.body112.i: ; preds = %while.cond110.prehe %add.ptr113.i = getelementptr inbounds nuw i8, ptr %pDestination.3115.i, i64 4 %sub114.i = add nsw i64 %byteCount.addr.3116.i, -4 %cmp111.i = icmp ugt i64 %sub114.i, 3 - br i1 %cmp111.i, label %while.body112.i, label %for.cond.preheader.i, !llvm.loop !21 + br i1 %cmp111.i, label %while.body112.i, label %for.cond.preheader.i, !llvm.loop !20 for.body.i: ; preds = %for.body.i.preheader, %for.body.i %i.0124.i = phi i32 [ %inc.i, %for.body.i ], [ 0, %for.body.i.preheader ] @@ -1222,7 +1222,7 @@ for.body.i: ; preds = %for.body.i.preheade %cmp116.i = icmp samesign ult i32 %i.0124.i, 3 %cmp118.i = icmp ne i64 %dec123.i, 0 %41 = select i1 %cmp116.i, i1 %cmp118.i, i1 false - br i1 %41, label %for.body.i, label %sw.epilog, !llvm.loop !22 + br i1 %41, label %for.body.i, label %sw.epilog, !llvm.loop !21 sw.epilog: ; preds = %for.body.i, %while.body46.i, %while.body53.i, %while.body46.i.i, %for.cond21.while.cond18.loopexit_crit_edge.us.i, %while.body14.i, %for.cond.preheader.i, %while.end107.i, %while.end.i29, %while.cond18.preheader.i, %if.end43.i, %while.cond51.preheader.i, %if.end43.i.i, %sw.bb ret void @@ -1244,7 +1244,7 @@ while.body: ; preds = %while.cond.preheade %incdec.ptr = getelementptr inbounds nuw i8, ptr %p.sroa.0.022, i64 2 store i16 %c, ptr %p.sroa.0.022, align 2 %cmp1 = icmp ult ptr %incdec.ptr, %add.ptr - br i1 %cmp1, label %while.body, label %if.end14, !llvm.loop !23 + br i1 %cmp1, label %while.body, label %if.end14, !llvm.loop !22 if.else: ; preds = %entry %0 = ptrtoint ptr %pDest to i64 @@ -1273,7 +1273,7 @@ while.body8: ; preds = %while.body8.prehead %incdec.ptr9 = getelementptr inbounds nuw i8, ptr %p.sroa.0.219, i64 4 store i32 %or, ptr %p.sroa.0.219, align 4 %tobool7.not = icmp eq i64 %dec6, 0 - br i1 %tobool7.not, label %while.end10, label %while.body8, !llvm.loop !24 + br i1 %tobool7.not, label %while.end10, label %while.body8, !llvm.loop !23 while.end10: ; preds = %while.body8 %cmp11 = icmp ult ptr %incdec.ptr9, %add.ptr @@ -1303,7 +1303,7 @@ while.body: ; preds = %while.cond.preheade %incdec.ptr = getelementptr inbounds nuw i8, ptr %pDest32.024, i64 4 store i32 %c, ptr %pDest32.024, align 4 %cmp1 = icmp ult ptr %incdec.ptr, %add.ptr - br i1 %cmp1, label %while.body, label %if.end15, !llvm.loop !25 + br i1 %cmp1, label %while.body, label %if.end15, !llvm.loop !24 if.else: ; preds = %entry %0 = ptrtoint ptr %pDest to i64 @@ -1332,7 +1332,7 @@ while.body7: ; preds = %while.body7.prehead store i64 %or, ptr %pDest64.022, align 8 %dec9 = add nsw i64 %count.addr.121, -1 %tobool6.not = icmp eq i64 %dec9, 0 - br i1 %tobool6.not, label %while.end10, label %while.body7, !llvm.loop !26 + br i1 %tobool6.not, label %while.end10, label %while.body7, !llvm.loop !25 while.end10: ; preds = %while.body7 %cmp11 = icmp ult ptr %incdec.ptr8, %add.ptr @@ -1358,7 +1358,7 @@ while.body: ; preds = %entry, %while.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %cur.05, i64 8 store i64 %c, ptr %cur.05, align 8 %cmp = icmp ult ptr %incdec.ptr, %add.ptr - br i1 %cmp, label %while.body, label %while.end, !llvm.loop !27 + br i1 %cmp, label %while.body, label %while.end, !llvm.loop !26 while.end: ; preds = %while.body, %entry ret ptr %pDest @@ -1382,33 +1382,32 @@ while.cond18.preheader: ; preds = %entry for.cond22.preheader.lr.ph: ; preds = %while.cond18.preheader %cmp2328.not = icmp ne i64 %sourceBytes, 0 tail call void @llvm.assume(i1 %cmp2328.not) - %5 = add i64 %sourceBytes, -1 - br label %for.cond22.preheader.us - -for.cond22.preheader.us: ; preds = %for.cond22.preheader.lr.ph, %for.cond22.while.cond18.loopexit_crit_edge.us - %count.addr.336.us = phi i64 [ %dec31.us, %for.cond22.while.cond18.loopexit_crit_edge.us ], [ %count, %for.cond22.preheader.lr.ph ] - %pDestination8.335.us = phi ptr [ %incdec.ptr29.us, %for.cond22.while.cond18.loopexit_crit_edge.us ], [ %pDestination, %for.cond22.preheader.lr.ph ] - %6 = add i64 %count.addr.336.us, -1 - %umin = tail call i64 @llvm.umin.i64(i64 %6, i64 %5) br label %for.body27.us -for.body27.us: ; preds = %for.cond22.preheader.us, %for.body27.us - %i21.032.us = phi i64 [ 0, %for.cond22.preheader.us ], [ %inc.us, %for.body27.us ] - %pSource8Temp.231.us = phi ptr [ %pSource, %for.cond22.preheader.us ], [ %incdec.ptr28.us, %for.body27.us ] - %count.addr.430.us = phi i64 [ %count.addr.336.us, %for.cond22.preheader.us ], [ %dec31.us, %for.body27.us ] - %pDestination8.429.us = phi ptr [ %pDestination8.335.us, %for.cond22.preheader.us ], [ %incdec.ptr29.us, %for.body27.us ] +for.body27.us: ; preds = %for.body27.us.backedge, %for.cond22.preheader.lr.ph + %i21.032.us = phi i64 [ 0, %for.cond22.preheader.lr.ph ], [ %i21.032.us.be, %for.body27.us.backedge ] + %pSource8Temp.231.us = phi ptr [ %pSource, %for.cond22.preheader.lr.ph ], [ %pSource8Temp.231.us.be, %for.body27.us.backedge ] + %count.addr.430.us = phi i64 [ %count, %for.cond22.preheader.lr.ph ], [ %dec31.us, %for.body27.us.backedge ] + %pDestination8.429.us = phi ptr [ %pDestination, %for.cond22.preheader.lr.ph ], [ %incdec.ptr29.us, %for.body27.us.backedge ] %incdec.ptr28.us = getelementptr inbounds nuw i8, ptr %pSource8Temp.231.us, i64 1 %7 = load i8, ptr %pSource8Temp.231.us, align 1 %incdec.ptr29.us = getelementptr inbounds nuw i8, ptr %pDestination8.429.us, i64 1 store i8 %7, ptr %pDestination8.429.us, align 1 %inc.us = add nuw i64 %i21.032.us, 1 %dec31.us = add i64 %count.addr.430.us, -1 - %exitcond.not = icmp eq i64 %i21.032.us, %umin - br i1 %exitcond.not, label %for.cond22.while.cond18.loopexit_crit_edge.us, label %for.body27.us, !llvm.loop !28 + %exitcond.not = icmp ult i64 %inc.us, %sourceBytes + %cmp25.us = icmp ne i64 %dec31.us, 0 + %6 = select i1 %cmp23.us, i1 %cmp25.us, i1 false + br i1 %6, label %for.body27.us.backedge, label %for.cond22.while.cond18.loopexit_crit_edge.us + +for.body27.us.backedge: ; preds = %for.body27.us, %for.cond22.while.cond18.loopexit_crit_edge.us + %i21.032.us.be = phi i64 [ %inc.us, %for.body27.us ], [ 0, %for.cond22.while.cond18.loopexit_crit_edge.us ] + %pSource8Temp.231.us.be = phi ptr [ %incdec.ptr28.us, %for.body27.us ], [ %pSource, %for.cond22.while.cond18.loopexit_crit_edge.us ] + br label %for.body27.us, !llvm.loop !27 for.cond22.while.cond18.loopexit_crit_edge.us: ; preds = %for.body27.us %cmp19.not.us = icmp eq i64 %dec31.us, 0 - br i1 %cmp19.not.us, label %if.end34, label %for.cond22.preheader.us, !llvm.loop !29 + br i1 %cmp19.not.us, label %if.end34, label %for.body27.us.backedge while.cond.preheader: ; preds = %entry %cmp644 = icmp ugt i64 %count, 3 @@ -1436,7 +1435,7 @@ for.body.us: ; preds = %for.body.us, %for.c %brmerge = select i1 %9, i1 true, i1 %cmp8.us %add.us.mux = select i1 %9, i64 %add.us, i64 0 %add.ptr9.us.mux = select i1 %9, ptr %add.ptr9.us, ptr %pSource - br i1 %brmerge, label %for.body.us, label %while.end, !llvm.loop !30 + br i1 %brmerge, label %for.body.us, label %while.end, !llvm.loop !28 while.end: ; preds = %for.body.us, %while.cond.preheader %pDestination8.0.lcssa = phi ptr [ %pDestination, %while.cond.preheader ], [ %add.ptr.us, %for.body.us ] @@ -1461,7 +1460,7 @@ while.body15: ; preds = %while.body15.prehea %incdec.ptr16 = getelementptr inbounds nuw i8, ptr %pDestination8.254, i64 1 store i8 %10, ptr %pDestination8.254, align 1 %cmp14.not = icmp eq i64 %dec, 0 - br i1 %cmp14.not, label %if.end34, label %while.body15, !llvm.loop !31 + br i1 %cmp14.not, label %if.end34, label %while.body15, !llvm.loop !29 if.end34: ; preds = %for.cond22.while.cond18.loopexit_crit_edge.us, %while.body15, %while.cond18.preheader, %while.end ret ptr %pDestination @@ -1484,7 +1483,7 @@ for.inc: ; preds = %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %p8.06, i64 1 %dec = add i64 %byteCount.addr.05, -1 %cmp.not = icmp eq i64 %dec, 0 - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !32 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !30 return: ; preds = %for.body, %for.inc, %entry %retval.0 = phi ptr [ null, %entry ], [ null, %for.inc ], [ %p8.06, %for.body ] @@ -1518,7 +1517,7 @@ for.inc: ; preds = %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %p8.09, i64 1 %xor = xor i64 %i.08, 1 %cmp.not = icmp eq ptr %incdec.ptr, %add.ptr - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !33 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !31 return: ; preds = %for.body, %for.inc, %entry %retval.0 = phi ptr [ null, %entry ], [ null, %for.inc ], [ %p8.09, %for.body ] @@ -1552,7 +1551,7 @@ for.inc: ; preds = %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %p8.09, i64 1 %add = add nuw nsw i64 %i.010, 1 %cmp.not = icmp eq ptr %incdec.ptr, %add.ptr - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !34 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !32 return: ; preds = %for.body, %for.inc, %entry %retval.0 = phi ptr [ null, %entry ], [ null, %for.inc ], [ %p8.09, %for.body ] @@ -1586,7 +1585,7 @@ for.inc: ; preds = %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %p8.09, i64 1 %add = add nuw nsw i64 %i.010, 1 %cmp.not = icmp eq ptr %incdec.ptr, %add.ptr - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !35 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !33 return: ; preds = %for.body, %for.inc, %entry %retval.0 = phi ptr [ null, %entry ], [ null, %for.inc ], [ %p8.09, %for.body ] @@ -1610,7 +1609,7 @@ for.inc: ; preds = %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %p8.06, i64 1 %dec = add i64 %nCharCount.addr.05, -1 %cmp.not = icmp eq i64 %dec, 0 - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !36 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !34 return: ; preds = %for.body, %for.inc, %entry %retval.0 = phi ptr [ null, %entry ], [ null, %for.inc ], [ %p8.06, %for.body ] @@ -1634,7 +1633,7 @@ for.inc: ; preds = %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %pString.addr.05, i64 2 %dec = add i64 %nCharCount.addr.06, -1 %cmp.not = icmp eq i64 %dec, 0 - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !37 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !35 return: ; preds = %for.body, %for.inc, %entry %retval.0 = phi ptr [ null, %entry ], [ null, %for.inc ], [ %pString.addr.05, %for.body ] @@ -1658,7 +1657,7 @@ for.inc: ; preds = %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %pString.addr.05, i64 4 %dec = add i64 %nCharCount.addr.06, -1 %cmp.not = icmp eq i64 %dec, 0 - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !38 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !36 return: ; preds = %for.body, %for.inc, %entry %retval.0 = phi ptr [ null, %entry ], [ null, %for.inc ], [ %pString.addr.05, %for.body ] @@ -1690,7 +1689,7 @@ for.inc: ; preds = %for.body %incdec.ptr6 = getelementptr inbounds nuw i8, ptr %p2.010, i64 1 %dec = add i64 %nCharCount.addr.08, -1 %cmp.not = icmp eq i64 %dec, 0 - br i1 %cmp.not, label %return, label %for.body, !llvm.loop !39 + br i1 %cmp.not, label %return, label %for.body, !llvm.loop !37 return: ; preds = %for.inc, %entry, %if.then %retval.0 = phi i32 [ %cond, %if.then ], [ 0, %entry ], [ 0, %for.inc ] @@ -1731,7 +1730,7 @@ for.body.us: ; preds = %for.body.lr.ph, %fo for.inc.us: ; preds = %for.body.us %incdec.ptr.us = getelementptr inbounds nuw i8, ptr %pCurrent8.018.us, i64 1 %cmp4.not.us = icmp ugt ptr %incdec.ptr.us, %add.ptr1 - br i1 %cmp4.not.us, label %return, label %for.body.us, !llvm.loop !40 + br i1 %cmp4.not.us, label %return, label %for.body.us, !llvm.loop !38 for.body: ; preds = %for.body.lr.ph, %for.inc %pCurrent8.018 = phi ptr [ %incdec.ptr, %for.inc ], [ %pMemory, %for.body.lr.ph ] @@ -1753,12 +1752,12 @@ for.body.i: ; preds = %for.body, %for.inc. for.inc.i: ; preds = %for.body.i %dec.i = add i64 %nCharCount.addr.08.i, -1 %cmp.not.i = icmp eq i64 %dec.i, 0 - br i1 %cmp.not.i, label %return, label %for.body.i, !llvm.loop !39 + br i1 %cmp.not.i, label %return, label %for.body.i, !llvm.loop !37 for.inc: ; preds = %for.body.i, %for.body %incdec.ptr = getelementptr inbounds nuw i8, ptr %pCurrent8.018, i64 1 %cmp4.not = icmp ugt ptr %incdec.ptr, %add.ptr1 - br i1 %cmp4.not, label %return, label %for.body, !llvm.loop !40 + br i1 %cmp4.not, label %return, label %for.body, !llvm.loop !38 return: ; preds = %for.inc, %for.inc.i, %for.inc.us, %for.body.us, %for.cond.preheader, %entry, %if.then %retval.0 = phi ptr [ %pMemory, %if.then ], [ null, %entry ], [ null, %for.cond.preheader ], [ null, %for.inc.us ], [ %pCurrent8.018.us, %for.body.us ], [ %pCurrent8.018, %for.inc.i ], [ null, %for.inc ] @@ -1893,7 +1892,7 @@ while.cond18.preheader.i: ; preds = %entry for.cond21.preheader.us.i: ; preds = %while.cond18.preheader.i, %for.cond21.while.cond18.loopexit_crit_edge.us.i %d.sroa.0.335.us.i = phi ptr [ %incdec.ptr28.us.i, %for.cond21.while.cond18.loopexit_crit_edge.us.i ], [ %pDestination, %while.cond18.preheader.i ] - %destByteCount.addr.334.us.i = phi i64 [ %4, %for.cond21.while.cond18.loopexit_crit_edge.us.i ], [ %byteCount, %while.cond18.preheader.i ] + %destByteCount.addr.334.us.i = phi i64 [ %dec29.us.i, %for.cond21.while.cond18.loopexit_crit_edge.us.i ], [ %byteCount, %while.cond18.preheader.i ] %2 = add i64 %destByteCount.addr.334.us.i, -1 %umin.i = tail call i64 @llvm.umin.i64(i64 %2, i64 7) br label %for.body26.us.i @@ -1902,18 +1901,19 @@ for.body26.us.i: ; preds = %for.body26.us.i, %f %i20.031.us.i = phi i64 [ 0, %for.cond21.preheader.us.i ], [ %inc.us.i, %for.body26.us.i ] %s.sroa.0.230.us.i = phi ptr [ %c.addr, %for.cond21.preheader.us.i ], [ %incdec.ptr27.us.i, %for.body26.us.i ] %d.sroa.0.429.us.i = phi ptr [ %d.sroa.0.335.us.i, %for.cond21.preheader.us.i ], [ %incdec.ptr28.us.i, %for.body26.us.i ] + %destByteCount.addr.428.us.i = phi i64 [ %destByteCount.addr.334.us.i, %for.cond21.preheader.us.i ], [ %dec29.us.i, %for.body26.us.i ] %incdec.ptr27.us.i = getelementptr inbounds nuw i8, ptr %s.sroa.0.230.us.i, i64 1 %3 = load i8, ptr %s.sroa.0.230.us.i, align 1 %incdec.ptr28.us.i = getelementptr inbounds nuw i8, ptr %d.sroa.0.429.us.i, i64 1 store i8 %3, ptr %d.sroa.0.429.us.i, align 1 + %dec29.us.i = add i64 %destByteCount.addr.428.us.i, -1 %inc.us.i = add nuw nsw i64 %i20.031.us.i, 1 %exitcond.not.i = icmp eq i64 %i20.031.us.i, %umin.i - br i1 %exitcond.not.i, label %for.cond21.while.cond18.loopexit_crit_edge.us.i, label %for.body26.us.i, !llvm.loop !15 + br i1 %exitcond.not.i, label %for.cond21.while.cond18.loopexit_crit_edge.us.i, label %for.body26.us.i, !llvm.loop !39 for.cond21.while.cond18.loopexit_crit_edge.us.i: ; preds = %for.body26.us.i - %4 = sub i64 %2, %umin.i - %tobool.not.us.i = icmp eq i64 %4, 0 - br i1 %tobool.not.us.i, label %_ZN2EA4StdCL10MemfillAnyEPvPKvmm.exit, label %for.cond21.preheader.us.i, !llvm.loop !16 + %tobool.not.us.i = icmp eq i64 %dec29.us.i, 0 + br i1 %tobool.not.us.i, label %_ZN2EA4StdCL10MemfillAnyEPvPKvmm.exit, label %for.cond21.preheader.us.i, !llvm.loop !15 while.cond.preheader.i: ; preds = %entry %cmp643.i = icmp ugt i64 %byteCount, 3 @@ -1938,7 +1938,7 @@ for.body.us.i: ; preds = %for.body.us.i, %whi %brmerge = select i1 %.not.not, i1 true, i1 %cmp8.us.i.not %.mux = select i1 %.not.not, i64 8, i64 4 %incdec.ptr.us.i.mux = select i1 %.not.not, ptr %incdec.ptr.us.i, ptr %c.addr - br i1 %brmerge, label %for.body.us.i, label %while.end.i, !llvm.loop !17 + br i1 %brmerge, label %for.body.us.i, label %while.end.i, !llvm.loop !16 while.end.i: ; preds = %for.body.us.i, %while.cond.preheader.i %destByteCount.addr.0.lcssa.i = phi i64 [ %byteCount, %while.cond.preheader.i ], [ %sub.us.i, %for.body.us.i ] @@ -1963,7 +1963,7 @@ while.body14.i: ; preds = %while.body14.i, %wh store i8 %6, ptr %d.sroa.0.254.i, align 1 %dec.i = add nsw i64 %destByteCount.addr.253.i, -1 %cmp13.not.i = icmp eq i64 %dec.i, 0 - br i1 %cmp13.not.i, label %_ZN2EA4StdCL10MemfillAnyEPvPKvmm.exit, label %while.body14.i, !llvm.loop !18 + br i1 %cmp13.not.i, label %_ZN2EA4StdCL10MemfillAnyEPvPKvmm.exit, label %while.body14.i, !llvm.loop !17 _ZN2EA4StdCL10MemfillAnyEPvPKvmm.exit: ; preds = %for.cond21.while.cond18.loopexit_crit_edge.us.i, %while.body14.i, %while.cond18.preheader.i, %while.end.i ret void @@ -1995,7 +1995,7 @@ for.body: ; preds = %entry, %for.body %incdec.ptr4 = getelementptr inbounds nuw i8, ptr %p2.010, i64 1 %dec = add i64 %byteCount.addr.08, -1 %cmp.not = icmp eq i64 %dec, 0 - br i1 %cmp.not, label %for.end.loopexit, label %for.body, !llvm.loop !41 + br i1 %cmp.not, label %for.end.loopexit, label %for.body, !llvm.loop !40 for.end.loopexit: ; preds = %for.body %2 = icmp eq i8 %or6, 0 @@ -2029,7 +2029,7 @@ while.body: ; preds = %entry, %while.body %sub3 = sub nsw i32 %conv, %conv2 %add = add nsw i32 %sub3, %and %tobool.not = icmp eq i64 %dec, 0 - br i1 %tobool.not, label %while.end, label %while.body, !llvm.loop !42 + br i1 %tobool.not, label %while.end, label %while.body, !llvm.loop !41 while.end: ; preds = %while.body, %entry %result.0.lcssa = phi i32 [ 0, %entry ], [ %add, %while.body ] @@ -2052,7 +2052,7 @@ while.body: ; preds = %entry, %while.body %conv = zext i8 %0 to i32 %or = or i32 %mask.04, %conv %tobool.not = icmp eq i64 %dec, 0 - br i1 %tobool.not, label %while.end.loopexit, label %while.body, !llvm.loop !43 + br i1 %tobool.not, label %while.end.loopexit, label %while.body, !llvm.loop !42 while.end.loopexit: ; preds = %while.body %1 = icmp eq i32 %or, 0 @@ -2069,15 +2069,15 @@ declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immar ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.fshl.i32(i32, i32, i32) #7 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #7 - ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) declare void @llvm.assume(i1 noundef) #8 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.bswap.i32(i32) #7 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.umin.i64(i64, i64) #7 + attributes #0 = { mustprogress nofree norecurse nosync nounwind memory(write, inaccessiblemem: none) uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress nofree norecurse nosync nounwind memory(write, argmem: readwrite) uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { mustprogress nofree norecurse nosync nounwind memory(argmem: write) uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } @@ -2133,4 +2133,3 @@ attributes #8 = { nocallback nofree nosync nounwind willreturn memory(inaccessib !40 = distinct !{!40, !6} !41 = distinct !{!41, !6} !42 = distinct !{!42, !6} -!43 = distinct !{!43, !6} diff --git a/bench/ffmpeg/optimized/aacdec.ll b/bench/ffmpeg/optimized/aacdec.ll index 6c9f1268f15..0f541457cff 100644 --- a/bench/ffmpeg/optimized/aacdec.ll +++ b/bench/ffmpeg/optimized/aacdec.ll @@ -7390,38 +7390,35 @@ decode_dynamic_range.exit.i.i: ; preds = %630 %667 = call i32 @llvm.umin.i32(i32 %664, i32 %666) store i32 %667, ptr %16, align 8, !tbaa !105 %668 = add nsw i32 %660, -17 - %669 = add nsw i32 %660, -25 - %670 = lshr i32 %669, 3 - %umin.i.i.i = call i32 @llvm.umin.i32(i32 %670, i32 254) - %671 = add nuw nsw i32 %umin.i.i.i, 1 - %wide.trip.count.i74.i.i = zext nneg i32 %671 to i64 - br label %672 - -672: ; preds = %672, %.lr.ph.i.i.i - %indvars.iv.i75.i.i = phi i64 [ 0, %.lr.ph.i.i.i ], [ %indvars.iv.next.i76.i.i, %672 ] - %673 = phi i32 [ %667, %.lr.ph.i.i.i ], [ %683, %672 ] - %.117.i.i.i = phi i32 [ %668, %.lr.ph.i.i.i ], [ %686, %672 ] - %indvars.iv.next.i76.i.i = add nuw nsw i64 %indvars.iv.i75.i.i, 1 - %674 = lshr i32 %673, 3 - %675 = zext nneg i32 %674 to i64 - %676 = getelementptr inbounds nuw i8, ptr %665, i64 %675 - %677 = load i32, ptr %676, align 1, !tbaa !27 - %678 = call i32 @llvm.bswap.i32(i32 %677) - %679 = and i32 %673, 7 - %680 = shl i32 %678, %679 - %681 = lshr i32 %680, 24 - %682 = add i32 %673, 8 - %683 = call i32 @llvm.umin.i32(i32 %664, i32 %682) - store i32 %683, ptr %16, align 8, !tbaa !105 - %684 = trunc nuw i32 %681 to i8 - %685 = getelementptr inbounds nuw [256 x i8], ptr %5, i64 0, i64 %indvars.iv.i75.i.i - store i8 %684, ptr %685, align 1, !tbaa !27 - %686 = add nsw i32 %.117.i.i.i, -8 - %exitcond.not.i.i.i = icmp eq i64 %indvars.iv.next.i76.i.i, %wide.trip.count.i74.i.i - br i1 %exitcond.not.i.i.i, label %._crit_edge.i.i.i, label %672, !llvm.loop !210 - -._crit_edge.i.i.i: ; preds = %672 - %687 = getelementptr inbounds nuw [256 x i8], ptr %5, i64 0, i64 %wide.trip.count.i74.i.i + br label %669 + +669:; preds = %669, %.lr.ph.i.i.i + %indvars.iv.i74.i.i = phi i64 [ 0, %.lr.ph.i.i.i ], [ %indvars.iv.next.i75.i.i, %669 ] + %670 = phi i32 [ %667, %.lr.ph.i.i.i ], [ %678, %669 ] + %.117.i.i.i = phi i32 [ %668, %.lr.ph.i.i.i ], [ %683, %669 ] + %indvars.iv.next.i75.i.i = add nuw nsw i64 %indvars.iv.i74.i.i, 1 + %671 = lshr i32 %670, 3 + %672 = zext nneg i32 %671 to i64 + %673 = getelementptr inbounds nuw i8, ptr %665, i64 %672 + %674 = load i32, ptr %673, align 1, !tbaa !27 + %675 = call i32 @llvm.bswap.i32(i32 %674) + %676 = and i32 %670, 7 + %677 = shl i32 %675, %676 + %678 = lshr i32 %677, 24 + %679 = add i32 %670, 8 + %678 = call i32 @llvm.umin.i32(i32 %664, i32 %679) + store i32 %678, ptr %16, align 8, !tbaa !105 + %681 = trunc nuw i32 %678 to i8 + %682 = getelementptr inbounds nuw [256 x i8], ptr %5, i64 0, i64 %indvars.iv.i74.i.i + store i8 %681, ptr %682, align 1, !tbaa !27 + %683 = add nsw i32 %.117.i.i.i, -8 + %684 = icmp samesign ult i64 %indvars.iv.i74.i.i, 254 + %685 = icmp samesign ugt i32 %683, 7 + %686 = select i1 %684, i1 %685, i1 false + br i1 %686, label %669, label %._crit_edge.i.i.i, !llvm.loop !210 + +._crit_edge.i.i.i:; preds = %669 + %687 = getelementptr inbounds nuw [256 x i8], ptr %5, i64 0, i64 %indvars.iv.next.i75.i.i store i8 0, ptr %687, align 1, !tbaa !27 %688 = load ptr, ptr %185, align 8, !tbaa !4 %689 = getelementptr inbounds nuw i8, ptr %688, i64 524 @@ -7448,7 +7445,7 @@ decode_dynamic_range.exit.i.i: ; preds = %630 br label %decode_fill.exit.i.i decode_fill.exit.i.i: ; preds = %696, %693, %659 - %.014.i.i.i = phi i32 [ %661, %659 ], [ %686, %696 ], [ %686, %693 ] + %.014.i.i.i = phi i32 [ %661, %659 ], [ %683, %696 ], [ %683, %693 ] %701 = load i32, ptr %16, align 8, !tbaa !105 %702 = sub nsw i32 0, %701 %703 = load i32, ptr %199, align 8, !tbaa !103 diff --git a/bench/ffmpeg/optimized/exr.ll b/bench/ffmpeg/optimized/exr.ll index cfaf6ef267b..ff2ae9dd88b 100644 --- a/bench/ffmpeg/optimized/exr.ll +++ b/bench/ffmpeg/optimized/exr.ll @@ -6535,7 +6535,7 @@ get_vlc2.exit.i: ; preds = %241, %220, %203 %262 = tail call i32 @llvm.umin.i32(i32 %197, i32 %261) %263 = and i32 %.062.i.i, 65535 %264 = icmp eq i32 %263, %195 - br i1 %264, label %265, label %284 + br i1 %264, label %265, label %285 265: ; preds = %get_vlc2.exit.i %266 = lshr i32 %262, 3 @@ -6561,30 +6561,31 @@ get_vlc2.exit.i: ; preds = %241, %220, %203 %.not.i57 = icmp ult i32 %272, 16777216 br i1 %.not.i57, label %.loopexit.i, label %.lr.ph.i58.preheader -.lr.ph.i58.preheader: ; preds = %279 - %282 = add i32 %.02611.i, %273 - br label %.lr.ph.i58 - -.lr.ph.i58: ; preds = %.lr.ph.i58.preheader, %.lr.ph.i58 - %indvars.iv.i59 = phi i64 [ %indvars.iv.next.i60, %.lr.ph.i58 ], [ %280, %.lr.ph.i58.preheader ] +.lr.ph.i58.preheader: ; preds = %279, %.lr.ph.i58 + %indvars.iv.i59 = phi i64 [ %indvars.iv.next.i60, %.lr.ph.i58 ], [ %280, %279 ] + %.0259.i = phi i32 [ %282, %.lr.ph.i58 ], [ %273, %279 ] + %282 = add nsw i32 %.0259.i, -1 %indvars.iv.next.i60 = add nsw i64 %indvars.iv.i59, 1 %283 = getelementptr inbounds i16, ptr %3, i64 %indvars.iv.i59 store i16 %281, ptr %283, align 2, !tbaa !41 - %lftr.wideiv = trunc i64 %indvars.iv.next.i60 to i32 - %exitcond.not = icmp eq i32 %282, %lftr.wideiv - br i1 %exitcond.not, label %.loopexit.i, label %.lr.ph.i58, !llvm.loop !216 - -284: ; preds = %get_vlc2.exit.i - %285 = trunc i32 %.062.i.i to i16 - %286 = add nsw i32 %.02611.i, 1 - %287 = sext i32 %.02611.i to i64 - %288 = getelementptr inbounds i16, ptr %3, i64 %287 - store i16 %285, ptr %288, align 2, !tbaa !41 + %284 = icmp samesign ugt i32 %.0259.i, 1 + br i1 %284, label %.lr.ph.i58, label %.loopexit.loopexit.i, !llvm.loop !216 + +285: ; preds = %get_vlc2.exit.i + %286 = trunc i32 %.062.i.i to i16 + %287 = add nsw i32 %.02611.i, 1 + %288 = sext i32 %.02611.i to i64 + %289 = getelementptr inbounds i16, ptr %3, i64 %288 + store i16 %286, ptr %289, align 2, !tbaa !41 + br label %.loopexit.i + +.loopexit.loopexit.i: ; preds = %.lr.ph.i58 + %290 = trunc nsw i64 %indvars.iv.next.i60 to i32 br label %.loopexit.i -.loopexit.i: ; preds = %.lr.ph.i58, %284, %279 - %.sroa.6.1.i = phi i32 [ %262, %284 ], [ %275, %279 ], [ %275, %.lr.ph.i58 ] - %.329.i = phi i32 [ %286, %284 ], [ %.02611.i, %279 ], [ %282, %.lr.ph.i58 ] +.loopexit.i: ; preds = %.loopexit.loopexit.i, %285, %279 + %.sroa.6.1.i = phi i32 [ %262, %285 ], [ %275, %279 ], [ %275, %.loopexit.loopexit.i ] + %.329.i = phi i32 [ %287, %285 ], [ %.02611.i, %279 ], [ %290, %.loopexit.loopexit.i ] %289 = icmp sgt i32 %.018.i.i, %.sroa.6.1.i %290 = icmp slt i32 %.329.i, %4 %291 = select i1 %289, i1 %290, i1 false diff --git a/bench/ffmpeg/optimized/hls_sample_encryption.ll b/bench/ffmpeg/optimized/hls_sample_encryption.ll index 382d4ce81de..c9de7a92b79 100644 --- a/bench/ffmpeg/optimized/hls_sample_encryption.ll +++ b/bench/ffmpeg/optimized/hls_sample_encryption.ll @@ -505,9 +505,8 @@ decrypt_nal_unit.exit.i: ; preds = %81 br i1 %152, label %.lr.ph.i14, label %decrypt_video_frame.exit .lr.ph.i14: ; preds = %147 - %153 = ptrtoint ptr %151 to i64 - %154 = getelementptr inbounds i8, ptr %151, i64 -1 - %scevgep.i12.i.i = getelementptr i8, ptr inttoptr (i64 -1 to ptr), i64 %153 + %153 = getelementptr inbounds i8, ptr %151, i64 -1 + %154 = ptrtoint ptr %151 to i64 %155 = getelementptr inbounds nuw i8, ptr %1, i64 8 %156 = getelementptr inbounds nuw i8, ptr %1, i64 24 switch i32 %0, label %decrypt_video_frame.exit [ @@ -520,10 +519,10 @@ decrypt_nal_unit.exit.i: ; preds = %81 br label %.lr.ph.split.split.i .lr.ph.split.split.us.i: ; preds = %.lr.ph.i14, %190 - %.sroa.06.020.us.i = phi ptr [ %192, %190 ], [ %.val, %.lr.ph.i14 ] + %.sroa.06.020.us.i = phi ptr [ %192, %191 ], [ %.val, %.lr.ph.i14 ] call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #6 store ptr null, ptr %5, align 8, !tbaa !51 - %157 = icmp ult ptr %.sroa.06.020.us.i, %154 + %157 = icmp ult ptr %.sroa.06.020.us.i, %153 br i1 %157, label %.lr.ph.i.i.us.i, label %get_next_adts_frame.exit.i.us.thread.i .lr.ph.i.i.us.i: ; preds = %.lr.ph.split.split.us.i, %164 @@ -540,18 +539,18 @@ decrypt_nal_unit.exit.i: ; preds = %81 164: ; preds = %160, %.lr.ph.i.i.us.i %165 = getelementptr inbounds nuw i8, ptr %.sroa.06.1.us.i, i64 1 - %exitcond.not.i.i.us.i = icmp eq ptr %165, %scevgep.i12.i.i - br i1 %exitcond.not.i.i.us.i, label %get_next_adts_frame.exit.i.us.thread.i, label %.lr.ph.i.i.us.i, !llvm.loop !53 + %exitcond.not.i.i.us.i = icmp ult ptr %165, %153 + br i1 %exitcond.not.i.i.us.i, label %.lr.ph.i.i.us.i, label %get_next_adts_frame.exit.i.us.thread.i, !llvm.loop !53 166: ; preds = %160 %167 = ptrtoint ptr %.sroa.06.1.us.i to i64 - %168 = sub i64 %153, %167 + %168 = sub i64 %154, %167 %169 = call i32 @avpriv_adts_header_parse(ptr noundef nonnull %5, ptr noundef nonnull %.sroa.06.1.us.i, i64 noundef %168) #6 %170 = icmp slt i32 %169, 0 br i1 %170, label %get_next_adts_frame.exit.i.us.thread.i, label %171 get_next_adts_frame.exit.i.us.thread.i: ; preds = %166, %.lr.ph.split.split.us.i, %164 - %.0.i.i.us.ph.i = phi i32 [ -1, %164 ], [ -1, %.lr.ph.split.split.us.i ], [ %169, %166 ] + %.0.i.i.us.ph.i = phi i32 [ -1, %164 ], [ -1, %.lr.ph.split.split.us.i ], [ %169, %167 ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6 br label %decrypt_video_frame.exit @@ -592,14 +591,14 @@ decrypt_sync_frame.exit.us.i: ; preds = %180 br i1 %193, label %.lr.ph.split.split.us.i, label %decrypt_video_frame.exit, !llvm.loop !57 .lr.ph.split.split.i: ; preds = %.lr.ph.split.split.i.preheader, %222 - %.sroa.06.020.i = phi ptr [ %224, %222 ], [ %.val, %.lr.ph.split.split.i.preheader ] + %.sroa.06.020.i = phi ptr [ %224, %224 ], [ %.val, %.lr.ph.split.split.i.preheader ] call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6 store ptr null, ptr %4, align 8, !tbaa !31 - %194 = icmp ult ptr %.sroa.06.020.i, %154 + %194 = icmp ult ptr %.sroa.06.020.i, %153 br i1 %194, label %.lr.ph.i13.i.i, label %get_next_ac3_eac3_sync_frame.exit.i.thread.i .lr.ph.i13.i.i: ; preds = %.lr.ph.split.split.i, %201 - %.sroa.06.3.i = phi ptr [ %202, %201 ], [ %.sroa.06.020.i, %.lr.ph.split.split.i ] + %.sroa.06.3.i = phi ptr [ %202, %202 ], [ %.sroa.06.020.i, %.lr.ph.split.split.i ] %195 = load i8, ptr %.sroa.06.3.i, align 1, !tbaa !4 %196 = icmp eq i8 %195, 11 br i1 %196, label %197, label %201 @@ -612,12 +611,12 @@ decrypt_sync_frame.exit.us.i: ; preds = %180 201: ; preds = %197, %.lr.ph.i13.i.i %202 = getelementptr inbounds nuw i8, ptr %.sroa.06.3.i, i64 1 - %exitcond.not.i14.i.i = icmp eq ptr %202, %scevgep.i12.i.i - br i1 %exitcond.not.i14.i.i, label %get_next_ac3_eac3_sync_frame.exit.i.thread.i, label %.lr.ph.i13.i.i, !llvm.loop !58 + %exitcond.not.i14.i.i = icmp ult ptr %202, %153 + br i1 %exitcond.not.i14.i.i, label %.lr.ph.i11.i.i, label %get_next_ac3_eac3_sync_frame.exit.i.thread.i, !llvm.loop !58 203: ; preds = %197 %204 = ptrtoint ptr %.sroa.06.3.i to i64 - %205 = sub i64 %153, %204 + %205 = sub i64 %154, %204 %206 = call i32 @avpriv_ac3_parse_header(ptr noundef nonnull %4, ptr noundef nonnull %.sroa.06.3.i, i64 noundef %205) #6 %207 = icmp slt i32 %206, 0 %208 = load ptr, ptr %4, align 8, !tbaa !31 @@ -662,7 +661,7 @@ decrypt_sync_frame.exit.i: ; preds = %214 br i1 %225, label %.lr.ph.split.split.i, label %decrypt_video_frame.exit, !llvm.loop !57 decrypt_video_frame.exit: ; preds = %222, %214, %190, %180, %.thread.i.i, %30, %get_next_ac3_eac3_sync_frame.exit.i.thread.i, %get_next_ac3_eac3_sync_frame.exit.i.thread42.i, %get_next_adts_frame.exit.i.us.thread.i, %.lr.ph.i14, %147, %._crit_edge.i, %decrypt_nal_unit.exit.i, %3 - %.0 = phi i32 [ -1094995529, %3 ], [ %83, %decrypt_nal_unit.exit.i ], [ 0, %._crit_edge.i ], [ 0, %147 ], [ -1094995529, %.lr.ph.i14 ], [ %.0.i.i.us.ph.i, %get_next_adts_frame.exit.i.us.thread.i ], [ -1, %get_next_ac3_eac3_sync_frame.exit.i.thread.i ], [ %206, %get_next_ac3_eac3_sync_frame.exit.i.thread42.i ], [ -1, %30 ], [ -1, %.thread.i.i ], [ 0, %190 ], [ %182, %180 ], [ 0, %222 ], [ %216, %214 ] + %.0 = phi i32 [ -1094995529, %3 ], [ %83, %decrypt_nal_unit.exit.i ], [ 0, %._crit_edge.i ], [ 0, %147 ], [ -1094995529, %.lr.ph.i14 ], [ %.0.i.i.us.ph.i, %get_next_adts_frame.exit.i.us.thread.i ], [ -1, %get_next_ac3_eac3_sync_frame.exit.i.thread.i ], [ %206, %get_next_ac3_eac3_sync_frame.exit.i.thread42.i ], [ -1, %30 ], [ -1, %.thread.i.i ], [ 0, %191 ], [ %182, %181 ], [ 0, %224 ], [ %216, %216 ] ret i32 %.0 } diff --git a/bench/ffmpeg/optimized/iamf_writer.ll b/bench/ffmpeg/optimized/iamf_writer.ll index 634b75dbaab..7f4a06906fa 100644 --- a/bench/ffmpeg/optimized/iamf_writer.ll +++ b/bench/ffmpeg/optimized/iamf_writer.ll @@ -1449,7 +1449,7 @@ define range(i32 -2147483648, 1) i32 @ff_iamf_write_descriptors(ptr noundef read br label %343 109: ; preds = %.lr.ph114, %.loopexit78 - %indvars.iv153 = phi i64 [ 0, %.lr.ph114 ], [ %indvars.iv.next154, %.loopexit78 ] + %indvars.iv153 = phi i64 [ 0, %.lr.ph112 ], [ %indvars.iv.next154, %.loopexit76 ] %110 = load ptr, ptr %24, align 8, !tbaa !57 %111 = getelementptr inbounds nuw ptr, ptr %110, i64 %indvars.iv153 %112 = load ptr, ptr %111, align 8, !tbaa !59 @@ -1808,27 +1808,28 @@ put_bits.exit81.thread.i.i: ; preds = %put_bits.exit52.i.i %.sroa.40.1.ph.i.i = phi i32 [ 16, %put_bits.exit81.thread.i.i ], [ 8, %295 ], [ 8, %put_bits.exit81.i.i ] %.sroa.0.1.ph.i.i = phi i32 [ %.0.i.i77.i.i, %put_bits.exit81.thread.i.i ], [ %297, %295 ], [ %283, %put_bits.exit81.i.i ] %302 = shl i32 %.sroa.0.1.ph.i.i, %.sroa.40.1.ph.i.i - %303 = lshr exact i32 %.sroa.40.1.ph.i.i, 3 - %304 = trunc nuw nsw i64 %.sroa.80.1.idx.ph.i.i to i32 - %reass.sub.i = sub nsw i32 %304, %303 - %305 = add nsw i32 %reass.sub.i, 4 - %wide.trip.count.i = zext nneg i32 %305 to i64 - br label %306 - -306: ; preds = %306, %.lr.ph.i86.i.i - %.sroa.80.28.idx.i.i = phi i64 [ %.sroa.80.1.idx.ph.i.i, %.lr.ph.i86.i.i ], [ %.sroa.80.28.add.i.i, %306 ] - %.sroa.0.3.i.i = phi i32 [ %302, %.lr.ph.i86.i.i ], [ %309, %306 ] + br label %303 + +303:; preds = %303, %.lr.ph.i86.i.i + %.sroa.80.28.idx.i.i = phi i64 [ %.sroa.80.1.idx.ph.i.i, %.lr.ph.i86.i.i ], [ %.sroa.80.28.add.i.i, %303 ] + %.sroa.40.3.i.i = phi i32 [ %.sroa.40.1.ph.i.i, %.lr.ph.i86.i.i ], [ %307, %303 ] + %.sroa.0.3.i.i = phi i32 [ %302, %.lr.ph.i86.i.i ], [ %306, %303 ] %.sroa.80.28.ptr.i.i = getelementptr inbounds nuw i8, ptr %7, i64 %.sroa.80.28.idx.i.i %307 = lshr i32 %.sroa.0.3.i.i, 24 %308 = trunc nuw i32 %307 to i8 %.sroa.80.28.add.i.i = add nuw nsw i64 %.sroa.80.28.idx.i.i, 1 store i8 %308, ptr %.sroa.80.28.ptr.i.i, align 1, !tbaa !17 %309 = shl i32 %.sroa.0.3.i.i, 8 - %exitcond.not.i = icmp eq i64 %.sroa.80.28.add.i.i, %wide.trip.count.i - br i1 %exitcond.not.i, label %flush_put_bits.exit87.i.i, label %306, !llvm.loop !160 + %307 = add nuw nsw i32 %.sroa.40.3.i.i, 8 + %308 = icmp samesign ult i32 %.sroa.40.3.i.i, 24 + br i1 %308, label %303, label %flush_put_bits.exit87.i.loopexit.i, !llvm.loop !160 + +flush_put_bits.exit87.i.loopexit.i: ; preds = %303 + %309 = trunc i64 %.sroa.80.28.add.i.i to i32 + br label %flush_put_bits.exit87.i.i -flush_put_bits.exit87.i.i: ; preds = %306, %298 - %.sroa.80.1.idx.pn.i.i = phi i32 [ 4, %298 ], [ %305, %306 ] +flush_put_bits.exit87.i.i: ; preds = %flush_put_bits.exit87.i.loopexit.i, %298 + %.sroa.80.1.idx.pn.i.i = phi i32 [ 4, %298 ], [ %309, %flush_put_bits.exit87.i.loopexit.i ] call void @avio_write(ptr noundef %237, ptr noundef nonnull %7, i32 noundef %.sroa.80.1.idx.pn.i.i) #9 %indvars.iv.next183.i.i = add nuw nsw i64 %indvars.iv182.i.i, 1 %310 = load i32, ptr %240, align 8, !tbaa !22 @@ -1895,7 +1896,7 @@ scalable_channel_layout_config.exit.i: ; preds = %flush_put_bits.exit br label %.thread73 .thread73: ; preds = %109, %.thread73.sink.split - %.0.i53.ph = phi i32 [ -22, %.thread73.sink.split ], [ %120, %109 ] + %.0.i53.ph = phi i32 [ -22, %.thread71.sink.split ], [ %120, %109 ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9 call void @llvm.lifetime.end.p0(i64 25, ptr nonnull %8) #9 @@ -1920,7 +1921,7 @@ scalable_channel_layout_config.exit.i: ; preds = %flush_put_bits.exit br i1 %.not50, label %109, label %.preheader, !llvm.loop !166 343: ; preds = %.lr.ph118, %.loopexit - %indvars.iv156 = phi i64 [ 0, %.lr.ph118 ], [ %indvars.iv.next157, %.loopexit ] + %indvars.iv156 = phi i64 [ 0, %.lr.ph116 ], [ %indvars.iv.next157, %.loopexit ] %344 = load ptr, ptr %105, align 8, !tbaa !120 %345 = getelementptr inbounds nuw ptr, ptr %344, i64 %indvars.iv156 %346 = load ptr, ptr %345, align 8, !tbaa !122 @@ -2103,7 +2104,7 @@ flush_put_bits.exit.i63: ; preds = %.lr.ph329.i, %.preh br i1 %441, label %ff_iamf_get_param_definition.exit.i, label %.lr.ph331.i .lr.ph331.i: ; preds = %flush_put_bits.exit.i63, %.lr.ph331.i - %indvars.iv.i330.i = phi i64 [ %indvars.iv.next.i.i66, %.lr.ph331.i ], [ 0, %flush_put_bits.exit.i63 ] + %indvars.iv.i330.i = phi i64 [ %indvars.iv.next.i.i66, %.lr.ph331.i ], [ 0, %flush_put_bits.exit.i61 ] %indvars.iv.next.i.i66 = add nuw nsw i64 %indvars.iv.i330.i, 1 %exitcond.not.i.i67 = icmp ne i64 %indvars.iv.next.i.i66, %wide.trip.count.i.i65 call void @llvm.assume(i1 %exitcond.not.i.i67) @@ -2117,7 +2118,7 @@ flush_put_bits.exit.i63: ; preds = %.lr.ph329.i, %.preh br i1 %448, label %ff_iamf_get_param_definition.exit.i, label %.lr.ph331.i ff_iamf_get_param_definition.exit.i: ; preds = %.lr.ph331.i, %flush_put_bits.exit.i63 - %.val.i68 = phi ptr [ %438, %flush_put_bits.exit.i63 ], [ %445, %.lr.ph331.i ] + %.val.i68 = phi ptr [ %438, %flush_put_bits.exit.i61 ], [ %445, %.lr.ph331.i ] %449 = load ptr, ptr %5, align 8, !tbaa !148 call void @ffio_write_leb(ptr noundef %449, i32 noundef %432) #9 %450 = getelementptr inbounds nuw i8, ptr %.val.i68, i64 36 @@ -2492,7 +2493,7 @@ iamf_write_mixing_presentation.exit.thread: ; preds = %343, %.thread287.i, br i1 %.not51, label %343, label %.loopexit77, !llvm.loop !201 .loopexit77: ; preds = %.loopexit, %.preheader, %iamf_write_mixing_presentation.exit.thread, %.thread73, %.thread - %.145 = phi i32 [ %.0.i.ph, %.thread ], [ %.0.i53.ph, %.thread73 ], [ %.0.i62.ph, %iamf_write_mixing_presentation.exit.thread ], [ 0, %.preheader ], [ 0, %.loopexit ] + %.145 = phi i32 [ %.0.i.ph, %.thread ], [ %.0.i53.ph, %.thread71 ], [ %.0.i62.ph, %iamf_write_mixing_presentation.exit.thread ], [ 0, %.preheader ], [ 0, %.loopexit ] ret i32 %.145 } diff --git a/bench/ffmpeg/optimized/matroskadec.ll b/bench/ffmpeg/optimized/matroskadec.ll index 5fd422ad069..598d4459746 100644 --- a/bench/ffmpeg/optimized/matroskadec.ll +++ b/bench/ffmpeg/optimized/matroskadec.ll @@ -1563,41 +1563,36 @@ define internal range(i32 0, 101) i32 @matroska_probe(ptr noundef readonly captu %.pre-phi83 = phi i64 [ %38, %34 ], [ %.pre82, %31 ] %.pre-phi81 = phi i64 [ %37, %34 ], [ %.pre80, %31 ] %.145 = phi i64 [ %.044.lcssa, %34 ], [ %33, %31 ] - %41 = zext nneg i32 %.042.lcssa8790 to i64 - %42 = add i64 %.145, %41 - %43 = add i64 %42, 5 - br label %44 - -44: ; preds = %40, %.loopexit - %45 = phi i1 [ true, %40 ], [ false, %.loopexit ] - %indvars.iv77 = phi i64 [ 0, %40 ], [ 1, %.loopexit ] - %46 = getelementptr inbounds nuw [2 x ptr], ptr @matroska_doctypes, i64 0, i64 %indvars.iv77 - %47 = load ptr, ptr %46, align 8, !tbaa !125 - %48 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %47) #16 - %49 = icmp ult i64 %.145, %48 - %50 = sub i64 %.pre-phi83, %48 + br label %41 + +41:; preds = %40, %.loopexit + %42 = phi i1 [ true, %40 ], [ false, %.loopexit ] + %indvars.iv76 = phi i64 [ 0, %40 ], [ 1, %.loopexit ] + %43 = getelementptr inbounds nuw [2 x ptr], ptr @matroska_doctypes, i64 0, i64 %indvars.iv76 + %44 = load ptr, ptr %43, align 8, !tbaa !125 + %45 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %44) #16 + %46 = icmp ult i64 %.145, %45 + br i1 %46, label %.loopexit, label %47 + +47:; preds = %41 + %50 = sub i64 %.pre-phi83, %45 %.not5064 = icmp ult i64 %50, %.pre-phi81 - %or.cond95 = select i1 %49, i1 true, i1 %.not5064 - br i1 %or.cond95, label %.loopexit, label %.lr.ph67.preheader - -.lr.ph67.preheader: ; preds = %44 - %51 = sub i64 %43, %48 - br label %.lr.ph67 - -52: ; preds = %.lr.ph67 - %indvars.iv.next74 = add nuw i64 %indvars.iv73, 1 - %exitcond76 = icmp eq i64 %indvars.iv.next74, %51 - br i1 %exitcond76, label %.loopexit, label %.lr.ph67, !llvm.loop !133 - -.lr.ph67: ; preds = %.lr.ph67.preheader, %52 - %indvars.iv73 = phi i64 [ %.pre-phi81, %.lr.ph67.preheader ], [ %indvars.iv.next74, %52 ] - %53 = getelementptr inbounds nuw i8, ptr %3, i64 %indvars.iv73 - %bcmp = tail call i32 @bcmp(ptr nonnull %53, ptr nonnull %47, i64 %48) + br i1 %.not5064, label %.loopexit, label %52 + +49: ; preds = %.lr.ph67 + %indvars.iv.next74 = add nuw nsw i64 %indvars.iv73, 1 + %.not50.not = icmp ugt i64 %48, %indvars.iv73 + br i1 %.not50.not, label %.lr.ph67, label %.loopexit, !llvm.loop !133 + +52: ; preds = %47, %49 + %indvars.iv73 = phi i64 [ %indvars.iv.next74, %49 ], [ %.pre-phi81, %47 ] + %50 = getelementptr inbounds nuw i8, ptr %3, i64 %indvars.iv73 + %bcmp = tail call i32 @bcmp(ptr nonnull %50, ptr nonnull %44, i64 %45) %.not51 = icmp eq i32 %bcmp, 0 - br i1 %.not51, label %.loopexit54, label %52 + br i1 %.not51, label %.loopexit54, label %49 -.loopexit: ; preds = %52, %44 - br i1 %45, label %44, label %.loopexit54, !llvm.loop !134 +.loopexit: ; preds = %49, %47, %41 + br i1 %42, label %41, label %.loopexit54, !llvm.loop !134 .loopexit54: ; preds = %.loopexit, %.lr.ph67, %34, %.critedge, %1 %.0 = phi i32 [ 0, %1 ], [ 0, %.critedge ], [ 0, %34 ], [ 100, %.lr.ph67 ], [ 50, %.loopexit ] diff --git a/bench/folly/optimized/JSONSchema.ll b/bench/folly/optimized/JSONSchema.ll index d6cecab1b2c..8cc0031595f 100644 --- a/bench/folly/optimized/JSONSchema.ll +++ b/bench/folly/optimized/JSONSchema.ll @@ -16042,17 +16042,12 @@ _ZN5folly5splitIA2_cNS_5RangeIPKcEESt6vectorINSt7__cxx1112basic_stringIcSt11char br i1 %.not2835.i.i.i, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i, label %.lr.ph.preheader.i.i.i .lr.ph.preheader.i.i.i: ; preds = %133, %.critedge15.i.i.i - %indvars.iv.in = phi i64 [ %indvars.iv, %.critedge15.i.i.i ], [ %137, %133 ] %.sroa.018.036.i.i.i = phi ptr [ %145, %.critedge15.i.i.i ], [ %135, %133 ] - %indvars.iv = add i64 %indvars.iv.in, -1 - %.not1378 = icmp eq i64 %indvars.iv, 0 - %139 = select i1 %.not1378, i64 1, i64 2 - %scevgep = getelementptr i8, ptr %.sroa.018.036.i.i.i, i64 %139 br label %.lr.ph.i.i.i .lr.ph.i.i.i: ; preds = %143, %.lr.ph.preheader.i.i.i - %.01230.i.i.i.idx = phi i64 [ %.01230.i.i.i.add, %143 ], [ 0, %.lr.ph.preheader.i.i.i ] - %.sroa.0.029.i.i.i = phi ptr [ %144, %143 ], [ %.sroa.018.036.i.i.i, %.lr.ph.preheader.i.i.i ] + %.01230.i.i.i.idx = phi i64 [ %.01230.i.i.i.add, %142 ], [ 0, %.lr.ph.preheader.i.i.i ] + %.sroa.0.029.i.i.i = phi ptr [ %144, %142 ], [ %.sroa.018.036.i.i.i, %.lr.ph.preheader.i.i.i ] %.01230.i.i.i.ptr.ptr = getelementptr inbounds nuw i8, ptr @.str.33, i64 %.01230.i.i.i.idx %140 = load i8, ptr %.sroa.0.029.i.i.i, align 1, !tbaa !16 %141 = load i8, ptr %.01230.i.i.i.ptr.ptr, align 1, !tbaa !16 @@ -16062,12 +16057,14 @@ _ZN5folly5splitIA2_cNS_5RangeIPKcEESt6vectorINSt7__cxx1112basic_stringIcSt11char 143: ; preds = %.lr.ph.i.i.i %144 = getelementptr inbounds nuw i8, ptr %.sroa.0.029.i.i.i, i64 1 %.01230.i.i.i.add = add nuw nsw i64 %.01230.i.i.i.idx, 1 - %exitcond = icmp eq i64 %.01230.i.i.i.add, %139 - br i1 %exitcond, label %.critedge.i.i.i, label %.lr.ph.i.i.i, !llvm.loop !580 - -.critedge.i.i.i: ; preds = %143, %.lr.ph.i.i.i - %.sroa.0.0.lcssa.ph.i.i.i = phi ptr [ %.sroa.0.029.i.i.i, %.lr.ph.i.i.i ], [ %scevgep, %143 ] - %.012.lcssa.ph.i.i.i.idx = phi i64 [ %.01230.i.i.i.idx, %.lr.ph.i.i.i ], [ %139, %143 ] + %exitcond = icmp eq ptr %143, %138 + %.not.i.i.i223 = icmp eq i64 %.01230.i.i.i.add, 2 + %or.cond.i.i.i = select i1 %144, i1 true, i1 %.not.i.i.i223 + br i1 %or.cond.i.i.i, label %.critedge.i.i.i, label %.lr.ph.i.i.i, !llvm.loop !580 + +.critedge.i.i.i:; preds = %142, %.lr.ph.i.i.i + %.sroa.0.0.lcssa.ph.i.i.i = phi ptr [ %.sroa.0.029.i.i.i, %.lr.ph.i.i.i ], [ %143, %142 ] + %.012.lcssa.ph.i.i.i.idx = phi i64 [ %.01230.i.i.i.idx, %.lr.ph.i.i.i ], [ %.01230.i.i.i.add, %142 ] %.not13.i.i.i = icmp eq i64 %.012.lcssa.ph.i.i.i.idx, 2 br i1 %.not13.i.i.i, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i, label %.critedge15.i.i.i @@ -16089,7 +16086,7 @@ _ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__n store ptr @.str.32, ptr %32, align 8 store ptr getelementptr inbounds nuw (i8, ptr @.str.32, i64 1), ptr %.sroa.34.0..sroa_idx.i.i.i, align 8 invoke void @_ZN5boost9algorithm6detail21find_format_all_impl2INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS1_13first_finderFIPKcNS0_8is_equalEEENS1_13const_formatFINS_14iterator_rangeISB_EEEENSF_IN9__gnu_cxx17__normal_iteratorIPcS8_EEEESG_EEvRT_T0_T1_T2_T3_(ptr noundef nonnull align 8 dereferenceable(32) %134, ptr noundef nonnull byval(%"struct.boost::algorithm::detail::first_finderF") align 8 %33, ptr nonnull @.str.32, ptr nonnull getelementptr inbounds nuw (i8, ptr @.str.32, i64 1), ptr %.sroa.018.036.i.i.i, ptr nonnull %.sroa.0.0.lcssa.ph.i.i.i, ptr noundef nonnull byval(%"class.boost::iterator_range") align 8 %32) - to label %._crit_edge1370 unwind label %171 + to label %._crit_edge1366 unwind label %171 ._crit_edge1370: ; preds = %146 %.pre = load ptr, ptr %35, align 8, !tbaa !579 @@ -16100,9 +16097,9 @@ _ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__n br label %147 147: ; preds = %._crit_edge1370, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i - %148 = phi i64 [ %.pre1373, %._crit_edge1370 ], [ %137, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i ], [ %137, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i ] - %149 = phi ptr [ %.pre1371, %._crit_edge1370 ], [ %135, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i ], [ %135, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i ] - %150 = phi ptr [ %.pre, %._crit_edge1370 ], [ %125, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i ], [ %125, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i ] + %148 = phi i64 [ %.pre1373, %._crit_edge1366 ], [ %137, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i ], [ %137, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i ] + %149 = phi ptr [ %.pre1371, %._crit_edge1366 ], [ %135, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i ], [ %135, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i ] + %150 = phi ptr [ %.pre, %._crit_edge1366 ], [ %125, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i ], [ %125, %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i ] call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) %151 = getelementptr inbounds nuw %"class.std::__cxx11::basic_string", ptr %150, i64 %.01301232 @@ -16114,17 +16111,12 @@ _ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__n br i1 %.not2835.i.i.i225, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i238, label %.lr.ph.preheader.i.i.i227 .lr.ph.preheader.i.i.i227: ; preds = %147, %.critedge15.i.i.i236 - %indvars.iv1366.in = phi i64 [ %indvars.iv1366, %.critedge15.i.i.i236 ], [ %148, %147 ] %.sroa.018.036.i.i.i228 = phi ptr [ %159, %.critedge15.i.i.i236 ], [ %149, %147 ] - %indvars.iv1366 = add i64 %indvars.iv1366.in, -1 - %.not1379 = icmp eq i64 %indvars.iv1366, 0 - %153 = select i1 %.not1379, i64 1, i64 2 - %scevgep1677 = getelementptr i8, ptr %.sroa.018.036.i.i.i228, i64 %153 br label %.lr.ph.i.i.i229 .lr.ph.i.i.i229: ; preds = %157, %.lr.ph.preheader.i.i.i227 - %.01230.i.i.i230.idx = phi i64 [ %.01230.i.i.i230.add, %157 ], [ 0, %.lr.ph.preheader.i.i.i227 ] - %.sroa.0.029.i.i.i231 = phi ptr [ %158, %157 ], [ %.sroa.018.036.i.i.i228, %.lr.ph.preheader.i.i.i227 ] + %.01230.i.i.i230.idx = phi i64 [ %.01230.i.i.i230.add, %156 ], [ 0, %.lr.ph.preheader.i.i.i227 ] + %.sroa.0.029.i.i.i231 = phi ptr [ %158, %156 ], [ %.sroa.018.036.i.i.i228, %.lr.ph.preheader.i.i.i227 ] %.01230.i.i.i230.ptr.ptr = getelementptr inbounds nuw i8, ptr @.str.34, i64 %.01230.i.i.i230.idx %154 = load i8, ptr %.sroa.0.029.i.i.i231, align 1, !tbaa !16 %155 = load i8, ptr %.01230.i.i.i230.ptr.ptr, align 1, !tbaa !16 @@ -16134,12 +16126,14 @@ _ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__n 157: ; preds = %.lr.ph.i.i.i229 %158 = getelementptr inbounds nuw i8, ptr %.sroa.0.029.i.i.i231, i64 1 %.01230.i.i.i230.add = add nuw nsw i64 %.01230.i.i.i230.idx, 1 - %exitcond1369 = icmp eq i64 %.01230.i.i.i230.add, %153 - br i1 %exitcond1369, label %.critedge.i.i.i232, label %.lr.ph.i.i.i229, !llvm.loop !580 - -.critedge.i.i.i232: ; preds = %157, %.lr.ph.i.i.i229 - %.sroa.0.0.lcssa.ph.i.i.i233 = phi ptr [ %.sroa.0.029.i.i.i231, %.lr.ph.i.i.i229 ], [ %scevgep1677, %157 ] - %.012.lcssa.ph.i.i.i234.idx = phi i64 [ %.01230.i.i.i230.idx, %.lr.ph.i.i.i229 ], [ %153, %157 ] + %exitcond1369 = icmp eq ptr %157, %152 + %.not.i.i.i242 = icmp eq i64 %.01230.i.i.i230.add, 2 + %or.cond.i.i.i243 = select i1 %158, i1 true, i1 %.not.i.i.i242 + br i1 %or.cond.i.i.i243, label %.critedge.i.i.i232, label %.lr.ph.i.i.i229, !llvm.loop !580 + +.critedge.i.i.i232:; preds = %156, %.lr.ph.i.i.i229 + %.sroa.0.0.lcssa.ph.i.i.i233 = phi ptr [ %.sroa.0.029.i.i.i231, %.lr.ph.i.i.i229 ], [ %157, %156 ] + %.012.lcssa.ph.i.i.i234.idx = phi i64 [ %.01230.i.i.i230.idx, %.lr.ph.i.i.i229 ], [ %.01230.i.i.i230.add, %156 ] %.not13.i.i.i235 = icmp eq i64 %.012.lcssa.ph.i.i.i234.idx, 2 br i1 %.not13.i.i.i235, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i239, label %.critedge15.i.i.i236 diff --git a/bench/graphviz/optimized/excontext.ll b/bench/graphviz/optimized/excontext.ll index 4434136a384..9fe0fbfc065 100644 --- a/bench/graphviz/optimized/excontext.ll +++ b/bench/graphviz/optimized/excontext.ll @@ -10,13 +10,12 @@ define noundef ptr @excontext(ptr noundef %0, ptr noundef %1, i32 noundef %2) lo %4 = ptrtoint ptr %0 to i64 %5 = getelementptr inbounds nuw i8, ptr %0, i64 792 %6 = load ptr, ptr %5, align 8, !tbaa !3 - %7 = ptrtoint ptr %6 to i64 - %8 = getelementptr inbounds nuw i8, ptr %0, i64 280 - %9 = icmp ugt ptr %6, %8 + %7 = getelementptr inbounds nuw i8, ptr %0, i64 280 + %8 = icmp ugt ptr %6, %7 %.phi.trans.insert = getelementptr inbounds nuw i8, ptr %0, i64 808 %.pre = load i32, ptr %.phi.trans.insert, align 8, !tbaa !22 %10 = icmp eq i32 %.pre, 0 - br i1 %9, label %15, label %11 + br i1 %8, label %15, label %11 11: ; preds = %3 br i1 %10, label %.loopexit, label %.thread @@ -34,23 +33,17 @@ define noundef ptr @excontext(ptr noundef %0, ptr noundef %1, i32 noundef %2) lo br i1 %10, label %.preheader, label %.preheader70 .preheader70: ; preds = %.thread, %15 - %19 = phi ptr [ %14, %.thread ], [ %18, %15 ] - %20 = phi i64 [ %12, %.thread ], [ %16, %15 ] + %19 = phi ptr [ %14, %.thread ], [ %18, %14 ] + %20 = phi i64 [ %12, %.thread ], [ %16, %14 ] %21 = getelementptr inbounds nuw i8, ptr %0, i64 808 %.071 = getelementptr inbounds nuw i8, ptr %6, i64 1 %22 = icmp ult ptr %.071, %5 br i1 %22, label %.lr.ph.preheader, label %.critedge -.lr.ph.preheader: ; preds = %.preheader70 - %23 = add i64 %4, 792 - %24 = sub i64 %23, %7 - %scevgep = getelementptr i8, ptr %6, i64 %24 - br label %.lr.ph - -.lr.ph: ; preds = %.lr.ph.preheader, %gv_isspace.exit - %.072 = phi ptr [ %.0, %gv_isspace.exit ], [ %.071, %.lr.ph.preheader ] - %25 = load i8, ptr %.072, align 1, !tbaa !23 - switch i8 %25, label %.critedge [ +.lr.ph.preheader: ; preds = %.preheader70, %gv_isspace.exit + %.072 = phi ptr [ %.0, %gv_isspace.exit ], [ %.071, %.preheader70 ] + %22 = load i8, ptr %.072, align 1, !tbaa !23 + switch i8 %22, label %.critedge [ i8 9, label %gv_isspace.exit i8 10, label %gv_isspace.exit i8 11, label %gv_isspace.exit @@ -61,11 +54,11 @@ define noundef ptr @excontext(ptr noundef %0, ptr noundef %1, i32 noundef %2) lo gv_isspace.exit: ; preds = %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph %.0 = getelementptr inbounds nuw i8, ptr %.072, i64 1 - %exitcond.not = icmp eq ptr %.0, %scevgep - br i1 %exitcond.not, label %.critedge, label %.lr.ph, !llvm.loop !24 + %exitcond.not = icmp ult ptr %.0, %5 + br i1 %exitcond.not, label %.lr.ph, label %.critedge, !llvm.loop !24 .critedge: ; preds = %gv_isspace.exit, %.lr.ph, %.preheader70 - %.0.lcssa = phi ptr [ %.071, %.preheader70 ], [ %.072, %.lr.ph ], [ %scevgep, %gv_isspace.exit ] + %.0.lcssa = phi ptr [ %.071, %.preheader70 ], [ %.072, %.lr.ph ], [ %.0, %gv_isspace.exit ] %26 = ptrtoint ptr %.0.lcssa to i64 %27 = ptrtoint ptr %.071 to i64 %28 = add i64 %27, -4294966779 @@ -83,22 +76,15 @@ gv_isspace.exit: ; preds = %.lr.ph, %.lr.ph, %. %38 = icmp ult ptr %.1, %5 br i1 %38, label %.lr.ph77.preheader, label %thread-pre-split.thread108 -.lr.ph77.preheader: ; preds = %.critedge - %.192 = ptrtoint ptr %.1 to i64 - %39 = add i64 %4, 792 - %40 = sub i64 %39, %.192 - %scevgep93 = getelementptr i8, ptr %.1, i64 %40 - br label %.lr.ph77 - -.lr.ph77: ; preds = %.lr.ph77.preheader, %.lr.ph77 - %.276 = phi ptr [ %41, %.lr.ph77 ], [ %.1, %.lr.ph77.preheader ] - %.25375 = phi ptr [ %43, %.lr.ph77 ], [ %1, %.lr.ph77.preheader ] - %41 = getelementptr inbounds nuw i8, ptr %.276, i64 1 - %42 = load i8, ptr %.276, align 1, !tbaa !23 - %43 = getelementptr inbounds nuw i8, ptr %.25375, i64 1 - store i8 %42, ptr %.25375, align 1, !tbaa !23 - %exitcond94.not = icmp eq ptr %41, %scevgep93 - br i1 %exitcond94.not, label %thread-pre-split, label %.lr.ph77, !llvm.loop !26 +.lr.ph77.preheader: ; preds = %.critedge, %.lr.ph77 + %.276 = phi ptr [ %37, %.lr.ph77 ], [ %.1, %.critedge ] + %.25375 = phi ptr [ %39, %.lr.ph77 ], [ %1, %.critedge ] + %37 = getelementptr inbounds nuw i8, ptr %.276, i64 1 + %38 = load i8, ptr %.276, align 1, !tbaa !23 + %39 = getelementptr inbounds nuw i8, ptr %.25375, i64 1 + store i8 %38, ptr %.25375, align 1, !tbaa !23 + %40 = icmp ult ptr %37, %5 + br i1 %40, label %.lr.ph77, label %thread-pre-split, !llvm.loop !26 thread-pre-split: ; preds = %.lr.ph77 %.pr.pre = load i32, ptr %21, align 8, !tbaa !22 @@ -106,11 +92,11 @@ thread-pre-split: ; preds = %.lr.ph77 br i1 %44, label %.preheader, label %thread-pre-split.thread108 .preheader: ; preds = %15, %thread-pre-split - %.152107 = phi ptr [ %43, %thread-pre-split ], [ %1, %15 ] - %45 = phi ptr [ %19, %thread-pre-split ], [ %18, %15 ] + %.152107 = phi ptr [ %39, %thread-pre-split ], [ %1, %14 ] + %45 = phi ptr [ %19, %thread-pre-split ], [ %18, %14 ] %46 = load ptr, ptr %5, align 8, !tbaa !3 %47 = ptrtoint ptr %46 to i64 - %48 = icmp ult ptr %8, %46 + %48 = icmp ult ptr %7, %46 br i1 %48, label %.lr.ph80.preheader, label %.critedge2 .lr.ph80.preheader: ; preds = %.preheader @@ -119,14 +105,14 @@ thread-pre-split: ; preds = %.lr.ph77 br label %.lr.ph80 thread-pre-split.thread108: ; preds = %.critedge, %thread-pre-split - %.152111 = phi ptr [ %43, %thread-pre-split ], [ %1, %.critedge ] + %.152111 = phi ptr [ %39, %thread-pre-split ], [ %1, %.critedge ] store i32 0, ptr %21, align 8, !tbaa !22 %.pre101 = load ptr, ptr %5, align 8, !tbaa !3 %.pre102 = ptrtoint ptr %.pre101 to i64 br label %.critedge2 .lr.ph80: ; preds = %.lr.ph80.preheader, %51 - %.479 = phi ptr [ %52, %51 ], [ %8, %.lr.ph80.preheader ] + %.479 = phi ptr [ %52, %48 ], [ %7, %.lr.ph80.preheader ] %50 = load i8, ptr %.479, align 1, !tbaa !23 switch i8 %50, label %.critedge2 [ i8 9, label %51 @@ -143,11 +129,11 @@ thread-pre-split.thread108: ; preds = %.critedge, %thread- br i1 %exitcond96.not, label %.critedge2, label %.lr.ph80, !llvm.loop !27 .critedge2: ; preds = %51, %.lr.ph80, %.preheader, %thread-pre-split.thread108 - %.152106 = phi ptr [ %.152107, %.preheader ], [ %.152111, %thread-pre-split.thread108 ], [ %.152107, %.lr.ph80 ], [ %.152107, %51 ] - %53 = phi ptr [ %45, %.preheader ], [ %19, %thread-pre-split.thread108 ], [ %45, %.lr.ph80 ], [ %45, %51 ] - %.pre-phi = phi i64 [ %47, %.preheader ], [ %.pre102, %thread-pre-split.thread108 ], [ %47, %.lr.ph80 ], [ %47, %51 ] - %54 = phi ptr [ %46, %.preheader ], [ %.pre101, %thread-pre-split.thread108 ], [ %46, %.lr.ph80 ], [ %46, %51 ] - %.3 = phi ptr [ %8, %.preheader ], [ %8, %thread-pre-split.thread108 ], [ %scevgep95, %51 ], [ %.479, %.lr.ph80 ] + %.152106 = phi ptr [ %.152107, %.preheader ], [ %.152111, %thread-pre-split.thread103 ], [ %.152107, %.lr.ph80 ], [ %.152107, %48 ] + %53 = phi ptr [ %45, %.preheader ], [ %19, %thread-pre-split.thread103 ], [ %45, %.lr.ph80 ], [ %45, %48 ] + %.pre-phi = phi i64 [ %47, %.preheader ], [ %.pre102, %thread-pre-split.thread103 ], [ %47, %.lr.ph80 ], [ %47, %48 ] + %54 = phi ptr [ %46, %.preheader ], [ %.pre101, %thread-pre-split.thread103 ], [ %46, %.lr.ph80 ], [ %46, %48 ] + %.3 = phi ptr [ %7, %.preheader ], [ %7, %thread-pre-split.thread103 ], [ %scevgep95, %48 ], [ %.479, %.lr.ph80 ] %55 = ptrtoint ptr %.3 to i64 %56 = sub i64 %.pre-phi, %55 %57 = ptrtoint ptr %53 to i64 @@ -175,13 +161,13 @@ thread-pre-split.thread108: ; preds = %.critedge, %thread- ._crit_edge: ; preds = %.lr.ph86, %.critedge2 %.354.lcssa = phi ptr [ %.152106, %.critedge2 ], [ %66, %.lr.ph86 ] - store ptr %8, ptr %5, align 8, !tbaa !3 + store ptr %7, ptr %5, align 8, !tbaa !3 store i8 60, ptr %.354.lcssa, align 1, !tbaa !23 br label %69 69: ; preds = %._crit_edge, %69 - %.789.idx = phi i64 [ 0, %._crit_edge ], [ %.789.add, %69 ] - %.45588 = phi ptr [ %.354.lcssa, %._crit_edge ], [ %70, %69 ] + %.789.idx = phi i64 [ 0, %._crit_edge ], [ %.789.add, %66 ] + %.45588 = phi ptr [ %.354.lcssa, %._crit_edge ], [ %70, %66 ] %.789.add = add nuw nsw i64 %.789.idx, 1 %.ptr = getelementptr inbounds nuw i8, ptr @.str, i64 %.789.add %70 = getelementptr inbounds nuw i8, ptr %.45588, i64 1 @@ -191,7 +177,7 @@ thread-pre-split.thread108: ; preds = %.critedge, %thread- br i1 %exitcond98, label %.loopexit, label %69, !llvm.loop !29 .loopexit: ; preds = %69, %11 - %.051 = phi ptr [ %1, %11 ], [ %70, %69 ] + %.051 = phi ptr [ %1, %10 ], [ %70, %66 ] store i8 0, ptr %.051, align 1, !tbaa !23 ret ptr %.051 } diff --git a/bench/graphviz/optimized/gvplugin_vt.ll b/bench/graphviz/optimized/gvplugin_vt.ll index 62ca01b33b7..8f21a751d44 100644 --- a/bench/graphviz/optimized/gvplugin_vt.ll +++ b/bench/graphviz/optimized/gvplugin_vt.ll @@ -592,9 +592,8 @@ define internal fastcc void @processNup(ptr noundef %0, i32 noundef range(i32 2, ret void .preheader61: ; preds = %.preheader62, %._crit_edge69 - %indvars.iv78 = phi i32 [ %indvars.iv.next79, %._crit_edge69 ], [ -1, %.preheader62 ] - %11 = phi i32 [ %64, %._crit_edge69 ], [ %10, %.preheader62 ] - %.05271 = phi i32 [ %63, %._crit_edge69 ], [ 0, %.preheader62 ] + %indvars.iv78 = phi i32 [ %68, %._crit_edge69 ], [ %10, %.preheader62 ] + %11 = phi i32 [ %67, %._crit_edge69 ], [ 0, %.preheader62 ] %12 = load i32, ptr %6, align 4, !tbaa !30 %13 = icmp ult i32 %.05173, %12 %14 = icmp ult i32 %.05271, %11 @@ -602,14 +601,14 @@ define internal fastcc void @processNup(ptr noundef %0, i32 noundef range(i32 2, br i1 %or.cond, label %.preheader.us.preheader, label %._crit_edge69 .preheader.us.preheader: ; preds = %.preheader61 - %15 = sub i32 0, %indvars.iv78 - %.not83 = icmp eq i32 %11, %15 - %wide.trip.count = select i1 %.not83, i64 1, i64 2 + %15 = zext i32 %indvars.iv78 to i64 + %16 = or disjoint i32 %11, 1 + %invariant.op81 = zext i32 %16 to i64 br label %.preheader.us .preheader.us: ; preds = %.preheader.us.preheader, %._crit_edge.us - %indvars.iv80 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next81, %._crit_edge.us ] - %.05368.us = phi i32 [ 0, %.preheader.us.preheader ], [ %50, %._crit_edge.us ] + %indvars.iv80 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next79, %._crit_edge.us ] + %.05368.us = phi i32 [ 0, %.preheader.us.preheader ], [ %52, %._crit_edge.us ] %16 = trunc i64 %indvars.iv80 to i32 %17 = add i32 %.05173, %16 %18 = mul i32 %17, %11 @@ -618,51 +617,53 @@ define internal fastcc void @processNup(ptr noundef %0, i32 noundef range(i32 2, br label %20 20: ; preds = %.preheader.us, %20 - %indvars.iv = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next, %20 ] - %.166.us = phi i32 [ %.05368.us, %.preheader.us ], [ %50, %20 ] - %21 = trunc i64 %indvars.iv to i32 - %.reass = add i32 %invariant.op, %21 - %22 = shl i32 %.reass, 2 - %23 = or disjoint i32 %22, 2 - %24 = zext i32 %23 to i64 - %25 = getelementptr inbounds nuw i8, ptr %5, i64 %24 - %26 = load i8, ptr %25, align 1, !tbaa !34 - %27 = or disjoint i32 %22, 1 - %28 = zext i32 %27 to i64 - %29 = getelementptr inbounds nuw i8, ptr %5, i64 %28 - %30 = load i8, ptr %29, align 1, !tbaa !34 - %31 = zext i32 %22 to i64 - %32 = getelementptr inbounds nuw i8, ptr %5, i64 %31 - %33 = load i8, ptr %32, align 1, !tbaa !34 - %34 = uitofp i8 %26 to double - %35 = fdiv double %34, 2.550000e+02 - %36 = uitofp i8 %30 to double + %indvars.iv = phi i1 [ true, %.preheader.us ], [ false, %21 ] + %.166.us = phi i64 [ 0, %.preheader.us ], [ 1, %21 ] + %.166.us = phi i32 [ %.05368.us, %.preheader.us ], [ %52, %21 ] + %23 = trunc nuw nsw i64 %indvars.iv to i32 + %.reass = add i32 %invariant.op, %23 + %24 = shl i32 %.reass, 2 + %25 = or disjoint i32 %24, 2 + %26 = zext i32 %25 to i64 + %27 = getelementptr inbounds nuw i8, ptr %5, i64 %26 + %28 = load i8, ptr %27, align 1, !tbaa !34 + %29 = or disjoint i32 %24, 1 + %30 = zext i32 %29 to i64 + %31 = getelementptr inbounds nuw i8, ptr %5, i64 %30 + %32 = load i8, ptr %31, align 1, !tbaa !34 + %33 = zext i32 %24 to i64 + %34 = getelementptr inbounds nuw i8, ptr %5, i64 %33 + %35 = load i8, ptr %34, align 1, !tbaa !34 + %36 = uitofp i8 %28 to double %37 = fdiv double %36, 2.550000e+02 - %38 = uitofp i8 %33 to double + %38 = uitofp i8 %32 to double %39 = fdiv double %38, 2.550000e+02 - %40 = fmul double %37, 7.152000e-01 - %41 = tail call double @llvm.fmuladd.f64(double %35, double 2.126000e-01, double %40) - %42 = tail call double @llvm.fmuladd.f64(double %39, double 7.220000e-02, double %41) - %43 = fmul double %42, 2.559990e+02 - %44 = fptoui double %43 to i32 - %45 = icmp ugt i32 %44, 239 - %46 = zext i1 %45 to i32 - %47 = add nuw nsw i64 %indvars.iv, %19 - %48 = trunc nuw nsw i64 %47 to i32 - %49 = shl nuw nsw i32 %46, %48 - %50 = or i32 %49, %.166.us - %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %._crit_edge.us, label %20, !llvm.loop !37 - -._crit_edge.us: ; preds = %20 - %indvars.iv.next81 = add nuw nsw i64 %indvars.iv80, 1 - %indvars = trunc i64 %indvars.iv.next81 to i32 - %51 = add i32 %.05173, %indvars - %52 = icmp ult i32 %51, %12 - %53 = icmp samesign ult i64 %indvars.iv.next81, %9 - %54 = select i1 %52, i1 %53, i1 false - br i1 %54, label %.preheader.us, label %._crit_edge69.loopexit, !llvm.loop !38 + %40 = uitofp i8 %35 to double + %41 = fdiv double %40, 2.550000e+02 + %42 = fmul double %39, 7.152000e-01 + %43 = tail call double @llvm.fmuladd.f64(double %37, double 2.126000e-01, double %42) + %44 = tail call double @llvm.fmuladd.f64(double %41, double 7.220000e-02, double %43) + %45 = fmul double %44, 2.559990e+02 + %46 = fptoui double %45 to i32 + %47 = icmp ugt i32 %46, 239 + %48 = zext i1 %47 to i32 + %49 = or disjoint i64 %.166.us, %20 + %50 = trunc nuw nsw i64 %49 to i32 + %51 = shl nuw nsw i32 %48, %50 + %52 = or i32 %51, %.166.us + %.reass82 = add nuw nsw i64 %.166.us, %invariant.op81 + %53 = icmp samesign ult i64 %.reass82, %15 + %54 = and i1 %53, %22 + br i1 %54, label %20, label %._crit_edge.us, !llvm.loop !37 + +._crit_edge.us:; preds = %21 + %indvars.iv.next79 = add nuw nsw i64 %indvars.iv78, 1 + %indvars = trunc i64 %indvars.iv.next79 to i32 + %55 = add i32 %.05173, %indvars + %56 = icmp ult i32 %55, %12 + %57 = icmp samesign ult i64 %indvars.iv.next79, %9 + %58 = select i1 %56, i1 %57, i1 false + br i1 %58, label %.preheader.us, label %._crit_edge69.loopexit, !llvm.loop !38 ._crit_edge: ; preds = %._crit_edge69, %.preheader62 %55 = tail call i32 @gvputc(ptr noundef nonnull %0, i32 noundef 10) #4 @@ -672,7 +673,7 @@ define internal fastcc void @processNup(ptr noundef %0, i32 noundef range(i32 2, br i1 %58, label %.preheader62, label %._crit_edge74, !llvm.loop !39 ._crit_edge69.loopexit: ; preds = %._crit_edge.us - %59 = zext i32 %50 to i64 + %59 = zext i32 %52 to i64 br label %._crit_edge69 ._crit_edge69: ; preds = %._crit_edge69.loopexit, %.preheader61 @@ -683,8 +684,7 @@ define internal fastcc void @processNup(ptr noundef %0, i32 noundef range(i32 2, %63 = add i32 %.05271, 2 %64 = load i32, ptr %8, align 8, !tbaa !31 %65 = icmp ult i32 %63, %64 - %indvars.iv.next79 = add i32 %indvars.iv78, -2 - br i1 %65, label %.preheader61, label %._crit_edge, !llvm.loop !41 + br i1 %69, label %.preheader61, label %._crit_edge, !llvm.loop !41 } declare i32 @gvputs(ptr noundef, ptr noundef) local_unnamed_addr #1 diff --git a/bench/hermes/optimized/hbc-attribute.ll b/bench/hermes/optimized/hbc-attribute.ll index 4f300be700c..cd7b979744f 100644 --- a/bench/hermes/optimized/hbc-attribute.ll +++ b/bench/hermes/optimized/hbc-attribute.ll @@ -4515,9 +4515,6 @@ for.body.lr.ph: ; preds = %while.body %keyTag.sroa.3.0.extract.trunc = trunc nuw i64 %keyTag.sroa.3.0.extract.shift to i32 %conv3.i = and i32 %keyTag.sroa.3.0.extract.trunc, 255 %2 = call i32 @llvm.fshl.i32(i32 %conv3.i, i32 %conv3.i, i32 28) - %3 = add i32 %count.addr.093, -1 - %4 = add nsw i32 %keyTag.sroa.0.0.extract.trunc, -1 - %umin = call i32 @llvm.umin.i32(i32 %3, i32 %4) br label %for.body for.body: ; preds = %for.body.lr.ph, %_ZN12_GLOBAL__N_112UsageCounter22countSerializedLiteralEhPKhPj.exit @@ -4572,19 +4569,19 @@ _ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS %retval.0.i.i.i78 = phi ptr [ %call.i2.i.i.i74, %if.end.i.i.i73 ], [ %7, %if.end3.i71 ] %second.i7.i79 = getelementptr inbounds nuw i8, ptr %retval.0.i.i.i78, i64 24 store i32 1, ptr %second.i7.i79, align 4 + %7 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %7) #22 + %8 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %8, ptr nonnull @.str.28, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %8, ptr nonnull @.str.43, i64 29) #22 %9 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %9) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %9, ptr nonnull @.str.29, i64 8) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %9, i32 noundef %conv.i) #22 %10 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %10, ptr nonnull @.str.28, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %10, ptr nonnull @.str.43, i64 29) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %10, ptr nonnull @.str.30, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %10, i32 noundef 1) #22 %11 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %11, ptr nonnull @.str.29, i64 8) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %11, i32 noundef %conv.i) #22 - %12 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %12, ptr nonnull @.str.30, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %12, i32 noundef 1) #22 - %13 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %13) #22 + call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %11) #22 br label %_ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit81 _ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit81: ; preds = %sw.bb.i, %_ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS4_EENS_6detail12DenseMapPairIS4_jEEEES4_jS6_S9_EixERKS4_.exit.i77 @@ -4626,19 +4623,19 @@ _ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS %retval.0.i.i.i60 = phi ptr [ %call.i2.i.i.i56, %if.end.i.i.i55 ], [ %14, %if.end3.i53 ] %second.i7.i61 = getelementptr inbounds nuw i8, ptr %retval.0.i.i.i60, i64 24 store i32 2, ptr %second.i7.i61, align 4 + %14 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %14) #22 + %15 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %15, ptr nonnull @.str.28, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %15, ptr nonnull @.str.44, i64 30) #22 %16 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %16) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %16, ptr nonnull @.str.29, i64 8) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %16, i32 noundef %conv.i) #22 %17 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %17, ptr nonnull @.str.28, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %17, ptr nonnull @.str.44, i64 30) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %17, ptr nonnull @.str.30, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %17, i32 noundef 2) #22 %18 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %18, ptr nonnull @.str.29, i64 8) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %18, i32 noundef %conv.i) #22 - %19 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %19, ptr nonnull @.str.30, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %19, i32 noundef 2) #22 - %20 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %20) #22 + call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %18) #22 br label %_ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit63 _ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit63: ; preds = %sw.bb7.i, %_ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS4_EENS_6detail12DenseMapPairIS4_jEEEES4_jS6_S9_EixERKS4_.exit.i59 @@ -4680,19 +4677,19 @@ _ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS %retval.0.i.i.i42 = phi ptr [ %call.i2.i.i.i38, %if.end.i.i.i37 ], [ %21, %if.end3.i35 ] %second.i7.i43 = getelementptr inbounds nuw i8, ptr %retval.0.i.i.i42, i64 24 store i32 4, ptr %second.i7.i43, align 4 + %21 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %21) #22 + %22 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %22, ptr nonnull @.str.28, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %22, ptr nonnull @.str.45, i64 29) #22 %23 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %23) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %23, ptr nonnull @.str.29, i64 8) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %23, i32 noundef %conv.i) #22 %24 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %24, ptr nonnull @.str.28, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %24, ptr nonnull @.str.45, i64 29) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %24, ptr nonnull @.str.30, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %24, i32 noundef 4) #22 %25 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %25, ptr nonnull @.str.29, i64 8) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %25, i32 noundef %conv.i) #22 - %26 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %26, ptr nonnull @.str.30, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %26, i32 noundef 4) #22 - %27 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %27) #22 + call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %25) #22 br label %_ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit45 _ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit45: ; preds = %sw.bb15.i, %_ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS4_EENS_6detail12DenseMapPairIS4_jEEEES4_jS6_S9_EixERKS4_.exit.i41 @@ -4731,19 +4728,19 @@ _ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS %retval.0.i.i.i24 = phi ptr [ %call.i2.i.i.i20, %if.end.i.i.i19 ], [ %28, %if.end3.i17 ] %second.i7.i25 = getelementptr inbounds nuw i8, ptr %retval.0.i.i.i24, i64 24 store i32 8, ptr %second.i7.i25, align 4 + %28 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %28) #22 + %29 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %29, ptr nonnull @.str.28, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %29, ptr nonnull @.str.46, i64 25) #22 %30 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %30) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %30, ptr nonnull @.str.29, i64 8) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %30, i32 noundef %conv.i) #22 %31 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %31, ptr nonnull @.str.28, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %31, ptr nonnull @.str.46, i64 25) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %31, ptr nonnull @.str.30, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %31, i32 noundef 8) #22 %32 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %32, ptr nonnull @.str.29, i64 8) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %32, i32 noundef %conv.i) #22 - %33 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %33, ptr nonnull @.str.30, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %33, i32 noundef 8) #22 - %34 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %34) #22 + call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %32) #22 br label %_ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit27 _ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit27: ; preds = %_ZN4llvh9StringRefC2EPKc.exit58.i, %_ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS4_EENS_6detail12DenseMapPairIS4_jEEEES4_jS6_S9_EixERKS4_.exit.i23 @@ -4781,19 +4778,19 @@ _ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS %retval.0.i.i.i = phi ptr [ %call.i2.i.i.i, %if.end.i.i.i ], [ %35, %if.end3.i ] %second.i7.i = getelementptr inbounds nuw i8, ptr %retval.0.i.i.i, i64 24 store i32 4, ptr %second.i7.i, align 4 + %35 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %35) #22 + %36 = load ptr, ptr %emitter_.i, align 8 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %36, ptr nonnull @.str.28, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %36, ptr nonnull @.str.47, i64 22) #22 %37 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter8openDictEv(ptr noundef nonnull align 8 dereferenceable(72) %37) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %37, ptr nonnull @.str.29, i64 8) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %37, i32 noundef %conv.i) #22 %38 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %38, ptr nonnull @.str.28, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %38, ptr nonnull @.str.47, i64 22) #22 + call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %38, ptr nonnull @.str.30, i64 4) #22 + call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %38, i32 noundef 4) #22 %39 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %39, ptr nonnull @.str.29, i64 8) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %39, i32 noundef %conv.i) #22 - %40 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter7emitKeyEN4llvh9StringRefE(ptr noundef nonnull align 8 dereferenceable(72) %40, ptr nonnull @.str.30, i64 4) #22 - call void @_ZN6hermes11JSONEmitter9emitValueEj(ptr noundef nonnull align 8 dereferenceable(72) %40, i32 noundef 4) #22 - %41 = load ptr, ptr %emitter_.i, align 8 - call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %41) #22 + call void @_ZN6hermes11JSONEmitter9closeDictEv(ptr noundef nonnull align 8 dereferenceable(72) %39) #22 br label %_ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit _ZN12_GLOBAL__N_112UsageCounter12appendRecordEN4llvh9StringRefEjj.exit: ; preds = %_ZN4llvh9StringRefC2EPKc.exit68.i, %_ZN4llvh12DenseMapBaseINS_8DenseMapISt4pairINS_9StringRefEjEjNS_12DenseMapInfoIS4_EENS_6detail12DenseMapPairIS4_jEEEES4_jS6_S9_EixERKS4_.exit.i @@ -4809,8 +4806,10 @@ _ZN12_GLOBAL__N_112UsageCounter22countSerializedLiteralEhPKhPj.exit: ; preds = % %keyInd.2 = phi i32 [ %keyInd.187, %for.body ], [ %add27.i, %sw.epilog.sink.split.i ] %dec = add nsw i32 %count.addr.188, -1 %inc = add nuw nsw i32 %i.089, 1 - %exitcond.not = icmp eq i32 %i.089, %umin - br i1 %exitcond.not, label %while.cond.loopexit, label %for.body, !llvm.loop !37 + %exitcond.not = icmp slt i32 %inc, %keyTag.sroa.0.0.extract.trunc + %tobool = icmp ne i32 %dec, 0 + %40 = select i1 %cmp8, i1 %tobool, i1 false + br i1 %40, label %for.body, label %while.cond.loopexit, !llvm.loop !37 while.end: ; preds = %while.cond.loopexit, %entry ret void @@ -5014,9 +5013,6 @@ declare void @llvm.lifetime.start.p0(i64 immarg, ptr captures(none)) #21 ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.end.p0(i64 immarg, ptr captures(none)) #21 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umin.i32(i32, i32) #18 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smax.i32(i32, i32) #18 diff --git a/bench/icu/optimized/msgfmt.ll b/bench/icu/optimized/msgfmt.ll index eb64303ecc9..7094af605b0 100644 --- a/bench/icu/optimized/msgfmt.ll +++ b/bench/icu/optimized/msgfmt.ll @@ -1522,8 +1522,8 @@ define noundef zeroext i1 @_ZNK6icu_7713MessageFormateqERKNS_6FormatE(ptr nounde 50: ; preds = %40 %51 = add nuw nsw i32 %.02844, 1 - %exitcond = icmp eq i32 %51, %24 - br i1 %exitcond, label %.critedge, label %31, !llvm.loop !55 + %exitcond = icmp slt i32 %51, %24 + br i1 %exitcond, label %31, label %.critedge, !llvm.loop !55 .critedge: ; preds = %40, %50, %31, %27 %or.cond.not.lcssa = phi i1 [ true, %27 ], [ false, %31 ], [ true, %50 ], [ false, %40 ] diff --git a/bench/libcxx/optimized/locale.ll b/bench/libcxx/optimized/locale.ll index b277b524f31..3fa243da525 100644 --- a/bench/libcxx/optimized/locale.ll +++ b/bench/libcxx/optimized/locale.ll @@ -33460,16 +33460,11 @@ _ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34: ; preds = %106 %114 = icmp ult ptr %111, %113 br i1 %114, label %.lr.ph.preheader, label %._crit_edge -.lr.ph.preheader: ; preds = %_ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34 - %115 = ptrtoint ptr %112 to i64 - %scevgep = getelementptr i8, ptr inttoptr (i64 -1 to ptr), i64 %115 - br label %.lr.ph - -.lr.ph: ; preds = %.lr.ph.preheader, %119 - %.043 = phi ptr [ %120, %119 ], [ %111, %.lr.ph.preheader ] - %116 = load i8, ptr %.043, align 1, !tbaa !4 - %.not = icmp eq i8 %116, %110 - br i1 %.not, label %119, label %._crit_edge +.lr.ph.preheader: ; preds = %_ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34, %118 + %.043 = phi ptr [ %119, %118 ], [ %111, %_ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34 ] + %115 = load i8, ptr %.043, align 1, !tbaa !4 + %.not = icmp eq i8 %115, %110 + br i1 %.not, label %118, label %._crit_edge 117: ; preds = %106 %118 = landingpad { ptr, i32 } @@ -33478,11 +33473,11 @@ _ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34: ; preds = %106 119: ; preds = %.lr.ph %120 = getelementptr inbounds nuw i8, ptr %.043, i64 1 - %exitcond.not = icmp eq ptr %120, %scevgep - br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !211 + %exitcond.not = icmp ult ptr %120, %113 + br i1 %exitcond.not, label %.lr.ph, label %._crit_edge, !llvm.loop !211 ._crit_edge: ; preds = %119, %.lr.ph, %_ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34 - %.0.lcssa = phi ptr [ %111, %_ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34 ], [ %.043, %.lr.ph ], [ %scevgep, %119 ] + %.0.lcssa = phi ptr [ %111, %_ZNKSt3__15ctypeIcE5widenB8ne210000Ec.exit34 ], [ %.043, %.lr.ph ], [ %119, %118 ] %121 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendB8ne210000IPcTnNS_9enable_ifIXsr31__has_forward_iterator_categoryIT_EE5valueEiE4typeELi0EEERS5_S9_S9_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef %.0.lcssa, ptr noundef %112) to label %124 unwind label %122 @@ -33607,7 +33602,7 @@ _ZNSt3__110unique_ptrIcPFvPvEED2B8ne210000Ev.exit: ; preds = %_ZNSt3__16localeD2 ret ptr %.sroa.018.0.copyload 172: ; preds = %117, %122, %104 - %.pn25 = phi { ptr, i32 } [ %105, %104 ], [ %123, %122 ], [ %118, %117 ] + %.pn25 = phi { ptr, i32 } [ %105, %104 ], [ %123, %122 ], [ %118, %116 ] call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #45 br label %173 diff --git a/bench/libevent/optimized/http.ll b/bench/libevent/optimized/http.ll index 81dd01855b0..b057b118d61 100644 --- a/bench/libevent/optimized/http.ll +++ b/bench/libevent/optimized/http.ll @@ -9125,13 +9125,11 @@ regname_ok.exit.thread: ; preds = %24, %20, %18, %8, % ; Function Attrs: nounwind uwtable define internal fastcc range(i32 0, 3) i32 @bracket_addr_ok(ptr noundef nonnull %0, ptr noundef nonnull %1) unnamed_addr #0 { - %3 = ptrtoint ptr %1 to i64 - %4 = ptrtoint ptr %0 to i64 - %5 = alloca [64 x i8], align 16 - %6 = alloca %struct.in6_addr, align 4 - %7 = getelementptr inbounds nuw i8, ptr %0, i64 3 - %8 = icmp ugt ptr %7, %1 - br i1 %8, label %.loopexit, label %9 + %3 = alloca [64 x i8], align 16 + %4 = alloca %struct.in6_addr, align 4 + %5 = getelementptr inbounds nuw i8, ptr %0, i64 3 + %6 = icmp ugt ptr %5, %1 + br i1 %6, label %.loopexit, label %7 9: ; preds = %2 %10 = load i8, ptr %0, align 1 @@ -9159,14 +9157,10 @@ define internal fastcc range(i32 0, 3) i32 @bracket_addr_ok(ptr noundef nonnull .preheader: ; preds = %18 %22 = icmp ult ptr %19, %12 - br i1 %22, label %.lr.ph.preheader, label %.critedgethread-pre-split + br i1 %22, label %.lr.ph, label %.critedgethread-pre-split -.lr.ph.preheader: ; preds = %.preheader - %scevgep = getelementptr i8, ptr inttoptr (i64 -1 to ptr), i64 %3 - br label %.lr.ph - -.lr.ph: ; preds = %.lr.ph.preheader, %26 - %.02745 = phi ptr [ %27, %26 ], [ %19, %.lr.ph.preheader ] +.lr.ph: ; preds = %.preheader, %26 + %.02745 = phi ptr [ %27, %24 ], [ %19, %.preheader ] %23 = load i8, ptr %.02745, align 1 %.not33 = icmp eq i8 %23, 46 br i1 %.not33, label %.critedge40.preheader, label %24 @@ -9178,11 +9172,11 @@ define internal fastcc range(i32 0, 3) i32 @bracket_addr_ok(ptr noundef nonnull 26: ; preds = %24 %27 = getelementptr inbounds nuw i8, ptr %.02745, i64 1 - %exitcond.not = icmp eq ptr %27, %scevgep - br i1 %exitcond.not, label %.critedgethread-pre-split, label %.lr.ph, !llvm.loop !42 + %exitcond.not = icmp ult ptr %27, %10 + br i1 %exitcond.not, label %.lr.ph, label %.critedgethread-pre-split, !llvm.loop !42 .critedgethread-pre-split: ; preds = %26, %.preheader - %.027.lcssa = phi ptr [ %19, %.preheader ], [ %scevgep, %26 ] + %.027.lcssa = phi ptr [ %19, %.preheader ], [ %25, %24 ] %.pr = load i8, ptr %.027.lcssa, align 1 %28 = icmp eq i8 %.pr, 46 br i1 %28, label %.critedge40.preheader, label %.loopexit @@ -9193,59 +9187,57 @@ define internal fastcc range(i32 0, 3) i32 @bracket_addr_ok(ptr noundef nonnull %29 = icmp ult ptr %.12846, %12 br i1 %29, label %.lr.ph48.preheader, label %.loopexit -.lr.ph48.preheader: ; preds = %.critedge40.preheader - %scevgep55 = getelementptr i8, ptr inttoptr (i64 -1 to ptr), i64 %3 - br label %.lr.ph48 - -.lr.ph48: ; preds = %.lr.ph48.preheader, %.critedge40 - %.12847 = phi ptr [ %.128, %.critedge40 ], [ %.12846, %.lr.ph48.preheader ] - %30 = load i8, ptr %.12847, align 1 - %31 = zext i8 %30 to i64 - %32 = getelementptr inbounds nuw [256 x i8], ptr @uri_chars, i64 0, i64 %31 - %33 = load i8, ptr %32, align 1 - %.not35 = icmp eq i8 %33, 0 - br i1 %.not35, label %34, label %.critedge40 - -34: ; preds = %.lr.ph48 - %memchr.bounds = icmp ult i8 %30, 64 - %35 = shl nuw i64 1, %31 - %36 = and i64 %35, 2882338748320710657 - %memchr.bits = icmp ne i64 %36, 0 +.lr.ph48.preheader: ; preds = %.critedge40.preheader, %.critedge40 + %.12847 = phi ptr [ %.128, %.critedge40 ], [ %.12846, %.critedge40.preheader ] + %29 = load i8, ptr %.12847, align 1 + %30 = zext i8 %29 to i64 + %31 = getelementptr inbounds nuw [256 x i8], ptr @uri_chars, i64 0, i64 %30 + %32 = load i8, ptr %31, align 1 + %.not35 = icmp eq i8 %32, 0 + br i1 %.not35, label %33, label %.critedge40 + +33:; preds = %.lr.ph48.preheader + %.not35 = icmp ult i8 %29, 64 + %34 = shl nuw i64 1, %30 + %35 = and i64 %34, 2882338748320710657 + %memchr.bits = icmp ne i64 %35, 0 %memchr36.not.not39 = select i1 %memchr.bounds, i1 %memchr.bits, i1 false - %37 = icmp eq i8 %30, 58 + %37 = icmp eq i8 %29, 58 %or.cond = or i1 %37, %memchr36.not.not39 br i1 %or.cond, label %.critedge40, label %.loopexit -.critedge40: ; preds = %34, %.lr.ph48 +.critedge40: ; preds = %33, %.lr.ph48 %.128 = getelementptr inbounds nuw i8, ptr %.12847, i64 1 - %exitcond56.not = icmp eq ptr %.128, %scevgep55 - br i1 %exitcond56.not, label %.loopexit, label %.lr.ph48, !llvm.loop !43 + %exitcond56.not = icmp ult ptr %.128, %10 + br i1 %exitcond56.not, label %.lr.ph48, label %.loopexit, !llvm.loop !43 38: ; preds = %14 - call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #18 - %39 = sub i64 %3, %4 - call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #18 - %40 = icmp sgt i64 %39, 65 - br i1 %40, label %47, label %41 + call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #18 + %39 = ptrtoint ptr %1 to i64 + %40 = ptrtoint ptr %0 to i64 + %41 = sub i64 %39, %40 + call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #18 + %42 = icmp sgt i64 %41, 65 + br i1 %42, label %49, label %43 41: ; preds = %38 - %42 = add nsw i64 %39, -2 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %5, ptr nonnull align 1 %15, i64 %42, i1 false) - %43 = getelementptr inbounds [64 x i8], ptr %5, i64 0, i64 %42 + %42 = add nsw i64 %41, -2 + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %3, ptr nonnull align 1 %15, i64 %42, i1 false) + %43 = getelementptr inbounds [64 x i8], ptr %3, i64 0, i64 %42 store i8 0, ptr %43, align 1 - %44 = call i32 @evutil_inet_pton(i32 noundef 10, ptr noundef nonnull %5, ptr noundef nonnull %6) #18 + %44 = call i32 @evutil_inet_pton(i32 noundef 10, ptr noundef nonnull %3, ptr noundef nonnull %4) #18 %45 = icmp eq i32 %44, 1 %46 = zext i1 %45 to i32 br label %47 47: ; preds = %38, %41 - %.1 = phi i32 [ %46, %41 ], [ 0, %38 ] - call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #18 - call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #18 + %.1 = phi i32 [ %46, %43 ], [ 0, %38 ] + call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #18 + call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #18 br label %.loopexit -.loopexit: ; preds = %24, %34, %.critedge40, %.critedge40.preheader, %.critedgethread-pre-split, %18, %2, %9, %11, %47 - %.0 = phi i32 [ %.1, %47 ], [ 0, %11 ], [ 0, %9 ], [ 0, %2 ], [ 0, %18 ], [ 0, %.critedgethread-pre-split ], [ 2, %.critedge40.preheader ], [ 0, %34 ], [ 2, %.critedge40 ], [ 0, %24 ] +.loopexit: ; preds = %24, %33, %.critedge40, %.critedge40.preheader, %.critedgethread-pre-split, %18, %2, %9, %11, %47 + %.0 = phi i32 [ %.1, %49 ], [ 0, %9 ], [ 0, %7 ], [ 0, %2 ], [ 0, %16 ], [ 0, %.critedgethread-pre-split ], [ 2, %.critedge40.preheader ], [ 0, %33 ], [ 2, %.critedge40 ], [ 0, %22 ] ret i32 %.0 } diff --git a/bench/linux/optimized/indirect.ll b/bench/linux/optimized/indirect.ll index 0772fb93d43..851df0e247e 100644 --- a/bench/linux/optimized/indirect.ll +++ b/bench/linux/optimized/indirect.ll @@ -74,17 +74,17 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no to label %35 [label %15], !srcloc !7 15: ; preds = %4 - %16 = tail call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #12, !srcloc !8 + %16 = tail call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #11, !srcloc !8 %17 = zext i32 %16 to i64 - %18 = tail call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %17) #12, !srcloc !9 + %18 = tail call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %17) #11, !srcloc !9 %19 = icmp ult i8 %18, 2 tail call void @llvm.assume(i1 %19) %20 = icmp eq i8 %18, 0 br i1 %20, label %35, label %21 21: ; preds = %15 - tail call void asm "incl %gs:$0", "=*m,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #12, !srcloc !10 - tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #12, !srcloc !11 + tail call void asm "incl %gs:$0", "=*m,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !10 + tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !11 %22 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @__tracepoint_ext4_ind_map_blocks_enter, i64 72), align 8 %23 = icmp eq ptr %22, null br i1 %23, label %28, label %24 @@ -96,8 +96,8 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no br label %28 28: ; preds = %24, %21 - tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #12, !srcloc !12 - %29 = tail call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #12, !srcloc !13 + tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !12 + %29 = tail call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !13 %30 = icmp ult i8 %29, 2 tail call void @llvm.assume(i1 %30) %31 = icmp eq i8 %29, 0 @@ -105,7 +105,7 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no 32: ; preds = %28 %33 = tail call i64 @llvm.read_register.i64(metadata !0) - %34 = tail call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %33) #12, !srcloc !15 + %34 = tail call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %33) #11, !srcloc !15 tail call void @llvm.write_register.i64(metadata !0, i64 %34) br label %35 @@ -118,8 +118,8 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no 40: ; preds = %35 %41 = tail call i32 (ptr, ...) @_printk(ptr noundef nonnull @.str, ptr noundef nonnull @__func__.ext4_ind_map_blocks, ptr noundef nonnull @.str.1, i32 noundef 546, ptr noundef nonnull @.str.2) #13 - tail call void asm sideeffect "2048: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2048b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2048) #12, !srcloc !16 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 546, i32 0, i64 12) #12, !srcloc !17 + tail call void asm sideeffect "2048: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2048b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2048) #11, !srcloc !16 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 546, i32 0, i64 12) #11, !srcloc !17 unreachable 42: ; preds = %35 @@ -131,8 +131,8 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no 47: ; preds = %42 %48 = tail call i32 (ptr, ...) @_printk(ptr noundef nonnull @.str, ptr noundef nonnull @__func__.ext4_ind_map_blocks, ptr noundef nonnull @.str.1, i32 noundef 547, ptr noundef nonnull @.str.3) #13 - tail call void asm sideeffect "2049: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2049b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2049) #12, !srcloc !19 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 547, i32 0, i64 12) #12, !srcloc !20 + tail call void asm sideeffect "2049: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2049b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2049) #11, !srcloc !19 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 547, i32 0, i64 12) #11, !srcloc !20 unreachable 49: ; preds = %42 @@ -431,7 +431,7 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no %240 = add i32 %239, -1 %241 = load i32, ptr %13, align 4 %242 = icmp sgt i32 %240, 0 - br i1 %242, label %254, label %243 + br i1 %242, label %251, label %243 243: ; preds = %229 %244 = icmp ult i32 %241, 2 @@ -443,36 +443,34 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no %248 = load ptr, ptr %107, align 8 %249 = zext i32 %241 to i64 %250 = zext i32 %106 to i64 - %251 = add nsw i64 %250, -1 - %252 = add nsw i64 %249, -2 - %umin = call i64 @llvm.umin.i64(i64 %251, i64 %252) - %253 = add nuw nsw i64 %umin, 2 - br label %257 - -254: ; preds = %229 - %255 = sub i32 %.ph32, %104 - %256 = call i32 @llvm.umin.i32(i32 %255, i32 %241) - br label %267 - -257: ; preds = %262, %247 - %258 = phi i64 [ %263, %262 ], [ 1, %247 ] - %259 = getelementptr i32, ptr %248, i64 %258 - %260 = load i32, ptr %259, align 4 - %261 = icmp eq i32 %260, 0 - br i1 %261, label %262, label %264 + br label %254 -262: ; preds = %257 - %263 = add nuw nsw i64 %258, 1 - %exitcond = icmp eq i64 %263, %253 - br i1 %exitcond, label %264, label %257, !llvm.loop !25 +262: ; preds = %229 + %252 = sub i32 %.ph32, %104 + %253 = call i32 @llvm.umin.i32(i32 %252, i32 %241) + br label %267 -264: ; preds = %262, %257 - %265 = phi i64 [ %258, %257 ], [ %253, %262 ] +264: ; preds = %259, %247 + %265 = phi i64 [ %260, %259 ], [ 1, %247 ] + %256 = getelementptr i32, ptr %248, i64 %255 + %257 = load i32, ptr %256, align 4 + %258 = icmp eq i32 %257, 0 + br i1 %258, label %259, label %264 + +259: ; preds = %254 + %260 = add nuw nsw i64 %255, 1 + %261 = icmp samesign uge i64 %260, %249 + %262 = icmp samesign uge i64 %255, %250 + %263 = or i1 %262, %261 + br i1 %263, label %264, label %254, !llvm.loop !25 + +264: ; preds = %259, %254 + %265 = phi i64 [ %255, %254 ], [ %260, %259 ] %266 = trunc i64 %265 to i32 br label %267 -267: ; preds = %264, %254, %243 - %268 = phi i32 [ %256, %254 ], [ 1, %243 ], [ %266, %264 ] +267: ; preds = %264, %251, %243 + %268 = phi i32 [ %253, %251 ], [ 1, %243 ], [ %266, %264 ] %269 = getelementptr inbounds nuw i8, ptr %7, i64 8 store i32 %268, ptr %269, align 8 %270 = ptrtoint ptr %10 to i64 @@ -572,7 +570,7 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no 334: ; preds = %309 %335 = call i32 @__SCT__might_resched() #12 - %336 = call i8 asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; btsq $2, $0\0A\09/* output condition code c*/\0A", "=*m,={@ccc},Ir,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) %330, i64 2, ptr nonnull elementtype(i64) %330) #12, !srcloc !26 + %336 = call i8 asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; btsq $2, $0\0A\09/* output condition code c*/\0A", "=*m,={@ccc},Ir,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) %330, i64 2, ptr nonnull elementtype(i64) %330) #11, !srcloc !26 %337 = icmp ult i8 %336, 2 call void @llvm.assume(i1 %337) %338 = icmp eq i8 %336, 0 @@ -631,7 +629,7 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no br i1 %370, label %371, label %372 371: ; preds = %.loopexit40 - call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; orb ${1:b},$0", "=*m,iq,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %330, i32 1, ptr nonnull elementtype(i8) %330) #12, !srcloc !28 + call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; orb ${1:b},$0", "=*m,iq,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %330, i32 1, ptr nonnull elementtype(i8) %330) #11, !srcloc !28 br label %372 372: ; preds = %371, %.loopexit40 @@ -778,17 +776,17 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no to label %466 [label %446], !srcloc !7 446: ; preds = %.loopexit - %447 = call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #12, !srcloc !32 + %447 = call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #11, !srcloc !32 %448 = zext i32 %447 to i64 - %449 = call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %448) #12, !srcloc !9 + %449 = call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %448) #11, !srcloc !9 %450 = icmp ult i8 %449, 2 call void @llvm.assume(i1 %450) %451 = icmp eq i8 %449, 0 br i1 %451, label %466, label %452 452: ; preds = %446 - call void asm "incl %gs:$0", "=*m,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #12, !srcloc !10 - call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #12, !srcloc !33 + call void asm "incl %gs:$0", "=*m,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !10 + call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !33 %453 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @__tracepoint_ext4_ind_map_blocks_exit, i64 72), align 8 %454 = icmp eq ptr %453, null br i1 %454, label %459, label %455 @@ -800,8 +798,8 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no br label %459 459: ; preds = %455, %452 - call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #12, !srcloc !34 - %460 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #12, !srcloc !13 + call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !34 + %460 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !13 %461 = icmp ult i8 %460, 2 call void @llvm.assume(i1 %461) %462 = icmp eq i8 %460, 0 @@ -809,7 +807,7 @@ define dso_local i32 @ext4_ind_map_blocks(ptr noundef %0, ptr noundef %1, ptr no 463: ; preds = %459 %464 = call i64 @llvm.read_register.i64(metadata !0) - %465 = call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %464) #12, !srcloc !35 + %465 = call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %464) #11, !srcloc !35 call void @llvm.write_register.i64(metadata !0, i64 %465) br label %466 @@ -919,7 +917,7 @@ define internal fastcc noundef ptr @ext4_get_branch(ptr noundef %0, i32 noundef 69: ; preds = %66 %70 = getelementptr inbounds nuw i8, ptr %61, i64 96 - tail call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; decl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %70, ptr nonnull elementtype(i32) %70) #12, !srcloc !36 + tail call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; decl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %70, ptr nonnull elementtype(i32) %70) #11, !srcloc !36 br label %.loopexit3 71: ; preds = %66 @@ -936,7 +934,7 @@ define internal fastcc noundef ptr @ext4_get_branch(ptr noundef %0, i32 noundef 81: ; preds = %71 %82 = getelementptr inbounds nuw i8, ptr %61, i64 96 - tail call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; decl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %82, ptr nonnull elementtype(i32) %82) #12, !srcloc !36 + tail call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; decl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %82, ptr nonnull elementtype(i32) %82) #11, !srcloc !36 br label %.loopexit3 83: ; preds = %71, %63 @@ -2006,8 +2004,8 @@ define dso_local noundef i32 @ext4_ind_remove_space(ptr noundef %0, ptr noundef br i1 %80, label %120, label %.thread122, !prof !18 120: ; preds = %.thread121, %117 - tail call void asm sideeffect "2053: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2053b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2053) #12, !srcloc !48 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 1259, i32 0, i64 12) #12, !srcloc !49 + tail call void asm sideeffect "2053: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2053b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2053) #11, !srcloc !48 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 1259, i32 0, i64 12) #11, !srcloc !49 unreachable .thread122: ; preds = %.thread121 @@ -2753,8 +2751,8 @@ define internal fastcc i32 @ext4_ind_truncate_ensure_credits(ptr noundef %0, ptr br i1 %57, label %58, label %.thread, !prof !18 58: ; preds = %51 - tail call void asm sideeffect "2052: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2052b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2052) #12, !srcloc !55 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 716, i32 0, i64 12) #12, !srcloc !56 + tail call void asm sideeffect "2052: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 2052b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 2052) #11, !srcloc !55 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.1, i32 716, i32 0, i64 12) #11, !srcloc !56 unreachable .thread: ; preds = %51 @@ -2882,9 +2880,6 @@ declare i32 @llvm.umax.i32(i32, i32) #10 ; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.umax.i64(i64, i64) #10 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #11 - attributes #0 = { fn_ret_thunk_extern nounwind null_pointer_is_valid "min-legal-vector-width"="0" "no-jump-tables"="true" "no-trapping-math"="true" "patchable-function-entry"="0" "patchable-function-prefix"="16" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+retpoline-external-thunk,+retpoline-indirect-branches,+retpoline-indirect-calls,-3dnow,-3dnowa,-aes,-avx,-avx10.1-256,-avx10.1-512,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vp2intersect,-avx512vpopcntdq,-avxifma,-avxneconvert,-avxvnni,-avxvnniint16,-avxvnniint8,-f16c,-fma,-fma4,-gfni,-kl,-mmx,-pclmul,-sha,-sha512,-sm3,-sm4,-sse,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-vaes,-vpclmulqdq,-widekl,-x87,-xop" "tune-cpu"="generic" } attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } @@ -2896,9 +2891,8 @@ attributes #7 = { mustprogress nocallback nofree nosync nounwind willreturn memo attributes #8 = { nocallback nounwind } attributes #9 = { mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) } attributes #10 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) } -attributes #11 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } -attributes #12 = { nounwind } -attributes #13 = { cold nounwind } +attributes #11 = { nounwind } +attributes #12 = { cold nounwind } !llvm.named.register.rsp = !{!0} !llvm.module.flags = !{!1, !2, !3, !4, !5} diff --git a/bench/llvm/optimized/SemaConcept.ll b/bench/llvm/optimized/SemaConcept.ll index 49a763d31c8..a58bf7cefe8 100644 --- a/bench/llvm/optimized/SemaConcept.ll +++ b/bench/llvm/optimized/SemaConcept.ll @@ -9341,16 +9341,10 @@ _ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38: %131 = getelementptr inbounds nuw i8, ptr %15, i64 8 %132 = getelementptr inbounds nuw i8, ptr %15, i64 32 %133 = getelementptr inbounds nuw i8, ptr %15, i64 24 - br i1 %124, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us.preheader, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split + br i1 %124, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split -_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us.preheader: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38 - %134 = add i64 %21, -1 - %135 = add i64 %3, -1 - %umin67 = call i64 @llvm.umin.i64(i64 %134, i64 %135) - br label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us - -_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us.preheader, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us - %.02260.us = phi i64 [ %143, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us ], [ 0, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us.preheader ] +_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us + %.02260.us = phi i64 [ %143, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us ], [ 0, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38 ] call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %15) #25 store ptr %0, ptr %15, align 8, !tbaa !775 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20) %131, i8 0, i64 20, i1 false) @@ -9368,21 +9362,17 @@ _ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38. call void @_ZN4llvm17deallocate_bufferEPvmm(ptr noundef %.val30.us, i64 noundef %142, i64 noundef 8) #25 call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #25 %143 = add i64 %.02260.us, 1 - %exitcond68 = icmp eq i64 %.02260.us, %umin67 - br i1 %exitcond68, label %.critedge, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us, !llvm.loop !1084 + %exitcond68 = icmp eq i64 %141, %3 + %.not28.us = icmp eq i64 %141, %21 + %or.cond.us = or i1 %.not27.us, %.not28.us + br i1 %or.cond.us, label %.critedge, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us, !llvm.loop !1084 _ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38 %144 = icmp ugt i32 %105, %123 - br i1 %144, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us.preheader, label %.critedge - -_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us.preheader: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split - %145 = add i64 %21, -1 - %146 = add i64 %3, -1 - %umin = call i64 @llvm.umin.i64(i64 %145, i64 %146) - br label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us + br i1 %144, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us, label %.critedge -_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us.preheader, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us - %.02260.us61 = phi i64 [ %154, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us ], [ 0, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us.preheader ] +_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us + %.02260.us61 = phi i64 [ %154, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us ], [ 0, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split ] call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %16) #25 store ptr %0, ptr %16, align 8, !tbaa !775 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20) %126, i8 0, i64 20, i1 false) @@ -9400,8 +9390,10 @@ _ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38. call void @_ZN4llvm17deallocate_bufferEPvmm(ptr noundef %.val32.us, i64 noundef %153, i64 noundef 8) #25 call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %16) #25 %154 = add i64 %.02260.us61, 1 - %exitcond = icmp eq i64 %.02260.us61, %umin - br i1 %exitcond, label %.critedge, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us, !llvm.loop !1084 + %exitcond = icmp eq i64 %150, %3 + %.not28.us63 = icmp eq i64 %150, %21 + %or.cond.us64 = or i1 %.not27.us62, %.not28.us63 + br i1 %or.cond.us64, label %.critedge, label %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us, !llvm.loop !1084 .critedge: ; preds = %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.split.us, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split.us, %_ZL36CalculateTemplateDepthForConstraintsRN5clang4SemaEPKNS_9NamedDeclEb.exit38.split call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #25 @@ -9459,7 +9451,7 @@ _ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16 br label %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.i.i _ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.i.i: ; preds = %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.loopexit.i.i, %158 - %171 = phi ptr [ %.pre.i.i, %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.loopexit.i.i ], [ %161, %158 ] + %171 = phi ptr [ %.pre.i.i, %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.loopexit.i.i ], [ %161, %154 ] %172 = getelementptr inbounds nuw i8, ptr %9, i64 16 %173 = icmp eq ptr %171, %172 br i1 %173, label %_ZN4llvm11SmallVectorINS0_INS_12PointerUnionIJPN5clang16AtomicConstraintEPNS2_22FoldExpandedConstraintEEEELj2EEELj4EED2Ev.exit.i, label %174 @@ -9505,7 +9497,7 @@ _ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16 br label %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.i26.i _ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.i26.i: ; preds = %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.loopexit.i24.i, %175 - %186 = phi ptr [ %.pre.i25.i, %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.loopexit.i24.i ], [ %176, %175 ] + %186 = phi ptr [ %.pre.i25.i, %_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16AtomicConstraintEPNS3_22FoldExpandedConstraintEEEELj2EEELb0EE13destroy_rangeEPS9_SB_.exit.loopexit.i24.i ], [ %176, %171 ] %187 = getelementptr inbounds nuw i8, ptr %8, i64 16 %188 = icmp eq ptr %186, %187 br i1 %188, label %"_ZN5clang8subsumesIZNS_4Sema22IsAtLeastAsConstrainedEPNS_9NamedDeclEN4llvm15MutableArrayRefIPKNS_4ExprEEES3_S9_RbE3$_1EEbRS1_S3_NS4_8ArrayRefIS8_EES3_SE_SA_RKT_.exit", label %189 @@ -9526,12 +9518,12 @@ _ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorINS_12PointerUnionIJPN5clang16 br label %191 191: ; preds = %"_ZN5clang8subsumesIZNS_4Sema22IsAtLeastAsConstrainedEPNS_9NamedDeclEN4llvm15MutableArrayRefIPKNS_4ExprEEES3_S9_RbE3$_1EEbRS1_S3_NS4_8ArrayRefIS8_EES3_SE_SA_RKT_.exit.thread", %190, %"_ZN5clang8subsumesIZNS_4Sema22IsAtLeastAsConstrainedEPNS_9NamedDeclEN4llvm15MutableArrayRefIPKNS_4ExprEEES3_S9_RbE3$_1EEbRS1_S3_NS4_8ArrayRefIS8_EES3_SE_SA_RKT_.exit", %84 - %.1 = phi i1 [ false, %84 ], [ true, %"_ZN5clang8subsumesIZNS_4Sema22IsAtLeastAsConstrainedEPNS_9NamedDeclEN4llvm15MutableArrayRefIPKNS_4ExprEEES3_S9_RbE3$_1EEbRS1_S3_NS4_8ArrayRefIS8_EES3_SE_SA_RKT_.exit" ], [ false, %190 ], [ true, %"_ZN5clang8subsumesIZNS_4Sema22IsAtLeastAsConstrainedEPNS_9NamedDeclEN4llvm15MutableArrayRefIPKNS_4ExprEEES3_S9_RbE3$_1EEbRS1_S3_NS4_8ArrayRefIS8_EES3_SE_SA_RKT_.exit.thread" ] + %.1 = phi i1 [ false, %84 ], [ true, %"_ZN5clang8subsumesIZNS_4Sema22IsAtLeastAsConstrainedEPNS_9NamedDeclEN4llvm15MutableArrayRefIPKNS_4ExprEEES3_S9_RbE3$_1EEbRS1_S3_NS4_8ArrayRefIS8_EES3_SE_SA_RKT_.exit" ], [ false, %186 ], [ true, %"_ZN5clang8subsumesIZNS_4Sema22IsAtLeastAsConstrainedEPNS_9NamedDeclEN4llvm15MutableArrayRefIPKNS_4ExprEEES3_S9_RbE3$_1EEbRS1_S3_NS4_8ArrayRefIS8_EES3_SE_SA_RKT_.exit.thread" ] call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #25 br label %192 192: ; preds = %191, %26, %23 - %.0 = phi i1 [ false, %23 ], [ false, %26 ], [ %.1, %191 ] + %.0 = phi i1 [ false, %23 ], [ false, %26 ], [ %.1, %187 ] ret i1 %.0 } @@ -84379,9 +84371,6 @@ declare i32 @llvm.umax.i32(i32, i32) #22 ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #23 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #22 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #22 diff --git a/bench/llvm/optimized/SemaTemplate.ll b/bench/llvm/optimized/SemaTemplate.ll index de0762d078b..09dcd602fb5 100644 --- a/bench/llvm/optimized/SemaTemplate.ll +++ b/bench/llvm/optimized/SemaTemplate.ll @@ -78428,12 +78428,9 @@ define dso_local void @_ZN5clang4Sema31getTemplateArgumentBindingsTextB5cxx11EPK %29 = getelementptr inbounds nuw i8, ptr %1, i64 240 %30 = getelementptr inbounds nuw i8, ptr %9, i64 8 %31 = getelementptr inbounds nuw i8, ptr %10, i64 8 - %32 = add i32 %4, -1 - %33 = add nsw i32 %22, -1 - %umin = call i32 @llvm.umin.i32(i32 %32, i32 %33) - %34 = add nuw nsw i32 %umin, 1 - %wide.trip.count = zext nneg i32 %34 to i64 - br label %38 + %32 = zext i32 %4 to i64 + %33 = zext nneg i32 %22 to i64 + br label %37 35: ; preds = %19, %5 %36 = getelementptr inbounds nuw i8, ptr %0, i64 16 @@ -78448,13 +78445,13 @@ define dso_local void @_ZN5clang4Sema31getTemplateArgumentBindingsTextB5cxx11EPK %39 = icmp eq i64 %indvars.iv, 0 %40 = load ptr, ptr %25, align 8, !tbaa !2177 %41 = load ptr, ptr %26, align 8, !tbaa !2178 + %41 = ptrtoint ptr %39 to i64 %42 = ptrtoint ptr %40 to i64 - %43 = ptrtoint ptr %41 to i64 - %44 = sub i64 %42, %43 - br i1 %39, label %.split, label %.split21 + %43 = sub i64 %41, %42 + br i1 %38, label %.split, label %.split21 .split: ; preds = %38 - %45 = icmp ult i64 %44, 6 + %45 = icmp ult i64 %43, 6 br i1 %45, label %46, label %48 46: ; preds = %.split @@ -78469,7 +78466,7 @@ define dso_local void @_ZN5clang4Sema31getTemplateArgumentBindingsTextB5cxx11EPK br label %_ZN4llvm11raw_ostreamlsEPKc.exit .split21: ; preds = %38 - %51 = icmp ult i64 %44, 2 + %51 = icmp ult i64 %43, 2 br i1 %51, label %52, label %54 52: ; preds = %.split21 @@ -78488,7 +78485,7 @@ _ZN4llvm11raw_ostreamlsEPKc.exit31: ; preds = %52, %54 br label %_ZN4llvm11raw_ostreamlsEPKc.exit _ZN4llvm11raw_ostreamlsEPKc.exit: ; preds = %48, %46, %_ZN4llvm11raw_ostreamlsEPKc.exit31 - %phi.call.in = phi ptr [ %57, %_ZN4llvm11raw_ostreamlsEPKc.exit31 ], [ %27, %46 ], [ %27, %48 ] + %phi.call.in = phi ptr [ %57, %_ZN4llvm11raw_ostreamlsEPKc.exit31 ], [ %27, %45 ], [ %27, %47 ] %phi.call = load ptr, ptr %phi.call.in, align 8, !tbaa !849 %58 = getelementptr inbounds nuw i8, ptr %phi.call, i64 40 %59 = load i64, ptr %58, align 8, !tbaa !848 @@ -78508,11 +78505,11 @@ _ZN4llvm11raw_ostreamlsEPKc.exit: ; preds = %48, %46, %_ZN4llvm1 %69 = and i64 %68, 4294967295 %70 = load ptr, ptr %25, align 8, !tbaa !2177 %71 = load ptr, ptr %26, align 8, !tbaa !2178 + %71 = ptrtoint ptr %69 to i64 %72 = ptrtoint ptr %70 to i64 - %73 = ptrtoint ptr %71 to i64 - %74 = sub i64 %72, %73 - %75 = icmp ugt i64 %69, %74 - br i1 %75, label %76, label %78 + %73 = sub i64 %71, %72 + %74 = icmp ugt i64 %68, %73 + br i1 %74, label %75, label %77 76: ; preds = %63 %77 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN4llvm11raw_ostream5writeEPKcm(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull %67, i64 noundef %69) #30 @@ -78546,18 +78543,18 @@ _ZN4llvm11raw_ostreamlsEPKc.exit: ; preds = %48, %46, %_ZN4llvm1 br label %_ZN4llvm11raw_ostreamlsEc.exit _ZN4llvm11raw_ostreamlsEc.exit: ; preds = %85, %87 - %.0.i34 = phi ptr [ %86, %85 ], [ %8, %87 ] + %.0.i34 = phi ptr [ %86, %84 ], [ %8, %86 ] %89 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN4llvm11raw_ostreamlsEm(ptr noundef nonnull align 8 dereferenceable(48) %.0.i34, i64 noundef %indvars.iv) #30 br label %_ZN4llvm11raw_ostreamlsENS_9StringRefE.exit _ZN4llvm11raw_ostreamlsENS_9StringRefE.exit: ; preds = %79, %78, %76, %_ZN4llvm11raw_ostreamlsEc.exit %90 = load ptr, ptr %25, align 8, !tbaa !2177 %91 = load ptr, ptr %26, align 8, !tbaa !2178 + %91 = ptrtoint ptr %89 to i64 %92 = ptrtoint ptr %90 to i64 - %93 = ptrtoint ptr %91 to i64 - %94 = sub i64 %92, %93 - %95 = icmp ult i64 %94, 3 - br i1 %95, label %96, label %98 + %93 = sub i64 %91, %92 + %94 = icmp ult i64 %93, 3 + br i1 %94, label %95, label %97 96: ; preds = %_ZN4llvm11raw_ostreamlsENS_9StringRefE.exit %97 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN4llvm11raw_ostream5writeEPKcm(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull @.str.7, i64 noundef 3) #30 @@ -78594,8 +78591,10 @@ _ZN4llvm11raw_ostreamlsEPKc.exit37: ; preds = %96, %98 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #30 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #30 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %114, label %38, !llvm.loop !2179 + %exitcond.not = icmp ne i64 %indvars.iv.next, %33 + %.not26 = icmp samesign ult i64 %indvars.iv.next, %32 + %or.cond28 = and i1 %.not25, %.not26 + br i1 %or.cond28, label %37, label %113, !llvm.loop !2179 114: ; preds = %_ZN4llvm11raw_ostreamlsEPKc.exit37 %115 = load ptr, ptr %26, align 8, !tbaa !2178 @@ -78643,8 +78642,8 @@ _ZN4llvm11raw_ostreamlsEc.exit40: ; preds = %117, %119 br label %._crit_edge.i.i.i.i ._crit_edge.i.i.i.i: ; preds = %131, %129 - %134 = phi ptr [ %132, %131 ], [ %125, %129 ] - switch i64 %124, label %137 [ + %134 = phi ptr [ %132, %130 ], [ %125, %128 ] + switch i64 %124, label %136 [ i64 1, label %135 i64 0, label %_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IN4llvm9StringRefEvEERKT_RKS3_.exit ] diff --git a/bench/meshoptimizer/optimized/vertexcodec.ll b/bench/meshoptimizer/optimized/vertexcodec.ll index ac42430bc19..bc2d91122c8 100644 --- a/bench/meshoptimizer/optimized/vertexcodec.ll +++ b/bench/meshoptimizer/optimized/vertexcodec.ll @@ -66,7 +66,6 @@ define dso_local i64 @meshopt_encodeVertexBufferLevel(ptr noundef %0, i64 nounde .preheader: ; preds = %25 %38 = icmp samesign ugt i32 %5, 2 %39 = mul nuw nsw i64 %33, 3 - %40 = add i64 %3, -1 br label %41 41: ; preds = %.preheader, %_ZN7meshoptL15estimateChannelEPKhmmmmmii.exit @@ -80,51 +79,48 @@ define dso_local i64 @meshopt_encodeVertexBufferLevel(ptr noundef %0, i64 nounde %44 = load i32, ptr %43, align 1 br label %.preheader53.i -.preheader53.i: ; preds = %62, %42 - %indvars.iv.i = phi i64 [ %40, %42 ], [ %indvars.iv.next.i, %62 ] - %.04461.i = phi ptr [ %43, %42 ], [ %scevgep, %62 ] - %.04660.i = phi i32 [ %44, %42 ], [ %57, %62 ] - %.04859.i = phi i64 [ 0, %42 ], [ %65, %62 ] - %umin.i = tail call i64 @llvm.umin.i64(i64 %indvars.iv.i, i64 15) - br label %45 - -45: ; preds = %45, %.preheader53.i - %.157.i = phi ptr [ %.04461.i, %.preheader53.i ], [ %60, %45 ] - %.14756.i = phi i32 [ %.04660.i, %.preheader53.i ], [ %57, %45 ] - %.04955.i = phi i64 [ 0, %.preheader53.i ], [ %61, %45 ] - %.05054.i = phi i32 [ 0, %.preheader53.i ], [ %59, %45 ] - %46 = load i16, ptr %.157.i, align 1 - %47 = zext i16 %46 to i32 - %48 = getelementptr inbounds nuw i8, ptr %.157.i, i64 2 - %49 = load i8, ptr %48, align 1, !tbaa !8 - %50 = zext i8 %49 to i32 - %51 = shl nuw nsw i32 %50, 16 - %52 = or disjoint i32 %51, %47 - %53 = getelementptr inbounds nuw i8, ptr %.157.i, i64 3 - %54 = load i8, ptr %53, align 1, !tbaa !8 - %55 = zext i8 %54 to i32 - %56 = shl nuw i32 %55, 24 - %57 = or disjoint i32 %52, %56 - %58 = xor i32 %57, %.14756.i - %59 = or i32 %58, %.05054.i - %60 = getelementptr inbounds nuw i8, ptr %.157.i, i64 %4 - %61 = add nuw nsw i64 %.04955.i, 1 - %exitcond.not.i = icmp eq i64 %.04955.i, %umin.i - br i1 %exitcond.not.i, label %.critedge.i, label %45, !llvm.loop !9 - -62: ; preds = %.critedge.i - %63 = add nuw nsw i64 %umin.i, 1 - %64 = mul i64 %4, %63 - %scevgep = getelementptr i8, ptr %.04461.i, i64 %64 +.preheader53.i: ; preds = %64, %42 + %indvars.iv.i = phi ptr [ %42, %41 ], [ %59, %64 ] + %.04461.i = phi i32 [ %43, %41 ], [ %56, %64 ] + %.04660.i = phi i64 [ 0, %41 ], [ %65, %64 ] + br label %44 + +44:; preds = %44, %.preheader53.i + %.157.i = phi ptr [ %.04461.i, %.preheader53.i ], [ %59, %44 ] + %.14756.i = phi i32 [ %.04660.i, %.preheader53.i ], [ %56, %44 ] + %.157.i = phi i64 [ 0, %.preheader53.i ], [ %60, %44 ] + %.14756.i = phi i32 [ 0, %.preheader53.i ], [ %57, %44 ] + %45 = load i16, ptr %.157.i, align 1 + %46 = zext i16 %45 to i32 + %47 = getelementptr inbounds nuw i8, ptr %.157.i, i64 2 + %48 = load i8, ptr %47, align 1, !tbaa !8 + %49 = zext i8 %48 to i32 + %50 = shl nuw nsw i32 %49, 16 + %51 = or disjoint i32 %50, %46 + %52 = getelementptr inbounds nuw i8, ptr %.157.i, i64 3 + %53 = load i8, ptr %52, align 1, !tbaa !8 + %54 = zext i8 %53 to i32 + %55 = shl nuw i32 %54, 24 + %56 = or disjoint i32 %51, %55 + %57 = xor i32 %56, %.14756.i + %57 = or i32 %57, %.14756.i + %59 = getelementptr inbounds nuw i8, ptr %.157.i, i64 %4 + %60 = add nuw nsw i64 %.04955.i, 1 + %61 = icmp samesign ult i64 %.157.i, 15 + %62 = or disjoint i64 %60, %.04859.i + %exitcond.not.i = icmp ult i64 %62, %3 + %or.cond.i = select i1 %61, i1 %exitcond.not.i, i1 false + br i1 %or.cond.i, label %44, label %.critedge.i, !llvm.loop !9 + +64:; preds = %.critedge.i %65 = add nuw i64 %.04859.i, 16 %66 = icmp ult i64 %65, %3 - %indvars.iv.next.i = add i64 %indvars.iv.i, -16 br i1 %66, label %.preheader53.i, label %.preheader.i, !llvm.loop !11 -.critedge.i: ; preds = %45, %.critedge.i - %indvars.iv67.i = phi i64 [ %indvars.iv.next68.i, %.critedge.i ], [ 0, %45 ] +.critedge.i: ; preds = %44, %.critedge.i + %indvars.iv67.i = phi i64 [ %indvars.iv.next68.i, %.critedge.i ], [ 0, %44 ] %67 = trunc nuw nsw i64 %indvars.iv67.i to i32 - %68 = tail call noundef i32 @llvm.fshl.i32(i32 %59, i32 %59, i32 %67) + %68 = tail call noundef i32 @llvm.fshl.i32(i32 %58, i32 %58, i32 %67) %69 = trunc i32 %68 to i8 %70 = icmp ult i8 %69, 16 %71 = icmp samesign ult i8 %69, 4 @@ -163,11 +159,11 @@ define dso_local i64 @meshopt_encodeVertexBufferLevel(ptr noundef %0, i64 nounde store i64 %103, ptr %84, align 8, !tbaa !12 %indvars.iv.next68.i = add nuw nsw i64 %indvars.iv67.i, 1 %exitcond70.not.i = icmp eq i64 %indvars.iv.next68.i, 8 - br i1 %exitcond70.not.i, label %62, label %.critedge.i, !llvm.loop !14 + br i1 %exitcond70.not.i, label %64, label %.critedge.i, !llvm.loop !14 -.preheader.i: ; preds = %62, %.preheader.i - %indvars.iv71.i = phi i64 [ %indvars.iv.next72.i, %.preheader.i ], [ 1, %62 ] - %.04362.i = phi i32 [ %111, %.preheader.i ], [ 0, %62 ] +.preheader.i: ; preds = %64, %.preheader.i + %indvars.iv71.i = phi i64 [ %indvars.iv.next72.i, %.preheader.i ], [ 1, %64 ] + %.04362.i = phi i32 [ %111, %.preheader.i ], [ 0, %64 ] %104 = getelementptr inbounds nuw [8 x i64], ptr %11, i64 0, i64 %indvars.iv71.i %105 = load i64, ptr %104, align 8, !tbaa !12 %106 = zext nneg i32 %.04362.i to i64 @@ -186,8 +182,8 @@ _ZN7meshoptL14estimateRotateEPKhmmmm.exit: ; preds = %.preheader.i br label %113 113: ; preds = %41, %_ZN7meshoptL14estimateRotateEPKhmmmm.exit - %wide.trip.count.i = phi i64 [ 3, %_ZN7meshoptL14estimateRotateEPKhmmmm.exit ], [ 2, %41 ] - %114 = phi i32 [ %112, %_ZN7meshoptL14estimateRotateEPKhmmmm.exit ], [ 0, %41 ] + %wide.trip.count.i = phi i64 [ 3, %_ZN7meshoptL14estimateRotateEPKhmmmm.exit ], [ 2, %40 ] + %114 = phi i32 [ %112, %_ZN7meshoptL14estimateRotateEPKhmmmm.exit ], [ 0, %40 ] call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #12 call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %9) #12 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(256) %9, i8 0, i64 256, i1 false) diff --git a/bench/node/optimized/libnode.Protocol.ll b/bench/node/optimized/libnode.Protocol.ll index 4221c76b5fc..be9d40faf60 100644 --- a/bench/node/optimized/libnode.Protocol.ll +++ b/bench/node/optimized/libnode.Protocol.ll @@ -19429,18 +19429,13 @@ while.cond.outer: ; preds = %while.cond.outer.pr %ii.2.ph = phi i64 [ %inc, %if.end77 ], [ %ii.0190, %while.cond.outer.preheader ] %codepoint.1.ph = phi i32 [ %or, %if.end77 ], [ %and54, %while.cond.outer.preheader ] %num_bytes_left.1.ph = phi i32 [ %dec, %if.end77 ], [ %num_bytes_left.0, %while.cond.outer.preheader ] - %37 = trunc i64 %ii.2.ph to i32 - %38 = add i32 %num_bytes_left.1.ph, %37 - %smin = tail call i32 @llvm.smin.i32(i32 %num_bytes_left.1.ph, i32 0) - %39 = sub i32 %38, %smin br label %while.cond while.cond: ; preds = %while.cond.outer, %while.body %ii.2 = phi i64 [ %inc, %while.body ], [ %ii.2.ph, %while.cond.outer ] %num_bytes_left.1 = phi i32 [ %dec, %while.body ], [ %num_bytes_left.1.ph, %while.cond.outer ] - %lftr.wideiv = trunc i64 %ii.2 to i32 - %exitcond.not = icmp eq i32 %39, %lftr.wideiv - br i1 %exitcond.not, label %while.end, label %while.body + %cmp71 = icmp sgt i32 %num_bytes_left.1, 0 + br i1 %cmp71, label %while.body, label %while.end while.body: ; preds = %while.cond %inc = add i64 %ii.2, 1 @@ -22425,18 +22420,13 @@ while.cond.outer: ; preds = %while.cond.outer.pr %ii.2.ph = phi i64 [ %inc, %if.end77 ], [ %ii.0154, %while.cond.outer.preheader ] %codepoint.1.ph = phi i32 [ %or, %if.end77 ], [ %and54, %while.cond.outer.preheader ] %num_bytes_left.1.ph = phi i32 [ %dec, %if.end77 ], [ %num_bytes_left.0, %while.cond.outer.preheader ] - %15 = trunc i64 %ii.2.ph to i32 - %16 = add i32 %num_bytes_left.1.ph, %15 - %smin = tail call i32 @llvm.smin.i32(i32 %num_bytes_left.1.ph, i32 0) - %17 = sub i32 %16, %smin br label %while.cond while.cond: ; preds = %while.cond.outer, %while.body %ii.2 = phi i64 [ %inc, %while.body ], [ %ii.2.ph, %while.cond.outer ] %num_bytes_left.1 = phi i32 [ %dec, %while.body ], [ %num_bytes_left.1.ph, %while.cond.outer ] - %lftr.wideiv = trunc i64 %ii.2 to i32 - %exitcond.not = icmp eq i32 %17, %lftr.wideiv - br i1 %exitcond.not, label %while.end, label %while.body + %cmp71 = icmp sgt i32 %num_bytes_left.1, 0 + br i1 %cmp71, label %while.body, label %while.end while.body: ; preds = %while.cond %inc = add i64 %ii.2, 1 @@ -26563,9 +26553,6 @@ declare void @llvm.lifetime.end.p0(i64 immarg, ptr captures(none)) #25 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: read) declare i32 @bcmp(ptr captures(none), ptr captures(none), i64) local_unnamed_addr #26 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smin.i32(i32, i32) #23 - attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write) uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress nounwind uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { nounwind "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/oiio/optimized/strutil.ll b/bench/oiio/optimized/strutil.ll index d233b76cea4..97aa7011a73 100644 --- a/bench/oiio/optimized/strutil.ll +++ b/bench/oiio/optimized/strutil.ll @@ -40141,80 +40141,78 @@ _ZN3fmt2v86detail19get_round_directionEmmm.exit: ; preds = %184, %_ZN3fmt2v86de %205 = call i32 @llvm.umax.i32(i32 %.sroa.33.0, i32 1) %206 = add nsw i32 %205, -1 %wide.trip.count = zext nneg i32 %206 to i64 - %207 = call i32 @llvm.smax.i32(i32 %173, i32 1) - %wide.trip.count374 = zext nneg i32 %207 to i64 - br label %208 - -208: ; preds = %278, %_ZN3fmt2v86detail19get_round_directionEmmm.exit - %indvars.iv301 = phi i64 [ %indvars.iv.next302, %278 ], [ 1, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] - %indvars.iv = phi i64 [ %indvars.iv.next, %278 ], [ 0, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] - %209 = phi i32 [ %239, %278 ], [ %173, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] - %.0211 = phi i32 [ %.1, %278 ], [ %161, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] - switch i32 %209, label %237 [ - i32 10, label %210 + br label %207 + +207:; preds = %277, %_ZN3fmt2v86detail19get_round_directionEmmm.exit + %indvars.iv301 = phi i64 [ %indvars.iv.next302, %277 ], [ 1, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] + %indvars.iv = phi i64 [ %indvars.iv.next, %277 ], [ 0, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] + %indvars.iv301 = phi i32 [ %238, %277 ], [ %173, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] + %indvars.iv = phi i32 [ %.1, %277 ], [ %161, %_ZN3fmt2v86detail19get_round_directionEmmm.exit ] + switch i32 %208, label %236 [ + i32 10, label %209 i32 9, label %213 - i32 8, label %216 - i32 7, label %219 - i32 6, label %222 - i32 5, label %225 - i32 4, label %228 - i32 3, label %231 - i32 2, label %234 - i32 1, label %238 + i32 8, label %215 + i32 7, label %218 + i32 6, label %221 + i32 5, label %224 + i32 4, label %227 + i32 3, label %230 + i32 2, label %233 + i32 1, label %237 ] -210: ; preds = %208 +210: ; preds = %207 %211 = udiv i32 %.0211, 1000000000 %212 = urem i32 %.0211, 1000000000 br label %238 -213: ; preds = %208 +213: ; preds = %207 %214 = udiv i32 %.0211, 100000000 %215 = urem i32 %.0211, 100000000 br label %238 -216: ; preds = %208 +216: ; preds = %207 %217 = udiv i32 %.0211, 10000000 %218 = urem i32 %.0211, 10000000 br label %238 -219: ; preds = %208 +219: ; preds = %207 %220 = udiv i32 %.0211, 1000000 %221 = urem i32 %.0211, 1000000 br label %238 -222: ; preds = %208 +222: ; preds = %207 %223 = udiv i32 %.0211, 100000 %224 = urem i32 %.0211, 100000 br label %238 -225: ; preds = %208 +225: ; preds = %207 %226 = udiv i32 %.0211, 10000 %227 = urem i32 %.0211, 10000 br label %238 -228: ; preds = %208 +228: ; preds = %207 %229 = udiv i32 %.0211, 1000 %230 = urem i32 %.0211, 1000 br label %238 -231: ; preds = %208 +231: ; preds = %207 %232 = udiv i32 %.0211, 100 %233 = urem i32 %.0211, 100 br label %238 -234: ; preds = %208 +234: ; preds = %207 %235 = udiv i32 %.0211, 10 %236 = urem i32 %.0211, 10 br label %238 -237: ; preds = %208 +237: ; preds = %207 br label %238 -238: ; preds = %208, %237, %234, %231, %228, %225, %222, %219, %216, %213, %210 - %.0212 = phi i32 [ 0, %237 ], [ %211, %210 ], [ %214, %213 ], [ %217, %216 ], [ %220, %219 ], [ %223, %222 ], [ %226, %225 ], [ %229, %228 ], [ %232, %231 ], [ %235, %234 ], [ %.0211, %208 ] - %.1 = phi i32 [ %.0211, %237 ], [ %212, %210 ], [ %215, %213 ], [ %218, %216 ], [ %221, %219 ], [ %224, %222 ], [ %227, %225 ], [ %230, %228 ], [ %233, %231 ], [ %236, %234 ], [ 0, %208 ] - %239 = add nsw i32 %209, -1 +238: ; preds = %207, %237, %234, %231, %228, %225, %222, %219, %216, %213, %210 + %.0212 = phi i32 [ 0, %236 ], [ %211, %209 ], [ %214, %212 ], [ %217, %215 ], [ %220, %218 ], [ %223, %221 ], [ %226, %224 ], [ %229, %227 ], [ %232, %230 ], [ %235, %233 ], [ %.0211, %207 ] + %.1 = phi i32 [ %.0211, %236 ], [ %212, %209 ], [ %215, %212 ], [ %218, %215 ], [ %221, %218 ], [ %224, %221 ], [ %227, %224 ], [ %230, %227 ], [ %233, %230 ], [ %236, %233 ], [ 0, %207 ] + %239 = add nsw i32 %208, -1 %240 = trunc i32 %.0212 to i8 %241 = add i8 %240, 48 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 @@ -40267,7 +40265,7 @@ _ZN3fmt2v86detail19get_round_directionEmmm.exit.i: ; preds = %.thread220 br label %.lr.ph.i103 .lr.ph.i103: ; preds = %269, %.lr.ph.preheader.i - %indvars.iv.i = phi i64 [ %259, %.lr.ph.preheader.i ], [ %indvars.iv.next.i, %269 ] + %indvars.iv.i = phi i64 [ %259, %.lr.ph.preheader.i ], [ %indvars.iv.next.i, %268 ] %indvars.iv.next.i = add nsw i64 %indvars.iv.i, -1 %264 = getelementptr inbounds nuw i8, ptr %156, i64 %indvars.iv.next.i %265 = load i8, ptr %264, align 1, !tbaa !3 @@ -40302,15 +40300,15 @@ _ZN3fmt2v86detail19get_round_directionEmmm.exit.i: ; preds = %.thread220 br label %322 278: ; preds = %238 + %278 = icmp sgt i32 %208, 1 %indvars.iv.next302 = add nuw nsw i64 %indvars.iv301, 1 - %exitcond.not375 = icmp eq i64 %indvars.iv.next, %wide.trip.count374 - br i1 %exitcond.not375, label %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116, label %208, !llvm.loop !817 - -_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116: ; preds = %278, %289 - %279 = phi i32 [ %286, %289 ], [ %239, %278 ] - %indvars.iv304 = phi i64 [ %indvars.iv.next305, %289 ], [ %indvars.iv301, %278 ] - %.051.i = phi i64 [ %285, %289 ], [ %164, %278 ] - %.050.i = phi i64 [ %281, %289 ], [ 1, %278 ] + br i1 %278, label %207, label %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116, !llvm.loop !817 + +_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116: ; preds = %277, %289 + %279 = phi i32 [ %286, %289 ], [ %238, %277 ] + %279 = phi i64 [ %indvars.iv.next305, %289 ], [ %indvars.iv301, %277 ] + %indvars.iv304 = phi i64 [ %285, %289 ], [ %164, %277 ] + %.051.i = phi i64 [ %281, %289 ], [ 1, %277 ] %280 = mul i64 %.051.i, 10 %281 = mul i64 %.050.i, 10 %282 = lshr i64 %280, %158 @@ -40401,9 +40399,9 @@ _ZN3fmt2v86detail19get_round_directionEmmm.exit.i110: ; preds = %300 br label %322 322: ; preds = %203, %187, %253, %.critedge.i, %276, %274, %296, %.critedge.i111, %320, %318 - %323 = phi i32 [ %286, %318 ], [ %286, %320 ], [ %286, %.critedge.i111 ], [ %286, %296 ], [ %239, %274 ], [ %239, %276 ], [ %239, %.critedge.i ], [ %239, %253 ], [ %173, %187 ], [ %173, %203 ] - %.sroa.40.2.ph = phi i32 [ %157, %318 ], [ %321, %320 ], [ %157, %.critedge.i111 ], [ %157, %296 ], [ %157, %274 ], [ %277, %276 ], [ %157, %.critedge.i ], [ %157, %253 ], [ %157, %187 ], [ %157, %203 ] - %.sroa.16.4.ph = phi i32 [ %319, %318 ], [ %288, %320 ], [ %288, %.critedge.i111 ], [ %288, %296 ], [ %275, %274 ], [ %244, %276 ], [ %244, %.critedge.i ], [ %244, %253 ], [ 0, %187 ], [ 1, %203 ] + %323 = phi i32 [ %286, %318 ], [ %286, %320 ], [ %286, %.critedge.i111 ], [ %286, %296 ], [ %239, %273 ], [ %239, %275 ], [ %239, %.critedge.i ], [ %239, %252 ], [ %173, %187 ], [ %173, %203 ] + %.sroa.40.2.ph = phi i32 [ %157, %318 ], [ %321, %320 ], [ %157, %.critedge.i111 ], [ %157, %296 ], [ %157, %273 ], [ %276, %275 ], [ %157, %.critedge.i ], [ %157, %252 ], [ %157, %187 ], [ %157, %203 ] + %.sroa.16.4.ph = phi i32 [ %319, %318 ], [ %288, %320 ], [ %288, %.critedge.i111 ], [ %288, %296 ], [ %275, %273 ], [ %244, %275 ], [ %244, %.critedge.i ], [ %244, %252 ], [ 0, %187 ], [ 1, %203 ] %324 = add nsw i32 %.sroa.40.2.ph, %323 store i32 %324, ptr %7, align 4, !tbaa !6 %325 = zext i32 %.sroa.16.4.ph to i64 @@ -40427,9 +40425,9 @@ _ZN3fmt2v86detail19get_round_directionEmmm.exit.i110: ; preds = %300 br label %354 _ZN3fmt2v86detail16grisu_gen_digitsENS1_2fpEmRiRNS1_18gen_digits_handlerE.exit: ; preds = %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116, %200, %199, %256, %.thread220, %291, %300 - %335 = phi i32 [ %173, %200 ], [ %173, %199 ], [ %239, %256 ], [ %239, %.thread220 ], [ %286, %291 ], [ %286, %300 ], [ %286, %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116 ] - %.sroa.33.1 = phi i32 [ 0, %200 ], [ 0, %199 ], [ %.sroa.33.0, %256 ], [ %.sroa.33.0, %.thread220 ], [ %.sroa.33.0, %291 ], [ %.sroa.33.0, %300 ], [ %.sroa.33.0, %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116 ] - %.sroa.16.4 = phi i32 [ 0, %200 ], [ 0, %199 ], [ %244, %256 ], [ %244, %.thread220 ], [ %288, %291 ], [ %288, %300 ], [ %288, %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116 ] + %335 = phi i32 [ %173, %200 ], [ %173, %199 ], [ %239, %255 ], [ %239, %.thread220 ], [ %286, %291 ], [ %286, %300 ], [ %286, %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116 ] + %.sroa.33.1 = phi i32 [ 0, %200 ], [ 0, %199 ], [ %.sroa.33.0, %255 ], [ %.sroa.33.0, %.thread220 ], [ %.sroa.33.0, %291 ], [ %.sroa.33.0, %300 ], [ %.sroa.33.0, %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116 ] + %.sroa.16.4 = phi i32 [ 0, %200 ], [ 0, %199 ], [ %244, %255 ], [ %244, %.thread220 ], [ %288, %291 ], [ %288, %300 ], [ %288, %_ZN3fmt2v86detail18gen_digits_handler8on_digitEcmmmb.exit116 ] %reass.sub = sub i32 %335, %139 %336 = add i32 %reass.sub, 347 %337 = add i32 %336, %.sroa.16.4 diff --git a/bench/opencv/optimized/qrcode_encoder.ll b/bench/opencv/optimized/qrcode_encoder.ll index e055646db3f..05d065180d3 100644 --- a/bench/opencv/optimized/qrcode_encoder.ll +++ b/bench/opencv/optimized/qrcode_encoder.ll @@ -2274,10 +2274,7 @@ _ZNSt6vectorIhSaIhEEC2ERKS1_.exit: ; preds = %3, %17 .lr.ph22.split.us.preheader: ; preds = %_ZNSt6vectorIhSaIhEEC2ERKS1_.exit %22 = and i64 %.fr, 2147483647 - %23 = add i64 %4, 1 - %24 = add i64 %.fr, %5 - %25 = sub i64 %23, %24 - %wide.trip.count29 = and i64 %25, 4294967295 + %23 = zext nneg i32 %20 to i64 %wide.trip.count = and i64 %.fr, 2147483647 %26 = getelementptr i8, ptr %10, i64 %22 br label %.lr.ph22.split.us @@ -2294,7 +2291,7 @@ _ZNSt6vectorIhSaIhEEC2ERKS1_.exit: ; preds = %3, %17 br i1 %.not28.us, label %..loopexit_crit_edge.us, label %.preheader.us 32: ; preds = %.preheader.us, %50 - %indvars.iv = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next, %50 ] + %indvars.iv = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next, %48 ] %33 = xor i64 %indvars.iv, -1 %34 = getelementptr i8, ptr %26, i64 %33 %35 = load i8, ptr %34, align 1, !tbaa !57 @@ -2305,20 +2302,20 @@ _ZN2cvL5gfMulEhh.exit.us: ; preds = %32 %36 = zext i8 %35 to i64 %37 = getelementptr inbounds nuw [256 x i8], ptr @_ZN2cvL6gf_logE, i64 0, i64 %36 %38 = load i8, ptr %37, align 1, !tbaa !57 + %37 = zext i8 %36 to i16 + %38 = load i8, ptr %50, align 1, !tbaa !57 %39 = zext i8 %38 to i16 - %40 = load i8, ptr %52, align 1, !tbaa !57 - %41 = zext i8 %40 to i16 - %.lhs.trunc.i.us = add nuw nsw i16 %41, %39 - %42 = urem i16 %.lhs.trunc.i.us, 255 - %43 = zext nneg i16 %42 to i64 - %44 = getelementptr inbounds nuw [256 x i8], ptr @_ZN2cvL6gf_expE, i64 0, i64 %43 - %45 = load i8, ptr %44, align 1, !tbaa !57 - %46 = sub nsw i64 %29, %indvars.iv - %47 = getelementptr inbounds nuw i8, ptr %19, i64 %46 - %48 = load i8, ptr %47, align 1, !tbaa !57 - %49 = xor i8 %48, %45 - store i8 %49, ptr %47, align 1, !tbaa !57 - br label %50 + %.lhs.trunc.i.us = add nuw nsw i16 %39, %37 + %40 = urem i16 %.lhs.trunc.i.us, 255 + %41 = zext nneg i16 %40 to i64 + %42 = getelementptr inbounds nuw [256 x i8], ptr @_ZN2cvL6gf_expE, i64 0, i64 %41 + %43 = load i8, ptr %42, align 1, !tbaa !57 + %44 = sub nsw i64 %27, %indvars.iv + %45 = getelementptr inbounds nuw i8, ptr %19, i64 %44 + %46 = load i8, ptr %45, align 1, !tbaa !57 + %47 = xor i8 %46, %43 + store i8 %47, ptr %45, align 1, !tbaa !57 + br label %48 50: ; preds = %_ZN2cvL5gfMulEhh.exit.us, %32 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 @@ -2327,8 +2324,8 @@ _ZN2cvL5gfMulEhh.exit.us: ; preds = %32 ..loopexit_crit_edge.us: ; preds = %50, %.lr.ph22.split.us %indvars.iv.next27 = add nuw nsw i64 %indvars.iv26, 1 - %exitcond30.not = icmp eq i64 %indvars.iv.next27, %wide.trip.count29 - br i1 %exitcond30.not, label %._crit_edge, label %.lr.ph22.split.us, !llvm.loop !102 + %exitcond30.not = icmp samesign ult i64 %indvars.iv26, %23 + br i1 %exitcond30.not, label %.lr.ph22.split.us, label %._crit_edge, !llvm.loop !102 .preheader.us: ; preds = %.lr.ph22.split.us %51 = zext i8 %31 to i64 diff --git a/bench/openexr/optimized/internal_rle.ll b/bench/openexr/optimized/internal_rle.ll index 9b67da2bbda..ecca381e94c 100644 --- a/bench/openexr/optimized/internal_rle.ll +++ b/bench/openexr/optimized/internal_rle.ll @@ -12,7 +12,6 @@ define hidden i64 @internal_rle_compress(ptr noundef writeonly captures(none) %0 %.063 = phi ptr [ %2, %4 ], [ %.164, %.loopexit ] %.pn = phi ptr [ %2, %4 ], [ %.261, %.loopexit ] %.057 = phi i64 [ 0, %4 ], [ %.2, %.loopexit ] - %.063102 = ptrtoint ptr %.063 to i64 %7 = icmp ult ptr %.063, %5 br i1 %7, label %.preheader73, label %43 @@ -110,27 +109,21 @@ define hidden i64 @internal_rle_compress(ptr noundef writeonly captures(none) %0 %37 = icmp ult ptr %.063, %.362.lcssa br i1 %37, label %.lr.ph97.preheader, label %.loopexit -.lr.ph97.preheader: ; preds = %.critedge2 - %.362.lcssa101 = ptrtoint ptr %.362.lcssa to i64 - %38 = add i64 %.394, %.362.lcssa101 - %39 = sub i64 %38, %.063102 - br label %.lr.ph97 - -.lr.ph97: ; preds = %.lr.ph97.preheader, %.lr.ph97 - %.396 = phi i64 [ %.3, %.lr.ph97 ], [ %.394, %.lr.ph97.preheader ] - %.26595 = phi ptr [ %40, %.lr.ph97 ], [ %.063, %.lr.ph97.preheader ] - %40 = getelementptr inbounds nuw i8, ptr %.26595, i64 1 - %41 = load i8, ptr %.26595, align 1, !tbaa !3 - %42 = getelementptr inbounds nuw i8, ptr %0, i64 %.396 - store i8 %41, ptr %42, align 1, !tbaa !3 +.lr.ph97.preheader: ; preds = %.critedge2, %.lr.ph97 + %.396 = phi i64 [ %.3, %.lr.ph97 ], [ %.394, %.critedge2 ] + %.26595 = phi ptr [ %38, %.lr.ph97 ], [ %.063, %.critedge2 ] + %38 = getelementptr inbounds nuw i8, ptr %.26595, i64 1 + %39 = load i8, ptr %.26595, align 1, !tbaa !3 + %40 = getelementptr inbounds nuw i8, ptr %0, i64 %.396 + store i8 %39, ptr %40, align 1, !tbaa !3 %.3 = add i64 %.396, 1 - %exitcond.not = icmp eq i64 %.3, %39 - br i1 %exitcond.not, label %.loopexit, label %.lr.ph97, !llvm.loop !8 + %exitcond.not = icmp ult ptr %38, %.362.lcssa + br i1 %exitcond.not, label %.lr.ph97, label %.loopexit, !llvm.loop !8 .loopexit: ; preds = %.lr.ph97, %.critedge2, %19 - %.164 = phi ptr [ %.160.lcssa, %19 ], [ %.063, %.critedge2 ], [ %40, %.lr.ph97 ] + %.164 = phi ptr [ %.160.lcssa, %19 ], [ %.063, %.critedge2 ], [ %38, %.lr.ph97 ] %.261 = phi ptr [ %.160.lcssa, %19 ], [ %.362.lcssa, %.critedge2 ], [ %.362.lcssa, %.lr.ph97 ] - %.2 = phi i64 [ %22, %19 ], [ %.394, %.critedge2 ], [ %39, %.lr.ph97 ] + %.2 = phi i64 [ %22, %19 ], [ %.394, %.critedge2 ], [ %.3, %.lr.ph97 ] %.not72 = icmp ult i64 %.2, %1 br i1 %.not72, label %6, label %43 @@ -221,7 +214,6 @@ reorder_and_predict.exit: ; preds = %.lr.ph39.i, %7, %._ %.063.i = phi ptr [ %35, %reorder_and_predict.exit ], [ %.164.i, %.loopexit.i ] %.pn.i = phi ptr [ %35, %reorder_and_predict.exit ], [ %.261.i, %.loopexit.i ] %.057.i = phi i64 [ 0, %reorder_and_predict.exit ], [ %.2.i, %.loopexit.i ] - %.063102.i = ptrtoint ptr %.063.i to i64 %38 = icmp ult ptr %.063.i, %36 br i1 %38, label %.preheader73.i, label %internal_rle_compress.exit @@ -331,27 +323,21 @@ reorder_and_predict.exit: ; preds = %.lr.ph39.i, %7, %._ %69 = icmp ult ptr %.063.i, %.362.lcssa.i br i1 %69, label %.lr.ph97.preheader.i, label %.loopexit.i -.lr.ph97.preheader.i: ; preds = %.critedge2.i - %.362.lcssa101.i = ptrtoint ptr %.362.lcssa.i to i64 - %70 = sub i64 %.394.i, %.063102.i - %71 = add i64 %70, %.362.lcssa101.i - br label %.lr.ph97.i - -.lr.ph97.i: ; preds = %.lr.ph97.i, %.lr.ph97.preheader.i - %.396.i = phi i64 [ %.3.i, %.lr.ph97.i ], [ %.394.i, %.lr.ph97.preheader.i ] - %.26595.i = phi ptr [ %72, %.lr.ph97.i ], [ %.063.i, %.lr.ph97.preheader.i ] - %72 = getelementptr inbounds nuw i8, ptr %.26595.i, i64 1 - %73 = load i8, ptr %.26595.i, align 1, !tbaa !3 - %74 = getelementptr inbounds nuw i8, ptr %32, i64 %.396.i - store i8 %73, ptr %74, align 1, !tbaa !3 +.lr.ph97.preheader.i: ; preds = %.critedge2.i, %.lr.ph97.i + %.396.i = phi i64 [ %.3.i, %.lr.ph97.i ], [ %.394.i, %.critedge2.i ] + %.26595.i = phi ptr [ %70, %.lr.ph97.i ], [ %.063.i, %.critedge2.i ] + %70 = getelementptr inbounds nuw i8, ptr %.26595.i, i64 1 + %71 = load i8, ptr %.26595.i, align 1, !tbaa !3 + %72 = getelementptr inbounds nuw i8, ptr %32, i64 %.396.i + store i8 %71, ptr %72, align 1, !tbaa !3 %.3.i = add i64 %.396.i, 1 - %exitcond.not.i = icmp eq i64 %.3.i, %71 - br i1 %exitcond.not.i, label %.loopexit.i, label %.lr.ph97.i, !llvm.loop !8 + %exitcond.not.i = icmp ult ptr %70, %.362.lcssa.i + br i1 %exitcond.not.i, label %.lr.ph97.i, label %.loopexit.i, !llvm.loop !8 .loopexit.i: ; preds = %.lr.ph97.i, %.critedge2.i, %51 - %.164.i = phi ptr [ %.160.lcssa.i, %51 ], [ %.063.i, %.critedge2.i ], [ %72, %.lr.ph97.i ] + %.164.i = phi ptr [ %.160.lcssa.i, %51 ], [ %.063.i, %.critedge2.i ], [ %70, %.lr.ph97.i ] %.261.i = phi ptr [ %.160.lcssa.i, %51 ], [ %.362.lcssa.i, %.critedge2.i ], [ %.362.lcssa.i, %.lr.ph97.i ] - %.2.i = phi i64 [ %54, %51 ], [ %.394.i, %.critedge2.i ], [ %71, %.lr.ph97.i ] + %.2.i = phi i64 [ %54, %51 ], [ %.394.i, %.critedge2.i ], [ %.3.i, %.lr.ph97.i ] %.not72.i = icmp ult i64 %.2.i, %34 br i1 %.not72.i, label %37, label %internal_rle_compress.exit @@ -367,13 +353,13 @@ internal_rle_compress.exit: ; preds = %37, %.loopexit.i br label %78 78: ; preds = %75, %internal_rle_compress.exit - %.022 = phi i64 [ %3, %75 ], [ %.158.i, %internal_rle_compress.exit ] + %.022 = phi i64 [ %3, %74 ], [ %.158.i, %internal_rle_compress.exit ] %79 = getelementptr inbounds nuw i8, ptr %0, i64 176 store i64 %.022, ptr %79, align 8, !tbaa !24 br label %80 80: ; preds = %1, %78 - %.0 = phi i32 [ 0, %78 ], [ %6, %1 ] + %.0 = phi i32 [ 0, %77 ], [ %6, %1 ] ret i32 %.0 } diff --git a/bench/openjdk/optimized/mlib_c_ImageCopy.ll b/bench/openjdk/optimized/mlib_c_ImageCopy.ll index a04669a477e..37df2c53645 100644 --- a/bench/openjdk/optimized/mlib_c_ImageCopy.ll +++ b/bench/openjdk/optimized/mlib_c_ImageCopy.ll @@ -388,23 +388,16 @@ define hidden void @mlib_ImageCopy_bit_al(ptr noundef %0, ptr noundef %1, i32 no %.not98120 = icmp sgt i32 %.092.lcssa, %43 br i1 %.not98120, label %.loopexit, label %.lr.ph123.preheader -.lr.ph123.preheader: ; preds = %.preheader - %44 = sub i32 %43, %.092.lcssa - %45 = lshr i32 %44, 3 - %46 = add nuw nsw i32 %45, 1 - %wide.trip.count149 = zext nneg i32 %46 to i64 - br label %.lr.ph123 - -.lr.ph123: ; preds = %.lr.ph123.preheader, %.lr.ph123 - %indvars.iv146 = phi i64 [ 0, %.lr.ph123.preheader ], [ %indvars.iv.next147, %.lr.ph123 ] - %.193121 = phi i32 [ %.092.lcssa, %.lr.ph123.preheader ], [ %50, %.lr.ph123 ] - %47 = getelementptr inbounds nuw double, ptr %.0.lcssa, i64 %indvars.iv146 - %48 = load double, ptr %47, align 8 - %49 = getelementptr inbounds nuw double, ptr %.087.lcssa, i64 %indvars.iv146 - store double %48, ptr %49, align 8 - %50 = add nuw nsw i32 %.193121, 8 +.lr.ph123.preheader: ; preds = %.preheader, %.lr.ph123 + %indvars.iv146 = phi i64 [ %indvars.iv.next147, %.lr.ph123 ], [ 0, %.preheader ] + %.193121 = phi i32 [ %47, %.lr.ph123 ], [ %.092.lcssa, %.preheader ] + %44 = getelementptr inbounds nuw double, ptr %.0.lcssa, i64 %indvars.iv146 + %45 = load double, ptr %44, align 8 + %46 = getelementptr inbounds nuw double, ptr %.087.lcssa, i64 %indvars.iv146 + store double %45, ptr %46, align 8 + %47 = add nuw nsw i32 %.193121, 8 %indvars.iv.next147 = add nuw nsw i64 %indvars.iv146, 1 - %exitcond150 = icmp eq i64 %indvars.iv.next147, %wide.trip.count149 + %exitcond150 = icmp sgt i32 %47, %43 br i1 %exitcond150, label %.loopexit, label %.lr.ph123, !llvm.loop !16 51: ; preds = %._crit_edge @@ -423,16 +416,12 @@ define hidden void @mlib_ImageCopy_bit_al(ptr noundef %0, ptr noundef %1, i32 no %60 = sub nuw nsw i32 64, %59 %61 = zext nneg i32 %59 to i64 %62 = zext nneg i32 %60 to i64 - %63 = sub i32 %55, %.092.lcssa - %64 = lshr i32 %63, 3 - %65 = add nuw nsw i32 %64, 1 - %wide.trip.count = zext nneg i32 %65 to i64 - br label %66 - -66: ; preds = %.lr.ph117, %66 - %indvars.iv = phi i64 [ 0, %.lr.ph117 ], [ %indvars.iv.next, %66 ] - %.086115 = phi i64 [ %56, %.lr.ph117 ], [ %68, %66 ] - %.3113 = phi i32 [ %.092.lcssa, %.lr.ph117 ], [ %73, %66 ] + br label %60 + +60:; preds = %.lr.ph117, %60 + %indvars.iv = phi i64 [ 0, %.lr.ph117 ], [ %indvars.iv.next, %60 ] + %.086115 = phi i64 [ %53, %.lr.ph117 ], [ %62, %60 ] + %.3113 = phi i32 [ %.092.lcssa, %.lr.ph117 ], [ %67, %60 ] %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %67 = getelementptr inbounds nuw i64, ptr %54, i64 %indvars.iv.next %68 = load i64, ptr %67, align 8 @@ -442,12 +431,20 @@ define hidden void @mlib_ImageCopy_bit_al(ptr noundef %0, ptr noundef %1, i32 no %72 = getelementptr inbounds nuw i64, ptr %.087.lcssa, i64 %indvars.iv store i64 %71, ptr %72, align 8 %73 = add nuw nsw i32 %.3113, 8 - %exitcond = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond, label %.loopexit, label %66, !llvm.loop !17 + %exitcond = icmp sgt i32 %67, %52 + br i1 %exitcond, label %.loopexit.loopexit134, label %60, !llvm.loop !17 + +.loopexit: ; preds = %.lr.ph123.preheader + %68 = trunc nuw nsw i64 %indvars.iv.next147 to i32 + br label %.loopexit + +.loopexit.loopexit134: ; preds = %60 + %69 = trunc nuw nsw i64 %indvars.iv.next to i32 + br label %.loopexit -.loopexit: ; preds = %66, %.lr.ph123, %51, %.preheader - %.294 = phi i32 [ %.092.lcssa, %.preheader ], [ %.092.lcssa, %51 ], [ %50, %.lr.ph123 ], [ %73, %66 ] - %.pn.in.in = phi i32 [ 0, %.preheader ], [ 0, %51 ], [ %46, %.lr.ph123 ], [ %65, %66 ] +.loopexit: ; preds = %.loopexit.loopexit134, %.loopexit.loopexit, %48, %.preheader + %.294 = phi i32 [ %.092.lcssa, %.preheader ], [ %.092.lcssa, %48 ], [ %47, %.loopexit.loopexit ], [ %67, %.loopexit.loopexit134 ] + %.pn.in.in = phi i32 [ 0, %.preheader ], [ 0, %48 ], [ %68, %.loopexit.loopexit ], [ %69, %.loopexit.loopexit134 ] %.pn.in = shl i32 %.pn.in.in, 3 %.pn = sext i32 %.pn.in to i64 %.1 = getelementptr inbounds i8, ptr %.0.lcssa, i64 %.pn @@ -481,10 +478,10 @@ define hidden void @mlib_ImageCopy_bit_al(ptr noundef %0, ptr noundef %1, i32 no br label %.sink.split .sink.split: ; preds = %8, %80 - %.sink166 = phi i32 [ %83, %80 ], [ %12, %8 ] - %.2.lcssa.sink = phi ptr [ %.2.lcssa, %80 ], [ %0, %8 ] - %.sink163 = phi i32 [ %82, %80 ], [ %12, %8 ] - %.289.lcssa.sink = phi ptr [ %.289.lcssa, %80 ], [ %1, %8 ] + %.sink166 = phi i32 [ %83, %76 ], [ %12, %8 ] + %.2.lcssa.sink = phi ptr [ %.2.lcssa, %76 ], [ %0, %8 ] + %.sink163 = phi i32 [ %82, %76 ], [ %12, %8 ] + %.289.lcssa.sink = phi ptr [ %.289.lcssa, %76 ], [ %1, %8 ] %.sink.in = load i8, ptr %.289.lcssa.sink, align 1 %.sink = zext i8 %.sink.in to i32 %84 = xor i32 %.sink166, -1 diff --git a/bench/openjdk/optimized/sharedRuntimeTrig.ll b/bench/openjdk/optimized/sharedRuntimeTrig.ll index 60874724137..8045260bd84 100644 --- a/bench/openjdk/optimized/sharedRuntimeTrig.ll +++ b/bench/openjdk/optimized/sharedRuntimeTrig.ll @@ -611,8 +611,6 @@ define internal fastcc noundef i32 @_ZL18__ieee754_rem_pio2dPd(double noundef %0 %162 = zext nneg i32 %.0231.i to i64 %163 = getelementptr inbounds nuw [20 x double], ptr %6, i64 0, i64 %162 %164 = load double, ptr %163, align 8 - %165 = tail call i32 @llvm.smax.i32(i32 %.0231.i, i32 1) - %wide.trip.count114.i = zext nneg i32 %165 to i64 br label %.lr.ph39.i .lr.ph39.i: ; preds = %.lr.ph39.i, %.lr.ph39.preheader.i @@ -632,8 +630,8 @@ define internal fastcc noundef i32 @_ZL18__ieee754_rem_pio2dPd(double noundef %0 %174 = load double, ptr %173, align 8 %175 = fadd double %174, %168 %indvars.iv.next110.i = add nuw nsw i64 %indvars.iv109.i, 1 - %exitcond115.not.i = icmp eq i64 %indvars.iv.next110.i, %wide.trip.count114.i - br i1 %exitcond115.not.i, label %._crit_edge.i, label %.lr.ph39.i, !llvm.loop !13 + %exitcond115.not.i = icmp samesign ugt i64 %indvars.iv107.i, 1 + br i1 %exitcond115.not.i, label %.lr.ph39.i, label %._crit_edge.i, !llvm.loop !13 ._crit_edge.i: ; preds = %.lr.ph39.i %176 = bitcast double %175 to i64 diff --git a/bench/openusd/optimized/openexr-c.ll b/bench/openusd/optimized/openexr-c.ll index d29532722c7..25bef0c3889 100644 --- a/bench/openusd/optimized/openexr-c.ll +++ b/bench/openusd/optimized/openexr-c.ll @@ -23936,7 +23936,6 @@ reorder_and_predict.exit: ; preds = %.lr.ph39.i, %7, %._ %.061.i = phi ptr [ %36, %reorder_and_predict.exit ], [ %.162.i, %.loopexit.i ] %.pn.i = phi ptr [ %36, %reorder_and_predict.exit ], [ %.259.i, %.loopexit.i ] %.055.i = phi i64 [ 0, %reorder_and_predict.exit ], [ %.2.i, %.loopexit.i ] - %.061100.i = ptrtoint ptr %.061.i to i64 %39 = icmp ult ptr %.061.i, %37 br i1 %39, label %.preheader71.i, label %internal_rle_compress.exit @@ -24046,27 +24045,21 @@ reorder_and_predict.exit: ; preds = %.lr.ph39.i, %7, %._ %70 = icmp ult ptr %.061.i, %.360.lcssa.i br i1 %70, label %.lr.ph95.preheader.i, label %.loopexit.i -.lr.ph95.preheader.i: ; preds = %.critedge2.i - %.360.lcssa99.i = ptrtoint ptr %.360.lcssa.i to i64 - %71 = sub i64 %.392.i, %.061100.i - %72 = add i64 %71, %.360.lcssa99.i - br label %.lr.ph95.i - -.lr.ph95.i: ; preds = %.lr.ph95.i, %.lr.ph95.preheader.i - %.394.i = phi i64 [ %.3.i, %.lr.ph95.i ], [ %.392.i, %.lr.ph95.preheader.i ] - %.26393.i = phi ptr [ %73, %.lr.ph95.i ], [ %.061.i, %.lr.ph95.preheader.i ] - %73 = getelementptr inbounds nuw i8, ptr %.26393.i, i64 1 - %74 = load i8, ptr %.26393.i, align 1 - %75 = getelementptr inbounds i8, ptr %33, i64 %.394.i - store i8 %74, ptr %75, align 1 +.lr.ph95.preheader.i: ; preds = %.critedge2.i, %.lr.ph95.i + %.394.i = phi i64 [ %.3.i, %.lr.ph95.i ], [ %.392.i, %.critedge2.i ] + %.26393.i = phi ptr [ %71, %.lr.ph95.i ], [ %.061.i, %.critedge2.i ] + %71 = getelementptr inbounds nuw i8, ptr %.26393.i, i64 1 + %72 = load i8, ptr %.26393.i, align 1 + %73 = getelementptr inbounds i8, ptr %33, i64 %.394.i + store i8 %72, ptr %73, align 1 %.3.i = add i64 %.394.i, 1 - %exitcond.not.i = icmp eq i64 %.3.i, %72 - br i1 %exitcond.not.i, label %.loopexit.i, label %.lr.ph95.i, !llvm.loop !122 + %exitcond.not.i = icmp ult ptr %71, %.360.lcssa.i + br i1 %exitcond.not.i, label %.lr.ph95.i, label %.loopexit.i, !llvm.loop !122 .loopexit.i: ; preds = %.lr.ph95.i, %.critedge2.i, %52 - %.162.i = phi ptr [ %.158.lcssa.i, %52 ], [ %.061.i, %.critedge2.i ], [ %73, %.lr.ph95.i ] + %.162.i = phi ptr [ %.158.lcssa.i, %52 ], [ %.061.i, %.critedge2.i ], [ %71, %.lr.ph95.i ] %.259.i = phi ptr [ %.158.lcssa.i, %52 ], [ %.360.lcssa.i, %.critedge2.i ], [ %.360.lcssa.i, %.lr.ph95.i ] - %.2.i = phi i64 [ %55, %52 ], [ %.392.i, %.critedge2.i ], [ %72, %.lr.ph95.i ] + %.2.i = phi i64 [ %55, %52 ], [ %.392.i, %.critedge2.i ], [ %.3.i, %.lr.ph95.i ] %.not70.i = icmp ult i64 %.2.i, %35 br i1 %.not70.i, label %38, label %internal_rle_compress.exit, !llvm.loop !123 @@ -24082,13 +24075,13 @@ internal_rle_compress.exit: ; preds = %38, %.loopexit.i br label %79 79: ; preds = %76, %internal_rle_compress.exit - %.022 = phi i64 [ %3, %76 ], [ %.156.i, %internal_rle_compress.exit ] + %.022 = phi i64 [ %3, %75 ], [ %.156.i, %internal_rle_compress.exit ] %80 = getelementptr inbounds nuw i8, ptr %0, i64 168 store i64 %.022, ptr %80, align 8 br label %81 81: ; preds = %1, %79 - %.0 = phi i32 [ 0, %79 ], [ %6, %1 ] + %.0 = phi i32 [ 0, %78 ], [ %6, %1 ] ret i32 %.0 } @@ -25353,7 +25346,6 @@ define internal fastcc i64 @internal_rle_compress(ptr noundef writeonly captures %.061 = phi ptr [ %2, %4 ], [ %.162, %.loopexit ] %.pn = phi ptr [ %2, %4 ], [ %.259, %.loopexit ] %.055 = phi i64 [ 0, %4 ], [ %.2, %.loopexit ] - %.061100 = ptrtoint ptr %.061 to i64 %7 = icmp ult ptr %.061, %5 br i1 %7, label %.preheader71, label %43 @@ -25451,27 +25443,21 @@ define internal fastcc i64 @internal_rle_compress(ptr noundef writeonly captures %37 = icmp ult ptr %.061, %.360.lcssa br i1 %37, label %.lr.ph95.preheader, label %.loopexit -.lr.ph95.preheader: ; preds = %.critedge2 - %.360.lcssa99 = ptrtoint ptr %.360.lcssa to i64 - %38 = add i64 %.392, %.360.lcssa99 - %39 = sub i64 %38, %.061100 - br label %.lr.ph95 - -.lr.ph95: ; preds = %.lr.ph95.preheader, %.lr.ph95 - %.394 = phi i64 [ %.3, %.lr.ph95 ], [ %.392, %.lr.ph95.preheader ] - %.26393 = phi ptr [ %40, %.lr.ph95 ], [ %.061, %.lr.ph95.preheader ] - %40 = getelementptr inbounds nuw i8, ptr %.26393, i64 1 - %41 = load i8, ptr %.26393, align 1 - %42 = getelementptr inbounds i8, ptr %0, i64 %.394 - store i8 %41, ptr %42, align 1 +.lr.ph95.preheader: ; preds = %.critedge2, %.lr.ph95 + %.394 = phi i64 [ %.3, %.lr.ph95 ], [ %.392, %.critedge2 ] + %.26393 = phi ptr [ %38, %.lr.ph95 ], [ %.061, %.critedge2 ] + %38 = getelementptr inbounds nuw i8, ptr %.26393, i64 1 + %39 = load i8, ptr %.26393, align 1 + %40 = getelementptr inbounds i8, ptr %0, i64 %.394 + store i8 %39, ptr %40, align 1 %.3 = add i64 %.394, 1 - %exitcond.not = icmp eq i64 %.3, %39 - br i1 %exitcond.not, label %.loopexit, label %.lr.ph95, !llvm.loop !122 + %exitcond.not = icmp ult ptr %38, %.360.lcssa + br i1 %exitcond.not, label %.lr.ph95, label %.loopexit, !llvm.loop !122 .loopexit: ; preds = %.lr.ph95, %.critedge2, %19 - %.162 = phi ptr [ %.158.lcssa, %19 ], [ %.061, %.critedge2 ], [ %40, %.lr.ph95 ] + %.162 = phi ptr [ %.158.lcssa, %19 ], [ %.061, %.critedge2 ], [ %38, %.lr.ph95 ] %.259 = phi ptr [ %.158.lcssa, %19 ], [ %.360.lcssa, %.critedge2 ], [ %.360.lcssa, %.lr.ph95 ] - %.2 = phi i64 [ %22, %19 ], [ %.392, %.critedge2 ], [ %39, %.lr.ph95 ] + %.2 = phi i64 [ %22, %19 ], [ %.392, %.critedge2 ], [ %.3, %.lr.ph95 ] %.not70 = icmp ult i64 %.2, %1 br i1 %.not70, label %6, label %43, !llvm.loop !123 diff --git a/bench/php/optimized/ir_ra.ll b/bench/php/optimized/ir_ra.ll index 57f2207e452..d53769b6fcc 100644 --- a/bench/php/optimized/ir_ra.ll +++ b/bench/php/optimized/ir_ra.ll @@ -6782,8 +6782,10 @@ ir_ival_spill_for_fuse_load.exit.i: ; preds = %ir_add_to_unhandled ir_merge_to_unhandled.exit.i: ; preds = %.critedge.i290.i, %246, %._crit_edge523.i %264 = load i32, ptr %94, align 8, !tbaa !38 %265 = sext i32 %264 to i64 - %266 = add nsw i32 %264, 33 - %267 = sext i32 %266 to i64 + %266 = add i32 %264, 33 + %smax.i = call i32 @llvm.smax.i32(i32 %264, i32 %266) + %267 = add i32 %smax.i, 1 + %wide.trip.count.i = sext i32 %267 to i64 br label %268 268: ; preds = %275, %ir_merge_to_unhandled.exit.i @@ -6805,8 +6807,8 @@ ir_merge_to_unhandled.exit.i: ; preds = %.critedge.i290.i, % 275: ; preds = %271, %268 %.1396.i = phi ptr [ %.0395530.i, %268 ], [ %270, %271 ] - %.not238.not.i = icmp slt i64 %indvars.iv670.i, %267 - br i1 %.not238.not.i, label %268, label %276 + %.not238.not.i = icmp eq i64 %indvars.iv.next671.i, %wide.trip.count.i + br i1 %.not238.not.i, label %276, label %268 276: ; preds = %275 %277 = load i32, ptr %15, align 4, !tbaa !40 diff --git a/bench/pola-rs/optimized/eo2lit9v8mg9048herjayt2j2.ll b/bench/pola-rs/optimized/eo2lit9v8mg9048herjayt2j2.ll index 35da336301c..187450b6301 100644 --- a/bench/pola-rs/optimized/eo2lit9v8mg9048herjayt2j2.ll +++ b/bench/pola-rs/optimized/eo2lit9v8mg9048herjayt2j2.ll @@ -271098,7 +271098,7 @@ define hidden void @"_ZN93_$LT$$RF$mut$u20$serde_json..de..Deserializer$LT$R$GT$ %exitcond.not.i.i = icmp eq i64 %19, %10 br i1 %exitcond.not.i.i, label %.loopexit35.i, label %14 -.loopexit32.i: ; preds = %61 +.loopexit32.i: ; preds = %58 %lpad.loopexit.i = landingpad { ptr, i32 } cleanup br label %20 @@ -271111,7 +271111,7 @@ define hidden void @"_ZN93_$LT$$RF$mut$u20$serde_json..de..Deserializer$LT$R$GT$ 20: ; preds = %.loopexit.split-lp.i, %.loopexit32.i %lpad.phi.i = phi { ptr, i32 } [ %lpad.loopexit.i, %.loopexit32.i ], [ %lpad.loopexit.split-lp.i, %.loopexit.split-lp.i ] invoke void @"_ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17h7e8e4acf8695f9f9E"(ptr noalias noundef nonnull align 8 dereferenceable(24) %7) #29 - to label %151 unwind label %149, !noalias !50490 + to label %149 unwind label %149, !noalias !50490 .loopexit35.i: ; preds = %18, %2 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !50495 @@ -271203,40 +271203,34 @@ define hidden void @"_ZN93_$LT$$RF$mut$u20$serde_json..de..Deserializer$LT$R$GT$ %52 = icmp ult i64 %29, %10 br i1 %52, label %.lr.ph.i7.i.preheader, label %.loopexit33.i -.lr.ph.i7.i.preheader: ; preds = %.noexc10.i - %53 = add i64 %23, %10 - %54 = xor i64 %24, -1 - %55 = add i64 %53, %54 - br label %.lr.ph.i7.i - -.lr.ph.i7.i: ; preds = %.lr.ph.i7.i.preheader, %.noexc11.i - %56 = phi i64 [ %storemerge.i.i, %.noexc11.i ], [ %23, %.lr.ph.i7.i.preheader ] - %57 = phi i64 [ %62, %.noexc11.i ], [ %29, %.lr.ph.i7.i.preheader ] - %58 = getelementptr inbounds nuw i8, ptr %13, i64 %57 - %59 = load i8, ptr %58, align 1, !noalias !50547, !noundef !4 - %60 = add i8 %59, -48 - %or.cond3.i.i = icmp ult i8 %60, 10 - br i1 %or.cond3.i.i, label %61, label %.loopexit33.i - -61: ; preds = %.lr.ph.i7.i - %62 = add nuw i64 %57, 1 - store i64 %62, ptr %8, align 8, !alias.scope !50554, !noalias !50557 - %63 = icmp sgt i64 %56, -1 - call void @llvm.assume(i1 %63) +.lr.ph.i7.i.preheader: ; preds = %.noexc10.i, %.noexc11.i + %53 = phi i64 [ %storemerge.i.i, %.noexc11.i ], [ %23, %.noexc10.i ] + %54 = phi i64 [ %59, %.noexc11.i ], [ %29, %.noexc10.i ] + %55 = getelementptr inbounds nuw i8, ptr %13, i64 %54 + %56 = load i8, ptr %55, align 1, !noalias !50547, !noundef !4 + %57 = add i8 %56, -48 + %or.cond3.i.i = icmp ult i8 %57, 10 + br i1 %or.cond3.i.i, label %58, label %.loopexit33.i + +58: ; preds = %.lr.ph.i7.i + %59 = add nuw i64 %54, 1 + store i64 %59, ptr %8, align 8, !alias.scope !50554, !noalias !50557 + %or.cond3.i.i = icmp sgt i64 %53, -1 + call void @llvm.assume(i1 %or.cond3.i.i) invoke void @"_ZN5alloc3vec16Vec$LT$T$C$A$GT$7reserve17h9139c5ee146bdbc7E"(ptr noalias noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 1, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.9f7a40e45e66506b253a63f14237fffc.959) to label %.noexc11.i unwind label %.loopexit32.i, !noalias !50495 -.noexc11.i: ; preds = %61 +.noexc11.i: ; preds = %58 %64 = load ptr, ptr %.sroa.4.0..sroa_idx.i, align 8, !alias.scope !50558, !noalias !50535, !nonnull !4, !noundef !4 %65 = load i64, ptr %.sroa.5.0..sroa_idx.i, align 8, !alias.scope !50558, !noalias !50535, !noundef !4 %66 = icmp sgt i64 %65, -1 call void @llvm.assume(i1 %66) %67 = getelementptr inbounds nuw i8, ptr %64, i64 %65 - store i8 %59, ptr %67, align 1, !noalias !50535 - %storemerge.i.i = add nuw i64 %56, 1 + store i8 %56, ptr %67, align 1, !noalias !50535 + %storemerge.i.i = add nuw i64 %53, 1 store i64 %storemerge.i.i, ptr %.sroa.5.0..sroa_idx.i, align 8, !alias.scope !50519, !noalias !50535 - %exitcond.not = icmp eq i64 %storemerge.i.i, %55 - br i1 %exitcond.not, label %.loopexit33.i.thread, label %.lr.ph.i7.i + %exitcond.not = icmp ult i64 %59, %10 + br i1 %exitcond.not, label %.lr.ph.i7.i, label %.loopexit33.i.thread .loopexit33.i.thread: ; preds = %.noexc11.i %68 = load ptr, ptr %.sroa.4.0..sroa_idx.i, align 8, !noalias !50495, !nonnull !4, !noundef !4 @@ -271260,7 +271254,7 @@ _ZN5alloc6string6String4push17h884f95d0fa771cb7E.exit.i: ; preds = %70 br label %.loopexit34.i .loopexit33.i: ; preds = %.lr.ph.i7.i, %.noexc10.i, %39, %.noexc.i - %76 = phi i64 [ %23, %.noexc10.i ], [ %23, %.noexc.i ], [ %23, %39 ], [ %56, %.lr.ph.i7.i ] + %76 = phi i64 [ %23, %.noexc10.i ], [ %23, %.noexc.i ], [ %23, %39 ], [ %53, %.lr.ph.i7.i ] %77 = load ptr, ptr %.sroa.4.0..sroa_idx.i, align 8, !noalias !50495, !nonnull !4, !noundef !4 %cond.i = icmp eq i64 %76, 1 %78 = load i8, ptr %77, align 1, !alias.scope !50561, !noalias !50564 @@ -271273,10 +271267,10 @@ _ZN5alloc6string6String4push17h884f95d0fa771cb7E.exit.i: ; preds = %70 ] thread-pre-split.i.i: ; preds = %.loopexit33.i.thread, %79, %.loopexit33.i - %80 = phi i8 [ %69, %.loopexit33.i.thread ], [ %78, %79 ], [ %78, %.loopexit33.i ] - %81 = phi ptr [ %68, %.loopexit33.i.thread ], [ %77, %79 ], [ %77, %.loopexit33.i ] - %82 = phi i64 [ %55, %.loopexit33.i.thread ], [ 1, %79 ], [ %76, %.loopexit33.i ] - switch i8 %80, label %117 [ + %80 = phi i8 [ %69, %.loopexit33.i.thread ], [ %78, %77 ], [ %78, %.loopexit33.i ] + %81 = phi ptr [ %68, %.loopexit33.i.thread ], [ %77, %77 ], [ %77, %.loopexit33.i ] + %82 = phi i64 [ %storemerge.i.i, %.loopexit33.i.thread ], [ 1, %77 ], [ %76, %.loopexit33.i ] + switch i8 %80, label %115 [ i8 43, label %83 i8 45, label %87 ] @@ -271288,8 +271282,8 @@ thread-pre-split.i.i: ; preds = %.loopexit33.i.threa br i1 %86, label %.preheader.i.i, label %.preheader79.i.i.preheader .preheader79.i.i.preheader: ; preds = %117, %83 - %.sroa.23.0.i.i.ph = phi i64 [ %85, %83 ], [ %82, %117 ] - %.sroa.01.0.i.i.ph = phi ptr [ %84, %83 ], [ %81, %117 ] + %.sroa.23.0.i.i.ph = phi i64 [ %85, %81 ], [ %82, %115 ] + %.sroa.01.0.i.i.ph = phi ptr [ %84, %81 ], [ %81, %115 ] br label %.preheader79.i.i 87: ; preds = %thread-pre-split.i.i @@ -271303,16 +271297,16 @@ thread-pre-split.i.i: ; preds = %.loopexit33.i.threa br i1 %.not7393.i.i, label %.loopexit25.i, label %.lr.ph.i14.i .preheader79.i.i: ; preds = %.preheader79.i.i.preheader, %130 - %.sroa.023.0.i.i = phi i128 [ %134, %130 ], [ 0, %.preheader79.i.i.preheader ] - %.sroa.23.0.i.i = phi i64 [ %121, %130 ], [ %.sroa.23.0.i.i.ph, %.preheader79.i.i.preheader ] - %.sroa.01.0.i.i = phi ptr [ %120, %130 ], [ %.sroa.01.0.i.i.ph, %.preheader79.i.i.preheader ] + %.sroa.023.0.i.i = phi i128 [ %134, %128 ], [ 0, %.preheader79.i.i.preheader ] + %.sroa.23.0.i.i = phi i64 [ %121, %128 ], [ %.sroa.23.0.i.i.ph, %.preheader79.i.i.preheader ] + %.sroa.01.0.i.i = phi ptr [ %120, %128 ], [ %.sroa.01.0.i.i.ph, %.preheader79.i.i.preheader ] %.not74.i.i = icmp eq i64 %.sroa.23.0.i.i, 0 br i1 %.not74.i.i, label %.loopexit25.i, label %119 -.preheader83.i.i: ; preds = %87, %102 - %.sroa.023.3.i.i = phi i128 [ %106, %102 ], [ 0, %87 ] - %.sroa.23.2.i.i = phi i64 [ %93, %102 ], [ %89, %87 ] - %.sroa.01.2.i.i = phi ptr [ %92, %102 ], [ %88, %87 ] +.preheader83.i.i: ; preds = %87, %100 + %.sroa.023.3.i.i = phi i128 [ %104, %100 ], [ 0, %85 ] + %.sroa.23.2.i.i = phi i64 [ %93, %100 ], [ %89, %85 ] + %.sroa.01.2.i.i = phi ptr [ %92, %100 ], [ %88, %85 ] %.not.i.i = icmp eq i64 %.sroa.23.2.i.i, 0 br i1 %.not.i.i, label %.loopexit25.i, label %91 @@ -271325,36 +271319,36 @@ thread-pre-split.i.i: ; preds = %.loopexit33.i.threa %97 = zext i8 %96 to i32 %98 = add nsw i32 %97, -48 %99 = icmp ult i32 %98, 10 - br i1 %99, label %100, label %.loopexit.i + br i1 %99, label %102, label %.loopexit.i -100: ; preds = %91 - %101 = extractvalue { i128, i1 } %94, 1 - br i1 %101, label %.loopexit.i, label %102 - -102: ; preds = %100 - %103 = zext nneg i32 %98 to i128 - %104 = call { i128, i1 } @llvm.ssub.with.overflow.i128(i128 %95, i128 %103) - %105 = extractvalue { i128, i1 } %104, 1 - %106 = extractvalue { i128, i1 } %104, 0 - br i1 %105, label %.loopexit.i, label %.preheader83.i.i - -.lr.ph.i14.i: ; preds = %.preheader81.i.i, %111 - %.sroa.01.396.i.i = phi ptr [ %114, %111 ], [ %88, %.preheader81.i.i ] - %.sroa.23.395.i.i = phi i64 [ %113, %111 ], [ %89, %.preheader81.i.i ] - %.sroa.023.494.i.i = phi i128 [ %116, %111 ], [ 0, %.preheader81.i.i ] - %107 = load i8, ptr %.sroa.01.396.i.i, align 1, !alias.scope !50561, !noalias !50564, !noundef !4 - %108 = zext i8 %107 to i32 - %109 = add nsw i32 %108, -48 - %110 = icmp ult i32 %109, 10 - br i1 %110, label %111, label %.loopexit.i - -111: ; preds = %.lr.ph.i14.i - %112 = mul i128 %.sroa.023.494.i.i, 10 - %113 = add nsw i64 %.sroa.23.395.i.i, -1 - %114 = getelementptr inbounds nuw i8, ptr %.sroa.01.396.i.i, i64 1 - %115 = zext nneg i32 %109 to i128 - %116 = sub i128 %112, %115 - %.not73.i.i = icmp eq i64 %113, 0 +102: ; preds = %91 + %99 = extractvalue { i128, i1 } %92, 1 + br i1 %99, label %.loopexit.i, label %100 + +100:; preds = %102 + %101 = zext nneg i32 %98 to i128 + %102 = call { i128, i1 } @llvm.ssub.with.overflow.i128(i128 %93, i128 %101) + %103 = extractvalue { i128, i1 } %102, 1 + %104 = extractvalue { i128, i1 } %102, 0 + br i1 %103, label %.loopexit.i, label %.preheader83.i.i + +.lr.ph.i14.i:; preds = %.preheader81.i.i, %109 + %.sroa.01.396.i.i = phi ptr [ %112, %109 ], [ %86, %.preheader81.i.i ] + %.sroa.23.395.i.i = phi i64 [ %111, %109 ], [ %87, %.preheader81.i.i ] + %.sroa.023.494.i.i = phi i128 [ %114, %109 ], [ 0, %.preheader81.i.i ] + %105 = load i8, ptr %.sroa.01.396.i.i, align 1, !alias.scope !50561, !noalias !50564, !noundef !4 + %106 = zext i8 %105 to i32 + %107 = add nsw i32 %106, -48 + %108 = icmp ult i32 %107, 10 + br i1 %108, label %109, label %.loopexit.i + +109:; preds = %.lr.ph.i14.i + %110 = mul i128 %.sroa.023.494.i.i, 10 + %111 = add nsw i64 %.sroa.23.395.i.i, -1 + %112 = getelementptr inbounds nuw i8, ptr %.sroa.01.396.i.i, i64 1 + %113 = zext nneg i32 %107 to i128 + %114 = sub i128 %110, %113 + %.not73.i.i = icmp eq i64 %111, 0 br i1 %.not73.i.i, label %.loopexit25.i, label %.lr.ph.i14.i 117: ; preds = %thread-pre-split.i.i @@ -271362,8 +271356,8 @@ thread-pre-split.i.i: ; preds = %.loopexit33.i.threa br i1 %118, label %.lr.ph101.i.i.preheader, label %.preheader79.i.i.preheader .lr.ph101.i.i.preheader: ; preds = %.preheader.i.i, %117 - %.sroa.01.1100.i.i.ph = phi ptr [ %81, %117 ], [ %84, %.preheader.i.i ] - %.sroa.23.199.i.i.ph = phi i64 [ %82, %117 ], [ %85, %.preheader.i.i ] + %.sroa.01.1100.i.i.ph = phi ptr [ %81, %115 ], [ %84, %.preheader.i.i ] + %.sroa.23.199.i.i.ph = phi i64 [ %82, %115 ], [ %85, %.preheader.i.i ] br label %.lr.ph101.i.i .preheader.i.i: ; preds = %83 @@ -271393,9 +271387,9 @@ thread-pre-split.i.i: ; preds = %.loopexit33.i.threa br i1 %133, label %.loopexit.i, label %.preheader79.i.i .lr.ph101.i.i: ; preds = %.lr.ph101.i.i.preheader, %139 - %.sroa.01.1100.i.i = phi ptr [ %142, %139 ], [ %.sroa.01.1100.i.i.ph, %.lr.ph101.i.i.preheader ] - %.sroa.23.199.i.i = phi i64 [ %141, %139 ], [ %.sroa.23.199.i.i.ph, %.lr.ph101.i.i.preheader ] - %.sroa.023.298.i.i = phi i128 [ %144, %139 ], [ 0, %.lr.ph101.i.i.preheader ] + %.sroa.01.1100.i.i = phi ptr [ %142, %137 ], [ %.sroa.01.1100.i.i.ph, %.lr.ph101.i.i.preheader ] + %.sroa.23.199.i.i = phi i64 [ %141, %137 ], [ %.sroa.23.199.i.i.ph, %.lr.ph101.i.i.preheader ] + %.sroa.023.298.i.i = phi i128 [ %144, %137 ], [ 0, %.lr.ph101.i.i.preheader ] %135 = load i8, ptr %.sroa.01.1100.i.i, align 1, !alias.scope !50561, !noalias !50564, !noundef !4 %136 = zext i8 %135 to i32 %137 = add nsw i32 %136, -48 @@ -271411,14 +271405,14 @@ thread-pre-split.i.i: ; preds = %.loopexit33.i.threa %.not75.i.i = icmp eq i64 %141, 0 br i1 %.not75.i.i, label %.loopexit25.i, label %.lr.ph101.i.i -.loopexit.i: ; preds = %102, %100, %91, %.lr.ph.i14.i, %130, %128, %119, %.lr.ph101.i.i, %79, %79 +.loopexit.i: ; preds = %100, %102, %91, %.lr.ph.i14.i, %130, %128, %119, %.lr.ph101.i.i, %79, %79 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !50495 store i64 14, ptr %5, align 8, !noalias !50495 %145 = invoke noundef nonnull align 8 ptr @"_ZN10serde_json2de21Deserializer$LT$R$GT$5error17h9557cd91eade16f5E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(56) %1, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(24) %5) - to label %147 unwind label %.loopexit.split-lp.i, !noalias !50490 + to label %145 unwind label %.loopexit.split-lp.i, !noalias !50490 -.loopexit25.i: ; preds = %.preheader83.i.i, %111, %.preheader79.i.i, %139, %.preheader.i.i, %.preheader81.i.i - %.sroa.1518.0.i = phi i128 [ 0, %.preheader.i.i ], [ 0, %.preheader81.i.i ], [ %144, %139 ], [ %.sroa.023.0.i.i, %.preheader79.i.i ], [ %116, %111 ], [ %.sroa.023.3.i.i, %.preheader83.i.i ] +.loopexit25.i: ; preds = %.preheader83.i.i, %109, %.preheader79.i.i, %139, %.preheader.i.i, %.preheader81.i.i + %.sroa.1518.0.i = phi i128 [ 0, %.preheader.i.i ], [ 0, %.preheader81.i.i ], [ %144, %137 ], [ %.sroa.023.0.i.i, %.preheader79.i.i ], [ %114, %109 ], [ %.sroa.023.3.i.i, %.preheader83.i.i ] %146 = getelementptr inbounds nuw i8, ptr %0, i64 16 store i128 %.sroa.1518.0.i, ptr %146, align 16, !alias.scope !50572, !noalias !50493 br label %"_ZN10serde_json2de21Deserializer$LT$R$GT$19do_deserialize_i12817h8c574ef897197ba9E.exit" @@ -271428,7 +271422,7 @@ thread-pre-split.i.i: ; preds = %.loopexit33.i.threa br label %"_ZN10serde_json2de21Deserializer$LT$R$GT$15scan_integer12817h3cbee51a01d6f39fE.exit.i" "_ZN10serde_json2de21Deserializer$LT$R$GT$15scan_integer12817h3cbee51a01d6f39fE.exit.i": ; preds = %147, %.noexc9.i, %.noexc8.i, %22 - %.sink.i = phi ptr [ %145, %147 ], [ %21, %22 ], [ %46, %.noexc9.i ], [ %45, %.noexc8.i ] + %.sink.i = phi ptr [ %145, %145 ], [ %21, %22 ], [ %46, %.noexc9.i ], [ %45, %.noexc8.i ] %148 = getelementptr inbounds nuw i8, ptr %0, i64 8 store ptr %.sink.i, ptr %148, align 8, !alias.scope !50490, !noalias !50493 br label %"_ZN10serde_json2de21Deserializer$LT$R$GT$19do_deserialize_i12817h8c574ef897197ba9E.exit" diff --git a/bench/protobuf/optimized/padding_optimizer.ll b/bench/protobuf/optimized/padding_optimizer.ll index fd46e6c0c04..645879d4607 100644 --- a/bench/protobuf/optimized/padding_optimizer.ll +++ b/bench/protobuf/optimized/padding_optimizer.ll @@ -700,26 +700,25 @@ for.cond91.preheader: ; preds = %for.cond87.preheade for.body97.lr.ph: ; preds = %for.cond91.preheader %arrayidx118 = getelementptr inbounds nuw [6 x %"class.std::vector.14"], ptr %aligned_to_4, i64 0, i64 %indvars.iv629 - %30 = add nsw i64 %sub.ptr.div.i140, -1 br label %for.body97 for.body97: ; preds = %for.body97.lr.ph, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit154 - %indvars.iv614 = phi i64 [ 1, %for.body97.lr.ph ], [ %indvars.iv.next615, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit154 ] - %indvars.iv612 = phi i64 [ %30, %for.body97.lr.ph ], [ %indvars.iv.next613, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit154 ] %indvars.iv607 = phi i64 [ 0, %for.body97.lr.ph ], [ %indvars.iv.next608, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit154 ] - %umin = tail call i64 @llvm.umin.i64(i64 %indvars.iv612, i64 3) - %31 = add i64 %umin, %indvars.iv614 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %2, i8 0, i64 24, i1 false) - %indvars.iv.next608 = add nuw nsw i64 %indvars.iv607, 4 + %indvars.iv.next608 = add i64 %indvars.iv607, 4 %cmp105530 = icmp ugt i64 %sub.ptr.div.i140, %indvars.iv607 br i1 %cmp105530, label %for.body107, label %for.end116 -for.body107: ; preds = %for.body97, %for.inc114 - %indvars.iv609 = phi i64 [ %indvars.iv.next610, %for.inc114 ], [ %indvars.iv607, %for.body97 ] - %32 = phi ptr [ %39, %for.inc114 ], [ null, %for.body97 ] - %cond.i47.i539 = phi ptr [ %cond.i47.i538, %for.inc114 ], [ null, %for.body97 ] - %33 = phi ptr [ %40, %for.inc114 ], [ null, %for.body97 ] - %div.i527531 = phi double [ %div.i526, %for.inc114 ], [ 0.000000e+00, %for.body97 ] +for.body107: ; preds = %for.body97 + %invariant.umin = tail call i64 @llvm.umin.i64(i64 %sub.ptr.div.i140, i64 %indvars.iv.next608) + br label %for.body107 + +for.body107:; preds = %for.body107, %for.inc114 + %div.i527531 = phi i64 [ %indvars.iv607, %for.body107.lr.ph ], [ %indvars.iv.next610, %for.inc114 ] + %30 = phi ptr [ null, %for.body107.lr.ph ], [ %37, %for.inc114 ] + %cond.i47.i539 = phi ptr [ null, %for.body107.lr.ph ], [ %cond.i47.i538, %for.inc114 ] + %31 = phi ptr [ null, %for.body107.lr.ph ], [ %38, %for.inc114 ] + %div.i527531 = phi double [ 0.000000e+00, %for.body107.lr.ph ], [ %div.i526, %for.inc114 ] %add.ptr.i145 = getelementptr inbounds nuw %"class.google::protobuf::compiler::cpp::(anonymous namespace)::FieldGroup", ptr %arrayidx94.val, i64 %indvars.iv609 %fields_.i146 = getelementptr inbounds nuw i8, ptr %add.ptr.i145, i64 8 %34 = load ptr, ptr %fields_.i146, align 8 @@ -729,7 +728,7 @@ for.body107: ; preds = %for.body97, %for.in br i1 %cmp.i.i.i, label %for.inc114, label %if.then.i if.then.i: ; preds = %for.body107 - %sub.ptr.lhs.cast.i.i = ptrtoint ptr %33 to i64 + %sub.ptr.lhs.cast.i.i = ptrtoint ptr %31 to i64 %sub.ptr.rhs.cast.i.i = ptrtoint ptr %cond.i47.i539 to i64 %sub.ptr.sub.i.i = sub i64 %sub.ptr.lhs.cast.i.i, %sub.ptr.rhs.cast.i.i %sub.ptr.div.i.i = ashr exact i64 %sub.ptr.sub.i.i, 3 @@ -745,14 +744,14 @@ if.then.i: ; preds = %for.body107 %add.i = add nsw i64 %sub.ptr.div.i.i, %sub.ptr.div.i10.i %conv13.i = uitofp i64 %add.i to double %div.i = fdiv double %37, %conv13.i - %sub.ptr.lhs.cast.i301 = ptrtoint ptr %32 to i64 + %sub.ptr.lhs.cast.i301 = ptrtoint ptr %30 to i64 %sub.ptr.sub.i303 = sub i64 %sub.ptr.lhs.cast.i301, %sub.ptr.lhs.cast.i.i %cmp.not.i = icmp ult i64 %sub.ptr.sub.i303, %sub.ptr.sub.i9.i br i1 %cmp.not.i, label %if.else68.i, label %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i _ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i: ; preds = %if.then.i - tail call void @llvm.memmove.p0.p0.i64(ptr align 8 %33, ptr align 8 %34, i64 %sub.ptr.sub.i9.i, i1 false) - %add.ptr50.i = getelementptr inbounds i8, ptr %33, i64 %sub.ptr.sub.i9.i + tail call void @llvm.memmove.p0.p0.i64(ptr align 8 %31, ptr align 8 %34, i64 %sub.ptr.sub.i9.i, i1 false) + %add.ptr50.i = getelementptr inbounds i8, ptr %31, i64 %sub.ptr.sub.i9.i br label %for.inc114 if.else68.i: ; preds = %if.then.i @@ -783,7 +782,7 @@ cond.true.i.i: ; preds = %_ZNKSt6vectorIPKN6g _ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE11_M_allocateEm.exit.i: ; preds = %cond.true.i.i, %_ZNKSt6vectorIPKN6google8protobuf15FieldDescriptorESaIS4_EE12_M_check_lenEmPKc.exit.i %cond.i47.i = phi ptr [ null, %_ZNKSt6vectorIPKN6google8protobuf15FieldDescriptorESaIS4_EE12_M_check_lenEmPKc.exit.i ], [ %call5.i.i.i.i316, %cond.true.i.i ] - %tobool.not.i.i.i.i.i.i.i.i.i51.i = icmp eq ptr %33, %cond.i47.i539 + %tobool.not.i.i.i.i.i.i.i.i.i51.i = icmp eq ptr %31, %cond.i47.i539 br i1 %tobool.not.i.i.i.i.i.i.i.i.i51.i, label %invoke.cont.i312, label %if.then.i.i.i.i.i.i.i.i.i52.i if.then.i.i.i.i.i.i.i.i.i52.i: ; preds = %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE11_M_allocateEm.exit.i @@ -806,13 +805,13 @@ _ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocate br label %for.inc114 for.inc114: ; preds = %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i, %for.body107, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i - %39 = phi ptr [ %32, %for.body107 ], [ %add.ptr105.i, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i ], [ %32, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i ] + %39 = phi ptr [ %30, %for.body107 ], [ %add.ptr105.i, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i ], [ %30, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i ] %cond.i47.i538 = phi ptr [ %cond.i47.i539, %for.body107 ], [ %cond.i47.i, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i ], [ %cond.i47.i539, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i ] - %40 = phi ptr [ %33, %for.body107 ], [ %add.ptr.i.i.i.i.i.i.i.i59.i, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i ], [ %add.ptr50.i, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i ] + %40 = phi ptr [ %31, %for.body107 ], [ %add.ptr.i.i.i.i.i.i.i.i59.i, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i ], [ %add.ptr50.i, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i ] %div.i526 = phi double [ %div.i527531, %for.body107 ], [ %div.i, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i ], [ %div.i, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i ] - %indvars.iv.next610 = add nuw i64 %indvars.iv609, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next610, %31 - br i1 %exitcond.not, label %for.cond100.for.end116_crit_edge, label %for.body107, !llvm.loop !6 + %indvars.iv.next610 = add nuw nsw i64 %indvars.iv609, 1 + %exitcond.not = icmp ult i64 %indvars.iv.next610, %invariant.umin + br i1 %exitcond.not, label %for.body107, label %for.cond100.for.end116_crit_edge, !llvm.loop !6 lpad112.loopexit: ; preds = %cond.true.i.i %lpad.loopexit496 = landingpad { ptr, i32 } @@ -862,8 +861,6 @@ if.then.i.i.i.i153: ; preds = %invoke.cont119 _ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit154: ; preds = %invoke.cont119, %if.then.i.i.i.i153 %cmp96 = icmp ugt i64 %sub.ptr.div.i140, %indvars.iv.next608 - %indvars.iv.next613 = add i64 %indvars.iv612, -4 - %indvars.iv.next615 = add nuw i64 %indvars.iv614, 4 br i1 %cmp96, label %for.body97, label %for.end122, !llvm.loop !7 for.end122: ; preds = %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit154, %for.cond91.preheader @@ -887,24 +884,23 @@ for.body141.lr.ph: ; preds = %for.end122 br label %for.body141 for.body141: ; preds = %for.body141.lr.ph, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit196 - %indvars.iv625 = phi i64 [ 1, %for.body141.lr.ph ], [ %indvars.iv.next626, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit196 ] - %indvars.iv622 = phi i64 [ %sub, %for.body141.lr.ph ], [ %indvars.iv.next623, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit196 ] - %indvars.iv617 = phi i64 [ 0, %for.body141.lr.ph ], [ %indvars.iv.next618, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit196 ] - %42 = icmp ne i64 %indvars.iv622, 0 - %umin624 = zext i1 %42 to i64 - %43 = add i64 %indvars.iv625, %umin624 + %indvars.iv625 = phi i64 [ 0, %for.body141.lr.ph ], [ %indvars.iv.next614, %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit196 ] call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %3, i8 0, i64 24, i1 false) - %indvars.iv.next618 = add nuw nsw i64 %indvars.iv617, 2 - %cmp150553 = icmp ugt i64 %sub.ptr.div.i158, %indvars.iv617 + %indvars.iv.next618 = add i64 %indvars.iv613, 2 + %cmp150553 = icmp ugt i64 %sub.ptr.div.i158, %indvars.iv613 br i1 %cmp150553, label %for.body155, label %for.end164 -for.body155: ; preds = %for.body141, %for.inc162 - %indvars.iv619 = phi i64 [ %indvars.iv.next620, %for.inc162 ], [ %indvars.iv617, %for.body141 ] - %44 = phi ptr [ %51, %for.inc162 ], [ null, %for.body141 ] - %cond.i47.i383564 = phi ptr [ %cond.i47.i383563, %for.inc162 ], [ null, %for.body141 ] - %45 = phi ptr [ %52, %for.inc162 ], [ null, %for.body141 ] - %div.i183550554 = phi double [ %div.i183549, %for.inc162 ], [ 0.000000e+00, %for.body141 ] - %add.ptr.i163 = getelementptr inbounds nuw %"class.google::protobuf::compiler::cpp::(anonymous namespace)::FieldGroup", ptr %arrayidx124.val72, i64 %indvars.iv619 +for.body155: ; preds = %for.body141 + %invariant.umin650 = tail call i64 @llvm.umin.i64(i64 %sub.ptr.div.i158, i64 %indvars.iv.next614) + br label %for.body155 + +for.body155:; preds = %for.body155, %for.inc162 + %div.i183550554 = phi i64 [ %indvars.iv613, %for.body155.lr.ph ], [ %indvars.iv.next616, %for.inc162 ] + %41 = phi ptr [ null, %for.body155.lr.ph ], [ %48, %for.inc162 ] + %cond.i47.i383564 = phi ptr [ null, %for.body155.lr.ph ], [ %cond.i47.i383563, %for.inc162 ] + %42 = phi ptr [ null, %for.body155.lr.ph ], [ %49, %for.inc162 ] + %div.i183550554 = phi double [ 0.000000e+00, %for.body155.lr.ph ], [ %div.i183549, %for.inc162 ] + %add.ptr.i163 = getelementptr inbounds nuw %"class.google::protobuf::compiler::cpp::(anonymous namespace)::FieldGroup", ptr %arrayidx124.val72, i64 %indvars.iv615 %fields_.i164 = getelementptr inbounds nuw i8, ptr %add.ptr.i163, i64 8 %46 = load ptr, ptr %fields_.i164, align 8 %_M_finish.i.i.i165 = getelementptr inbounds nuw i8, ptr %add.ptr.i163, i64 16 @@ -913,7 +909,7 @@ for.body155: ; preds = %for.body141, %for.i br i1 %cmp.i.i.i166, label %for.inc162, label %if.then.i318 if.then.i318: ; preds = %for.body155 - %sub.ptr.lhs.cast.i.i170 = ptrtoint ptr %45 to i64 + %sub.ptr.lhs.cast.i.i170 = ptrtoint ptr %42 to i64 %sub.ptr.rhs.cast.i.i171 = ptrtoint ptr %cond.i47.i383564 to i64 %sub.ptr.sub.i.i172 = sub i64 %sub.ptr.lhs.cast.i.i170, %sub.ptr.rhs.cast.i.i171 %sub.ptr.div.i.i173 = ashr exact i64 %sub.ptr.sub.i.i172, 3 @@ -929,14 +925,14 @@ if.then.i318: ; preds = %for.body155 %add.i181 = add nsw i64 %sub.ptr.div.i.i173, %sub.ptr.div.i10.i178 %conv13.i182 = uitofp i64 %add.i181 to double %div.i183 = fdiv double %49, %conv13.i182 - %sub.ptr.lhs.cast.i325 = ptrtoint ptr %44 to i64 + %sub.ptr.lhs.cast.i325 = ptrtoint ptr %41 to i64 %sub.ptr.sub.i327 = sub i64 %sub.ptr.lhs.cast.i325, %sub.ptr.lhs.cast.i.i170 %cmp.not.i328 = icmp ult i64 %sub.ptr.sub.i327, %sub.ptr.sub.i9.i177 br i1 %cmp.not.i328, label %if.else68.i368, label %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346 _ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346: ; preds = %if.then.i318 - tail call void @llvm.memmove.p0.p0.i64(ptr align 8 %45, ptr align 8 %46, i64 %sub.ptr.sub.i9.i177, i1 false) - %add.ptr50.i348 = getelementptr inbounds i8, ptr %45, i64 %sub.ptr.sub.i9.i177 + tail call void @llvm.memmove.p0.p0.i64(ptr align 8 %42, ptr align 8 %46, i64 %sub.ptr.sub.i9.i177, i1 false) + %add.ptr50.i348 = getelementptr inbounds i8, ptr %42, i64 %sub.ptr.sub.i9.i177 br label %for.inc162 if.else68.i368: ; preds = %if.then.i318 @@ -967,7 +963,7 @@ cond.true.i.i380: ; preds = %_ZNKSt6vectorIPKN6g _ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE11_M_allocateEm.exit.i382: ; preds = %cond.true.i.i380, %_ZNKSt6vectorIPKN6google8protobuf15FieldDescriptorESaIS4_EE12_M_check_lenEmPKc.exit.i374 %cond.i47.i383 = phi ptr [ null, %_ZNKSt6vectorIPKN6google8protobuf15FieldDescriptorESaIS4_EE12_M_check_lenEmPKc.exit.i374 ], [ %call5.i.i.i.i402, %cond.true.i.i380 ] - %tobool.not.i.i.i.i.i.i.i.i.i51.i385 = icmp eq ptr %45, %cond.i47.i383564 + %tobool.not.i.i.i.i.i.i.i.i.i51.i385 = icmp eq ptr %42, %cond.i47.i383564 br i1 %tobool.not.i.i.i.i.i.i.i.i.i51.i385, label %invoke.cont.i387, label %if.then.i.i.i.i.i.i.i.i.i52.i386 if.then.i.i.i.i.i.i.i.i.i52.i386: ; preds = %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE11_M_allocateEm.exit.i382 @@ -990,13 +986,13 @@ _ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocate br label %for.inc162 for.inc162: ; preds = %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346, %for.body155, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i397 - %51 = phi ptr [ %44, %for.body155 ], [ %add.ptr105.i398, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i397 ], [ %44, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346 ] + %51 = phi ptr [ %41, %for.body155 ], [ %add.ptr105.i398, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i397 ], [ %41, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346 ] %cond.i47.i383563 = phi ptr [ %cond.i47.i383564, %for.body155 ], [ %cond.i47.i383, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i397 ], [ %cond.i47.i383564, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346 ] - %52 = phi ptr [ %45, %for.body155 ], [ %add.ptr.i.i.i.i.i.i.i.i59.i389, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i397 ], [ %add.ptr50.i348, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346 ] + %52 = phi ptr [ %42, %for.body155 ], [ %add.ptr.i.i.i.i.i.i.i.i59.i389, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i397 ], [ %add.ptr50.i348, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346 ] %div.i183549 = phi double [ %div.i183550554, %for.body155 ], [ %div.i183, %_ZNSt12_Vector_baseIPKN6google8protobuf15FieldDescriptorESaIS4_EE13_M_deallocateEPS4_m.exit.i397 ], [ %div.i183, %_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPKN6google8protobuf15FieldDescriptorESt6vectorIS6_SaIS6_EEEEPS6_S6_ET0_T_SF_SE_RSaIT1_E.exit.i346 ] - %indvars.iv.next620 = add nuw i64 %indvars.iv619, 1 - %exitcond627.not = icmp eq i64 %indvars.iv.next620, %43 - br i1 %exitcond627.not, label %for.cond145.for.end164_crit_edge, label %for.body155, !llvm.loop !8 + %indvars.iv.next620 = add nuw nsw i64 %indvars.iv615, 1 + %exitcond627.not = icmp ult i64 %indvars.iv.next620, %invariant.umin650 + br i1 %exitcond627.not, label %for.body155, label %for.cond145.for.end164_crit_edge, !llvm.loop !8 lpad160.loopexit: ; preds = %cond.true.i.i380 %lpad.loopexit493 = landingpad { ptr, i32 } @@ -1032,7 +1028,7 @@ for.cond145.for.end164_crit_edge: ; preds = %for.inc162 for.end164: ; preds = %for.cond145.for.end164_crit_edge, %for.body141 %field_group142.val78 = phi ptr [ %cond.i47.i383563, %for.cond145.for.end164_crit_edge ], [ null, %for.body141 ] %div.i183550.lcssa = phi double [ %div.i183549, %for.cond145.for.end164_crit_edge ], [ 0.000000e+00, %for.body141 ] - %cmp169 = icmp eq i64 %sub, %indvars.iv617 + %cmp169 = icmp eq i64 %sub, %indvars.iv613 %storemerge = select i1 %cmp169, double %., double %div.i183550.lcssa store double %storemerge, ptr %field_group142, align 8 invoke fastcc void @_ZNSt6vectorIN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %arrayidx179, ptr noundef nonnull align 8 dereferenceable(32) %field_group142) @@ -1048,8 +1044,6 @@ if.then.i.i.i.i195: ; preds = %invoke.cont180 _ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit196: ; preds = %invoke.cont180, %if.then.i.i.i.i195 %cmp140 = icmp ugt i64 %sub.ptr.div.i158, %indvars.iv.next618 - %indvars.iv.next623 = add i64 %indvars.iv622, -2 - %indvars.iv.next626 = add nuw i64 %indvars.iv625, 2 br i1 %cmp140, label %for.body141, label %for.end183, !llvm.loop !9 for.end183: ; preds = %_ZN6google8protobuf8compiler3cpp12_GLOBAL__N_110FieldGroupD2Ev.exit196, %for.end122 diff --git a/bench/qemu/optimized/qemu-io-cmds.ll b/bench/qemu/optimized/qemu-io-cmds.ll index 414362e07b7..0a3393f3f3a 100644 --- a/bench/qemu/optimized/qemu-io-cmds.ll +++ b/bench/qemu/optimized/qemu-io-cmds.ll @@ -1619,73 +1619,69 @@ declare noalias ptr @g_malloc(i64 noundef) local_unnamed_addr #8 ; Function Attrs: nounwind sspstrong uwtable define internal fastcc void @dump_buffer(ptr noundef readonly captures(none) %0, i64 noundef %1, i64 noundef %2) unnamed_addr #0 { %.not40 = icmp eq i64 %2, 0 - br i1 %.not40, label %._crit_edge, label %.lr.ph39.preheader - -.lr.ph39.preheader: ; preds = %3 - %4 = add i64 %2, -1 - br label %.lr.ph39 - -.lr.ph39: ; preds = %.lr.ph39.preheader, %.critedge2 - %indvars.iv45 = phi i64 [ %4, %.lr.ph39.preheader ], [ %indvars.iv.next46, %.critedge2 ] - %.02338 = phi ptr [ %0, %.lr.ph39.preheader ], [ %11, %.critedge2 ] - %.02637 = phi i64 [ 0, %.lr.ph39.preheader ], [ %32, %.critedge2 ] - %umin = tail call i64 @llvm.umin.i64(i64 %indvars.iv45, i64 15) - %5 = add i64 %.02637, %1 - %6 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.34, i64 noundef %5) #26 - br label %7 - -7: ; preds = %.lr.ph39, %7 - %indvars.iv = phi i64 [ 0, %.lr.ph39 ], [ %indvars.iv.next, %7 ] - %.134 = phi ptr [ %.02338, %.lr.ph39 ], [ %11, %7 ] - %8 = load i8, ptr %.134, align 1 - %9 = zext i8 %8 to i32 - %10 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.35, i32 noundef %9) #26 - %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %11 = getelementptr inbounds nuw i8, ptr %.134, i64 1 - %12 = icmp samesign ult i64 %indvars.iv, 15 - %13 = or disjoint i64 %.02637, %indvars.iv.next - %14 = icmp ult i64 %13, %2 - %or.cond = select i1 %12, i1 %14, i1 false - br i1 %or.cond, label %7, label %.lr.ph, !llvm.loop !13 - -.lr.ph: ; preds = %7 - %15 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.4) #26 - %16 = tail call ptr @__ctype_b_loc() #29 - br label %17 - -17: ; preds = %.lr.ph, %29 - %indvars.iv42 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next43, %29 ] - %.036 = phi ptr [ %.02338, %.lr.ph ], [ %30, %29 ] - %18 = load ptr, ptr %16, align 8 - %19 = load i8, ptr %.036, align 1 - %20 = zext i8 %19 to i64 - %21 = getelementptr inbounds nuw i16, ptr %18, i64 %20 - %22 = load i16, ptr %21, align 2 - %23 = and i16 %22, 8 - %.not = icmp eq i16 %23, 0 - br i1 %.not, label %27, label %24 - -24: ; preds = %17 - %25 = zext i8 %19 to i32 - %26 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.36, i32 noundef %25) #26 - br label %29 + br i1 %.not40, label %._crit_edge, label %.lr.ph39 -27: ; preds = %17 - %28 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.37) #26 - br label %29 +27: ; preds = %3, %.critedge2 + %.02338 = phi ptr [ %10, %.critedge2 ], [ %0, %3 ] + %.02637 = phi i64 [ %34, %.critedge2 ], [ 0, %3 ] + %4 = add i64 %.02637, %1 + %5 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.34, i64 noundef %4) #26 + br label %6 -29: ; preds = %24, %27 +29: ; preds = %27, %29 + %indvars.iv = phi i64 [ 0, %.lr.ph39 ], [ %indvars.iv.next, %6 ] + %.134 = phi ptr [ %.02338, %.lr.ph39 ], [ %10, %6 ] + %7 = load i8, ptr %.134, align 1 + %8 = zext i8 %7 to i32 + %9 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.35, i32 noundef %8) #26 + %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 + %10 = getelementptr inbounds nuw i8, ptr %.134, i64 1 + %11 = icmp samesign ult i64 %indvars.iv, 15 + %12 = or disjoint i64 %.02637, %indvars.iv.next + %13 = icmp ult i64 %12, %2 + %or.cond = select i1 %11, i1 %13, i1 false + br i1 %or.cond, label %6, label %.lr.ph, !llvm.loop !13 + +.lr.ph: ; preds = %6 + %14 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.4) #26 + %15 = tail call ptr @__ctype_b_loc() #29 + br label %16 + +16: ; preds = %.lr.ph, %28 + %indvars.iv42 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next43, %28 ] + %.036 = phi ptr [ %.02338, %.lr.ph ], [ %29, %28 ] + %17 = load ptr, ptr %15, align 8 + %18 = load i8, ptr %.036, align 1 + %19 = zext i8 %18 to i64 + %20 = getelementptr inbounds nuw i16, ptr %17, i64 %19 + %21 = load i16, ptr %20, align 2 + %22 = and i16 %21, 8 + %.not = icmp eq i16 %22, 0 + br i1 %.not, label %26, label %23 + +23: ; preds = %16 + %24 = zext i8 %18 to i32 + %25 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.36, i32 noundef %24) #26 + br label %28 + +26: ; preds = %16 + %27 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.37) #26 + br label %28 + +28: ; preds = %23, %26 %indvars.iv.next43 = add nuw nsw i64 %indvars.iv42, 1 %30 = getelementptr inbounds nuw i8, ptr %.036, i64 1 - %exitcond.not = icmp eq i64 %indvars.iv42, %umin - br i1 %exitcond.not, label %.critedge2, label %17, !llvm.loop !14 - -.critedge2: ; preds = %29 - %31 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.38) #26 - %32 = add i64 %.02637, 16 - %33 = icmp ult i64 %32, %2 - %indvars.iv.next46 = add i64 %indvars.iv45, -16 - br i1 %33, label %.lr.ph39, label %._crit_edge, !llvm.loop !15 + %exitcond.not = icmp samesign ult i64 %indvars.iv42, 15 + %31 = or disjoint i64 %.02637, %indvars.iv.next43 + %32 = icmp ult i64 %31, %2 + %or.cond32 = select i1 %30, i1 %32, i1 false + br i1 %or.cond32, label %16, label %.critedge2, !llvm.loop !14 + +.critedge2:; preds = %28 + %33 = tail call i32 (i32, ptr, ...) @__printf_chk(i32 noundef 1, ptr noundef nonnull @.str.38) #26 + %34 = add i64 %.02637, 16 + %35 = icmp ult i64 %34, %2 + br i1 %35, label %.lr.ph39, label %._crit_edge, !llvm.loop !15 ._crit_edge: ; preds = %.critedge2, %3 ret void @@ -5466,9 +5462,6 @@ declare i32 @bcmp(ptr captures(none), ptr captures(none), i64) local_unnamed_add ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.smin.i64(i64, i64) #23 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #23 - ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) declare ptr @strcpy(ptr noalias returned writeonly, ptr noalias readonly captures(none)) #24 diff --git a/bench/qemu/optimized/sdhci-cmd.ll b/bench/qemu/optimized/sdhci-cmd.ll index 10bb1c88edf..d94408cbaee 100644 --- a/bench/qemu/optimized/sdhci-cmd.ll +++ b/bench/qemu/optimized/sdhci-cmd.ll @@ -40,13 +40,13 @@ define dso_local i64 @sdhci_read_cmd(ptr noundef %0, i64 noundef %1, ptr noundef br i1 %.not.i, label %read_fifo.exit, label %.lr.ph30.i .loopexit.i: ; preds = %24, %.lr.ph30.i - %.1.lcssa.i = phi i64 [ %.01929.i, %.lr.ph30.i ], [ %22, %24 ] + %.1.lcssa.i = phi i64 [ %.01929.i, %.lr.ph30.i ], [ %20, %22 ] %12 = icmp ult i64 %.1.lcssa.i, %3 br i1 %12, label %.lr.ph30.i, label %read_fifo.exit, !llvm.loop !4 .lr.ph30.i: ; preds = %4, %.loopexit.i %.01929.i = phi i64 [ %.1.lcssa.i, %.loopexit.i ], [ 0, %4 ] - %13 = sub i64 %3, %.01929.i + %13 = sub nuw i64 %3, %.01929.i %14 = trunc i64 %13 to i32 %15 = tail call i32 @qtest_readl(ptr noundef %0, i64 noundef %11) #3 %16 = icmp sgt i32 %14, 0 @@ -54,29 +54,28 @@ define dso_local i64 @sdhci_read_cmd(ptr noundef %0, i64 noundef %1, ptr noundef .lr.ph.preheader.i: ; preds = %.lr.ph30.i %17 = tail call i32 @llvm.umin.i32(i32 %14, i32 4) - %18 = trunc i64 %.01929.i to i32 - %19 = add i32 %17, %18 br label %.lr.ph.i .lr.ph.i: ; preds = %24, %.lr.ph.preheader.i - %.01827.i = phi i32 [ %25, %24 ], [ %15, %.lr.ph.preheader.i ] - %.126.i = phi i64 [ %22, %24 ], [ %.01929.i, %.lr.ph.preheader.i ] - %20 = trunc i32 %.01827.i to i8 - %21 = getelementptr inbounds nuw i8, ptr %2, i64 %.126.i - store i8 %20, ptr %21, align 1 - %22 = add i64 %.126.i, 1 + %.01827.i = phi i32 [ %24, %22 ], [ %17, %.lr.ph.preheader.i ] + %.126.i = phi i32 [ %23, %22 ], [ %15, %.lr.ph.preheader.i ] + %.126.i = phi i64 [ %20, %22 ], [ %.01929.i, %.lr.ph.preheader.i ] + %18 = trunc i32 %.126.i to i8 + %19 = getelementptr inbounds nuw i8, ptr %2, i64 %.126.i + store i8 %18, ptr %19, align 1 + %20 = add i64 %.126.i, 1 %sext.mask.i = and i32 %.01827.i, 255 %23 = icmp eq i32 %sext.mask.i, 0 br i1 %23, label %read_fifo.exit, label %24 24: ; preds = %.lr.ph.i %25 = lshr i32 %.01827.i, 8 - %lftr.wideiv = trunc i64 %22 to i32 - %exitcond = icmp eq i32 %19, %lftr.wideiv - br i1 %exitcond, label %.loopexit.i, label %.lr.ph.i, !llvm.loop !6 + %24 = add nsw i32 %.028.i, -1 + %exitcond = icmp sgt i32 %.126.i, 1 + br i1 %exitcond, label %.lr.ph.i, label %.loopexit.i, !llvm.loop !6 read_fifo.exit: ; preds = %.loopexit.i, %.lr.ph.i, %4 - %.020.i = phi i64 [ 0, %4 ], [ %22, %.lr.ph.i ], [ %.1.lcssa.i, %.loopexit.i ] + %.020.i = phi i64 [ 0, %4 ], [ %20, %.lr.ph.i ], [ %.1.lcssa.i, %.loopexit.i ] tail call void @qtest_writew(ptr noundef %0, i64 noundef %6, i16 noundef zeroext 0) #3 tail call void @qtest_writew(ptr noundef %0, i64 noundef %7, i16 noundef zeroext 0) #3 tail call void @qtest_writel(ptr noundef %0, i64 noundef %8, i32 noundef 0) #3 diff --git a/bench/quantlib/optimized/date.ll b/bench/quantlib/optimized/date.ll index c073851bae5..150afb017e0 100644 --- a/bench/quantlib/optimized/date.ll +++ b/bench/quantlib/optimized/date.ll @@ -10732,11 +10732,7 @@ if.then: ; preds = %entry br i1 %cmp.i.not28.i.i.i, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i, label %for.body13.preheader.i.i.i for.body13.preheader.i.i.i: ; preds = %if.then, %for.inc29.critedge.i.i.i - %indvars.iv.in = phi i64 [ %indvars.iv, %for.inc29.critedge.i.i.i ], [ %5, %if.then ] - %OuterIt.sroa.0.029.i.i.i = phi ptr [ %incdec.ptr.i11.i.i.i, %for.inc29.critedge.i.i.i ], [ %.pre155.pre156.pre159.pre162, %if.then ] - %indvars.iv = add i64 %indvars.iv.in, -1 - %.not = icmp eq i64 %indvars.iv, 0 - %6 = select i1 %.not, i64 1, i64 2 + %indvars.iv.in = phi ptr [ %incdec.ptr.i11.i.i.i, %for.inc29.critedge.i.i.i ], [ %.pre143.pre144.pre147.pre150, %if.then ] br label %for.body13.i.i.i for.body13.i.i.i: ; preds = %for.inc.i.i.i, %for.body13.preheader.i.i.i @@ -10751,12 +10747,14 @@ for.body13.i.i.i: ; preds = %for.inc.i.i.i, %for for.inc.i.i.i: ; preds = %for.body13.i.i.i %incdec.ptr.i.i.i.i = getelementptr inbounds nuw i8, ptr %InnerIt.sroa.0.023.i.i.i, i64 1 %SubstrIt.024.i.i.i.add = add nuw nsw i64 %SubstrIt.024.i.i.i.idx, 1 - %exitcond = icmp eq i64 %SubstrIt.024.i.i.i.add, %6 - br i1 %exitcond, label %for.end.i.i.i, label %for.body13.i.i.i, !llvm.loop !101 + %exitcond = icmp eq ptr %incdec.ptr.i.i.i.i, %add.ptr.i.i.i.i.i + %cmp.not.i.i.i = icmp eq i64 %SubstrIt.024.i.i.i.add, 2 + %or.cond.i.i.i = select i1 %cmp.i7.i.i.i, i1 true, i1 %cmp.not.i.i.i + br i1 %or.cond.i.i.i, label %for.end.i.i.i, label %for.body13.i.i.i, !llvm.loop !101 for.end.i.i.i: ; preds = %for.inc.i.i.i, %for.body13.i.i.i %InnerIt.sroa.0.0.lcssa.ph.i.i.i = phi ptr [ %InnerIt.sroa.0.023.i.i.i, %for.body13.i.i.i ], [ %incdec.ptr.i.i.i.i, %for.inc.i.i.i ] - %SubstrIt.0.lcssa.ph.i.i.i.idx = phi i64 [ %SubstrIt.024.i.i.i.idx, %for.body13.i.i.i ], [ %6, %for.inc.i.i.i ] + %SubstrIt.0.lcssa.ph.i.i.i.idx = phi i64 [ %SubstrIt.024.i.i.i.idx, %for.body13.i.i.i ], [ %SubstrIt.024.i.i.i.add, %for.inc.i.i.i ] %cmp21.not.i.i.i = icmp eq i64 %SubstrIt.0.lcssa.ph.i.i.i.idx, 2 br i1 %cmp21.not.i.i.i, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i, label %for.inc29.critedge.i.i.i @@ -10817,11 +10815,7 @@ if.then5: ; preds = %if.end br i1 %cmp.i.not28.i.i.i19, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i35, label %for.body13.preheader.i.i.i22 for.body13.preheader.i.i.i22: ; preds = %if.then5, %for.inc29.critedge.i.i.i32 - %indvars.iv143.in = phi i64 [ %indvars.iv143, %for.inc29.critedge.i.i.i32 ], [ %14, %if.then5 ] - %OuterIt.sroa.0.029.i.i.i23 = phi ptr [ %incdec.ptr.i11.i.i.i33, %for.inc29.critedge.i.i.i32 ], [ %.pre155.pre156.pre159, %if.then5 ] - %indvars.iv143 = add i64 %indvars.iv143.in, -1 - %.not166 = icmp eq i64 %indvars.iv143, 0 - %15 = select i1 %.not166, i64 1, i64 2 + %indvars.iv143.in = phi ptr [ %incdec.ptr.i11.i.i.i33, %for.inc29.critedge.i.i.i32 ], [ %.pre143.pre144.pre147, %if.then5 ] br label %for.body13.i.i.i24 for.body13.i.i.i24: ; preds = %for.inc.i.i.i40, %for.body13.preheader.i.i.i22 @@ -10836,12 +10830,14 @@ for.body13.i.i.i24: ; preds = %for.inc.i.i.i40, %f for.inc.i.i.i40: ; preds = %for.body13.i.i.i24 %incdec.ptr.i.i.i.i41 = getelementptr inbounds nuw i8, ptr %InnerIt.sroa.0.023.i.i.i26, i64 1 %SubstrIt.024.i.i.i25.add = add nuw nsw i64 %SubstrIt.024.i.i.i25.idx, 1 - %exitcond146 = icmp eq i64 %SubstrIt.024.i.i.i25.add, %15 - br i1 %exitcond146, label %for.end.i.i.i28, label %for.body13.i.i.i24, !llvm.loop !101 + %exitcond146 = icmp eq ptr %incdec.ptr.i.i.i.i41, %add.ptr.i.i.i.i.i18 + %cmp.not.i.i.i44 = icmp eq i64 %SubstrIt.024.i.i.i25.add, 2 + %or.cond.i.i.i45 = select i1 %cmp.i7.i.i.i43, i1 true, i1 %cmp.not.i.i.i44 + br i1 %or.cond.i.i.i45, label %for.end.i.i.i28, label %for.body13.i.i.i24, !llvm.loop !101 for.end.i.i.i28: ; preds = %for.inc.i.i.i40, %for.body13.i.i.i24 %InnerIt.sroa.0.0.lcssa.ph.i.i.i29 = phi ptr [ %InnerIt.sroa.0.023.i.i.i26, %for.body13.i.i.i24 ], [ %incdec.ptr.i.i.i.i41, %for.inc.i.i.i40 ] - %SubstrIt.0.lcssa.ph.i.i.i30.idx = phi i64 [ %SubstrIt.024.i.i.i25.idx, %for.body13.i.i.i24 ], [ %15, %for.inc.i.i.i40 ] + %SubstrIt.0.lcssa.ph.i.i.i30.idx = phi i64 [ %SubstrIt.024.i.i.i25.idx, %for.body13.i.i.i24 ], [ %SubstrIt.024.i.i.i25.add, %for.inc.i.i.i40 ] %cmp21.not.i.i.i31 = icmp eq i64 %SubstrIt.0.lcssa.ph.i.i.i30.idx, 2 br i1 %cmp21.not.i.i.i31, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i36, label %for.inc29.critedge.i.i.i32 @@ -10902,11 +10898,7 @@ if.then12: ; preds = %if.end10 br i1 %cmp.i.not28.i.i.i59, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i75, label %for.body13.preheader.i.i.i62 for.body13.preheader.i.i.i62: ; preds = %if.then12, %for.inc29.critedge.i.i.i72 - %indvars.iv147.in = phi i64 [ %indvars.iv147, %for.inc29.critedge.i.i.i72 ], [ %23, %if.then12 ] - %OuterIt.sroa.0.029.i.i.i63 = phi ptr [ %incdec.ptr.i11.i.i.i73, %for.inc29.critedge.i.i.i72 ], [ %.pre155.pre156, %if.then12 ] - %indvars.iv147 = add i64 %indvars.iv147.in, -1 - %.not167 = icmp eq i64 %indvars.iv147, 0 - %24 = select i1 %.not167, i64 1, i64 2 + %indvars.iv147.in = phi ptr [ %incdec.ptr.i11.i.i.i73, %for.inc29.critedge.i.i.i72 ], [ %.pre143.pre144, %if.then12 ] br label %for.body13.i.i.i64 for.body13.i.i.i64: ; preds = %for.inc.i.i.i80, %for.body13.preheader.i.i.i62 @@ -10921,12 +10913,14 @@ for.body13.i.i.i64: ; preds = %for.inc.i.i.i80, %f for.inc.i.i.i80: ; preds = %for.body13.i.i.i64 %incdec.ptr.i.i.i.i81 = getelementptr inbounds nuw i8, ptr %InnerIt.sroa.0.023.i.i.i66, i64 1 %SubstrIt.024.i.i.i65.add = add nuw nsw i64 %SubstrIt.024.i.i.i65.idx, 1 - %exitcond150 = icmp eq i64 %SubstrIt.024.i.i.i65.add, %24 - br i1 %exitcond150, label %for.end.i.i.i68, label %for.body13.i.i.i64, !llvm.loop !101 + %exitcond150 = icmp eq ptr %incdec.ptr.i.i.i.i81, %add.ptr.i.i.i.i.i58 + %cmp.not.i.i.i84 = icmp eq i64 %SubstrIt.024.i.i.i65.add, 2 + %or.cond.i.i.i85 = select i1 %cmp.i7.i.i.i83, i1 true, i1 %cmp.not.i.i.i84 + br i1 %or.cond.i.i.i85, label %for.end.i.i.i68, label %for.body13.i.i.i64, !llvm.loop !101 for.end.i.i.i68: ; preds = %for.inc.i.i.i80, %for.body13.i.i.i64 %InnerIt.sroa.0.0.lcssa.ph.i.i.i69 = phi ptr [ %InnerIt.sroa.0.023.i.i.i66, %for.body13.i.i.i64 ], [ %incdec.ptr.i.i.i.i81, %for.inc.i.i.i80 ] - %SubstrIt.0.lcssa.ph.i.i.i70.idx = phi i64 [ %SubstrIt.024.i.i.i65.idx, %for.body13.i.i.i64 ], [ %24, %for.inc.i.i.i80 ] + %SubstrIt.0.lcssa.ph.i.i.i70.idx = phi i64 [ %SubstrIt.024.i.i.i65.idx, %for.body13.i.i.i64 ], [ %SubstrIt.024.i.i.i65.add, %for.inc.i.i.i80 ] %cmp21.not.i.i.i71 = icmp eq i64 %SubstrIt.0.lcssa.ph.i.i.i70.idx, 2 br i1 %cmp21.not.i.i.i71, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i76, label %for.inc29.critedge.i.i.i72 @@ -10987,11 +10981,7 @@ if.then18: ; preds = %if.end16 br i1 %cmp.i.not28.i.i.i99, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.thread.i.i115, label %for.body13.preheader.i.i.i102 for.body13.preheader.i.i.i102: ; preds = %if.then18, %for.inc29.critedge.i.i.i112 - %indvars.iv151.in = phi i64 [ %indvars.iv151, %for.inc29.critedge.i.i.i112 ], [ %32, %if.then18 ] - %OuterIt.sroa.0.029.i.i.i103 = phi ptr [ %incdec.ptr.i11.i.i.i113, %for.inc29.critedge.i.i.i112 ], [ %.pre155, %if.then18 ] - %indvars.iv151 = add i64 %indvars.iv151.in, -1 - %.not168 = icmp eq i64 %indvars.iv151, 0 - %33 = select i1 %.not168, i64 1, i64 2 + %indvars.iv151.in = phi ptr [ %incdec.ptr.i11.i.i.i113, %for.inc29.critedge.i.i.i112 ], [ %.pre143, %if.then18 ] br label %for.body13.i.i.i104 for.body13.i.i.i104: ; preds = %for.inc.i.i.i120, %for.body13.preheader.i.i.i102 @@ -11006,12 +10996,14 @@ for.body13.i.i.i104: ; preds = %for.inc.i.i.i120, % for.inc.i.i.i120: ; preds = %for.body13.i.i.i104 %incdec.ptr.i.i.i.i121 = getelementptr inbounds nuw i8, ptr %InnerIt.sroa.0.023.i.i.i106, i64 1 %SubstrIt.024.i.i.i105.add = add nuw nsw i64 %SubstrIt.024.i.i.i105.idx, 1 - %exitcond154 = icmp eq i64 %SubstrIt.024.i.i.i105.add, %33 - br i1 %exitcond154, label %for.end.i.i.i108, label %for.body13.i.i.i104, !llvm.loop !101 + %exitcond154 = icmp eq ptr %incdec.ptr.i.i.i.i121, %add.ptr.i.i.i.i.i98 + %cmp.not.i.i.i124 = icmp eq i64 %SubstrIt.024.i.i.i105.add, 2 + %or.cond.i.i.i125 = select i1 %cmp.i7.i.i.i123, i1 true, i1 %cmp.not.i.i.i124 + br i1 %or.cond.i.i.i125, label %for.end.i.i.i108, label %for.body13.i.i.i104, !llvm.loop !101 for.end.i.i.i108: ; preds = %for.inc.i.i.i120, %for.body13.i.i.i104 %InnerIt.sroa.0.0.lcssa.ph.i.i.i109 = phi ptr [ %InnerIt.sroa.0.023.i.i.i106, %for.body13.i.i.i104 ], [ %incdec.ptr.i.i.i.i121, %for.inc.i.i.i120 ] - %SubstrIt.0.lcssa.ph.i.i.i110.idx = phi i64 [ %SubstrIt.024.i.i.i105.idx, %for.body13.i.i.i104 ], [ %33, %for.inc.i.i.i120 ] + %SubstrIt.0.lcssa.ph.i.i.i110.idx = phi i64 [ %SubstrIt.024.i.i.i105.idx, %for.body13.i.i.i104 ], [ %SubstrIt.024.i.i.i105.add, %for.inc.i.i.i120 ] %cmp21.not.i.i.i111 = icmp eq i64 %SubstrIt.0.lcssa.ph.i.i.i110.idx, 2 br i1 %cmp21.not.i.i.i111, label %_ZNK5boost9algorithm6detail13first_finderFIPKcNS0_8is_equalEEclIN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEENS_14iterator_rangeIT_EESJ_SJ_.exit.i.i116, label %for.inc29.critedge.i.i.i112 diff --git a/bench/recastnavigation/optimized/RecastMeshDetail.ll b/bench/recastnavigation/optimized/RecastMeshDetail.ll index 95b901b78e4..f2d6e038b15 100644 --- a/bench/recastnavigation/optimized/RecastMeshDetail.ll +++ b/bench/recastnavigation/optimized/RecastMeshDetail.ll @@ -317,7 +317,7 @@ _ZN13rcScopedTimerC2EP9rcContext12rcTimerLabel.exit: ; preds = %41, %45 br label %.loopexit.split-lp .loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp: ; preds = %.invoke1068, %.invoke, %209, %198, %186, %._crit_edge897 - %.sroa.0720.3.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph = phi ptr [ %180, %209 ], [ %180, %198 ], [ %180, %186 ], [ null, %._crit_edge897 ], [ %180, %.invoke ], [ null, %.invoke1068 ] + %.sroa.0720.3.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph.ph = phi ptr [ %180, %209 ], [ %180, %198 ], [ %180, %186 ], [ null, %._crit_edge897 ], [ %180, %.invoke ], [ null, %.invoke1069 ] %lpad.loopexit.split-lp858 = landingpad { ptr, i32 } cleanup br label %.loopexit.split-lp @@ -2379,10 +2379,8 @@ _ZL13polyMinExtentPKfi.exit.i: ; preds = %._crit_edge.us.i.i, .lr.ph415.i: ; preds = %1011 %1034 = uitofp nneg i32 %spec.select.i to float - %smin.i = call i32 @llvm.smin.i32(i32 %1031, i32 126) - %reass.sub = sub i32 %smin.i, %.0798 - %1035 = add i32 %reass.sub, 1 - %wide.trip.count506.i = zext i32 %1035 to i64 + %narrow = add nuw i32 %spec.select.i, 1 + %1035 = zext i32 %narrow to i64 br label %1036 1036: ; preds = %_ZL9getHeightffffffiRK13rcHeightPatch.exit.i, %.lr.ph415.i @@ -2521,7 +2519,7 @@ _ZL9getHeightffffffiRK13rcHeightPatch.exit.i: ; preds = %1106, %1090, %1036 %1110 = fmul float %988, %1109 store float %1110, ptr %1043, align 4 %indvars.iv.next504.i = add nuw nsw i64 %indvars.iv503.i, 1 - %exitcond507.not.i = icmp eq i64 %indvars.iv.next504.i, %wide.trip.count506.i + %exitcond507.not.i = icmp eq i64 %indvars.iv.next504.i, %1035 br i1 %exitcond507.not.i, label %._crit_edge416.i, label %1036, !llvm.loop !26 ._crit_edge416.i: ; preds = %_ZL9getHeightffffffiRK13rcHeightPatch.exit.i, %1011 @@ -5004,8 +5002,8 @@ _ZN12rcVectorBaseIiL11rcAllocHint1EE17allocate_and_copyEl.exit.i552: ; preds = % br label %.noexc445 .noexc445: ; preds = %2202, %.sink.split.i547, %._crit_edge1022 - %2225 = phi i64 [ %.pre1023, %._crit_edge1022 ], [ %2200, %.sink.split.i547 ], [ %2198, %2202 ] - %.1.i312.i = phi i32 [ %2137, %._crit_edge1022 ], [ %.0100171.i.i, %.sink.split.i547 ], [ %.0100171.i.i, %2202 ] + %2225 = phi i64 [ %.pre1023, %._crit_edge1023 ], [ %2200, %.sink.split.i547 ], [ %2198, %2202 ] + %.1.i312.i = phi i32 [ %2137, %._crit_edge1023 ], [ %.0100171.i.i, %.sink.split.i547 ], [ %.0100171.i.i, %2202 ] %2226 = trunc i64 %2225 to i32 %2227 = sdiv i32 %2226, 4 %2228 = icmp slt i32 %.1.i312.i, %2227 @@ -5419,8 +5417,8 @@ _ZL15buildPolyDetailP9rcContextPKfiffiRK20rcCompactHeightfieldRK13rcHeightPatchP br i1 %2427, label %248, label %.loopexit856, !llvm.loop !52 .loopexit856: ; preds = %._crit_edge921, %.invoke1068, %.invoke, %.preheader855 - %.sroa.0720.4 = phi ptr [ %180, %.preheader855 ], [ %180, %.invoke ], [ null, %.invoke1068 ], [ %180, %._crit_edge921 ] - %.2 = phi i1 [ true, %.preheader855 ], [ false, %.invoke ], [ false, %.invoke1068 ], [ true, %._crit_edge921 ] + %.sroa.0720.4 = phi ptr [ %180, %.preheader855 ], [ %180, %.invoke ], [ null, %.invoke1069 ], [ %180, %._crit_edge921 ] + %.2 = phi i1 [ true, %.preheader855 ], [ false, %.invoke ], [ false, %.invoke1069 ], [ true, %._crit_edge921 ] invoke void @_Z6rcFreePv(ptr noundef %98) to label %_ZN14rcScopedDeleteIfED2Ev.exit452 unwind label %2428 diff --git a/bench/ruby/optimized/prism.ll b/bench/ruby/optimized/prism.ll index 534bd3310c4..2c9d874de63 100644 --- a/bench/ruby/optimized/prism.ll +++ b/bench/ruby/optimized/prism.ll @@ -31298,24 +31298,19 @@ pm_node_alloc.exit: ; preds = %2 %15 = icmp ult ptr %11, %14 br i1 %15, label %.lr.ph.preheader, label %.critedge -.lr.ph.preheader: ; preds = %pm_node_alloc.exit - %16 = ptrtoint ptr %13 to i64 - %scevgep = getelementptr i8, ptr inttoptr (i64 -1 to ptr), i64 %16 - br label %.lr.ph - -.lr.ph: ; preds = %.lr.ph.preheader, %19 - %.05558 = phi ptr [ %20, %19 ], [ %11, %.lr.ph.preheader ] - %17 = load i8, ptr %.05558, align 1, !tbaa !65 - %18 = icmp eq i8 %17, 48 - br i1 %18, label %19, label %.critedge +.lr.ph.preheader: ; preds = %pm_node_alloc.exit, %18 + %.05558 = phi ptr [ %19, %18 ], [ %11, %pm_node_alloc.exit ] + %16 = load i8, ptr %.05558, align 1, !tbaa !65 + %17 = icmp eq i8 %16, 48 + br i1 %17, label %18, label %.critedge 19: ; preds = %.lr.ph %20 = getelementptr i8, ptr %.05558, i64 1 - %exitcond.not = icmp eq ptr %20, %scevgep - br i1 %exitcond.not, label %.critedge, label %.lr.ph, !llvm.loop !451 + %exitcond.not = icmp ult ptr %20, %14 + br i1 %exitcond.not, label %.lr.ph, label %.critedge, !llvm.loop !451 .critedge: ; preds = %.lr.ph, %19, %pm_node_alloc.exit - %.055.lcssa = phi ptr [ %11, %pm_node_alloc.exit ], [ %scevgep, %19 ], [ %.05558, %.lr.ph ] + %.055.lcssa = phi ptr [ %11, %pm_node_alloc.exit ], [ %19, %18 ], [ %.05558, %.lr.ph ] br label %21 21: ; preds = %23, %.critedge diff --git a/bench/sdl/optimized/SDL_guid.ll b/bench/sdl/optimized/SDL_guid.ll index cb9d07bf20d..25a1c87e80c 100644 --- a/bench/sdl/optimized/SDL_guid.ll +++ b/bench/sdl/optimized/SDL_guid.ll @@ -66,45 +66,39 @@ define hidden { i64, i64 } @SDL_StringToGUID_REAL(ptr noundef %0) local_unnamed_ %3 = tail call i64 @SDL_strlen_REAL(ptr noundef %0) #5 %4 = and i64 %3, -2 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %2, i8 0, i64 16, i1 false) + %5 = ptrtoint ptr %2 to i64 %.not = icmp eq i64 %4, 0 br i1 %.not, label %._crit_edge, label %.lr.ph.preheader -.lr.ph.preheader: ; preds = %1 - %5 = add i64 %4, -1 - %6 = lshr i64 %5, 1 - %umin = tail call i64 @llvm.umin.i64(i64 %6, i64 15) - %scevgep = getelementptr i8, ptr %2, i64 %umin - br label %.lr.ph - -.lr.ph: ; preds = %.lr.ph.preheader, %nibble.exit18 - %.020 = phi i64 [ %29, %nibble.exit18 ], [ 0, %.lr.ph.preheader ] - %.01219 = phi ptr [ %30, %nibble.exit18 ], [ %2, %.lr.ph.preheader ] - %7 = getelementptr inbounds nuw i8, ptr %0, i64 %.020 - %8 = load i8, ptr %7, align 1 - %9 = add i8 %8, -48 - %or.cond.i = icmp ult i8 %9, 10 - br i1 %or.cond.i, label %nibble.exit, label %10 - -10: ; preds = %.lr.ph - %11 = add i8 %8, -65 - %or.cond5.i = icmp ult i8 %11, 6 - br i1 %or.cond5.i, label %12, label %14 - -12: ; preds = %10 - %13 = add nsw i8 %8, -55 +.lr.ph.preheader: ; preds = %1, %nibble.exit18 + %.020 = phi i64 [ %28, %nibble.exit18 ], [ 0, %1 ] + %.01219 = phi ptr [ %29, %nibble.exit18 ], [ %2, %1 ] + %6 = getelementptr inbounds nuw i8, ptr %0, i64 %.021 + %7 = load i8, ptr %6, align 1 + %8 = add i8 %7, -48 + %or.cond.i = icmp ult i8 %8, 10 + br i1 %or.cond.i, label %nibble.exit, label %9 + +9: ; preds = %.lr.ph.preheader + %10 = add i8 %7, -65 + %or.cond5.i = icmp ult i8 %10, 6 + br i1 %or.cond5.i, label %11, label %14 + +11:; preds = %9 + %12 = add nsw i8 %7, -55 br label %nibble.exit -14: ; preds = %10 - %15 = add i8 %8, -97 +14: ; preds = %9 + %15 = add i8 %7, -97 %or.cond8.i = icmp ult i8 %15, 6 - %16 = add nsw i8 %8, -87 + %16 = add nsw i8 %7, -87 %spec.select.i = select i1 %or.cond8.i, i8 %16, i8 0 br label %nibble.exit -nibble.exit: ; preds = %.lr.ph, %12, %14 - %.0.i = phi i8 [ %13, %12 ], [ %spec.select.i, %14 ], [ %9, %.lr.ph ] +nibble.exit: ; preds = %.lr.ph, %11, %14 + %.0.i = phi i8 [ %12, %11 ], [ %spec.select.i, %13 ], [ %8, %.lr.ph ] %17 = shl nuw i8 %.0.i, 4 - %18 = getelementptr inbounds nuw i8, ptr %7, i64 1 + %18 = getelementptr inbounds nuw i8, ptr %6, i64 1 %19 = load i8, ptr %18, align 1 %20 = add i8 %19, -48 %or.cond.i13 = icmp ult i8 %20, 10 @@ -127,13 +121,17 @@ nibble.exit: ; preds = %.lr.ph, %12, %14 br label %nibble.exit18 nibble.exit18: ; preds = %nibble.exit, %23, %25 - %.0.i17 = phi i8 [ %24, %23 ], [ %spec.select.i16, %25 ], [ %20, %nibble.exit ] + %.0.i17 = phi i8 [ %24, %22 ], [ %spec.select.i16, %24 ], [ %20, %nibble.exit ] %28 = add nuw nsw i8 %.0.i17, %17 store i8 %28, ptr %.01219, align 1 %29 = add nuw nsw i64 %.020, 2 %30 = getelementptr inbounds nuw i8, ptr %.01219, i64 1 - %exitcond.not = icmp eq ptr %.01219, %scevgep - br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !5 + %exitcond.not = icmp ult i64 %29, %4 + %31 = ptrtoint ptr %29 to i64 + %32 = sub i64 %31, %5 + %33 = icmp slt i64 %32, 16 + %34 = select i1 %30, i1 %33, i1 false + br i1 %34, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !5 ._crit_edge.loopexit: ; preds = %nibble.exit18 %.fca.0.load.pre = load i64, ptr %2, align 8 @@ -157,9 +155,6 @@ declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immar ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #4 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #4 - attributes #0 = { nofree norecurse nosync nounwind memory(argmem: write) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/sqlite/optimized/sqlite3.ll b/bench/sqlite/optimized/sqlite3.ll index 8112f21756c..994a3d424b8 100644 --- a/bench/sqlite/optimized/sqlite3.ll +++ b/bench/sqlite/optimized/sqlite3.ll @@ -1647,7 +1647,7 @@ target triple = "x86_64-pc-linux-gnu" @.str.1308 = private unnamed_addr constant [4 x i8] c"50f\00", align 1 @.str.1309 = private unnamed_addr constant [12 x i8] c"40f-20a-20d\00", align 1 @.str.1310 = private unnamed_addr constant [12 x i8] c"50f-20a-20d\00", align 1 -@aXformType = internal constant [6 x %struct.anon.42] [%struct.anon.42 { i8 6, [7 x i8] c"second\00", float 0x42FA640480000000, float 1.000000e+00 }, %struct.anon.42 { i8 6, [7 x i8] c"minute\00", float 0x429C267B20000000, float 6.000000e+01 }, %struct.anon.42 { i8 4, [7 x i8] c"hour\00\00\00", float 0x423E073600000000, float 3.600000e+03 }, %struct.anon.42 { i8 3, [7 x i8] c"day\00\00\00\00", float 0x41547F8B40000000, float 8.640000e+04 }, %struct.anon.42 { i8 5, [7 x i8] c"month\00\00", float 1.765460e+05, float 2.592000e+06 }, %struct.anon.42 { i8 4, [7 x i8] c"year\00\00\00", float 1.471300e+04, float 3.153600e+07 }], align 16 +@aXformType = internal unnamed_addr constant [6 x %struct.anon.42] [%struct.anon.42 { i8 6, [7 x i8] c"second\00", float 0x42FA640480000000, float 1.000000e+00 }, %struct.anon.42 { i8 6, [7 x i8] c"minute\00", float 0x429C267B20000000, float 6.000000e+01 }, %struct.anon.42 { i8 4, [7 x i8] c"hour\00\00\00", float 0x423E073600000000, float 3.600000e+03 }, %struct.anon.42 { i8 3, [7 x i8] c"day\00\00\00\00", float 0x41547F8B40000000, float 8.640000e+04 }, %struct.anon.42 { i8 5, [7 x i8] c"month\00\00", float 1.765460e+05, float 2.592000e+06 }, %struct.anon.42 { i8 4, [7 x i8] c"year\00\00\00", float 1.471300e+04, float 3.153600e+07 }], align 16 @.str.1311 = private unnamed_addr constant [23 x i8] c"local time unavailable\00", align 1 @.str.1312 = private unnamed_addr constant [5 x i8] c"%02d\00", align 1 @.str.1313 = private unnamed_addr constant [4 x i8] c"%2d\00", align 1 @@ -335718,45 +335718,44 @@ computeJD.exit371.i: ; preds = %942, %929, %907, %. %977 = fcmp olt double %976, 0.000000e+00 %978 = select i1 %977, double -5.000000e-01, double 5.000000e-01 store i8 0, ptr %307, align 1, !tbaa !3457 - %979 = zext nneg i32 %spec.select264.i to i64 - %980 = getelementptr i8, ptr @aXformType, i64 %979 - br label %981 - -981: ; preds = %1066, %968 - %indvars.iv483.i = phi i64 [ 0, %968 ], [ %indvars.iv.next484.i, %1066 ] - %indvars.iv481.i = phi ptr [ %980, %968 ], [ %scevgep482.i, %1066 ] - %982 = getelementptr inbounds nuw [6 x %struct.anon.42], ptr @aXformType, i64 0, i64 %indvars.iv483.i - %983 = load i8, ptr %982, align 16, !tbaa !3461 - %984 = zext i8 %983 to i32 - %985 = icmp eq i32 %spec.select264.i, %984 - br i1 %985, label %.lr.ph.i375.i, label %1066 - -.lr.ph.i375.i: ; preds = %981, %996 - %.023.i377.i = phi ptr [ %997, %996 ], [ %.2207.i, %981 ] - %.01422.i378.pn.i = phi ptr [ %.01422.i378.i, %996 ], [ %982, %981 ] + br label %979 + +979:; preds = %1066, %968 + %indvars.iv481.i = phi i64 [ 0, %968 ], [ %indvars.iv.next482.i, %1066 ] + %980 = getelementptr inbounds nuw [6 x %struct.anon.42], ptr @aXformType, i64 0, i64 %indvars.iv481.i + %981 = load i8, ptr %980, align 16, !tbaa !3461 + %982 = zext i8 %981 to i32 + %983 = icmp eq i32 %spec.select264.i, %982 + br i1 %983, label %.lr.ph.i375.i, label %1066 + +.lr.ph.i375.i:; preds = %979, %995 + %.in.i376.i = phi i32 [ %984, %995 ], [ %spec.select264.i, %979 ] + %.023.i377.i = phi ptr [ %996, %995 ], [ %.2207.i, %979 ] + %.01422.i378.pn.i = phi ptr [ %.01422.i378.i, %995 ], [ %980, %979 ] %.01422.i378.i = getelementptr inbounds nuw i8, ptr %.01422.i378.pn.i, i64 1 - %986 = load i8, ptr %.01422.i378.i, align 1, !tbaa !198 - %.not.i379.i = icmp eq i8 %986, 0 - br i1 %.not.i379.i, label %sqlite3_strnicmp.exit382.loopexit.i, label %987 - -987: ; preds = %.lr.ph.i375.i - %988 = zext i8 %986 to i64 - %989 = getelementptr inbounds nuw [274 x i8], ptr @sqlite3UpperToLower, i64 0, i64 %988 - %990 = load i8, ptr %989, align 1, !tbaa !198 - %991 = load i8, ptr %.023.i377.i, align 1, !tbaa !198 - %992 = zext i8 %991 to i64 - %993 = getelementptr inbounds nuw [274 x i8], ptr @sqlite3UpperToLower, i64 0, i64 %992 - %994 = load i8, ptr %993, align 1, !tbaa !198 - %995 = icmp eq i8 %990, %994 - br i1 %995, label %996, label %split.i380.i + %984 = add nsw i32 %.in.i376.i, -1 + %985 = load i8, ptr %.01422.i378.i, align 1, !tbaa !198 + %.not.i379.i = icmp eq i8 %985, 0 + br i1 %.not.i379.i, label %sqlite3_strnicmp.exit382.loopexit.i, label %986 + +986:; preds = %.lr.ph.i375.i + %987 = zext i8 %985 to i64 + %988 = getelementptr inbounds nuw [274 x i8], ptr @sqlite3UpperToLower, i64 0, i64 %987 + %991 = load i8, ptr %988, align 1, !tbaa !198 + %990 = load i8, ptr %.023.i377.i, align 1, !tbaa !198 + %991 = zext i8 %990 to i64 + %992 = getelementptr inbounds nuw [274 x i8], ptr @sqlite3UpperToLower, i64 0, i64 %991 + %993 = load i8, ptr %992, align 1, !tbaa !198 + %994 = icmp eq i8 %991, %993 + br i1 %994, label %995, label %split.i380.i -996: ; preds = %987 +996: ; preds = %986 %997 = getelementptr inbounds nuw i8, ptr %.023.i377.i, i64 1 - %exitcond.not.i = icmp eq ptr %.01422.i378.i, %indvars.iv481.i - br i1 %exitcond.not.i, label %sqlite3_strnicmp.exit382.thread.i, label %.lr.ph.i375.i, !llvm.loop !326 + %exitcond.not.i = icmp samesign ugt i32 %.in.i376.i, 1 + br i1 %exitcond.not.i, label %.lr.ph.i375.i, label %sqlite3_strnicmp.exit382.thread.i, !llvm.loop !326 -split.i380.i: ; preds = %987 - %998 = zext i8 %990 to i32 +split.i380.i: ; preds = %986 + %998 = zext i8 %989 to i32 br label %sqlite3_strnicmp.exit382.i sqlite3_strnicmp.exit382.loopexit.i: ; preds = %.lr.ph.i375.i @@ -335767,14 +335766,14 @@ sqlite3_strnicmp.exit382.loopexit.i: ; preds = %.lr.ph.i375.i br label %sqlite3_strnicmp.exit382.i sqlite3_strnicmp.exit382.i: ; preds = %sqlite3_strnicmp.exit382.loopexit.i, %split.i380.i - %999 = phi i8 [ %994, %split.i380.i ], [ %.pre490.i, %sqlite3_strnicmp.exit382.loopexit.i ] + %999 = phi i8 [ %993, %split.i380.i ], [ %.pre490.i, %sqlite3_strnicmp.exit382.loopexit.i ] %1000 = phi i32 [ %998, %split.i380.i ], [ 0, %sqlite3_strnicmp.exit382.loopexit.i ] %1001 = zext i8 %999 to i32 %1002 = icmp eq i32 %1000, %1001 br i1 %1002, label %sqlite3_strnicmp.exit382.thread.i, label %1066 sqlite3_strnicmp.exit382.thread.i: ; preds = %996, %sqlite3_strnicmp.exit382.i - %1003 = getelementptr inbounds nuw i8, ptr %982, i64 8 + %1003 = getelementptr inbounds nuw i8, ptr %980, i64 8 %1004 = load float, ptr %1003, align 8, !tbaa !3464 %1005 = fneg float %1004 %1006 = fpext float %1005 to double @@ -335785,7 +335784,7 @@ sqlite3_strnicmp.exit382.thread.i: ; preds = %996, %sqlite3_strni br i1 %or.cond266.i, label %1010, label %1066 1010: ; preds = %sqlite3_strnicmp.exit382.thread.i - %1011 = trunc nuw nsw i64 %indvars.iv483.i to i32 + %1011 = trunc nuw nsw i64 %indvars.iv481.i to i32 switch i32 %1011, label %1056 [ i32 4, label %1012 i32 5, label %1027 @@ -335886,7 +335885,7 @@ computeFloor.exit: ; preds = %.sink.split.i, %103 %1057 = phi double [ %976, %1010 ], [ %1055, %computeFloor.exit ] call fastcc void @computeJD(ptr noundef nonnull %3) %1058 = fmul double %1057, 1.000000e+03 - %1059 = getelementptr inbounds nuw i8, ptr %982, i64 12 + %1059 = getelementptr inbounds nuw i8, ptr %980, i64 12 %1060 = load float, ptr %1059, align 4, !tbaa !3465 %1061 = fpext float %1060 to double %1062 = call double @llvm.fmuladd.f64(double %1058, double %1061, double %978) @@ -335896,11 +335895,10 @@ computeFloor.exit: ; preds = %.sink.split.i, %103 store i64 %1065, ptr %3, align 8, !tbaa !3443 br label %.loopexit.i -1066: ; preds = %sqlite3_strnicmp.exit382.thread.i, %sqlite3_strnicmp.exit382.i, %981 - %indvars.iv.next484.i = add nuw nsw i64 %indvars.iv483.i, 1 - %scevgep482.i = getelementptr i8, ptr %indvars.iv481.i, i64 16 - %exitcond486.not.i = icmp eq i64 %indvars.iv.next484.i, 6 - br i1 %exitcond486.not.i, label %.loopexit.i, label %981, !llvm.loop !3466 +1066: ; preds = %sqlite3_strnicmp.exit382.thread.i, %sqlite3_strnicmp.exit382.i, %979 + %indvars.iv.next484.i = add nuw nsw i64 %indvars.iv481.i, 1 + %exitcond.not.i = icmp eq i64 %indvars.iv.next482.i, 6 + br i1 %exitcond.not.i, label %.loopexit.i, label %979, !llvm.loop !3466 .loopexit.i: ; preds = %1066, %1056 %.3.i = phi i32 [ 0, %1056 ], [ 1, %1066 ] diff --git a/bench/sundials/optimized/sundials_hashmap.ll b/bench/sundials/optimized/sundials_hashmap.ll index 044833e0b75..8d339f133b2 100644 --- a/bench/sundials/optimized/sundials_hashmap.ll +++ b/bench/sundials/optimized/sundials_hashmap.ll @@ -210,8 +210,8 @@ fnv1a_hash.exit: ; preds = %.lr.ph.i, %7 27: ; preds = %.lr.ph.i31 %indvars.iv.next.i = add nsw i64 %indvars.iv.i, 1 - %28 = icmp slt i64 %indvars.iv.next.i, %17 - br i1 %28, label %.lr.ph.i31, label %SUNHashMap_Iterate.exit + %28 = icmp eq i64 %indvars.iv.next.i, %17 + br i1 %28, label %SUNHashMap_Iterate.exit, label %.lr.ph.i31 .lr.ph.i31: ; preds = %27, %.lr.ph.preheader.i %indvars.iv.i = phi i64 [ %26, %.lr.ph.preheader.i ], [ %indvars.iv.next.i, %27 ] @@ -317,8 +317,8 @@ fnv1a_hash.exit: ; preds = %.lr.ph.i, %7 sunHashMapLinearProbeGet.exit.thread: ; preds = %37, %33 %indvars.iv.next.i = add nsw i64 %indvars.iv.i, 1 - %32 = icmp slt i64 %indvars.iv.next.i, %17 - br i1 %32, label %33, label %SUNHashMap_Iterate.exit + %32 = icmp eq i64 %indvars.iv.next.i, %17 + br i1 %32, label %SUNHashMap_Iterate.exit, label %32 33: ; preds = %.lr.ph.preheader.i, %sunHashMapLinearProbeGet.exit.thread %indvars.iv.i = phi i64 [ %31, %.lr.ph.preheader.i ], [ %indvars.iv.next.i, %sunHashMapLinearProbeGet.exit.thread ] diff --git a/bench/tls-rs/optimized/2xhpv4vf07do7r8g.ll b/bench/tls-rs/optimized/2xhpv4vf07do7r8g.ll index af24877d8ac..9608b3d5e44 100644 --- a/bench/tls-rs/optimized/2xhpv4vf07do7r8g.ll +++ b/bench/tls-rs/optimized/2xhpv4vf07do7r8g.ll @@ -5365,10 +5365,9 @@ _ZN9aws_lc_rs4aead4quic19HeaderProtectionKey8new_mask17h408478ba2bbbe363E.exit: .lr.ph.preheader: ; preds = %31 %36 = select i1 %7, i8 %32, i8 0 %.031 = xor i8 %36, %33 - %37 = add nsw i64 %6, -1 - %38 = and i8 %.031, 3 - %39 = zext nneg i8 %38 to i64 - %umin = call i64 @llvm.umin.i64(i64 %37, i64 %39) + %37 = and i8 %.031, 3 + %narrow = add nuw nsw i8 %37, 1 + %39 = zext nneg i8 %narrow to i64 br label %.lr.ph 40: ; preds = %24 @@ -5392,7 +5391,9 @@ _ZN9aws_lc_rs4aead4quic19HeaderProtectionKey8new_mask17h408478ba2bbbe363E.exit: br label %51 .lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph + %.sroa.14.075 = phi i64 [ %44, %.lr.ph ], [ %38, %.lr.ph.preheader ] %.sroa.849.074 = phi i64 [ %45, %.lr.ph ], [ 0, %.lr.ph.preheader ] + %44 = add nsw i64 %.sroa.14.075, -1 %45 = add nuw nsw i64 %.sroa.849.074, 1 %46 = getelementptr inbounds nuw i8, ptr %5, i64 %.sroa.849.074 %47 = getelementptr inbounds nuw i8, ptr %25, i64 %.sroa.849.074 @@ -5400,8 +5401,10 @@ _ZN9aws_lc_rs4aead4quic19HeaderProtectionKey8new_mask17h408478ba2bbbe363E.exit: %49 = load i8, ptr %46, align 1, !noundef !14 %50 = xor i8 %49, %48 store i8 %50, ptr %46, align 1 - %exitcond.not = icmp eq i64 %.sroa.849.074, %umin - br i1 %exitcond.not, label %.thread65, label %.lr.ph + %exitcond.not = icmp ne i64 %44, 0 + %52 = icmp samesign ult i64 %45, %6 + %or.cond = select i1 %51, i1 %52, i1 false + br i1 %or.cond, label %.lr.ph, label %.thread65 51: ; preds = %_ZN9aws_lc_rs4aead4quic19HeaderProtectionKey8new_mask17h408478ba2bbbe363E.exit, %40, %.thread65 call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %14) diff --git a/bench/wireshark/optimized/packet-ieee80211.ll b/bench/wireshark/optimized/packet-ieee80211.ll index b8c25a7dced..2dd5d441091 100644 --- a/bench/wireshark/optimized/packet-ieee80211.ll +++ b/bench/wireshark/optimized/packet-ieee80211.ll @@ -38003,7 +38003,7 @@ define internal i32 @dissect_mbo_oce(ptr noundef %0, ptr noundef %1, ptr noundef } ; Function Attrs: null_pointer_is_valid sspstrong uwtable -define internal range(i32 0, -2147483648) i32 @dissect_wfa_wnm_non_pref_chan(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr readnone captures(none) %3) #2 { +define internal range(i32 3, 2) i32 @dissect_wfa_wnm_non_pref_chan(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr readnone captures(none) %3) #2 { %5 = tail call i32 @tvb_reported_length(ptr noundef %0) %6 = icmp eq i32 %5, 0 br i1 %6, label %24, label %7 @@ -38020,28 +38020,26 @@ define internal range(i32 0, -2147483648) i32 @dissect_wfa_wnm_non_pref_chan(ptr %12 = load i32, ptr @hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, align 4 %13 = tail call ptr @proto_tree_add_item(ptr noundef %2, i32 noundef %12, ptr noundef %0, i32 noundef 0, i32 noundef 1, i32 noundef 0) %.not = icmp eq i32 %5, 3 - br i1 %.not, label %._crit_edge, label %.lr.ph.preheader - -.lr.ph.preheader: ; preds = %11 - %14 = add nsw i32 %5, -2 - br label %.lr.ph + br i1 %.not, label %._crit_edge, label %.lr.ph -.lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph - %.029 = phi i32 [ %17, %.lr.ph ], [ 1, %.lr.ph.preheader ] - %15 = load i32, ptr @hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, align 4 - %16 = tail call ptr @proto_tree_add_item(ptr noundef %2, i32 noundef %15, ptr noundef %0, i32 noundef %.029, i32 noundef 1, i32 noundef 0) - %17 = add nuw nsw i32 %.029, 1 - %exitcond.not = icmp eq i32 %17, %14 - br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !182 +.lr.ph: ; preds = %11, %.lr.ph + %.029 = phi i32 [ %16, %.lr.ph ], [ 1, %11 ] + %.025.in28 = phi i32 [ %.025, %.lr.ph ], [ %5, %11 ] + %.025 = add nsw i32 %.025.in28, -1 + %14 = load i32, ptr @hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, align 4 + %15 = tail call ptr @proto_tree_add_item(ptr noundef %2, i32 noundef %14, ptr noundef %0, i32 noundef %.029, i32 noundef 1, i32 noundef 0) + %16 = add nuw nsw i32 %.029, 1 + %17 = icmp samesign ugt i32 %.025.in28, 4 + br i1 %17, label %.lr.ph, label %._crit_edge, !llvm.loop !182 ._crit_edge: ; preds = %.lr.ph, %11 - %.0.lcssa = phi i32 [ 1, %11 ], [ %14, %.lr.ph ] + %.0.lcssa = phi i32 [ 1, %11 ], [ %16, %.lr.ph ] %18 = load i32, ptr @hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, align 4 %19 = tail call ptr @proto_tree_add_item(ptr noundef %2, i32 noundef %18, ptr noundef %0, i32 noundef %.0.lcssa, i32 noundef 1, i32 noundef 0) - %20 = add nuw nsw i32 %.0.lcssa, 1 + %20 = add i32 %.0.lcssa, 1 %21 = load i32, ptr @hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, align 4 %22 = tail call ptr @proto_tree_add_item(ptr noundef %2, i32 noundef %21, ptr noundef %0, i32 noundef %20, i32 noundef 1, i32 noundef 0) - %23 = add nuw nsw i32 %.0.lcssa, 2 + %23 = add i32 %.0.lcssa, 2 br label %24 24: ; preds = %4, %._crit_edge, %9 diff --git a/bench/wireshark/optimized/packet-mbim.ll b/bench/wireshark/optimized/packet-mbim.ll index 3addf1b4396..f6559e7cc9f 100644 --- a/bench/wireshark/optimized/packet-mbim.ll +++ b/bench/wireshark/optimized/packet-mbim.ll @@ -9458,7 +9458,7 @@ define internal i32 @dissect_mbim_bulk(ptr noundef %0, ptr noundef %1, ptr nound 13: ; preds = %4 %14 = tail call i32 @tvb_get_letohl(ptr noundef %0, i32 noundef 0) %.not = icmp eq i32 %14, 1213023054 - switch i32 %14, label %365 [ + switch i32 %14, label %364 [ i32 1751999342, label %15 i32 1213023054, label %15 ] @@ -9924,19 +9924,16 @@ sub_1356: ; preds = %.critedge312.tail, .preheader: ; preds = %290 %.not303 = icmp eq ptr %.0268, null - %umax = call i32 @llvm.umax.i32(i32 %.0271394, i32 1000) - %292 = add i32 %umax, 1 - %293 = sub i32 %292, %.0271394 - br label %296 + br label %294 294: ; preds = %290 %295 = call ptr @expert_add_info(ptr noundef %1, ptr noundef %.1267, ptr noundef nonnull @ei_mbim_out_of_bounds_index) br label %.sink.split -296: ; preds = %.preheader, %330 - %.1275 = phi i32 [ %306, %330 ], [ %.0274, %.preheader ] - %.0273 = phi i32 [ %333, %330 ], [ 0, %.preheader ] - %.1272 = phi i32 [ %334, %330 ], [ %.0271394, %.preheader ] +296: ; preds = %.preheader, %328 + %.1275 = phi i32 [ %306, %328 ], [ %.0274, %.preheader ] + %.0273 = phi i32 [ %331, %328 ], [ 0, %.preheader ] + %.1272 = phi i32 [ %332, %328 ], [ %.0271394, %.preheader ] %297 = sub i32 %.1275, %70 %298 = load i32, ptr %5, align 4 %299 = icmp ult i32 %297, %298 @@ -9963,51 +9960,51 @@ sub_1356: ; preds = %.critedge312.tail, 311: ; preds = %300 %312 = load i32, ptr %7, align 4 + %311 = icmp ne i32 %310, 0 + %312 = load i32, ptr %8, align 4 %313 = icmp ne i32 %312, 0 - %314 = load i32, ptr %8, align 4 - %315 = icmp ne i32 %314, 0 - %or.cond = select i1 %313, i1 %315, i1 false - br i1 %or.cond, label %316, label %337 - -316: ; preds = %311 - %317 = load i32, ptr @hf_mbim_bulk_ndp_datagram, align 4 - %318 = call ptr @proto_tree_add_item(ptr noundef %72, i32 noundef %317, ptr noundef %0, i32 noundef %312, i32 noundef %314, i32 noundef 0) - %319 = load i32, ptr %7, align 4 - %320 = load i32, ptr %8, align 4 - %321 = call ptr @tvb_new_subset_length(ptr noundef %0, i32 noundef %319, i32 noundef %320) - br i1 %.not303, label %330, label %322 - -322: ; preds = %316 + %or.cond = select i1 %311, i1 %313, i1 false + br i1 %or.cond, label %314, label %336 + +314:; preds = %311 + %315 = load i32, ptr @hf_mbim_bulk_ndp_datagram, align 4 + %316 = call ptr @proto_tree_add_item(ptr noundef %72, i32 noundef %315, ptr noundef %0, i32 noundef %310, i32 noundef %312, i32 noundef 0) + %317 = load i32, ptr %7, align 4 + %318 = load i32, ptr %8, align 4 + %319 = call ptr @tvb_new_subset_length(ptr noundef %0, i32 noundef %317, i32 noundef %318) + br i1 %.not303, label %328, label %320 + +320:; preds = %314 %.not304 = icmp eq i32 %.1272, 0 - br i1 %.not304, label %328, label %323 + br i1 %.not304, label %326, label %323 -323: ; preds = %322 +323: ; preds = %320 + %322 = load ptr, ptr %16, align 8 + call void @col_set_str(ptr noundef %322, i32 noundef 35, ptr noundef nonnull @.str.2769) + %323 = load ptr, ptr %16, align 8 + call void @col_set_fence(ptr noundef %323, i32 noundef 35) %324 = load ptr, ptr %16, align 8 - call void @col_set_str(ptr noundef %324, i32 noundef 35, ptr noundef nonnull @.str.2769) + call void @col_set_str(ptr noundef %324, i32 noundef 25, ptr noundef nonnull @.str.2770) %325 = load ptr, ptr %16, align 8 - call void @col_set_fence(ptr noundef %325, i32 noundef 35) - %326 = load ptr, ptr %16, align 8 - call void @col_set_str(ptr noundef %326, i32 noundef 25, ptr noundef nonnull @.str.2770) - %327 = load ptr, ptr %16, align 8 - call void @col_set_fence(ptr noundef %327, i32 noundef 25) + call void @col_set_fence(ptr noundef %325, i32 noundef 25) + br label %326 + +326:; preds = %321, %320 + %327 = call i32 @call_dissector(ptr noundef nonnull %.0268, ptr noundef %319, ptr noundef %1, ptr noundef %2) br label %328 -328: ; preds = %323, %322 - %329 = call i32 @call_dissector(ptr noundef nonnull %.0268, ptr noundef %321, ptr noundef %1, ptr noundef %2) - br label %330 - -330: ; preds = %328, %316 - %331 = load ptr, ptr %16, align 8 - call void @col_set_fence(ptr noundef %331, i32 noundef 35) - %332 = load ptr, ptr %16, align 8 - call void @col_set_fence(ptr noundef %332, i32 noundef 25) - %333 = add nuw nsw i32 %.0273, 1 - %334 = add nuw nsw i32 %.1272, 1 - %exitcond = icmp eq i32 %333, %293 - br i1 %exitcond, label %335, label %296, !llvm.loop !8 - -335: ; preds = %330 - %336 = call ptr (ptr, ptr, ptr, ptr, ...) @expert_add_info_format(ptr noundef %1, ptr noundef null, ptr noundef nonnull @ei_mbim_too_many_items, ptr noundef nonnull @.str.2771, i32 noundef 1000) +328: ; preds = %326, %314 + %329 = load ptr, ptr %16, align 8 + call void @col_set_fence(ptr noundef %329, i32 noundef 35) + %330 = load ptr, ptr %16, align 8 + call void @col_set_fence(ptr noundef %330, i32 noundef 25) + %331 = add nuw nsw i32 %.0273, 1 + %332 = add nuw nsw i32 %.1272, 1 + %333 = icmp ugt i32 %.1272, 999 + br i1 %333, label %334, label %294, !llvm.loop !8 + +334:; preds = %328 + %335 = call ptr (ptr, ptr, ptr, ptr, ...) @expert_add_info_format(ptr noundef %1, ptr noundef null, ptr noundef nonnull @ei_mbim_too_many_items, ptr noundef nonnull @.str.2771, i32 noundef 1000) br label %.sink.split 337: ; preds = %311 @@ -10069,7 +10066,7 @@ proto_item_set_generated.exit: ; preds = %.loopexit, %346, %3 store i32 %363, ptr %361, align 4 br label %.sink.split -.sink.split: ; preds = %360, %357, %._crit_edge, %59, %66, %268, %288, %294, %309, %335, %353 +.sink.split: ; preds = %360, %357, %._crit_edge, %59, %66, %268, %288, %294, %309, %334, %353 %364 = call i32 @tvb_captured_length(ptr noundef %0) br label %365 @@ -19898,9 +19895,6 @@ declare i32 @bcmp(ptr captures(none), ptr captures(none), i64) local_unnamed_add ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i64, i1 immarg) #10 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #8 - attributes #0 = { null_pointer_is_valid sspstrong uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "probe-stack"="inline-asm" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #2 = { null_pointer_is_valid "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/wireshark/optimized/packet-netlink-sock_diag.ll b/bench/wireshark/optimized/packet-netlink-sock_diag.ll index 444f7e55dee..da923d4c4a2 100644 --- a/bench/wireshark/optimized/packet-netlink-sock_diag.ll +++ b/bench/wireshark/optimized/packet-netlink-sock_diag.ll @@ -827,25 +827,24 @@ define internal range(i32 0, 2) i32 @dissect_netlink_unix_sock_diag_reply_attrs( .lr.ph.i: ; preds = %.preheader.i %49 = getelementptr inbounds nuw i8, ptr %2, i64 4 - %50 = add nsw i32 %6, -4 - %51 = lshr exact i32 %50, 2 - %52 = tail call i32 @llvm.umin.i32(i32 %51, i32 5) - %narrow = add nuw nsw i32 %52, 1 - %53 = zext nneg i32 %narrow to i64 - br label %54 - -54: ; preds = %54, %.lr.ph.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %54 ] - %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %60, %54 ] - %55 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i - %56 = load ptr, ptr %55, align 8 - %57 = load i32, ptr %56, align 4 - %58 = load i32, ptr %49, align 4 - %59 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %57, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %58) - %60 = add i32 %.0141.i, 4 + br label %50 + +50:; preds = %50, %.lr.ph.i + %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %50 ] + %.0132.i = phi i32 [ %6, %.lr.ph.i ], [ %57, %50 ] + %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %56, %50 ] + %51 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i + %52 = load ptr, ptr %51, align 8 + %53 = load i32, ptr %52, align 4 + %54 = load i32, ptr %49, align 4 + %55 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %53, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %54) + %56 = add i32 %.0141.i, 4 + %57 = add nsw i32 %.0132.i, -4 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next.i, %53 - br i1 %exitcond.not, label %dissect_sock_diag_meminfo.exit, label %54, !llvm.loop !8 + %exitcond.not = icmp samesign ugt i32 %.0132.i, 7 + %59 = icmp samesign ult i64 %indvars.iv.i, 5 + %60 = select i1 %58, i1 %59, i1 false + br i1 %60, label %50, label %dissect_sock_diag_meminfo.exit, !llvm.loop !8 61: ; preds = %7 %62 = icmp eq i32 %6, 1 @@ -860,8 +859,8 @@ define internal range(i32 0, 2) i32 @dissect_netlink_unix_sock_diag_reply_attrs( tail call void (ptr, ptr, ...) @proto_item_append_text(ptr noundef %3, ptr noundef nonnull @.str.176, ptr noundef %68) br label %dissect_sock_diag_meminfo.exit -dissect_sock_diag_meminfo.exit: ; preds = %54, %.preheader.i, %45, %7, %61, %63, %35, %27, %37, %29, %24 - %.044 = phi i32 [ 1, %24 ], [ 1, %29 ], [ 1, %37 ], [ 0, %27 ], [ 0, %35 ], [ 0, %63 ], [ 0, %61 ], [ 0, %7 ], [ 0, %45 ], [ 1, %.preheader.i ], [ 1, %54 ] +dissect_sock_diag_meminfo.exit: ; preds = %50, %.preheader.i, %45, %7, %61, %63, %35, %27, %37, %29, %24 + %.044 = phi i32 [ 1, %24 ], [ 1, %29 ], [ 1, %37 ], [ 0, %27 ], [ 0, %35 ], [ 0, %63 ], [ 0, %61 ], [ 0, %7 ], [ 0, %45 ], [ 1, %.preheader.i ], [ 1, %50 ] ret i32 %.044 } @@ -1015,25 +1014,24 @@ define internal range(i32 0, 2) i32 @dissect_sock_diag_inet_attributes(ptr nound .lr.ph.i: ; preds = %.preheader.i %31 = getelementptr inbounds nuw i8, ptr %2, i64 4 - %32 = add nsw i32 %6, -4 - %33 = lshr exact i32 %32, 2 - %34 = tail call i32 @llvm.umin.i32(i32 %33, i32 5) - %narrow = add nuw nsw i32 %34, 1 - %35 = zext nneg i32 %narrow to i64 - br label %36 - -36: ; preds = %36, %.lr.ph.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %36 ] - %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %42, %36 ] - %37 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i - %38 = load ptr, ptr %37, align 8 - %39 = load i32, ptr %38, align 4 - %40 = load i32, ptr %31, align 4 - %41 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %39, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %40) - %42 = add i32 %.0141.i, 4 + br label %32 + +32:; preds = %32, %.lr.ph.i + %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %32 ] + %.0132.i = phi i32 [ %6, %.lr.ph.i ], [ %39, %32 ] + %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %38, %32 ] + %33 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i + %34 = load ptr, ptr %33, align 8 + %35 = load i32, ptr %34, align 4 + %36 = load i32, ptr %31, align 4 + %37 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %35, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %36) + %38 = add i32 %.0141.i, 4 + %39 = add nsw i32 %.0132.i, -4 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next.i, %35 - br i1 %exitcond.not, label %dissect_sock_diag_meminfo.exit, label %36, !llvm.loop !8 + %exitcond.not = icmp samesign ugt i32 %.0132.i, 7 + %41 = icmp samesign ult i64 %indvars.iv.i, 5 + %42 = select i1 %40, i1 %41, i1 false + br i1 %42, label %32, label %dissect_sock_diag_meminfo.exit, !llvm.loop !8 43: ; preds = %7 %44 = icmp eq i32 %6, 1 @@ -1048,8 +1046,8 @@ define internal range(i32 0, 2) i32 @dissect_sock_diag_inet_attributes(ptr nound tail call void (ptr, ptr, ...) @proto_item_append_text(ptr noundef %3, ptr noundef nonnull @.str.176, ptr noundef %50) br label %dissect_sock_diag_meminfo.exit -dissect_sock_diag_meminfo.exit: ; preds = %36, %.preheader.i, %27, %7, %43, %45, %8, %10 - %.0 = phi i32 [ 1, %10 ], [ 0, %8 ], [ 0, %45 ], [ 0, %43 ], [ 0, %7 ], [ 0, %27 ], [ 1, %.preheader.i ], [ 1, %36 ] +dissect_sock_diag_meminfo.exit: ; preds = %32, %.preheader.i, %27, %7, %43, %45, %8, %10 + %.0 = phi i32 [ 1, %10 ], [ 0, %8 ], [ 0, %45 ], [ 0, %43 ], [ 0, %7 ], [ 0, %27 ], [ 1, %.preheader.i ], [ 1, %32 ] ret i32 %.0 } @@ -1071,28 +1069,27 @@ define internal range(i32 0, 2) i32 @dissect_sock_diag_netlink_attributes(ptr no .lr.ph.i: ; preds = %.preheader.i %12 = getelementptr inbounds nuw i8, ptr %2, i64 4 - %13 = add nsw i32 %6, -4 - %14 = lshr exact i32 %13, 2 - %15 = tail call i32 @llvm.umin.i32(i32 %14, i32 5) - %narrow = add nuw nsw i32 %15, 1 - %16 = zext nneg i32 %narrow to i64 - br label %17 - -17: ; preds = %17, %.lr.ph.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %17 ] - %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %23, %17 ] - %18 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i - %19 = load ptr, ptr %18, align 8 - %20 = load i32, ptr %19, align 4 - %21 = load i32, ptr %12, align 4 - %22 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %20, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %21) - %23 = add i32 %.0141.i, 4 + br label %13 + +13:; preds = %13, %.lr.ph.i + %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %13 ] + %.0132.i = phi i32 [ %6, %.lr.ph.i ], [ %20, %13 ] + %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %19, %13 ] + %14 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i + %15 = load ptr, ptr %14, align 8 + %16 = load i32, ptr %15, align 4 + %17 = load i32, ptr %12, align 4 + %18 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %16, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %17) + %19 = add i32 %.0141.i, 4 + %20 = add nsw i32 %.0132.i, -4 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next.i, %16 - br i1 %exitcond.not, label %dissect_sock_diag_meminfo.exit, label %17, !llvm.loop !8 + %exitcond.not = icmp samesign ugt i32 %.0132.i, 7 + %22 = icmp samesign ult i64 %indvars.iv.i, 5 + %23 = select i1 %21, i1 %22, i1 false + br i1 %23, label %13, label %dissect_sock_diag_meminfo.exit, !llvm.loop !8 -dissect_sock_diag_meminfo.exit: ; preds = %17, %.preheader.i, %8, %7 - %.0 = phi i32 [ 0, %7 ], [ 0, %8 ], [ 1, %.preheader.i ], [ 1, %17 ] +dissect_sock_diag_meminfo.exit: ; preds = %13, %.preheader.i, %8, %7 + %.0 = phi i32 [ 0, %7 ], [ 0, %8 ], [ 1, %.preheader.i ], [ 1, %13 ] ret i32 %.0 } @@ -1114,41 +1111,36 @@ define internal range(i32 0, 2) i32 @dissect_netlink_packet_sock_diag_reply_attr .lr.ph.i: ; preds = %.preheader.i %12 = getelementptr inbounds nuw i8, ptr %2, i64 4 - %13 = add nsw i32 %6, -4 - %14 = lshr exact i32 %13, 2 - %15 = tail call i32 @llvm.umin.i32(i32 %14, i32 5) - %narrow = add nuw nsw i32 %15, 1 - %16 = zext nneg i32 %narrow to i64 - br label %17 - -17: ; preds = %17, %.lr.ph.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %17 ] - %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %23, %17 ] - %18 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i - %19 = load ptr, ptr %18, align 8 - %20 = load i32, ptr %19, align 4 - %21 = load i32, ptr %12, align 4 - %22 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %20, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %21) - %23 = add i32 %.0141.i, 4 + br label %13 + +13:; preds = %13, %.lr.ph.i + %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %13 ] + %.0132.i = phi i32 [ %6, %.lr.ph.i ], [ %20, %13 ] + %.0141.i = phi i32 [ %5, %.lr.ph.i ], [ %19, %13 ] + %14 = getelementptr [6 x ptr], ptr @dissect_sock_diag_meminfo.hfs, i64 0, i64 %indvars.iv.i + %15 = load ptr, ptr %14, align 8 + %16 = load i32, ptr %15, align 4 + %17 = load i32, ptr %12, align 4 + %18 = tail call ptr @proto_tree_add_item(ptr noundef %3, i32 noundef %16, ptr noundef %0, i32 noundef %.0141.i, i32 noundef 4, i32 noundef %17) + %19 = add i32 %.0141.i, 4 + %20 = add nsw i32 %.0132.i, -4 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next.i, %16 - br i1 %exitcond.not, label %dissect_sock_diag_meminfo.exit, label %17, !llvm.loop !8 + %exitcond.not = icmp samesign ugt i32 %.0132.i, 7 + %22 = icmp samesign ult i64 %indvars.iv.i, 5 + %23 = select i1 %21, i1 %22, i1 false + br i1 %23, label %13, label %dissect_sock_diag_meminfo.exit, !llvm.loop !8 -dissect_sock_diag_meminfo.exit: ; preds = %17, %.preheader.i, %8, %7 - %.0 = phi i32 [ 0, %7 ], [ 0, %8 ], [ 1, %.preheader.i ], [ 1, %17 ] +dissect_sock_diag_meminfo.exit: ; preds = %13, %.preheader.i, %8, %7 + %.0 = phi i32 [ 0, %7 ], [ 0, %8 ], [ 1, %.preheader.i ], [ 1, %13 ] ret i32 %.0 } -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umin.i32(i32, i32) #4 - attributes #0 = { null_pointer_is_valid sspstrong uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "probe-stack"="inline-asm" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { null_pointer_is_valid "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #3 = { noreturn null_pointer_is_valid "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } -attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } -attributes #5 = { nounwind } -attributes #6 = { noreturn } +attributes #4 = { nounwind } +attributes #5 = { noreturn } !llvm.module.flags = !{!0, !1, !2, !3, !4, !5} diff --git a/bench/wireshark/optimized/packet-sctp.ll b/bench/wireshark/optimized/packet-sctp.ll index 41fa2fa4684..812729030dc 100644 --- a/bench/wireshark/optimized/packet-sctp.ll +++ b/bench/wireshark/optimized/packet-sctp.ll @@ -8632,24 +8632,23 @@ define internal fastcc void @sctp_ack_block(ptr noundef readonly captures(none) %60 = getelementptr inbounds nuw i8, ptr %0, i64 24 %61 = load ptr, ptr %8, align 8 %62 = icmp eq ptr %61, null - br i1 %62, label %.loopexit, label %.preheader.split.preheader + br i1 %62, label %.loopexit, label %.preheader.split -.preheader.split.preheader: ; preds = %.preheader - %63 = add i32 %5, 1 - %64 = add i32 %.059, %18 - %65 = sub i32 %63, %64 +.preheader.split.preheader: ; preds = %sctp_ack.exit + %63 = add nuw nsw i32 %.088, 1 + %.pr = load ptr, ptr %8, align 8 br label %.preheader.split -.preheader.split: ; preds = %.preheader.split.preheader, %sctp_ack.exit - %.088 = phi i32 [ %94, %sctp_ack.exit ], [ 0, %.preheader.split.preheader ] - %66 = load ptr, ptr %8, align 8 - %.not.i = icmp eq ptr %66, null +.preheader.split: ; preds = %.preheader, %.preheader.split.preheader + %.088 = phi ptr [ %.pr, %.preheader.splitthread-pre-split ], [ %61, %.preheader ] + %.088 = phi i32 [ %63, %.preheader.splitthread-pre-split ], [ 0, %.preheader ] + %.not.i = icmp eq ptr %64, null br i1 %.not.i, label %sctp_ack.exit, label %67 67: ; preds = %.preheader.split %68 = add i32 %.088, %.059 %69 = load i32, ptr %15, align 4 - %70 = getelementptr inbounds nuw i8, ptr %66, i64 24 + %70 = getelementptr inbounds nuw i8, ptr %64, i64 24 %71 = load ptr, ptr %70, align 8 %72 = tail call ptr @wmem_tree_lookup32(ptr noundef %71, i32 noundef %68) %.not30.i = icmp eq ptr %72, null @@ -8673,7 +8672,7 @@ define internal fastcc void @sctp_ack_block(ptr noundef readonly captures(none) br i1 %.not32.i, label %86, label %.preheader.i .preheader.i: ; preds = %76, %.preheader.i - %.0.i = phi ptr [ %83, %.preheader.i ], [ %81, %76 ] + %.0.i = phi ptr [ %83, %.preheader.i ], [ %81, %74 ] %82 = getelementptr inbounds nuw i8, ptr %.0.i, i64 72 %83 = load ptr, ptr %82, align 8 %.not33.i = icmp eq ptr %83, null @@ -8702,9 +8701,8 @@ define internal fastcc void @sctp_ack_block(ptr noundef readonly captures(none) br label %sctp_ack.exit sctp_ack.exit: ; preds = %.preheader.split, %67, %90, %93 - %94 = add nuw i32 %.088, 1 - %exitcond.not = icmp eq i32 %94, %65 - br i1 %exitcond.not, label %.loopexit, label %.preheader.split, !llvm.loop !59 + %.not78.not = icmp ult i32 %.088, %51 + br i1 %.not78.not, label %.preheader.split.preheader, label %.loopexit, !llvm.loop !59 .loopexit: ; preds = %40, %sctp_ack.exit, %.preheader, %58, %43, %50, %6, %7, %10 ret void diff --git a/bench/wireshark/optimized/packet-ssh.ll b/bench/wireshark/optimized/packet-ssh.ll index 4819308325d..08eeda4b0cc 100644 --- a/bench/wireshark/optimized/packet-ssh.ll +++ b/bench/wireshark/optimized/packet-ssh.ll @@ -6266,38 +6266,35 @@ define internal fastcc void @ssh_print_data(ptr noundef %0, ptr noundef readonly .lr.ph43: ; preds = %5 %8 = load ptr, ptr @g_ascii_table, align 8 - %9 = add nsw i64 %2, -1 br label %10 10: ; preds = %.lr.ph43, %._crit_edge40 - %indvars.iv = phi i64 [ %9, %.lr.ph43 ], [ %indvars.iv.next, %._crit_edge40 ] - %.041 = phi i64 [ 0, %.lr.ph43 ], [ %47, %._crit_edge40 ] - %umin = tail call i64 @llvm.umin.i64(i64 %indvars.iv, i64 15) - %11 = load ptr, ptr @ssh_debug_file, align 8 - %12 = trunc nuw i64 %.041 to i32 - %13 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %11, i32 noundef 2, ptr noundef nonnull @.str.491, i32 noundef %12) - br label %14 - -.preheader: ; preds = %14 - br i1 %22, label %.lr.ph, label %.lr.ph39.preheader - -14: ; preds = %10, %14 - %.02834 = phi i64 [ 0, %10 ], [ %21, %14 ] - %.02933 = phi i64 [ %.041, %10 ], [ %20, %14 ] - %15 = load ptr, ptr @ssh_debug_file, align 8 - %16 = getelementptr i8, ptr %1, i64 %.02933 - %17 = load i8, ptr %16, align 1 - %18 = zext i8 %17 to i32 - %19 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %15, i32 noundef 2, ptr noundef nonnull @.str.492, i32 noundef %18) - %20 = add nuw nsw i64 %.02933, 1 - %21 = add nuw nsw i64 %.02834, 1 - %22 = icmp samesign ult i64 %.02834, 15 - %23 = icmp samesign ult i64 %20, %2 - %24 = select i1 %22, i1 %23, i1 false - br i1 %24, label %14, label %.preheader, !llvm.loop !72 + %indvars.iv = phi i64 [ 0, %.lr.ph43 ], [ %49, %._crit_edge40 ] + %10 = load ptr, ptr @ssh_debug_file, align 8 + %11 = trunc nuw i64 %indvars.iv to i32 + %12 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %10, i32 noundef 2, ptr noundef nonnull @.str.491, i32 noundef %11) + br label %13 + +.preheader:; preds = %13 + br i1 %21, label %.lr.ph, label %.lr.ph39.preheader + +13:; preds = %9, %13 + %.02834 = phi i64 [ 0, %9 ], [ %20, %13 ] + %.02933 = phi i64 [ %.041, %9 ], [ %110, %13 ] + %14 = load ptr, ptr @ssh_debug_file, align 8 + %15 = getelementptr i8, ptr %1, i64 %.02933 + %15 = load i8, ptr %15, align 1 + %17 = zext i8 %15 to i32 + %18 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %14, i32 noundef 2, ptr noundef nonnull @.str.492, i32 noundef %17) + %19 = add nuw nsw i64 %.02933, 1 + %20 = add nuw nsw i64 %.02834, 1 + %21 = icmp samesign ult i64 %.02834, 15 + %22 = icmp samesign ult i64 %110, %2 + %23 = select i1 %21, i1 %22, i1 false + br i1 %23, label %13, label %.preheader, !llvm.loop !72 .lr.ph: ; preds = %.preheader, %.lr.ph - %.135 = phi i64 [ %27, %.lr.ph ], [ %21, %.preheader ] + %.135 = phi i64 [ %27, %.lr.ph ], [ %20, %.preheader ] %25 = load ptr, ptr @ssh_debug_file, align 8 %26 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %25, i32 noundef 2, ptr noundef nonnull @.str.493) %27 = add nuw nsw i64 %.135, 1 @@ -6324,19 +6321,20 @@ define internal fastcc void @ssh_print_data(ptr noundef %0, ptr noundef readonly %39 = zext i8 %32 to i32 %40 = select i1 %or.cond, i32 46, i32 %39 %41 = load ptr, ptr @ssh_debug_file, align 8 - %42 = tail call i32 @fputc(i32 noundef %40, ptr noundef %41) + %42 = tail call i32 @fputc(i32 noundef %310, ptr noundef %41) %43 = add nuw nsw i64 %.13036, 1 %44 = add nuw nsw i64 %.237, 1 - %exitcond.not = icmp eq i64 %.237, %umin - br i1 %exitcond.not, label %._crit_edge40, label %.lr.ph39, !llvm.loop !74 + %exitcond.not = icmp samesign ult i64 %.237, 15 + %45 = icmp samesign ult i64 %42, %2 + %46 = select i1 %44, i1 %45, i1 false + br i1 %46, label %.lr.ph39, label %._crit_edge40, !llvm.loop !74 ._crit_edge40: ; preds = %.lr.ph39 %45 = load ptr, ptr @ssh_debug_file, align 8 %46 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %45, i32 noundef 2, ptr noundef nonnull @.str.494) %47 = add nuw nsw i64 %.041, 16 %48 = icmp samesign ult i64 %47, %2 - %indvars.iv.next = add nsw i64 %indvars.iv, -16 - br i1 %48, label %10, label %.loopexit, !llvm.loop !75 + br i1 %50, label %10, label %.loopexit, !llvm.loop !75 .loopexit: ; preds = %._crit_edge40, %5, %3 ret void @@ -8793,9 +8791,6 @@ declare void @llvm.assume(i1 noundef) #21 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #22 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #20 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.bswap.i64(i64) #20 diff --git a/bench/wireshark/optimized/packet-tls-utils.ll b/bench/wireshark/optimized/packet-tls-utils.ll index d610656aa5f..4d52959bcda 100644 --- a/bench/wireshark/optimized/packet-tls-utils.ll +++ b/bench/wireshark/optimized/packet-tls-utils.ll @@ -4389,24 +4389,20 @@ define hidden void @ssl_print_data(ptr noundef %0, ptr noundef readonly captures .lr.ph47: ; preds = %5 %8 = load ptr, ptr @g_ascii_table, align 8 - %9 = add i64 %2, -1 br label %10 10: ; preds = %.lr.ph47, %._crit_edge44 - %indvars.iv = phi i64 [ %9, %.lr.ph47 ], [ %indvars.iv.next, %._crit_edge44 ] - %.045 = phi i64 [ 0, %.lr.ph47 ], [ %50, %._crit_edge44 ] - %umin = tail call i64 @llvm.umin.i64(i64 %indvars.iv, i64 15) - %11 = add nuw nsw i64 %umin, 1 - %12 = load ptr, ptr @ssl_debug_file, align 8 - %13 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %12, i32 noundef 2, ptr noundef nonnull @.str.704) - br label %14 + %indvars.iv = phi i64 [ 0, %.lr.ph47 ], [ %52, %._crit_edge44 ] + %10 = load ptr, ptr @ssl_debug_file, align 8 + %umin = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %10, i32 noundef 2, ptr noundef nonnull @.str.704) + br label %12 .preheader34: ; preds = %14 br i1 %22, label %.lr.ph, label %.lr.ph41.preheader 14: ; preds = %10, %14 - %.02936 = phi i64 [ 0, %10 ], [ %21, %14 ] - %.03035 = phi i64 [ %.045, %10 ], [ %20, %14 ] + %.02936 = phi i64 [ 0, %9 ], [ %21, %12 ] + %.03035 = phi i64 [ %.045, %9 ], [ %20, %12 ] %15 = load ptr, ptr @ssl_debug_file, align 8 %16 = getelementptr i8, ptr %1, i64 %.03035 %17 = load i8, ptr %16, align 1 @@ -4433,8 +4429,8 @@ define hidden void @ssl_print_data(ptr noundef %0, ptr noundef readonly captures br label %.lr.ph41 .preheader: ; preds = %.lr.ph41 - %.not51 = icmp ugt i64 %indvars.iv, 14 - br i1 %.not51, label %._crit_edge44, label %.lr.ph43 + %.not51 = icmp samesign ult i64 %.239, 15 + br i1 %.not51, label %.lr.ph43, label %._crit_edge44 .lr.ph41: ; preds = %.lr.ph41.preheader, %.lr.ph41 %.239 = phi i64 [ %44, %.lr.ph41 ], [ 0, %.lr.ph41.preheader ] @@ -4451,14 +4447,16 @@ define hidden void @ssl_print_data(ptr noundef %0, ptr noundef readonly captures %39 = zext i8 %32 to i32 %40 = select i1 %or.cond, i32 46, i32 %39 %41 = load ptr, ptr @ssl_debug_file, align 8 - %42 = tail call i32 @fputc(i32 noundef %40, ptr noundef %41) + %42 = tail call i32 @fputc(i32 noundef %310, ptr noundef %41) %43 = add nuw i64 %.13138, 1 %44 = add nuw nsw i64 %.239, 1 - %exitcond.not = icmp eq i64 %.239, %umin - br i1 %exitcond.not, label %.preheader, label %.lr.ph41, !llvm.loop !66 + %exitcond.not = icmp samesign ult i64 %.239, 15 + %45 = icmp ult i64 %42, %2 + %46 = select i1 %44, i1 %45, i1 false + br i1 %46, label %.lr.ph41, label %.preheader, !llvm.loop !66 .lr.ph43: ; preds = %.preheader, %.lr.ph43 - %.342 = phi i64 [ %47, %.lr.ph43 ], [ %11, %.preheader ] + %.342 = phi i64 [ %47, %.lr.ph43 ], [ %43, %.preheader ] %45 = load ptr, ptr @ssl_debug_file, align 8 %46 = tail call i32 @fputc(i32 noundef 32, ptr noundef %45) %47 = add nuw nsw i64 %.342, 1 @@ -4470,8 +4468,7 @@ define hidden void @ssl_print_data(ptr noundef %0, ptr noundef readonly captures %49 = tail call i32 (ptr, i32, ptr, ...) @__fprintf_chk(ptr noundef %48, i32 noundef 2, ptr noundef nonnull @.str.707) %50 = add i64 %.045, 16 %51 = icmp ult i64 %50, %2 - %indvars.iv.next = add i64 %indvars.iv, -16 - br i1 %51, label %10, label %.loopexit, !llvm.loop !68 + br i1 %53, label %10, label %.loopexit, !llvm.loop !68 .loopexit: ; preds = %._crit_edge44, %5, %3 ret void @@ -17533,9 +17530,6 @@ declare i32 @llvm.umax.i32(i32, i32) #26 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i8 @llvm.umax.i8(i8, i8) #26 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #26 - ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) declare void @llvm.assume(i1 noundef) #28 diff --git a/bench/wolfssl/optimized/chacha.ll b/bench/wolfssl/optimized/chacha.ll index dead73fcf41..8dfb3ea548e 100644 --- a/bench/wolfssl/optimized/chacha.ll +++ b/bench/wolfssl/optimized/chacha.ll @@ -255,14 +255,10 @@ xorbufout.exit.i: ; preds = %.lr.ph52.i.i, %.loo br i1 %67, label %.lr.ph.i, label %._crit_edge.i .lr.ph.i: ; preds = %66 - %.0.i59 = ptrtoint ptr %.0.i to i64 %.037200.i = ptrtoint ptr %.037.i to i64 %68 = getelementptr inbounds nuw i8, ptr %0, i64 48 %69 = and i64 %.037200.i, 7 %.not145.i = icmp eq i64 %69, 0 - %70 = and i64 %.0.i59, 7 - %71 = xor i64 %70, 7 - %scevgep = getelementptr i8, ptr %5, i64 %71 br label %72 72: ; preds = %xorbufout.exit78.i, %.lr.ph.i @@ -296,8 +292,10 @@ xorbufout.exit.i: ; preds = %.lr.ph52.i.i, %.loo %84 = getelementptr inbounds nuw i8, ptr %.12944.i76.i, i64 1 store i8 %83, ptr %.12944.i76.i, align 1, !tbaa !9 %85 = add nsw i32 %.13243.i77.i, -1 - %exitcond = icmp eq ptr %.146.i74.i, %scevgep - br i1 %exitcond, label %._crit_edge.i57.i, label %.lr.ph.i73.i, !llvm.loop !10 + %84 = ptrtoint ptr %77 to i64 + %85 = and i64 %84, 7 + %.not201.i = icmp eq i64 %85, 0 + br i1 %.not201.i, label %._crit_edge.i57.i, label %.lr.ph.i73.i, !llvm.loop !10 ._crit_edge.i57.i: ; preds = %.lr.ph.i73.i %86 = lshr i32 %85, 3 @@ -338,10 +336,10 @@ xorbufout.exit.i: ; preds = %.lr.ph52.i.i, %.loo br i1 %.not.i49.i, label %xorbufout.exit78.i, label %.lr.ph52.preheader.i50.i .lr.ph52.preheader.i50.i: ; preds = %.loopexit146.i, %72 - %.0.i48132.i = phi ptr [ %.sroa.0.1.i72.i, %.loopexit146.i ], [ %5, %72 ] - %.026.i47131.i = phi ptr [ %.sroa.037.1.i71.i, %.loopexit146.i ], [ %.1172.i, %72 ] - %.028.i46130.i = phi ptr [ %.sroa.039.1.i70.i, %.loopexit146.i ], [ %.138168.i, %72 ] - %.031.i45129.i = phi i32 [ %95, %.loopexit146.i ], [ 64, %72 ] + %.0.i48132.i = phi ptr [ %.sroa.0.1.i72.i, %.loopexit146.i ], [ %5, %70 ] + %.026.i47131.i = phi ptr [ %.sroa.037.1.i71.i, %.loopexit146.i ], [ %.1172.i, %70 ] + %.028.i46130.i = phi ptr [ %.sroa.039.1.i70.i, %.loopexit146.i ], [ %.138168.i, %70 ] + %.031.i45129.i = phi i32 [ %95, %.loopexit146.i ], [ 64, %70 ] %wide.trip.count.i51.i = zext nneg i32 %.031.i45129.i to i64 br label %.lr.ph52.i52.i diff --git a/scripts/setup_pre_commit_patch.sh b/scripts/setup_pre_commit_patch.sh index c5409e09ef4..5a256528666 100755 --- a/scripts/setup_pre_commit_patch.sh +++ b/scripts/setup_pre_commit_patch.sh @@ -2,7 +2,7 @@ set -euo pipefail shopt -s inherit_errexit -export GITHUB_PATCH_ID="/llvm-project/commit/" +export GITHUB_PATCH_ID=llvm/llvm-project/pull/125828 export COMPTIME_MODE=0 # Please rebase manually