diff --git a/bench/abc/optimized/abc.ll b/bench/abc/optimized/abc.ll index 83d2e768a3d..791198018d3 100644 --- a/bench/abc/optimized/abc.ll +++ b/bench/abc/optimized/abc.ll @@ -94332,26 +94332,22 @@ define internal fastcc i64 @Abc_Tt6Stretch(i64 noundef %0, i32 noundef %1) unnam %8 = select i1 %3, i64 %5, i64 %7 %9 = mul nuw nsw i64 %8, 5 %.126 = select i1 %6, i64 %9, i64 %0 - %.1 = tail call i32 @llvm.umax.i32(i32 %1, i32 2) %10 = icmp ult i32 %1, 3 %11 = and i64 %.126, 15 %12 = mul nuw nsw i64 %11, 17 %.227 = select i1 %10, i64 %12, i64 %0 - %.2 = select i1 %10, i32 3, i32 %.1 - %13 = icmp eq i32 %.2, 3 + %13 = icmp ult i32 %1, 4 %14 = and i64 %.227, 255 %15 = mul nuw nsw i64 %14, 257 - %.328 = select i1 %13, i64 %15, i64 %.227 - %.3 = select i1 %13, i32 4, i32 %.2 - %16 = icmp eq i32 %.3, 4 + %.328 = select i1 %13, i64 %15, i64 %0 + %16 = icmp ult i32 %1, 5 %17 = and i64 %.328, 65535 %18 = mul nuw nsw i64 %17, 65537 - %.429 = select i1 %16, i64 %18, i64 %.328 - %19 = and i32 %.3, -2 - %20 = icmp eq i32 %19, 4 - %21 = and i64 %.429, 4294967295 - %22 = mul nuw i64 %21, 4294967297 - %.5 = select i1 %20, i64 %22, i64 %.429 + %.429 = select i1 %16, i64 %18, i64 %0 + %19 = icmp ult i32 %1, 6 + %20 = and i64 %.429, 4294967295 + %21 = mul nuw i64 %20, 4294967297 + %.5 = select i1 %19, i64 %21, i64 %0 ret i64 %.5 } @@ -94773,26 +94769,22 @@ Abc_TtReadHexDigit.exit: ; preds = %46, %50, %52 %68 = and i64 %66, 3 %69 = mul nuw nsw i64 %68, 5 %.126.i = select i1 %67, i64 %69, i64 %66 - %.1.i = tail call i32 @llvm.umax.i32(i32 %38, i32 2) %70 = icmp ult i32 %38, 3 %71 = and i64 %.126.i, 15 %72 = mul nuw nsw i64 %71, 17 %.227.i = select i1 %70, i64 %72, i64 %66 - %.2.i = select i1 %70, i32 3, i32 %.1.i - %73 = icmp eq i32 %.2.i, 3 + %73 = icmp ult i32 %38, 4 %74 = and i64 %.227.i, 255 %75 = mul nuw nsw i64 %74, 257 - %.328.i = select i1 %73, i64 %75, i64 %.227.i - %.3.i = select i1 %73, i32 4, i32 %.2.i - %76 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %73, i64 %75, i64 %66 + %76 = icmp ult i32 %38, 5 %77 = and i64 %.328.i, 65535 %78 = mul nuw nsw i64 %77, 65537 - %.429.i = select i1 %76, i64 %78, i64 %.328.i - %79 = and i32 %.3.i, -2 - %80 = icmp eq i32 %79, 4 - %81 = and i64 %.429.i, 4294967295 - %82 = mul nuw i64 %81, 4294967297 - %.5.i = select i1 %80, i64 %82, i64 %.429.i + %.429.i = select i1 %76, i64 %78, i64 %66 + %79 = icmp ult i32 %38, 6 + %80 = and i64 %.429.i, 4294967295 + %81 = mul nuw i64 %80, 4294967297 + %.5.i = select i1 %79, i64 %81, i64 %66 br label %.sink.split .sink.split: ; preds = %22, %25, %65 diff --git a/bench/abc/optimized/bmcMaj2.ll b/bench/abc/optimized/bmcMaj2.ll index 8409f5d032e..d91a4b9c2e0 100644 --- a/bench/abc/optimized/bmcMaj2.ll +++ b/bench/abc/optimized/bmcMaj2.ll @@ -3847,13 +3847,13 @@ define internal fastcc void @Abc_TtReadHex(ptr noundef nonnull captures(none) %0 ._crit_edge: ; preds = %.lr.ph %indvars = trunc i64 %indvars.iv.next to i32 - switch i32 %indvars, label %.thread70 [ + switch i32 %indvars, label %.thread69 [ i32 1, label %21 i32 0, label %.lr.ph52.preheader ] 21: ; preds = %._crit_edge - switch i8 %10, label %.lr.ph52.preheader [ + switch i8 %10, label %.lr.ph51.preheader [ i8 48, label %22 i8 70, label %22 i8 53, label %25 @@ -3885,17 +3885,17 @@ define internal fastcc void @Abc_TtReadHex(ptr noundef nonnull captures(none) %0 br i1 %.not83, label %.preheader, label %.lr.ph52.preheader .lr.ph52.preheader: ; preds = %._crit_edge, %9, %.thread70, %21, %.thread - %34 = phi i32 [ %33, %.thread ], [ 1, %21 ], [ 1, %.thread70 ], [ 1, %9 ], [ 1, %._crit_edge ] - %35 = phi i32 [ %30, %.thread ], [ 2, %21 ], [ %30, %.thread70 ], [ 2, %9 ], [ 2, %._crit_edge ] - %.0.lcssa6977 = phi i32 [ %indvars, %.thread ], [ 1, %21 ], [ %indvars, %.thread70 ], [ 0, %9 ], [ %indvars, %._crit_edge ] + %34 = phi i32 [ %33, %.thread ], [ 1, %21 ], [ 1, %.thread69 ], [ 1, %9 ], [ 1, %._crit_edge ] + %35 = phi i32 [ %30, %.thread ], [ 2, %21 ], [ %30, %.thread69 ], [ 2, %9 ], [ 2, %._crit_edge ] + %.0.lcssa6977 = phi i32 [ %indvars, %.thread ], [ 1, %21 ], [ %indvars, %.thread69 ], [ 0, %9 ], [ %indvars, %._crit_edge ] %36 = zext nneg i32 %34 to i64 %37 = shl nuw nsw i64 %36, 3 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %0, i8 0, i64 %37, i1 false), !tbaa !58 br label %.preheader .preheader: ; preds = %.lr.ph52.preheader, %.thread - %38 = phi i32 [ %35, %.lr.ph52.preheader ], [ %30, %.thread ] - %.0.lcssa6976 = phi i32 [ %.0.lcssa6977, %.lr.ph52.preheader ], [ %indvars, %.thread ] + %38 = phi i32 [ %35, %.lr.ph51.preheader ], [ %30, %.thread ] + %.0.lcssa6976 = phi i32 [ %.0.lcssa6977, %.lr.ph51.preheader ], [ %indvars, %.thread ] %.not = icmp eq i32 %.0.lcssa6976, 0 br i1 %.not, label %._crit_edge55, label %.lr.ph54.preheader @@ -3906,7 +3906,7 @@ define internal fastcc void @Abc_TtReadHex(ptr noundef nonnull captures(none) %0 br label %.lr.ph54 .lr.ph54: ; preds = %.lr.ph54.preheader, %Abc_TtReadHexDigit.exit - %indvars.iv63 = phi i64 [ 0, %.lr.ph54.preheader ], [ %indvars.iv.next64, %Abc_TtReadHexDigit.exit ] + %indvars.iv63 = phi i64 [ 0, %.lr.ph53.preheader ], [ %indvars.iv.next64, %Abc_TtReadHexDigit.exit ] %41 = xor i64 %indvars.iv63, -1 %42 = getelementptr i8, ptr %40, i64 %41 %43 = load i8, ptr %42, align 1, !tbaa !155 @@ -3957,31 +3957,26 @@ Abc_TtReadHexDigit.exit: ; preds = %46, %50, %52 65: ; preds = %._crit_edge55 %66 = load i64, ptr %0, align 8, !tbaa !58 - %.0.i43 = tail call i32 @llvm.umax.i32(i32 range(i32 -2147483648, 6) %38, i32 1) %67 = icmp ult i32 %38, 2 %68 = and i64 %66, 3 %69 = mul nuw nsw i64 %68, 5 %.126.i = select i1 %67, i64 %69, i64 %66 - %.1.i = select i1 %67, i32 2, i32 %.0.i43 - %70 = icmp eq i32 %.1.i, 2 + %70 = icmp ult i32 %38, 3 %71 = and i64 %.126.i, 15 %72 = mul nuw nsw i64 %71, 17 - %.227.i = select i1 %70, i64 %72, i64 %.126.i - %.2.i = select i1 %70, i32 3, i32 %.1.i - %73 = icmp eq i32 %.2.i, 3 + %.227.i = select i1 %70, i64 %72, i64 %66 + %73 = icmp ult i32 %38, 4 %74 = and i64 %.227.i, 255 %75 = mul nuw nsw i64 %74, 257 - %.328.i = select i1 %73, i64 %75, i64 %.227.i - %.3.i = select i1 %73, i32 4, i32 %.2.i - %76 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %73, i64 %75, i64 %66 + %76 = icmp ult i32 %38, 5 %77 = and i64 %.328.i, 65535 %78 = mul nuw nsw i64 %77, 65537 - %.429.i = select i1 %76, i64 %78, i64 %.328.i - %79 = and i32 %.3.i, -2 - %80 = icmp eq i32 %79, 4 - %81 = and i64 %.429.i, 4294967295 - %82 = mul nuw i64 %81, 4294967297 - %.5.i = select i1 %80, i64 %82, i64 %.429.i + %.429.i = select i1 %76, i64 %78, i64 %66 + %79 = icmp ult i32 %38, 6 + %80 = and i64 %.429.i, 4294967295 + %81 = mul nuw i64 %80, 4294967297 + %.5.i = select i1 %79, i64 %81, i64 %66 br label %.sink.split .sink.split: ; preds = %22, %25, %65 @@ -6542,9 +6537,6 @@ declare i32 @llvm.smax.i32(i32, i32) #17 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.ctlz.i32(i32, i1 immarg) #17 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #17 - attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #2 = { nofree nounwind "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/abc/optimized/bmcMaj3.ll b/bench/abc/optimized/bmcMaj3.ll index a89a3e86661..a13d58b4c7a 100644 --- a/bench/abc/optimized/bmcMaj3.ll +++ b/bench/abc/optimized/bmcMaj3.ll @@ -6469,13 +6469,13 @@ define internal fastcc void @Abc_TtReadHex(ptr noundef captures(none) %0, ptr no ._crit_edge: ; preds = %.lr.ph %indvars = trunc i64 %indvars.iv.next to i32 - switch i32 %indvars, label %.thread70 [ + switch i32 %indvars, label %.thread69 [ i32 1, label %21 i32 0, label %.lr.ph52.preheader ] 21: ; preds = %._crit_edge - switch i8 %10, label %.lr.ph52.preheader [ + switch i8 %10, label %.lr.ph51.preheader [ i8 48, label %22 i8 70, label %22 i8 53, label %25 @@ -6507,17 +6507,17 @@ define internal fastcc void @Abc_TtReadHex(ptr noundef captures(none) %0, ptr no br i1 %.not83, label %.preheader, label %.lr.ph52.preheader .lr.ph52.preheader: ; preds = %._crit_edge, %9, %.thread70, %21, %.thread - %34 = phi i32 [ %33, %.thread ], [ 1, %21 ], [ 1, %.thread70 ], [ 1, %9 ], [ 1, %._crit_edge ] - %35 = phi i32 [ %30, %.thread ], [ 2, %21 ], [ %30, %.thread70 ], [ 2, %9 ], [ 2, %._crit_edge ] - %.0.lcssa6977 = phi i32 [ %indvars, %.thread ], [ 1, %21 ], [ %indvars, %.thread70 ], [ 0, %9 ], [ %indvars, %._crit_edge ] + %34 = phi i32 [ %33, %.thread ], [ 1, %21 ], [ 1, %.thread69 ], [ 1, %9 ], [ 1, %._crit_edge ] + %35 = phi i32 [ %30, %.thread ], [ 2, %21 ], [ %30, %.thread69 ], [ 2, %9 ], [ 2, %._crit_edge ] + %.0.lcssa6977 = phi i32 [ %indvars, %.thread ], [ 1, %21 ], [ %indvars, %.thread69 ], [ 0, %9 ], [ %indvars, %._crit_edge ] %36 = zext nneg i32 %34 to i64 %37 = shl nuw nsw i64 %36, 3 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %0, i8 0, i64 %37, i1 false), !tbaa !19 br label %.preheader .preheader: ; preds = %.lr.ph52.preheader, %.thread - %38 = phi i32 [ %35, %.lr.ph52.preheader ], [ %30, %.thread ] - %.0.lcssa6976 = phi i32 [ %.0.lcssa6977, %.lr.ph52.preheader ], [ %indvars, %.thread ] + %38 = phi i32 [ %35, %.lr.ph51.preheader ], [ %30, %.thread ] + %.0.lcssa6976 = phi i32 [ %.0.lcssa6977, %.lr.ph51.preheader ], [ %indvars, %.thread ] %.not = icmp eq i32 %.0.lcssa6976, 0 br i1 %.not, label %._crit_edge55, label %.lr.ph54.preheader @@ -6528,7 +6528,7 @@ define internal fastcc void @Abc_TtReadHex(ptr noundef captures(none) %0, ptr no br label %.lr.ph54 .lr.ph54: ; preds = %.lr.ph54.preheader, %Abc_TtReadHexDigit.exit - %indvars.iv63 = phi i64 [ 0, %.lr.ph54.preheader ], [ %indvars.iv.next64, %Abc_TtReadHexDigit.exit ] + %indvars.iv63 = phi i64 [ 0, %.lr.ph53.preheader ], [ %indvars.iv.next64, %Abc_TtReadHexDigit.exit ] %41 = xor i64 %indvars.iv63, -1 %42 = getelementptr i8, ptr %40, i64 %41 %43 = load i8, ptr %42, align 1, !tbaa !185 @@ -6579,31 +6579,26 @@ Abc_TtReadHexDigit.exit: ; preds = %46, %50, %52 65: ; preds = %._crit_edge55 %66 = load i64, ptr %0, align 8, !tbaa !19 - %.0.i43 = tail call i32 @llvm.umax.i32(i32 range(i32 -2147483648, 6) %38, i32 1) %67 = icmp ult i32 %38, 2 %68 = and i64 %66, 3 %69 = mul nuw nsw i64 %68, 5 %.126.i = select i1 %67, i64 %69, i64 %66 - %.1.i = select i1 %67, i32 2, i32 %.0.i43 - %70 = icmp eq i32 %.1.i, 2 + %70 = icmp ult i32 %38, 3 %71 = and i64 %.126.i, 15 %72 = mul nuw nsw i64 %71, 17 - %.227.i = select i1 %70, i64 %72, i64 %.126.i - %.2.i = select i1 %70, i32 3, i32 %.1.i - %73 = icmp eq i32 %.2.i, 3 + %.227.i = select i1 %70, i64 %72, i64 %66 + %73 = icmp ult i32 %38, 4 %74 = and i64 %.227.i, 255 %75 = mul nuw nsw i64 %74, 257 - %.328.i = select i1 %73, i64 %75, i64 %.227.i - %.3.i = select i1 %73, i32 4, i32 %.2.i - %76 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %73, i64 %75, i64 %66 + %76 = icmp ult i32 %38, 5 %77 = and i64 %.328.i, 65535 %78 = mul nuw nsw i64 %77, 65537 - %.429.i = select i1 %76, i64 %78, i64 %.328.i - %79 = and i32 %.3.i, -2 - %80 = icmp eq i32 %79, 4 - %81 = and i64 %.429.i, 4294967295 - %82 = mul nuw i64 %81, 4294967297 - %.5.i = select i1 %80, i64 %82, i64 %.429.i + %.429.i = select i1 %76, i64 %78, i64 %66 + %79 = icmp ult i32 %38, 6 + %80 = and i64 %.429.i, 4294967295 + %81 = mul nuw i64 %80, 4294967297 + %.5.i = select i1 %79, i64 %81, i64 %66 br label %.sink.split .sink.split: ; preds = %22, %25, %65 diff --git a/bench/abc/optimized/cbaBlast.ll b/bench/abc/optimized/cbaBlast.ll index 90f07b677c7..6b0d4ab17a5 100644 --- a/bench/abc/optimized/cbaBlast.ll +++ b/bench/abc/optimized/cbaBlast.ll @@ -3166,14 +3166,10 @@ define void @Cba_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) %22 = icmp slt i32 %3, 6 %23 = icmp eq i32 %3, 0 %24 = icmp ult i32 %3, 2 - %.1.i = tail call i32 @llvm.umax.i32(i32 %3, i32 2) %25 = icmp ult i32 %3, 3 - %.2.i = select i1 %25, i32 3, i32 %.1.i - %26 = icmp eq i32 %.2.i, 3 - %.3.i = select i1 %26, i32 4, i32 %.2.i - %27 = icmp eq i32 %.3.i, 4 - %28 = and i32 %.3.i, -2 - %29 = icmp eq i32 %28, 4 + %26 = icmp ult i32 %3, 4 + %26 = icmp ult i32 %3, 5 + %28 = icmp ult i32 %3, 6 %.phi.trans.insert.i = getelementptr inbounds nuw i8, ptr %5, i64 8 %smax = tail call i32 @llvm.smax.i32(i32 %20, i32 1) br label %30 @@ -3187,7 +3183,7 @@ define void @Cba_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) br i1 %21, label %.preheader.us, label %._crit_edge42.thread .preheader.us: ; preds = %.preheader.lr.ph, %._crit_edge.us - %.03541.us = phi i32 [ %53, %._crit_edge.us ], [ 0, %.preheader.lr.ph ] + %.03541.us = phi i32 [ %52, %._crit_edge.us ], [ 0, %.preheader.lr.ph ] %31 = mul nuw nsw i32 %.03541.us, %3 %32 = and i32 %.03541.us, 63 %33 = zext nneg i32 %32 to i64 @@ -3195,36 +3191,36 @@ define void @Cba_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) %35 = lshr i32 %.03541.us, 6 %36 = zext nneg i32 %35 to i64 %37 = getelementptr inbounds nuw i64, ptr %17, i64 %36 - br label %38 + br label %37 + +37: ; preds = %.preheader.us, %50 + %.03640.us = phi i32 [ 0, %.preheader.us ], [ %51, %50 ] + %38 = add nuw nsw i32 %.03640.us, %30 + %39 = lshr i32 %38, 6 + %40 = zext nneg i32 %39 to i64 + %41 = getelementptr inbounds nuw i64, ptr %1, i64 %40 + %42 = load i64, ptr %41, align 8, !tbaa !75 + %43 = and i32 %38, 63 + %44 = zext nneg i32 %43 to i64 + %45 = shl nuw i64 1, %44 + %46 = and i64 %42, %45 + %.not39.us = icmp eq i64 %46, 0 + br i1 %.not39.us, label %50, label %47 + +47: ; preds = %37 + %48 = load i64, ptr %36, align 8, !tbaa !75 + %49 = or i64 %48, %33 + store i64 %49, ptr %36, align 8, !tbaa !75 + br label %50 -38: ; preds = %.preheader.us, %51 - %.03640.us = phi i32 [ 0, %.preheader.us ], [ %52, %51 ] - %39 = add nuw nsw i32 %.03640.us, %31 - %40 = lshr i32 %39, 6 - %41 = zext nneg i32 %40 to i64 - %42 = getelementptr inbounds nuw i64, ptr %1, i64 %41 - %43 = load i64, ptr %42, align 8, !tbaa !75 - %44 = and i32 %39, 63 - %45 = zext nneg i32 %44 to i64 - %46 = shl nuw i64 1, %45 - %47 = and i64 %43, %46 - %.not39.us = icmp eq i64 %47, 0 - br i1 %.not39.us, label %51, label %48 - -48: ; preds = %38 - %49 = load i64, ptr %37, align 8, !tbaa !75 - %50 = or i64 %49, %34 - store i64 %50, ptr %37, align 8, !tbaa !75 - br label %51 - -51: ; preds = %48, %38 - %52 = add nuw nsw i32 %.03640.us, 1 - %exitcond.not = icmp eq i32 %52, %3 - br i1 %exitcond.not, label %._crit_edge.us, label %38, !llvm.loop !77 - -._crit_edge.us: ; preds = %51 - %53 = add nuw nsw i32 %.03541.us, 1 - %exitcond46.not = icmp eq i32 %53, %smax +50: ; preds = %47, %37 + %51 = add nuw nsw i32 %.03640.us, 1 + %exitcond.not = icmp eq i32 %51, %3 + br i1 %exitcond.not, label %._crit_edge.us, label %37, !llvm.loop !77 + +38: ; preds = %50 + %52 = add nuw nsw i32 %.03541.us, 1 + %exitcond46.not = icmp eq i32 %52, %smax br i1 %exitcond46.not, label %._crit_edge42, label %.preheader.us, !llvm.loop !78 ._crit_edge42: ; preds = %._crit_edge.us @@ -3243,13 +3239,13 @@ define void @Cba_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) %.227.i = select i1 %25, i64 %61, i64 %54 %62 = and i64 %.227.i, 255 %63 = mul nuw nsw i64 %62, 257 - %.328.i = select i1 %26, i64 %63, i64 %.227.i + %.328.i = select i1 %26, i64 %63, i64 %53 %64 = and i64 %.328.i, 65535 %65 = mul nuw nsw i64 %64, 65537 - %.429.i = select i1 %27, i64 %65, i64 %.328.i + %.429.i = select i1 %27, i64 %65, i64 %53 %66 = and i64 %.429.i, 4294967295 %67 = mul nuw i64 %66, 4294967297 - %.5.i = select i1 %29, i64 %67, i64 %.429.i + %.5.i = select i1 %28, i64 %67, i64 %54 store i64 %.5.i, ptr %17, align 8, !tbaa !75 br label %._crit_edge42.thread48 @@ -3282,7 +3278,7 @@ define void @Cba_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) br label %Vec_IntGrow.exit.i Vec_IntGrow.exit.i: ; preds = %78, %76 - %80 = phi ptr [ %77, %76 ], [ %79, %78 ] + %80 = phi ptr [ %77, %75 ], [ %79, %77 ] store ptr %80, ptr %.phi.trans.insert.i, align 8, !tbaa !10 store i32 16, ptr %5, align 8, !tbaa !3 br label %Vec_IntPush.exit @@ -3304,13 +3300,13 @@ Vec_IntGrow.exit.i: ; preds = %78, %76 br label %90 90: ; preds = %88, %86 - %91 = phi ptr [ %87, %86 ], [ %89, %88 ] + %91 = phi ptr [ %87, %85 ], [ %89, %87 ] store ptr %91, ptr %.phi.trans.insert.i, align 8, !tbaa !10 store i32 %82, ptr %5, align 8, !tbaa !3 br label %Vec_IntPush.exit Vec_IntPush.exit: ; preds = %.Vec_IntGrow.exit10_crit_edge.i, %Vec_IntGrow.exit.i, %90 - %92 = phi ptr [ %.pre.i, %.Vec_IntGrow.exit10_crit_edge.i ], [ %91, %90 ], [ %80, %Vec_IntGrow.exit.i ] + %92 = phi ptr [ %.pre.i, %.Vec_IntGrow.exit10_crit_edge.i ], [ %91, %89 ], [ %80, %Vec_IntGrow.exit.i ] %93 = load i32, ptr %18, align 4, !tbaa !12 %94 = add nsw i32 %93, 1 store i32 %94, ptr %18, align 4, !tbaa !12 @@ -9204,9 +9200,6 @@ declare void @llvm.assume(i1 noundef) #17 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.abs.i32(i32, i1 immarg) #15 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #15 - ; Function Attrs: nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #18 diff --git a/bench/abc/optimized/dauDsd.ll b/bench/abc/optimized/dauDsd.ll index 902a025ddcc..253c44a8c8e 100644 --- a/bench/abc/optimized/dauDsd.ll +++ b/bench/abc/optimized/dauDsd.ll @@ -1512,13 +1512,13 @@ define internal fastcc range(i32 -2147483646, -2147483648) i32 @Abc_TtReadHex(pt ._crit_edge: ; preds = %.lr.ph %indvars = trunc i64 %indvars.iv.next to i32 - switch i32 %indvars, label %.thread70 [ + switch i32 %indvars, label %.thread69 [ i32 1, label %21 i32 0, label %.lr.ph52.preheader ] 21: ; preds = %._crit_edge - switch i8 %10, label %.lr.ph52.preheader [ + switch i8 %10, label %.lr.ph51.preheader [ i8 48, label %22 i8 70, label %22 i8 53, label %25 @@ -1551,17 +1551,17 @@ define internal fastcc range(i32 -2147483646, -2147483648) i32 @Abc_TtReadHex(pt br i1 %.not83, label %.preheader, label %.lr.ph52.preheader .lr.ph52.preheader: ; preds = %._crit_edge, %9, %.thread70, %21, %.thread - %35 = phi i32 [ %34, %.thread ], [ 1, %21 ], [ 1, %.thread70 ], [ 1, %9 ], [ 1, %._crit_edge ] - %36 = phi i32 [ %31, %.thread ], [ 2, %21 ], [ %31, %.thread70 ], [ 2, %9 ], [ 2, %._crit_edge ] - %.0.lcssa6977 = phi i32 [ %indvars, %.thread ], [ 1, %21 ], [ %indvars, %.thread70 ], [ 0, %9 ], [ %indvars, %._crit_edge ] + %35 = phi i32 [ %34, %.thread ], [ 1, %21 ], [ 1, %.thread69 ], [ 1, %9 ], [ 1, %._crit_edge ] + %36 = phi i32 [ %31, %.thread ], [ 2, %21 ], [ %31, %.thread69 ], [ 2, %9 ], [ 2, %._crit_edge ] + %.0.lcssa6977 = phi i32 [ %indvars, %.thread ], [ 1, %21 ], [ %indvars, %.thread69 ], [ 0, %9 ], [ %indvars, %._crit_edge ] %37 = zext nneg i32 %35 to i64 %38 = shl nuw nsw i64 %37, 3 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %0, i8 0, i64 %38, i1 false), !tbaa !29 br label %.preheader .preheader: ; preds = %.lr.ph52.preheader, %.thread - %39 = phi i32 [ %36, %.lr.ph52.preheader ], [ %31, %.thread ] - %.0.lcssa6976 = phi i32 [ %.0.lcssa6977, %.lr.ph52.preheader ], [ %indvars, %.thread ] + %39 = phi i32 [ %36, %.lr.ph51.preheader ], [ %31, %.thread ] + %.0.lcssa6976 = phi i32 [ %.0.lcssa6977, %.lr.ph51.preheader ], [ %indvars, %.thread ] %.not = icmp eq i32 %.0.lcssa6976, 0 br i1 %.not, label %._crit_edge55, label %.lr.ph54.preheader @@ -1572,7 +1572,7 @@ define internal fastcc range(i32 -2147483646, -2147483648) i32 @Abc_TtReadHex(pt br label %.lr.ph54 .lr.ph54: ; preds = %.lr.ph54.preheader, %Abc_TtReadHexDigit.exit - %indvars.iv63 = phi i64 [ 0, %.lr.ph54.preheader ], [ %indvars.iv.next64, %Abc_TtReadHexDigit.exit ] + %indvars.iv63 = phi i64 [ 0, %.lr.ph53.preheader ], [ %indvars.iv.next64, %Abc_TtReadHexDigit.exit ] %42 = xor i64 %indvars.iv63, -1 %43 = getelementptr i8, ptr %41, i64 %42 %44 = load i8, ptr %43, align 1, !tbaa !3 @@ -1623,31 +1623,26 @@ Abc_TtReadHexDigit.exit: ; preds = %47, %51, %53 66: ; preds = %._crit_edge55 %67 = load i64, ptr %0, align 8, !tbaa !29 - %.0.i43 = tail call i32 @llvm.umax.i32(i32 range(i32 -2147483648, 6) %39, i32 1) %68 = icmp ult i32 %39, 2 %69 = and i64 %67, 3 %70 = mul nuw nsw i64 %69, 5 %.126.i = select i1 %68, i64 %70, i64 %67 - %.1.i = select i1 %68, i32 2, i32 %.0.i43 - %71 = icmp eq i32 %.1.i, 2 + %71 = icmp ult i32 %39, 3 %72 = and i64 %.126.i, 15 %73 = mul nuw nsw i64 %72, 17 - %.227.i = select i1 %71, i64 %73, i64 %.126.i - %.2.i = select i1 %71, i32 3, i32 %.1.i - %74 = icmp eq i32 %.2.i, 3 + %.227.i = select i1 %71, i64 %73, i64 %67 + %74 = icmp ult i32 %39, 4 %75 = and i64 %.227.i, 255 %76 = mul nuw nsw i64 %75, 257 - %.328.i = select i1 %74, i64 %76, i64 %.227.i - %.3.i = select i1 %74, i32 4, i32 %.2.i - %77 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %74, i64 %76, i64 %67 + %77 = icmp ult i32 %39, 5 %78 = and i64 %.328.i, 65535 %79 = mul nuw nsw i64 %78, 65537 - %.429.i = select i1 %77, i64 %79, i64 %.328.i - %80 = and i32 %.3.i, -2 - %81 = icmp eq i32 %80, 4 - %82 = and i64 %.429.i, 4294967295 - %83 = mul nuw i64 %82, 4294967297 - %.5.i = select i1 %81, i64 %83, i64 %.429.i + %.429.i = select i1 %77, i64 %79, i64 %67 + %80 = icmp ult i32 %39, 6 + %81 = and i64 %.429.i, 4294967295 + %82 = mul nuw i64 %81, 4294967297 + %.5.i = select i1 %80, i64 %82, i64 %67 br label %.sink.split .sink.split: ; preds = %22, %25, %66 @@ -1657,7 +1652,7 @@ Abc_TtReadHexDigit.exit: ; preds = %47, %51, %53 br label %84 84: ; preds = %.sink.split, %._crit_edge55 - %.037 = phi i32 [ %39, %._crit_edge55 ], [ %.037.ph, %.sink.split ] + %.037 = phi i32 [ %39, %._crit_edge54 ], [ %.037.ph, %.sink.split ] ret i32 %.037 } @@ -14198,9 +14193,6 @@ declare noundef i32 @fputs(ptr noundef readonly captures(none), ptr noundef capt ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.ctlz.i32(i32, i1 immarg) #27 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #27 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #27 diff --git a/bench/abc/optimized/giaDecs.ll b/bench/abc/optimized/giaDecs.ll index e036fcb8f69..b5ab78080ff 100644 --- a/bench/abc/optimized/giaDecs.ll +++ b/bench/abc/optimized/giaDecs.ll @@ -447,19 +447,15 @@ Abc_TtCountOnesVecMask.exit.thread: ; preds = %._crit_edge, %Abc_T .lr.ph128: ; preds = %._crit_edge126 %163 = icmp eq i32 %.val73, 0 %164 = icmp ult i32 %.val73, 2 - %.1.i = tail call i32 @llvm.umax.i32(i32 %.val73, i32 2) %165 = icmp ult i32 %.val73, 3 - %.2.i = select i1 %165, i32 3, i32 %.1.i - %166 = icmp eq i32 %.2.i, 3 - %.3.i = select i1 %166, i32 4, i32 %.2.i - %167 = icmp eq i32 %.3.i, 4 - %168 = and i32 %.3.i, -2 - %169 = icmp eq i32 %168, 4 + %166 = icmp ult i32 %.val73, 4 + %166 = icmp ult i32 %.val73, 5 + %168 = icmp ult i32 %.val73, 6 %wide.trip.count146 = zext nneg i32 %18 to i64 br label %170 170: ; preds = %.lr.ph128, %170 - %indvars.iv143 = phi i64 [ 0, %.lr.ph128 ], [ %indvars.iv.next144, %170 ] + %indvars.iv143 = phi i64 [ 0, %.lr.ph128 ], [ %indvars.iv.next144, %169 ] %171 = getelementptr inbounds nuw i64, ptr %25, i64 %indvars.iv143 %172 = load i64, ptr %171, align 8, !tbaa !12 %173 = trunc i64 %172 to i1 @@ -473,13 +469,13 @@ Abc_TtCountOnesVecMask.exit.thread: ; preds = %._crit_edge, %Abc_T %.227.i = select i1 %165, i64 %179, i64 %172 %180 = and i64 %.227.i, 255 %181 = mul nuw nsw i64 %180, 257 - %.328.i = select i1 %166, i64 %181, i64 %.227.i + %.328.i = select i1 %166, i64 %181, i64 %171 %182 = and i64 %.328.i, 65535 %183 = mul nuw nsw i64 %182, 65537 - %.429.i = select i1 %167, i64 %183, i64 %.328.i + %.429.i = select i1 %167, i64 %183, i64 %172 %184 = and i64 %.429.i, 4294967295 %185 = mul nuw i64 %184, 4294967297 - %.5.i = select i1 %169, i64 %185, i64 %.429.i + %.5.i = select i1 %168, i64 %185, i64 %172 store i64 %.5.i, ptr %171, align 8, !tbaa !12 %indvars.iv.next144 = add nuw nsw i64 %indvars.iv143, 1 %exitcond147.not = icmp eq i64 %indvars.iv.next144, %wide.trip.count146 @@ -1750,9 +1746,6 @@ declare noundef i32 @putchar(i32 noundef) local_unnamed_addr #10 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #11 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #11 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smax.i32(i32, i32) #11 diff --git a/bench/abc/optimized/giaIf.ll b/bench/abc/optimized/giaIf.ll index 9c207965c89..1d4023b0e8e 100644 --- a/bench/abc/optimized/giaIf.ll +++ b/bench/abc/optimized/giaIf.ll @@ -17874,16 +17874,14 @@ Abc_TtShrink.exit: ; preds = %97, %Abc_TtCopy.exi %156 = and i64 %.227.i, 255 %157 = mul nuw nsw i64 %156, 257 %.328.i = select i1 %155, i64 %157, i64 %144 - %.3.i = call i32 @llvm.umax.i32(i32 %143, i32 4) %158 = icmp samesign ult i32 %143, 5 %159 = and i64 %.328.i, 65535 %160 = mul nuw nsw i64 %159, 65537 %.429.i = select i1 %158, i64 %160, i64 %144 - %161 = and i32 %.3.i, 30 - %162 = icmp eq i32 %161, 4 - %163 = and i64 %.429.i, 4294967295 - %164 = mul nuw i64 %163, 4294967297 - %.5.i = select i1 %162, i64 %164, i64 %.429.i + %161 = icmp samesign ult i32 %143, 6 + %162 = and i64 %.429.i, 4294967295 + %163 = mul nuw i64 %162, 4294967297 + %.5.i = select i1 %161, i64 %163, i64 %144 call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %6) #27 ret i64 %.5.i } diff --git a/bench/abc/optimized/giaMinLut.ll b/bench/abc/optimized/giaMinLut.ll index 96b923bed8b..b5700cc41ee 100644 --- a/bench/abc/optimized/giaMinLut.ll +++ b/bench/abc/optimized/giaMinLut.ll @@ -3566,26 +3566,22 @@ define noalias noundef ptr @Gia_ManCountFraction(ptr noundef readonly captures(n %88 = select i1 %83, i64 %85, i64 %87 %89 = mul nuw nsw i64 %88, 5 %.126.i = select i1 %86, i64 %89, i64 %82 - %.1.i = tail call i32 @llvm.umax.i32(i32 %.val78, i32 2) %90 = icmp ult i32 %.val78, 3 %91 = and i64 %.126.i, 15 %92 = mul nuw nsw i64 %91, 17 %.227.i = select i1 %90, i64 %92, i64 %82 - %.2.i = select i1 %90, i32 3, i32 %.1.i - %93 = icmp eq i32 %.2.i, 3 + %93 = icmp ult i32 %.val78, 4 %94 = and i64 %.227.i, 255 %95 = mul nuw nsw i64 %94, 257 - %.328.i = select i1 %93, i64 %95, i64 %.227.i - %.3.i = select i1 %93, i32 4, i32 %.2.i - %96 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %93, i64 %95, i64 %82 + %96 = icmp ult i32 %.val78, 5 %97 = and i64 %.328.i, 65535 %98 = mul nuw nsw i64 %97, 65537 - %.429.i = select i1 %96, i64 %98, i64 %.328.i - %99 = and i32 %.3.i, -2 - %100 = icmp eq i32 %99, 4 - %101 = and i64 %.429.i, 4294967295 - %102 = mul nuw i64 %101, 4294967297 - %.5.i = select i1 %100, i64 %102, i64 %.429.i + %.429.i = select i1 %96, i64 %98, i64 %82 + %99 = icmp ult i32 %.val78, 6 + %100 = and i64 %.429.i, 4294967295 + %101 = mul nuw i64 %100, 4294967297 + %.5.i = select i1 %99, i64 %101, i64 %82 store i64 %.5.i, ptr %21, align 8, !tbaa !62 br label %._crit_edge.thread @@ -6578,9 +6574,6 @@ declare noundef i32 @putchar(i32 noundef) local_unnamed_addr #21 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smax.i32(i32, i32) #22 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #22 - ; 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) #23 diff --git a/bench/abc/optimized/giaMuxes.ll b/bench/abc/optimized/giaMuxes.ll index 9556b87cd4a..8b466dca9c5 100644 --- a/bench/abc/optimized/giaMuxes.ll +++ b/bench/abc/optimized/giaMuxes.ll @@ -9445,26 +9445,22 @@ Abc_TtClear.exit: ; preds = %116, %.lr.ph.prehea %139 = select i1 %134, i64 %136, i64 %138 %140 = mul nuw nsw i64 %139, 5 %.126.i = select i1 %137, i64 %140, i64 %133 - %.1.i = tail call i32 @llvm.umax.i32(i32 %.val88.pre, i32 2) %141 = icmp ult i32 %.val88.pre, 3 %142 = and i64 %.126.i, 15 %143 = mul nuw nsw i64 %142, 17 %.227.i = select i1 %141, i64 %143, i64 %133 - %.2.i = select i1 %141, i32 3, i32 %.1.i - %144 = icmp eq i32 %.2.i, 3 + %144 = icmp ult i32 %.val88.pre, 4 %145 = and i64 %.227.i, 255 %146 = mul nuw nsw i64 %145, 257 - %.328.i = select i1 %144, i64 %146, i64 %.227.i - %.3.i = select i1 %144, i32 4, i32 %.2.i - %147 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %144, i64 %146, i64 %133 + %147 = icmp ult i32 %.val88.pre, 5 %148 = and i64 %.328.i, 65535 %149 = mul nuw nsw i64 %148, 65537 - %.429.i = select i1 %147, i64 %149, i64 %.328.i - %150 = and i32 %.3.i, -2 - %151 = icmp eq i32 %150, 4 - %152 = and i64 %.429.i, 4294967295 - %153 = mul nuw i64 %152, 4294967297 - %.5.i = select i1 %151, i64 %153, i64 %.429.i + %.429.i = select i1 %147, i64 %149, i64 %133 + %150 = icmp ult i32 %.val88.pre, 6 + %151 = and i64 %.429.i, 4294967295 + %152 = mul nuw i64 %151, 4294967297 + %.5.i = select i1 %150, i64 %152, i64 %133 store i64 %.5.i, ptr %45, align 8, !tbaa !149 br label %154 @@ -9497,7 +9493,7 @@ Abc_TtClear.exit: ; preds = %116, %.lr.ph.prehea br label %Vec_IntGrow.exit.i113 Vec_IntGrow.exit.i113: ; preds = %165, %163 - %167 = phi ptr [ %164, %163 ], [ %166, %165 ] + %167 = phi ptr [ %164, %162 ], [ %166, %164 ] store ptr %167, ptr %29, align 8, !tbaa !55 store i32 16, ptr %26, align 8, !tbaa !54 br label %Vec_IntPush.exit114 @@ -9519,13 +9515,13 @@ Vec_IntGrow.exit.i113: ; preds = %165, %163 br label %177 177: ; preds = %175, %173 - %178 = phi ptr [ %174, %173 ], [ %176, %175 ] + %178 = phi ptr [ %174, %172 ], [ %176, %174 ] store ptr %178, ptr %29, align 8, !tbaa !55 store i32 %169, ptr %26, align 8, !tbaa !54 br label %Vec_IntPush.exit114 Vec_IntPush.exit114: ; preds = %.Vec_IntGrow.exit10_crit_edge.i108, %Vec_IntGrow.exit.i113, %177 - %179 = phi ptr [ %.pre.i110, %.Vec_IntGrow.exit10_crit_edge.i108 ], [ %178, %177 ], [ %167, %Vec_IntGrow.exit.i113 ] + %179 = phi ptr [ %.pre.i110, %.Vec_IntGrow.exit10_crit_edge.i108 ], [ %178, %176 ], [ %167, %Vec_IntGrow.exit.i113 ] %180 = add nsw i32 %156, 1 store i32 %180, ptr %27, align 4, !tbaa !34 %181 = sext i32 %156 to i64 @@ -9559,7 +9555,7 @@ Vec_IntPush.exit114: ; preds = %.Vec_IntGrow.exit10 br label %192 192: ; preds = %196, %.lr.ph.i115 - %indvars.iv.i117 = phi i64 [ 0, %.lr.ph.i115 ], [ %indvars.iv.next.i118, %196 ] + %indvars.iv.i117 = phi i64 [ 0, %.lr.ph.i115 ], [ %indvars.iv.next.i118, %195 ] %193 = getelementptr inbounds nuw i32, ptr %191, i64 %indvars.iv.i117 %194 = load i32, ptr %193, align 4, !tbaa !3 %195 = icmp eq i32 %194, %.2152 @@ -9576,7 +9572,7 @@ Vec_IntPush.exit114: ; preds = %.Vec_IntGrow.exit10 br label %Vec_IntFind.exit Vec_IntFind.exit: ; preds = %196, %188, %._crit_edge.loopexit.split.loop.exit12.i - %.07.i = phi i64 [ -1, %188 ], [ %197, %._crit_edge.loopexit.split.loop.exit12.i ], [ -1, %196 ] + %.07.i = phi i64 [ -1, %187 ], [ %197, %._crit_edge.loopexit.split.loop.exit12.i ], [ -1, %195 ] %198 = getelementptr inbounds i32, ptr %.val103, i64 %.07.i store i32 1, ptr %198, align 4, !tbaa !3 %199 = add nuw i32 %.2152, 1 @@ -9599,13 +9595,13 @@ Vec_IntFind.exit: ; preds = %196, %188, %._crit_ br label %.critedge4.preheader .critedge4.preheader: ; preds = %.critedge4.preheader.loopexit, %200 - %.val87157 = phi i32 [ %.val87157.pre, %.critedge4.preheader.loopexit ], [ 0, %200 ] + %.val87157 = phi i32 [ %.val87157.pre, %.critedge4.preheader.loopexit ], [ 0, %199 ] %202 = icmp slt i32 %.val87157, %187 br i1 %202, label %.lr.ph159, label %.critedge4._crit_edge 203: ; preds = %.lr.ph156, %238 - %.val98179 = phi i32 [ %.val98154, %.lr.ph156 ], [ %.val98, %238 ] - %indvars.iv169 = phi i64 [ 0, %.lr.ph156 ], [ %indvars.iv.next170, %238 ] + %.val98179 = phi i32 [ %.val98154, %.lr.ph156 ], [ %.val98, %237 ] + %indvars.iv169 = phi i64 [ 0, %.lr.ph156 ], [ %indvars.iv.next170, %237 ] %204 = getelementptr inbounds nuw i32, ptr %.val95, i64 %indvars.iv169 %205 = load i32, ptr %204, align 4, !tbaa !3 %.not85 = icmp eq i32 %205, 0 @@ -9644,7 +9640,7 @@ Vec_IntFind.exit: ; preds = %196, %188, %._crit_ br label %Vec_IntGrow.exit.i125 Vec_IntGrow.exit.i125: ; preds = %219, %217 - %221 = phi ptr [ %218, %217 ], [ %220, %219 ] + %221 = phi ptr [ %218, %216 ], [ %220, %218 ] store ptr %221, ptr %37, align 8, !tbaa !55 store i32 16, ptr %30, align 8, !tbaa !54 br label %Vec_IntPush.exit126 @@ -9666,13 +9662,13 @@ Vec_IntGrow.exit.i125: ; preds = %219, %217 br label %231 231: ; preds = %229, %227 - %232 = phi ptr [ %228, %227 ], [ %230, %229 ] + %232 = phi ptr [ %228, %226 ], [ %230, %228 ] store ptr %232, ptr %37, align 8, !tbaa !55 store i32 %223, ptr %30, align 8, !tbaa !54 br label %Vec_IntPush.exit126 Vec_IntPush.exit126: ; preds = %.Vec_IntGrow.exit10_crit_edge.i120, %Vec_IntGrow.exit.i125, %231 - %233 = phi ptr [ %.pre.i122, %.Vec_IntGrow.exit10_crit_edge.i120 ], [ %232, %231 ], [ %221, %Vec_IntGrow.exit.i125 ] + %233 = phi ptr [ %.pre.i122, %.Vec_IntGrow.exit10_crit_edge.i120 ], [ %232, %230 ], [ %221, %Vec_IntGrow.exit.i125 ] %234 = load i32, ptr %31, align 4, !tbaa !34 %235 = add nsw i32 %234, 1 store i32 %235, ptr %31, align 4, !tbaa !34 @@ -9683,7 +9679,7 @@ Vec_IntPush.exit126: ; preds = %.Vec_IntGrow.exit10 br label %238 238: ; preds = %203, %Vec_IntPush.exit126 - %.val98 = phi i32 [ %.val98179, %203 ], [ %.val98.pre, %Vec_IntPush.exit126 ] + %.val98 = phi i32 [ %.val98179, %202 ], [ %.val98.pre, %Vec_IntPush.exit126 ] %indvars.iv.next170 = add nuw nsw i64 %indvars.iv169, 1 %239 = sext i32 %.val98 to i64 %240 = icmp slt i64 %indvars.iv.next170, %239 @@ -9717,7 +9713,7 @@ Vec_IntPush.exit126: ; preds = %.Vec_IntGrow.exit10 br label %Vec_IntGrow.exit.i132 Vec_IntGrow.exit.i132: ; preds = %249, %247 - %251 = phi ptr [ %248, %247 ], [ %250, %249 ] + %251 = phi ptr [ %248, %246 ], [ %250, %248 ] store ptr %251, ptr %37, align 8, !tbaa !55 store i32 16, ptr %30, align 8, !tbaa !54 br label %Vec_IntPush.exit133 @@ -9739,13 +9735,13 @@ Vec_IntGrow.exit.i132: ; preds = %249, %247 br label %261 261: ; preds = %259, %257 - %262 = phi ptr [ %258, %257 ], [ %260, %259 ] + %262 = phi ptr [ %258, %256 ], [ %260, %258 ] store ptr %262, ptr %37, align 8, !tbaa !55 store i32 %253, ptr %30, align 8, !tbaa !54 br label %Vec_IntPush.exit133 Vec_IntPush.exit133: ; preds = %.Vec_IntGrow.exit10_crit_edge.i127, %Vec_IntGrow.exit.i132, %261 - %263 = phi ptr [ %.pre.i129, %.Vec_IntGrow.exit10_crit_edge.i127 ], [ %262, %261 ], [ %251, %Vec_IntGrow.exit.i132 ] + %263 = phi ptr [ %.pre.i129, %.Vec_IntGrow.exit10_crit_edge.i127 ], [ %262, %260 ], [ %251, %Vec_IntGrow.exit.i132 ] %264 = load i32, ptr %31, align 4, !tbaa !34 %265 = add nsw i32 %264, 1 store i32 %265, ptr %31, align 4, !tbaa !34 diff --git a/bench/abc/optimized/ifDec66.ll b/bench/abc/optimized/ifDec66.ll index 394605160dc..096a910cdc2 100644 --- a/bench/abc/optimized/ifDec66.ll +++ b/bench/abc/optimized/ifDec66.ll @@ -961,14 +961,15 @@ define range(i32 0, 2) i32 @If_CluCheckXXExt(ptr noundef readnone captures(none) .lr.ph72: ; preds = %12, %._crit_edge %27 = phi i32 [ %25, %._crit_edge ], [ 1, %12 ] - %.048.lcssa107 = phi ptr [ %scevgep, %._crit_edge ], [ %14, %12 ] + %.048.lcssa107 = phi i1 [ %22, %._crit_edge ], [ true, %12 ] + %.048.lcssa103 = phi ptr [ %scevgep, %._crit_edge ], [ %14, %12 ] %wide.trip.count = zext nneg i32 %27 to i64 br label %28 28: ; preds = %.lr.ph72, %28 - %indvars.iv = phi i64 [ 0, %.lr.ph72 ], [ %indvars.iv.next, %28 ] - %29 = phi i64 [ 0, %.lr.ph72 ], [ %35, %28 ] - %.14969 = phi ptr [ %.048.lcssa107, %.lr.ph72 ], [ %30, %28 ] + %indvars.iv = phi i64 [ 0, %.lr.ph68 ], [ %indvars.iv.next, %29 ] + %29 = phi i64 [ 0, %.lr.ph68 ], [ %35, %29 ] + %.14969 = phi ptr [ %.048.lcssa103, %.lr.ph68 ], [ %30, %29 ] %30 = getelementptr inbounds nuw i8, ptr %.14969, i64 1 %31 = load i8, ptr %.14969, align 1, !tbaa !24 %32 = zext i8 %31 to i64 @@ -984,30 +985,31 @@ define range(i32 0, 2) i32 @If_CluCheckXXExt(ptr noundef readnone captures(none) br label %._crit_edge73 ._crit_edge73: ; preds = %._crit_edge73.loopexit, %._crit_edge - %.149.lcssa = phi ptr [ %scevgep, %._crit_edge ], [ %30, %._crit_edge73.loopexit ] - %36 = load i8, ptr %.149.lcssa, align 1, !tbaa !24 - %37 = zext i8 %36 to i32 - store i8 %36, ptr %5, align 1, !tbaa !24 - %38 = getelementptr inbounds nuw i8, ptr %5, i64 1 - store i8 0, ptr %38, align 1, !tbaa !24 - %invariant.gep75 = getelementptr inbounds nuw i8, ptr %5, i64 2 - %.25077 = getelementptr inbounds nuw i8, ptr %.149.lcssa, i64 1 - %.not91 = icmp eq i8 %36, 0 - br i1 %.not91, label %._crit_edge82.thread, label %.lr.ph81.preheader - -._crit_edge82.thread: ; preds = %._crit_edge73 + %.149.lcssa = phi i1 [ %22, %._crit_edge ], [ %28, %._crit_edge69.loopexit ] + %.149.lcssa = phi ptr [ %scevgep, %._crit_edge ], [ %31, %._crit_edge69.loopexit ] + %38 = load i8, ptr %.149.lcssa, align 1, !tbaa !24 + %39 = zext i8 %38 to i32 + store i8 %38, ptr %5, align 1, !tbaa !24 + %40 = getelementptr inbounds nuw i8, ptr %5, i64 1 + store i8 0, ptr %40, align 1, !tbaa !24 + %.25077 = getelementptr inbounds nuw i8, ptr %5, i64 2 + %.25073 = getelementptr inbounds nuw i8, ptr %.149.lcssa, i64 1 + %.not87 = icmp eq i8 %38, 0 + br i1 %.not87, label %._crit_edge78.thread, label %.lr.ph77.preheader + +._crit_edge78.thread: ; preds = %._crit_edge69 store i64 0, ptr %7, align 8, !tbaa !67 br label %.lr.ph87 .lr.ph81.preheader: ; preds = %._crit_edge73 - %wide.trip.count99 = zext i8 %36 to i64 + %wide.trip.count99 = zext i8 %38 to i64 br label %.lr.ph81 .lr.ph81: ; preds = %.lr.ph81.preheader, %.lr.ph81 - %indvars.iv96 = phi i64 [ 0, %.lr.ph81.preheader ], [ %indvars.iv.next97, %.lr.ph81 ] - %.25079 = phi ptr [ %.25077, %.lr.ph81.preheader ], [ %.250, %.lr.ph81 ] + %indvars.iv96 = phi i64 [ 0, %.lr.ph77.preheader ], [ %indvars.iv.next97, %.lr.ph77 ] + %.25079 = phi ptr [ %.25073, %.lr.ph77.preheader ], [ %.250, %.lr.ph77 ] %39 = load i8, ptr %.25079, align 1, !tbaa !24 - %gep76 = getelementptr inbounds nuw i8, ptr %invariant.gep75, i64 %indvars.iv96 + %gep76 = getelementptr inbounds nuw i8, ptr %invariant.gep71, i64 %indvars.iv96 store i8 %39, ptr %gep76, align 1, !tbaa !24 %indvars.iv.next97 = add nuw nsw i64 %indvars.iv96, 1 %.250 = getelementptr inbounds nuw i8, ptr %.25079, i64 1 @@ -1015,126 +1017,116 @@ define range(i32 0, 2) i32 @If_CluCheckXXExt(ptr noundef readnone captures(none) br i1 %exitcond100.not, label %._crit_edge82, label %.lr.ph81, !llvm.loop !70 ._crit_edge82: ; preds = %.lr.ph81 - %40 = icmp ult i8 %36, 4 - %41 = add nsw i32 %37, -3 + %40 = icmp ult i8 %38, 4 + %41 = add nsw i32 %39, -3 %42 = shl nuw i32 1, %41 %43 = select i1 %40, i32 1, i32 %42 store i64 0, ptr %7, align 8, !tbaa !67 %44 = icmp sgt i32 %43, 0 - br i1 %44, label %.lr.ph87, label %._crit_edge88 - -.lr.ph87: ; preds = %._crit_edge82.thread, %._crit_edge82 - %45 = phi i32 [ 1, %._crit_edge82.thread ], [ %43, %._crit_edge82 ] - %.250.lcssa109 = phi ptr [ %.25077, %._crit_edge82.thread ], [ %.250, %._crit_edge82 ] - %wide.trip.count104 = zext nneg i32 %45 to i64 - br label %46 - -46: ; preds = %.lr.ph87, %46 - %indvars.iv101 = phi i64 [ 0, %.lr.ph87 ], [ %indvars.iv.next102, %46 ] - %47 = phi i64 [ 0, %.lr.ph87 ], [ %53, %46 ] - %.35184 = phi ptr [ %.250.lcssa109, %.lr.ph87 ], [ %48, %46 ] - %48 = getelementptr inbounds nuw i8, ptr %.35184, i64 1 - %49 = load i8, ptr %.35184, align 1, !tbaa !24 - %50 = zext i8 %49 to i64 - %51 = shl nsw i64 %indvars.iv101, 3 - %52 = shl i64 %50, %51 - %53 = or i64 %52, %47 - store i64 %53, ptr %7, align 8, !tbaa !67 - %indvars.iv.next102 = add nuw nsw i64 %indvars.iv101, 1 - %exitcond105.not = icmp eq i64 %indvars.iv.next102, %wide.trip.count104 - br i1 %exitcond105.not, label %._crit_edge88, label %46, !llvm.loop !71 - -._crit_edge88: ; preds = %46, %._crit_edge82 - %54 = load i64, ptr %8, align 8, !tbaa !67 - %55 = icmp eq i8 %15, 6 - br i1 %55, label %If_CluAdjust2.exit, label %56 - -56: ; preds = %._crit_edge88 - %57 = shl nuw i32 1, %16 - %58 = zext i32 %57 to i64 - %notmask.i = shl nsw i64 -1, %58 - %59 = xor i64 %notmask.i, -1 - %60 = and i64 %54, %59 - %61 = shl nuw nsw i64 %60, %58 - %62 = select i1 %.not90, i64 %61, i64 0 - %.030.i = or i64 %62, %60 - %.0.i = call i32 @llvm.umax.i32(i32 range(i32 -2147483648, 256) %16, i32 1) - %63 = icmp ult i8 %15, 2 - %64 = shl i64 %.030.i, 2 - %65 = select i1 %63, i64 %64, i64 0 - %.131.i = or i64 %65, %.030.i - %.1.i = select i1 %63, i32 2, i32 %.0.i - %66 = icmp eq i32 %.1.i, 2 + br i1 %44, label %.lr.ph87, label %._crit_edge84 + +.lr.ph87: ; preds = %._crit_edge78.thread, %._crit_edge82 + %45 = phi i32 [ 1, %._crit_edge78.thread ], [ %43, %._crit_edge78 ] + %.250.lcssa109 = phi i1 [ true, %._crit_edge78.thread ], [ %42, %._crit_edge78 ] + %.250.lcssa105 = phi ptr [ %.25073, %._crit_edge78.thread ], [ %.250, %._crit_edge78 ] + %wide.trip.count100 = zext nneg i32 %47 to i64 + br label %49 + +49: ; preds = %.lr.ph87, %49 + %47 = phi i64 [ 0, %.lr.ph83 ], [ %indvars.iv.next98, %49 ] + %.35184 = phi i64 [ 0, %.lr.ph83 ], [ %56, %49 ] + %.35180 = phi ptr [ %.250.lcssa105, %.lr.ph83 ], [ %51, %49 ] + %51 = getelementptr inbounds nuw i8, ptr %.35180, i64 1 + %52 = load i8, ptr %.35180, align 1, !tbaa !24 + %53 = zext i8 %52 to i64 + %52 = shl nsw i64 %45, 3 + %55 = shl i64 %53, %54 + %56 = or i64 %55, %.35184 + store i64 %56, ptr %7, align 8, !tbaa !67 + %indvars.iv.next98 = add nuw nsw i64 %indvars.iv97, 1 + %exitcond101.not = icmp eq i64 %indvars.iv.next98, %wide.trip.count100 + br i1 %exitcond101.not, label %._crit_edge84, label %49, !llvm.loop !71 + +._crit_edge84:; preds = %49, %._crit_edge78 + %57 = phi i1 [ %42, %._crit_edge78 ], [ %48, %49 ] + %58 = load i64, ptr %8, align 8, !tbaa !67 + %59 = icmp eq i8 %15, 6 + br i1 %59, label %If_CluAdjust2.exit, label %60 + +60:; preds = %._crit_edge84 + %notmask.i = shl nuw i32 1, %16 + %62 = zext i32 %notmask.i to i64 + %notmask.i = shl nsw i64 -1, %62 + %63 = xor i64 %notmask.i, -1 + %64 = and i64 %58, %63 + %65 = shl nuw nsw i64 %64, %62 + %66 = select i1 %.not86, i64 %65, i64 0 + %.030.i = or i64 %66, %64 + %67 = icmp ult i8 %15, 2 + %68 = shl i64 %.030.i, 2 + %69 = select i1 %67, i64 %68, i64 0 + %.131.i = or i64 %69, %.030.i + %66 = icmp ult i8 %15, 3 %67 = shl i64 %.131.i, 4 %68 = select i1 %66, i64 %67, i64 0 %.232.i = or i64 %68, %.131.i - %.2.i = select i1 %66, i32 3, i32 %.1.i - %69 = icmp eq i32 %.2.i, 3 - %70 = shl i64 %.232.i, 8 - %71 = select i1 %69, i64 %70, i64 0 - %.333.i = or i64 %71, %.232.i - %.3.i = select i1 %69, i32 4, i32 %.2.i - %72 = icmp eq i32 %.3.i, 4 - %73 = shl i64 %.333.i, 16 - %74 = select i1 %72, i64 %73, i64 0 - %.434.i = or i64 %74, %.333.i - %75 = and i32 %.3.i, 254 - %76 = icmp eq i32 %75, 4 - %77 = shl i64 %.434.i, 32 - %78 = select i1 %76, i64 %77, i64 0 - %.5.i = or i64 %78, %.434.i + %73 = shl i64 %.232.i, 8 + %74 = select i1 %.149.lcssa, i64 %73, i64 0 + %.333.i = or i64 %74, %.232.i + %75 = icmp ult i8 %15, 5 + %76 = shl i64 %.333.i, 16 + %.3.i = select i1 %75, i64 %76, i64 0 + %.434.i = or i64 %.3.i, %.333.i + %78 = icmp ult i8 %15, 6 + %79 = shl i64 %.434.i, 32 + %80 = select i1 %78, i64 %79, i64 0 + %.5.i = or i64 %80, %.434.i br label %If_CluAdjust2.exit -If_CluAdjust2.exit: ; preds = %._crit_edge88, %56 - %.035.i = phi i64 [ %.5.i, %56 ], [ %54, %._crit_edge88 ] +If_CluAdjust2.exit: ; preds = %._crit_edge84, %60 + %.035.i = phi i64 [ %.5.i, %60 ], [ %58, %._crit_edge84 ] store i64 %.035.i, ptr %8, align 8, !tbaa !67 %79 = load i64, ptr %7, align 8, !tbaa !67 - %80 = icmp eq i8 %36, 6 + %80 = icmp eq i8 %38, 6 br i1 %80, label %If_CluAdjust2.exit66, label %81 81: ; preds = %If_CluAdjust2.exit - %82 = shl nuw i32 1, %37 + %82 = shl nuw i32 1, %39 %83 = zext i32 %82 to i64 %notmask.i54 = shl nsw i64 -1, %83 %84 = xor i64 %notmask.i54, -1 %85 = and i64 %79, %84 %86 = shl nuw nsw i64 %85, %83 - %87 = select i1 %.not91, i64 %86, i64 0 + %87 = select i1 %.not87, i64 %86, i64 0 %.030.i55 = or i64 %87, %85 - %.0.i56 = call i32 @llvm.umax.i32(i32 range(i32 -2147483648, 256) %37, i32 1) - %88 = icmp ult i8 %36, 2 - %89 = shl i64 %.030.i55, 2 - %90 = select i1 %88, i64 %89, i64 0 - %.131.i57 = or i64 %90, %.030.i55 - %.1.i58 = select i1 %88, i32 2, i32 %.0.i56 - %91 = icmp eq i32 %.1.i58, 2 - %92 = shl i64 %.131.i57, 4 - %93 = select i1 %91, i64 %92, i64 0 - %.232.i59 = or i64 %93, %.131.i57 - %.2.i60 = select i1 %91, i32 3, i32 %.1.i58 - %94 = icmp eq i32 %.2.i60, 3 - %95 = shl i64 %.232.i59, 8 + %90 = icmp ult i8 %38, 2 + %91 = shl i64 %.030.i55, 2 + %92 = select i1 %90, i64 %91, i64 0 + %.131.i56 = or i64 %92, %.030.i55 + %93 = icmp ult i8 %38, 3 + %94 = shl i64 %.131.i56, 4 + %95 = select i1 %93, i64 %94, i64 0 + %.232.i57 = or i64 %95, %.131.i56 + %96 = shl i64 %.232.i57, 8 + %97 = select i1 %57, i64 %96, i64 0 + %.333.i58 = or i64 %97, %.232.i57 + %94 = icmp ult i8 %38, 5 + %95 = shl i64 %.333.i58, 16 %96 = select i1 %94, i64 %95, i64 0 - %.333.i61 = or i64 %96, %.232.i59 - %.3.i62 = select i1 %94, i32 4, i32 %.2.i60 - %97 = icmp eq i32 %.3.i62, 4 - %98 = shl i64 %.333.i61, 16 - %99 = select i1 %97, i64 %98, i64 0 - %.434.i63 = or i64 %99, %.333.i61 - %100 = and i32 %.3.i62, 254 - %101 = icmp eq i32 %100, 4 - %102 = shl i64 %.434.i63, 32 + %.333.i61 = or i64 %96, %.333.i58 + %101 = icmp ult i8 %38, 6 + %102 = shl i64 %.333.i61, 32 %103 = select i1 %101, i64 %102, i64 0 - %.5.i64 = or i64 %103, %.434.i63 + %.5.i64 = or i64 %103, %.434.i59 br label %If_CluAdjust2.exit66 If_CluAdjust2.exit66: ; preds = %If_CluAdjust2.exit, %81 - %.035.i65 = phi i64 [ %.5.i64, %81 ], [ %79, %If_CluAdjust2.exit ] + %.035.i65 = phi i64 [ %.5.i64, %83 ], [ %79, %If_CluAdjust2.exit ] store i64 %.035.i65, ptr %7, align 8, !tbaa !67 br label %104 104: ; preds = %9, %If_CluAdjust2.exit66 - %.0 = phi i32 [ 1, %If_CluAdjust2.exit66 ], [ 0, %9 ] + %.0 = phi i32 [ 1, %If_CluAdjust2.exit62 ], [ 0, %9 ] call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #17 ret i32 %.0 } diff --git a/bench/abc/optimized/ifDsd.ll b/bench/abc/optimized/ifDsd.ll index 9d08deeef5e..5386b7e4e64 100644 --- a/bench/abc/optimized/ifDsd.ll +++ b/bench/abc/optimized/ifDsd.ll @@ -9752,7 +9752,7 @@ define i32 @If_DsdManAddDsd_rec(ptr noundef %0, ptr noundef %1, ptr noundef %2, %61 = add i8 %60, -71 %62 = icmp ult i8 %61, -6 %narrow.i.not48.i = and i1 %or.cond.i47.i, %62 - br i1 %narrow.i.not48.i, label %._crit_edge55.i.thread, label %.lr.ph.i + br i1 %narrow.i.not48.i, label %.thread113, label %.lr.ph.i .lr.ph.i: ; preds = %57, %.lr.ph.i %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %.lr.ph.i ], [ 0, %57 ] @@ -9769,9 +9769,9 @@ define i32 @If_DsdManAddDsd_rec(ptr noundef %0, ptr noundef %1, ptr noundef %2, ._crit_edge.i: ; preds = %.lr.ph.i %indvars.i = trunc i64 %indvars.iv.next.i to i32 - switch i32 %indvars.i, label %.thread70.i [ + switch i32 %indvars.i, label %.thread69.i [ i32 1, label %69 - i32 0, label %._crit_edge55.i.thread + i32 0, label %.thread113 ] 69: ; preds = %._crit_edge.i @@ -9807,8 +9807,8 @@ define i32 @If_DsdManAddDsd_rec(ptr noundef %0, ptr noundef %1, ptr noundef %2, br i1 %.not83.i, label %.lr.ph54.preheader.i, label %.preheader.i.thread87 .preheader.i.thread87: ; preds = %.thread.i, %69, %.thread70.i - %.ph = phi i32 [ 1, %.thread70.i ], [ 1, %69 ], [ %81, %.thread.i ] - %.ph86 = phi i32 [ %78, %.thread70.i ], [ 2, %69 ], [ %78, %.thread.i ] + %.ph = phi i32 [ 1, %.thread69.i ], [ 1, %69 ], [ %81, %.thread.i ] + %.ph86 = phi i32 [ %78, %.thread69.i ], [ 2, %69 ], [ %78, %.thread.i ] %82 = zext nneg i32 %.ph to i64 %83 = shl nuw nsw i64 %82, 3 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1) %9, i8 0, i64 %83, i1 false), !tbaa !51 @@ -9823,7 +9823,7 @@ define i32 @If_DsdManAddDsd_rec(ptr noundef %0, ptr noundef %1, ptr noundef %2, br label %.lr.ph54.i .lr.ph54.i: ; preds = %Abc_TtReadHexDigit.exit.i, %.lr.ph54.preheader.i - %indvars.iv63.i = phi i64 [ 0, %.lr.ph54.preheader.i ], [ %indvars.iv.next64.i, %Abc_TtReadHexDigit.exit.i ] + %indvars.iv63.i = phi i64 [ 0, %.lr.ph53.preheader.i ], [ %indvars.iv.next64.i, %Abc_TtReadHexDigit.exit.i ] %87 = xor i64 %indvars.iv63.i, -1 %88 = getelementptr i8, ptr %86, i64 %87 %89 = load i8, ptr %88, align 1, !tbaa !137 @@ -9874,46 +9874,54 @@ Abc_TtReadHexDigit.exit.i: ; preds = %98, %96, %92 ._crit_edge55.i._crit_edge: ; preds = %._crit_edge55.i %.pre104 = load i64, ptr %9, align 16, !tbaa !51 - br label %._crit_edge55.i.thread - -._crit_edge55.i.thread: ; preds = %57, %._crit_edge.i, %._crit_edge55.i._crit_edge - %111 = phi i64 [ %.pre104, %._crit_edge55.i._crit_edge ], [ 0, %._crit_edge.i ], [ 0, %57 ] - %112 = phi i32 [ %84, %._crit_edge55.i._crit_edge ], [ 2, %._crit_edge.i ], [ 2, %57 ] - %.0.i43.i = tail call i32 @llvm.umax.i32(i32 range(i32 -2147483646, 6) %112, i32 1) - %113 = icmp ult i32 %112, 2 - %114 = and i64 %111, 3 - %115 = mul nuw nsw i64 %114, 5 - %.126.i.i = select i1 %113, i64 %115, i64 %111 - %.1.i.i = select i1 %113, i32 2, i32 %.0.i43.i - %116 = icmp eq i32 %.1.i.i, 2 - %117 = and i64 %.126.i.i, 15 - %118 = mul nuw nsw i64 %117, 17 - %.227.i.i = select i1 %116, i64 %118, i64 %.126.i.i - %.2.i.i = select i1 %116, i32 3, i32 %.1.i.i - %119 = icmp eq i32 %.2.i.i, 3 - %120 = and i64 %.227.i.i, 255 - %121 = mul nuw nsw i64 %120, 257 - %.328.i.i = select i1 %119, i64 %121, i64 %.227.i.i - %.3.i.i = select i1 %119, i32 4, i32 %.2.i.i - %122 = icmp eq i32 %.3.i.i, 4 - %123 = and i64 %.328.i.i, 65535 - %124 = mul nuw nsw i64 %123, 65537 - %.429.i.i = select i1 %122, i64 %124, i64 %.328.i.i - %125 = and i32 %.3.i.i, -2 - %126 = icmp eq i32 %125, 4 - %127 = and i64 %.429.i.i, 4294967295 - %128 = mul nuw i64 %127, 4294967297 - %.5.i.i = select i1 %126, i64 %128, i64 %.429.i.i + %112 = icmp ult i32 %84, 2 + %113 = and i64 %.pre104, 3 + %114 = mul nuw nsw i64 %113, 5 + br i1 %112, label %.thread113, label %115 + +115:; preds = %._crit_edge55.i._crit_edge + %113 = icmp eq i32 %84, 2 + %114 = and i64 %.pre104, 15 + br i1 %116, label %.thread113, label %119 + +.thread113:; preds = %111, %57, %._crit_edge.i, %115 + %.ph111 = phi i32 [ %84, %115 ], [ %84, %111 ], [ 2, %57 ], [ 2, %._crit_edge.i ] + %.ph112.in = phi i64 [ %117, %115 ], [ %114, %111 ], [ 0, %57 ], [ 0, %._crit_edge.i ] + %118 = mul nuw nsw i64 %.ph112.in, 4369 + br label %.thread123 + +119:; preds = %115 + %120 = icmp ult i32 %84, 4 + %121 = and i64 %.pre104, 255 + %122 = mul nuw nsw i64 %121, 257 + br i1 %120, label %.thread123, label %123 + +123:; preds = %119 + %124 = icmp eq i32 %84, 4 + %125 = and i64 %.pre104, 65535 + br i1 %124, label %.thread123, label %127 + +.thread123:; preds = %119, %.thread113, %123 + %.ph121 = phi i32 [ %84, %123 ], [ %.ph111, %.thread113 ], [ %84, %119 ] + %.ph122.in = phi i64 [ %125, %123 ], [ %118, %.thread113 ], [ %122, %119 ] + %126 = mul nuw i64 %.ph122.in, 281479271743489 br label %.sink.split.i -.sink.split.i: ; preds = %._crit_edge55.i.thread, %73, %70 - %.5.i.sink.i = phi i64 [ %.5.i.i, %._crit_edge55.i.thread ], [ %75, %73 ], [ %72, %70 ] - %.037.ph.i = phi i32 [ %112, %._crit_edge55.i.thread ], [ 1, %73 ], [ 0, %70 ] +127: ; preds = %123 + %128 = icmp ult i32 %84, 6 + %129 = and i64 %.pre104, 4294967295 + %130 = mul nuw i64 %129, 4294967297 + %spec.select = select i1 %128, i64 %130, i64 %.pre104 + br label %.sink.split.i + +.sink.split.i: ; preds = %127, %.thread123, %73, %70 + %.5.i.sink.i = phi i64 [ %75, %73 ], [ %72, %70 ], [ %126, %.thread123 ], [ %spec.select, %127 ] + %.037.ph.i = phi i32 [ 1, %73 ], [ 0, %70 ], [ %.ph121, %.thread123 ], [ %84, %127 ] store i64 %.5.i.sink.i, ptr %9, align 16, !tbaa !51 br label %Abc_TtReadHex.exit Abc_TtReadHex.exit: ; preds = %._crit_edge55.i, %.sink.split.i - %.037.i = phi i32 [ %84, %._crit_edge55.i ], [ %.037.ph.i, %.sink.split.i ] + %.037.i = phi i32 [ %84, %._crit_edge54.i ], [ %.037.ph.i, %.sink.split.i ] %129 = icmp slt i32 %.037.i, 3 %130 = add nsw i32 %.037.i, -2 %131 = shl nuw i32 1, %130 diff --git a/bench/abc/optimized/ifSat.ll b/bench/abc/optimized/ifSat.ll index 0475a6ba455..655b5404b4d 100644 --- a/bench/abc/optimized/ifSat.ll +++ b/bench/abc/optimized/ifSat.ll @@ -506,17 +506,17 @@ Vec_IntFill.exit: ; preds = %Vec_IntGrow.exit.i, br label %.preheader147.us .preheader147.us: ; preds = %.preheader147.us.preheader, %._crit_edge.us - %.0103155.us = phi i32 [ %88, %._crit_edge.us ], [ 0, %.preheader147.us.preheader ] + %.0103155.us = phi i32 [ %88, %._crit_edge.us ], [ 0, %.preheader144.us.preheader ] %36 = load i32, ptr %11, align 4 %invariant.op.us = add i32 %1, %36 br label %37 37: ; preds = %.preheader147.us, %75 - %.0102154.us = phi i32 [ 0, %.preheader147.us ], [ %.4.us, %75 ] - %.0107152.us = phi i32 [ 0, %.preheader147.us ], [ %76, %75 ] - %.0110151.us = phi i32 [ 0, %.preheader147.us ], [ %.1111.us, %75 ] - %.0112150.us = phi i32 [ 0, %.preheader147.us ], [ %.1113.us, %75 ] - %.0114149.us = phi i32 [ 0, %.preheader147.us ], [ %.1115.us, %75 ] + %.0102154.us = phi i32 [ 0, %.preheader144.us ], [ %.4.us, %75 ] + %.0107152.us = phi i32 [ 0, %.preheader144.us ], [ %76, %75 ] + %.0110151.us = phi i32 [ 0, %.preheader144.us ], [ %.1111.us, %75 ] + %.0112150.us = phi i32 [ 0, %.preheader144.us ], [ %.1113.us, %75 ] + %.0114149.us = phi i32 [ 0, %.preheader144.us ], [ %.1115.us, %75 ] %38 = shl nuw i32 %.0107152.us, 1 %39 = lshr i32 %4, %38 %40 = and i32 %39, 3 @@ -712,7 +712,7 @@ default.unreachable: ; preds = %37 br label %130 130: ; preds = %.lr.ph165, %141 - %indvars.iv177 = phi i64 [ 0, %.lr.ph165 ], [ %indvars.iv.next178, %141 ] + %indvars.iv177 = phi i64 [ 0, %.lr.ph162 ], [ %indvars.iv.next178, %141 ] %131 = getelementptr inbounds nuw i32, ptr %.val134, i64 %indvars.iv177 %132 = load i32, ptr %131, align 4, !tbaa !3 %.not146 = icmp eq i32 %132, 1 @@ -748,26 +748,22 @@ default.unreachable: ; preds = %37 %148 = select i1 %143, i64 %145, i64 %147 %149 = mul nuw nsw i64 %148, 5 %.126.i = select i1 %146, i64 %149, i64 %142 - %.1.i = call i32 @llvm.umax.i32(i32 %127, i32 2) %150 = icmp ult i32 %127, 3 %151 = and i64 %.126.i, 15 %152 = mul nuw nsw i64 %151, 17 %.227.i = select i1 %150, i64 %152, i64 %142 - %.2.i = select i1 %150, i32 3, i32 %.1.i - %153 = icmp eq i32 %.2.i, 3 + %153 = icmp ult i32 %127, 4 %154 = and i64 %.227.i, 255 %155 = mul nuw nsw i64 %154, 257 - %.328.i = select i1 %153, i64 %155, i64 %.227.i - %.3.i = select i1 %153, i32 4, i32 %.2.i - %156 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %153, i64 %155, i64 %142 + %156 = icmp ult i32 %127, 5 %157 = and i64 %.328.i, 65535 %158 = mul nuw nsw i64 %157, 65537 - %.429.i = select i1 %156, i64 %158, i64 %.328.i - %159 = and i32 %.3.i, -2 - %160 = icmp eq i32 %159, 4 - %161 = and i64 %.429.i, 4294967295 - %162 = mul nuw i64 %161, 4294967297 - %.5.i = select i1 %160, i64 %162, i64 %.429.i + %.429.i = select i1 %156, i64 %158, i64 %142 + %159 = icmp ult i32 %127, 6 + %160 = and i64 %.429.i, 4294967295 + %161 = mul nuw i64 %160, 4294967297 + %.5.i = select i1 %159, i64 %161, i64 %142 store i64 %.5.i, ptr %5, align 8, !tbaa !10 store i64 0, ptr %6, align 8, !tbaa !10 %163 = add nsw i32 %125, 1 @@ -786,7 +782,7 @@ default.unreachable: ; preds = %37 br label %169 169: ; preds = %.lr.ph168, %179 - %indvars.iv182 = phi i64 [ 0, %.lr.ph168 ], [ %indvars.iv.next183, %179 ] + %indvars.iv182 = phi i64 [ 0, %.lr.ph165 ], [ %indvars.iv.next183, %178 ] %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv182 %170 = load i32, ptr %gep, align 4, !tbaa !3 %.not145 = icmp eq i32 %170, 1 @@ -813,7 +809,7 @@ default.unreachable: ; preds = %37 br label %._crit_edge169 ._crit_edge169: ; preds = %._crit_edge169.loopexit, %._crit_edge - %180 = phi i64 [ %.pre193, %._crit_edge169.loopexit ], [ 0, %._crit_edge ] + %180 = phi i64 [ %.pre193, %._crit_edge166.loopexit ], [ 0, %._crit_edge ] %181 = icmp eq i32 %165, 0 %182 = trunc i64 %180 to i1 %183 = select i1 %182, i64 3, i64 0 @@ -822,41 +818,37 @@ default.unreachable: ; preds = %37 %186 = select i1 %181, i64 %183, i64 %185 %187 = mul nuw nsw i64 %186, 5 %.126.i136 = select i1 %184, i64 %187, i64 %180 - %.1.i137 = call i32 @llvm.umax.i32(i32 %165, i32 2) - %188 = icmp ult i32 %165, 3 - %189 = and i64 %.126.i136, 15 - %190 = mul nuw nsw i64 %189, 17 - %.227.i138 = select i1 %188, i64 %190, i64 %180 - %.2.i139 = select i1 %188, i32 3, i32 %.1.i137 - %191 = icmp eq i32 %.2.i139, 3 - %192 = and i64 %.227.i138, 255 - %193 = mul nuw nsw i64 %192, 257 - %.328.i140 = select i1 %191, i64 %193, i64 %.227.i138 - %.3.i141 = select i1 %191, i32 4, i32 %.2.i139 - %194 = icmp eq i32 %.3.i141, 4 - %195 = and i64 %.328.i140, 65535 - %196 = mul nuw nsw i64 %195, 65537 - %.429.i142 = select i1 %194, i64 %196, i64 %.328.i140 - %197 = and i32 %.3.i141, -2 - %198 = icmp eq i32 %197, 4 - %199 = and i64 %.429.i142, 4294967295 - %200 = mul nuw i64 %199, 4294967297 - %.5.i143 = select i1 %198, i64 %200, i64 %.429.i142 - store i64 %.5.i143, ptr %6, align 8, !tbaa !10 - %201 = icmp ne i32 %3, 6 - %202 = icmp ne i32 %1, 4 - %or.cond3 = or i1 %202, %201 - br i1 %or.cond3, label %215, label %203 - -203: ; preds = %._crit_edge169 - %204 = load i64, ptr %5, align 8, !tbaa !10 - %205 = call i64 @If_ManSat6Truth(i64 noundef %204, i64 noundef %.5.i143, ptr noundef nonnull %10, i32 noundef %126, ptr noundef nonnull %12, i32 noundef %125, ptr noundef nonnull %14, i32 noundef %164) - store i64 %205, ptr %15, align 8, !tbaa !10 - %206 = load i64, ptr %2, align 8, !tbaa !10 - %.not121 = icmp eq i64 %206, %205 - br i1 %.not121, label %215, label %207 - -207: ; preds = %203 + %187 = icmp ult i32 %165, 3 + %188 = and i64 %.126.i136, 15 + %189 = mul nuw nsw i64 %188, 17 + %.227.i137 = select i1 %187, i64 %189, i64 %179 + %190 = icmp ult i32 %164, 4 + %191 = and i64 %.227.i137, 255 + %192 = mul nuw nsw i64 %191, 257 + %.328.i138 = select i1 %190, i64 %192, i64 %179 + %193 = icmp ult i32 %164, 5 + %194 = and i64 %.328.i138, 65535 + %195 = mul nuw nsw i64 %194, 65537 + %.429.i139 = select i1 %193, i64 %195, i64 %179 + %196 = icmp ult i32 %164, 6 + %197 = and i64 %.429.i139, 4294967295 + %198 = mul nuw i64 %197, 4294967297 + %.5.i140 = select i1 %196, i64 %198, i64 %179 + store i64 %.5.i140, ptr %6, align 8, !tbaa !10 + %199 = icmp ne i32 %3, 6 + %200 = icmp ne i32 %1, 4 + %or.cond3 = or i1 %200, %199 + br i1 %or.cond3, label %213, label %201 + +201:; preds = %._crit_edge166 + %202 = load i64, ptr %5, align 8, !tbaa !10 + %203 = call i64 @If_ManSat6Truth(i64 noundef %202, i64 noundef %.5.i140, ptr noundef nonnull %10, i32 noundef %126, ptr noundef nonnull %12, i32 noundef %125, ptr noundef nonnull %14, i32 noundef %163) + store i64 %203, ptr %15, align 8, !tbaa !10 + %204 = load i64, ptr %2, align 8, !tbaa !10 + %.not121 = icmp eq i64 %204, %203 + br i1 %.not121, label %213, label %205 + +205:; preds = %201 call void @Dau_DsdPrintFromTruth(ptr noundef nonnull %2, i32 noundef 6) #10 call void @Dau_DsdPrintFromTruth(ptr noundef nonnull %15, i32 noundef 6) #10 %208 = load i32, ptr %11, align 4, !tbaa !3 @@ -871,8 +863,8 @@ default.unreachable: ; preds = %37 %puts = call i32 @puts(ptr nonnull dereferenceable(1) @str) br label %215 -215: ; preds = %121, %207, %203, %._crit_edge169, %.critedge - %.0 = phi i32 [ 0, %.critedge ], [ 1, %._crit_edge169 ], [ 1, %203 ], [ 1, %207 ], [ 1, %121 ] +215: ; preds = %121, %205, %201, %._crit_edge169, %.critedge + %.0 = phi i32 [ 0, %.critedge ], [ 1, %._crit_edge166 ], [ 1, %201 ], [ 1, %205 ], [ 1, %121 ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10 call void @llvm.lifetime.end.p0(i64 60, ptr nonnull %14) #10 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #10 @@ -2746,9 +2738,6 @@ declare i32 @llvm.smax.i32(i32, i32) #8 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #9 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #8 - attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } 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/abc/optimized/ifTune.ll b/bench/abc/optimized/ifTune.ll index 046dc88bd2f..11ca2307136 100644 --- a/bench/abc/optimized/ifTune.ll +++ b/bench/abc/optimized/ifTune.ll @@ -3158,7 +3158,7 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br label %.preheader106 .preheader106: ; preds = %.preheader106.preheader, %._crit_edge - %indvars.iv = phi i64 [ 0, %.preheader106.preheader ], [ %indvars.iv.next, %._crit_edge ] + %indvars.iv = phi i64 [ 0, %.preheader105.preheader ], [ %indvars.iv.next, %._crit_edge ] %29 = trunc i64 %indvars.iv to i32 %30 = mul i32 %20, %29 %31 = add nsw i32 %30, %14 @@ -3176,8 +3176,8 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br label %57 37: ; preds = %.preheader106, %37 - %.085109 = phi i32 [ 0, %.preheader106 ], [ %49, %37 ] - %.087108 = phi i32 [ 0, %.preheader106 ], [ %.188, %37 ] + %.085109 = phi i32 [ 0, %.preheader105 ], [ %49, %37 ] + %.087108 = phi i32 [ 0, %.preheader105 ], [ %.188, %37 ] %38 = add nsw i32 %31, %.085109 %39 = ashr i32 %38, 6 %40 = sext i32 %39 to i64 @@ -3209,15 +3209,15 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br i1 %exitcond145.not, label %.preheader105, label %.preheader106, !llvm.loop !130 57: ; preds = %.lr.ph132, %183 - %indvars.iv167 = phi i64 [ %36, %.lr.ph132 ], [ %indvars.iv.next168, %183 ] - %.091130 = phi i32 [ 0, %.lr.ph132 ], [ %.192, %183 ] + %indvars.iv167 = phi i64 [ %36, %.lr.ph131 ], [ %indvars.iv.next168, %182 ] + %.091130 = phi i32 [ 0, %.lr.ph131 ], [ %.192, %182 ] %58 = getelementptr inbounds [22 x %struct.Ifn_Obj_t_], ptr %33, i64 0, i64 %indvars.iv167 %59 = load i32, ptr %58, align 8 %60 = and i32 %59, 7 %61 = lshr i32 %59, 3 %62 = and i32 %61, 31 %63 = getelementptr inbounds nuw i8, ptr %58, i64 4 - switch i32 %60, label %183 [ + switch i32 %60, label %182 [ i32 3, label %.preheader i32 4, label %.preheader104 i32 5, label %78 @@ -3241,8 +3241,8 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br label %.lr.ph127 .lr.ph127: ; preds = %.lr.ph127.preheader, %.lr.ph127 - %indvars.iv162 = phi i64 [ 0, %.lr.ph127.preheader ], [ %indvars.iv.next163, %.lr.ph127 ] - %.289125 = phi i32 [ 1, %.lr.ph127.preheader ], [ %69, %.lr.ph127 ] + %indvars.iv162 = phi i64 [ 0, %.lr.ph126.preheader ], [ %indvars.iv.next163, %.lr.ph126 ] + %.289125 = phi i32 [ 1, %.lr.ph126.preheader ], [ %69, %.lr.ph126 ] %64 = getelementptr inbounds nuw i32, ptr %63, i64 %indvars.iv162 %65 = load i32, ptr %64, align 4, !tbaa !22 %66 = sext i32 %65 to i64 @@ -3254,14 +3254,14 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br i1 %exitcond166.not, label %._crit_edge128, label %.lr.ph127, !llvm.loop !131 ._crit_edge128: ; preds = %.lr.ph127, %.preheader - %.289.lcssa = phi i32 [ 1, %.preheader ], [ %69, %.lr.ph127 ] + %.289.lcssa = phi i32 [ 1, %.preheader ], [ %69, %.lr.ph126 ] %70 = getelementptr inbounds [1000 x i32], ptr %6, i64 0, i64 %indvars.iv167 store i32 %.289.lcssa, ptr %70, align 4, !tbaa !22 br label %183 .lr.ph122: ; preds = %.lr.ph122.preheader, %.lr.ph122 - %indvars.iv157 = phi i64 [ 0, %.lr.ph122.preheader ], [ %indvars.iv.next158, %.lr.ph122 ] - %.390120 = phi i32 [ 0, %.lr.ph122.preheader ], [ %76, %.lr.ph122 ] + %indvars.iv157 = phi i64 [ 0, %.lr.ph121.preheader ], [ %indvars.iv.next158, %.lr.ph121 ] + %.390120 = phi i32 [ 0, %.lr.ph121.preheader ], [ %76, %.lr.ph121 ] %71 = getelementptr inbounds nuw i32, ptr %63, i64 %indvars.iv157 %72 = load i32, ptr %71, align 4, !tbaa !22 %73 = sext i32 %72 to i64 @@ -3273,7 +3273,7 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br i1 %exitcond161.not, label %._crit_edge123, label %.lr.ph122, !llvm.loop !132 ._crit_edge123: ; preds = %.lr.ph122, %.preheader104 - %.390.lcssa = phi i32 [ 0, %.preheader104 ], [ %76, %.lr.ph122 ] + %.390.lcssa = phi i32 [ 0, %.preheader103 ], [ %76, %.lr.ph121 ] %77 = getelementptr inbounds [1000 x i32], ptr %6, i64 0, i64 %indvars.iv167 store i32 %.390.lcssa, ptr %77, align 4, !tbaa !22 br label %183 @@ -3335,8 +3335,8 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br label %._crit_edge114 ._crit_edge114: ; preds = %._crit_edge114.loopexit, %95 - %111 = phi i64 [ 0, %95 ], [ %109, %._crit_edge114.loopexit ] - %.293.lcssa = phi i32 [ %.091130, %95 ], [ %110, %._crit_edge114.loopexit ] + %111 = phi i64 [ 0, %95 ], [ %109, %._crit_edge113.loopexit ] + %.293.lcssa = phi i32 [ %.091130, %95 ], [ %110, %._crit_edge113.loopexit ] %112 = icmp eq i32 %62, 0 %113 = trunc i64 %111 to i1 %114 = select i1 %113, i64 3, i64 0 @@ -3345,26 +3345,22 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt %117 = select i1 %112, i64 %114, i64 %116 %118 = mul nuw nsw i64 %117, 5 %.126.i = select i1 %115, i64 %118, i64 %111 - %.1.i = call i32 @llvm.umax.i32(i32 %62, i32 2) %119 = icmp samesign ult i32 %62, 3 %120 = and i64 %.126.i, 15 %121 = mul nuw nsw i64 %120, 17 %.227.i = select i1 %119, i64 %121, i64 %111 - %.2.i = select i1 %119, i32 3, i32 %.1.i - %122 = icmp eq i32 %.2.i, 3 + %123 = icmp samesign ult i32 %62, 4 %123 = and i64 %.227.i, 255 %124 = mul nuw nsw i64 %123, 257 - %.328.i = select i1 %122, i64 %124, i64 %.227.i - %.3.i = select i1 %122, i32 4, i32 %.2.i - %125 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %122, i64 %124, i64 %112 + %125 = icmp samesign ult i32 %62, 5 %126 = and i64 %.328.i, 65535 %127 = mul nuw nsw i64 %126, 65537 - %.429.i = select i1 %125, i64 %127, i64 %.328.i - %128 = and i32 %.3.i, 30 - %129 = icmp eq i32 %128, 4 - %130 = and i64 %.429.i, 4294967295 - %131 = mul nuw i64 %130, 4294967297 - %.5.i = select i1 %129, i64 %131, i64 %.429.i + %.429.i = select i1 %125, i64 %127, i64 %112 + %128 = icmp samesign ult i32 %63, 6 + %129 = and i64 %.429.i, 4294967295 + %130 = mul nuw i64 %129, 4294967297 + %.5.i = select i1 %128, i64 %130, i64 %112 store i64 %.5.i, ptr %8, align 8, !tbaa !44 br i1 %112, label %Abc_TtMinBase.exit.thread, label %.lr.ph118.preheader @@ -3373,7 +3369,7 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br label %.lr.ph118 .lr.ph118: ; preds = %.lr.ph118.preheader, %.lr.ph118 - %indvars.iv152 = phi i64 [ 0, %.lr.ph118.preheader ], [ %indvars.iv.next153, %.lr.ph118 ] + %indvars.iv152 = phi i64 [ 0, %.lr.ph117.preheader ], [ %indvars.iv.next153, %.lr.ph117 ] %132 = getelementptr inbounds nuw i32, ptr %63, i64 %indvars.iv152 %133 = load i32, ptr %132, align 4, !tbaa !22 %134 = sext i32 %133 to i64 @@ -3390,9 +3386,9 @@ define i32 @If_ManSatDeriveGiaFromBits(ptr noundef %0, ptr noundef readonly capt br label %138 138: ; preds = %172, %.lr.ph.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %172 ] - %139 = phi i64 [ %.5.i, %.lr.ph.i ], [ %173, %172 ] - %.029.i = phi i32 [ 0, %.lr.ph.i ], [ %.1.i102, %172 ] + %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %171 ] + %139 = phi i64 [ %.5.i, %.lr.ph.i ], [ %173, %171 ] + %.029.i = phi i32 [ 0, %.lr.ph.i ], [ %.1.i102, %171 ] %140 = trunc nuw nsw i64 %indvars.iv.i to i32 %141 = shl nuw nsw i32 1, %140 %142 = zext nneg i32 %141 to i64 @@ -3434,30 +3430,30 @@ Abc_TtSwapVars.exit.i: ; preds = %148 br label %169 169: ; preds = %Abc_TtSwapVars.exit.i, %148 - %170 = phi i64 [ %168, %Abc_TtSwapVars.exit.i ], [ %139, %148 ] + %170 = phi i64 [ %168, %Abc_TtSwapVars.exit.i ], [ %139, %147 ] %171 = add nsw i32 %.029.i, 1 br label %172 172: ; preds = %169, %138 - %173 = phi i64 [ %170, %169 ], [ %139, %138 ] - %.1.i102 = phi i32 [ %171, %169 ], [ %.029.i, %138 ] + %173 = phi i64 [ %170, %168 ], [ %139, %138 ] + %.1.i102 = phi i32 [ %171, %168 ], [ %.029.i, %138 ] %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i br i1 %exitcond.not.i, label %Abc_TtMinBase.exit, label %138, !llvm.loop !135 Abc_TtMinBase.exit: ; preds = %172 %174 = icmp eq i32 %.1.i102, 0 - br i1 %174, label %Abc_TtMinBase.exit.thread, label %179 - -Abc_TtMinBase.exit.thread: ; preds = %._crit_edge114, %Abc_TtMinBase.exit - %175 = phi i64 [ %173, %Abc_TtMinBase.exit ], [ %.5.i, %._crit_edge114 ] - %176 = trunc i64 %175 to i32 - %177 = and i32 %176, 1 - %178 = getelementptr inbounds [1000 x i32], ptr %6, i64 0, i64 %indvars.iv167 - store i32 %177, ptr %178, align 4, !tbaa !22 - br label %182 + br i1 %174, label %Abc_TtMinBase.exit.thread, label %178 + +179: ; preds = %._crit_edge113, %Abc_TtMinBase.exit + %174 = phi i64 [ %172, %Abc_TtMinBase.exit ], [ %.5.i, %._crit_edge113 ] + %175 = trunc i64 %174 to i32 + %176 = and i32 %175, 1 + %177 = getelementptr inbounds [1000 x i32], ptr %6, i64 0, i64 %indvars.iv166 + store i32 %176, ptr %177, align 4, !tbaa !22 + br label %181 -179: ; preds = %Abc_TtMinBase.exit +178: ; preds = %Abc_TtMinBase.exit call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #24 store i32 %.1.i102, ptr %9, align 8, !tbaa !79 store i32 %.1.i102, ptr %34, align 4, !tbaa !77 @@ -3468,13 +3464,13 @@ Abc_TtMinBase.exit.thread: ; preds = %._crit_edge114, %Ab call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #24 br label %182 -182: ; preds = %179, %Abc_TtMinBase.exit.thread +182: ; preds = %178, %Abc_TtMinBase.exit.thread call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #24 br label %183 183: ; preds = %57, %._crit_edge123, %182, %78, %._crit_edge128 - %.192 = phi i32 [ %.091130, %._crit_edge128 ], [ %.091130, %._crit_edge123 ], [ %.091130, %78 ], [ %.293.lcssa, %182 ], [ %.091130, %57 ] + %.192 = phi i32 [ %.091130, %._crit_edge127 ], [ %.091130, %._crit_edge122 ], [ %.091130, %78 ], [ %.293.lcssa, %181 ], [ %.091130, %57 ] %indvars.iv.next168 = add nsw i64 %indvars.iv167, 1 %184 = load i32, ptr %12, align 4, !tbaa !12 %185 = sext i32 %184 to i64 @@ -3482,7 +3478,7 @@ Abc_TtMinBase.exit.thread: ; preds = %._crit_edge114, %Ab br i1 %186, label %57, label %._crit_edge133, !llvm.loop !136 ._crit_edge133: ; preds = %183, %.preheader105 - %.lcssa = phi i32 [ %13, %.preheader105 ], [ %184, %183 ] + %.lcssa = phi i32 [ %13, %.preheader104 ], [ %184, %182 ] %187 = and i32 %22, 63 %188 = zext nneg i32 %187 to i64 %189 = lshr i64 %26, %188 @@ -4649,26 +4645,22 @@ define void @Ifn_NtkAddConstraints(ptr noundef readonly captures(none) %0, ptr n %22 = mul nuw nsw i64 %21, 5 %23 = select i1 %19, i64 0, i64 %22 %.126.i = select i1 %20, i64 %23, i64 %16 - %.1.i = tail call i32 @llvm.umax.i32(i32 %18, i32 2) %24 = icmp ult i32 %18, 3 %25 = and i64 %.126.i, 14 %26 = mul nuw nsw i64 %25, 17 %.227.i = select i1 %24, i64 %26, i64 %16 - %.2.i = select i1 %24, i32 3, i32 %.1.i - %27 = icmp eq i32 %.2.i, 3 + %27 = icmp ult i32 %18, 4 %28 = and i64 %.227.i, 254 %29 = mul nuw nsw i64 %28, 257 - %.328.i = select i1 %27, i64 %29, i64 %.227.i - %.3.i = select i1 %27, i32 4, i32 %.2.i - %30 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %27, i64 %29, i64 %16 + %30 = icmp ult i32 %18, 5 %31 = and i64 %.328.i, 65534 %32 = mul nuw nsw i64 %31, 65537 - %.429.i = select i1 %30, i64 %32, i64 %.328.i - %33 = and i32 %.3.i, -2 - %34 = icmp eq i32 %33, 4 - %35 = and i64 %.429.i, 4294967294 - %36 = mul nuw i64 %35, 4294967297 - %.5.i = select i1 %34, i64 %36, i64 %.429.i + %.429.i = select i1 %30, i64 %32, i64 %16 + %33 = icmp ult i32 %18, 6 + %34 = and i64 %.429.i, 4294967294 + %35 = mul nuw i64 %34, 4294967297 + %.5.i = select i1 %33, i64 %35, i64 %16 store i64 %.5.i, ptr %5, align 8, !tbaa !44 %.not = icmp eq i64 %.5.i, 0 br i1 %.not, label %81, label %37 @@ -4698,7 +4690,7 @@ define void @Ifn_NtkAddConstraints(ptr noundef readonly captures(none) %0, ptr n br label %46 46: ; preds = %.lr.ph, %46 - %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %46 ] + %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %45 ] %47 = trunc nuw nsw i64 %indvars.iv to i32 %.reass = add i32 %invariant.op, %47 %48 = getelementptr inbounds nuw [11 x i32], ptr %6, i64 0, i64 %indvars.iv @@ -4731,13 +4723,13 @@ define void @Ifn_NtkAddConstraints(ptr noundef readonly captures(none) %0, ptr n br label %53 53: ; preds = %69, %.lr.ph.us.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph.us.i ], [ %indvars.iv.next.i, %69 ] - %.025.us.i = phi i32 [ 0, %.lr.ph.us.i ], [ %.1.us.i, %69 ] + %indvars.iv.i = phi i64 [ 0, %.lr.ph.us.i ], [ %indvars.iv.next.i, %68 ] + %.025.us.i = phi i32 [ 0, %.lr.ph.us.i ], [ %.1.us.i, %68 ] %indvars.iv.tr.i = trunc i64 %indvars.iv.i to i32 %54 = shl i32 %indvars.iv.tr.i, 1 %55 = ashr i32 %52, %54 %56 = and i32 %55, 3 - switch i32 %56, label %69 [ + switch i32 %56, label %68 [ i32 1, label %62 i32 2, label %57 ] @@ -4756,7 +4748,7 @@ define void @Ifn_NtkAddConstraints(ptr noundef readonly captures(none) %0, ptr n br label %.sink.split.i .sink.split.i: ; preds = %62, %57 - %.sink.i = phi i32 [ %65, %62 ], [ %61, %57 ] + %.sink.i = phi i32 [ %65, %61 ], [ %61, %56 ] %66 = add nsw i32 %.025.us.i, 1 %67 = sext i32 %.025.us.i to i64 %68 = getelementptr inbounds [11 x i32], ptr %4, i64 0, i64 %67 @@ -4764,7 +4756,7 @@ define void @Ifn_NtkAddConstraints(ptr noundef readonly captures(none) %0, ptr n br label %69 69: ; preds = %.sink.split.i, %53 - %.1.us.i = phi i32 [ %.025.us.i, %53 ], [ %66, %.sink.split.i ] + %.1.us.i = phi i32 [ %.025.us.i, %52 ], [ %66, %.sink.split.i ] %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i br i1 %exitcond.not.i, label %._crit_edge.us.i, label %53, !llvm.loop !162 @@ -4844,7 +4836,7 @@ Ifn_NtkAddConstrOne.exit: ; preds = %.lr.ph29.split.i, % br label %106 106: ; preds = %.lr.ph87, %106 - %indvars.iv100 = phi i64 [ 0, %.lr.ph87 ], [ %indvars.iv.next101, %106 ] + %indvars.iv100 = phi i64 [ 0, %.lr.ph87 ], [ %indvars.iv.next101, %105 ] %107 = trunc nuw nsw i64 %indvars.iv100 to i32 %.reass90 = add i32 %invariant.op89, %107 %108 = shl nuw nsw i64 %indvars.iv100, 1 @@ -4908,7 +4900,7 @@ Ifn_NtkAddConstrOne.exit: ; preds = %.lr.ph29.split.i, % br label %.sink.split.i70 .sink.split.i70: ; preds = %126, %121 - %.sink.i71 = phi i32 [ %129, %126 ], [ %125, %121 ] + %.sink.i71 = phi i32 [ %129, %125 ], [ %125, %120 ] %130 = add nsw i32 %.025.us.i68, 1 %131 = sext i32 %.025.us.i68 to i64 %132 = getelementptr inbounds [11 x i32], ptr %3, i64 0, i64 %131 @@ -4916,7 +4908,7 @@ Ifn_NtkAddConstrOne.exit: ; preds = %.lr.ph29.split.i, % br label %133 133: ; preds = %.sink.split.i70, %117 - %.1.us.i72 = phi i32 [ %.025.us.i68, %117 ], [ %130, %.sink.split.i70 ] + %.1.us.i72 = phi i32 [ %.025.us.i68, %116 ], [ %130, %.sink.split.i70 ] %indvars.iv.next.i73 = add nuw nsw i64 %indvars.iv.i67, 1 %exitcond.not.i74 = icmp eq i64 %indvars.iv.next.i73, %wide.trip.count.i63 br i1 %exitcond.not.i74, label %._crit_edge.us.i75, label %117, !llvm.loop !162 @@ -6514,9 +6506,6 @@ declare i32 @llvm.smin.i32(i32, i32) #23 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.ctlz.i32(i32, i1 immarg) #23 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #23 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.usub.sat.i32(i32, i32) #23 diff --git a/bench/abc/optimized/sbdLut.ll b/bench/abc/optimized/sbdLut.ll index 57ccce4bd5e..1328abf5bcb 100644 --- a/bench/abc/optimized/sbdLut.ll +++ b/bench/abc/optimized/sbdLut.ll @@ -519,32 +519,28 @@ define void @Sbd_ProblemCollectSolution(i32 noundef %0, ptr noundef captures(add %41 = select i1 %36, i64 %38, i64 %40 %42 = mul nuw nsw i64 %41, 5 %.126.i = select i1 %39, i64 %42, i64 %35 - %.1.i = tail call i32 @llvm.umax.i32(i32 %12, i32 2) %43 = icmp ult i32 %12, 3 %44 = and i64 %.126.i, 15 %45 = mul nuw nsw i64 %44, 17 %.227.i = select i1 %43, i64 %45, i64 %35 - %.2.i = select i1 %43, i32 3, i32 %.1.i - %46 = icmp eq i32 %.2.i, 3 + %46 = icmp ult i32 %12, 4 %47 = and i64 %.227.i, 255 %48 = mul nuw nsw i64 %47, 257 - %.328.i = select i1 %46, i64 %48, i64 %.227.i - %.3.i = select i1 %46, i32 4, i32 %.2.i - %49 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %46, i64 %48, i64 %35 + %49 = icmp ult i32 %12, 5 %50 = and i64 %.328.i, 65535 %51 = mul nuw nsw i64 %50, 65537 - %.429.i = select i1 %49, i64 %51, i64 %.328.i - %52 = and i32 %.3.i, -2 - %53 = icmp eq i32 %52, 4 - %54 = and i64 %.429.i, 4294967295 - %55 = mul nuw i64 %54, 4294967297 - %.5.i = select i1 %53, i64 %55, i64 %.429.i + %.429.i = select i1 %49, i64 %51, i64 %35 + %52 = icmp ult i32 %12, 6 + %53 = and i64 %.429.i, 4294967295 + %54 = mul nuw i64 %53, 4294967297 + %.5.i = select i1 %52, i64 %54, i64 %35 store i64 %.5.i, ptr %9, align 8, !tbaa !30 br label %.loopexit 56: ; preds = %.lr.ph41, %64 - %indvars.iv53 = phi i64 [ 0, %.lr.ph41 ], [ %indvars.iv.next54, %64 ] - %indvars.iv51 = phi i64 [ %15, %.lr.ph41 ], [ %indvars.iv.next52, %64 ] + %indvars.iv53 = phi i64 [ 0, %.lr.ph41 ], [ %indvars.iv.next54, %63 ] + %indvars.iv51 = phi i64 [ %15, %.lr.ph41 ], [ %indvars.iv.next52, %63 ] %57 = getelementptr inbounds i32, ptr %.val, i64 %indvars.iv51 %58 = load i32, ptr %57, align 4, !tbaa !12 %59 = and i32 %58, 1 @@ -1023,9 +1019,6 @@ declare void @free(ptr allocptr noundef captures(none)) local_unnamed_addr #10 ; Function Attrs: nofree nounwind declare noundef i32 @puts(ptr noundef readonly captures(none)) local_unnamed_addr #11 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #12 - ; 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) #13 @@ -1044,12 +1037,11 @@ attributes #8 = { mustprogress nofree nounwind willreturn allockind("alloc,unini attributes #9 = { mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #10 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #11 = { nofree nounwind } -attributes #12 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } -attributes #13 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } -attributes #14 = { nocallback nofree nounwind willreturn memory(argmem: write) } -attributes #15 = { nounwind } -attributes #16 = { nounwind allocsize(0) } -attributes #17 = { nounwind allocsize(1) } +attributes #12 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } +attributes #13 = { nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #14 = { nounwind } +attributes #15 = { nounwind allocsize(0) } +attributes #16 = { nounwind allocsize(1) } !llvm.module.flags = !{!0, !1, !2} diff --git a/bench/abc/optimized/sfmSat.ll b/bench/abc/optimized/sfmSat.ll index 42f5a170387..1b7bd21cb1b 100644 --- a/bench/abc/optimized/sfmSat.ll +++ b/bench/abc/optimized/sfmSat.ll @@ -2190,12 +2190,12 @@ define i64 @Sfm_ComputeInterpolant2(ptr noundef captures(none) %0) local_unnamed store i32 0, ptr %4, align 4, !tbaa !28 %5 = call i32 @Sfm_ComputeInterpolantInt(ptr noundef %0, ptr noundef nonnull %2) switch i32 %5, label %7 [ - i32 0, label %55 + i32 0, label %54 i32 1, label %6 ] 6: ; preds = %1 - br label %55 + br label %54 7: ; preds = %1 %8 = load i64, ptr %2, align 16, !tbaa !55 @@ -2211,59 +2211,55 @@ define i64 @Sfm_ComputeInterpolant2(ptr noundef captures(none) %0) local_unnamed %17 = select i1 %12, i64 %14, i64 %16 %18 = mul nuw nsw i64 %17, 5 %.126.i = select i1 %15, i64 %18, i64 %8 - %.1.i = tail call i32 @llvm.umax.i32(i32 %.val13, i32 2) %19 = icmp ult i32 %.val13, 3 %20 = and i64 %.126.i, 15 %21 = mul nuw nsw i64 %20, 17 %.227.i = select i1 %19, i64 %21, i64 %8 - %.2.i = select i1 %19, i32 3, i32 %.1.i - %22 = icmp eq i32 %.2.i, 3 + %22 = icmp ult i32 %.val13, 4 %23 = and i64 %.227.i, 255 %24 = mul nuw nsw i64 %23, 257 - %.328.i = select i1 %22, i64 %24, i64 %.227.i - %.3.i = select i1 %22, i32 4, i32 %.2.i - %25 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %22, i64 %24, i64 %8 + %25 = icmp ult i32 %.val13, 5 %26 = and i64 %.328.i, 65535 %27 = mul nuw nsw i64 %26, 65537 - %.429.i = select i1 %25, i64 %27, i64 %.328.i - %28 = and i32 %.3.i, -2 - %29 = icmp eq i32 %28, 4 - %30 = and i64 %.429.i, 4294967295 - %31 = mul nuw i64 %30, 4294967297 - %.5.i = select i1 %29, i64 %31, i64 %.429.i - %32 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %33 = load i64, ptr %32, align 8, !tbaa !55 - %34 = trunc i64 %33 to i1 - %35 = select i1 %34, i64 3, i64 0 - %36 = and i64 %33, 3 - %37 = select i1 %12, i64 %35, i64 %36 - %38 = mul nuw nsw i64 %37, 5 - %.126.i14 = select i1 %15, i64 %38, i64 %33 - %39 = and i64 %.126.i14, 15 - %40 = mul nuw nsw i64 %39, 17 - %.227.i16 = select i1 %19, i64 %40, i64 %33 - %41 = and i64 %.227.i16, 255 - %42 = mul nuw nsw i64 %41, 257 - %.328.i18 = select i1 %22, i64 %42, i64 %.227.i16 - %43 = and i64 %.328.i18, 65535 - %44 = mul nuw nsw i64 %43, 65537 - %.429.i20 = select i1 %25, i64 %44, i64 %.328.i18 - %45 = and i64 %.429.i20, 4294967295 - %46 = mul nuw i64 %45, 4294967297 - %.5.i21 = select i1 %29, i64 %46, i64 %.429.i20 - %47 = xor i64 %.5.i, -1 - %48 = call fastcc i64 @Abc_Tt6Isop(i64 noundef %.5.i21, i64 noundef %47, i32 noundef %.val13, ptr noundef %3) - %49 = xor i64 %.5.i21, -1 - %50 = call fastcc i64 @Abc_Tt6Isop(i64 noundef %.5.i, i64 noundef %49, i32 noundef %.val13, ptr noundef %4) - %51 = load i32, ptr %3, align 4, !tbaa !28 - %52 = load i32, ptr %4, align 4, !tbaa !28 - %.not = icmp sgt i32 %51, %52 - %53 = xor i64 %50, -1 - %54 = select i1 %.not, i64 %53, i64 %48 - br label %55 - -55: ; preds = %1, %7, %6 - %.0 = phi i64 [ -8690466094656961759, %6 ], [ %54, %7 ], [ 1311768465173141112, %1 ] + %.429.i = select i1 %25, i64 %27, i64 %8 + %28 = icmp ult i32 %.val13, 6 + %29 = and i64 %.429.i, 4294967295 + %30 = mul nuw i64 %29, 4294967297 + %.5.i = select i1 %28, i64 %30, i64 %8 + %31 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %32 = load i64, ptr %31, align 8, !tbaa !55 + %33 = trunc i64 %32 to i1 + %34 = select i1 %33, i64 3, i64 0 + %35 = and i64 %32, 3 + %36 = select i1 %12, i64 %34, i64 %35 + %37 = mul nuw nsw i64 %36, 5 + %.126.i14 = select i1 %15, i64 %37, i64 %32 + %38 = and i64 %.126.i14, 15 + %39 = mul nuw nsw i64 %38, 17 + %.227.i15 = select i1 %19, i64 %39, i64 %32 + %40 = and i64 %.227.i15, 255 + %41 = mul nuw nsw i64 %40, 257 + %.328.i16 = select i1 %22, i64 %41, i64 %32 + %42 = and i64 %.328.i16, 65535 + %43 = mul nuw nsw i64 %42, 65537 + %.429.i17 = select i1 %25, i64 %43, i64 %32 + %44 = and i64 %.429.i17, 4294967295 + %45 = mul nuw i64 %44, 4294967297 + %.5.i18 = select i1 %28, i64 %45, i64 %32 + %46 = xor i64 %.5.i, -1 + %47 = call fastcc i64 @Abc_Tt6Isop(i64 noundef %.5.i18, i64 noundef %46, i32 noundef %.val13, ptr noundef %3) + %48 = xor i64 %.5.i18, -1 + %49 = call fastcc i64 @Abc_Tt6Isop(i64 noundef %.5.i, i64 noundef %48, i32 noundef %.val13, ptr noundef %4) + %50 = load i32, ptr %3, align 4, !tbaa !28 + %51 = load i32, ptr %4, align 4, !tbaa !28 + %.not = icmp sgt i32 %50, %51 + %52 = xor i64 %49, -1 + %53 = select i1 %.not, i64 %52, i64 %47 + br label %54 + +54: ; preds = %1, %7, %6 + %.0 = phi i64 [ -8690466094656961759, %6 ], [ %53, %7 ], [ 1311768465173141112, %1 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #10 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #10 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #10 @@ -2541,9 +2537,6 @@ declare noundef i32 @puts(ptr noundef readonly captures(none)) local_unnamed_add ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #8 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #9 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #9 diff --git a/bench/abc/optimized/utilIsop.ll b/bench/abc/optimized/utilIsop.ll index f6ecf6d8bf8..fb2197038ec 100644 --- a/bench/abc/optimized/utilIsop.ll +++ b/bench/abc/optimized/utilIsop.ll @@ -2033,8 +2033,8 @@ Abc_TtFindFirstBit.exit: ; preds = %68, %42 br i1 %exitcond.not, label %.lr.ph324, label %.lr.ph, !llvm.loop !56 .lr.ph324: ; preds = %.lr.ph, %.lr.ph324 - %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph324 ], [ 0, %.lr.ph ] - %.0323 = phi i32 [ %spec.select, %.lr.ph324 ], [ 0, %.lr.ph ] + %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph323 ], [ 0, %.lr.ph ] + %.0323 = phi i32 [ %spec.select, %.lr.ph323 ], [ 0, %.lr.ph ] %76 = trunc nuw nsw i64 %indvars.iv to i32 %77 = shl nuw i32 1, %76 %78 = xor i32 %77, %.0.i @@ -2055,8 +2055,8 @@ Abc_TtFindFirstBit.exit: ; preds = %68, %42 br i1 %exitcond377.not, label %._crit_edge, label %.lr.ph324, !llvm.loop !57 ._crit_edge: ; preds = %.lr.ph324, %Abc_TtFindFirstBit.exit - %.0162.lcssa401 = phi i32 [ 0, %Abc_TtFindFirstBit.exit ], [ %74, %.lr.ph324 ] - %.0.lcssa = phi i32 [ 0, %Abc_TtFindFirstBit.exit ], [ %spec.select, %.lr.ph324 ] + %.0162.lcssa401 = phi i32 [ 0, %Abc_TtFindFirstBit.exit ], [ %74, %.lr.ph323 ] + %.0.lcssa = phi i32 [ 0, %Abc_TtFindFirstBit.exit ], [ %spec.select, %.lr.ph323 ] %89 = icmp eq i32 %.0.lcssa, %3 br i1 %89, label %90, label %104 @@ -2085,9 +2085,9 @@ Abc_TtFindFirstBit.exit: ; preds = %68, %42 br i1 %brmerge, label %.preheader308, label %.lr.ph338 .lr.ph338: ; preds = %104, %.loopexit307 - %indvars.iv385 = phi i64 [ %108, %.loopexit307 ], [ 0, %104 ] - %indvars.iv378 = phi i64 [ %indvars.iv.next379, %.loopexit307 ], [ 1, %104 ] - %.1177335 = phi i32 [ %.2178, %.loopexit307 ], [ -1, %104 ] + %indvars.iv385 = phi i64 [ %108, %.loopexit306 ], [ 0, %104 ] + %indvars.iv378 = phi i64 [ %indvars.iv.next379, %.loopexit306 ], [ 1, %104 ] + %.1177335 = phi i32 [ %.2178, %.loopexit306 ], [ -1, %104 ] %106 = getelementptr inbounds nuw [16 x i32], ptr %10, i64 0, i64 %indvars.iv385 %107 = load i32, ptr %106, align 4, !tbaa !7 %.not191 = icmp eq i32 %107, 0 @@ -2103,8 +2103,8 @@ Abc_TtFindFirstBit.exit: ; preds = %68, %42 br label %112 112: ; preds = %.lr.ph329, %126 - %indvars.iv380 = phi i64 [ %indvars.iv378, %.lr.ph329 ], [ %indvars.iv.next381, %126 ] - %.0169.in327 = phi i32 [ %110, %.lr.ph329 ], [ %.pre-phi, %126 ] + %indvars.iv380 = phi i64 [ %indvars.iv378, %.lr.ph328 ], [ %indvars.iv.next381, %126 ] + %.0169.in327 = phi i32 [ %110, %.lr.ph328 ], [ %.pre-phi, %126 ] %113 = getelementptr inbounds nuw [16 x i32], ptr %10, i64 0, i64 %indvars.iv380 %114 = load i32, ptr %113, align 4, !tbaa !7 %.not192 = icmp eq i32 %114, 0 @@ -2130,14 +2130,14 @@ Abc_TtFindFirstBit.exit: ; preds = %68, %42 br i1 %.not193, label %.loopexit307, label %126 126: ; preds = %._crit_edge398, %115 - %.pre-phi = phi i32 [ %.pre399, %._crit_edge398 ], [ %125, %115 ] + %.pre-phi = phi i32 [ %.pre399, %._crit_edge397 ], [ %125, %115 ] %indvars.iv.next381 = add nuw nsw i64 %indvars.iv380, 1 %exitcond384.not = icmp eq i64 %indvars.iv.next381, %wide.trip.count383 br i1 %exitcond384.not, label %.loopexit307, label %112, !llvm.loop !58 .loopexit307: ; preds = %126, %115, %.lr.ph338 - %.2178 = phi i32 [ %.1177335, %.lr.ph338 ], [ %.1177335, %126 ], [ %125, %115 ] - %.2168 = phi i32 [ -1, %.lr.ph338 ], [ -1, %126 ], [ %110, %115 ] + %.2178 = phi i32 [ %.1177335, %.lr.ph337 ], [ %.1177335, %126 ], [ %125, %115 ] + %.2168 = phi i32 [ -1, %.lr.ph337 ], [ -1, %126 ], [ %110, %115 ] %127 = icmp slt i64 %108, %36 %128 = icmp eq i32 %.2168, -1 %129 = and i1 %127, %128 @@ -2152,7 +2152,7 @@ Abc_TtFindFirstBit.exit: ; preds = %68, %42 br i1 %29, label %.lr.ph353, label %._crit_edge354 .lr.ph353: ; preds = %.preheader308, %133 - %indvars.iv390 = phi i64 [ %indvars.iv.next391, %133 ], [ 0, %.preheader308 ] + %indvars.iv390 = phi i64 [ %indvars.iv.next391, %133 ], [ 0, %.preheader307 ] %131 = getelementptr inbounds nuw [16 x i32], ptr %10, i64 0, i64 %indvars.iv390 %132 = load i32, ptr %131, align 4, !tbaa !7 %.not189 = icmp eq i32 %132, 0 @@ -2168,7 +2168,7 @@ Abc_TtFindFirstBit.exit: ; preds = %68, %42 br label %._crit_edge354 ._crit_edge354: ; preds = %133, %._crit_edge354.loopexit.split.loop.exit, %.preheader308 - %.3173.lcssa = phi i32 [ 0, %.preheader308 ], [ %134, %._crit_edge354.loopexit.split.loop.exit ], [ %3, %133 ] + %.3173.lcssa = phi i32 [ 0, %.preheader307 ], [ %134, %._crit_edge353.loopexit.split.loop.exit ], [ %3, %133 ] %135 = and i32 %.0.i, 63 %136 = zext nneg i32 %135 to i64 %137 = shl nuw i64 1, %136 @@ -2634,8 +2634,8 @@ Abc_TtCheckWithCubeNeg2Pos.exit: ; preds = %335, %290, %348, %3 br label %376 376: ; preds = %Abc_TtExpandCubePos2Neg.exit, %Abc_TtCheckWithCubeNeg2Pos.exit, %Abc_TtExpandCubeNeg2Pos.exit, %.lr.ph349 - %.3165 = phi i32 [ %.1163344, %.lr.ph349 ], [ %329, %Abc_TtExpandCubePos2Neg.exit ], [ %374, %Abc_TtExpandCubeNeg2Pos.exit ], [ %.1163344, %Abc_TtCheckWithCubeNeg2Pos.exit ] - %.4 = phi i32 [ %.2347, %.lr.ph349 ], [ %.2347, %Abc_TtExpandCubePos2Neg.exit ], [ %.2347, %Abc_TtExpandCubeNeg2Pos.exit ], [ %375, %Abc_TtCheckWithCubeNeg2Pos.exit ] + %.3165 = phi i32 [ %.1163344, %.lr.ph348 ], [ %329, %Abc_TtExpandCubePos2Neg.exit ], [ %374, %Abc_TtExpandCubeNeg2Pos.exit ], [ %.1163344, %Abc_TtCheckWithCubeNeg2Pos.exit ] + %.4 = phi i32 [ %.2347, %.lr.ph348 ], [ %.2347, %Abc_TtExpandCubePos2Neg.exit ], [ %.2347, %Abc_TtExpandCubeNeg2Pos.exit ], [ %375, %Abc_TtCheckWithCubeNeg2Pos.exit ] %377 = add nuw nsw i32 %.4174341, 1 %exitcond389.not = icmp eq i32 %377, %3 br i1 %exitcond389.not, label %.lr.ph.preheader.i271, label %.lr.ph349, !llvm.loop !73 @@ -2687,7 +2687,7 @@ Abc_TtSharp.exit: ; preds = %.lr.ph.i279 br label %.loopexit312 .loopexit312: ; preds = %.loopexit312.loopexit, %28 - %394 = phi i64 [ 0, %28 ], [ %393, %.loopexit312.loopexit ] + %394 = phi i64 [ 0, %28 ], [ %393, %.loopexit311.loopexit ] %395 = load i64, ptr %2, align 8, !tbaa !3 %396 = icmp eq i32 %3, 0 %397 = trunc i64 %395 to i1 @@ -2705,16 +2705,14 @@ Abc_TtSharp.exit: ; preds = %.lr.ph.i279 %407 = and i64 %.227.i, 255 %408 = mul nuw nsw i64 %407, 257 %.328.i = select i1 %406, i64 %408, i64 %395 - %.3.i = call i32 @llvm.umax.i32(i32 %3, i32 4) %409 = icmp ult i32 %3, 5 %410 = and i64 %.328.i, 65535 %411 = mul nuw nsw i64 %410, 65537 %.429.i = select i1 %409, i64 %411, i64 %395 - %412 = and i32 %.3.i, -2 - %413 = icmp eq i32 %412, 4 - %414 = and i64 %.429.i, 4294967295 - %415 = mul nuw i64 %414, 4294967297 - %.5.i = select i1 %413, i64 %415, i64 %.429.i + %412 = icmp ult i32 %3, 6 + %413 = and i64 %.429.i, 4294967295 + %414 = mul nuw i64 %413, 4294967297 + %.5.i = select i1 %412, i64 %414, i64 %395 store i64 %.5.i, ptr %2, align 8, !tbaa !3 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #20 call void @llvm.lifetime.end.p0(i64 8192, ptr nonnull %9) #20 @@ -4757,9 +4755,6 @@ declare i32 @llvm.smax.i32(i32, i32) #16 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #18 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #16 - ; 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) #19 diff --git a/bench/abc/optimized/wlcBlast.ll b/bench/abc/optimized/wlcBlast.ll index d2ae31290ae..c84a582ecd2 100644 --- a/bench/abc/optimized/wlcBlast.ll +++ b/bench/abc/optimized/wlcBlast.ll @@ -4214,14 +4214,10 @@ define void @Wlc_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) %22 = icmp slt i32 %3, 6 %23 = icmp eq i32 %3, 0 %24 = icmp ult i32 %3, 2 - %.1.i = tail call i32 @llvm.umax.i32(i32 %3, i32 2) %25 = icmp ult i32 %3, 3 - %.2.i = select i1 %25, i32 3, i32 %.1.i - %26 = icmp eq i32 %.2.i, 3 - %.3.i = select i1 %26, i32 4, i32 %.2.i - %27 = icmp eq i32 %.3.i, 4 - %28 = and i32 %.3.i, -2 - %29 = icmp eq i32 %28, 4 + %26 = icmp ult i32 %3, 4 + %26 = icmp ult i32 %3, 5 + %28 = icmp ult i32 %3, 6 %.phi.trans.insert.i = getelementptr inbounds nuw i8, ptr %5, i64 8 %smax = tail call i32 @llvm.smax.i32(i32 %20, i32 1) br label %30 @@ -4291,13 +4287,13 @@ define void @Wlc_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) %.227.i = select i1 %25, i64 %61, i64 %54 %62 = and i64 %.227.i, 255 %63 = mul nuw nsw i64 %62, 257 - %.328.i = select i1 %26, i64 %63, i64 %.227.i + %.328.i = select i1 %26, i64 %63, i64 %53 %64 = and i64 %.328.i, 65535 %65 = mul nuw nsw i64 %64, 65537 - %.429.i = select i1 %27, i64 %65, i64 %.328.i + %.429.i = select i1 %27, i64 %65, i64 %53 %66 = and i64 %.429.i, 4294967295 %67 = mul nuw i64 %66, 4294967297 - %.5.i = select i1 %29, i64 %67, i64 %.429.i + %.5.i = select i1 %28, i64 %67, i64 %54 store i64 %.5.i, ptr %17, align 8, !tbaa !102 br label %._crit_edge42.thread48 @@ -4330,7 +4326,7 @@ define void @Wlc_BlastTable(ptr noundef %0, ptr noundef readonly captures(none) br label %Vec_IntGrow.exit.i Vec_IntGrow.exit.i: ; preds = %78, %76 - %80 = phi ptr [ %77, %76 ], [ %79, %78 ] + %80 = phi ptr [ %77, %75 ], [ %79, %77 ] store ptr %80, ptr %.phi.trans.insert.i, align 8, !tbaa !22 store i32 16, ptr %5, align 8, !tbaa !21 br label %Vec_IntPush.exit @@ -4352,13 +4348,13 @@ Vec_IntGrow.exit.i: ; preds = %78, %76 br label %90 90: ; preds = %88, %86 - %91 = phi ptr [ %87, %86 ], [ %89, %88 ] + %91 = phi ptr [ %87, %85 ], [ %89, %87 ] store ptr %91, ptr %.phi.trans.insert.i, align 8, !tbaa !22 store i32 %82, ptr %5, align 8, !tbaa !21 br label %Vec_IntPush.exit Vec_IntPush.exit: ; preds = %.Vec_IntGrow.exit10_crit_edge.i, %Vec_IntGrow.exit.i, %90 - %92 = phi ptr [ %.pre.i, %.Vec_IntGrow.exit10_crit_edge.i ], [ %91, %90 ], [ %80, %Vec_IntGrow.exit.i ] + %92 = phi ptr [ %.pre.i, %.Vec_IntGrow.exit10_crit_edge.i ], [ %91, %89 ], [ %80, %Vec_IntGrow.exit.i ] %93 = load i32, ptr %18, align 4, !tbaa !23 %94 = add nsw i32 %93, 1 store i32 %94, ptr %18, align 4, !tbaa !23 @@ -4423,32 +4419,27 @@ define void @Wlc_BlastLut(ptr noundef %0, i64 noundef %1, ptr noundef %2, i32 no %15 = icmp eq i32 %3, 0 %16 = trunc i64 %1 to i1 %17 = select i1 %16, i64 3, i64 0 - %.0.i = tail call i32 @llvm.umax.i32(i32 range(i32 -2147483648, 6) %3, i32 1) %18 = icmp ult i32 %3, 2 %19 = and i64 %1, 3 %20 = select i1 %15, i64 %17, i64 %19 %21 = mul nuw nsw i64 %20, 5 %.126.i = select i1 %18, i64 %21, i64 %1 - %.1.i = select i1 %18, i32 2, i32 %.0.i - %22 = icmp eq i32 %.1.i, 2 + %22 = icmp ult i32 %3, 3 %23 = and i64 %.126.i, 15 %24 = mul nuw nsw i64 %23, 17 - %.227.i = select i1 %22, i64 %24, i64 %.126.i - %.2.i = select i1 %22, i32 3, i32 %.1.i - %25 = icmp eq i32 %.2.i, 3 + %.227.i = select i1 %22, i64 %24, i64 %1 + %25 = icmp ult i32 %3, 4 %26 = and i64 %.227.i, 255 %27 = mul nuw nsw i64 %26, 257 - %.328.i = select i1 %25, i64 %27, i64 %.227.i - %.3.i = select i1 %25, i32 4, i32 %.2.i - %28 = icmp eq i32 %.3.i, 4 + %.328.i = select i1 %25, i64 %27, i64 %1 + %28 = icmp ult i32 %3, 5 %29 = and i64 %.328.i, 65535 %30 = mul nuw nsw i64 %29, 65537 - %.429.i = select i1 %28, i64 %30, i64 %.328.i - %31 = and i32 %.3.i, -2 - %32 = icmp eq i32 %31, 4 - %33 = and i64 %.429.i, 4294967295 - %34 = mul nuw i64 %33, 4294967297 - %.5.i = select i1 %32, i64 %34, i64 %.429.i + %.429.i = select i1 %28, i64 %30, i64 %1 + %31 = icmp ult i32 %3, 6 + %32 = and i64 %.429.i, 4294967295 + %33 = mul nuw i64 %32, 4294967297 + %.5.i = select i1 %31, i64 %33, i64 %1 store i64 %.5.i, ptr %7, align 8, !tbaa !102 br label %35 @@ -25617,9 +25608,6 @@ declare i32 @llvm.abs.i32(i32, i1 immarg) #20 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.ctlz.i32(i32, i1 immarg) #20 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.umax.i32(i32, i32) #20 - attributes #0 = { nofree norecurse nosync nounwind memory(argmem: read) 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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #2 = { 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" } diff --git a/bench/boost/optimized/collator.ll b/bench/boost/optimized/collator.ll index c2e6b5df85a..1c5242fce8f 100644 --- a/bench/boost/optimized/collator.ll +++ b/bench/boost/optimized/collator.ll @@ -2863,9 +2863,8 @@ define linkonce_odr hidden noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5 %4 = alloca %"class.std::__cxx11::basic_string", align 8 %5 = alloca %"class.std::__cxx11::basic_string", align 8 %6 = alloca %"class.std::allocator", align 1 - %7 = icmp slt i32 %1, 0 - %..i = tail call i32 @llvm.umin.i32(i32 %1, i32 4) - %.0.i = select i1 %7, i32 0, i32 %..i + %7 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %..i = tail call noundef i32 @llvm.umin.i32(i32 %7, i32 4) %8 = getelementptr inbounds nuw i8, ptr %0, i64 256 %9 = zext nneg i32 %.0.i to i64 %10 = getelementptr inbounds nuw [5 x %"class.boost::thread_specific_ptr"], ptr %8, i64 0, i64 %9 @@ -5590,9 +5589,8 @@ define linkonce_odr hidden noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5 %4 = alloca %"class.std::__cxx11::basic_string", align 8 %5 = alloca %"class.std::__cxx11::basic_string", align 8 %6 = alloca %"class.std::allocator", align 1 - %7 = icmp slt i32 %1, 0 - %..i = tail call i32 @llvm.umin.i32(i32 %1, i32 4) - %.0.i = select i1 %7, i32 0, i32 %..i + %7 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %..i = tail call noundef i32 @llvm.umin.i32(i32 %7, i32 4) %8 = getelementptr inbounds nuw i8, ptr %0, i64 240 %9 = zext nneg i32 %.0.i to i64 %10 = getelementptr inbounds nuw [5 x %"class.boost::thread_specific_ptr"], ptr %8, i64 0, i64 %9 @@ -6054,6 +6052,9 @@ declare void @llvm.assume(i1 noundef) #20 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #21 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #21 + ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #22 diff --git a/bench/cmake/optimized/zstd_compress.ll b/bench/cmake/optimized/zstd_compress.ll index 5606954a264..c32caf5d1f8 100644 --- a/bench/cmake/optimized/zstd_compress.ll +++ b/bench/cmake/optimized/zstd_compress.ll @@ -2248,27 +2248,20 @@ define dso_local void @ZSTD_adjustCParams(ptr dead_on_unwind noalias writable wr %.sroa.14.0.copyload13 = load i32, ptr %.sroa.14.0..sroa_idx12, align 4 %.sroa.16.0..sroa_idx14 = getelementptr inbounds nuw i8, ptr %1, i64 24 %.sroa.16.0.copyload15 = load i32, ptr %.sroa.16.0..sroa_idx14, align 8 - %4 = icmp slt i32 %.sroa.0.0.copyload3, 10 - %spec.select = tail call i32 @llvm.umin.i32(i32 %.sroa.0.0.copyload3, i32 31) - %.sroa.0.0 = select i1 %4, i32 10, i32 %spec.select - %5 = icmp slt i32 %.sroa.6.0.copyload5, 6 - %spec.select36 = tail call i32 @llvm.umin.i32(i32 %.sroa.6.0.copyload5, i32 30) - %.sroa.6.0 = select i1 %5, i32 6, i32 %spec.select36 - %6 = icmp slt i32 %.sroa.8.0.copyload7, 6 - %spec.select37 = tail call i32 @llvm.umin.i32(i32 %.sroa.8.0.copyload7, i32 30) - %.sroa.8.0 = select i1 %6, i32 6, i32 %spec.select37 - %7 = icmp slt i32 %.sroa.10.0.copyload9, 1 - %spec.select38 = tail call i32 @llvm.umin.i32(i32 %.sroa.10.0.copyload9, i32 30) - %.sroa.10.0 = select i1 %7, i32 1, i32 %spec.select38 - %8 = icmp slt i32 %.sroa.12.0.copyload11, 3 - %spec.select39 = tail call i32 @llvm.umin.i32(i32 %.sroa.12.0.copyload11, i32 7) - %.sroa.12.0 = select i1 %8, i32 3, i32 %spec.select39 - %9 = icmp slt i32 %.sroa.14.0.copyload13, 0 - %spec.select40 = tail call i32 @llvm.umin.i32(i32 %.sroa.14.0.copyload13, i32 131072) - %.sroa.14.0 = select i1 %9, i32 0, i32 %spec.select40 - %10 = icmp slt i32 %.sroa.16.0.copyload15, 1 - %spec.select41 = tail call i32 @llvm.umin.i32(i32 %.sroa.16.0.copyload15, i32 9) - %.sroa.16.0 = select i1 %10, i32 1, i32 %spec.select41 + %4 = tail call i32 @llvm.smax.i32(i32 %.sroa.0.0.copyload3, i32 10) + %spec.select = tail call i32 @llvm.umin.i32(i32 %4, i32 31) + %5 = tail call i32 @llvm.smax.i32(i32 %.sroa.6.0.copyload5, i32 6) + %.sroa.6.0 = tail call i32 @llvm.umin.i32(i32 %5, i32 30) + %spec.select36 = tail call i32 @llvm.smax.i32(i32 %.sroa.8.0.copyload7, i32 6) + %.sroa.8.0 = tail call i32 @llvm.umin.i32(i32 %spec.select36, i32 30) + %7 = tail call i32 @llvm.smax.i32(i32 %.sroa.10.0.copyload9, i32 1) + %spec.select37 = tail call i32 @llvm.umin.i32(i32 %7, i32 30) + %8 = tail call i32 @llvm.smax.i32(i32 %.sroa.12.0.copyload11, i32 3) + %.sroa.12.0 = tail call i32 @llvm.umin.i32(i32 %8, i32 7) + %spec.select38 = tail call i32 @llvm.smax.i32(i32 %.sroa.14.0.copyload13, i32 0) + %.sroa.14.0 = tail call i32 @llvm.umin.i32(i32 %spec.select38, i32 131072) + %8 = tail call i32 @llvm.smax.i32(i32 %.sroa.16.0.copyload15, i32 1) + %spec.select39 = tail call i32 @llvm.umin.i32(i32 %10, i32 9) store i32 %.sroa.12.0, ptr %.sroa.12.0..sroa_idx10, align 8, !tbaa !49 store i32 %.sroa.14.0, ptr %.sroa.14.0..sroa_idx12, align 4, !tbaa !49 %11 = icmp eq i64 %2, 0 @@ -2320,7 +2313,7 @@ define dso_local void @ZSTD_adjustCParams(ptr dead_on_unwind noalias writable wr ZSTD_dictAndWindowLog.exit.i: ; preds = %33, %31, %26, %.thread.i %.0.i.i = phi i32 [ %24, %.thread.i ], [ %37, %33 ], [ %24, %26 ], [ 31, %31 ] - %38 = icmp samesign ugt i32 %.sroa.16.0, 5 + %38 = icmp sgt i32 %.sroa.16.0.copyload15, 5 %.neg.i.i = sext i1 %38 to i32 %39 = add nsw i32 %.sroa.6.0, %.neg.i.i %40 = add nuw nsw i32 %.0.i.i, 1 @@ -3065,15 +3058,15 @@ ZSTD_getCParamRowSize.exit.i.preheader: ; preds = %1, %ZSTD_estimateCC %5 = icmp slt i32 %.014, 0 %spec.select40.i = tail call i32 @llvm.umax.i32(i32 %.014, i32 -131072) %6 = sub nsw i32 0, %spec.select40.i - %narrow.i = tail call i32 @llvm.umin.i32(i32 %.014, i32 22) - %narrow = select i1 %5, i32 0, i32 %narrow.i + %narrow.i = tail call i32 @llvm.smax.i32(i32 %.014, i32 0) + %narrow = tail call i32 @llvm.umin.i32(i32 %narrow.i, i32 22) %narrow16 = select i1 %4, i32 3, i32 %narrow %.0.i = zext nneg i32 %narrow16 to i64 br label %ZSTD_getCParamRowSize.exit.i ZSTD_getCParamRowSize.exit.i: ; preds = %ZSTD_getCParamRowSize.exit.i.preheader, %39 - %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %39 ], [ 0, %ZSTD_getCParamRowSize.exit.i.preheader ] - %.09.i = phi i64 [ %40, %39 ], [ 0, %ZSTD_getCParamRowSize.exit.i.preheader ] + %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %40 ], [ 0, %ZSTD_getCParamRowSize.exit.i.preheader ] + %.09.i = phi i64 [ %40, %40 ], [ 0, %ZSTD_getCParamRowSize.exit.i.preheader ] call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %2) #28 %7 = getelementptr inbounds nuw [4 x i64], ptr @ZSTD_estimateCCtxSize_internal.srcSizeTiers, i64 0, i64 %indvars.iv.i %8 = load i64, ptr %7, align 8, !tbaa !130 @@ -3135,7 +3128,7 @@ ZSTD_getCParamRowSize.exit.i: ; preds = %ZSTD_getCParamRowSi br label %ZSTD_getCParams_internal.exit ZSTD_getCParams_internal.exit: ; preds = %27, %31 - %.sroa.11.2.i = phi i32 [ %.sroa.11.0.i, %27 ], [ %spec.store.select44.i.i, %31 ] + %.sroa.11.2.i = phi i32 [ %.sroa.11.0.i, %28 ], [ %spec.store.select44.i.i, %32 ] %spec.store.select42.i.i = tail call i32 @llvm.umax.i32(i32 %28, i32 10) %.sroa.4.0.i = select i1 %5, i32 %6, i32 %.sroa.4.0.copyload.i store i32 %spec.store.select42.i.i, ptr %2, align 8, !tbaa !49, !alias.scope !131 @@ -3154,7 +3147,7 @@ ZSTD_getCParams_internal.exit: ; preds = %27, %31 br label %39 39: ; preds = %37, %ZSTD_getCParams_internal.exit - %40 = phi i64 [ %38, %37 ], [ %.09.i, %ZSTD_getCParams_internal.exit ] + %40 = phi i64 [ %38, %38 ], [ %.09.i, %ZSTD_getCParams_internal.exit ] call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %2) #28 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, 4 diff --git a/bench/cpython/optimized/obmalloc.ll b/bench/cpython/optimized/obmalloc.ll index 2f8121d1f73..9dc6d81ba85 100644 --- a/bench/cpython/optimized/obmalloc.ll +++ b/bench/cpython/optimized/obmalloc.ll @@ -22745,62 +22745,57 @@ _mi_arena_memid_is_suitable.exit.i: ; preds = %60, %52, %.lr.ph.i mi_option_get_clamp.exit.i.i: ; preds = %146, %.loopexit %147 = load i64, ptr getelementptr inbounds nuw (i8, ptr @options, i64 672), align 16, !tbaa !107 - %148 = icmp slt i64 %147, 8 - %149 = tail call i64 @llvm.umin.i64(i64 %147, i64 1024) - %spec.select.i.i = select i1 %148, i64 8, i64 %149 - %.not.i.i22 = icmp eq i64 %spec.select.i.i, 0 - br i1 %.not.i.i22, label %mi_segment_try_reclaim.exit.i, label %.lr.ph.i.i - -.lr.ph.i.i: ; preds = %mi_option_get_clamp.exit.i.i - %150 = getelementptr inbounds nuw i8, ptr %3, i64 912 - %151 = getelementptr inbounds nuw i8, ptr %3, i64 896 - br label %152 - -152: ; preds = %select.unfold.i.i, %.lr.ph.i.i - %.in.i.i = phi i64 [ %spec.select.i.i, %.lr.ph.i.i ], [ %153, %select.unfold.i.i ] - %153 = add nsw i64 %.in.i.i, -1 - %154 = load ptr, ptr %150, align 8, !tbaa !261 - %155 = getelementptr inbounds nuw i8, ptr %154, i64 64 - %156 = load atomic i64, ptr %155 monotonic, align 64 - %157 = icmp ult i64 %156, 33554432 - br i1 %157, label %158, label %mi_abandoned_visited_revisit.exit.thread.i.i.i, !prof !49 - -158: ; preds = %152 - %159 = load atomic i64, ptr %154 monotonic, align 64 - %160 = icmp eq i64 %159, 0 + %148 = tail call i64 @llvm.smax.i64(i64 %147, i64 8) + %149 = tail call i64 @llvm.umin.i64(i64 %148, i64 1024) + %149 = getelementptr inbounds nuw i8, ptr %3, i64 912 + %150 = getelementptr inbounds nuw i8, ptr %3, i64 896 + br label %.lr.ph.i.i + +.lr.ph.i.i: ; preds = %select.unfold.i.i, %mi_option_get_clamp.exit.i.i + %.in.i.i = phi i64 [ %149, %mi_option_get_clamp.exit.i.i ], [ %152, %select.unfold.i.i ] + %152 = add nsw i64 %.in.i.i, -1 + %153 = load ptr, ptr %149, align 8, !tbaa !261 + %154 = getelementptr inbounds nuw i8, ptr %153, i64 64 + %155 = load atomic i64, ptr %154 monotonic, align 64 + %156 = icmp ult i64 %155, 33554432 + br i1 %156, label %157, label %mi_abandoned_visited_revisit.exit.thread.i.i.i, !prof !49 + +157: ; preds = %151 + %156 = load atomic i64, ptr %153 monotonic, align 64 + %157 = icmp eq i64 %156, 0 + br i1 %159, label %mi_segment_try_reclaim.exit.i, label %160 + +158: ; preds = %157 + %161 = atomicrmw xchg ptr %153, i64 0 acq_rel, align 64 + %160 = icmp eq i64 %161, 0 br i1 %160, label %mi_segment_try_reclaim.exit.i, label %161 161: ; preds = %158 - %162 = atomicrmw xchg ptr %154, i64 0 acq_rel, align 64 - %.not55.i.i.i.i = icmp eq i64 %162, 0 - br i1 %.not55.i.i.i.i, label %mi_segment_try_reclaim.exit.i, label %163 - -163: ; preds = %161 - %164 = load atomic i64, ptr %155 monotonic, align 64 - %165 = icmp ult i64 %164, 33554432 - br i1 %165, label %166, label %.critedge.i.i.i.i.preheader + %163 = load atomic i64, ptr %154 monotonic, align 64 + %.not55.i.i.i.i = icmp ult i64 %163, 33554432 + br i1 %.not55.i.i.i.i, label %165, label %163 -.critedge.i.i.i.i.preheader: ; preds = %166, %163 +163: ; preds = %165, %162 br label %.critedge.i.i.i.i -166: ; preds = %163 - %167 = getelementptr inbounds nuw i8, ptr %154, i64 192 +166: ; preds = %162 + %167 = getelementptr inbounds nuw i8, ptr %153, i64 192 %168 = load atomic i64, ptr %167 monotonic, align 64 - %169 = add nuw nsw i64 %164, 1 + %169 = add nuw nsw i64 %163, 1 %170 = and i64 %169, 33554431 - %171 = or i64 %170, %162 - %172 = cmpxchg ptr %155, i64 %164, i64 %171 acq_rel acquire, align 64 + %171 = or i64 %170, %161 + %172 = cmpxchg ptr %154, i64 %163, i64 %171 acq_rel acquire, align 64 %173 = extractvalue { i64, i1 } %172, 1 br i1 %173, label %174, label %.critedge.i.i.i.i.preheader, !prof !266 174: ; preds = %166 - %175 = getelementptr inbounds nuw i8, ptr %154, i64 128 + %175 = getelementptr inbounds nuw i8, ptr %153, i64 128 %176 = atomicrmw add ptr %175, i64 %168 monotonic, align 64 %177 = atomicrmw sub ptr %167, i64 %168 monotonic, align 64 br label %mi_abandoned_visited_revisit.exit.thread.i.i.i .critedge.i.i.i.i: ; preds = %.critedge.i.i.i.i.preheader, %.critedge.i.i.i.i - %.050.in.i.i.i.i = phi i64 [ %179, %.critedge.i.i.i.i ], [ %162, %.critedge.i.i.i.i.preheader ] + %.050.in.i.i.i.i = phi i64 [ %179, %.critedge.i.i.i.i ], [ %161, %.critedge.i.i.i.i.preheader ] %.050.i.i.i.i = inttoptr i64 %.050.in.i.i.i.i to ptr %178 = getelementptr inbounds nuw i8, ptr %.050.i.i.i.i, i64 176 %179 = load atomic i64, ptr %178 monotonic, align 8 @@ -22809,37 +22804,37 @@ mi_option_get_clamp.exit.i.i: ; preds = %146, %.loopexit 180: ; preds = %.critedge.i.i.i.i %181 = getelementptr inbounds nuw i8, ptr %.050.i.i.i.i, i64 176 - %182 = load atomic i64, ptr %155 monotonic, align 64 - %183 = getelementptr inbounds nuw i8, ptr %154, i64 192 + %182 = load atomic i64, ptr %154 monotonic, align 64 + %183 = getelementptr inbounds nuw i8, ptr %153, i64 192 br label %184 184: ; preds = %184, %180 - %.051.i.i.i.i = phi i64 [ %182, %180 ], [ %192, %184 ] + %.051.i.i.i.i = phi i64 [ %182, %179 ], [ %192, %183 ] %185 = load atomic i64, ptr %183 monotonic, align 64 %186 = and i64 %.051.i.i.i.i, -33554432 store atomic i64 %186, ptr %181 release, align 8 %187 = add i64 %.051.i.i.i.i, 1 %188 = and i64 %187, 33554431 - %189 = or i64 %188, %162 - %190 = cmpxchg weak ptr %155, i64 %.051.i.i.i.i, i64 %189 release monotonic, align 64 + %189 = or i64 %188, %161 + %190 = cmpxchg weak ptr %154, i64 %.051.i.i.i.i, i64 %189 release monotonic, align 64 %191 = extractvalue { i64, i1 } %190, 1 %192 = extractvalue { i64, i1 } %190, 0 br i1 %191, label %193, label %184, !prof !266, !llvm.loop !268 193: ; preds = %184 - %194 = getelementptr inbounds nuw i8, ptr %154, i64 128 + %194 = getelementptr inbounds nuw i8, ptr %153, i64 128 %195 = atomicrmw add ptr %194, i64 %185 monotonic, align 64 %196 = atomicrmw sub ptr %183, i64 %185 monotonic, align 64 br label %mi_abandoned_visited_revisit.exit.thread.i.i.i -mi_abandoned_visited_revisit.exit.thread.i.i.i: ; preds = %193, %174, %152 - %197 = getelementptr inbounds nuw i8, ptr %154, i64 256 +mi_abandoned_visited_revisit.exit.thread.i.i.i: ; preds = %193, %174, %151 + %197 = getelementptr inbounds nuw i8, ptr %153, i64 256 %198 = atomicrmw add ptr %197, i64 1 monotonic, align 64 - %199 = load atomic i64, ptr %155 acquire, align 64 + %199 = load atomic i64, ptr %154 acquire, align 64 br label %200 200: ; preds = %203, %mi_abandoned_visited_revisit.exit.thread.i.i.i - %.029.i.i.i = phi i64 [ %199, %mi_abandoned_visited_revisit.exit.thread.i.i.i ], [ %212, %203 ] + %.029.i.i.i = phi i64 [ %199, %mi_abandoned_visited_revisit.exit.thread.i.i.i ], [ %212, %202 ] %201 = and i64 %.029.i.i.i, -33554432 %.not.i.i.i = icmp eq i64 %201, 0 br i1 %.not.i.i.i, label %mi_abandoned_pop.exit.thread41.i.i, label %203 @@ -22855,7 +22850,7 @@ mi_abandoned_pop.exit.thread41.i.i: ; preds = %200 %207 = add i64 %.029.i.i.i, 1 %208 = and i64 %207, 33554431 %209 = or i64 %206, %208 - %210 = cmpxchg weak ptr %155, i64 %.029.i.i.i, i64 %209 acq_rel acquire, align 64 + %210 = cmpxchg weak ptr %154, i64 %.029.i.i.i, i64 %209 acq_rel acquire, align 64 %211 = extractvalue { i64, i1 } %210, 1 %212 = extractvalue { i64, i1 } %210, 0 br i1 %211, label %213, label %200, !llvm.loop !269 @@ -22864,7 +22859,7 @@ mi_abandoned_pop.exit.thread41.i.i: ; preds = %200 %214 = getelementptr inbounds nuw i8, ptr %204, i64 176 %215 = atomicrmw sub ptr %197, i64 1 monotonic, align 64 store atomic i64 0, ptr %214 release, align 8 - %216 = getelementptr inbounds nuw i8, ptr %154, i64 128 + %216 = getelementptr inbounds nuw i8, ptr %153, i64 128 %217 = atomicrmw sub ptr %216, i64 1 monotonic, align 64 %218 = getelementptr inbounds nuw i8, ptr %204, i64 200 %219 = load i64, ptr %218, align 8, !tbaa !264 @@ -22894,7 +22889,7 @@ mi_abandoned_pop.exit.thread41.i.i: ; preds = %200 br label %_mi_heap_memid_is_suitable.exit.i.i _mi_heap_memid_is_suitable.exit.i.i: ; preds = %227, %223 - %.0.i.i.i.i23 = phi i1 [ %spec.select.i.i.i.i.i, %223 ], [ %228, %227 ] + %.0.i.i.i.i23 = phi i1 [ %spec.select.i.i.i.i.i, %222 ], [ %228, %226 ] %229 = tail call fastcc zeroext i1 @mi_segment_check_free(ptr noundef %204, i64 noundef range(i64 0, 281474976710656) %11, i64 noundef range(i64 0, 16777217) %2, ptr noundef %3) %230 = getelementptr inbounds nuw i8, ptr %204, i64 208 %231 = load i64, ptr %230, align 8, !tbaa !61 @@ -22925,14 +22920,14 @@ _mi_heap_memid_is_suitable.exit.i.i: ; preds = %227, %223 br label %select.unfold.i.i 243: ; preds = %238 - %244 = load ptr, ptr %151, align 8, !tbaa !182 + %244 = load ptr, ptr %150, align 8, !tbaa !182 tail call fastcc void @mi_segment_try_purge(ptr noundef nonnull %204, i1 noundef zeroext true, ptr noundef %244) - %245 = load ptr, ptr %150, align 8, !tbaa !261 + %245 = load ptr, ptr %149, align 8, !tbaa !261 %246 = load atomic i64, ptr %245 monotonic, align 64 br label %247 247: ; preds = %247, %243 - %.0.in.i.i.i = phi i64 [ %246, %243 ], [ %250, %247 ] + %.0.in.i.i.i = phi i64 [ %246, %242 ], [ %250, %246 ] store atomic i64 %.0.in.i.i.i, ptr %214 release, align 8 %248 = cmpxchg weak ptr %245, i64 %.0.in.i.i.i, i64 %201 release monotonic, align 64 %249 = extractvalue { i64, i1 } %248, 1 @@ -22946,10 +22941,10 @@ mi_abandoned_visited_push.exit.i.i: ; preds = %247 select.unfold.i.i: ; preds = %mi_abandoned_visited_push.exit.i.i, %241, %233 %253 = icmp sgt i64 %.in.i.i, 1 - br i1 %253, label %152, label %mi_segment_try_reclaim.exit.i, !llvm.loop !283 + br i1 %253, label %151, label %mi_segment_try_reclaim.exit.i, !llvm.loop !283 -mi_segment_try_reclaim.exit.i: ; preds = %select.unfold.i.i, %161, %158, %.thread.i.i, %mi_abandoned_pop.exit.thread41.i.i, %mi_option_get_clamp.exit.i.i - %.2.i.i = phi i1 [ true, %mi_abandoned_pop.exit.thread41.i.i ], [ %237, %.thread.i.i ], [ true, %mi_option_get_clamp.exit.i.i ], [ true, %158 ], [ true, %161 ], [ true, %select.unfold.i.i ] +mi_segment_try_reclaim.exit.i: ; preds = %select.unfold.i.i, %160, %157, %.thread.i.i, %mi_abandoned_pop.exit.thread41.i.i + %.2.i.i = phi i1 [ true, %mi_abandoned_pop.exit.thread41.i.i ], [ %237, %.thread.i.i ], [ true, %157 ], [ true, %160 ], [ true, %select.unfold.i.i ] %254 = load i8, ptr %6, align 1, !tbaa !117, !range !38, !noundef !39 %255 = trunc nuw i8 %254 to i1 br i1 %255, label %mi_segment_reclaim_or_alloc.exit.thread, label %256 @@ -22986,7 +22981,7 @@ mi_segments_page_find_and_allocate.exit: ; preds = %mi_span_queue_delet br label %267 267: ; preds = %mi_segment_reclaim_or_alloc.exit.thread, %mi_segment_reclaim_or_alloc.exit, %mi_segments_page_find_and_allocate.exit, %260 - %.0 = phi ptr [ %261, %260 ], [ %138, %mi_segments_page_find_and_allocate.exit ], [ null, %mi_segment_reclaim_or_alloc.exit ], [ null, %mi_segment_reclaim_or_alloc.exit.thread ] + %.0 = phi ptr [ %261, %259 ], [ %138, %mi_segments_page_find_and_allocate.exit ], [ null, %mi_segment_reclaim_or_alloc.exit ], [ null, %mi_segment_reclaim_or_alloc.exit.thread ] ret ptr %.0 } diff --git a/bench/curl/optimized/http.ll b/bench/curl/optimized/http.ll index cecdd719013..33579900401 100644 --- a/bench/curl/optimized/http.ll +++ b/bench/curl/optimized/http.ll @@ -5612,7 +5612,7 @@ checkhttpprefix.exit: ; preds = %436, %433, %441 462: ; preds = %458 %463 = getelementptr inbounds nuw i8, ptr %.0, i64 8 %464 = load i8, ptr %463, align 1, !tbaa !98 - switch i8 %464, label %.thread291 [ + switch i8 %464, label %.thread290 [ i8 32, label %465 i8 9, label %465 ] @@ -5679,9 +5679,9 @@ checkhttpprefix.exit: ; preds = %436, %433, %441 br label %494 494: ; preds = %._crit_edge, %.thread309 - %495 = phi i32 [ %484, %.thread309 ], [ %493, %._crit_edge ] - %496 = phi ptr [ %352, %.thread309 ], [ %.pre, %._crit_edge ] - %497 = phi i8 [ 11, %.thread309 ], [ %.pr289327, %._crit_edge ] + %495 = phi i32 [ %484, %.thread308 ], [ %493, %._crit_edge ] + %496 = phi ptr [ %352, %.thread308 ], [ %.pre, %._crit_edge ] + %497 = phi i8 [ 11, %.thread308 ], [ %.pr289327, %._crit_edge ] %498 = getelementptr inbounds nuw i8, ptr %0, i64 240 %499 = getelementptr inbounds nuw i8, ptr %0, i64 320 %500 = load i8, ptr %499, align 8, !tbaa !217 @@ -5787,7 +5787,7 @@ checkhttpprefix.exit: ; preds = %436, %433, %441 %551 = and i32 %550, -2049 %552 = or disjoint i32 %548, %551 store i32 %552, ptr %549, align 1 - switch i32 %545, label %.thread296 [ + switch i32 %545, label %.thread295 [ i32 304, label %553 i32 204, label %560 ] @@ -5846,7 +5846,7 @@ checkhttpprefix.exit: ; preds = %436, %433, %441 br i1 %.not14.i, label %verify_header.exit, label %573 verify_header.exit: ; preds = %.thread296, %571 - %.str.150.sink.i = phi ptr [ @.str.149, %.thread296 ], [ @.str.150, %571 ] + %.str.150.sink.i = phi ptr [ @.str.149, %.thread295 ], [ @.str.150, %571 ] tail call void (ptr, ptr, ...) @Curl_failf(ptr noundef nonnull %0, ptr noundef nonnull %.str.150.sink.i) #11 br label %.thread291 @@ -6342,7 +6342,7 @@ thread-pre-split.i249: ; preds = %788, %784, %780 br label %802 802: ; preds = %thread-pre-split.i249, %776 - %803 = phi i8 [ %.pr.i250, %thread-pre-split.i249 ], [ %778, %776 ] + %803 = phi i8 [ %.pr.i250, %thread-pre-split.i248 ], [ %778, %776 ] %804 = icmp eq i8 %803, 11 br i1 %804, label %805, label %http_header.exit.thread @@ -6448,9 +6448,8 @@ thread-pre-split453.i: ; preds = %846 .thread457.i: ; preds = %thread-pre-split453.i, %850, %843 %.pr456.i = phi i64 [ %.pr454.i, %thread-pre-split453.i ], [ %851, %850 ], [ %845, %843 ] - %852 = icmp slt i64 %.pr456.i, 0 - %spec.select.i248 = call i64 @llvm.umin.i64(i64 %.pr456.i, i64 21600) - %853 = select i1 %852, i64 0, i64 %spec.select.i248 + %852 = call i64 @llvm.smax.i64(i64 %.pr456.i, i64 0) + %spec.select.i248 = call i64 @llvm.umin.i64(i64 %852, i64 21600) %854 = getelementptr inbounds nuw i8, ptr %0, i64 5136 store i64 %853, ptr %854, align 8, !tbaa !236 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11 @@ -6699,7 +6698,7 @@ http_header.exit.thread: ; preds = %.critedge424.i, %96 br label %.thread291 .thread291: ; preds = %501, %504, %754, %764, %969, %959, %933, %833, %650, %462, %450, %454, %458, %465, %469, %473, %488, %401, %432, %.thread279, %verify_header.exit, %976, %http_header.exit.thread, %http_header.exit, %344 - %.1 = phi i32 [ %.0157, %344 ], [ 8, %verify_header.exit ], [ %.0.i246, %http_header.exit ], [ %975, %http_header.exit.thread ], [ %977, %976 ], [ 1, %401 ], [ 1, %432 ], [ 8, %.thread279 ], [ 8, %488 ], [ 8, %473 ], [ 8, %469 ], [ 8, %465 ], [ 8, %458 ], [ 8, %454 ], [ 8, %450 ], [ 8, %462 ], [ 27, %754 ], [ 27, %764 ], [ %970, %969 ], [ 27, %959 ], [ %935, %933 ], [ 27, %833 ], [ 27, %650 ], [ 1, %504 ], [ 8, %501 ] + %.1 = phi i32 [ %.0157, %344 ], [ 8, %verify_header.exit ], [ %.0.i246, %http_header.exit ], [ %975, %http_header.exit.thread ], [ %977, %976 ], [ 1, %401 ], [ 1, %432 ], [ 8, %.thread278 ], [ 8, %488 ], [ 8, %473 ], [ 8, %469 ], [ 8, %465 ], [ 8, %458 ], [ 8, %454 ], [ 8, %450 ], [ 8, %462 ], [ 27, %754 ], [ 27, %764 ], [ %970, %969 ], [ 27, %959 ], [ %935, %933 ], [ 27, %833 ], [ 27, %650 ], [ 1, %504 ], [ 8, %501 ] ret i32 %.1 } @@ -8408,6 +8407,9 @@ declare i64 @llvm.umin.i64(i64, i64) #9 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #10 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #9 + attributes #0 = { 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 #1 = { "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) } diff --git a/bench/ffmpeg/optimized/bgmc.ll b/bench/ffmpeg/optimized/bgmc.ll index f4a95174e0d..2d61b69ac4e 100644 --- a/bench/ffmpeg/optimized/bgmc.ll +++ b/bench/ffmpeg/optimized/bgmc.ll @@ -106,9 +106,8 @@ define void @ff_bgmc_decode_end(ptr noundef captures(none) %0) local_unnamed_add ; Function Attrs: nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable define void @ff_bgmc_decode(ptr noundef captures(none) %0, i32 noundef %1, ptr noundef writeonly captures(none) %2, i32 noundef %3, i32 noundef %4, ptr noundef captures(none) %5, ptr noundef captures(none) %6, ptr noundef captures(none) %7, ptr noundef captures(none) %8, ptr noundef captures(none) %9) local_unnamed_addr #5 { - %11 = icmp slt i32 %3, 0 - %..i.i = tail call i32 @llvm.umin.i32(i32 %3, i32 3) - %.0.i.i = select i1 %11, i32 0, i32 %..i.i + %11 = tail call i32 @llvm.smax.i32(i32 %3, i32 0) + %..i.i = tail call i32 @llvm.umin.i32(i32 %11, i32 3) %12 = shl nuw nsw i32 %.0.i.i, 10 %13 = zext nneg i32 %12 to i64 %14 = getelementptr inbounds nuw i8, ptr %8, i64 %13 @@ -322,6 +321,9 @@ declare i32 @llvm.bswap.i32(i32) #6 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #6 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #6 + attributes #0 = { cold nounwind optsize uwtable "min-legal-vector-width"="0" "no-signed-zeros-fp-math"="true" "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 = { "no-signed-zeros-fp-math"="true" "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 nounwind willreturn memory(argmem: write) } diff --git a/bench/ffmpeg/optimized/mpegvideo.ll b/bench/ffmpeg/optimized/mpegvideo.ll index 84a8826bb4e..69c034542d1 100644 --- a/bench/ffmpeg/optimized/mpegvideo.ll +++ b/bench/ffmpeg/optimized/mpegvideo.ll @@ -1300,34 +1300,33 @@ define void @ff_init_block_index(ptr noundef captures(none) initializes((3364, 3 ; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, argmem: readwrite, inaccessiblemem: none) uwtable define void @ff_set_qscale(ptr noundef captures(none) initializes((8, 16), (1472, 1480)) %0, i32 noundef %1) local_unnamed_addr #9 { - %3 = icmp slt i32 %1, 1 - %4 = tail call i32 @llvm.umin.i32(i32 %1, i32 31) - %.0 = select i1 %3, i32 1, i32 %4 - %5 = getelementptr inbounds nuw i8, ptr %0, i64 1472 - store i32 %.0, ptr %5, align 8, !tbaa !131 - %6 = getelementptr inbounds nuw i8, ptr %0, i64 1344 - %7 = load ptr, ptr %6, align 8, !tbaa !63 - %8 = zext nneg i32 %.0 to i64 - %9 = getelementptr inbounds nuw i8, ptr %7, i64 %8 - %10 = load i8, ptr %9, align 1, !tbaa !10 - %11 = zext i8 %10 to i32 - %12 = getelementptr inbounds nuw i8, ptr %0, i64 1476 - store i32 %11, ptr %12, align 4, !tbaa !132 - %13 = getelementptr inbounds nuw i8, ptr %0, i64 1328 - %14 = load ptr, ptr %13, align 8, !tbaa !133 - %15 = getelementptr inbounds nuw i8, ptr %14, i64 %8 - %16 = load i8, ptr %15, align 1, !tbaa !10 - %17 = zext i8 %16 to i32 - %18 = getelementptr inbounds nuw i8, ptr %0, i64 8 - store i32 %17, ptr %18, align 8, !tbaa !134 - %19 = getelementptr inbounds nuw i8, ptr %0, i64 1336 - %20 = load ptr, ptr %19, align 8, !tbaa !135 - %21 = zext i8 %10 to i64 - %22 = getelementptr inbounds nuw i8, ptr %20, i64 %21 - %23 = load i8, ptr %22, align 1, !tbaa !10 - %24 = zext i8 %23 to i32 - %25 = getelementptr inbounds nuw i8, ptr %0, i64 12 - store i32 %24, ptr %25, align 4, !tbaa !136 + %3 = tail call i32 @llvm.smax.i32(i32 %1, i32 1) + %4 = tail call i32 @llvm.umin.i32(i32 %3, i32 31) + %4 = getelementptr inbounds nuw i8, ptr %0, i64 1472 + store i32 %4, ptr %4, align 8, !tbaa !131 + %5 = getelementptr inbounds nuw i8, ptr %0, i64 1344 + %6 = load ptr, ptr %5, align 8, !tbaa !63 + %7 = zext nneg i32 %4 to i64 + %8 = getelementptr inbounds nuw i8, ptr %6, i64 %7 + %9 = load i8, ptr %8, align 1, !tbaa !10 + %10 = zext i8 %9 to i32 + %11 = getelementptr inbounds nuw i8, ptr %0, i64 1476 + store i32 %10, ptr %11, align 4, !tbaa !132 + %12 = getelementptr inbounds nuw i8, ptr %0, i64 1328 + %13 = load ptr, ptr %12, align 8, !tbaa !133 + %14 = getelementptr inbounds nuw i8, ptr %13, i64 %7 + %15 = load i8, ptr %14, align 1, !tbaa !10 + %16 = zext i8 %15 to i32 + %17 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i32 %16, ptr %17, align 8, !tbaa !134 + %18 = getelementptr inbounds nuw i8, ptr %0, i64 1336 + %19 = load ptr, ptr %18, align 8, !tbaa !135 + %20 = zext i8 %9 to i64 + %21 = getelementptr inbounds nuw i8, ptr %19, i64 %20 + %22 = load i8, ptr %21, align 1, !tbaa !10 + %23 = zext i8 %22 to i32 + %24 = getelementptr inbounds nuw i8, ptr %0, i64 12 + store i32 %23, ptr %24, align 4, !tbaa !136 ret void } diff --git a/bench/ffmpeg/optimized/timecode.ll b/bench/ffmpeg/optimized/timecode.ll index 4f4dabee471..e88547d9024 100644 --- a/bench/ffmpeg/optimized/timecode.ll +++ b/bench/ffmpeg/optimized/timecode.ll @@ -88,21 +88,99 @@ av_timecode_adjust_ntsc_framenum2.exit: ; preds = %14, %10, %2 %.0 = phi i32 [ %9, %2 ], [ %26, %14 ], [ %9, %10 ] %27 = urem i32 %.0, %4 %28 = udiv i32 %.0, %4 - %29 = urem i32 %28, 60 - %30 = sext i32 %.0 to i64 - %31 = zext i32 %4 to i64 - %32 = mul nuw nsw i64 %31, 60 - %33 = sdiv i64 %30, %32 - %.lhs.trunc = trunc nsw i64 %33 to i32 - %34 = srem i32 %.lhs.trunc, 60 - %35 = mul nuw nsw i64 %31, 3600 - %36 = sdiv i64 %30, %35 - %.lhs.trunc20 = trunc nsw i64 %36 to i32 - %37 = srem i32 %.lhs.trunc20, 24 - %38 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %39 = load i64, ptr %38, align 4 - %40 = tail call i32 @av_timecode_get_smpte(i64 %39, i32 noundef %7, i32 noundef %37, i32 noundef %34, i32 noundef %29, i32 noundef %27) - ret i32 %40 + %29 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %30 = load i64, ptr %29, align 4 + %.fr.i = freeze i64 %30 + %.sroa.011.0.extract.trunc.i.i = trunc i64 %.fr.i to i32 + %sext.i.i = shl i64 %.fr.i, 32 + %31 = ashr exact i64 %sext.i.i, 32 + %32 = ashr i64 %.fr.i, 32 + %35 = mul nsw i64 %32, 30 + %.not.i.i = icmp eq i64 %31, %35 + br i1 %.not.i.i, label %av_timecode_get_smpte.exit, label %av_cmp_q.exit.i + +av_cmp_q.exit.i:; preds = %av_timecode_adjust_ntsc_framenum2.exit + %34 = sub nsw i64 %31, %33 + %35 = xor i64 %34, %32 + %36 = icmp sgt i64 %35, -1 + br i1 %36, label %37, label %av_timecode_get_smpte.exit + +37: ; preds = %av_cmp_q.exit.i + %38 = and i32 %27, -2147483647 + %39 = icmp eq i32 %38, 1 + br i1 %39, label %40, label %av_cmp_q.exit41.thread.i + +40: ; preds = %37 + %41 = mul nsw i64 %32, 50 + %.not.i37.i = icmp eq i64 %31, %41 + br i1 %.not.i37.i, label %42, label %av_cmp_q.exit41.thread.i + +42: ; preds = %40 + %43 = icmp ugt i64 %.fr.i, 4294967295 + %or.cond.i21 = icmp sgt i32 %.sroa.011.0.extract.trunc.i.i, 0 + %or.cond61.i = or i1 %43, %or.cond.i21 + %spec.select.i = select i1 %or.cond61.i, i32 128, i32 8388608 + br label %av_cmp_q.exit41.thread.i + +av_cmp_q.exit41.thread.i: ; preds = %42, %40, %37 + %.1.i = phi i32 [ 0, %37 ], [ 8388608, %40 ], [ %spec.select.i, %42 ] + %44 = sdiv i32 %27, 2 + br label %av_timecode_get_smpte.exit + +av_timecode_get_smpte.exit: ; preds = %av_timecode_adjust_ntsc_framenum2.exit, %av_cmp_q.exit.i, %av_cmp_q.exit41.thread.i + %.031.i = phi i32 [ %.1.i, %av_cmp_q.exit41.thread.i ], [ 0, %av_cmp_q.exit.i ], [ 0, %av_timecode_adjust_ntsc_framenum2.exit ] + %.0.i20 = phi i32 [ %44, %av_cmp_q.exit41.thread.i ], [ %27, %av_cmp_q.exit.i ], [ %27, %av_timecode_adjust_ntsc_framenum2.exit ] + %45 = sext i32 %.0 to i64 + %46 = zext i32 %4 to i64 + %47 = mul nuw nsw i64 %46, 3600 + %48 = sdiv i64 %45, %47 + %.lhs.trunc22 = trunc nsw i64 %48 to i32 + %49 = srem i32 %.lhs.trunc22, 24 + %50 = mul nuw nsw i64 %46, 60 + %51 = sdiv i64 %45, %50 + %.lhs.trunc = trunc nsw i64 %51 to i32 + %52 = srem i32 %.lhs.trunc, 60 + %53 = urem i32 %28, 60 + %54 = tail call i32 @llvm.smax.i32(i32 %52, i32 0) + %55 = srem i32 %.0.i20, 40 + %56 = shl nuw nsw i32 %7, 30 + %.lhs.trunc.i = trunc nsw i32 %55 to i8 + %57 = sdiv i8 %.lhs.trunc.i, 10 + %.sext.i = sext i8 %57 to i32 + %58 = shl nsw i32 %.sext.i, 28 + %59 = srem i8 %.lhs.trunc.i, 10 + %.sext49.i = sext i8 %59 to i32 + %60 = shl nsw i32 %.sext49.i, 24 + %.lhs.trunc50.i = trunc nuw nsw i32 %53 to i8 + %61 = udiv i8 %.lhs.trunc50.i, 10 + %.zext.i = zext nneg i8 %61 to i32 + %62 = shl nuw nsw i32 %.zext.i, 20 + %63 = urem i8 %.lhs.trunc50.i, 10 + %.zext52.i = zext nneg i8 %63 to i32 + %64 = shl nuw nsw i32 %.zext52.i, 16 + %.lhs.trunc53.i = trunc nuw nsw i32 %54 to i8 + %65 = udiv i8 %.lhs.trunc53.i, 10 + %.zext54.i = zext nneg i8 %65 to i32 + %66 = shl nuw nsw i32 %.zext54.i, 12 + %67 = urem i8 %.lhs.trunc53.i, 10 + %.zext56.i = zext nneg i8 %67 to i32 + %68 = shl nuw nsw i32 %.zext56.i, 8 + %.lhs.trunc57.i = trunc nsw i32 %49 to i8 + %69 = sdiv i8 %.lhs.trunc57.i, 10 + %.sext58.i = sext i8 %69 to i32 + %70 = shl nsw i32 %.sext58.i, 4 + %71 = srem i8 %.lhs.trunc57.i, 10 + %.sext60.i = sext i8 %71 to i32 + %72 = or i32 %.031.i, %56 + %73 = or i32 %72, %58 + %74 = or i32 %73, %60 + %75 = or i32 %74, %.sext60.i + %76 = or i32 %75, %70 + %77 = or i32 %76, %62 + %78 = or i32 %77, %64 + %79 = or i32 %78, %66 + %80 = or i32 %79, %68 + ret i32 %80 } ; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable @@ -148,10 +226,10 @@ av_cmp_q.exit.thread: ; preds = %6, %av_cmp_q.exit41 %.031 = phi i32 [ %.1, %av_cmp_q.exit41.thread ], [ 0, %av_cmp_q.exit ], [ 0, %6 ] %.0 = phi i32 [ %20, %av_cmp_q.exit41.thread ], [ %5, %av_cmp_q.exit ], [ %5, %6 ] %21 = srem i32 %2, 24 - %22 = icmp slt i32 %3, 0 - %..i = tail call i32 @llvm.umin.i32(i32 %3, i32 59) - %23 = icmp slt i32 %4, 0 - %..i32 = tail call i32 @llvm.umin.i32(i32 %4, i32 59) + %22 = tail call i32 @llvm.smax.i32(i32 %3, i32 0) + %..i = tail call i32 @llvm.umin.i32(i32 %22, i32 59) + %23 = tail call i32 @llvm.smax.i32(i32 %4, i32 0) + %..i32 = tail call i32 @llvm.umin.i32(i32 %23, i32 59) %24 = srem i32 %.0, 40 %25 = shl i32 %1, 30 %.lhs.trunc = trunc nsw i32 %24 to i8 @@ -162,21 +240,19 @@ av_cmp_q.exit.thread: ; preds = %6, %av_cmp_q.exit41 %.sext49 = sext i8 %28 to i32 %29 = shl nsw i32 %.sext49, 24 %30 = trunc nuw nsw i32 %..i32 to i8 - %.lhs.trunc50 = select i1 %23, i8 0, i8 %30 - %31 = udiv i8 %.lhs.trunc50, 10 - %.zext = zext nneg i8 %31 to i32 - %32 = shl nuw nsw i32 %.zext, 20 - %33 = urem i8 %.lhs.trunc50, 10 - %.zext52 = zext nneg i8 %33 to i32 - %34 = shl nuw nsw i32 %.zext52, 16 - %35 = trunc nuw nsw i32 %..i to i8 - %.lhs.trunc53 = select i1 %22, i8 0, i8 %35 - %36 = udiv i8 %.lhs.trunc53, 10 - %.zext54 = zext nneg i8 %36 to i32 - %37 = shl nuw nsw i32 %.zext54, 12 - %38 = urem i8 %.lhs.trunc53, 10 - %.zext56 = zext nneg i8 %38 to i32 - %39 = shl nuw nsw i32 %.zext56, 8 + %30 = udiv i8 %.lhs.trunc50, 10 + %.zext = zext nneg i8 %30 to i32 + %31 = shl nuw nsw i32 %.zext, 20 + %32 = urem i8 %30, 10 + %.zext52 = zext nneg i8 %32 to i32 + %33 = shl nuw nsw i32 %.zext52, 16 + %.lhs.trunc53 = trunc nuw nsw i32 %..i to i8 + %34 = udiv i8 %.lhs.trunc53, 10 + %.zext54 = zext nneg i8 %34 to i32 + %35 = shl nuw nsw i32 %.zext54, 12 + %36 = urem i8 %.lhs.trunc53, 10 + %.zext56 = zext nneg i8 %36 to i32 + %37 = shl nuw nsw i32 %.zext56, 8 %.lhs.trunc57 = trunc nsw i32 %21 to i8 %40 = sdiv i8 %.lhs.trunc57, 10 %.sext58 = sext i8 %40 to i32 @@ -185,10 +261,10 @@ av_cmp_q.exit.thread: ; preds = %6, %av_cmp_q.exit41 %.sext60 = sext i8 %42 to i32 %43 = or i32 %25, %.sext60 %44 = or i32 %43, %41 - %45 = or i32 %44, %37 - %46 = or i32 %45, %39 - %47 = or i32 %46, %32 - %48 = or i32 %47, %34 + %45 = or i32 %44, %35 + %46 = or i32 %45, %37 + %47 = or i32 %46, %31 + %48 = or i32 %47, %33 %49 = or i32 %48, %.031 %50 = or i32 %49, %27 %51 = or i32 %50, %29 @@ -632,6 +708,9 @@ declare void @av_log(ptr noundef, i32 noundef, ptr noundef, ...) local_unnamed_a ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #9 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #9 + ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.abs.i64(i64, i1 immarg) #9 diff --git a/bench/icu/optimized/uniset.ll b/bench/icu/optimized/uniset.ll index bdcc5c74ebb..4bf668becfb 100644 --- a/bench/icu/optimized/uniset.ll +++ b/bench/icu/optimized/uniset.ll @@ -638,119 +638,117 @@ define void @_ZN6icu_7710UnicodeSetC2Eii(ptr noundef nonnull align 8 dereference define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addEii(ptr noundef nonnull returned align 8 captures(address, ret: address, provenance) dereferenceable(200) %0, i32 noundef %1, i32 noundef %2) unnamed_addr #1 align 2 { _ZN6icu_77L12pinCodePointERi.exit: %3 = alloca [3 x i32], align 4 - %4 = icmp slt i32 %1, 0 - %spec.select = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %.031 = select i1 %4, i32 0, i32 %spec.select - %5 = icmp sgt i32 %2, -1 - %spec.select34 = tail call i32 @llvm.umin.i32(i32 %2, i32 1114111) - %6 = icmp samesign ugt i32 %spec.select34, %.031 - %7 = select i1 %5, i1 %6, i1 false - br i1 %7, label %8, label %77 - -8: ; preds = %_ZN6icu_77L12pinCodePointERi.exit - %9 = add nuw nsw i32 %spec.select34, 1 - %10 = getelementptr inbounds nuw i8, ptr %0, i64 28 - %11 = load i32, ptr %10, align 4, !tbaa !33 - %12 = and i32 %11, 1 - %.not = icmp eq i32 %12, 0 - br i1 %.not, label %74, label %13 - -13: ; preds = %8 - %14 = icmp eq i32 %11, 1 - br i1 %14, label %.thread, label %15 - -15: ; preds = %13 - %16 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %17 = load ptr, ptr %16, align 8, !tbaa !31 - %18 = sext i32 %11 to i64 - %19 = getelementptr i32, ptr %17, i64 %18 - %20 = getelementptr i8, ptr %19, i64 -8 - %21 = load i32, ptr %20, align 4, !tbaa !12 - %.not17 = icmp sgt i32 %21, %.031 - br i1 %.not17, label %74, label %.thread - -.thread: ; preds = %13, %15 - %22 = phi i32 [ %21, %15 ], [ -2, %13 ] - %23 = getelementptr inbounds nuw i8, ptr %0, i64 40 - %24 = load ptr, ptr %23, align 8, !tbaa !37 - %.not.i = icmp eq ptr %24, null - %25 = getelementptr inbounds nuw i8, ptr %0, i64 88 - %26 = load ptr, ptr %25, align 8 - %27 = icmp eq ptr %26, null - %narrow.i.not = select i1 %.not.i, i1 %27, i1 false - br i1 %narrow.i.not, label %28, label %74 - -28: ; preds = %.thread - %29 = getelementptr inbounds nuw i8, ptr %0, i64 32 - %30 = load i8, ptr %29, align 8, !tbaa !34 - %31 = and i8 %30, 1 - %.not19 = icmp eq i8 %31, 0 - br i1 %.not19, label %32, label %74 + %4 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select = tail call i32 @llvm.umin.i32(i32 %4, i32 1114111) + %5 = tail call i32 @llvm.smax.i32(i32 %2, i32 0) + %.0 = tail call i32 @llvm.umin.i32(i32 %5, i32 1114111) + %6 = icmp samesign ult i32 %4, %.0 + br i1 %6, label %14, label %76 + +13: ; preds = %_ZN6icu_77L12pinCodePointERi.exit + %8 = add nuw nsw i32 %.0, 1 + %9 = getelementptr inbounds nuw i8, ptr %0, i64 28 + %10 = load i32, ptr %9, align 4, !tbaa !33 + %11 = and i32 %10, 1 + %.not = icmp eq i32 %11, 0 + br i1 %.not, label %73, label %28 + +28: ; preds = %7 + %13 = icmp eq i32 %10, 1 + br i1 %13, label %32, label %14 + +14:; preds = %12 + %15 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %16 = load ptr, ptr %15, align 8, !tbaa !31 + %17 = sext i32 %10 to i64 + %18 = getelementptr i32, ptr %16, i64 %17 + %19 = getelementptr i8, ptr %18, i64 -8 + %20 = load i32, ptr %19, align 4, !tbaa !12 + %.not17 = icmp sgt i32 %20, %.031 + br i1 %.not17, label %73, label %.thread -32: ; preds = %28 - %33 = icmp eq i32 %22, %.031 - %34 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %35 = load ptr, ptr %34, align 8, !tbaa !31 - %36 = sext i32 %11 to i64 - %37 = getelementptr i32, ptr %35, i64 %36 - br i1 %33, label %38, label %44 +32: ; preds = %28, %14 + %21 = phi i32 [ %20, %14 ], [ -2, %12 ] + %34 = getelementptr inbounds nuw i8, ptr %0, i64 41 + %35 = load ptr, ptr %34, align 8, !tbaa !313 + %.not.i = icmp eq ptr %23, null + %37 = getelementptr inbounds nuw i8, ptr %0, i64 88 + %25 = load ptr, ptr %24, align 8 + %26 = icmp eq ptr %25, null + %narrow.i.not = select i1 %.not.i, i1 %26, i1 false + br i1 %narrow.i.not, label %27, label %73 + +27: ; preds = %.thread + %28 = getelementptr inbounds nuw i8, ptr %0, i64 32 + %29 = load i8, ptr %28, align 8, !tbaa !34 + %30 = and i8 %29, 1 + %.not19 = icmp eq i8 %30, 0 + br i1 %.not19, label %31, label %73 + +31: ; preds = %27 + %32 = icmp eq i32 %21, %.031 + %33 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %34 = load ptr, ptr %33, align 8, !tbaa !31 + %35 = sext i32 %10 to i64 + %36 = getelementptr i32, ptr %34, i64 %35 + br i1 %32, label %37, label %43 + +37: ; preds = %31 + %38 = getelementptr i8, ptr %36, i64 -8 + store i32 %8, ptr %38, align 4, !tbaa !12 + %39 = icmp eq i32 %8, 1114112 + br i1 %39, label %40, label %.critedge + +40: ; preds = %37 + %41 = load i32, ptr %9, align 4, !tbaa !33 + %42 = add nsw i32 %41, -1 + store i32 %42, ptr %9, align 4, !tbaa !33 + br label %.critedge -38: ; preds = %32 - %39 = getelementptr i8, ptr %37, i64 -8 - store i32 %9, ptr %39, align 4, !tbaa !12 - %40 = icmp eq i32 %9, 1114112 - br i1 %40, label %41, label %.critedge +38: ; preds = %31 + %39 = getelementptr i8, ptr %36, i64 -4 + store i32 %.031, ptr %39, align 4, !tbaa !12 + %40 = icmp slt i32 %2, 1114112 + %46 = load i32, ptr %9, align 4, !tbaa !33 + br i1 %45, label %47, label %60 -41: ; preds = %38 - %42 = load i32, ptr %10, align 4, !tbaa !33 - %43 = add nsw i32 %42, -1 - store i32 %43, ptr %10, align 4, !tbaa !33 - br label %.critedge +413: ; preds = %38 + %48 = add nsw i32 %46, 2 + %49 = tail call noundef zeroext i1 @_ZN6icu_7710UnicodeSet14ensureCapacityEi(ptr noundef nonnull align 8 dereferenceable(200) %0, i32 noundef %48) + br i1 %49, label %50, label %.critedge -44: ; preds = %32 - %45 = getelementptr i8, ptr %37, i64 -4 - store i32 %.031, ptr %45, align 4, !tbaa !12 - %46 = icmp ult i32 %2, 1114111 - %47 = load i32, ptr %10, align 4, !tbaa !33 - br i1 %46, label %48, label %61 - -48: ; preds = %44 - %49 = add nsw i32 %47, 2 - %50 = tail call noundef zeroext i1 @_ZN6icu_7710UnicodeSet14ensureCapacityEi(ptr noundef nonnull align 8 dereferenceable(200) %0, i32 noundef %49) - br i1 %50, label %51, label %.critedge - -51: ; preds = %48 - %52 = load ptr, ptr %34, align 8, !tbaa !31 - %53 = load i32, ptr %10, align 4, !tbaa !33 - %54 = add nsw i32 %53, 1 - store i32 %54, ptr %10, align 4, !tbaa !33 - %55 = sext i32 %53 to i64 - %56 = getelementptr inbounds i32, ptr %52, i64 %55 - store i32 %9, ptr %56, align 4, !tbaa !12 - %57 = load i32, ptr %10, align 4, !tbaa !33 - %58 = add nsw i32 %57, 1 - store i32 %58, ptr %10, align 4, !tbaa !33 - %59 = sext i32 %57 to i64 - %60 = getelementptr inbounds i32, ptr %52, i64 %59 - store i32 1114112, ptr %60, align 4, !tbaa !12 +44: ; preds = %413 + %51 = load ptr, ptr %33, align 8, !tbaa !31 + %52 = load i32, ptr %9, align 4, !tbaa !33 + %53 = add nsw i32 %52, 1 + store i32 %53, ptr %9, align 4, !tbaa !33 + %54 = sext i32 %52 to i64 + %55 = getelementptr inbounds i32, ptr %51, i64 %54 + store i32 %8, ptr %54, align 4, !tbaa !12 + %56 = load i32, ptr %9, align 4, !tbaa !33 + %57 = add nsw i32 %56, 1 + store i32 %57, ptr %9, align 4, !tbaa !33 + %58 = sext i32 %56 to i64 + %59 = getelementptr inbounds i32, ptr %51, i64 %58 + store i32 1114112, ptr %59, align 4, !tbaa !12 br label %.critedge -61: ; preds = %44 - %62 = add nsw i32 %47, 1 +61: ; preds = %43 + %62 = add nsw i32 %46, 1 %63 = tail call noundef zeroext i1 @_ZN6icu_7710UnicodeSet14ensureCapacityEi(ptr noundef nonnull align 8 dereferenceable(200) %0, i32 noundef %62) br i1 %63, label %64, label %.critedge 64: ; preds = %61 - %65 = load ptr, ptr %34, align 8, !tbaa !31 - %66 = load i32, ptr %10, align 4, !tbaa !33 + %65 = load ptr, ptr %33, align 8, !tbaa !31 + %66 = load i32, ptr %9, align 4, !tbaa !33 %67 = add nsw i32 %66, 1 - store i32 %67, ptr %10, align 4, !tbaa !33 + store i32 %67, ptr %9, align 4, !tbaa !33 %68 = sext i32 %66 to i64 %69 = getelementptr inbounds i32, ptr %65, i64 %68 store i32 1114112, ptr %69, align 4, !tbaa !12 br label %.critedge -.critedge: ; preds = %51, %48, %64, %61, %38, %41 +.critedge: ; preds = %50, %47, %64, %61, %38, %41 %70 = getelementptr inbounds nuw i8, ptr %0, i64 64 %71 = load ptr, ptr %70, align 8, !tbaa !35 %.not.i23 = icmp eq ptr %71, null @@ -763,11 +761,11 @@ _ZN6icu_77L12pinCodePointERi.exit: store i32 0, ptr %73, align 8, !tbaa !36 br label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit -74: ; preds = %28, %.thread, %15, %8 +74: ; preds = %28, %.thread, %15, %7 call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #25 store i32 %.031, ptr %3, align 4, !tbaa !12 %75 = getelementptr inbounds nuw i8, ptr %3, i64 4 - store i32 %9, ptr %75, align 4, !tbaa !12 + store i32 %8, ptr %75, align 4, !tbaa !12 %76 = getelementptr inbounds nuw i8, ptr %3, i64 8 store i32 1114112, ptr %76, align 4, !tbaa !12 call void @_ZN6icu_7710UnicodeSet3addEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %3, i32 noundef 2, i8 noundef signext 0) @@ -775,9 +773,8 @@ _ZN6icu_77L12pinCodePointERi.exit: br label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit 77: ; preds = %_ZN6icu_77L12pinCodePointERi.exit - %.0 = select i1 %5, i32 %spec.select34, i32 0 - %78 = icmp eq i32 %.031, %.0 - br i1 %78, label %79, label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit + %77 = icmp eq i32 %spec.select, %.0 + br i1 %713, label %79, label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit 79: ; preds = %77 %80 = tail call noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addEi(ptr noundef nonnull align 8 dereferenceable(200) %0, i32 noundef %.031) @@ -3901,25 +3898,21 @@ _ZN6icu_7710UnicodeSet5clearEv.exit: ; preds = %3, %21 br i1 %.not2.i5, label %_ZN6icu_77L12pinCodePointERi.exit.i, label %_ZN6icu_7710UnicodeSet10complementEii.exit _ZN6icu_77L12pinCodePointERi.exit.i: ; preds = %26 - %30 = icmp sgt i32 %1, -1 - %spec.select12.i = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %31 = icmp slt i32 %2, 0 - %spec.select14.i = tail call i32 @llvm.umin.i32(i32 %2, i32 1114111) - %32 = select i1 %31, i32 0, i32 %spec.select14.i - %.not316.i = icmp samesign ugt i32 %spec.select12.i, %32 - %.not3.i = select i1 %30, i1 %.not316.i, i1 false - br i1 %.not3.i, label %38, label %33 + %30 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select12.i = tail call i32 @llvm.umin.i32(i32 %30, i32 1114111) + %32 = tail call i32 @llvm.smax.i32(i32 %2, i32 0) + %.not3.i = icmp samesign ult i32 %32, %31 + br i1 %.not3.i, label %37, label %33 33: ; preds = %_ZN6icu_77L12pinCodePointERi.exit.i - %.011.i = select i1 %30, i32 %spec.select12.i, i32 0 + %.0.i = tail call i32 @llvm.umin.i32(i32 %32, i32 1114112) call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #25 - store i32 %.011.i, ptr %4, align 4, !tbaa !12 + store i32 %31, ptr %4, align 4, !tbaa !12 %34 = getelementptr inbounds nuw i8, ptr %4, i64 4 - %35 = add nuw nsw i32 %spec.select14.i, 1 - %36 = select i1 %31, i32 1, i32 %35 - store i32 %36, ptr %34, align 4, !tbaa !12 - %37 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store i32 1114112, ptr %37, align 4, !tbaa !12 + %35 = add nuw nsw i32 %.0.i, 1 + store i32 %35, ptr %34, align 4, !tbaa !12 + %36 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store i32 1114128, ptr %36, align 4, !tbaa !28 call void @_ZN6icu_7710UnicodeSet11exclusiveOrEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %4, i32 noundef 2, i8 noundef signext 0) call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #25 br label %38 @@ -4009,40 +4002,36 @@ define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet1 br i1 %.not2, label %_ZN6icu_77L12pinCodePointERi.exit, label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit _ZN6icu_77L12pinCodePointERi.exit: ; preds = %10 - %14 = icmp sgt i32 %1, -1 - %spec.select12 = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %15 = icmp slt i32 %2, 0 - %spec.select14 = tail call i32 @llvm.umin.i32(i32 %2, i32 1114111) - %16 = select i1 %15, i32 0, i32 %spec.select14 - %.not316 = icmp samesign ugt i32 %spec.select12, %16 - %.not3 = select i1 %14, i1 %.not316, i1 false + %14 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select12 = tail call i32 @llvm.umin.i32(i32 %14, i32 1114111) + %16 = tail call i32 @llvm.smax.i32(i32 %2, i32 0) + %.not3 = icmp samesign ult i32 %16, %15 br i1 %.not3, label %22, label %17 17: ; preds = %_ZN6icu_77L12pinCodePointERi.exit - %.011 = select i1 %14, i32 %spec.select12, i32 0 + %spec.select = tail call i32 @llvm.umin.i32(i32 %16, i32 1114111) call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #25 - store i32 %.011, ptr %4, align 4, !tbaa !12 + store i32 %15, ptr %4, align 4, !tbaa !12 %18 = getelementptr inbounds nuw i8, ptr %4, i64 4 - %19 = add nuw nsw i32 %spec.select14, 1 - %20 = select i1 %15, i32 1, i32 %19 - store i32 %20, ptr %18, align 4, !tbaa !12 - %21 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store i32 1114112, ptr %21, align 4, !tbaa !12 + %19 = add nuw nsw i32 %spec.select, 1 + store i32 %19, ptr %18, align 4, !tbaa !12 + %20 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store i32 1114128, ptr %20, align 4, !tbaa !28 call void @_ZN6icu_7710UnicodeSet11exclusiveOrEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %4, i32 noundef 2, i8 noundef signext 0) call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #25 br label %22 -22: ; preds = %17, %_ZN6icu_77L12pinCodePointERi.exit - %23 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %24 = load ptr, ptr %23, align 8, !tbaa !35 - %.not.i7 = icmp eq ptr %24, null - br i1 %.not.i7, label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit, label %25 +21: ; preds = %17, %_ZN6icu_77L12pinCodePointERi.exit + %22 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %23 = load ptr, ptr %22, align 8, !tbaa !35 + %.not.i7 = icmp eq ptr %23, null + br i1 %.not.i7, label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit, label %24 -25: ; preds = %22 +22: ; preds = %21 tail call void @uprv_free_77(ptr noundef nonnull %24) store ptr null, ptr %23, align 8, !tbaa !35 - %26 = getelementptr inbounds nuw i8, ptr %0, i64 72 - store i32 0, ptr %26, align 8, !tbaa !36 + %25 = getelementptr inbounds nuw i8, ptr %0, i64 72 + store i32 0, ptr %25, align 8, !tbaa !36 br label %_ZN6icu_7710UnicodeSet14releasePatternEv.exit _ZN6icu_7710UnicodeSet14releasePatternEv.exit: ; preds = %25, %22, %3, %10 @@ -4382,9 +4371,8 @@ _ZN6icu_7710UnicodeSet14releasePatternEv.exit: ; preds = %190, %180, %16, %4, ; Function Attrs: mustprogress uwtable define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addEi(ptr noundef nonnull returned align 8 captures(address, ret: address, provenance) dereferenceable(200) %0, i32 noundef %1) local_unnamed_addr #1 align 2 { _ZN6icu_77L12pinCodePointERi.exit: - %2 = icmp slt i32 %1, 0 - %spec.select = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %.0 = select i1 %2, i32 0, i32 %spec.select + %2 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select = tail call i32 @llvm.umin.i32(i32 %2, i32 1114111) %3 = getelementptr inbounds nuw i8, ptr %0, i64 16 %4 = load ptr, ptr %3, align 8, !tbaa !31 %5 = load i32, ptr %4, align 4, !tbaa !12 @@ -4461,7 +4449,7 @@ _ZNK6icu_7710UnicodeSet13findCodePointEi.exit.thread: ; preds = %_ZN6icu_77L12pi 43: ; preds = %37 store i32 %.0, ptr %39, align 4, !tbaa !12 - %44 = icmp eq i32 %.0, 1114111 + %44 = icmp sgt i32 %1, 1114110 br i1 %44, label %45, label %56 45: ; preds = %43 @@ -5528,25 +5516,21 @@ _ZN6icu_7710UnicodeSet6addAllERKNS_13UnicodeStringE.exit: ; preds = %.lr.ph.i, % define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet6retainEii(ptr noundef nonnull returned align 8 captures(address, ret: address, provenance) dereferenceable(200) %0, i32 noundef %1, i32 noundef %2) unnamed_addr #1 align 2 { _ZN6icu_77L12pinCodePointERi.exit: %3 = alloca [3 x i32], align 4 - %4 = icmp sgt i32 %1, -1 - %spec.select8 = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %5 = icmp slt i32 %2, 0 - %spec.select10 = tail call i32 @llvm.umin.i32(i32 %2, i32 1114111) - %6 = select i1 %5, i32 0, i32 %spec.select10 - %.not11 = icmp samesign ugt i32 %spec.select8, %6 - %.not = select i1 %4, i1 %.not11, i1 false - br i1 %.not, label %12, label %7 + %4 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select8 = tail call i32 @llvm.umin.i32(i32 %4, i32 1114111) + %5 = tail call i32 @llvm.smax.i32(i32 %2, i32 0) + %.not = icmp samesign ult i32 %6, %4 + br i1 %.not, label %11, label %7 7: ; preds = %_ZN6icu_77L12pinCodePointERi.exit - %.07 = select i1 %4, i32 %spec.select8, i32 0 + %spec.select = tail call i32 @llvm.umin.i32(i32 %6, i32 1114111) call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #25 - store i32 %.07, ptr %3, align 4, !tbaa !12 + store i32 %5, ptr %3, align 4, !tbaa !12 %8 = getelementptr inbounds nuw i8, ptr %3, i64 4 - %9 = add nuw nsw i32 %spec.select10, 1 - %10 = select i1 %5, i32 1, i32 %9 - store i32 %10, ptr %8, align 4, !tbaa !12 - %11 = getelementptr inbounds nuw i8, ptr %3, i64 8 - store i32 1114112, ptr %11, align 4, !tbaa !12 + %9 = add nuw nsw i32 %spec.select, 1 + store i32 %9, ptr %8, align 4, !tbaa !12 + %10 = getelementptr inbounds nuw i8, ptr %3, i64 8 + store i32 1114128, ptr %10, align 4, !tbaa !28 call void @_ZN6icu_7710UnicodeSet6retainEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %3, i32 noundef 2, i8 noundef signext 0) call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #25 br label %_ZN6icu_7710UnicodeSet5clearEv.exit @@ -5861,15 +5845,13 @@ _ZN6icu_7710UnicodeSet14releasePatternEv.exit: ; preds = %155, %145, %14, %4, define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet6retainEi(ptr noundef nonnull returned align 8 captures(address, ret: address, provenance) dereferenceable(200) %0, i32 noundef %1) local_unnamed_addr #1 align 2 { _ZN6icu_7710UnicodeSet6retainEii.exit: %2 = alloca [3 x i32], align 4 - %3 = icmp slt i32 %1, 0 - %spec.select8.i = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %.07.i = select i1 %3, i32 0, i32 %spec.select8.i + %3 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select8.i = tail call i32 @llvm.umin.i32(i32 %3, i32 1114111) call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %2) #25 - store i32 %.07.i, ptr %2, align 4, !tbaa !12 + store i32 %4, ptr %2, align 4, !tbaa !12 %4 = getelementptr inbounds nuw i8, ptr %2, i64 4 %5 = add nuw nsw i32 %spec.select8.i, 1 - %6 = select i1 %3, i32 1, i32 %5 - store i32 %6, ptr %4, align 4, !tbaa !12 + store i32 %6, ptr %5, align 4, !tbaa !12 %7 = getelementptr inbounds nuw i8, ptr %2, i64 8 store i32 1114112, ptr %7, align 4, !tbaa !12 call void @_ZN6icu_7710UnicodeSet6retainEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %2, i32 noundef 2, i8 noundef signext 0) @@ -6017,25 +5999,21 @@ _ZN6icu_7710UnicodeSet6retainEii.exit: ; preds = %_ZNK6icu_7713Unicod define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet6removeEii(ptr noundef nonnull returned align 8 captures(address, ret: address, provenance) dereferenceable(200) %0, i32 noundef %1, i32 noundef %2) unnamed_addr #1 align 2 { _ZN6icu_77L12pinCodePointERi.exit: %3 = alloca [3 x i32], align 4 - %4 = icmp sgt i32 %1, -1 - %spec.select8 = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %5 = icmp slt i32 %2, 0 - %spec.select10 = tail call i32 @llvm.umin.i32(i32 %2, i32 1114111) - %6 = select i1 %5, i32 0, i32 %spec.select10 - %.not11 = icmp samesign ugt i32 %spec.select8, %6 - %.not = select i1 %4, i1 %.not11, i1 false - br i1 %.not, label %12, label %7 + %4 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select8 = tail call i32 @llvm.umin.i32(i32 %4, i32 1114111) + %5 = tail call i32 @llvm.smax.i32(i32 %2, i32 0) + %.not = icmp samesign ult i32 %6, %4 + br i1 %.not, label %11, label %7 7: ; preds = %_ZN6icu_77L12pinCodePointERi.exit - %.07 = select i1 %4, i32 %spec.select8, i32 0 + %spec.select = tail call i32 @llvm.umin.i32(i32 %6, i32 1114111) call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #25 - store i32 %.07, ptr %3, align 4, !tbaa !12 + store i32 %5, ptr %3, align 4, !tbaa !12 %8 = getelementptr inbounds nuw i8, ptr %3, i64 4 - %9 = add nuw nsw i32 %spec.select10, 1 - %10 = select i1 %5, i32 1, i32 %9 - store i32 %10, ptr %8, align 4, !tbaa !12 - %11 = getelementptr inbounds nuw i8, ptr %3, i64 8 - store i32 1114112, ptr %11, align 4, !tbaa !12 + %9 = add nuw nsw i32 %spec.select, 1 + store i32 %9, ptr %8, align 4, !tbaa !12 + %10 = getelementptr inbounds nuw i8, ptr %3, i64 8 + store i32 1114128, ptr %10, align 4, !tbaa !28 call void @_ZN6icu_7710UnicodeSet6retainEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %3, i32 noundef 2, i8 noundef signext 2) call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #25 br label %12 @@ -6048,15 +6026,13 @@ _ZN6icu_77L12pinCodePointERi.exit: define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet6removeEi(ptr noundef nonnull returned align 8 captures(address, ret: address, provenance) dereferenceable(200) %0, i32 noundef %1) local_unnamed_addr #1 align 2 { _ZN6icu_7710UnicodeSet6removeEii.exit: %2 = alloca [3 x i32], align 4 - %3 = icmp slt i32 %1, 0 - %spec.select8.i = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %.07.i = select i1 %3, i32 0, i32 %spec.select8.i + %3 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select8.i = tail call i32 @llvm.umin.i32(i32 %3, i32 1114111) call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %2) #25 - store i32 %.07.i, ptr %2, align 4, !tbaa !12 + store i32 %4, ptr %2, align 4, !tbaa !12 %4 = getelementptr inbounds nuw i8, ptr %2, i64 4 %5 = add nuw nsw i32 %spec.select8.i, 1 - %6 = select i1 %3, i32 1, i32 %5 - store i32 %6, ptr %4, align 4, !tbaa !12 + store i32 %6, ptr %5, align 4, !tbaa !12 %7 = getelementptr inbounds nuw i8, ptr %2, i64 8 store i32 1114112, ptr %7, align 4, !tbaa !12 call void @_ZN6icu_7710UnicodeSet6retainEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %2, i32 noundef 2, i8 noundef signext 2) @@ -6315,17 +6291,15 @@ define noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet1 br i1 %.not2.i, label %_ZN6icu_77L12pinCodePointERi.exit.i, label %_ZN6icu_7710UnicodeSet10complementEii.exit _ZN6icu_77L12pinCodePointERi.exit.i: ; preds = %9 - %13 = icmp slt i32 %1, 0 - %spec.select12.i = tail call i32 @llvm.umin.i32(i32 %1, i32 1114111) - %.011.i = select i1 %13, i32 0, i32 %spec.select12.i + %14 = tail call i32 @llvm.smax.i32(i32 %1, i32 0) + %spec.select12.i = tail call i32 @llvm.umin.i32(i32 %14, i32 1114111) call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #25 - store i32 %.011.i, ptr %3, align 4, !tbaa !12 + store i32 %15, ptr %3, align 4, !tbaa !12 %14 = getelementptr inbounds nuw i8, ptr %3, i64 4 %15 = add nuw nsw i32 %spec.select12.i, 1 - %16 = select i1 %13, i32 1, i32 %15 - store i32 %16, ptr %14, align 4, !tbaa !12 - %17 = getelementptr inbounds nuw i8, ptr %3, i64 8 - store i32 1114112, ptr %17, align 4, !tbaa !12 + store i32 %15, ptr %16, align 4, !tbaa !12 + %18 = getelementptr inbounds nuw i8, ptr %3, i64 8 + store i32 1114128, ptr %18, align 4, !tbaa !28 call void @_ZN6icu_7710UnicodeSet11exclusiveOrEPKiia(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull %3, i32 noundef 2, i8 noundef signext 0) call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #25 %18 = getelementptr inbounds nuw i8, ptr %0, i64 64 diff --git a/bench/icu/optimized/utext.ll b/bench/icu/optimized/utext.ll index 9ff33fbf0e8..3bc25d98ba5 100644 --- a/bench/icu/optimized/utext.ll +++ b/bench/icu/optimized/utext.ll @@ -5395,44 +5395,46 @@ define internal noundef i32 @_ZL16ucstrTextExtractP5UTextllPDsiP10UErrorCode(ptr _ZL8pinIndexRll.exit: ; preds = %16 %26 = and i64 %23, 2147483647 + %27 = icmp slt i64 %2, 0 %spec.select = tail call i64 @llvm.umin.i64(i64 %2, i64 %26) - br label %27 + %28 = trunc nuw nsw i64 %spec.select to i32 + %29 = select i1 %27, i32 0, i32 %28 + br label %33 _ZL8pinIndexRll.exit87: ; preds = %16 - %spec.select90 = tail call i64 @llvm.umin.i64(i64 %2, i64 2147483647) - br label %27 + %spec.select90 = tail call i64 @llvm.smax.i64(i64 %2, i64 0) + %31 = tail call i64 @llvm.umin.i64(i64 %30, i64 2147483647) + %32 = trunc nuw nsw i64 %31 to i32 + br label %33 27: ; preds = %_ZL8pinIndexRll.exit87, %_ZL8pinIndexRll.exit - %spec.select90.sink = phi i64 [ %spec.select90, %_ZL8pinIndexRll.exit87 ], [ %spec.select, %_ZL8pinIndexRll.exit ] - %.sink = icmp slt i64 %2, 0 - %28 = trunc nuw nsw i64 %spec.select90.sink to i32 - %29 = select i1 %.sink, i32 0, i32 %28 - %30 = icmp slt i32 %21, %29 - br i1 %30, label %.lr.ph, label %.loopexit - -.lr.ph: ; preds = %27 - %31 = icmp slt i32 %24, 0 - %32 = sext i32 %21 to i64 - %33 = zext nneg i32 %4 to i64 - %34 = sub i32 %29, %21 - %wide.trip.count136 = zext i32 %34 to i64 - br i1 %31, label %.lr.ph.split.us.split, label %.lr.ph.split.split.us - -.lr.ph.split.us.split: ; preds = %.lr.ph, %42 - %indvars.iv131 = phi i64 [ %indvars.iv.next132, %42 ], [ 0, %.lr.ph ] - %indvars.iv129 = phi i64 [ %indvars.iv.next130, %42 ], [ %32, %.lr.ph ] - %35 = getelementptr inbounds i16, ptr %19, i64 %indvars.iv129 - %36 = load i16, ptr %35, align 2, !tbaa !18 - %37 = icmp eq i16 %36, 0 - br i1 %37, label %.split.us, label %38 + %spec.select90.sink = phi i32 [ %29, %_ZL8pinIndexRll.exit ], [ %32, %_ZL8pinIndexRll.exit87 ] + %.sink = icmp slt i32 %21, %.071 + br i1 %.sink, label %.lr.ph, label %.loopexit + +.lr.ph:; preds = %27 + %35 = icmp slt i32 %24, 0 + %36 = sext i32 %21 to i64 + %37 = zext nneg i32 %4 to i64 + %38 = sub i32 %.071, %21 + %wide.trip.count136 = zext i32 %38 to i64 + br i1 %35, label %.lr.ph.split.us.split, label %.lr.ph.split.split.us + +.lr.ph.split.us.split:; preds = %.lr.ph, %46 + %indvars.iv131 = phi i64 [ %indvars.iv.next132, %46 ], [ 0, %.lr.ph ] + %indvars.iv129 = phi i64 [ %indvars.iv.next130, %46 ], [ %36, %.lr.ph ] + %39 = getelementptr inbounds i16, ptr %19, i64 %indvars.iv129 + %40 = load i16, ptr %39, align 2, !tbaa !18 + %41 = icmp eq i16 %40, 0 + br i1 %41, label %.split.us, label %42 38: ; preds = %.lr.ph.split.us.split - %39 = icmp samesign ult i64 %indvars.iv131, %33 + %39 = icmp samesign ult i64 %indvars.iv131, %37 br i1 %39, label %40, label %42 40: ; preds = %38 %41 = getelementptr inbounds nuw i16, ptr %3, i64 %indvars.iv131 - store i16 %36, ptr %41, align 2, !tbaa !18 + store i16 %40, ptr %41, align 2, !tbaa !18 br label %42 42: ; preds = %38, %40 @@ -5442,9 +5444,9 @@ _ZL8pinIndexRll.exit87: ; preds = %16 br i1 %exitcond137.not, label %.loopexit.loopexit, label %.lr.ph.split.us.split, !llvm.loop !83 .lr.ph.split.split.us: ; preds = %.lr.ph, %43 - %indvars.iv122 = phi i64 [ %indvars.iv.next123, %43 ], [ 0, %.lr.ph ] - %indvars.iv = phi i64 [ %indvars.iv.next, %43 ], [ %32, %.lr.ph ] - %exitcond.not = icmp eq i64 %indvars.iv122, %33 + %indvars.iv122 = phi i64 [ %indvars.iv.next123, %47 ], [ 0, %.lr.ph ] + %indvars.iv = phi i64 [ %indvars.iv.next, %47 ], [ %36, %.lr.ph ] + %exitcond.not = icmp eq i64 %indvars.iv122, %37 br i1 %exitcond.not, label %.loopexit, label %43 43: ; preds = %.lr.ph.split.split.us @@ -5478,68 +5480,68 @@ _ZL8pinIndexRll.exit87: ; preds = %16 br label %.loopexit .loopexit: ; preds = %.lr.ph.split.split.us, %.loopexit.loopexit114, %.loopexit.loopexit, %27, %.split.us - %.174 = phi i32 [ %47, %.split.us ], [ 0, %27 ], [ %34, %.loopexit.loopexit ], [ %34, %.loopexit.loopexit114 ], [ %34, %.lr.ph.split.split.us ] - %.1 = phi i32 [ %48, %.split.us ], [ %21, %27 ], [ %52, %.loopexit.loopexit ], [ %53, %.loopexit.loopexit114 ], [ %29, %.lr.ph.split.split.us ] - %.0 = phi i32 [ %48, %.split.us ], [ %24, %27 ], [ %24, %.loopexit.loopexit ], [ %24, %.loopexit.loopexit114 ], [ %24, %.lr.ph.split.split.us ] + %.174 = phi i32 [ %47, %.split.us ], [ 0, %33 ], [ %38, %.loopexit.loopexit ], [ %38, %.loopexit.loopexit114 ], [ %38, %.lr.ph.split.split.us ] + %.1 = phi i32 [ %48, %.split.us ], [ %21, %33 ], [ %52, %.loopexit.loopexit ], [ %53, %.loopexit.loopexit114 ], [ %.071, %.lr.ph.split.split.us ] + %.0 = phi i32 [ %48, %.split.us ], [ %24, %33 ], [ %24, %.loopexit.loopexit ], [ %24, %.loopexit.loopexit114 ], [ %24, %.lr.ph.split.split.us ] %54 = icmp sgt i32 %.1, 0 - br i1 %54, label %55, label %74 + br i1 %54, label %55, label %78 55: ; preds = %.loopexit %56 = zext nneg i32 %.1 to i64 %57 = getelementptr i16, ptr %19, i64 %56 %58 = getelementptr i8, ptr %57, i64 -2 %59 = load i16, ptr %58, align 2, !tbaa !18 - %60 = and i16 %59, -1024 - %61 = icmp eq i16 %60, -10240 - %or.cond3 = icmp ugt i32 %.0, %.1 - %or.cond84 = and i1 %or.cond3, %61 - br i1 %or.cond84, label %62, label %74 - -62: ; preds = %55 - %63 = load i16, ptr %57, align 2, !tbaa !18 %64 = and i16 %63, -1024 - %65 = icmp eq i16 %64, -9216 - br i1 %65, label %66, label %74 + %65 = icmp eq i16 %64, -10240 + %or.cond3 = icmp ugt i32 %.0, %.1 + %or.cond84 = and i1 %or.cond3, %65 + br i1 %or.cond84, label %66, label %78 + +66: ; preds = %59 + %67 = load i16, ptr %61, align 2, !tbaa !18 + %68 = and i16 %67, -1024 + %69 = icmp eq i16 %68, -9216 + br i1 %69, label %70, label %78 + +70: ; preds = %66 + %71 = icmp slt i32 %.174, %4 + br i1 %71, label %72, label %76 + +72: ; preds = %70 + %73 = add nsw i32 %.174, 1 + %74 = sext i32 %.174 to i64 + %75 = getelementptr inbounds i16, ptr %3, i64 %74 + store i16 %67, ptr %75, align 2, !tbaa !18 + br label %76 -66: ; preds = %62 - %67 = icmp slt i32 %.174, %4 - br i1 %67, label %68, label %72 +66: ; preds = %72, %70 + %.3 = phi i32 [ %73, %72 ], [ %.174, %70 ] + %77 = add nuw nsw i32 %.1, 1 + br label %78 -68: ; preds = %66 - %69 = add nsw i32 %.174, 1 - %70 = sext i32 %.174 to i64 - %71 = getelementptr inbounds i16, ptr %3, i64 %70 - store i16 %63, ptr %71, align 2, !tbaa !18 - br label %72 +68: ; preds = %76, %66, %59, %.loopexit + %.275 = phi i32 [ %.3, %76 ], [ %.174, %66 ], [ %.174, %59 ], [ %.174, %.loopexit ] + %.2 = phi i32 [ %77, %76 ], [ %.1, %66 ], [ %.1, %59 ], [ %.1, %.loopexit ] + %79 = sext i32 %.2 to i64 + %80 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %81 = load i64, ptr %80, align 8, !tbaa !13 + %.not81 = icmp slt i64 %81, %79 + br i1 %.not81, label %83, label %82 -72: ; preds = %68, %66 - %.3 = phi i32 [ %69, %68 ], [ %.174, %66 ] - %73 = add nuw nsw i32 %.1, 1 - br label %74 - -74: ; preds = %72, %62, %55, %.loopexit - %.275 = phi i32 [ %.3, %72 ], [ %.174, %62 ], [ %.174, %55 ], [ %.174, %.loopexit ] - %.2 = phi i32 [ %73, %72 ], [ %.1, %62 ], [ %.1, %55 ], [ %.1, %.loopexit ] - %75 = sext i32 %.2 to i64 - %76 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %77 = load i64, ptr %76, align 8, !tbaa !13 - %.not81 = icmp slt i64 %77, %75 - br i1 %.not81, label %79, label %78 - -78: ; preds = %74 +72: ; preds = %68 store i32 %.2, ptr %20, align 8, !tbaa !3 br label %81 -79: ; preds = %74 - %80 = tail call noundef signext i8 @_ZL15ucstrTextAccessP5UTextla(ptr noundef nonnull %0, i64 noundef %75, i8 noundef signext 1) +79: ; preds = %78 + %80 = tail call noundef signext i8 @_ZL15ucstrTextAccessP5UTextla(ptr noundef nonnull %0, i64 noundef %79, i8 noundef signext 1) br label %81 -81: ; preds = %79, %78 +81: ; preds = %79, %82 %82 = tail call i32 @u_terminateUChars_77(ptr noundef %3, i32 noundef %4, i32 noundef %.275, ptr noundef nonnull %5) br label %83 83: ; preds = %6, %81, %15 - %.070 = phi i32 [ 0, %15 ], [ %.275, %81 ], [ 0, %6 ] + %.070 = phi i32 [ 0, %15 ], [ %.275, %85 ], [ 0, %6 ] ret i32 %.070 } diff --git a/bench/image-rs/optimized/254ue5dpb10tdnze.ll b/bench/image-rs/optimized/254ue5dpb10tdnze.ll index 427dea6e419..6771c7060ad 100644 --- a/bench/image-rs/optimized/254ue5dpb10tdnze.ll +++ b/bench/image-rs/optimized/254ue5dpb10tdnze.ll @@ -15839,7 +15839,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h4ffc8b4fbb746dddE(ptr 16: ; preds = %.loopexit.split-lp, %.loopexit %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] invoke void @"_ZN4core3ptr113drop_in_place$LT$image..buffer_..ImageBuffer$LT$image..color..Rgb$LT$u16$GT$$C$alloc..vec..Vec$LT$u16$GT$$GT$$GT$17h594a734dcad31749E"(ptr noalias noundef nonnull align 8 dereferenceable(32) %9) #19 - to label %67 unwind label %65 + to label %65 unwind label %65 17: ; preds = %3 %.fca.1.extract.i = extractvalue { i64, i64 } %14, 1 @@ -15882,17 +15882,16 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h4ffc8b4fbb746dddE(ptr %28 = load i16, ptr %.sroa.06.0.ptr10.i.i, align 2, !alias.scope !1714, !noalias !1717, !noundef !4 %29 = zext i16 %28 to i32 %30 = add i32 %2, %29 - %31 = icmp slt i32 %30, 0 - %32 = tail call i32 @llvm.umin.i32(i32 %30, i32 65535) + %31 = tail call i32 @llvm.smax.i32(i32 %30, i32 0) + %32 = tail call i32 @llvm.umin.i32(i32 %31, i32 65535) %.sroa.06.0.add.i.i = add nuw nsw i64 %.sroa.06.0.idx9.i.i, 2 %33 = trunc nuw i32 %32 to i16 - %34 = select i1 %31, i16 0, i16 %33 - store i16 %34, ptr %.sroa.06.0.ptr10.i.i, align 2, !alias.scope !1714, !noalias !1717 - %35 = icmp eq i64 %.sroa.06.0.add.i.i, 6 - br i1 %35, label %36, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h27d3aa7c5c524307E.exit.i.i" + store i16 %33, ptr %.sroa.06.0.ptr10.i.i, align 2, !alias.scope !1714, !noalias !1717 + %33 = icmp eq i64 %.sroa.06.0.add.i.i, 6 + br i1 %33, label %34, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h27d3aa7c5c524307E.exit.i.i" -36: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h27d3aa7c5c524307E.exit.i.i" - %37 = add nuw i32 %25, 1 +34: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h27d3aa7c5c524307E.exit.i.i" + %35 = add nuw i32 %25, 1 %.sroa.0.0.copyload.i = load i48, ptr %8, align 8, !noalias !1708 call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %8), !noalias !1708 tail call void @llvm.experimental.noalias.scope.decl(metadata !1720) @@ -15901,7 +15900,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h4ffc8b4fbb746dddE(ptr %or.cond.i.i = or i1 %38, %39 br i1 %or.cond.i.i, label %40, label %50 -40: ; preds = %36 +40: ; preds = %34 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7), !noalias !1723 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6), !noalias !1723 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5), !noalias !1723 @@ -15914,11 +15913,11 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h4ffc8b4fbb746dddE(ptr store i32 %13, ptr %42, align 4, !noalias !1723 store ptr %5, ptr %6, align 8, !noalias !1723 %43 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %41, align 8, !noalias !1723 + %42 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store ptr %4, ptr %42, align 8, !noalias !1723 + %43 = getelementptr inbounds nuw i8, ptr %6, i64 24 store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %43, align 8, !noalias !1723 - %44 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store ptr %4, ptr %44, align 8, !noalias !1723 - %45 = getelementptr inbounds nuw i8, ptr %6, i64 24 - store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %45, align 8, !noalias !1723 store ptr @anon.f0c04611e5e2b4be9a0dda14dd5d7c38.45, ptr %7, align 8, !alias.scope !1725, !noalias !1728 %46 = getelementptr inbounds nuw i8, ptr %7, i64 8 store i64 2, ptr %46, align 8, !alias.scope !1725, !noalias !1728 @@ -15934,7 +15933,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h4ffc8b4fbb746dddE(ptr .noexc7: ; preds = %40 unreachable -50: ; preds = %36 +50: ; preds = %34 %51 = zext i32 %.sroa.8.145 to i64 %52 = mul nuw i64 %23, %51 %53 = zext i32 %25 to i64 @@ -16020,7 +16019,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h5d0be34efb1e7a17E(ptr 16: ; preds = %.loopexit.split-lp, %.loopexit %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] invoke void @"_ZN4core3ptr114drop_in_place$LT$image..buffer_..ImageBuffer$LT$image..color..Rgba$LT$u16$GT$$C$alloc..vec..Vec$LT$u16$GT$$GT$$GT$17h4ed1c6a8c5e3bfe9E"(ptr noalias noundef nonnull align 8 dereferenceable(32) %9) #19 - to label %67 unwind label %65 + to label %65 unwind label %65 17: ; preds = %3 %.fca.1.extract.i = extractvalue { i64, i64 } %14, 1 @@ -16063,17 +16062,16 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h5d0be34efb1e7a17E(ptr %28 = load i16, ptr %.sroa.08.0.ptr12.i.i, align 2, !alias.scope !1746, !noalias !1749, !noundef !4 %29 = zext i16 %28 to i32 %30 = add i32 %2, %29 - %31 = icmp slt i32 %30, 0 - %32 = tail call i32 @llvm.umin.i32(i32 %30, i32 65535) + %31 = tail call i32 @llvm.smax.i32(i32 %30, i32 0) + %32 = tail call i32 @llvm.umin.i32(i32 %31, i32 65535) %.sroa.08.0.add.i.i = add nuw nsw i64 %.sroa.08.0.idx11.i.i, 2 %33 = trunc nuw i32 %32 to i16 - %34 = select i1 %31, i16 0, i16 %33 - store i16 %34, ptr %.sroa.08.0.ptr12.i.i, align 2, !alias.scope !1746, !noalias !1749 - %35 = icmp eq i64 %.sroa.08.0.add.i.i, 6 - br i1 %35, label %36, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h9d2dd3e933643d3dE.exit.i.i" + store i16 %33, ptr %.sroa.08.0.ptr12.i.i, align 2, !alias.scope !1746, !noalias !1749 + %33 = icmp eq i64 %.sroa.08.0.add.i.i, 6 + br i1 %33, label %34, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h9d2dd3e933643d3dE.exit.i.i" -36: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h9d2dd3e933643d3dE.exit.i.i" - %37 = add nuw i32 %25, 1 +34: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h9d2dd3e933643d3dE.exit.i.i" + %35 = add nuw i32 %25, 1 %.sroa.0.0.copyload.i = load i64, ptr %8, align 8, !noalias !1741 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8), !noalias !1741 tail call void @llvm.experimental.noalias.scope.decl(metadata !1752) @@ -16082,7 +16080,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h5d0be34efb1e7a17E(ptr %or.cond.i.i = or i1 %38, %39 br i1 %or.cond.i.i, label %40, label %50 -40: ; preds = %36 +40: ; preds = %34 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7), !noalias !1755 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6), !noalias !1755 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5), !noalias !1755 @@ -16095,11 +16093,11 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h5d0be34efb1e7a17E(ptr store i32 %13, ptr %42, align 4, !noalias !1755 store ptr %5, ptr %6, align 8, !noalias !1755 %43 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %41, align 8, !noalias !1755 + %42 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store ptr %4, ptr %42, align 8, !noalias !1755 + %43 = getelementptr inbounds nuw i8, ptr %6, i64 24 store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %43, align 8, !noalias !1755 - %44 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store ptr %4, ptr %44, align 8, !noalias !1755 - %45 = getelementptr inbounds nuw i8, ptr %6, i64 24 - store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %45, align 8, !noalias !1755 store ptr @anon.f0c04611e5e2b4be9a0dda14dd5d7c38.45, ptr %7, align 8, !alias.scope !1757, !noalias !1760 %46 = getelementptr inbounds nuw i8, ptr %7, i64 8 store i64 2, ptr %46, align 8, !alias.scope !1757, !noalias !1760 @@ -16115,7 +16113,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h5d0be34efb1e7a17E(ptr .noexc8: ; preds = %40 unreachable -50: ; preds = %36 +50: ; preds = %34 %51 = zext i32 %.sroa.8.145 to i64 %52 = mul nuw i64 %23, %51 %53 = zext i32 %25 to i64 @@ -16249,17 +16247,16 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h71fa866f45d0547dE(ptr %27 = load i8, ptr %.sroa.06.0.ptr10.i.i, align 1, !alias.scope !1782, !noalias !1785, !noundef !4 %28 = zext i8 %27 to i32 %29 = add i32 %2, %28 - %30 = icmp slt i32 %29, 0 - %31 = tail call i32 @llvm.umin.i32(i32 %29, i32 255) + %30 = tail call i32 @llvm.smax.i32(i32 %29, i32 0) + %31 = tail call i32 @llvm.umin.i32(i32 %30, i32 255) %.sroa.06.0.add.i.i = add nuw nsw i64 %.sroa.06.0.idx9.i.i, 1 %32 = trunc nuw i32 %31 to i8 - %33 = select i1 %30, i8 0, i8 %32 - store i8 %33, ptr %.sroa.06.0.ptr10.i.i, align 1, !alias.scope !1782, !noalias !1785 - %34 = icmp eq i64 %.sroa.06.0.add.i.i, 3 - br i1 %34, label %35, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h2c4423c3003ecab4E.exit.i.i" + store i8 %31, ptr %.sroa.06.0.ptr10.i.i, align 1, !alias.scope !1782, !noalias !1785 + %33 = icmp eq i64 %.sroa.06.0.add.i.i, 3 + br i1 %32, label %33, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h2c4423c3003ecab4E.exit.i.i" -35: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h2c4423c3003ecab4E.exit.i.i" - %36 = add nuw i32 %24, 1 +33: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h2c4423c3003ecab4E.exit.i.i" + %34 = add nuw i32 %24, 1 %.sroa.0.0.copyload.i = load i24, ptr %8, align 4, !noalias !1776 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %8), !noalias !1776 %37 = icmp uge i32 %24, %11 @@ -16267,7 +16264,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h71fa866f45d0547dE(ptr %or.cond.i.i = or i1 %37, %38 br i1 %or.cond.i.i, label %39, label %49 -39: ; preds = %35 +39: ; preds = %33 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7), !noalias !1788 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6), !noalias !1788 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5), !noalias !1788 @@ -16280,11 +16277,11 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h71fa866f45d0547dE(ptr store i32 %13, ptr %41, align 4, !noalias !1788 store ptr %5, ptr %6, align 8, !noalias !1788 %42 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %40, align 8, !noalias !1788 + %41 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store ptr %4, ptr %41, align 8, !noalias !1788 + %42 = getelementptr inbounds nuw i8, ptr %6, i64 24 store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %42, align 8, !noalias !1788 - %43 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store ptr %4, ptr %43, align 8, !noalias !1788 - %44 = getelementptr inbounds nuw i8, ptr %6, i64 24 - store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %44, align 8, !noalias !1788 store ptr @anon.f0c04611e5e2b4be9a0dda14dd5d7c38.45, ptr %7, align 8, !alias.scope !1792, !noalias !1795 %45 = getelementptr inbounds nuw i8, ptr %7, i64 8 store i64 2, ptr %45, align 8, !alias.scope !1792, !noalias !1795 @@ -16300,7 +16297,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h71fa866f45d0547dE(ptr .noexc7: ; preds = %39 unreachable -49: ; preds = %35 +49: ; preds = %33 %50 = zext i32 %.sroa.8.145 to i64 %51 = mul nuw i64 %23, %50 %52 = zext i32 %24 to i64 @@ -16331,10 +16328,10 @@ define hidden void @_ZN5image8imageops8colorops8brighten17h71fa866f45d0547dE(ptr ._crit_edge.i: ; preds = %57 %61 = getelementptr inbounds i8, ptr %19, i64 %54 store i24 %.sroa.0.0.copyload.i, ptr %61, align 1 - %.not.i = icmp uge i32 %36, %11 + %.not.i = icmp uge i32 %34, %11 %62 = zext i1 %.not.i to i32 %.sroa.8.1 = add nuw i32 %.sroa.8.145, %62 - %63 = select i1 %.not.i, i32 0, i32 %36 + %63 = select i1 %.not.i, i32 0, i32 %34 %.not2.i = icmp ult i32 %.sroa.8.1, %13 br i1 %.not2.i, label %.lr.ph, label %._crit_edge.i._crit_edge @@ -16764,17 +16761,16 @@ define hidden void @_ZN5image8imageops8colorops8brighten17hffa7bf9e38c1b685E(ptr %27 = load i8, ptr %.sroa.08.0.ptr12.i.i, align 1, !alias.scope !1858, !noalias !1861, !noundef !4 %28 = zext i8 %27 to i32 %29 = add i32 %2, %28 - %30 = icmp slt i32 %29, 0 - %31 = tail call i32 @llvm.umin.i32(i32 %29, i32 255) + %30 = tail call i32 @llvm.smax.i32(i32 %29, i32 0) + %31 = tail call i32 @llvm.umin.i32(i32 %30, i32 255) %.sroa.08.0.add.i.i = add nuw nsw i64 %.sroa.08.0.idx11.i.i, 1 %32 = trunc nuw i32 %31 to i8 - %33 = select i1 %30, i8 0, i8 %32 - store i8 %33, ptr %.sroa.08.0.ptr12.i.i, align 1, !alias.scope !1858, !noalias !1861 - %34 = icmp eq i64 %.sroa.08.0.add.i.i, 3 - br i1 %34, label %35, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h10479b85d83fd2c4E.exit.i.i" + store i8 %31, ptr %.sroa.08.0.ptr12.i.i, align 1, !alias.scope !1858, !noalias !1861 + %33 = icmp eq i64 %.sroa.08.0.add.i.i, 3 + br i1 %32, label %33, label %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h10479b85d83fd2c4E.exit.i.i" -35: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h10479b85d83fd2c4E.exit.i.i" - %36 = add nuw i32 %24, 1 +33: ; preds = %"_ZN5image8imageops8colorops8brighten28_$u7b$$u7b$closure$u7d$$u7d$17h10479b85d83fd2c4E.exit.i.i" + %34 = add nuw i32 %24, 1 %.sroa.0.0.copyload.i = load i32, ptr %8, align 4, !noalias !1853 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8), !noalias !1853 %37 = icmp uge i32 %24, %11 @@ -16782,7 +16778,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17hffa7bf9e38c1b685E(ptr %or.cond.i.i = or i1 %37, %38 br i1 %or.cond.i.i, label %39, label %49 -39: ; preds = %35 +39: ; preds = %33 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7), !noalias !1864 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6), !noalias !1864 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5), !noalias !1864 @@ -16795,11 +16791,11 @@ define hidden void @_ZN5image8imageops8colorops8brighten17hffa7bf9e38c1b685E(ptr store i32 %13, ptr %41, align 4, !noalias !1864 store ptr %5, ptr %6, align 8, !noalias !1864 %42 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %40, align 8, !noalias !1864 + %41 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store ptr %4, ptr %41, align 8, !noalias !1864 + %42 = getelementptr inbounds nuw i8, ptr %6, i64 24 store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %42, align 8, !noalias !1864 - %43 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store ptr %4, ptr %43, align 8, !noalias !1864 - %44 = getelementptr inbounds nuw i8, ptr %6, i64 24 - store ptr @"_ZN50_$LT$$LP$U$C$T$RP$$u20$as$u20$core..fmt..Debug$GT$3fmt17h297b96a1d93efb91E", ptr %44, align 8, !noalias !1864 store ptr @anon.f0c04611e5e2b4be9a0dda14dd5d7c38.45, ptr %7, align 8, !alias.scope !1868, !noalias !1871 %45 = getelementptr inbounds nuw i8, ptr %7, i64 8 store i64 2, ptr %45, align 8, !alias.scope !1868, !noalias !1871 @@ -16815,7 +16811,7 @@ define hidden void @_ZN5image8imageops8colorops8brighten17hffa7bf9e38c1b685E(ptr .noexc8: ; preds = %39 unreachable -49: ; preds = %35 +49: ; preds = %33 %50 = zext i32 %.sroa.8.145 to i64 %51 = mul nuw i64 %23, %50 %52 = zext i32 %24 to i64 @@ -16846,10 +16842,10 @@ define hidden void @_ZN5image8imageops8colorops8brighten17hffa7bf9e38c1b685E(ptr ._crit_edge.i: ; preds = %57 %61 = getelementptr inbounds i8, ptr %19, i64 %54 store i32 %.sroa.0.0.copyload.i, ptr %61, align 1 - %.not.i = icmp uge i32 %36, %11 + %.not.i = icmp uge i32 %34, %11 %62 = zext i1 %.not.i to i32 %.sroa.8.1 = add nuw i32 %.sroa.8.145, %62 - %63 = select i1 %.not.i, i32 0, i32 %36 + %63 = select i1 %.not.i, i32 0, i32 %34 %.not3.i = icmp ult i32 %.sroa.8.1, %13 br i1 %.not3.i, label %.lr.ph, label %._crit_edge.i._crit_edge diff --git a/bench/image-rs/optimized/4srzh4wujeew249y.ll b/bench/image-rs/optimized/4srzh4wujeew249y.ll index 70952131f93..1b555dc0b4c 100644 --- a/bench/image-rs/optimized/4srzh4wujeew249y.ll +++ b/bench/image-rs/optimized/4srzh4wujeew249y.ll @@ -35118,7 +35118,7 @@ define { i8, i8 } @_ZN5image6codecs4webp18lossless_transform13TransformType15app %7 = alloca { { i64, ptr }, i64 }, align 8 %8 = alloca { { i64, ptr }, i64 }, align 8 %9 = load i8, ptr %0, align 8, !range !952, !noundef !14 - switch i8 %9, label %default.unreachable1240 [ + switch i8 %9, label %default.unreachable1239 [ i8 0, label %10 i8 1, label %21 i8 2, label %32 @@ -35171,13 +35171,13 @@ default.unreachable1240: ; preds = %4 br label %.lr.ph.us769 .lr.ph.us769: ; preds = %.lr.ph.us769.preheader, %..loopexit505_crit_edge.us - %.sroa.044.0766.us = phi i64 [ %37, %..loopexit505_crit_edge.us ], [ 0, %.lr.ph.us769.preheader ] + %.sroa.044.0766.us = phi i64 [ %37, %..loopexit504_crit_edge.us ], [ 0, %.lr.ph.us768.preheader ] %37 = add nuw nsw i64 %.sroa.044.0766.us, 1 %38 = mul nuw nsw i64 %.sroa.044.0766.us, %33 br label %39 39: ; preds = %.lr.ph.us769, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit431.us" - %.sroa.051.0764.us = phi i64 [ 0, %.lr.ph.us769 ], [ %42, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit431.us" ] + %.sroa.051.0764.us = phi i64 [ 0, %.lr.ph.us768 ], [ %42, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit430.us" ] %40 = add nuw nsw i64 %.sroa.051.0764.us, %38 %41 = icmp ult i64 %40, %.val245.us.pre.pre br i1 %41, label %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit431.us", label %.split771.us, !prof !29 @@ -35303,7 +35303,7 @@ default.unreachable1240: ; preds = %4 br i1 %81, label %.lr.ph790.us, label %.thread449 .lr.ph790.us: ; preds = %.lr.ph810, %..loopexit_crit_edge.us - %.sroa.016.0809.us = phi i64 [ %107, %..loopexit_crit_edge.us ], [ 1, %.lr.ph810 ] + %.sroa.016.0809.us = phi i64 [ %107, %..loopexit_crit_edge.us ], [ 1, %.lr.ph809 ] %107 = add nuw nsw i64 %.sroa.016.0809.us, 1 %108 = lshr i64 %.sroa.016.0809.us, %104 %109 = mul i64 %108, %66 @@ -35316,7 +35316,7 @@ default.unreachable1240: ; preds = %4 br label %114 114: ; preds = %.lr.ph790.us, %616 - %.sroa.023.0788.us = phi i64 [ 1, %.lr.ph790.us ], [ %115, %616 ] + %.sroa.023.0788.us = phi i64 [ 1, %.lr.ph789.us ], [ %115, %616 ] %115 = add nuw nsw i64 %.sroa.023.0788.us, 1 %116 = lshr i64 %.sroa.023.0788.us, %104 %117 = add i64 %116, %109 @@ -35398,10 +35398,9 @@ _ZN5image6codecs4webp18lossless_transform12get_top_left17h2dacab8ed20d1582E.exit %151 = sdiv i16 %.lhs.trunc.i.i.us, 2 %.sext.i.i.us = sext i16 %151 to i32 %152 = add nsw i32 %147, %.sext.i.i.us - %153 = icmp slt i32 %152, 0 - %..i.i.i422.us = tail call i32 @llvm.umin.i32(i32 range(i32 -255, 511) %152, i32 255) - %.0.i.i.i423.us = select i1 %153, i32 0, i32 %..i.i.i422.us - %154 = shl nuw i32 %.0.i.i.i423.us, %145 + %153 = tail call i32 @llvm.smax.i32(i32 range(i32 -255, 511) %152, i32 0) + %..i.i.i422.us = tail call noundef range(i32 0, 256) i32 @llvm.umin.i32(i32 %153, i32 255) + %154 = shl nuw i32 %..i.i.i422.us, %145 %155 = or i32 %154, %.027.i.us %exitcond.not.i424.us = icmp eq i32 %indvars.iv.next.i421.us, 4 br i1 %exitcond.not.i424.us, label %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit425.us", label %.split11.i.us @@ -35456,9 +35455,8 @@ _ZN5image6codecs4webp18lossless_transform12get_top_left17h2dacab8ed20d1582E.exit %187 = and i32 %186, 255 %188 = add nuw nsw i32 %185, %183 %189 = sub nsw i32 %188, %187 - %190 = icmp slt i32 %189, 0 - %..i.i.i.us = tail call i32 @llvm.umin.i32(i32 range(i32 -255, 511) %189, i32 255) - %.0.i.i.i.us = select i1 %190, i32 0, i32 %..i.i.i.us + %190 = tail call i32 @llvm.smax.i32(i32 range(i32 -255, 511) %189, i32 0) + %..i.i.i.us = tail call noundef range(i32 0, 256) i32 @llvm.umin.i32(i32 %190, i32 255) %191 = shl nuw i32 %.0.i.i.i.us, %181 %192 = or i32 %191, %.034.i.us %exitcond.not.i410.us = icmp eq i32 %indvars.iv.next.i.us, 4 @@ -36085,7 +36083,7 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us br i1 %exitcond1200.not, label %.thread449, label %.lr.ph790.us .lr.ph787: ; preds = %.preheader502, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit327" - %.sroa.09.0786 = phi i64 [ %620, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit327" ], [ 1, %.preheader502 ] + %.sroa.09.0786 = phi i64 [ %620, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit327" ], [ 1, %.preheader501 ] %617 = mul nuw nsw i64 %.sroa.09.0786, %67 %618 = icmp ult i64 %617, %70 br i1 %618, label %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit327", label %619, !prof !29 @@ -36197,7 +36195,7 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us unreachable .thread449: ; preds = %..loopexit505_crit_edge.us, %..loopexit503_crit_edge.us, %..loopexit_crit_edge.us, %.preheader502, %.lr.ph776, %.lr.ph810, %.lr.ph768, %32, %.split215, %751, %.split211 - %.sroa.0.0 = phi i8 [ 5, %.split211 ], [ 6, %751 ], [ 6, %.split215 ], [ 6, %32 ], [ 6, %.lr.ph768 ], [ 6, %.lr.ph810 ], [ 6, %.lr.ph776 ], [ 6, %.preheader502 ], [ 6, %..loopexit_crit_edge.us ], [ 6, %..loopexit503_crit_edge.us ], [ 6, %..loopexit505_crit_edge.us ] + %.sroa.0.0 = phi i8 [ 5, %.split211 ], [ 6, %751 ], [ 6, %.split215 ], [ 6, %32 ], [ 6, %.lr.ph767 ], [ 6, %.lr.ph809 ], [ 6, %.lr.ph775 ], [ 6, %.preheader501 ], [ 6, %..loopexit_crit_edge.us ], [ 6, %..loopexit502_crit_edge.us ], [ 6, %..loopexit504_crit_edge.us ] %641 = insertvalue { i8, i8 } poison, i8 %.sroa.0.0, 0 %642 = insertvalue { i8, i8 } %641, i8 undef, 1 ret { i8, i8 } %642 @@ -36222,7 +36220,7 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us br i1 %.not986, label %.thread449, label %.lr.ph.us777 .lr.ph.us777: ; preds = %.lr.ph776, %..loopexit503_crit_edge.us - %.sroa.030.0775.us = phi i64 [ %652, %..loopexit503_crit_edge.us ], [ 0, %.lr.ph776 ] + %.sroa.030.0775.us = phi i64 [ %652, %..loopexit502_crit_edge.us ], [ 0, %.lr.ph775 ] %652 = add nuw nsw i64 %.sroa.030.0775.us, 1 %653 = lshr i64 %.sroa.030.0775.us, %647 %654 = mul i64 %653, %643 @@ -36230,7 +36228,7 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us br label %656 656: ; preds = %.lr.ph.us777, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit429.us" - %.sroa.037.0773.us = phi i64 [ 0, %.lr.ph.us777 ], [ %657, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit429.us" ] + %.sroa.037.0773.us = phi i64 [ 0, %.lr.ph.us776 ], [ %657, %"_ZN84_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..index..IndexMut$LT$I$GT$$GT$9index_mut17h9708542ffb53431dE.exit428.us" ] %657 = add nuw nsw i64 %.sroa.037.0773.us, 1 %658 = lshr i64 %.sroa.037.0773.us, %647 %659 = add i64 %658, %654 @@ -36334,10 +36332,10 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us br i1 %.not982, label %._crit_edge, label %.lr.ph.us .lr.ph.us: ; preds = %.lr.ph755, %..loopexit507_crit_edge.us - %708 = phi i64 [ %740, %..loopexit507_crit_edge.us ], [ 0, %.lr.ph755 ] - %.sroa.063.0754.us = phi i64 [ %709, %..loopexit507_crit_edge.us ], [ 0, %.lr.ph755 ] - %.0205753.us = phi i32 [ %741, %..loopexit507_crit_edge.us ], [ 0, %.lr.ph755 ] - %.0207752.us = phi i64 [ %.2209.us, %..loopexit507_crit_edge.us ], [ 0, %.lr.ph755 ] + %708 = phi i64 [ %740, %..loopexit506_crit_edge.us ], [ 0, %.lr.ph754 ] + %.sroa.063.0754.us = phi i64 [ %709, %..loopexit506_crit_edge.us ], [ 0, %.lr.ph754 ] + %.0205753.us = phi i32 [ %741, %..loopexit506_crit_edge.us ], [ 0, %.lr.ph754 ] + %.0207752.us = phi i64 [ %.2209.us, %..loopexit506_crit_edge.us ], [ 0, %.lr.ph754 ] %709 = add nuw nsw i64 %.sroa.063.0754.us, 1 br label %710 @@ -36390,14 +36388,14 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us 734: ; preds = %731 invoke void @"_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$16reserve_for_push17h843b1d7b696c3901E"(ptr noalias noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %711) - to label %.noexc437.us unwind label %.loopexit508.split.us + to label %.noexc436.us unwind label %.loopexit508.split.us .noexc437.us: ; preds = %734 %.pre.i.us = load i64, ptr %62, align 8, !alias.scope !4501 br label %735 735: ; preds = %.noexc437.us, %731 - %736 = phi i64 [ %.pre.i.us, %.noexc437.us ], [ %711, %731 ] + %736 = phi i64 [ %.pre.i.us, %.noexc436.us ], [ %711, %731 ] %737 = load ptr, ptr %61, align 8, !alias.scope !4501, !nonnull !14, !noundef !14 %738 = getelementptr inbounds i32, ptr %737, i64 %736 store i32 %.0204.us, ptr %738, align 4 @@ -36456,7 +36454,7 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us %753 = phi i64 [ %.val243.us, %715 ], [ %.val241, %726 ] %754 = phi ptr [ @anon.60689fdbfa59ae5f463a599edb886518.382, %715 ], [ @anon.60689fdbfa59ae5f463a599edb886518.384, %726 ] invoke void @_ZN4core9panicking18panic_bounds_check17h8331054858f0bf20E(i64 noundef %752, i64 noundef %753, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %754) #22 - to label %.split757.us.cont unwind label %.loopexit.split-lp + to label %.split756.us.cont unwind label %.loopexit.split-lp .split757.us.cont: ; preds = %.split757.us.invoke unreachable @@ -36471,7 +36469,7 @@ _ZN5image6codecs4webp18lossless_transform7get_top17hbbd69131cbda32f8E.exit344.us br label %756 756: ; preds = %.loopexit.split-lp, %.loopexit508.split.us - %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit.us, %.loopexit508.split.us ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] + %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit.us, %.loopexit507.split.us ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] invoke void @"_ZN4core3ptr47drop_in_place$LT$alloc..vec..Vec$LT$u32$GT$$GT$17h88c6982753044a7aE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %8) #23 to label %755 unwind label %757 diff --git a/bench/image-rs/optimized/5ez7udly19o3uj1p.ll b/bench/image-rs/optimized/5ez7udly19o3uj1p.ll index 03df6b509e7..f86115ef24a 100644 --- a/bench/image-rs/optimized/5ez7udly19o3uj1p.ll +++ b/bench/image-rs/optimized/5ez7udly19o3uj1p.ll @@ -33876,7 +33876,7 @@ define void @_ZN5image6codecs4webp8extended10WebPStatic16from_alpha_lossy17hf358 %.sroa.53.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %7, i64 1 store i8 3, ptr %.sroa.53.0..sroa_idx.i, align 1, !noalias !4412 %24 = invoke noundef nonnull align 8 ptr @_ZN5alloc5alloc15exchange_malloc17hbe31f2048284b3faE.llvm.9742654456972663382(i64 noundef 24, i64 noundef 8) - to label %191 unwind label %25, !noalias !4404 + to label %189 unwind label %25, !noalias !4404 25: ; preds = %23 %26 = landingpad { ptr, i32 } @@ -33891,7 +33891,7 @@ define void @_ZN5image6codecs4webp8extended10WebPStatic16from_alpha_lossy17hf358 unreachable .body: ; preds = %47, %.body37, %29, %25, %188 - %.pn = phi { ptr, i32 } [ %lpad.thr_comm, %188 ], [ %lpad.thr_comm.split-lp, %.body37 ], [ %30, %29 ], [ %26, %25 ], [ %48, %47 ] + %.pn = phi { ptr, i32 } [ %lpad.thr_comm, %186 ], [ %lpad.thr_comm.split-lp, %.body37 ], [ %30, %29 ], [ %26, %25 ], [ %48, %47 ] invoke void @"_ZN4core3ptr52drop_in_place$LT$image..codecs..webp..vp8..Frame$GT$17h69ec787f0a78d900E"(ptr noalias noundef nonnull align 8 dereferenceable(88) %2) #22 to label %71 unwind label %189 @@ -34046,7 +34046,7 @@ define void @_ZN5image6codecs4webp8extended10WebPStatic16from_alpha_lossy17hf358 71: ; preds = %72, %.body %.pn27 = phi { ptr, i32 } [ %73, %72 ], [ %.pn, %.body ] invoke void @"_ZN4core3ptr62drop_in_place$LT$image..codecs..webp..extended..AlphaChunk$GT$17he6cc29becc3dfeebE"(ptr noalias noundef nonnull align 8 dereferenceable(32) %1) #22 - to label %199 unwind label %189 + to label %197 unwind label %189 72: ; preds = %67, %191 %73 = landingpad { ptr, i32 } @@ -34076,7 +34076,7 @@ define void @_ZN5image6codecs4webp8extended10WebPStatic16from_alpha_lossy17hf358 ret void 82: ; preds = %.lr.ph, %184 - %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %184 ] + %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %182 ] %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %83 = load i16, ptr %12, align 8, !noundef !19 %84 = zext i16 %83 to i64 @@ -34129,9 +34129,9 @@ default.unreachable: ; preds = %82 br label %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit .invoke: ; preds = %180, %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit, %169, %161, %152, %148, %132, %118, %114, %98, %94 - %107 = phi i64 [ %96, %94 ], [ %102, %98 ], [ %116, %114 ], [ %122, %118 ], [ %134, %132 ], [ %150, %148 ], [ %156, %152 ], [ %167, %161 ], [ %170, %169 ], [ %178, %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit ], [ %182, %180 ] - %108 = phi i64 [ %21, %94 ], [ %21, %98 ], [ %21, %114 ], [ %21, %118 ], [ %21, %132 ], [ %21, %148 ], [ %21, %152 ], [ %21, %161 ], [ %21, %169 ], [ %.val31, %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit ], [ %21, %180 ] - %109 = phi ptr [ @anon.dbc83011fcb707429349569d3c6bc524.346, %94 ], [ @anon.dbc83011fcb707429349569d3c6bc524.347, %98 ], [ @anon.dbc83011fcb707429349569d3c6bc524.348, %114 ], [ @anon.dbc83011fcb707429349569d3c6bc524.349, %118 ], [ @anon.dbc83011fcb707429349569d3c6bc524.350, %132 ], [ @anon.dbc83011fcb707429349569d3c6bc524.351, %148 ], [ @anon.dbc83011fcb707429349569d3c6bc524.352, %152 ], [ @anon.dbc83011fcb707429349569d3c6bc524.353, %161 ], [ @anon.dbc83011fcb707429349569d3c6bc524.354, %169 ], [ @anon.dbc83011fcb707429349569d3c6bc524.343, %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit ], [ @anon.dbc83011fcb707429349569d3c6bc524.345, %180 ] + %107 = phi i64 [ %96, %94 ], [ %102, %98 ], [ %116, %114 ], [ %122, %118 ], [ %134, %132 ], [ %150, %146 ], [ %154, %150 ], [ %165, %159 ], [ %168, %167 ], [ %178, %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit ], [ %182, %178 ] + %108 = phi i64 [ %21, %94 ], [ %21, %98 ], [ %21, %114 ], [ %21, %118 ], [ %21, %132 ], [ %21, %146 ], [ %21, %150 ], [ %21, %159 ], [ %21, %167 ], [ %.val31, %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit ], [ %21, %178 ] + %109 = phi ptr [ @anon.dbc83011fcb707429349569d3c6bc524.346, %94 ], [ @anon.dbc83011fcb707429349569d3c6bc524.347, %98 ], [ @anon.dbc83011fcb707429349569d3c6bc524.348, %114 ], [ @anon.dbc83011fcb707429349569d3c6bc524.349, %118 ], [ @anon.dbc83011fcb707429349569d3c6bc524.350, %132 ], [ @anon.dbc83011fcb707429349569d3c6bc524.351, %146 ], [ @anon.dbc83011fcb707429349569d3c6bc524.352, %150 ], [ @anon.dbc83011fcb707429349569d3c6bc524.353, %159 ], [ @anon.dbc83011fcb707429349569d3c6bc524.354, %167 ], [ @anon.dbc83011fcb707429349569d3c6bc524.343, %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit ], [ @anon.dbc83011fcb707429349569d3c6bc524.345, %178 ] invoke void @_ZN4core9panicking18panic_bounds_check17h8331054858f0bf20E(i64 noundef %107, i64 noundef %108, ptr noalias noundef readonly align 8 dereferenceable(24) %109) #21 to label %.cont unwind label %188 @@ -34183,18 +34183,17 @@ default.unreachable: ; preds = %82 br i1 %135, label %145, label %.invoke, !prof !480 "_ZN4core6result19Result$LT$T$C$E$GT$6unwrap17he2ec3fd6191bb3d2E.exit.i": ; preds = %172, %158, %145, %130 - %.013.i = phi i8 [ %147, %145 ], [ %160, %158 ], [ %174, %172 ], [ 0, %130 ] - %.012.i = phi i8 [ %147, %145 ], [ %160, %158 ], [ %163, %172 ], [ 0, %130 ] - %.0.i = phi i8 [ %147, %145 ], [ %160, %158 ], [ %176, %172 ], [ 0, %130 ] + %.013.i = phi i8 [ %147, %143 ], [ %160, %156 ], [ %172, %170 ], [ 0, %130 ] + %.012.i = phi i8 [ %147, %143 ], [ %160, %156 ], [ %163, %170 ], [ 0, %130 ] + %.0.i = phi i8 [ %147, %143 ], [ %160, %156 ], [ %174, %170 ], [ 0, %130 ] %136 = zext i8 %.012.i to i16 %137 = zext i8 %.013.i to i16 %138 = add nuw nsw i16 %136, %137 %139 = zext i8 %.0.i to i16 %140 = sub nsw i16 %138, %139 - %141 = icmp slt i16 %140, 0 - %142 = tail call i16 @llvm.umin.i16(i16 %140, i16 255) + %141 = tail call i16 @llvm.smax.i16(i16 %140, i16 0) + %142 = tail call i16 @llvm.umin.i16(i16 %141, i16 255) %143 = trunc nuw i16 %142 to i8 - %144 = select i1 %141, i8 0, i8 %143 br label %_ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit 145: ; preds = %132 @@ -34238,13 +34237,13 @@ default.unreachable: ; preds = %82 172: ; preds = %169 %173 = getelementptr inbounds nuw [0 x i8], ptr %33, i64 0, i64 %167 + %172 = load i8, ptr %171, align 1, !alias.scope !4443, !noundef !19 + %173 = getelementptr inbounds nuw [0 x i8], ptr %33, i64 0, i64 %168 %174 = load i8, ptr %173, align 1, !alias.scope !4443, !noundef !19 - %175 = getelementptr inbounds nuw [0 x i8], ptr %33, i64 0, i64 %170 - %176 = load i8, ptr %175, align 1, !alias.scope !4443, !noundef !19 br label %"_ZN4core6result19Result$LT$T$C$E$GT$6unwrap17he2ec3fd6191bb3d2E.exit.i" _ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.exit: ; preds = %"_ZN4core6result19Result$LT$T$C$E$GT$6unwrap17he2ec3fd6191bb3d2E.exit.i", %127, %124, %110, %104, %88, %86, %82 - %.011.i = phi i8 [ %106, %104 ], [ %112, %110 ], [ %126, %124 ], [ %129, %127 ], [ %144, %"_ZN4core6result19Result$LT$T$C$E$GT$6unwrap17he2ec3fd6191bb3d2E.exit.i" ], [ %85, %82 ], [ 0, %86 ], [ 0, %88 ] + %.011.i = phi i8 [ %106, %104 ], [ %112, %110 ], [ %126, %124 ], [ %129, %127 ], [ %142, %"_ZN4core6result19Result$LT$T$C$E$GT$6unwrap17he2ec3fd6191bb3d2E.exit.i" ], [ %85, %82 ], [ 0, %86 ], [ 0, %88 ] %177 = mul nuw nsw i64 %indvars.iv150, %84 %178 = add nuw nsw i64 %177, %indvars.iv %.val31 = load i64, ptr %10, align 8, !noundef !19 @@ -34292,7 +34291,7 @@ _ZN5image6codecs4webp8extended10WebPStatic13get_predictor17heffafe2d87fabaa7E.ex %.sroa.7.0..sroa_idx = getelementptr inbounds nuw i8, ptr %0, i64 48 store ptr @anon.1f4c41b43b6b1ec3b0d7299236cb1468.22.llvm.9742654456972663382, ptr %.sroa.7.0..sroa_idx, align 8 invoke void @"_ZN4core3ptr52drop_in_place$LT$image..codecs..webp..vp8..Frame$GT$17h69ec787f0a78d900E"(ptr noalias noundef nonnull align 8 dereferenceable(88) %2) - to label %192 unwind label %72 + to label %190 unwind label %72 192: ; preds = %191 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4), !noalias !4447 @@ -35860,6 +35859,9 @@ declare void @llvm.experimental.noalias.scope.decl(metadata) #20 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i16 @llvm.umin.i16(i16, i16) #18 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i16 @llvm.smax.i16(i16, i16) #18 + attributes #0 = { inlinehint nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #1 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #2 = { mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(none) uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } diff --git a/bench/libevent/optimized/evdns.ll b/bench/libevent/optimized/evdns.ll index 23b80aabc2e..719f7579016 100644 --- a/bench/libevent/optimized/evdns.ll +++ b/bench/libevent/optimized/evdns.ll @@ -5399,9 +5399,8 @@ str_matches_option.exit257: ; preds = %str_matches_option. br i1 %.not195, label %.thread274, label %strtoint_clipped.exit strtoint_clipped.exit: ; preds = %94 - %96 = icmp slt i32 %91, 1 - %..i = tail call i32 @llvm.umin.i32(i32 %91, i32 255) - %.0.i258.ph = select i1 %96, i32 1, i32 %..i + %96 = tail call i32 @llvm.smax.i32(i32 %91, i32 1) + %..i = tail call i32 @llvm.umin.i32(i32 %96, i32 255) tail call void (i32, ptr, ...) @evdns_log_(i32 noundef 0, ptr noundef nonnull @.str.84, i32 noundef %.0.i258.ph) %97 = getelementptr inbounds nuw i8, ptr %0, i64 80 store i32 %.0.i258.ph, ptr %97, align 8 diff --git a/bench/libwebp/optimized/quant_dec.ll b/bench/libwebp/optimized/quant_dec.ll index c28c700e61f..c7a79c3284c 100644 --- a/bench/libwebp/optimized/quant_dec.ll +++ b/bench/libwebp/optimized/quant_dec.ll @@ -70,8 +70,8 @@ define hidden void @VP8ParseQuant(ptr noundef %0) local_unnamed_addr #0 { %33 = getelementptr inbounds nuw i8, ptr %0, i64 1060 br label %34 -34: ; preds = %27, %103 - %indvars.iv = phi i64 [ 0, %27 ], [ %indvars.iv.next, %103 ] +34: ; preds = %27, %97 + %indvars.iv = phi i64 [ 0, %27 ], [ %indvars.iv.next, %97 ] br i1 %.not54, label %41, label %35 35: ; preds = %34 @@ -91,84 +91,78 @@ define hidden void @VP8ParseQuant(ptr noundef %0) local_unnamed_addr #0 { 42: ; preds = %41 %43 = getelementptr inbounds nuw [4 x %struct.VP8QuantMatrix], ptr %33, i64 0, i64 %indvars.iv tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(32) %43, ptr noundef nonnull align 4 dereferenceable(32) %33, i64 32, i1 false), !tbaa.struct !10 - br label %103 + br label %97 44: ; preds = %35, %41 %.049 = phi i32 [ %spec.select, %35 ], [ %3, %41 ] %45 = getelementptr inbounds nuw [4 x %struct.VP8QuantMatrix], ptr %33, i64 0, i64 %indvars.iv %46 = add nsw i32 %.049, %8 - %47 = icmp slt i32 %46, 0 - %48 = tail call i32 @llvm.umin.i32(i32 %46, i32 127) - %49 = select i1 %47, i32 0, i32 %48 - %50 = zext nneg i32 %49 to i64 - %51 = getelementptr inbounds nuw [128 x i8], ptr @kDcTable, i64 0, i64 %50 - %52 = load i8, ptr %51, align 1, !tbaa !8 - %53 = zext i8 %52 to i32 - store i32 %53, ptr %45, align 4, !tbaa !11 - %54 = icmp slt i32 %.049, 0 - %55 = tail call i32 @llvm.umin.i32(i32 %.049, i32 127) - %56 = select i1 %54, i32 0, i32 %55 - %57 = zext nneg i32 %56 to i64 - %58 = getelementptr inbounds nuw [128 x i16], ptr @kAcTable, i64 0, i64 %57 - %59 = load i16, ptr %58, align 2, !tbaa !12 - %60 = zext i16 %59 to i32 - %61 = getelementptr inbounds nuw i8, ptr %45, i64 4 - store i32 %60, ptr %61, align 4, !tbaa !11 - %62 = add nsw i32 %.049, %13 - %63 = icmp slt i32 %62, 0 - %64 = tail call i32 @llvm.umin.i32(i32 %62, i32 127) - %65 = select i1 %63, i32 0, i32 %64 - %66 = zext nneg i32 %65 to i64 - %67 = getelementptr inbounds nuw [128 x i8], ptr @kDcTable, i64 0, i64 %66 - %68 = load i8, ptr %67, align 1, !tbaa !8 - %69 = zext i8 %68 to i32 - %70 = shl nuw nsw i32 %69, 1 - %71 = getelementptr inbounds nuw i8, ptr %45, i64 8 - store i32 %70, ptr %71, align 4, !tbaa !11 - %72 = add nsw i32 %.049, %18 - %73 = icmp slt i32 %72, 0 - %74 = tail call i32 @llvm.umin.i32(i32 %72, i32 127) - %75 = select i1 %73, i32 0, i32 %74 - %76 = zext nneg i32 %75 to i64 - %77 = getelementptr inbounds nuw [128 x i16], ptr @kAcTable, i64 0, i64 %76 - %78 = load i16, ptr %77, align 2, !tbaa !12 - %79 = zext i16 %78 to i32 - %80 = mul nuw nsw i32 %79, 101581 - %81 = lshr i32 %80, 16 - %82 = getelementptr inbounds nuw i8, ptr %45, i64 12 - %83 = icmp samesign ult i32 %75, 2 - %spec.select57 = select i1 %83, i32 8, i32 %81 - store i32 %spec.select57, ptr %82, align 4, !tbaa !11 - %84 = add nsw i32 %.049, %23 - %85 = icmp slt i32 %84, 0 - %86 = tail call i32 @llvm.umin.i32(i32 %84, i32 117) - %87 = select i1 %85, i32 0, i32 %86 - %88 = zext nneg i32 %87 to i64 - %89 = getelementptr inbounds nuw [128 x i8], ptr @kDcTable, i64 0, i64 %88 - %90 = load i8, ptr %89, align 1, !tbaa !8 - %91 = zext i8 %90 to i32 - %92 = getelementptr inbounds nuw i8, ptr %45, i64 16 - store i32 %91, ptr %92, align 4, !tbaa !11 - %93 = add nsw i32 %.049, %28 - %94 = icmp slt i32 %93, 0 - %95 = tail call i32 @llvm.umin.i32(i32 %93, i32 127) - %96 = select i1 %94, i32 0, i32 %95 - %97 = zext nneg i32 %96 to i64 - %98 = getelementptr inbounds nuw [128 x i16], ptr @kAcTable, i64 0, i64 %97 - %99 = load i16, ptr %98, align 2, !tbaa !12 - %100 = zext i16 %99 to i32 - %101 = getelementptr inbounds nuw i8, ptr %45, i64 20 - store i32 %100, ptr %101, align 4, !tbaa !11 - %102 = getelementptr inbounds nuw i8, ptr %45, i64 24 - store i32 %93, ptr %102, align 4, !tbaa !14 - br label %103 - -103: ; preds = %44, %42 + %47 = tail call i32 @llvm.smax.i32(i32 %46, i32 0) + %48 = tail call i32 @llvm.umin.i32(i32 %47, i32 127) + %49 = zext nneg i32 %48 to i64 + %50 = getelementptr inbounds nuw [128 x i8], ptr @kDcTable, i64 0, i64 %49 + %51 = load i8, ptr %50, align 1, !tbaa !8 + %52 = zext i8 %51 to i32 + store i32 %52, ptr %45, align 4, !tbaa !11 + %53 = tail call i32 @llvm.smax.i32(i32 %.049, i32 0) + %54 = tail call i32 @llvm.umin.i32(i32 %53, i32 127) + %55 = zext nneg i32 %54 to i64 + %56 = getelementptr inbounds nuw [128 x i16], ptr @kAcTable, i64 0, i64 %55 + %57 = load i16, ptr %56, align 2, !tbaa !12 + %58 = zext i16 %57 to i32 + %59 = getelementptr inbounds nuw i8, ptr %45, i64 4 + store i32 %58, ptr %59, align 4, !tbaa !11 + %60 = add nsw i32 %.049, %13 + %61 = tail call i32 @llvm.smax.i32(i32 %60, i32 0) + %62 = tail call i32 @llvm.umin.i32(i32 %61, i32 127) + %63 = zext nneg i32 %62 to i64 + %64 = getelementptr inbounds nuw [128 x i8], ptr @kDcTable, i64 0, i64 %63 + %65 = load i8, ptr %64, align 1, !tbaa !8 + %66 = zext i8 %65 to i32 + %67 = shl nuw nsw i32 %66, 1 + %68 = getelementptr inbounds nuw i8, ptr %45, i64 8 + store i32 %67, ptr %68, align 4, !tbaa !11 + %69 = add nsw i32 %.049, %18 + %70 = tail call i32 @llvm.smax.i32(i32 %69, i32 0) + %71 = tail call i32 @llvm.umin.i32(i32 %70, i32 127) + %72 = zext nneg i32 %71 to i64 + %73 = getelementptr inbounds nuw [128 x i16], ptr @kAcTable, i64 0, i64 %72 + %74 = load i16, ptr %73, align 2, !tbaa !12 + %75 = zext i16 %74 to i32 + %76 = mul nuw nsw i32 %75, 101581 + %77 = lshr i32 %76, 16 + %78 = getelementptr inbounds nuw i8, ptr %45, i64 12 + %79 = icmp slt i32 %69, 2 + %spec.select57 = select i1 %79, i32 8, i32 %77 + store i32 %spec.select57, ptr %78, align 4, !tbaa !11 + %80 = add nsw i32 %.049, %23 + %81 = tail call i32 @llvm.smax.i32(i32 %80, i32 0) + %82 = tail call i32 @llvm.umin.i32(i32 %81, i32 117) + %83 = zext nneg i32 %82 to i64 + %84 = getelementptr inbounds nuw [128 x i8], ptr @kDcTable, i64 0, i64 %83 + %85 = load i8, ptr %84, align 1, !tbaa !8 + %86 = zext i8 %85 to i32 + %87 = getelementptr inbounds nuw i8, ptr %45, i64 16 + store i32 %86, ptr %87, align 4, !tbaa !11 + %88 = add nsw i32 %.049, %28 + %89 = tail call i32 @llvm.smax.i32(i32 %88, i32 0) + %90 = tail call i32 @llvm.umin.i32(i32 %89, i32 127) + %91 = zext nneg i32 %90 to i64 + %92 = getelementptr inbounds nuw [128 x i16], ptr @kAcTable, i64 0, i64 %91 + %93 = load i16, ptr %92, align 2, !tbaa !12 + %94 = zext i16 %93 to i32 + %95 = getelementptr inbounds nuw i8, ptr %45, i64 20 + store i32 %94, ptr %95, align 4, !tbaa !11 + %96 = getelementptr inbounds nuw i8, ptr %45, i64 24 + store i32 %88, ptr %96, align 4, !tbaa !14 + br label %97 + +97: ; preds = %44, %42 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, 4 br i1 %exitcond.not, label %104, label %34, !llvm.loop !16 -104: ; preds = %103 +104: ; preds = %97 ret void } @@ -182,6 +176,9 @@ declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr no ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #3 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #3 + attributes #0 = { 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 #1 = { "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 nounwind willreturn memory(argmem: readwrite) } diff --git a/bench/lief/optimized/debug.ll b/bench/lief/optimized/debug.ll index baaa3cd5e2f..cc465e6a898 100644 --- a/bench/lief/optimized/debug.ll +++ b/bench/lief/optimized/debug.ll @@ -60,16 +60,15 @@ define hidden void @mbedtls_debug_print_msg(ptr noundef readonly captures(addres call void @llvm.va_start.p0(ptr nonnull %6) %19 = call i32 @vsnprintf(ptr noundef nonnull %7, i64 noundef 512, ptr noundef %4, ptr noundef nonnull %6) #9 call void @llvm.va_end.p0(ptr nonnull %6) - %20 = icmp slt i32 %19, 0 - %21 = call i32 @llvm.umin.i32(i32 %19, i32 510) - %.0 = select i1 %20, i32 0, i32 %21 - %22 = zext nneg i32 %.0 to i64 - %23 = getelementptr inbounds nuw [512 x i8], ptr %7, i64 0, i64 %22 - store i8 10, ptr %23, align 1, !tbaa !29 - %24 = add nuw nsw i32 %.0, 1 - %25 = zext nneg i32 %24 to i64 - %26 = getelementptr inbounds nuw [512 x i8], ptr %7, i64 0, i64 %25 - store i8 0, ptr %26, align 1, !tbaa !29 + %20 = call i32 @llvm.smax.i32(i32 %19, i32 0) + %21 = call i32 @llvm.umin.i32(i32 %20, i32 510) + %21 = zext nneg i32 %21 to i64 + %22 = getelementptr inbounds nuw [512 x i8], ptr %7, i64 0, i64 %21 + store i8 10, ptr %22, align 1, !tbaa !29 + %23 = add nuw nsw i32 %21, 1 + %24 = zext nneg i32 %23 to i64 + %25 = getelementptr inbounds nuw [512 x i8], ptr %7, i64 0, i64 %24 + store i8 0, ptr %25, align 1, !tbaa !29 %.val = load ptr, ptr %0, align 8, !tbaa !7 %27 = getelementptr i8, ptr %.val, i64 40 %.val.val = load ptr, ptr %27, align 8, !tbaa !17 @@ -703,6 +702,9 @@ declare i64 @llvm.umin.i64(i64, i64) #8 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #8 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #8 + attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(write, argmem: none, inaccessiblemem: none) 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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } diff --git a/bench/lvgl/optimized/lv_draw_sw_mask.ll b/bench/lvgl/optimized/lv_draw_sw_mask.ll index e639dbaba09..c9e158373a9 100644 --- a/bench/lvgl/optimized/lv_draw_sw_mask.ll +++ b/bench/lvgl/optimized/lv_draw_sw_mask.ll @@ -1062,17 +1062,17 @@ declare i32 @lv_trigo_sin(i16 noundef signext) local_unnamed_addr #3 ; Function Attrs: nounwind uwtable define void @lv_draw_sw_mask_angle_init(ptr noundef initializes((24, 32), (160, 162)) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #1 { - %6 = icmp slt i32 %3, 0 - %7 = tail call i32 @llvm.umin.i32(i32 %3, i32 359) - %.056 = select i1 %6, i32 0, i32 %7 - %8 = icmp slt i32 %4, 0 - %9 = tail call i32 @llvm.umin.i32(i32 %4, i32 359) - %.055 = select i1 %8, i32 0, i32 %9 - %10 = icmp samesign ult i32 %.055, %.056 + %6 = tail call i32 @llvm.smax.i32(i32 %3, i32 0) + %7 = tail call i32 @llvm.umin.i32(i32 %6, i32 359) + %7 = tail call i32 @llvm.smax.i32(i32 %4, i32 0) + %.055 = tail call i32 @llvm.umin.i32(i32 %7, i32 359) + %8 = icmp samesign ult i32 %7, %.056 %reass.sub = sub nsw i32 %.055, %.056 %11 = trunc nsw i32 %reass.sub to i16 %12 = add nsw i16 %11, 360 - %.sink = select i1 %10, i16 %12, i16 %11 + %11 = tail call i32 @llvm.abs.i32(i32 %reass.sub, i1 true) + %12 = trunc nuw nsw i32 %11 to i16 + %.sink = select i1 %8, i16 %10, i16 %12 %13 = getelementptr inbounds nuw i8, ptr %0, i64 160 store i16 %.sink, ptr %13, align 8, !tbaa !38 %14 = getelementptr inbounds nuw i8, ptr %0, i64 16 @@ -1084,13 +1084,13 @@ define void @lv_draw_sw_mask_angle_init(ptr noundef initializes((24, 32), (160, store ptr @lv_draw_mask_angle, ptr %0, align 8, !tbaa !44 %17 = getelementptr inbounds nuw i8, ptr %0, i64 8 store i32 1, ptr %17, align 8, !tbaa !45 - %18 = icmp samesign ugt i32 %.056, 179 + %18 = icmp sgt i32 %3, 179 %.054 = zext i1 %18 to i32 - %19 = icmp samesign ult i32 %.055, 180 + %19 = icmp slt i32 %4, 180 %.0 = zext i1 %19 to i32 %20 = getelementptr inbounds nuw i8, ptr %0, i64 32 %21 = trunc nuw nsw i32 %.056 to i16 - %22 = icmp samesign ugt i32 %.056, 180 + %22 = icmp sgt i32 %3, 180 %23 = add nsw i16 %21, -180 %spec.select.i = select i1 %22, i16 %23, i16 %21 %24 = add nuw nsw i16 %spec.select.i, 90 @@ -1103,7 +1103,7 @@ define void @lv_draw_sw_mask_angle_init(ptr noundef initializes((24, 32), (160, tail call void @lv_draw_sw_mask_line_points_init(ptr noundef nonnull %20, i32 noundef %1, i32 noundef %2, i32 noundef %27, i32 noundef %30, i32 noundef %.054) %31 = getelementptr inbounds nuw i8, ptr %0, i64 96 %32 = trunc nuw nsw i32 %.055 to i16 - %33 = icmp samesign ugt i32 %.055, 180 + %33 = icmp sgt i32 %4, 180 %34 = add nsw i16 %32, -180 %spec.select.i60 = select i1 %33, i16 %34, i16 %32 %35 = add nuw nsw i16 %spec.select.i60, 90 diff --git a/bench/minetest/optimized/mapblock_mesh.ll b/bench/minetest/optimized/mapblock_mesh.ll index deb086ece7d..23c024a1064 100644 --- a/bench/minetest/optimized/mapblock_mesh.ll +++ b/bench/minetest/optimized/mapblock_mesh.ll @@ -831,23 +831,21 @@ entry: %cond.i.i = select i1 %bf.cast.not.i.i.i, i8 %bf.clear.i.i, i8 %3 %conv.i = zext nneg i8 %cond.i.i to i32 %add.i = add nsw i32 %increment, %conv.i - %cmp.i = icmp slt i32 %add.i, 0 - %4 = tail call i32 @llvm.umin.i32(i32 %add.i, i32 15) - %5 = load ptr, ptr @light_decode_table, align 8, !tbaa !32 - %narrow.i = select i1 %cmp.i, i32 0, i32 %4 + %4 = load ptr, ptr @light_decode_table, align 8, !tbaa !32 + %4 = tail call i32 @llvm.smax.i32(i32 %add.i, i32 0) + %narrow.i = tail call i32 @llvm.umin.i32(i32 %5, i32 15) %idxprom.i.i = zext nneg i32 %narrow.i to i64 - %arrayidx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 %idxprom.i.i + %arrayidx.i.i = getelementptr inbounds nuw i8, ptr %4, i64 %idxprom.i.i %6 = load i8, ptr %arrayidx.i.i, align 1, !tbaa !13 %7 = lshr i8 %n.sroa.2.0.extract.trunc.i, 4 %8 = tail call i8 @llvm.umax.i8(i8 %bf.clear.i.i, i8 %7) %cond.i.i19 = select i1 %bf.cast.not.i.i.i, i8 %bf.clear.i.i, i8 %8 %conv.i20 = zext nneg i8 %cond.i.i19 to i32 %add.i21 = add nsw i32 %increment, %conv.i20 - %cmp.i22 = icmp slt i32 %add.i21, 0 - %9 = tail call i32 @llvm.umin.i32(i32 %add.i21, i32 15) - %narrow.i23 = select i1 %cmp.i22, i32 0, i32 %9 + %9 = tail call i32 @llvm.smax.i32(i32 %add.i21, i32 0) + %9 = tail call i32 @llvm.umin.i32(i32 %9, i32 15) %idxprom.i.i24 = zext nneg i32 %narrow.i23 to i64 - %arrayidx.i.i25 = getelementptr inbounds nuw i8, ptr %5, i64 %idxprom.i.i24 + %arrayidx.i.i25 = getelementptr inbounds nuw i8, ptr %4, i64 %idxprom.i.i24 %10 = load i8, ptr %arrayidx.i.i25, align 1, !tbaa !13 %conv4 = zext i8 %6 to i16 %conv5 = zext i8 %10 to i16 diff --git a/bench/openjdk/optimized/DrawGlyphList.ll b/bench/openjdk/optimized/DrawGlyphList.ll index b95a145c159..3464c9f7056 100644 --- a/bench/openjdk/optimized/DrawGlyphList.ll +++ b/bench/openjdk/optimized/DrawGlyphList.ll @@ -841,95 +841,94 @@ RefineBounds.exit.i: ; preds = %._crit_edge.i.i %104 = load ptr, ptr %103, align 8 %105 = load i32, ptr %14, align 8 %106 = zext i8 %24 to i32 - %107 = icmp slt i32 %19, 100 - %108 = call i32 @llvm.umin.i32(i32 %19, i32 250) - %.0.i.i = select i1 %107, i32 100, i32 %108 - %109 = add nsw i32 %.0.i.i, -100 - %110 = zext nneg i32 %109 to i64 - %111 = getelementptr inbounds nuw [151 x ptr], ptr @lcdGammaLUT, i64 0, i64 %110 - %112 = load ptr, ptr %111, align 8 - %.not.i.i = icmp eq ptr %112, null - br i1 %.not.i.i, label %113, label %getLCDGammaLUT.exit.i - -113: ; preds = %102 + %107 = call i32 @llvm.smax.i32(i32 %19, i32 100) + %108 = call i32 @llvm.umin.i32(i32 %107, i32 250) + %108 = add nsw i32 %108, -100 + %109 = zext nneg i32 %108 to i64 + %110 = getelementptr inbounds nuw [151 x ptr], ptr @lcdGammaLUT, i64 0, i64 %109 + %111 = load ptr, ptr %110, align 8 + %.not.i.i = icmp eq ptr %111, null + br i1 %.not.i.i, label %112, label %getLCDGammaLUT.exit.i + +112: ; preds = %102 + %113 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #11 + store ptr %113, ptr %110, align 8 %114 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #11 - store ptr %114, ptr %111, align 8 - %115 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #11 - %116 = getelementptr inbounds nuw [151 x ptr], ptr @lcdInvGammaLUT, i64 0, i64 %110 - store ptr %115, ptr %116, align 8 - %117 = icmp eq i32 %.0.i.i, 100 - br i1 %117, label %.preheader.i.i.i, label %123 - -.preheader.i.i.i: ; preds = %113, %.preheader.i.i.i - %indvars.iv36.i.i.i = phi i64 [ %indvars.iv.next37.i.i.i, %.preheader.i.i.i ], [ 0, %113 ] - %118 = trunc i64 %indvars.iv36.i.i.i to i8 - %119 = load ptr, ptr %111, align 8 - %120 = getelementptr inbounds nuw i8, ptr %119, i64 %indvars.iv36.i.i.i - store i8 %118, ptr %120, align 1 - %121 = load ptr, ptr %116, align 8 - %122 = getelementptr inbounds nuw i8, ptr %121, i64 %indvars.iv36.i.i.i - store i8 %118, ptr %122, align 1 + %115 = getelementptr inbounds nuw [151 x ptr], ptr @lcdInvGammaLUT, i64 0, i64 %109 + store ptr %114, ptr %115, align 8 + %116 = icmp slt i32 %19, 101 + br i1 %116, label %.preheader.i.i.i, label %122 + +.preheader.i.i.i:; preds = %112, %.preheader.i.i.i + %indvars.iv36.i.i.i = phi i64 [ %indvars.iv.next37.i.i.i, %.preheader.i.i.i ], [ 0, %112 ] + %117 = trunc i64 %indvars.iv36.i.i.i to i8 + %118 = load ptr, ptr %110, align 8 + %119 = getelementptr inbounds nuw i8, ptr %118, i64 %indvars.iv36.i.i.i + store i8 %117, ptr %119, align 1 + %120 = load ptr, ptr %115, align 8 + %121 = getelementptr inbounds nuw i8, ptr %120, i64 %indvars.iv36.i.i.i + store i8 %117, ptr %121, align 1 %indvars.iv.next37.i.i.i = add nuw nsw i64 %indvars.iv36.i.i.i, 1 %exitcond39.not.i.i.i = icmp eq i64 %indvars.iv.next37.i.i.i, 256 br i1 %exitcond39.not.i.i.i, label %getLCDGammaLUT.exit.i, label %.preheader.i.i.i, !llvm.loop !10 -123: ; preds = %113 +123: ; preds = %112 %124 = uitofp nneg i32 %.0.i.i to double %125 = fdiv double %124, 1.000000e+02 %126 = fdiv double 1.000000e+00, %125 + store i8 0, ptr %113, align 1 store i8 0, ptr %114, align 1 - store i8 0, ptr %115, align 1 + %126 = getelementptr inbounds nuw i8, ptr %113, i64 255 + store i8 -1, ptr %126, align 1 %127 = getelementptr inbounds nuw i8, ptr %114, i64 255 store i8 -1, ptr %127, align 1 - %128 = getelementptr inbounds nuw i8, ptr %115, i64 255 - store i8 -1, ptr %128, align 1 - br label %129 - -129: ; preds = %129, %123 - %indvars.iv.i.i.i = phi i64 [ 1, %123 ], [ %indvars.iv.next.i.i.i, %129 ] - %130 = trunc nuw nsw i64 %indvars.iv.i.i.i to i32 - %131 = uitofp nneg i32 %130 to double - %132 = fdiv double %131, 2.550000e+02 - %133 = call double @pow(double noundef %132, double noundef %126) #10 - %134 = call double @pow(double noundef %132, double noundef %125) #10 - %135 = fmul double %133, 2.550000e+02 - %136 = fptoui double %135 to i8 - %137 = load ptr, ptr %111, align 8 - %138 = getelementptr inbounds nuw i8, ptr %137, i64 %indvars.iv.i.i.i - store i8 %136, ptr %138, align 1 - %139 = fmul double %134, 2.550000e+02 - %140 = fptoui double %139 to i8 - %141 = load ptr, ptr %116, align 8 - %142 = getelementptr inbounds nuw i8, ptr %141, i64 %indvars.iv.i.i.i - store i8 %140, ptr %142, align 1 + br label %128 + +128:; preds = %128, %122 + %indvars.iv.i.i.i = phi i64 [ 1, %122 ], [ %indvars.iv.next.i.i.i, %128 ] + %129 = trunc nuw nsw i64 %indvars.iv.i.i.i to i32 + %130 = uitofp nneg i32 %129 to double + %131 = fdiv double %130, 2.550000e+02 + %132 = call double @pow(double noundef %131, double noundef %125) #10 + %133 = call double @pow(double noundef %131, double noundef %124) #10 + %134 = fmul double %132, 2.550000e+02 + %135 = fptoui double %134 to i8 + %136 = load ptr, ptr %110, align 8 + %137 = getelementptr inbounds nuw i8, ptr %136, i64 %indvars.iv.i.i.i + store i8 %135, ptr %137, align 1 + %138 = fmul double %133, 2.550000e+02 + %139 = fptoui double %138 to i8 + %140 = load ptr, ptr %115, align 8 + %141 = getelementptr inbounds nuw i8, ptr %140, i64 %indvars.iv.i.i.i + store i8 %139, ptr %141, align 1 %indvars.iv.next.i.i.i = add nuw nsw i64 %indvars.iv.i.i.i, 1 %exitcond.not.i.i.i = icmp eq i64 %indvars.iv.next.i.i.i, 255 - br i1 %exitcond.not.i.i.i, label %getLCDGammaLUT.exit.i, label %129, !llvm.loop !11 + br i1 %exitcond.not.i.i.i, label %getLCDGammaLUT.exit.i, label %128, !llvm.loop !11 -getLCDGammaLUT.exit.i: ; preds = %129, %.preheader.i.i.i, %102 - %143 = load ptr, ptr %111, align 8 - %144 = getelementptr inbounds nuw [151 x ptr], ptr @lcdInvGammaLUT, i64 0, i64 %110 +getLCDGammaLUT.exit.i: ; preds = %128, %.preheader.i.i.i, %102 + %143 = load ptr, ptr %110, align 8 + %144 = getelementptr inbounds nuw [151 x ptr], ptr @lcdInvGammaLUT, i64 0, i64 %109 %145 = load ptr, ptr %144, align 8 %.not.i70.i = icmp eq ptr %145, null br i1 %.not.i70.i, label %146, label %getInvLCDGammaLUT.exit.i 146: ; preds = %getLCDGammaLUT.exit.i + %146 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #11 + store ptr %146, ptr %110, align 8 %147 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #11 - store ptr %147, ptr %111, align 8 - %148 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #11 - store ptr %148, ptr %144, align 8 - %149 = icmp eq i32 %.0.i.i, 100 - br i1 %149, label %.preheader.i.i74.i, label %155 - -.preheader.i.i74.i: ; preds = %146, %.preheader.i.i74.i - %indvars.iv36.i.i75.i = phi i64 [ %indvars.iv.next37.i.i76.i, %.preheader.i.i74.i ], [ 0, %146 ] - %150 = trunc i64 %indvars.iv36.i.i75.i to i8 - %151 = load ptr, ptr %111, align 8 - %152 = getelementptr inbounds nuw i8, ptr %151, i64 %indvars.iv36.i.i75.i - store i8 %150, ptr %152, align 1 - %153 = load ptr, ptr %144, align 8 - %154 = getelementptr inbounds nuw i8, ptr %153, i64 %indvars.iv36.i.i75.i - store i8 %150, ptr %154, align 1 + store ptr %147, ptr %143, align 8 + %148 = icmp slt i32 %19, 101 + br i1 %148, label %.preheader.i.i74.i, label %154 + +.preheader.i.i74.i:; preds = %145, %.preheader.i.i74.i + %indvars.iv36.i.i75.i = phi i64 [ %indvars.iv.next37.i.i76.i, %.preheader.i.i74.i ], [ 0, %145 ] + %149 = trunc i64 %indvars.iv36.i.i75.i to i8 + %150 = load ptr, ptr %110, align 8 + %151 = getelementptr inbounds nuw i8, ptr %150, i64 %indvars.iv36.i.i75.i + store i8 %149, ptr %151, align 1 + %152 = load ptr, ptr %143, align 8 + %153 = getelementptr inbounds nuw i8, ptr %152, i64 %indvars.iv36.i.i75.i + store i8 %149, ptr %153, align 1 %indvars.iv.next37.i.i76.i = add nuw nsw i64 %indvars.iv36.i.i75.i, 1 %exitcond39.not.i.i77.i = icmp eq i64 %indvars.iv.next37.i.i76.i, 256 br i1 %exitcond39.not.i.i77.i, label %getInvLCDGammaLUT.exit.i, label %.preheader.i.i74.i, !llvm.loop !10 @@ -938,36 +937,36 @@ getLCDGammaLUT.exit.i: ; preds = %129, %.preheader.i. %156 = uitofp nneg i32 %.0.i.i to double %157 = fdiv double %156, 1.000000e+02 %158 = fdiv double 1.000000e+00, %157 + store i8 0, ptr %146, align 1 store i8 0, ptr %147, align 1 - store i8 0, ptr %148, align 1 + %158 = getelementptr inbounds nuw i8, ptr %146, i64 255 + store i8 -1, ptr %158, align 1 %159 = getelementptr inbounds nuw i8, ptr %147, i64 255 store i8 -1, ptr %159, align 1 - %160 = getelementptr inbounds nuw i8, ptr %148, i64 255 - store i8 -1, ptr %160, align 1 - br label %161 - -161: ; preds = %161, %155 - %indvars.iv.i.i71.i = phi i64 [ 1, %155 ], [ %indvars.iv.next.i.i72.i, %161 ] - %162 = trunc nuw nsw i64 %indvars.iv.i.i71.i to i32 - %163 = uitofp nneg i32 %162 to double - %164 = fdiv double %163, 2.550000e+02 - %165 = call double @pow(double noundef %164, double noundef %158) #10 - %166 = call double @pow(double noundef %164, double noundef %157) #10 - %167 = fmul double %165, 2.550000e+02 - %168 = fptoui double %167 to i8 - %169 = load ptr, ptr %111, align 8 - %170 = getelementptr inbounds nuw i8, ptr %169, i64 %indvars.iv.i.i71.i - store i8 %168, ptr %170, align 1 - %171 = fmul double %166, 2.550000e+02 - %172 = fptoui double %171 to i8 - %173 = load ptr, ptr %144, align 8 - %174 = getelementptr inbounds nuw i8, ptr %173, i64 %indvars.iv.i.i71.i - store i8 %172, ptr %174, align 1 + br label %160 + +160:; preds = %160, %154 + %indvars.iv.i.i71.i = phi i64 [ 1, %154 ], [ %indvars.iv.next.i.i72.i, %160 ] + %161 = trunc nuw nsw i64 %indvars.iv.i.i71.i to i32 + %162 = uitofp nneg i32 %161 to double + %163 = fdiv double %162, 2.550000e+02 + %164 = call double @pow(double noundef %163, double noundef %157) #10 + %165 = call double @pow(double noundef %163, double noundef %156) #10 + %166 = fmul double %164, 2.550000e+02 + %167 = fptoui double %166 to i8 + %168 = load ptr, ptr %110, align 8 + %169 = getelementptr inbounds nuw i8, ptr %168, i64 %indvars.iv.i.i71.i + store i8 %167, ptr %169, align 1 + %170 = fmul double %165, 2.550000e+02 + %171 = fptoui double %170 to i8 + %172 = load ptr, ptr %143, align 8 + %173 = getelementptr inbounds nuw i8, ptr %172, i64 %indvars.iv.i.i71.i + store i8 %171, ptr %173, align 1 %indvars.iv.next.i.i72.i = add nuw nsw i64 %indvars.iv.i.i71.i, 1 %exitcond.not.i.i73.i = icmp eq i64 %indvars.iv.next.i.i72.i, 255 - br i1 %exitcond.not.i.i73.i, label %getInvLCDGammaLUT.exit.i, label %161, !llvm.loop !11 + br i1 %exitcond.not.i.i73.i, label %getInvLCDGammaLUT.exit.i, label %160, !llvm.loop !11 -getInvLCDGammaLUT.exit.i: ; preds = %161, %.preheader.i.i74.i, %getLCDGammaLUT.exit.i +getInvLCDGammaLUT.exit.i: ; preds = %160, %.preheader.i.i74.i, %getLCDGammaLUT.exit.i %175 = load ptr, ptr %144, align 8 call void %26(ptr noundef nonnull %9, ptr noundef %104, i32 noundef %105, i32 noundef %17, i32 noundef %18, i32 noundef %96, i32 noundef %98, i32 noundef %97, i32 noundef %99, i32 noundef %106, ptr noundef %143, ptr noundef %175, ptr noundef nonnull %11, ptr noundef nonnull %10) #10 %176 = getelementptr inbounds nuw i8, ptr %27, i64 16 @@ -976,7 +975,7 @@ getInvLCDGammaLUT.exit.i: ; preds = %161, %.preheader.i. br i1 %.not67.i, label %179, label %178 178: ; preds = %getInvLCDGammaLUT.exit.i - call void %177(ptr noundef nonnull %0, ptr noundef nonnull %27, ptr noundef nonnull %9) #10 + call void %176(ptr noundef nonnull %0, ptr noundef nonnull %27, ptr noundef nonnull %9) #10 br label %179 179: ; preds = %178, %getInvLCDGammaLUT.exit.i, %95 @@ -986,7 +985,7 @@ getInvLCDGammaLUT.exit.i: ; preds = %161, %.preheader.i. br i1 %.not68.i, label %drawGlyphListLCD.exit, label %.sink.split.i .sink.split.i: ; preds = %179, %92, %84 - %.sink.i = phi ptr [ %86, %84 ], [ %94, %92 ], [ %181, %179 ] + %.sink.i = phi ptr [ %86, %84 ], [ %94, %92 ], [ %181, %178 ] call void %.sink.i(ptr noundef nonnull %0, ptr noundef nonnull %27, ptr noundef nonnull %9) #10 br label %drawGlyphListLCD.exit @@ -1522,6 +1521,9 @@ declare void @llvm.lifetime.end.p0(i64 immarg, ptr captures(none)) #9 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #8 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #8 + attributes #0 = { 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 #1 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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" } attributes #2 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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/openssl/optimized/bio_dump.ll b/bench/openssl/optimized/bio_dump.ll index 6b5faef5e94..c4eb6c20128 100644 --- a/bench/openssl/optimized/bio_dump.ll +++ b/bench/openssl/optimized/bio_dump.ll @@ -22,14 +22,14 @@ define i32 @BIO_dump_cb(ptr noundef readonly captures(none) %0, ptr noundef %1, define i32 @BIO_dump_indent_cb(ptr noundef readonly captures(none) %0, ptr noundef %1, ptr noundef readonly captures(none) %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #0 { %6 = alloca [289 x i8], align 16 call void @llvm.lifetime.start.p0(i64 289, ptr nonnull %6) #7 - %7 = icmp slt i32 %4, 0 - %8 = tail call i32 @llvm.umin.i32(i32 %4, i32 64) - %.074 = select i1 %7, i32 0, i32 %8 - %9 = tail call i32 @llvm.usub.sat.i32(i32 %.074, i32 6) - %10 = trunc nuw nsw i32 %9 to i8 - %.neg.lhs.trunc = add nuw nsw i8 %10, 3 - %.neg84114 = lshr i8 %.neg.lhs.trunc, 2 - %narrow85 = sub nuw nsw i8 16, %.neg84114 + %7 = tail call i32 @llvm.smax.i32(i32 %4, i32 0) + %8 = tail call i32 @llvm.umin.i32(i32 %7, i32 64) + %8 = tail call i32 @llvm.umin.i32(i32 %7, i32 6) + %9 = sub nsw i32 %.074, %8 + %10 = trunc nsw i32 %9 to i8 + %.neg.lhs.trunc = add nsw i8 %10, 3 + %.neg84 = sdiv i8 %.neg.lhs.trunc, -4 + %narrow85 = add nsw i8 %.neg84, 16 %11 = zext nneg i8 %narrow85 to i32 %12 = sdiv i32 %3, %11 %13 = mul nsw i32 %12, %11 @@ -40,113 +40,120 @@ define i32 @BIO_dump_indent_cb(ptr noundef readonly captures(none) %0, ptr nound br i1 %16, label %.lr.ph100, label %._crit_edge101 .lr.ph100: ; preds = %5 - %17 = sext i32 %3 to i64 - %18 = zext nneg i8 %narrow85 to i64 + %17 = icmp slt i32 %9, 61 + %18 = sext i32 %3 to i64 + %19 = tail call i32 @llvm.umax.i32(i32 %11, i32 1) + %20 = zext nneg i8 %narrow85 to i64 %wide.trip.count112 = zext nneg i32 %.069 to i64 - %wide.trip.count = zext nneg i8 %narrow85 to i64 + %wide.trip.count = zext nneg i32 %19 to i64 br label %.lr.ph -.lr.ph: ; preds = %72, %.lr.ph100 - %indvars.iv109 = phi i64 [ 0, %.lr.ph100 ], [ %indvars.iv.next110, %72 ] - %.07397 = phi i32 [ 0, %.lr.ph100 ], [ %73, %72 ] - %19 = mul nuw nsw i64 %indvars.iv109, %18 +.lr.ph: ; preds = %.lr.ph100, %75 + %indvars.iv109 = phi i64 [ 0, %.lr.ph100 ], [ %indvars.iv.next110, %75 ] + %.07397 = phi i32 [ 0, %.lr.ph100 ], [ %73, %75 ] + %19 = mul nuw nsw i64 %indvars.iv109, %20 %20 = trunc nsw i64 %19 to i32 %21 = call i32 (ptr, i64, ptr, ...) @BIO_snprintf(ptr noundef nonnull %6, i64 noundef 289, ptr noundef nonnull @.str, i32 noundef %.074, ptr noundef nonnull @.str.1, i32 noundef %20) #7 - %22 = getelementptr inbounds nuw i8, ptr %2, i64 %19 - br label %23 - -23: ; preds = %.lr.ph, %40 - %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %40 ] - %.06888 = phi i32 [ %21, %.lr.ph ], [ %.1, %40 ] - %24 = sext i32 %.06888 to i64 - %notsub81 = add nsw i64 %24, -290 - %25 = icmp ult i64 %notsub81, -4 - br i1 %25, label %26, label %40 - -26: ; preds = %23 - %27 = add nuw nsw i64 %indvars.iv, %19 - %.not82 = icmp slt i64 %27, %17 - br i1 %.not82, label %30, label %28 - -28: ; preds = %26 - %29 = getelementptr inbounds i8, ptr %6, i64 %24 - store i32 2105376, ptr %29, align 1 - br label %38 - -30: ; preds = %26 - %31 = getelementptr inbounds nuw i8, ptr %22, i64 %indvars.iv - %32 = load i8, ptr %31, align 1, !tbaa !3 - %33 = getelementptr inbounds i8, ptr %6, i64 %24 - %34 = zext i8 %32 to i32 - %35 = icmp eq i64 %indvars.iv, 7 - %36 = select i1 %35, i32 45, i32 32 - %37 = call i32 (ptr, i64, ptr, ...) @BIO_snprintf(ptr noundef nonnull %33, i64 noundef 4, ptr noundef nonnull @.str.3, i32 noundef %34, i32 noundef %36) #7 - br label %38 - -38: ; preds = %30, %28 - %39 = add nsw i32 %.06888, 3 - br label %40 - -40: ; preds = %23, %38 - %.1 = phi i32 [ %39, %38 ], [ %.06888, %23 ] + br i1 %17, label %.lr.ph, label %._crit_edge + +.lr.ph: ; preds = %21 + %25 = getelementptr inbounds nuw i8, ptr %2, i64 %22 + br label %26 + +26:; preds = %.lr.ph, %43 + %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %43 ] + %.06888 = phi i32 [ %24, %.lr.ph ], [ %.1, %43 ] + %27 = sext i32 %.06888 to i64 + %notsub81 = add nsw i64 %27, -290 + %28 = icmp ult i64 %notsub81, -4 + br i1 %28, label %29, label %43 + +29: ; preds = %26 + %30 = add nuw nsw i64 %indvars.iv, %22 + %.not82 = icmp slt i64 %30, %18 + br i1 %.not82, label %33, label %31 + +31:; preds = %29 + %32 = getelementptr inbounds i8, ptr %6, i64 %27 + store i32 2105376, ptr %32, align 1 + br label %41 + +33: ; preds = %29 + %34 = getelementptr inbounds nuw i8, ptr %25, i64 %indvars.iv + %35 = load i8, ptr %34, align 1, !tbaa !3 + %36 = getelementptr inbounds i8, ptr %6, i64 %27 + %37 = zext i8 %35 to i32 + %38 = icmp eq i64 %indvars.iv, 7 + %39 = select i1 %38, i32 45, i32 32 + %40 = call i32 (ptr, i64, ptr, ...) @BIO_snprintf(ptr noundef nonnull %36, i64 noundef 4, ptr noundef nonnull @.str.3, i32 noundef %37, i32 noundef %39) #7 + br label %41 + +41: ; preds = %33, %31 + %42 = add nsw i32 %.06888, 3 + br label %43 + +43: ; preds = %26, %41 + %.1 = phi i32 [ %42, %41 ], [ %.06888, %26 ] %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, label %23, !llvm.loop !6 - -._crit_edge: ; preds = %40 - %41 = sext i32 %.1 to i64 - %notsub = add nsw i64 %41, -290 - %42 = icmp ult i64 %notsub, -3 - br i1 %42, label %43, label %46 - -43: ; preds = %._crit_edge - %44 = getelementptr inbounds i8, ptr %6, i64 %41 - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %44, ptr noundef nonnull align 1 dereferenceable(3) @.str.4, i64 3, i1 false) #7 - %45 = add nsw i32 %.1, 2 - br label %46 - -46: ; preds = %43, %._crit_edge - %.2 = phi i32 [ %45, %43 ], [ %.1, %._crit_edge ] - %.not89 = icmp slt i64 %19, %17 - br i1 %.not89, label %.lr.ph94, label %._crit_edge95 - -.lr.ph94: ; preds = %46 - %47 = getelementptr inbounds nuw i8, ptr %2, i64 %19 - br label %48 - -48: ; preds = %.lr.ph94, %59 - %indvars.iv106 = phi i64 [ 0, %.lr.ph94 ], [ %indvars.iv.next107, %59 ] - %.392 = phi i32 [ %.2, %.lr.ph94 ], [ %.4, %59 ] - %49 = and i32 %.392, -2 - %.not79 = icmp eq i32 %49, 288 - br i1 %.not79, label %59, label %50 - -50: ; preds = %48 - %51 = sext i32 %.392 to i64 - %52 = getelementptr inbounds nuw i8, ptr %47, i64 %indvars.iv106 - %53 = load i8, ptr %52, align 1, !tbaa !3 - %54 = add i8 %53, -32 - %or.cond = icmp ult i8 %54, 95 - %narrow = select i1 %or.cond, i8 %53, i8 46 - %55 = add nsw i32 %.392, 1 - %56 = getelementptr inbounds [289 x i8], ptr %6, i64 0, i64 %51 - store i8 %narrow, ptr %56, align 1, !tbaa !3 - %57 = sext i32 %55 to i64 - %58 = getelementptr inbounds [289 x i8], ptr %6, i64 0, i64 %57 - store i8 0, ptr %58, align 1, !tbaa !3 - br label %59 - -59: ; preds = %48, %50 - %.4 = phi i32 [ %55, %50 ], [ %.392, %48 ] + br i1 %exitcond.not, label %._crit_edge, label %26, !llvm.loop !6 + +._crit_edge: ; preds = %43, %21 + %.068.lcssa = phi i32 [ %24, %21 ], [ %.1, %43 ] + %44 = sext i32 %.068.lcssa to i64 + %notsub = add nsw i64 %44, -290 + %45 = icmp ult i64 %notsub, -3 + br i1 %45, label %46, label %49 + +46: ; preds = %._crit_edge + %47 = getelementptr inbounds i8, ptr %6, i64 %44 + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %47, ptr noundef nonnull align 1 dereferenceable(3) @.str.4, i64 3, i1 false) #7 + %48 = add nsw i32 %.068.lcssa, 2 + br label %49 + +49:; preds = %46, %._crit_edge + %.2 = phi i32 [ %48, %46 ], [ %.068.lcssa, %._crit_edge ] + %.not89 = icmp slt i64 %19, %18 + %or.cond8390 = and i1 %17, %.not89 + br i1 %or.cond8390, label %.lr.ph94, label %._crit_edge95 + +.lr.ph94:; preds = %49 + %50 = getelementptr inbounds nuw i8, ptr %2, i64 %22 + br label %51 + +51: ; preds = %.lr.ph94, %62 + %indvars.iv106 = phi i64 [ 0, %.lr.ph94 ], [ %indvars.iv.next107, %62 ] + %.392 = phi i32 [ %.2, %.lr.ph94 ], [ %.4, %62 ] + %52 = and i32 %.392, -2 + %.not79 = icmp eq i32 %52, 288 + br i1 %.not79, label %62, label %53 + +53: ; preds = %51 + %54 = sext i32 %.392 to i64 + %55 = getelementptr inbounds nuw i8, ptr %50, i64 %indvars.iv106 + %56 = load i8, ptr %55, align 1, !tbaa !3 + %57 = add i8 %56, -32 + %or.cond = icmp ult i8 %57, 95 + %narrow = select i1 %or.cond, i8 %56, i8 46 + %58 = add nsw i32 %.392, 1 + %59 = getelementptr inbounds [289 x i8], ptr %6, i64 0, i64 %54 + store i8 %narrow, ptr %59, align 1, !tbaa !3 + %60 = sext i32 %58 to i64 + %61 = getelementptr inbounds [289 x i8], ptr %6, i64 0, i64 %60 + store i8 0, ptr %61, align 1, !tbaa !3 + br label %62 + +62: ; preds = %51, %53 + %.4 = phi i32 [ %58, %53 ], [ %.392, %51 ] %indvars.iv.next107 = add nuw nsw i64 %indvars.iv106, 1 - %60 = icmp samesign ult i64 %indvars.iv.next107, %18 + %60 = icmp samesign ult i64 %indvars.iv.next107, %20 %61 = add nuw nsw i64 %indvars.iv.next107, %19 - %.not = icmp slt i64 %61, %17 + %.not = icmp slt i64 %61, %18 %or.cond83 = select i1 %60, i1 %.not, i1 false - br i1 %or.cond83, label %48, label %._crit_edge95, !llvm.loop !8 + br i1 %or.cond83, label %51, label %._crit_edge95, !llvm.loop !8 -._crit_edge95: ; preds = %59, %46 - %.3.lcssa = phi i32 [ %.2, %46 ], [ %.4, %59 ] +._crit_edge95: ; preds = %62, %49 + %.3.lcssa = phi i32 [ %.2, %49 ], [ %.4, %62 ] %62 = and i32 %.3.lcssa, -2 %.not80 = icmp eq i32 %62, 288 br i1 %.not80, label %._crit_edge95._crit_edge, label %63 @@ -166,7 +173,7 @@ define i32 @BIO_dump_indent_cb(ptr noundef readonly captures(none) %0, ptr nound br label %69 69: ; preds = %._crit_edge95._crit_edge, %63 - %.pre-phi = phi i64 [ %.pre, %._crit_edge95._crit_edge ], [ %67, %63 ] + %.pre-phi = phi i64 [ %.pre, %._crit_edge95._crit_edge ], [ %67, %66 ] %70 = call i32 %0(ptr noundef nonnull %6, i64 noundef %.pre-phi, ptr noundef %1) #7 %71 = icmp slt i32 %70, 0 br i1 %71, label %._crit_edge101, label %72 @@ -178,7 +185,7 @@ define i32 @BIO_dump_indent_cb(ptr noundef readonly captures(none) %0, ptr nound br i1 %exitcond113.not, label %._crit_edge101, label %.lr.ph, !llvm.loop !9 ._crit_edge101: ; preds = %69, %72, %5 - %.0 = phi i32 [ 0, %5 ], [ %73, %72 ], [ %70, %69 ] + %.0 = phi i32 [ 0, %5 ], [ %73, %75 ], [ %70, %72 ] call void @llvm.lifetime.end.p0(i64 289, ptr nonnull %6) #7 ret i32 %.0 } @@ -308,7 +315,10 @@ declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr no declare i32 @llvm.umin.i32(i32, i32) #6 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.usub.sat.i32(i32, i32) #6 +declare i32 @llvm.smax.i32(i32, i32) #6 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.umax.i32(i32, i32) #6 attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } diff --git a/bench/openusd/optimized/aom_convolve.ll b/bench/openusd/optimized/aom_convolve.ll index d16936b6ea2..9f7c2e579c6 100644 --- a/bench/openusd/optimized/aom_convolve.ll +++ b/bench/openusd/optimized/aom_convolve.ll @@ -499,7 +499,7 @@ define hidden void @aom_highbd_convolve8_horiz_c(ptr noundef %0, i64 noundef %1, 27: ; preds = %highbd_horz_scalar_product.exit.us.us.us.i, %.preheader.us.us.i %indvars.iv77.i = phi i64 [ %indvars.iv.next78.i, %highbd_horz_scalar_product.exit.us.us.us.i ], [ 0, %.preheader.us.us.i ] - %.02829.us.us.us.i = phi i32 [ %49, %highbd_horz_scalar_product.exit.us.us.us.i ], [ %17, %.preheader.us.us.i ] + %.02829.us.us.us.i = phi i32 [ %48, %highbd_horz_scalar_product.exit.us.us.us.i ], [ %17, %.preheader.us.us.i ] %28 = ashr i32 %.02829.us.us.us.i, 4 %29 = sext i32 %28 to i64 %30 = getelementptr inbounds i16, ptr %.047.us.us.i, i64 %29 @@ -526,13 +526,12 @@ define hidden void @aom_highbd_convolve8_horiz_c(ptr noundef %0, i64 noundef %1, highbd_horz_scalar_product.exit.us.us.us.i: ; preds = %34 %43 = add nsw i32 %42, 64 %44 = ashr i32 %43, 7 - %45 = tail call i32 @llvm.umin.i32(i32 range(i32 -16777216, 16777216) %44, i32 4095) - %46 = icmp slt i32 %44, 0 - %47 = trunc nuw nsw i32 %45 to i16 - %.0.i.us.us.us.i = select i1 %46, i16 0, i16 %47 - %48 = getelementptr inbounds nuw i16, ptr %.02544.us.us.i, i64 %indvars.iv77.i - store i16 %.0.i.us.us.us.i, ptr %48, align 2 - %49 = add nsw i32 %.02829.us.us.us.i, %5 + %45 = tail call i32 @llvm.smax.i32(i32 range(i32 -16777216, 16777216) %44, i32 0) + %46 = tail call i32 @llvm.umin.i32(i32 %45, i32 4095) + %47 = trunc nuw nsw i32 %46 to i16 + %47 = getelementptr inbounds nuw i16, ptr %.02544.us.us.i, i64 %indvars.iv77.i + store i16 %.0.i.us.us.us.i, ptr %47, align 2 + %48 = add nsw i32 %.02829.us.us.us.i, %5 %indvars.iv.next78.i = add nuw nsw i64 %indvars.iv77.i, 1 %exitcond81.not.i = icmp eq i64 %indvars.iv.next78.i, %wide.trip.count86.i br i1 %exitcond81.not.i, label %._crit_edge.split.us.us.us.i, label %27, !llvm.loop !13 @@ -552,7 +551,7 @@ highbd_horz_scalar_product.exit.us.us.us.i: ; preds = %34 53: ; preds = %highbd_horz_scalar_product.exit.us38.us.us.i, %.preheader.us.us64.i %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %highbd_horz_scalar_product.exit.us38.us.us.i ], [ 0, %.preheader.us.us64.i ] - %.02829.us33.us.us.i = phi i32 [ %75, %highbd_horz_scalar_product.exit.us38.us.us.i ], [ %17, %.preheader.us.us64.i ] + %.02829.us33.us.us.i = phi i32 [ %73, %highbd_horz_scalar_product.exit.us38.us.us.i ], [ %17, %.preheader.us.us64.i ] %54 = ashr i32 %.02829.us33.us.us.i, 4 %55 = sext i32 %54 to i64 %56 = getelementptr inbounds i16, ptr %.047.us.us65.i, i64 %55 @@ -562,8 +561,8 @@ highbd_horz_scalar_product.exit.us.us.us.i: ; preds = %34 br label %60 60: ; preds = %60, %53 - %indvars.iv.i.us34.us.us.i = phi i64 [ 0, %53 ], [ %indvars.iv.next.i.us36.us.us.i, %60 ] - %.078.i.us35.us.us.i = phi i32 [ 0, %53 ], [ %68, %60 ] + %indvars.iv.i.us34.us.us.i = phi i64 [ 0, %52 ], [ %indvars.iv.next.i.us36.us.us.i, %60 ] + %.078.i.us35.us.us.i = phi i32 [ 0, %52 ], [ %68, %60 ] %61 = getelementptr inbounds nuw i16, ptr %56, i64 %indvars.iv.i.us34.us.us.i %62 = load i16, ptr %61, align 2 %63 = zext i16 %62 to i32 @@ -579,13 +578,12 @@ highbd_horz_scalar_product.exit.us.us.us.i: ; preds = %34 highbd_horz_scalar_product.exit.us38.us.us.i: ; preds = %60 %69 = add nsw i32 %68, 64 %70 = ashr i32 %69, 7 - %71 = tail call i32 @llvm.umin.i32(i32 range(i32 -16777216, 16777216) %70, i32 1023) - %72 = icmp slt i32 %70, 0 + %71 = tail call i32 @llvm.smax.i32(i32 range(i32 -16777216, 16777216) %70, i32 0) + %71 = tail call i32 @llvm.umin.i32(i32 %70, i32 1023) %73 = trunc nuw nsw i32 %71 to i16 - %.0.i.us42.us.us.i = select i1 %72, i16 0, i16 %73 - %74 = getelementptr inbounds nuw i16, ptr %.02544.us.us66.i, i64 %indvars.iv.i - store i16 %.0.i.us42.us.us.i, ptr %74, align 2 - %75 = add nsw i32 %.02829.us33.us.us.i, %5 + %72 = getelementptr inbounds nuw i16, ptr %.02544.us.us66.i, i64 %indvars.iv.i + store i16 %73, ptr %72, align 2 + %73 = add nsw i32 %.02829.us33.us.us.i, %5 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count86.i br i1 %exitcond.not.i, label %._crit_edge.split.split.us.us.us.i, label %53, !llvm.loop !13 @@ -605,7 +603,7 @@ highbd_horz_scalar_product.exit.us38.us.us.i: ; preds = %60 79: ; preds = %highbd_horz_scalar_product.exit.us57.i, %.preheader.us.i %indvars.iv83.i = phi i64 [ 0, %.preheader.us.i ], [ %indvars.iv.next84.i, %highbd_horz_scalar_product.exit.us57.i ] - %.02829.us52.i = phi i32 [ %17, %.preheader.us.i ], [ %101, %highbd_horz_scalar_product.exit.us57.i ] + %.02829.us52.i = phi i32 [ %17, %.preheader.us.i ], [ %98, %highbd_horz_scalar_product.exit.us57.i ] %80 = ashr i32 %.02829.us52.i, 4 %81 = sext i32 %80 to i64 %82 = getelementptr inbounds i16, ptr %.047.us.i, i64 %81 @@ -615,8 +613,8 @@ highbd_horz_scalar_product.exit.us38.us.us.i: ; preds = %60 br label %86 86: ; preds = %86, %79 - %indvars.iv.i.us53.i = phi i64 [ 0, %79 ], [ %indvars.iv.next.i.us55.i, %86 ] - %.078.i.us54.i = phi i32 [ 0, %79 ], [ %94, %86 ] + %indvars.iv.i.us53.i = phi i64 [ 0, %77 ], [ %indvars.iv.next.i.us55.i, %84 ] + %.078.i.us54.i = phi i32 [ 0, %77 ], [ %94, %84 ] %87 = getelementptr inbounds nuw i16, ptr %82, i64 %indvars.iv.i.us53.i %88 = load i16, ptr %87, align 2 %89 = zext i16 %88 to i32 @@ -632,13 +630,12 @@ highbd_horz_scalar_product.exit.us38.us.us.i: ; preds = %60 highbd_horz_scalar_product.exit.us57.i: ; preds = %86 %95 = add nsw i32 %94, 64 %96 = ashr i32 %95, 7 - %97 = tail call i32 @llvm.umin.i32(i32 range(i32 -16777216, 16777216) %96, i32 255) - %98 = icmp slt i32 %96, 0 - %99 = trunc nuw nsw i32 %97 to i16 - %.0.i.us59.i = select i1 %98, i16 0, i16 %99 - %100 = getelementptr inbounds nuw i16, ptr %.02544.us.i, i64 %indvars.iv83.i - store i16 %.0.i.us59.i, ptr %100, align 2 - %101 = add nsw i32 %.02829.us52.i, %5 + %97 = tail call i32 @llvm.smax.i32(i32 range(i32 -16777216, 16777216) %96, i32 0) + %96 = tail call i32 @llvm.umin.i32(i32 %95, i32 255) + %99 = trunc nuw nsw i32 %96 to i16 + %97 = getelementptr inbounds nuw i16, ptr %.02544.us.i, i64 %indvars.iv83.i + store i16 %99, ptr %97, align 2 + %98 = add nsw i32 %.02829.us52.i, %5 %indvars.iv.next84.i = add nuw nsw i64 %indvars.iv83.i, 1 %exitcond87.not.i = icmp eq i64 %indvars.iv.next84.i, %wide.trip.count86.i br i1 %exitcond87.not.i, label %._crit_edge.split.split.us60.i, label %79, !llvm.loop !13 @@ -716,32 +713,31 @@ define hidden void @aom_highbd_convolve8_vert_c(ptr noundef %0, i64 noundef %1, highbd_vert_scalar_product.exit.us.i: ; preds = %35 %45 = add nsw i32 %44, 64 %46 = ashr i32 %45, 7 - switch i32 %10, label %51 [ + %47 = tail call i32 @llvm.smax.i32(i32 range(i32 -16777216, 16777216) %46, i32 0) + switch i32 %10, label %52 [ i32 12, label %49 - i32 10, label %47 + i32 10, label %48 ] 47: ; preds = %highbd_vert_scalar_product.exit.us.i - %48 = tail call i32 @llvm.umin.i32(i32 range(i32 -16777216, 16777216) %46, i32 1023) + %48 = tail call i32 @llvm.umin.i32(i32 %47, i32 1023) br label %clip_pixel_highbd.exit.us.i 49: ; preds = %highbd_vert_scalar_product.exit.us.i - %50 = tail call i32 @llvm.umin.i32(i32 range(i32 -16777216, 16777216) %46, i32 4095) + %50 = tail call i32 @llvm.umin.i32(i32 %47, i32 4095) br label %clip_pixel_highbd.exit.us.i 51: ; preds = %highbd_vert_scalar_product.exit.us.i - %52 = tail call i32 @llvm.umin.i32(i32 range(i32 -16777216, 16777216) %46, i32 255) + %52 = tail call i32 @llvm.umin.i32(i32 %47, i32 255) br label %clip_pixel_highbd.exit.us.i -clip_pixel_highbd.exit.us.i: ; preds = %51, %49, %47 - %.sink.i.us.i = phi i32 [ %50, %49 ], [ %48, %47 ], [ %52, %51 ] - %53 = icmp slt i32 %46, 0 - %54 = trunc nuw nsw i32 %.sink.i.us.i to i16 - %.0.i.us.i = select i1 %53, i16 0, i16 %54 - %55 = mul nsw i64 %indvars.iv.i, %3 - %56 = getelementptr inbounds i16, ptr %.02734.us.i, i64 %55 - store i16 %.0.i.us.i, ptr %56, align 2 - %57 = add nsw i32 %.03031.us.i, %7 +clip_pixel_highbd.exit.us.i: ; preds = %51, %51, %47 + %.sink.i.us.i = phi i32 [ %53, %52 ], [ %48, %50 ], [ %47, %48 ] + %.0.i.us.i = trunc nuw nsw i32 %.0.in.i.us.i to i16 + %54 = mul nsw i64 %indvars.iv.i, %3 + %55 = getelementptr inbounds i16, ptr %.02734.us.i, i64 %54 + store i16 %.0.i.us.i, ptr %55, align 2 + %56 = add nsw i32 %.03031.us.i, %7 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i br i1 %exitcond.not.i, label %._crit_edge.us.i, label %27, !llvm.loop !16 diff --git a/bench/openusd/optimized/av1_inv_txfm2d.ll b/bench/openusd/optimized/av1_inv_txfm2d.ll index 994b74b823b..26f36fd7afa 100644 --- a/bench/openusd/optimized/av1_inv_txfm2d.ll +++ b/bench/openusd/optimized/av1_inv_txfm2d.ll @@ -41,9 +41,9 @@ target triple = "x86_64-pc-linux-gnu" ; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable define hidden void @av1_highbd_iwht4x4_16_add_c(ptr noundef readonly captures(none) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #0 { %5 = alloca [16 x i32], align 16 - br label %104 + br label %96 -.preheader: ; preds = %104 +.preheader: ; preds = %96 %6 = ptrtoint ptr %1 to i64 %7 = shl i64 %6, 1 %8 = inttoptr i64 %7 to ptr @@ -74,149 +74,141 @@ highbd_clip_pixel_add.exit.thread.us: ; preds = %.preheader, %highbd %24 = ashr i32 %23, 1 %25 = sub nsw i32 %24, %20 %26 = sub nsw i32 %24, %16 - %27 = sub nsw i32 %21, %25 - %28 = add nsw i32 %26, %22 - %29 = load i16, ptr %.0120.us, align 2 - %30 = zext i16 %29 to i32 - %31 = add nsw i32 %27, %30 - %32 = tail call i32 @llvm.umin.i32(i32 %31, i32 4095) - %33 = icmp slt i32 %31, 0 - %34 = trunc nuw nsw i32 %32 to i16 - %.0.i.i99.us = select i1 %33, i16 0, i16 %34 + %27 = add nsw i32 %26, %22 + %28 = load i16, ptr %.0120.us, align 2 + %29 = zext i16 %28 to i32 + %30 = add i32 %21, %29 + %31 = sub i32 %30, %25 + %32 = tail call i32 @llvm.smax.i32(i32 %31, i32 0) + %33 = tail call i32 @llvm.umin.i32(i32 %32, i32 4095) + %34 = trunc nuw nsw i32 %33 to i16 store i16 %.0.i.i99.us, ptr %.0120.us, align 2 %35 = getelementptr inbounds i16, ptr %.0120.us, i64 %9 %36 = load i16, ptr %35, align 2 %37 = zext i16 %36 to i32 %38 = add nsw i32 %25, %37 + %38 = tail call i32 @llvm.smax.i32(i32 %37, i32 0) %39 = tail call i32 @llvm.umin.i32(i32 %38, i32 4095) - %40 = icmp slt i32 %38, 0 - %41 = trunc nuw nsw i32 %39 to i16 - %.0.i.i90104.us = select i1 %40, i16 0, i16 %41 - store i16 %.0.i.i90104.us, ptr %35, align 2 - %42 = getelementptr inbounds i16, ptr %.0120.us, i64 %11 - %43 = load i16, ptr %42, align 2 - %44 = zext i16 %43 to i32 - %45 = add nsw i32 %26, %44 - %46 = tail call i32 @llvm.umin.i32(i32 %45, i32 4095) - %47 = icmp slt i32 %45, 0 - %48 = trunc nuw nsw i32 %46 to i16 - %.0.i.i93109.us = select i1 %47, i16 0, i16 %48 - store i16 %.0.i.i93109.us, ptr %42, align 2 - %49 = getelementptr inbounds i16, ptr %.0120.us, i64 %13 - %50 = load i16, ptr %49, align 2 - %51 = zext i16 %50 to i32 - %52 = add nsw i32 %28, %51 - %53 = tail call i32 @llvm.umin.i32(i32 %52, i32 4095) - %54 = icmp slt i32 %52, 0 - %55 = trunc nuw nsw i32 %53 to i16 - %.0.i.i96.us = select i1 %54, i16 0, i16 %55 - store i16 %.0.i.i96.us, ptr %49, align 2 - %56 = getelementptr inbounds nuw i8, ptr %.1119.us, i64 4 + %.0.i.i90104.us = trunc nuw nsw i32 %39 to i16 + store i16 %.0.i.i90104.us, ptr %34, align 2 + %40 = getelementptr inbounds i16, ptr %.0120.us, i64 %11 + %41 = load i16, ptr %40, align 2 + %42 = zext i16 %41 to i32 + %43 = add nsw i32 %26, %42 + %44 = tail call i32 @llvm.smax.i32(i32 %43, i32 0) + %45 = tail call i32 @llvm.umin.i32(i32 %44, i32 4095) + %.0.i.i93109.us = trunc nuw nsw i32 %45 to i16 + store i16 %.0.i.i93109.us, ptr %40, align 2 + %46 = getelementptr inbounds i16, ptr %.0120.us, i64 %13 + %47 = load i16, ptr %46, align 2 + %48 = zext i16 %47 to i32 + %49 = add nsw i32 %27, %48 + %50 = tail call i32 @llvm.smax.i32(i32 %49, i32 0) + %51 = tail call i32 @llvm.umin.i32(i32 %50, i32 4095) + %.0.i.i96.us = trunc nuw nsw i32 %51 to i16 + store i16 %.0.i.i96.us, ptr %46, align 2 + %52 = getelementptr inbounds nuw i8, ptr %.1119.us, i64 4 %57 = getelementptr inbounds nuw i8, ptr %.0120.us, i64 2 - %58 = add nuw nsw i32 %.188118.us, 1 - %exitcond131.not = icmp eq i32 %58, 4 - br i1 %exitcond131.not, label %.split.us, label %highbd_clip_pixel_add.exit.thread.us, !llvm.loop !4 + %54 = add nuw nsw i32 %.188118.us, 1 + %exitcond132.not = icmp eq i32 %54, 4 + br i1 %exitcond132.not, label %.split.us, label %highbd_clip_pixel_add.exit.thread.us, !llvm.loop !4 highbd_clip_pixel_add.exit.thread100.us: ; preds = %.preheader, %highbd_clip_pixel_add.exit.thread100.us - %.0120.us122 = phi ptr [ %102, %highbd_clip_pixel_add.exit.thread100.us ], [ %8, %.preheader ] - %.1119.us123 = phi ptr [ %101, %highbd_clip_pixel_add.exit.thread100.us ], [ %5, %.preheader ] - %.188118.us124 = phi i32 [ %103, %highbd_clip_pixel_add.exit.thread100.us ], [ 0, %.preheader ] + %.0120.us122 = phi ptr [ %94, %highbd_clip_pixel_add.exit.thread100.us ], [ %8, %.preheader ] + %.1119.us123 = phi ptr [ %93, %highbd_clip_pixel_add.exit.thread100.us ], [ %5, %.preheader ] + %.188118.us124 = phi i32 [ %95, %highbd_clip_pixel_add.exit.thread100.us ], [ 0, %.preheader ] %59 = load i32, ptr %.1119.us123, align 4 %60 = getelementptr inbounds nuw i8, ptr %.1119.us123, i64 16 + %57 = load i32, ptr %56, align 4 + %58 = getelementptr inbounds nuw i8, ptr %.1119.us123, i64 32 + %59 = load i32, ptr %58, align 4 + %60 = getelementptr inbounds nuw i8, ptr %.1119.us123, i64 48 %61 = load i32, ptr %60, align 4 - %62 = getelementptr inbounds nuw i8, ptr %.1119.us123, i64 32 - %63 = load i32, ptr %62, align 4 - %64 = getelementptr inbounds nuw i8, ptr %.1119.us123, i64 48 - %65 = load i32, ptr %64, align 4 - %66 = add nsw i32 %61, %59 - %67 = sub nsw i32 %63, %65 - %68 = sub nsw i32 %66, %67 - %69 = ashr i32 %68, 1 - %70 = sub nsw i32 %69, %65 - %71 = sub nsw i32 %69, %61 - %72 = sub nsw i32 %66, %70 - %73 = add nsw i32 %71, %67 - %74 = load i16, ptr %.0120.us122, align 2 - %75 = zext i16 %74 to i32 - %76 = add nsw i32 %72, %75 - %77 = tail call i32 @llvm.umin.i32(i32 %76, i32 1023) - %78 = icmp slt i32 %76, 0 - %79 = trunc nuw nsw i32 %77 to i16 - %.0.i.i102.us = select i1 %78, i16 0, i16 %79 + %62 = add nsw i32 %57, %55 + %63 = sub nsw i32 %64, %61 + %64 = sub nsw i32 %62, %63 + %65 = ashr i32 %64, 1 + %66 = sub nsw i32 %65, %61 + %67 = sub nsw i32 %65, %57 + %68 = add nsw i32 %67, %63 + %69 = load i16, ptr %.0120.us122, align 2 + %70 = zext i16 %69 to i32 + %71 = add i32 %62, %70 + %72 = sub i32 %71, %66 + %73 = tail call i32 @llvm.smax.i32(i32 %72, i32 0) + %74 = tail call i32 @llvm.umin.i32(i32 %73, i32 1023) + %.0.i.i102.us = trunc nuw nsw i32 %74 to i16 store i16 %.0.i.i102.us, ptr %.0120.us122, align 2 %80 = getelementptr inbounds i16, ptr %.0120.us122, i64 %9 %81 = load i16, ptr %80, align 2 %82 = zext i16 %81 to i32 - %83 = add nsw i32 %70, %82 - %84 = tail call i32 @llvm.umin.i32(i32 %83, i32 1023) - %85 = icmp slt i32 %83, 0 - %86 = trunc nuw nsw i32 %84 to i16 - %.0.i.i90107.us = select i1 %85, i16 0, i16 %86 + %83 = add nsw i32 %66, %82 + %84 = tail call i32 @llvm.smax.i32(i32 %83, i32 0) + %80 = tail call i32 @llvm.umin.i32(i32 %84, i32 1023) + %86 = trunc nuw nsw i32 %80 to i16 store i16 %.0.i.i90107.us, ptr %80, align 2 - %87 = getelementptr inbounds i16, ptr %.0120.us122, i64 %11 + %81 = getelementptr inbounds i16, ptr %.0120.us122, i64 %11 + %82 = load i16, ptr %81, align 2 + %83 = zext i16 %82 to i32 + %84 = add nsw i32 %67, %83 + %85 = tail call i32 @llvm.smax.i32(i32 %84, i32 0) + %86 = tail call i32 @llvm.umin.i32(i32 %85, i32 1023) + %.0.i.i93112.us = trunc nuw nsw i32 %86 to i16 + store i16 %.0.i.i93112.us, ptr %81, align 2 + %87 = getelementptr inbounds i16, ptr %.0120.us122, i64 %13 %88 = load i16, ptr %87, align 2 %89 = zext i16 %88 to i32 - %90 = add nsw i32 %71, %89 - %91 = tail call i32 @llvm.umin.i32(i32 %90, i32 1023) - %92 = icmp slt i32 %90, 0 - %93 = trunc nuw nsw i32 %91 to i16 - %.0.i.i93112.us = select i1 %92, i16 0, i16 %93 - store i16 %.0.i.i93112.us, ptr %87, align 2 - %94 = getelementptr inbounds i16, ptr %.0120.us122, i64 %13 - %95 = load i16, ptr %94, align 2 - %96 = zext i16 %95 to i32 - %97 = add nsw i32 %73, %96 - %98 = tail call i32 @llvm.umin.i32(i32 %97, i32 1023) - %99 = icmp slt i32 %97, 0 - %100 = trunc nuw nsw i32 %98 to i16 - %.0.i.i96.us127 = select i1 %99, i16 0, i16 %100 - store i16 %.0.i.i96.us127, ptr %94, align 2 - %101 = getelementptr inbounds nuw i8, ptr %.1119.us123, i64 4 - %102 = getelementptr inbounds nuw i8, ptr %.0120.us122, i64 2 - %103 = add nuw nsw i32 %.188118.us124, 1 - %exitcond130.not = icmp eq i32 %103, 4 - br i1 %exitcond130.not, label %.split.us, label %highbd_clip_pixel_add.exit.thread100.us, !llvm.loop !4 - -104: ; preds = %4, %104 - %.085117 = phi ptr [ %5, %4 ], [ %128, %104 ] - %.086116 = phi ptr [ %0, %4 ], [ %127, %104 ] - %.087115 = phi i32 [ 0, %4 ], [ %129, %104 ] - %105 = load i32, ptr %.086116, align 4 - %106 = ashr i32 %105, 2 - %107 = getelementptr inbounds nuw i8, ptr %.086116, i64 4 - %108 = load i32, ptr %107, align 4 - %109 = ashr i32 %108, 2 - %110 = getelementptr inbounds nuw i8, ptr %.086116, i64 8 - %111 = load i32, ptr %110, align 4 - %112 = ashr i32 %111, 2 - %113 = getelementptr inbounds nuw i8, ptr %.086116, i64 12 - %114 = load i32, ptr %113, align 4 - %115 = ashr i32 %114, 2 - %116 = add nsw i32 %109, %106 - %117 = sub nsw i32 %112, %115 - %118 = sub nsw i32 %116, %117 - %119 = ashr i32 %118, 1 - %120 = sub nsw i32 %119, %115 - %121 = sub nsw i32 %119, %109 - %122 = sub nsw i32 %116, %120 - %123 = add nsw i32 %121, %117 - store i32 %122, ptr %.085117, align 4 - %124 = getelementptr inbounds nuw i8, ptr %.085117, i64 4 - store i32 %120, ptr %124, align 4 - %125 = getelementptr inbounds nuw i8, ptr %.085117, i64 8 - store i32 %121, ptr %125, align 4 - %126 = getelementptr inbounds nuw i8, ptr %.085117, i64 12 - store i32 %123, ptr %126, align 4 - %127 = getelementptr inbounds nuw i8, ptr %.086116, i64 16 - %128 = getelementptr inbounds nuw i8, ptr %.085117, i64 16 - %129 = add nuw nsw i32 %.087115, 1 - %exitcond.not = icmp eq i32 %129, 4 - br i1 %exitcond.not, label %.preheader, label %104, !llvm.loop !6 + %90 = add nsw i32 %68, %89 + %91 = tail call i32 @llvm.smax.i32(i32 %90, i32 0) + %92 = tail call i32 @llvm.umin.i32(i32 %91, i32 1023) + %93 = trunc nuw nsw i32 %92 to i16 + store i16 %.0.i.i96.us128, ptr %96, align 2 + %93 = getelementptr inbounds nuw i8, ptr %.1119.us123, i64 4 + %94 = getelementptr inbounds nuw i8, ptr %.0120.us122, i64 2 + %95 = add nuw nsw i32 %.188118.us124, 1 + %exitcond131.not = icmp eq i32 %95, 4 + br i1 %exitcond131.not, label %.split.us, label %highbd_clip_pixel_add.exit.thread100.us, !llvm.loop !4 + +96:; preds = %4, %96 + %.085117 = phi ptr [ %5, %4 ], [ %120, %96 ] + %.086116 = phi ptr [ %0, %4 ], [ %119, %96 ] + %.087115 = phi i32 [ 0, %4 ], [ %121, %96 ] + %97 = load i32, ptr %.086116, align 4 + %107 = ashr i32 %97, 2 + %99 = getelementptr inbounds nuw i8, ptr %.086116, i64 4 + %100 = load i32, ptr %99, align 4 + %101 = ashr i32 %100, 2 + %102 = getelementptr inbounds nuw i8, ptr %.086116, i64 8 + %103 = load i32, ptr %102, align 4 + %104 = ashr i32 %103, 2 + %105 = getelementptr inbounds nuw i8, ptr %.086116, i64 12 + %106 = load i32, ptr %105, align 4 + %107 = ashr i32 %106, 2 + %108 = add nsw i32 %101, %98 + %109 = sub nsw i32 %104, %107 + %110 = sub nsw i32 %108, %109 + %109 = ashr i32 %110, 1 + %112 = sub nsw i32 %111, %107 + %113 = sub nsw i32 %109, %101 + %114 = sub nsw i32 %108, %112 + %115 = add nsw i32 %113, %109 + store i32 %114, ptr %.085117, align 4 + %116 = getelementptr inbounds nuw i8, ptr %.085117, i64 4 + store i32 %112, ptr %116, align 4 + %117 = getelementptr inbounds nuw i8, ptr %.085117, i64 8 + store i32 %113, ptr %117, align 4 + %118 = getelementptr inbounds nuw i8, ptr %.085117, i64 12 + store i32 %115, ptr %118, align 4 + %119 = getelementptr inbounds nuw i8, ptr %.086116, i64 16 + %120 = getelementptr inbounds nuw i8, ptr %.085117, i64 16 + %123 = add nuw nsw i32 %.087115, 1 + %exitcond.not = icmp eq i32 %121, 4 + br i1 %exitcond.not, label %.preheader, label %96, !llvm.loop !6 highbd_clip_pixel_add.exit: ; preds = %.preheader, %highbd_clip_pixel_add.exit - %.0120 = phi ptr [ %173, %highbd_clip_pixel_add.exit ], [ %8, %.preheader ] - %.1119 = phi ptr [ %172, %highbd_clip_pixel_add.exit ], [ %5, %.preheader ] - %.188118 = phi i32 [ %174, %highbd_clip_pixel_add.exit ], [ 0, %.preheader ] + %.0120 = phi ptr [ %161, %highbd_clip_pixel_add.exit ], [ %8, %.preheader ] + %.1119 = phi ptr [ %160, %highbd_clip_pixel_add.exit ], [ %5, %.preheader ] + %.188118 = phi i32 [ %162, %highbd_clip_pixel_add.exit ], [ 0, %.preheader ] %130 = load i32, ptr %.1119, align 4 %131 = getelementptr inbounds nuw i8, ptr %.1119, i64 16 %132 = load i32, ptr %131, align 4 @@ -230,48 +222,44 @@ highbd_clip_pixel_add.exit: ; preds = %.preheader, %highbd %140 = ashr i32 %139, 1 %141 = sub nsw i32 %140, %136 %142 = sub nsw i32 %140, %132 - %143 = sub nsw i32 %137, %141 - %144 = add nsw i32 %142, %138 - %145 = load i16, ptr %.0120, align 2 - %146 = zext i16 %145 to i32 - %147 = add nsw i32 %143, %146 - %148 = tail call i32 @llvm.umin.i32(i32 %147, i32 255) - %149 = icmp slt i32 %147, 0 - %150 = trunc nuw nsw i32 %148 to i16 - %.0.i.i = select i1 %149, i16 0, i16 %150 + %135 = add nsw i32 %134, %130 + %136 = load i16, ptr %.0120, align 2 + %137 = zext i16 %136 to i32 + %138 = add i32 %129, %137 + %139 = sub i32 %138, %141 + %148 = tail call i32 @llvm.smax.i32(i32 %139, i32 0) + %141 = tail call i32 @llvm.umin.i32(i32 %140, i32 255) + %150 = trunc nuw nsw i32 %141 to i16 store i16 %.0.i.i, ptr %.0120, align 2 %151 = getelementptr inbounds i16, ptr %.0120, i64 %9 %152 = load i16, ptr %151, align 2 %153 = zext i16 %152 to i32 %154 = add nsw i32 %141, %153 - %155 = tail call i32 @llvm.umin.i32(i32 %154, i32 255) - %156 = icmp slt i32 %154, 0 - %157 = trunc nuw nsw i32 %155 to i16 - %.0.i.i90 = select i1 %156, i16 0, i16 %157 + %155 = tail call i32 @llvm.smax.i32(i32 %154, i32 0) + %147 = tail call i32 @llvm.umin.i32(i32 %146, i32 255) + %157 = trunc nuw nsw i32 %147 to i16 store i16 %.0.i.i90, ptr %151, align 2 - %158 = getelementptr inbounds i16, ptr %.0120, i64 %11 - %159 = load i16, ptr %158, align 2 - %160 = zext i16 %159 to i32 - %161 = add nsw i32 %142, %160 - %162 = tail call i32 @llvm.umin.i32(i32 %161, i32 255) - %163 = icmp slt i32 %161, 0 - %164 = trunc nuw nsw i32 %162 to i16 - %.0.i.i93 = select i1 %163, i16 0, i16 %164 - store i16 %.0.i.i93, ptr %158, align 2 - %165 = getelementptr inbounds i16, ptr %.0120, i64 %13 - %166 = load i16, ptr %165, align 2 - %167 = zext i16 %166 to i32 - %168 = add nsw i32 %144, %167 - %169 = tail call i32 @llvm.umin.i32(i32 %168, i32 255) - %170 = icmp slt i32 %168, 0 - %171 = trunc nuw nsw i32 %169 to i16 - %.0.i.i96 = select i1 %170, i16 0, i16 %171 - store i16 %.0.i.i96, ptr %165, align 2 - %172 = getelementptr inbounds nuw i8, ptr %.1119, i64 4 - %173 = getelementptr inbounds nuw i8, ptr %.0120, i64 2 - %174 = add nuw nsw i32 %.188118, 1 - %exitcond132.not = icmp eq i32 %174, 4 - br i1 %exitcond132.not, label %.split.us, label %highbd_clip_pixel_add.exit, !llvm.loop !4 + %148 = getelementptr inbounds i16, ptr %.0120, i64 %11 + %149 = load i16, ptr %148, align 2 + %150 = zext i16 %149 to i32 + %151 = add nsw i32 %134, %150 + %152 = tail call i32 @llvm.smax.i32(i32 %151, i32 0) + %162 = tail call i32 @llvm.umin.i32(i32 %152, i32 255) + %.0.i.i93 = trunc nuw nsw i32 %162 to i16 + store i16 %.0.i.i93, ptr %148, align 2 + %154 = getelementptr inbounds i16, ptr %.0120, i64 %13 + %155 = load i16, ptr %154, align 2 + %156 = zext i16 %155 to i32 + %157 = add nsw i32 %135, %156 + %158 = tail call i32 @llvm.smax.i32(i32 %157, i32 0) + %159 = tail call i32 @llvm.umin.i32(i32 %158, i32 255) + %.0.i.i96 = trunc nuw nsw i32 %159 to i16 + store i16 %.0.i.i96, ptr %154, align 2 + %160 = getelementptr inbounds nuw i8, ptr %.1119, i64 4 + %161 = getelementptr inbounds nuw i8, ptr %.0120, i64 2 + %162 = add nuw nsw i32 %.188118, 1 + %exitcond133.not = icmp eq i32 %162, 4 + br i1 %exitcond133.not, label %.split.us, label %highbd_clip_pixel_add.exit, !llvm.loop !4 .split.us: ; preds = %highbd_clip_pixel_add.exit.thread100.us, %highbd_clip_pixel_add.exit.thread.us, %highbd_clip_pixel_add.exit ret void @@ -305,148 +293,136 @@ define hidden void @av1_highbd_iwht4x4_1_add_c(ptr noundef readonly captures(non ] highbd_clip_pixel_add.exit.thread.us: ; preds = %4, %highbd_clip_pixel_add.exit.thread.us - %.072.us = phi ptr [ %52, %highbd_clip_pixel_add.exit.thread.us ], [ %8, %4 ] - %.04271.us = phi i32 [ %53, %highbd_clip_pixel_add.exit.thread.us ], [ 0, %4 ] - %.04370.us = phi ptr [ %51, %highbd_clip_pixel_add.exit.thread.us ], [ %5, %4 ] + %.072.us = phi ptr [ %48, %highbd_clip_pixel_add.exit.thread.us ], [ %8, %4 ] + %.04271.us = phi i32 [ %49, %highbd_clip_pixel_add.exit.thread.us ], [ 0, %4 ] + %.04370.us = phi ptr [ %47, %highbd_clip_pixel_add.exit.thread.us ], [ %5, %4 ] %21 = load i32, ptr %.04370.us, align 4 %22 = ashr i32 %21, 1 - %23 = sub nsw i32 %21, %22 + %23 = sub i32 %21, %22 %24 = load i16, ptr %.072.us, align 2 %25 = zext i16 %24 to i32 %26 = add nsw i32 %23, %25 - %27 = tail call i32 @llvm.umin.i32(i32 %26, i32 4095) - %28 = icmp slt i32 %26, 0 - %29 = trunc nuw nsw i32 %27 to i16 - %.0.i.i54.us = select i1 %28, i16 0, i16 %29 + %27 = tail call i32 @llvm.smax.i32(i32 %26, i32 0) + %28 = tail call i32 @llvm.umin.i32(i32 %27, i32 4095) + %29 = trunc nuw nsw i32 %28 to i16 store i16 %.0.i.i54.us, ptr %.072.us, align 2 %30 = getelementptr inbounds i16, ptr %.072.us, i64 %16 %31 = load i16, ptr %30, align 2 %32 = zext i16 %31 to i32 %33 = add nsw i32 %22, %32 + %33 = tail call i32 @llvm.smax.i32(i32 %32, i32 0) %34 = tail call i32 @llvm.umin.i32(i32 %33, i32 4095) - %35 = icmp slt i32 %33, 0 - %36 = trunc nuw nsw i32 %34 to i16 - %.0.i.i4559.us = select i1 %35, i16 0, i16 %36 - store i16 %.0.i.i4559.us, ptr %30, align 2 - %37 = getelementptr inbounds i16, ptr %.072.us, i64 %18 - %38 = load i16, ptr %37, align 2 - %39 = zext i16 %38 to i32 - %40 = add nsw i32 %22, %39 - %41 = tail call i32 @llvm.umin.i32(i32 %40, i32 4095) - %42 = icmp slt i32 %40, 0 - %43 = trunc nuw nsw i32 %41 to i16 - %.0.i.i4864.us = select i1 %42, i16 0, i16 %43 - store i16 %.0.i.i4864.us, ptr %37, align 2 - %44 = getelementptr inbounds i16, ptr %.072.us, i64 %20 - %45 = load i16, ptr %44, align 2 - %46 = zext i16 %45 to i32 - %47 = add nsw i32 %22, %46 - %48 = tail call i32 @llvm.umin.i32(i32 %47, i32 4095) - %49 = icmp slt i32 %47, 0 - %50 = trunc nuw nsw i32 %48 to i16 - %.0.i.i51.us = select i1 %49, i16 0, i16 %50 - store i16 %.0.i.i51.us, ptr %44, align 2 - %51 = getelementptr inbounds nuw i8, ptr %.04370.us, i64 4 - %52 = getelementptr inbounds nuw i8, ptr %.072.us, i64 2 - %53 = add nuw nsw i32 %.04271.us, 1 - %exitcond84.not = icmp eq i32 %53, 4 - br i1 %exitcond84.not, label %.split74.us, label %highbd_clip_pixel_add.exit.thread.us, !llvm.loop !7 + %.0.i.i4559.us = trunc nuw nsw i32 %34 to i16 + store i16 %.0.i.i4559.us, ptr %29, align 2 + %35 = getelementptr inbounds i16, ptr %.072.us, i64 %18 + %36 = load i16, ptr %35, align 2 + %37 = zext i16 %37 to i32 + %38 = add nsw i32 %22, %37 + %39 = tail call i32 @llvm.smax.i32(i32 %38, i32 0) + %40 = tail call i32 @llvm.umin.i32(i32 %39, i32 4095) + %.0.i.i4864.us = trunc nuw nsw i32 %40 to i16 + store i16 %.0.i.i4864.us, ptr %35, align 2 + %41 = getelementptr inbounds i16, ptr %.072.us, i64 %20 + %42 = load i16, ptr %41, align 2 + %43 = zext i16 %42 to i32 + %44 = add nsw i32 %22, %43 + %45 = tail call i32 @llvm.smax.i32(i32 %44, i32 0) + %46 = tail call i32 @llvm.umin.i32(i32 %45, i32 4095) + %.0.i.i51.us = trunc nuw nsw i32 %46 to i16 + store i16 %.0.i.i51.us, ptr %41, align 2 + %47 = getelementptr inbounds nuw i8, ptr %.04370.us, i64 4 + %48 = getelementptr inbounds nuw i8, ptr %.072.us, i64 2 + %49 = add nuw nsw i32 %.04271.us, 1 + %exitcond85.not = icmp eq i32 %49, 4 + br i1 %exitcond85.not, label %.split74.us, label %highbd_clip_pixel_add.exit.thread.us, !llvm.loop !7 highbd_clip_pixel_add.exit.thread55.us: ; preds = %4, %highbd_clip_pixel_add.exit.thread55.us - %.072.us76 = phi ptr [ %85, %highbd_clip_pixel_add.exit.thread55.us ], [ %8, %4 ] - %.04271.us77 = phi i32 [ %86, %highbd_clip_pixel_add.exit.thread55.us ], [ 0, %4 ] - %.04370.us78 = phi ptr [ %84, %highbd_clip_pixel_add.exit.thread55.us ], [ %5, %4 ] + %.072.us76 = phi ptr [ %82, %highbd_clip_pixel_add.exit.thread55.us ], [ %8, %4 ] + %.04271.us77 = phi i32 [ %78, %highbd_clip_pixel_add.exit.thread55.us ], [ 0, %4 ] + %.04370.us78 = phi ptr [ %81, %highbd_clip_pixel_add.exit.thread55.us ], [ %5, %4 ] %54 = load i32, ptr %.04370.us78, align 4 %55 = ashr i32 %54, 1 - %56 = sub nsw i32 %54, %55 + %56 = sub i32 %54, %55 %57 = load i16, ptr %.072.us76, align 2 %58 = zext i16 %57 to i32 %59 = add nsw i32 %56, %58 - %60 = tail call i32 @llvm.umin.i32(i32 %59, i32 1023) - %61 = icmp slt i32 %59, 0 - %62 = trunc nuw nsw i32 %60 to i16 - %.0.i.i57.us = select i1 %61, i16 0, i16 %62 + %60 = tail call i32 @llvm.smax.i32(i32 %59, i32 0) + %57 = tail call i32 @llvm.umin.i32(i32 %56, i32 1023) + %62 = trunc nuw nsw i32 %57 to i16 store i16 %.0.i.i57.us, ptr %.072.us76, align 2 %63 = getelementptr inbounds i16, ptr %.072.us76, i64 %16 %64 = load i16, ptr %63, align 2 %65 = zext i16 %64 to i32 %66 = add nsw i32 %55, %65 - %67 = tail call i32 @llvm.umin.i32(i32 %66, i32 1023) - %68 = icmp slt i32 %66, 0 - %69 = trunc nuw nsw i32 %67 to i16 - %.0.i.i4562.us = select i1 %68, i16 0, i16 %69 - store i16 %.0.i.i4562.us, ptr %63, align 2 - %70 = getelementptr inbounds i16, ptr %.072.us76, i64 %18 + %67 = tail call i32 @llvm.smax.i32(i32 %66, i32 0) + %63 = tail call i32 @llvm.umin.i32(i32 %62, i32 1023) + %69 = trunc nuw nsw i32 %63 to i16 + store i16 %.0.i.i4562.us, ptr %58, align 2 + %64 = getelementptr inbounds i16, ptr %.072.us76, i64 %18 + %65 = load i16, ptr %64, align 2 + %66 = zext i16 %65 to i32 + %67 = add nsw i32 %51, %66 + %68 = tail call i32 @llvm.smax.i32(i32 %67, i32 0) + %69 = tail call i32 @llvm.umin.i32(i32 %68, i32 1023) + %.0.i.i4867.us = trunc nuw nsw i32 %69 to i16 + store i16 %.0.i.i4867.us, ptr %64, align 2 + %70 = getelementptr inbounds i16, ptr %.072.us76, i64 %20 %71 = load i16, ptr %70, align 2 %72 = zext i16 %71 to i32 %73 = add nsw i32 %55, %72 - %74 = tail call i32 @llvm.umin.i32(i32 %73, i32 1023) - %75 = icmp slt i32 %73, 0 - %76 = trunc nuw nsw i32 %74 to i16 - %.0.i.i4867.us = select i1 %75, i16 0, i16 %76 - store i16 %.0.i.i4867.us, ptr %70, align 2 - %77 = getelementptr inbounds i16, ptr %.072.us76, i64 %20 - %78 = load i16, ptr %77, align 2 - %79 = zext i16 %78 to i32 - %80 = add nsw i32 %55, %79 - %81 = tail call i32 @llvm.umin.i32(i32 %80, i32 1023) - %82 = icmp slt i32 %80, 0 - %83 = trunc nuw nsw i32 %81 to i16 - %.0.i.i51.us81 = select i1 %82, i16 0, i16 %83 - store i16 %.0.i.i51.us81, ptr %77, align 2 - %84 = getelementptr inbounds nuw i8, ptr %.04370.us78, i64 4 - %85 = getelementptr inbounds nuw i8, ptr %.072.us76, i64 2 - %86 = add nuw nsw i32 %.04271.us77, 1 - %exitcond.not = icmp eq i32 %86, 4 + %74 = tail call i32 @llvm.smax.i32(i32 %73, i32 0) + %75 = tail call i32 @llvm.umin.i32(i32 %74, i32 1023) + %76 = trunc nuw nsw i32 %75 to i16 + store i16 %.0.i.i51.us82, ptr %70, align 2 + %76 = getelementptr inbounds nuw i8, ptr %.04370.us78, i64 4 + %77 = getelementptr inbounds nuw i8, ptr %.072.us76, i64 2 + %78 = add nuw nsw i32 %.04271.us77, 1 + %exitcond.not = icmp eq i32 %78, 4 br i1 %exitcond.not, label %.split74.us, label %highbd_clip_pixel_add.exit.thread55.us, !llvm.loop !7 highbd_clip_pixel_add.exit: ; preds = %4, %highbd_clip_pixel_add.exit - %.072 = phi ptr [ %118, %highbd_clip_pixel_add.exit ], [ %8, %4 ] - %.04271 = phi i32 [ %119, %highbd_clip_pixel_add.exit ], [ 0, %4 ] - %.04370 = phi ptr [ %117, %highbd_clip_pixel_add.exit ], [ %5, %4 ] + %.072 = phi ptr [ %106, %highbd_clip_pixel_add.exit ], [ %8, %4 ] + %.04271 = phi i32 [ %107, %highbd_clip_pixel_add.exit ], [ 0, %4 ] + %.04370 = phi ptr [ %105, %highbd_clip_pixel_add.exit ], [ %5, %4 ] %87 = load i32, ptr %.04370, align 4 %88 = ashr i32 %87, 1 - %89 = sub nsw i32 %87, %88 + %89 = sub i32 %87, %88 %90 = load i16, ptr %.072, align 2 %91 = zext i16 %90 to i32 %92 = add nsw i32 %89, %91 - %93 = tail call i32 @llvm.umin.i32(i32 %92, i32 255) - %94 = icmp slt i32 %92, 0 - %95 = trunc nuw nsw i32 %93 to i16 - %.0.i.i = select i1 %94, i16 0, i16 %95 + %93 = tail call i32 @llvm.smax.i32(i32 %92, i32 0) + %86 = tail call i32 @llvm.umin.i32(i32 %93, i32 255) + %95 = trunc nuw nsw i32 %86 to i16 store i16 %.0.i.i, ptr %.072, align 2 %96 = getelementptr inbounds i16, ptr %.072, i64 %16 %97 = load i16, ptr %96, align 2 %98 = zext i16 %97 to i32 %99 = add nsw i32 %88, %98 - %100 = tail call i32 @llvm.umin.i32(i32 %99, i32 255) - %101 = icmp slt i32 %99, 0 - %102 = trunc nuw nsw i32 %100 to i16 - %.0.i.i45 = select i1 %101, i16 0, i16 %102 - store i16 %.0.i.i45, ptr %96, align 2 - %103 = getelementptr inbounds i16, ptr %.072, i64 %18 - %104 = load i16, ptr %103, align 2 - %105 = zext i16 %104 to i32 - %106 = add nsw i32 %88, %105 - %107 = tail call i32 @llvm.umin.i32(i32 %106, i32 255) - %108 = icmp slt i32 %106, 0 - %109 = trunc nuw nsw i32 %107 to i16 - %.0.i.i48 = select i1 %108, i16 0, i16 %109 - store i16 %.0.i.i48, ptr %103, align 2 - %110 = getelementptr inbounds i16, ptr %.072, i64 %20 - %111 = load i16, ptr %110, align 2 - %112 = zext i16 %111 to i32 - %113 = add nsw i32 %88, %112 - %114 = tail call i32 @llvm.umin.i32(i32 %113, i32 255) - %115 = icmp slt i32 %113, 0 - %116 = trunc nuw nsw i32 %114 to i16 - %.0.i.i51 = select i1 %115, i16 0, i16 %116 - store i16 %.0.i.i51, ptr %110, align 2 - %117 = getelementptr inbounds nuw i8, ptr %.04370, i64 4 - %118 = getelementptr inbounds nuw i8, ptr %.072, i64 2 - %119 = add nuw nsw i32 %.04271, 1 - %exitcond85.not = icmp eq i32 %119, 4 - br i1 %exitcond85.not, label %.split74.us, label %highbd_clip_pixel_add.exit, !llvm.loop !7 + %100 = tail call i32 @llvm.smax.i32(i32 %99, i32 0) + %92 = tail call i32 @llvm.umin.i32(i32 %91, i32 255) + %102 = trunc nuw nsw i32 %92 to i16 + store i16 %.0.i.i45, ptr %87, align 2 + %93 = getelementptr inbounds i16, ptr %.072, i64 %18 + %94 = load i16, ptr %93, align 2 + %95 = zext i16 %94 to i32 + %96 = add nsw i32 %80, %95 + %97 = tail call i32 @llvm.smax.i32(i32 %96, i32 0) + %107 = tail call i32 @llvm.umin.i32(i32 %97, i32 255) + %.0.i.i48 = trunc nuw nsw i32 %107 to i16 + store i16 %.0.i.i48, ptr %93, align 2 + %99 = getelementptr inbounds i16, ptr %.072, i64 %20 + %100 = load i16, ptr %99, align 2 + %101 = zext i16 %100 to i32 + %102 = add nsw i32 %88, %101 + %103 = tail call i32 @llvm.smax.i32(i32 %102, i32 0) + %104 = tail call i32 @llvm.umin.i32(i32 %103, i32 255) + %.0.i.i51 = trunc nuw nsw i32 %104 to i16 + store i16 %.0.i.i51, ptr %99, align 2 + %105 = getelementptr inbounds nuw i8, ptr %.04370, i64 4 + %106 = getelementptr inbounds nuw i8, ptr %.072, i64 2 + %107 = add nuw nsw i32 %.04271, 1 + %exitcond86.not = icmp eq i32 %107, 4 + br i1 %exitcond86.not, label %.split74.us, label %highbd_clip_pixel_add.exit, !llvm.loop !7 .split74.us: ; preds = %highbd_clip_pixel_add.exit.thread55.us, %highbd_clip_pixel_add.exit.thread.us, %highbd_clip_pixel_add.exit ret void @@ -745,7 +721,7 @@ switch.lookup31: ; preds = %av1_gen_inv_stage_r br label %inv_txfm_type_to_func.exit.i inv_txfm_type_to_func.exit.i: ; preds = %av1_gen_inv_stage_range.exit.i, %switch.lookup31 - %.0.i134.i = phi ptr [ %switch.load, %switch.lookup31 ], [ null, %av1_gen_inv_stage_range.exit.i ] + %.0.i134.i = phi ptr [ %switch.load, %switch.lookup30 ], [ null, %av1_gen_inv_stage_range.exit.i ] %75 = icmp ult i8 %37, 12 br i1 %75, label %switch.lookup32, label %.lr.ph174.i @@ -756,7 +732,7 @@ switch.lookup32: ; preds = %inv_txfm_type_to_fu br label %.lr.ph174.i .lr.ph174.i: ; preds = %inv_txfm_type_to_func.exit.i, %switch.lookup32 - %.0.i135.i = phi ptr [ %switch.load34, %switch.lookup32 ], [ null, %inv_txfm_type_to_func.exit.i ] + %.0.i135.i = phi ptr [ %switch.load34, %switch.lookup31 ], [ null, %inv_txfm_type_to_func.exit.i ] %77 = tail call i32 @llvm.smax.i32(i32 %47, i32 %45) %78 = sext i32 %77 to i64 %79 = getelementptr inbounds i32, ptr %3, i64 %78 @@ -992,28 +968,27 @@ clamp_buf.exit155.i: ; preds = %clamp_value.exit.i1 %177 = load i32, ptr %176, align 4 %178 = zext i16 %175 to i32 %179 = add nsw i32 %177, %178 - switch i32 %6, label %180 [ - i32 12, label %184 - i32 10, label %182 + %180 = call i32 @llvm.smax.i32(i32 %179, i32 0) + switch i32 %6, label %181 [ + i32 12, label %185 + i32 10, label %183 ] 180: ; preds = %.lr.ph185.i - %181 = call i32 @llvm.umin.i32(i32 %179, i32 255) + %181 = call i32 @llvm.umin.i32(i32 %180, i32 255) br label %highbd_clip_pixel_add.exit.i 182: ; preds = %.lr.ph185.i - %183 = call i32 @llvm.umin.i32(i32 %179, i32 1023) + %183 = call i32 @llvm.umin.i32(i32 %180, i32 1023) br label %highbd_clip_pixel_add.exit.i 184: ; preds = %.lr.ph185.i - %185 = call i32 @llvm.umin.i32(i32 %179, i32 4095) + %185 = call i32 @llvm.umin.i32(i32 %180, i32 4095) br label %highbd_clip_pixel_add.exit.i highbd_clip_pixel_add.exit.i: ; preds = %184, %182, %180 - %.sink.i.i.i7 = phi i32 [ %185, %184 ], [ %183, %182 ], [ %181, %180 ] - %186 = icmp slt i32 %179, 0 - %187 = trunc nuw nsw i32 %.sink.i.i.i7 to i16 - %.0.i.i.i = select i1 %186, i16 0, i16 %187 + %.sink.i.i.i7 = phi i32 [ %182, %181 ], [ %186, %185 ], [ %184, %183 ] + %.0.i.i.i = trunc nuw nsw i32 %.sink.i.i.i7 to i16 store i16 %.0.i.i.i, ptr %gep254.i, align 2 %indvars.iv.next234.i = add nuw nsw i64 %indvars.iv233.i, 1 %exitcond238.not.i = icmp eq i64 %indvars.iv.next234.i, %wide.trip.count219.i @@ -1032,6 +1007,7 @@ highbd_clip_pixel_add.exit.i: ; preds = %184, %182, %180 %195 = load i32, ptr %194, align 4 %196 = zext i16 %189 to i32 %197 = add nsw i32 %195, %196 + %197 = call i32 @llvm.smax.i32(i32 %196, i32 0) switch i32 %6, label %198 [ i32 12, label %202 i32 10, label %200 @@ -1050,10 +1026,8 @@ highbd_clip_pixel_add.exit.i: ; preds = %184, %182, %180 br label %highbd_clip_pixel_add.exit158.i highbd_clip_pixel_add.exit158.i: ; preds = %202, %200, %198 - %.sink.i.i156.i = phi i32 [ %203, %202 ], [ %201, %200 ], [ %199, %198 ] - %204 = icmp slt i32 %197, 0 - %205 = trunc nuw nsw i32 %.sink.i.i156.i to i16 - %.0.i.i157.i = select i1 %204, i16 0, i16 %205 + %.sink.i.i156.i = phi i32 [ %199, %198 ], [ %203, %202 ], [ %201, %200 ] + %.0.i.i157.i = trunc nuw nsw i32 %.sink.i.i156.i to i16 store i16 %.0.i.i157.i, ptr %gep252.i, align 2 %indvars.iv.next228.i = add nuw nsw i64 %indvars.iv227.i, 1 %exitcond232.not.i = icmp eq i64 %indvars.iv.next228.i, %wide.trip.count219.i diff --git a/bench/openusd/optimized/av1_loopfilter.ll b/bench/openusd/optimized/av1_loopfilter.ll index b0075458304..0903a1a2a49 100644 --- a/bench/openusd/optimized/av1_loopfilter.ll +++ b/bench/openusd/optimized/av1_loopfilter.ll @@ -35,7 +35,7 @@ define hidden zeroext i8 @av1_get_filter_level(ptr noundef readonly captures(non %9 = getelementptr inbounds nuw i8, ptr %0, i64 24820 %10 = load i32, ptr %9, align 4 %.not = icmp eq i32 %10, 0 - br i1 %.not, label %92, label %11 + br i1 %.not, label %89, label %11 11: ; preds = %5 %12 = getelementptr inbounds nuw i8, ptr %0, i64 24828 @@ -84,16 +84,15 @@ define hidden zeroext i8 @av1_get_filter_level(ptr noundef readonly captures(non %.046 = load i32, ptr %.046.in, align 4 %34 = sext i8 %.045 to i32 %35 = add nsw i32 %.046, %34 - %36 = icmp slt i32 %35, 0 - %37 = tail call i32 @llvm.umin.i32(i32 %35, i32 63) - %38 = select i1 %36, i32 0, i32 %37 - %39 = sext i32 %3 to i64 - %40 = sext i32 %2 to i64 - %41 = getelementptr inbounds [3 x [2 x i8]], ptr @seg_lvl_lf_lut, i64 0, i64 %39, i64 %40 - %42 = load i8, ptr %41, align 1 - %43 = getelementptr inbounds nuw i8, ptr %0, i64 19536 - %44 = load i8, ptr %43, align 4 - %.not.i = icmp eq i8 %44, 0 + %36 = tail call i32 @llvm.smax.i32(i32 %35, i32 0) + %37 = tail call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %36, i32 63) + %38 = sext i32 %3 to i64 + %39 = sext i32 %2 to i64 + %40 = getelementptr inbounds [3 x [2 x i8]], ptr @seg_lvl_lf_lut, i64 0, i64 %38, i64 %39 + %41 = load i8, ptr %40, align 1 + %42 = getelementptr inbounds nuw i8, ptr %0, i64 19536 + %43 = load i8, ptr %42, align 4 + %.not.i = icmp eq i8 %43, 0 br i1 %.not.i, label %segfeature_active.exit.thread, label %segfeature_active.exit segfeature_active.exit: ; preds = %33 @@ -101,7 +100,7 @@ segfeature_active.exit: ; preds = %33 %46 = zext nneg i16 %8 to i64 %47 = getelementptr inbounds nuw [8 x i32], ptr %45, i64 0, i64 %46 %48 = load i32, ptr %47, align 4 - %49 = zext nneg i8 %42 to i32 + %49 = zext nneg i8 %41 to i32 %50 = shl nuw i32 1, %49 %51 = and i32 %48, %50 %.not50 = icmp eq i32 %51, 0 @@ -109,22 +108,21 @@ segfeature_active.exit: ; preds = %33 52: ; preds = %segfeature_active.exit %53 = getelementptr inbounds nuw i8, ptr %0, i64 19540 - %54 = zext i8 %42 to i64 + %54 = zext i8 %41 to i64 %55 = getelementptr inbounds nuw [8 x [8 x i16]], ptr %53, i64 0, i64 %46, i64 %54 %56 = load i16, ptr %55, align 2 %57 = sext i16 %56 to i32 - %58 = add nsw i32 %38, %57 - %59 = icmp slt i32 %58, 0 - %60 = tail call i32 @llvm.umin.i32(i32 %58, i32 63) - %61 = select i1 %59, i32 0, i32 %60 + %58 = add nsw i32 %37, %57 + %58 = tail call i32 @llvm.smax.i32(i32 %58, i32 0) + %60 = tail call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %58, i32 63) br label %segfeature_active.exit.thread segfeature_active.exit.thread: ; preds = %33, %52, %segfeature_active.exit - %.047 = phi i32 [ %61, %52 ], [ %38, %segfeature_active.exit ], [ %38, %33 ] + %.047 = phi i32 [ %60, %51 ], [ %37, %segfeature_active.exit ], [ %37, %33 ] %62 = getelementptr inbounds nuw i8, ptr %0, i64 23588 %63 = load i8, ptr %62, align 4 %.not51 = icmp eq i8 %63, 0 - br i1 %.not51, label %90, label %64 + br i1 %.not51, label %87, label %64 64: ; preds = %segfeature_active.exit.thread %65 = lshr i32 %.047, 5 @@ -153,39 +151,38 @@ segfeature_active.exit.thread: ; preds = %33, %52, %segfeatur br label %86 86: ; preds = %74, %64 - %.pn53 = phi i32 [ %85, %74 ], [ %72, %64 ] + %.pn53 = phi i32 [ %85, %72 ], [ %72, %62 ] %.pn = shl nsw i32 %.pn53, %65 %.2 = add nsw i32 %.pn, %.047 - %87 = icmp slt i32 %.2, 0 - %88 = tail call i32 @llvm.umin.i32(i32 %.2, i32 63) - %89 = select i1 %87, i32 0, i32 %88 - br label %90 - -90: ; preds = %86, %segfeature_active.exit.thread - %.1 = phi i32 [ %89, %86 ], [ %.047, %segfeature_active.exit.thread ] - %91 = trunc nuw nsw i32 %.1 to i8 - br label %108 - -92: ; preds = %5 - %93 = getelementptr inbounds nuw i8, ptr %1, i64 3072 - %94 = sext i32 %3 to i64 - %95 = zext nneg i16 %8 to i64 - %96 = sext i32 %2 to i64 - %97 = getelementptr inbounds nuw i8, ptr %4, i64 16 - %98 = load i8, ptr %97, align 8 - %99 = sext i8 %98 to i64 - %100 = getelementptr inbounds nuw i8, ptr %4, i64 2 - %101 = load i8, ptr %100, align 2 - %102 = zext i8 %101 to i64 - %103 = getelementptr inbounds nuw [25 x i32], ptr @mode_lf_lut, i64 0, i64 %102 - %104 = load i32, ptr %103, align 4 - %105 = sext i32 %104 to i64 - %106 = getelementptr inbounds [3 x [8 x [2 x [8 x [2 x i8]]]]], ptr %93, i64 0, i64 %94, i64 %95, i64 %96, i64 %99, i64 %105 - %107 = load i8, ptr %106, align 1 - br label %108 - -108: ; preds = %92, %90 - %.0 = phi i8 [ %91, %90 ], [ %107, %92 ] + %85 = tail call i32 @llvm.smax.i32(i32 %.2, i32 0) + %88 = tail call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %85, i32 63) + br label %87 + +87: ; preds = %84, %segfeature_active.exit.thread + %.1 = phi i32 [ %86, %84 ], [ %.047, %segfeature_active.exit.thread ] + %88 = trunc nuw nsw i32 %.1 to i8 + br label %105 + +89: ; preds = %5 + %90 = getelementptr inbounds nuw i8, ptr %1, i64 3072 + %91 = sext i32 %3 to i64 + %92 = zext nneg i16 %8 to i64 + %93 = sext i32 %2 to i64 + %94 = getelementptr inbounds nuw i8, ptr %4, i64 16 + %95 = load i8, ptr %94, align 8 + %97 = sext i8 %95 to i64 + %97 = getelementptr inbounds nuw i8, ptr %4, i64 2 + %100 = load i8, ptr %97, align 2 + %99 = zext i8 %100 to i64 + %102 = getelementptr inbounds nuw [25 x i32], ptr @mode_lf_lut, i64 0, i64 %101 + %103 = load i32, ptr %102, align 4 + %104 = sext i32 %103 to i64 + %105 = getelementptr inbounds [3 x [8 x [2 x [8 x [2 x i8]]]]], ptr %90, i64 0, i64 %91, i64 %92, i64 %93, i64 %96, i64 %106 + %106 = load i8, ptr %103, align 1 + br label %105 + +105: ; preds = %89, %87 + %.0 = phi i8 [ %89, %87 ], [ %104, %90 ] ret i8 %.0 } @@ -373,7 +370,7 @@ update_sharpness.exit: ; preds = %.split.i, %.split.u br label %.preheader85 .preheader85: ; preds = %.preheader86, %117 - %indvars.iv104 = phi i64 [ 0, %.preheader86 ], [ %indvars.iv.next105, %117 ] + %indvars.iv104 = phi i64 [ 0, %.preheader86 ], [ %indvars.iv.next105, %114 ] %65 = getelementptr inbounds nuw [8 x i32], ptr %52, i64 0, i64 %indvars.iv104 br label %66 @@ -402,13 +399,12 @@ segfeature_active.exit: ; preds = %66 %79 = load i16, ptr %78, align 2 %80 = sext i16 %79 to i32 %81 = add nsw i32 %68, %80 - %82 = icmp slt i32 %81, 0 - %83 = tail call i32 @llvm.umin.i32(i32 %81, i32 63) - %84 = select i1 %82, i32 0, i32 %83 + %82 = tail call i32 @llvm.smax.i32(i32 %81, i32 0) + %83 = tail call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %82, i32 63) br label %segfeature_active.exit.thread segfeature_active.exit.thread: ; preds = %66, %76, %segfeature_active.exit - %.082 = phi i32 [ %84, %76 ], [ %68, %segfeature_active.exit ], [ %68, %66 ] + %.082 = phi i32 [ %83, %76 ], [ %68, %segfeature_active.exit ], [ %68, %66 ] %85 = load i8, ptr %51, align 4 %.not83 = icmp eq i8 %85, 0 br i1 %.not83, label %86, label %89 @@ -425,22 +421,21 @@ segfeature_active.exit.thread: ; preds = %66, %76, %segfeatur %92 = sext i8 %91 to i32 %93 = shl i32 %92, %90 %94 = add nsw i32 %93, %.082 - %95 = icmp slt i32 %94, 0 - %96 = tail call i32 @llvm.umin.i32(i32 %94, i32 63) + %94 = tail call i32 @llvm.smax.i32(i32 %94, i32 0) + %96 = tail call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %94, i32 63) %97 = trunc nuw nsw i32 %96 to i8 - %98 = select i1 %95, i8 0, i8 %97 - %99 = getelementptr inbounds [3 x [8 x [2 x [8 x [2 x i8]]]]], ptr %55, i64 0, i64 %indvars.iv108, i64 %indvars.iv104, i64 %indvars.iv101 - store i8 %98, ptr %99, align 16 + %97 = getelementptr inbounds [3 x [8 x [2 x [8 x [2 x i8]]]]], ptr %55, i64 0, i64 %indvars.iv108, i64 %indvars.iv104, i64 %indvars.iv101 + store i8 %96, ptr %97, align 16 br label %.preheader -.preheader: ; preds = %89, %116 - %indvars.iv98 = phi i64 [ 1, %89 ], [ %indvars.iv.next99, %116 ] +.preheader: ; preds = %89, %113 + %indvars.iv98 = phi i64 [ 1, %88 ], [ %indvars.iv.next99, %113 ] %100 = getelementptr inbounds nuw [8 x i8], ptr %54, i64 0, i64 %indvars.iv98 br label %101 101: ; preds = %.preheader, %101 - %102 = phi i1 [ true, %.preheader ], [ false, %101 ] - %indvars.iv = phi i64 [ 0, %.preheader ], [ 1, %101 ] + %102 = phi i1 [ true, %.preheader ], [ false, %99 ] + %indvars.iv = phi i64 [ 0, %.preheader ], [ 1, %99 ] %103 = load i8, ptr %100, align 1 %104 = sext i8 %103 to i32 %105 = getelementptr inbounds nuw [2 x i8], ptr %56, i64 0, i64 %indvars.iv @@ -449,20 +444,19 @@ segfeature_active.exit.thread: ; preds = %66, %76, %segfeatur %108 = add nsw i32 %107, %104 %109 = shl i32 %108, %90 %110 = add i32 %109, %.082 - %111 = icmp slt i32 %110, 0 - %112 = tail call i32 @llvm.umin.i32(i32 %110, i32 63) + %109 = tail call i32 @llvm.smax.i32(i32 %110, i32 0) + %112 = tail call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %109, i32 63) %113 = trunc nuw nsw i32 %112 to i8 - %114 = select i1 %111, i8 0, i8 %113 - %115 = getelementptr inbounds [3 x [8 x [2 x [8 x [2 x i8]]]]], ptr %55, i64 0, i64 %indvars.iv108, i64 %indvars.iv104, i64 %indvars.iv101, i64 %indvars.iv98, i64 %indvars.iv - store i8 %114, ptr %115, align 1 - br i1 %102, label %101, label %116, !llvm.loop !7 + %112 = getelementptr inbounds [3 x [8 x [2 x [8 x [2 x i8]]]]], ptr %55, i64 0, i64 %indvars.iv108, i64 %indvars.iv104, i64 %indvars.iv101, i64 %indvars.iv98, i64 %indvars.iv + store i8 %111, ptr %112, align 1 + br i1 %100, label %99, label %113, !llvm.loop !7 -116: ; preds = %101 +113: ; preds = %99 %indvars.iv.next99 = add nuw nsw i64 %indvars.iv98, 1 %exitcond.not = icmp eq i64 %indvars.iv.next99, 8 br i1 %exitcond.not, label %.loopexit, label %.preheader, !llvm.loop !8 -.loopexit: ; preds = %116, %86 +.loopexit: ; preds = %113, %86 br i1 %67, label %66, label %117, !llvm.loop !9 117: ; preds = %.loopexit diff --git a/bench/openusd/optimized/cfl.ll b/bench/openusd/optimized/cfl.ll index 66cd1869163..dd0bf40ad71 100644 --- a/bench/openusd/optimized/cfl.ll +++ b/bench/openusd/optimized/cfl.ll @@ -1830,10 +1830,9 @@ get_scaled_luma_q0.exit.us.us.us: ; preds = %20, %17 %26 = load i16, ptr %25, align 2 %27 = zext i16 %26 to i32 %28 = add nsw i32 %24, %27 - %29 = tail call i32 @llvm.umin.i32(i32 range(i32 -33554431, 33619967) %28, i32 4095) - %30 = icmp slt i32 %28, 0 - %31 = trunc nuw nsw i32 %29 to i16 - %.0.i.us.us.us = select i1 %30, i16 0, i16 %31 + %29 = tail call i32 @llvm.smax.i32(i32 range(i32 -33554431, 33619967) %28, i32 0) + %30 = tail call i32 @llvm.umin.i32(i32 %29, i32 4095) + %31 = trunc nuw nsw i32 %30 to i16 store i16 %.0.i.us.us.us, ptr %25, align 2 %indvars.iv.next53 = add nuw nsw i64 %indvars.iv52, 1 %exitcond56.not = icmp eq i64 %indvars.iv.next53, %wide.trip.count61 @@ -1873,16 +1872,15 @@ get_scaled_luma_q0.exit.us.us.us: ; preds = %20, %17 br label %get_scaled_luma_q0.exit.us22.us.us get_scaled_luma_q0.exit.us22.us.us: ; preds = %44, %41 - %48 = phi i32 [ %47, %44 ], [ %43, %41 ] + %48 = phi i32 [ %47, %43 ], [ %43, %40 ] %49 = getelementptr inbounds nuw i16, ptr %.01826.us.us44, i64 %indvars.iv %50 = load i16, ptr %49, align 2 %51 = zext i16 %50 to i32 %52 = add nsw i32 %48, %51 - %53 = tail call i32 @llvm.umin.i32(i32 range(i32 -33554431, 33619967) %52, i32 1023) - %54 = icmp slt i32 %52, 0 + %53 = tail call i32 @llvm.smax.i32(i32 range(i32 -33554431, 33619967) %52, i32 0) + %53 = tail call i32 @llvm.umin.i32(i32 %52, i32 1023) %55 = trunc nuw nsw i32 %53 to i16 - %.0.i.us25.us.us = select i1 %54, i16 0, i16 %55 - store i16 %.0.i.us25.us.us, ptr %49, align 2 + store i16 %.0.i.us25.us.us, ptr %48, align 2 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count61 br i1 %exitcond.not, label %._crit_edge.split.split.us.us.us, label %35, !llvm.loop !13 @@ -1921,16 +1919,15 @@ get_scaled_luma_q0.exit.us22.us.us: ; preds = %44, %41 br label %get_scaled_luma_q0.exit.us35 get_scaled_luma_q0.exit.us35: ; preds = %68, %65 - %72 = phi i32 [ %71, %68 ], [ %67, %65 ] + %72 = phi i32 [ %71, %66 ], [ %67, %63 ] %73 = getelementptr inbounds nuw i16, ptr %.01826.us, i64 %indvars.iv58 %74 = load i16, ptr %73, align 2 %75 = zext i16 %74 to i32 %76 = add nsw i32 %72, %75 - %77 = tail call i32 @llvm.umin.i32(i32 range(i32 -33554431, 33619967) %76, i32 255) - %78 = icmp slt i32 %76, 0 - %79 = trunc nuw nsw i32 %77 to i16 - %.0.i.us36 = select i1 %78, i16 0, i16 %79 - store i16 %.0.i.us36, ptr %73, align 2 + %77 = tail call i32 @llvm.smax.i32(i32 range(i32 -33554431, 33619967) %76, i32 0) + %76 = tail call i32 @llvm.umin.i32(i32 %75, i32 255) + %79 = trunc nuw nsw i32 %76 to i16 + store i16 %.0.i.us36, ptr %71, align 2 %indvars.iv.next59 = add nuw nsw i64 %indvars.iv58, 1 %exitcond62.not = icmp eq i64 %indvars.iv.next59, %wide.trip.count61 br i1 %exitcond62.not, label %._crit_edge.split.split.us37, label %59, !llvm.loop !13 diff --git a/bench/openusd/optimized/quant_common.ll b/bench/openusd/optimized/quant_common.ll index 534d18299f1..262889fef30 100644 --- a/bench/openusd/optimized/quant_common.ll +++ b/bench/openusd/optimized/quant_common.ll @@ -16,10 +16,9 @@ target triple = "x86_64-pc-linux-gnu" ; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable define hidden signext i16 @av1_dc_quant_QTX(i32 noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #0 { %4 = add nsw i32 %1, %0 - %5 = icmp slt i32 %4, 0 - %6 = tail call i32 @llvm.umin.i32(i32 %4, i32 255) - %7 = select i1 %5, i32 0, i32 %6 - switch i32 %2, label %13 [ + %5 = tail call i32 @llvm.smax.i32(i32 %4, i32 0) + %6 = tail call noundef range(i32 0, 256) i32 @llvm.umin.i32(i32 %5, i32 255) + switch i32 %2, label %12 [ i32 8, label %.sink.split i32 10, label %8 i32 12, label %9 @@ -32,8 +31,8 @@ define hidden signext i16 @av1_dc_quant_QTX(i32 noundef %0, i32 noundef %1, i32 br label %.sink.split .sink.split: ; preds = %3, %8, %9 - %dc_qlookup_12_QTX.sink = phi ptr [ @dc_qlookup_12_QTX, %9 ], [ @dc_qlookup_10_QTX, %8 ], [ @dc_qlookup_QTX, %3 ] - %10 = zext nneg i32 %7 to i64 + %dc_qlookup_12_QTX.sink = phi ptr [ @dc_qlookup_12_QTX, %8 ], [ @dc_qlookup_10_QTX, %7 ], [ @dc_qlookup_QTX, %3 ] + %10 = zext nneg i32 %6 to i64 %11 = getelementptr inbounds nuw [256 x i16], ptr %dc_qlookup_12_QTX.sink, i64 0, i64 %10 %12 = load i16, ptr %11, align 2 br label %13 @@ -46,10 +45,9 @@ define hidden signext i16 @av1_dc_quant_QTX(i32 noundef %0, i32 noundef %1, i32 ; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable define hidden signext i16 @av1_ac_quant_QTX(i32 noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #0 { %4 = add nsw i32 %1, %0 - %5 = icmp slt i32 %4, 0 - %6 = tail call i32 @llvm.umin.i32(i32 %4, i32 255) - %7 = select i1 %5, i32 0, i32 %6 - switch i32 %2, label %13 [ + %5 = tail call i32 @llvm.smax.i32(i32 %4, i32 0) + %6 = tail call noundef range(i32 0, 256) i32 @llvm.umin.i32(i32 %5, i32 255) + switch i32 %2, label %12 [ i32 8, label %.sink.split i32 10, label %8 i32 12, label %9 @@ -62,8 +60,8 @@ define hidden signext i16 @av1_ac_quant_QTX(i32 noundef %0, i32 noundef %1, i32 br label %.sink.split .sink.split: ; preds = %3, %8, %9 - %ac_qlookup_12_QTX.sink = phi ptr [ @ac_qlookup_12_QTX, %9 ], [ @ac_qlookup_10_QTX, %8 ], [ @ac_qlookup_QTX, %3 ] - %10 = zext nneg i32 %7 to i64 + %ac_qlookup_12_QTX.sink = phi ptr [ @ac_qlookup_12_QTX, %8 ], [ @ac_qlookup_10_QTX, %7 ], [ @ac_qlookup_QTX, %3 ] + %10 = zext nneg i32 %6 to i64 %11 = getelementptr inbounds nuw [256 x i16], ptr %ac_qlookup_12_QTX.sink, i64 0, i64 %10 %12 = load i16, ptr %11, align 2 br label %13 @@ -74,7 +72,7 @@ define hidden signext i16 @av1_ac_quant_QTX(i32 noundef %0, i32 noundef %1, i32 } ; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read) uwtable -define hidden i32 @av1_get_qindex(ptr noundef readonly captures(none) %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #1 { +define hidden noundef i32 @av1_get_qindex(ptr noundef readonly captures(none) %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #1 { %4 = load i8, ptr %0, align 4 %.not.i = icmp eq i8 %4, 0 br i1 %.not.i, label %segfeature_active.exit.thread, label %segfeature_active.exit @@ -94,9 +92,8 @@ segfeature_active.exit: ; preds = %3 %13 = load i16, ptr %12, align 2 %14 = sext i16 %13 to i32 %15 = add nsw i32 %2, %14 - %16 = icmp slt i32 %15, 0 - %17 = tail call i32 @llvm.umin.i32(i32 %15, i32 255) - %18 = select i1 %16, i32 0, i32 %17 + %16 = tail call i32 @llvm.smax.i32(i32 %15, i32 0) + %17 = tail call noundef range(i32 0, 256) i32 @llvm.umin.i32(i32 %16, i32 255) br label %segfeature_active.exit.thread segfeature_active.exit.thread: ; preds = %3, %segfeature_active.exit, %10 @@ -367,6 +364,9 @@ av1_get_adjusted_tx_size.exit.us.us.us: ; preds = %av1_get_adjusted_tx ; 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 i32 @llvm.smax.i32(i32, i32) #4 + attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(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 willreturn memory(argmem: read) 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 willreturn memory(read, 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" } diff --git a/bench/openusd/optimized/restoration.ll b/bench/openusd/optimized/restoration.ll index bf36d8dc3b1..7f5bdc6673c 100644 --- a/bench/openusd/optimized/restoration.ll +++ b/bench/openusd/optimized/restoration.ll @@ -837,7 +837,7 @@ av1_decode_xq.exit: ; preds = %18, %22, %27 br label %47 47: ; preds = %clip_pixel_highbd.exit.us.us.us.us.us.us.us, %.preheader.us.us.us.us - %indvars.iv100 = phi i64 [ %indvars.iv.next101, %clip_pixel_highbd.exit.us.us.us.us.us.us.us ], [ 0, %.preheader.us.us.us.us ] + %indvars.iv100 = phi i64 [ %indvars.iv.next100, %clip_pixel_highbd.exit.us.us.us.us.us.us.us ], [ 0, %.preheader.us.us.us.us ] %48 = add nuw nsw i64 %indvars.iv100, %46 %49 = getelementptr inbounds nuw i8, ptr %41, i64 %indvars.iv100 %50 = getelementptr inbounds nuw i8, ptr %43, i64 %indvars.iv100 @@ -858,32 +858,31 @@ av1_decode_xq.exit: ; preds = %18, %22, %27 %65 = shl i32 %64, 5 %66 = add i32 %65, 32768 %67 = ashr i32 %66, 16 - switch i32 %9, label %72 [ - i32 12, label %70 - i32 10, label %68 + %68 = tail call i32 @llvm.smax.i32(i32 range(i32 -32768, 32768) %67, i32 0) + switch i32 %9, label %73 [ + i32 12, label %71 + i32 10, label %69 ] 68: ; preds = %47 - %69 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %67, i32 1023) + %69 = tail call i32 @llvm.umin.i32(i32 %68, i32 1023) br label %clip_pixel_highbd.exit.us.us.us.us.us.us.us 70: ; preds = %47 - %71 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %67, i32 4095) + %71 = tail call i32 @llvm.umin.i32(i32 %68, i32 4095) br label %clip_pixel_highbd.exit.us.us.us.us.us.us.us 72: ; preds = %47 - %73 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %67, i32 255) + %73 = tail call i32 @llvm.umin.i32(i32 %68, i32 255) br label %clip_pixel_highbd.exit.us.us.us.us.us.us.us clip_pixel_highbd.exit.us.us.us.us.us.us.us: ; preds = %72, %70, %68 - %.sink.i57.us.us.us.us.us.us.us = phi i32 [ %71, %70 ], [ %69, %68 ], [ %73, %72 ] - %74 = icmp slt i32 %67, 0 + %.sink.i57.us.us.us.us.us.us.us = phi i32 [ %74, %73 ], [ %71, %71 ], [ %69, %69 ] %75 = trunc i32 %.sink.i57.us.us.us.us.us.us.us to i8 - %76 = select i1 %74, i8 0, i8 %75 - store i8 %76, ptr %49, align 1 - %indvars.iv.next101 = add nuw nsw i64 %indvars.iv100, 1 - %exitcond104.not = icmp eq i64 %indvars.iv.next101, %wide.trip.count103 - br i1 %exitcond104.not, label %._crit_edge.split.us.us.us.split.us.us.split.us.us, label %47, !llvm.loop !22 + store i8 %75, ptr %49, align 1 + %indvars.iv.next100 = add nuw nsw i64 %indvars.iv100, 1 + %exitcond103.not = icmp eq i64 %indvars.iv.next100, %wide.trip.count102 + br i1 %exitcond103.not, label %._crit_edge.split.us.us.us.split.us.us.split.us.us, label %47, !llvm.loop !22 ._crit_edge.split.us.us.us.split.us.us.split.us.us: ; preds = %clip_pixel_highbd.exit.us.us.us.us.us.us.us %indvars.iv.next106 = add nuw nsw i64 %indvars.iv105, 1 @@ -902,7 +901,7 @@ clip_pixel_highbd.exit.us.us.us.us.us.us.us: ; preds = %72, %70, %68 br label %84 84: ; preds = %clip_pixel_highbd.exit.us.us.us.us.us, %.preheader.us.us.us - %indvars.iv90 = phi i64 [ %indvars.iv.next91, %clip_pixel_highbd.exit.us.us.us.us.us ], [ 0, %.preheader.us.us.us ] + %indvars.iv90 = phi i64 [ %indvars.iv.next90, %clip_pixel_highbd.exit.us.us.us.us.us ], [ 0, %.preheader.us.us.us ] %85 = add nuw nsw i64 %indvars.iv90, %83 %86 = getelementptr inbounds nuw i8, ptr %78, i64 %indvars.iv90 %87 = getelementptr inbounds nuw i8, ptr %80, i64 %indvars.iv90 @@ -926,35 +925,34 @@ clip_pixel_highbd.exit.us.us.us.us.us.us.us: ; preds = %72, %70, %68 %105 = shl i32 %104, 5 %106 = add i32 %105, 32768 %107 = ashr i32 %106, 16 + %107 = tail call i32 @llvm.smax.i32(i32 range(i32 -32768, 32768) %106, i32 0) switch i32 %9, label %112 [ i32 12, label %110 i32 10, label %108 ] 108: ; preds = %84 - %109 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %107, i32 1023) + %109 = tail call i32 @llvm.umin.i32(i32 %107, i32 1023) br label %clip_pixel_highbd.exit.us.us.us.us.us 110: ; preds = %84 - %111 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %107, i32 4095) + %111 = tail call i32 @llvm.umin.i32(i32 %107, i32 4095) br label %clip_pixel_highbd.exit.us.us.us.us.us 112: ; preds = %84 - %113 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %107, i32 255) + %113 = tail call i32 @llvm.umin.i32(i32 %107, i32 255) br label %clip_pixel_highbd.exit.us.us.us.us.us clip_pixel_highbd.exit.us.us.us.us.us: ; preds = %112, %110, %108 - %.sink.i57.us.us.us.us.us = phi i32 [ %111, %110 ], [ %109, %108 ], [ %113, %112 ] - %114 = icmp slt i32 %107, 0 - %115 = trunc nuw nsw i32 %.sink.i57.us.us.us.us.us to i16 - %.0.i.us.us.us.us.us = select i1 %114, i16 0, i16 %115 - %116 = ptrtoint ptr %86 to i64 - %117 = shl i64 %116, 1 - %118 = inttoptr i64 %117 to ptr - store i16 %.0.i.us.us.us.us.us, ptr %118, align 2 - %indvars.iv.next91 = add nuw nsw i64 %indvars.iv90, 1 - %exitcond94.not = icmp eq i64 %indvars.iv.next91, %wide.trip.count103 - br i1 %exitcond94.not, label %._crit_edge.split.us.us.us.split.us.us.split, label %84, !llvm.loop !22 + %.sink.i57.us.us.us.us.us = phi i32 [ %113, %112 ], [ %111, %110 ], [ %109, %108 ] + %.0.i.us.us.us.us.us = trunc nuw nsw i32 %.0.in.i.us.us.us.us.us to i16 + %114 = ptrtoint ptr %85 to i64 + %115 = shl i64 %114, 1 + %116 = inttoptr i64 %115 to ptr + store i16 %.0.i.us.us.us.us.us, ptr %116, align 2 + %indvars.iv.next90 = add nuw nsw i64 %indvars.iv89, 1 + %exitcond93.not = icmp eq i64 %indvars.iv.next90, %wide.trip.count102 + br i1 %exitcond93.not, label %._crit_edge.split.us.us.us.split.us.us.split, label %83, !llvm.loop !22 ._crit_edge.split.us.us.us.split.us.us.split: ; preds = %clip_pixel_highbd.exit.us.us.us.us.us %indvars.iv.next96 = add nuw nsw i64 %indvars.iv95, 1 @@ -962,7 +960,7 @@ clip_pixel_highbd.exit.us.us.us.us.us: ; preds = %112, %110, %108 br i1 %exitcond99.not, label %._crit_edge62, label %.preheader.us.us.us, !llvm.loop !23 .preheader.us.us: ; preds = %.preheader.lr.ph.split.us.split.us, %._crit_edge.split.us.us.us.split - %indvars.iv85 = phi i64 [ %indvars.iv.next86, %._crit_edge.split.us.us.us.split ], [ 0, %.preheader.lr.ph.split.us.split.us ] + %indvars.iv85 = phi i64 [ %indvars.iv.next85, %._crit_edge.split.us.us.us.split ], [ 0, %.preheader.lr.ph.split.us.split.us ] %119 = mul nsw i64 %indvars.iv85, %38 %120 = getelementptr inbounds i8, ptr %6, i64 %119 %121 = mul nsw i64 %indvars.iv85, %39 @@ -973,8 +971,8 @@ clip_pixel_highbd.exit.us.us.us.us.us: ; preds = %112, %110, %108 %invariant.gep113 = getelementptr inbounds nuw i32, ptr %8, i64 %125 br label %126 -126: ; preds = %163, %.preheader.us.us - %indvars.iv80 = phi i64 [ %indvars.iv.next81, %163 ], [ 0, %.preheader.us.us ] +126: ; preds = %160, %.preheader.us.us + %indvars.iv80 = phi i64 [ %indvars.iv.next80, %160 ], [ 0, %.preheader.us.us ] %127 = getelementptr inbounds nuw i8, ptr %120, i64 %indvars.iv80 %128 = getelementptr inbounds nuw i8, ptr %122, i64 %indvars.iv80 br i1 %.not, label %134, label %129 @@ -992,7 +990,7 @@ clip_pixel_highbd.exit.us.us.us.us.us: ; preds = %112, %110, %108 br label %137 137: ; preds = %134, %129 - %138 = phi i16 [ %133, %129 ], [ %136, %134 ] + %138 = phi i16 [ %133, %127 ], [ %136, %132 ] %139 = zext i16 %138 to i32 %140 = shl nuw nsw i32 %139, 4 %gep114 = getelementptr inbounds nuw i32, ptr %invariant.gep113, i64 %indvars.iv80 @@ -1004,145 +1002,143 @@ clip_pixel_highbd.exit.us.us.us.us.us: ; preds = %112, %110, %108 %146 = add i32 %144, %145 %147 = add i32 %146, 32768 %148 = ashr i32 %147, 16 - switch i32 %9, label %153 [ - i32 12, label %151 - i32 10, label %149 + %147 = tail call i32 @llvm.smax.i32(i32 range(i32 -32768, 32768) %146, i32 0) + switch i32 %9, label %152 [ + i32 12, label %150 + i32 10, label %148 ] 149: ; preds = %137 - %150 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %148, i32 1023) + %150 = tail call i32 @llvm.umin.i32(i32 %147, i32 1023) br label %clip_pixel_highbd.exit.us.us.us 151: ; preds = %137 - %152 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %148, i32 4095) + %152 = tail call i32 @llvm.umin.i32(i32 %147, i32 4095) br label %clip_pixel_highbd.exit.us.us.us 153: ; preds = %137 - %154 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %148, i32 255) + %154 = tail call i32 @llvm.umin.i32(i32 %147, i32 255) br label %clip_pixel_highbd.exit.us.us.us clip_pixel_highbd.exit.us.us.us: ; preds = %153, %151, %149 - %.sink.i57.us.us.us = phi i32 [ %152, %151 ], [ %150, %149 ], [ %154, %153 ] - %155 = icmp slt i32 %148, 0 - %156 = trunc nuw nsw i32 %.sink.i57.us.us.us to i16 - %.0.i.us.us.us = select i1 %155, i16 0, i16 %156 - br i1 %.not, label %161, label %157 - -157: ; preds = %clip_pixel_highbd.exit.us.us.us - %158 = ptrtoint ptr %127 to i64 - %159 = shl i64 %158, 1 - %160 = inttoptr i64 %159 to ptr - store i16 %.0.i.us.us.us, ptr %160, align 2 - br label %163 - -161: ; preds = %clip_pixel_highbd.exit.us.us.us - %162 = trunc i16 %.0.i.us.us.us to i8 - store i8 %162, ptr %127, align 1 - br label %163 - -163: ; preds = %161, %157 - %indvars.iv.next81 = add nuw nsw i64 %indvars.iv80, 1 - %exitcond84.not = icmp eq i64 %indvars.iv.next81, %wide.trip.count103 - br i1 %exitcond84.not, label %._crit_edge.split.us.us.us.split, label %126, !llvm.loop !22 - -._crit_edge.split.us.us.us.split: ; preds = %163 - %indvars.iv.next86 = add nuw nsw i64 %indvars.iv85, 1 - %exitcond89.not = icmp eq i64 %indvars.iv.next86, %wide.trip.count108 - br i1 %exitcond89.not, label %._crit_edge62, label %.preheader.us.us, !llvm.loop !23 - -.preheader.us: ; preds = %.preheader.lr.ph.split.us, %._crit_edge.split.us68 - %indvars.iv75 = phi i64 [ %indvars.iv.next76, %._crit_edge.split.us68 ], [ 0, %.preheader.lr.ph.split.us ] - %164 = mul nsw i64 %indvars.iv75, %38 - %165 = getelementptr inbounds i8, ptr %6, i64 %164 - %166 = mul nsw i64 %indvars.iv75, %39 - %167 = getelementptr inbounds i8, ptr %0, i64 %166 - %168 = trunc i64 %indvars.iv75 to i32 - %169 = mul i32 %1, %168 - %170 = zext i32 %169 to i64 - %invariant.gep = getelementptr inbounds nuw i32, ptr %12, i64 %170 - br label %171 - -171: ; preds = %.preheader.us, %210 - %indvars.iv = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next, %210 ] - %172 = getelementptr inbounds nuw i8, ptr %165, i64 %indvars.iv - %173 = getelementptr inbounds nuw i8, ptr %167, i64 %indvars.iv - br i1 %.not, label %179, label %174 - -174: ; preds = %171 - %175 = ptrtoint ptr %173 to i64 - %176 = shl i64 %175, 1 - %177 = inttoptr i64 %176 to ptr - %178 = load i16, ptr %177, align 2 - br label %182 - -179: ; preds = %171 - %180 = load i8, ptr %173, align 1 - %181 = zext i8 %180 to i16 - br label %182 - -182: ; preds = %179, %174 - %183 = phi i16 [ %178, %174 ], [ %181, %179 ] - %184 = zext i16 %183 to i32 - %185 = shl nuw nsw i32 %184, 11 - br i1 %37, label %186, label %192 - -186: ; preds = %182 - %187 = shl nuw nsw i32 %184, 4 + %.sink.i57.us.us.us = phi i32 [ %153, %152 ], [ %151, %150 ], [ %149, %148 ] + br i1 %.not, label %158, label %154 + +154:; preds = %clip_pixel_highbd.exit.us.us.us + %.0.i.us.us.us = trunc nuw nsw i32 %.0.in.i.us.us.us to i16 + %155 = ptrtoint ptr %125 to i64 + %156 = shl i64 %155, 1 + %157 = inttoptr i64 %156 to ptr + store i16 %.0.i.us.us.us, ptr %157, align 2 + br label %160 + +158:; preds = %clip_pixel_highbd.exit.us.us.us + %159 = trunc i32 %.0.in.i.us.us.us to i8 + store i8 %159, ptr %125, align 1 + br label %160 + +160:; preds = %158, %154 + %indvars.iv.next80 = add nuw nsw i64 %indvars.iv79, 1 + %exitcond83.not = icmp eq i64 %indvars.iv.next80, %wide.trip.count102 + br i1 %exitcond83.not, label %._crit_edge.split.us.us.us.split, label %124, !llvm.loop !22 + +._crit_edge.split.us.us.us.split:; preds = %160 + %indvars.iv.next85 = add nuw nsw i64 %indvars.iv84, 1 + %exitcond88.not = icmp eq i64 %indvars.iv.next85, %wide.trip.count107 + br i1 %exitcond88.not, label %._crit_edge61, label %.preheader.us.us, !llvm.loop !23 + +.preheader.us:; preds = %.preheader.lr.ph.split.us, %._crit_edge.split.us67 + %indvars.iv74 = phi i64 [ %indvars.iv.next75, %._crit_edge.split.us67 ], [ 0, %.preheader.lr.ph.split.us ] + %161 = mul nsw i64 %indvars.iv74, %38 + %162 = getelementptr inbounds i8, ptr %6, i64 %161 + %164 = mul nsw i64 %indvars.iv74, %39 + %165 = getelementptr inbounds i8, ptr %0, i64 %164 + %165 = trunc i64 %indvars.iv74 to i32 + %166 = mul i32 %1, %165 + %167 = zext i32 %166 to i64 + %invariant.gep = getelementptr inbounds nuw i32, ptr %12, i64 %167 + br label %168 + +168:; preds = %.preheader.us, %206 + %indvars.iv = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next, %206 ] + %169 = getelementptr inbounds nuw i8, ptr %162, i64 %indvars.iv + %170 = getelementptr inbounds nuw i8, ptr %164, i64 %indvars.iv + br i1 %.not, label %176, label %171 + +171: ; preds = %168 + %172 = ptrtoint ptr %170 to i64 + %173 = shl i64 %172, 1 + %174 = inttoptr i64 %173 to ptr + %175 = load i16, ptr %174, align 2 + br label %179 + +176:; preds = %168 + %177 = load i8, ptr %170, align 1 + %178 = zext i8 %177 to i16 + br label %179 + +179:; preds = %176, %171 + %180 = phi i16 [ %175, %171 ], [ %178, %176 ] + %181 = zext i16 %180 to i32 + %182 = shl nuw nsw i32 %181, 11 + br i1 %37, label %183, label %192 + +183:; preds = %179 + %184 = shl nuw nsw i32 %181, 4 %gep = getelementptr inbounds nuw i32, ptr %invariant.gep, i64 %indvars.iv %188 = load i32, ptr %gep, align 4 - %189 = sub nsw i32 %188, %187 + %189 = sub nsw i32 %188, %184 %190 = mul nsw i32 %189, %.sink.i - %191 = add nsw i32 %190, %185 + %191 = add nsw i32 %190, %182 br label %192 -192: ; preds = %186, %182 - %.1.us64 = phi i32 [ %191, %186 ], [ %185, %182 ] +192: ; preds = %183, %179 + %.1.us64 = phi i32 [ %191, %183 ], [ %182, %179 ] %193 = shl i32 %.1.us64, 5 %194 = add i32 %193, 32768 %195 = ashr i32 %194, 16 - switch i32 %9, label %200 [ - i32 12, label %198 - i32 10, label %196 + %193 = tail call i32 @llvm.smax.i32(i32 range(i32 -32768, 32768) %192, i32 0) + switch i32 %9, label %198 [ + i32 12, label %196 + i32 10, label %194 ] 196: ; preds = %192 - %197 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %195, i32 1023) + %197 = tail call i32 @llvm.umin.i32(i32 %193, i32 1023) br label %clip_pixel_highbd.exit.us65 198: ; preds = %192 - %199 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %195, i32 4095) + %199 = tail call i32 @llvm.umin.i32(i32 %193, i32 4095) br label %clip_pixel_highbd.exit.us65 200: ; preds = %192 - %201 = tail call i32 @llvm.umin.i32(i32 range(i32 -32768, 32768) %195, i32 255) + %201 = tail call i32 @llvm.umin.i32(i32 %193, i32 255) br label %clip_pixel_highbd.exit.us65 clip_pixel_highbd.exit.us65: ; preds = %200, %198, %196 - %.sink.i57.us66 = phi i32 [ %199, %198 ], [ %197, %196 ], [ %201, %200 ] - %202 = icmp slt i32 %195, 0 - %203 = trunc nuw nsw i32 %.sink.i57.us66 to i16 - %.0.i.us67 = select i1 %202, i16 0, i16 %203 - br i1 %.not, label %208, label %204 - -204: ; preds = %clip_pixel_highbd.exit.us65 - %205 = ptrtoint ptr %172 to i64 - %206 = shl i64 %205, 1 - %207 = inttoptr i64 %206 to ptr - store i16 %.0.i.us67, ptr %207, align 2 - br label %210 - -208: ; preds = %clip_pixel_highbd.exit.us65 - %209 = trunc i16 %.0.i.us67 to i8 - store i8 %209, ptr %172, align 1 - br label %210 - -210: ; preds = %208, %204 + %.sink.i57.us66 = phi i32 [ %199, %198 ], [ %197, %196 ], [ %195, %194 ] + br i1 %.not, label %204, label %200 + +200:; preds = %clip_pixel_highbd.exit.us64 + %.0.i.us66 = trunc nuw nsw i32 %.0.in.i.us65 to i16 + %201 = ptrtoint ptr %169 to i64 + %202 = shl i64 %201, 1 + %203 = inttoptr i64 %202 to ptr + store i16 %.0.i.us66, ptr %203, align 2 + br label %206 + +204:; preds = %clip_pixel_highbd.exit.us64 + %205 = trunc i32 %.0.in.i.us65 to i8 + store i8 %205, ptr %169, align 1 + br label %206 + +206:; preds = %204, %200 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count103 - br i1 %exitcond.not, label %._crit_edge.split.us68, label %171, !llvm.loop !22 + br i1 %exitcond.not, label %._crit_edge.split.us68, label %168, !llvm.loop !22 -._crit_edge.split.us68: ; preds = %210 - %indvars.iv.next76 = add nuw nsw i64 %indvars.iv75, 1 +._crit_edge.split.us68: ; preds = %206 + %indvars.iv.next76 = add nuw nsw i64 %indvars.iv74, 1 %exitcond79.not = icmp eq i64 %indvars.iv.next76, %wide.trip.count108 br i1 %exitcond79.not, label %._crit_edge62, label %.preheader.us, !llvm.loop !23 diff --git a/bench/openusd/optimized/warped_motion.ll b/bench/openusd/optimized/warped_motion.ll index 3c250520a27..9e3546a7bb3 100644 --- a/bench/openusd/optimized/warped_motion.ll +++ b/bench/openusd/optimized/warped_motion.ll @@ -452,8 +452,8 @@ define hidden void @av1_highbd_warp_affine_c(ptr noundef readonly captures(none) br label %169 169: ; preds = %239, %.lr.ph.us.us - %indvars.iv264 = phi i64 [ %indvars.iv.next265, %239 ], [ -4, %.lr.ph.us.us ] - %.0188227.us.us = phi i32 [ %240, %239 ], [ %168, %.lr.ph.us.us ] + %indvars.iv264 = phi i64 [ %indvars.iv.next265, %237 ], [ -4, %.lr.ph.us.us ] + %.0188227.us.us = phi i32 [ %240, %237 ], [ %168, %.lr.ph.us.us ] %170 = add nsw i32 %.0188227.us.us, 512 %171 = ashr i32 %170, 10 %172 = add nsw i32 %171, 64 @@ -518,28 +518,27 @@ define hidden void @av1_highbd_warp_affine_c(ptr noundef readonly captures(none) %211 = add i32 %210, %.neg203.us.us %212 = add i32 %211, %.neg204.us.us %213 = ashr i32 %212, %39 - switch i32 %13, label %218 [ - i32 12, label %216 - i32 10, label %214 + %214 = tail call i32 @llvm.smax.i32(i32 %213, i32 0) + switch i32 %13, label %219 [ + i32 12, label %217 + i32 10, label %215 ] 214: ; preds = %206 - %215 = tail call i32 @llvm.umin.i32(i32 %213, i32 1023) + %215 = tail call i32 @llvm.umin.i32(i32 %214, i32 1023) br label %clip_pixel_highbd.exit.us.us 216: ; preds = %206 - %217 = tail call i32 @llvm.umin.i32(i32 %213, i32 4095) + %217 = tail call i32 @llvm.umin.i32(i32 %214, i32 4095) br label %clip_pixel_highbd.exit.us.us 218: ; preds = %206 - %219 = tail call i32 @llvm.umin.i32(i32 %213, i32 255) + %219 = tail call i32 @llvm.umin.i32(i32 %214, i32 255) br label %clip_pixel_highbd.exit.us.us clip_pixel_highbd.exit.us.us: ; preds = %218, %216, %214 - %.sink.i.us.us = phi i32 [ %217, %216 ], [ %215, %214 ], [ %219, %218 ] - %220 = icmp slt i32 %213, 0 - %221 = trunc nuw nsw i32 %.sink.i.us.us to i16 - %.0.i.us.us = select i1 %220, i16 0, i16 %221 + %.sink.i.us.us = phi i32 [ %219, %219 ], [ %218, %217 ], [ %216, %215 ] + %.0.i.us.us = trunc nuw nsw i32 %.0.in.i.us.us to i16 store i16 %.0.i.us.us, ptr %192, align 2 br label %239 @@ -555,6 +554,7 @@ clip_pixel_highbd.exit.us.us: ; preds = %218, %216, %214 %228 = add nsw i32 %253, %69 %229 = ashr i32 %228, %36 %230 = add i32 %76, %229 + %230 = tail call i32 @llvm.smax.i32(i32 %229, i32 0) switch i32 %13, label %235 [ i32 12, label %233 i32 10, label %231 @@ -573,12 +573,10 @@ clip_pixel_highbd.exit.us.us: ; preds = %218, %216, %214 br label %clip_pixel_highbd.exit209.us.us clip_pixel_highbd.exit209.us.us: ; preds = %235, %233, %231 - %.sink.i207.us.us = phi i32 [ %234, %233 ], [ %232, %231 ], [ %236, %235 ] - %237 = icmp slt i32 %230, 0 - %238 = trunc nuw nsw i32 %.sink.i207.us.us to i16 - %.0.i208.us.us = select i1 %237, i16 0, i16 %238 - store i16 %.0.i208.us.us, ptr %227, align 2 - br label %239 + %.sink.i207.us.us = phi i32 [ %236, %235 ], [ %234, %233 ], [ %232, %231 ] + %.0.i208.us.us = trunc nuw nsw i32 %.sink.i207.us.us to i16 + store i16 %.0.i208.us.us, ptr %226, align 2 + br label %237 239: ; preds = %clip_pixel_highbd.exit209.us.us, %222, %clip_pixel_highbd.exit.us.us %240 = add nsw i32 %.0188227.us.us, %56 @@ -587,8 +585,8 @@ clip_pixel_highbd.exit209.us.us: ; preds = %235, %233, %231 br i1 %exitcond269.not, label %._crit_edge.us.us, label %169, !llvm.loop !9 241: ; preds = %241, %169 - %indvars.iv260 = phi i64 [ %indvars.iv.next261, %241 ], [ 0, %169 ] - %.0185223.us.us = phi i32 [ %253, %241 ], [ %65, %169 ] + %indvars.iv260 = phi i64 [ %indvars.iv.next261, %239 ], [ 0, %169 ] + %.0185223.us.us = phi i32 [ %253, %239 ], [ %65, %169 ] %242 = add nsw i64 %indvars.iv260, %indvars.iv270 %243 = trunc nsw i64 %242 to i32 %244 = shl i32 %243, 3 diff --git a/bench/postgres/optimized/snprintf.ll b/bench/postgres/optimized/snprintf.ll index f6fd52411f4..ab5f1685c2f 100644 --- a/bench/postgres/optimized/snprintf.ll +++ b/bench/postgres/optimized/snprintf.ll @@ -1856,11 +1856,10 @@ define i32 @pg_strfromd(ptr noundef %0, i64 noundef %1, i32 noundef %2, double n store i32 0, ptr %13, align 8 %14 = getelementptr inbounds nuw i8, ptr %5, i64 36 store i8 0, ptr %14, align 4 - %15 = icmp slt i32 %2, 1 - %16 = tail call i32 @llvm.umin.i32(i32 %2, i32 32) - %.010 = select i1 %15, i32 1, i32 %16 - %17 = fcmp uno double %3, 0.000000e+00 - br i1 %17, label %.thread, label %18 + %15 = tail call i32 @llvm.smax.i32(i32 %2, i32 1) + %16 = tail call i32 @llvm.umin.i32(i32 %15, i32 32) + %16 = fcmp uno double %3, 0.000000e+00 + br i1 %16, label %.thread, label %18 .thread: ; preds = %4 store i32 5136718, ptr %7, align 16 @@ -1879,9 +1878,9 @@ define i32 @pg_strfromd(ptr noundef %0, i64 noundef %1, i32 noundef %2, double n br label %23 23: ; preds = %21, %20 - %.018 = phi double [ %22, %21 ], [ %3, %20 ] - %.not14 = phi i1 [ false, %21 ], [ true, %20 ] - %.1 = phi i8 [ 45, %21 ], [ 0, %20 ] + %.018 = phi double [ %22, %20 ], [ %3, %19 ] + %.not14 = phi i1 [ false, %20 ], [ true, %19 ] + %.1 = phi i8 [ 45, %20 ], [ 0, %19 ] %24 = tail call double @llvm.fabs.f64(double %.018) %25 = fcmp oeq double %24, 0x7FF0000000000000 br i1 %25, label %26, label %27 @@ -1909,7 +1908,7 @@ define i32 @pg_strfromd(ptr noundef %0, i64 noundef %1, i32 noundef %2, double n br label %46 34: ; preds = %26, %27 - %.0 = phi i32 [ 8, %26 ], [ %32, %27 ] + %.0 = phi i32 [ 8, %25 ], [ %32, %26 ] br i1 %.not14, label %39, label %35 35: ; preds = %34 @@ -1927,7 +1926,7 @@ define i32 @pg_strfromd(ptr noundef %0, i64 noundef %1, i32 noundef %2, double n br label %39 39: ; preds = %34, %.thread, %36, %37 - %.022 = phi i32 [ 3, %.thread ], [ %.0, %34 ], [ %.0, %36 ], [ %.0, %37 ] + %.022 = phi i32 [ 3, %.thread ], [ %.0, %33 ], [ %.0, %35 ], [ %.0, %36 ] call fastcc void @dostr(ptr noundef nonnull %7, i32 noundef %.022, ptr noundef %5) %.pre = load ptr, ptr %5, align 8 %.pre23 = load i8, ptr %14, align 4, !range !3 @@ -1947,7 +1946,7 @@ define i32 @pg_strfromd(ptr noundef %0, i64 noundef %1, i32 noundef %2, double n br label %47 47: ; preds = %39, %46 - %48 = phi i32 [ -1, %46 ], [ %45, %39 ] + %48 = phi i32 [ -1, %45 ], [ %45, %38 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #14 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #14 call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #14 diff --git a/bench/sdl/optimized/yuv_rgb_std.ll b/bench/sdl/optimized/yuv_rgb_std.ll index dab02b49ce2..bffef6bcedd 100644 --- a/bench/sdl/optimized/yuv_rgb_std.ll +++ b/bench/sdl/optimized/yuv_rgb_std.ll @@ -8035,24 +8035,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %77 = mul nsw i32 %76, %58 %78 = add nsw i32 %77, %72 %79 = ashr i32 %78, 6 - %80 = icmp slt i32 %79, 0 - %spec.select6.i = tail call i32 @llvm.umin.i32(i32 %79, i32 1023) + %80 = tail call i32 @llvm.smax.i32(i32 %79, i32 0) + %spec.select6.i = tail call i32 @llvm.umin.i32(i32 %80, i32 1023) %81 = shl nuw nsw i32 %spec.select6.i, 20 - %82 = select i1 %80, i32 0, i32 %81 %83 = add nsw i32 %77, %71 %84 = ashr i32 %83, 6 - %85 = icmp slt i32 %84, 0 - %spec.select6.i207 = tail call i32 @llvm.umin.i32(i32 %84, i32 1023) + %85 = tail call i32 @llvm.smax.i32(i32 %84, i32 0) + %spec.select6.i207 = tail call i32 @llvm.umin.i32(i32 %85, i32 1023) %86 = shl nuw nsw i32 %spec.select6.i207, 10 - %87 = select i1 %85, i32 0, i32 %86 + %88 = or disjoint i32 %82, %86 %88 = add nsw i32 %77, %68 %89 = ashr i32 %88, 6 - %90 = icmp slt i32 %89, 0 - %spec.select6.i210 = tail call i32 @llvm.umin.i32(i32 %89, i32 1023) - %91 = or disjoint i32 %spec.select6.i210, -1073741824 - %92 = select i1 %90, i32 -1073741824, i32 %91 - %93 = or disjoint i32 %92, %87 - %94 = or disjoint i32 %93, %82 + %91 = tail call i32 @llvm.smax.i32(i32 %89, i32 0) + %spec.select6.i210 = tail call i32 @llvm.umin.i32(i32 %91, i32 1023) + %91 = or disjoint i32 %88, %spec.select6.i210 + %94 = or disjoint i32 %93, -1073741824 store i32 %94, ptr %.0198288, align 4 %95 = getelementptr inbounds nuw i8, ptr %.0198288, i64 4 %96 = getelementptr inbounds nuw i8, ptr %.0194292, i64 2 @@ -8063,24 +8060,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %101 = mul nsw i32 %100, %58 %102 = add nsw i32 %101, %72 %103 = ashr i32 %102, 6 - %104 = icmp slt i32 %103, 0 - %spec.select6.i213 = tail call i32 @llvm.umin.i32(i32 %103, i32 1023) + %104 = tail call i32 @llvm.smax.i32(i32 %103, i32 0) + %spec.select6.i213 = tail call i32 @llvm.umin.i32(i32 %104, i32 1023) %105 = shl nuw nsw i32 %spec.select6.i213, 20 - %106 = select i1 %104, i32 0, i32 %105 %107 = add nsw i32 %101, %71 %108 = ashr i32 %107, 6 - %109 = icmp slt i32 %108, 0 - %spec.select6.i216 = tail call i32 @llvm.umin.i32(i32 %108, i32 1023) + %109 = tail call i32 @llvm.smax.i32(i32 %108, i32 0) + %spec.select6.i216 = tail call i32 @llvm.umin.i32(i32 %109, i32 1023) %110 = shl nuw nsw i32 %spec.select6.i216, 10 - %111 = select i1 %109, i32 0, i32 %110 + %112 = or disjoint i32 %106, %110 %112 = add nsw i32 %101, %68 %113 = ashr i32 %112, 6 - %114 = icmp slt i32 %113, 0 - %spec.select6.i219 = tail call i32 @llvm.umin.i32(i32 %113, i32 1023) - %115 = or disjoint i32 %spec.select6.i219, -1073741824 - %116 = select i1 %114, i32 -1073741824, i32 %115 - %117 = or disjoint i32 %116, %111 - %118 = or disjoint i32 %117, %106 + %115 = tail call i32 @llvm.smax.i32(i32 %113, i32 0) + %spec.select6.i219 = tail call i32 @llvm.umin.i32(i32 %115, i32 1023) + %115 = or disjoint i32 %112, %spec.select6.i219 + %118 = or disjoint i32 %117, -1073741824 store i32 %118, ptr %95, align 4 %119 = getelementptr inbounds nuw i8, ptr %.0198288, i64 8 %120 = load i16, ptr %.0197289, align 2 @@ -8090,24 +8084,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %124 = mul nsw i32 %123, %58 %125 = add nsw i32 %124, %72 %126 = ashr i32 %125, 6 - %127 = icmp slt i32 %126, 0 - %spec.select6.i222 = tail call i32 @llvm.umin.i32(i32 %126, i32 1023) + %127 = tail call i32 @llvm.smax.i32(i32 %126, i32 0) + %spec.select6.i222 = tail call i32 @llvm.umin.i32(i32 %127, i32 1023) %128 = shl nuw nsw i32 %spec.select6.i222, 20 - %129 = select i1 %127, i32 0, i32 %128 %130 = add nsw i32 %124, %71 %131 = ashr i32 %130, 6 - %132 = icmp slt i32 %131, 0 - %spec.select6.i225 = tail call i32 @llvm.umin.i32(i32 %131, i32 1023) + %132 = tail call i32 @llvm.smax.i32(i32 %131, i32 0) + %spec.select6.i225 = tail call i32 @llvm.umin.i32(i32 %132, i32 1023) %133 = shl nuw nsw i32 %spec.select6.i225, 10 - %134 = select i1 %132, i32 0, i32 %133 + %135 = or disjoint i32 %129, %133 %135 = add nsw i32 %124, %68 %136 = ashr i32 %135, 6 - %137 = icmp slt i32 %136, 0 - %spec.select6.i228 = tail call i32 @llvm.umin.i32(i32 %136, i32 1023) - %138 = or disjoint i32 %spec.select6.i228, -1073741824 - %139 = select i1 %137, i32 -1073741824, i32 %138 - %140 = or disjoint i32 %139, %134 - %141 = or disjoint i32 %140, %129 + %138 = tail call i32 @llvm.smax.i32(i32 %136, i32 0) + %spec.select6.i228 = tail call i32 @llvm.umin.i32(i32 %138, i32 1023) + %138 = or disjoint i32 %135, %spec.select6.i228 + %141 = or disjoint i32 %140, -1073741824 store i32 %141, ptr %.0199287, align 4 %142 = getelementptr inbounds nuw i8, ptr %.0199287, i64 4 %143 = getelementptr inbounds nuw i8, ptr %.0197289, i64 2 @@ -8118,24 +8109,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %148 = mul nsw i32 %147, %58 %149 = add nsw i32 %148, %72 %150 = ashr i32 %149, 6 - %151 = icmp slt i32 %150, 0 - %spec.select6.i231 = tail call i32 @llvm.umin.i32(i32 %150, i32 1023) + %151 = tail call i32 @llvm.smax.i32(i32 %150, i32 0) + %spec.select6.i231 = tail call i32 @llvm.umin.i32(i32 %151, i32 1023) %152 = shl nuw nsw i32 %spec.select6.i231, 20 - %153 = select i1 %151, i32 0, i32 %152 %154 = add nsw i32 %148, %71 %155 = ashr i32 %154, 6 - %156 = icmp slt i32 %155, 0 - %spec.select6.i234 = tail call i32 @llvm.umin.i32(i32 %155, i32 1023) + %156 = tail call i32 @llvm.smax.i32(i32 %155, i32 0) + %spec.select6.i234 = tail call i32 @llvm.umin.i32(i32 %156, i32 1023) %157 = shl nuw nsw i32 %spec.select6.i234, 10 - %158 = select i1 %156, i32 0, i32 %157 + %159 = or disjoint i32 %153, %157 %159 = add nsw i32 %148, %68 %160 = ashr i32 %159, 6 - %161 = icmp slt i32 %160, 0 - %spec.select6.i237 = tail call i32 @llvm.umin.i32(i32 %160, i32 1023) - %162 = or disjoint i32 %spec.select6.i237, -1073741824 - %163 = select i1 %161, i32 -1073741824, i32 %162 - %164 = or disjoint i32 %163, %158 - %165 = or disjoint i32 %164, %153 + %162 = tail call i32 @llvm.smax.i32(i32 %160, i32 0) + %spec.select6.i237 = tail call i32 @llvm.umin.i32(i32 %162, i32 1023) + %162 = or disjoint i32 %159, %spec.select6.i237 + %165 = or disjoint i32 %164, -1073741824 store i32 %165, ptr %142, align 4 %166 = getelementptr inbounds nuw i8, ptr %.0199287, i64 8 %167 = getelementptr inbounds nuw i8, ptr %.0194292, i64 4 @@ -8188,24 +8176,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %203 = mul nsw i32 %200, %202 %204 = add nsw i32 %203, %194 %205 = ashr i32 %204, 6 - %206 = icmp slt i32 %205, 0 - %spec.select6.i240 = tail call i32 @llvm.umin.i32(i32 %205, i32 1023) + %206 = tail call i32 @llvm.smax.i32(i32 %205, i32 0) + %spec.select6.i240 = tail call i32 @llvm.umin.i32(i32 %206, i32 1023) %207 = shl nuw nsw i32 %spec.select6.i240, 20 - %208 = select i1 %206, i32 0, i32 %207 %209 = add nsw i32 %203, %191 %210 = ashr i32 %209, 6 - %211 = icmp slt i32 %210, 0 - %spec.select6.i243 = tail call i32 @llvm.umin.i32(i32 %210, i32 1023) + %211 = tail call i32 @llvm.smax.i32(i32 %210, i32 0) + %spec.select6.i243 = tail call i32 @llvm.umin.i32(i32 %211, i32 1023) %212 = shl nuw nsw i32 %spec.select6.i243, 10 - %213 = select i1 %211, i32 0, i32 %212 + %214 = or disjoint i32 %208, %212 %214 = add nsw i32 %203, %184 %215 = ashr i32 %214, 6 - %216 = icmp slt i32 %215, 0 - %spec.select6.i246 = tail call i32 @llvm.umin.i32(i32 %215, i32 1023) - %217 = or disjoint i32 %spec.select6.i246, -1073741824 - %218 = select i1 %216, i32 -1073741824, i32 %217 - %219 = or disjoint i32 %218, %213 - %220 = or disjoint i32 %219, %208 + %217 = tail call i32 @llvm.smax.i32(i32 %215, i32 0) + %spec.select6.i246 = tail call i32 @llvm.umin.i32(i32 %217, i32 1023) + %217 = or disjoint i32 %214, %spec.select6.i246 + %220 = or disjoint i32 %219, -1073741824 store i32 %220, ptr %.0198.lcssa, align 4 %221 = load i16, ptr %.0197.lcssa, align 2 %222 = zext i16 %221 to i32 @@ -8214,24 +8199,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %225 = mul nsw i32 %224, %202 %226 = add nsw i32 %225, %194 %227 = ashr i32 %226, 6 - %228 = icmp slt i32 %227, 0 - %spec.select6.i249 = tail call i32 @llvm.umin.i32(i32 %227, i32 1023) + %228 = tail call i32 @llvm.smax.i32(i32 %227, i32 0) + %spec.select6.i249 = tail call i32 @llvm.umin.i32(i32 %228, i32 1023) %229 = shl nuw nsw i32 %spec.select6.i249, 20 - %230 = select i1 %228, i32 0, i32 %229 %231 = add nsw i32 %225, %191 %232 = ashr i32 %231, 6 - %233 = icmp slt i32 %232, 0 - %spec.select6.i252 = tail call i32 @llvm.umin.i32(i32 %232, i32 1023) + %233 = tail call i32 @llvm.smax.i32(i32 %232, i32 0) + %spec.select6.i252 = tail call i32 @llvm.umin.i32(i32 %233, i32 1023) %234 = shl nuw nsw i32 %spec.select6.i252, 10 - %235 = select i1 %233, i32 0, i32 %234 + %236 = or disjoint i32 %230, %234 %236 = add nsw i32 %225, %184 %237 = ashr i32 %236, 6 - %238 = icmp slt i32 %237, 0 - %spec.select6.i255 = tail call i32 @llvm.umin.i32(i32 %237, i32 1023) - %239 = or disjoint i32 %spec.select6.i255, -1073741824 - %240 = select i1 %238, i32 -1073741824, i32 %239 - %241 = or disjoint i32 %240, %235 - %242 = or disjoint i32 %241, %230 + %239 = tail call i32 @llvm.smax.i32(i32 %237, i32 0) + %spec.select6.i255 = tail call i32 @llvm.umin.i32(i32 %239, i32 1023) + %239 = or disjoint i32 %236, %spec.select6.i255 + %242 = or disjoint i32 %241, -1073741824 store i32 %242, ptr %.0199.lcssa, align 4 br label %243 @@ -8311,24 +8293,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %295 = mul nsw i32 %294, %276 %296 = add nsw i32 %295, %290 %297 = ashr i32 %296, 6 - %298 = icmp slt i32 %297, 0 - %spec.select6.i258 = tail call i32 @llvm.umin.i32(i32 %297, i32 1023) + %298 = tail call i32 @llvm.smax.i32(i32 %297, i32 0) + %spec.select6.i258 = tail call i32 @llvm.umin.i32(i32 %298, i32 1023) %299 = shl nuw nsw i32 %spec.select6.i258, 20 - %300 = select i1 %298, i32 0, i32 %299 %301 = add nsw i32 %295, %289 %302 = ashr i32 %301, 6 - %303 = icmp slt i32 %302, 0 - %spec.select6.i261 = tail call i32 @llvm.umin.i32(i32 %302, i32 1023) + %303 = tail call i32 @llvm.smax.i32(i32 %302, i32 0) + %spec.select6.i261 = tail call i32 @llvm.umin.i32(i32 %303, i32 1023) %304 = shl nuw nsw i32 %spec.select6.i261, 10 - %305 = select i1 %303, i32 0, i32 %304 + %306 = or disjoint i32 %300, %304 %306 = add nsw i32 %295, %286 %307 = ashr i32 %306, 6 - %308 = icmp slt i32 %307, 0 - %spec.select6.i264 = tail call i32 @llvm.umin.i32(i32 %307, i32 1023) - %309 = or disjoint i32 %spec.select6.i264, -1073741824 - %310 = select i1 %308, i32 -1073741824, i32 %309 - %311 = or disjoint i32 %310, %305 - %312 = or disjoint i32 %311, %300 + %309 = tail call i32 @llvm.smax.i32(i32 %307, i32 0) + %spec.select6.i264 = tail call i32 @llvm.umin.i32(i32 %309, i32 1023) + %309 = or disjoint i32 %306, %spec.select6.i264 + %312 = or disjoint i32 %311, -1073741824 store i32 %312, ptr %.0202308, align 4 %313 = getelementptr inbounds nuw i8, ptr %.0202308, i64 4 %314 = getelementptr inbounds nuw i8, ptr %.0200310, i64 2 @@ -8339,24 +8318,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %319 = mul nsw i32 %318, %276 %320 = add nsw i32 %319, %290 %321 = ashr i32 %320, 6 - %322 = icmp slt i32 %321, 0 - %spec.select6.i267 = tail call i32 @llvm.umin.i32(i32 %321, i32 1023) + %322 = tail call i32 @llvm.smax.i32(i32 %321, i32 0) + %spec.select6.i267 = tail call i32 @llvm.umin.i32(i32 %322, i32 1023) %323 = shl nuw nsw i32 %spec.select6.i267, 20 - %324 = select i1 %322, i32 0, i32 %323 %325 = add nsw i32 %319, %289 %326 = ashr i32 %325, 6 - %327 = icmp slt i32 %326, 0 - %spec.select6.i270 = tail call i32 @llvm.umin.i32(i32 %326, i32 1023) + %327 = tail call i32 @llvm.smax.i32(i32 %326, i32 0) + %spec.select6.i270 = tail call i32 @llvm.umin.i32(i32 %327, i32 1023) %328 = shl nuw nsw i32 %spec.select6.i270, 10 - %329 = select i1 %327, i32 0, i32 %328 + %330 = or disjoint i32 %324, %328 %330 = add nsw i32 %319, %286 %331 = ashr i32 %330, 6 - %332 = icmp slt i32 %331, 0 - %spec.select6.i273 = tail call i32 @llvm.umin.i32(i32 %331, i32 1023) - %333 = or disjoint i32 %spec.select6.i273, -1073741824 - %334 = select i1 %332, i32 -1073741824, i32 %333 - %335 = or disjoint i32 %334, %329 - %336 = or disjoint i32 %335, %324 + %333 = tail call i32 @llvm.smax.i32(i32 %331, i32 0) + %spec.select6.i273 = tail call i32 @llvm.umin.i32(i32 %333, i32 1023) + %333 = or disjoint i32 %330, %spec.select6.i273 + %336 = or disjoint i32 %335, -1073741824 store i32 %336, ptr %313, align 4 %337 = getelementptr inbounds nuw i8, ptr %.0202308, i64 8 %338 = getelementptr inbounds nuw i8, ptr %.0200310, i64 4 @@ -8417,24 +8393,21 @@ define hidden void @yuvp010_xbgr2101010_std(i32 noundef %0, i32 noundef %1, ptr %380 = mul nsw i32 %376, %379 %381 = add nsw i32 %380, %370 %382 = ashr i32 %381, 6 - %383 = icmp slt i32 %382, 0 - %spec.select6.i276 = tail call i32 @llvm.umin.i32(i32 %382, i32 1023) + %383 = tail call i32 @llvm.smax.i32(i32 %382, i32 0) + %spec.select6.i276 = tail call i32 @llvm.umin.i32(i32 %383, i32 1023) %384 = shl nuw nsw i32 %spec.select6.i276, 20 - %385 = select i1 %383, i32 0, i32 %384 %386 = add nsw i32 %366, %380 %387 = ashr i32 %386, 6 - %388 = icmp slt i32 %387, 0 - %spec.select6.i279 = tail call i32 @llvm.umin.i32(i32 %387, i32 1023) + %388 = tail call i32 @llvm.smax.i32(i32 %387, i32 0) + %spec.select6.i279 = tail call i32 @llvm.umin.i32(i32 %388, i32 1023) %389 = shl nuw nsw i32 %spec.select6.i279, 10 - %390 = select i1 %388, i32 0, i32 %389 + %391 = or disjoint i32 %385, %390 %391 = add nsw i32 %380, %357 %392 = ashr i32 %391, 6 - %393 = icmp slt i32 %392, 0 - %spec.select6.i282 = tail call i32 @llvm.umin.i32(i32 %392, i32 1023) - %394 = or disjoint i32 %spec.select6.i282, -1073741824 - %395 = select i1 %393, i32 -1073741824, i32 %394 - %396 = or disjoint i32 %395, %390 - %397 = or disjoint i32 %396, %385 + %394 = tail call i32 @llvm.smax.i32(i32 %392, i32 0) + %spec.select6.i282 = tail call i32 @llvm.umin.i32(i32 %394, i32 1023) + %394 = or disjoint i32 %391, %spec.select6.i282 + %397 = or disjoint i32 %396, -1073741824 store i32 %397, ptr %.0202.lcssa, align 4 br label %398 @@ -8664,6 +8637,9 @@ define hidden void @rgb24_yuv420_std(i32 noundef %0, i32 noundef %1, ptr noundef ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #1 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #1 + attributes #0 = { nofree norecurse nosync nounwind memory(argmem: readwrite) 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } diff --git a/bench/wasmi-rs/optimized/4jlq2y0wli37amf79pjx22v8j.ll b/bench/wasmi-rs/optimized/4jlq2y0wli37amf79pjx22v8j.ll index 473187f5515..00422be5a5d 100644 --- a/bench/wasmi-rs/optimized/4jlq2y0wli37amf79pjx22v8j.ll +++ b/bench/wasmi-rs/optimized/4jlq2y0wli37amf79pjx22v8j.ll @@ -2085,11 +2085,10 @@ define hidden noundef i8 @_ZN10wasmi_core4simd16narrow_i16_to_i817habf0952e05f66 ; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(none) uwtable define hidden noundef i8 @_ZN10wasmi_core4simd16narrow_u16_to_u817hafdf4f0df3015b56E(i16 noundef %0) unnamed_addr #2 personality ptr @rust_eh_personality { - %2 = icmp slt i16 %0, 0 - %3 = tail call i16 @llvm.umin.i16(i16 %0, i16 255) + %2 = tail call i16 @llvm.smax.i16(i16 %0, i16 0) + %3 = tail call i16 @llvm.umin.i16(i16 %2, i16 255) %4 = trunc nuw i16 %3 to i8 - %5 = select i1 %2, i8 0, i8 %4 - ret i8 %5 + ret i8 %4 } ; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(none) uwtable @@ -2102,11 +2101,10 @@ define hidden noundef i16 @_ZN10wasmi_core4simd17narrow_i32_to_i1617ha2a8f108bd5 ; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(none) uwtable define hidden noundef i16 @_ZN10wasmi_core4simd17narrow_u32_to_u1617hf926f3e87aa78a32E(i32 noundef %0) unnamed_addr #2 personality ptr @rust_eh_personality { - %2 = icmp slt i32 %0, 0 - %3 = tail call i32 @llvm.umin.i32(i32 %0, i32 65535) + %2 = tail call i32 @llvm.smax.i32(i32 %0, i32 0) + %3 = tail call i32 @llvm.umin.i32(i32 %2, i32 65535) %4 = trunc nuw i32 %3 to i16 - %5 = select i1 %2, i16 0, i16 %4 - ret i16 %5 + ret i16 %4 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/zed-rs/optimized/8n2fsvz9zbnw9ojg9jkj0503g.ll b/bench/zed-rs/optimized/8n2fsvz9zbnw9ojg9jkj0503g.ll index 06f124c8bb5..35879145ed8 100644 --- a/bench/zed-rs/optimized/8n2fsvz9zbnw9ojg9jkj0503g.ll +++ b/bench/zed-rs/optimized/8n2fsvz9zbnw9ojg9jkj0503g.ll @@ -4228,16 +4228,14 @@ _ZN3std2io4Read10read_exact17h69fc1beb8c4a7c5dE.exit.i: ; preds = %"_ZN63_$LT$u8 442: ; preds = %448, %440 %.sroa.01.0.i.i = phi i32 [ %381, %440 ], [ %spec.select1.i.i, %448 ] - %443 = icmp slt i32 %.sroa.01.0.i.i, 0 - %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i.i.i = call i32 @llvm.umin.i32(i32 %.sroa.01.0.i.i, i32 63) - %.sroa.0.0.in.sroa.speculated.i.i.i = select i1 %443, i32 0, i32 %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i.i.i + %443 = call i32 @llvm.smax.i32(i32 %.sroa.01.0.i.i, i32 0) + %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i.i.i = call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %443, i32 63) %444 = icmp eq i8 %.sroa.4206.0.copyload, 4 %445 = select i1 %444, i32 %384, i32 0 %.sroa.01.1.i.i = add i32 %.sroa.0.0.in.sroa.speculated.i.i.i, %445 - %446 = icmp slt i32 %.sroa.01.1.i.i, 0 - %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i = call i32 @llvm.umin.i32(i32 %.sroa.01.1.i.i, i32 63) - %.sroa.0.0.in.sroa.speculated.i18.i.i = select i1 %446, i32 0, i32 %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i - %447 = trunc nuw nsw i32 %.sroa.0.0.in.sroa.speculated.i18.i.i to i8 + %446 = call i32 @llvm.smax.i32(i32 %.sroa.01.1.i.i, i32 0) + %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i = call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %446, i32 63) + %447 = trunc nuw nsw i32 %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i to i8 br i1 %.not.i.i, label %459, label %457 448: ; preds = %440 @@ -4259,7 +4257,7 @@ _ZN3std2io4Read10read_exact17h69fc1beb8c4a7c5dE.exit.i: ; preds = %"_ZN63_$LT$u8 459: ; preds = %457, %442 %.sroa.06.0.i.i = phi i8 [ %447, %442 ], [ %spec.select16.i.i, %457 ] - %460 = icmp samesign ugt i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 39 + %460 = icmp sgt i32 %.sroa.01.1.i.i, 39 br i1 %389, label %462, label %461 461: ; preds = %459 @@ -4270,11 +4268,11 @@ _ZN3std2io4Read10read_exact17h69fc1beb8c4a7c5dE.exit.i: ; preds = %"_ZN63_$LT$u8 br label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17hc69fa467dfe411b6E.exit.i" 463: ; preds = %461 - %464 = icmp samesign ugt i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 19 + %464 = icmp sgt i32 %.sroa.01.1.i.i, 19 br i1 %464, label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17hc69fa467dfe411b6E.exit.thread.i", label %465 465: ; preds = %463 - %466 = icmp samesign ugt i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 14 + %466 = icmp sgt i32 %.sroa.01.1.i.i, 14 %spec.select.i.i = zext i1 %466 to i8 br label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17hc69fa467dfe411b6E.exit.i" @@ -4286,7 +4284,7 @@ _ZN3std2io4Read10read_exact17h69fc1beb8c4a7c5dE.exit.i: ; preds = %"_ZN63_$LT$u8 "_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17hc69fa467dfe411b6E.exit.i": ; preds = %465, %462 %.sroa.010.0.i.i = phi i8 [ %.15.i.i, %462 ], [ %spec.select.i.i, %465 ] %spec.store.select.i.i = call i8 @llvm.umax.i8(i8 %.sroa.06.0.i.i, i8 1) - %.not.i79 = icmp eq i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 0 + %.not.i79 = icmp slt i32 %.sroa.01.1.i.i, 1 br i1 %.not.i79, label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$11loop_filter17hc7041b5766b39978E.exit", label %467 467: ; preds = %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17hc69fa467dfe411b6E.exit.i", %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17hc69fa467dfe411b6E.exit.thread.i" @@ -167324,6 +167322,9 @@ declare void @llvm.experimental.noalias.scope.decl(metadata) #78 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #76 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #76 + ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.umax.i64(i64, i64) #76 diff --git a/bench/zed-rs/optimized/dw4qzuo904yf8wu71sutofhxl.ll b/bench/zed-rs/optimized/dw4qzuo904yf8wu71sutofhxl.ll index 4f0102532c0..e88afec6178 100644 --- a/bench/zed-rs/optimized/dw4qzuo904yf8wu71sutofhxl.ll +++ b/bench/zed-rs/optimized/dw4qzuo904yf8wu71sutofhxl.ll @@ -1867,16 +1867,14 @@ _ZN3std2io4Read10read_exact17h2aaf4d7d329403e5E.exit.i: ; preds = %"_ZN63_$LT$u8 441: ; preds = %447, %439 %.sroa.01.0.i.i = phi i32 [ %380, %439 ], [ %spec.select1.i.i, %447 ] - %442 = icmp slt i32 %.sroa.01.0.i.i, 0 - %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i.i.i = call i32 @llvm.umin.i32(i32 %.sroa.01.0.i.i, i32 63) - %.sroa.0.0.in.sroa.speculated.i.i.i = select i1 %442, i32 0, i32 %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i.i.i + %442 = call i32 @llvm.smax.i32(i32 %.sroa.01.0.i.i, i32 0) + %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i.i.i = call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %442, i32 63) %443 = icmp eq i8 %.sroa.4206.0.copyload, 4 %444 = select i1 %443, i32 %383, i32 0 %.sroa.01.1.i.i = add i32 %.sroa.0.0.in.sroa.speculated.i.i.i, %444 - %445 = icmp slt i32 %.sroa.01.1.i.i, 0 - %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i = call i32 @llvm.umin.i32(i32 %.sroa.01.1.i.i, i32 63) - %.sroa.0.0.in.sroa.speculated.i18.i.i = select i1 %445, i32 0, i32 %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i - %446 = trunc nuw nsw i32 %.sroa.0.0.in.sroa.speculated.i18.i.i to i8 + %445 = call i32 @llvm.smax.i32(i32 %.sroa.01.1.i.i, i32 0) + %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i = call noundef range(i32 0, 64) i32 @llvm.umin.i32(i32 %445, i32 63) + %446 = trunc nuw nsw i32 %.sroa.0.0.in.sroa.speculate.load.7.sroa.speculated.i17.i.i to i8 br i1 %.not.i.i, label %458, label %456 447: ; preds = %439 @@ -1898,7 +1896,7 @@ _ZN3std2io4Read10read_exact17h2aaf4d7d329403e5E.exit.i: ; preds = %"_ZN63_$LT$u8 458: ; preds = %456, %441 %.sroa.06.0.i.i = phi i8 [ %446, %441 ], [ %spec.select16.i.i, %456 ] - %459 = icmp samesign ugt i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 39 + %459 = icmp sgt i32 %.sroa.01.1.i.i, 39 br i1 %388, label %461, label %460 460: ; preds = %458 @@ -1909,11 +1907,11 @@ _ZN3std2io4Read10read_exact17h2aaf4d7d329403e5E.exit.i: ; preds = %"_ZN63_$LT$u8 br label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17h737856393c473b71E.exit.i" 462: ; preds = %460 - %463 = icmp samesign ugt i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 19 + %463 = icmp sgt i32 %.sroa.01.1.i.i, 19 br i1 %463, label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17h737856393c473b71E.exit.thread.i", label %464 464: ; preds = %462 - %465 = icmp samesign ugt i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 14 + %465 = icmp sgt i32 %.sroa.01.1.i.i, 14 %spec.select.i.i = zext i1 %465 to i8 br label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17h737856393c473b71E.exit.i" @@ -1925,7 +1923,7 @@ _ZN3std2io4Read10read_exact17h2aaf4d7d329403e5E.exit.i: ; preds = %"_ZN63_$LT$u8 "_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17h737856393c473b71E.exit.i": ; preds = %464, %461 %.sroa.010.0.i.i = phi i8 [ %.15.i.i, %461 ], [ %spec.select.i.i, %464 ] %spec.store.select.i.i = call i8 @llvm.umax.i8(i8 %.sroa.06.0.i.i, i8 1) - %.not.i79 = icmp eq i32 %.sroa.0.0.in.sroa.speculated.i18.i.i, 0 + %.not.i79 = icmp slt i32 %.sroa.01.1.i.i, 1 br i1 %.not.i79, label %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$11loop_filter17h60aa9f4d42204d12E.exit", label %466 466: ; preds = %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17h737856393c473b71E.exit.i", %"_ZN10image_webp3vp819Vp8Decoder$LT$R$GT$27calculate_filter_parameters17h737856393c473b71E.exit.thread.i" @@ -36033,6 +36031,9 @@ declare i64 @llvm.umax.i64(i64, i64) #42 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #42 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #42 + ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i8 @llvm.umin.i8(i8, i8) #42 @@ -36042,9 +36043,6 @@ declare i64 @llvm.usub.sat.i64(i64, i64) #42 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #42 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #42 - attributes #0 = { inlinehint nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #1 = { inlinehint mustprogress nofree norecurse nounwind nonlazybind willreturn memory(read, inaccessiblemem: none) uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #2 = { alwaysinline nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } diff --git a/scripts/setup_pre_commit_patch.sh b/scripts/setup_pre_commit_patch.sh index c5409e09ef4..55b61d3f5c7 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/142878 export COMPTIME_MODE=0 # Please rebase manually