diff --git a/bench/abc/optimized/abc.ll b/bench/abc/optimized/abc.ll index 1cc53723a01..35cec80e037 100644 --- a/bench/abc/optimized/abc.ll +++ b/bench/abc/optimized/abc.ll @@ -54288,7 +54288,7 @@ define internal range(i32 0, 2) i32 @Abc_CommandAbc9Pms(ptr noundef readonly cap %.val34 = phi ptr [ %.val34.pre, %.lr.ph.preheader ], [ %.val37, %37 ] %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %37 ] %.val3144 = phi ptr [ %.val3140, %.lr.ph.preheader ], [ %.val31, %37 ] - %.043 = phi i32 [ 0, %.lr.ph.preheader ], [ %70, %37 ] + %.043 = phi i32 [ 0, %.lr.ph.preheader ], [ %68, %37 ] %21 = getelementptr i8, ptr %.val3144, i64 8 %.val35.val = load ptr, ptr %21, align 8, !tbaa !38 %22 = getelementptr inbounds nuw i32, ptr %.val35.val, i64 %indvars.iv @@ -54331,33 +54331,31 @@ define internal range(i32 0, 2) i32 @Abc_CommandAbc9Pms(ptr noundef readonly cap %47 = sub nsw i32 %44, %46 %48 = lshr i32 %45, 29 %49 = and i32 %48, 1 - %50 = shl nsw i32 %47, 1 - %51 = or disjoint i32 %50, %49 - %52 = icmp eq i32 %51, 0 - %53 = select i1 %52, ptr @.str.3298, ptr @.str.262 - %54 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3297, ptr noundef nonnull %53) - %55 = load ptr, ptr %6, align 8, !tbaa !60 - %56 = getelementptr i8, ptr %55, i64 32 - %.val37 = load ptr, ptr %56, align 8, !tbaa !855 - %57 = ptrtoint ptr %.val37 to i64 - %58 = sub i64 %40, %57 - %59 = sdiv exact i64 %58, 12 - %60 = trunc i64 %59 to i32 + %50 = or i32 %47, %49 + %51 = icmp eq i32 %50, 0 + %52 = select i1 %51, ptr @.str.3298, ptr @.str.262 + %53 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3297, ptr noundef nonnull %52) + %54 = load ptr, ptr %6, align 8, !tbaa !60 + %55 = getelementptr i8, ptr %54, i64 32 + %.val37 = load ptr, ptr %55, align 8, !tbaa !855 + %56 = ptrtoint ptr %.val37 to i64 + %57 = sub i64 %40, %56 + %58 = sdiv exact i64 %57, 12 + %59 = trunc i64 %58 to i32 %.val3.i.i38 = load i64, ptr %25, align 4 %61 = trunc i64 %.val3.i.i38 to i32 %62 = and i32 %61, 536870911 - %63 = sub nsw i32 %60, %62 + %63 = sub nsw i32 %59, %62 %64 = lshr i32 %61, 29 %65 = and i32 %64, 1 - %66 = shl nsw i32 %63, 1 - %67 = or disjoint i32 %66, %65 - %68 = icmp ne i32 %67, 0 - %69 = zext i1 %68 to i32 - %70 = add nuw nsw i32 %.043, %69 + %65 = or i32 %63, %64 + %66 = icmp ne i32 %65, 0 + %67 = zext i1 %66 to i32 + %68 = add nuw nsw i32 %.043, %67 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %71 = getelementptr i8, ptr %55, i64 16 + %71 = getelementptr i8, ptr %54, i64 16 %.val30 = load i32, ptr %71, align 8, !tbaa !47 - %72 = getelementptr i8, ptr %55, i64 72 + %72 = getelementptr i8, ptr %54, i64 72 %.val31 = load ptr, ptr %72, align 8, !tbaa !59 %73 = getelementptr i8, ptr %.val31, i64 4 %.val31.val = load i32, ptr %73, align 4, !tbaa !42 @@ -54367,7 +54365,7 @@ define internal range(i32 0, 2) i32 @Abc_CommandAbc9Pms(ptr noundef readonly cap br i1 %76, label %.lr.ph, label %.critedge, !llvm.loop !856 .critedge: ; preds = %.lr.ph, %37, %10 - %.0.lcssa = phi i32 [ 0, %10 ], [ %70, %37 ], [ %.043, %.lr.ph ] + %.0.lcssa = phi i32 [ 0, %10 ], [ %68, %37 ], [ %.043, %.lr.ph ] %putchar = tail call i32 @putchar(i32 10) %77 = load ptr, ptr %6, align 8, !tbaa !60 %78 = getelementptr i8, ptr %77, i64 16 @@ -54388,7 +54386,7 @@ define internal range(i32 0, 2) i32 @Abc_CommandAbc9Pms(ptr noundef readonly cap br label %85 85: ; preds = %84, %.critedge, %9 - %.022 = phi i32 [ 1, %84 ], [ 1, %9 ], [ 0, %.critedge ] + %.022 = phi i32 [ 1, %82 ], [ 1, %9 ], [ 0, %.critedge ] ret i32 %.022 } diff --git a/bench/abc/optimized/bmcMulti.ll b/bench/abc/optimized/bmcMulti.ll index a7680990b8e..dd060cd17e4 100644 --- a/bench/abc/optimized/bmcMulti.ll +++ b/bench/abc/optimized/bmcMulti.ll @@ -196,7 +196,7 @@ define i32 @Gia_ManCountConst0PosGia(ptr noundef readonly captures(none) %0) loc 9: ; preds = %.lr.ph.split, %9 %indvars.iv = phi i64 [ 0, %.lr.ph.split ], [ %indvars.iv.next, %9 ] - %.015 = phi i32 [ 0, %.lr.ph.split ], [ %23, %9 ] + %.015 = phi i32 [ 0, %.lr.ph.split ], [ %22, %9 ] %10 = getelementptr inbounds nuw i32, ptr %.val12.val, i64 %indvars.iv %11 = load i32, ptr %10, align 4, !tbaa !14 %12 = sext i32 %11 to i64 @@ -207,17 +207,16 @@ define i32 @Gia_ManCountConst0PosGia(ptr noundef readonly captures(none) %0) loc %16 = sub nsw i32 %11, %15 %17 = lshr i32 %14, 29 %18 = and i32 %17, 1 - %19 = shl nsw i32 %16, 1 - %20 = or disjoint i32 %19, %18 - %21 = icmp eq i32 %20, 0 - %22 = zext i1 %21 to i32 - %23 = add nuw nsw i32 %.015, %22 + %19 = or i32 %16, %18 + %20 = icmp eq i32 %19, 0 + %21 = zext i1 %20 to i32 + %22 = add nuw nsw i32 %.015, %21 %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 %.critedge, label %9, !llvm.loop !40 .critedge: ; preds = %9, %.lr.ph, %1 - %.0.lcssa = phi i32 [ 0, %1 ], [ 0, %.lr.ph ], [ %23, %9 ] + %.0.lcssa = phi i32 [ 0, %1 ], [ 0, %.lr.ph ], [ %22, %9 ] ret i32 %.0.lcssa } diff --git a/bench/abc/optimized/cecSatG2.ll b/bench/abc/optimized/cecSatG2.ll index 2515a106002..ad12e575f21 100644 --- a/bench/abc/optimized/cecSatG2.ll +++ b/bench/abc/optimized/cecSatG2.ll @@ -9981,62 +9981,61 @@ Abc_TtIsConst0.exit: ; preds = %.lr.ph.i, %Abc_TtIs %89 = sub nsw i32 %84, %88 %90 = lshr i32 %87, 29 %91 = and i32 %90, 1 - %92 = shl nsw i32 %89, 1 - %93 = or disjoint i32 %92, %91 - %94 = icmp eq i32 %93, 0 - br i1 %94, label %149, label %.lr.ph.i91.us - -.lr.ph.i91.us: ; preds = %.lr.ph149, %148 - %indvars.iv.i92.us = phi i64 [ %indvars.iv.next.i94.us, %148 ], [ 0, %.lr.ph149 ] - %95 = getelementptr inbounds nuw i64, ptr %76, i64 %indvars.iv.i92.us - %96 = load i64, ptr %95, align 8, !tbaa !12 - %.not.i93.us = icmp eq i64 %96, 0 - br i1 %.not.i93.us, label %148, label %.lr.ph.i99.us - -.lr.ph.i99.us: ; preds = %.lr.ph.i91.us, %125 - %indvars.iv.i100.us = phi i64 [ %indvars.iv.next.i102.us, %125 ], [ 0, %.lr.ph.i91.us ] - %97 = getelementptr inbounds nuw i64, ptr %76, i64 %indvars.iv.i100.us - %98 = load i64, ptr %97, align 8, !tbaa !12 - %.not.i101.us = icmp eq i64 %98, 0 - br i1 %.not.i101.us, label %125, label %99 - -99: ; preds = %.lr.ph.i99.us - %100 = trunc nuw nsw i64 %indvars.iv.i100.us to i32 - %101 = shl nsw i32 %100, 6 - %102 = and i64 %98, 4294967295 - %103 = icmp eq i64 %102, 0 - %104 = lshr exact i64 %98, 32 - %.020.i.i.us = select i1 %103, i64 %104, i64 %98 - %.0.i.i.us = select i1 %103, i32 32, i32 0 - %105 = and i64 %.020.i.i.us, 65535 - %106 = icmp eq i64 %105, 0 - %107 = or disjoint i32 %.0.i.i.us, 16 - %108 = lshr exact i64 %.020.i.i.us, 16 - %.121.i.i.us = select i1 %106, i64 %108, i64 %.020.i.i.us - %.1.i.i.us = select i1 %106, i32 %107, i32 %.0.i.i.us - %109 = and i64 %.121.i.i.us, 255 - %110 = icmp eq i64 %109, 0 - %111 = or disjoint i32 %.1.i.i.us, 8 - %112 = lshr exact i64 %.121.i.i.us, 8 - %.222.i.i.us = select i1 %110, i64 %112, i64 %.121.i.i.us - %.2.i.i.us = select i1 %110, i32 %111, i32 %.1.i.i.us - %113 = and i64 %.222.i.i.us, 15 - %114 = icmp eq i64 %113, 0 - %115 = or disjoint i32 %.2.i.i.us, 4 - %116 = lshr exact i64 %.222.i.i.us, 4 - %.323.i.i.us = select i1 %114, i64 %116, i64 %.222.i.i.us - %.3.i.i.us = select i1 %114, i32 %115, i32 %.2.i.i.us - %117 = and i64 %.323.i.i.us, 3 - %118 = icmp eq i64 %117, 0 - %119 = add nuw nsw i32 %.3.i.i.us, 2 - %120 = lshr exact i64 %.323.i.i.us, 2 - %.424.i.i.us = select i1 %118, i64 %120, i64 %.323.i.i.us - %.4.i.i.us = select i1 %118, i32 %119, i32 %.3.i.i.us - %121 = trunc i64 %.424.i.i.us to i32 - %122 = and i32 %121, 1 - %123 = xor i32 %122, 1 - %.5.i.i.us = add i32 %.4.i.i.us, %101 - %124 = add i32 %.5.i.i.us, %123 + %92 = or i32 %89, %91 + %93 = icmp eq i32 %92, 0 + br i1 %93, label %148, label %.lr.ph.i91.us + +.lr.ph.i91.us: ; preds = %.lr.ph149, %147 + %indvars.iv.i92.us = phi i64 [ %indvars.iv.next.i94.us, %147 ], [ 0, %.lr.ph149 ] + %94 = getelementptr inbounds nuw i64, ptr %76, i64 %indvars.iv.i92.us + %95 = load i64, ptr %94, align 8, !tbaa !12 + %.not.i93.us = icmp eq i64 %95, 0 + br i1 %.not.i93.us, label %147, label %.lr.ph.i99.us + +.lr.ph.i99.us: ; preds = %.lr.ph.i91.us, %124 + %indvars.iv.i100.us = phi i64 [ %indvars.iv.next.i102.us, %124 ], [ 0, %.lr.ph.i91.us ] + %96 = getelementptr inbounds nuw i64, ptr %76, i64 %indvars.iv.i100.us + %97 = load i64, ptr %96, align 8, !tbaa !12 + %.not.i101.us = icmp eq i64 %97, 0 + br i1 %.not.i101.us, label %124, label %98 + +98: ; preds = %.lr.ph.i99.us + %99 = trunc nuw nsw i64 %indvars.iv.i100.us to i32 + %100 = shl nsw i32 %99, 6 + %101 = and i64 %97, 4294967295 + %102 = icmp eq i64 %101, 0 + %103 = lshr exact i64 %97, 32 + %.020.i.i.us = select i1 %102, i64 %103, i64 %97 + %.020.i.i.us = select i1 %102, i32 32, i32 0 + %104 = and i64 %.020.i.i.us, 65535 + %105 = icmp eq i64 %104, 0 + %106 = or disjoint i32 %.0.i.i.us, 16 + %107 = lshr exact i64 %.020.i.i.us, 16 + %.121.i.i.us = select i1 %105, i64 %107, i64 %.020.i.i.us + %.121.i.i.us = select i1 %105, i32 %106, i32 %.020.i.i.us + %108 = and i64 %.121.i.i.us, 255 + %109 = icmp eq i64 %108, 0 + %110 = or disjoint i32 %.1.i.i.us, 8 + %111 = lshr exact i64 %.121.i.i.us, 8 + %.222.i.i.us = select i1 %109, i64 %111, i64 %.121.i.i.us + %.222.i.i.us = select i1 %109, i32 %110, i32 %.121.i.i.us + %112 = and i64 %.222.i.i.us, 15 + %113 = icmp eq i64 %112, 0 + %114 = or disjoint i32 %.2.i.i.us, 4 + %115 = lshr exact i64 %.222.i.i.us, 4 + %.323.i.i.us = select i1 %113, i64 %115, i64 %.222.i.i.us + %.323.i.i.us = select i1 %113, i32 %114, i32 %.222.i.i.us + %116 = and i64 %.323.i.i.us, 3 + %117 = icmp eq i64 %116, 0 + %118 = add nuw nsw i32 %.3.i.i.us, 2 + %119 = lshr exact i64 %.323.i.i.us, 2 + %.424.i.i.us = select i1 %117, i64 %119, i64 %.323.i.i.us + %.424.i.i.us = select i1 %117, i32 %118, i32 %.323.i.i.us + %120 = trunc i64 %.424.i.i.us to i32 + %121 = and i32 %120, 1 + %122 = xor i32 %121, 1 + %.5.i.i.us = add i32 %.424.i.i.us, %100 + %.5.i.i.us = add i32 %.5.i.i.us, %122 br label %Abc_TtFindFirstBit2.exit.us 125: ; preds = %.lr.ph.i99.us @@ -10044,8 +10043,8 @@ Abc_TtIsConst0.exit: ; preds = %.lr.ph.i, %Abc_TtIs %exitcond.not.i103.us = icmp eq i64 %indvars.iv.next.i102.us, %wide.trip.count.i90 br i1 %exitcond.not.i103.us, label %Abc_TtFindFirstBit2.exit.us, label %.lr.ph.i99.us, !llvm.loop !166 -Abc_TtFindFirstBit2.exit.us: ; preds = %125, %99 - %.08.i.us = phi i32 [ %124, %99 ], [ -1, %125 ] +Abc_TtFindFirstBit2.exit.us: ; preds = %125, %98 + %.08.i.us = phi i32 [ %123, %98 ], [ -1, %124 ] %126 = load ptr, ptr %2, align 8, !tbaa !69 %127 = getelementptr i8, ptr %126, i64 16 %.val78116.us = load i32, ptr %127, align 8, !tbaa !125 @@ -10061,7 +10060,7 @@ Abc_TtFindFirstBit2.exit.us: ; preds = %125, %99 br label %151 132: ; preds = %.lr.ph.us, %132 - %indvars.iv160 = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next161, %132 ] + %indvars.iv160 = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next161, %131 ] %133 = mul nuw nsw i64 %indvars.iv160, %wide.trip.count.i90 %.059.val.us = load ptr, ptr %71, align 8, !tbaa !10 %134 = getelementptr inbounds nuw i64, ptr %.059.val.us, i64 %133 @@ -10094,8 +10093,8 @@ Abc_TtFindFirstBit2.exit.us: ; preds = %125, %99 br label %151 151: ; preds = %149, %.loopexit.us, %._crit_edge.us - %.sroa.7.1.us = phi i32 [ %.sroa.7.0121.us148, %149 ], [ %.sroa.7.0121.us148, %.loopexit.us ], [ %131, %._crit_edge.us ] - %.sroa.0.1.us = phi i32 [ %150, %149 ], [ %.sroa.0.0122.us147, %.loopexit.us ], [ %.sroa.0.0122.us147, %._crit_edge.us ] + %.sroa.7.1.us = phi i32 [ %.sroa.7.0121.us148, %148 ], [ %.sroa.7.0121.us148, %.loopexit.us ], [ %131, %._crit_edge.us ] + %.sroa.0.1.us = phi i32 [ %150, %148 ], [ %.sroa.0.0122.us147, %.loopexit.us ], [ %.sroa.0.0122.us147, %._crit_edge.us ] %fputc63.us = tail call i32 @fputc(i32 10, ptr nonnull %9) %indvars.iv.next164 = add nuw nsw i64 %indvars.iv163, 1 %152 = load ptr, ptr %2, align 8, !tbaa !69 @@ -10128,8 +10127,8 @@ Abc_TtFindFirstBit2.exit.us: ; preds = %125, %99 br i1 %.not61, label %.critedge, label %.lr.ph, !llvm.loop !220 .lr.ph: ; preds = %.lr.ph125.split, %162 - %indvars.iv = phi i64 [ %indvars.iv.next, %162 ], [ 0, %.lr.ph125.split ] - %.sroa.0.0122140 = phi i32 [ %.sroa.0.1, %162 ], [ 0, %.lr.ph125.split ] + %indvars.iv = phi i64 [ %indvars.iv.next, %161 ], [ 0, %.lr.ph125.split ] + %.sroa.0.0122140 = phi i32 [ %.sroa.0.1, %161 ], [ 0, %.lr.ph125.split ] %164 = trunc nuw nsw i64 %indvars.iv to i32 %165 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %9, ptr noundef nonnull @.str, i32 noundef %164) #31 %166 = load ptr, ptr %69, align 8, !tbaa !131 @@ -10149,21 +10148,20 @@ Abc_TtFindFirstBit2.exit.us: ; preds = %125, %99 %176 = sub nsw i32 %171, %175 %177 = lshr i32 %174, 29 %178 = and i32 %177, 1 - %179 = shl nsw i32 %176, 1 - %180 = or disjoint i32 %179, %178 - %181 = icmp eq i32 %180, 0 - br i1 %181, label %182, label %184 + %178 = or i32 %176, %177 + %179 = icmp eq i32 %178, 0 + br i1 %179, label %180, label %182 -182: ; preds = %.lr.ph - %183 = add nsw i32 %.sroa.0.0122140, 1 - br label %185 +180: ; preds = %.lr.ph + %181 = add nsw i32 %.sroa.0.0122140, 1 + br label %183 -184: ; preds = %.lr.ph +182: ; preds = %.lr.ph %fputc = tail call i32 @fputc(i32 45, ptr nonnull %9) br label %185 -185: ; preds = %184, %182 - %.sroa.0.1 = phi i32 [ %183, %182 ], [ %.sroa.0.0122140, %184 ] +185: ; preds = %182, %180 + %.sroa.0.1 = phi i32 [ %181, %180 ], [ %.sroa.0.0122140, %182 ] %fputc63 = tail call i32 @fputc(i32 10, ptr nonnull %9) %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %186 = load ptr, ptr %2, align 8, !tbaa !69 @@ -10176,9 +10174,9 @@ Abc_TtFindFirstBit2.exit.us: ; preds = %125, %99 br i1 %191, label %162, label %.critedge, !llvm.loop !220 .critedge: ; preds = %162, %185, %73, %151, %.lr.ph125.split.us, %.lr.ph125.split, %Abc_TtIsConst0.exit - %.sroa.7.0.lcssa = phi i32 [ 0, %Abc_TtIsConst0.exit ], [ 0, %.lr.ph125.split.us ], [ 0, %.lr.ph125.split ], [ %.sroa.7.1.us, %151 ], [ %.sroa.7.1.us, %73 ], [ 0, %185 ], [ 0, %162 ] - %.sroa.0.0.lcssa = phi i32 [ 0, %Abc_TtIsConst0.exit ], [ 0, %.lr.ph125.split.us ], [ 0, %.lr.ph125.split ], [ %.sroa.0.1.us, %151 ], [ %.sroa.0.1.us, %73 ], [ %.sroa.0.1, %185 ], [ %.sroa.0.1, %162 ] - %.val.lcssa = phi i32 [ %.val120, %Abc_TtIsConst0.exit ], [ %.val120, %.lr.ph125.split.us ], [ %.val120, %.lr.ph125.split ], [ %.val.us, %151 ], [ %.val.us, %73 ], [ %.val, %185 ], [ %.val, %162 ] + %.sroa.7.0.lcssa = phi i32 [ 0, %Abc_TtIsConst0.exit ], [ 0, %.lr.ph125.split.us ], [ 0, %.lr.ph125.split ], [ %.sroa.7.1.us, %150 ], [ %.sroa.7.1.us, %73 ], [ 0, %183 ], [ 0, %161 ] + %.sroa.0.0.lcssa = phi i32 [ 0, %Abc_TtIsConst0.exit ], [ 0, %.lr.ph125.split.us ], [ 0, %.lr.ph125.split ], [ %.sroa.0.1.us, %150 ], [ %.sroa.0.1.us, %73 ], [ %.sroa.0.1, %183 ], [ %.sroa.0.1, %161 ] + %.val.lcssa = phi i32 [ %.val120, %Abc_TtIsConst0.exit ], [ %.val120, %.lr.ph125.split.us ], [ %.val120, %.lr.ph125.split ], [ %.val.us, %150 ], [ %.val.us, %73 ], [ %.val, %183 ], [ %.val, %161 ] %192 = add i32 %.sroa.0.0.lcssa, %.sroa.7.0.lcssa %193 = sub i32 %.val.lcssa, %192 %194 = load ptr, ptr %0, align 8, !tbaa !68 diff --git a/bench/abc/optimized/giaCof.ll b/bench/abc/optimized/giaCof.ll index 26f42563607..0dc0e02c761 100644 --- a/bench/abc/optimized/giaCof.ll +++ b/bench/abc/optimized/giaCof.ll @@ -4358,9 +4358,9 @@ define void @Gia_ManPrintDsdMatrix(ptr noundef %0, i32 noundef %1) local_unnamed br i1 %27, label %.lr.ph52.split.us, label %._crit_edge53, !llvm.loop !113 .lr.ph52.split: ; preds = %.lr.ph52, %49 - %.151 = phi i32 [ %.2, %49 ], [ %.02557, %.lr.ph52 ] - %.not50 = phi i1 [ true, %49 ], [ false, %.lr.ph52 ] - %.13049 = phi i32 [ %51, %49 ], [ 0, %.lr.ph52 ] + %.151 = phi i32 [ %.2, %48 ], [ %.02557, %.lr.ph52 ] + %.not50 = phi i1 [ true, %48 ], [ false, %.lr.ph52 ] + %.13049 = phi i32 [ %51, %48 ], [ 0, %.lr.ph52 ] br i1 %.not50, label %30, label %28 28: ; preds = %.lr.ph52.split @@ -4390,11 +4390,10 @@ define void @Gia_ManPrintDsdMatrix(ptr noundef %0, i32 noundef %1) local_unnamed %43 = sub nsw i32 %38, %42 %44 = lshr i32 %41, 29 %45 = and i32 %44, 1 - %46 = shl nsw i32 %43, 1 - %47 = or disjoint i32 %46, %45 - %48 = icmp eq i32 %47, 0 - %. = select i1 %48, i32 46, i32 43 - br label %49 + %46 = or i32 %43, %45 + %47 = icmp eq i32 %46, 0 + %. = select i1 %47, i32 46, i32 43 + br label %48 49: ; preds = %33, %30 %.sink = phi i32 [ 32, %30 ], [ %., %33 ] @@ -4410,7 +4409,7 @@ define void @Gia_ManPrintDsdMatrix(ptr noundef %0, i32 noundef %1) local_unnamed br i1 %54, label %.lr.ph52.split, label %._crit_edge53, !llvm.loop !113 ._crit_edge53: ; preds = %49, %23, %.preheader - %.1.lcssa = phi i32 [ %.02557, %.preheader ], [ %.02557, %23 ], [ %.2, %49 ] + %.1.lcssa = phi i32 [ %.02557, %.preheader ], [ %.02557, %23 ], [ %.2, %48 ] %55 = add nuw nsw i32 %.058, 1 %putchar32 = tail call i32 @putchar(i32 10) %.val34 = load i32, ptr %6, align 8, !tbaa !98 diff --git a/bench/abc/optimized/giaEquiv.ll b/bench/abc/optimized/giaEquiv.ll index 514ccf1f58d..2b322a72dd7 100644 --- a/bench/abc/optimized/giaEquiv.ll +++ b/bench/abc/optimized/giaEquiv.ll @@ -7622,11 +7622,11 @@ Gia_ManEquivCountLitsAll.exit.thread: ; preds = %4, %Gia_ManEquivCou br label %128 45: ; preds = %.lr.ph129, %78 - %.val75144 = phi i32 [ %.val75124, %.lr.ph129 ], [ %.val75, %78 ] - %indvars.iv138 = phi i64 [ 0, %.lr.ph129 ], [ %indvars.iv.next139, %78 ] - %.1128 = phi i32 [ 0, %.lr.ph129 ], [ %.2, %78 ] - %.058127 = phi i32 [ 0, %.lr.ph129 ], [ %.159, %78 ] - %.064126 = phi i32 [ 0, %.lr.ph129 ], [ %.165, %78 ] + %.val75144 = phi i32 [ %.val75124, %.lr.ph129 ], [ %.val75, %77 ] + %indvars.iv138 = phi i64 [ 0, %.lr.ph129 ], [ %indvars.iv.next139, %77 ] + %.1128 = phi i32 [ 0, %.lr.ph129 ], [ %.2, %77 ] + %.058127 = phi i32 [ 0, %.lr.ph129 ], [ %.159, %77 ] + %.064126 = phi i32 [ 0, %.lr.ph129 ], [ %.165, %77 ] %.val80 = load ptr, ptr %7, align 8, !tbaa !49 %46 = getelementptr inbounds nuw %struct.Gia_Rpr_t_, ptr %.val80, i64 %indvars.iv138 %47 = load i32, ptr %46, align 4 @@ -7666,30 +7666,29 @@ Gia_ManEquivCountLitsAll.exit.thread: ; preds = %4, %Gia_ManEquivCou %69 = sub nsw i32 %64, %68 %70 = lshr i32 %67, 29 %71 = and i32 %70, 1 - %72 = shl nsw i32 %69, 1 - %73 = or disjoint i32 %72, %71 - %74 = icmp eq i32 %73, 0 - br i1 %74, label %75, label %78 - -75: ; preds = %56 - %76 = or i32 %47, 268435456 - store i32 %76, ptr %46, align 4 - %77 = add nsw i32 %.1128, 1 + %72 = or i32 %69, %71 + %73 = icmp eq i32 %72, 0 + br i1 %73, label %74, label %77 + +74: ; preds = %56 + %75 = or i32 %47, 268435456 + store i32 %75, ptr %46, align 4 + %76 = add nsw i32 %.1128, 1 %.val75.pre = load i32, ptr %5, align 8, !tbaa !12 br label %78 -78: ; preds = %56, %75, %50, %45 - %.val75 = phi i32 [ %.val75144, %45 ], [ %.val75144, %50 ], [ %.val75.pre, %75 ], [ %.val75144, %56 ] - %.165 = phi i32 [ %.064126, %45 ], [ %.064126, %50 ], [ %58, %75 ], [ %58, %56 ] - %.159 = phi i32 [ %.058127, %45 ], [ %51, %50 ], [ %51, %75 ], [ %51, %56 ] - %.2 = phi i32 [ %.1128, %45 ], [ %.1128, %50 ], [ %77, %75 ], [ %.1128, %56 ] +78: ; preds = %56, %74, %50, %45 + %.val75 = phi i32 [ %.val75144, %45 ], [ %.val75144, %50 ], [ %.val75.pre, %74 ], [ %.val75144, %56 ] + %.165 = phi i32 [ %.064126, %45 ], [ %.064126, %50 ], [ %58, %74 ], [ %58, %56 ] + %.159 = phi i32 [ %.058127, %45 ], [ %51, %50 ], [ %51, %74 ], [ %51, %56 ] + %.2 = phi i32 [ %.1128, %45 ], [ %.1128, %50 ], [ %76, %74 ], [ %.1128, %56 ] %indvars.iv.next139 = add nuw nsw i64 %indvars.iv138, 1 %79 = sext i32 %.val75 to i64 %80 = icmp slt i64 %indvars.iv.next139, %79 br i1 %80, label %45, label %._crit_edge, !llvm.loop !144 ._crit_edge: ; preds = %78, %.preheader121 - %.1.lcssa = phi i32 [ 0, %.preheader121 ], [ %.2, %78 ] + %.1.lcssa = phi i32 [ 0, %.preheader121 ], [ %.2, %77 ] %81 = load ptr, ptr %25, align 8, !tbaa !8 %.not.i109 = icmp eq ptr %81, null br i1 %.not.i109, label %82, label %.thread.i110 @@ -7736,10 +7735,10 @@ Gia_ManEquivCountLitsAll.exit.thread: ; preds = %4, %Gia_ManEquivCou br label %128 96: ; preds = %.lr.ph135, %123 - %.val146 = phi i32 [ %.val131, %.lr.ph135 ], [ %.val, %123 ] - %indvars.iv141 = phi i64 [ 0, %.lr.ph135 ], [ %indvars.iv.next142, %123 ] - %.4134 = phi i32 [ 0, %.lr.ph135 ], [ %.5, %123 ] - %.260133 = phi i32 [ 0, %.lr.ph135 ], [ %.361, %123 ] + %.val146 = phi i32 [ %.val131, %.lr.ph135 ], [ %.val, %121 ] + %indvars.iv141 = phi i64 [ 0, %.lr.ph135 ], [ %indvars.iv.next142, %121 ] + %.4134 = phi i32 [ 0, %.lr.ph135 ], [ %.5, %121 ] + %.260133 = phi i32 [ 0, %.lr.ph135 ], [ %.361, %121 ] %.val79 = load ptr, ptr %7, align 8, !tbaa !49 %97 = getelementptr inbounds nuw %struct.Gia_Rpr_t_, ptr %.val79, i64 %indvars.iv141 %98 = load i32, ptr %97, align 4 @@ -7770,29 +7769,28 @@ Gia_ManEquivCountLitsAll.exit.thread: ; preds = %4, %Gia_ManEquivCou %114 = sub nsw i32 %109, %113 %115 = lshr i32 %112, 29 %116 = and i32 %115, 1 - %117 = shl nsw i32 %114, 1 - %118 = or disjoint i32 %117, %116 - %119 = icmp eq i32 %118, 0 - br i1 %119, label %120, label %123 - -120: ; preds = %101 - %121 = or i32 %98, 268435456 - store i32 %121, ptr %97, align 4 - %122 = add nsw i32 %.4134, 1 + %116 = or i32 %114, %115 + %117 = icmp eq i32 %116, 0 + br i1 %117, label %118, label %121 + +118: ; preds = %100 + %119 = or i32 %97, 268435456 + store i32 %119, ptr %96, align 4 + %120 = add nsw i32 %.4134, 1 %.val.pre = load i32, ptr %5, align 8, !tbaa !12 br label %123 -123: ; preds = %101, %120, %96 - %.val = phi i32 [ %.val146, %96 ], [ %.val.pre, %120 ], [ %.val146, %101 ] - %.361 = phi i32 [ %.260133, %96 ], [ %103, %120 ], [ %103, %101 ] - %.5 = phi i32 [ %.4134, %96 ], [ %122, %120 ], [ %.4134, %101 ] +123: ; preds = %101, %118, %96 + %.val = phi i32 [ %.val146, %95 ], [ %.val.pre, %118 ], [ %.val146, %100 ] + %.361 = phi i32 [ %.260133, %95 ], [ %103, %118 ], [ %103, %100 ] + %.5 = phi i32 [ %.4134, %95 ], [ %120, %118 ], [ %.4134, %100 ] %indvars.iv.next142 = add nuw nsw i64 %indvars.iv141, 1 %124 = sext i32 %.val to i64 %125 = icmp slt i64 %indvars.iv.next142, %124 br i1 %125, label %96, label %.loopexit, !llvm.loop !145 .loopexit: ; preds = %123, %.preheader, %82 - %.3 = phi i32 [ %.1.lcssa, %82 ], [ 0, %.preheader ], [ %.5, %123 ] + %.3 = phi i32 [ %.1.lcssa, %81 ], [ 0, %.preheader ], [ %.5, %121 ] %.not73 = icmp eq i32 %3, 0 br i1 %.not73, label %127, label %126 diff --git a/bench/abseil-cpp/optimized/float_conversion.ll b/bench/abseil-cpp/optimized/float_conversion.ll index aae90f7994b..8ff0958efcc 100644 --- a/bench/abseil-cpp/optimized/float_conversion.ll +++ b/bench/abseil-cpp/optimized/float_conversion.ll @@ -773,8 +773,6 @@ _ZN4absl19str_format_internal12_GLOBAL__N_120HexFloatNeedsRoundUpINS_7uint128EEE br i1 %.not.i44.i.i, label %._crit_edge.i.i.i, label %326 326: ; preds = %_ZN4absl19str_format_internal12_GLOBAL__N_120HexFloatNeedsRoundUpINS_7uint128EEEbT_mh.exit.i.i.i, %314 - %.sroa.01.0.insert.ext.i.i.i.i.i = zext i64 %.sink59.off0 to i128 - %.sroa.01.0.insert.insert.i.i.i.i.i = or disjoint i128 %.sroa.24.0.insert.shift.i.i.i.i.i, %.sroa.01.0.insert.ext.i.i.i.i.i %327 = icmp samesign ugt i64 %301, 31 %328 = zext nneg i32 %305 to i128 %329 = shl nuw nsw i128 1, %328 @@ -783,6 +781,8 @@ _ZN4absl19str_format_internal12_GLOBAL__N_120HexFloatNeedsRoundUpINS_7uint128EEE %.sroa.2.0.extract.trunc.i16.i.i.i.i = trunc nuw nsw i128 %.sroa.2.0.extract.shift.i15.i.i.i.i to i64 %.sroa.029.0.i.i.i.i = select i1 %327, i64 0, i64 %.sroa.0.0.extract.trunc.i14.i.i.i.i %.sroa.3.0.i.i.i.i = select i1 %327, i64 0, i64 %.sroa.2.0.extract.trunc.i16.i.i.i.i + %.sroa.01.0.insert.ext.i.i.i.i.i = zext i64 %.sink59.off0 to i128 + %.sroa.01.0.insert.insert.i.i.i.i.i = or disjoint i128 %.sroa.24.0.insert.shift.i.i.i.i.i, %.sroa.01.0.insert.ext.i.i.i.i.i %.sroa.01.0.insert.ext.i.i.i20.i.i.i = zext nneg i64 %.sroa.029.0.i.i.i.i to i128 %.sroa.03.0.insert.insert.i.i.i.i.i.i = add i128 %.sroa.01.0.insert.insert.i.i.i.i.i, %.sroa.01.0.insert.ext.i.i.i20.i.i.i %.sroa.0.0.extract.trunc.i.i.i.i.i.i = trunc i128 %.sroa.03.0.insert.insert.i.i.i.i.i.i to i64 @@ -857,24 +857,19 @@ _ZN4absl19str_format_internal12_GLOBAL__N_112FormatARoundINS_7uint128EEEvbRKNS1_ br i1 %or.cond.i.i, label %348, label %354 348: ; preds = %_ZN4absl19str_format_internal12_GLOBAL__N_112FormatARoundINS_7uint128EEEvbRKNS1_11FormatStateEPhPT_Pi.exit.i.i - br i1 %282, label %349, label %350 - -349: ; preds = %348 - %.sroa.2.0.insert.ext.i.i.i.i = zext i64 %.sroa.16.4.i.i to i128 - %.sroa.2.0.insert.shift.i.i.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i.i.i, 64 - %.sroa.0.0.insert.ext.i.i.i.i = zext i64 %.sroa.082.4.i.i to i128 - %.sroa.0.0.insert.insert.i.i.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i.i.i, %.sroa.0.0.insert.ext.i.i.i.i - %.not104.i.i = icmp eq i128 %.sroa.0.0.insert.insert.i.i.i.i, 0 - br i1 %.not104.i.i, label %350, label %354 + %349 = or i64 %.sroa.082.4.i.i, %.sroa.16.4.i.i + %.not104.i.i = icmp ne i64 %349, 0 + %or.cond108.not.i.i = select i1 %282, i1 %.not104.i.i, i1 false + br i1 %or.cond108.not.i.i, label %354, label %350 -350: ; preds = %349, %348 +350: ; preds = %348 %351 = getelementptr inbounds nuw i8, ptr %1, i64 1 %352 = load i8, ptr %351, align 1, !tbaa !4 %353 = and i8 %352, 8 %.not105.i.i = icmp eq i8 %353, 0 br i1 %.not105.i.i, label %356, label %354 -354: ; preds = %350, %349, %_ZN4absl19str_format_internal12_GLOBAL__N_112FormatARoundINS_7uint128EEEvbRKNS1_11FormatStateEPhPT_Pi.exit.i.i +354: ; preds = %350, %348, %_ZN4absl19str_format_internal12_GLOBAL__N_112FormatARoundINS_7uint128EEEvbRKNS1_11FormatStateEPhPT_Pi.exit.i.i %355 = getelementptr inbounds nuw i8, ptr %4, i64 4 store i8 46, ptr %347, align 1, !tbaa !12 br label %356 diff --git a/bench/abseil-cpp/optimized/int128.ll b/bench/abseil-cpp/optimized/int128.ll index 8bb067ad652..f3fe1c94552 100644 --- a/bench/abseil-cpp/optimized/int128.ll +++ b/bench/abseil-cpp/optimized/int128.ll @@ -648,18 +648,13 @@ _ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc.exit.i: ; preds = %.noexc27._ZNKSt 47: ; preds = %20 %48 = and i32 %10, 586 - %or.cond = icmp eq i32 %48, 520 - br i1 %or.cond, label %49, label %74 + %or.cond = icmp ne i32 %48, 520 + %49 = or i64 %2, %1 + %.not = icmp eq i64 %49, 0 + %or.cond64 = select i1 %or.cond, i1 true, i1 %.not + br i1 %or.cond64, label %74, label %50 49: ; preds = %47 - %.sroa.22.0.insert.ext.i.i = zext i64 %2 to i128 - %.sroa.22.0.insert.shift.i.i = shl nuw i128 %.sroa.22.0.insert.ext.i.i, 64 - %.sroa.01.0.insert.ext.i.i = zext i64 %1 to i128 - %.sroa.01.0.insert.insert.i.i = or disjoint i128 %.sroa.22.0.insert.shift.i.i, %.sroa.01.0.insert.ext.i.i - %.not = icmp eq i128 %.sroa.01.0.insert.insert.i.i, 0 - br i1 %.not, label %74, label %50 - -50: ; preds = %49 %51 = load i64, ptr %12, align 8 %52 = getelementptr inbounds i8, ptr %0, i64 %51 %53 = getelementptr inbounds nuw i8, ptr %52, i64 225 @@ -725,7 +720,7 @@ _ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv.exit41: ; preds = %_ZNKSt9basic_ios .noexc42: ; preds = %73 unreachable -74: ; preds = %20, %49, %47 +74: ; preds = %20, %47 %75 = load i64, ptr %12, align 8 %76 = getelementptr inbounds i8, ptr %0, i64 %75 %77 = getelementptr inbounds nuw i8, ptr %76, i64 225 @@ -1123,7 +1118,7 @@ _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev.exit: ; preds = %_ZNKS %59 = sub nuw i64 %55, %56 %60 = trunc i32 %11 to i8 %trunc = and i8 %60, -80 - switch i8 %trunc, label %153 [ + switch i8 %trunc, label %151 [ i8 32, label %76 i8 16, label %96 ] @@ -1163,7 +1158,7 @@ _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev.exit52: ; preds = %_ZN cleanup br label %185 -74: ; preds = %.invoke, %_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv.exit97.invoke, %.noexc95, %167, %.noexc80, %147, %123, %.noexc66, %114, %.noexc54, %90, %131, %127 +74: ; preds = %.invoke, %_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv.exit97.invoke, %.noexc95, %167, %.noexc80, %147, %123, %.noexc66, %114, %.noexc54, %90, %131, %129 %75 = landingpad { ptr, i32 } cleanup br label %185 @@ -1300,42 +1295,35 @@ _ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv.exit68: ; preds = %_ZNKSt9basic_ios 124: ; preds = %97, %96 %125 = and i32 %11, 586 - %or.cond.not = icmp eq i32 %125, 520 - br i1 %or.cond.not, label %126, label %133 - -126: ; preds = %124 - %.sroa.22.0.insert.ext.i = zext i64 %2 to i128 - %.sroa.22.0.insert.shift.i = shl nuw i128 %.sroa.22.0.insert.ext.i, 64 - %.sroa.01.0.insert.ext.i = zext i64 %1 to i128 - %.sroa.01.0.insert.insert.i = or disjoint i128 %.sroa.22.0.insert.shift.i, %.sroa.01.0.insert.ext.i - %.not110 = icmp eq i128 %.sroa.01.0.insert.insert.i, 0 - br i1 %.not110, label %133, label %127 - -127: ; preds = %126 - %128 = load i64, ptr %51, align 8 - %129 = getelementptr inbounds i8, ptr %0, i64 %128 - %130 = invoke noundef signext i8 @_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv(ptr noundef nonnull align 8 dereferenceable(264) %129) + %or.cond.not = icmp ne i32 %125, 520 + %126 = or i64 %2, %1 + %.not110 = icmp eq i64 %126, 0 + %or.cond = select i1 %or.cond.not, i1 true, i1 %.not110 + %127 = load i64, ptr %51, align 8 + %128 = getelementptr inbounds i8, ptr %0, i64 %127 + br i1 %or.cond, label %133, label %129 + +129:; preds = %124 + %130 = invoke noundef signext i8 @_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv(ptr noundef nonnull align 8 dereferenceable(264) %128) to label %131 unwind label %74 -131: ; preds = %127 +131: ; preds = %129 %132 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEmmc(ptr noundef nonnull align 8 dereferenceable(32) %4, i64 noundef 2, i64 noundef %59, i8 noundef signext %130) to label %_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6appendEmc.exit unwind label %74 -133: ; preds = %126, %124 - %134 = load i64, ptr %51, align 8 - %135 = getelementptr inbounds i8, ptr %0, i64 %134 - %136 = getelementptr inbounds nuw i8, ptr %135, i64 225 - %137 = load i8, ptr %136, align 1, !tbaa !25, !range !33, !noundef !34 - %138 = trunc nuw i8 %137 to i1 - br i1 %138, label %._crit_edge.i76, label %139 +133: ; preds = %124 + %134 = getelementptr inbounds nuw i8, ptr %128, i64 225 + %135 = load i8, ptr %134, align 1, !tbaa !25, !range !33, !noundef !34 + %136 = trunc nuw i8 %135 to i1 + br i1 %136, label %._crit_edge.i76, label %137 ._crit_edge.i76: ; preds = %133 - %.phi.trans.insert.i77 = getelementptr inbounds nuw i8, ptr %135, i64 224 + %.phi.trans.insert.i77 = getelementptr inbounds nuw i8, ptr %128, i64 224 %.pre.i78 = load i8, ptr %.phi.trans.insert.i77, align 8, !tbaa !42 br label %_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv.exit97.invoke 139: ; preds = %133 - %140 = getelementptr inbounds nuw i8, ptr %135, i64 240 + %140 = getelementptr inbounds nuw i8, ptr %128, i64 240 %141 = load ptr, ptr %140, align 8, !tbaa !35 %.not.i.i.i71 = icmp eq ptr %141, null br i1 %.not.i.i.i71, label %.invoke, label %_ZSt13__check_facetISt5ctypeIcEERKT_PS3_.exit.i.i72 @@ -1359,14 +1347,14 @@ _ZSt13__check_facetISt5ctypeIcEERKT_PS3_.exit.i.i72: ; preds = %139 %148 = load ptr, ptr %141, align 8, !tbaa !10 %149 = getelementptr inbounds nuw i8, ptr %148, i64 48 %150 = load ptr, ptr %149, align 8 - %151 = invoke noundef signext i8 %150(ptr noundef nonnull align 8 dereferenceable(570) %141, i8 noundef signext 32) + %151 = invoke noundef signext i8 %148(ptr noundef nonnull align 8 dereferenceable(570) %141, i8 noundef signext 32) to label %_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc.exit.i74 unwind label %74 _ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc.exit.i74: ; preds = %.noexc80, %144 - %.0.i.i.i75 = phi i8 [ %146, %144 ], [ %151, %.noexc80 ] - %152 = getelementptr inbounds nuw i8, ptr %135, i64 224 + %.0.i.i.i75 = phi i8 [ %146, %142 ], [ %151, %.noexc80 ] + %152 = getelementptr inbounds nuw i8, ptr %128, i64 224 store i8 %.0.i.i.i75, ptr %152, align 8, !tbaa !42 - store i8 1, ptr %136, align 1, !tbaa !25 + store i8 1, ptr %134, align 1, !tbaa !25 br label %_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv.exit97.invoke 153: ; preds = %58 @@ -1414,11 +1402,11 @@ _ZSt13__check_facetISt5ctypeIcEERKT_PS3_.exit.i.i87: ; preds = %159 %168 = load ptr, ptr %161, align 8, !tbaa !10 %169 = getelementptr inbounds nuw i8, ptr %168, i64 48 %170 = load ptr, ptr %169, align 8 - %171 = invoke noundef signext i8 %170(ptr noundef nonnull align 8 dereferenceable(570) %161, i8 noundef signext 32) + %171 = invoke noundef signext i8 %168(ptr noundef nonnull align 8 dereferenceable(570) %161, i8 noundef signext 32) to label %_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc.exit.i89 unwind label %74 _ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc.exit.i89: ; preds = %.noexc95, %164 - %.0.i.i.i90 = phi i8 [ %166, %164 ], [ %171, %.noexc95 ] + %.0.i.i.i90 = phi i8 [ %166, %162 ], [ %171, %.noexc95 ] %172 = getelementptr inbounds nuw i8, ptr %155, i64 224 store i8 %.0.i.i.i90, ptr %172, align 8, !tbaa !42 store i8 1, ptr %156, align 1, !tbaa !25 diff --git a/bench/cmake/optimized/archive_read_support_format_iso9660.ll b/bench/cmake/optimized/archive_read_support_format_iso9660.ll index 582f687f29c..d07a01ffbb7 100644 --- a/bench/cmake/optimized/archive_read_support_format_iso9660.ll +++ b/bench/cmake/optimized/archive_read_support_format_iso9660.ll @@ -483,56 +483,59 @@ isBootRecord.exit: ; preds = %isJolietSVD.exit.th 192: ; preds = %190 %193 = getelementptr inbounds nuw i8, ptr %.02666, i64 128 - %.val.i47 = load i16, ptr %193, align 1 - %194 = icmp eq i16 %.val.i47, 0 - br i1 %194, label %.thread, label %195 - -195: ; preds = %192 - %196 = getelementptr inbounds nuw i8, ptr %.02666, i64 80 - %197 = load i32, ptr %196, align 1 - %198 = icmp slt i32 %197, 21 - br i1 %198, label %.thread, label %199 - -199: ; preds = %195 - %200 = getelementptr inbounds nuw i8, ptr %.02666, i64 881 - %201 = load i8, ptr %200, align 1, !tbaa !45 - %.not34.i = icmp eq i8 %201, 2 - br i1 %.not34.i, label %202, label %.thread - -202: ; preds = %199 - %203 = getelementptr inbounds nuw i8, ptr %.02666, i64 140 - %204 = load i32, ptr %203, align 1 - %205 = icmp sgt i32 %204, 17 - %.not35.i = icmp slt i32 %204, %197 - %or.cond40.i = and i1 %205, %.not35.i - br i1 %or.cond40.i, label %206, label %.thread - -206: ; preds = %202 - %207 = getelementptr inbounds nuw i8, ptr %.02666, i64 148 - %208 = getelementptr inbounds nuw i8, ptr %.02666, i64 151 - %209 = load i8, ptr %208, align 1, !tbaa !45 - %210 = zext i8 %209 to i32 - %211 = getelementptr inbounds nuw i8, ptr %.02666, i64 150 + %.val.i47 = load i8, ptr %193, align 1, !tbaa !45 + %194 = getelementptr i8, ptr %.02666, i64 129 + %.val42.i = load i8, ptr %194, align 1, !tbaa !45 + %195 = or i8 %.val42.i, %.val.i47 + %196 = icmp eq i8 %195, 0 + br i1 %196, label %.thread, label %197 + +197:; preds = %192 + %198 = getelementptr inbounds nuw i8, ptr %.02666, i64 80 + %199 = load i32, ptr %198, align 1 + %200 = icmp slt i32 %199, 21 + br i1 %200, label %.thread, label %201 + +201:; preds = %197 + %202 = getelementptr inbounds nuw i8, ptr %.02666, i64 881 + %203 = load i8, ptr %202, align 1, !tbaa !45 + %.not34.i = icmp eq i8 %203, 2 + br i1 %.not34.i, label %204, label %.thread + +204:; preds = %201 + %205 = getelementptr inbounds nuw i8, ptr %.02666, i64 140 + %206 = load i32, ptr %205, align 1 + %207 = icmp sgt i32 %206, 17 + %.not35.i = icmp slt i32 %206, %199 + %or.cond40.i = and i1 %207, %.not35.i + br i1 %or.cond40.i, label %208, label %.thread + +208:; preds = %204 + %209 = getelementptr inbounds nuw i8, ptr %.02666, i64 148 + %211 = getelementptr inbounds nuw i8, ptr %.02666, i64 151 %212 = load i8, ptr %211, align 1, !tbaa !45 %213 = zext i8 %212 to i32 - %214 = getelementptr inbounds nuw i8, ptr %.02666, i64 149 + %214 = getelementptr inbounds nuw i8, ptr %.02666, i64 148 %215 = load i8, ptr %214, align 1, !tbaa !45 %216 = zext i8 %215 to i32 - %217 = load i8, ptr %207, align 1, !tbaa !45 + %216 = getelementptr inbounds nuw i8, ptr %.02666, i64 149 + %217 = load i8, ptr %216, align 1, !tbaa !45 %218 = zext i8 %217 to i32 - %219 = shl nuw i32 %218, 24 - %220 = shl nuw nsw i32 %216, 16 - %221 = shl nuw nsw i32 %213, 8 - %222 = or disjoint i32 %221, %210 - %223 = or disjoint i32 %222, %220 - %224 = or disjoint i32 %223, %219 - %225 = add i32 %224, -18 - %or.cond.i48 = icmp ult i32 %225, -17 - %.not36.i = icmp slt i32 %224, %197 + %219 = load i8, ptr %209, align 1, !tbaa !45 + %220 = zext i8 %219 to i32 + %221 = shl nuw i32 %220, 24 + %222 = shl nuw nsw i32 %218, 16 + %223 = shl nuw nsw i32 %215, 8 + %224 = or disjoint i32 %223, %212 + %225 = or disjoint i32 %224, %222 + %226 = or disjoint i32 %225, %221 + %227 = add i32 %226, -18 + %or.cond.i48 = icmp ult i32 %227, -17 + %.not36.i = icmp slt i32 %226, %199 %or.cond41.i = and i1 %.not36.i, %or.cond.i48 br i1 %or.cond41.i, label %226, label %.thread -226: ; preds = %206 +226: ; preds = %208 %227 = getelementptr inbounds nuw i8, ptr %.02666, i64 882 %lhsc.i = load i8, ptr %16, align 1 %rhsc.i = load i8, ptr %227, align 1 @@ -551,7 +554,7 @@ isBootRecord.exit: ; preds = %isJolietSVD.exit.th %.not39.i = icmp eq i32 %232, 0 br i1 %.not39.i, label %.thread, label %isPVD.exit -.thread: ; preds = %isJolietSVD.exit.thread, %230, %isBootRecord.exit, %182, %185, %188, %190, %192, %195, %199, %202, %206, %226, %228 +.thread: ; preds = %isJolietSVD.exit.thread, %230, %isBootRecord.exit, %182, %185, %188, %190, %192, %197, %201, %204, %208, %228, %230 %233 = call fastcc i32 @isSVD(ptr noundef nonnull %8, ptr noundef %.02666) %.not36 = icmp eq i32 %233, 0 br i1 %.not36, label %234, label %isPVD.exit @@ -593,16 +596,16 @@ isVolumePartition.exit: ; preds = %245 %253 = zext i8 %252 to i32 %254 = getelementptr inbounds nuw i8, ptr %.02666, i64 77 %255 = load i8, ptr %254, align 1, !tbaa !45 - %256 = zext i8 %255 to i32 - %257 = load i8, ptr %247, align 1, !tbaa !45 %258 = zext i8 %257 to i32 - %259 = shl nuw i32 %258, 24 - %260 = shl nuw nsw i32 %256, 16 - %261 = shl nuw nsw i32 %253, 8 - %262 = or disjoint i32 %261, %250 - %263 = or disjoint i32 %262, %260 - %264 = or disjoint i32 %263, %259 - %.not13.i.not = icmp eq i32 %243, %264 + %259 = load i8, ptr %249, align 1, !tbaa !45 + %260 = zext i8 %259 to i32 + %261 = shl nuw i32 %260, 24 + %262 = shl nuw nsw i32 %258, 16 + %263 = shl nuw nsw i32 %255, 8 + %264 = or disjoint i32 %263, %252 + %265 = or disjoint i32 %264, %262 + %266 = or disjoint i32 %265, %261 + %.not13.i.not = icmp eq i32 %245, %266 br i1 %.not13.i.not, label %isPVD.exit, label %isVolumePartition.exit.thread isVolumePartition.exit.thread: ; preds = %241, %245, %238, %235, %234, %isVolumePartition.exit @@ -626,7 +629,7 @@ isPVD.exit: ; preds = %230, %isJolietSVD.e br label %.loopexit .loopexit: ; preds = %25, %28, %269, %isVolumePartition.exit.thread, %5, %2, %.critedge - %.027 = phi i32 [ 0, %.critedge ], [ -1, %2 ], [ -1, %5 ], [ 0, %isVolumePartition.exit.thread ], [ 48, %269 ], [ 0, %28 ], [ 0, %25 ] + %.027 = phi i32 [ 0, %.critedge ], [ -1, %2 ], [ -1, %5 ], [ 0, %isVolumePartition.exit.thread ], [ 48, %271 ], [ 0, %28 ], [ 0, %25 ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #20 ret i32 %.027 } @@ -1974,58 +1977,61 @@ define internal fastcc range(i32 0, 49) i32 @isSVD(ptr noundef readonly captures 14: ; preds = %11 %15 = getelementptr inbounds nuw i8, ptr %1, i64 128 - %.val = load i16, ptr %15, align 1 - %16 = icmp eq i16 %.val, 0 - br i1 %16, label %48, label %17 - -17: ; preds = %14 - %18 = getelementptr inbounds nuw i8, ptr %1, i64 80 - %19 = load i32, ptr %18, align 1 - %20 = icmp slt i32 %19, 21 - br i1 %20, label %48, label %21 - -21: ; preds = %17 - %22 = getelementptr inbounds nuw i8, ptr %1, i64 140 - %23 = load i32, ptr %22, align 1 - %24 = icmp sgt i32 %23, 17 - %.not30 = icmp slt i32 %23, %19 - %or.cond33 = and i1 %24, %.not30 - br i1 %or.cond33, label %25, label %48 - -25: ; preds = %21 - %26 = getelementptr inbounds nuw i8, ptr %1, i64 148 - %27 = getelementptr inbounds nuw i8, ptr %1, i64 151 - %28 = load i8, ptr %27, align 1, !tbaa !45 - %29 = zext i8 %28 to i32 - %30 = getelementptr inbounds nuw i8, ptr %1, i64 150 + %.val = load i8, ptr %15, align 1, !tbaa !45 + %16 = getelementptr i8, ptr %1, i64 129 + %.val35 = load i8, ptr %16, align 1, !tbaa !45 + %17 = or i8 %.val35, %.val + %18 = icmp eq i8 %17, 0 + br i1 %18, label %50, label %19 + +19:; preds = %14 + %20 = getelementptr inbounds nuw i8, ptr %1, i64 80 + %21 = load i32, ptr %20, align 1 + %22 = icmp slt i32 %21, 21 + br i1 %22, label %48, label %23 + +23:; preds = %19 + %24 = getelementptr inbounds nuw i8, ptr %1, i64 140 + %25 = load i32, ptr %24, align 1 + %26 = icmp sgt i32 %25, 17 + %.not30 = icmp slt i32 %25, %21 + %or.cond33 = and i1 %26, %.not30 + br i1 %or.cond33, label %27, label %48 + +27:; preds = %23 + %28 = getelementptr inbounds nuw i8, ptr %1, i64 148 + %30 = getelementptr inbounds nuw i8, ptr %1, i64 151 %31 = load i8, ptr %30, align 1, !tbaa !45 %32 = zext i8 %31 to i32 - %33 = getelementptr inbounds nuw i8, ptr %1, i64 149 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 148 %34 = load i8, ptr %33, align 1, !tbaa !45 %35 = zext i8 %34 to i32 - %36 = load i8, ptr %26, align 1, !tbaa !45 + %35 = getelementptr inbounds nuw i8, ptr %1, i64 149 + %36 = load i8, ptr %35, align 1, !tbaa !45 %37 = zext i8 %36 to i32 - %38 = shl nuw i32 %37, 24 - %39 = shl nuw nsw i32 %35, 16 - %40 = shl nuw nsw i32 %32, 8 - %41 = or disjoint i32 %40, %29 - %42 = or disjoint i32 %41, %39 - %43 = or disjoint i32 %42, %38 - %44 = add i32 %43, -18 - %or.cond = icmp ult i32 %44, -17 - %.not31 = icmp slt i32 %43, %19 + %38 = load i8, ptr %28, align 1, !tbaa !45 + %39 = zext i8 %38 to i32 + %40 = shl nuw i32 %39, 24 + %41 = shl nuw nsw i32 %37, 16 + %42 = shl nuw nsw i32 %34, 8 + %43 = or disjoint i32 %42, %31 + %44 = or disjoint i32 %43, %41 + %45 = or disjoint i32 %44, %40 + %46 = add i32 %45, -18 + %or.cond = icmp ult i32 %46, -17 + %.not31 = icmp slt i32 %45, %21 %or.cond34 = and i1 %.not31, %or.cond br i1 %or.cond34, label %45, label %48 -45: ; preds = %25 +45: ; preds = %27 %46 = getelementptr inbounds nuw i8, ptr %1, i64 156 %47 = tail call fastcc i32 @isRootDirectoryRecord(ptr noundef %46) %.not32 = icmp eq i32 %47, 0 %. = select i1 %.not32, i32 0, i32 48 br label %48 -48: ; preds = %45, %25, %21, %17, %14, %11, %9, %7, %4, %2 - %.0 = phi i32 [ 0, %2 ], [ 0, %4 ], [ 0, %7 ], [ 0, %9 ], [ 0, %11 ], [ 0, %14 ], [ 0, %17 ], [ 0, %21 ], [ 0, %25 ], [ %., %45 ] +48: ; preds = %45, %27, %23, %19, %14, %11, %9, %7, %4, %2 + %.0 = phi i32 [ 0, %2 ], [ 0, %4 ], [ 0, %7 ], [ 0, %9 ], [ 0, %11 ], [ 0, %14 ], [ 0, %19 ], [ 0, %23 ], [ 0, %27 ], [ %., %47 ] ret i32 %.0 } diff --git a/bench/cmake/optimized/archive_read_support_format_zip.ll b/bench/cmake/optimized/archive_read_support_format_zip.ll index 402851da27d..f913ac6a635 100644 --- a/bench/cmake/optimized/archive_read_support_format_zip.ll +++ b/bench/cmake/optimized/archive_read_support_format_zip.ll @@ -6472,45 +6472,51 @@ declare i64 @__archive_read_seek(ptr noundef, i64 noundef, i32 noundef) local_un ; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable define internal fastcc range(i32 0, 33) i32 @read_eocd(ptr noundef writeonly captures(none) %0, ptr noundef nonnull readonly captures(none) %1, i64 noundef range(i64 1, -9223372036854775808) %2) unnamed_addr #16 { %4 = getelementptr inbounds nuw i8, ptr %1, i64 4 - %.val25 = load i16, ptr %4, align 1 - %5 = getelementptr inbounds nuw i8, ptr %1, i64 12 - %6 = load i32, ptr %5, align 1 - %7 = getelementptr inbounds nuw i8, ptr %1, i64 16 + %.val25 = load i8, ptr %4, align 1, !tbaa !36 + %5 = getelementptr i8, ptr %1, i64 5 + %6 = load i8, ptr %5, align 1, !tbaa !36 + %7 = getelementptr inbounds nuw i8, ptr %1, i64 12 %8 = load i32, ptr %7, align 1 - %.not = icmp eq i16 %.val25, 0 - br i1 %.not, label %9, label %23 + %8 = getelementptr inbounds nuw i8, ptr %1, i64 16 + %9 = load i32, ptr %8, align 1 + %10 = or i8 %.val26, %.val25 + %.not = icmp eq i8 %10, 0 + br i1 %.not, label %11, label %27 9: ; preds = %3 %10 = getelementptr inbounds nuw i8, ptr %1, i64 6 - %.val23 = load i16, ptr %10, align 1 - %.not18 = icmp eq i16 %.val23, 0 - br i1 %.not18, label %11, label %23 - -11: ; preds = %9 - %12 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %.val21 = load i16, ptr %12, align 1 - %13 = getelementptr inbounds nuw i8, ptr %1, i64 8 - %.val = load i16, ptr %13, align 1 + %.val23 = load i8, ptr %10, align 1, !tbaa !36 + %13 = getelementptr i8, ptr %1, i64 7 + %.val24 = load i8, ptr %13, align 1, !tbaa !36 + %14 = or i8 %.val24, %.val23 + %.not18 = icmp eq i8 %14, 0 + br i1 %.not18, label %15, label %19 + +15: ; preds = %11 + %16 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %.val21 = load i16, ptr %16, align 1 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %.val = load i16, ptr %17, align 1 %.not19 = icmp eq i16 %.val21, %.val - br i1 %.not19, label %14, label %23 + br i1 %.not19, label %14, label %27 -14: ; preds = %11 - %15 = zext i32 %8 to i64 - %16 = zext i32 %6 to i64 +14: ; preds = %15 + %15 = zext i32 %9 to i64 + %16 = zext i32 %7 to i64 %17 = add nuw nsw i64 %15, %16 %18 = icmp samesign ugt i64 %17, %2 - br i1 %18, label %23, label %19 + br i1 %18, label %27, label %23 + +23: ; preds = %18 + %24 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %19, ptr %24, align 8, !tbaa !114 + %25 = sub nuw nsw i64 %2, %20 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 32 + store i64 %25, ptr %26, align 8, !tbaa !112 + br label %27 -19: ; preds = %14 - %20 = getelementptr inbounds nuw i8, ptr %0, i64 24 - store i64 %15, ptr %20, align 8, !tbaa !114 - %21 = sub nuw nsw i64 %2, %16 - %22 = getelementptr inbounds nuw i8, ptr %0, i64 32 - store i64 %21, ptr %22, align 8, !tbaa !112 - br label %23 - -23: ; preds = %14, %11, %9, %3, %19 - %.0 = phi i32 [ 32, %19 ], [ 0, %3 ], [ 0, %9 ], [ 0, %11 ], [ 0, %14 ] +19: ; preds = %14, %15, %9, %3, %23 + %.0 = phi i32 [ 32, %23 ], [ 0, %3 ], [ 0, %11 ], [ 0, %15 ], [ 0, %18 ] ret i32 %.0 } diff --git a/bench/faiss/optimized/gtest-all.ll b/bench/faiss/optimized/gtest-all.ll index 3438e995273..c78883b777c 100644 --- a/bench/faiss/optimized/gtest-all.ll +++ b/bench/faiss/optimized/gtest-all.ll @@ -30547,12 +30547,9 @@ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E.exit: ; ; Function Attrs: mustprogress uwtable define void @_ZN7testing8internal7PrintToEoPSo(i64 noundef %0, i64 noundef %1, ptr noundef %2) local_unnamed_addr #3 { %4 = alloca [40 x i8], align 16 - %.sroa.2.0.insert.ext = zext i64 %1 to i128 - %.sroa.2.0.insert.shift = shl nuw i128 %.sroa.2.0.insert.ext, 64 - %.sroa.0.0.insert.ext = zext i64 %0 to i128 - %.sroa.0.0.insert.insert = or disjoint i128 %.sroa.2.0.insert.shift, %.sroa.0.0.insert.ext - %5 = icmp eq i128 %.sroa.0.0.insert.insert, 0 - br i1 %5, label %6, label %8 + %5 = or i64 %1, %0 + %6 = icmp eq i64 %5, 0 + br i1 %6, label %7, label %8 6: ; preds = %3 %7 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull @.str.76, i64 noundef 1) @@ -30562,14 +30559,12 @@ define void @_ZN7testing8internal7PrintToEoPSo(i64 noundef %0, i64 noundef %1, p call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #59 %9 = getelementptr inbounds nuw i8, ptr %4, i64 39 store i8 0, ptr %9, align 1, !tbaa !27 - %10 = or i64 %1, %0 - %.not = icmp eq i64 %10, 0 - br i1 %.not, label %._crit_edge, label %.lr.ph + br label %.lr.ph .lr.ph: ; preds = %8, %.lr.ph - %.024 = phi ptr [ %23, %.lr.ph ], [ %9, %8 ] - %.01823 = phi i64 [ %12, %.lr.ph ], [ %1, %8 ] - %.01922 = phi i64 [ %20, %.lr.ph ], [ %0, %8 ] + %.024 = phi ptr [ %23, %.lr.ph ], [ %9, %.lr.ph.preheader ] + %.01823 = phi i64 [ %12, %.lr.ph ], [ %1, %.lr.ph.preheader ] + %.01922 = phi i64 [ %20, %.lr.ph ], [ %0, %.lr.ph.preheader ] %11 = urem i64 %.01823, 10 %12 = udiv i64 %.01823, 10 %13 = mul nuw nsw i64 %11, 6 @@ -30591,10 +30586,9 @@ define void @_ZN7testing8internal7PrintToEoPSo(i64 noundef %0, i64 noundef %1, p %26 = select i1 %24, i1 true, i1 %25 br i1 %26, label %.lr.ph, label %._crit_edge, !llvm.loop !914 -._crit_edge: ; preds = %.lr.ph, %8 - %.0.lcssa = phi ptr [ %9, %8 ], [ %23, %.lr.ph ] - %27 = call noundef i64 @strlen(ptr noundef nonnull dereferenceable(1) %.0.lcssa) #59 - %28 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %.0.lcssa, i64 noundef %27) +._crit_edge: ; preds = %.lr.ph + %26 = call noundef i64 @strlen(ptr noundef nonnull dereferenceable(1) %23) #59 + %27 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %22, i64 noundef %26) call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #59 br label %29 @@ -30618,17 +30612,14 @@ define void @_ZN7testing8internal7PrintToEnPSo(i64 noundef %0, i64 noundef %1, p %extract.t = trunc i128 %8 to i64 %extract = lshr i128 %8, 64 %extract.t8 = trunc nuw i128 %extract to i64 - %.pre11 = and i128 %8, -18446744073709551616 br label %9 9: ; preds = %6, %3 - %.sroa.2.0.insert.shift.i.pre-phi = phi i128 [ %.pre11, %6 ], [ %.sroa.26.0.insert.shift, %3 ] %.0.off0 = phi i64 [ %extract.t, %6 ], [ %0, %3 ] %.0.off64 = phi i64 [ %extract.t8, %6 ], [ %1, %3 ] - %.sroa.0.0.insert.ext.i = zext i64 %.0.off0 to i128 - %.sroa.0.0.insert.insert.i = or disjoint i128 %.sroa.2.0.insert.shift.i.pre-phi, %.sroa.0.0.insert.ext.i - %10 = icmp eq i128 %.sroa.0.0.insert.insert.i, 0 - br i1 %10, label %11, label %13 + %10 = or i64 %.0.off64, %.0.off0 + %11 = icmp eq i64 %10, 0 + br i1 %11, label %12, label %.lr.ph.preheader.i 11: ; preds = %9 %12 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull @.str.76, i64 noundef 1) @@ -30638,39 +30629,36 @@ define void @_ZN7testing8internal7PrintToEnPSo(i64 noundef %0, i64 noundef %1, p call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #59 %14 = getelementptr inbounds nuw i8, ptr %4, i64 39 store i8 0, ptr %14, align 1, !tbaa !27 - %15 = or i64 %.0.off64, %.0.off0 - %.not.i = icmp eq i64 %15, 0 - br i1 %.not.i, label %._crit_edge.i, label %.lr.ph.i - -.lr.ph.i: ; preds = %13, %.lr.ph.i - %.024.i = phi ptr [ %28, %.lr.ph.i ], [ %14, %13 ] - %.01823.i = phi i64 [ %17, %.lr.ph.i ], [ %.0.off64, %13 ] - %.01922.i = phi i64 [ %25, %.lr.ph.i ], [ %.0.off0, %13 ] - %16 = urem i64 %.01823.i, 10 - %17 = udiv i64 %.01823.i, 10 - %18 = mul nuw nsw i64 %16, 6 - %19 = urem i64 %.01922.i, 10 - %20 = add nuw nsw i64 %18, %19 + br label %.lr.ph.i + +.lr.ph.i: ; preds = %.lr.ph.i, %13 + %.024.i = phi ptr [ %27, %.lr.ph.i ], [ %14, %.lr.ph.preheader.i ] + %.01823.i = phi i64 [ %16, %.lr.ph.i ], [ %.0.off64, %.lr.ph.preheader.i ] + %.024.i = phi i64 [ %24, %.lr.ph.i ], [ %.0.off0, %.lr.ph.preheader.i ] + %15 = urem i64 %.01823.i, 10 + %16 = udiv i64 %.01823.i, 10 + %17 = mul nuw nsw i64 %15, 6 + %18 = urem i64 %.01922.i, 10 + %19 = add nuw nsw i64 %16, %18 %21 = udiv i64 %.01922.i, 10 - %22 = mul nuw i64 %16, 1844674407370955161 - %23 = add nuw i64 %22, %21 - %.lhs.trunc.i = trunc nuw nsw i64 %20 to i8 - %24 = udiv i8 %.lhs.trunc.i, 10 - %.zext.i = zext nneg i8 %24 to i64 - %25 = add i64 %23, %.zext.i - %26 = urem i8 %.lhs.trunc.i, 10 - %27 = or disjoint i8 %26, 48 - %28 = getelementptr inbounds i8, ptr %.024.i, i64 -1 - store i8 %27, ptr %28, align 1, !tbaa !27 - %29 = icmp ugt i64 %.01823.i, 9 - %30 = icmp ne i64 %25, 0 - %31 = select i1 %29, i1 true, i1 %30 - br i1 %31, label %.lr.ph.i, label %._crit_edge.i, !llvm.loop !914 - -._crit_edge.i: ; preds = %.lr.ph.i, %13 - %.0.lcssa.i = phi ptr [ %14, %13 ], [ %28, %.lr.ph.i ] - %32 = call noundef i64 @strlen(ptr noundef nonnull dereferenceable(1) %.0.lcssa.i) #59 - %33 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %.0.lcssa.i, i64 noundef %32) + %21 = mul nuw i64 %15, 1844674407370955161 + %22 = add nuw i64 %22, %20 + %.lhs.trunc.i = trunc nuw nsw i64 %19 to i8 + %23 = udiv i8 %.lhs.trunc.i, 10 + %.zext.i = zext nneg i8 %23 to i64 + %24 = add i64 %22, %.zext.i + %25 = urem i8 %.lhs.trunc.i, 10 + %26 = or disjoint i8 %25, 48 + %27 = getelementptr inbounds i8, ptr %.024.i, i64 -1 + store i8 %26, ptr %27, align 1, !tbaa !27 + %28 = icmp ugt i64 %.01823.i, 9 + %29 = icmp ne i64 %24, 0 + %30 = select i1 %28, i1 true, i1 %29 + br i1 %30, label %.lr.ph.i, label %._crit_edge.i, !llvm.loop !914 + +._crit_edge.i:; preds = %.lr.ph.i + %31 = call noundef i64 @strlen(ptr noundef nonnull dereferenceable(1) %27) #59 + %32 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %27, i64 noundef %31) call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #59 br label %_ZN7testing8internal7PrintToEoPSo.exit diff --git a/bench/fmt/optimized/unicode-test.ll b/bench/fmt/optimized/unicode-test.ll index 90eac412df5..f4a047675b2 100644 --- a/bench/fmt/optimized/unicode-test.ll +++ b/bench/fmt/optimized/unicode-test.ll @@ -11788,10 +11788,6 @@ define linkonce_odr hidden ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appende %8 = alloca i32, align 4 %9 = alloca %"class.fmt::v11::basic_memory_buffer", align 8 %10 = alloca %class.anon.42, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %8, align 4, !tbaa !206 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %9) #35 %11 = getelementptr inbounds nuw i8, ptr %9, i64 16 @@ -11813,12 +11809,16 @@ define linkonce_odr hidden ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appende ] 18: ; preds = %6 - %19 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %19 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %19, label %_ZN3fmt3v116detail12count_digitsEo.exit, label %.lr.ph.i.i .lr.ph.i.i: ; preds = %18, %31 %.017.i.i = phi i32 [ %33, %31 ], [ 1, %18 ] - %.01116.i.i = phi i128 [ %32, %31 ], [ %.sroa.053.0.insert.insert, %18 ] + %.01116.i.i = phi i128 [ %32, %31 ], [ %.sroa.0.0.insert.insert.i.i, %18 ] %20 = icmp ult i128 %.01116.i.i, 100 br i1 %20, label %21, label %23 @@ -11877,10 +11877,14 @@ _ZN3fmt3v116detail12count_digitsEo.exit: ; preds = %31, %29, %25, %21, 47: ; preds = %40, %38 %48 = phi i32 [ %46, %40 ], [ %3, %38 ] + %.sroa.2.0.insert.ext.i.i62 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i63 = shl nuw i128 %.sroa.2.0.insert.ext.i.i62, 64 + %.sroa.0.0.insert.ext.i.i64 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i65 = or disjoint i128 %.sroa.2.0.insert.shift.i.i63, %.sroa.0.0.insert.ext.i.i64 br label %49 49: ; preds = %49, %47 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %47 ], [ %51, %49 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i65, %47 ], [ %51, %49 ] %.0.i.i = phi i32 [ 0, %47 ], [ %50, %49 ] %50 = add nuw nsw i32 %.0.i.i, 1 %51 = lshr i128 %.03.i.i, 4 @@ -11913,7 +11917,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det br label %.split.i.i.i .split.i.i.i: ; preds = %.split.i.i.i, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i - %.012.i.i.i = phi i128 [ %64, %.split.i.i.i ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] + %.012.i.i.i = phi i128 [ %64, %.split.i.i.i ], [ %.sroa.0.0.insert.insert.i.i65, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] %.0.i.i.i = phi ptr [ %63, %.split.i.i.i ], [ %58, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] %59 = trunc i128 %.012.i.i.i to i64 %60 = and i64 %59, 15 @@ -11925,15 +11929,22 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det %.not.i.i.i = icmp ult i128 %.012.i.i.i, 16 br i1 %.not.i.i.i, label %.loopexit, label %.split.i.i.i, !llvm.loop !242 -.preheader: ; preds = %6, %.preheader - %.03.i.i71 = phi i128 [ %66, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i72 = phi i32 [ %65, %.preheader ], [ 0, %6 ] - %65 = add nuw nsw i32 %.0.i.i72, 1 - %66 = lshr i128 %.03.i.i71, 3 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i67 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i68 = shl nuw i128 %.sroa.2.0.insert.ext.i.i67, 64 + %.sroa.0.0.insert.ext.i.i69 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i70 = or disjoint i128 %.sroa.2.0.insert.shift.i.i68, %.sroa.0.0.insert.ext.i.i69 + br label %66 + +66: ; preds = %66, %65 + %.03.i.i71 = phi i128 [ %.sroa.0.0.insert.insert.i.i70, %65 ], [ %68, %66 ] + %.0.i.i72 = phi i32 [ 0, %65 ], [ %67, %66 ] + %67 = add nuw nsw i32 %.0.i.i72, 1 + %68 = lshr i128 %.03.i.i71, 3 %.not.i.i73 = icmp ult i128 %.03.i.i71, 8 - br i1 %.not.i.i73, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !243 + br i1 %.not.i.i73, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %66, !llvm.loop !243 -_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader +_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %66 %67 = and i32 %15, 8192 %.not = icmp eq i32 %67, 0 br i1 %.not, label %77, label %68 @@ -11941,12 +11952,13 @@ _ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader 68: ; preds = %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit %69 = getelementptr inbounds nuw i8, ptr %4, i64 12 %70 = load i32, ptr %69, align 4, !tbaa !151 - %71 = icmp sle i32 %70, %65 - %72 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %71, i1 %72, i1 false - br i1 %or.cond, label %73, label %77 + %71 = icmp sle i32 %70, %67 + %74 = or i64 %2, %1 + %75 = icmp ne i64 %74, 0 + %or.cond = and i1 %75, %71 + br i1 %or.cond, label %76, label %80 -73: ; preds = %68 +76: ; preds = %70 %.not.i74 = icmp eq i32 %3, 0 %74 = select i1 %.not.i74, i32 48, i32 12288 %75 = or i32 %74, %3 @@ -11954,9 +11966,9 @@ _ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader store i32 %76, ptr %8, align 4, !tbaa !206 br label %77 -77: ; preds = %73, %68, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit - %78 = phi i32 [ %76, %73 ], [ %3, %68 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] - %79 = zext nneg i32 %65 to i64 +77: ; preds = %76, %68, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit + %78 = phi i32 [ %76, %76 ], [ %3, %70 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] + %79 = zext nneg i32 %67 to i64 %80 = icmp samesign ugt i32 %.0.i.i72, 499 br i1 %80, label %81, label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 @@ -11972,13 +11984,13 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread: ; preds = %81 br label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread - %83 = phi ptr [ %82, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread ], [ %14, %77 ] + %83 = phi ptr [ %82, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread ], [ %14, %80 ] store i64 %79, ptr %13, align 8, !tbaa !128 %84 = getelementptr inbounds nuw i8, ptr %83, i64 %79 br label %.split.us.i.i.i .split.us.i.i.i: ; preds = %.split.us.i.i.i, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 - %.012.us.i.i.i = phi i128 [ %89, %.split.us.i.i.i ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] + %.012.us.i.i.i = phi i128 [ %89, %.split.us.i.i.i ], [ %.sroa.0.0.insert.insert.i.i70, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] %.0.us.i.i.i = phi ptr [ %88, %.split.us.i.i.i ], [ %84, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] %85 = trunc i128 %.012.us.i.i.i to i8 %86 = and i8 %85, 7 @@ -11992,7 +12004,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3 90: ; preds = %6 %91 = and i32 %15, 8192 %.not144 = icmp eq i32 %91, 0 - br i1 %.not144, label %99, label %92 + br i1 %.not144, label %102, label %92 92: ; preds = %90 %93 = and i32 %15, 4096 @@ -12004,22 +12016,26 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3 %97 = or i32 %96, %3 %98 = add i32 %97, 33554432 store i32 %98, ptr %8, align 4, !tbaa !206 - br label %99 - -99: ; preds = %92, %90 - %100 = phi i32 [ %98, %92 ], [ %3, %90 ] - br label %101 + br label %102 -101: ; preds = %101, %99 - %.03.i.i101 = phi i128 [ %.sroa.053.0.insert.insert, %99 ], [ %103, %101 ] - %.0.i.i102 = phi i32 [ 0, %99 ], [ %102, %101 ] - %102 = add nuw nsw i32 %.0.i.i102, 1 - %103 = lshr i128 %.03.i.i101, 1 +101: ; preds = %95, %93 + %.03.i.i101 = phi i32 [ %101, %95 ], [ %3, %93 ] + %.sroa.2.0.insert.ext.i.i97 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i98 = shl nuw i128 %.sroa.2.0.insert.ext.i.i97, 64 + %.sroa.0.0.insert.ext.i.i99 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i100 = or disjoint i128 %.sroa.2.0.insert.shift.i.i98, %.sroa.0.0.insert.ext.i.i99 + br label %104 + +104: ; preds = %104, %102 + %.03.i.i101 = phi i128 [ %.sroa.0.0.insert.insert.i.i100, %102 ], [ %106, %104 ] + %.0.i.i102 = phi i32 [ 0, %102 ], [ %105, %104 ] + %105 = add nuw nsw i32 %.0.i.i102, 1 + %106 = lshr i128 %.03.i.i101, 1 %.not.i.i103 = icmp ult i128 %.03.i.i101, 2 - br i1 %.not.i.i103, label %_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit, label %101, !llvm.loop !244 + br i1 %.not.i.i103, label %_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit, label %104, !llvm.loop !244 -_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit: ; preds = %101 - %104 = zext nneg i32 %102 to i64 +_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit: ; preds = %104 + %104 = zext nneg i32 %105 to i64 %105 = icmp samesign ugt i32 %.0.i.i102, 499 br i1 %105, label %106, label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 @@ -12050,7 +12066,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104: ; preds = %_ZN3fmt3v116 br label %.split.us.i.i.i112 .split.us.i.i.i112: ; preds = %.split.us.i.i.i112, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 - %.012.us.i.i.i113 = phi i128 [ %115, %.split.us.i.i.i112 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] + %.012.us.i.i.i113 = phi i128 [ %115, %.split.us.i.i.i112 ], [ %.sroa.0.0.insert.insert.i.i100, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] %.0.us.i.i.i114 = phi ptr [ %114, %.split.us.i.i.i112 ], [ %110, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] %111 = trunc i128 %.012.us.i.i.i113 to i8 %112 = and i8 %111, 1 @@ -12078,8 +12094,8 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %154 .loopexit: ; preds = %.split.us.i.i.i, %.split.i.i.i, %.split.us.i.i.i112, %_ZN3fmt3v116detail12count_digitsEo.exit - %123 = phi i32 [ %3, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %100, %.split.us.i.i.i112 ], [ %48, %.split.i.i.i ], [ %78, %.split.us.i.i.i ] - %.0 = phi i32 [ %.012.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %102, %.split.us.i.i.i112 ], [ %50, %.split.i.i.i ], [ %65, %.split.us.i.i.i ] + %123 = phi i32 [ %3, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %103, %.split.us.i.i.i112 ], [ %48, %.split.i.i.i ], [ %78, %.split.us.i.i.i ] + %.0 = phi i32 [ %.012.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %105, %.split.us.i.i.i112 ], [ %50, %.split.i.i.i ], [ %67, %.split.us.i.i.i ] %124 = lshr i32 %123, 24 %125 = add i32 %124, %.0 %126 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -12096,9 +12112,9 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %134 134: ; preds = %144, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %145, %144 ] - %.sroa.0.07.i = phi ptr [ %129, %.lr.ph.i ], [ %.sroa.0.1.i, %144 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %142, %144 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %145, %147 ] + %.sroa.0.07.i = phi ptr [ %129, %.lr.ph.i ], [ %.sroa.0.1.i, %147 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %142, %147 ] %135 = icmp eq ptr %.sroa.0.07.i, %132 br i1 %135, label %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i, label %136 @@ -12117,8 +12133,8 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = %139, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %137, %139 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %140, %139 ], [ %132, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %137, %142 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %140, %142 ], [ %132, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] %141 = sext i8 %.sink.i.i to i32 %142 = add nsw i32 %.sroa.5.06.i, %141 %143 = icmp sgt i32 %.0, %142 @@ -12129,7 +12145,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = br label %134 _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %136, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i, %.loopexit - %.0.lcssa.i = phi i32 [ 0, %.loopexit ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %136 ] + %.0.lcssa.i = phi i32 [ 0, %.loopexit ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %139 ] %146 = add i32 %125, %.0.lcssa.i %147 = zext i32 %146 to i64 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #35 @@ -12139,7 +12155,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %136, %149 = getelementptr inbounds nuw i8, ptr %10, i64 16 store ptr %9, ptr %149, align 8, !tbaa !219 %150 = invoke ptr @_ZN3fmt3v116detail12write_paddedIcLNS0_5alignE2ENS0_14basic_appenderIcEEZNS1_9write_intIS5_ocEET_S7_T0_jRKNS0_12format_specsERKNS1_14digit_groupingIT1_EEEUlS5_E_EESD_SD_SB_mmOT2_(ptr %0, ptr noundef nonnull align 4 dereferenceable(16) %4, i64 noundef %147, i64 noundef %147, ptr noundef nonnull align 8 dereferenceable(24) %10) - to label %151 unwind label %152 + to label %154 unwind label %152 151: ; preds = %_ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #35 @@ -12152,7 +12168,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %136, br label %157 154: ; preds = %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit, %151 - %.sroa.056.0 = phi ptr [ %150, %151 ], [ %122, %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit ] + %.sroa.056.0 = phi ptr [ %150, %154 ], [ %122, %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit ] %155 = load ptr, ptr %9, align 8, !tbaa !126 %.not.i.i134 = icmp eq ptr %155, %14 br i1 %.not.i.i134, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit, label %156 @@ -12166,7 +12182,7 @@ _ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit: ; p ret ptr %.sroa.056.0 157: ; preds = %152, %36 - %.pn.pn = phi { ptr, i32 } [ %37, %36 ], [ %153, %152 ] + %.pn.pn = phi { ptr, i32 } [ %37, %36 ], [ %153, %155 ] %158 = load ptr, ptr %9, align 8, !tbaa !126 %.not.i.i135 = icmp eq ptr %158, %14 br i1 %.not.i.i135, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit136, label %159 diff --git a/bench/fmt/optimized/xchar-test.ll b/bench/fmt/optimized/xchar-test.ll index 8cc4e428875..b21b45d05d4 100644 --- a/bench/fmt/optimized/xchar-test.ll +++ b/bench/fmt/optimized/xchar-test.ll @@ -45411,10 +45411,6 @@ define linkonce_odr hidden ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appende %8 = alloca i32, align 4 %9 = alloca %"class.fmt::v11::basic_memory_buffer", align 8 %10 = alloca %class.anon.204, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %8, align 4, !tbaa !154 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %9) #32 %11 = getelementptr inbounds nuw i8, ptr %9, i64 16 @@ -45436,12 +45432,16 @@ define linkonce_odr hidden ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appende ] 18: ; preds = %6 - %19 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %19 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %19, label %_ZN3fmt3v116detail12count_digitsEo.exit, label %.lr.ph.i.i .lr.ph.i.i: ; preds = %18, %31 %.017.i.i = phi i32 [ %33, %31 ], [ 1, %18 ] - %.01116.i.i = phi i128 [ %32, %31 ], [ %.sroa.053.0.insert.insert, %18 ] + %.01116.i.i = phi i128 [ %32, %31 ], [ %.sroa.0.0.insert.insert.i.i, %18 ] %20 = icmp ult i128 %.01116.i.i, 100 br i1 %20, label %21, label %23 @@ -45500,10 +45500,14 @@ _ZN3fmt3v116detail12count_digitsEo.exit: ; preds = %31, %29, %25, %21, 47: ; preds = %40, %38 %48 = phi i32 [ %46, %40 ], [ %3, %38 ] + %.sroa.2.0.insert.ext.i.i62 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i63 = shl nuw i128 %.sroa.2.0.insert.ext.i.i62, 64 + %.sroa.0.0.insert.ext.i.i64 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i65 = or disjoint i128 %.sroa.2.0.insert.shift.i.i63, %.sroa.0.0.insert.ext.i.i64 br label %49 49: ; preds = %49, %47 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %47 ], [ %51, %49 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i65, %47 ], [ %51, %49 ] %.0.i.i = phi i32 [ 0, %47 ], [ %50, %49 ] %50 = add nuw nsw i32 %.0.i.i, 1 %51 = lshr i128 %.03.i.i, 4 @@ -45536,7 +45540,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det br label %.split.i.i.i .split.i.i.i: ; preds = %.split.i.i.i, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i - %.012.i.i.i = phi i128 [ %64, %.split.i.i.i ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] + %.012.i.i.i = phi i128 [ %64, %.split.i.i.i ], [ %.sroa.0.0.insert.insert.i.i65, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] %.0.i.i.i = phi ptr [ %63, %.split.i.i.i ], [ %58, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] %59 = trunc i128 %.012.i.i.i to i64 %60 = and i64 %59, 15 @@ -45548,15 +45552,22 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det %.not.i.i.i = icmp ult i128 %.012.i.i.i, 16 br i1 %.not.i.i.i, label %_ZN3fmt3v116detail13format_base2eIcNS0_14basic_appenderIcEEoTnNSt9enable_ifIXsr23is_back_insert_iteratorIT0_EE5valueEiE4typeELi0EEES6_iS6_T1_ib.exit, label %.split.i.i.i, !llvm.loop !1241 -.preheader: ; preds = %6, %.preheader - %.03.i.i71 = phi i128 [ %66, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i72 = phi i32 [ %65, %.preheader ], [ 0, %6 ] - %65 = add nuw nsw i32 %.0.i.i72, 1 - %66 = lshr i128 %.03.i.i71, 3 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i67 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i68 = shl nuw i128 %.sroa.2.0.insert.ext.i.i67, 64 + %.sroa.0.0.insert.ext.i.i69 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i70 = or disjoint i128 %.sroa.2.0.insert.shift.i.i68, %.sroa.0.0.insert.ext.i.i69 + br label %66 + +66: ; preds = %66, %65 + %.03.i.i71 = phi i128 [ %.sroa.0.0.insert.insert.i.i70, %65 ], [ %68, %66 ] + %.0.i.i72 = phi i32 [ 0, %65 ], [ %67, %66 ] + %67 = add nuw nsw i32 %.0.i.i72, 1 + %68 = lshr i128 %.03.i.i71, 3 %.not.i.i73 = icmp ult i128 %.03.i.i71, 8 - br i1 %.not.i.i73, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !1242 + br i1 %.not.i.i73, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %66, !llvm.loop !1242 -_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader +_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %66 %67 = and i32 %15, 8192 %.not = icmp eq i32 %67, 0 br i1 %.not, label %77, label %68 @@ -45564,12 +45575,13 @@ _ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader 68: ; preds = %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit %69 = getelementptr inbounds nuw i8, ptr %4, i64 12 %70 = load i32, ptr %69, align 4, !tbaa !872 - %71 = icmp sle i32 %70, %65 - %72 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %71, i1 %72, i1 false - br i1 %or.cond, label %73, label %77 + %71 = icmp sle i32 %70, %67 + %74 = or i64 %2, %1 + %75 = icmp ne i64 %74, 0 + %or.cond = and i1 %75, %71 + br i1 %or.cond, label %76, label %80 -73: ; preds = %68 +76: ; preds = %70 %.not.i74 = icmp eq i32 %3, 0 %74 = select i1 %.not.i74, i32 48, i32 12288 %75 = or i32 %74, %3 @@ -45577,9 +45589,9 @@ _ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader store i32 %76, ptr %8, align 4, !tbaa !154 br label %77 -77: ; preds = %73, %68, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit - %78 = phi i32 [ %76, %73 ], [ %3, %68 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] - %79 = zext nneg i32 %65 to i64 +77: ; preds = %76, %68, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit + %78 = phi i32 [ %76, %76 ], [ %3, %70 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] + %79 = zext nneg i32 %67 to i64 %80 = icmp samesign ugt i32 %.0.i.i72, 499 br i1 %80, label %81, label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 @@ -45595,13 +45607,13 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread: ; preds = %81 br label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread - %83 = phi ptr [ %82, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread ], [ %14, %77 ] + %83 = phi ptr [ %82, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread ], [ %14, %80 ] store i64 %79, ptr %13, align 8, !tbaa !797 %84 = getelementptr inbounds nuw i8, ptr %83, i64 %79 br label %.split.us.i.i.i .split.us.i.i.i: ; preds = %.split.us.i.i.i, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 - %.012.us.i.i.i = phi i128 [ %89, %.split.us.i.i.i ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] + %.012.us.i.i.i = phi i128 [ %89, %.split.us.i.i.i ], [ %.sroa.0.0.insert.insert.i.i70, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] %.0.us.i.i.i = phi ptr [ %88, %.split.us.i.i.i ], [ %84, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] %85 = trunc i128 %.012.us.i.i.i to i8 %86 = and i8 %85, 7 @@ -45630,12 +45642,16 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3 br label %99 99: ; preds = %92, %90 - %100 = phi i32 [ %98, %92 ], [ %3, %90 ] - br label %101 + %100 = phi i32 [ %98, %95 ], [ %3, %93 ] + %.sroa.2.0.insert.ext.i.i97 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i98 = shl nuw i128 %.sroa.2.0.insert.ext.i.i97, 64 + %.sroa.0.0.insert.ext.i.i99 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i100 = or disjoint i128 %.sroa.2.0.insert.shift.i.i98, %.sroa.0.0.insert.ext.i.i99 + br label %104 101: ; preds = %101, %99 - %.03.i.i101 = phi i128 [ %.sroa.053.0.insert.insert, %99 ], [ %103, %101 ] - %.0.i.i102 = phi i32 [ 0, %99 ], [ %102, %101 ] + %.03.i.i101 = phi i128 [ %.sroa.0.0.insert.insert.i.i100, %102 ], [ %103, %104 ] + %.0.i.i102 = phi i32 [ 0, %102 ], [ %102, %104 ] %102 = add nuw nsw i32 %.0.i.i102, 1 %103 = lshr i128 %.03.i.i101, 1 %.not.i.i103 = icmp ult i128 %.03.i.i101, 2 @@ -45673,7 +45689,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104: ; preds = %_ZN3fmt3v116 br label %.split.us.i.i.i112 .split.us.i.i.i112: ; preds = %.split.us.i.i.i112, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 - %.012.us.i.i.i113 = phi i128 [ %115, %.split.us.i.i.i112 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] + %.012.us.i.i.i113 = phi i128 [ %115, %.split.us.i.i.i112 ], [ %.sroa.0.0.insert.insert.i.i100, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] %.0.us.i.i.i114 = phi ptr [ %114, %.split.us.i.i.i112 ], [ %110, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] %111 = trunc i128 %.012.us.i.i.i113 to i8 %112 = and i8 %111, 1 @@ -45702,7 +45718,7 @@ _ZN3fmt3v116detail10write_charIwNS0_14basic_appenderIwEEEET0_S5_T_RKNS0_12format _ZN3fmt3v116detail13format_base2eIcNS0_14basic_appenderIcEEoTnNSt9enable_ifIXsr23is_back_insert_iteratorIT0_EE5valueEiE4typeELi0EEES6_iS6_T1_ib.exit: ; preds = %.split.us.i.i.i, %.split.i.i.i, %.split.us.i.i.i112, %_ZN3fmt3v116detail12count_digitsEo.exit %123 = phi i32 [ %3, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %100, %.split.us.i.i.i112 ], [ %48, %.split.i.i.i ], [ %78, %.split.us.i.i.i ] - %.0 = phi i32 [ %.012.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %102, %.split.us.i.i.i112 ], [ %50, %.split.i.i.i ], [ %65, %.split.us.i.i.i ] + %.0 = phi i32 [ %.012.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %102, %.split.us.i.i.i112 ], [ %50, %.split.i.i.i ], [ %67, %.split.us.i.i.i ] %124 = getelementptr inbounds nuw i8, ptr %5, i64 40 %125 = load i64, ptr %124, align 8, !tbaa !65 %126 = icmp eq i64 %125, 0 @@ -45717,9 +45733,9 @@ _ZN3fmt3v116detail13format_base2eIcNS0_14basic_appenderIcEEoTnNSt9enable_ifIXsr2 br label %132 132: ; preds = %142, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %143, %142 ] - %.sroa.0.07.i = phi ptr [ %127, %.lr.ph.i ], [ %.sroa.0.1.i, %142 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %140, %142 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %143, %145 ] + %.sroa.0.07.i = phi ptr [ %127, %.lr.ph.i ], [ %.sroa.0.1.i, %145 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %140, %145 ] %133 = icmp eq ptr %.sroa.0.07.i, %130 br i1 %133, label %._ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit_crit_edge.i, label %134 @@ -45738,8 +45754,8 @@ _ZN3fmt3v116detail13format_base2eIcNS0_14basic_appenderIcEEoTnNSt9enable_ifIXsr2 br label %_ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit.i: ; preds = %137, %._ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %135, %137 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %138, %137 ], [ %130, %._ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %135, %140 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %138, %140 ], [ %130, %._ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit_crit_edge.i ] %139 = sext i8 %.sink.i.i to i32 %140 = add nsw i32 %.sroa.5.06.i, %139 %141 = icmp sgt i32 %.0, %140 @@ -45750,7 +45766,7 @@ _ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit.i: ; preds = br label %132 _ZNK3fmt3v116detail14digit_groupingIwE16count_separatorsEi.exit: ; preds = %_ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit.i, %134, %_ZN3fmt3v116detail13format_base2eIcNS0_14basic_appenderIcEEoTnNSt9enable_ifIXsr23is_back_insert_iteratorIT0_EE5valueEiE4typeELi0EEES6_iS6_T1_ib.exit - %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v116detail13format_base2eIcNS0_14basic_appenderIcEEoTnNSt9enable_ifIXsr23is_back_insert_iteratorIT0_EE5valueEiE4typeELi0EEES6_iS6_T1_ib.exit ], [ %.08.i, %134 ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit.i ] + %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v116detail13format_base2eIcNS0_14basic_appenderIcEEoTnNSt9enable_ifIXsr23is_back_insert_iteratorIT0_EE5valueEiE4typeELi0EEES6_iS6_T1_ib.exit ], [ %.08.i, %137 ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIwE4nextERNS3_10next_stateE.exit.i ] %144 = lshr i32 %123, 24 %145 = add i32 %144, %.0 %146 = add i32 %145, %.0.lcssa.i @@ -45762,7 +45778,7 @@ _ZNK3fmt3v116detail14digit_groupingIwE16count_separatorsEi.exit: ; preds = %_ZNK %149 = getelementptr inbounds nuw i8, ptr %10, i64 16 store ptr %9, ptr %149, align 8, !tbaa !1220 %150 = invoke ptr @_ZN3fmt3v116detail12write_paddedIwLNS0_5alignE2ENS0_14basic_appenderIwEEZNS1_9write_intIS5_owEET_S7_T0_jRKNS0_12format_specsERKNS1_14digit_groupingIT1_EEEUlS5_E_EESD_SD_SB_mmOT2_(ptr %0, ptr noundef nonnull align 4 dereferenceable(16) %4, i64 noundef %147, i64 noundef %147, ptr noundef nonnull align 8 dereferenceable(24) %10) - to label %151 unwind label %152 + to label %154 unwind label %152 151: ; preds = %_ZNK3fmt3v116detail14digit_groupingIwE16count_separatorsEi.exit call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #32 @@ -45775,7 +45791,7 @@ _ZNK3fmt3v116detail14digit_groupingIwE16count_separatorsEi.exit: ; preds = %_ZNK br label %157 154: ; preds = %_ZN3fmt3v116detail10write_charIwNS0_14basic_appenderIwEEEET0_S5_T_RKNS0_12format_specsE.exit, %151 - %.sroa.056.0 = phi ptr [ %150, %151 ], [ %122, %_ZN3fmt3v116detail10write_charIwNS0_14basic_appenderIwEEEET0_S5_T_RKNS0_12format_specsE.exit ] + %.sroa.056.0 = phi ptr [ %150, %154 ], [ %122, %_ZN3fmt3v116detail10write_charIwNS0_14basic_appenderIwEEEET0_S5_T_RKNS0_12format_specsE.exit ] %155 = load ptr, ptr %9, align 8, !tbaa !795 %.not.i.i134 = icmp eq ptr %155, %14 br i1 %.not.i.i134, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit, label %156 @@ -45789,7 +45805,7 @@ _ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit: ; p ret ptr %.sroa.056.0 157: ; preds = %152, %36 - %.pn.pn = phi { ptr, i32 } [ %37, %36 ], [ %153, %152 ] + %.pn.pn = phi { ptr, i32 } [ %37, %36 ], [ %153, %155 ] %158 = load ptr, ptr %9, align 8, !tbaa !795 %.not.i.i135 = icmp eq ptr %158, %14 br i1 %.not.i.i135, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit136, label %159 diff --git a/bench/freetype/optimized/sfnt.ll b/bench/freetype/optimized/sfnt.ll index 6d48a356f0e..af9e6914584 100644 --- a/bench/freetype/optimized/sfnt.ll +++ b/bench/freetype/optimized/sfnt.ll @@ -269,13 +269,10 @@ define internal range(i32 0, 65536) i32 @tt_cmap2_char_index(ptr noundef readonl %11 = zext nneg i32 %10 to i64 %12 = getelementptr inbounds nuw i8, ptr %7, i64 %11 %13 = load i8, ptr %12, align 1, !tbaa !15 - %14 = zext i8 %13 to i32 - %15 = shl nuw nsw i32 %14, 8 - %16 = getelementptr inbounds nuw i8, ptr %12, i64 1 - %17 = load i8, ptr %16, align 1, !tbaa !15 - %18 = zext i8 %17 to i32 - %19 = or disjoint i32 %15, %18 - %.not.i = icmp eq i32 %19, 0 + %14 = getelementptr inbounds nuw i8, ptr %12, i64 1 + %15 = load i8, ptr %14, align 1, !tbaa !15 + %16 = or i8 %15, %13 + %.not.i = icmp eq i8 %16, 0 br i1 %.not.i, label %tt_cmap2_get_subheader.exit, label %tt_cmap2_get_subheader.exit.thread 20: ; preds = %6 @@ -297,7 +294,7 @@ define internal range(i32 0, 65536) i32 @tt_cmap2_char_index(ptr noundef readonl br i1 %31, label %tt_cmap2_get_subheader.exit.thread, label %tt_cmap2_get_subheader.exit tt_cmap2_get_subheader.exit: ; preds = %20, %9 - %.021.i = phi ptr [ %.ptr.i, %9 ], [ %.ptr28.i, %20 ] + %.021.i = phi ptr [ %.ptr.i, %9 ], [ %.ptr28.i, %17 ] %32 = and i32 %1, 255 %33 = load i8, ptr %.021.i, align 1, !tbaa !15 %34 = zext i8 %33 to i32 @@ -321,43 +318,43 @@ tt_cmap2_get_subheader.exit: ; preds = %20, %9 %52 = shl nuw nsw i32 %51, 8 %53 = getelementptr inbounds nuw i8, ptr %.021.i, i64 5 %54 = load i8, ptr %53, align 1, !tbaa !15 + %52 = zext i8 %51 to i32 + %53 = or disjoint i32 %49, %52 + %54 = load i8, ptr %45, align 1, !tbaa !15 %55 = zext i8 %54 to i32 - %56 = or disjoint i32 %52, %55 - %57 = load i8, ptr %48, align 1, !tbaa !15 - %58 = zext i8 %57 to i32 - %59 = shl nuw nsw i32 %58, 8 - %60 = getelementptr inbounds nuw i8, ptr %.021.i, i64 7 - %61 = load i8, ptr %60, align 1, !tbaa !15 - %62 = zext i8 %61 to i32 - %63 = or disjoint i32 %59, %62 - %64 = sub nsw i32 %32, %39 - %65 = icmp ult i32 %64, %47 - %66 = icmp ne i32 %63, 0 - %or.cond = select i1 %65, i1 %66, i1 false - br i1 %or.cond, label %67, label %tt_cmap2_get_subheader.exit.thread - -67: ; preds = %tt_cmap2_get_subheader.exit - %68 = shl nuw nsw i32 %64, 1 - %69 = add nuw nsw i32 %63, %68 - %70 = zext nneg i32 %69 to i64 - %71 = getelementptr inbounds nuw i8, ptr %48, i64 %70 - %72 = load i8, ptr %71, align 1, !tbaa !15 - %73 = zext i8 %72 to i32 - %74 = shl nuw nsw i32 %73, 8 - %75 = getelementptr inbounds nuw i8, ptr %71, i64 1 - %76 = load i8, ptr %75, align 1, !tbaa !15 - %77 = zext i8 %76 to i32 - %78 = or disjoint i32 %74, %77 - %.not36 = icmp eq i32 %78, 0 - br i1 %.not36, label %tt_cmap2_get_subheader.exit.thread, label %79 + %56 = shl nuw nsw i32 %55, 8 + %57 = getelementptr inbounds nuw i8, ptr %.021.i, i64 7 + %58 = load i8, ptr %57, align 1, !tbaa !15 + %59 = zext i8 %58 to i32 + %60 = or disjoint i32 %56, %59 + %61 = sub nsw i32 %29, %36 + %62 = icmp ult i32 %61, %44 + %63 = icmp ne i32 %60, 0 + %65 = select i1 %62, i1 %63, i1 false + br i1 %65, label %64, label %tt_cmap2_get_subheader.exit.thread + +64:; preds = %tt_cmap2_get_subheader.exit + %65 = shl nuw nsw i32 %61, 1 + %66 = add nuw nsw i32 %60, %65 + %67 = zext nneg i32 %66 to i64 + %68 = getelementptr inbounds nuw i8, ptr %45, i64 %67 + %69 = load i8, ptr %68, align 1, !tbaa !15 + %70 = zext i8 %69 to i32 + %71 = shl nuw nsw i32 %70, 8 + %72 = getelementptr inbounds nuw i8, ptr %71, i64 1 + %73 = load i8, ptr %72, align 1, !tbaa !15 + %74 = zext i8 %73 to i32 + %75 = or disjoint i32 %71, %74 + %.not36 = icmp eq i32 %75, 0 + br i1 %.not36, label %tt_cmap2_get_subheader.exit.thread, label %76 -79: ; preds = %67 - %80 = add nuw nsw i32 %78, %56 +79: ; preds = %64 + %80 = add nuw nsw i32 %78, %53 %81 = and i32 %80, 65535 br label %tt_cmap2_get_subheader.exit.thread -tt_cmap2_get_subheader.exit.thread: ; preds = %20, %9, %2, %tt_cmap2_get_subheader.exit, %79, %67 - %.0 = phi i32 [ %81, %79 ], [ 0, %67 ], [ 0, %tt_cmap2_get_subheader.exit ], [ 0, %2 ], [ 0, %9 ], [ 0, %20 ] +tt_cmap2_get_subheader.exit.thread: ; preds = %20, %9, %2, %tt_cmap2_get_subheader.exit, %79, %64 + %.0 = phi i32 [ %81, %79 ], [ 0, %64 ], [ 0, %tt_cmap2_get_subheader.exit ], [ 0, %2 ], [ 0, %9 ], [ 0, %17 ] ret i32 %.0 } @@ -385,13 +382,10 @@ define internal range(i32 0, 65536) i32 @tt_cmap2_char_next(ptr noundef readonly %13 = zext nneg i32 %12 to i64 %14 = getelementptr inbounds nuw i8, ptr %8, i64 %13 %15 = load i8, ptr %14, align 1, !tbaa !15 - %16 = zext i8 %15 to i32 - %17 = shl nuw nsw i32 %16, 8 - %18 = getelementptr inbounds nuw i8, ptr %14, i64 1 - %19 = load i8, ptr %18, align 1, !tbaa !15 - %20 = zext i8 %19 to i32 - %21 = or disjoint i32 %17, %20 - %.not.i = icmp eq i32 %21, 0 + %16 = getelementptr inbounds nuw i8, ptr %14, i64 1 + %17 = load i8, ptr %16, align 1, !tbaa !15 + %18 = or i8 %17, %15 + %.not.i = icmp eq i8 %18, 0 br i1 %.not.i, label %tt_cmap2_get_subheader.exit, label %tt_cmap2_get_subheader.exit.thread 22: ; preds = %9 @@ -436,23 +430,23 @@ tt_cmap2_get_subheader.exit: ; preds = %22, %11 %53 = shl nuw nsw i32 %52, 8 %54 = getelementptr inbounds nuw i8, ptr %.021.i, i64 5 %55 = load i8, ptr %54, align 1, !tbaa !15 + %53 = zext i8 %52 to i32 + %54 = or disjoint i32 %50, %53 + %55 = load i8, ptr %46, align 1, !tbaa !15 %56 = zext i8 %55 to i32 - %57 = or disjoint i32 %53, %56 - %58 = load i8, ptr %49, align 1, !tbaa !15 - %59 = zext i8 %58 to i32 - %60 = shl nuw nsw i32 %59, 8 - %61 = getelementptr inbounds nuw i8, ptr %.021.i, i64 7 - %62 = load i8, ptr %61, align 1, !tbaa !15 - %63 = zext i8 %62 to i32 - %64 = or disjoint i32 %60, %63 - %65 = and i32 %.067105, 255 - %66 = add nuw nsw i32 %48, %40 - %67 = icmp samesign uge i32 %65, %66 - %or.cond = and i1 %10, %67 - br i1 %or.cond, label %.backedge, label %68 + %57 = shl nuw nsw i32 %56, 8 + %58 = getelementptr inbounds nuw i8, ptr %.021.i, i64 7 + %59 = load i8, ptr %58, align 1, !tbaa !15 + %60 = zext i8 %59 to i32 + %61 = or disjoint i32 %57, %60 + %62 = and i32 %.067105, 255 + %63 = add nuw nsw i32 %45, %37 + %64 = icmp samesign uge i32 %62, %63 + %65 = and i1 %10, %64 + br i1 %68, label %.backedge, label %65 68: ; preds = %tt_cmap2_get_subheader.exit - %69 = icmp eq i32 %64, 0 + %69 = icmp eq i32 %61, 0 br i1 %69, label %70, label %72 70: ; preds = %68 @@ -460,8 +454,8 @@ tt_cmap2_get_subheader.exit: ; preds = %22, %11 br i1 %71, label %.thread95, label %tt_cmap2_get_subheader.exit.thread 72: ; preds = %68 - %.060 = tail call i32 @llvm.umax.i32(i32 %65, i32 %40) - %.059 = tail call i32 @llvm.usub.sat.i32(i32 %65, i32 %40) + %.060 = tail call i32 @llvm.umax.i32(i32 %62, i32 %40) + %.059 = tail call i32 @llvm.usub.sat.i32(i32 %62, i32 %40) %73 = and i32 %.067105, 65280 %74 = add nuw nsw i32 %.060, %73 %75 = icmp samesign ult i32 %.059, %48 @@ -469,15 +463,15 @@ tt_cmap2_get_subheader.exit: ; preds = %22, %11 .lr.ph.preheader: ; preds = %72 %76 = shl nuw nsw i32 %.059, 1 - %77 = add nuw nsw i32 %64, %76 + %77 = add nuw nsw i32 %61, %76 %78 = zext nneg i32 %77 to i64 %79 = getelementptr inbounds nuw i8, ptr %49, i64 %78 br label %.lr.ph .lr.ph: ; preds = %.lr.ph.preheader, %91 - %.1104 = phi i32 [ %92, %91 ], [ %.059, %.lr.ph.preheader ] - %.269103 = phi i32 [ %93, %91 ], [ %74, %.lr.ph.preheader ] - %.073102 = phi ptr [ %80, %91 ], [ %79, %.lr.ph.preheader ] + %.1104 = phi i32 [ %92, %88 ], [ %.059, %.lr.ph.preheader ] + %.269103 = phi i32 [ %93, %88 ], [ %74, %.lr.ph.preheader ] + %.073102 = phi ptr [ %80, %88 ], [ %79, %.lr.ph.preheader ] %80 = getelementptr inbounds nuw i8, ptr %.073102, i64 2 %81 = load i8, ptr %.073102, align 1, !tbaa !15 %82 = zext i8 %81 to i32 @@ -490,7 +484,7 @@ tt_cmap2_get_subheader.exit: ; preds = %22, %11 br i1 %.not84, label %91, label %88 88: ; preds = %.lr.ph - %89 = add nuw nsw i32 %87, %57 + %89 = add nuw nsw i32 %87, %54 %90 = and i32 %89, 65535 %.not85 = icmp eq i32 %90, 0 br i1 %.not85, label %91, label %.thread95 @@ -502,14 +496,14 @@ tt_cmap2_get_subheader.exit: ; preds = %22, %11 br i1 %94, label %.lr.ph, label %._crit_edge, !llvm.loop !29 ._crit_edge: ; preds = %91, %72 - %.269.lcssa = phi i32 [ %74, %72 ], [ %93, %91 ] + %.269.lcssa = phi i32 [ %74, %69 ], [ %93, %88 ] %.not83 = icmp ne i32 %48, 0 %95 = sext i1 %.not83 to i32 %spec.select = add i32 %.269.lcssa, %95 br label %tt_cmap2_get_subheader.exit.thread tt_cmap2_get_subheader.exit.thread: ; preds = %70, %._crit_edge, %22, %11 - %.471 = phi i32 [ %.067105, %11 ], [ %.067105, %22 ], [ %.067105, %70 ], [ %spec.select, %._crit_edge ] + %.471 = phi i32 [ %.067105, %11 ], [ %.067105, %22 ], [ %.067105, %67 ], [ %spec.select, %._crit_edge ] %96 = icmp ult i32 %.471, 256 %97 = add nuw nsw i32 %.471, 1 %98 = and i32 %.471, -256 @@ -523,8 +517,8 @@ tt_cmap2_get_subheader.exit.thread: ; preds = %70, %._crit_edge, % br i1 %100, label %9, label %.thread95, !llvm.loop !30 .thread95: ; preds = %.backedge, %70, %88, %2 - %.366 = phi i32 [ 0, %2 ], [ %.269103, %88 ], [ 0, %70 ], [ 0, %.backedge ] - %.5 = phi i32 [ 0, %2 ], [ %90, %88 ], [ 0, %70 ], [ 0, %.backedge ] + %.366 = phi i32 [ 0, %2 ], [ %.269103, %85 ], [ 0, %67 ], [ 0, %.backedge ] + %.5 = phi i32 [ 0, %2 ], [ %90, %85 ], [ 0, %67 ], [ 0, %.backedge ] store i32 %.366, ptr %1, align 4, !tbaa !16 ret i32 %.5 } @@ -3821,13 +3815,10 @@ tt_cmap14_char_map_def_binary.exit.thread: ; preds = %109, %51 tt_cmap14_char_map_nondef_binary.exit: ; preds = %175 %181 = getelementptr inbounds nuw i8, ptr %161, i64 3 %182 = load i8, ptr %181, align 1, !tbaa !15 - %183 = zext i8 %182 to i32 - %184 = shl nuw nsw i32 %183, 8 - %185 = getelementptr inbounds nuw i8, ptr %161, i64 4 - %186 = load i8, ptr %185, align 1, !tbaa !15 - %187 = zext i8 %186 to i32 - %188 = or disjoint i32 %184, %187 - %.not28 = icmp eq i32 %188, 0 + %183 = getelementptr inbounds nuw i8, ptr %161, i64 4 + %184 = load i8, ptr %183, align 1, !tbaa !15 + %185 = or i8 %184, %182 + %.not28 = icmp eq i8 %185, 0 br i1 %.not28, label %tt_cmap14_char_map_nondef_binary.exit.thread, label %tt_cmap14_char_map_def_binary.exit tt_cmap14_char_map_nondef_binary.exit.thread: ; preds = %179, %137, %tt_cmap14_char_map_nondef_binary.exit, %tt_cmap14_char_map_def_binary.exit.thread @@ -4168,13 +4159,10 @@ tt_cmap14_char_map_def_binary.exit.thread: ; preds = %98, %27 tt_cmap14_char_map_nondef_binary.exit: ; preds = %165 %171 = getelementptr inbounds nuw i8, ptr %151, i64 3 %172 = load i8, ptr %171, align 1, !tbaa !15 - %173 = zext i8 %172 to i32 - %174 = shl nuw nsw i32 %173, 8 - %175 = getelementptr inbounds nuw i8, ptr %151, i64 4 - %176 = load i8, ptr %175, align 1, !tbaa !15 - %177 = zext i8 %176 to i32 - %178 = or disjoint i32 %174, %177 - %.not46 = icmp eq i32 %178, 0 + %173 = getelementptr inbounds nuw i8, ptr %151, i64 4 + %174 = load i8, ptr %173, align 1, !tbaa !15 + %175 = or i8 %174, %172 + %.not46 = icmp eq i8 %175, 0 br i1 %.not46, label %tt_cmap14_char_map_nondef_binary.exit.thread, label %tt_cmap14_char_map_def_binary.exit tt_cmap14_char_map_def_binary.exit: ; preds = %119, %tt_cmap14_char_map_nondef_binary.exit diff --git a/bench/hdf5/optimized/H5Fsuper_cache.ll b/bench/hdf5/optimized/H5Fsuper_cache.ll index 91f238f5500..4daf6d6e6e4 100644 --- a/bench/hdf5/optimized/H5Fsuper_cache.ll +++ b/bench/hdf5/optimized/H5Fsuper_cache.ll @@ -503,22 +503,21 @@ define internal ptr @H5F__cache_superblock_deserialize(ptr noundef %0, i64 nound %192 = load i8, ptr %175, align 1, !tbaa !31 %193 = getelementptr inbounds nuw i8, ptr %32, i64 12 %194 = load i8, ptr %193, align 1, !tbaa !31 - %195 = zext i8 %194 to i32 - %196 = shl nuw nsw i32 %195, 8 - %197 = getelementptr inbounds nuw i8, ptr %32, i64 13 - %198 = load i16, ptr %197, align 1 - %199 = zext i16 %198 to i32 - %200 = shl nuw i32 %199, 16 - %201 = or disjoint i32 %200, %196 - %202 = getelementptr inbounds nuw i8, ptr %32, i64 15 - store ptr %202, ptr %5, align 8, !tbaa !12 - %.not179 = icmp eq i32 %201, 0 - br i1 %.not179, label %207, label %203 - -203: ; preds = %191 - %204 = load i64, ptr @H5E_FILE_g, align 8, !tbaa !10 - %205 = load i64, ptr @H5E_BADVALUE_g, align 8, !tbaa !10 - %206 = tail call i32 (ptr, ptr, i32, i64, i64, ptr, ...) @H5E_printf_stack(ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.H5F__cache_superblock_deserialize, i32 noundef 498, i64 noundef %204, i64 noundef %205, ptr noundef nonnull @.str.19) #6 + %195 = getelementptr inbounds nuw i8, ptr %32, i64 13 + %196 = load i8, ptr %195, align 1, !tbaa !31 + %197 = getelementptr inbounds nuw i8, ptr %32, i64 14 + %198 = load i8, ptr %197, align 1, !tbaa !31 + %199 = getelementptr inbounds nuw i8, ptr %32, i64 15 + store ptr %199, ptr %5, align 8, !tbaa !12 + %201 = or i8 %196, %194 + %201 = or i8 %200, %198 + %.not179 = icmp eq i8 %201, 0 + br i1 %.not179, label %206, label %202 + +202: ; preds = %191 + %203 = load i64, ptr @H5E_FILE_g, align 8, !tbaa !10 + %204 = load i64, ptr @H5E_BADVALUE_g, align 8, !tbaa !10 + %205 = tail call i32 (ptr, ptr, i32, i64, i64, ptr, ...) @H5E_printf_stack(ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.H5F__cache_superblock_deserialize, i32 noundef 498, i64 noundef %203, i64 noundef %204, ptr noundef nonnull @.str.19) #6 br label %.thread 207: ; preds = %191 @@ -538,8 +537,8 @@ define internal ptr @H5F__cache_superblock_deserialize(ptr noundef %0, i64 nound br i1 %.not181, label %237, label %214 214: ; preds = %213 - %215 = icmp ugt ptr %202, %7 - %216 = ptrtoint ptr %202 to i64 + %215 = icmp ugt ptr %199, %7 + %216 = ptrtoint ptr %199 to i64 %217 = sub i64 %136, %216 %218 = icmp ult i64 %217, 2 %or.cond225 = select i1 %215, i1 true, i1 %218 @@ -548,11 +547,11 @@ define internal ptr @H5F__cache_superblock_deserialize(ptr noundef %0, i64 nound 219: ; preds = %214 %220 = load i64, ptr @H5E_FILE_g, align 8, !tbaa !10 %221 = load i64, ptr @H5E_OVERFLOW_g, align 8, !tbaa !10 - %222 = tail call i32 (ptr, ptr, i32, i64, i64, ptr, ...) @H5E_printf_stack(ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.H5F__cache_superblock_deserialize, i32 noundef 508, i64 noundef %220, i64 noundef %221, ptr noundef nonnull @.str.13) #6 + %222 = tail call i32 (ptr, ptr, i32, i64, i64, ptr, ...) @H5E_printf_stack(ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.H5F__cache_superblock_deserialize, i32 noundef 508, i64 noundef %219, i64 noundef %220, ptr noundef nonnull @.str.13) #6 br label %.thread 223: ; preds = %214 - %224 = load i16, ptr %202, align 1 + %224 = load i16, ptr %199, align 1 %225 = getelementptr inbounds nuw i8, ptr %32, i64 17 store ptr %225, ptr %5, align 8, !tbaa !12 %226 = icmp ugt ptr %225, %7 @@ -575,8 +574,8 @@ define internal ptr @H5F__cache_superblock_deserialize(ptr noundef %0, i64 nound br label %237 237: ; preds = %213, %234 - %238 = phi ptr [ %236, %234 ], [ %202, %213 ] - %.0150 = phi i32 [ %235, %234 ], [ 32, %213 ] + %238 = phi ptr [ %236, %233 ], [ %199, %212 ] + %.0150 = phi i32 [ %235, %233 ], [ 32, %212 ] %239 = getelementptr inbounds nuw i8, ptr %2, i64 20 store i32 %.0150, ptr %239, align 4, !tbaa !30 %240 = tail call zeroext i8 @H5F_sizeof_addr(ptr noundef nonnull %106) #6 @@ -795,7 +794,7 @@ define internal ptr @H5F__cache_superblock_deserialize(ptr noundef %0, i64 nound %375 = call i32 (ptr, ptr, i32, i64, i64, ptr, ...) @H5E_printf_stack(ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.H5F__cache_superblock_deserialize, i32 noundef 606, i64 noundef %373, i64 noundef %374, ptr noundef nonnull @.str.24) #6 br label %.thread208 -.thread: ; preds = %24, %40, %47, %56, %63, %72, %82, %89, %98, %114, %127, %139, %153, %163, %177, %187, %203, %209, %219, %230, %255, %270, %277, %285, %318, %326, %340, %359 +.thread: ; preds = %24, %40, %47, %56, %63, %72, %82, %89, %98, %114, %127, %139, %153, %163, %177, %187, %202, %208, %218, %229, %254, %269, %276, %284, %317, %325, %339, %358 %376 = call i32 @H5F__super_free(ptr noundef nonnull %15) #6 %377 = icmp slt i32 %376, 0 br i1 %377, label %378, label %.thread208 @@ -807,7 +806,7 @@ define internal ptr @H5F__cache_superblock_deserialize(ptr noundef %0, i64 nound br label %.thread208 .thread208: ; preds = %17, %366, %372, %4, %.thread, %378 - %.0 = phi ptr [ null, %378 ], [ null, %.thread ], [ null, %4 ], [ %15, %366 ], [ %15, %372 ], [ null, %17 ] + %.0 = phi ptr [ null, %377 ], [ null, %.thread ], [ null, %4 ], [ %15, %365 ], [ %15, %371 ], [ null, %17 ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6 ret ptr %.0 } diff --git a/bench/hdf5/optimized/H5Tvlen.ll b/bench/hdf5/optimized/H5Tvlen.ll index 8c5fd9d550d..5153d30aad8 100644 --- a/bench/hdf5/optimized/H5Tvlen.ll +++ b/bench/hdf5/optimized/H5Tvlen.ll @@ -1240,12 +1240,21 @@ define internal range(i32 -1, 1) i32 @H5T__vlen_disk_setnull(ptr noundef %0, ptr br i1 %.not, label %H5T__vlen_disk_delete.exit.thread, label %13 13: ; preds = %12 - %14 = load i32, ptr %2, align 1 - %.not.i = icmp eq i32 %14, 0 - br i1 %.not.i, label %H5T__vlen_disk_delete.exit.thread, label %15 - -15: ; preds = %13 - %16 = getelementptr inbounds nuw i8, ptr %2, i64 4 + %14 = load i8, ptr %2, align 1, !tbaa !32 + %15 = getelementptr inbounds nuw i8, ptr %2, i64 1 + %16 = load i8, ptr %15, align 1, !tbaa !32 + %17 = getelementptr inbounds nuw i8, ptr %2, i64 2 + %18 = load i8, ptr %17, align 1, !tbaa !32 + %16 = getelementptr inbounds nuw i8, ptr %2, i64 3 + %20 = load i8, ptr %19, align 1, !tbaa !32 + %21 = or i8 %16, %14 + %22 = or i8 %21, %18 + %23 = or i8 %22, %20 + %.not.i = icmp eq i8 %23, 0 + br i1 %.not.i, label %H5T__vlen_disk_delete.exit.thread, label %24 + +24: ; preds = %13 + %25 = getelementptr inbounds nuw i8, ptr %2, i64 4 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #13 store i32 0, ptr %4, align 8, !tbaa !57 %17 = call i32 @H5VL_blob_specific(ptr noundef %0, ptr noundef nonnull %16, ptr noundef nonnull %4) #13 @@ -1329,12 +1338,21 @@ define internal range(i32 -1, 1) i32 @H5T__vlen_disk_write(ptr noundef %0, ptr r br i1 %.not, label %H5T__vlen_disk_delete.exit.thread, label %16 16: ; preds = %15 - %17 = load i32, ptr %4, align 1 - %.not.i = icmp eq i32 %17, 0 - br i1 %.not.i, label %H5T__vlen_disk_delete.exit.thread, label %18 - -18: ; preds = %16 - %19 = getelementptr inbounds nuw i8, ptr %4, i64 4 + %17 = load i8, ptr %4, align 1, !tbaa !32 + %18 = getelementptr inbounds nuw i8, ptr %4, i64 1 + %19 = load i8, ptr %18, align 1, !tbaa !32 + %20 = getelementptr inbounds nuw i8, ptr %4, i64 2 + %21 = load i8, ptr %20, align 1, !tbaa !32 + %19 = getelementptr inbounds nuw i8, ptr %4, i64 3 + %23 = load i8, ptr %22, align 1, !tbaa !32 + %24 = or i8 %19, %17 + %25 = or i8 %24, %21 + %26 = or i8 %25, %23 + %.not.i = icmp eq i8 %26, 0 + br i1 %.not.i, label %H5T__vlen_disk_delete.exit.thread, label %27 + +27: ; preds = %16 + %28 = getelementptr inbounds nuw i8, ptr %4, i64 4 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #13 store i32 0, ptr %8, align 8, !tbaa !57 %20 = call i32 @H5VL_blob_specific(ptr noundef %0, ptr noundef nonnull %19, ptr noundef nonnull %8) #13 @@ -1383,7 +1401,7 @@ H5T__vlen_disk_delete.exit.thread: ; preds = %16, %H5T__vlen_disk br label %47 47: ; preds = %22, %43, %H5T__vlen_disk_delete.exit.thread, %7 - %.0 = phi i32 [ -1, %22 ], [ -1, %43 ], [ 0, %H5T__vlen_disk_delete.exit.thread ], [ 0, %7 ] + %.0 = phi i32 [ -1, %22 ], [ -1, %52 ], [ 0, %H5T__vlen_disk_delete.exit.thread ], [ 0, %7 ] ret i32 %.0 } @@ -1401,26 +1419,35 @@ define internal range(i32 -1, 1) i32 @H5T__vlen_disk_delete(ptr noundef %0, ptr br i1 %or.cond, label %11, label %22, !prof !56 11: ; preds = %2 - %12 = load i32, ptr %1, align 1 - %.not = icmp eq i32 %12, 0 - br i1 %.not, label %22, label %13 - -13: ; preds = %11 - %14 = getelementptr inbounds nuw i8, ptr %1, i64 4 + %12 = load i8, ptr %1, align 1, !tbaa !32 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 1 + %14 = load i8, ptr %13, align 1, !tbaa !32 + %15 = getelementptr inbounds nuw i8, ptr %1, i64 2 + %16 = load i8, ptr %15, align 1, !tbaa !32 + %14 = getelementptr inbounds nuw i8, ptr %1, i64 3 + %18 = load i8, ptr %17, align 1, !tbaa !32 + %19 = or i8 %14, %12 + %20 = or i8 %19, %16 + %21 = or i8 %20, %18 + %.not = icmp eq i8 %21, 0 + br i1 %.not, label %31, label %22 + +22: ; preds = %11 + %23 = getelementptr inbounds nuw i8, ptr %1, i64 4 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #13 store i32 0, ptr %3, align 8, !tbaa !57 - %15 = call i32 @H5VL_blob_specific(ptr noundef %0, ptr noundef nonnull %14, ptr noundef nonnull %3) #13 + %15 = call i32 @H5VL_blob_specific(ptr noundef %0, ptr noundef nonnull %23, ptr noundef nonnull %3) #13 %16 = icmp sgt i32 %15, -1 br i1 %16, label %21, label %17 -17: ; preds = %13 +17: ; preds = %19 %18 = load i64, ptr @H5E_DATATYPE_g, align 8, !tbaa !11 %19 = load i64, ptr @H5E_CANTREMOVE_g, align 8, !tbaa !11 %20 = call i32 (ptr, ptr, i32, i64, i64, ptr, ...) @H5E_printf_stack(ptr noundef nonnull @.str, ptr noundef nonnull @__func__.H5T__vlen_disk_delete, i32 noundef 921, i64 noundef %18, i64 noundef %19, ptr noundef nonnull @.str.29) #13 br label %21 -21: ; preds = %13, %17 - %.2 = phi i32 [ -1, %17 ], [ 0, %13 ] +21: ; preds = %19, %17 + %.2 = phi i32 [ -1, %17 ], [ 0, %19 ] call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #13 br label %22 diff --git a/bench/libjpeg-turbo/optimized/rdtarga.ll b/bench/libjpeg-turbo/optimized/rdtarga.ll index c8766863d21..6f41545e6a2 100644 --- a/bench/libjpeg-turbo/optimized/rdtarga.ll +++ b/bench/libjpeg-turbo/optimized/rdtarga.ll @@ -381,70 +381,75 @@ read_byte.exit: ; preds = %180, %185 br i1 %.not141, label %255, label %190 190: ; preds = %._crit_edge - %191 = icmp samesign ult i32 %30, 257 - %192 = getelementptr inbounds nuw i8, ptr %3, i64 3 - %193 = load i16, ptr %192, align 1 - %.not143 = icmp eq i16 %193, 0 - %or.cond149 = select i1 %191, i1 %.not143, i1 false - br i1 %or.cond149, label %198, label %194 - -194: ; preds = %190 - %195 = load ptr, ptr %0, align 8, !tbaa !25 - %196 = getelementptr inbounds nuw i8, ptr %195, i64 40 - store i32 1036, ptr %196, align 8, !tbaa !26 - %197 = load ptr, ptr %195, align 8, !tbaa !31 - tail call void %197(ptr noundef nonnull %0) #4 - br label %198 - -198: ; preds = %190, %194 - %199 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %200 = load ptr, ptr %199, align 8, !tbaa !32 - %201 = getelementptr inbounds nuw i8, ptr %200, i64 16 - %202 = load ptr, ptr %201, align 8, !tbaa !61 - %203 = tail call ptr %202(ptr noundef %0, i32 noundef 1, i32 noundef %30, i32 noundef 3) #4 - %204 = getelementptr inbounds nuw i8, ptr %1, i64 72 - store ptr %203, ptr %204, align 8, !tbaa !66 - %205 = getelementptr inbounds nuw i8, ptr %1, i64 112 - store i32 %30, ptr %205, align 8, !tbaa !67 - %206 = getelementptr inbounds nuw i8, ptr %3, i64 7 - %207 = load i8, ptr %206, align 1, !tbaa !30 - %.not.i = icmp eq i8 %207, 24 - br i1 %.not.i, label %214, label %208 - -208: ; preds = %198 - %209 = getelementptr inbounds nuw i8, ptr %1, i64 64 - %210 = load ptr, ptr %209, align 8, !tbaa !35 - %211 = load ptr, ptr %210, align 8, !tbaa !25 - %212 = getelementptr inbounds nuw i8, ptr %211, i64 40 - store i32 1036, ptr %212, align 8, !tbaa !26 - %213 = load ptr, ptr %211, align 8, !tbaa !31 - tail call void %213(ptr noundef nonnull %210) #4 - br label %214 - -214: ; preds = %208, %198 - %215 = getelementptr inbounds nuw i8, ptr %1, i64 64 + %191 = icmp samesign ugt i32 %30, 256 + br i1 %191, label %198, label %192 + +192:; preds = %190 + %193 = getelementptr inbounds nuw i8, ptr %3, i64 3 + %194 = load i8, ptr %193, align 1, !tbaa !30 + %195 = getelementptr inbounds nuw i8, ptr %3, i64 4 + %196 = load i8, ptr %195, align 4, !tbaa !30 + %197 = or i8 %196, %194 + %.not143 = icmp eq i8 %197, 0 + br i1 %.not143, label %202, label %198 + +198: ; preds = %192, %190 + %199 = load ptr, ptr %0, align 8, !tbaa !25 + %200 = getelementptr inbounds nuw i8, ptr %199, i64 40 + store i32 1036, ptr %200, align 8, !tbaa !26 + %201 = load ptr, ptr %199, align 8, !tbaa !31 + tail call void %201(ptr noundef nonnull %0) #4 + br label %202 + +202:; preds = %198, %192 + %204 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %204 = load ptr, ptr %204, align 8, !tbaa !32 + %205 = getelementptr inbounds nuw i8, ptr %204, i64 16 + %206 = load ptr, ptr %205, align 8, !tbaa !61 + %207 = tail call ptr %206(ptr noundef %0, i32 noundef 1, i32 noundef %30, i32 noundef 3) #4 + %208 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store ptr %207, ptr %208, align 8, !tbaa !66 + %209 = getelementptr inbounds nuw i8, ptr %1, i64 112 + store i32 %30, ptr %209, align 8, !tbaa !67 + %210 = getelementptr inbounds nuw i8, ptr %3, i64 7 + %211 = load i8, ptr %210, align 1, !tbaa !30 + %.not.i = icmp eq i8 %211, 24 + br i1 %.not.i, label %218, label %212 + +212: ; preds = %202 + %213 = getelementptr inbounds nuw i8, ptr %1, i64 64 + %214 = load ptr, ptr %213, align 8, !tbaa !35 + %215 = load ptr, ptr %214, align 8, !tbaa !25 + %216 = getelementptr inbounds nuw i8, ptr %215, i64 40 + store i32 1036, ptr %216, align 8, !tbaa !26 + %217 = load ptr, ptr %215, align 8, !tbaa !31 + tail call void %217(ptr noundef nonnull %214) #4 + br label %218 + +218: ; preds = %212, %202 + %219 = getelementptr inbounds nuw i8, ptr %1, i64 64 %wide.trip.count.i = zext nneg i32 %30 to i64 br label %216 -216: ; preds = %read_byte.exit16.i, %214 - %indvars.iv.i = phi i64 [ 0, %214 ], [ %indvars.iv.next.i, %read_byte.exit16.i ] +216: ; preds = %read_byte.exit16.i, %218 + %indvars.iv.i = phi i64 [ 0, %218 ], [ %indvars.iv.next.i, %read_byte.exit16.i ] %217 = load ptr, ptr %4, align 8, !tbaa !45 %218 = tail call i32 @getc(ptr noundef %217) %219 = icmp eq i32 %218, -1 br i1 %219, label %220, label %read_byte.exit.i 220: ; preds = %216 - %221 = load ptr, ptr %215, align 8, !tbaa !35 + %221 = load ptr, ptr %219, align 8, !tbaa !35 %222 = load ptr, ptr %221, align 8, !tbaa !25 %223 = getelementptr inbounds nuw i8, ptr %222, i64 40 store i32 43, ptr %223, align 8, !tbaa !26 %224 = load ptr, ptr %222, align 8, !tbaa !31 - tail call void %224(ptr noundef nonnull %221) #4 + tail call void %228(ptr noundef nonnull %221) #4 br label %read_byte.exit.i read_byte.exit.i: ; preds = %220, %216 %225 = trunc i32 %218 to i8 - %226 = load ptr, ptr %204, align 8, !tbaa !66 + %226 = load ptr, ptr %208, align 8, !tbaa !66 %227 = getelementptr inbounds nuw i8, ptr %226, i64 16 %228 = load ptr, ptr %227, align 8, !tbaa !68 %229 = getelementptr inbounds nuw i8, ptr %228, i64 %indvars.iv.i @@ -455,17 +460,17 @@ read_byte.exit.i: ; preds = %220, %216 br i1 %232, label %233, label %read_byte.exit15.i 233: ; preds = %read_byte.exit.i - %234 = load ptr, ptr %215, align 8, !tbaa !35 + %234 = load ptr, ptr %219, align 8, !tbaa !35 %235 = load ptr, ptr %234, align 8, !tbaa !25 %236 = getelementptr inbounds nuw i8, ptr %235, i64 40 store i32 43, ptr %236, align 8, !tbaa !26 %237 = load ptr, ptr %235, align 8, !tbaa !31 - tail call void %237(ptr noundef nonnull %234) #4 + tail call void %241(ptr noundef nonnull %234) #4 br label %read_byte.exit15.i read_byte.exit15.i: ; preds = %233, %read_byte.exit.i %238 = trunc i32 %231 to i8 - %239 = load ptr, ptr %204, align 8, !tbaa !66 + %239 = load ptr, ptr %208, align 8, !tbaa !66 %240 = getelementptr inbounds nuw i8, ptr %239, i64 8 %241 = load ptr, ptr %240, align 8, !tbaa !68 %242 = getelementptr inbounds nuw i8, ptr %241, i64 %indvars.iv.i @@ -476,17 +481,17 @@ read_byte.exit15.i: ; preds = %233, %read_byte.exi br i1 %245, label %246, label %read_byte.exit16.i 246: ; preds = %read_byte.exit15.i - %247 = load ptr, ptr %215, align 8, !tbaa !35 + %247 = load ptr, ptr %219, align 8, !tbaa !35 %248 = load ptr, ptr %247, align 8, !tbaa !25 %249 = getelementptr inbounds nuw i8, ptr %248, i64 40 store i32 43, ptr %249, align 8, !tbaa !26 %250 = load ptr, ptr %248, align 8, !tbaa !31 - tail call void %250(ptr noundef nonnull %247) #4 + tail call void %254(ptr noundef nonnull %247) #4 br label %read_byte.exit16.i read_byte.exit16.i: ; preds = %246, %read_byte.exit15.i %251 = trunc i32 %244 to i8 - %252 = load ptr, ptr %204, align 8, !tbaa !66 + %252 = load ptr, ptr %208, align 8, !tbaa !66 %253 = load ptr, ptr %252, align 8, !tbaa !68 %254 = getelementptr inbounds nuw i8, ptr %253, i64 %indvars.iv.i store i8 %251, ptr %254, align 1, !tbaa !30 @@ -503,7 +508,7 @@ read_byte.exit16.i: ; preds = %246, %read_byte.exi %258 = getelementptr inbounds nuw i8, ptr %257, i64 40 store i32 1037, ptr %258, align 8, !tbaa !26 %259 = load ptr, ptr %257, align 8, !tbaa !31 - tail call void %259(ptr noundef nonnull %0) #4 + tail call void %263(ptr noundef nonnull %0) #4 br label %260 260: ; preds = %256, %255 diff --git a/bench/libquic/optimized/p256-64.ll b/bench/libquic/optimized/p256-64.ll index 775eb7e9044..ee42a0a2492 100644 --- a/bench/libquic/optimized/p256-64.ll +++ b/bench/libquic/optimized/p256-64.ll @@ -4309,8 +4309,6 @@ define internal fastcc void @point_add(ptr noundef nonnull captures(none) %0, pt %116 = and i64 %115, %114 %117 = or i64 %116, %97 %118 = ashr i64 %117, 63 - %.sroa.223.0.insert.ext = zext i64 %118 to i128 - %.sroa.022.0.insert.insert = mul nuw i128 %.sroa.223.0.insert.ext, 18446744073709551617 %119 = load i64, ptr %9, align 8, !tbaa !18 %120 = getelementptr inbounds nuw i8, ptr %9, i64 8 %121 = load i64, ptr %120, align 8, !tbaa !18 @@ -4355,8 +4353,6 @@ define internal fastcc void @point_add(ptr noundef nonnull captures(none) %0, pt %160 = and i64 %159, %158 %161 = or i64 %160, %141 %162 = ashr i64 %161, 63 - %.sroa.221.0.insert.ext = zext i64 %162 to i128 - %.sroa.020.0.insert.insert = mul nuw i128 %.sroa.221.0.insert.ext, 18446744073709551617 %163 = and i128 %63, 18446744073709551615 %164 = mul nuw i128 %163, %163 %165 = lshr i128 %164, 64 @@ -6107,7 +6103,9 @@ define internal fastcc void @point_add(ptr noundef nonnull captures(none) %0, pt %1757 = mul i128 %1726, 3 %1758 = add i128 %1757, %1753 store i128 %1758, ptr %1731, align 16, !tbaa !6 - %1759 = xor i128 %.sroa.022.0.insert.insert, -1 + %.sroa.2.0.insert.ext.i = zext i64 %118 to i128 + %.sroa.0.0.insert.insert.i = mul nuw i128 %.sroa.2.0.insert.ext.i, 18446744073709551617 + %1759 = xor i128 %.sroa.0.0.insert.insert.i, -1 br label %1760 1760: ; preds = %1760, %1352 @@ -6125,33 +6123,38 @@ define internal fastcc void @point_add(ptr noundef nonnull captures(none) %0, pt %exitcond.not.i = icmp eq i64 %1769, 4 br i1 %exitcond.not.i, label %copy_small_conditional.exit, label %1760, !llvm.loop !25 -copy_small_conditional.exit: ; preds = %1760, %copy_small_conditional.exit - %.09.i = phi i64 [ %1777, %copy_small_conditional.exit ], [ 0, %1760 ] - %1770 = getelementptr inbounds nuw i128, ptr %3, i64 %.09.i - %1771 = load i128, ptr %1770, align 16, !tbaa !6 - %1772 = getelementptr inbounds nuw i128, ptr %18, i64 %.09.i - %1773 = load i128, ptr %1772, align 16, !tbaa !6 - %1774 = xor i128 %1773, %1771 - %1775 = and i128 %1774, %.sroa.020.0.insert.insert - %1776 = xor i128 %1775, %1773 - store i128 %1776, ptr %1772, align 16, !tbaa !6 - %1777 = add nuw nsw i64 %.09.i, 1 - %exitcond.not.i83 = icmp eq i64 %1777, 4 - br i1 %exitcond.not.i83, label %copy_conditional.exit, label %copy_small_conditional.exit, !llvm.loop !27 - -copy_conditional.exit: ; preds = %copy_small_conditional.exit, %copy_conditional.exit - %.010.i88 = phi i64 [ %1786, %copy_conditional.exit ], [ 0, %copy_small_conditional.exit ] - %1778 = getelementptr inbounds nuw i64, ptr %8, i64 %.010.i88 - %1779 = load i64, ptr %1778, align 8, !tbaa !18 - %1780 = and i64 %1779, %118 - %1781 = zext i64 %1780 to i128 - %1782 = getelementptr inbounds nuw i128, ptr %19, i64 %.010.i88 - %1783 = load i128, ptr %1782, align 16, !tbaa !6 - %1784 = and i128 %1783, %1759 - %1785 = or i128 %1784, %1781 - store i128 %1785, ptr %1782, align 16, !tbaa !6 - %1786 = add nuw nsw i64 %.010.i88, 1 - %exitcond.not.i89 = icmp eq i64 %1786, 4 +copy_small_conditional.exit: ; preds = %1760 + %.sroa.2.0.insert.ext.i79 = zext i64 %162 to i128 + %.sroa.0.0.insert.insert.i82 = mul nuw i128 %.sroa.2.0.insert.ext.i79, 18446744073709551617 + br label %1770 + +1770: ; preds = %1770, %copy_small_conditional.exit + %.09.i = phi i64 [ 0, %copy_small_conditional.exit ], [ %1778, %1770 ] + %1771 = getelementptr inbounds nuw i128, ptr %3, i64 %.09.i + %1772 = load i128, ptr %1771, align 16, !tbaa !6 + %1773 = getelementptr inbounds nuw i128, ptr %18, i64 %.09.i + %1774 = load i128, ptr %1773, align 16, !tbaa !6 + %1775 = xor i128 %1774, %1772 + %1776 = and i128 %1775, %.sroa.0.0.insert.insert.i82 + %1777 = xor i128 %1776, %1774 + store i128 %1777, ptr %1773, align 16, !tbaa !6 + %1778 = add nuw nsw i64 %.09.i, 1 + %exitcond.not.i83 = icmp eq i64 %1778, 4 + br i1 %exitcond.not.i83, label %copy_conditional.exit, label %1770, !llvm.loop !27 + +copy_conditional.exit:; preds = %1770, %copy_conditional.exit + %.010.i88 = phi i64 [ %1787, %copy_conditional.exit ], [ 0, %1770 ] + %1779 = getelementptr inbounds nuw i64, ptr %8, i64 %.010.i88 + %1780 = load i64, ptr %1779, align 8, !tbaa !18 + %1781 = and i64 %1780, %118 + %1782 = zext i64 %1781 to i128 + %1783 = getelementptr inbounds nuw i128, ptr %19, i64 %.010.i88 + %1784 = load i128, ptr %1783, align 16, !tbaa !6 + %1785 = and i128 %1784, %1759 + %1786 = or i128 %1785, %1782 + store i128 %1786, ptr %1783, align 16, !tbaa !6 + %1787 = add nuw nsw i64 %.010.i88, 1 + %exitcond.not.i89 = icmp eq i64 %1787, 4 br i1 %exitcond.not.i89, label %copy_small_conditional.exit90, label %copy_conditional.exit, !llvm.loop !25 copy_small_conditional.exit90: ; preds = %copy_conditional.exit, %copy_small_conditional.exit90 @@ -6161,7 +6164,7 @@ copy_small_conditional.exit90: ; preds = %copy_conditional.ex %1789 = getelementptr inbounds nuw i128, ptr %19, i64 %.09.i95 %1790 = load i128, ptr %1789, align 16, !tbaa !6 %1791 = xor i128 %1790, %1788 - %1792 = and i128 %1791, %.sroa.020.0.insert.insert + %1792 = and i128 %1791, %.sroa.0.0.insert.insert.i82 %1793 = xor i128 %1792, %1790 store i128 %1793, ptr %1789, align 16, !tbaa !6 %1794 = add nuw nsw i64 %.09.i95, 1 @@ -6190,7 +6193,7 @@ copy_small_conditional.exit104: ; preds = %copy_conditional.ex %1806 = getelementptr inbounds nuw i128, ptr %20, i64 %.09.i109 %1807 = load i128, ptr %1806, align 16, !tbaa !6 %1808 = xor i128 %1807, %1805 - %1809 = and i128 %1808, %.sroa.020.0.insert.insert + %1809 = and i128 %1808, %.sroa.0.0.insert.insert.i82 %1810 = xor i128 %1809, %1807 store i128 %1810, ptr %1806, align 16, !tbaa !6 %1811 = add nuw nsw i64 %.09.i109, 1 diff --git a/bench/lief/optimized/AArch64PAuth.ll b/bench/lief/optimized/AArch64PAuth.ll index 5f3f056aefa..b8377f4a9ff 100644 --- a/bench/lief/optimized/AArch64PAuth.ll +++ b/bench/lief/optimized/AArch64PAuth.ll @@ -7578,10 +7578,6 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET %12 = alloca i32, align 4 %13 = alloca %"class.fmt::v10::basic_memory_buffer", align 8 %14 = alloca %class.anon.40, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %12, align 4, !tbaa !94 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %13) #21 %15 = getelementptr inbounds nuw i8, ptr %13, i64 8 @@ -7594,7 +7590,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET store i64 500, ptr %16, align 8, !tbaa !37 %19 = getelementptr inbounds nuw i8, ptr %4, i64 8 %20 = load i8, ptr %19, align 4, !tbaa !74 - switch i8 %20, label %204 [ + switch i8 %20, label %207 [ i8 0, label %21 i8 1, label %21 i8 3, label %63 @@ -7606,7 +7602,11 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET ] 21: ; preds = %6, %6 - %22 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %22 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %22, label %._crit_edge.i.i.thread, label %.lr.ph.i.i ._crit_edge.i.i.thread: ; preds = %21 @@ -7618,7 +7618,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET .lr.ph.i.i: ; preds = %21, %35 %.017.i.i = phi i32 [ %37, %35 ], [ 1, %21 ] - %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.053.0.insert.insert, %21 ] + %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.0.0.insert.insert.i.i, %21 ] %24 = icmp ult i128 %.01116.i.i, 100 br i1 %24, label %25, label %27 @@ -7654,12 +7654,12 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(39) %11, i8 0, i64 39, i1 false) %39 = sext i32 %.012.i.i to i64 %40 = getelementptr inbounds i8, ptr %11, i64 %39 - %41 = icmp ugt i128 %.sroa.053.0.insert.insert, 99 + %41 = icmp ugt i128 %.sroa.0.0.insert.insert.i.i, 99 br i1 %41, label %.lr.ph.i.i59, label %._crit_edge.i.i .lr.ph.i.i59: ; preds = %_ZN3fmt3v106detail12count_digitsEo.exit, %.lr.ph.i.i59 %.026.i.i = phi ptr [ %42, %.lr.ph.i.i59 ], [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ] - %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ] + %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ] %42 = getelementptr inbounds i8, ptr %.026.i.i, i64 -2 %.02225.i.i.frozen = freeze i128 %.02225.i.i %43 = udiv i128 %.02225.i.i.frozen, 100 @@ -7674,7 +7674,7 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 br i1 %49, label %.lr.ph.i.i59, label %._crit_edge.i.i, !llvm.loop !87 ._crit_edge.i.i: ; preds = %.lr.ph.i.i59, %_ZN3fmt3v106detail12count_digitsEo.exit - %.022.lcssa.i.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] + %.022.lcssa.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] %.0.lcssa.i.i = phi ptr [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %42, %.lr.ph.i.i59 ] %50 = icmp samesign ult i128 %.022.lcssa.i.i, 10 %extract.t131 = trunc nuw nsw i128 %.022.lcssa.i.i to i8 @@ -7727,10 +7727,14 @@ _ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is 74: ; preds = %68, %63 %75 = phi i32 [ %73, %68 ], [ %3, %63 ] + %.sroa.2.0.insert.ext.i.i60 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i61 = shl nuw i128 %.sroa.2.0.insert.ext.i.i60, 64 + %.sroa.0.0.insert.ext.i.i62 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i63 = or disjoint i128 %.sroa.2.0.insert.shift.i.i61, %.sroa.0.0.insert.ext.i.i62 br label %76 76: ; preds = %76, %74 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %74 ], [ %78, %76 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %74 ], [ %78, %76 ] %.0.i.i = phi i32 [ 0, %74 ], [ %77, %76 ] %77 = add nuw nsw i32 %.0.i.i, 1 %78 = lshr i128 %.03.i.i, 4 @@ -7749,7 +7753,7 @@ _ZN3fmt3v106detail12count_digitsILi4EoEEiT0_.exit: ; preds = %76 br label %83 83: ; preds = %83, %80 - %.09.i.i = phi i128 [ %.sroa.053.0.insert.insert, %80 ], [ %89, %83 ] + %.09.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %80 ], [ %89, %83 ] %.0.i19.i = phi ptr [ %82, %80 ], [ %88, %83 ] %84 = trunc i128 %.09.i.i to i64 %85 = and i64 %84, 15 @@ -7770,7 +7774,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %92 92: ; preds = %92, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i - %.09.i25.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] + %.09.i25.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] %.0.i26.i = phi ptr [ %91, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %97, %92 ] %93 = trunc i128 %.09.i25.i to i64 %94 = and i64 %93, 15 @@ -7807,10 +7811,14 @@ _ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i: ; preds = %92 111: ; preds = %104, %100 %112 = phi i32 [ %110, %104 ], [ %3, %100 ] + %.sroa.2.0.insert.ext.i.i70 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i71 = shl nuw i128 %.sroa.2.0.insert.ext.i.i70, 64 + %.sroa.0.0.insert.ext.i.i72 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i73 = or disjoint i128 %.sroa.2.0.insert.shift.i.i71, %.sroa.0.0.insert.ext.i.i72 br label %113 113: ; preds = %113, %111 - %.03.i.i74 = phi i128 [ %.sroa.053.0.insert.insert, %111 ], [ %115, %113 ] + %.03.i.i74 = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %111 ], [ %115, %113 ] %.0.i.i75 = phi i32 [ 0, %111 ], [ %114, %113 ] %114 = add nuw nsw i32 %.0.i.i75, 1 %115 = lshr i128 %.03.i.i74, 1 @@ -7828,7 +7836,7 @@ _ZN3fmt3v106detail12count_digitsILi1EoEEiT0_.exit: ; preds = %113 br label %120 120: ; preds = %120, %117 - %.08.i.i = phi i128 [ %.sroa.053.0.insert.insert, %117 ], [ %125, %120 ] + %.08.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %117 ], [ %125, %120 ] %.0.i19.i83 = phi ptr [ %119, %117 ], [ %124, %120 ] %121 = trunc i128 %.08.i.i to i8 %122 = and i8 %121, 1 @@ -7847,7 +7855,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %128 128: ; preds = %128, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 - %.08.i24.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] + %.08.i24.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] %.0.i25.i = phi ptr [ %127, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %132, %128 ] %129 = trunc i128 %.08.i24.i to i8 %130 = and i8 %129, 1 @@ -7863,70 +7871,78 @@ _ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %128 call void @llvm.lifetime.end.p0(i64 129, ptr nonnull %9) #21 br label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit -.preheader: ; preds = %6, %.preheader - %.03.i.i95 = phi i128 [ %136, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i96 = phi i32 [ %135, %.preheader ], [ 0, %6 ] - %135 = add nuw nsw i32 %.0.i.i96, 1 - %136 = lshr i128 %.03.i.i95, 3 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i91 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i92 = shl nuw i128 %.sroa.2.0.insert.ext.i.i91, 64 + %.sroa.0.0.insert.ext.i.i93 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i94 = or disjoint i128 %.sroa.2.0.insert.shift.i.i92, %.sroa.0.0.insert.ext.i.i93 + br label %136 + +136: ; preds = %136, %135 + %.03.i.i95 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %135 ], [ %138, %136 ] + %.0.i.i96 = phi i32 [ 0, %135 ], [ %137, %136 ] + %137 = add nuw nsw i32 %.0.i.i96, 1 + %138 = lshr i128 %.03.i.i95, 3 %.not.i.i97 = icmp ult i128 %.03.i.i95, 8 - br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !180 + br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %136, !llvm.loop !180 -_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader +_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %136 %137 = getelementptr inbounds nuw i8, ptr %4, i64 9 %138 = load i16, ptr %137, align 1 %139 = and i16 %138, 128 %.not = icmp eq i16 %139, 0 - br i1 %.not, label %149, label %140 + br i1 %.not, label %152, label %140 140: ; preds = %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit %141 = getelementptr inbounds nuw i8, ptr %4, i64 4 %142 = load i32, ptr %141, align 4, !tbaa !73 - %143 = icmp sle i32 %142, %135 - %144 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %143, i1 %144, i1 false - br i1 %or.cond, label %145, label %149 + %143 = icmp sle i32 %142, %137 + %146 = or i64 %2, %1 + %147 = icmp ne i64 %146, 0 + %or.cond = and i1 %147, %143 + br i1 %or.cond, label %148, label %152 -145: ; preds = %140 +148: ; preds = %142 %.not.i98 = icmp eq i32 %3, 0 %146 = select i1 %.not.i98, i32 48, i32 12288 %147 = or i32 %146, %3 %148 = add i32 %147, 16777216 store i32 %148, ptr %12, align 4, !tbaa !94 - br label %149 + br label %152 + +152: ; preds = %148, %142, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit + %153 = phi i32 [ %151, %148 ], [ %3, %142 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] + %154 = icmp samesign ugt i32 %.0.i.i96, 499 + br i1 %154, label %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109, label %155 -149: ; preds = %145, %140, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit - %150 = phi i32 [ %148, %145 ], [ %3, %140 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] - %151 = icmp samesign ugt i32 %.0.i.i96, 499 - br i1 %151, label %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109, label %152 - -152: ; preds = %149 - %153 = zext nneg i32 %135 to i64 - store i64 %153, ptr %17, align 8, !tbaa !41 - %154 = getelementptr inbounds nuw i8, ptr %18, i64 %153 - br label %155 - -155: ; preds = %155, %152 - %.08.i.i105 = phi i128 [ %.sroa.053.0.insert.insert, %152 ], [ %160, %155 ] - %.0.i19.i106 = phi ptr [ %154, %152 ], [ %159, %155 ] - %156 = trunc i128 %.08.i.i105 to i8 - %157 = and i8 %156, 7 - %158 = or disjoint i8 %157, 48 - %159 = getelementptr inbounds i8, ptr %.0.i19.i106, i64 -1 - store i8 %158, ptr %159, align 1, !tbaa !47 - %160 = lshr i128 %.08.i.i105, 3 +149: ; preds = %152 + %156 = zext nneg i32 %137 to i64 + store i64 %156, ptr %17, align 8, !tbaa !41 + %157 = getelementptr inbounds nuw i8, ptr %18, i64 %156 + br label %158 + +158:; preds = %158, %155 + %.08.i.i105 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %155 ], [ %163, %158 ] + %.0.i19.i106 = phi ptr [ %157, %155 ], [ %162, %158 ] + %159 = trunc i128 %.08.i.i105 to i8 + %160 = and i8 %159, 7 + %161 = or disjoint i8 %160, 48 + %162 = getelementptr inbounds i8, ptr %.0.i19.i106, i64 -1 + store i8 %161, ptr %162, align 1, !tbaa !47 + %163 = lshr i128 %.08.i.i105, 3 %.not.i.i107 = icmp ult i128 %.08.i.i105, 8 - br i1 %.not.i.i107, label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit, label %155, !llvm.loop !181 + br i1 %.not.i.i107, label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit, label %158, !llvm.loop !181 -_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109: ; preds = %149 +_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109: ; preds = %152 call void @llvm.lifetime.start.p0(i64 43, ptr nonnull %8) #21 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(43) %8, i8 0, i64 43, i1 false) - %161 = zext nneg i32 %135 to i64 + %161 = zext nneg i32 %137 to i64 %162 = getelementptr inbounds nuw i8, ptr %8, i64 %161 br label %163 163: ; preds = %163, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 - %.08.i24.i114 = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %163 ] - %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %163 ] + %.08.i24.i114 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %166 ] + %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %166 ] %164 = trunc i128 %.08.i24.i114 to i8 %165 = and i8 %164, 7 %166 = or disjoint i8 %165, 48 @@ -7965,7 +7981,7 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 br label %188 188: ; preds = %170, %186 - %.sroa.08.0.i.i.i = phi ptr [ %187, %186 ], [ %0, %170 ] + %.sroa.08.0.i.i.i = phi ptr [ %187, %189 ], [ %0, %173 ] %189 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 16 %190 = load i64, ptr %189, align 8, !tbaa !41 %191 = add i64 %190, 1 @@ -7977,14 +7993,14 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 195: ; preds = %188 %196 = load ptr, ptr %.sroa.08.0.i.i.i, align 8, !tbaa !11 %197 = load ptr, ptr %196, align 8 - call void %197(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #21 + call void %200(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #21 %.pre.i.i.i.i.i.i = load i64, ptr %189, align 8, !tbaa !41 %.pre2.i.i.i.i.i.i = add i64 %.pre.i.i.i.i.i.i, 1 br label %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i: ; preds = %188, %195 - %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %188 ], [ %.pre2.i.i.i.i.i.i, %195 ] - %198 = phi i64 [ %190, %188 ], [ %.pre.i.i.i.i.i.i, %195 ] + %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %191 ], [ %.pre2.i.i.i.i.i.i, %198 ] + %198 = phi i64 [ %190, %191 ], [ %.pre.i.i.i.i.i.i, %198 ] %199 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 8 %200 = load ptr, ptr %199, align 8, !tbaa !34 store i64 %.pre-phi.i.i.i.i.i.i, ptr %189, align 8, !tbaa !41 @@ -8007,9 +8023,9 @@ _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5 call void @_ZSt9terminatev() #23 unreachable -_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds = %155, %120, %83, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit - %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %150, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %150, %155 ] - %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %135, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %135, %155 ] +_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds = %158, %120, %83, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit + %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %153, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %153, %158 ] + %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %137, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %137, %158 ] %209 = lshr i32 %208, 24 %210 = add i32 %209, %.0 %211 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -8026,9 +8042,9 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %219 219: ; preds = %229, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %229 ] - %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %229 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %229 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %232 ] + %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %232 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %232 ] %220 = icmp eq ptr %.sroa.0.07.i, %217 br i1 %220, label %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i, label %221 @@ -8047,8 +8063,8 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = %224, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %222, %224 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %225, %224 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %222, %227 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %225, %227 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] %226 = sext i8 %.sink.i.i to i32 %227 = add nsw i32 %.sroa.5.06.i, %226 %228 = icmp sgt i32 %.0, %227 @@ -8059,7 +8075,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = br label %219 _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit - %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %221 ] + %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %224 ] %231 = add i32 %210, %.0.lcssa.i %232 = zext i32 %231 to i64 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #21 @@ -8073,7 +8089,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, br label %_ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit _ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit: ; preds = %202, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit - %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %202 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] + %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %205 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] %236 = load ptr, ptr %15, align 8, !tbaa !34 %.not.i.i117 = icmp eq ptr %236, %18 br i1 %.not.i.i117, label %_ZN3fmt3v1019basic_memory_bufferIcLm500ESaIcEED2Ev.exit, label %237 diff --git a/bench/lief/optimized/BinaryParser.ll b/bench/lief/optimized/BinaryParser.ll index 26507e109d2..4ff260e0f39 100644 --- a/bench/lief/optimized/BinaryParser.ll +++ b/bench/lief/optimized/BinaryParser.ll @@ -14532,10 +14532,6 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET %12 = alloca i32, align 4 %13 = alloca %"class.fmt::v10::basic_memory_buffer.809", align 8 %14 = alloca %class.anon.827, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %12, align 4, !tbaa !16 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %13) #24 %15 = getelementptr inbounds nuw i8, ptr %13, i64 8 @@ -14548,7 +14544,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET store i64 500, ptr %16, align 8, !tbaa !426 %19 = getelementptr inbounds nuw i8, ptr %4, i64 8 %20 = load i8, ptr %19, align 4, !tbaa !452 - switch i8 %20, label %204 [ + switch i8 %20, label %207 [ i8 0, label %21 i8 1, label %21 i8 3, label %63 @@ -14560,7 +14556,11 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET ] 21: ; preds = %6, %6 - %22 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %22 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %22, label %._crit_edge.i.i.thread, label %.lr.ph.i.i ._crit_edge.i.i.thread: ; preds = %21 @@ -14572,7 +14572,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET .lr.ph.i.i: ; preds = %21, %35 %.017.i.i = phi i32 [ %37, %35 ], [ 1, %21 ] - %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.053.0.insert.insert, %21 ] + %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.0.0.insert.insert.i.i, %21 ] %24 = icmp ult i128 %.01116.i.i, 100 br i1 %24, label %25, label %27 @@ -14608,12 +14608,12 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(39) %11, i8 0, i64 39, i1 false) %39 = sext i32 %.012.i.i to i64 %40 = getelementptr inbounds i8, ptr %11, i64 %39 - %41 = icmp ugt i128 %.sroa.053.0.insert.insert, 99 + %41 = icmp ugt i128 %.sroa.0.0.insert.insert.i.i, 99 br i1 %41, label %.lr.ph.i.i59, label %._crit_edge.i.i .lr.ph.i.i59: ; preds = %_ZN3fmt3v106detail12count_digitsEo.exit, %.lr.ph.i.i59 %.026.i.i = phi ptr [ %42, %.lr.ph.i.i59 ], [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ] - %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ] + %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ] %42 = getelementptr inbounds i8, ptr %.026.i.i, i64 -2 %.02225.i.i.frozen = freeze i128 %.02225.i.i %43 = udiv i128 %.02225.i.i.frozen, 100 @@ -14628,7 +14628,7 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 br i1 %49, label %.lr.ph.i.i59, label %._crit_edge.i.i, !llvm.loop !465 ._crit_edge.i.i: ; preds = %.lr.ph.i.i59, %_ZN3fmt3v106detail12count_digitsEo.exit - %.022.lcssa.i.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] + %.022.lcssa.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] %.0.lcssa.i.i = phi ptr [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %42, %.lr.ph.i.i59 ] %50 = icmp samesign ult i128 %.022.lcssa.i.i, 10 %extract.t131 = trunc nuw nsw i128 %.022.lcssa.i.i to i8 @@ -14681,10 +14681,14 @@ _ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is 74: ; preds = %68, %63 %75 = phi i32 [ %73, %68 ], [ %3, %63 ] + %.sroa.2.0.insert.ext.i.i60 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i61 = shl nuw i128 %.sroa.2.0.insert.ext.i.i60, 64 + %.sroa.0.0.insert.ext.i.i62 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i63 = or disjoint i128 %.sroa.2.0.insert.shift.i.i61, %.sroa.0.0.insert.ext.i.i62 br label %76 76: ; preds = %76, %74 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %74 ], [ %78, %76 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %74 ], [ %78, %76 ] %.0.i.i = phi i32 [ 0, %74 ], [ %77, %76 ] %77 = add nuw nsw i32 %.0.i.i, 1 %78 = lshr i128 %.03.i.i, 4 @@ -14703,7 +14707,7 @@ _ZN3fmt3v106detail12count_digitsILi4EoEEiT0_.exit: ; preds = %76 br label %83 83: ; preds = %83, %80 - %.09.i.i = phi i128 [ %.sroa.053.0.insert.insert, %80 ], [ %89, %83 ] + %.09.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %80 ], [ %89, %83 ] %.0.i19.i = phi ptr [ %82, %80 ], [ %88, %83 ] %84 = trunc i128 %.09.i.i to i64 %85 = and i64 %84, 15 @@ -14724,7 +14728,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %92 92: ; preds = %92, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i - %.09.i25.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] + %.09.i25.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] %.0.i26.i = phi ptr [ %91, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %97, %92 ] %93 = trunc i128 %.09.i25.i to i64 %94 = and i64 %93, 15 @@ -14761,10 +14765,14 @@ _ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i: ; preds = %92 111: ; preds = %104, %100 %112 = phi i32 [ %110, %104 ], [ %3, %100 ] + %.sroa.2.0.insert.ext.i.i70 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i71 = shl nuw i128 %.sroa.2.0.insert.ext.i.i70, 64 + %.sroa.0.0.insert.ext.i.i72 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i73 = or disjoint i128 %.sroa.2.0.insert.shift.i.i71, %.sroa.0.0.insert.ext.i.i72 br label %113 113: ; preds = %113, %111 - %.03.i.i74 = phi i128 [ %.sroa.053.0.insert.insert, %111 ], [ %115, %113 ] + %.03.i.i74 = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %111 ], [ %115, %113 ] %.0.i.i75 = phi i32 [ 0, %111 ], [ %114, %113 ] %114 = add nuw nsw i32 %.0.i.i75, 1 %115 = lshr i128 %.03.i.i74, 1 @@ -14782,7 +14790,7 @@ _ZN3fmt3v106detail12count_digitsILi1EoEEiT0_.exit: ; preds = %113 br label %120 120: ; preds = %120, %117 - %.08.i.i = phi i128 [ %.sroa.053.0.insert.insert, %117 ], [ %125, %120 ] + %.08.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %117 ], [ %125, %120 ] %.0.i19.i83 = phi ptr [ %119, %117 ], [ %124, %120 ] %121 = trunc i128 %.08.i.i to i8 %122 = and i8 %121, 1 @@ -14801,7 +14809,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %128 128: ; preds = %128, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 - %.08.i24.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] + %.08.i24.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] %.0.i25.i = phi ptr [ %127, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %132, %128 ] %129 = trunc i128 %.08.i24.i to i8 %130 = and i8 %129, 1 @@ -14817,15 +14825,22 @@ _ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %128 call void @llvm.lifetime.end.p0(i64 129, ptr nonnull %9) #24 br label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit -.preheader: ; preds = %6, %.preheader - %.03.i.i95 = phi i128 [ %136, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i96 = phi i32 [ %135, %.preheader ], [ 0, %6 ] - %135 = add nuw nsw i32 %.0.i.i96, 1 - %136 = lshr i128 %.03.i.i95, 3 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i91 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i92 = shl nuw i128 %.sroa.2.0.insert.ext.i.i91, 64 + %.sroa.0.0.insert.ext.i.i93 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i94 = or disjoint i128 %.sroa.2.0.insert.shift.i.i92, %.sroa.0.0.insert.ext.i.i93 + br label %136 + +136: ; preds = %136, %135 + %.03.i.i95 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %135 ], [ %138, %136 ] + %.0.i.i96 = phi i32 [ 0, %135 ], [ %137, %136 ] + %137 = add nuw nsw i32 %.0.i.i96, 1 + %138 = lshr i128 %.03.i.i95, 3 %.not.i.i97 = icmp ult i128 %.03.i.i95, 8 - br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !554 + br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %136, !llvm.loop !554 -_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader +_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %136 %137 = getelementptr inbounds nuw i8, ptr %4, i64 9 %138 = load i16, ptr %137, align 1 %139 = and i16 %138, 128 @@ -14835,12 +14850,13 @@ _ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader 140: ; preds = %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit %141 = getelementptr inbounds nuw i8, ptr %4, i64 4 %142 = load i32, ptr %141, align 4, !tbaa !451 - %143 = icmp sle i32 %142, %135 - %144 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %143, i1 %144, i1 false - br i1 %or.cond, label %145, label %149 + %143 = icmp sle i32 %142, %137 + %146 = or i64 %2, %1 + %147 = icmp ne i64 %146, 0 + %or.cond = and i1 %147, %143 + br i1 %or.cond, label %148, label %152 -145: ; preds = %140 +148: ; preds = %142 %.not.i98 = icmp eq i32 %3, 0 %146 = select i1 %.not.i98, i32 48, i32 12288 %147 = or i32 %146, %3 @@ -14848,20 +14864,20 @@ _ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader store i32 %148, ptr %12, align 4, !tbaa !16 br label %149 -149: ; preds = %145, %140, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit - %150 = phi i32 [ %148, %145 ], [ %3, %140 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] +149: ; preds = %148, %140, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit + %150 = phi i32 [ %148, %148 ], [ %3, %142 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] %151 = icmp samesign ugt i32 %.0.i.i96, 499 br i1 %151, label %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109, label %152 152: ; preds = %149 - %153 = zext nneg i32 %135 to i64 + %153 = zext nneg i32 %137 to i64 store i64 %153, ptr %17, align 8, !tbaa !430 %154 = getelementptr inbounds nuw i8, ptr %18, i64 %153 br label %155 155: ; preds = %155, %152 - %.08.i.i105 = phi i128 [ %.sroa.053.0.insert.insert, %152 ], [ %160, %155 ] - %.0.i19.i106 = phi ptr [ %154, %152 ], [ %159, %155 ] + %.08.i.i105 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %155 ], [ %160, %158 ] + %.0.i19.i106 = phi ptr [ %154, %155 ], [ %159, %158 ] %156 = trunc i128 %.08.i.i105 to i8 %157 = and i8 %156, 7 %158 = or disjoint i8 %157, 48 @@ -14874,13 +14890,13 @@ _ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109: ; preds = %149 call void @llvm.lifetime.start.p0(i64 43, ptr nonnull %8) #24 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(43) %8, i8 0, i64 43, i1 false) - %161 = zext nneg i32 %135 to i64 + %161 = zext nneg i32 %137 to i64 %162 = getelementptr inbounds nuw i8, ptr %8, i64 %161 br label %163 163: ; preds = %163, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 - %.08.i24.i114 = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %163 ] - %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %163 ] + %.08.i24.i114 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %166 ] + %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %166 ] %164 = trunc i128 %.08.i24.i114 to i8 %165 = and i8 %164, 7 %166 = or disjoint i8 %165, 48 @@ -14919,7 +14935,7 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 br label %188 188: ; preds = %170, %186 - %.sroa.08.0.i.i.i = phi ptr [ %187, %186 ], [ %0, %170 ] + %.sroa.08.0.i.i.i = phi ptr [ %187, %189 ], [ %0, %173 ] %189 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 16 %190 = load i64, ptr %189, align 8, !tbaa !430 %191 = add i64 %190, 1 @@ -14931,14 +14947,14 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 195: ; preds = %188 %196 = load ptr, ptr %.sroa.08.0.i.i.i, align 8, !tbaa !13 %197 = load ptr, ptr %196, align 8 - call void %197(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #24 + call void %200(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #24 %.pre.i.i.i.i.i.i = load i64, ptr %189, align 8, !tbaa !430 %.pre2.i.i.i.i.i.i = add i64 %.pre.i.i.i.i.i.i, 1 br label %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i: ; preds = %188, %195 - %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %188 ], [ %.pre2.i.i.i.i.i.i, %195 ] - %198 = phi i64 [ %190, %188 ], [ %.pre.i.i.i.i.i.i, %195 ] + %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %191 ], [ %.pre2.i.i.i.i.i.i, %198 ] + %198 = phi i64 [ %190, %191 ], [ %.pre.i.i.i.i.i.i, %198 ] %199 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 8 %200 = load ptr, ptr %199, align 8, !tbaa !429 store i64 %.pre-phi.i.i.i.i.i.i, ptr %189, align 8, !tbaa !430 @@ -14962,8 +14978,8 @@ _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5 unreachable _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds = %155, %120, %83, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit - %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %150, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %150, %155 ] - %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %135, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %135, %155 ] + %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %150, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %150, %158 ] + %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %137, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %137, %158 ] %209 = lshr i32 %208, 24 %210 = add i32 %209, %.0 %211 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -14980,9 +14996,9 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %219 219: ; preds = %229, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %229 ] - %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %229 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %229 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %232 ] + %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %232 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %232 ] %220 = icmp eq ptr %.sroa.0.07.i, %217 br i1 %220, label %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i, label %221 @@ -15001,8 +15017,8 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = %224, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %222, %224 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %225, %224 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %222, %227 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %225, %227 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] %226 = sext i8 %.sink.i.i to i32 %227 = add nsw i32 %.sroa.5.06.i, %226 %228 = icmp sgt i32 %.0, %227 @@ -15013,7 +15029,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = br label %219 _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit - %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %221 ] + %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %224 ] %231 = add i32 %210, %.0.lcssa.i %232 = zext i32 %231 to i64 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #24 @@ -15027,7 +15043,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, br label %_ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit _ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit: ; preds = %202, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit - %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %202 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] + %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %205 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] %236 = load ptr, ptr %15, align 8, !tbaa !429 %.not.i.i117 = icmp eq ptr %236, %18 br i1 %.not.i.i117, label %_ZN3fmt3v1019basic_memory_bufferIcLm500ESaIcEED2Ev.exit, label %237 diff --git a/bench/lief/optimized/LoadConfiguration.ll b/bench/lief/optimized/LoadConfiguration.ll index 8bd4ea922ad..4194103e295 100644 --- a/bench/lief/optimized/LoadConfiguration.ll +++ b/bench/lief/optimized/LoadConfiguration.ll @@ -21918,10 +21918,6 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET %12 = alloca i32, align 4 %13 = alloca %"class.fmt::v10::basic_memory_buffer.863", align 8 %14 = alloca %class.anon.881, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %12, align 4, !tbaa !10 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %13) #22 %15 = getelementptr inbounds nuw i8, ptr %13, i64 8 @@ -21934,7 +21930,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET store i64 500, ptr %16, align 8, !tbaa !385 %19 = getelementptr inbounds nuw i8, ptr %4, i64 8 %20 = load i8, ptr %19, align 4, !tbaa !1229 - switch i8 %20, label %204 [ + switch i8 %20, label %207 [ i8 0, label %21 i8 1, label %21 i8 3, label %63 @@ -21946,7 +21942,11 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET ] 21: ; preds = %6, %6 - %22 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %22 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %22, label %._crit_edge.i.i.thread, label %.lr.ph.i.i ._crit_edge.i.i.thread: ; preds = %21 @@ -21958,7 +21958,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET .lr.ph.i.i: ; preds = %21, %35 %.017.i.i = phi i32 [ %37, %35 ], [ 1, %21 ] - %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.053.0.insert.insert, %21 ] + %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.0.0.insert.insert.i.i, %21 ] %24 = icmp ult i128 %.01116.i.i, 100 br i1 %24, label %25, label %27 @@ -21994,12 +21994,12 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(39) %11, i8 0, i64 39, i1 false) %39 = sext i32 %.012.i.i to i64 %40 = getelementptr inbounds i8, ptr %11, i64 %39 - %41 = icmp ugt i128 %.sroa.053.0.insert.insert, 99 + %41 = icmp ugt i128 %.sroa.0.0.insert.insert.i.i, 99 br i1 %41, label %.lr.ph.i.i59, label %._crit_edge.i.i .lr.ph.i.i59: ; preds = %_ZN3fmt3v106detail12count_digitsEo.exit, %.lr.ph.i.i59 %.026.i.i = phi ptr [ %42, %.lr.ph.i.i59 ], [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ] - %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ] + %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ] %42 = getelementptr inbounds i8, ptr %.026.i.i, i64 -2 %.02225.i.i.frozen = freeze i128 %.02225.i.i %43 = udiv i128 %.02225.i.i.frozen, 100 @@ -22014,7 +22014,7 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 br i1 %49, label %.lr.ph.i.i59, label %._crit_edge.i.i, !llvm.loop !1242 ._crit_edge.i.i: ; preds = %.lr.ph.i.i59, %_ZN3fmt3v106detail12count_digitsEo.exit - %.022.lcssa.i.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] + %.022.lcssa.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] %.0.lcssa.i.i = phi ptr [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %42, %.lr.ph.i.i59 ] %50 = icmp samesign ult i128 %.022.lcssa.i.i, 10 %extract.t131 = trunc nuw nsw i128 %.022.lcssa.i.i to i8 @@ -22067,10 +22067,14 @@ _ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is 74: ; preds = %68, %63 %75 = phi i32 [ %73, %68 ], [ %3, %63 ] + %.sroa.2.0.insert.ext.i.i60 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i61 = shl nuw i128 %.sroa.2.0.insert.ext.i.i60, 64 + %.sroa.0.0.insert.ext.i.i62 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i63 = or disjoint i128 %.sroa.2.0.insert.shift.i.i61, %.sroa.0.0.insert.ext.i.i62 br label %76 76: ; preds = %76, %74 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %74 ], [ %78, %76 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %74 ], [ %78, %76 ] %.0.i.i = phi i32 [ 0, %74 ], [ %77, %76 ] %77 = add nuw nsw i32 %.0.i.i, 1 %78 = lshr i128 %.03.i.i, 4 @@ -22089,7 +22093,7 @@ _ZN3fmt3v106detail12count_digitsILi4EoEEiT0_.exit: ; preds = %76 br label %83 83: ; preds = %83, %80 - %.09.i.i = phi i128 [ %.sroa.053.0.insert.insert, %80 ], [ %89, %83 ] + %.09.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %80 ], [ %89, %83 ] %.0.i19.i = phi ptr [ %82, %80 ], [ %88, %83 ] %84 = trunc i128 %.09.i.i to i64 %85 = and i64 %84, 15 @@ -22110,7 +22114,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %92 92: ; preds = %92, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i - %.09.i25.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] + %.09.i25.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] %.0.i26.i = phi ptr [ %91, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %97, %92 ] %93 = trunc i128 %.09.i25.i to i64 %94 = and i64 %93, 15 @@ -22147,10 +22151,14 @@ _ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i: ; preds = %92 111: ; preds = %104, %100 %112 = phi i32 [ %110, %104 ], [ %3, %100 ] + %.sroa.2.0.insert.ext.i.i70 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i71 = shl nuw i128 %.sroa.2.0.insert.ext.i.i70, 64 + %.sroa.0.0.insert.ext.i.i72 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i73 = or disjoint i128 %.sroa.2.0.insert.shift.i.i71, %.sroa.0.0.insert.ext.i.i72 br label %113 113: ; preds = %113, %111 - %.03.i.i74 = phi i128 [ %.sroa.053.0.insert.insert, %111 ], [ %115, %113 ] + %.03.i.i74 = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %111 ], [ %115, %113 ] %.0.i.i75 = phi i32 [ 0, %111 ], [ %114, %113 ] %114 = add nuw nsw i32 %.0.i.i75, 1 %115 = lshr i128 %.03.i.i74, 1 @@ -22168,7 +22176,7 @@ _ZN3fmt3v106detail12count_digitsILi1EoEEiT0_.exit: ; preds = %113 br label %120 120: ; preds = %120, %117 - %.08.i.i = phi i128 [ %.sroa.053.0.insert.insert, %117 ], [ %125, %120 ] + %.08.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %117 ], [ %125, %120 ] %.0.i19.i83 = phi ptr [ %119, %117 ], [ %124, %120 ] %121 = trunc i128 %.08.i.i to i8 %122 = and i8 %121, 1 @@ -22187,7 +22195,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %128 128: ; preds = %128, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 - %.08.i24.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] + %.08.i24.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] %.0.i25.i = phi ptr [ %127, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %132, %128 ] %129 = trunc i128 %.08.i24.i to i8 %130 = and i8 %129, 1 @@ -22203,28 +22211,36 @@ _ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %128 call void @llvm.lifetime.end.p0(i64 129, ptr nonnull %9) #22 br label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit -.preheader: ; preds = %6, %.preheader - %.03.i.i95 = phi i128 [ %136, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i96 = phi i32 [ %135, %.preheader ], [ 0, %6 ] - %135 = add nuw nsw i32 %.0.i.i96, 1 - %136 = lshr i128 %.03.i.i95, 3 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i91 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i92 = shl nuw i128 %.sroa.2.0.insert.ext.i.i91, 64 + %.sroa.0.0.insert.ext.i.i93 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i94 = or disjoint i128 %.sroa.2.0.insert.shift.i.i92, %.sroa.0.0.insert.ext.i.i93 + br label %136 + +136: ; preds = %136, %135 + %.03.i.i95 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %135 ], [ %138, %136 ] + %.0.i.i96 = phi i32 [ 0, %135 ], [ %137, %136 ] + %137 = add nuw nsw i32 %.0.i.i96, 1 + %138 = lshr i128 %.03.i.i95, 3 %.not.i.i97 = icmp ult i128 %.03.i.i95, 8 - br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !1328 + br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %136, !llvm.loop !1328 -_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader +_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %136 %137 = getelementptr inbounds nuw i8, ptr %4, i64 9 %138 = load i16, ptr %137, align 1 %139 = and i16 %138, 128 %.not = icmp eq i16 %139, 0 - br i1 %.not, label %149, label %140 + br i1 %.not, label %152, label %140 140: ; preds = %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit %141 = getelementptr inbounds nuw i8, ptr %4, i64 4 %142 = load i32, ptr %141, align 4, !tbaa !1228 - %143 = icmp sle i32 %142, %135 - %144 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %143, i1 %144, i1 false - br i1 %or.cond, label %145, label %149 + %143 = icmp sle i32 %142, %137 + %146 = or i64 %2, %1 + %147 = icmp ne i64 %146, 0 + %or.cond = and i1 %147, %143 + br i1 %or.cond, label %148, label %152 145: ; preds = %140 %.not.i98 = icmp eq i32 %3, 0 @@ -22232,41 +22248,41 @@ _ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader %147 = or i32 %146, %3 %148 = add i32 %147, 16777216 store i32 %148, ptr %12, align 4, !tbaa !10 - br label %149 + br label %152 + +152: ; preds = %148, %142, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit + %153 = phi i32 [ %151, %148 ], [ %3, %142 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] + %154 = icmp samesign ugt i32 %.0.i.i96, 499 + br i1 %154, label %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109, label %155 -149: ; preds = %145, %140, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit - %150 = phi i32 [ %148, %145 ], [ %3, %140 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] - %151 = icmp samesign ugt i32 %.0.i.i96, 499 - br i1 %151, label %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109, label %152 - -152: ; preds = %149 - %153 = zext nneg i32 %135 to i64 - store i64 %153, ptr %17, align 8, !tbaa !389 - %154 = getelementptr inbounds nuw i8, ptr %18, i64 %153 - br label %155 - -155: ; preds = %155, %152 - %.08.i.i105 = phi i128 [ %.sroa.053.0.insert.insert, %152 ], [ %160, %155 ] - %.0.i19.i106 = phi ptr [ %154, %152 ], [ %159, %155 ] - %156 = trunc i128 %.08.i.i105 to i8 - %157 = and i8 %156, 7 - %158 = or disjoint i8 %157, 48 - %159 = getelementptr inbounds i8, ptr %.0.i19.i106, i64 -1 - store i8 %158, ptr %159, align 1, !tbaa !143 - %160 = lshr i128 %.08.i.i105, 3 +155: ; preds = %152 + %156 = zext nneg i32 %137 to i64 + store i64 %156, ptr %17, align 8, !tbaa !389 + %157 = getelementptr inbounds nuw i8, ptr %18, i64 %156 + br label %158 + +149: ; preds = %158, %155 + %150 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %155 ], [ %163, %158 ] + %.0.i19.i106 = phi ptr [ %157, %155 ], [ %162, %158 ] + %159 = trunc i128 %150 to i8 + %160 = and i8 %159, 7 + %161 = or disjoint i8 %160, 48 + %162 = getelementptr inbounds i8, ptr %.0.i19.i106, i64 -1 + store i8 %161, ptr %162, align 1, !tbaa !143 + %163 = lshr i128 %150, 3 %.not.i.i107 = icmp ult i128 %.08.i.i105, 8 - br i1 %.not.i.i107, label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit, label %155, !llvm.loop !1329 + br i1 %.not.i.i107, label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit, label %158, !llvm.loop !1329 -_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109: ; preds = %149 +_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109: ; preds = %152 call void @llvm.lifetime.start.p0(i64 43, ptr nonnull %8) #22 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(43) %8, i8 0, i64 43, i1 false) - %161 = zext nneg i32 %135 to i64 + %161 = zext nneg i32 %137 to i64 %162 = getelementptr inbounds nuw i8, ptr %8, i64 %161 br label %163 163: ; preds = %163, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 - %.08.i24.i114 = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %163 ] - %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %163 ] + %.08.i24.i114 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %166 ] + %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %166 ] %164 = trunc i128 %.08.i24.i114 to i8 %165 = and i8 %164, 7 %166 = or disjoint i8 %165, 48 @@ -22305,7 +22321,7 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 br label %188 188: ; preds = %170, %186 - %.sroa.08.0.i.i.i = phi ptr [ %187, %186 ], [ %0, %170 ] + %.sroa.08.0.i.i.i = phi ptr [ %187, %189 ], [ %0, %173 ] %189 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 16 %190 = load i64, ptr %189, align 8, !tbaa !389 %191 = add i64 %190, 1 @@ -22317,14 +22333,14 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 195: ; preds = %188 %196 = load ptr, ptr %.sroa.08.0.i.i.i, align 8, !tbaa !12 %197 = load ptr, ptr %196, align 8 - call void %197(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #22 + call void %200(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #22 %.pre.i.i.i.i.i.i = load i64, ptr %189, align 8, !tbaa !389 %.pre2.i.i.i.i.i.i = add i64 %.pre.i.i.i.i.i.i, 1 br label %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i: ; preds = %188, %195 - %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %188 ], [ %.pre2.i.i.i.i.i.i, %195 ] - %198 = phi i64 [ %190, %188 ], [ %.pre.i.i.i.i.i.i, %195 ] + %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %191 ], [ %.pre2.i.i.i.i.i.i, %198 ] + %198 = phi i64 [ %190, %191 ], [ %.pre.i.i.i.i.i.i, %198 ] %199 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 8 %200 = load ptr, ptr %199, align 8, !tbaa !383 store i64 %.pre-phi.i.i.i.i.i.i, ptr %189, align 8, !tbaa !389 @@ -22347,9 +22363,9 @@ _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5 call void @_ZSt9terminatev() #25 unreachable -_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds = %155, %120, %83, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit - %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %150, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %150, %155 ] - %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %135, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %135, %155 ] +_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds = %158, %120, %83, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit + %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %153, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %153, %158 ] + %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %137, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %137, %158 ] %209 = lshr i32 %208, 24 %210 = add i32 %209, %.0 %211 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -22366,9 +22382,9 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %219 219: ; preds = %229, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %229 ] - %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %229 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %229 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %232 ] + %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %232 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %232 ] %220 = icmp eq ptr %.sroa.0.07.i, %217 br i1 %220, label %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i, label %221 @@ -22387,8 +22403,8 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = %224, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %222, %224 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %225, %224 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %222, %227 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %225, %227 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] %226 = sext i8 %.sink.i.i to i32 %227 = add nsw i32 %.sroa.5.06.i, %226 %228 = icmp sgt i32 %.0, %227 @@ -22399,7 +22415,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = br label %219 _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit - %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %221 ] + %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %224 ] %231 = add i32 %210, %.0.lcssa.i %232 = zext i32 %231 to i64 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #22 @@ -22413,7 +22429,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, br label %_ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit _ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit: ; preds = %202, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit - %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %202 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] + %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %205 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] %236 = load ptr, ptr %15, align 8, !tbaa !383 %.not.i.i117 = icmp eq ptr %236, %18 br i1 %.not.i.i117, label %_ZN3fmt3v1019basic_memory_bufferIcLm500ESaIcEED2Ev.exit, label %237 diff --git a/bench/lief/optimized/SignatureParser.ll b/bench/lief/optimized/SignatureParser.ll index 1d379538159..b97da49d13a 100644 --- a/bench/lief/optimized/SignatureParser.ll +++ b/bench/lief/optimized/SignatureParser.ll @@ -19863,10 +19863,6 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET %12 = alloca i32, align 4 %13 = alloca %"class.fmt::v10::basic_memory_buffer.1068", align 8 %14 = alloca %class.anon.1086, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %12, align 4, !tbaa !73 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %13) #21 %15 = getelementptr inbounds nuw i8, ptr %13, i64 8 @@ -19879,7 +19875,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET store i64 500, ptr %16, align 8, !tbaa !331 %19 = getelementptr inbounds nuw i8, ptr %4, i64 8 %20 = load i8, ptr %19, align 4, !tbaa !357 - switch i8 %20, label %204 [ + switch i8 %20, label %207 [ i8 0, label %21 i8 1, label %21 i8 3, label %63 @@ -19891,7 +19887,11 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET ] 21: ; preds = %6, %6 - %22 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %22 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %22, label %._crit_edge.i.i.thread, label %.lr.ph.i.i ._crit_edge.i.i.thread: ; preds = %21 @@ -19903,7 +19903,7 @@ define linkonce_odr hidden ptr @_ZN3fmt3v106detail9write_intINS0_8appenderEocEET .lr.ph.i.i: ; preds = %21, %35 %.017.i.i = phi i32 [ %37, %35 ], [ 1, %21 ] - %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.053.0.insert.insert, %21 ] + %.01116.i.i = phi i128 [ %36, %35 ], [ %.sroa.0.0.insert.insert.i.i, %21 ] %24 = icmp ult i128 %.01116.i.i, 100 br i1 %24, label %25, label %27 @@ -19939,12 +19939,12 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(39) %11, i8 0, i64 39, i1 false) %39 = sext i32 %.012.i.i to i64 %40 = getelementptr inbounds i8, ptr %11, i64 %39 - %41 = icmp ugt i128 %.sroa.053.0.insert.insert, 99 + %41 = icmp ugt i128 %.sroa.0.0.insert.insert.i.i, 99 br i1 %41, label %.lr.ph.i.i59, label %._crit_edge.i.i .lr.ph.i.i59: ; preds = %_ZN3fmt3v106detail12count_digitsEo.exit, %.lr.ph.i.i59 %.026.i.i = phi ptr [ %42, %.lr.ph.i.i59 ], [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ] - %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ] + %.02225.i.i = phi i128 [ %43, %.lr.ph.i.i59 ], [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ] %42 = getelementptr inbounds i8, ptr %.026.i.i, i64 -2 %.02225.i.i.frozen = freeze i128 %.02225.i.i %43 = udiv i128 %.02225.i.i.frozen, 100 @@ -19959,7 +19959,7 @@ _ZN3fmt3v106detail12count_digitsEo.exit: ; preds = %35, %25, %29, %33 br i1 %49, label %.lr.ph.i.i59, label %._crit_edge.i.i, !llvm.loop !370 ._crit_edge.i.i: ; preds = %.lr.ph.i.i59, %_ZN3fmt3v106detail12count_digitsEo.exit - %.022.lcssa.i.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] + %.022.lcssa.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %43, %.lr.ph.i.i59 ] %.0.lcssa.i.i = phi ptr [ %40, %_ZN3fmt3v106detail12count_digitsEo.exit ], [ %42, %.lr.ph.i.i59 ] %50 = icmp samesign ult i128 %.022.lcssa.i.i, 10 %extract.t131 = trunc nuw nsw i128 %.022.lcssa.i.i to i8 @@ -20012,10 +20012,14 @@ _ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is 74: ; preds = %68, %63 %75 = phi i32 [ %73, %68 ], [ %3, %63 ] + %.sroa.2.0.insert.ext.i.i60 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i61 = shl nuw i128 %.sroa.2.0.insert.ext.i.i60, 64 + %.sroa.0.0.insert.ext.i.i62 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i63 = or disjoint i128 %.sroa.2.0.insert.shift.i.i61, %.sroa.0.0.insert.ext.i.i62 br label %76 76: ; preds = %76, %74 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %74 ], [ %78, %76 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %74 ], [ %78, %76 ] %.0.i.i = phi i32 [ 0, %74 ], [ %77, %76 ] %77 = add nuw nsw i32 %.0.i.i, 1 %78 = lshr i128 %.03.i.i, 4 @@ -20034,7 +20038,7 @@ _ZN3fmt3v106detail12count_digitsILi4EoEEiT0_.exit: ; preds = %76 br label %83 83: ; preds = %83, %80 - %.09.i.i = phi i128 [ %.sroa.053.0.insert.insert, %80 ], [ %89, %83 ] + %.09.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %80 ], [ %89, %83 ] %.0.i19.i = phi ptr [ %82, %80 ], [ %88, %83 ] %84 = trunc i128 %.09.i.i to i64 %85 = and i64 %84, 15 @@ -20055,7 +20059,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %92 92: ; preds = %92, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i - %.09.i25.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] + %.09.i25.i = phi i128 [ %.sroa.0.0.insert.insert.i.i63, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %98, %92 ] %.0.i26.i = phi ptr [ %91, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i ], [ %97, %92 ] %93 = trunc i128 %.09.i25.i to i64 %94 = and i64 %93, 15 @@ -20092,10 +20096,14 @@ _ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i: ; preds = %92 111: ; preds = %104, %100 %112 = phi i32 [ %110, %104 ], [ %3, %100 ] + %.sroa.2.0.insert.ext.i.i70 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i71 = shl nuw i128 %.sroa.2.0.insert.ext.i.i70, 64 + %.sroa.0.0.insert.ext.i.i72 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i73 = or disjoint i128 %.sroa.2.0.insert.shift.i.i71, %.sroa.0.0.insert.ext.i.i72 br label %113 113: ; preds = %113, %111 - %.03.i.i74 = phi i128 [ %.sroa.053.0.insert.insert, %111 ], [ %115, %113 ] + %.03.i.i74 = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %111 ], [ %115, %113 ] %.0.i.i75 = phi i32 [ 0, %111 ], [ %114, %113 ] %114 = add nuw nsw i32 %.0.i.i75, 1 %115 = lshr i128 %.03.i.i74, 1 @@ -20113,7 +20121,7 @@ _ZN3fmt3v106detail12count_digitsILi1EoEEiT0_.exit: ; preds = %113 br label %120 120: ; preds = %120, %117 - %.08.i.i = phi i128 [ %.sroa.053.0.insert.insert, %117 ], [ %125, %120 ] + %.08.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %117 ], [ %125, %120 ] %.0.i19.i83 = phi ptr [ %119, %117 ], [ %124, %120 ] %121 = trunc i128 %.08.i.i to i8 %122 = and i8 %121, 1 @@ -20132,7 +20140,7 @@ _ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5val br label %128 128: ; preds = %128, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 - %.08.i24.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] + %.08.i24.i = phi i128 [ %.sroa.0.0.insert.insert.i.i73, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %133, %128 ] %.0.i25.i = phi ptr [ %127, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i86 ], [ %132, %128 ] %129 = trunc i128 %.08.i24.i to i8 %130 = and i8 %129, 1 @@ -20148,28 +20156,36 @@ _ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %128 call void @llvm.lifetime.end.p0(i64 129, ptr nonnull %9) #21 br label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit -.preheader: ; preds = %6, %.preheader - %.03.i.i95 = phi i128 [ %136, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i96 = phi i32 [ %135, %.preheader ], [ 0, %6 ] - %135 = add nuw nsw i32 %.0.i.i96, 1 - %136 = lshr i128 %.03.i.i95, 3 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i91 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i92 = shl nuw i128 %.sroa.2.0.insert.ext.i.i91, 64 + %.sroa.0.0.insert.ext.i.i93 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i94 = or disjoint i128 %.sroa.2.0.insert.shift.i.i92, %.sroa.0.0.insert.ext.i.i93 + br label %136 + +136: ; preds = %136, %135 + %.03.i.i95 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %135 ], [ %138, %136 ] + %.0.i.i96 = phi i32 [ 0, %135 ], [ %137, %136 ] + %137 = add nuw nsw i32 %.0.i.i96, 1 + %138 = lshr i128 %.03.i.i95, 3 %.not.i.i97 = icmp ult i128 %.03.i.i95, 8 - br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !459 + br i1 %.not.i.i97, label %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit, label %136, !llvm.loop !459 -_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader +_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %136 %137 = getelementptr inbounds nuw i8, ptr %4, i64 9 %138 = load i16, ptr %137, align 1 %139 = and i16 %138, 128 %.not = icmp eq i16 %139, 0 - br i1 %.not, label %149, label %140 + br i1 %.not, label %152, label %140 140: ; preds = %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit %141 = getelementptr inbounds nuw i8, ptr %4, i64 4 %142 = load i32, ptr %141, align 4, !tbaa !356 - %143 = icmp sle i32 %142, %135 - %144 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %143, i1 %144, i1 false - br i1 %or.cond, label %145, label %149 + %143 = icmp sle i32 %142, %137 + %146 = or i64 %2, %1 + %147 = icmp ne i64 %146, 0 + %or.cond = and i1 %147, %143 + br i1 %or.cond, label %148, label %152 145: ; preds = %140 %.not.i98 = icmp eq i32 %3, 0 @@ -20177,41 +20193,41 @@ _ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader %147 = or i32 %146, %3 %148 = add i32 %147, 16777216 store i32 %148, ptr %12, align 4, !tbaa !73 - br label %149 + br label %152 + +152: ; preds = %148, %142, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit + %153 = phi i32 [ %151, %148 ], [ %3, %142 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] + %154 = icmp samesign ugt i32 %.0.i.i96, 499 + br i1 %154, label %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109, label %155 -149: ; preds = %145, %140, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit - %150 = phi i32 [ %148, %145 ], [ %3, %140 ], [ %3, %_ZN3fmt3v106detail12count_digitsILi3EoEEiT0_.exit ] - %151 = icmp samesign ugt i32 %.0.i.i96, 499 - br i1 %151, label %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109, label %152 - -152: ; preds = %149 - %153 = zext nneg i32 %135 to i64 - store i64 %153, ptr %17, align 8, !tbaa !335 - %154 = getelementptr inbounds nuw i8, ptr %18, i64 %153 - br label %155 - -155: ; preds = %155, %152 - %.08.i.i105 = phi i128 [ %.sroa.053.0.insert.insert, %152 ], [ %160, %155 ] - %.0.i19.i106 = phi ptr [ %154, %152 ], [ %159, %155 ] - %156 = trunc i128 %.08.i.i105 to i8 - %157 = and i8 %156, 7 - %158 = or disjoint i8 %157, 48 - %159 = getelementptr inbounds i8, ptr %.0.i19.i106, i64 -1 - store i8 %158, ptr %159, align 1, !tbaa !69 - %160 = lshr i128 %.08.i.i105, 3 +149: ; preds = %152 + %156 = zext nneg i32 %137 to i64 + store i64 %156, ptr %17, align 8, !tbaa !335 + %157 = getelementptr inbounds nuw i8, ptr %18, i64 %156 + br label %158 + +158:; preds = %158, %155 + %.08.i.i105 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %155 ], [ %163, %158 ] + %.0.i19.i106 = phi ptr [ %157, %155 ], [ %162, %158 ] + %159 = trunc i128 %.08.i.i105 to i8 + %160 = and i8 %159, 7 + %161 = or disjoint i8 %160, 48 + %162 = getelementptr inbounds i8, ptr %.0.i19.i106, i64 -1 + store i8 %161, ptr %162, align 1, !tbaa !69 + %163 = lshr i128 %.08.i.i105, 3 %.not.i.i107 = icmp ult i128 %.08.i.i105, 8 - br i1 %.not.i.i107, label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit, label %155, !llvm.loop !460 + br i1 %.not.i.i107, label %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit, label %158, !llvm.loop !460 -_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109: ; preds = %149 +_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109: ; preds = %152 call void @llvm.lifetime.start.p0(i64 43, ptr nonnull %8) #21 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(43) %8, i8 0, i64 43, i1 false) - %161 = zext nneg i32 %135 to i64 + %161 = zext nneg i32 %137 to i64 %162 = getelementptr inbounds nuw i8, ptr %8, i64 %161 br label %163 163: ; preds = %163, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 - %.08.i24.i114 = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %163 ] - %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %163 ] + %.08.i24.i114 = phi i128 [ %.sroa.0.0.insert.insert.i.i94, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %168, %166 ] + %.0.i25.i115 = phi ptr [ %162, %_ZN3fmt3v106detail10to_pointerIcEEPT_NSt11conditionalIXsr3std7is_sameIS3_cEE5valueENS0_8appenderESt20back_insert_iteratorINS1_6bufferIS3_EEEE4typeEm.exit.thread.i109 ], [ %167, %166 ] %164 = trunc i128 %.08.i24.i114 to i8 %165 = and i8 %164, 7 %166 = or disjoint i8 %165, 48 @@ -20250,7 +20266,7 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 br label %188 188: ; preds = %170, %186 - %.sroa.08.0.i.i.i = phi ptr [ %187, %186 ], [ %0, %170 ] + %.sroa.08.0.i.i.i = phi ptr [ %187, %189 ], [ %0, %173 ] %189 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 16 %190 = load i64, ptr %189, align 8, !tbaa !335 %191 = add i64 %190, 1 @@ -20262,14 +20278,14 @@ _ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i: ; preds = %163 195: ; preds = %188 %196 = load ptr, ptr %.sroa.08.0.i.i.i, align 8, !tbaa !3 %197 = load ptr, ptr %196, align 8 - call void %197(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #21 + call void %200(ptr noundef nonnull align 8 dereferenceable(32) %.sroa.08.0.i.i.i, i64 noundef %191) #21 %.pre.i.i.i.i.i.i = load i64, ptr %189, align 8, !tbaa !335 %.pre2.i.i.i.i.i.i = add i64 %.pre.i.i.i.i.i.i, 1 br label %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i: ; preds = %188, %195 - %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %188 ], [ %.pre2.i.i.i.i.i.i, %195 ] - %198 = phi i64 [ %190, %188 ], [ %.pre.i.i.i.i.i.i, %195 ] + %.pre-phi.i.i.i.i.i.i = phi i64 [ %191, %191 ], [ %.pre2.i.i.i.i.i.i, %198 ] + %198 = phi i64 [ %190, %191 ], [ %.pre.i.i.i.i.i.i, %198 ] %199 = getelementptr inbounds nuw i8, ptr %.sroa.08.0.i.i.i, i64 8 %200 = load ptr, ptr %199, align 8, !tbaa !334 store i64 %.pre-phi.i.i.i.i.i.i, ptr %189, align 8, !tbaa !335 @@ -20292,9 +20308,9 @@ _ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5 call void @_ZSt9terminatev() #22 unreachable -_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds = %155, %120, %83, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit - %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %150, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %150, %155 ] - %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %135, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %135, %155 ] +_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds = %158, %120, %83, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit + %208 = phi i32 [ %.pre, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %75, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %112, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %153, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %75, %83 ], [ %112, %120 ], [ %153, %158 ] + %.0 = phi i32 [ %.012.i.i123127, %_ZN3fmt3v106detail14format_decimalIcoNS0_8appenderETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS7_EES7_T0_i.exit ], [ %77, %_ZN3fmt3v106detail11format_uintILj4EcoEEPT0_S4_T1_ib.exit28.i ], [ %114, %_ZN3fmt3v106detail11format_uintILj1EcoEEPT0_S4_T1_ib.exit27.i ], [ %137, %_ZN3fmt3v106detail11format_uintILj3EcoEEPT0_S4_T1_ib.exit27.i ], [ %77, %83 ], [ %114, %120 ], [ %137, %158 ] %209 = lshr i32 %208, 24 %210 = add i32 %209, %.0 %211 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -20311,9 +20327,9 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %219 219: ; preds = %229, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %229 ] - %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %229 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %229 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %230, %232 ] + %.sroa.0.07.i = phi ptr [ %214, %.lr.ph.i ], [ %.sroa.0.1.i, %232 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %227, %232 ] %220 = icmp eq ptr %.sroa.0.07.i, %217 br i1 %220, label %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i, label %221 @@ -20332,8 +20348,8 @@ _ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit: ; preds br label %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = %224, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %222, %224 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %225, %224 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %222, %227 ], [ %.sink.i.pre.i, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %225, %227 ], [ %217, %._ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] %226 = sext i8 %.sink.i.i to i32 %227 = add nsw i32 %.sroa.5.06.i, %226 %228 = icmp sgt i32 %.0, %227 @@ -20344,7 +20360,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = br label %219 _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit - %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %221 ] + %.0.lcssa.i = phi i32 [ 0, %_ZN3fmt3v106detail11format_uintILj4EcNS0_8appenderEoEET1_S4_T2_ib.exit ], [ %.08.i, %_ZNK3fmt3v106detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %224 ] %231 = add i32 %210, %.0.lcssa.i %232 = zext i32 %231 to i64 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #21 @@ -20358,7 +20374,7 @@ _ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %221, br label %_ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit _ZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EE.exit: ; preds = %202, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit - %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %202 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] + %.sroa.056.0 = phi ptr [ %235, %_ZNK3fmt3v106detail14digit_groupingIcE16count_separatorsEi.exit ], [ %203, %205 ], [ %.sroa.08.0.i.i.i, %_ZZN3fmt3v106detail10write_charIcNS0_8appenderEEET0_S4_T_RKNS0_12format_specsIS5_EEENKUlS3_E_clES3_.exit.i.i.i ] %236 = load ptr, ptr %15, align 8, !tbaa !334 %.not.i.i117 = icmp eq ptr %236, %18 br i1 %.not.i.i117, label %_ZN3fmt3v1019basic_memory_bufferIcLm500ESaIcEED2Ev.exit, label %237 diff --git a/bench/lightgbm/optimized/tree.ll b/bench/lightgbm/optimized/tree.ll index 3e4d0bd5196..abcc4ff39bd 100644 --- a/bench/lightgbm/optimized/tree.ll +++ b/bench/lightgbm/optimized/tree.ll @@ -24675,10 +24675,6 @@ define linkonce_odr ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appenderIcEEoc %8 = alloca i32, align 4 %9 = alloca %"class.fmt::v11::basic_memory_buffer", align 8 %10 = alloca %class.anon.147, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %8, align 4, !tbaa !36 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %9) #16 %11 = getelementptr inbounds nuw i8, ptr %9, i64 16 @@ -24700,12 +24696,16 @@ define linkonce_odr ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appenderIcEEoc ] 18: ; preds = %6 - %19 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %19 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %19, label %_ZN3fmt3v116detail12count_digitsEo.exit, label %.lr.ph.i.i .lr.ph.i.i: ; preds = %18, %31 %.017.i.i = phi i32 [ %33, %31 ], [ 1, %18 ] - %.01116.i.i = phi i128 [ %32, %31 ], [ %.sroa.053.0.insert.insert, %18 ] + %.01116.i.i = phi i128 [ %32, %31 ], [ %.sroa.0.0.insert.insert.i.i, %18 ] %20 = icmp ult i128 %.01116.i.i, 100 br i1 %20, label %21, label %23 @@ -24764,10 +24764,14 @@ _ZN3fmt3v116detail12count_digitsEo.exit: ; preds = %31, %29, %25, %21, 47: ; preds = %40, %38 %48 = phi i32 [ %46, %40 ], [ %3, %38 ] + %.sroa.2.0.insert.ext.i.i62 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i63 = shl nuw i128 %.sroa.2.0.insert.ext.i.i62, 64 + %.sroa.0.0.insert.ext.i.i64 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i65 = or disjoint i128 %.sroa.2.0.insert.shift.i.i63, %.sroa.0.0.insert.ext.i.i64 br label %49 49: ; preds = %49, %47 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %47 ], [ %51, %49 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i65, %47 ], [ %51, %49 ] %.0.i.i = phi i32 [ 0, %47 ], [ %50, %49 ] %50 = add nuw nsw i32 %.0.i.i, 1 %51 = lshr i128 %.03.i.i, 4 @@ -24800,7 +24804,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det br label %.split.i.i.i .split.i.i.i: ; preds = %.split.i.i.i, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i - %.012.i.i.i = phi i128 [ %64, %.split.i.i.i ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] + %.012.i.i.i = phi i128 [ %64, %.split.i.i.i ], [ %.sroa.0.0.insert.insert.i.i65, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] %.0.i.i.i = phi ptr [ %63, %.split.i.i.i ], [ %58, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ] %59 = trunc i128 %.012.i.i.i to i64 %60 = and i64 %59, 15 @@ -24812,28 +24816,36 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det %.not.i.i.i = icmp ult i128 %.012.i.i.i, 16 br i1 %.not.i.i.i, label %.loopexit, label %.split.i.i.i, !llvm.loop !583 -.preheader: ; preds = %6, %.preheader - %.03.i.i71 = phi i128 [ %66, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i72 = phi i32 [ %65, %.preheader ], [ 0, %6 ] - %65 = add nuw nsw i32 %.0.i.i72, 1 - %66 = lshr i128 %.03.i.i71, 3 - %.not.i.i73 = icmp ult i128 %.03.i.i71, 8 - br i1 %.not.i.i73, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !584 - -_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader - %67 = and i64 %15, 8192 - %.not = icmp eq i64 %67, 0 - br i1 %.not, label %77, label %68 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i67 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i68 = shl nuw i128 %.sroa.2.0.insert.ext.i.i67, 64 + %.sroa.0.0.insert.ext.i.i69 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i70 = or disjoint i128 %.sroa.2.0.insert.shift.i.i68, %.sroa.0.0.insert.ext.i.i69 + br label %68 -68: ; preds = %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit - %69 = getelementptr inbounds nuw i8, ptr %4, i64 16 - %70 = load i32, ptr %69, align 8, !tbaa !498 - %71 = icmp sle i32 %70, %65 - %72 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %71, i1 %72, i1 false - br i1 %or.cond, label %73, label %77 +68: ; preds = %66, %65 + %.03.i.i71 = phi i128 [ %.sroa.0.0.insert.insert.i.i70, %65 ], [ %68, %66 ] + %.0.i.i72 = phi i32 [ 0, %65 ], [ %67, %66 ] + %67 = add nuw nsw i32 %.0.i.i72, 1 + %68 = lshr i128 %.03.i.i71, 3 + %.not.i.i73 = icmp ult i128 %.03.i.i71, 8 + br i1 %.not.i.i73, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %66, !llvm.loop !584 + +_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %66 + %69 = and i64 %15, 8192 + %.not = icmp eq i64 %69, 0 + br i1 %.not, label %80, label %70 + +70: ; preds = %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit + %71 = getelementptr inbounds nuw i8, ptr %4, i64 16 + %72 = load i32, ptr %71, align 8, !tbaa !498 + %73 = icmp sle i32 %72, %67 + %74 = or i64 %2, %1 + %75 = icmp ne i64 %74, 0 + %or.cond = and i1 %75, %73 + br i1 %or.cond, label %76, label %80 -73: ; preds = %68 +73: ; preds = %70 %.not.i74 = icmp eq i32 %3, 0 %74 = select i1 %.not.i74, i32 48, i32 12288 %75 = or i32 %74, %3 @@ -24841,9 +24853,9 @@ _ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader store i32 %76, ptr %8, align 4, !tbaa !36 br label %77 -77: ; preds = %73, %68, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit - %78 = phi i32 [ %76, %73 ], [ %3, %68 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] - %79 = zext nneg i32 %65 to i64 +77: ; preds = %73, %70, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit + %78 = phi i32 [ %76, %76 ], [ %3, %70 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] + %79 = zext nneg i32 %67 to i64 %80 = icmp samesign ugt i32 %.0.i.i72, 499 br i1 %80, label %81, label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 @@ -24859,13 +24871,13 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread: ; preds = %81 br label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread - %83 = phi ptr [ %82, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread ], [ %14, %77 ] + %83 = phi ptr [ %82, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75.thread ], [ %14, %80 ] store i64 %79, ptr %13, align 8, !tbaa !409 %84 = getelementptr inbounds nuw i8, ptr %83, i64 %79 br label %.split.us.i.i.i .split.us.i.i.i: ; preds = %.split.us.i.i.i, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 - %.012.us.i.i.i = phi i128 [ %89, %.split.us.i.i.i ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] + %.012.us.i.i.i = phi i128 [ %89, %.split.us.i.i.i ], [ %.sroa.0.0.insert.insert.i.i70, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] %.0.us.i.i.i = phi ptr [ %88, %.split.us.i.i.i ], [ %84, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75 ] %85 = trunc i128 %.012.us.i.i.i to i8 %86 = and i8 %85, 7 @@ -24879,7 +24891,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3 90: ; preds = %6 %91 = and i64 %15, 8192 %.not144 = icmp eq i64 %91, 0 - br i1 %.not144, label %99, label %92 + br i1 %.not144, label %102, label %92 92: ; preds = %90 %93 = and i64 %15, 4096 @@ -24891,22 +24903,26 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i75: ; preds = %77, %_ZN3fmt3 %97 = or i32 %96, %3 %98 = add i32 %97, 33554432 store i32 %98, ptr %8, align 4, !tbaa !36 - br label %99 - -99: ; preds = %92, %90 - %100 = phi i32 [ %98, %92 ], [ %3, %90 ] - br label %101 + br label %102 -101: ; preds = %101, %99 - %.03.i.i101 = phi i128 [ %.sroa.053.0.insert.insert, %99 ], [ %103, %101 ] - %.0.i.i102 = phi i32 [ 0, %99 ], [ %102, %101 ] - %102 = add nuw nsw i32 %.0.i.i102, 1 - %103 = lshr i128 %.03.i.i101, 1 +101: ; preds = %95, %93 + %.03.i.i101 = phi i32 [ %101, %95 ], [ %3, %93 ] + %.sroa.2.0.insert.ext.i.i97 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i98 = shl nuw i128 %.sroa.2.0.insert.ext.i.i97, 64 + %.sroa.0.0.insert.ext.i.i99 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i100 = or disjoint i128 %.sroa.2.0.insert.shift.i.i98, %.sroa.0.0.insert.ext.i.i99 + br label %104 + +104: ; preds = %104, %102 + %.03.i.i101 = phi i128 [ %.sroa.0.0.insert.insert.i.i100, %102 ], [ %106, %104 ] + %.0.i.i102 = phi i32 [ 0, %102 ], [ %105, %104 ] + %105 = add nuw nsw i32 %.0.i.i102, 1 + %106 = lshr i128 %.03.i.i101, 1 %.not.i.i103 = icmp ult i128 %.03.i.i101, 2 - br i1 %.not.i.i103, label %_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit, label %101, !llvm.loop !585 + br i1 %.not.i.i103, label %_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit, label %104, !llvm.loop !585 -_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit: ; preds = %101 - %104 = zext nneg i32 %102 to i64 +_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit: ; preds = %104 + %104 = zext nneg i32 %105 to i64 %105 = icmp samesign ugt i32 %.0.i.i102, 499 br i1 %105, label %106, label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 @@ -24937,7 +24953,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104: ; preds = %_ZN3fmt3v116 br label %.split.us.i.i.i112 .split.us.i.i.i112: ; preds = %.split.us.i.i.i112, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 - %.012.us.i.i.i113 = phi i128 [ %115, %.split.us.i.i.i112 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] + %.012.us.i.i.i113 = phi i128 [ %115, %.split.us.i.i.i112 ], [ %.sroa.0.0.insert.insert.i.i100, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] %.0.us.i.i.i114 = phi ptr [ %114, %.split.us.i.i.i112 ], [ %110, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i104 ] %111 = trunc i128 %.012.us.i.i.i113 to i8 %112 = and i8 %111, 1 @@ -24965,8 +24981,8 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %154 .loopexit: ; preds = %.split.us.i.i.i, %.split.i.i.i, %.split.us.i.i.i112, %_ZN3fmt3v116detail12count_digitsEo.exit - %123 = phi i32 [ %3, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %100, %.split.us.i.i.i112 ], [ %48, %.split.i.i.i ], [ %78, %.split.us.i.i.i ] - %.0 = phi i32 [ %.012.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %102, %.split.us.i.i.i112 ], [ %50, %.split.i.i.i ], [ %65, %.split.us.i.i.i ] + %123 = phi i32 [ %3, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %103, %.split.us.i.i.i112 ], [ %48, %.split.i.i.i ], [ %78, %.split.us.i.i.i ] + %.0 = phi i32 [ %.012.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %105, %.split.us.i.i.i112 ], [ %50, %.split.i.i.i ], [ %67, %.split.us.i.i.i ] %124 = lshr i32 %123, 24 %125 = add i32 %124, %.0 %126 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -24983,9 +24999,9 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %134 134: ; preds = %144, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %145, %144 ] - %.sroa.0.07.i = phi ptr [ %129, %.lr.ph.i ], [ %.sroa.0.1.i, %144 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %142, %144 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %145, %147 ] + %.sroa.0.07.i = phi ptr [ %129, %.lr.ph.i ], [ %.sroa.0.1.i, %147 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %142, %147 ] %135 = icmp eq ptr %.sroa.0.07.i, %132 br i1 %135, label %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i, label %136 @@ -25004,8 +25020,8 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = %139, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %137, %139 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %140, %139 ], [ %132, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %137, %142 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %140, %142 ], [ %132, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] %141 = sext i8 %.sink.i.i to i32 %142 = add nsw i32 %.sroa.5.06.i, %141 %143 = icmp sgt i32 %.0, %142 @@ -25016,7 +25032,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = br label %134 _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %136, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i, %.loopexit - %.0.lcssa.i = phi i32 [ 0, %.loopexit ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %136 ] + %.0.lcssa.i = phi i32 [ 0, %.loopexit ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %139 ] %146 = add i32 %125, %.0.lcssa.i %147 = zext i32 %146 to i64 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #16 @@ -25026,7 +25042,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %136, %149 = getelementptr inbounds nuw i8, ptr %10, i64 16 store ptr %9, ptr %149, align 8, !tbaa !560 %150 = invoke ptr @_ZN3fmt3v116detail12write_paddedIcLNS0_5alignE2ENS0_14basic_appenderIcEEZNS1_9write_intIS5_ocEET_S7_T0_jRKNS0_12format_specsERKNS1_14digit_groupingIT1_EEEUlS5_E_EESD_SD_SB_mmOT2_(ptr %0, ptr noundef nonnull align 8 dereferenceable(20) %4, i64 noundef %147, i64 noundef %147, ptr noundef nonnull align 8 dereferenceable(24) %10) - to label %151 unwind label %152 + to label %154 unwind label %152 151: ; preds = %_ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #16 @@ -25039,7 +25055,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %136, br label %157 154: ; preds = %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit, %151 - %.sroa.056.0 = phi ptr [ %150, %151 ], [ %122, %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit ] + %.sroa.056.0 = phi ptr [ %150, %154 ], [ %122, %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit ] %155 = load ptr, ptr %9, align 8, !tbaa !407 %.not.i.i134 = icmp eq ptr %155, %14 br i1 %.not.i.i134, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit, label %156 @@ -25053,7 +25069,7 @@ _ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit: ; p ret ptr %.sroa.056.0 157: ; preds = %152, %36 - %.pn.pn = phi { ptr, i32 } [ %37, %36 ], [ %153, %152 ] + %.pn.pn = phi { ptr, i32 } [ %37, %36 ], [ %153, %155 ] %158 = load ptr, ptr %9, align 8, !tbaa !407 %.not.i.i135 = icmp eq ptr %158, %14 br i1 %.not.i.i135, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev.exit136, label %159 diff --git a/bench/llvm/optimized/X86InstrInfo.ll b/bench/llvm/optimized/X86InstrInfo.ll index a2dc9e9a9ad..97699704e77 100644 --- a/bench/llvm/optimized/X86InstrInfo.ll +++ b/bench/llvm/optimized/X86InstrInfo.ll @@ -12043,13 +12043,12 @@ define dso_local noundef ptr @_ZN4llvm3X8619getConstantFromPoolERKNS_12MachineIn %22 = getelementptr inbounds nuw i8, ptr %17, i64 24 %23 = load i32, ptr %22, align 8, !tbaa !240 %24 = sext i32 %23 to i64 - %25 = shl nsw i64 %24, 32 - %26 = getelementptr inbounds nuw i8, ptr %17, i64 4 - %27 = load i32, ptr %26, align 4, !tbaa !240 - %28 = zext i32 %27 to i64 - %29 = or disjoint i64 %25, %28 - %.not = icmp eq i64 %29, 0 - br i1 %.not, label %30, label %.critedge + %25 = getelementptr inbounds nuw i8, ptr %17, i64 4 + %26 = load i32, ptr %25, align 4, !tbaa !240 + %27 = zext i32 %26 to i64 + %28 = or i64 %27, %24 + %.not = icmp eq i64 %28, 0 + br i1 %.not, label %29, label %.critedge 30: ; preds = %21 %31 = getelementptr inbounds nuw i8, ptr %0, i64 24 @@ -12072,7 +12071,7 @@ define dso_local noundef ptr @_ZN4llvm3X8619getConstantFromPoolERKNS_12MachineIn br label %.critedge .critedge: ; preds = %2, %30, %21, %14, %11 - %.0 = phi ptr [ null, %11 ], [ %.2, %30 ], [ null, %21 ], [ null, %14 ], [ null, %2 ] + %.0 = phi ptr [ null, %11 ], [ %.2, %29 ], [ null, %21 ], [ null, %14 ], [ null, %2 ] ret ptr %.0 } diff --git a/bench/llvm/optimized/blake3.ll b/bench/llvm/optimized/blake3.ll index f9ad42e52c9..a61a1639b57 100644 --- a/bench/llvm/optimized/blake3.ll +++ b/bench/llvm/optimized/blake3.ll @@ -2053,14 +2053,11 @@ output_root_bytes.exit: ; preds = %35 call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %9) #10 %45 = getelementptr inbounds nuw i8, ptr %0, i64 137 %46 = load i8, ptr %45, align 1, !tbaa !11 - %47 = zext i8 %46 to i64 - %48 = shl nuw nsw i64 %47, 6 - %49 = getelementptr inbounds nuw i8, ptr %0, i64 136 - %50 = load i8, ptr %49, align 8, !tbaa !12 - %51 = zext i8 %50 to i64 - %52 = or i64 %48, %51 - %.not = icmp eq i64 %52, 0 - br i1 %.not, label %66, label %.thread + %47 = getelementptr inbounds nuw i8, ptr %0, i64 136 + %48 = load i8, ptr %47, align 8, !tbaa !12 + %49 = or i8 %48, %46 + %.not = icmp eq i8 %49, 0 + br i1 %.not, label %63, label %.thread .thread: ; preds = %44 %53 = getelementptr inbounds nuw i8, ptr %0, i64 32 @@ -2080,7 +2077,7 @@ output_root_bytes.exit: ; preds = %35 %63 = getelementptr inbounds nuw i8, ptr %9, i64 32 store i64 %62, ptr %63, align 8, !tbaa !69 %64 = getelementptr inbounds nuw i8, ptr %9, i64 104 - store i8 %50, ptr %64, align 8, !tbaa !9 + store i8 %48, ptr %64, align 8, !tbaa !9 %65 = getelementptr inbounds nuw i8, ptr %9, i64 105 store i8 %59, ptr %65, align 1, !tbaa !9 br label %.lr.ph @@ -2107,13 +2104,13 @@ output_root_bytes.exit: ; preds = %35 br i1 %.not2350, label %._crit_edge, label %.lr.ph .lr.ph: ; preds = %.thread, %66 - %78 = phi ptr [ %65, %.thread ], [ %77, %66 ] - %79 = phi ptr [ %64, %.thread ], [ %76, %66 ] - %80 = phi ptr [ %63, %.thread ], [ %75, %66 ] - %.070 = phi i64 [ %54, %.thread ], [ %68, %66 ] - %.sink69 = phi i8 [ %59, %.thread ], [ %74, %66 ] - %.sink6068 = phi i8 [ %50, %.thread ], [ 64, %66 ] - %.sink6167 = phi i64 [ %62, %.thread ], [ 0, %66 ] + %78 = phi ptr [ %65, %.thread ], [ %77, %63 ] + %79 = phi ptr [ %64, %.thread ], [ %76, %63 ] + %80 = phi ptr [ %63, %.thread ], [ %75, %63 ] + %.070 = phi i64 [ %54, %.thread ], [ %68, %63 ] + %.sink69 = phi i8 [ %59, %.thread ], [ %74, %63 ] + %.sink6068 = phi i8 [ %48, %.thread ], [ 64, %63 ] + %.sink6167 = phi i64 [ %62, %.thread ], [ 0, %63 ] %81 = getelementptr inbounds nuw i8, ptr %0, i64 145 %82 = getelementptr inbounds nuw i8, ptr %9, i64 40 %83 = getelementptr inbounds nuw i8, ptr %7, i64 4 @@ -2159,10 +2156,10 @@ output_root_bytes.exit: ; preds = %35 br label %91 91: ; preds = %.lr.ph, %91 - %92 = phi i8 [ %.sink69, %.lr.ph ], [ %163, %91 ] - %93 = phi i64 [ %.sink6167, %.lr.ph ], [ 0, %91 ] - %94 = phi i8 [ %.sink6068, %.lr.ph ], [ 64, %91 ] - %.151 = phi i64 [ %.070, %.lr.ph ], [ %95, %91 ] + %92 = phi i8 [ %.sink69, %.lr.ph ], [ %163, %88 ] + %93 = phi i64 [ %.sink6167, %.lr.ph ], [ 0, %88 ] + %94 = phi i8 [ %.sink6068, %.lr.ph ], [ 64, %88 ] + %.151 = phi i64 [ %.070, %.lr.ph ], [ %95, %88 ] %95 = add i64 %.151, -1 %96 = shl i64 %95, 5 %97 = getelementptr inbounds nuw [1760 x i8], ptr %81, i64 0, i64 %96 @@ -2280,8 +2277,8 @@ output_root_bytes.exit: ; preds = %35 br i1 %.not23, label %._crit_edge, label %91, !llvm.loop !71 ._crit_edge: ; preds = %91, %66 - %164 = phi ptr [ %77, %66 ], [ %78, %91 ] - %165 = phi ptr [ %76, %66 ], [ %79, %91 ] + %164 = phi ptr [ %77, %63 ], [ %78, %88 ] + %165 = phi ptr [ %76, %63 ], [ %79, %88 ] %166 = lshr i64 %1, 6 %167 = and i64 %1, 63 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #10 @@ -2289,10 +2286,10 @@ output_root_bytes.exit: ; preds = %35 br label %169 169: ; preds = %._crit_edge, %169 - %.020.i2755 = phi ptr [ %2, %._crit_edge ], [ %175, %169 ] - %.021.i2654 = phi i64 [ %167, %._crit_edge ], [ 0, %169 ] - %.022.i2553 = phi i64 [ %166, %._crit_edge ], [ %177, %169 ] - %.023.i2452 = phi i64 [ %3, %._crit_edge ], [ %176, %169 ] + %.020.i2755 = phi ptr [ %2, %._crit_edge ], [ %175, %166 ] + %.021.i2654 = phi i64 [ %167, %._crit_edge ], [ 0, %166 ] + %.022.i2553 = phi i64 [ %166, %._crit_edge ], [ %177, %166 ] + %.023.i2452 = phi i64 [ %3, %._crit_edge ], [ %176, %166 ] %170 = load i8, ptr %165, align 8, !tbaa !19 %171 = load i8, ptr %164, align 1, !tbaa !25 %172 = or i8 %171, 8 diff --git a/bench/lodepng/optimized/lodepng_util.ll b/bench/lodepng/optimized/lodepng_util.ll index 5bc646f1ffa..cd9388b8d9c 100644 --- a/bench/lodepng/optimized/lodepng_util.ll +++ b/bench/lodepng/optimized/lodepng_util.ll @@ -2921,9 +2921,9 @@ _ZN7lodepngL18decodeICC15Fixed16EPKhmPm.exit: ; preds = %3 br i1 %.not225.not, label %.critedge243, label %.preheader .preheader: ; preds = %_ZN7lodepngL18decodeICC15Fixed16EPKhmPm.exit - %131 = or disjoint i64 %123, %119 - %132 = or disjoint i64 %131, %127 - %133 = or disjoint i64 %132, %130 + %131 = or i64 %118, %122 + %132 = or i64 %131, %126 + %133 = or i64 %132, %130 %.not411 = icmp eq i64 %133, 0 br i1 %.not411, label %.critedge243, label %.lr.ph402 diff --git a/bench/meshlab/optimized/gltf_loader.ll b/bench/meshlab/optimized/gltf_loader.ll index 6242ded1316..987b4228acd 100644 --- a/bench/meshlab/optimized/gltf_loader.ll +++ b/bench/meshlab/optimized/gltf_loader.ll @@ -14370,12 +14370,9 @@ _ZL13stbi__get16leP13stbi__context.exit: ; preds = %190, %193, %_ZL19st %213 = phi ptr [ %187, %190 ], [ %.sink.i.i5.i, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i ], [ %187, %193 ] %214 = phi ptr [ %191, %190 ], [ %212, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i ], [ %188, %193 ] %.0.i6.i = phi i8 [ %192, %190 ], [ %211, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i ], [ 0, %193 ] - %215 = zext i8 %.0.i.i to i32 - %216 = zext i8 %.0.i6.i to i32 - %217 = shl nuw nsw i32 %216, 8 - %218 = or disjoint i32 %217, %215 - %219 = icmp eq i32 %218, 0 - br i1 %219, label %_ZL10stbi__get8P13stbi__context.exit79.thread, label %220 + %215 = or i8 %.0.i6.i, %.0.i.i + %216 = icmp eq i8 %215, 0 + br i1 %216, label %_ZL10stbi__get8P13stbi__context.exit79.thread, label %217 220: ; preds = %_ZL13stbi__get16leP13stbi__context.exit %221 = icmp ult ptr %214, %213 @@ -14401,7 +14398,7 @@ _ZL13stbi__get16leP13stbi__context.exit: ; preds = %190, %193, %_ZL19st %233 = getelementptr inbounds nuw i8, ptr %0, i64 56 %234 = getelementptr inbounds nuw i8, ptr %0, i64 52 %235 = load i32, ptr %234, align 4 - %236 = tail call noundef i32 %230(ptr noundef %232, ptr noundef nonnull %233, i32 noundef %235) + %236 = tail call noundef i32 %227(ptr noundef %232, ptr noundef nonnull %233, i32 noundef %235) %237 = icmp eq i32 %236, 0 br i1 %237, label %238, label %240 @@ -14418,17 +14415,17 @@ _ZL13stbi__get16leP13stbi__context.exit: ; preds = %190, %193, %_ZL19st br label %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92 _ZL19stbi__refill_bufferP13stbi__context.exit.i.i92: ; preds = %240, %238 - %243 = phi i8 [ 0, %238 ], [ %.pre.i.i91, %240 ] - %.sink.i.i.i93 = phi ptr [ %239, %238 ], [ %242, %240 ] + %243 = phi i8 [ 0, %235 ], [ %.pre.i.i91, %237 ] + %.sink.i.i.i93 = phi ptr [ %239, %235 ], [ %242, %237 ] store ptr %.sink.i.i.i93, ptr %4, align 8 %244 = getelementptr inbounds nuw i8, ptr %0, i64 57 store ptr %244, ptr %2, align 8 br label %_ZL10stbi__get8P13stbi__context.exit.i94 _ZL10stbi__get8P13stbi__context.exit.i94: ; preds = %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92, %225, %222 - %245 = phi ptr [ %213, %222 ], [ %.sink.i.i.i93, %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92 ], [ %213, %225 ] - %246 = phi ptr [ %223, %222 ], [ %244, %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92 ], [ %214, %225 ] - %.0.i.i95 = phi i8 [ %224, %222 ], [ %243, %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92 ], [ 0, %225 ] + %245 = phi ptr [ %213, %219 ], [ %.sink.i.i.i93, %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92 ], [ %213, %222 ] + %246 = phi ptr [ %223, %219 ], [ %244, %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92 ], [ %214, %222 ] + %.0.i.i95 = phi i8 [ %224, %219 ], [ %243, %_ZL19stbi__refill_bufferP13stbi__context.exit.i.i92 ], [ 0, %222 ] %247 = icmp ult ptr %246, %245 br i1 %247, label %248, label %251 @@ -14452,7 +14449,7 @@ _ZL10stbi__get8P13stbi__context.exit.i94: ; preds = %_ZL19stbi__refill_b %259 = getelementptr inbounds nuw i8, ptr %0, i64 56 %260 = getelementptr inbounds nuw i8, ptr %0, i64 52 %261 = load i32, ptr %260, align 4 - %262 = tail call noundef i32 %256(ptr noundef %258, ptr noundef nonnull %259, i32 noundef %261) + %262 = tail call noundef i32 %253(ptr noundef %258, ptr noundef nonnull %259, i32 noundef %261) %263 = icmp eq i32 %262, 0 br i1 %263, label %264, label %266 @@ -14469,74 +14466,71 @@ _ZL10stbi__get8P13stbi__context.exit.i94: ; preds = %_ZL19stbi__refill_b br label %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 _ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98: ; preds = %266, %264 - %269 = phi i8 [ 0, %264 ], [ %.pre.i3.i97, %266 ] - %.sink.i.i5.i99 = phi ptr [ %265, %264 ], [ %268, %266 ] + %269 = phi i8 [ 0, %261 ], [ %.pre.i3.i97, %263 ] + %.sink.i.i5.i99 = phi ptr [ %265, %261 ], [ %268, %263 ] store ptr %.sink.i.i5.i99, ptr %4, align 8 %270 = getelementptr inbounds nuw i8, ptr %0, i64 57 store ptr %270, ptr %2, align 8 br label %_ZL13stbi__get16leP13stbi__context.exit101 _ZL13stbi__get16leP13stbi__context.exit101: ; preds = %248, %251, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 - %271 = phi ptr [ %245, %248 ], [ %.sink.i.i5.i99, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 ], [ %245, %251 ] - %272 = phi ptr [ %249, %248 ], [ %270, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 ], [ %246, %251 ] - %.0.i6.i100 = phi i8 [ %250, %248 ], [ %269, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 ], [ 0, %251 ] - %273 = zext i8 %.0.i.i95 to i32 - %274 = zext i8 %.0.i6.i100 to i32 - %275 = shl nuw nsw i32 %274, 8 - %276 = or disjoint i32 %275, %273 - %277 = icmp eq i32 %276, 0 - br i1 %277, label %_ZL10stbi__get8P13stbi__context.exit79.thread, label %278 - -278: ; preds = %_ZL13stbi__get16leP13stbi__context.exit101 - %279 = icmp ult ptr %272, %271 - br i1 %279, label %280, label %283 - -280: ; preds = %278 - %281 = getelementptr inbounds nuw i8, ptr %272, i64 1 - store ptr %281, ptr %2, align 8 - %282 = load i8, ptr %272, align 1 + %271 = phi ptr [ %245, %245 ], [ %.sink.i.i5.i99, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 ], [ %245, %248 ] + %272 = phi ptr [ %249, %245 ], [ %270, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 ], [ %246, %248 ] + %.0.i6.i100 = phi i8 [ %250, %245 ], [ %269, %_ZL19stbi__refill_bufferP13stbi__context.exit.i4.i98 ], [ 0, %248 ] + %270 = or i8 %.0.i6.i100, %.0.i.i95 + %271 = icmp eq i8 %270, 0 + br i1 %271, label %_ZL10stbi__get8P13stbi__context.exit79.thread, label %272 + +272:; preds = %_ZL13stbi__get16leP13stbi__context.exit101 + %273 = icmp ult ptr %269, %271 + br i1 %273, label %274, label %277 + +274: ; preds = %272 + %275 = getelementptr inbounds nuw i8, ptr %269, i64 1 + store ptr %275, ptr %2, align 8 + %276 = load i8, ptr %269, align 1 br label %_ZL10stbi__get8P13stbi__context.exit107 -283: ; preds = %278 +283: ; preds = %272 %284 = getelementptr inbounds nuw i8, ptr %0, i64 48 %285 = load i32, ptr %284, align 8 %.not.i102 = icmp eq i32 %285, 0 - br i1 %.not.i102, label %_ZL10stbi__get8P13stbi__context.exit107, label %286 + br i1 %.not.i102, label %_ZL10stbi__get8P13stbi__context.exit107, label %280 -286: ; preds = %283 - %287 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %288 = load ptr, ptr %287, align 8 - %289 = getelementptr inbounds nuw i8, ptr %0, i64 40 - %290 = load ptr, ptr %289, align 8 - %291 = getelementptr inbounds nuw i8, ptr %0, i64 56 - %292 = getelementptr inbounds nuw i8, ptr %0, i64 52 - %293 = load i32, ptr %292, align 4 - %294 = tail call noundef i32 %288(ptr noundef %290, ptr noundef nonnull %291, i32 noundef %293) - %295 = icmp eq i32 %294, 0 - br i1 %295, label %296, label %298 - -296: ; preds = %286 - store i32 0, ptr %284, align 8 - %297 = getelementptr inbounds nuw i8, ptr %0, i64 57 - store i8 0, ptr %291, align 1 +296: ; preds = %283 + %281 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %282 = load ptr, ptr %281, align 8 + %283 = getelementptr inbounds nuw i8, ptr %0, i64 40 + %284 = load ptr, ptr %283, align 8 + %285 = getelementptr inbounds nuw i8, ptr %0, i64 56 + %286 = getelementptr inbounds nuw i8, ptr %0, i64 52 + %287 = load i32, ptr %286, align 4 + %288 = tail call noundef i32 %282(ptr noundef %284, ptr noundef nonnull %285, i32 noundef %287) + %289 = icmp eq i32 %288, 0 + br i1 %289, label %290, label %292 + +290: ; preds = %280 + store i32 0, ptr %278, align 8 + %291 = getelementptr inbounds nuw i8, ptr %0, i64 57 + store i8 0, ptr %285, align 1 br label %_ZL19stbi__refill_bufferP13stbi__context.exit.i104 -298: ; preds = %286 - %299 = sext i32 %294 to i64 - %300 = getelementptr inbounds i8, ptr %291, i64 %299 - %.pre.i103 = load i8, ptr %291, align 1 +298: ; preds = %280 + %299 = sext i32 %288 to i64 + %300 = getelementptr inbounds i8, ptr %285, i64 %299 + %.pre.i103 = load i8, ptr %285, align 1 br label %_ZL19stbi__refill_bufferP13stbi__context.exit.i104 -_ZL19stbi__refill_bufferP13stbi__context.exit.i104: ; preds = %298, %296 - %301 = phi i8 [ 0, %296 ], [ %.pre.i103, %298 ] - %.sink.i.i105 = phi ptr [ %297, %296 ], [ %300, %298 ] +_ZL19stbi__refill_bufferP13stbi__context.exit.i104: ; preds = %298, %290 + %301 = phi i8 [ 0, %290 ], [ %.pre.i103, %292 ] + %.sink.i.i105 = phi ptr [ %291, %290 ], [ %300, %292 ] store ptr %.sink.i.i105, ptr %4, align 8 %302 = getelementptr inbounds nuw i8, ptr %0, i64 57 store ptr %302, ptr %2, align 8 br label %_ZL10stbi__get8P13stbi__context.exit107 -_ZL10stbi__get8P13stbi__context.exit107: ; preds = %280, %283, %_ZL19stbi__refill_bufferP13stbi__context.exit.i104 - %.0.i106 = phi i8 [ %282, %280 ], [ %301, %_ZL19stbi__refill_bufferP13stbi__context.exit.i104 ], [ 0, %283 ] +_ZL10stbi__get8P13stbi__context.exit107: ; preds = %274, %283, %_ZL19stbi__refill_bufferP13stbi__context.exit.i104 + %.0.i106 = phi i8 [ %276, %274 ], [ %301, %_ZL19stbi__refill_bufferP13stbi__context.exit.i104 ], [ 0, %277 ] br i1 %.not, label %305, label %switch.early.test switch.early.test: ; preds = %_ZL10stbi__get8P13stbi__context.exit107 @@ -14559,7 +14553,7 @@ switch.early.test: ; preds = %_ZL10stbi__get8P13s br label %_ZL10stbi__get8P13stbi__context.exit79.thread _ZL10stbi__get8P13stbi__context.exit79.thread: ; preds = %108, %switch.early.test, %305, %_ZL10stbi__get8P13stbi__context.exit79, %_ZL13stbi__get16leP13stbi__context.exit101, %_ZL13stbi__get16leP13stbi__context.exit, %143, %84, %_ZL10stbi__get8P13stbi__context.exit65, %306 - %.0 = phi i32 [ 0, %_ZL10stbi__get8P13stbi__context.exit65 ], [ 0, %84 ], [ 0, %_ZL10stbi__get8P13stbi__context.exit79 ], [ 0, %_ZL13stbi__get16leP13stbi__context.exit ], [ 0, %_ZL13stbi__get16leP13stbi__context.exit101 ], [ 0, %305 ], [ 1, %306 ], [ 0, %143 ], [ %304, %switch.early.test ], [ 0, %108 ] + %.0 = phi i32 [ 0, %_ZL10stbi__get8P13stbi__context.exit65 ], [ 0, %84 ], [ 0, %_ZL10stbi__get8P13stbi__context.exit79 ], [ 0, %_ZL13stbi__get16leP13stbi__context.exit ], [ 0, %_ZL13stbi__get16leP13stbi__context.exit101 ], [ 0, %299 ], [ 1, %300 ], [ 0, %143 ], [ %304, %switch.early.test ], [ 0, %108 ] %307 = getelementptr inbounds nuw i8, ptr %0, i64 200 %308 = load ptr, ptr %307, align 8 store ptr %308, ptr %2, align 8 diff --git a/bench/mold/optimized/arch-m68k.ll b/bench/mold/optimized/arch-m68k.ll index 01b95d3255b..28ae74ac246 100644 --- a/bench/mold/optimized/arch-m68k.ll +++ b/bench/mold/optimized/arch-m68k.ll @@ -2335,54 +2335,58 @@ define linkonce_odr dso_local { ptr, i64 } @_ZN4mold12InputSectionINS_4M68KEE12g %24 = load i8, ptr %23, align 1, !tbaa !258 %25 = zext i8 %24 to i16 %26 = or disjoint i16 %22, %25 - switch i16 %26, label %52 [ - i16 -15, label %184 - i16 -14, label %184 - i16 0, label %184 - i16 -1, label %27 - ] + %.off = add i16 %26, 15 + %switch = icmp ult i16 %.off, 2 + %27 = or i8 %24, %20 + %28 = icmp eq i8 %27, 0 + %or.cond = or i1 %28, %switch + br i1 %or.cond, label %188, label %29 27: ; preds = %3 - %28 = getelementptr inbounds nuw i8, ptr %4, i64 696 - %29 = ptrtoint ptr %18 to i64 - %30 = ptrtoint ptr %15 to i64 - %31 = sub i64 %29, %30 - %32 = load ptr, ptr %28, align 8, !tbaa !378 - %33 = ashr exact i64 %31, 2 - %34 = getelementptr inbounds nuw i8, ptr %32, i64 %33 - %35 = load i8, ptr %34, align 1, !tbaa !258 - %36 = zext i8 %35 to i64 - %37 = shl nuw nsw i64 %36, 24 - %38 = getelementptr inbounds nuw i8, ptr %34, i64 1 + %30 = icmp eq i16 %26, -1 + br i1 %30, label %31, label %56 + +31:; preds = %29 + %32 = getelementptr inbounds nuw i8, ptr %4, i64 696 + %33 = ptrtoint ptr %18 to i64 + %34 = ptrtoint ptr %15 to i64 + %35 = sub i64 %33, %34 + %36 = load ptr, ptr %32, align 8, !tbaa !378 + %37 = ashr exact i64 %35, 2 + %38 = getelementptr inbounds nuw i8, ptr %36, i64 %37 %39 = load i8, ptr %38, align 1, !tbaa !258 %40 = zext i8 %39 to i64 - %41 = shl nuw nsw i64 %40, 16 - %42 = or disjoint i64 %41, %37 - %43 = getelementptr inbounds nuw i8, ptr %34, i64 2 - %44 = load i8, ptr %43, align 1, !tbaa !258 - %45 = zext i8 %44 to i64 - %46 = shl nuw nsw i64 %45, 8 - %47 = or disjoint i64 %42, %46 - %48 = getelementptr inbounds nuw i8, ptr %34, i64 3 - %49 = load i8, ptr %48, align 1, !tbaa !258 - %50 = zext i8 %49 to i64 - %51 = or disjoint i64 %47, %50 + %41 = shl nuw nsw i64 %40, 24 + %42 = getelementptr inbounds nuw i8, ptr %38, i64 1 + %43 = load i8, ptr %42, align 1, !tbaa !258 + %44 = zext i8 %43 to i64 + %45 = shl nuw nsw i64 %44, 16 + %46 = or disjoint i64 %45, %41 + %47 = getelementptr inbounds nuw i8, ptr %38, i64 2 + %48 = load i8, ptr %47, align 1, !tbaa !258 + %49 = zext i8 %48 to i64 + %50 = shl nuw nsw i64 %49, 8 + %51 = or disjoint i64 %46, %50 + %52 = getelementptr inbounds nuw i8, ptr %38, i64 3 + %53 = load i8, ptr %52, align 1, !tbaa !258 + %54 = zext i8 %53 to i64 + %55 = or disjoint i64 %51, %54 br label %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit -52: ; preds = %3 +52: ; preds = %29 %53 = icmp eq i8 %20, -1 %54 = zext i16 %26 to i64 %spec.select.i = select i1 %53, i64 0, i64 %54 br label %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit -_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit: ; preds = %27, %52 - %.0.i = phi i64 [ %51, %27 ], [ %spec.select.i, %52 ] +_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit: ; preds = %31, %52 + %.0.i = phi i64 [ %55, %31 ], [ %spec.select.i, %56 ] %55 = getelementptr inbounds nuw i8, ptr %4, i64 352 %56 = load ptr, ptr %55, align 8, !tbaa !381 %57 = getelementptr inbounds nuw %"class.std::unique_ptr.327", ptr %56, i64 %.0.i %58 = load ptr, ptr %57, align 8, !tbaa !384 %.not = icmp eq ptr %58, null - br i1 %.not, label %184, label %59 + br i1 %.not, label %188, label %59 59: ; preds = %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit %60 = getelementptr inbounds nuw i8, ptr %18, i64 12 @@ -2390,156 +2394,156 @@ _ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit: ; preds = %27 %62 = and i8 %61, 15 %63 = icmp eq i8 %62, 3 %64 = getelementptr inbounds nuw i8, ptr %18, i64 4 - %65 = load i8, ptr %64, align 1, !tbaa !258 - %66 = zext i8 %65 to i64 - %67 = shl nuw nsw i64 %66, 24 - %68 = getelementptr inbounds nuw i8, ptr %18, i64 5 %69 = load i8, ptr %68, align 1, !tbaa !258 %70 = zext i8 %69 to i64 - %71 = shl nuw nsw i64 %70, 16 - %72 = or disjoint i64 %71, %67 - %73 = getelementptr inbounds nuw i8, ptr %18, i64 6 - %74 = load i8, ptr %73, align 1, !tbaa !258 - %75 = zext i8 %74 to i64 - %76 = shl nuw nsw i64 %75, 8 - %77 = or disjoint i64 %72, %76 - %78 = getelementptr inbounds nuw i8, ptr %18, i64 7 - %79 = load i8, ptr %78, align 1, !tbaa !258 - %80 = zext i8 %79 to i64 - %81 = or disjoint i64 %77, %80 - br i1 %63, label %82, label %133 - -82: ; preds = %59 - %83 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %84 = load i8, ptr %83, align 1, !tbaa !258 - %85 = zext i8 %84 to i32 - %86 = shl nuw i32 %85, 24 - %87 = getelementptr inbounds nuw i8, ptr %2, i64 9 + %71 = shl nuw nsw i64 %70, 24 + %72 = getelementptr inbounds nuw i8, ptr %18, i64 5 + %73 = load i8, ptr %72, align 1, !tbaa !258 + %74 = zext i8 %73 to i64 + %75 = shl nuw nsw i64 %74, 16 + %76 = or disjoint i64 %75, %71 + %77 = getelementptr inbounds nuw i8, ptr %18, i64 6 + %78 = load i8, ptr %77, align 1, !tbaa !258 + %79 = zext i8 %78 to i64 + %80 = shl nuw nsw i64 %79, 8 + %81 = or disjoint i64 %76, %80 + %82 = getelementptr inbounds nuw i8, ptr %18, i64 7 + %83 = load i8, ptr %82, align 1, !tbaa !258 + %84 = zext i8 %83 to i64 + %85 = or disjoint i64 %81, %84 + br i1 %67, label %86, label %137 + +86:; preds = %59 + %87 = getelementptr inbounds nuw i8, ptr %2, i64 8 %88 = load i8, ptr %87, align 1, !tbaa !258 %89 = zext i8 %88 to i32 - %90 = shl nuw nsw i32 %89, 16 - %91 = or disjoint i32 %90, %86 - %92 = getelementptr inbounds nuw i8, ptr %2, i64 10 - %93 = load i8, ptr %92, align 1, !tbaa !258 - %94 = zext i8 %93 to i32 - %95 = shl nuw nsw i32 %94, 8 - %96 = or disjoint i32 %91, %95 - %97 = getelementptr inbounds nuw i8, ptr %2, i64 11 - %98 = load i8, ptr %97, align 1, !tbaa !258 - %99 = zext i8 %98 to i32 - %100 = or disjoint i32 %96, %99 - %101 = sext i32 %100 to i64 - %102 = add nsw i64 %81, %101 - %103 = getelementptr inbounds nuw i8, ptr %58, i64 48 - %104 = load ptr, ptr %103, align 8, !tbaa !386 - %105 = getelementptr inbounds nuw i8, ptr %58, i64 56 - %106 = load ptr, ptr %105, align 8, !tbaa !388 - %107 = ptrtoint ptr %104 to i64 - %108 = ptrtoint ptr %106 to i64 - %109 = sub i64 %108, %107 - %110 = ashr exact i64 %109, 2 - %111 = icmp sgt i64 %110, 0 - br i1 %111, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit - -_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i: ; preds = %82, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i - %.013.i.i.i = phi i64 [ %.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %110, %82 ] - %.sroa.011.012.i.i.i = phi ptr [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %104, %82 ] - %112 = lshr i64 %.013.i.i.i, 1 - %113 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i, i64 %112 - %114 = load i32, ptr %113, align 4, !tbaa !389 - %115 = zext i32 %114 to i64 - %116 = icmp slt i64 %102, %115 - %117 = getelementptr inbounds nuw i8, ptr %113, i64 4 - %118 = xor i64 %112, -1 - %119 = add nsw i64 %.013.i.i.i, %118 - %.sroa.011.1.i.i.i = select i1 %116, ptr %.sroa.011.012.i.i.i, ptr %117 - %.1.i.i.i = select i1 %116, i64 %112, i64 %119 - %120 = icmp sgt i64 %.1.i.i.i, 0 - br i1 %120, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit, !llvm.loop !390 - -_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit: ; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, %82 - %.sroa.011.0.lcssa.i.i.i = phi ptr [ %104, %82 ], [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ] - %121 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i, i64 -4 - %122 = ptrtoint ptr %121 to i64 - %123 = sub i64 %122, %107 - %124 = ashr exact i64 %123, 2 - %125 = getelementptr inbounds nuw i8, ptr %58, i64 8 - %126 = load ptr, ptr %125, align 8, !tbaa !391 - %127 = getelementptr inbounds nuw ptr, ptr %126, i64 %124 - %128 = getelementptr inbounds nuw i8, ptr %104, i64 %123 - %129 = load i32, ptr %128, align 4, !tbaa !389 - %130 = zext i32 %129 to i64 - %131 = sub nsw i64 %102, %130 - %132 = load ptr, ptr %127, align 8, !tbaa !394 - br label %184 - -133: ; preds = %59 - %134 = getelementptr inbounds nuw i8, ptr %58, i64 48 - %135 = load ptr, ptr %134, align 8, !tbaa !386 - %136 = getelementptr inbounds nuw i8, ptr %58, i64 56 - %137 = load ptr, ptr %136, align 8, !tbaa !388 - %138 = ptrtoint ptr %135 to i64 - %139 = ptrtoint ptr %137 to i64 - %140 = sub i64 %139, %138 - %141 = ashr exact i64 %140, 2 - %142 = icmp sgt i64 %141, 0 - br i1 %142, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 - -_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17: ; preds = %133, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 - %.013.i.i.i18 = phi i64 [ %.1.i.i.i23, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %141, %133 ] - %.sroa.011.012.i.i.i19 = phi ptr [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %135, %133 ] - %143 = lshr i64 %.013.i.i.i18, 1 - %144 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i19, i64 %143 - %145 = load i32, ptr %144, align 4, !tbaa !389 - %146 = zext i32 %145 to i64 - %147 = icmp samesign ult i64 %81, %146 - %148 = getelementptr inbounds nuw i8, ptr %144, i64 4 - %149 = xor i64 %143, -1 - %150 = add nsw i64 %.013.i.i.i18, %149 - %.sroa.011.1.i.i.i22 = select i1 %147, ptr %.sroa.011.012.i.i.i19, ptr %148 - %.1.i.i.i23 = select i1 %147, i64 %143, i64 %150 - %151 = icmp sgt i64 %.1.i.i.i23, 0 - br i1 %151, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24, !llvm.loop !390 - -_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24: ; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, %133 - %.sroa.011.0.lcssa.i.i.i14 = phi ptr [ %135, %133 ], [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ] - %152 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i14, i64 -4 - %153 = ptrtoint ptr %152 to i64 - %154 = sub i64 %153, %138 - %155 = ashr exact i64 %154, 2 - %156 = getelementptr inbounds nuw i8, ptr %58, i64 8 - %157 = load ptr, ptr %156, align 8, !tbaa !391 - %158 = getelementptr inbounds nuw ptr, ptr %157, i64 %155 - %159 = getelementptr inbounds nuw i8, ptr %135, i64 %154 - %160 = load i32, ptr %159, align 4, !tbaa !389 - %161 = zext i32 %160 to i64 - %162 = sub nsw i64 %81, %161 - %163 = load ptr, ptr %158, align 8, !tbaa !394 - %164 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %165 = load i8, ptr %164, align 1, !tbaa !258 - %166 = zext i8 %165 to i32 - %167 = shl nuw i32 %166, 24 - %168 = getelementptr inbounds nuw i8, ptr %2, i64 9 + %90 = shl nuw i32 %89, 24 + %91 = getelementptr inbounds nuw i8, ptr %2, i64 9 + %92 = load i8, ptr %91, align 1, !tbaa !258 + %93 = zext i8 %92 to i32 + %94 = shl nuw nsw i32 %93, 16 + %95 = or disjoint i32 %94, %90 + %96 = getelementptr inbounds nuw i8, ptr %2, i64 10 + %97 = load i8, ptr %96, align 1, !tbaa !258 + %98 = zext i8 %97 to i32 + %99 = shl nuw nsw i32 %98, 8 + %100 = or disjoint i32 %95, %99 + %101 = getelementptr inbounds nuw i8, ptr %2, i64 11 + %102 = load i8, ptr %101, align 1, !tbaa !258 + %103 = zext i8 %102 to i32 + %104 = or disjoint i32 %100, %103 + %105 = sext i32 %104 to i64 + %106 = add nsw i64 %85, %105 + %107 = getelementptr inbounds nuw i8, ptr %62, i64 48 + %108 = load ptr, ptr %107, align 8, !tbaa !386 + %109 = getelementptr inbounds nuw i8, ptr %62, i64 56 + %110 = load ptr, ptr %109, align 8, !tbaa !388 + %111 = ptrtoint ptr %108 to i64 + %112 = ptrtoint ptr %110 to i64 + %113 = sub i64 %112, %111 + %114 = ashr exact i64 %113, 2 + %115 = icmp sgt i64 %114, 0 + br i1 %115, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit + +_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i:; preds = %86, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i + %.013.i.i.i = phi i64 [ %.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %114, %86 ] + %.sroa.011.012.i.i.i = phi ptr [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %108, %86 ] + %116 = lshr i64 %.013.i.i.i, 1 + %117 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i, i64 %116 + %118 = load i32, ptr %117, align 4, !tbaa !389 + %119 = zext i32 %118 to i64 + %120 = icmp slt i64 %106, %119 + %121 = getelementptr inbounds nuw i8, ptr %117, i64 4 + %122 = xor i64 %116, -1 + %123 = add nsw i64 %.013.i.i.i, %122 + %.sroa.011.1.i.i.i = select i1 %120, ptr %.sroa.011.012.i.i.i, ptr %121 + %.1.i.i.i = select i1 %120, i64 %116, i64 %123 + %124 = icmp sgt i64 %.1.i.i.i, 0 + br i1 %124, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit, !llvm.loop !390 + +_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit:; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, %86 + %.sroa.011.0.lcssa.i.i.i = phi ptr [ %108, %86 ], [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ] + %125 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i, i64 -4 + %126 = ptrtoint ptr %125 to i64 + %127 = sub i64 %126, %111 + %128 = ashr exact i64 %127, 2 + %129 = getelementptr inbounds nuw i8, ptr %62, i64 8 + %130 = load ptr, ptr %129, align 8, !tbaa !391 + %131 = getelementptr inbounds nuw ptr, ptr %130, i64 %128 + %132 = getelementptr inbounds nuw i8, ptr %108, i64 %127 + %133 = load i32, ptr %132, align 4, !tbaa !389 + %134 = zext i32 %133 to i64 + %135 = sub nsw i64 %106, %134 + %136 = load ptr, ptr %131, align 8, !tbaa !394 + br label %188 + +137:; preds = %63 + %138 = getelementptr inbounds nuw i8, ptr %58, i64 48 + %139 = load ptr, ptr %138, align 8, !tbaa !386 + %140 = getelementptr inbounds nuw i8, ptr %62, i64 56 + %141 = load ptr, ptr %140, align 8, !tbaa !388 + %142 = ptrtoint ptr %139 to i64 + %143 = ptrtoint ptr %141 to i64 + %144 = sub i64 %143, %142 + %145 = ashr exact i64 %144, 2 + %146 = icmp sgt i64 %145, 0 + br i1 %146, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 + +_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17:; preds = %137, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 + %.013.i.i.i18 = phi i64 [ %.1.i.i.i23, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %145, %137 ] + %.sroa.011.012.i.i.i19 = phi ptr [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %139, %137 ] + %147 = lshr i64 %.013.i.i.i18, 1 + %148 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i19, i64 %147 + %149 = load i32, ptr %148, align 4, !tbaa !389 + %150 = zext i32 %149 to i64 + %151 = icmp samesign ult i64 %85, %150 + %152 = getelementptr inbounds nuw i8, ptr %148, i64 4 + %153 = xor i64 %147, -1 + %154 = add nsw i64 %.013.i.i.i18, %153 + %.sroa.011.1.i.i.i22 = select i1 %151, ptr %.sroa.011.012.i.i.i19, ptr %152 + %.1.i.i.i23 = select i1 %151, i64 %147, i64 %154 + %155 = icmp sgt i64 %.1.i.i.i23, 0 + br i1 %155, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24, !llvm.loop !390 + +_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24:; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, %137 + %.sroa.011.0.lcssa.i.i.i14 = phi ptr [ %139, %137 ], [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ] + %156 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i14, i64 -4 + %157 = ptrtoint ptr %156 to i64 + %158 = sub i64 %157, %142 + %159 = ashr exact i64 %158, 2 + %160 = getelementptr inbounds nuw i8, ptr %58, i64 8 + %161 = load ptr, ptr %160, align 8, !tbaa !391 + %162 = getelementptr inbounds nuw ptr, ptr %161, i64 %159 + %163 = getelementptr inbounds nuw i8, ptr %139, i64 %158 + %164 = load i32, ptr %163, align 4, !tbaa !389 + %165 = zext i32 %164 to i64 + %166 = sub nsw i64 %85, %165 + %167 = load ptr, ptr %162, align 8, !tbaa !394 + %168 = getelementptr inbounds nuw i8, ptr %2, i64 8 %169 = load i8, ptr %168, align 1, !tbaa !258 %170 = zext i8 %169 to i32 - %171 = shl nuw nsw i32 %170, 16 - %172 = or disjoint i32 %171, %167 - %173 = getelementptr inbounds nuw i8, ptr %2, i64 10 - %174 = load i8, ptr %173, align 1, !tbaa !258 - %175 = zext i8 %174 to i32 - %176 = shl nuw nsw i32 %175, 8 - %177 = or disjoint i32 %172, %176 - %178 = getelementptr inbounds nuw i8, ptr %2, i64 11 - %179 = load i8, ptr %178, align 1, !tbaa !258 - %180 = zext i8 %179 to i32 - %181 = or disjoint i32 %177, %180 - %182 = sext i32 %181 to i64 - %183 = add nsw i64 %162, %182 - br label %184 - -184: ; preds = %3, %3, %3, %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 - %.sroa.027.0 = phi ptr [ %132, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit ], [ %163, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 ], [ null, %3 ], [ null, %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ null, %3 ], [ null, %3 ] - %.sroa.5.0 = phi i64 [ %131, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit ], [ %183, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 ], [ 0, %3 ], [ 0, %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ 0, %3 ], [ 0, %3 ] + %171 = shl nuw i32 %170, 24 + %172 = getelementptr inbounds nuw i8, ptr %2, i64 9 + %173 = load i8, ptr %172, align 1, !tbaa !258 + %174 = zext i8 %173 to i32 + %175 = shl nuw nsw i32 %174, 16 + %176 = or disjoint i32 %175, %171 + %177 = getelementptr inbounds nuw i8, ptr %2, i64 10 + %178 = load i8, ptr %177, align 1, !tbaa !258 + %179 = zext i8 %178 to i32 + %180 = shl nuw nsw i32 %179, 8 + %181 = or disjoint i32 %176, %180 + %182 = getelementptr inbounds nuw i8, ptr %2, i64 11 + %183 = load i8, ptr %182, align 1, !tbaa !258 + %184 = zext i8 %183 to i32 + %185 = or disjoint i32 %181, %184 + %186 = sext i32 %185 to i64 + %187 = add nsw i64 %166, %186 + br label %188 + +188: ; preds = %3, %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 + %.sroa.027.0 = phi ptr [ %136, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit ], [ %167, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 ], [ null, %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ null, %3 ] + %.sroa.5.0 = phi i64 [ %135, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit ], [ %187, %_ZN4mold16MergeableSectionINS_4M68KEE12get_fragmentEl.exit24 ], [ 0, %_ZN4mold10ObjectFileINS_4M68KEE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ 0, %3 ] %.fca.0.insert = insertvalue { ptr, i64 } poison, ptr %.sroa.027.0, 0 %.fca.1.insert = insertvalue { ptr, i64 } %.fca.0.insert, i64 %.sroa.5.0, 1 ret { ptr, i64 } %.fca.1.insert diff --git a/bench/mold/optimized/arch-sparc64.ll b/bench/mold/optimized/arch-sparc64.ll index 9649330b127..f915fdfbcb7 100644 --- a/bench/mold/optimized/arch-sparc64.ll +++ b/bench/mold/optimized/arch-sparc64.ll @@ -4554,54 +4554,58 @@ define linkonce_odr dso_local { ptr, i64 } @_ZN4mold12InputSectionINS_7SPARC64EE %28 = load i8, ptr %27, align 1, !tbaa !259 %29 = zext i8 %28 to i16 %30 = or disjoint i16 %26, %29 - switch i16 %30, label %56 [ - i16 -15, label %246 - i16 -14, label %246 - i16 0, label %246 - i16 -1, label %31 - ] + %.off = add i16 %30, 15 + %switch = icmp ult i16 %.off, 2 + %31 = or i8 %28, %24 + %32 = icmp eq i8 %31, 0 + %or.cond = or i1 %32, %switch + br i1 %or.cond, label %250, label %33 31: ; preds = %3 - %32 = getelementptr inbounds nuw i8, ptr %4, i64 696 - %33 = ptrtoint ptr %22 to i64 - %34 = ptrtoint ptr %18 to i64 - %35 = sub i64 %33, %34 - %36 = load ptr, ptr %32, align 8, !tbaa !388 - %37 = sdiv exact i64 %35, 6 - %38 = getelementptr inbounds nuw i8, ptr %36, i64 %37 - %39 = load i8, ptr %38, align 1, !tbaa !259 - %40 = zext i8 %39 to i64 - %41 = shl nuw nsw i64 %40, 24 - %42 = getelementptr inbounds nuw i8, ptr %38, i64 1 + %34 = icmp eq i16 %30, -1 + br i1 %34, label %35, label %60 + +35:; preds = %33 + %36 = getelementptr inbounds nuw i8, ptr %4, i64 696 + %37 = ptrtoint ptr %22 to i64 + %38 = ptrtoint ptr %18 to i64 + %39 = sub i64 %37, %38 + %40 = load ptr, ptr %36, align 8, !tbaa !388 + %41 = sdiv exact i64 %39, 6 + %42 = getelementptr inbounds nuw i8, ptr %40, i64 %41 %43 = load i8, ptr %42, align 1, !tbaa !259 %44 = zext i8 %43 to i64 - %45 = shl nuw nsw i64 %44, 16 - %46 = or disjoint i64 %45, %41 - %47 = getelementptr inbounds nuw i8, ptr %38, i64 2 - %48 = load i8, ptr %47, align 1, !tbaa !259 - %49 = zext i8 %48 to i64 - %50 = shl nuw nsw i64 %49, 8 - %51 = or disjoint i64 %46, %50 - %52 = getelementptr inbounds nuw i8, ptr %38, i64 3 - %53 = load i8, ptr %52, align 1, !tbaa !259 - %54 = zext i8 %53 to i64 - %55 = or disjoint i64 %51, %54 + %45 = shl nuw nsw i64 %44, 24 + %46 = getelementptr inbounds nuw i8, ptr %42, i64 1 + %47 = load i8, ptr %46, align 1, !tbaa !259 + %48 = zext i8 %47 to i64 + %49 = shl nuw nsw i64 %48, 16 + %50 = or disjoint i64 %49, %45 + %51 = getelementptr inbounds nuw i8, ptr %42, i64 2 + %52 = load i8, ptr %51, align 1, !tbaa !259 + %53 = zext i8 %52 to i64 + %54 = shl nuw nsw i64 %53, 8 + %55 = or disjoint i64 %50, %54 + %56 = getelementptr inbounds nuw i8, ptr %42, i64 3 + %57 = load i8, ptr %56, align 1, !tbaa !259 + %58 = zext i8 %57 to i64 + %59 = or disjoint i64 %55, %58 br label %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit -56: ; preds = %3 +56: ; preds = %33 %57 = icmp eq i8 %24, -1 %58 = zext i16 %30 to i64 %spec.select.i = select i1 %57, i64 0, i64 %58 br label %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit -_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit: ; preds = %31, %56 - %.0.i = phi i64 [ %55, %31 ], [ %spec.select.i, %56 ] +_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit: ; preds = %35, %56 + %.0.i = phi i64 [ %59, %35 ], [ %spec.select.i, %60 ] %59 = getelementptr inbounds nuw i8, ptr %4, i64 352 %60 = load ptr, ptr %59, align 8, !tbaa !391 %61 = getelementptr inbounds nuw %"class.std::unique_ptr.327", ptr %60, i64 %.0.i %62 = load ptr, ptr %61, align 8, !tbaa !394 %.not = icmp eq ptr %62, null - br i1 %.not, label %246, label %63 + br i1 %.not, label %250, label %63 63: ; preds = %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit %64 = getelementptr inbounds nuw i8, ptr %22, i64 4 @@ -4609,214 +4613,214 @@ _ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit: ; preds = %66 = and i8 %65, 15 %67 = icmp eq i8 %66, 3 %68 = getelementptr inbounds nuw i8, ptr %22, i64 8 - %69 = load i8, ptr %68, align 1, !tbaa !259 - %70 = zext i8 %69 to i64 - %71 = shl nuw i64 %70, 56 - %72 = getelementptr inbounds nuw i8, ptr %22, i64 9 %73 = load i8, ptr %72, align 1, !tbaa !259 %74 = zext i8 %73 to i64 - %75 = shl nuw nsw i64 %74, 48 - %76 = or disjoint i64 %75, %71 - %77 = getelementptr inbounds nuw i8, ptr %22, i64 10 - %78 = load i8, ptr %77, align 1, !tbaa !259 - %79 = zext i8 %78 to i64 - %80 = shl nuw nsw i64 %79, 40 - %81 = or disjoint i64 %76, %80 - %82 = getelementptr inbounds nuw i8, ptr %22, i64 11 - %83 = load i8, ptr %82, align 1, !tbaa !259 - %84 = zext i8 %83 to i64 - %85 = shl nuw nsw i64 %84, 32 - %86 = or disjoint i64 %81, %85 - %87 = getelementptr inbounds nuw i8, ptr %22, i64 12 - %88 = load i8, ptr %87, align 1, !tbaa !259 - %89 = zext i8 %88 to i64 - %90 = shl nuw nsw i64 %89, 24 - %91 = or disjoint i64 %86, %90 - %92 = getelementptr inbounds nuw i8, ptr %22, i64 13 - %93 = load i8, ptr %92, align 1, !tbaa !259 - %94 = zext i8 %93 to i64 - %95 = shl nuw nsw i64 %94, 16 - %96 = or disjoint i64 %91, %95 - %97 = getelementptr inbounds nuw i8, ptr %22, i64 14 - %98 = load i8, ptr %97, align 1, !tbaa !259 - %99 = zext i8 %98 to i64 - %100 = shl nuw nsw i64 %99, 8 - %101 = or i64 %96, %100 - %102 = getelementptr inbounds nuw i8, ptr %22, i64 15 - %103 = load i8, ptr %102, align 1, !tbaa !259 - %104 = zext i8 %103 to i64 - %105 = or i64 %101, %104 - br i1 %67, label %106, label %176 - -106: ; preds = %63 - %107 = getelementptr inbounds nuw i8, ptr %2, i64 16 - %108 = load i8, ptr %107, align 1, !tbaa !259 - %109 = zext i8 %108 to i64 - %110 = shl nuw i64 %109, 56 - %111 = getelementptr inbounds nuw i8, ptr %2, i64 17 + %75 = shl nuw i64 %74, 56 + %76 = getelementptr inbounds nuw i8, ptr %22, i64 9 + %77 = load i8, ptr %76, align 1, !tbaa !259 + %78 = zext i8 %77 to i64 + %79 = shl nuw nsw i64 %78, 48 + %80 = or disjoint i64 %79, %75 + %81 = getelementptr inbounds nuw i8, ptr %22, i64 10 + %82 = load i8, ptr %81, align 1, !tbaa !259 + %83 = zext i8 %82 to i64 + %84 = shl nuw nsw i64 %83, 40 + %85 = or disjoint i64 %80, %84 + %86 = getelementptr inbounds nuw i8, ptr %22, i64 11 + %87 = load i8, ptr %86, align 1, !tbaa !259 + %88 = zext i8 %87 to i64 + %89 = shl nuw nsw i64 %88, 32 + %90 = or disjoint i64 %85, %89 + %91 = getelementptr inbounds nuw i8, ptr %22, i64 12 + %92 = load i8, ptr %91, align 1, !tbaa !259 + %93 = zext i8 %92 to i64 + %94 = shl nuw nsw i64 %93, 24 + %95 = or disjoint i64 %90, %94 + %96 = getelementptr inbounds nuw i8, ptr %22, i64 13 + %97 = load i8, ptr %96, align 1, !tbaa !259 + %98 = zext i8 %97 to i64 + %99 = shl nuw nsw i64 %98, 16 + %100 = or disjoint i64 %95, %99 + %101 = getelementptr inbounds nuw i8, ptr %22, i64 14 + %102 = load i8, ptr %101, align 1, !tbaa !259 + %103 = zext i8 %102 to i64 + %104 = shl nuw nsw i64 %103, 8 + %105 = or i64 %100, %104 + %106 = getelementptr inbounds nuw i8, ptr %22, i64 15 + %107 = load i8, ptr %106, align 1, !tbaa !259 + %108 = zext i8 %107 to i64 + %109 = or i64 %105, %108 + br i1 %67, label %110, label %180 + +110:; preds = %67 + %111 = getelementptr inbounds nuw i8, ptr %2, i64 16 %112 = load i8, ptr %111, align 1, !tbaa !259 %113 = zext i8 %112 to i64 - %114 = shl nuw nsw i64 %113, 48 - %115 = or disjoint i64 %114, %110 - %116 = getelementptr inbounds nuw i8, ptr %2, i64 18 - %117 = load i8, ptr %116, align 1, !tbaa !259 - %118 = zext i8 %117 to i64 - %119 = shl nuw nsw i64 %118, 40 - %120 = or disjoint i64 %115, %119 - %121 = getelementptr inbounds nuw i8, ptr %2, i64 19 - %122 = load i8, ptr %121, align 1, !tbaa !259 - %123 = zext i8 %122 to i64 - %124 = shl nuw nsw i64 %123, 32 - %125 = or disjoint i64 %120, %124 - %126 = getelementptr inbounds nuw i8, ptr %2, i64 20 - %127 = load i8, ptr %126, align 1, !tbaa !259 - %128 = zext i8 %127 to i64 - %129 = shl nuw nsw i64 %128, 24 - %130 = or disjoint i64 %125, %129 - %131 = getelementptr inbounds nuw i8, ptr %2, i64 21 - %132 = load i8, ptr %131, align 1, !tbaa !259 - %133 = zext i8 %132 to i64 - %134 = shl nuw nsw i64 %133, 16 - %135 = or disjoint i64 %130, %134 - %136 = getelementptr inbounds nuw i8, ptr %2, i64 22 - %137 = load i8, ptr %136, align 1, !tbaa !259 - %138 = zext i8 %137 to i64 - %139 = shl nuw nsw i64 %138, 8 - %140 = or i64 %135, %139 - %141 = getelementptr inbounds nuw i8, ptr %2, i64 23 - %142 = load i8, ptr %141, align 1, !tbaa !259 - %143 = zext i8 %142 to i64 - %144 = or i64 %140, %143 - %145 = add i64 %144, %105 - %146 = getelementptr inbounds nuw i8, ptr %62, i64 48 - %147 = load ptr, ptr %146, align 8, !tbaa !396 - %148 = getelementptr inbounds nuw i8, ptr %62, i64 56 - %149 = load ptr, ptr %148, align 8, !tbaa !398 - %150 = ptrtoint ptr %147 to i64 - %151 = ptrtoint ptr %149 to i64 - %152 = sub i64 %151, %150 - %153 = ashr exact i64 %152, 2 - %154 = icmp sgt i64 %153, 0 - br i1 %154, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit - -_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i: ; preds = %106, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i - %.013.i.i.i = phi i64 [ %.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %153, %106 ] - %.sroa.011.012.i.i.i = phi ptr [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %147, %106 ] - %155 = lshr i64 %.013.i.i.i, 1 - %156 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i, i64 %155 - %157 = load i32, ptr %156, align 4, !tbaa !399 - %158 = zext i32 %157 to i64 - %159 = icmp slt i64 %145, %158 - %160 = getelementptr inbounds nuw i8, ptr %156, i64 4 - %161 = xor i64 %155, -1 - %162 = add nsw i64 %.013.i.i.i, %161 - %.sroa.011.1.i.i.i = select i1 %159, ptr %.sroa.011.012.i.i.i, ptr %160 - %.1.i.i.i = select i1 %159, i64 %155, i64 %162 - %163 = icmp sgt i64 %.1.i.i.i, 0 - br i1 %163, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit, !llvm.loop !400 - -_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit: ; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, %106 - %.sroa.011.0.lcssa.i.i.i = phi ptr [ %147, %106 ], [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ] - %164 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i, i64 -4 - %165 = ptrtoint ptr %164 to i64 - %166 = sub i64 %165, %150 - %167 = ashr exact i64 %166, 2 - %168 = getelementptr inbounds nuw i8, ptr %62, i64 8 - %169 = load ptr, ptr %168, align 8, !tbaa !401 - %170 = getelementptr inbounds nuw ptr, ptr %169, i64 %167 - %171 = getelementptr inbounds nuw i8, ptr %147, i64 %166 - %172 = load i32, ptr %171, align 4, !tbaa !399 - %173 = zext i32 %172 to i64 - %174 = sub nsw i64 %145, %173 - %175 = load ptr, ptr %170, align 8, !tbaa !404 - br label %246 - -176: ; preds = %63 - %177 = getelementptr inbounds nuw i8, ptr %62, i64 48 - %178 = load ptr, ptr %177, align 8, !tbaa !396 - %179 = getelementptr inbounds nuw i8, ptr %62, i64 56 - %180 = load ptr, ptr %179, align 8, !tbaa !398 - %181 = ptrtoint ptr %178 to i64 - %182 = ptrtoint ptr %180 to i64 - %183 = sub i64 %182, %181 - %184 = ashr exact i64 %183, 2 - %185 = icmp sgt i64 %184, 0 - br i1 %185, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 - -_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17: ; preds = %176, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 - %.013.i.i.i18 = phi i64 [ %.1.i.i.i23, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %184, %176 ] - %.sroa.011.012.i.i.i19 = phi ptr [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %178, %176 ] - %186 = lshr i64 %.013.i.i.i18, 1 - %187 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i19, i64 %186 - %188 = load i32, ptr %187, align 4, !tbaa !399 - %189 = zext i32 %188 to i64 - %190 = icmp slt i64 %105, %189 - %191 = getelementptr inbounds nuw i8, ptr %187, i64 4 - %192 = xor i64 %186, -1 - %193 = add nsw i64 %.013.i.i.i18, %192 - %.sroa.011.1.i.i.i22 = select i1 %190, ptr %.sroa.011.012.i.i.i19, ptr %191 - %.1.i.i.i23 = select i1 %190, i64 %186, i64 %193 - %194 = icmp sgt i64 %.1.i.i.i23, 0 - br i1 %194, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24, !llvm.loop !400 - -_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24: ; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, %176 - %.sroa.011.0.lcssa.i.i.i14 = phi ptr [ %178, %176 ], [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ] - %195 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i14, i64 -4 - %196 = ptrtoint ptr %195 to i64 - %197 = sub i64 %196, %181 - %198 = ashr exact i64 %197, 2 - %199 = getelementptr inbounds nuw i8, ptr %62, i64 8 - %200 = load ptr, ptr %199, align 8, !tbaa !401 - %201 = getelementptr inbounds nuw ptr, ptr %200, i64 %198 - %202 = getelementptr inbounds nuw i8, ptr %178, i64 %197 - %203 = load i32, ptr %202, align 4, !tbaa !399 - %204 = zext i32 %203 to i64 - %205 = sub i64 %105, %204 - %206 = load ptr, ptr %201, align 8, !tbaa !404 - %207 = getelementptr inbounds nuw i8, ptr %2, i64 16 - %208 = load i8, ptr %207, align 1, !tbaa !259 - %209 = zext i8 %208 to i64 - %210 = shl nuw i64 %209, 56 - %211 = getelementptr inbounds nuw i8, ptr %2, i64 17 + %114 = shl nuw i64 %113, 56 + %115 = getelementptr inbounds nuw i8, ptr %2, i64 17 + %116 = load i8, ptr %115, align 1, !tbaa !259 + %117 = zext i8 %116 to i64 + %118 = shl nuw nsw i64 %117, 48 + %119 = or disjoint i64 %118, %114 + %120 = getelementptr inbounds nuw i8, ptr %2, i64 18 + %121 = load i8, ptr %120, align 1, !tbaa !259 + %122 = zext i8 %121 to i64 + %123 = shl nuw nsw i64 %122, 40 + %124 = or disjoint i64 %119, %123 + %125 = getelementptr inbounds nuw i8, ptr %2, i64 19 + %126 = load i8, ptr %125, align 1, !tbaa !259 + %127 = zext i8 %126 to i64 + %128 = shl nuw nsw i64 %127, 32 + %129 = or disjoint i64 %124, %128 + %130 = getelementptr inbounds nuw i8, ptr %2, i64 20 + %131 = load i8, ptr %130, align 1, !tbaa !259 + %132 = zext i8 %131 to i64 + %133 = shl nuw nsw i64 %132, 24 + %134 = or disjoint i64 %129, %133 + %135 = getelementptr inbounds nuw i8, ptr %2, i64 21 + %136 = load i8, ptr %135, align 1, !tbaa !259 + %137 = zext i8 %136 to i64 + %138 = shl nuw nsw i64 %137, 16 + %139 = or disjoint i64 %134, %138 + %140 = getelementptr inbounds nuw i8, ptr %2, i64 22 + %141 = load i8, ptr %140, align 1, !tbaa !259 + %142 = zext i8 %141 to i64 + %143 = shl nuw nsw i64 %142, 8 + %144 = or i64 %139, %143 + %145 = getelementptr inbounds nuw i8, ptr %2, i64 23 + %146 = load i8, ptr %145, align 1, !tbaa !259 + %147 = zext i8 %146 to i64 + %148 = or i64 %144, %147 + %149 = add i64 %148, %109 + %150 = getelementptr inbounds nuw i8, ptr %66, i64 48 + %151 = load ptr, ptr %150, align 8, !tbaa !396 + %152 = getelementptr inbounds nuw i8, ptr %66, i64 56 + %153 = load ptr, ptr %152, align 8, !tbaa !398 + %154 = ptrtoint ptr %151 to i64 + %155 = ptrtoint ptr %153 to i64 + %156 = sub i64 %155, %154 + %157 = ashr exact i64 %156, 2 + %158 = icmp sgt i64 %157, 0 + br i1 %158, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit + +_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i:; preds = %110, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i + %.013.i.i.i = phi i64 [ %.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %157, %110 ] + %.sroa.011.012.i.i.i = phi ptr [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ], [ %151, %110 ] + %159 = lshr i64 %.013.i.i.i, 1 + %160 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i, i64 %159 + %161 = load i32, ptr %156, align 4, !tbaa !399 + %162 = zext i32 %161 to i64 + %163 = icmp slt i64 %149, %162 + %164 = getelementptr inbounds nuw i8, ptr %156, i64 4 + %165 = xor i64 %159, -1 + %166 = add nsw i64 %.013.i.i.i, %165 + %.sroa.011.1.i.i.i = select i1 %163, ptr %.sroa.011.012.i.i.i, ptr %164 + %.1.i.i.i = select i1 %163, i64 %159, i64 %166 + %167 = icmp sgt i64 %.1.i.i.i, 0 + br i1 %167, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit, !llvm.loop !400 + +_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit:; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i, %110 + %.sroa.011.0.lcssa.i.i.i = phi ptr [ %151, %110 ], [ %.sroa.011.1.i.i.i, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i ] + %168 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i, i64 -4 + %169 = ptrtoint ptr %168 to i64 + %170 = sub i64 %169, %154 + %171 = ashr exact i64 %170, 2 + %172 = getelementptr inbounds nuw i8, ptr %66, i64 8 + %173 = load ptr, ptr %172, align 8, !tbaa !401 + %174 = getelementptr inbounds nuw ptr, ptr %173, i64 %171 + %175 = getelementptr inbounds nuw i8, ptr %151, i64 %170 + %176 = load i32, ptr %175, align 4, !tbaa !399 + %177 = zext i32 %176 to i64 + %178 = sub nsw i64 %149, %177 + %179 = load ptr, ptr %174, align 8, !tbaa !404 + br label %250 + +180:; preds = %67 + %181 = getelementptr inbounds nuw i8, ptr %66, i64 48 + %182 = load ptr, ptr %181, align 8, !tbaa !396 + %183 = getelementptr inbounds nuw i8, ptr %66, i64 56 + %184 = load ptr, ptr %183, align 8, !tbaa !398 + %185 = ptrtoint ptr %182 to i64 + %186 = ptrtoint ptr %184 to i64 + %187 = sub i64 %186, %185 + %188 = ashr exact i64 %187, 2 + %189 = icmp sgt i64 %188, 0 + br i1 %189, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 + +_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17:; preds = %180, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 + %.013.i.i.i18 = phi i64 [ %.1.i.i.i23, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %188, %180 ] + %.sroa.011.012.i.i.i19 = phi ptr [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ], [ %182, %180 ] + %190 = lshr i64 %.013.i.i.i18, 1 + %191 = getelementptr inbounds nuw i32, ptr %.sroa.011.012.i.i.i19, i64 %190 + %192 = load i32, ptr %191, align 4, !tbaa !399 + %193 = zext i32 %192 to i64 + %194 = icmp slt i64 %109, %193 + %195 = getelementptr inbounds nuw i8, ptr %191, i64 4 + %196 = xor i64 %190, -1 + %197 = add nsw i64 %.013.i.i.i18, %196 + %.sroa.011.1.i.i.i22 = select i1 %194, ptr %.sroa.011.012.i.i.i19, ptr %195 + %.1.i.i.i23 = select i1 %194, i64 %190, i64 %197 + %198 = icmp sgt i64 %.1.i.i.i23, 0 + br i1 %198, label %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, label %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24, !llvm.loop !400 + +_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24:; preds = %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17, %180 + %.sroa.011.0.lcssa.i.i.i14 = phi ptr [ %182, %180 ], [ %.sroa.011.1.i.i.i22, %_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPjSt4spanIjLm18446744073709551615EEEElEvRT_T0_.exit.i.i.i17 ] + %199 = getelementptr inbounds i8, ptr %.sroa.011.0.lcssa.i.i.i14, i64 -4 + %200 = ptrtoint ptr %199 to i64 + %201 = sub i64 %200, %185 + %202 = ashr exact i64 %201, 2 + %203 = getelementptr inbounds nuw i8, ptr %62, i64 8 + %204 = load ptr, ptr %203, align 8, !tbaa !401 + %205 = getelementptr inbounds nuw ptr, ptr %204, i64 %202 + %206 = getelementptr inbounds nuw i8, ptr %182, i64 %201 + %207 = load i32, ptr %206, align 4, !tbaa !399 + %208 = zext i32 %207 to i64 + %209 = sub i64 %109, %208 + %210 = load ptr, ptr %205, align 8, !tbaa !404 + %211 = getelementptr inbounds nuw i8, ptr %2, i64 16 %212 = load i8, ptr %211, align 1, !tbaa !259 %213 = zext i8 %212 to i64 - %214 = shl nuw nsw i64 %213, 48 - %215 = or disjoint i64 %214, %210 - %216 = getelementptr inbounds nuw i8, ptr %2, i64 18 - %217 = load i8, ptr %216, align 1, !tbaa !259 - %218 = zext i8 %217 to i64 - %219 = shl nuw nsw i64 %218, 40 - %220 = or disjoint i64 %215, %219 - %221 = getelementptr inbounds nuw i8, ptr %2, i64 19 - %222 = load i8, ptr %221, align 1, !tbaa !259 - %223 = zext i8 %222 to i64 - %224 = shl nuw nsw i64 %223, 32 - %225 = or disjoint i64 %220, %224 - %226 = getelementptr inbounds nuw i8, ptr %2, i64 20 - %227 = load i8, ptr %226, align 1, !tbaa !259 - %228 = zext i8 %227 to i64 - %229 = shl nuw nsw i64 %228, 24 - %230 = or disjoint i64 %225, %229 - %231 = getelementptr inbounds nuw i8, ptr %2, i64 21 - %232 = load i8, ptr %231, align 1, !tbaa !259 - %233 = zext i8 %232 to i64 - %234 = shl nuw nsw i64 %233, 16 - %235 = or disjoint i64 %230, %234 - %236 = getelementptr inbounds nuw i8, ptr %2, i64 22 - %237 = load i8, ptr %236, align 1, !tbaa !259 - %238 = zext i8 %237 to i64 - %239 = shl nuw nsw i64 %238, 8 - %240 = or i64 %235, %239 - %241 = getelementptr inbounds nuw i8, ptr %2, i64 23 - %242 = load i8, ptr %241, align 1, !tbaa !259 - %243 = zext i8 %242 to i64 - %244 = or i64 %240, %243 - %245 = add nsw i64 %205, %244 - br label %246 - -246: ; preds = %3, %3, %3, %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 - %.sroa.027.0 = phi ptr [ %175, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit ], [ %206, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 ], [ null, %3 ], [ null, %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ null, %3 ], [ null, %3 ] - %.sroa.5.0 = phi i64 [ %174, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit ], [ %245, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 ], [ 0, %3 ], [ 0, %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ 0, %3 ], [ 0, %3 ] + %214 = shl nuw i64 %213, 56 + %215 = getelementptr inbounds nuw i8, ptr %2, i64 17 + %216 = load i8, ptr %215, align 1, !tbaa !259 + %217 = zext i8 %216 to i64 + %218 = shl nuw nsw i64 %217, 48 + %219 = or disjoint i64 %218, %214 + %220 = getelementptr inbounds nuw i8, ptr %2, i64 18 + %221 = load i8, ptr %220, align 1, !tbaa !259 + %222 = zext i8 %221 to i64 + %223 = shl nuw nsw i64 %222, 40 + %224 = or disjoint i64 %219, %223 + %225 = getelementptr inbounds nuw i8, ptr %2, i64 19 + %226 = load i8, ptr %225, align 1, !tbaa !259 + %227 = zext i8 %226 to i64 + %228 = shl nuw nsw i64 %227, 32 + %229 = or disjoint i64 %224, %228 + %230 = getelementptr inbounds nuw i8, ptr %2, i64 20 + %231 = load i8, ptr %230, align 1, !tbaa !259 + %232 = zext i8 %231 to i64 + %233 = shl nuw nsw i64 %232, 24 + %234 = or disjoint i64 %229, %231 + %235 = getelementptr inbounds nuw i8, ptr %2, i64 21 + %236 = load i8, ptr %235, align 1, !tbaa !259 + %237 = zext i8 %236 to i64 + %238 = shl nuw nsw i64 %237, 16 + %239 = or disjoint i64 %234, %238 + %240 = getelementptr inbounds nuw i8, ptr %2, i64 22 + %241 = load i8, ptr %240, align 1, !tbaa !259 + %242 = zext i8 %241 to i64 + %243 = shl nuw nsw i64 %242, 8 + %244 = or i64 %239, %243 + %245 = getelementptr inbounds nuw i8, ptr %2, i64 23 + %246 = load i8, ptr %245, align 1, !tbaa !259 + %247 = zext i8 %246 to i64 + %248 = or i64 %244, %247 + %249 = add nsw i64 %209, %248 + br label %250 + +250: ; preds = %3, %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 + %.sroa.027.0 = phi ptr [ %179, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit ], [ %210, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 ], [ null, %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ null, %3 ] + %.sroa.5.0 = phi i64 [ %178, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit ], [ %249, %_ZN4mold16MergeableSectionINS_7SPARC64EE12get_fragmentEl.exit24 ], [ 0, %_ZN4mold10ObjectFileINS_7SPARC64EE9get_shndxERKNS_6ElfSymIS1_EE.exit ], [ 0, %3 ] %.fca.0.insert = insertvalue { ptr, i64 } poison, ptr %.sroa.027.0, 0 %.fca.1.insert = insertvalue { ptr, i64 } %.fca.0.insert, i64 %.sroa.5.0, 1 ret { ptr, i64 } %.fca.1.insert diff --git a/bench/mold/optimized/blake3.ll b/bench/mold/optimized/blake3.ll index 015f1a26a7d..31279a522dc 100644 --- a/bench/mold/optimized/blake3.ll +++ b/bench/mold/optimized/blake3.ll @@ -2074,14 +2074,11 @@ output_root_bytes.exit: ; preds = %49, %51 call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %9) #10 %59 = getelementptr inbounds nuw i8, ptr %0, i64 137 %60 = load i8, ptr %59, align 1, !tbaa !12 - %61 = zext i8 %60 to i64 - %62 = shl nuw nsw i64 %61, 6 - %63 = getelementptr inbounds nuw i8, ptr %0, i64 136 - %64 = load i8, ptr %63, align 8, !tbaa !13 - %65 = zext i8 %64 to i64 - %66 = or i64 %62, %65 - %.not = icmp eq i64 %66, 0 - br i1 %.not, label %80, label %.thread + %61 = getelementptr inbounds nuw i8, ptr %0, i64 136 + %62 = load i8, ptr %61, align 8, !tbaa !13 + %63 = or i8 %62, %60 + %.not = icmp eq i8 %63, 0 + br i1 %.not, label %77, label %.thread .thread: ; preds = %58 %67 = getelementptr inbounds nuw i8, ptr %0, i64 32 @@ -2101,7 +2098,7 @@ output_root_bytes.exit: ; preds = %49, %51 %77 = getelementptr inbounds nuw i8, ptr %9, i64 32 store i64 %76, ptr %77, align 8, !tbaa !69 %78 = getelementptr inbounds nuw i8, ptr %9, i64 104 - store i8 %64, ptr %78, align 8, !tbaa !10 + store i8 %62, ptr %78, align 8, !tbaa !10 %79 = getelementptr inbounds nuw i8, ptr %9, i64 105 store i8 %73, ptr %79, align 1, !tbaa !10 br label %.lr.ph @@ -2128,13 +2125,13 @@ output_root_bytes.exit: ; preds = %49, %51 br i1 %.not2350, label %._crit_edge, label %.lr.ph .lr.ph: ; preds = %.thread, %80 - %92 = phi ptr [ %79, %.thread ], [ %91, %80 ] - %93 = phi ptr [ %78, %.thread ], [ %90, %80 ] - %94 = phi ptr [ %77, %.thread ], [ %89, %80 ] - %.062 = phi i64 [ %68, %.thread ], [ %82, %80 ] - %.sink61 = phi i8 [ %73, %.thread ], [ %88, %80 ] - %.sink5260 = phi i8 [ %64, %.thread ], [ 64, %80 ] - %.sink5359 = phi i64 [ %76, %.thread ], [ 0, %80 ] + %92 = phi ptr [ %79, %.thread ], [ %91, %77 ] + %93 = phi ptr [ %78, %.thread ], [ %90, %77 ] + %94 = phi ptr [ %77, %.thread ], [ %89, %77 ] + %.062 = phi i64 [ %68, %.thread ], [ %82, %77 ] + %.sink61 = phi i8 [ %73, %.thread ], [ %88, %77 ] + %.sink5260 = phi i8 [ %62, %.thread ], [ 64, %77 ] + %.sink5359 = phi i64 [ %76, %.thread ], [ 0, %77 ] %95 = getelementptr inbounds nuw i8, ptr %0, i64 145 %96 = getelementptr inbounds nuw i8, ptr %9, i64 40 %97 = getelementptr inbounds nuw i8, ptr %7, i64 4 @@ -2180,10 +2177,10 @@ output_root_bytes.exit: ; preds = %49, %51 br label %105 105: ; preds = %.lr.ph, %105 - %106 = phi i8 [ %.sink61, %.lr.ph ], [ %177, %105 ] - %107 = phi i64 [ %.sink5359, %.lr.ph ], [ 0, %105 ] - %108 = phi i8 [ %.sink5260, %.lr.ph ], [ 64, %105 ] - %.151 = phi i64 [ %.062, %.lr.ph ], [ %109, %105 ] + %106 = phi i8 [ %.sink61, %.lr.ph ], [ %177, %102 ] + %107 = phi i64 [ %.sink5359, %.lr.ph ], [ 0, %102 ] + %108 = phi i8 [ %.sink5260, %.lr.ph ], [ 64, %102 ] + %.151 = phi i64 [ %.062, %.lr.ph ], [ %109, %102 ] %109 = add i64 %.151, -1 %110 = shl i64 %109, 5 %111 = getelementptr inbounds nuw [1760 x i8], ptr %95, i64 0, i64 %110 @@ -2301,9 +2298,9 @@ output_root_bytes.exit: ; preds = %49, %51 br i1 %.not23, label %._crit_edge, label %105, !llvm.loop !71 ._crit_edge: ; preds = %105, %80 - %178 = phi ptr [ %91, %80 ], [ %92, %105 ] - %179 = phi ptr [ %90, %80 ], [ %93, %105 ] - %180 = phi i8 [ %88, %80 ], [ %177, %105 ] + %178 = phi ptr [ %91, %77 ], [ %92, %102 ] + %179 = phi ptr [ %90, %77 ], [ %93, %102 ] + %180 = phi i8 [ %88, %77 ], [ %177, %102 ] %181 = lshr i64 %1, 6 %182 = and i64 %1, 63 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #10 @@ -2324,9 +2321,9 @@ output_root_bytes.exit: ; preds = %49, %51 br label %192 192: ; preds = %183, %._crit_edge - %.044.i25 = phi i64 [ %191, %183 ], [ %181, %._crit_edge ] - %.043.i26 = phi i64 [ %190, %183 ], [ %3, %._crit_edge ] - %.0.i27 = phi ptr [ %189, %183 ], [ %2, %._crit_edge ] + %.044.i25 = phi i64 [ %191, %180 ], [ %181, %._crit_edge ] + %.043.i26 = phi i64 [ %190, %180 ], [ %3, %._crit_edge ] + %.0.i27 = phi ptr [ %189, %180 ], [ %2, %._crit_edge ] %193 = lshr i64 %.043.i26, 6 %.not49.i28 = icmp ult i64 %.043.i26, 64 br i1 %.not49.i28, label %199, label %194 diff --git a/bench/node/optimized/libnode.cares_wrap.ll b/bench/node/optimized/libnode.cares_wrap.ll index dfc3219cd9c..d6a5c113406 100644 --- a/bench/node/optimized/libnode.cares_wrap.ll +++ b/bench/node/optimized/libnode.cares_wrap.ll @@ -6168,7 +6168,6 @@ entry: %conv.i = zext i8 %add.ptr.val to i32 %shl.i = shl nuw nsw i32 %conv.i, 8 %conv2.i = zext i8 %add.ptr.val75 to i32 - %or.i = or disjoint i32 %shl.i, %conv2.i %add.ptr2 = getelementptr inbounds nuw i8, ptr %buf, i64 12 store ptr null, ptr %name_temp, align 8 %call3 = call i32 @ares_expand_name(ptr noundef nonnull %add.ptr2, ptr noundef %buf, i32 noundef %len, ptr noundef nonnull %name_temp, ptr noundef nonnull %temp_len) #21 @@ -6191,7 +6190,8 @@ if.end: ; preds = %entry br i1 %cmp8, label %cleanup378, label %for.cond.preheader for.cond.preheader: ; preds = %if.end - %cmp12201.not = icmp eq i32 %or.i, 0 + %4 = or i32 %conv.i, %conv2.i + %cmp12201.not = icmp eq i32 %4, 0 br i1 %cmp12201.not, label %cleanup378, label %for.body.lr.ph for.body.lr.ph: ; preds = %for.cond.preheader @@ -6362,7 +6362,7 @@ if.end62: ; preds = %if.end55 %vtable.i = load ptr, ptr %33, align 8 %vfn.i = getelementptr inbounds nuw i8, ptr %vtable.i, i64 64 %34 = load ptr, ptr %vfn.i, align 8 - %call2.i = call ptr %34(ptr noundef nonnull align 8 dereferenceable(872) %33) #21 + %call2.i = call ptr %35(ptr noundef nonnull align 8 dereferenceable(872) %33) #21 %35 = load ptr, ptr %isolate_data_.i.i, align 8 %nsname_string_.i.i = getelementptr inbounds nuw i8, ptr %35, i64 1560 %36 = load ptr, ptr %nsname_string_.i.i, align 8 @@ -6389,7 +6389,7 @@ _ZNK2v85MaybeIbE5CheckEv.exit483: ; preds = %if.then.i482, %_ZN4 %vtable.i145 = load ptr, ptr %38, align 8 %vfn.i146 = getelementptr inbounds nuw i8, ptr %vtable.i145, i64 64 %39 = load ptr, ptr %vfn.i146, align 8 - %call2.i147 = call ptr %39(ptr noundef nonnull align 8 dereferenceable(872) %38) #21 + %call2.i147 = call ptr %40(ptr noundef nonnull align 8 dereferenceable(872) %38) #21 %40 = load ptr, ptr %isolate_data_.i.i, align 8 %hostmaster_string_.i.i = getelementptr inbounds nuw i8, ptr %40, i64 1112 %41 = load ptr, ptr %hostmaster_string_.i.i, align 8 @@ -6416,7 +6416,7 @@ _ZNK2v85MaybeIbE5CheckEv.exit476: ; preds = %if.then.i475, %_ZN4 %vtable.i155 = load ptr, ptr %43, align 8 %vfn.i156 = getelementptr inbounds nuw i8, ptr %vtable.i155, i64 64 %44 = load ptr, ptr %vfn.i156, align 8 - %call2.i157 = call ptr %44(ptr noundef nonnull align 8 dereferenceable(872) %43) #21 + %call2.i157 = call ptr %45(ptr noundef nonnull align 8 dereferenceable(872) %43) #21 %45 = load ptr, ptr %isolate_data_.i.i, align 8 %serial_string_.i.i = getelementptr inbounds nuw i8, ptr %45, i64 2088 %46 = load ptr, ptr %serial_string_.i.i, align 8 @@ -6435,7 +6435,7 @@ _ZNK2v85MaybeIbE5CheckEv.exit469: ; preds = %if.then.i468, %_ZNK %vtable.i161 = load ptr, ptr %48, align 8 %vfn.i162 = getelementptr inbounds nuw i8, ptr %vtable.i161, i64 64 %49 = load ptr, ptr %vfn.i162, align 8 - %call2.i163 = call ptr %49(ptr noundef nonnull align 8 dereferenceable(872) %48) #21 + %call2.i163 = call ptr %50(ptr noundef nonnull align 8 dereferenceable(872) %48) #21 %50 = load ptr, ptr %isolate_data_.i.i, align 8 %refresh_string_.i.i = getelementptr inbounds nuw i8, ptr %50, i64 2000 %51 = load ptr, ptr %refresh_string_.i.i, align 8 @@ -6454,7 +6454,7 @@ _ZNK2v85MaybeIbE5CheckEv.exit462: ; preds = %if.then.i461, %_ZNK %vtable.i167 = load ptr, ptr %53, align 8 %vfn.i168 = getelementptr inbounds nuw i8, ptr %vtable.i167, i64 64 %54 = load ptr, ptr %vfn.i168, align 8 - %call2.i169 = call ptr %54(ptr noundef nonnull align 8 dereferenceable(872) %53) #21 + %call2.i169 = call ptr %55(ptr noundef nonnull align 8 dereferenceable(872) %53) #21 %55 = load ptr, ptr %isolate_data_.i.i, align 8 %retry_string_.i.i = getelementptr inbounds nuw i8, ptr %55, i64 2048 %56 = load ptr, ptr %retry_string_.i.i, align 8 @@ -6473,7 +6473,7 @@ _ZNK2v85MaybeIbE5CheckEv.exit455: ; preds = %if.then.i454, %_ZNK %vtable.i173 = load ptr, ptr %58, align 8 %vfn.i174 = getelementptr inbounds nuw i8, ptr %vtable.i173, i64 64 %59 = load ptr, ptr %vfn.i174, align 8 - %call2.i175 = call ptr %59(ptr noundef nonnull align 8 dereferenceable(872) %58) #21 + %call2.i175 = call ptr %60(ptr noundef nonnull align 8 dereferenceable(872) %58) #21 %60 = load ptr, ptr %isolate_data_.i.i, align 8 %expire_string_.i.i = getelementptr inbounds nuw i8, ptr %60, i64 872 %61 = load ptr, ptr %expire_string_.i.i, align 8 @@ -6492,7 +6492,7 @@ _ZNK2v85MaybeIbE5CheckEv.exit448: ; preds = %if.then.i447, %_ZNK %vtable.i179 = load ptr, ptr %63, align 8 %vfn.i180 = getelementptr inbounds nuw i8, ptr %vtable.i179, i64 64 %64 = load ptr, ptr %vfn.i180, align 8 - %call2.i181 = call ptr %64(ptr noundef nonnull align 8 dereferenceable(872) %63) #21 + %call2.i181 = call ptr %65(ptr noundef nonnull align 8 dereferenceable(872) %63) #21 %65 = load ptr, ptr %isolate_data_.i.i, align 8 %minttl_string_.i.i = getelementptr inbounds nuw i8, ptr %65, i64 1480 %66 = load ptr, ptr %minttl_string_.i.i, align 8 @@ -6511,7 +6511,7 @@ _ZNK2v85MaybeIbE5CheckEv.exit441: ; preds = %if.then.i440, %_ZNK %vtable.i185 = load ptr, ptr %68, align 8 %vfn.i186 = getelementptr inbounds nuw i8, ptr %vtable.i185, i64 64 %69 = load ptr, ptr %vfn.i186, align 8 - %call2.i187 = call ptr %69(ptr noundef nonnull align 8 dereferenceable(872) %68) #21 + %call2.i187 = call ptr %70(ptr noundef nonnull align 8 dereferenceable(872) %68) #21 %70 = load ptr, ptr %isolate_data_.i.i, align 8 %type_string_.i.i = getelementptr inbounds nuw i8, ptr %70, i64 2376 %71 = load ptr, ptr %type_string_.i.i, align 8 diff --git a/bench/openjdk/optimized/hb-ot-name.ll b/bench/openjdk/optimized/hb-ot-name.ll index 01c1fee9722..33845173593 100644 --- a/bench/openjdk/optimized/hb-ot-name.ll +++ b/bench/openjdk/optimized/hb-ot-name.ll @@ -2125,84 +2125,77 @@ define linkonce_odr hidden noundef zeroext i1 @_ZNK3AAT4ltag8sanitizeEP21hb_sani 13: ; preds = %2 %14 = load i8, ptr %0, align 1 - %15 = zext i8 %14 to i32 - %16 = shl nuw i32 %15, 24 - %17 = getelementptr inbounds nuw i8, ptr %0, i64 1 + %15 = getelementptr inbounds nuw i8, ptr %0, i64 1 + %16 = load i8, ptr %15, align 1 + %17 = getelementptr inbounds nuw i8, ptr %0, i64 2 %18 = load i8, ptr %17, align 1 - %19 = zext i8 %18 to i32 - %20 = shl nuw nsw i32 %19, 16 - %21 = or disjoint i32 %20, %16 - %22 = getelementptr inbounds nuw i8, ptr %0, i64 2 - %23 = load i8, ptr %22, align 1 - %24 = zext i8 %23 to i32 - %25 = shl nuw nsw i32 %24, 8 - %26 = or disjoint i32 %21, %25 - %27 = getelementptr inbounds nuw i8, ptr %0, i64 3 - %28 = load i8, ptr %27, align 1 - %29 = zext i8 %28 to i32 - %30 = or disjoint i32 %26, %29 - %.not21 = icmp eq i32 %30, 0 - br i1 %.not21, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread, label %31 - -31: ; preds = %13 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %33 = load i8, ptr %32, align 1 - %34 = zext i8 %33 to i32 - %35 = shl nuw i32 %34, 24 - %36 = getelementptr inbounds nuw i8, ptr %0, i64 9 + %19 = getelementptr inbounds nuw i8, ptr %0, i64 3 + %20 = load i8, ptr %19, align 1 + %21 = or i8 %16, %14 + %22 = or i8 %21, %18 + %23 = or i8 %22, %20 + %.not21 = icmp eq i8 %23, 0 + br i1 %.not21, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread, label %24 + +24: ; preds = %13 + %25 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %26 = load i8, ptr %25, align 1 + %27 = zext i8 %26 to i32 + %28 = shl nuw i32 %27, 24 + %29 = getelementptr inbounds nuw i8, ptr %0, i64 9 + %30 = load i8, ptr %29, align 1 + %31 = zext i8 %30 to i32 + %32 = shl nuw nsw i32 %31, 16 + %33 = getelementptr inbounds nuw i8, ptr %0, i64 10 + %34 = load i8, ptr %33, align 1 + %35 = zext i8 %34 to i32 + %36 = getelementptr inbounds nuw i8, ptr %0, i64 11 %37 = load i8, ptr %36, align 1 %38 = zext i8 %37 to i32 - %39 = shl nuw nsw i32 %38, 16 - %40 = getelementptr inbounds nuw i8, ptr %0, i64 10 - %41 = load i8, ptr %40, align 1 - %42 = zext i8 %41 to i32 - %43 = getelementptr inbounds nuw i8, ptr %0, i64 11 - %44 = load i8, ptr %43, align 1 - %45 = zext i8 %44 to i32 - %46 = or disjoint i32 %39, %35 - %47 = or disjoint i32 %46, %45 - %48 = shl nuw nsw i32 %42, 10 - %49 = shl i32 %47, 2 - %50 = or disjoint i32 %49, %48 - %51 = icmp ugt i8 %33, 63 - br i1 %51, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread, label %52 - -52: ; preds = %31 - %53 = load ptr, ptr %12, align 8 - %54 = ptrtoint ptr %53 to i64 - %55 = sub i64 %54, %6 - %56 = trunc i64 %55 to i32 - %.not20.i = icmp ugt i32 %50, %56 + %39 = or disjoint i32 %32, %28 + %40 = or disjoint i32 %39, %38 + %41 = shl nuw nsw i32 %35, 10 + %42 = shl i32 %40, 2 + %43 = or disjoint i32 %42, %41 + %44 = icmp ugt i8 %26, 63 + br i1 %44, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread, label %45 + +45:; preds = %24 + %46 = load ptr, ptr %12, align 8 + %47 = ptrtoint ptr %46 to i64 + %48 = sub i64 %47, %6 + %49 = trunc i64 %48 to i32 + %.not20.i = icmp ugt i32 %43, %49 br i1 %.not20.i, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit -_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit: ; preds = %52 +_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit: ; preds = %45 %57 = getelementptr inbounds nuw i8, ptr %1, i64 28 %58 = load i32, ptr %57, align 4 - %59 = sub i32 %58, %50 + %59 = sub i32 %58, %43 store i32 %59, ptr %57, align 4 %60 = icmp sgt i32 %59, 0 br i1 %60, label %61, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread 61: ; preds = %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit - %62 = load i8, ptr %32, align 1 + %62 = load i8, ptr %25, align 1 + %56 = zext i8 %55 to i32 + %57 = shl nuw i32 %56, 24 + %58 = load i8, ptr %29, align 1 + %59 = zext i8 %58 to i32 + %60 = shl nuw nsw i32 %59, 16 + %61 = or disjoint i32 %60, %57 + %62 = load i8, ptr %33, align 1 %63 = zext i8 %62 to i32 - %64 = shl nuw i32 %63, 24 - %65 = load i8, ptr %36, align 1 - %66 = zext i8 %65 to i32 - %67 = shl nuw nsw i32 %66, 16 - %68 = or disjoint i32 %67, %64 - %69 = load i8, ptr %40, align 1 - %70 = zext i8 %69 to i32 - %71 = shl nuw nsw i32 %70, 8 - %72 = or disjoint i32 %68, %71 - %73 = load i8, ptr %43, align 1 - %74 = zext i8 %73 to i32 - %75 = or disjoint i32 %72, %74 - %.not33 = icmp eq i32 %75, 0 + %64 = shl nuw nsw i32 %63, 8 + %65 = or disjoint i32 %61, %64 + %66 = load i8, ptr %36, align 1 + %67 = zext i8 %66 to i32 + %68 = or disjoint i32 %65, %67 + %.not33 = icmp eq i32 %68, 0 br i1 %.not33, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread, label %.lr.ph.preheader .lr.ph.preheader: ; preds = %61 - %wide.trip.count = zext i32 %75 to i64 + %wide.trip.count = zext i32 %68 to i64 br label %.lr.ph 76: ; preds = %_ZN21hb_sanitize_context_t8dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_.exit @@ -2211,8 +2204,8 @@ _ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21h br i1 %exitcond.not, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread, label %.lr.ph, !llvm.loop !15 .lr.ph: ; preds = %.lr.ph.preheader, %76 - %77 = phi i32 [ %59, %.lr.ph.preheader ], [ %103, %76 ] - %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %76 ] + %77 = phi i32 [ %59, %.lr.ph.preheader ], [ %103, %69 ] + %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %69 ] %78 = getelementptr inbounds nuw [1 x %"struct.AAT::FTStringRange"], ptr %3, i64 0, i64 %indvars.iv %79 = getelementptr inbounds nuw i8, ptr %78, i64 4 %80 = ptrtoint ptr %79 to i64 @@ -2240,7 +2233,7 @@ _ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21h %99 = ptrtoint ptr %90 to i64 %100 = sub i64 %99, %7 %.not.i.i.i.i.i.i = icmp ugt i64 %100, %11 - %101 = sub i64 %54, %99 + %101 = sub i64 %47, %99 %102 = trunc i64 %101 to i32 %.not16.i.i.i.i.i.i = icmp ugt i32 %98, %102 %or.cond = select i1 %.not.i.i.i.i.i.i, i1 true, i1 %.not16.i.i.i.i.i.i @@ -2252,8 +2245,8 @@ _ZN21hb_sanitize_context_t8dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcl9_d %104 = icmp sgt i32 %103, 0 br i1 %104, label %76, label %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread -_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread: ; preds = %82, %.lr.ph, %76, %_ZN21hb_sanitize_context_t8dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_.exit, %61, %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit, %31, %52, %13, %2 - %105 = phi i1 [ false, %13 ], [ false, %2 ], [ false, %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit ], [ false, %31 ], [ false, %52 ], [ true, %61 ], [ false, %82 ], [ false, %.lr.ph ], [ true, %76 ], [ false, %_ZN21hb_sanitize_context_t8dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_.exit ] +_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit.thread: ; preds = %82, %.lr.ph, %76, %_ZN21hb_sanitize_context_t8dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_.exit, %61, %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit, %24, %45, %13, %2 + %105 = phi i1 [ false, %13 ], [ false, %2 ], [ false, %_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t.exit ], [ false, %24 ], [ false, %45 ], [ true, %54 ], [ false, %75 ], [ false, %.lr.ph ], [ true, %69 ], [ false, %_ZN21hb_sanitize_context_t8dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_.exit ] ret i1 %105 } diff --git a/bench/openjdk/optimized/utf8.ll b/bench/openjdk/optimized/utf8.ll index bc4c9932b6d..4a8455b7065 100644 --- a/bench/openjdk/optimized/utf8.ll +++ b/bench/openjdk/optimized/utf8.ll @@ -931,7 +931,7 @@ define hidden noundef zeroext i1 @_ZN4UTF813is_legal_utf8EPKhib(ptr noundef read br i1 %.not, label %.lr.ph90, label %._crit_edge91 .lr.ph90: ; preds = %._crit_edge, %99 - %.188 = phi i32 [ %100, %99 ], [ %.075.lcssa, %._crit_edge ] + %.188 = phi i32 [ %100, %98 ], [ %.075.lcssa, %._crit_edge ] %30 = sext i32 %.188 to i64 %31 = getelementptr inbounds i8, ptr %0, i64 %30 %32 = load i8, ptr %31, align 1 @@ -997,28 +997,27 @@ _ZN4UTF826is_supplementary_characterEPKh.exit.thread: ; preds = %36 62: ; preds = %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread %63 = and i8 %32, 31 %64 = zext nneg i8 %63 to i32 - %65 = shl nuw nsw i32 %64, 6 - %66 = add nsw i32 %.188, 1 - %67 = icmp slt i32 %66, %1 - br i1 %67, label %68, label %._crit_edge91 - -68: ; preds = %62 - %69 = sext i32 %66 to i64 - %70 = getelementptr inbounds i8, ptr %0, i64 %69 - %71 = load i8, ptr %70, align 1 - %72 = zext i8 %71 to i32 - %73 = and i32 %72, 192 - %74 = icmp eq i32 %73, 128 - br i1 %74, label %75, label %._crit_edge91 - -75: ; preds = %68 - %76 = and i32 %72, 63 - %77 = or disjoint i32 %76, %65 - %78 = icmp eq i32 %77, 0 - %or.cond = select i1 %2, i1 true, i1 %78 - %79 = icmp samesign ugt i8 %63, 1 - %or.cond5 = select i1 %or.cond, i1 true, i1 %79 - br i1 %or.cond5, label %99, label %._crit_edge91 + %65 = add nsw i32 %.188, 1 + %66 = icmp slt i32 %65, %1 + br i1 %66, label %67, label %._crit_edge91 + +67: ; preds = %62 + %68 = sext i32 %65 to i64 + %69 = getelementptr inbounds i8, ptr %0, i64 %68 + %70 = load i8, ptr %69, align 1 + %71 = zext i8 %70 to i32 + %72 = and i32 %71, 192 + %73 = icmp eq i32 %72, 128 + br i1 %73, label %74, label %._crit_edge91 + +74: ; preds = %67 + %75 = and i32 %71, 63 + %76 = or i32 %75, %64 + %77 = icmp eq i32 %76, 0 + %or.cond = select i1 %2, i1 true, i1 %77 + %78 = icmp samesign ugt i8 %63, 1 + %or.cond5 = select i1 %or.cond, i1 true, i1 %78 + br i1 %or.cond5, label %98, label %._crit_edge91 .thread: ; preds = %53, %49, %45, %40, %_ZN4UTF826is_supplementary_characterEPKh.exit, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread %.tr = zext i8 %32 to i32 @@ -1054,14 +1053,14 @@ _ZN4UTF826is_supplementary_characterEPKh.exit.thread: ; preds = %36 default.unreachable: ; preds = %_ZN4UTF826is_supplementary_characterEPKh.exit.thread unreachable -99: ; preds = %_ZN4UTF826is_supplementary_characterEPKh.exit, %75, %94, %34 - %.2 = phi i32 [ %.188, %34 ], [ %81, %94 ], [ %66, %75 ], [ %37, %_ZN4UTF826is_supplementary_characterEPKh.exit ] +99: ; preds = %_ZN4UTF826is_supplementary_characterEPKh.exit, %74, %94, %34 + %.2 = phi i32 [ %.188, %34 ], [ %81, %93 ], [ %65, %74 ], [ %37, %_ZN4UTF826is_supplementary_characterEPKh.exit ] %100 = add nsw i32 %.2, 1 %.not117 = icmp slt i32 %100, %1 br i1 %.not117, label %.lr.ph90, label %._crit_edge91, !llvm.loop !17 -._crit_edge91: ; preds = %.lr.ph90, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %75, %68, %62, %94, %89, %83, %.thread, %99, %._crit_edge - %.lcssa = phi i1 [ true, %._crit_edge ], [ true, %99 ], [ false, %.thread ], [ false, %83 ], [ false, %89 ], [ false, %94 ], [ false, %62 ], [ false, %68 ], [ false, %75 ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %.lr.ph90 ] +._crit_edge91: ; preds = %.lr.ph90, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread, %74, %67, %62, %93, %88, %82, %.thread, %99, %._crit_edge + %.lcssa = phi i1 [ true, %._crit_edge ], [ true, %98 ], [ false, %.thread ], [ false, %82 ], [ false, %88 ], [ false, %93 ], [ false, %62 ], [ false, %67 ], [ false, %74 ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %_ZN4UTF826is_supplementary_characterEPKh.exit.thread ], [ false, %.lr.ph90 ] ret i1 %.lcssa } diff --git a/bench/openssl/optimized/statem_srvr.ll b/bench/openssl/optimized/statem_srvr.ll index 4abe507d445..a6a562966a7 100644 --- a/bench/openssl/optimized/statem_srvr.ll +++ b/bench/openssl/optimized/statem_srvr.ll @@ -8139,66 +8139,63 @@ define internal fastcc void @ssl_check_for_safari(ptr noundef %0, ptr noundef re %.sroa.0.0.copyload = load ptr, ptr %4, align 8, !tbaa !162 %5 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 2 %6 = load i8, ptr %5, align 1, !tbaa !193 - %7 = zext i8 %6 to i32 - %8 = shl nuw nsw i32 %7, 8 - %9 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 3 - %10 = load i8, ptr %9, align 1, !tbaa !193 - %11 = zext i8 %10 to i32 - %12 = or disjoint i32 %8, %11 - %13 = and i64 %.sroa.10.0.copyload, -2 - %14 = icmp eq i64 %13, 4 - br i1 %14, label %PACKET_forward.exit.thread, label %15 - -15: ; preds = %3 - %16 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 4 + %7 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 3 + %8 = load i8, ptr %7, align 1, !tbaa !193 + %9 = and i64 %.sroa.10.0.copyload, -2 + %10 = icmp eq i64 %9, 4 + br i1 %10, label %PACKET_forward.exit.thread, label %11 + +11:; preds = %3 + %12 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 4 + %13 = load i8, ptr %12, align 1, !tbaa !193 + %14 = zext i8 %13 to i64 + %15 = shl nuw nsw i64 %14, 8 + %16 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 5 %17 = load i8, ptr %16, align 1, !tbaa !193 %18 = zext i8 %17 to i64 - %19 = shl nuw nsw i64 %18, 8 - %20 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 5 - %21 = load i8, ptr %20, align 1, !tbaa !193 - %22 = zext i8 %21 to i64 - %23 = or disjoint i64 %19, %22 - %24 = add i64 %.sroa.10.0.copyload, -6 - %25 = icmp ult i64 %24, %23 - br i1 %25, label %PACKET_forward.exit.thread, label %PACKET_get_length_prefixed_2.exit - -PACKET_get_length_prefixed_2.exit: ; preds = %15 - %26 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 6 - %27 = getelementptr inbounds nuw i8, ptr %26, i64 %23 - %28 = sub nuw i64 %24, %23 - %.not6 = icmp eq i32 %12, 0 - br i1 %.not6, label %29, label %PACKET_forward.exit.thread - -29: ; preds = %PACKET_get_length_prefixed_2.exit + %19 = or disjoint i64 %15, %18 + %20 = add i64 %.sroa.10.0.copyload, -6 + %21 = icmp ult i64 %20, %19 + br i1 %21, label %PACKET_forward.exit.thread, label %PACKET_get_length_prefixed_2.exit + +PACKET_get_length_prefixed_2.exit:; preds = %11 + %22 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload, i64 6 + %23 = getelementptr inbounds nuw i8, ptr %22, i64 %19 + %24 = sub nuw i64 %20, %19 + %25 = or i8 %8, %6 + %.not6 = icmp eq i8 %25, 0 + br i1 %.not6, label %26, label %PACKET_forward.exit.thread + +26:; preds = %PACKET_get_length_prefixed_2.exit + %27 = tail call i32 @SSL_client_version(ptr noundef %0) #12 + %.mask = and i32 %27, -256 + %28 = icmp eq i32 %.mask, 768 + br i1 %28, label %29, label %33 + +29: ; preds = %26 %30 = tail call i32 @SSL_client_version(ptr noundef %0) #12 - %.mask = and i32 %30, -256 - %31 = icmp eq i32 %.mask, 768 - br i1 %31, label %32, label %36 - -32: ; preds = %29 - %33 = tail call i32 @SSL_client_version(ptr noundef %0) #12 - %34 = icmp sgt i32 %33, 770 - %35 = select i1 %34, i64 34, i64 18 - br label %36 - -36: ; preds = %29, %32 - %37 = phi i64 [ %35, %32 ], [ 18, %29 ] - %.not.i = icmp eq i64 %28, %37 - br i1 %.not.i, label %38, label %PACKET_equal.exit - -38: ; preds = %36 - %39 = tail call i32 @CRYPTO_memcmp(ptr noundef nonnull %27, ptr noundef nonnull @ssl_check_for_safari.kSafariExtensionsBlock, i64 noundef %28) #12 - %40 = icmp eq i32 %39, 0 - %41 = zext i1 %40 to i8 + %31 = icmp sgt i32 %30, 770 + %32 = select i1 %31, i64 34, i64 18 + br label %33 + +32: ; preds = %26, %29 + %34 = phi i64 [ %32, %29 ], [ 18, %26 ] + %34 = icmp eq i64 %24, %34 + br i1 %34, label %35, label %PACKET_equal.exit + +35: ; preds = %33 + %36 = tail call i32 @CRYPTO_memcmp(ptr noundef nonnull %23, ptr noundef nonnull @ssl_check_for_safari.kSafariExtensionsBlock, i64 noundef %24) #12 + %37 = icmp eq i32 %36, 0 + %38 = zext i1 %37 to i8 br label %PACKET_equal.exit -PACKET_equal.exit: ; preds = %36, %38 - %.0.i10 = phi i8 [ %41, %38 ], [ 0, %36 ] +PACKET_equal.exit: ; preds = %33, %35 + %.0.i10 = phi i8 [ %38, %35 ], [ 0, %33 ] %42 = getelementptr inbounds nuw i8, ptr %0, i64 1244 store i8 %.0.i10, ptr %42, align 4, !tbaa !289 br label %PACKET_forward.exit.thread -PACKET_forward.exit.thread: ; preds = %2, %15, %3, %PACKET_get_length_prefixed_2.exit, %PACKET_equal.exit +PACKET_forward.exit.thread: ; preds = %2, %11, %3, %PACKET_get_length_prefixed_2.exit, %PACKET_equal.exit ret void } diff --git a/bench/openusd/optimized/pointInstancerAdapter.ll b/bench/openusd/optimized/pointInstancerAdapter.ll index 8b199297852..870babcfe23 100644 --- a/bench/openusd/optimized/pointInstancerAdapter.ll +++ b/bench/openusd/optimized/pointInstancerAdapter.ll @@ -39030,7 +39030,7 @@ _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorC2EPKS0_PKNS_12Usd_P 34: ; preds = %9 invoke void @_ZNK32pxrInternal_v0_24__pxrReserved__12Sdf_PathNode8_DestroyEv(ptr noundef nonnull align 8 dereferenceable(16) %29) - to label %38 unwind label %35, !noalias !203 + to label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit unwind label %35, !noalias !203 35: ; preds = %34 %36 = landingpad { ptr, i32 } @@ -39044,21 +39044,6 @@ _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorC2EPKS0_PKNS_12Usd_P %.sroa.12.0 = phi i32 [ %8, %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorC2EPKS0_PKNS_12Usd_PrimDataENS_7SdfPathEj.exit.thread.i ], [ %23, %34 ], [ %23, %9 ] %39 = getelementptr inbounds nuw i8, ptr %0, i64 8 %40 = load ptr, ptr %39, align 8, !noalias !206 - %41 = icmp eq ptr %2, %40 - br i1 %41, label %42, label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit - -42: ; preds = %38 - %.sroa.10.16.insert.ext = zext i32 %.sroa.10.0 to i64 - %.sroa.10.16.insert.shift = shl nuw i64 %.sroa.10.16.insert.ext, 32 - %.sroa.610.16.insert.ext = zext i32 %4 to i64 - %.sroa.610.16.insert.insert = or disjoint i64 %.sroa.10.16.insert.shift, %.sroa.610.16.insert.ext - %43 = icmp eq i64 %.sroa.610.16.insert.insert, 0 - %44 = icmp eq i32 %.sroa.12.0, 0 - %or.cond = select i1 %43, i1 %44, i1 false - br label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit - -_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit: ; preds = %42, %38 - %.ph = phi i1 [ false, %38 ], [ %or.cond, %42 ] %.not.i.i.i5 = icmp eq i32 %4, 0 br i1 %.not.i.i.i5, label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit6, label %45 @@ -39089,7 +39074,13 @@ _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit: ; preds = unreachable _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit6: ; preds = %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit, %45, %58 - ret i1 %.ph + %57 = icmp eq ptr %2, %39 + %58 = or i32 %.sroa.10.0, %4 + %59 = icmp eq i32 %58, 0 + %or.cond = select i1 %57, i1 %59, i1 false + %60 = icmp eq i32 %.sroa.12.0, 0 + %or.cond14 = select i1 %or.cond, i1 %60, i1 false + ret i1 %or.cond14 } ; Function Attrs: mustprogress uwtable diff --git a/bench/openusd/optimized/primRange.ll b/bench/openusd/optimized/primRange.ll index dd8a0ad1174..272182c7b34 100644 --- a/bench/openusd/optimized/primRange.ll +++ b/bench/openusd/optimized/primRange.ll @@ -428,7 +428,7 @@ _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorC2EPKS0_PKNS_12Usd_P 34: ; preds = %9 invoke void @_ZNK32pxrInternal_v0_24__pxrReserved__12Sdf_PathNode8_DestroyEv(ptr noundef nonnull align 8 dereferenceable(16) %29) - to label %38 unwind label %35, !noalias !4 + to label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit unwind label %35, !noalias !4 35: ; preds = %34 %36 = landingpad { ptr, i32 } @@ -442,21 +442,6 @@ _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorC2EPKS0_PKNS_12Usd_P %.sroa.12.0 = phi i32 [ %8, %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorC2EPKS0_PKNS_12Usd_PrimDataENS_7SdfPathEj.exit.thread.i ], [ %23, %34 ], [ %23, %9 ] %39 = getelementptr inbounds nuw i8, ptr %0, i64 8 %40 = load ptr, ptr %39, align 8, !noalias !7 - %41 = icmp eq ptr %2, %40 - br i1 %41, label %42, label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit - -42: ; preds = %38 - %.sroa.10.16.insert.ext = zext i32 %.sroa.10.0 to i64 - %.sroa.10.16.insert.shift = shl nuw i64 %.sroa.10.16.insert.ext, 32 - %.sroa.610.16.insert.ext = zext i32 %4 to i64 - %.sroa.610.16.insert.insert = or disjoint i64 %.sroa.10.16.insert.shift, %.sroa.610.16.insert.ext - %43 = icmp eq i64 %.sroa.610.16.insert.insert, 0 - %44 = icmp eq i32 %.sroa.12.0, 0 - %or.cond = select i1 %43, i1 %44, i1 false - br label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit - -_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit: ; preds = %42, %38 - %.ph = phi i1 [ false, %38 ], [ %or.cond, %42 ] %.not.i.i.i5 = icmp eq i32 %4, 0 br i1 %.not.i.i.i5, label %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit6, label %45 @@ -487,7 +472,13 @@ _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit: ; preds = unreachable _ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit6: ; preds = %_ZN32pxrInternal_v0_24__pxrReserved__12UsdPrimRange8iteratorD2Ev.exit, %45, %58 - ret i1 %.ph + %57 = icmp eq ptr %2, %39 + %58 = or i32 %.sroa.10.0, %4 + %59 = icmp eq i32 %58, 0 + %or.cond = select i1 %57, i1 %59, i1 false + %60 = icmp eq i32 %.sroa.12.0, 0 + %or.cond14 = select i1 %or.cond, i1 %60, i1 false + ret i1 %or.cond14 } ; Function Attrs: mustprogress nounwind uwtable diff --git a/bench/php/optimized/pcre2_auto_possess.ll b/bench/php/optimized/pcre2_auto_possess.ll index 729a0ba92b3..aafbd232cdf 100644 --- a/bench/php/optimized/pcre2_auto_possess.ll +++ b/bench/php/optimized/pcre2_auto_possess.ll @@ -380,25 +380,25 @@ get_repeat_base.exit: ; preds = %11, %13, %15 33: ; preds = %26, %29, %5 %.0196 = phi i8 [ %6, %5 ], [ %6, %26 ], [ %30, %29 ] %.0194 = phi ptr [ %9, %5 ], [ %.1195, %26 ], [ %32, %29 ] - switch i8 %.0196, label %338 [ - i8 6, label %339 - i8 7, label %339 - i8 8, label %339 - i8 9, label %339 - i8 10, label %339 - i8 11, label %339 - i8 12, label %339 - i8 13, label %339 - i8 17, label %339 - i8 18, label %339 - i8 19, label %339 - i8 20, label %339 - i8 21, label %339 - i8 22, label %339 - i8 23, label %339 - i8 24, label %339 - i8 25, label %339 - i8 26, label %339 + switch i8 %.0196, label %335 [ + i8 6, label %336 + i8 7, label %336 + i8 8, label %336 + i8 9, label %336 + i8 10, label %336 + i8 11, label %336 + i8 12, label %336 + i8 13, label %336 + i8 17, label %336 + i8 18, label %336 + i8 19, label %336 + i8 20, label %336 + i8 21, label %336 + i8 22, label %336 + i8 23, label %336 + i8 24, label %336 + i8 25, label %336 + i8 26, label %336 i8 29, label %.thread i8 31, label %.thread i8 113, label %296 @@ -542,7 +542,7 @@ get_repeat_base.exit: ; preds = %11, %13, %15 store i32 %.0190, ptr %131, align 4, !tbaa !4 %132 = getelementptr inbounds nuw i8, ptr %4, i64 12 store i32 -1, ptr %132, align 4, !tbaa !4 - br label %339 + br label %336 133: ; preds = %33 br label %.thread211.thread @@ -718,12 +718,12 @@ get_repeat_base.exit: ; preds = %11, %13, %15 262: ; preds = %259 %263 = getelementptr inbounds nuw i8, ptr %4, i64 12 store i32 -1, ptr %263, align 4, !tbaa !4 - br label %339 + br label %336 264: ; preds = %259 %265 = getelementptr inbounds nuw i8, ptr %4, i64 16 store i32 -1, ptr %265, align 4, !tbaa !4 - br label %339 + br label %336 266: ; preds = %33, %33 %267 = load i8, ptr %.0194, align 1, !tbaa !18 @@ -740,7 +740,7 @@ get_repeat_base.exit: ; preds = %11, %13, %15 %274 = getelementptr inbounds nuw i8, ptr %4, i64 12 store i32 %273, ptr %274, align 4, !tbaa !4 %275 = getelementptr inbounds nuw i8, ptr %.0194, i64 2 - br label %339 + br label %336 276: ; preds = %266 %277 = getelementptr inbounds nuw i8, ptr %.0194, i64 1 @@ -766,7 +766,7 @@ get_repeat_base.exit: ; preds = %11, %13, %15 %288 = zext i8 %287 to i32 %289 = getelementptr inbounds nuw i8, ptr %4, i64 12 store i32 %288, ptr %289, align 4, !tbaa !4 - br label %339 + br label %336 290: ; preds = %282 %.0189.ptr = getelementptr inbounds nuw i8, ptr %4, i64 %.0189.idx @@ -781,7 +781,7 @@ get_repeat_base.exit: ; preds = %11, %13, %15 %294 = icmp eq i8 %.0196, 16 %295 = select i1 %294, i32 29, i32 31 store i32 %295, ptr %4, align 4, !tbaa !4 - br label %339 + br label %336 296: ; preds = %33, %33, %33, %33 %297 = and i8 %.0196, -2 @@ -807,7 +807,7 @@ get_repeat_base.exit: ; preds = %11, %13, %15 310: ; preds = %308, %298 %.0192 = phi ptr [ %307, %298 ], [ %309, %308 ] %311 = load i8, ptr %.0192, align 1, !tbaa !18 - switch i8 %311, label %328 [ + switch i8 %311, label %325 [ i8 98, label %312 i8 99, label %312 i8 102, label %312 @@ -825,47 +825,44 @@ get_repeat_base.exit: ; preds = %11, %13, %15 312: ; preds = %310, %310, %310, %310, %310, %310 store i32 1, ptr %8, align 4, !tbaa !4 %313 = getelementptr inbounds nuw i8, ptr %.0192, i64 1 - br label %328 + br label %325 314: ; preds = %310, %310, %310 %315 = getelementptr inbounds nuw i8, ptr %.0192, i64 1 - br label %328 + br label %325 316: ; preds = %310, %310, %310 %317 = getelementptr inbounds nuw i8, ptr %.0192, i64 1 %318 = load i8, ptr %317, align 1, !tbaa !18 - %319 = zext i8 %318 to i32 - %320 = shl nuw nsw i32 %319, 8 - %321 = getelementptr inbounds nuw i8, ptr %.0192, i64 2 - %322 = load i8, ptr %321, align 1, !tbaa !18 - %323 = zext i8 %322 to i32 - %324 = or disjoint i32 %320, %323 - %325 = icmp eq i32 %324, 0 - %326 = zext i1 %325 to i32 - store i32 %326, ptr %8, align 4, !tbaa !4 - %327 = getelementptr inbounds nuw i8, ptr %.0192, i64 5 - br label %328 - -328: ; preds = %316, %314, %312, %310 - %.1193 = phi ptr [ %.0192, %310 ], [ %327, %316 ], [ %315, %314 ], [ %313, %312 ] - %329 = ptrtoint ptr %.1193 to i64 - %330 = ptrtoint ptr %.0194 to i64 - %331 = sub i64 %329, %330 - %332 = trunc i64 %331 to i32 - %333 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store i32 %332, ptr %333, align 4, !tbaa !4 - %334 = ptrtoint ptr %.0192 to i64 - %335 = sub i64 %329, %334 - %336 = trunc i64 %335 to i32 - %337 = getelementptr inbounds nuw i8, ptr %4, i64 12 - store i32 %336, ptr %337, align 4, !tbaa !4 - br label %339 - -338: ; preds = %33 - br label %339 - -339: ; preds = %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %262, %264, %338, %328, %293, %283, %268, %130 - %.0191 = phi ptr [ null, %338 ], [ %.1193, %328 ], [ %275, %268 ], [ %281, %283 ], [ %281, %293 ], [ %.3, %130 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.4, %264 ], [ %.4, %262 ] + %319 = getelementptr inbounds nuw i8, ptr %.0192, i64 2 + %320 = load i8, ptr %319, align 1, !tbaa !18 + %321 = or i8 %320, %318 + %322 = icmp eq i8 %321, 0 + %323 = zext i1 %322 to i32 + store i32 %323, ptr %8, align 4, !tbaa !4 + %324 = getelementptr inbounds nuw i8, ptr %.0192, i64 5 + br label %325 + +325: ; preds = %316, %314, %312, %310 + %.1193 = phi ptr [ %.0192, %310 ], [ %324, %316 ], [ %315, %314 ], [ %313, %312 ] + %326 = ptrtoint ptr %.1193 to i64 + %327 = ptrtoint ptr %.0194 to i64 + %328 = sub i64 %326, %327 + %329 = trunc i64 %328 to i32 + %330 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store i32 %329, ptr %330, align 4, !tbaa !4 + %331 = ptrtoint ptr %.0192 to i64 + %332 = sub i64 %326, %331 + %333 = trunc i64 %332 to i32 + %334 = getelementptr inbounds nuw i8, ptr %4, i64 12 + store i32 %333, ptr %334, align 4, !tbaa !4 + br label %336 + +335:; preds = %33 + br label %336 + +338: ; preds = %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %262, %264, %335, %325, %293, %283, %268, %130 + %.0191 = phi ptr [ null, %335 ], [ %.1193, %325 ], [ %275, %268 ], [ %281, %283 ], [ %281, %293 ], [ %.3, %130 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.0194, %33 ], [ %.4, %264 ], [ %.4, %262 ] ret ptr %.0191 } diff --git a/bench/php/optimized/pcre2_study.ll b/bench/php/optimized/pcre2_study.ll index 8f9ab17c556..908411ec737 100644 --- a/bench/php/optimized/pcre2_study.ll +++ b/bench/php/optimized/pcre2_study.ll @@ -2067,13 +2067,10 @@ study_char_list.exit: ; preds = %.loopexit83.i, %559 732: ; preds = %.loopexit494, %.loopexit494, %.loopexit494 %733 = getelementptr inbounds nuw i8, ptr %.11461, i64 1 %734 = load i8, ptr %733, align 1, !tbaa !17 - %735 = zext i8 %734 to i32 - %736 = shl nuw nsw i32 %735, 8 - %737 = getelementptr inbounds nuw i8, ptr %.11461, i64 2 - %738 = load i8, ptr %737, align 1, !tbaa !17 - %739 = zext i8 %738 to i32 - %740 = or disjoint i32 %736, %739 - %.not595 = icmp eq i32 %740, 0 + %735 = getelementptr inbounds nuw i8, ptr %.11461, i64 2 + %736 = load i8, ptr %735, align 1, !tbaa !17 + %737 = or i8 %736, %734 + %.not595 = icmp eq i8 %737, 0 %spec.select322.idx = select i1 %.not595, i64 5, i64 0 %spec.select322 = getelementptr inbounds nuw i8, ptr %.11461, i64 %spec.select322.idx br i1 %.not595, label %.backedge.backedge, label %.thread470 diff --git a/bench/qemu/optimized/fdt.ll b/bench/qemu/optimized/fdt.ll index 03675895111..85458e6b3d7 100644 --- a/bench/qemu/optimized/fdt.ll +++ b/bench/qemu/optimized/fdt.ll @@ -26,7 +26,7 @@ define dso_local range(i32 -19, 2147483647) i32 @fdt_ro_probe_(ptr noundef %0) l %20 = ptrtoint ptr %0 to i64 %21 = and i64 %20, 7 %.not = icmp eq i64 %21, 0 - br i1 %.not, label %22, label %102 + br i1 %.not, label %22, label %95 22: ; preds = %1 %23 = load i8, ptr %0, align 1 @@ -46,7 +46,7 @@ define dso_local range(i32 -19, 2147483647) i32 @fdt_ro_probe_(ptr noundef %0) l %37 = load i8, ptr %36, align 1 %38 = zext i8 %37 to i32 %39 = or disjoint i32 %35, %38 - switch i32 %39, label %102 [ + switch i32 %39, label %95 [ i32 -804389139, label %40 i32 804389138, label %80 ] @@ -71,7 +71,7 @@ define dso_local range(i32 -19, 2147483647) i32 @fdt_ro_probe_(ptr noundef %0) l %57 = zext i8 %56 to i32 %58 = or disjoint i32 %54, %57 %59 = icmp ult i32 %58, 2 - br i1 %59, label %102, label %60 + br i1 %59, label %95, label %60 60: ; preds = %40 %61 = getelementptr inbounds nuw i8, ptr %0, i64 24 @@ -93,37 +93,30 @@ define dso_local range(i32 -19, 2147483647) i32 @fdt_ro_probe_(ptr noundef %0) l %77 = zext i8 %76 to i32 %78 = or disjoint i32 %74, %77 %79 = icmp ugt i32 %78, 17 - br i1 %79, label %102, label %100 + br i1 %79, label %95, label %93 80: ; preds = %22 %81 = getelementptr inbounds nuw i8, ptr %0, i64 36 %82 = load i8, ptr %81, align 1 - %83 = zext i8 %82 to i32 - %84 = shl nuw i32 %83, 24 - %85 = getelementptr inbounds nuw i8, ptr %0, i64 37 + %83 = getelementptr inbounds nuw i8, ptr %0, i64 37 + %84 = load i8, ptr %83, align 1 + %85 = getelementptr inbounds nuw i8, ptr %0, i64 38 %86 = load i8, ptr %85, align 1 - %87 = zext i8 %86 to i32 - %88 = shl nuw nsw i32 %87, 16 - %89 = or disjoint i32 %88, %84 - %90 = getelementptr inbounds nuw i8, ptr %0, i64 38 - %91 = load i8, ptr %90, align 1 - %92 = zext i8 %91 to i32 - %93 = shl nuw nsw i32 %92, 8 - %94 = or disjoint i32 %89, %93 - %95 = getelementptr inbounds nuw i8, ptr %0, i64 39 - %96 = load i8, ptr %95, align 1 - %97 = zext i8 %96 to i32 - %98 = or disjoint i32 %94, %97 - %99 = icmp eq i32 %98, 0 - br i1 %99, label %102, label %100 - -100: ; preds = %80, %60 - %101 = icmp ult i32 %19, 2147483647 - %. = select i1 %101, i32 %19, i32 -8 - br label %102 - -102: ; preds = %22, %100, %80, %60, %40, %1 - %.0 = phi i32 [ -19, %1 ], [ -10, %40 ], [ -10, %60 ], [ -7, %80 ], [ %., %100 ], [ -9, %22 ] + %87 = getelementptr inbounds nuw i8, ptr %0, i64 39 + %88 = load i8, ptr %87, align 1 + %89 = or i8 %84, %82 + %90 = or i8 %89, %86 + %91 = or i8 %90, %88 + %92 = icmp eq i8 %91, 0 + br i1 %92, label %95, label %93 + +93: ; preds = %80, %60 + %94 = icmp ult i32 %19, 2147483647 + %. = select i1 %94, i32 %19, i32 -8 + br label %95 + +95:; preds = %22, %93, %80, %60, %40, %1 + %.0 = phi i32 [ -19, %1 ], [ -10, %40 ], [ -10, %60 ], [ -7, %80 ], [ %., %93 ], [ -9, %22 ] ret i32 %.0 } diff --git a/bench/qemu/optimized/fdt_sw.ll b/bench/qemu/optimized/fdt_sw.ll index 9c0a278c54c..cce4b1a8ec0 100644 --- a/bench/qemu/optimized/fdt_sw.ll +++ b/bench/qemu/optimized/fdt_sw.ll @@ -213,31 +213,24 @@ define dso_local range(i32 -13, 1) i32 @fdt_resize(ptr noundef readonly captures store i32 %rev.i.i, ptr %113, align 4 %114 = getelementptr inbounds nuw i8, ptr %1, i64 12 %115 = load i8, ptr %114, align 1 - %116 = zext i8 %115 to i32 - %117 = shl nuw i32 %116, 24 - %118 = getelementptr inbounds nuw i8, ptr %1, i64 13 + %116 = getelementptr inbounds nuw i8, ptr %1, i64 13 + %117 = load i8, ptr %116, align 1 + %118 = getelementptr inbounds nuw i8, ptr %1, i64 14 %119 = load i8, ptr %118, align 1 - %120 = zext i8 %119 to i32 - %121 = shl nuw nsw i32 %120, 16 - %122 = or disjoint i32 %121, %117 - %123 = getelementptr inbounds nuw i8, ptr %1, i64 14 - %124 = load i8, ptr %123, align 1 - %125 = zext i8 %124 to i32 - %126 = shl nuw nsw i32 %125, 8 - %127 = or disjoint i32 %122, %126 - %128 = getelementptr inbounds nuw i8, ptr %1, i64 15 - %129 = load i8, ptr %128, align 1 - %130 = zext i8 %129 to i32 - %131 = or disjoint i32 %127, %130 - %.not45 = icmp eq i32 %131, 0 - br i1 %.not45, label %133, label %132 - -132: ; preds = %112 + %120 = getelementptr inbounds nuw i8, ptr %1, i64 15 + %121 = load i8, ptr %120, align 1 + %122 = or i8 %117, %115 + %123 = or i8 %122, %119 + %124 = or i8 %123, %121 + %.not45 = icmp eq i8 %124, 0 + br i1 %.not45, label %126, label %125 + +125: ; preds = %112 store i32 %rev.i.i, ptr %114, align 4 br label %133 -133: ; preds = %112, %132, %101, %24, %22, %3 - %.1 = phi i32 [ %.0.i, %3 ], [ -3, %22 ], [ -13, %24 ], [ -3, %101 ], [ 0, %132 ], [ 0, %112 ] +133: ; preds = %112, %125, %101, %24, %22, %3 + %.1 = phi i32 [ %.0.i, %3 ], [ -3, %22 ], [ -13, %24 ], [ -3, %101 ], [ 0, %125 ], [ 0, %112 ] ret i32 %.1 } @@ -269,23 +262,16 @@ define dso_local range(i32 -9, 1) i32 @fdt_add_reservemap_entry(ptr noundef capt 21: ; preds = %3 %22 = getelementptr inbounds nuw i8, ptr %0, i64 12 %23 = load i8, ptr %22, align 1 - %24 = zext i8 %23 to i32 - %25 = shl nuw i32 %24, 24 - %26 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %24 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %25 = load i8, ptr %24, align 1 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 14 %27 = load i8, ptr %26, align 1 - %28 = zext i8 %27 to i32 - %29 = shl nuw nsw i32 %28, 16 - %30 = or disjoint i32 %29, %25 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 14 - %32 = load i8, ptr %31, align 1 - %33 = zext i8 %32 to i32 - %34 = shl nuw nsw i32 %33, 8 - %35 = or disjoint i32 %30, %34 - %36 = getelementptr inbounds nuw i8, ptr %0, i64 15 - %37 = load i8, ptr %36, align 1 - %38 = zext i8 %37 to i32 - %39 = or disjoint i32 %35, %38 - %.not5.i = icmp eq i32 %39, 0 + %28 = getelementptr inbounds nuw i8, ptr %0, i64 15 + %29 = load i8, ptr %28, align 1 + %30 = or i8 %25, %23 + %31 = or i8 %30, %27 + %32 = or i8 %31, %29 + %.not5.i = icmp eq i8 %32, 0 br i1 %.not5.i, label %fdt_sw_probe_memrsv_.exit.thread, label %fdt_sw_probe_memrsv_.exit.thread18 fdt_sw_probe_memrsv_.exit: ; preds = %3 @@ -377,23 +363,16 @@ define dso_local range(i32 -9, 1) i32 @fdt_finish_reservemap(ptr noundef capture 19: ; preds = %1 %20 = getelementptr inbounds nuw i8, ptr %0, i64 12 %21 = load i8, ptr %20, align 1 - %22 = zext i8 %21 to i32 - %23 = shl nuw i32 %22, 24 - %24 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %22 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %23 = load i8, ptr %22, align 1 + %24 = getelementptr inbounds nuw i8, ptr %0, i64 14 %25 = load i8, ptr %24, align 1 - %26 = zext i8 %25 to i32 - %27 = shl nuw nsw i32 %26, 16 - %28 = or disjoint i32 %27, %23 - %29 = getelementptr inbounds nuw i8, ptr %0, i64 14 - %30 = load i8, ptr %29, align 1 - %31 = zext i8 %30 to i32 - %32 = shl nuw nsw i32 %31, 8 - %33 = or disjoint i32 %28, %32 - %34 = getelementptr inbounds nuw i8, ptr %0, i64 15 - %35 = load i8, ptr %34, align 1 - %36 = zext i8 %35 to i32 - %37 = or disjoint i32 %33, %36 - %.not5.i.i = icmp eq i32 %37, 0 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 15 + %27 = load i8, ptr %26, align 1 + %28 = or i8 %23, %21 + %29 = or i8 %28, %25 + %30 = or i8 %29, %27 + %.not5.i.i = icmp eq i8 %30, 0 br i1 %.not5.i.i, label %fdt_sw_probe_memrsv_.exit.thread.i, label %fdt_add_reservemap_entry.exit.thread fdt_sw_probe_memrsv_.exit.i: ; preds = %1 @@ -450,20 +429,20 @@ fdt_sw_probe_memrsv_.exit.thread.i: ; preds = %19 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %79, i8 0, i64 16, i1 false) store i32 %rev.i.i.i, ptr %39, align 4 %81 = load i8, ptr %59, align 1 + %75 = zext i8 %74 to i32 + %76 = shl nuw i32 %75, 24 + %77 = load i8, ptr %56, align 1 + %78 = zext i8 %77 to i32 + %79 = shl nuw nsw i32 %78, 16 + %80 = or disjoint i32 %79, %76 + %81 = load i8, ptr %61, align 1 %82 = zext i8 %81 to i32 - %83 = shl nuw i32 %82, 24 - %84 = load i8, ptr %63, align 1 - %85 = zext i8 %84 to i32 - %86 = shl nuw nsw i32 %85, 16 - %87 = or disjoint i32 %86, %83 - %88 = load i8, ptr %68, align 1 - %89 = zext i8 %88 to i32 - %90 = shl nuw nsw i32 %89, 8 - %91 = or disjoint i32 %87, %90 - %92 = load i8, ptr %73, align 1 - %93 = zext i8 %92 to i32 - %94 = or disjoint i32 %91, %93 - %rev.i.i = tail call noundef i32 @llvm.bswap.i32(i32 %94) + %83 = shl nuw nsw i32 %82, 8 + %84 = or disjoint i32 %80, %83 + %85 = load i8, ptr %66, align 1 + %86 = zext i8 %85 to i32 + %87 = or disjoint i32 %84, %86 + %rev.i.i = tail call noundef i32 @llvm.bswap.i32(i32 %87) store i32 %rev.i.i, ptr %20, align 4 br label %fdt_add_reservemap_entry.exit.thread diff --git a/bench/recastnavigation/optimized/imguiRenderGL.ll b/bench/recastnavigation/optimized/imguiRenderGL.ll index f8800c2132d..7ad5ba22e02 100644 --- a/bench/recastnavigation/optimized/imguiRenderGL.ll +++ b/bench/recastnavigation/optimized/imguiRenderGL.ll @@ -2511,16 +2511,13 @@ define dso_local range(i32 0, 2) i32 @stbtt_IsGlyphEmpty(ptr noundef readonly ca %.val = load i8, ptr %80, align 1 %81 = getelementptr i8, ptr %80, i64 1 %.val7 = load i8, ptr %81, align 1 - %82 = zext i8 %.val to i16 - %83 = shl nuw i16 %82, 8 - %84 = zext i8 %.val7 to i16 - %85 = or disjoint i16 %83, %84 - %86 = icmp eq i16 %85, 0 - %87 = zext i1 %86 to i32 + %82 = or i8 %.val7, %.val + %83 = icmp eq i8 %82, 0 + %84 = zext i1 %83 to i32 br label %_ZL20stbtt__GetGlyfOffsetPK14stbtt_fontinfoi.exit.thread _ZL20stbtt__GetGlyfOffsetPK14stbtt_fontinfoi.exit.thread: ; preds = %75, %5, %2, %78 - %.0 = phi i32 [ %87, %78 ], [ 1, %2 ], [ 1, %5 ], [ 1, %75 ] + %.0 = phi i32 [ %84, %78 ], [ 1, %2 ], [ 1, %5 ], [ 1, %75 ] ret i32 %.0 } @@ -2677,105 +2674,102 @@ define dso_local range(i32 -32768, 32768) i32 @stbtt_GetGlyphKernAdvance(ptr nou %.val32 = load i8, ptr %11, align 1 %12 = getelementptr i8, ptr %9, i64 3 %.val33 = load i8, ptr %12, align 1 - %13 = zext i8 %.val32 to i16 - %14 = shl nuw i16 %13, 8 - %15 = zext i8 %.val33 to i16 - %16 = or disjoint i16 %14, %15 - %17 = icmp eq i16 %16, 0 - br i1 %17, label %.loopexit, label %18 - -18: ; preds = %10 - %19 = getelementptr inbounds nuw i8, ptr %9, i64 8 - %.val30 = load i8, ptr %19, align 1 - %20 = getelementptr i8, ptr %9, i64 9 - %.val31 = load i8, ptr %20, align 1 - %21 = zext i8 %.val30 to i16 - %22 = shl nuw i16 %21, 8 - %23 = zext i8 %.val31 to i16 - %24 = or disjoint i16 %22, %23 - %.not27 = icmp eq i16 %24, 1 - br i1 %.not27, label %25, label %.loopexit - -25: ; preds = %18 - %26 = getelementptr inbounds nuw i8, ptr %9, i64 10 - %.val = load i8, ptr %26, align 1 - %27 = getelementptr i8, ptr %9, i64 11 - %.val29 = load i8, ptr %27, align 1 - %28 = zext i8 %.val to i32 - %29 = shl nuw nsw i32 %28, 8 - %30 = zext i8 %.val29 to i32 - %31 = or disjoint i32 %29, %30 - %32 = shl i32 %1, 16 - %33 = or i32 %32, %2 - %.not2836 = icmp eq i32 %31, 0 + %13 = or i8 %.val33, %.val32 + %14 = icmp eq i8 %13, 0 + br i1 %14, label %.loopexit, label %15 + +15:; preds = %10 + %16 = getelementptr inbounds nuw i8, ptr %9, i64 8 + %.val30 = load i8, ptr %16, align 1 + %17 = getelementptr i8, ptr %9, i64 9 + %.val31 = load i8, ptr %17, align 1 + %18 = zext i8 %.val30 to i16 + %19 = shl nuw i16 %18, 8 + %20 = zext i8 %.val31 to i16 + %21 = or disjoint i16 %19, %20 + %.not27 = icmp eq i16 %21, 1 + br i1 %.not27, label %62, label %.loopexit + +62: ; preds = %15 + %23 = getelementptr inbounds nuw i8, ptr %9, i64 10 + %.val = load i8, ptr %23, align 1 + %24 = getelementptr i8, ptr %9, i64 11 + %.val29 = load i8, ptr %24, align 1 + %25 = zext i8 %.val to i32 + %26 = shl nuw nsw i32 %25, 8 + %27 = zext i8 %.val29 to i32 + %28 = or disjoint i32 %26, %27 + %29 = shl i32 %1, 16 + %30 = or i32 %29, %2 + %.not2836 = icmp eq i32 %28, 0 br i1 %.not2836, label %.loopexit, label %.lr.ph -.lr.ph: ; preds = %25 - %34 = add nsw i32 %31, -1 - %35 = getelementptr inbounds nuw i8, ptr %9, i64 18 - br label %36 - -36: ; preds = %.lr.ph, %75 - %.02238 = phi i32 [ %34, %.lr.ph ], [ %.1, %75 ] - %.02337 = phi i32 [ 0, %.lr.ph ], [ %.124, %75 ] - %37 = add nsw i32 %.02238, %.02337 - %38 = ashr i32 %37, 1 - %39 = mul nsw i32 %38, 6 - %40 = sext i32 %39 to i64 - %41 = getelementptr inbounds i8, ptr %35, i64 %40 - %42 = load i8, ptr %41, align 1 - %43 = zext i8 %42 to i32 - %44 = shl nuw i32 %43, 24 - %45 = getelementptr inbounds nuw i8, ptr %41, i64 1 - %46 = load i8, ptr %45, align 1 - %47 = zext i8 %46 to i32 - %48 = shl nuw nsw i32 %47, 16 - %49 = or disjoint i32 %48, %44 - %50 = getelementptr inbounds nuw i8, ptr %41, i64 2 - %51 = load i8, ptr %50, align 1 - %52 = zext i8 %51 to i32 - %53 = shl nuw nsw i32 %52, 8 - %54 = or disjoint i32 %49, %53 - %55 = getelementptr inbounds nuw i8, ptr %41, i64 3 - %56 = load i8, ptr %55, align 1 - %57 = zext i8 %56 to i32 - %58 = or disjoint i32 %54, %57 - %59 = icmp ult i32 %33, %58 - br i1 %59, label %60, label %62 - -60: ; preds = %36 - %61 = add nsw i32 %38, -1 - br label %75 - -62: ; preds = %36 - %63 = icmp ugt i32 %33, %58 - br i1 %63, label %64, label %66 - 64: ; preds = %62 - %65 = add nsw i32 %38, 1 - br label %75 + %65 = add nsw i32 %28, -1 + %32 = getelementptr inbounds nuw i8, ptr %9, i64 18 + br label %33 -66: ; preds = %62 - %67 = getelementptr inbounds nuw i8, ptr %9, i64 22 - %68 = getelementptr inbounds i8, ptr %67, i64 %40 - %.val34 = load i8, ptr %68, align 1 - %69 = getelementptr i8, ptr %68, i64 1 - %.val35 = load i8, ptr %69, align 1 - %70 = zext i8 %.val34 to i16 - %71 = shl nuw i16 %70, 8 - %72 = zext i8 %.val35 to i16 - %73 = or disjoint i16 %71, %72 - %74 = sext i16 %73 to i32 +66: ; preds = %64, %72 + %.02238 = phi i32 [ %31, %.lr.ph ], [ %.1, %72 ] + %.02337 = phi i32 [ 0, %.lr.ph ], [ %.124, %72 ] + %34 = add nsw i32 %.02238, %.02337 + %35 = ashr i32 %34, 1 + %36 = mul nsw i32 %35, 6 + %37 = sext i32 %36 to i64 + %41 = getelementptr inbounds i8, ptr %32, i64 %37 + %42 = load i8, ptr %38, align 1 + %43 = zext i8 %39 to i32 + %41 = shl nuw i32 %40, 24 + %42 = getelementptr inbounds nuw i8, ptr %38, i64 1 + %43 = load i8, ptr %42, align 1 + %44 = zext i8 %43 to i32 + %45 = shl nuw nsw i32 %44, 16 + %46 = or disjoint i32 %45, %41 + %47 = getelementptr inbounds nuw i8, ptr %38, i64 2 + %48 = load i8, ptr %47, align 1 + %49 = zext i8 %48 to i32 + %50 = shl nuw nsw i32 %49, 8 + %51 = or disjoint i32 %46, %50 + %52 = getelementptr inbounds nuw i8, ptr %38, i64 3 + %53 = load i8, ptr %52, align 1 + %54 = zext i8 %53 to i32 + %55 = or disjoint i32 %51, %54 + %56 = icmp ult i32 %30, %55 + br i1 %56, label %57, label %59 + +57: ; preds = %33 + %58 = add nsw i32 %35, -1 + br label %72 + +59: ; preds = %33 + %60 = icmp ugt i32 %30, %55 + br i1 %60, label %61, label %63 + +61: ; preds = %59 + %62 = add nsw i32 %35, 1 + br label %72 + +63: ; preds = %59 + %64 = getelementptr inbounds nuw i8, ptr %9, i64 22 + %65 = getelementptr inbounds i8, ptr %64, i64 %37 + %.val34 = load i8, ptr %65, align 1 + %66 = getelementptr i8, ptr %65, i64 1 + %.val35 = load i8, ptr %66, align 1 + %67 = zext i8 %.val34 to i16 + %68 = shl nuw i16 %67, 8 + %69 = zext i8 %.val35 to i16 + %70 = or disjoint i16 %68, %69 + %71 = sext i16 %70 to i32 br label %.loopexit 75: ; preds = %64, %60 - %.124 = phi i32 [ %.02337, %60 ], [ %65, %64 ] - %.1 = phi i32 [ %61, %60 ], [ %.02238, %64 ] + %.124 = phi i32 [ %.02337, %60 ], [ %65, %61 ] + %.1 = phi i32 [ %61, %60 ], [ %.02238, %61 ] %.not28 = icmp sgt i32 %.124, %.1 br i1 %.not28, label %.loopexit, label %36, !llvm.loop !16 -.loopexit: ; preds = %75, %25, %18, %10, %3, %66 - %.0 = phi i32 [ %74, %66 ], [ 0, %3 ], [ 0, %10 ], [ 0, %18 ], [ 0, %25 ], [ 0, %75 ] +.loopexit: ; preds = %75, %22, %15, %10, %3, %66 + %.0 = phi i32 [ %74, %63 ], [ 0, %3 ], [ 0, %10 ], [ 0, %15 ], [ 0, %22 ], [ 0, %75 ] ret i32 %.0 } @@ -2797,47 +2791,44 @@ define dso_local range(i32 -32768, 32768) i32 @stbtt_GetCodepointKernAdvance(ptr %.val32.i = load i8, ptr %13, align 1 %14 = getelementptr i8, ptr %12, i64 3 %.val33.i = load i8, ptr %14, align 1 - %15 = zext i8 %.val32.i to i16 - %16 = shl nuw i16 %15, 8 - %17 = zext i8 %.val33.i to i16 - %18 = or disjoint i16 %16, %17 - %19 = icmp eq i16 %18, 0 - br i1 %19, label %stbtt_GetGlyphKernAdvance.exit, label %20 - -20: ; preds = %6 - %21 = getelementptr inbounds nuw i8, ptr %12, i64 8 - %.val30.i = load i8, ptr %21, align 1 - %22 = getelementptr i8, ptr %12, i64 9 - %.val31.i = load i8, ptr %22, align 1 - %23 = zext i8 %.val30.i to i16 - %24 = shl nuw i16 %23, 8 - %25 = zext i8 %.val31.i to i16 - %26 = or disjoint i16 %24, %25 - %.not27.i = icmp eq i16 %26, 1 - br i1 %.not27.i, label %27, label %stbtt_GetGlyphKernAdvance.exit - -27: ; preds = %20 - %28 = getelementptr inbounds nuw i8, ptr %12, i64 10 - %.val.i = load i8, ptr %28, align 1 - %29 = getelementptr i8, ptr %12, i64 11 - %.val29.i = load i8, ptr %29, align 1 - %30 = zext i8 %.val.i to i32 - %31 = shl nuw nsw i32 %30, 8 - %32 = zext i8 %.val29.i to i32 - %33 = or disjoint i32 %31, %32 - %34 = shl i32 %7, 16 - %35 = or i32 %34, %8 - %.not2836.i = icmp eq i32 %33, 0 + %15 = or i8 %.val33.i, %.val32.i + %16 = icmp eq i8 %15, 0 + br i1 %16, label %stbtt_GetGlyphKernAdvance.exit, label %17 + +17:; preds = %6 + %18 = getelementptr inbounds nuw i8, ptr %12, i64 8 + %.val30.i = load i8, ptr %18, align 1 + %19 = getelementptr i8, ptr %12, i64 9 + %.val31.i = load i8, ptr %19, align 1 + %20 = zext i8 %.val30.i to i16 + %21 = shl nuw i16 %20, 8 + %22 = zext i8 %.val31.i to i16 + %23 = or disjoint i16 %21, %22 + %.not27.i = icmp eq i16 %23, 1 + br i1 %.not27.i, label %24, label %stbtt_GetGlyphKernAdvance.exit + +24:; preds = %17 + %25 = getelementptr inbounds nuw i8, ptr %12, i64 10 + %.val.i = load i8, ptr %25, align 1 + %26 = getelementptr i8, ptr %12, i64 11 + %.val29.i = load i8, ptr %26, align 1 + %27 = zext i8 %.val.i to i32 + %28 = shl nuw nsw i32 %27, 8 + %29 = zext i8 %.val29.i to i32 + %30 = or disjoint i32 %28, %29 + %31 = shl i32 %7, 16 + %32 = or i32 %31, %8 + %.not2836.i = icmp eq i32 %30, 0 br i1 %.not2836.i, label %stbtt_GetGlyphKernAdvance.exit, label %.lr.ph.i -.lr.ph.i: ; preds = %27 - %36 = add nsw i32 %33, -1 +.lr.ph.i: ; preds = %24 + %36 = add nsw i32 %30, -1 %37 = getelementptr inbounds nuw i8, ptr %12, i64 18 br label %38 38: ; preds = %77, %.lr.ph.i - %.02238.i = phi i32 [ %36, %.lr.ph.i ], [ %.1.i, %77 ] - %.02337.i = phi i32 [ 0, %.lr.ph.i ], [ %.124.i, %77 ] + %.02238.i = phi i32 [ %36, %.lr.ph.i ], [ %.1.i, %74 ] + %.02337.i = phi i32 [ 0, %.lr.ph.i ], [ %.124.i, %74 ] %39 = add nsw i32 %.02337.i, %.02238.i %40 = ashr i32 %39, 1 %41 = mul nsw i32 %40, 6 @@ -2860,7 +2851,7 @@ define dso_local range(i32 -32768, 32768) i32 @stbtt_GetCodepointKernAdvance(ptr %58 = load i8, ptr %57, align 1 %59 = zext i8 %58 to i32 %60 = or disjoint i32 %56, %59 - %61 = icmp ult i32 %35, %60 + %61 = icmp ult i32 %32, %60 br i1 %61, label %62, label %64 62: ; preds = %38 @@ -2868,7 +2859,7 @@ define dso_local range(i32 -32768, 32768) i32 @stbtt_GetCodepointKernAdvance(ptr br label %77 64: ; preds = %38 - %65 = icmp ugt i32 %35, %60 + %65 = icmp ugt i32 %32, %60 br i1 %65, label %66, label %68 66: ; preds = %64 @@ -2889,13 +2880,13 @@ define dso_local range(i32 -32768, 32768) i32 @stbtt_GetCodepointKernAdvance(ptr br label %stbtt_GetGlyphKernAdvance.exit 77: ; preds = %66, %62 - %.124.i = phi i32 [ %.02337.i, %62 ], [ %67, %66 ] - %.1.i = phi i32 [ %63, %62 ], [ %.02238.i, %66 ] + %.124.i = phi i32 [ %.02337.i, %59 ], [ %67, %63 ] + %.1.i = phi i32 [ %63, %59 ], [ %.02238.i, %63 ] %.not28.i = icmp sgt i32 %.124.i, %.1.i br i1 %.not28.i, label %stbtt_GetGlyphKernAdvance.exit, label %38, !llvm.loop !16 -stbtt_GetGlyphKernAdvance.exit: ; preds = %77, %68, %27, %20, %6, %3 - %.0 = phi i32 [ 0, %3 ], [ %76, %68 ], [ 0, %6 ], [ 0, %20 ], [ 0, %27 ], [ 0, %77 ] +stbtt_GetGlyphKernAdvance.exit: ; preds = %77, %68, %24, %17, %6, %3 + %.0 = phi i32 [ 0, %3 ], [ %76, %65 ], [ 0, %6 ], [ 0, %17 ], [ 0, %24 ], [ 0, %74 ] ret i32 %.0 } diff --git a/bench/rust-analyzer-rs/optimized/36cskjvhktchzlnh.ll b/bench/rust-analyzer-rs/optimized/36cskjvhktchzlnh.ll index 6f0fce51b51..281614ba31e 100644 --- a/bench/rust-analyzer-rs/optimized/36cskjvhktchzlnh.ll +++ b/bench/rust-analyzer-rs/optimized/36cskjvhktchzlnh.ll @@ -734,7 +734,7 @@ switch.lookup: %.sroa.411.0.insert.ext = zext i8 %.sroa.411.1 to i64 %.sroa.411.0.insert.shift = shl nuw nsw i64 %.sroa.411.0.insert.ext, 8 %61 = or disjoint i64 %.sroa.411.0.insert.shift, %.sroa.010.0 - %62 = or disjoint i64 %.sroa.613.0.insert.shift, %.sroa.010.0 + %62 = or i64 %.sroa.010.0, %.sroa.613.0.insert.ext %or.cond.i = icmp eq i64 %62, 0 %.sroa.616.17.insert.insert.i = select i1 %or.cond.i, i64 5121, i64 %61 %.sroa.616.20.insert.insert.i = or disjoint i64 %.sroa.616.17.insert.insert.i, %.sroa.613.0.insert.shift diff --git a/bench/spike/optimized/fdt.ll b/bench/spike/optimized/fdt.ll index ab40edb32ad..d151cdb9254 100644 --- a/bench/spike/optimized/fdt.ll +++ b/bench/spike/optimized/fdt.ll @@ -40,7 +40,7 @@ define range(i32 -10, 2147483647) i32 @fdt_ro_probe_(ptr noundef readonly captur %34 = load i8, ptr %33, align 1, !tbaa !3 %35 = zext i8 %34 to i32 %36 = or disjoint i32 %32, %35 - switch i32 %36, label %99 [ + switch i32 %36, label %92 [ i32 -804389139, label %37 i32 804389138, label %77 ] @@ -65,7 +65,7 @@ define range(i32 -10, 2147483647) i32 @fdt_ro_probe_(ptr noundef readonly captur %54 = zext i8 %53 to i32 %55 = or disjoint i32 %51, %54 %56 = icmp ult i32 %55, 2 - br i1 %56, label %99, label %57 + br i1 %56, label %92, label %57 57: ; preds = %37 %58 = getelementptr inbounds nuw i8, ptr %0, i64 24 @@ -87,37 +87,30 @@ define range(i32 -10, 2147483647) i32 @fdt_ro_probe_(ptr noundef readonly captur %74 = zext i8 %73 to i32 %75 = or disjoint i32 %71, %74 %76 = icmp ugt i32 %75, 17 - br i1 %76, label %99, label %97 + br i1 %76, label %92, label %90 77: ; preds = %1 %78 = getelementptr inbounds nuw i8, ptr %0, i64 36 %79 = load i8, ptr %78, align 1, !tbaa !3 - %80 = zext i8 %79 to i32 - %81 = shl nuw i32 %80, 24 - %82 = getelementptr inbounds nuw i8, ptr %0, i64 37 + %80 = getelementptr inbounds nuw i8, ptr %0, i64 37 + %81 = load i8, ptr %80, align 1, !tbaa !3 + %82 = getelementptr inbounds nuw i8, ptr %0, i64 38 %83 = load i8, ptr %82, align 1, !tbaa !3 - %84 = zext i8 %83 to i32 - %85 = shl nuw nsw i32 %84, 16 - %86 = or disjoint i32 %85, %81 - %87 = getelementptr inbounds nuw i8, ptr %0, i64 38 - %88 = load i8, ptr %87, align 1, !tbaa !3 - %89 = zext i8 %88 to i32 - %90 = shl nuw nsw i32 %89, 8 - %91 = or disjoint i32 %86, %90 - %92 = getelementptr inbounds nuw i8, ptr %0, i64 39 - %93 = load i8, ptr %92, align 1, !tbaa !3 - %94 = zext i8 %93 to i32 - %95 = or disjoint i32 %91, %94 - %96 = icmp eq i32 %95, 0 - br i1 %96, label %99, label %97 - -97: ; preds = %77, %57 - %98 = icmp ult i32 %19, 2147483647 - %. = select i1 %98, i32 %19, i32 -8 - br label %99 - -99: ; preds = %1, %97, %77, %57, %37 - %.0 = phi i32 [ -10, %37 ], [ -10, %57 ], [ -7, %77 ], [ %., %97 ], [ -9, %1 ] + %84 = getelementptr inbounds nuw i8, ptr %0, i64 39 + %85 = load i8, ptr %84, align 1, !tbaa !3 + %86 = or i8 %81, %79 + %87 = or i8 %86, %83 + %88 = or i8 %87, %85 + %89 = icmp eq i8 %88, 0 + br i1 %89, label %92, label %90 + +90: ; preds = %77, %57 + %91 = icmp ult i32 %19, 2147483647 + %. = select i1 %91, i32 %19, i32 -8 + br label %92 + +92:; preds = %1, %90, %77, %57, %37 + %.0 = phi i32 [ -10, %37 ], [ -10, %57 ], [ -7, %77 ], [ %., %90 ], [ -9, %1 ] ret i32 %.0 } diff --git a/bench/spike/optimized/fdt_ro.ll b/bench/spike/optimized/fdt_ro.ll index 549b0dd1926..7aa0e5de0c5 100644 --- a/bench/spike/optimized/fdt_ro.ll +++ b/bench/spike/optimized/fdt_ro.ll @@ -658,9 +658,9 @@ define i32 @fdt_num_mem_rsv(ptr noundef readonly captures(none) %0) local_unname %48 = getelementptr inbounds nuw i8, ptr %46, i64 %47 br label %.split -.split: ; preds = %.split.preheader, %92 - %indvars.iv = phi i64 [ 0, %.split.preheader ], [ %indvars.iv.next, %92 ] - %49 = phi i32 [ %18, %.split.preheader ], [ %95, %92 ] +.split: ; preds = %.split.preheader, %77 + %indvars.iv = phi i64 [ 0, %.split.preheader ], [ %indvars.iv.next, %77 ] + %49 = phi i32 [ %18, %.split.preheader ], [ %95, %77 ] %50 = sext i32 %49 to i64 %51 = icmp ult i64 %37, %50 br i1 %51, label %fdt_mem_rsv.exit.thread.split, label %52 @@ -668,46 +668,31 @@ define i32 @fdt_num_mem_rsv(ptr noundef readonly captures(none) %0) local_unname 52: ; preds = %.split %53 = getelementptr inbounds nuw %struct.fdt_reserve_entry, ptr %48, i64 %indvars.iv, i32 1 %54 = load i8, ptr %53, align 1, !tbaa !3 - %55 = zext i8 %54 to i64 - %56 = shl nuw i64 %55, 56 - %57 = getelementptr inbounds nuw i8, ptr %53, i64 1 + %55 = getelementptr inbounds nuw i8, ptr %53, i64 1 + %56 = load i8, ptr %55, align 1, !tbaa !3 + %57 = getelementptr inbounds nuw i8, ptr %53, i64 2 %58 = load i8, ptr %57, align 1, !tbaa !3 - %59 = zext i8 %58 to i64 - %60 = shl nuw nsw i64 %59, 48 - %61 = or disjoint i64 %60, %56 - %62 = getelementptr inbounds nuw i8, ptr %53, i64 2 - %63 = load i8, ptr %62, align 1, !tbaa !3 - %64 = zext i8 %63 to i64 - %65 = shl nuw nsw i64 %64, 40 - %66 = or disjoint i64 %61, %65 - %67 = getelementptr inbounds nuw i8, ptr %53, i64 3 + %59 = getelementptr inbounds nuw i8, ptr %53, i64 3 + %60 = load i8, ptr %59, align 1, !tbaa !3 + %61 = getelementptr inbounds nuw i8, ptr %53, i64 4 + %62 = load i8, ptr %61, align 1, !tbaa !3 + %63 = getelementptr inbounds nuw i8, ptr %53, i64 5 + %64 = load i8, ptr %63, align 1, !tbaa !3 + %65 = getelementptr inbounds nuw i8, ptr %53, i64 6 + %66 = load i8, ptr %65, align 1, !tbaa !3 + %67 = getelementptr inbounds nuw i8, ptr %53, i64 7 %68 = load i8, ptr %67, align 1, !tbaa !3 - %69 = zext i8 %68 to i64 - %70 = shl nuw nsw i64 %69, 32 - %71 = or disjoint i64 %66, %70 - %72 = getelementptr inbounds nuw i8, ptr %53, i64 4 - %73 = load i8, ptr %72, align 1, !tbaa !3 - %74 = zext i8 %73 to i64 - %75 = shl nuw nsw i64 %74, 24 - %76 = or disjoint i64 %71, %75 - %77 = getelementptr inbounds nuw i8, ptr %53, i64 5 - %78 = load i8, ptr %77, align 1, !tbaa !3 - %79 = zext i8 %78 to i64 - %80 = shl nuw nsw i64 %79, 16 - %81 = or disjoint i64 %76, %80 - %82 = getelementptr inbounds nuw i8, ptr %53, i64 6 - %83 = load i8, ptr %82, align 1, !tbaa !3 - %84 = zext i8 %83 to i64 - %85 = shl nuw nsw i64 %84, 8 - %86 = or i64 %81, %85 - %87 = getelementptr inbounds nuw i8, ptr %53, i64 7 - %88 = load i8, ptr %87, align 1, !tbaa !3 - %89 = zext i8 %88 to i64 - %90 = or i64 %86, %89 - %91 = icmp eq i64 %90, 0 - br i1 %91, label %fdt_mem_rsv.exit.thread.split.split.loop.exit, label %92 - -92: ; preds = %52 + %69 = or i8 %56, %54 + %70 = or i8 %69, %58 + %71 = or i8 %70, %60 + %72 = or i8 %71, %62 + %73 = or i8 %72, %64 + %74 = or i8 %73, %66 + %75 = or i8 %74, %68 + %76 = icmp eq i8 %75, 0 + br i1 %76, label %fdt_mem_rsv.exit.thread.split.split.loop.exit, label %77 + +77:; preds = %52 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %93 = trunc nsw i64 %indvars.iv.next to i32 %94 = shl i32 %93, 4 @@ -719,8 +704,8 @@ fdt_mem_rsv.exit.thread.split.split.loop.exit: ; preds = %52 %97 = trunc nuw nsw i64 %indvars.iv to i32 br label %fdt_mem_rsv.exit.thread.split -fdt_mem_rsv.exit.thread.split: ; preds = %.split, %92, %fdt_mem_rsv.exit.thread.split.split.loop.exit - %.0.split.ph = phi i32 [ %97, %fdt_mem_rsv.exit.thread.split.split.loop.exit ], [ -8, %92 ], [ -8, %.split ] +fdt_mem_rsv.exit.thread.split: ; preds = %.split, %77, %fdt_mem_rsv.exit.thread.split.split.loop.exit + %.0.split.ph = phi i32 [ %97, %fdt_mem_rsv.exit.thread.split.split.loop.exit ], [ -8, %77 ], [ -8, %.split ] ret i32 %.0.split.ph } @@ -3184,49 +3169,119 @@ define i32 @fdt_check_full(ptr noundef %0, i64 noundef %1) local_unnamed_addr #0 br i1 %28, label %.loopexit, label %29 29: ; preds = %9 - %30 = tail call i32 @fdt_num_mem_rsv(ptr noundef nonnull %0) - %31 = icmp slt i32 %30, 0 - br i1 %31, label %.loopexit, label %.preheader - -.preheader: ; preds = %29 - %32 = call i32 @fdt_next_tag(ptr noundef nonnull %0, i32 noundef 0, ptr noundef nonnull %4) #9 - %33 = load i32, ptr %4, align 4, !tbaa !6 - %34 = icmp slt i32 %33, 0 - br i1 %34, label %.loopexit, label %.lr.ph - -.lr.ph: ; preds = %.preheader, %50 - %35 = phi i32 [ %53, %50 ], [ %33, %.preheader ] - %36 = phi i32 [ %52, %50 ], [ %32, %.preheader ] - %37 = phi i32 [ %51, %50 ], [ 0, %.preheader ] - %.01828 = phi i32 [ %.1, %50 ], [ 0, %.preheader ] - switch i32 %36, label %.loopexit [ - i32 4, label %50 - i32 9, label %38 - i32 1, label %39 - i32 2, label %42 - i32 3, label %46 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %31 = load i8, ptr %30, align 1, !tbaa !3 + %32 = zext i8 %31 to i32 + %33 = shl nuw i32 %32, 24 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 17 + %35 = load i8, ptr %34, align 1, !tbaa !3 + %36 = zext i8 %35 to i32 + %37 = shl nuw nsw i32 %36, 16 + %38 = or disjoint i32 %37, %33 + %39 = getelementptr inbounds nuw i8, ptr %0, i64 18 + %40 = load i8, ptr %39, align 1, !tbaa !3 + %41 = zext i8 %40 to i32 + %42 = shl nuw nsw i32 %41, 8 + %43 = or disjoint i32 %38, %42 + %44 = getelementptr inbounds nuw i8, ptr %0, i64 19 + %45 = load i8, ptr %44, align 1, !tbaa !3 + %46 = zext i8 %45 to i32 + %47 = or disjoint i32 %43, %46 + %48 = add nsw i64 %27, -16 + %49 = zext i8 %35 to i64 + %50 = shl nuw nsw i64 %49, 16 + %51 = getelementptr inbounds nuw i8, ptr %0, i64 %50 + %52 = zext i8 %31 to i64 + %53 = shl nuw nsw i64 %52, 24 + %54 = getelementptr inbounds nuw i8, ptr %51, i64 %53 + %55 = zext i8 %40 to i64 + %56 = shl nuw nsw i64 %55, 8 + %57 = getelementptr inbounds nuw i8, ptr %54, i64 %56 + %58 = zext i8 %45 to i64 + %59 = getelementptr inbounds nuw i8, ptr %57, i64 %58 + br label %.split.i + +.split.i: ; preds = %91, %29 + %indvars.iv.i = phi i64 [ 0, %29 ], [ %indvars.iv.next.i, %91 ] + %60 = phi i32 [ %47, %29 ], [ %94, %91 ] + %61 = sext i32 %60 to i64 + %62 = icmp ult i64 %48, %61 + br i1 %62, label %fdt_num_mem_rsv.exit.thread, label %63 + +63: ; preds = %.split.i + %64 = getelementptr inbounds nuw %struct.fdt_reserve_entry, ptr %59, i64 %indvars.iv.i, i32 1 + %65 = load i8, ptr %64, align 1, !tbaa !3 + %66 = getelementptr inbounds nuw i8, ptr %64, i64 1 + %67 = load i8, ptr %66, align 1, !tbaa !3 + %68 = getelementptr inbounds nuw i8, ptr %64, i64 2 + %69 = load i8, ptr %68, align 1, !tbaa !3 + %70 = getelementptr inbounds nuw i8, ptr %64, i64 3 + %71 = load i8, ptr %70, align 1, !tbaa !3 + %72 = getelementptr inbounds nuw i8, ptr %64, i64 4 + %73 = load i8, ptr %72, align 1, !tbaa !3 + %74 = getelementptr inbounds nuw i8, ptr %64, i64 5 + %75 = load i8, ptr %74, align 1, !tbaa !3 + %76 = getelementptr inbounds nuw i8, ptr %64, i64 6 + %77 = load i8, ptr %76, align 1, !tbaa !3 + %78 = getelementptr inbounds nuw i8, ptr %64, i64 7 + %79 = load i8, ptr %78, align 1, !tbaa !3 + %80 = or i8 %67, %65 + %81 = or i8 %80, %69 + %82 = or i8 %81, %71 + %83 = or i8 %82, %73 + %84 = or i8 %83, %75 + %85 = or i8 %84, %77 + %86 = or i8 %85, %79 + %87 = icmp eq i8 %86, 0 + br i1 %87, label %fdt_num_mem_rsv.exit.preheader, label %91 + +fdt_num_mem_rsv.exit.preheader: ; preds = %63 + %88 = call i32 @fdt_next_tag(ptr noundef nonnull %0, i32 noundef 0, ptr noundef nonnull %4) #9 + %89 = load i32, ptr %4, align 4, !tbaa !6 + %90 = icmp slt i32 %89, 0 + br i1 %90, label %fdt_num_mem_rsv.exit.thread, label %.lr.ph + +91: ; preds = %63 + %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 + %92 = trunc nsw i64 %indvars.iv.next.i to i32 + %93 = shl i32 %92, 4 + %94 = add i32 %93, %47 + %95 = icmp ult i32 %94, %47 + br i1 %95, label %fdt_num_mem_rsv.exit.thread, label %.split.i, !llvm.loop !10 + +.lr.ph: ; preds = %fdt_num_mem_rsv.exit.preheader, %fdt_num_mem_rsv.exit + %96 = phi i32 [ %113, %fdt_num_mem_rsv.exit ], [ %89, %fdt_num_mem_rsv.exit.preheader ] + %97 = phi i32 [ %112, %fdt_num_mem_rsv.exit ], [ %88, %fdt_num_mem_rsv.exit.preheader ] + %98 = phi i32 [ %111, %fdt_num_mem_rsv.exit ], [ 0, %fdt_num_mem_rsv.exit.preheader ] + %.01830 = phi i32 [ %.1, %fdt_num_mem_rsv.exit ], [ 0, %fdt_num_mem_rsv.exit.preheader ] + switch i32 %97, label %fdt_num_mem_rsv.exit.thread [ + i32 4, label %fdt_num_mem_rsv.exit + i32 9, label %99 + i32 1, label %100 + i32 2, label %103 + i32 3, label %107 ] 38: ; preds = %.lr.ph - %.not25 = icmp eq i32 %.01828, 0 + %.not25 = icmp eq i32 %.01830, 0 %. = select i1 %.not25, i32 0, i32 -11 br label %.loopexit 39: ; preds = %.lr.ph - %40 = add i32 %.01828, 1 + %40 = add i32 %.01830, 1 %41 = icmp slt i32 %40, 0 br i1 %41, label %.loopexit, label %50 42: ; preds = %.lr.ph - %43 = icmp eq i32 %.01828, 0 + %43 = icmp eq i32 %.01830, 0 br i1 %43, label %.loopexit, label %44 44: ; preds = %42 - %45 = add i32 %.01828, -1 + %45 = add i32 %.01830, -1 br label %50 46: ; preds = %.lr.ph - %47 = call ptr @fdt_getprop_by_offset(ptr noundef nonnull %0, i32 noundef %37, ptr noundef nonnull %5, ptr noundef nonnull %3) + %47 = call ptr @fdt_getprop_by_offset(ptr noundef nonnull %0, i32 noundef %98, ptr noundef nonnull %5, ptr noundef nonnull %3) %.not24 = icmp eq ptr %47, null br i1 %.not24, label %48, label %._crit_edge @@ -3239,15 +3294,15 @@ define i32 @fdt_check_full(ptr noundef %0, i64 noundef %1) local_unnamed_addr #0 br label %.loopexit 50: ; preds = %._crit_edge, %39, %44, %.lr.ph - %51 = phi i32 [ %.pre, %._crit_edge ], [ %35, %44 ], [ %35, %39 ], [ %35, %.lr.ph ] - %.1 = phi i32 [ %.01828, %._crit_edge ], [ %45, %44 ], [ %40, %39 ], [ %.01828, %.lr.ph ] + %51 = phi i32 [ %.pre, %.fdt_num_mem_rsv.exit_crit_edge ], [ %96, %105 ], [ %96, %100 ], [ %96, %.lr.ph ] + %.1 = phi i32 [ %.01830, %.fdt_num_mem_rsv.exit_crit_edge ], [ %45, %105 ], [ %40, %100 ], [ %.01830, %.lr.ph ] %52 = call i32 @fdt_next_tag(ptr noundef nonnull %0, i32 noundef %51, ptr noundef nonnull %4) #9 %53 = load i32, ptr %4, align 4, !tbaa !6 %54 = icmp slt i32 %53, 0 br i1 %54, label %.loopexit, label %.lr.ph -.loopexit: ; preds = %50, %39, %42, %.lr.ph, %.preheader, %38, %29, %9, %7, %2, %48 - %.0 = phi i32 [ %49, %48 ], [ -8, %2 ], [ %8, %7 ], [ -8, %9 ], [ %30, %29 ], [ %., %38 ], [ %33, %.preheader ], [ %53, %50 ], [ -11, %39 ], [ -11, %42 ], [ -13, %.lr.ph ] +.loopexit: ; preds = %.split.i, %91, %50, %39, %42, %.lr.ph, %fdt_num_mem_rsv.exit.preheader, %38, %9, %7, %2, %48 + %.0 = phi i32 [ %49, %109 ], [ -8, %2 ], [ %8, %7 ], [ -8, %9 ], [ %., %99 ], [ %89, %fdt_num_mem_rsv.exit.preheader ], [ %53, %fdt_num_mem_rsv.exit ], [ -11, %100 ], [ -11, %103 ], [ -13, %.lr.ph ], [ -8, %91 ], [ -8, %.split.i ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #9 diff --git a/bench/spike/optimized/fdt_sw.ll b/bench/spike/optimized/fdt_sw.ll index 3fc530f3256..074855acf95 100644 --- a/bench/spike/optimized/fdt_sw.ll +++ b/bench/spike/optimized/fdt_sw.ll @@ -209,31 +209,24 @@ define range(i32 -13, 1) i32 @fdt_resize(ptr noundef readonly captures(address) store i32 %rev.i.i, ptr %111, align 4, !tbaa !10 %112 = getelementptr inbounds nuw i8, ptr %1, i64 12 %113 = load i8, ptr %112, align 1, !tbaa !14 - %114 = zext i8 %113 to i32 - %115 = shl nuw i32 %114, 24 - %116 = getelementptr inbounds nuw i8, ptr %1, i64 13 + %114 = getelementptr inbounds nuw i8, ptr %1, i64 13 + %115 = load i8, ptr %114, align 1, !tbaa !14 + %116 = getelementptr inbounds nuw i8, ptr %1, i64 14 %117 = load i8, ptr %116, align 1, !tbaa !14 - %118 = zext i8 %117 to i32 - %119 = shl nuw nsw i32 %118, 16 - %120 = or disjoint i32 %119, %115 - %121 = getelementptr inbounds nuw i8, ptr %1, i64 14 - %122 = load i8, ptr %121, align 1, !tbaa !14 - %123 = zext i8 %122 to i32 - %124 = shl nuw nsw i32 %123, 8 - %125 = or disjoint i32 %120, %124 - %126 = getelementptr inbounds nuw i8, ptr %1, i64 15 - %127 = load i8, ptr %126, align 1, !tbaa !14 - %128 = zext i8 %127 to i32 - %129 = or disjoint i32 %125, %128 - %.not45 = icmp eq i32 %129, 0 - br i1 %.not45, label %131, label %130 - -130: ; preds = %110 + %118 = getelementptr inbounds nuw i8, ptr %1, i64 15 + %119 = load i8, ptr %118, align 1, !tbaa !14 + %120 = or i8 %115, %113 + %121 = or i8 %120, %117 + %122 = or i8 %121, %119 + %.not45 = icmp eq i8 %122, 0 + br i1 %.not45, label %124, label %123 + +123: ; preds = %110 store i32 %rev.i.i, ptr %112, align 4, !tbaa !13 br label %131 -131: ; preds = %110, %130, %99, %22, %3 - %.1 = phi i32 [ %.0.i, %3 ], [ -13, %22 ], [ -3, %99 ], [ 0, %130 ], [ 0, %110 ] +131: ; preds = %110, %123, %99, %22, %3 + %.1 = phi i32 [ %.0.i, %3 ], [ -13, %22 ], [ -3, %99 ], [ 0, %123 ], [ 0, %110 ] ret i32 %.1 } @@ -265,23 +258,16 @@ define range(i32 -9, 1) i32 @fdt_add_reservemap_entry(ptr noundef captures(none) 21: ; preds = %3 %22 = getelementptr inbounds nuw i8, ptr %0, i64 12 %23 = load i8, ptr %22, align 1, !tbaa !14 - %24 = zext i8 %23 to i32 - %25 = shl nuw i32 %24, 24 - %26 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %24 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %25 = load i8, ptr %24, align 1, !tbaa !14 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 14 %27 = load i8, ptr %26, align 1, !tbaa !14 - %28 = zext i8 %27 to i32 - %29 = shl nuw nsw i32 %28, 16 - %30 = or disjoint i32 %29, %25 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 14 - %32 = load i8, ptr %31, align 1, !tbaa !14 - %33 = zext i8 %32 to i32 - %34 = shl nuw nsw i32 %33, 8 - %35 = or disjoint i32 %30, %34 - %36 = getelementptr inbounds nuw i8, ptr %0, i64 15 - %37 = load i8, ptr %36, align 1, !tbaa !14 - %38 = zext i8 %37 to i32 - %39 = or disjoint i32 %35, %38 - %.not5.i = icmp eq i32 %39, 0 + %28 = getelementptr inbounds nuw i8, ptr %0, i64 15 + %29 = load i8, ptr %28, align 1, !tbaa !14 + %30 = or i8 %25, %23 + %31 = or i8 %30, %27 + %32 = or i8 %31, %29 + %.not5.i = icmp eq i8 %32, 0 br i1 %.not5.i, label %fdt_sw_probe_memrsv_.exit.thread, label %fdt_sw_probe_memrsv_.exit.thread18 fdt_sw_probe_memrsv_.exit: ; preds = %3 @@ -373,23 +359,16 @@ define range(i32 -9, 1) i32 @fdt_finish_reservemap(ptr noundef captures(none) %0 19: ; preds = %1 %20 = getelementptr inbounds nuw i8, ptr %0, i64 12 %21 = load i8, ptr %20, align 1, !tbaa !14 - %22 = zext i8 %21 to i32 - %23 = shl nuw i32 %22, 24 - %24 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %22 = getelementptr inbounds nuw i8, ptr %0, i64 13 + %23 = load i8, ptr %22, align 1, !tbaa !14 + %24 = getelementptr inbounds nuw i8, ptr %0, i64 14 %25 = load i8, ptr %24, align 1, !tbaa !14 - %26 = zext i8 %25 to i32 - %27 = shl nuw nsw i32 %26, 16 - %28 = or disjoint i32 %27, %23 - %29 = getelementptr inbounds nuw i8, ptr %0, i64 14 - %30 = load i8, ptr %29, align 1, !tbaa !14 - %31 = zext i8 %30 to i32 - %32 = shl nuw nsw i32 %31, 8 - %33 = or disjoint i32 %28, %32 - %34 = getelementptr inbounds nuw i8, ptr %0, i64 15 - %35 = load i8, ptr %34, align 1, !tbaa !14 - %36 = zext i8 %35 to i32 - %37 = or disjoint i32 %33, %36 - %.not5.i.i = icmp eq i32 %37, 0 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 15 + %27 = load i8, ptr %26, align 1, !tbaa !14 + %28 = or i8 %23, %21 + %29 = or i8 %28, %25 + %30 = or i8 %29, %27 + %.not5.i.i = icmp eq i8 %30, 0 br i1 %.not5.i.i, label %fdt_sw_probe_memrsv_.exit.thread.i, label %fdt_add_reservemap_entry.exit.thread fdt_sw_probe_memrsv_.exit.i: ; preds = %1 @@ -446,20 +425,20 @@ fdt_sw_probe_memrsv_.exit.thread.i: ; preds = %19 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %79, i8 0, i64 16, i1 false) store i32 %rev.i.i.i, ptr %39, align 4, !tbaa !12 %81 = load i8, ptr %59, align 1, !tbaa !14 + %75 = zext i8 %74 to i32 + %76 = shl nuw i32 %75, 24 + %77 = load i8, ptr %56, align 1, !tbaa !14 + %78 = zext i8 %77 to i32 + %79 = shl nuw nsw i32 %78, 16 + %80 = or disjoint i32 %79, %76 + %81 = load i8, ptr %61, align 1, !tbaa !14 %82 = zext i8 %81 to i32 - %83 = shl nuw i32 %82, 24 - %84 = load i8, ptr %63, align 1, !tbaa !14 - %85 = zext i8 %84 to i32 - %86 = shl nuw nsw i32 %85, 16 - %87 = or disjoint i32 %86, %83 - %88 = load i8, ptr %68, align 1, !tbaa !14 - %89 = zext i8 %88 to i32 - %90 = shl nuw nsw i32 %89, 8 - %91 = or disjoint i32 %87, %90 - %92 = load i8, ptr %73, align 1, !tbaa !14 - %93 = zext i8 %92 to i32 - %94 = or disjoint i32 %91, %93 - %rev.i.i = tail call noundef i32 @llvm.bswap.i32(i32 %94) + %83 = shl nuw nsw i32 %82, 8 + %84 = or disjoint i32 %80, %83 + %85 = load i8, ptr %66, align 1, !tbaa !14 + %86 = zext i8 %85 to i32 + %87 = or disjoint i32 %84, %86 + %rev.i.i = tail call noundef i32 @llvm.bswap.i32(i32 %87) store i32 %rev.i.i, ptr %20, align 4, !tbaa !13 br label %fdt_add_reservemap_entry.exit.thread diff --git a/bench/vcpkg/optimized/format.ll b/bench/vcpkg/optimized/format.ll index 24fca228994..8751cd0140b 100644 --- a/bench/vcpkg/optimized/format.ll +++ b/bench/vcpkg/optimized/format.ll @@ -31699,10 +31699,6 @@ define linkonce_odr ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appenderIcEEoc %9 = alloca i32, align 4 %10 = alloca %"class.fmt::v11::basic_memory_buffer", align 8 %11 = alloca %class.anon.124, align 8 - %.sroa.254.0.insert.ext = zext i64 %2 to i128 - %.sroa.254.0.insert.shift = shl nuw i128 %.sroa.254.0.insert.ext, 64 - %.sroa.053.0.insert.ext = zext i64 %1 to i128 - %.sroa.053.0.insert.insert = or disjoint i128 %.sroa.254.0.insert.shift, %.sroa.053.0.insert.ext store i32 %3, ptr %9, align 4, !tbaa !70 call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %10) #32 %12 = getelementptr inbounds nuw i8, ptr %10, i64 16 @@ -31723,7 +31719,11 @@ define linkonce_odr ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appenderIcEEoc ] 18: ; preds = %6 - %19 = icmp ult i128 %.sroa.053.0.insert.insert, 10 + %.sroa.2.0.insert.ext.i.i = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i = shl nuw i128 %.sroa.2.0.insert.ext.i.i, 64 + %.sroa.0.0.insert.ext.i.i = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i = or disjoint i128 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i + %19 = icmp ult i128 %.sroa.0.0.insert.insert.i.i, 10 br i1 %19, label %._crit_edge.i.i.thread, label %.lr.ph.i.i ._crit_edge.i.i.thread: ; preds = %18 @@ -31735,7 +31735,7 @@ define linkonce_odr ptr @_ZN3fmt3v116detail9write_intINS0_14basic_appenderIcEEoc .lr.ph.i.i: ; preds = %18, %32 %.017.i.i = phi i32 [ %34, %32 ], [ 1, %18 ] - %.01116.i.i = phi i128 [ %33, %32 ], [ %.sroa.053.0.insert.insert, %18 ] + %.01116.i.i = phi i128 [ %33, %32 ], [ %.sroa.0.0.insert.insert.i.i, %18 ] %21 = icmp ult i128 %.01116.i.i, 100 br i1 %21, label %22, label %24 @@ -31771,12 +31771,12 @@ _ZN3fmt3v116detail12count_digitsEo.exit: ; preds = %32, %30, %26, %22 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(39) %8, i8 0, i64 39, i1 false) %36 = sext i32 %.012.i.i to i64 %37 = getelementptr inbounds i8, ptr %8, i64 %36 - %38 = icmp ugt i128 %.sroa.053.0.insert.insert, 99 + %38 = icmp ugt i128 %.sroa.0.0.insert.insert.i.i, 99 br i1 %38, label %.lr.ph.i.i66, label %._crit_edge.i.i .lr.ph.i.i66: ; preds = %_ZN3fmt3v116detail12count_digitsEo.exit, %.lr.ph.i.i66 %.026.i.i = phi ptr [ %39, %.lr.ph.i.i66 ], [ %37, %_ZN3fmt3v116detail12count_digitsEo.exit ] - %.02225.i.i = phi i128 [ %40, %.lr.ph.i.i66 ], [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail12count_digitsEo.exit ] + %.02225.i.i = phi i128 [ %40, %.lr.ph.i.i66 ], [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ] %39 = getelementptr inbounds i8, ptr %.026.i.i, i64 -2 %.02225.i.i.frozen = freeze i128 %.02225.i.i %40 = udiv i128 %.02225.i.i.frozen, 100 @@ -31791,7 +31791,7 @@ _ZN3fmt3v116detail12count_digitsEo.exit: ; preds = %32, %30, %26, %22 br i1 %46, label %.lr.ph.i.i66, label %._crit_edge.i.i, !llvm.loop !145 ._crit_edge.i.i: ; preds = %.lr.ph.i.i66, %_ZN3fmt3v116detail12count_digitsEo.exit - %.022.lcssa.i.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %40, %.lr.ph.i.i66 ] + %.022.lcssa.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %40, %.lr.ph.i.i66 ] %.0.lcssa.i.i = phi ptr [ %37, %_ZN3fmt3v116detail12count_digitsEo.exit ], [ %39, %.lr.ph.i.i66 ] %47 = icmp samesign ult i128 %.022.lcssa.i.i, 10 %extract.t151 = trunc nuw nsw i128 %.022.lcssa.i.i to i8 @@ -31853,10 +31853,14 @@ _ZN3fmt3v116detail14format_decimalIcoNS0_14basic_appenderIcEETnNSt9enable_ifIXnt 73: ; preds = %66, %62 %74 = phi i32 [ %72, %66 ], [ %3, %62 ] + %.sroa.2.0.insert.ext.i.i67 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i68 = shl nuw i128 %.sroa.2.0.insert.ext.i.i67, 64 + %.sroa.0.0.insert.ext.i.i69 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i70 = or disjoint i128 %.sroa.2.0.insert.shift.i.i68, %.sroa.0.0.insert.ext.i.i69 br label %75 75: ; preds = %75, %73 - %.03.i.i = phi i128 [ %.sroa.053.0.insert.insert, %73 ], [ %77, %75 ] + %.03.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i70, %73 ], [ %77, %75 ] %.0.i.i = phi i32 [ 0, %73 ], [ %76, %75 ] %76 = add nuw nsw i32 %.0.i.i, 1 %77 = lshr i128 %.03.i.i, 4 @@ -31888,7 +31892,7 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det br label %84 84: ; preds = %84, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i - %.09.i.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ], [ %90, %84 ] + %.09.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i70, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ], [ %90, %84 ] %.0.i19.i = phi ptr [ %83, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i ], [ %89, %84 ] %85 = trunc i128 %.09.i.i to i64 %86 = and i64 %85, 15 @@ -31900,30 +31904,38 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i: ; preds = %_ZN3fmt3v116det %.not.i.i75 = icmp ult i128 %.09.i.i, 16 br i1 %.not.i.i75, label %.loopexit, label %84, !llvm.loop !306 -.preheader: ; preds = %6, %.preheader - %.03.i.i81 = phi i128 [ %92, %.preheader ], [ %.sroa.053.0.insert.insert, %6 ] - %.0.i.i82 = phi i32 [ %91, %.preheader ], [ 0, %6 ] - %91 = add nuw nsw i32 %.0.i.i82, 1 - %92 = lshr i128 %.03.i.i81, 3 +.preheader: ; preds = %6 + %.sroa.2.0.insert.ext.i.i77 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i78 = shl nuw i128 %.sroa.2.0.insert.ext.i.i77, 64 + %.sroa.0.0.insert.ext.i.i79 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i80 = or disjoint i128 %.sroa.2.0.insert.shift.i.i78, %.sroa.0.0.insert.ext.i.i79 + br label %92 + +92: ; preds = %92, %91 + %.03.i.i81 = phi i128 [ %.sroa.0.0.insert.insert.i.i80, %91 ], [ %94, %92 ] + %.0.i.i82 = phi i32 [ 0, %91 ], [ %93, %92 ] + %93 = add nuw nsw i32 %.0.i.i82, 1 + %94 = lshr i128 %.03.i.i81, 3 %.not.i.i83 = icmp ult i128 %.03.i.i81, 8 - br i1 %.not.i.i83, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %.preheader, !llvm.loop !556 - -_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader - %93 = getelementptr inbounds nuw i8, ptr %4, i64 9 - %94 = load i16, ptr %93, align 1 - %95 = and i16 %94, 256 - %.not61 = icmp eq i16 %95, 0 - br i1 %.not61, label %105, label %96 - -96: ; preds = %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit - %97 = getelementptr inbounds nuw i8, ptr %4, i64 4 - %98 = load i32, ptr %97, align 4, !tbaa !132 - %99 = icmp sle i32 %98, %91 - %100 = icmp ne i128 %.sroa.053.0.insert.insert, 0 - %or.cond = select i1 %99, i1 %100, i1 false - br i1 %or.cond, label %101, label %105 - -101: ; preds = %96 + br i1 %.not.i.i83, label %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit, label %92, !llvm.loop !556 + +_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %92 + %95 = getelementptr inbounds nuw i8, ptr %4, i64 9 + %96 = load i16, ptr %95, align 1 + %97 = and i16 %96, 256 + %.not61 = icmp eq i16 %97, 0 + br i1 %.not61, label %108, label %98 + +98: ; preds = %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit + %99 = getelementptr inbounds nuw i8, ptr %4, i64 4 + %100 = load i32, ptr %99, align 4, !tbaa !132 + %101 = icmp sle i32 %100, %93 + %102 = or i64 %2, %1 + %103 = icmp ne i64 %102, 0 + %or.cond = and i1 %103, %101 + br i1 %or.cond, label %104, label %108 + +_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %98 %.not.i84 = icmp eq i32 %3, 0 %102 = select i1 %.not.i84, i32 48, i32 12288 %103 = or i32 %102, %3 @@ -31931,9 +31943,9 @@ _ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit: ; preds = %.preheader store i32 %104, ptr %9, align 4, !tbaa !70 br label %105 -105: ; preds = %101, %96, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit - %106 = phi i32 [ %104, %101 ], [ %3, %96 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] - %107 = zext nneg i32 %91 to i64 +105: ; preds = %104, %98, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit + %106 = phi i32 [ %104, %104 ], [ %3, %98 ], [ %3, %_ZN3fmt3v116detail12count_digitsILi3EoEEiT0_.exit ] + %107 = zext nneg i32 %93 to i64 %108 = icmp samesign ugt i32 %.0.i.i82, 499 br i1 %108, label %_ZNSt15__new_allocatorIcE8allocateEmPKv.exit.i184, label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85 @@ -31948,14 +31960,14 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85.thread: ; preds = %_ZNSt1 br label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85 _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85: ; preds = %105, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85.thread - %110 = phi ptr [ %109, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85.thread ], [ %15, %105 ] + %110 = phi ptr [ %109, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85.thread ], [ %15, %108 ] store i64 %107, ptr %14, align 8, !tbaa !8 %111 = getelementptr inbounds nuw i8, ptr %110, i64 %107 br label %112 112: ; preds = %112, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85 - %.08.i.i = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85 ], [ %117, %112 ] - %.0.i19.i92 = phi ptr [ %111, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85 ], [ %116, %112 ] + %.08.i.i = phi i128 [ %.sroa.0.0.insert.insert.i.i80, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85 ], [ %117, %115 ] + %.0.i19.i92 = phi ptr [ %111, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85 ], [ %116, %115 ] %113 = trunc i128 %.08.i.i to i8 %114 = and i8 %113, 7 %115 = or disjoint i8 %114, 48 @@ -31985,19 +31997,23 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i85: ; preds = %105, %_ZN3fmt br label %129 129: ; preds = %122, %118 - %130 = phi i32 [ %128, %122 ], [ %3, %118 ] - br label %131 - -131: ; preds = %131, %129 - %.03.i.i108 = phi i128 [ %.sroa.053.0.insert.insert, %129 ], [ %133, %131 ] - %.0.i.i109 = phi i32 [ 0, %129 ], [ %132, %131 ] - %132 = add nuw nsw i32 %.0.i.i109, 1 - %133 = lshr i128 %.03.i.i108, 1 + %130 = phi i32 [ %128, %125 ], [ %3, %121 ] + %.sroa.2.0.insert.ext.i.i104 = zext i64 %2 to i128 + %.sroa.2.0.insert.shift.i.i105 = shl nuw i128 %.sroa.2.0.insert.ext.i.i104, 64 + %.sroa.0.0.insert.ext.i.i106 = zext i64 %1 to i128 + %.sroa.0.0.insert.insert.i.i107 = or disjoint i128 %.sroa.2.0.insert.shift.i.i105, %.sroa.0.0.insert.ext.i.i106 + br label %134 + +134:; preds = %134, %132 + %.03.i.i108 = phi i128 [ %.sroa.0.0.insert.insert.i.i107, %132 ], [ %136, %134 ] + %.0.i.i109 = phi i32 [ 0, %132 ], [ %135, %134 ] + %135 = add nuw nsw i32 %.0.i.i109, 1 + %136 = lshr i128 %.03.i.i108, 1 %.not.i.i110 = icmp ult i128 %.03.i.i108, 2 - br i1 %.not.i.i110, label %_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit, label %131, !llvm.loop !562 + br i1 %.not.i.i110, label %_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit, label %134, !llvm.loop !562 -_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit: ; preds = %131 - %134 = zext nneg i32 %132 to i64 +_ZN3fmt3v116detail12count_digitsILi1EoEEiT0_.exit: ; preds = %134 + %134 = zext nneg i32 %135 to i64 %135 = icmp samesign ugt i32 %.0.i.i109, 499 br i1 %135, label %_ZNSt15__new_allocatorIcE8allocateEmPKv.exit.i190, label %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i111 @@ -32018,8 +32034,8 @@ _ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i111: ; preds = %_ZN3fmt3v116 br label %139 139: ; preds = %139, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i111 - %.08.i.i118 = phi i128 [ %.sroa.053.0.insert.insert, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i111 ], [ %144, %139 ] - %.0.i19.i119 = phi ptr [ %138, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i111 ], [ %143, %139 ] + %.08.i.i118 = phi i128 [ %.sroa.0.0.insert.insert.i.i107, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i111 ], [ %144, %142 ] + %.0.i19.i119 = phi ptr [ %138, %_ZN3fmt3v116detail6bufferIcE11try_reserveEm.exit.i.i111 ], [ %143, %142 ] %140 = trunc i128 %.08.i.i118 to i8 %141 = and i8 %140, 1 %142 = or disjoint i8 %141, 48 @@ -32043,8 +32059,8 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %180 .loopexit: ; preds = %112, %84, %139, %_ZN3fmt3v116detail14format_decimalIcoNS0_14basic_appenderIcEETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS8_EES8_T0_i.exit - %149 = phi i32 [ %.pre, %_ZN3fmt3v116detail14format_decimalIcoNS0_14basic_appenderIcEETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS8_EES8_T0_i.exit ], [ %130, %139 ], [ %74, %84 ], [ %106, %112 ] - %.0 = phi i32 [ %.012.i.i142146, %_ZN3fmt3v116detail14format_decimalIcoNS0_14basic_appenderIcEETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS8_EES8_T0_i.exit ], [ %132, %139 ], [ %76, %84 ], [ %91, %112 ] + %149 = phi i32 [ %.pre, %_ZN3fmt3v116detail14format_decimalIcoNS0_14basic_appenderIcEETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS8_EES8_T0_i.exit ], [ %130, %142 ], [ %74, %84 ], [ %109, %115 ] + %.0 = phi i32 [ %.012.i.i142146, %_ZN3fmt3v116detail14format_decimalIcoNS0_14basic_appenderIcEETnNSt9enable_ifIXntsr3std10is_pointerINSt9remove_cvINSt16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEENS1_21format_decimal_resultIS8_EES8_T0_i.exit ], [ %135, %142 ], [ %76, %84 ], [ %93, %115 ] %150 = lshr i32 %149, 24 %151 = add i32 %150, %.0 %152 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -32061,9 +32077,9 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %160 160: ; preds = %170, %.lr.ph.i - %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %171, %170 ] - %.sroa.0.07.i = phi ptr [ %155, %.lr.ph.i ], [ %.sroa.0.1.i, %170 ] - %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %168, %170 ] + %.08.i = phi i32 [ 0, %.lr.ph.i ], [ %171, %173 ] + %.sroa.0.07.i = phi ptr [ %155, %.lr.ph.i ], [ %.sroa.0.1.i, %173 ] + %.sroa.5.06.i = phi i32 [ 0, %.lr.ph.i ], [ %168, %173 ] %161 = icmp eq ptr %.sroa.0.07.i, %158 br i1 %161, label %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i, label %162 @@ -32082,8 +32098,8 @@ _ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format br label %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i _ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = %165, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i - %.sink.i.i = phi i8 [ %163, %165 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] - %.sroa.0.1.i = phi ptr [ %166, %165 ], [ %158, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sink.i.i = phi i8 [ %163, %168 ], [ %.sink.i.pre.i, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] + %.sroa.0.1.i = phi ptr [ %166, %168 ], [ %158, %._ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit_crit_edge.i ] %167 = sext i8 %.sink.i.i to i32 %168 = add nsw i32 %.sroa.5.06.i, %167 %169 = icmp sgt i32 %.0, %168 @@ -32094,7 +32110,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i: ; preds = br label %160 _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %162, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i, %.loopexit - %.0.lcssa.i = phi i32 [ 0, %.loopexit ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %162 ] + %.0.lcssa.i = phi i32 [ 0, %.loopexit ], [ %.08.i, %_ZNK3fmt3v116detail14digit_groupingIcE4nextERNS3_10next_stateE.exit.i ], [ %.08.i, %165 ] %172 = add i32 %151, %.0.lcssa.i %173 = zext i32 %172 to i64 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #32 @@ -32104,7 +32120,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %162, %175 = getelementptr inbounds nuw i8, ptr %11, i64 16 store ptr %10, ptr %175, align 8, !tbaa !625 %176 = invoke ptr @_ZN3fmt3v116detail12write_paddedIcLNS0_5align4typeE2ENS0_14basic_appenderIcEEZNS1_9write_intIS6_ocEET_S8_T0_jRKNS0_12format_specsERKNS1_14digit_groupingIT1_EEEUlS6_E_EESE_SE_SC_mmOT2_(ptr %0, ptr noundef nonnull align 4 dereferenceable(16) %4, i64 noundef %173, i64 noundef %173, ptr noundef nonnull align 8 dereferenceable(24) %11) - to label %177 unwind label %178 + to label %180 unwind label %178 177: ; preds = %_ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #32 @@ -32117,7 +32133,7 @@ _ZNK3fmt3v116detail14digit_groupingIcE16count_separatorsEi.exit: ; preds = %162, br label %184 180: ; preds = %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit, %177 - %.sroa.056.0 = phi ptr [ %176, %177 ], [ %148, %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit ] + %.sroa.056.0 = phi ptr [ %176, %180 ], [ %148, %_ZN3fmt3v116detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE.exit ] %181 = load ptr, ptr %10, align 8, !tbaa !20 %.not.i.i134 = icmp eq ptr %181, %15 br i1 %.not.i.i134, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ESaIcEED2Ev.exit, label %182 @@ -32132,7 +32148,7 @@ _ZN3fmt3v1119basic_memory_bufferIcLm500ESaIcEED2Ev.exit: ; preds = %180, %182 ret ptr %.sroa.056.0 184: ; preds = %178, %60 - %.pn.pn = phi { ptr, i32 } [ %61, %60 ], [ %179, %178 ] + %.pn.pn = phi { ptr, i32 } [ %61, %60 ], [ %179, %181 ] %185 = load ptr, ptr %10, align 8, !tbaa !20 %.not.i.i135 = icmp eq ptr %185, %15 br i1 %.not.i.i135, label %_ZN3fmt3v1119basic_memory_bufferIcLm500ESaIcEED2Ev.exit136, label %186 diff --git a/bench/wireshark/optimized/packet-atm.ll b/bench/wireshark/optimized/packet-atm.ll index 69fde9141ed..0c6c16560a5 100644 --- a/bench/wireshark/optimized/packet-atm.ll +++ b/bench/wireshark/optimized/packet-atm.ll @@ -1428,17 +1428,14 @@ define internal fastcc i32 @dissect_atm_common(ptr noundef %0, ptr noundef %1, p br i1 %226, label %.thread205.i, label %227 227: ; preds = %225 - %228 = zext i8 %220 to i16 - %229 = zext i8 %217 to i16 - %230 = shl nuw i16 %229, 8 - %231 = or disjoint i16 %230, %228 - %232 = icmp eq i16 %231, 0 - br i1 %232, label %233, label %237 - -233: ; preds = %227 - %234 = load i32, ptr @hf_atm_padding, align 4 - %235 = call ptr @proto_tree_add_item(ptr noundef %2, i32 noundef %234, ptr noundef %0, i32 noundef 0, i32 noundef 2, i32 noundef 0) - %236 = call ptr @tvb_new_subset_remaining(ptr noundef %0, i32 noundef 2) + %228 = or i8 %220, %217 + %229 = icmp eq i8 %228, 0 + br i1 %229, label %230, label %234 + +230:; preds = %227 + %231 = load i32, ptr @hf_atm_padding, align 4 + %232 = call ptr @proto_tree_add_item(ptr noundef %2, i32 noundef %231, ptr noundef %0, i32 noundef 0, i32 noundef 2, i32 noundef 0) + %233 = call ptr @tvb_new_subset_remaining(ptr noundef %0, i32 noundef 2) br label %.thread205.i 237: ; preds = %227 @@ -1452,7 +1449,7 @@ define internal fastcc i32 @dissect_atm_common(ptr noundef %0, ptr noundef %1, p 238: ; preds = %237 %239 = getelementptr inbounds nuw i8, ptr %7, i64 3 %240 = load i8, ptr %239, align 1 - switch i8 %240, label %241 [ + switch i8 %240, label %238 [ i8 -52, label %.thread205.i i8 -114, label %.thread205.i ] @@ -1466,14 +1463,14 @@ define internal fastcc i32 @dissect_atm_common(ptr noundef %0, ptr noundef %1, p br i1 %or.cond15.i, label %.thread205.i, label %246 246: ; preds = %241, %._crit_edge.i - %247 = phi i8 [ %.pre.i, %._crit_edge.i ], [ %244, %241 ] + %247 = phi i8 [ %.pre.i, %._crit_edge.i ], [ %244, %238 ] %248 = icmp eq i8 %247, 3 br i1 %248, label %249, label %257 249: ; preds = %246 %250 = getelementptr inbounds nuw i8, ptr %7, i64 5 %251 = load i8, ptr %250, align 1 - switch i8 %251, label %252 [ + switch i8 %251, label %249 [ i8 -52, label %.thread205.i i8 -114, label %.thread205.i ] @@ -1488,14 +1485,14 @@ define internal fastcc i32 @dissect_atm_common(ptr noundef %0, ptr noundef %1, p 257: ; preds = %252, %246 %258 = and i8 %217, -16 - switch i8 %258, label %261 [ + switch i8 %258, label %258 [ i8 64, label %.thread205.i i8 96, label %.thread205.i ] -.thread205.i: ; preds = %257, %257, %252, %249, %249, %241, %238, %238, %233, %225, %215 - %llc_handle.sink.i = phi ptr [ @eth_maybefcs_handle, %233 ], [ @llc_handle, %215 ], [ @ppp_handle, %225 ], [ @fr_handle, %238 ], [ @fr_handle, %238 ], [ @fr_handle, %241 ], [ @fr_handle, %249 ], [ @fr_handle, %249 ], [ @fr_handle, %252 ], [ @ip_handle, %257 ], [ @ip_handle, %257 ] - %.0.sink.i = phi ptr [ %236, %233 ], [ %.0.i, %215 ], [ %.0.i, %225 ], [ %.0.i, %238 ], [ %.0.i, %238 ], [ %.0.i, %241 ], [ %.0.i, %249 ], [ %.0.i, %249 ], [ %.0.i, %252 ], [ %.0.i, %257 ], [ %.0.i, %257 ] +.thread205.i: ; preds = %257, %257, %252, %249, %249, %241, %238, %238, %230, %225, %215 + %llc_handle.sink.i = phi ptr [ @eth_maybefcs_handle, %230 ], [ @llc_handle, %215 ], [ @ppp_handle, %225 ], [ @fr_handle, %235 ], [ @fr_handle, %235 ], [ @fr_handle, %238 ], [ @fr_handle, %246 ], [ @fr_handle, %246 ], [ @fr_handle, %249 ], [ @ip_handle, %254 ], [ @ip_handle, %254 ] + %.0.sink.i = phi ptr [ %233, %230 ], [ %.0.i, %215 ], [ %.0.i, %225 ], [ %.0.i, %235 ], [ %.0.i, %235 ], [ %.0.i, %238 ], [ %.0.i, %246 ], [ %.0.i, %246 ], [ %.0.i, %249 ], [ %.0.i, %254 ], [ %.0.i, %254 ] %259 = load ptr, ptr %llc_handle.sink.i, align 8 %260 = call i32 @call_dissector(ptr noundef %259, ptr noundef %.0.sink.i, ptr noundef %1, ptr noundef %2) call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11 @@ -1533,7 +1530,7 @@ define internal fastcc i32 @dissect_atm_common(ptr noundef %0, ptr noundef %1, p br label %280 280: ; preds = %278, %276 - %.3.i = phi ptr [ %279, %278 ], [ %0, %276 ] + %.3.i = phi ptr [ %279, %275 ], [ %0, %273 ] %281 = load ptr, ptr @atm_type_aal2_table, align 8 %282 = getelementptr inbounds nuw i8, ptr %4, i64 5 %283 = load i8, ptr %282, align 1 @@ -1543,7 +1540,7 @@ define internal fastcc i32 @dissect_atm_common(ptr noundef %0, ptr noundef %1, p br i1 %.not190.not.i, label %.thread.i, label %dissect_reassembled_pdu.exit .thread.i: ; preds = %280, %262, %261, %212, %203, %197, %195 - %.1199.i = phi ptr [ %.3.i, %280 ], [ %.0.i, %261 ], [ %.0.i, %195 ], [ %.0.i, %262 ], [ %.0.i, %203 ], [ %.0.i, %212 ], [ %.0.i, %197 ] + %.1199.i = phi ptr [ %.3.i, %277 ], [ %.0.i, %258 ], [ %.0.i, %195 ], [ %.0.i, %259 ], [ %.0.i, %203 ], [ %.0.i, %212 ], [ %.0.i, %197 ] %286 = call i32 @call_data_dissector(ptr noundef %.1199.i, ptr noundef %1, ptr noundef %2) br label %dissect_reassembled_pdu.exit diff --git a/bench/wireshark/optimized/packet-knet.ll b/bench/wireshark/optimized/packet-knet.ll index f60f1f8c841..42890709a62 100644 --- a/bench/wireshark/optimized/packet-knet.ll +++ b/bench/wireshark/optimized/packet-knet.ll @@ -244,34 +244,31 @@ define internal i32 @dissect_knet_udp(ptr noundef %0, ptr noundef readonly captu %49 = shl i32 %.139, 3 %50 = add i32 %49, 12 %51 = tail call zeroext i8 @tvb_get_bits8(ptr noundef %0, i32 noundef %50, i32 noundef 4) - %52 = zext i8 %51 to i32 - %53 = shl nuw nsw i32 %52, 8 - %54 = tail call zeroext i8 @tvb_get_bits8(ptr noundef %0, i32 noundef %49, i32 noundef 8) - %55 = zext i8 %54 to i32 - %56 = or disjoint i32 %53, %55 - %.not36 = icmp eq i32 %56, 0 - br i1 %.not36, label %.critedge, label %57 - -57: ; preds = %.lr.ph + %52 = tail call zeroext i8 @tvb_get_bits8(ptr noundef %0, i32 noundef %49, i32 noundef 8) + %53 = or i8 %52, %51 + %.not36 = icmp eq i8 %53, 0 + br i1 %.not36, label %.critedge, label %54 + +54:; preds = %.lr.ph call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) %58 = load i32, ptr @hf_knet_message_tree, align 4 %59 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %58, ptr noundef %0, i32 noundef %.139, i32 noundef -1, i32 noundef 0) %60 = load i32, ptr @ett_knet_message, align 4 %61 = tail call ptr @proto_item_add_subtree(ptr noundef %59, i32 noundef %60) %62 = tail call zeroext i8 @tvb_get_bits8(ptr noundef %0, i32 noundef %50, i32 noundef 4) + %60 = zext i8 %59 to i32 + %61 = shl nuw nsw i32 %60, 8 + %62 = tail call zeroext i8 @tvb_get_bits8(ptr noundef %0, i32 noundef %49, i32 noundef 8) %63 = zext i8 %62 to i32 - %64 = shl nuw nsw i32 %63, 8 - %65 = tail call zeroext i8 @tvb_get_bits8(ptr noundef %0, i32 noundef %49, i32 noundef 8) - %66 = zext i8 %65 to i32 - %67 = or disjoint i32 %64, %66 - %.not.i38 = icmp eq ptr %61, null - br i1 %.not.i38, label %.dissect_content_length.exit_crit_edge, label %68 - -.dissect_content_length.exit_crit_edge: ; preds = %57 + %64 = or disjoint i32 %61, %63 + %.not.i38 = icmp eq ptr %58, null + br i1 %.not.i38, label %.dissect_content_length.exit_crit_edge, label %65 + +.dissect_content_length.exit_crit_edge:; preds = %54 %.pre = add i32 %.139, 1 br label %dissect_content_length.exit -68: ; preds = %57 +68: ; preds = %54 %69 = load i32, ptr @hf_knet_msg_flags, align 4 %70 = add i32 %.139, 1 %71 = tail call ptr @proto_tree_add_item(ptr noundef nonnull %61, i32 noundef %69, ptr noundef %0, i32 noundef %70, i32 noundef 1, i32 noundef 0) @@ -286,11 +283,11 @@ define internal i32 @dissect_knet_udp(ptr noundef %0, ptr noundef readonly captu %80 = load i32, ptr @hf_knet_msg_reliable, align 4 %81 = tail call ptr @proto_tree_add_item(ptr noundef %73, i32 noundef %80, ptr noundef %0, i32 noundef %70, i32 noundef 1, i32 noundef 0) %82 = load i32, ptr @hf_knet_content_length, align 4 - %83 = tail call ptr @proto_tree_add_uint(ptr noundef nonnull %61, i32 noundef %82, ptr noundef %0, i32 noundef %.139, i32 noundef 2, i32 noundef %67) + %83 = tail call ptr @proto_tree_add_uint(ptr noundef nonnull %61, i32 noundef %82, ptr noundef %0, i32 noundef %.139, i32 noundef 2, i32 noundef %64) br label %dissect_content_length.exit dissect_content_length.exit: ; preds = %.dissect_content_length.exit_crit_edge, %68 - %.pre-phi = phi i32 [ %.pre, %.dissect_content_length.exit_crit_edge ], [ %70, %68 ] + %.pre-phi = phi i32 [ %.pre, %.dissect_content_length.exit_crit_edge ], [ %70, %65 ] %84 = tail call zeroext i8 @tvb_get_uint8(ptr noundef %0, i32 noundef %.pre-phi) %85 = and i8 %84, 16 %.not.i37 = icmp eq i8 %85, 0 @@ -307,18 +304,18 @@ dissect_content_length.exit: ; preds = %.dissect_content_le br label %dissect_knet_message.exit dissect_knet_message.exit: ; preds = %dissect_content_length.exit, %86 - %92 = phi i32 [ %91, %86 ], [ %.139, %dissect_content_length.exit ] + %92 = phi i32 [ %91, %83 ], [ %.139, %dissect_content_length.exit ] %93 = add i32 %92, 2 store i32 %93, ptr %5, align 4 - %94 = sub i32 %67, %.139 + %94 = sub i32 %64, %.139 %95 = add i32 %94, %93 tail call void @proto_item_set_len(ptr noundef %59, i32 noundef %95) %96 = icmp ne i32 %.040, 0 %97 = call fastcc i32 @dissect_messageid(ptr noundef %0, ptr noundef nonnull %5, ptr noundef %61, ptr noundef readonly %1, i1 noundef zeroext %96) %98 = load i32, ptr %5, align 4 - tail call fastcc void @dissect_payload(ptr noundef %0, i32 noundef %98, i32 noundef %97, ptr noundef %61, i32 noundef %67) + tail call fastcc void @dissect_payload(ptr noundef %0, i32 noundef %98, i32 noundef %97, ptr noundef %61, i32 noundef %64) call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) - %99 = add i32 %93, %67 + %99 = add i32 %93, %64 %100 = add i32 %.040, 1 %101 = tail call i32 @tvb_reported_length_remaining(ptr noundef %0, i32 noundef %99) %102 = icmp sgt i32 %101, 2 diff --git a/bench/wireshark/optimized/packet-opensafety.ll b/bench/wireshark/optimized/packet-opensafety.ll index 74327e1bdf3..0e673194646 100644 --- a/bench/wireshark/optimized/packet-opensafety.ll +++ b/bench/wireshark/optimized/packet-opensafety.ll @@ -1769,14 +1769,14 @@ findFrame1Position.exit.thread291: ; preds = %76 store i32 %59, ptr %10, align 4 br label %.backedge -.backedge: ; preds = %294, %301, %findFrame1Position.exit.thread291, %167, %169, %178, %226, %197, %290 - %92 = phi i32 [ %59, %findFrame1Position.exit.thread291 ], [ %179, %178 ], [ %storemerge, %197 ], [ %227, %226 ], [ %293, %290 ], [ %168, %167 ], [ %170, %169 ], [ %302, %301 ], [ %298, %294 ] - %.0250.be = phi i8 [ %.0250324, %findFrame1Position.exit.thread291 ], [ %.0250324, %178 ], [ %.0250324, %197 ], [ %.0250324, %226 ], [ %.0250324, %290 ], [ %.0250324, %167 ], [ %.0250324, %169 ], [ 1, %301 ], [ 1, %294 ] - %.0246.be = phi i1 [ %.0246325, %findFrame1Position.exit.thread291 ], [ %.0246325, %178 ], [ %.0246325, %197 ], [ %.0246325, %226 ], [ %.0246325, %290 ], [ %.0246325, %167 ], [ %.0246325, %169 ], [ true, %301 ], [ true, %294 ] - %.0240.be = phi i1 [ %.0240326, %findFrame1Position.exit.thread291 ], [ %.0240326, %178 ], [ %.0240326, %197 ], [ %spec.select277, %226 ], [ %.1241, %290 ], [ %.0240326, %167 ], [ %.0240326, %169 ], [ %.1241, %301 ], [ %.1241, %294 ] - %.0236.be = phi i8 [ %.0236328, %findFrame1Position.exit.thread291 ], [ %.0236328, %178 ], [ %.0236328, %197 ], [ %.0236328, %226 ], [ %.0236328, %290 ], [ %.0236328, %167 ], [ %.0236328, %169 ], [ %.6304, %301 ], [ %.6304, %294 ] - %.0233.be = phi i32 [ %.0233329, %findFrame1Position.exit.thread291 ], [ %.0233329, %178 ], [ %.0233329, %197 ], [ %.0233329, %226 ], [ %.0233329, %290 ], [ %.0233329, %167 ], [ %.0233329, %169 ], [ %59, %301 ], [ %59, %294 ] - %.0231.be = phi i8 [ %.0231330, %findFrame1Position.exit.thread291 ], [ %.0231330, %178 ], [ %.0231330, %197 ], [ %.0231330, %226 ], [ %.0231330, %290 ], [ %.0231330, %167 ], [ %.0231330, %169 ], [ %286, %301 ], [ %286, %294 ] +.backedge: ; preds = %294, %301, %findFrame1Position.exit.thread291, %167, %169, %178, %223, %197, %290 + %92 = phi i32 [ %59, %findFrame1Position.exit.thread291 ], [ %179, %178 ], [ %storemerge, %197 ], [ %224, %223 ], [ %293, %287 ], [ %168, %167 ], [ %170, %169 ], [ %302, %298 ], [ %298, %291 ] + %.0250.be = phi i8 [ %.0250324, %findFrame1Position.exit.thread291 ], [ %.0250324, %178 ], [ %.0250324, %197 ], [ %.0250324, %223 ], [ %.0250324, %287 ], [ %.0250324, %167 ], [ %.0250324, %169 ], [ 1, %298 ], [ 1, %291 ] + %.0246.be = phi i1 [ %.0246325, %findFrame1Position.exit.thread291 ], [ %.0246325, %178 ], [ %.0246325, %197 ], [ %.0246325, %223 ], [ %.0246325, %287 ], [ %.0246325, %167 ], [ %.0246325, %169 ], [ true, %298 ], [ true, %291 ] + %.0240.be = phi i1 [ %.0240326, %findFrame1Position.exit.thread291 ], [ %.0240326, %178 ], [ %.0240326, %197 ], [ %spec.select277, %223 ], [ %.1241, %287 ], [ %.0240326, %167 ], [ %.0240326, %169 ], [ %.1241, %298 ], [ %.1241, %291 ] + %.0236.be = phi i8 [ %.0236328, %findFrame1Position.exit.thread291 ], [ %.0236328, %178 ], [ %.0236328, %197 ], [ %.0236328, %223 ], [ %.0236328, %287 ], [ %.0236328, %167 ], [ %.0236328, %169 ], [ %.6304, %298 ], [ %.6304, %291 ] + %.0233.be = phi i32 [ %.0233329, %findFrame1Position.exit.thread291 ], [ %.0233329, %178 ], [ %.0233329, %197 ], [ %.0233329, %223 ], [ %.0233329, %287 ], [ %.0233329, %167 ], [ %.0233329, %169 ], [ %59, %298 ], [ %59, %291 ] + %.0231.be = phi i8 [ %.0231330, %findFrame1Position.exit.thread291 ], [ %.0231330, %178 ], [ %.0231330, %197 ], [ %.0231330, %223 ], [ %.0231330, %287 ], [ %.0231330, %167 ], [ %.0231330, %169 ], [ %283, %298 ], [ %283, %291 ] %93 = icmp ult i32 %92, %13 br i1 %93, label %44, label %._crit_edge333, !llvm.loop !13 @@ -1999,62 +1999,59 @@ findFrame1Position.exit286: ; preds = %143, %144, %150 211: ; preds = %198 %212 = add nuw nsw i32 %96, %.pre357 %213 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %212) - %214 = zext i8 %213 to i32 - %215 = add nuw nsw i32 %212, 1 - %216 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %215) - %217 = shl i8 %216, 6 - %218 = zext i8 %217 to i32 - %219 = shl nuw nsw i32 %218, 2 - %220 = or disjoint i32 %219, %214 - %221 = icmp eq i32 %220, 0 - %spec.select277 = select i1 %221, i1 true, i1 %.0240326 - %222 = add nuw nsw i32 %97, %.pre357 - %223 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %222) - %224 = and i8 %223, -4 - %225 = icmp eq i8 %224, -40 - br i1 %225, label %226, label %228 - -226: ; preds = %211 - %227 = add i32 %57, 2 - store i32 %227, ptr %10, align 4 + %214 = add nuw nsw i32 %212, 1 + %215 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %214) + %216 = shl i8 %215, 6 + %217 = or i8 %216, %213 + %218 = icmp eq i8 %217, 0 + %spec.select277 = select i1 %218, i1 true, i1 %.0240326 + %219 = add nuw nsw i32 %97, %.pre357 + %220 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %219) + %221 = and i8 %220, -4 + %222 = icmp eq i8 %221, -40 + br i1 %222, label %223, label %225 + +223:; preds = %211 + %224 = add i32 %57, 2 + store i32 %224, ptr %10, align 4 br label %.backedge 228: ; preds = %._crit_edge355, %211 - %.pre-phi361 = phi i32 [ %.pre360, %._crit_edge355 ], [ %215, %211 ] + %.pre-phi361 = phi i32 [ %.pre360, %._crit_edge355 ], [ %214, %211 ] %.pre-phi359 = phi i32 [ %.pre358, %._crit_edge355 ], [ %212, %211 ] %.1241 = phi i1 [ %.0240326, %._crit_edge355 ], [ %spec.select277, %211 ] %229 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %.pre-phi359) + %227 = zext i8 %226 to i32 + %228 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %.pre-phi361) + %229 = shl i8 %228, 6 %230 = zext i8 %229 to i32 - %231 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %.pre-phi361) - %232 = shl i8 %231, 6 - %233 = zext i8 %232 to i32 - %234 = shl nuw nsw i32 %233, 2 - %235 = or disjoint i32 %234, %230 - %236 = load ptr, ptr @global_filter_list, align 8 - %.not268 = icmp eq ptr %236, null - br i1 %.not268, label %.thread297, label %237 - -237: ; preds = %228 - %238 = call i32 @wmem_list_count(ptr noundef nonnull %236) - %.not269 = icmp eq i32 %238, 0 - br i1 %.not269, label %.thread297, label %239 - -239: ; preds = %237 - %240 = load ptr, ptr @global_filter_list, align 8 - %241 = zext nneg i32 %235 to i64 - %242 = inttoptr i64 %241 to ptr - %243 = call ptr @wmem_list_find(ptr noundef %240, ptr noundef %242) - %244 = load i8, ptr @global_show_only_node_in_filter, align 1, !range !6, !noundef !7 + %231 = shl nuw nsw i32 %230, 2 + %232 = or disjoint i32 %231, %227 + %233 = load ptr, ptr @global_filter_list, align 8 + %.not268 = icmp eq ptr %233, null + br i1 %.not268, label %.thread297, label %234 + +234:; preds = %225 + %235 = call i32 @wmem_list_count(ptr noundef nonnull %233) + %.not269 = icmp eq i32 %235, 0 + br i1 %.not269, label %.thread297, label %236 + +236:; preds = %234 + %237 = load ptr, ptr @global_filter_list, align 8 + %238 = zext nneg i32 %232 to i64 + %239 = inttoptr i64 %238 to ptr + %240 = call ptr @wmem_list_find(ptr noundef %237, ptr noundef %239) + %241 = load i8, ptr @global_show_only_node_in_filter, align 1, !range !6, !noundef !7 + %242 = trunc nuw i8 %241 to i1 + %243 = icmp eq ptr %240, null + %or.cond278 = xor i1 %243, %242 + br i1 %or.cond278, label %.thread297, label %287 + +.thread297: ; preds = %236, %234, %225 + %244 = load i8, ptr @global_display_intergap_data, align 1, !range !6, !noundef !7 %245 = trunc nuw i8 %244 to i1 - %246 = icmp eq ptr %243, null - %or.cond278 = xor i1 %246, %245 - br i1 %or.cond278, label %.thread297, label %290 - -.thread297: ; preds = %239, %237, %228 - %247 = load i8, ptr @global_display_intergap_data, align 1, !range !6, !noundef !7 - %248 = trunc nuw i8 %247 to i1 %.not270 = icmp ne i32 %.0233329, %57 - %or.cond368.not = select i1 %248, i1 %.not270, i1 false + %or.cond368.not = select i1 %245, i1 %.not270, i1 false br i1 %or.cond368.not, label %249, label %254 249: ; preds = %.thread297 @@ -2072,46 +2069,46 @@ findFrame1Position.exit286: ; preds = %143, %144, %150 .thread301: ; preds = %254 %256 = load ptr, ptr %43, align 8 call void @col_set_str(ptr noundef %256, i32 noundef 35, ptr noundef %0) - br label %264 + br label %261 257: ; preds = %254 - br i1 %.0246325, label %264, label %258 + br i1 %.0246325, label %261, label %258 258: ; preds = %257 - br i1 %.not265.not, label %261, label %259 + br i1 %.not265.not, label %258, label %259 259: ; preds = %258 %260 = call i32 @call_dissector(ptr noundef %.0225, ptr noundef %.0226, ptr noundef %6, ptr noundef %7) %.pre.pre.pre = load i32, ptr %10, align 4 %.pre350.pre.pre = load i32, ptr %11, align 4 + br label %258 + +258: ; preds = %256, %255 + %.pre350.pre = phi i32 [ %.pre350.pre.pre, %256 ], [ %58, %255 ] + %.pre.pre = phi i32 [ %.pre.pre.pre, %256 ], [ %57, %255 ] + %259 = load ptr, ptr %43, align 8 + call void @col_set_str(ptr noundef %259, i32 noundef 35, ptr noundef %0) + %260 = load ptr, ptr %43, align 8 + call void @col_clear(ptr noundef %260, i32 noundef 25) br label %261 -261: ; preds = %259, %258 - %.pre350.pre = phi i32 [ %.pre350.pre.pre, %259 ], [ %58, %258 ] - %.pre.pre = phi i32 [ %.pre.pre.pre, %259 ], [ %57, %258 ] - %262 = load ptr, ptr %43, align 8 - call void @col_set_str(ptr noundef %262, i32 noundef 35, ptr noundef %0) - %263 = load ptr, ptr %43, align 8 - call void @col_clear(ptr noundef %263, i32 noundef 25) - br label %264 - -264: ; preds = %.thread301, %261, %257 - %.pre350 = phi i32 [ %58, %257 ], [ %.pre350.pre, %261 ], [ %58, %.thread301 ] - %.pre = phi i32 [ %57, %257 ], [ %.pre.pre, %261 ], [ %57, %.thread301 ] - %.6304.in = phi i8 [ %.0236328, %257 ], [ %.0236328, %261 ], [ %4, %.thread301 ] +261: ; preds = %.thread301, %258, %254 + %.pre350.pre = phi i32 [ %58, %254 ], [ %.pre350.pre, %258 ], [ %58, %.thread301 ] + %.pre.pre = phi i32 [ %57, %254 ], [ %.pre.pre, %258 ], [ %57, %.thread301 ] + %.6304.in = phi i8 [ %.0236328, %254 ], [ %.0236328, %258 ], [ %4, %.thread301 ] %.6304 = add i8 %.6304.in, 1 br i1 %.not272, label %270, label %265 -265: ; preds = %264 +265: ; preds = %261 %266 = load i32, ptr @proto_opensafety, align 4 %267 = call ptr @proto_tree_add_item(ptr noundef nonnull %7, i32 noundef %266, ptr noundef %.0226, i32 noundef %.pre, i32 noundef %.pre350, i32 noundef 0) %268 = load i32, ptr @ett_opensafety, align 4 %269 = call ptr @proto_item_add_subtree(ptr noundef %267, i32 noundef %268) br label %270 -270: ; preds = %264, %265 - %.0224 = phi ptr [ %267, %265 ], [ null, %264 ] - %.0223 = phi ptr [ %269, %265 ], [ null, %264 ] +270: ; preds = %261, %265 + %.0224 = phi ptr [ %267, %262 ], [ null, %261 ] + %.0223 = phi ptr [ %269, %262 ], [ null, %261 ] %271 = getelementptr inbounds nuw i8, ptr %50, i64 34 store i8 %.0239, ptr %271, align 2 %272 = getelementptr inbounds nuw i8, ptr %50, i64 16 @@ -2130,34 +2127,34 @@ findFrame1Position.exit286: ; preds = %143, %144, %150 store i8 0, ptr %50, align 8 %280 = load i8, ptr %271, align 2 %281 = icmp eq i8 %280, -64 - br i1 %281, label %282, label %285 + br i1 %281, label %282, label %282 282: ; preds = %270 - %283 = load i8, ptr %53, align 1 - %284 = and i8 %283, -8 - store i8 %284, ptr %53, align 1 - br label %285 + %280 = load i8, ptr %53, align 1 + %281 = and i8 %280, -8 + store i8 %281, ptr %53, align 1 + br label %282 -285: ; preds = %282, %270 - call fastcc void @dissect_opensafety_message(ptr noundef %50, ptr noundef %255, ptr noundef %6, ptr noundef %.0224, ptr noundef %.0223, i8 noundef zeroext %.6304, i8 noundef zeroext %.0231330) - %286 = load i8, ptr %53, align 1 - br i1 %.1241, label %287, label %294 +282: ; preds = %279, %267 + call fastcc void @dissect_opensafety_message(ptr noundef %50, ptr noundef %252, ptr noundef %6, ptr noundef %.0224, ptr noundef %.0223, i8 noundef zeroext %.6304, i8 noundef zeroext %.0231330) + %283 = load i8, ptr %53, align 1 + br i1 %.1241, label %284, label %291 -287: ; preds = %285 +287: ; preds = %282 store i8 1, ptr %50, align 8 %288 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %.pre-phi359) %289 = call zeroext i8 @tvb_get_uint8(ptr noundef %.0226, i32 noundef %.pre-phi361) br label %294 -290: ; preds = %239 +290: ; preds = %236 %291 = load i32, ptr @proto_opensafety, align 4 %292 = call ptr @proto_tree_add_item(ptr noundef %7, i32 noundef %291, ptr noundef %.0226, i32 noundef %57, i32 noundef %58, i32 noundef 0) - call void (ptr, ptr, ...) @proto_item_append_text(ptr noundef %292, ptr noundef nonnull @.str.351, i32 noundef %235, i32 noundef %235) + call void (ptr, ptr, ...) @proto_item_append_text(ptr noundef %292, ptr noundef nonnull @.str.351, i32 noundef %232, i32 noundef %232) %293 = add i32 %57, 2 store i32 %293, ptr %10, align 4 br label %.backedge -294: ; preds = %285, %287 +294: ; preds = %282, %287 %295 = load i32, ptr @opensafety_tap, align 4 call void @tap_queue_packet(i32 noundef %295, ptr noundef %6, ptr noundef %50) %296 = load i32, ptr %11, align 4 @@ -2201,7 +2198,7 @@ findFrame1Position.exit286: ; preds = %143, %144, %150 br label %.loopexit .loopexit: ; preds = %198, %.thread362, %24, %9, %314 - %.0 = phi i32 [ %315, %314 ], [ 0, %9 ], [ 0, %24 ], [ 0, %.thread362 ], [ 0, %198 ] + %.0 = phi i32 [ %315, %311 ], [ 0, %9 ], [ 0, %24 ], [ 0, %.thread362 ], [ 0, %198 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #12 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #12 ret i32 %.0 diff --git a/bench/wolfssl/optimized/tls.ll b/bench/wolfssl/optimized/tls.ll index 2fe20f4492a..afab184f8f0 100644 --- a/bench/wolfssl/optimized/tls.ll +++ b/bench/wolfssl/optimized/tls.ll @@ -2044,11 +2044,8 @@ define range(i32 -396, 2) i32 @TLSX_SNI_GetFromBuffer(ptr noundef readonly captu %.val119 = load i8, ptr %22, align 1, !tbaa !51 %23 = getelementptr i8, ptr %0, i64 8 %.val120 = load i8, ptr %23, align 1, !tbaa !51 - %24 = zext i8 %.val119 to i16 - %25 = shl nuw i16 %24, 8 - %26 = zext i8 %.val120 to i16 - %27 = or disjoint i16 %25, %26 - %.not117 = icmp eq i16 %27, 0 + %24 = or i8 %.val120, %.val119 + %.not117 = icmp eq i8 %24, 0 %. = select i1 %.not117, i32 -396, i32 -328 br label %.thread165 @@ -2056,117 +2053,117 @@ define range(i32 -396, 2) i32 @TLSX_SNI_GetFromBuffer(ptr noundef readonly captu %29 = getelementptr inbounds nuw i8, ptr %0, i64 1 %30 = load i8, ptr %29, align 1, !tbaa !51 %.not110 = icmp eq i8 %30, 3 - br i1 %.not110, label %31, label %.thread165 + br i1 %.not110, label %35, label %.thread165 -31: ; preds = %28 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 2 - %33 = load i8, ptr %32, align 1, !tbaa !51 - %34 = icmp eq i8 %33, 0 - br i1 %34, label %.thread165, label %35 - -35: ; preds = %31 - %36 = getelementptr inbounds nuw i8, ptr %0, i64 3 +35: ; preds = %25 + %36 = getelementptr inbounds nuw i8, ptr %0, i64 2 %.val121 = load i8, ptr %36, align 1, !tbaa !51 - %37 = getelementptr i8, ptr %0, i64 4 - %.val122 = load i8, ptr %37, align 1, !tbaa !51 - %38 = zext i8 %.val121 to i32 - %39 = shl nuw nsw i32 %38, 8 - %40 = zext i8 %.val122 to i32 - %41 = or disjoint i32 %39, %40 - %42 = add nuw nsw i32 %41, 5 - %43 = icmp ugt i32 %42, %1 - br i1 %43, label %.thread165, label %44 - -44: ; preds = %35 - %45 = getelementptr inbounds nuw i8, ptr %0, i64 5 + %31 = icmp eq i8 %30, 0 + br i1 %31, label %.thread165, label %32 + +32:; preds = %28 + %33 = getelementptr inbounds nuw i8, ptr %0, i64 3 + %.val121 = load i8, ptr %33, align 1, !tbaa !51 + %34 = getelementptr i8, ptr %0, i64 4 + %.val122 = load i8, ptr %34, align 1, !tbaa !51 + %35 = zext i8 %.val121 to i32 + %36 = shl nuw nsw i32 %35, 8 + %37 = zext i8 %.val122 to i32 + %38 = or disjoint i32 %36, %37 + %39 = add nuw nsw i32 %38, 5 + %40 = icmp ugt i32 %39, %1 + br i1 %40, label %.thread165, label %41 + +41: ; preds = %32 + %42 = getelementptr inbounds nuw i8, ptr %0, i64 5 + %43 = load i8, ptr %42, align 1, !tbaa !51 + %.not111 = icmp eq i8 %43, 1 + br i1 %.not111, label %44, label %.thread165 + +44: ; preds = %41 + %45 = getelementptr inbounds nuw i8, ptr %0, i64 6 %46 = load i8, ptr %45, align 1, !tbaa !51 - %.not111 = icmp eq i8 %46, 1 - br i1 %.not111, label %47, label %.thread165 - -47: ; preds = %44 - %48 = getelementptr inbounds nuw i8, ptr %0, i64 6 - %49 = load i8, ptr %48, align 1, !tbaa !51 - %50 = zext i8 %49 to i32 - %51 = shl nuw nsw i32 %50, 16 - %52 = getelementptr inbounds nuw i8, ptr %0, i64 7 - %53 = load i8, ptr %52, align 1, !tbaa !51 - %54 = zext i8 %53 to i32 - %55 = shl nuw nsw i32 %54, 8 - %56 = or disjoint i32 %55, %51 - %57 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %58 = load i8, ptr %57, align 1, !tbaa !51 - %59 = zext i8 %58 to i32 - %60 = or disjoint i32 %56, %59 - %61 = add nuw nsw i32 %60, 9 - %62 = icmp ugt i32 %61, %1 - br i1 %62, label %.thread165, label %63 - -63: ; preds = %47 - %64 = getelementptr inbounds nuw i8, ptr %0, i64 43 - %65 = load i8, ptr %64, align 1, !tbaa !51 - %66 = zext i8 %65 to i32 - %67 = add nuw nsw i32 %66, 43 + %47 = zext i8 %46 to i32 + %48 = shl nuw nsw i32 %47, 16 + %49 = getelementptr inbounds nuw i8, ptr %0, i64 7 + %50 = load i8, ptr %49, align 1, !tbaa !51 + %51 = zext i8 %50 to i32 + %52 = shl nuw nsw i32 %51, 8 + %53 = or disjoint i32 %52, %48 + %54 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %55 = load i8, ptr %54, align 1, !tbaa !51 + %56 = zext i8 %55 to i32 + %57 = or disjoint i32 %53, %56 + %58 = add nuw nsw i32 %57, 9 + %59 = icmp ugt i32 %58, %1 + br i1 %59, label %.thread165, label %60 + +60:; preds = %44 + %61 = getelementptr inbounds nuw i8, ptr %0, i64 43 + %62 = load i8, ptr %61, align 1, !tbaa !51 + %63 = zext i8 %62 to i32 + %64 = add nuw nsw i32 %63, 43 + %65 = icmp ult i32 %1, %64 + br i1 %65, label %.thread165, label %66 + +66:; preds = %60 + %67 = add nuw nsw i32 %63, 46 %68 = icmp ult i32 %1, %67 br i1 %68, label %.thread165, label %69 -69: ; preds = %63 - %70 = add nuw nsw i32 %66, 46 - %71 = icmp ult i32 %1, %70 - br i1 %71, label %.thread165, label %72 - -72: ; preds = %69 - %73 = zext i8 %65 to i64 - %74 = getelementptr inbounds nuw i8, ptr %0, i64 %73 - %75 = getelementptr inbounds nuw i8, ptr %74, i64 44 - %.val123 = load i8, ptr %75, align 1, !tbaa !51 - %76 = getelementptr i8, ptr %74, i64 45 - %.val124 = load i8, ptr %76, align 1, !tbaa !51 - %77 = zext i8 %.val123 to i32 - %78 = shl nuw nsw i32 %77, 8 - %79 = zext i8 %.val124 to i32 - %80 = or disjoint i32 %78, %79 - %81 = add nuw nsw i32 %80, %70 - %.not112 = icmp ugt i32 %1, %81 - br i1 %.not112, label %82, label %.thread165 - -82: ; preds = %72 - %83 = zext nneg i32 %81 to i64 - %84 = getelementptr inbounds nuw i8, ptr %0, i64 %83 - %85 = load i8, ptr %84, align 1, !tbaa !51 - %86 = zext i8 %85 to i32 - %87 = add nuw nsw i32 %81, %86 - %88 = icmp ult i32 %1, %87 - br i1 %88, label %.thread165, label %89 - -89: ; preds = %82 - %90 = add nuw nsw i32 %81, 1 - %91 = add nuw nsw i32 %90, %86 - %92 = add nuw nsw i32 %91, 2 - %93 = icmp ult i32 %1, %92 - br i1 %93, label %.thread165, label %94 - -94: ; preds = %89 - %95 = zext nneg i32 %91 to i64 - %96 = getelementptr inbounds nuw i8, ptr %0, i64 %95 - %.val125 = load i8, ptr %96, align 1, !tbaa !51 - %97 = getelementptr i8, ptr %96, i64 1 - %.val126 = load i8, ptr %97, align 1, !tbaa !51 - %98 = zext i8 %.val125 to i16 - %99 = shl nuw i16 %98, 8 - %100 = zext i8 %.val126 to i16 - %101 = or disjoint i16 %99, %100 - %102 = zext i16 %101 to i32 - %103 = add nuw nsw i32 %92, %102 - %104 = icmp ult i32 %1, %103 - br i1 %104, label %.thread165, label %.preheader170 - -.preheader170: ; preds = %94 - %105 = icmp ugt i16 %101, 3 - br i1 %105, label %.lr.ph184, label %._crit_edge +69: ; preds = %66 + %70 = zext i8 %62 to i64 + %71 = getelementptr inbounds nuw i8, ptr %0, i64 %70 + %72 = getelementptr inbounds nuw i8, ptr %71, i64 44 + %.val123 = load i8, ptr %72, align 1, !tbaa !51 + %73 = getelementptr i8, ptr %71, i64 45 + %.val124 = load i8, ptr %73, align 1, !tbaa !51 + %74 = zext i8 %.val123 to i32 + %75 = shl nuw nsw i32 %74, 8 + %76 = zext i8 %.val124 to i32 + %77 = or disjoint i32 %75, %76 + %78 = add nuw nsw i32 %77, %67 + %.not112 = icmp ugt i32 %1, %78 + br i1 %.not112, label %79, label %.thread165 + +79:; preds = %69 + %80 = zext nneg i32 %78 to i64 + %81 = getelementptr inbounds nuw i8, ptr %0, i64 %80 + %82 = load i8, ptr %81, align 1, !tbaa !51 + %83 = zext i8 %82 to i32 + %84 = add nuw nsw i32 %78, %83 + %85 = icmp ult i32 %1, %84 + br i1 %85, label %.thread165, label %86 + +86:; preds = %79 + %87 = add nuw nsw i32 %78, 1 + %88 = add nuw nsw i32 %87, %83 + %89 = add nuw nsw i32 %88, 2 + %90 = icmp ult i32 %1, %89 + br i1 %90, label %.thread165, label %91 + +91:; preds = %86 + %92 = zext nneg i32 %88 to i64 + %93 = getelementptr inbounds nuw i8, ptr %0, i64 %92 + %.val125 = load i8, ptr %93, align 1, !tbaa !51 + %94 = getelementptr i8, ptr %93, i64 1 + %.val126 = load i8, ptr %94, align 1, !tbaa !51 + %95 = zext i8 %.val125 to i16 + %96 = shl nuw i16 %95, 8 + %97 = zext i8 %.val126 to i16 + %98 = or disjoint i16 %96, %97 + %99 = zext i16 %98 to i32 + %100 = add nuw nsw i32 %89, %99 + %101 = icmp ult i32 %1, %100 + br i1 %101, label %.thread165, label %.preheader170 + +.preheader170:; preds = %91 + %102 = icmp ugt i16 %98, 3 + br i1 %102, label %.lr.ph184, label %._crit_edge .lr.ph184: ; preds = %.preheader170, %.loopexit - %.097183 = phi i32 [ %.299, %.loopexit ], [ %92, %.preheader170 ] - %.0153182 = phi i16 [ %170, %.loopexit ], [ %101, %.preheader170 ] + %.097183 = phi i32 [ %.299, %.loopexit ], [ %89, %.preheader170 ] + %.0153182 = phi i16 [ %164, %.loopexit ], [ %98, %.preheader170 ] %106 = add i32 %.097183, 2 %107 = zext i32 %106 to i64 %108 = getelementptr inbounds nuw i8, ptr %0, i64 %107 @@ -2186,97 +2183,94 @@ define range(i32 -396, 2) i32 @TLSX_SNI_GetFromBuffer(ptr noundef readonly captu %118 = zext i32 %.097183 to i64 %119 = getelementptr inbounds nuw i8, ptr %0, i64 %118 %.val127 = load i8, ptr %119, align 1, !tbaa !51 - %120 = zext i8 %.val127 to i16 - %121 = shl nuw i16 %120, 8 - %122 = getelementptr i8, ptr %119, i64 1 - %.val128 = load i8, ptr %122, align 1, !tbaa !51 - %123 = zext i8 %.val128 to i16 - %124 = or disjoint i16 %121, %123 - %.not114 = icmp eq i16 %124, 0 - br i1 %.not114, label %125, label %.loopexit - -125: ; preds = %117 - %126 = zext i32 %114 to i64 - %127 = getelementptr inbounds nuw i8, ptr %0, i64 %126 - %.val131 = load i8, ptr %127, align 1, !tbaa !51 - %128 = getelementptr i8, ptr %127, i64 1 - %.val132 = load i8, ptr %128, align 1, !tbaa !51 - %129 = zext i8 %.val131 to i16 - %130 = shl nuw i16 %129, 8 - %131 = zext i8 %.val132 to i16 - %132 = or disjoint i16 %130, %131 - %133 = add i32 %.097183, 6 - %134 = zext i16 %132 to i32 - %135 = add i32 %133, %134 - %136 = icmp ult i32 %1, %135 - br i1 %136, label %.thread165, label %.preheader - -.preheader: ; preds = %125 - %137 = icmp ugt i16 %132, 3 - br i1 %137, label %.lr.ph, label %.loopexit - -.lr.ph: ; preds = %.preheader, %159 - %.4101181 = phi i32 [ %147, %159 ], [ %133, %.preheader ] - %.0151180 = phi i16 [ %164, %159 ], [ %132, %.preheader ] - %138 = add i32 %.4101181, 1 - %139 = zext i32 %138 to i64 - %140 = getelementptr inbounds nuw i8, ptr %0, i64 %139 - %.val133 = load i8, ptr %140, align 1, !tbaa !51 - %141 = getelementptr i8, ptr %140, i64 1 - %.val134 = load i8, ptr %141, align 1, !tbaa !51 - %142 = zext i8 %.val133 to i32 - %143 = shl nuw nsw i32 %142, 8 - %144 = zext i8 %.val134 to i32 - %145 = or disjoint i32 %143, %144 - %146 = add i32 %.4101181, 3 - %147 = add i32 %145, %146 - %148 = icmp ult i32 %1, %147 - br i1 %148, label %.thread165, label %149 - -149: ; preds = %.lr.ph - %150 = zext i32 %.4101181 to i64 + %117 = getelementptr i8, ptr %119, i64 1 + %.val128 = load i8, ptr %117, align 1, !tbaa !51 + %118 = or i8 %.val128, %.val127 + %.not114 = icmp eq i8 %118, 0 + br i1 %.not114, label %119, label %.loopexit + +119:; preds = %114 + %120 = zext i32 %111 to i64 + %121 = getelementptr inbounds nuw i8, ptr %0, i64 %120 + %.val131 = load i8, ptr %121, align 1, !tbaa !51 + %122 = getelementptr i8, ptr %121, i64 1 + %.val132 = load i8, ptr %122, align 1, !tbaa !51 + %123 = zext i8 %.val131 to i16 + %124 = shl nuw i16 %123, 8 + %125 = zext i8 %.val132 to i16 + %126 = or disjoint i16 %124, %125 + %127 = add i32 %.097183, 6 + %131 = zext i16 %126 to i32 + %129 = add i32 %127, %135 + %130 = icmp ult i32 %1, %129 + br i1 %130, label %.thread165, label %.preheader + +.preheader:; preds = %119 + %131 = icmp ugt i16 %126, 3 + br i1 %131, label %.lr.ph, label %.loopexit + +.lr.ph:; preds = %.preheader, %153 + %.4101181 = phi i32 [ %141, %153 ], [ %127, %.preheader ] + %.0151180 = phi i16 [ %158, %153 ], [ %126, %.preheader ] + %132 = add i32 %.4101181, 1 + %133 = zext i32 %132 to i64 + %134 = getelementptr inbounds nuw i8, ptr %0, i64 %133 + %.val133 = load i8, ptr %134, align 1, !tbaa !51 + %135 = getelementptr i8, ptr %134, i64 1 + %.val134 = load i8, ptr %135, align 1, !tbaa !51 + %136 = zext i8 %.val133 to i32 + %137 = shl nuw nsw i32 %136, 8 + %138 = zext i8 %.val134 to i32 + %139 = or disjoint i32 %137, %138 + %140 = add i32 %.4101181, 3 + %141 = add i32 %139, %140 + %142 = icmp ult i32 %1, %141 + br i1 %142, label %.thread165, label %143 + +143:; preds = %.lr.ph + %144 = zext i32 %.4101181 to i64 + %145 = getelementptr inbounds nuw i8, ptr %0, i64 %144 + %146 = load i8, ptr %145, align 1, !tbaa !51 + %.not115 = icmp eq i8 %146, %2 + br i1 %.not115, label %147, label %153 + +147: ; preds = %143 + %148 = load i32, ptr %4, align 4, !tbaa !3 + %149 = tail call range(i32 0, 65540) i32 @llvm.umin.i32(i32 range(i32 0, 65540) %139, i32 %148) + store i32 %149, ptr %4, align 4, !tbaa !3 + %150 = zext i32 %140 to i64 %151 = getelementptr inbounds nuw i8, ptr %0, i64 %150 - %152 = load i8, ptr %151, align 1, !tbaa !51 - %.not115 = icmp eq i8 %152, %2 - br i1 %.not115, label %153, label %159 - -153: ; preds = %149 - %154 = load i32, ptr %4, align 4, !tbaa !3 - %155 = tail call range(i32 0, 65540) i32 @llvm.umin.i32(i32 range(i32 0, 65540) %145, i32 %154) - store i32 %155, ptr %4, align 4, !tbaa !3 - %156 = zext i32 %146 to i64 - %157 = getelementptr inbounds nuw i8, ptr %0, i64 %156 - %158 = zext nneg i32 %155 to i64 - tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %3, ptr nonnull align 1 %157, i64 %158, i1 false) + %152 = zext nneg i32 %149 to i64 + tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %3, ptr nonnull align 1 %151, i64 %152, i1 false) br label %.thread165 -159: ; preds = %149 - %160 = add nuw nsw i32 %145, 3 +159: ; preds = %143 + %160 = add nuw nsw i32 %139, 3 %161 = zext i16 %.0151180 to i32 + %156 = tail call range(i32 0, 65540) i32 @llvm.umin.i32(i32 range(i32 0, 65540) %154, i32 %155) + %157 = trunc nuw i32 %156 to i16 + %158 = sub i16 %.0151180, %157 + %159 = icmp ugt i16 %158, 3 + br i1 %159, label %.lr.ph, label %.loopexit + +.loopexit: ; preds = %153, %.preheader, %114 + %.299 = phi i32 [ %112, %114 ], [ %127, %.preheader ], [ %141, %153 ] + %160 = add nuw nsw i32 %110, 4 + %161 = zext i16 %.0153182 to i32 %162 = tail call range(i32 0, 65540) i32 @llvm.umin.i32(i32 range(i32 0, 65540) %160, i32 %161) %163 = trunc nuw i32 %162 to i16 - %164 = sub i16 %.0151180, %163 + %164 = sub i16 %.0153182, %163 %165 = icmp ugt i16 %164, 3 - br i1 %165, label %.lr.ph, label %.loopexit - -.loopexit: ; preds = %159, %.preheader, %117 - %.299 = phi i32 [ %115, %117 ], [ %133, %.preheader ], [ %147, %159 ] - %166 = add nuw nsw i32 %113, 4 - %167 = zext i16 %.0153182 to i32 - %168 = tail call range(i32 0, 65540) i32 @llvm.umin.i32(i32 range(i32 0, 65540) %166, i32 %167) - %169 = trunc nuw i32 %168 to i16 - %170 = sub i16 %.0153182, %169 - %171 = icmp ugt i16 %170, 3 - br i1 %171, label %.lr.ph184, label %._crit_edge, !llvm.loop !109 + br i1 %165, label %.lr.ph184, label %._crit_edge, !llvm.loop !109 ._crit_edge: ; preds = %.loopexit, %.preheader170 - %.0153.lcssa = phi i16 [ %101, %.preheader170 ], [ %170, %.loopexit ] + %.0153.lcssa = phi i16 [ %98, %.preheader170 ], [ %164, %.loopexit ] %.not113 = icmp eq i16 %.0153.lcssa, 0 %172 = select i1 %.not113, i32 0, i32 -328 br label %.thread165 -.thread165: ; preds = %125, %.lr.ph184, %.lr.ph, %153, %94, %89, %82, %72, %69, %63, %47, %44, %35, %31, %28, %9, %21, %13, %5, %._crit_edge - %.0 = phi i32 [ %172, %._crit_edge ], [ -310, %5 ], [ -328, %13 ], [ %., %21 ], [ -328, %9 ], [ -328, %28 ], [ -396, %31 ], [ -310, %35 ], [ -328, %44 ], [ -328, %47 ], [ -328, %63 ], [ -328, %69 ], [ -328, %72 ], [ -328, %82 ], [ 0, %89 ], [ -328, %94 ], [ 1, %153 ], [ -328, %.lr.ph ], [ -328, %.lr.ph184 ], [ -328, %125 ] +.thread165: ; preds = %119, %.lr.ph184, %.lr.ph, %147, %91, %86, %79, %69, %66, %60, %44, %41, %32, %28, %25, %9, %21, %13, %5, %._crit_edge + %.0 = phi i32 [ %172, %._crit_edge ], [ -310, %5 ], [ -328, %13 ], [ %., %21 ], [ -328, %9 ], [ -328, %25 ], [ -396, %28 ], [ -310, %32 ], [ -335, %41 ], [ -328, %44 ], [ -328, %60 ], [ -328, %66 ], [ -328, %69 ], [ -328, %79 ], [ 0, %86 ], [ -328, %91 ], [ 1, %147 ], [ -328, %.lr.ph ], [ -328, %.lr.ph184 ], [ -328, %119 ] ret i32 %.0 } diff --git a/bench/zed-rs/optimized/38cn6p2m6864jrrxog4mr8xwk.ll b/bench/zed-rs/optimized/38cn6p2m6864jrrxog4mr8xwk.ll index 7edc9462928..ef44ffd3809 100644 --- a/bench/zed-rs/optimized/38cn6p2m6864jrrxog4mr8xwk.ll +++ b/bench/zed-rs/optimized/38cn6p2m6864jrrxog4mr8xwk.ll @@ -2385,7 +2385,7 @@ define hidden void @_ZN10image_webp8extended20read_extended_header17ha6dcd9d79c0 %29 = add i64 %12, 4 %storemerge.i.i104 = select i1 %28, i64 %29, i64 %15 store i64 %storemerge.i.i104, ptr %11, align 8, !alias.scope !566, !noalias !567 - br i1 %28, label %31, label %41 + br i1 %28, label %31, label %39 30: ; preds = %2 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10), !noalias !539 @@ -2397,19 +2397,17 @@ define hidden void @_ZN10image_webp8extended20read_extended_header17ha6dcd9d79c0 31: ; preds = %22 %32 = getelementptr inbounds nuw i8, ptr %8, i64 1 %33 = load i16, ptr %32, align 1, !noalias !558 - %34 = zext i16 %33 to i32 - %35 = shl nuw nsw i32 %34, 8 - %36 = load i8, ptr %8, align 1, !noalias !558, !noundef !4 - %37 = zext i8 %36 to i32 - %38 = or disjoint i32 %35, %37 + %34 = load i8, ptr %8, align 1, !noalias !558, !noundef !4 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %8), !noalias !558 %39 = and i8 %23, -63 %or.cond = icmp eq i8 %39, 0 - %40 = icmp eq i32 %38, 0 - %or.cond1 = and i1 %or.cond, %40 - br i1 %or.cond1, label %43, label %42 + %36 = zext i8 %34 to i16 + %37 = or i16 %33, %36 + %38 = icmp eq i16 %37, 0 + %or.cond1 = and i1 %or.cond, %38 + br i1 %or.cond1, label %41, label %42 -41: ; preds = %22 +39: ; preds = %22 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %8), !noalias !558 store i8 0, ptr %0, align 8 %.sroa.469.0..sroa_idx = getelementptr inbounds nuw i8, ptr %0, i64 8 @@ -2530,7 +2528,7 @@ define hidden void @_ZN10image_webp8extended20read_extended_header17ha6dcd9d79c0 store i8 8, ptr %0, align 8 br label %85 -85: ; preds = %84, %78, %77, %65, %42, %41, %30 +85: ; preds = %84, %78, %77, %65, %42, %39, %30 ret void } diff --git a/bench/zed-rs/optimized/7ud3epkhjcjfe38h6hlh4jrau.ll b/bench/zed-rs/optimized/7ud3epkhjcjfe38h6hlh4jrau.ll index 920f97c2daa..07810390ad8 100644 --- a/bench/zed-rs/optimized/7ud3epkhjcjfe38h6hlh4jrau.ll +++ b/bench/zed-rs/optimized/7ud3epkhjcjfe38h6hlh4jrau.ll @@ -2101,17 +2101,15 @@ define internal fastcc void @_ZN10image_webp8extended20read_extended_header17he4 37: ; preds = %"_ZN66_$LT$std..io..cursor..Cursor$LT$T$GT$$u20$as$u20$std..io..Read$GT$10read_exact17hc6a40b397d73c1d9E.exit.i103" %38 = getelementptr inbounds nuw i8, ptr %8, i64 1 %39 = load i16, ptr %38, align 1, !noalias !392 - %40 = zext i16 %39 to i32 - %41 = shl nuw nsw i32 %40, 8 - %42 = load i8, ptr %8, align 1, !noalias !392, !noundef !22 - %43 = zext i8 %42 to i32 - %44 = or disjoint i32 %41, %43 + %40 = load i8, ptr %8, align 1, !noalias !392, !noundef !22 call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %8), !noalias !392 %45 = and i8 %26, -63 %or.cond = icmp eq i8 %45, 0 - %46 = icmp eq i32 %44, 0 - %or.cond1 = and i1 %or.cond, %46 - br i1 %or.cond1, label %49, label %48 + %42 = zext i8 %40 to i16 + %43 = or i16 %39, %42 + %44 = icmp eq i16 %43, 0 + %or.cond1 = and i1 %or.cond, %44 + br i1 %or.cond1, label %47, label %46 47: ; preds = %"_ZN66_$LT$std..io..cursor..Cursor$LT$T$GT$$u20$as$u20$std..io..Read$GT$10read_exact17hc6a40b397d73c1d9E.exit.i103" call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %8), !noalias !392 diff --git a/scripts/setup_pre_commit_patch.sh b/scripts/setup_pre_commit_patch.sh index c5409e09ef4..27cc356112c 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/137875 export COMPTIME_MODE=0 # Please rebase manually