From 1e6fb2e4312ab3c44880bcf34abe5b3438d68f53 Mon Sep 17 00:00:00 2001 From: dtcxzyw <15650457+dtcxzyw@users.noreply.github.com> Date: Sun, 22 Jun 2025 15:07:01 +0800 Subject: [PATCH 1/3] pre-commit: PR143683 --- scripts/setup_pre_commit_patch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_pre_commit_patch.sh b/scripts/setup_pre_commit_patch.sh index c5409e09ef4..57063aa1007 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/143683 export COMPTIME_MODE=0 # Please rebase manually From b82dacff09db81084f556eac26d87b873eb3c219 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 22 Jun 2025 07:39:22 +0000 Subject: [PATCH 2/3] pre-commit: Update --- bench/actix-rs/optimized/2wg1z1eatrkafji9.ll | 363 ++++++------- bench/actix-rs/optimized/36qa1hw006t0trtl.ll | 367 ++++++------- bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll | 357 +++++++------ bench/cmake/optimized/zstd_ldm.ll | 2 +- .../optimized/2y94il9ncyebrpt0.ll | 353 +++++++------ bench/delta-rs/optimized/3w98mau10rb6qf7d.ll | 196 +++---- bench/delta-rs/optimized/4say4x9grcidoih4.ll | 35 +- bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll | 355 +++++++------ bench/duckdb/optimized/bignum.ll | 52 +- .../ub_duckdb_storage_compression_roaring.ll | 14 +- bench/egg-rs/optimized/208b1a9t1vdfvafq.ll | 499 +++++++++--------- bench/graphviz/optimized/spring_electrical.ll | 438 ++++++++------- .../html5ever-rs/optimized/1mf2h4bh94yx6is.ll | 369 ++++++------- bench/hyperscan/optimized/mcclellancompile.ll | 8 +- bench/hyperscan/optimized/ng_mcclellan.ll | 37 +- bench/hyperscan/optimized/ng_misc_opt.ll | 24 +- bench/image-rs/optimized/244uszkx0e8t5ie1.ll | 40 +- .../influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll | 266 +++++----- .../optimized/7fmwz6nrtt7kwsj.ll | 361 ++++++------- .../mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll | 349 ++++++------ .../mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll | 351 ++++++------ bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll | 121 +++-- .../optimized/buvg05ofkihfrgtzxvq0wm8fb.ll | 405 +++++++------- .../optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll | 4 +- bench/qdrant-rs/optimized/14hho85eanhsaepf.ll | 236 ++++----- bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll | 367 +++++++------ bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll | 359 ++++++------- .../optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll | 358 +++++++------ .../optimized/dv3u0zj1g96ml2orvqzylystz.ll | 213 ++++---- .../optimized/2gfo4qfvfsgl8tkl.ll | 155 +++--- .../optimized/3bcyxdd3fm70gs30.ll | 157 +++--- .../optimized/635ry91nhs2ocdh.ll | 165 +++--- .../optimized/5l8bi66t9fkz97f2037rofy4n.ll | 472 +++++++++-------- .../optimized/2xun21ofbsn7p9xn.ll | 394 +++++++------- .../optimized/3l7xg3ikfppult5o2lclnyys7.ll | 262 ++++----- .../optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll | 256 ++++----- .../optimized/1owd0gjazgnm3wlfvndm01xt6.ll | 201 +++---- .../optimized/4dcxzssfl4exl338cy92tfq1l.ll | 163 +++--- .../optimized/8hv30atg5watxkzkqbi6e75uu.ll | 167 +++--- .../optimized/3n432rns6m5cu25igp84708nl.ll | 458 ++++++++-------- bench/wireshark/optimized/packet-bmc.ll | 116 ++-- bench/wolfssl/optimized/random.ll | 377 +++++++------ bench/yalantinglibs/optimized/channel.ll | 10 +- .../optimized/4fjzcqwe72s61qqj6jfld7d0e.ll | 155 +++--- .../optimized/8v0fi0zpujn3n5viw54gladc4.ll | 191 +++---- .../optimized/cn5tr75hwj0e1t163yn1kh0fu.ll | 159 +++--- 46 files changed, 5416 insertions(+), 5341 deletions(-) diff --git a/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll b/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll index 9ca516c75b0..d068fc7fd8e 100644 --- a/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll +++ b/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll @@ -4408,218 +4408,223 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %5 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val16 = load i64, ptr %5, align 8, !noundef !42 %6 = add i64 %.val16, 1 - %7 = lshr i64 %6, 4 - %8 = and i64 %6, 15 - %.not.i.i.i.i = icmp ne i64 %8, 0 - %9 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %7, %9 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %6, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19: ; preds = %3 + %7 = icmp ne ptr %.val15, null + tail call void @llvm.assume(i1 %7) + %8 = getelementptr inbounds nuw i8, ptr %.val15, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %8, ptr nonnull align 1 %.val15, i64 %6, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) + br label %._crit_edge .lr.ph.i: ; preds = %3 - %10 = icmp ne ptr %.val15, null - tail call void @llvm.assume(i1 %10) - br label %11 + %9 = lshr i64 %6, 4 + %10 = and i64 %6, 15 + %.not.i.i.i.i = icmp ne i64 %10, 0 + %11 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %9, %11 + %12 = icmp ne ptr %.val15, null + tail call void @llvm.assume(i1 %12) + br label %16 -11: ; preds = %11, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %13, %11 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %12, %11 ] - %12 = add nsw i64 %.sroa.5.05.i, -1 - %13 = add i64 %.sroa.01.06.i, 16 - %14 = getelementptr inbounds i8, ptr %.val15, i64 %.sroa.01.06.i - %15 = load <16 x i8>, ptr %14, align 16, !noalias !751 - %.lobit.i.i = ashr <16 x i8> %15, splat (i8 7) - %16 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %17 = or <2 x i64> %16, splat (i64 -9187201950435737472) - store <2 x i64> %17, ptr %14, align 16, !noalias !754 - %.not.not.i = icmp eq i64 %12, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %11 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit: ; preds = %11, %3 - %18 = icmp ne ptr %.val15, null - tail call void @llvm.assume(i1 %18) - %..i = tail call i64 @llvm.umax.i64(i64 %6, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %6, i64 16) - %19 = getelementptr inbounds i8, ptr %.val15, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %19, ptr nonnull align 1 %.val15, i64 %.9.i, i1 false) +._crit_edge.i: ; preds = %16 + %spec.select = tail call i64 @llvm.umax.i64(i64 %6, i64 16) + %spec.select27 = tail call i64 @llvm.umin.i64(i64 %6, i64 16) + %13 = getelementptr inbounds i8, ptr %.val15, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %13, ptr nonnull align 1 %.val15, i64 %spec.select27, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) - %20 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store ptr %2, ptr %20, align 8 - %21 = getelementptr inbounds nuw i8, ptr %4, i64 16 - store i64 32, ptr %21, align 8 + %14 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store ptr %2, ptr %14, align 8 + %15 = getelementptr inbounds nuw i8, ptr %4, i64 16 + store i64 32, ptr %15, align 8 store ptr %0, ptr %4, align 8 - %.not9 = icmp eq i64 %6, 0 - br i1 %.not9, label %._crit_edge, label %.lr.ph - -22: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit - %23 = landingpad { ptr, i32 } + br label %.lr.ph + +16: ; preds = %16, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %18, %16 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %17, %16 ] + %17 = add i64 %.sroa.5.05.i, -1 + %18 = add i64 %.sroa.01.06.i, 16 + %19 = getelementptr inbounds i8, ptr %.val15, i64 %.sroa.01.06.i + %20 = load <16 x i8>, ptr %19, align 16, !noalias !751 + %.lobit.i.i = ashr <16 x i8> %20, splat (i8 7) + %21 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %22 = or <2 x i64> %21, splat (i64 -9187201950435737472) + store <2 x i64> %22, ptr %19, align 16, !noalias !754 + %.not.not.i = icmp eq i64 %17, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %16 + +23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit + %24 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h4cd20b6166d6f1f7E"(ptr noalias noundef align 8 dereferenceable(24) %4) #50 - to label %108 unwind label %106 + to label %109 unwind label %107 -._crit_edge.loopexit: ; preds = %105 +._crit_edge.loopexit: ; preds = %106 %.pre = load i64, ptr %5, align 8 %.pre15 = add i64 %.pre, 1 - %24 = lshr i64 %.pre15, 3 - %25 = mul nuw i64 %24, 7 + %25 = lshr i64 %.pre15, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit - %.pre-phi = phi i64 [ %25, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %26 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %27 = icmp ult i64 %26, 8 - %.0 = select i1 %27, i64 %26, i64 %.pre-phi - %28 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %29 = load i64, ptr %28, align 8, !noundef !42 - %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %31 = sub i64 %.0, %29 - store i64 %31, ptr %30, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !42 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, %105 - %.sroa.02.08 = phi i64 [ %32, %105 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %32 = add nuw i64 %.sroa.02.08, 1 - %33 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %34 = getelementptr inbounds i8, ptr %33, i64 %.sroa.02.08 - %35 = load i8, ptr %34, align 1, !noundef !42 - %.not = icmp eq i8 %35, -128 - br i1 %.not, label %36, label %105 +.lr.ph: ; preds = %._crit_edge.i, %106 + %.sroa.02.08 = phi i64 [ %33, %106 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.08, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.08 + %36 = load i8, ptr %35, align 1, !noundef !42 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %106 -36: ; preds = %.lr.ph - %37 = shl i64 %.sroa.02.08, 5 - %38 = sub nuw nsw i64 -32, %37 - %39 = getelementptr inbounds i8, ptr %33, i64 %38 +37: ; preds = %.lr.ph + %38 = shl i64 %.sroa.02.08, 5 + %39 = sub nuw nsw i64 -32, %38 + %40 = getelementptr inbounds i8, ptr %34, i64 %39 br label %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit -_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit: ; preds = %.preheader, %36 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) - to label %41 unwind label %22 +_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit: ; preds = %.preheader, %37 + %41 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) + to label %42 unwind label %23 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit +42: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit %.val = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 %.val14 = load i64, ptr %5, align 8, !noundef !42 - %.sroa.0.05.i = and i64 %.val14, %40 - %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !757 - %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %44 = bitcast <16 x i1> %43 to i16 - %.not.i.not7.i = icmp eq i16 %44, 0 - br i1 %.not.i.not7.i, label %.lr.ph.i17, label %._crit_edge.i - -.lr.ph.i17: ; preds = %41, %.lr.ph.i17 - %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i17 ], [ %.sroa.0.05.i, %41 ] - %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i17 ], [ 0, %41 ] - %45 = add i64 %.sroa.7.08.i, 16 - %46 = add i64 %45, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %46, %.val14 - %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !757 - %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %49 = bitcast <16 x i1> %48 to i16 - %.not.i.not.i = icmp eq i16 %49, 0 - br i1 %.not.i.not.i, label %.lr.ph.i17, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i17, %41 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i17 ] - %.lcssa.i = phi i16 [ %44, %41 ], [ %49, %.lr.ph.i17 ] - %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %51 = zext nneg i16 %50 to i64 - %52 = add i64 %.sroa.0.0.lcssa.i, %51 - %53 = and i64 %52, %.val14 - %54 = getelementptr inbounds i8, ptr %.val, i64 %53 - %55 = load i8, ptr %54, align 1, !noundef !42 - %56 = icmp sgt i8 %55, -1 - br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - -57: ; preds = %._crit_edge.i - %58 = load <16 x i8>, ptr %.val, align 16, !noalias !760 - %59 = icmp slt <16 x i8> %58, zeroinitializer - %60 = bitcast <16 x i1> %59 to i16 - %61 = icmp ne i16 %60, 0 - %62 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) - %63 = zext nneg i16 %62 to i64 - tail call void @llvm.assume(i1 %61) + %.sroa.0.05.i = and i64 %.val14, %41 + %43 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %43, align 1, !noalias !757 + %44 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %45 = bitcast <16 x i1> %44 to i16 + %.not.i.not7.i = icmp eq i16 %45, 0 + br i1 %.not.i.not7.i, label %.lr.ph.i18, label %._crit_edge.i17 + +.lr.ph.i18: ; preds = %42, %.lr.ph.i18 + %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i18 ], [ %.sroa.0.05.i, %42 ] + %.sroa.7.08.i = phi i64 [ %46, %.lr.ph.i18 ], [ 0, %42 ] + %46 = add i64 %.sroa.7.08.i, 16 + %47 = add i64 %46, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %47, %.val14 + %48 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %48, align 1, !noalias !757 + %49 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %50 = bitcast <16 x i1> %49 to i16 + %.not.i.not.i = icmp eq i16 %50, 0 + br i1 %.not.i.not.i, label %.lr.ph.i18, label %._crit_edge.i17 + +._crit_edge.i17: ; preds = %.lr.ph.i18, %42 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %42 ], [ %.sroa.0.0.i, %.lr.ph.i18 ] + %.lcssa.i = phi i16 [ %45, %42 ], [ %50, %.lr.ph.i18 ] + %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %52 = zext nneg i16 %51 to i64 + %53 = add i64 %.sroa.0.0.lcssa.i, %52 + %54 = and i64 %53, %.val14 + %55 = getelementptr inbounds i8, ptr %.val, i64 %54 + %56 = load i8, ptr %55, align 1, !noundef !42 + %57 = icmp sgt i8 %56, -1 + br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + +58: ; preds = %._crit_edge.i17 + %59 = load <16 x i8>, ptr %.val, align 16, !noalias !760 + %60 = icmp slt <16 x i8> %59, zeroinitializer + %61 = bitcast <16 x i1> %60 to i16 + %62 = icmp ne i16 %61, 0 + %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) + %64 = zext nneg i16 %63 to i64 + tail call void @llvm.assume(i1 %62) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %57, %._crit_edge.i - %.0.i.i = phi i64 [ %63, %57 ], [ %53, %._crit_edge.i ] - %64 = sub i64 %.sroa.02.08, %.sroa.0.05.i - %65 = sub i64 %.0.i.i, %.sroa.0.05.i - %66 = xor i64 %65, %64 - %.unshifted = and i64 %66, %.val14 - %67 = icmp ult i64 %.unshifted, 16 - br i1 %67, label %82, label %68 - -68: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - %69 = shl i64 %.0.i.i, 5 - %70 = sub nuw nsw i64 -32, %69 - %71 = getelementptr inbounds i8, ptr %.val, i64 %70 - %72 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %73 = load i8, ptr %72, align 1, !noundef !42 - %74 = lshr i64 %40, 57 - %75 = trunc nuw nsw i64 %74 to i8 - %76 = add i64 %.0.i.i, -16 - %77 = and i64 %76, %.val14 - store i8 %75, ptr %72, align 1 - %78 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %79 = getelementptr i8, ptr %78, i64 %77 - %80 = getelementptr i8, ptr %79, i64 16 - store i8 %75, ptr %80, align 1 - %81 = icmp eq i8 %73, -1 - br i1 %81, label %96, label %.preheader - -82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - %83 = lshr i64 %40, 57 - %84 = trunc nuw nsw i64 %83 to i8 - %85 = add i64 %.sroa.02.08, -16 - %86 = and i64 %.val14, %85 - %87 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 - store i8 %84, ptr %87, align 1 - %88 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %89 = getelementptr i8, ptr %88, i64 %86 - %90 = getelementptr i8, ptr %89, i64 16 - store i8 %84, ptr %90, align 1 - br label %105 - -.preheader: ; preds = %68, %.preheader - %.0910.i = phi i64 [ %95, %.preheader ], [ 0, %68 ] - %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.0910.i - %93 = load i8, ptr %91, align 1 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %58, %._crit_edge.i17 + %.0.i.i = phi i64 [ %64, %58 ], [ %54, %._crit_edge.i17 ] + %65 = sub i64 %.sroa.02.08, %.sroa.0.05.i + %66 = sub i64 %.0.i.i, %.sroa.0.05.i + %67 = xor i64 %66, %65 + %.unshifted = and i64 %67, %.val14 + %68 = icmp ult i64 %.unshifted, 16 + br i1 %68, label %83, label %69 + +69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + %70 = shl i64 %.0.i.i, 5 + %71 = sub nuw nsw i64 -32, %70 + %72 = getelementptr inbounds i8, ptr %.val, i64 %71 + %73 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %74 = load i8, ptr %73, align 1, !noundef !42 + %75 = lshr i64 %41, 57 + %76 = trunc nuw nsw i64 %75 to i8 + %77 = add i64 %.0.i.i, -16 + %78 = and i64 %77, %.val14 + store i8 %76, ptr %73, align 1 + %79 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %80 = getelementptr i8, ptr %79, i64 %78 + %81 = getelementptr i8, ptr %80, i64 16 + store i8 %76, ptr %81, align 1 + %82 = icmp eq i8 %74, -1 + br i1 %82, label %97, label %.preheader + +83: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + %84 = lshr i64 %41, 57 + %85 = trunc nuw nsw i64 %84 to i8 + %86 = add i64 %.sroa.02.08, -16 + %87 = and i64 %.val14, %86 + %88 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 + store i8 %85, ptr %88, align 1 + %89 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %90 = getelementptr i8, ptr %89, i64 %87 + %91 = getelementptr i8, ptr %90, i64 16 + store i8 %85, ptr %91, align 1 + br label %106 + +.preheader: ; preds = %69, %.preheader + %.0910.i = phi i64 [ %96, %.preheader ], [ 0, %69 ] + %92 = getelementptr inbounds nuw i8, ptr %40, i64 %.0910.i + %93 = getelementptr inbounds nuw i8, ptr %72, i64 %.0910.i %94 = load i8, ptr %92, align 1 - store i8 %94, ptr %91, align 1 - store i8 %93, ptr %92, align 1 - %95 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %95, 32 + %95 = load i8, ptr %93, align 1 + store i8 %95, ptr %92, align 1 + store i8 %94, ptr %93, align 1 + %96 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %96, 32 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit, label %.preheader -96: ; preds = %68 - %97 = add i64 %.sroa.02.08, -16 - %98 = load i64, ptr %5, align 8, !noundef !42 - %99 = and i64 %98, %97 - %100 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.08 - store i8 -1, ptr %101, align 1 - %102 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %103 = getelementptr i8, ptr %102, i64 %99 - %104 = getelementptr i8, ptr %103, i64 16 - store i8 -1, ptr %104, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %71, ptr noundef nonnull align 1 dereferenceable(32) %39, i64 32, i1 false) - br label %105 - -105: ; preds = %.lr.ph, %96, %82 +97: ; preds = %69 + %98 = add i64 %.sroa.02.08, -16 + %99 = load i64, ptr %5, align 8, !noundef !42 + %100 = and i64 %99, %98 + %101 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %102 = getelementptr inbounds i8, ptr %101, i64 %.sroa.02.08 + store i8 -1, ptr %102, align 1 + %103 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %104 = getelementptr i8, ptr %103, i64 %100 + %105 = getelementptr i8, ptr %104, i64 16 + store i8 -1, ptr %105, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %72, ptr noundef nonnull align 1 dereferenceable(32) %40, i64 32, i1 false) + br label %106 + +106: ; preds = %.lr.ph, %97, %83 %exitcond.not = icmp eq i64 %.sroa.02.08, %.val16 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -106: ; preds = %22 - %107 = landingpad { ptr, i32 } +107: ; preds = %23 + %108 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #51 unreachable -108: ; preds = %22 - resume { ptr, i32 } %23 +109: ; preds = %23 + resume { ptr, i32 } %24 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/actix-rs/optimized/36qa1hw006t0trtl.ll b/bench/actix-rs/optimized/36qa1hw006t0trtl.ll index ea120b19e47..65e4f2d1115 100644 --- a/bench/actix-rs/optimized/36qa1hw006t0trtl.ll +++ b/bench/actix-rs/optimized/36qa1hw006t0trtl.ll @@ -6755,219 +6755,224 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %5 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val14 = load i64, ptr %5, align 8, !noundef !4 %6 = add i64 %.val14, 1 - %7 = lshr i64 %6, 4 - %8 = and i64 %6, 15 - %.not.i.i.i.i = icmp ne i64 %8, 0 - %9 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %7, %9 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %6, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23: ; preds = %3 + %7 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %7) + %8 = getelementptr inbounds nuw i8, ptr %.val, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %8, ptr nonnull align 1 %.val, i64 %6, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) + br label %._crit_edge .lr.ph.i: ; preds = %3 - %10 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %10) - br label %11 + %9 = lshr i64 %6, 4 + %10 = and i64 %6, 15 + %.not.i.i.i.i = icmp ne i64 %10, 0 + %11 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %9, %11 + %12 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %12) + br label %16 -11: ; preds = %11, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %13, %11 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %12, %11 ] - %12 = add nsw i64 %.sroa.5.05.i, -1 - %13 = add i64 %.sroa.01.06.i, 16 - %14 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i - %15 = load <16 x i8>, ptr %14, align 16, !noalias !1466 - %.lobit.i.i = ashr <16 x i8> %15, splat (i8 7) - %16 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %17 = or <2 x i64> %16, splat (i64 -9187201950435737472) - store <2 x i64> %17, ptr %14, align 16, !noalias !1469 - %.not.not.i = icmp eq i64 %12, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %11 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit: ; preds = %11, %3 - %18 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %18) - %..i = tail call i64 @llvm.umax.i64(i64 %6, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %6, i64 16) - %19 = getelementptr inbounds i8, ptr %.val, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %19, ptr nonnull align 1 %.val, i64 %.9.i, i1 false) +._crit_edge.i: ; preds = %16 + %spec.select = tail call i64 @llvm.umax.i64(i64 %6, i64 16) + %spec.select33 = tail call i64 @llvm.umin.i64(i64 %6, i64 16) + %13 = getelementptr inbounds i8, ptr %.val, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %13, ptr nonnull align 1 %.val, i64 %spec.select33, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) - %20 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store ptr %2, ptr %20, align 8 - %21 = getelementptr inbounds nuw i8, ptr %4, i64 16 - store i64 64, ptr %21, align 8 + %14 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store ptr %2, ptr %14, align 8 + %15 = getelementptr inbounds nuw i8, ptr %4, i64 16 + store i64 64, ptr %15, align 8 store ptr %0, ptr %4, align 8 - %.not11 = icmp eq i64 %6, 0 - br i1 %.not11, label %._crit_edge, label %.lr.ph - -22: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit - %23 = landingpad { ptr, i32 } + br label %.lr.ph + +16: ; preds = %16, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %18, %16 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %17, %16 ] + %17 = add i64 %.sroa.5.05.i, -1 + %18 = add i64 %.sroa.01.06.i, 16 + %19 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i + %20 = load <16 x i8>, ptr %19, align 16, !noalias !1466 + %.lobit.i.i = ashr <16 x i8> %20, splat (i8 7) + %21 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %22 = or <2 x i64> %21, splat (i64 -9187201950435737472) + store <2 x i64> %22, ptr %19, align 16, !noalias !1469 + %.not.not.i = icmp eq i64 %17, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %16 + +23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit + %24 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hf2622f0f124eb1a5E"(ptr noalias noundef align 8 dereferenceable(24) %4) #53 - to label %110 unwind label %108 + to label %111 unwind label %109 -._crit_edge.loopexit: ; preds = %107 +._crit_edge.loopexit: ; preds = %108 %.pre = load i64, ptr %5, align 8 %.pre19 = add i64 %.pre, 1 - %24 = lshr i64 %.pre19, 3 - %25 = mul nuw i64 %24, 7 + %25 = lshr i64 %.pre19, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit - %.pre-phi = phi i64 [ %25, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %26 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %27 = icmp ult i64 %26, 8 - %.0 = select i1 %27, i64 %26, i64 %.pre-phi - %28 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %29 = load i64, ptr %28, align 8, !noundef !4 - %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %31 = sub i64 %.0, %29 - store i64 %31, ptr %30, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !4 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, %107 - %.sroa.02.010 = phi i64 [ %32, %107 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %32 = add nuw i64 %.sroa.02.010, 1 - %33 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %34 = getelementptr inbounds i8, ptr %33, i64 %.sroa.02.010 - %35 = load i8, ptr %34, align 1, !noundef !4 - %.not = icmp eq i8 %35, -128 - br i1 %.not, label %36, label %107 +.lr.ph: ; preds = %._crit_edge.i, %108 + %.sroa.02.010 = phi i64 [ %33, %108 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.010, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.010 + %36 = load i8, ptr %35, align 1, !noundef !4 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %108 -36: ; preds = %.lr.ph - %37 = shl i64 %.sroa.02.010, 6 - %38 = sub nuw nsw i64 -64, %37 - %39 = getelementptr inbounds i8, ptr %33, i64 %38 +37: ; preds = %.lr.ph + %38 = shl i64 %.sroa.02.010, 6 + %39 = sub nuw nsw i64 -64, %38 + %40 = getelementptr inbounds i8, ptr %34, i64 %39 br label %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit -_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit: ; preds = %.preheader, %36 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) - to label %41 unwind label %22 +_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit: ; preds = %.preheader, %37 + %41 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) + to label %42 unwind label %23 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit +42: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !1472) - %42 = load i64, ptr %5, align 8, !alias.scope !1472, !noundef !4 - %43 = load ptr, ptr %0, align 8, !alias.scope !1472, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %42, %40 - %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !1475 - %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %46 = bitcast <16 x i1> %45 to i16 - %.not.i.not13.i = icmp eq i16 %46, 0 - br i1 %.not.i.not13.i, label %.lr.ph.i15, label %._crit_edge.i - -.lr.ph.i15: ; preds = %41, %.lr.ph.i15 - %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i15 ], [ %.sroa.0.011.i, %41 ] - %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i15 ], [ 0, %41 ] - %47 = add i64 %.sroa.7.014.i, 16 - %48 = add i64 %47, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %48, %42 - %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !1475 - %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %51 = bitcast <16 x i1> %50 to i16 - %.not.i.not.i = icmp eq i16 %51, 0 - br i1 %.not.i.not.i, label %.lr.ph.i15, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i15, %41 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i15 ] - %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i15 ] - %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %53 = zext nneg i16 %52 to i64 - %54 = add i64 %.sroa.0.0.lcssa.i, %53 - %55 = and i64 %54, %42 - %56 = getelementptr inbounds i8, ptr %43, i64 %55 - %57 = load i8, ptr %56, align 1, !noalias !1472, !noundef !4 - %58 = icmp sgt i8 %57, -1 - br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit - -59: ; preds = %._crit_edge.i - %60 = load <16 x i8>, ptr %43, align 16, !noalias !1478 - %61 = icmp slt <16 x i8> %60, zeroinitializer - %62 = bitcast <16 x i1> %61 to i16 - %63 = icmp ne i16 %62, 0 - %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) - %65 = zext nneg i16 %64 to i64 - tail call void @llvm.assume(i1 %63) + %43 = load i64, ptr %5, align 8, !alias.scope !1472, !noundef !4 + %44 = load ptr, ptr %0, align 8, !alias.scope !1472, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %43, %41 + %45 = getelementptr inbounds i8, ptr %44, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %45, align 1, !noalias !1475 + %46 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %47 = bitcast <16 x i1> %46 to i16 + %.not.i.not13.i = icmp eq i16 %47, 0 + br i1 %.not.i.not13.i, label %.lr.ph.i16, label %._crit_edge.i15 + +.lr.ph.i16: ; preds = %42, %.lr.ph.i16 + %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i16 ], [ %.sroa.0.011.i, %42 ] + %.sroa.7.014.i = phi i64 [ %48, %.lr.ph.i16 ], [ 0, %42 ] + %48 = add i64 %.sroa.7.014.i, 16 + %49 = add i64 %48, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %49, %43 + %50 = getelementptr inbounds i8, ptr %44, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %50, align 1, !noalias !1475 + %51 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %52 = bitcast <16 x i1> %51 to i16 + %.not.i.not.i = icmp eq i16 %52, 0 + br i1 %.not.i.not.i, label %.lr.ph.i16, label %._crit_edge.i15 + +._crit_edge.i15: ; preds = %.lr.ph.i16, %42 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %42 ], [ %.sroa.0.0.i, %.lr.ph.i16 ] + %.lcssa.i = phi i16 [ %47, %42 ], [ %52, %.lr.ph.i16 ] + %53 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %54 = zext nneg i16 %53 to i64 + %55 = add i64 %.sroa.0.0.lcssa.i, %54 + %56 = and i64 %55, %43 + %57 = getelementptr inbounds i8, ptr %44, i64 %56 + %58 = load i8, ptr %57, align 1, !noalias !1472, !noundef !4 + %59 = icmp sgt i8 %58, -1 + br i1 %59, label %60, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit + +60: ; preds = %._crit_edge.i15 + %61 = load <16 x i8>, ptr %44, align 16, !noalias !1478 + %62 = icmp slt <16 x i8> %61, zeroinitializer + %63 = bitcast <16 x i1> %62 to i16 + %64 = icmp ne i16 %63, 0 + %65 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %63, i1 true) + %66 = zext nneg i16 %65 to i64 + tail call void @llvm.assume(i1 %64) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit: ; preds = %59, %._crit_edge.i - %.0.i.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i ] - %66 = sub i64 %.sroa.02.010, %.sroa.0.011.i - %67 = sub i64 %.0.i.i, %.sroa.0.011.i - %68 = xor i64 %67, %66 - %.unshifted = and i64 %68, %42 - %69 = icmp ult i64 %.unshifted, 16 - br i1 %69, label %84, label %70 - -70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit - %71 = shl i64 %.0.i.i, 6 - %72 = sub nuw nsw i64 -64, %71 - %73 = getelementptr inbounds i8, ptr %43, i64 %72 - %74 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i - %75 = load i8, ptr %74, align 1, !noundef !4 - %76 = lshr i64 %40, 57 - %77 = trunc nuw nsw i64 %76 to i8 - %78 = add i64 %.0.i.i, -16 - %79 = and i64 %78, %42 - store i8 %77, ptr %74, align 1 - %80 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %81 = getelementptr i8, ptr %80, i64 %79 - %82 = getelementptr i8, ptr %81, i64 16 - store i8 %77, ptr %82, align 1 - %83 = icmp eq i8 %75, -1 - br i1 %83, label %98, label %.preheader - -84: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit - %85 = lshr i64 %40, 57 - %86 = trunc nuw nsw i64 %85 to i8 - %87 = add i64 %.sroa.02.010, -16 - %88 = and i64 %42, %87 - %89 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.010 - store i8 %86, ptr %89, align 1 - %90 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %91 = getelementptr i8, ptr %90, i64 %88 - %92 = getelementptr i8, ptr %91, i64 16 - store i8 %86, ptr %92, align 1 - br label %107 - -.preheader: ; preds = %70, %.preheader - %.0910.i = phi i64 [ %97, %.preheader ], [ 0, %70 ] - %93 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %94 = getelementptr inbounds nuw i8, ptr %73, i64 %.0910.i - %95 = load i8, ptr %93, align 1 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit: ; preds = %60, %._crit_edge.i15 + %.0.i.i = phi i64 [ %66, %60 ], [ %56, %._crit_edge.i15 ] + %67 = sub i64 %.sroa.02.010, %.sroa.0.011.i + %68 = sub i64 %.0.i.i, %.sroa.0.011.i + %69 = xor i64 %68, %67 + %.unshifted = and i64 %69, %43 + %70 = icmp ult i64 %.unshifted, 16 + br i1 %70, label %85, label %71 + +71: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit + %72 = shl i64 %.0.i.i, 6 + %73 = sub nuw nsw i64 -64, %72 + %74 = getelementptr inbounds i8, ptr %44, i64 %73 + %75 = getelementptr inbounds i8, ptr %44, i64 %.0.i.i + %76 = load i8, ptr %75, align 1, !noundef !4 + %77 = lshr i64 %41, 57 + %78 = trunc nuw nsw i64 %77 to i8 + %79 = add i64 %.0.i.i, -16 + %80 = and i64 %79, %43 + store i8 %78, ptr %75, align 1 + %81 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %82 = getelementptr i8, ptr %81, i64 %80 + %83 = getelementptr i8, ptr %82, i64 16 + store i8 %78, ptr %83, align 1 + %84 = icmp eq i8 %76, -1 + br i1 %84, label %99, label %.preheader + +85: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit + %86 = lshr i64 %41, 57 + %87 = trunc nuw nsw i64 %86 to i8 + %88 = add i64 %.sroa.02.010, -16 + %89 = and i64 %43, %88 + %90 = getelementptr inbounds i8, ptr %44, i64 %.sroa.02.010 + store i8 %87, ptr %90, align 1 + %91 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %92 = getelementptr i8, ptr %91, i64 %89 + %93 = getelementptr i8, ptr %92, i64 16 + store i8 %87, ptr %93, align 1 + br label %108 + +.preheader: ; preds = %71, %.preheader + %.0910.i = phi i64 [ %98, %.preheader ], [ 0, %71 ] + %94 = getelementptr inbounds nuw i8, ptr %40, i64 %.0910.i + %95 = getelementptr inbounds nuw i8, ptr %74, i64 %.0910.i %96 = load i8, ptr %94, align 1 - store i8 %96, ptr %93, align 1 - store i8 %95, ptr %94, align 1 - %97 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %97, 64 + %97 = load i8, ptr %95, align 1 + store i8 %97, ptr %94, align 1 + store i8 %96, ptr %95, align 1 + %98 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %98, 64 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit, label %.preheader -98: ; preds = %70 - %99 = add i64 %.sroa.02.010, -16 - %100 = load i64, ptr %5, align 8, !noundef !4 - %101 = and i64 %100, %99 - %102 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %103 = getelementptr inbounds i8, ptr %102, i64 %.sroa.02.010 - store i8 -1, ptr %103, align 1 - %104 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %105 = getelementptr i8, ptr %104, i64 %101 - %106 = getelementptr i8, ptr %105, i64 16 - store i8 -1, ptr %106, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %73, ptr noundef nonnull align 1 dereferenceable(64) %39, i64 64, i1 false) - br label %107 - -107: ; preds = %.lr.ph, %98, %84 +99: ; preds = %71 + %100 = add i64 %.sroa.02.010, -16 + %101 = load i64, ptr %5, align 8, !noundef !4 + %102 = and i64 %101, %100 + %103 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %104 = getelementptr inbounds i8, ptr %103, i64 %.sroa.02.010 + store i8 -1, ptr %104, align 1 + %105 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %106 = getelementptr i8, ptr %105, i64 %102 + %107 = getelementptr i8, ptr %106, i64 16 + store i8 -1, ptr %107, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %74, ptr noundef nonnull align 1 dereferenceable(64) %40, i64 64, i1 false) + br label %108 + +108: ; preds = %.lr.ph, %99, %85 %exitcond.not = icmp eq i64 %.sroa.02.010, %.val14 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -108: ; preds = %22 - %109 = landingpad { ptr, i32 } +109: ; preds = %23 + %110 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #51 unreachable -110: ; preds = %22 - resume { ptr, i32 } %23 +111: ; preds = %23 + resume { ptr, i32 } %24 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll b/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll index 5b52f0a8123..049329972f6 100644 --- a/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll +++ b/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll @@ -6330,219 +6330,224 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val17 = load i64, ptr %6, align 8, !noundef !4 %7 = add i64 %.val17, 1 - %8 = lshr i64 %7, 4 - %9 = and i64 %7, 15 - %.not.i.i.i.i = icmp ne i64 %9, 0 - %10 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %8, %10 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %7, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23: ; preds = %4 + %8 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %8) + %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + br label %._crit_edge .lr.ph.i: ; preds = %4 - %11 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %11) - br label %12 + %10 = lshr i64 %7, 4 + %11 = and i64 %7, 15 + %.not.i.i.i.i = icmp ne i64 %11, 0 + %12 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %10, %12 + %13 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %13) + br label %17 -12: ; preds = %12, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %14, %12 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %13, %12 ] - %13 = add nsw i64 %.sroa.5.05.i, -1 - %14 = add i64 %.sroa.01.06.i, 16 - %15 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i - %16 = load <16 x i8>, ptr %15, align 16, !noalias !1379 - %.lobit.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16, !noalias !1382 - %.not.not.i = icmp eq i64 %13, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %12 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds i8, ptr %.val, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val, i64 %.9.i, i1 false) +._crit_edge.i: ; preds = %17 + %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) + %spec.select33 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) + %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select33, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %15, align 8 + %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %16, align 8 store ptr %0, ptr %5, align 8 - %.not11 = icmp eq i64 %7, 0 - br i1 %.not11, label %._crit_edge, label %.lr.ph - -23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit - %24 = landingpad { ptr, i32 } + br label %.lr.ph + +17: ; preds = %17, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %19, %17 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %18, %17 ] + %18 = add i64 %.sroa.5.05.i, -1 + %19 = add i64 %.sroa.01.06.i, 16 + %20 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i + %21 = load <16 x i8>, ptr %20, align 16, !noalias !1379 + %.lobit.i.i = ashr <16 x i8> %21, splat (i8 7) + %22 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %23 = or <2 x i64> %22, splat (i64 -9187201950435737472) + store <2 x i64> %23, ptr %20, align 16, !noalias !1382 + %.not.not.i = icmp eq i64 %18, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %17 + +24: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit + %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17heb69bf2421029736E"(ptr noalias noundef align 8 dereferenceable(24) %5) #49 - to label %107 unwind label %105 + to label %108 unwind label %106 -._crit_edge.loopexit: ; preds = %104 +._crit_edge.loopexit: ; preds = %105 %.pre = load i64, ptr %6, align 8 %.pre19 = add i64 %.pre, 1 - %25 = lshr i64 %.pre19, 3 - %26 = mul nuw i64 %25, 7 + %26 = lshr i64 %.pre19, 3 + %27 = mul nuw i64 %26, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !4 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %29 = icmp ult i64 %28, 8 + %.0 = select i1 %29, i64 %28, i64 %.pre-phi + %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %31 = load i64, ptr %30, align 8, !noundef !4 + %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %33 = sub i64 %.0, %31 + store i64 %33, ptr %32, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, %104 - %.sroa.02.010 = phi i64 [ %33, %104 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %33 = add nuw i64 %.sroa.02.010, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.010 - %36 = load i8, ptr %35, align 1, !noundef !4 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %104 +.lr.ph: ; preds = %._crit_edge.i, %105 + %.sroa.02.010 = phi i64 [ %34, %105 ], [ 0, %._crit_edge.i ] + %34 = add nuw i64 %.sroa.02.010, 1 + %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.010 + %37 = load i8, ptr %36, align 1, !noundef !4 + %.not = icmp eq i8 %37, -128 + br i1 %.not, label %38, label %105 -37: ; preds = %.lr.ph +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.010, -1 %.neg14 = mul i64 %2, %.neg - %38 = getelementptr inbounds i8, ptr %34, i64 %.neg14 + %39 = getelementptr inbounds i8, ptr %35, i64 %.neg14 br label %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit -_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit: ; preds = %.preheader, %37 - %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) - to label %40 unwind label %23 +_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) + to label %41 unwind label %24 -40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !1385) - %41 = load i64, ptr %6, align 8, !alias.scope !1385, !noundef !4 - %42 = load ptr, ptr %0, align 8, !alias.scope !1385, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %41, %39 - %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %43, align 1, !noalias !1388 - %44 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %45 = bitcast <16 x i1> %44 to i16 - %.not.i.not13.i = icmp eq i16 %45, 0 - br i1 %.not.i.not13.i, label %.lr.ph.i18, label %._crit_edge.i - -.lr.ph.i18: ; preds = %40, %.lr.ph.i18 - %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i18 ], [ %.sroa.0.011.i, %40 ] - %.sroa.7.014.i = phi i64 [ %46, %.lr.ph.i18 ], [ 0, %40 ] - %46 = add i64 %.sroa.7.014.i, 16 - %47 = add i64 %46, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %47, %41 - %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %48, align 1, !noalias !1388 - %49 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %50 = bitcast <16 x i1> %49 to i16 - %.not.i.not.i = icmp eq i16 %50, 0 - br i1 %.not.i.not.i, label %.lr.ph.i18, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i18, %40 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %40 ], [ %.sroa.0.0.i, %.lr.ph.i18 ] - %.lcssa.i = phi i16 [ %45, %40 ], [ %50, %.lr.ph.i18 ] - %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %52 = zext nneg i16 %51 to i64 - %53 = add i64 %.sroa.0.0.lcssa.i, %52 - %54 = and i64 %53, %41 - %55 = getelementptr inbounds i8, ptr %42, i64 %54 - %56 = load i8, ptr %55, align 1, !noalias !1385, !noundef !4 - %57 = icmp sgt i8 %56, -1 - br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit - -58: ; preds = %._crit_edge.i - %59 = load <16 x i8>, ptr %42, align 16, !noalias !1391 - %60 = icmp slt <16 x i8> %59, zeroinitializer - %61 = bitcast <16 x i1> %60 to i16 - %62 = icmp ne i16 %61, 0 - %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) - %64 = zext nneg i16 %63 to i64 - tail call void @llvm.assume(i1 %62) + %42 = load i64, ptr %6, align 8, !alias.scope !1385, !noundef !4 + %43 = load ptr, ptr %0, align 8, !alias.scope !1385, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %42, %40 + %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !1388 + %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %46 = bitcast <16 x i1> %45 to i16 + %.not.i.not13.i = icmp eq i16 %46, 0 + br i1 %.not.i.not13.i, label %.lr.ph.i19, label %._crit_edge.i18 + +.lr.ph.i19: ; preds = %41, %.lr.ph.i19 + %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i19 ], [ %.sroa.0.011.i, %41 ] + %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i19 ], [ 0, %41 ] + %47 = add i64 %.sroa.7.014.i, 16 + %48 = add i64 %47, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %48, %42 + %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !1388 + %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %51 = bitcast <16 x i1> %50 to i16 + %.not.i.not.i = icmp eq i16 %51, 0 + br i1 %.not.i.not.i, label %.lr.ph.i19, label %._crit_edge.i18 + +._crit_edge.i18: ; preds = %.lr.ph.i19, %41 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i19 ] + %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i19 ] + %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %53 = zext nneg i16 %52 to i64 + %54 = add i64 %.sroa.0.0.lcssa.i, %53 + %55 = and i64 %54, %42 + %56 = getelementptr inbounds i8, ptr %43, i64 %55 + %57 = load i8, ptr %56, align 1, !noalias !1385, !noundef !4 + %58 = icmp sgt i8 %57, -1 + br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit + +59: ; preds = %._crit_edge.i18 + %60 = load <16 x i8>, ptr %43, align 16, !noalias !1391 + %61 = icmp slt <16 x i8> %60, zeroinitializer + %62 = bitcast <16 x i1> %61 to i16 + %63 = icmp ne i16 %62, 0 + %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) + %65 = zext nneg i16 %64 to i64 + tail call void @llvm.assume(i1 %63) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit: ; preds = %58, %._crit_edge.i - %.0.i.i = phi i64 [ %64, %58 ], [ %54, %._crit_edge.i ] - %65 = sub i64 %.sroa.02.010, %.sroa.0.011.i - %66 = sub i64 %.0.i.i, %.sroa.0.011.i - %67 = xor i64 %66, %65 - %.unshifted = and i64 %67, %41 - %68 = icmp ult i64 %.unshifted, 16 - br i1 %68, label %81, label %69 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit: ; preds = %59, %._crit_edge.i18 + %.0.i.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i18 ] + %66 = sub i64 %.sroa.02.010, %.sroa.0.011.i + %67 = sub i64 %.0.i.i, %.sroa.0.011.i + %68 = xor i64 %67, %66 + %.unshifted = and i64 %68, %42 + %69 = icmp ult i64 %.unshifted, 16 + br i1 %69, label %82, label %70 -69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit +70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit %.neg15 = xor i64 %.0.i.i, -1 %.neg16 = mul i64 %2, %.neg15 - %70 = getelementptr inbounds i8, ptr %42, i64 %.neg16 - %71 = getelementptr inbounds i8, ptr %42, i64 %.0.i.i - %72 = load i8, ptr %71, align 1, !noundef !4 - %73 = lshr i64 %39, 57 - %74 = trunc nuw nsw i64 %73 to i8 - %75 = add i64 %.0.i.i, -16 - %76 = and i64 %75, %41 - store i8 %74, ptr %71, align 1 - %77 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %78 = getelementptr i8, ptr %77, i64 %76 - %79 = getelementptr i8, ptr %78, i64 16 - store i8 %74, ptr %79, align 1 - %80 = icmp eq i8 %72, -1 - br i1 %80, label %95, label %.preheader - -81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit - %82 = lshr i64 %39, 57 - %83 = trunc nuw nsw i64 %82 to i8 - %84 = add i64 %.sroa.02.010, -16 - %85 = and i64 %41, %84 - %86 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.010 - store i8 %83, ptr %86, align 1 - %87 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %88 = getelementptr i8, ptr %87, i64 %85 - %89 = getelementptr i8, ptr %88, i64 16 - store i8 %83, ptr %89, align 1 - br label %104 - -.preheader: ; preds = %69, %.preheader - %.0910.i = phi i64 [ %94, %.preheader ], [ 0, %69 ] - %90 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i - %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.0910.i - %92 = load i8, ptr %90, align 1 + %71 = getelementptr inbounds i8, ptr %43, i64 %.neg16 + %72 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i + %73 = load i8, ptr %72, align 1, !noundef !4 + %74 = lshr i64 %40, 57 + %75 = trunc nuw nsw i64 %74 to i8 + %76 = add i64 %.0.i.i, -16 + %77 = and i64 %76, %42 + store i8 %75, ptr %72, align 1 + %78 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %79 = getelementptr i8, ptr %78, i64 %77 + %80 = getelementptr i8, ptr %79, i64 16 + store i8 %75, ptr %80, align 1 + %81 = icmp eq i8 %73, -1 + br i1 %81, label %96, label %.preheader + +82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit + %83 = lshr i64 %40, 57 + %84 = trunc nuw nsw i64 %83 to i8 + %85 = add i64 %.sroa.02.010, -16 + %86 = and i64 %42, %85 + %87 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.010 + store i8 %84, ptr %87, align 1 + %88 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %89 = getelementptr i8, ptr %88, i64 %86 + %90 = getelementptr i8, ptr %89, i64 16 + store i8 %84, ptr %90, align 1 + br label %105 + +.preheader: ; preds = %70, %.preheader + %.0910.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] + %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.0910.i %93 = load i8, ptr %91, align 1 - store i8 %93, ptr %90, align 1 - store i8 %92, ptr %91, align 1 - %94 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %94, %2 + %94 = load i8, ptr %92, align 1 + store i8 %94, ptr %91, align 1 + store i8 %93, ptr %92, align 1 + %95 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %95, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit, label %.preheader -95: ; preds = %69 - %96 = add i64 %.sroa.02.010, -16 - %97 = load i64, ptr %6, align 8, !noundef !4 - %98 = and i64 %97, %96 - %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.010 - store i8 -1, ptr %100, align 1 - %101 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %102 = getelementptr i8, ptr %101, i64 %98 - %103 = getelementptr i8, ptr %102, i64 16 - store i8 -1, ptr %103, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) - br label %104 - -104: ; preds = %.lr.ph, %95, %81 +96: ; preds = %70 + %97 = add i64 %.sroa.02.010, -16 + %98 = load i64, ptr %6, align 8, !noundef !4 + %99 = and i64 %98, %97 + %100 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.010 + store i8 -1, ptr %101, align 1 + %102 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %103 = getelementptr i8, ptr %102, i64 %99 + %104 = getelementptr i8, ptr %103, i64 16 + store i8 -1, ptr %104, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %105 + +105: ; preds = %.lr.ph, %96, %82 %exitcond.not = icmp eq i64 %.sroa.02.010, %.val17 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -105: ; preds = %23 - %106 = landingpad { ptr, i32 } +106: ; preds = %24 + %107 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #50 unreachable -107: ; preds = %23 - resume { ptr, i32 } %24 +108: ; preds = %24 + resume { ptr, i32 } %25 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/cmake/optimized/zstd_ldm.ll b/bench/cmake/optimized/zstd_ldm.ll index 63e83872119..001b90ec699 100644 --- a/bench/cmake/optimized/zstd_ldm.ll +++ b/bench/cmake/optimized/zstd_ldm.ll @@ -387,7 +387,7 @@ define dso_local range(i64 -119, 1) i64 @ZSTD_ldm_generateSequences(ptr noundef %14 = icmp ne i64 %13, 0 %15 = zext i1 %14 to i64 %16 = add nuw nsw i64 %12, %15 - %.not = icmp eq i64 %16, 0 + %.not = icmp eq i64 %4, 0 br i1 %.not, label %.critedge, label %.lr.ph .lr.ph: ; preds = %5 diff --git a/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll b/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll index da66668c771..73917f7e71b 100644 --- a/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll +++ b/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll @@ -988,218 +988,223 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val19 = load i64, ptr %6, align 8, !noundef !7 %7 = add i64 %.val19, 1 - %8 = lshr i64 %7, 4 - %9 = and i64 %7, 15 - %.not.i.i.i.i = icmp ne i64 %9, 0 - %10 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %8, %10 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %7, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19: ; preds = %4 + %8 = icmp ne ptr %.val18, null + tail call void @llvm.assume(i1 %8) + %9 = getelementptr inbounds nuw i8, ptr %.val18, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val18, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + br label %._crit_edge .lr.ph.i: ; preds = %4 - %11 = icmp ne ptr %.val18, null - tail call void @llvm.assume(i1 %11) - br label %12 + %10 = lshr i64 %7, 4 + %11 = and i64 %7, 15 + %.not.i.i.i.i = icmp ne i64 %11, 0 + %12 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %10, %12 + %13 = icmp ne ptr %.val18, null + tail call void @llvm.assume(i1 %13) + br label %17 -12: ; preds = %12, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %14, %12 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %13, %12 ] - %13 = add nsw i64 %.sroa.5.05.i, -1 - %14 = add i64 %.sroa.01.06.i, 16 - %15 = getelementptr inbounds i8, ptr %.val18, i64 %.sroa.01.06.i - %16 = load <16 x i8>, ptr %15, align 16, !noalias !178 - %.lobit.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16, !noalias !181 - %.not.not.i = icmp eq i64 %13, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, label %12 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val18, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds i8, ptr %.val18, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val18, i64 %.9.i, i1 false) +._crit_edge.i: ; preds = %17 + %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) + %spec.select27 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) + %14 = getelementptr inbounds i8, ptr %.val18, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val18, i64 %spec.select27, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %15, align 8 + %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %16, align 8 store ptr %0, ptr %5, align 8 - %.not9 = icmp eq i64 %7, 0 - br i1 %.not9, label %._crit_edge, label %.lr.ph - -23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit - %24 = landingpad { ptr, i32 } + br label %.lr.ph + +17: ; preds = %17, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %19, %17 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %18, %17 ] + %18 = add i64 %.sroa.5.05.i, -1 + %19 = add i64 %.sroa.01.06.i, 16 + %20 = getelementptr inbounds i8, ptr %.val18, i64 %.sroa.01.06.i + %21 = load <16 x i8>, ptr %20, align 16, !noalias !178 + %.lobit.i.i = ashr <16 x i8> %21, splat (i8 7) + %22 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %23 = or <2 x i64> %22, splat (i64 -9187201950435737472) + store <2 x i64> %23, ptr %20, align 16, !noalias !181 + %.not.not.i = icmp eq i64 %18, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %17 + +24: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit + %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h18a6c372d2f6b9d2E"(ptr noalias noundef align 8 dereferenceable(24) %5) #27 - to label %105 unwind label %103 + to label %106 unwind label %104 -._crit_edge.loopexit: ; preds = %102 +._crit_edge.loopexit: ; preds = %103 %.pre = load i64, ptr %6, align 8 %.pre15 = add i64 %.pre, 1 - %25 = lshr i64 %.pre15, 3 - %26 = mul nuw i64 %25, 7 + %26 = lshr i64 %.pre15, 3 + %27 = mul nuw i64 %26, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !7 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %29 = icmp ult i64 %28, 8 + %.0 = select i1 %29, i64 %28, i64 %.pre-phi + %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %31 = load i64, ptr %30, align 8, !noundef !7 + %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %33 = sub i64 %.0, %31 + store i64 %33, ptr %32, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit, %102 - %.sroa.02.08 = phi i64 [ %33, %102 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit ] - %33 = add nuw i64 %.sroa.02.08, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.08 - %36 = load i8, ptr %35, align 1, !noundef !7 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %102 +.lr.ph: ; preds = %._crit_edge.i, %103 + %.sroa.02.08 = phi i64 [ %34, %103 ], [ 0, %._crit_edge.i ] + %34 = add nuw i64 %.sroa.02.08, 1 + %35 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.08 + %37 = load i8, ptr %36, align 1, !noundef !7 + %.not = icmp eq i8 %37, -128 + br i1 %.not, label %38, label %103 -37: ; preds = %.lr.ph +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.08, -1 %.neg14 = mul i64 %2, %.neg - %38 = getelementptr inbounds i8, ptr %34, i64 %.neg14 + %39 = getelementptr inbounds i8, ptr %35, i64 %.neg14 br label %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit -_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit: ; preds = %.preheader, %37 - %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) - to label %40 unwind label %23 +_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) + to label %41 unwind label %24 -40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit %.val = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 %.val17 = load i64, ptr %6, align 8, !noundef !7 - %.sroa.0.05.i = and i64 %.val17, %39 - %41 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %41, align 1, !noalias !184 - %42 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %43 = bitcast <16 x i1> %42 to i16 - %.not.i.not7.i = icmp eq i16 %43, 0 - br i1 %.not.i.not7.i, label %.lr.ph.i20, label %._crit_edge.i - -.lr.ph.i20: ; preds = %40, %.lr.ph.i20 - %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i20 ], [ %.sroa.0.05.i, %40 ] - %.sroa.7.08.i = phi i64 [ %44, %.lr.ph.i20 ], [ 0, %40 ] - %44 = add i64 %.sroa.7.08.i, 16 - %45 = add i64 %44, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %45, %.val17 - %46 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %46, align 1, !noalias !184 - %47 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %48 = bitcast <16 x i1> %47 to i16 - %.not.i.not.i = icmp eq i16 %48, 0 - br i1 %.not.i.not.i, label %.lr.ph.i20, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i20, %40 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %40 ], [ %.sroa.0.0.i, %.lr.ph.i20 ] - %.lcssa.i = phi i16 [ %43, %40 ], [ %48, %.lr.ph.i20 ] - %49 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %50 = zext nneg i16 %49 to i64 - %51 = add i64 %.sroa.0.0.lcssa.i, %50 - %52 = and i64 %51, %.val17 - %53 = getelementptr inbounds i8, ptr %.val, i64 %52 - %54 = load i8, ptr %53, align 1, !noundef !7 - %55 = icmp sgt i8 %54, -1 - br i1 %55, label %56, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - -56: ; preds = %._crit_edge.i - %57 = load <16 x i8>, ptr %.val, align 16, !noalias !187 - %58 = icmp slt <16 x i8> %57, zeroinitializer - %59 = bitcast <16 x i1> %58 to i16 - %60 = icmp ne i16 %59, 0 - %61 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %59, i1 true) - %62 = zext nneg i16 %61 to i64 - tail call void @llvm.assume(i1 %60) + %.sroa.0.05.i = and i64 %.val17, %40 + %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !184 + %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %44 = bitcast <16 x i1> %43 to i16 + %.not.i.not7.i = icmp eq i16 %44, 0 + br i1 %.not.i.not7.i, label %.lr.ph.i21, label %._crit_edge.i20 + +.lr.ph.i21: ; preds = %41, %.lr.ph.i21 + %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i21 ], [ %.sroa.0.05.i, %41 ] + %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i21 ], [ 0, %41 ] + %45 = add i64 %.sroa.7.08.i, 16 + %46 = add i64 %45, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %46, %.val17 + %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !184 + %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %49 = bitcast <16 x i1> %48 to i16 + %.not.i.not.i = icmp eq i16 %49, 0 + br i1 %.not.i.not.i, label %.lr.ph.i21, label %._crit_edge.i20 + +._crit_edge.i20: ; preds = %.lr.ph.i21, %41 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i21 ] + %.lcssa.i = phi i16 [ %44, %41 ], [ %49, %.lr.ph.i21 ] + %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %51 = zext nneg i16 %50 to i64 + %52 = add i64 %.sroa.0.0.lcssa.i, %51 + %53 = and i64 %52, %.val17 + %54 = getelementptr inbounds i8, ptr %.val, i64 %53 + %55 = load i8, ptr %54, align 1, !noundef !7 + %56 = icmp sgt i8 %55, -1 + br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + +57: ; preds = %._crit_edge.i20 + %58 = load <16 x i8>, ptr %.val, align 16, !noalias !187 + %59 = icmp slt <16 x i8> %58, zeroinitializer + %60 = bitcast <16 x i1> %59 to i16 + %61 = icmp ne i16 %60, 0 + %62 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) + %63 = zext nneg i16 %62 to i64 + tail call void @llvm.assume(i1 %61) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %56, %._crit_edge.i - %.0.i.i = phi i64 [ %62, %56 ], [ %52, %._crit_edge.i ] - %63 = sub i64 %.sroa.02.08, %.sroa.0.05.i - %64 = sub i64 %.0.i.i, %.sroa.0.05.i - %65 = xor i64 %64, %63 - %.unshifted = and i64 %65, %.val17 - %66 = icmp ult i64 %.unshifted, 16 - br i1 %66, label %79, label %67 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %57, %._crit_edge.i20 + %.0.i.i = phi i64 [ %63, %57 ], [ %53, %._crit_edge.i20 ] + %64 = sub i64 %.sroa.02.08, %.sroa.0.05.i + %65 = sub i64 %.0.i.i, %.sroa.0.05.i + %66 = xor i64 %65, %64 + %.unshifted = and i64 %66, %.val17 + %67 = icmp ult i64 %.unshifted, 16 + br i1 %67, label %80, label %68 -67: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit +68: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit %.neg15 = xor i64 %.0.i.i, -1 %.neg16 = mul i64 %2, %.neg15 - %68 = getelementptr inbounds i8, ptr %.val, i64 %.neg16 - %69 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %70 = load i8, ptr %69, align 1, !noundef !7 - %71 = lshr i64 %39, 57 - %72 = trunc nuw nsw i64 %71 to i8 - %73 = add i64 %.0.i.i, -16 - %74 = and i64 %73, %.val17 - store i8 %72, ptr %69, align 1 - %75 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %76 = getelementptr i8, ptr %75, i64 %74 - %77 = getelementptr i8, ptr %76, i64 16 - store i8 %72, ptr %77, align 1 - %78 = icmp eq i8 %70, -1 - br i1 %78, label %93, label %.preheader - -79: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - %80 = lshr i64 %39, 57 - %81 = trunc nuw nsw i64 %80 to i8 - %82 = add i64 %.sroa.02.08, -16 - %83 = and i64 %.val17, %82 - %84 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 - store i8 %81, ptr %84, align 1 - %85 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %86 = getelementptr i8, ptr %85, i64 %83 - %87 = getelementptr i8, ptr %86, i64 16 - store i8 %81, ptr %87, align 1 - br label %102 - -.preheader: ; preds = %67, %.preheader - %.0910.i = phi i64 [ %92, %.preheader ], [ 0, %67 ] - %88 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i - %89 = getelementptr inbounds nuw i8, ptr %68, i64 %.0910.i - %90 = load i8, ptr %88, align 1 + %69 = getelementptr inbounds i8, ptr %.val, i64 %.neg16 + %70 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %71 = load i8, ptr %70, align 1, !noundef !7 + %72 = lshr i64 %40, 57 + %73 = trunc nuw nsw i64 %72 to i8 + %74 = add i64 %.0.i.i, -16 + %75 = and i64 %74, %.val17 + store i8 %73, ptr %70, align 1 + %76 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %77 = getelementptr i8, ptr %76, i64 %75 + %78 = getelementptr i8, ptr %77, i64 16 + store i8 %73, ptr %78, align 1 + %79 = icmp eq i8 %71, -1 + br i1 %79, label %94, label %.preheader + +80: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + %81 = lshr i64 %40, 57 + %82 = trunc nuw nsw i64 %81 to i8 + %83 = add i64 %.sroa.02.08, -16 + %84 = and i64 %.val17, %83 + %85 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 + store i8 %82, ptr %85, align 1 + %86 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %87 = getelementptr i8, ptr %86, i64 %84 + %88 = getelementptr i8, ptr %87, i64 16 + store i8 %82, ptr %88, align 1 + br label %103 + +.preheader: ; preds = %68, %.preheader + %.0910.i = phi i64 [ %93, %.preheader ], [ 0, %68 ] + %89 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %90 = getelementptr inbounds nuw i8, ptr %69, i64 %.0910.i %91 = load i8, ptr %89, align 1 - store i8 %91, ptr %88, align 1 - store i8 %90, ptr %89, align 1 - %92 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %92, %2 + %92 = load i8, ptr %90, align 1 + store i8 %92, ptr %89, align 1 + store i8 %91, ptr %90, align 1 + %93 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %93, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit, label %.preheader -93: ; preds = %67 - %94 = add i64 %.sroa.02.08, -16 - %95 = load i64, ptr %6, align 8, !noundef !7 - %96 = and i64 %95, %94 - %97 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %98 = getelementptr inbounds i8, ptr %97, i64 %.sroa.02.08 - store i8 -1, ptr %98, align 1 - %99 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %100 = getelementptr i8, ptr %99, i64 %96 - %101 = getelementptr i8, ptr %100, i64 16 - store i8 -1, ptr %101, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %68, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) - br label %102 - -102: ; preds = %.lr.ph, %93, %79 +94: ; preds = %68 + %95 = add i64 %.sroa.02.08, -16 + %96 = load i64, ptr %6, align 8, !noundef !7 + %97 = and i64 %96, %95 + %98 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %99 = getelementptr inbounds i8, ptr %98, i64 %.sroa.02.08 + store i8 -1, ptr %99, align 1 + %100 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %101 = getelementptr i8, ptr %100, i64 %97 + %102 = getelementptr i8, ptr %101, i64 16 + store i8 -1, ptr %102, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %69, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %103 + +103: ; preds = %.lr.ph, %94, %80 %exitcond.not = icmp eq i64 %.sroa.02.08, %.val19 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -103: ; preds = %23 - %104 = landingpad { ptr, i32 } +104: ; preds = %24 + %105 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #28 unreachable -105: ; preds = %23 - resume { ptr, i32 } %24 +106: ; preds = %24 + resume { ptr, i32 } %25 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll b/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll index f4724a5134c..6177a69e954 100644 --- a/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll +++ b/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll @@ -2051,76 +2051,76 @@ common.resume: ; preds = %181, %82 158: ; preds = %17 tail call void @llvm.experimental.noalias.scope.decl(metadata !420) %.val.i9 = load ptr, ptr %0, align 8, !alias.scope !420 - %159 = lshr i64 %21, 4 - %160 = and i64 %21, 15 - %.not.i.i.i.i.i = icmp ne i64 %160, 0 - %161 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %159, %161 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %.lr.ph.i.i10 + %.not.not4.i.i = icmp eq i64 %21, 0 + br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i10 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %158 + %159 = icmp ne ptr %.val.i9, null + tail call void @llvm.assume(i1 %159) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !420 + br label %271 .lr.ph.i.i10: ; preds = %158 - %162 = icmp ne ptr %.val.i9, null - tail call void @llvm.assume(i1 %162) - br label %163 - -163: ; preds = %163, %.lr.ph.i.i10 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i10 ], [ %165, %163 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i10 ], [ %164, %163 ] - %164 = add nsw i64 %.sroa.5.05.i.i, -1 - %165 = add i64 %.sroa.01.06.i.i, 16 - %166 = getelementptr inbounds i8, ptr %.val.i9, i64 %.sroa.01.06.i.i - %167 = load <16 x i8>, ptr %166, align 16, !noalias !423 - %.lobit.i.i.i = ashr <16 x i8> %167, splat (i8 7) - %168 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %169 = or <2 x i64> %168, splat (i64 -9187201950435737472) - store <2 x i64> %169, ptr %166, align 16, !noalias !426 - %.not.not.i.i = icmp eq i64 %164, 0 - br i1 %.not.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %163 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i: ; preds = %163, %158 - %170 = icmp ne ptr %.val.i9, null - tail call void @llvm.assume(i1 %170) - %..i.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) - %171 = getelementptr inbounds i8, ptr %.val.i9, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %171, ptr nonnull align 1 %.val.i9, i64 %.9.i.i, i1 false), !noalias !420 + %160 = lshr i64 %21, 4 + %161 = and i64 %21, 15 + %.not.i.i.i.i.i = icmp ne i64 %161, 0 + %162 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %160, %162 + %163 = icmp ne ptr %.val.i9, null + tail call void @llvm.assume(i1 %163) + br label %174 + +._crit_edge.i.i11: ; preds = %174 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) + %spec.select33.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) + %164 = getelementptr inbounds i8, ptr %.val.i9, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %164, ptr nonnull align 1 %.val.i9, i64 %spec.select33.i, i1 false), !noalias !420 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !420 - %172 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @"_ZN4core3ptr92drop_in_place$LT$$LP$deltalake_mount..config..MountConfigKey$C$alloc..string..String$RP$$GT$17hc4a9d7adf886ccb3E.llvm.5511991536938204981", ptr %172, align 8, !noalias !420 - %173 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 24, ptr %173, align 8, !noalias !420 + %165 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN4core3ptr92drop_in_place$LT$$LP$deltalake_mount..config..MountConfigKey$C$alloc..string..String$RP$$GT$17hc4a9d7adf886ccb3E.llvm.5511991536938204981", ptr %165, align 8, !noalias !420 + %166 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 24, ptr %166, align 8, !noalias !420 store ptr %0, ptr %6, align 8, !noalias !420 - %.not11.i = icmp eq i64 %21, 0 - br i1 %.not11.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i - -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i %.sroa.4.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %5, i64 8 %.sroa.5.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %5, i64 16 %.sroa.6.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %5, i64 24 - %174 = load i64, ptr %2, align 8 - %175 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %176 = load i64, ptr %175, align 8 - %177 = xor i64 %174, 8317987319222330741 - %178 = xor i64 %176, 7237128888997146477 - %179 = xor i64 %174, 7816392313619706465 - %180 = xor i64 %176, 8387220255154660723 + %167 = load i64, ptr %2, align 8 + %168 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %169 = load i64, ptr %168, align 8 + %170 = xor i64 %167, 8317987319222330741 + %171 = xor i64 %169, 7237128888997146477 + %172 = xor i64 %167, 7816392313619706465 + %173 = xor i64 %169, 8387220255154660723 br label %183 -181: ; preds = %.noexc.i16, %_ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i +174: ; preds = %174, %.lr.ph.i.i10 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i10 ], [ %176, %174 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i10 ], [ %175, %174 ] + %175 = add i64 %.sroa.5.05.i.i, -1 + %176 = add i64 %.sroa.01.06.i.i, 16 + %177 = getelementptr inbounds i8, ptr %.val.i9, i64 %.sroa.01.06.i.i + %178 = load <16 x i8>, ptr %177, align 16, !noalias !423 + %.lobit.i.i.i = ashr <16 x i8> %178, splat (i8 7) + %179 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %180 = or <2 x i64> %179, splat (i64 -9187201950435737472) + store <2 x i64> %180, ptr %177, align 16, !noalias !426 + %.not.not.i.i = icmp eq i64 %175, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i11, label %174 + +181: ; preds = %.noexc.i17, %_ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i %182 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h379198c55567bcf4E"(ptr noalias noundef align 8 dereferenceable(24) %6) #31 to label %common.resume unwind label %266 -183: ; preds = %265, %.lr.ph.i - %.sroa.02.010.i = phi i64 [ 0, %.lr.ph.i ], [ %184, %265 ] +183: ; preds = %265, %._crit_edge.i.i11 + %.sroa.02.010.i = phi i64 [ 0, %._crit_edge.i.i11 ], [ %184, %265 ] %184 = add nuw i64 %.sroa.02.010.i, 1 %185 = load ptr, ptr %0, align 8, !alias.scope !420, !nonnull !7, !noundef !7 %186 = getelementptr inbounds i8, ptr %185, i64 %.sroa.02.010.i %187 = load i8, ptr %186, align 1, !noundef !7 - %.not.i11 = icmp eq i8 %187, -128 - br i1 %.not.i11, label %188, label %265 + %.not.i12 = icmp eq i8 %187, -128 + br i1 %.not.i12, label %188, label %265 188: ; preds = %183 %.neg.i = mul i64 %.sroa.02.010.i, -24 @@ -2130,21 +2130,21 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.preheader.i, %188 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5), !noalias !429 - store i64 %177, ptr %5, align 8, !noalias !438 - store i64 %179, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !438 - store i64 %178, ptr %.sroa.5.0..sroa_idx.i.i.i.i, align 8, !noalias !438 - store i64 %180, ptr %.sroa.6.0..sroa_idx.i.i.i.i, align 8, !noalias !429 + store i64 %170, ptr %5, align 8, !noalias !438 + store i64 %172, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !438 + store i64 %171, ptr %.sroa.5.0..sroa_idx.i.i.i.i, align 8, !noalias !438 + store i64 %173, ptr %.sroa.6.0..sroa_idx.i.i.i.i, align 8, !noalias !429 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17hcb48a26c074fadc7E.llvm.5846782993716646778"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) - to label %.noexc.i16 unwind label %181 + to label %.noexc.i17 unwind label %181 -.noexc.i16: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i +.noexc.i17: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i %191 = load i64, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !429, !noundef !7 %192 = xor i64 %191, 255 store i64 %192, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !429 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17hb339440addaeedcbE.llvm.5846782993716646778"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %193 unwind label %181 -193: ; preds = %.noexc.i16 +193: ; preds = %.noexc.i17 %194 = load i64, ptr %5, align 8, !noalias !429, !noundef !7 %195 = load i64, ptr %.sroa.5.0..sroa_idx.i.i.i.i, align 8, !noalias !429, !noundef !7 %196 = xor i64 %195, %194 @@ -2156,17 +2156,17 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea call void @llvm.experimental.noalias.scope.decl(metadata !439) %201 = load i64, ptr %18, align 8, !alias.scope !442, !noundef !7 %202 = load ptr, ptr %0, align 8, !alias.scope !442, !nonnull !7, !noundef !7 - %.sroa.0.011.i.i17 = and i64 %201, %200 - %203 = getelementptr inbounds i8, ptr %202, i64 %.sroa.0.011.i.i17 - %.0.copyload.i912.i.i18 = load <16 x i8>, ptr %203, align 1, !noalias !443 - %204 = icmp slt <16 x i8> %.0.copyload.i912.i.i18, zeroinitializer + %.sroa.0.011.i.i18 = and i64 %201, %200 + %203 = getelementptr inbounds i8, ptr %202, i64 %.sroa.0.011.i.i18 + %.0.copyload.i912.i.i19 = load <16 x i8>, ptr %203, align 1, !noalias !443 + %204 = icmp slt <16 x i8> %.0.copyload.i912.i.i19, zeroinitializer %205 = bitcast <16 x i1> %204 to i16 - %.not.i.not13.i.i19 = icmp eq i16 %205, 0 - br i1 %.not.i.not13.i.i19, label %.lr.ph.i17.i, label %._crit_edge.i.i20 + %.not.i.not13.i.i20 = icmp eq i16 %205, 0 + br i1 %.not.i.not13.i.i20, label %.lr.ph.i18.i, label %._crit_edge.i17.i -.lr.ph.i17.i: ; preds = %193, %.lr.ph.i17.i - %.sroa.0.015.i.i24 = phi i64 [ %.sroa.0.0.i.i26, %.lr.ph.i17.i ], [ %.sroa.0.011.i.i17, %193 ] - %.sroa.7.014.i.i25 = phi i64 [ %206, %.lr.ph.i17.i ], [ 0, %193 ] +.lr.ph.i18.i: ; preds = %193, %.lr.ph.i18.i + %.sroa.0.015.i.i24 = phi i64 [ %.sroa.0.0.i.i26, %.lr.ph.i18.i ], [ %.sroa.0.011.i.i18, %193 ] + %.sroa.7.014.i.i25 = phi i64 [ %206, %.lr.ph.i18.i ], [ 0, %193 ] %206 = add i64 %.sroa.7.014.i.i25, 16 %207 = add i64 %206, %.sroa.0.015.i.i24 %.sroa.0.0.i.i26 = and i64 %207, %201 @@ -2175,11 +2175,11 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea %209 = icmp slt <16 x i8> %.0.copyload.i9.i.i27, zeroinitializer %210 = bitcast <16 x i1> %209 to i16 %.not.i.not.i.i28 = icmp eq i16 %210, 0 - br i1 %.not.i.not.i.i28, label %.lr.ph.i17.i, label %._crit_edge.i.i20 + br i1 %.not.i.not.i.i28, label %.lr.ph.i18.i, label %._crit_edge.i17.i -._crit_edge.i.i20: ; preds = %.lr.ph.i17.i, %193 - %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.011.i.i17, %193 ], [ %.sroa.0.0.i.i26, %.lr.ph.i17.i ] - %.lcssa.i.i22 = phi i16 [ %205, %193 ], [ %210, %.lr.ph.i17.i ] +._crit_edge.i17.i: ; preds = %.lr.ph.i18.i, %193 + %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.011.i.i18, %193 ], [ %.sroa.0.0.i.i26, %.lr.ph.i18.i ] + %.lcssa.i.i22 = phi i16 [ %205, %193 ], [ %210, %.lr.ph.i18.i ] %211 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i22, i1 true) %212 = zext nneg i16 %211 to i64 %213 = add i64 %.sroa.0.0.lcssa.i.i21, %212 @@ -2189,7 +2189,7 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea %217 = icmp sgt i8 %216, -1 br i1 %217, label %218, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i -218: ; preds = %._crit_edge.i.i20 +218: ; preds = %._crit_edge.i17.i %219 = load <16 x i8>, ptr %202, align 16, !noalias !446 %220 = icmp slt <16 x i8> %219, zeroinitializer %221 = bitcast <16 x i1> %220 to i16 @@ -2199,10 +2199,10 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea call void @llvm.assume(i1 %222) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i: ; preds = %218, %._crit_edge.i.i20 - %.0.i.i.i23 = phi i64 [ %224, %218 ], [ %214, %._crit_edge.i.i20 ] - %225 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i17 - %226 = sub i64 %.0.i.i.i23, %.sroa.0.011.i.i17 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i: ; preds = %218, %._crit_edge.i17.i + %.0.i.i.i23 = phi i64 [ %224, %218 ], [ %214, %._crit_edge.i17.i ] + %225 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i18 + %226 = sub i64 %.0.i.i.i23, %.sroa.0.011.i.i18 %227 = xor i64 %226, %225 %.unshifted.i = and i64 %227, %201 %228 = icmp ult i64 %.unshifted.i, 16 @@ -2266,8 +2266,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511 br label %265 265: ; preds = %256, %242, %183 - %exitcond.not.i12 = icmp eq i64 %.sroa.02.010.i, %19 - br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %183 + %exitcond.not.i13 = icmp eq i64 %.sroa.02.010.i, %19 + br i1 %exitcond.not.i13, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %183 266: ; preds = %181 %267 = landingpad { ptr, i32 } @@ -2276,34 +2276,34 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511 unreachable _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; preds = %265 - %.pre.i13 = load i64, ptr %18, align 8, !alias.scope !420 - %.pre.i13.fr = freeze i64 %.pre.i13 - %.pre19.i = add i64 %.pre.i13.fr, 1 + %.pre.i14 = load i64, ptr %18, align 8, !alias.scope !420 + %.pre.i14.fr = freeze i64 %.pre.i14 + %.pre19.i = add i64 %.pre.i14.fr, 1 %268 = lshr i64 %.pre19.i, 3 %269 = mul nuw i64 %268, 7 - %270 = icmp ult i64 %.pre.i13.fr, 8 - %spec.select = select i1 %270, i64 %.pre.i13.fr, i64 %269 + %270 = icmp ult i64 %.pre.i14.fr, 8 + %spec.select = select i1 %270, i64 %.pre.i14.fr, i64 %269 %.pre = load i64, ptr %10, align 8, !alias.scope !420 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i - %271 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %272 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %273 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %274 = sub i64 %272, %271 - store i64 %274, ptr %273, align 8, !alias.scope !420 + br label %271 + +271: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %272 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %273 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %274 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %275 = sub i64 %273, %272 + store i64 %275, ptr %274, align 8, !alias.scope !420 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !420 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i: ; preds = %81, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.sroa.9.051.ph, %81 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.sroa.5.053.ph, %81 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit" ] - %275 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %276 = insertvalue { i64, i64 } %275, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i: ; preds = %81, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit", %271 + %.sroa.4.1.i = phi i64 [ undef, %271 ], [ %.sroa.9.051.ph, %81 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %271 ], [ %.sroa.5.053.ph, %81 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit" ] + %276 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %277 = insertvalue { i64, i64 } %276, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha2ebd903f8ce5b0bE.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha2ebd903f8ce5b0bE.exit: ; preds = %15, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i - %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %276, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i ] + %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %277, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/delta-rs/optimized/4say4x9grcidoih4.ll b/bench/delta-rs/optimized/4say4x9grcidoih4.ll index cb698829a4a..cfff8fef2a1 100644 --- a/bench/delta-rs/optimized/4say4x9grcidoih4.ll +++ b/bench/delta-rs/optimized/4say4x9grcidoih4.ll @@ -19808,16 +19808,16 @@ _ZN11flatbuffers8verifier8Verifier9in_buffer17h1e8b13549aa46a89E.exit.i.i.i: ; p br i1 %132, label %143, label %_ZN11flatbuffers8verifier19verify_vector_range17h0bb03440ad4bb992E.exit.i _ZN11flatbuffers8verifier19verify_vector_range17h0bb03440ad4bb992E.exit.i: ; preds = %130 - %spec.select.i.i.i.i = tail call i64 @llvm.usub.sat.i64(i64 %128, i64 %116) + %.not.i.i.i40.i544.not = icmp ugt i64 %128, %116 + br i1 %.not.i.i.i40.i544.not, label %.lr.ph, label %._crit_edge + +.lr.ph: ; preds = %_ZN11flatbuffers8verifier19verify_vector_range17h0bb03440ad4bb992E.exit.i + %spec.select.i.i.i.i = sub nuw i64 %128, %116 %133 = lshr i64 %spec.select.i.i.i.i, 2 - %134 = and i64 %spec.select.i.i.i.i, 3 + %134 = and i64 %128, 3 %.not.i.i.i.i = icmp ne i64 %134, 0 %135 = zext i1 %.not.i.i.i.i to i64 %.0.i.i.i.i = add nuw nsw i64 %133, %135 - %.not.i.i.i40.i544 = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.i.i.i40.i544, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %_ZN11flatbuffers8verifier19verify_vector_range17h0bb03440ad4bb992E.exit.i %.sroa.472.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %30, i64 4 %.sroa.573.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %30, i64 40 %.sroa.275.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %35, i64 4 @@ -19973,8 +19973,8 @@ _ZN11flatbuffers8verifier19verify_vector_range17h0bb03440ad4bb992E.exit.i: ; pre %.sroa.6103.0546 = phi i64 [ %116, %.lr.ph ], [ %145, %535 ] %.sroa.0102.0545 = phi i64 [ 0, %.lr.ph ], [ %147, %535 ] %145 = add i64 %.sroa.6103.0546, 4 - %146 = add nsw i64 %.sroa.9.0195547, -1 - %147 = add nuw nsw i64 %.sroa.0102.0545, 1 + %146 = add i64 %.sroa.9.0195547, -1 + %147 = add i64 %.sroa.0102.0545, 1 call void @llvm.lifetime.start.p0(i64 60, ptr nonnull %.sroa.4111) call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %35), !noalias !4246 call void @llvm.experimental.noalias.scope.decl(metadata !4247) @@ -22388,16 +22388,16 @@ _ZN11flatbuffers8verifier8Verifier9in_buffer17h1e8b13549aa46a89E.exit.i.i.i.i: ; br i1 %106, label %112, label %_ZN11flatbuffers8verifier19verify_vector_range17h9b658c51c9ec8c11E.exit.i.i _ZN11flatbuffers8verifier19verify_vector_range17h9b658c51c9ec8c11E.exit.i.i: ; preds = %104 - %spec.select.i.i.i.i.i = tail call i64 @llvm.usub.sat.i64(i64 %102, i64 %90) + %.not.i.i.i40126.not.i.i = icmp ugt i64 %102, %90 + br i1 %.not.i.i.i40126.not.i.i, label %.lr.ph.i.i, label %._crit_edge.i.i + +.lr.ph.i.i: ; preds = %_ZN11flatbuffers8verifier19verify_vector_range17h9b658c51c9ec8c11E.exit.i.i + %spec.select.i.i.i.i.i = sub nuw i64 %102, %90 %107 = lshr i64 %spec.select.i.i.i.i.i, 2 - %108 = and i64 %spec.select.i.i.i.i.i, 3 + %108 = and i64 %102, 3 %.not.i.i.i.i.i = icmp ne i64 %108, 0 %109 = zext i1 %.not.i.i.i.i.i to i64 %.0.i.i.i.i.i = add nuw nsw i64 %107, %109 - %.not.i.i.i40126.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.i.i.i40126.i.i, label %._crit_edge.i.i, label %.lr.ph.i.i - -.lr.ph.i.i: ; preds = %_ZN11flatbuffers8verifier19verify_vector_range17h9b658c51c9ec8c11E.exit.i.i %.sroa.432.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %6, i64 4 %.sroa.533.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %6, i64 40 %.sroa.235.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %9, i64 4 @@ -22440,8 +22440,8 @@ _ZN11flatbuffers8verifier19verify_vector_range17h9b658c51c9ec8c11E.exit.i.i: ; p %.sroa.654.0128.i.i = phi i64 [ %90, %.lr.ph.i.i ], [ %114, %193 ] %.sroa.053.0127.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %116, %193 ] %114 = add i64 %.sroa.654.0128.i.i, 4 - %115 = add nsw i64 %.sroa.9.068130.i.i, -1 - %116 = add nuw nsw i64 %.sroa.053.0127.i.i, 1 + %115 = add i64 %.sroa.9.068130.i.i, -1 + %116 = add i64 %.sroa.053.0127.i.i, 1 call void @llvm.lifetime.start.p0(i64 60, ptr nonnull %.sroa.459.i.i) call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9), !noalias !4733 call void @llvm.experimental.noalias.scope.decl(metadata !4734) @@ -156441,9 +156441,6 @@ declare range(i8 -1, 2) i8 @llvm.scmp.i8.i64(i64, i64) #38 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) declare void @llvm.memmove.p0.p0.i64(ptr writeonly captures(none), ptr readonly captures(none), i64, i1 immarg) #41 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.usub.sat.i64(i64, i64) #38 - attributes #0 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #1 = { inlinehint mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(none) uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #2 = { inlinehint mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(argmem: readwrite) uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } diff --git a/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll b/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll index 8e76dcd1e7c..2b4da4a1c78 100644 --- a/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll +++ b/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll @@ -2461,216 +2461,221 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val19 = load i64, ptr %6, align 8, !noundef !4 %7 = add i64 %.val19, 1 - %8 = lshr i64 %7, 4 - %9 = and i64 %7, 15 - %.not.i.i.i.i = icmp ne i64 %9, 0 - %10 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %8, %10 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %7, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24: ; preds = %4 + %8 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %8) + %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + br label %._crit_edge .lr.ph.i: ; preds = %4 - %11 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %11) - br label %12 + %10 = lshr i64 %7, 4 + %11 = and i64 %7, 15 + %.not.i.i.i.i = icmp ne i64 %11, 0 + %12 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %10, %12 + %13 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %13) + br label %17 -12: ; preds = %12, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %14, %12 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %13, %12 ] - %13 = add nsw i64 %.sroa.5.05.i, -1 - %14 = add i64 %.sroa.01.06.i, 16 - %15 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i - %16 = load <16 x i8>, ptr %15, align 16, !noalias !395 - %.lobit.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16, !noalias !398 - %.not.not.i = icmp eq i64 %13, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, label %12 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds i8, ptr %.val, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val, i64 %.9.i, i1 false) +._crit_edge.i: ; preds = %17 + %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) + %spec.select34 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) + %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select34, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %15, align 8 + %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %16, align 8 store ptr %0, ptr %5, align 8 - %.not12 = icmp eq i64 %7, 0 - br i1 %.not12, label %._crit_edge, label %.lr.ph - -23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit - %24 = landingpad { ptr, i32 } + br label %.lr.ph + +17: ; preds = %17, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %19, %17 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %18, %17 ] + %18 = add i64 %.sroa.5.05.i, -1 + %19 = add i64 %.sroa.01.06.i, 16 + %20 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i + %21 = load <16 x i8>, ptr %20, align 16, !noalias !395 + %.lobit.i.i = ashr <16 x i8> %21, splat (i8 7) + %22 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %23 = or <2 x i64> %22, splat (i64 -9187201950435737472) + store <2 x i64> %23, ptr %20, align 16, !noalias !398 + %.not.not.i = icmp eq i64 %18, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %17 + +24: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit + %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h46f1587603d9dcacE"(ptr noalias noundef align 8 dereferenceable(24) %5) #46 - to label %104 unwind label %105 + to label %105 unwind label %106 -._crit_edge.loopexit: ; preds = %103 +._crit_edge.loopexit: ; preds = %104 %.pre = load i64, ptr %6, align 8 %.pre20 = add i64 %.pre, 1 - %25 = lshr i64 %.pre20, 3 - %26 = mul nuw i64 %25, 7 + %26 = lshr i64 %.pre20, 3 + %27 = mul nuw i64 %26, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !4 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24 ] + %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24 ] + %29 = icmp ult i64 %28, 8 + %.0 = select i1 %29, i64 %28, i64 %.pre-phi + %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %31 = load i64, ptr %30, align 8, !noundef !4 + %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %33 = sub i64 %.0, %31 + store i64 %33, ptr %32, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, %103 - %.sroa.02.011 = phi i64 [ %33, %103 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %33 = add nuw i64 %.sroa.02.011, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.011 - %36 = load i8, ptr %35, align 1, !noundef !4 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %103 +.lr.ph: ; preds = %._crit_edge.i, %104 + %.sroa.02.011 = phi i64 [ %34, %104 ], [ 0, %._crit_edge.i ] + %34 = add nuw i64 %.sroa.02.011, 1 + %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.011 + %37 = load i8, ptr %36, align 1, !noundef !4 + %.not = icmp eq i8 %37, -128 + br i1 %.not, label %38, label %104 -37: ; preds = %.lr.ph +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.011, -1 %.neg16 = mul i64 %2, %.neg - %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 + %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit -_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit: ; preds = %.preheader, %37 - %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.011) - to label %40 unwind label %23 +_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.011) + to label %41 unwind label %24 -40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !401) - %41 = load i64, ptr %6, align 8, !alias.scope !401, !noundef !4 - %42 = load ptr, ptr %0, align 8, !alias.scope !401, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %41, %39 - %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %43, align 1, !noalias !404 - %44 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %45 = bitcast <16 x i1> %44 to i16 - %.not.not.i.not13.i = icmp eq i16 %45, 0 - br i1 %.not.not.i.not13.i, label %.lr.ph.i20, label %._crit_edge.i - -.lr.ph.i20: ; preds = %40, %.lr.ph.i20 - %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i20 ], [ %.sroa.0.011.i, %40 ] - %.sroa.7.014.i = phi i64 [ %46, %.lr.ph.i20 ], [ 0, %40 ] - %46 = add i64 %.sroa.7.014.i, 16 - %47 = add i64 %46, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %47, %41 - %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %48, align 1, !noalias !404 - %49 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %50 = bitcast <16 x i1> %49 to i16 - %.not.not.i.not.i = icmp eq i16 %50, 0 - br i1 %.not.not.i.not.i, label %.lr.ph.i20, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i20, %40 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %40 ], [ %.sroa.0.0.i, %.lr.ph.i20 ] - %.lcssa.i = phi i16 [ %45, %40 ], [ %50, %.lr.ph.i20 ] - %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %52 = zext nneg i16 %51 to i64 - %53 = add i64 %.sroa.0.0.lcssa.i, %52 - %54 = and i64 %53, %41 - %55 = getelementptr inbounds i8, ptr %42, i64 %54 - %56 = load i8, ptr %55, align 1, !noalias !401, !noundef !4 - %57 = icmp sgt i8 %56, -1 - br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit - -58: ; preds = %._crit_edge.i - %59 = load <16 x i8>, ptr %42, align 16, !noalias !407 - %60 = icmp slt <16 x i8> %59, zeroinitializer - %61 = bitcast <16 x i1> %60 to i16 - %.not.i.i = icmp ne i16 %61, 0 - %62 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) - %63 = zext nneg i16 %62 to i64 + %42 = load i64, ptr %6, align 8, !alias.scope !401, !noundef !4 + %43 = load ptr, ptr %0, align 8, !alias.scope !401, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %42, %40 + %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !404 + %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %46 = bitcast <16 x i1> %45 to i16 + %.not.not.i.not13.i = icmp eq i16 %46, 0 + br i1 %.not.not.i.not13.i, label %.lr.ph.i21, label %._crit_edge.i20 + +.lr.ph.i21: ; preds = %41, %.lr.ph.i21 + %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i21 ], [ %.sroa.0.011.i, %41 ] + %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i21 ], [ 0, %41 ] + %47 = add i64 %.sroa.7.014.i, 16 + %48 = add i64 %47, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %48, %42 + %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !404 + %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %51 = bitcast <16 x i1> %50 to i16 + %.not.not.i.not.i = icmp eq i16 %51, 0 + br i1 %.not.not.i.not.i, label %.lr.ph.i21, label %._crit_edge.i20 + +._crit_edge.i20: ; preds = %.lr.ph.i21, %41 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i21 ] + %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i21 ] + %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %53 = zext nneg i16 %52 to i64 + %54 = add i64 %.sroa.0.0.lcssa.i, %53 + %55 = and i64 %54, %42 + %56 = getelementptr inbounds i8, ptr %43, i64 %55 + %57 = load i8, ptr %56, align 1, !noalias !401, !noundef !4 + %58 = icmp sgt i8 %57, -1 + br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit + +59: ; preds = %._crit_edge.i20 + %60 = load <16 x i8>, ptr %43, align 16, !noalias !407 + %61 = icmp slt <16 x i8> %60, zeroinitializer + %62 = bitcast <16 x i1> %61 to i16 + %.not.i.i = icmp ne i16 %62, 0 + %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) + %64 = zext nneg i16 %63 to i64 tail call void @llvm.assume(i1 %.not.i.i) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit: ; preds = %58, %._crit_edge.i - %.0.i.i = phi i64 [ %63, %58 ], [ %54, %._crit_edge.i ] - %64 = sub i64 %.sroa.02.011, %.sroa.0.011.i - %65 = sub i64 %.0.i.i, %.sroa.0.011.i - %66 = xor i64 %65, %64 - %.unshifted = and i64 %66, %41 - %67 = icmp ult i64 %.unshifted, 16 - br i1 %67, label %80, label %68 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit: ; preds = %59, %._crit_edge.i20 + %.0.i.i = phi i64 [ %64, %59 ], [ %55, %._crit_edge.i20 ] + %65 = sub i64 %.sroa.02.011, %.sroa.0.011.i + %66 = sub i64 %.0.i.i, %.sroa.0.011.i + %67 = xor i64 %66, %65 + %.unshifted = and i64 %67, %42 + %68 = icmp ult i64 %.unshifted, 16 + br i1 %68, label %81, label %69 -68: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit +69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit %.neg17 = xor i64 %.0.i.i, -1 %.neg18 = mul i64 %2, %.neg17 - %69 = getelementptr inbounds i8, ptr %42, i64 %.neg18 - %70 = getelementptr inbounds i8, ptr %42, i64 %.0.i.i - %71 = load i8, ptr %70, align 1, !noundef !4 - %72 = lshr i64 %39, 57 - %73 = trunc nuw nsw i64 %72 to i8 - %74 = add i64 %.0.i.i, -16 - %75 = and i64 %74, %41 - store i8 %73, ptr %70, align 1 - %76 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %77 = getelementptr i8, ptr %76, i64 %75 - %78 = getelementptr i8, ptr %77, i64 16 - store i8 %73, ptr %78, align 1 - %79 = icmp eq i8 %71, -1 - br i1 %79, label %94, label %.preheader - -80: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit - %81 = lshr i64 %39, 57 - %82 = trunc nuw nsw i64 %81 to i8 - %83 = add i64 %.sroa.02.011, -16 - %84 = and i64 %41, %83 - %85 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.011 - store i8 %82, ptr %85, align 1 - %86 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %87 = getelementptr i8, ptr %86, i64 %84 - %88 = getelementptr i8, ptr %87, i64 16 - store i8 %82, ptr %88, align 1 - br label %103 - -.preheader: ; preds = %68, %.preheader - %.0910.i = phi i64 [ %93, %.preheader ], [ 0, %68 ] - %89 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i - %90 = getelementptr inbounds nuw i8, ptr %69, i64 %.0910.i - %91 = load i8, ptr %89, align 1 + %70 = getelementptr inbounds i8, ptr %43, i64 %.neg18 + %71 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i + %72 = load i8, ptr %71, align 1, !noundef !4 + %73 = lshr i64 %40, 57 + %74 = trunc nuw nsw i64 %73 to i8 + %75 = add i64 %.0.i.i, -16 + %76 = and i64 %75, %42 + store i8 %74, ptr %71, align 1 + %77 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %78 = getelementptr i8, ptr %77, i64 %76 + %79 = getelementptr i8, ptr %78, i64 16 + store i8 %74, ptr %79, align 1 + %80 = icmp eq i8 %72, -1 + br i1 %80, label %95, label %.preheader + +81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit + %82 = lshr i64 %40, 57 + %83 = trunc nuw nsw i64 %82 to i8 + %84 = add i64 %.sroa.02.011, -16 + %85 = and i64 %42, %84 + %86 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.011 + store i8 %83, ptr %86, align 1 + %87 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %88 = getelementptr i8, ptr %87, i64 %85 + %89 = getelementptr i8, ptr %88, i64 16 + store i8 %83, ptr %89, align 1 + br label %104 + +.preheader: ; preds = %69, %.preheader + %.0910.i = phi i64 [ %94, %.preheader ], [ 0, %69 ] + %90 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.0910.i %92 = load i8, ptr %90, align 1 - store i8 %92, ptr %89, align 1 - store i8 %91, ptr %90, align 1 - %93 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %93, %2 + %93 = load i8, ptr %91, align 1 + store i8 %93, ptr %90, align 1 + store i8 %92, ptr %91, align 1 + %94 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %94, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit, label %.preheader -94: ; preds = %68 - %95 = add i64 %.sroa.02.011, -16 - %96 = load i64, ptr %6, align 8, !noundef !4 - %97 = and i64 %96, %95 - %98 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %99 = getelementptr inbounds i8, ptr %98, i64 %.sroa.02.011 - store i8 -1, ptr %99, align 1 - %100 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %101 = getelementptr i8, ptr %100, i64 %97 - %102 = getelementptr i8, ptr %101, i64 16 - store i8 -1, ptr %102, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %69, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) - br label %103 - -103: ; preds = %.lr.ph, %94, %80 +95: ; preds = %69 + %96 = add i64 %.sroa.02.011, -16 + %97 = load i64, ptr %6, align 8, !noundef !4 + %98 = and i64 %97, %96 + %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.011 + store i8 -1, ptr %100, align 1 + %101 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %102 = getelementptr i8, ptr %101, i64 %98 + %103 = getelementptr i8, ptr %102, i64 16 + store i8 -1, ptr %103, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %104 + +104: ; preds = %.lr.ph, %95, %81 %exitcond.not = icmp eq i64 %.sroa.02.011, %.val19 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -104: ; preds = %23 - resume { ptr, i32 } %24 +105: ; preds = %24 + resume { ptr, i32 } %25 -105: ; preds = %23 - %106 = landingpad { ptr, i32 } +106: ; preds = %24 + %107 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #47 unreachable diff --git a/bench/duckdb/optimized/bignum.ll b/bench/duckdb/optimized/bignum.ll index af916c24557..9aaf6243d03 100644 --- a/bench/duckdb/optimized/bignum.ll +++ b/bench/duckdb/optimized/bignum.ll @@ -1542,25 +1542,23 @@ define hidden noundef range(i32 -16, 1) i32 @mbedtls_mpi_read_binary(ptr noundef %17 = getelementptr inbounds nuw i8, ptr %16, i64 %14 tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %17, ptr align 1 %1, i64 %2, i1 false) %18 = load ptr, ptr %15, align 8, !tbaa !11 - %19 = icmp eq i64 %8, 0 - %20 = getelementptr i64, ptr %18, i64 %8 - %.01214.i = getelementptr i8, ptr %20, i64 -8 + %19 = getelementptr i64, ptr %18, i64 %8 + %.01214.i = getelementptr i8, ptr %19, i64 -8 %.not15.i = icmp ugt ptr %18, %.01214.i - %or.cond.i = or i1 %19, %.not15.i - br i1 %or.cond.i, label %_ZL21mpi_bigendian_to_hostPmm.exit, label %.lr.ph.i + br i1 %.not15.i, label %_ZL21mpi_bigendian_to_hostPmm.exit, label %.lr.ph.i .lr.ph.i: ; preds = %12, %.lr.ph.i %.01217.i = phi ptr [ %.012.i, %.lr.ph.i ], [ %.01214.i, %12 ] - %.016.i = phi ptr [ %25, %.lr.ph.i ], [ %18, %12 ] - %21 = load i64, ptr %.016.i, align 8, !tbaa !13 - %22 = tail call noundef i64 @llvm.bswap.i64(i64 %21) - %23 = load i64, ptr %.01217.i, align 8, !tbaa !13 - %24 = tail call noundef i64 @llvm.bswap.i64(i64 %23) - store i64 %24, ptr %.016.i, align 8, !tbaa !13 - store i64 %22, ptr %.01217.i, align 8, !tbaa !13 - %25 = getelementptr inbounds nuw i8, ptr %.016.i, i64 8 + %.016.i = phi ptr [ %24, %.lr.ph.i ], [ %18, %12 ] + %20 = load i64, ptr %.016.i, align 8, !tbaa !13 + %21 = tail call noundef i64 @llvm.bswap.i64(i64 %20) + %22 = load i64, ptr %.01217.i, align 8, !tbaa !13 + %23 = tail call noundef i64 @llvm.bswap.i64(i64 %22) + store i64 %23, ptr %.016.i, align 8, !tbaa !13 + store i64 %21, ptr %.01217.i, align 8, !tbaa !13 + %24 = getelementptr inbounds nuw i8, ptr %.016.i, i64 8 %.012.i = getelementptr i8, ptr %.01217.i, i64 -8 - %.not.i = icmp ugt ptr %25, %.012.i + %.not.i = icmp ugt ptr %24, %.012.i br i1 %.not.i, label %_ZL21mpi_bigendian_to_hostPmm.exit, label %.lr.ph.i, !llvm.loop !31 _ZL21mpi_bigendian_to_hostPmm.exit: ; preds = %.lr.ph.i, %12, %3 @@ -5978,25 +5976,23 @@ define hidden noundef i32 @mbedtls_mpi_fill_random(ptr noundef captures(address_ 30: ; preds = %17 %31 = load ptr, ptr %20, align 8, !tbaa !11 - %32 = icmp eq i64 %9, 0 - %33 = getelementptr i64, ptr %31, i64 %9 - %.01214.i.i = getelementptr i8, ptr %33, i64 -8 + %32 = getelementptr i64, ptr %31, i64 %9 + %.01214.i.i = getelementptr i8, ptr %32, i64 -8 %.not15.i.i = icmp ugt ptr %31, %.01214.i.i - %or.cond.i.i = or i1 %32, %.not15.i.i - br i1 %or.cond.i.i, label %_ZL24mpi_fill_random_internalP11mbedtls_mpimPFiPvPhmES1_.exit, label %.lr.ph.i.i + br i1 %.not15.i.i, label %_ZL24mpi_fill_random_internalP11mbedtls_mpimPFiPvPhmES1_.exit, label %.lr.ph.i.i .lr.ph.i.i: ; preds = %30, %.lr.ph.i.i %.01217.i.i = phi ptr [ %.012.i.i, %.lr.ph.i.i ], [ %.01214.i.i, %30 ] - %.016.i.i = phi ptr [ %38, %.lr.ph.i.i ], [ %31, %30 ] - %34 = load i64, ptr %.016.i.i, align 8, !tbaa !13 - %35 = tail call noundef i64 @llvm.bswap.i64(i64 %34) - %36 = load i64, ptr %.01217.i.i, align 8, !tbaa !13 - %37 = tail call noundef i64 @llvm.bswap.i64(i64 %36) - store i64 %37, ptr %.016.i.i, align 8, !tbaa !13 - store i64 %35, ptr %.01217.i.i, align 8, !tbaa !13 - %38 = getelementptr inbounds nuw i8, ptr %.016.i.i, i64 8 + %.016.i.i = phi ptr [ %37, %.lr.ph.i.i ], [ %31, %30 ] + %33 = load i64, ptr %.016.i.i, align 8, !tbaa !13 + %34 = tail call noundef i64 @llvm.bswap.i64(i64 %33) + %35 = load i64, ptr %.01217.i.i, align 8, !tbaa !13 + %36 = tail call noundef i64 @llvm.bswap.i64(i64 %35) + store i64 %36, ptr %.016.i.i, align 8, !tbaa !13 + store i64 %34, ptr %.01217.i.i, align 8, !tbaa !13 + %37 = getelementptr inbounds nuw i8, ptr %.016.i.i, i64 8 %.012.i.i = getelementptr i8, ptr %.01217.i.i, i64 -8 - %.not.i.i = icmp ugt ptr %38, %.012.i.i + %.not.i.i = icmp ugt ptr %37, %.012.i.i br i1 %.not.i.i, label %_ZL24mpi_fill_random_internalP11mbedtls_mpimPFiPvPhmES1_.exit, label %.lr.ph.i.i, !llvm.loop !31 _ZL24mpi_fill_random_internalP11mbedtls_mpimPFiPvPhmES1_.exit: ; preds = %.lr.ph.i.i, %30, %17, %13, %4, %11 diff --git a/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll b/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll index 361cc641003..08d292d69b3 100644 --- a/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll +++ b/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll @@ -7735,25 +7735,25 @@ _ZNSt12_Vector_baseImSaImEE11_M_allocateEm.exit.i: ; preds = %47 _ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i: ; preds = %63, %.noexc34 %.not.i8.i = icmp eq ptr %50, null - br i1 %.not.i8.i, label %_ZNSt6vectorImSaImEE7reserveEm.exit.thread, label %64 + br i1 %.not.i8.i, label %_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i, label %64 64: ; preds = %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i call void @_ZdlPv(ptr noundef nonnull %50) #29 - br label %_ZNSt6vectorImSaImEE7reserveEm.exit.thread + br label %_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i -_ZNSt6vectorImSaImEE7reserveEm.exit.thread: ; preds = %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i, %64 +_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i: ; preds = %64, %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i store ptr %61, ptr %11, align 8, !tbaa !198 %65 = getelementptr inbounds nuw i8, ptr %61, i64 %59 store ptr %65, ptr %56, align 8, !tbaa !450 %66 = getelementptr inbounds nuw i64, ptr %61, i64 %spec.select store ptr %66, ptr %48, align 8, !tbaa !449 - br label %.lr.ph + br label %_ZNSt6vectorImSaImEE7reserveEm.exit -_ZNSt6vectorImSaImEE7reserveEm.exit: ; preds = %47 - %.not79 = icmp eq i64 %spec.select, 0 +_ZNSt6vectorImSaImEE7reserveEm.exit: ; preds = %_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i, %47 + %.not79 = icmp eq i64 %34, 0 br i1 %.not79, label %._crit_edge, label %.lr.ph -.lr.ph: ; preds = %_ZNSt6vectorImSaImEE7reserveEm.exit.thread, %_ZNSt6vectorImSaImEE7reserveEm.exit +.lr.ph: ; preds = %_ZNSt6vectorImSaImEE7reserveEm.exit %67 = getelementptr inbounds nuw i8, ptr %4, i64 24 %68 = getelementptr inbounds nuw i8, ptr %4, i64 16 %69 = getelementptr inbounds nuw i8, ptr %4, i64 8 diff --git a/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll b/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll index d076823fe20..2c19c8829cf 100644 --- a/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll +++ b/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll @@ -246,7 +246,7 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res br i1 %.not.i, label %24, label %103 23: ; preds = %5 - br i1 %4, label %210, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit" + br i1 %4, label %211, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit" 24: ; preds = %15 %25 = add nuw i64 %.sroa.05.0.i, 1 @@ -278,16 +278,16 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res %.sroa.618.i.i.sroa.5.0..sroa.618.0..sroa_idx.i.i.sroa_idx = getelementptr inbounds nuw i8, ptr %8, i64 40 store i64 16, ptr %.sroa.618.i.i.sroa.5.0..sroa.618.0..sroa_idx.i.i.sroa_idx, align 8, !noalias !20 %invariant.gep = getelementptr i8, ptr %26, i64 16 - %.not52 = icmp eq i64 %19, 0 - br i1 %.not52, label %.preheader.preheader, label %.lr.ph51.preheader + %.not53 = icmp eq i64 %19, 0 + br i1 %.not53, label %.preheader.preheader, label %.lr.ph52.preheader .preheader.preheader: ; preds = %.backedge, %32 br label %.preheader -.lr.ph51.preheader: ; preds = %32 - %.pre69 = load ptr, ptr %0, align 8, !alias.scope !20 - %invariant.gep89 = getelementptr i8, ptr %.pre69, i64 -8 - br label %.lr.ph51 +.lr.ph52.preheader: ; preds = %32 + %.pre70 = load ptr, ptr %0, align 8, !alias.scope !20 + %invariant.gep94 = getelementptr i8, ptr %.pre70, i64 -8 + br label %.lr.ph52 34: ; preds = %24 call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8), !noalias !20 @@ -343,22 +343,22 @@ _ZN4core10intrinsics10typed_swap17h54f84bb71b663d01E.exit: ; preds = %.preheader call fastcc void @"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E"(ptr noalias noundef align 8 dereferenceable(48) %8) #25 br label %common.resume -.lr.ph51: ; preds = %.lr.ph51.preheader, %.backedge - %.sroa.024.0.i.i49 = phi i64 [ %56, %.backedge ], [ 0, %.lr.ph51.preheader ] - %56 = add nuw i64 %.sroa.024.0.i.i49, 1 - %57 = getelementptr inbounds i8, ptr %.pre69, i64 %.sroa.024.0.i.i49 +.lr.ph52: ; preds = %.lr.ph52.preheader, %.backedge + %.sroa.024.0.i.i50 = phi i64 [ %56, %.backedge ], [ 0, %.lr.ph52.preheader ] + %56 = add nuw i64 %.sroa.024.0.i.i50, 1 + %57 = getelementptr inbounds i8, ptr %.pre70, i64 %.sroa.024.0.i.i50 %58 = load i8, ptr %57, align 1, !noundef !7 %59 = icmp sgt i8 %58, -1 br i1 %59, label %60, label %.backedge -.backedge: ; preds = %.lr.ph51, %90 - %exitcond67.not = icmp eq i64 %.sroa.024.0.i.i49, %17 - br i1 %exitcond67.not, label %.preheader.preheader, label %.lr.ph51 +.backedge: ; preds = %.lr.ph52, %90 + %exitcond68.not = icmp eq i64 %.sroa.024.0.i.i50, %17 + br i1 %exitcond68.not, label %.preheader.preheader, label %.lr.ph52 -60: ; preds = %.lr.ph51 - %61 = sub nsw i64 0, %.sroa.024.0.i.i49 - %gep90 = getelementptr i64, ptr %invariant.gep89, i64 %61 - %.val4.i = load i64, ptr %gep90, align 8, !noalias !31, !noundef !7 +60: ; preds = %.lr.ph52 + %61 = sub nsw i64 0, %.sroa.024.0.i.i50 + %gep95 = getelementptr i64, ptr %invariant.gep94, i64 %61 + %.val4.i = load i64, ptr %gep95, align 8, !noalias !31, !noundef !7 %62 = icmp ult i64 %.val4.i, %3 br i1 %62, label %64, label %63, !prof !35 @@ -423,9 +423,9 @@ _ZN4core10intrinsics10typed_swap17h54f84bb71b663d01E.exit: ; preds = %.preheader store i8 %93, ptr %91, align 1 %gep = getelementptr i8, ptr %invariant.gep, i64 %95 store i8 %93, ptr %gep, align 1 - %96 = shl i64 %.sroa.024.0.i.i49, 3 + %96 = shl i64 %.sroa.024.0.i.i50, 3 %97 = sub nuw nsw i64 -8, %96 - %98 = getelementptr inbounds i8, ptr %.pre69, i64 %97 + %98 = getelementptr inbounds i8, ptr %.pre70, i64 %97 %99 = shl i64 %.sroa.0.0.i.i14, 3 %100 = sub nuw nsw i64 -8, %99 %101 = getelementptr inbounds i8, ptr %26, i64 %100 @@ -433,261 +433,266 @@ _ZN4core10intrinsics10typed_swap17h54f84bb71b663d01E.exit: ; preds = %.preheader store i64 %102, ptr %101, align 1 br label %.backedge -common.resume: ; preds = %119, %54 - %common.resume.op = phi { ptr, i32 } [ %55, %54 ], [ %120, %119 ] +common.resume: ; preds = %120, %54 + %common.resume.op = phi { ptr, i32 } [ %55, %54 ], [ %121, %120 ] resume { ptr, i32 } %common.resume.op 103: ; preds = %15 %.val10 = load ptr, ptr %0, align 8 - %104 = lshr i64 %19, 4 - %105 = and i64 %19, 15 - %.not.i.i.i.i = icmp ne i64 %105, 0 - %106 = zext i1 %.not.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %104, %106 - %.not.i12.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not.i12.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit", label %.lr.ph.i + %.not.i12.i = icmp eq i64 %19, 0 + br i1 %.not.i12.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79", label %.lr.ph.i + +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79": ; preds = %103 + %104 = icmp ne ptr %.val10, null + tail call void @llvm.assume(i1 %104) + %105 = getelementptr inbounds nuw i8, ptr %.val10, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %105, ptr nonnull align 1 %.val10, i64 %19, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7), !noalias !42 + br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" .lr.ph.i: ; preds = %103 - %107 = icmp ne ptr %.val10, null - tail call void @llvm.assume(i1 %107) - br label %108 - -108: ; preds = %108, %.lr.ph.i - %.sroa.52.014.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i ], [ %110, %108 ] - %.sroa.01.013.i = phi i64 [ 0, %.lr.ph.i ], [ %109, %108 ] - %109 = add i64 %.sroa.01.013.i, 16 - %110 = add nsw i64 %.sroa.52.014.i, -1 - %111 = getelementptr inbounds i8, ptr %.val10, i64 %.sroa.01.013.i - %112 = load <16 x i8>, ptr %111, align 16, !noalias !42 - %.lobit.i.i = ashr <16 x i8> %112, splat (i8 7) - %113 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %114 = or <2 x i64> %113, splat (i64 -9187201950435737472) - store <2 x i64> %114, ptr %111, align 16, !noalias !45 - %.not.i.i15 = icmp eq i64 %110, 0 - br i1 %.not.i.i15, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit", label %108 - -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit": ; preds = %108, %103 - %115 = icmp ne ptr %.val10, null - tail call void @llvm.assume(i1 %115) - %..i = tail call i64 @llvm.umax.i64(i64 %19, i64 16) - %.17.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) - %116 = getelementptr inbounds i8, ptr %.val10, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %116, ptr nonnull align 1 %.val10, i64 %.17.i, i1 false) - call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7), !noalias !48 - %117 = getelementptr inbounds nuw i8, ptr %7, i64 8 - store ptr null, ptr %117, align 8, !noalias !48 - %118 = getelementptr inbounds nuw i8, ptr %7, i64 16 - store i64 8, ptr %118, align 8, !noalias !48 - store ptr %0, ptr %7, align 8, !noalias !48 - %.not = icmp eq i64 %19, 0 - br i1 %.not, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i", label %.lr.ph48 - -119: ; preds = %._crit_edge - %120 = landingpad { ptr, i32 } + %106 = lshr i64 %19, 4 + %107 = and i64 %19, 15 + %.not.i.i.i.i = icmp ne i64 %107, 0 + %108 = zext i1 %.not.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %106, %108 + %109 = icmp ne ptr %.val10, null + tail call void @llvm.assume(i1 %109) + br label %113 + +._crit_edge.i: ; preds = %113 + %spec.select = tail call i64 @llvm.umax.i64(i64 %19, i64 16) + %spec.select98 = tail call i64 @llvm.umin.i64(i64 %19, i64 16) + %110 = getelementptr inbounds i8, ptr %.val10, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %110, ptr nonnull align 1 %.val10, i64 %spec.select98, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7), !noalias !42 + %111 = getelementptr inbounds nuw i8, ptr %7, i64 8 + store ptr null, ptr %111, align 8, !noalias !42 + %112 = getelementptr inbounds nuw i8, ptr %7, i64 16 + store i64 8, ptr %112, align 8, !noalias !42 + store ptr %0, ptr %7, align 8, !noalias !42 + br label %.lr.ph49 + +113: ; preds = %113, %.lr.ph.i + %.sroa.52.014.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i ], [ %115, %113 ] + %.sroa.01.013.i = phi i64 [ 0, %.lr.ph.i ], [ %114, %113 ] + %114 = add i64 %.sroa.01.013.i, 16 + %115 = add i64 %.sroa.52.014.i, -1 + %116 = getelementptr inbounds i8, ptr %.val10, i64 %.sroa.01.013.i + %117 = load <16 x i8>, ptr %116, align 16, !noalias !45 + %.lobit.i.i = ashr <16 x i8> %117, splat (i8 7) + %118 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %119 = or <2 x i64> %118, splat (i64 -9187201950435737472) + store <2 x i64> %119, ptr %116, align 16, !noalias !48 + %.not.i.i15 = icmp eq i64 %115, 0 + br i1 %.not.i.i15, label %._crit_edge.i, label %113 + +120: ; preds = %._crit_edge + %121 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr297drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h45f6103fc3ead8c6E"(ptr noalias noundef align 8 dereferenceable(24) %7) #25 - to label %common.resume unwind label %203 - -.lr.ph48: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit", %193 - %.sroa.08.0.i.i47 = phi i64 [ %121, %193 ], [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit" ] - %121 = add nuw i64 %.sroa.08.0.i.i47, 1 - %122 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %123 = getelementptr inbounds i8, ptr %122, i64 %.sroa.08.0.i.i47 - %124 = load i8, ptr %123, align 1, !noundef !7 - %.not.i.i = icmp eq i8 %124, -128 - br i1 %.not.i.i, label %125, label %193 - -125: ; preds = %.lr.ph48 - %126 = shl i64 %.sroa.08.0.i.i47, 3 - %127 = sub nuw nsw i64 -8, %126 - %128 = getelementptr inbounds i8, ptr %122, i64 %127 - %129 = sub nsw i64 0, %.sroa.08.0.i.i47 - %130 = getelementptr inbounds i64, ptr %122, i64 %129 - %131 = getelementptr inbounds i8, ptr %130, i64 -8 - %.val4.i1843 = load i64, ptr %131, align 8, !noalias !51, !noundef !7 - %132 = icmp ult i64 %.val4.i1843, %3 - br i1 %132, label %.lr.ph, label %._crit_edge, !prof !55 - -_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = %.preheader31 + to label %common.resume unwind label %204 + +.lr.ph49: ; preds = %._crit_edge.i, %194 + %.sroa.08.0.i.i48 = phi i64 [ %122, %194 ], [ 0, %._crit_edge.i ] + %122 = add nuw i64 %.sroa.08.0.i.i48, 1 + %123 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %124 = getelementptr inbounds i8, ptr %123, i64 %.sroa.08.0.i.i48 + %125 = load i8, ptr %124, align 1, !noundef !7 + %.not.i.i = icmp eq i8 %125, -128 + br i1 %.not.i.i, label %126, label %194 + +126: ; preds = %.lr.ph49 + %127 = shl i64 %.sroa.08.0.i.i48, 3 + %128 = sub nuw nsw i64 -8, %127 + %129 = getelementptr inbounds i8, ptr %123, i64 %128 + %130 = sub nsw i64 0, %.sroa.08.0.i.i48 + %131 = getelementptr inbounds i64, ptr %123, i64 %130 + %132 = getelementptr inbounds i8, ptr %131, i64 -8 + %.val4.i1844 = load i64, ptr %132, align 8, !noalias !51, !noundef !7 + %133 = icmp ult i64 %.val4.i1844, %3 + br i1 %133, label %.lr.ph, label %._crit_edge, !prof !55 + +_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = %.preheader32 tail call void @llvm.experimental.noalias.scope.decl(metadata !56) %.val.i16 = load ptr, ptr %0, align 8, !alias.scope !56, !noalias !58, !nonnull !7, !noundef !7 - %133 = getelementptr inbounds i64, ptr %.val.i16, i64 %129 - %134 = getelementptr inbounds i8, ptr %133, i64 -8 - %.val4.i18 = load i64, ptr %134, align 8, !noalias !59, !noundef !7 - %135 = icmp ult i64 %.val4.i18, %3 - br i1 %135, label %.lr.ph, label %._crit_edge, !prof !60 - -._crit_edge: ; preds = %125, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit - %.val4.i18.lcssa = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1843, %125 ] + %134 = getelementptr inbounds i64, ptr %.val.i16, i64 %130 + %135 = getelementptr inbounds i8, ptr %134, i64 -8 + %.val4.i18 = load i64, ptr %135, align 8, !noalias !59, !noundef !7 + %136 = icmp ult i64 %.val4.i18, %3 + br i1 %136, label %.lr.ph, label %._crit_edge, !prof !60 + +._crit_edge: ; preds = %126, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit + %.val4.i18.lcssa = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1844, %126 ] invoke void @_ZN4core9panicking18panic_bounds_check17hd7e618b1b39cc1c3E(i64 noundef %.val4.i18.lcssa, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.0464f3f8a1044c7ac829485398a26f09.8) #26 - to label %.noexc20 unwind label %119 + to label %.noexc20 unwind label %120 .noexc20: ; preds = %._crit_edge unreachable -.lr.ph: ; preds = %125, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit - %.val4.i1845 = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1843, %125 ] - %.val.i1644 = phi ptr [ %.val.i16, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %122, %125 ] - %136 = getelementptr inbounds [0 x { i64, { i64, i64, i64, i64, i64 }, i32, [1 x i32] }], ptr %2, i64 0, i64 %.val4.i1845 - %137 = load i64, ptr %136, align 8, !noalias !61, !noundef !7 +.lr.ph: ; preds = %126, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit + %.val4.i1846 = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1844, %126 ] + %.val.i1645 = phi ptr [ %.val.i16, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %123, %126 ] + %137 = getelementptr inbounds [0 x { i64, { i64, i64, i64, i64, i64 }, i32, [1 x i32] }], ptr %2, i64 0, i64 %.val4.i1846 + %138 = load i64, ptr %137, align 8, !noalias !61, !noundef !7 %.val7 = load i64, ptr %16, align 8, !noundef !7 - %.sroa.02.05.i = and i64 %.val7, %137 - %138 = getelementptr inbounds i8, ptr %.val.i1644, i64 %.sroa.02.05.i - %.sroa.0.0.copyload.i46.i = load <16 x i8>, ptr %138, align 1, !noalias !63 - %139 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i, zeroinitializer - %140 = bitcast <16 x i1> %139 to i16 - %141 = icmp eq i16 %140, 0 - br i1 %141, label %.lr.ph.i22, label %._crit_edge.i - -.lr.ph.i22: ; preds = %.lr.ph, %.lr.ph.i22 - %.sroa.02.08.i = phi i64 [ %.sroa.02.0.i23, %.lr.ph.i22 ], [ %.sroa.02.05.i, %.lr.ph ] - %.sroa.9.07.i = phi i64 [ %142, %.lr.ph.i22 ], [ 0, %.lr.ph ] - %142 = add i64 %.sroa.9.07.i, 16 - %143 = add i64 %142, %.sroa.02.08.i - %.sroa.02.0.i23 = and i64 %143, %.val7 - %144 = getelementptr inbounds i8, ptr %.val.i1644, i64 %.sroa.02.0.i23 - %.sroa.0.0.copyload.i4.i = load <16 x i8>, ptr %144, align 1, !noalias !63 - %145 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i, zeroinitializer - %146 = bitcast <16 x i1> %145 to i16 - %147 = icmp eq i16 %146, 0 - br i1 %147, label %.lr.ph.i22, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i22, %.lr.ph - %.sroa.02.0.lcssa.i = phi i64 [ %.sroa.02.05.i, %.lr.ph ], [ %.sroa.02.0.i23, %.lr.ph.i22 ] - %.lcssa.i = phi i16 [ %140, %.lr.ph ], [ %146, %.lr.ph.i22 ] - %148 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %149 = zext nneg i16 %148 to i64 - %150 = add i64 %.sroa.02.0.lcssa.i, %149 - %151 = and i64 %150, %.val7 - %152 = getelementptr inbounds i8, ptr %.val.i1644, i64 %151 - %153 = load i8, ptr %152, align 1, !noundef !7 - %154 = icmp sgt i8 %153, -1 - br i1 %154, label %155, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" - -155: ; preds = %._crit_edge.i - %156 = load <16 x i8>, ptr %.val.i1644, align 16, !noalias !66 - %157 = icmp slt <16 x i8> %156, zeroinitializer - %158 = bitcast <16 x i1> %157 to i16 - %159 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %158, i1 false) - %160 = zext nneg i16 %159 to i64 + %.sroa.02.05.i = and i64 %.val7, %138 + %139 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.02.05.i + %.sroa.0.0.copyload.i46.i = load <16 x i8>, ptr %139, align 1, !noalias !63 + %140 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i, zeroinitializer + %141 = bitcast <16 x i1> %140 to i16 + %142 = icmp eq i16 %141, 0 + br i1 %142, label %.lr.ph.i23, label %._crit_edge.i22 + +.lr.ph.i23: ; preds = %.lr.ph, %.lr.ph.i23 + %.sroa.02.08.i = phi i64 [ %.sroa.02.0.i24, %.lr.ph.i23 ], [ %.sroa.02.05.i, %.lr.ph ] + %.sroa.9.07.i = phi i64 [ %143, %.lr.ph.i23 ], [ 0, %.lr.ph ] + %143 = add i64 %.sroa.9.07.i, 16 + %144 = add i64 %143, %.sroa.02.08.i + %.sroa.02.0.i24 = and i64 %144, %.val7 + %145 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.02.0.i24 + %.sroa.0.0.copyload.i4.i = load <16 x i8>, ptr %145, align 1, !noalias !63 + %146 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i, zeroinitializer + %147 = bitcast <16 x i1> %146 to i16 + %148 = icmp eq i16 %147, 0 + br i1 %148, label %.lr.ph.i23, label %._crit_edge.i22 + +._crit_edge.i22: ; preds = %.lr.ph.i23, %.lr.ph + %.sroa.02.0.lcssa.i = phi i64 [ %.sroa.02.05.i, %.lr.ph ], [ %.sroa.02.0.i24, %.lr.ph.i23 ] + %.lcssa.i = phi i16 [ %141, %.lr.ph ], [ %147, %.lr.ph.i23 ] + %149 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %150 = zext nneg i16 %149 to i64 + %151 = add i64 %.sroa.02.0.lcssa.i, %150 + %152 = and i64 %151, %.val7 + %153 = getelementptr inbounds i8, ptr %.val.i1645, i64 %152 + %154 = load i8, ptr %153, align 1, !noundef !7 + %155 = icmp sgt i8 %154, -1 + br i1 %155, label %156, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" + +156: ; preds = %._crit_edge.i22 + %157 = load <16 x i8>, ptr %.val.i1645, align 16, !noalias !66 + %158 = icmp slt <16 x i8> %157, zeroinitializer + %159 = bitcast <16 x i1> %158 to i16 + %160 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %159, i1 false) + %161 = zext nneg i16 %160 to i64 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit": ; preds = %155, %._crit_edge.i - %.sroa.0.0.i = phi i64 [ %160, %155 ], [ %151, %._crit_edge.i ] - %161 = shl i64 %.sroa.0.0.i, 3 - %162 = sub nuw nsw i64 -8, %161 - %163 = getelementptr inbounds i8, ptr %.val.i1644, i64 %162 - %164 = sub i64 %.sroa.08.0.i.i47, %.sroa.02.05.i - %165 = sub i64 %.sroa.0.0.i, %.sroa.02.05.i - %166 = xor i64 %165, %164 - %.unshifted.i.i = and i64 %166, %.val7 - %167 = icmp ult i64 %.unshifted.i.i, 16 - br i1 %167, label %194, label %168 - -168: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" - %169 = getelementptr inbounds i8, ptr %.val.i1644, i64 %.sroa.0.0.i - %170 = load i8, ptr %169, align 1, !noundef !7 - %171 = lshr i64 %137, 57 - %172 = trunc nuw nsw i64 %171 to i8 - %173 = add i64 %.sroa.0.0.i, -16 - %174 = and i64 %173, %.val7 - store i8 %172, ptr %169, align 1 - %175 = getelementptr i8, ptr %.val.i1644, i64 %174 - %176 = getelementptr i8, ptr %175, i64 16 - store i8 %172, ptr %176, align 1 - %177 = icmp eq i8 %170, -1 - br i1 %177, label %183, label %.preheader31 - -.preheader31: ; preds = %168, %.preheader31 - %.sroa.04.09.i = phi i64 [ %182, %.preheader31 ], [ 0, %168 ] - %178 = getelementptr inbounds nuw i8, ptr %128, i64 %.sroa.04.09.i - %179 = getelementptr inbounds nuw i8, ptr %163, i64 %.sroa.04.09.i - %180 = load i8, ptr %178, align 1 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit": ; preds = %156, %._crit_edge.i22 + %.sroa.0.0.i = phi i64 [ %161, %156 ], [ %152, %._crit_edge.i22 ] + %162 = shl i64 %.sroa.0.0.i, 3 + %163 = sub nuw nsw i64 -8, %162 + %164 = getelementptr inbounds i8, ptr %.val.i1645, i64 %163 + %165 = sub i64 %.sroa.08.0.i.i48, %.sroa.02.05.i + %166 = sub i64 %.sroa.0.0.i, %.sroa.02.05.i + %167 = xor i64 %166, %165 + %.unshifted.i.i = and i64 %167, %.val7 + %168 = icmp ult i64 %.unshifted.i.i, 16 + br i1 %168, label %195, label %169 + +169: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" + %170 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.0.0.i + %171 = load i8, ptr %170, align 1, !noundef !7 + %172 = lshr i64 %138, 57 + %173 = trunc nuw nsw i64 %172 to i8 + %174 = add i64 %.sroa.0.0.i, -16 + %175 = and i64 %174, %.val7 + store i8 %173, ptr %170, align 1 + %176 = getelementptr i8, ptr %.val.i1645, i64 %175 + %177 = getelementptr i8, ptr %176, i64 16 + store i8 %173, ptr %177, align 1 + %178 = icmp eq i8 %171, -1 + br i1 %178, label %184, label %.preheader32 + +.preheader32: ; preds = %169, %.preheader32 + %.sroa.04.09.i = phi i64 [ %183, %.preheader32 ], [ 0, %169 ] + %179 = getelementptr inbounds nuw i8, ptr %129, i64 %.sroa.04.09.i + %180 = getelementptr inbounds nuw i8, ptr %164, i64 %.sroa.04.09.i %181 = load i8, ptr %179, align 1 - store i8 %181, ptr %178, align 1 - store i8 %180, ptr %179, align 1 - %182 = add nuw nsw i64 %.sroa.04.09.i, 1 - %exitcond.not.i = icmp eq i64 %182, 8 - br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit, label %.preheader31 - -183: ; preds = %168 - %184 = add i64 %.sroa.08.0.i.i47, -16 - %185 = load i64, ptr %16, align 8, !noundef !7 - %186 = and i64 %185, %184 - %187 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %188 = getelementptr inbounds i8, ptr %187, i64 %.sroa.08.0.i.i47 - store i8 -1, ptr %188, align 1 - %189 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %190 = getelementptr i8, ptr %189, i64 %186 - %191 = getelementptr i8, ptr %190, i64 16 - store i8 -1, ptr %191, align 1 - %192 = load i64, ptr %128, align 1 - store i64 %192, ptr %163, align 1 - br label %193 - -193: ; preds = %194, %183, %.lr.ph48 - %exitcond.not = icmp eq i64 %.sroa.08.0.i.i47, %17 - br i1 %exitcond.not, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit", label %.lr.ph48 - -194: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" - %195 = lshr i64 %137, 57 - %196 = trunc nuw nsw i64 %195 to i8 - %197 = add i64 %.sroa.08.0.i.i47, -16 - %198 = and i64 %.val7, %197 - %199 = getelementptr inbounds i8, ptr %.val.i1644, i64 %.sroa.08.0.i.i47 - store i8 %196, ptr %199, align 1 - %200 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %201 = getelementptr i8, ptr %200, i64 %198 - %202 = getelementptr i8, ptr %201, i64 16 - store i8 %196, ptr %202, align 1 - br label %193 - -203: ; preds = %119 - %204 = landingpad { ptr, i32 } + %182 = load i8, ptr %180, align 1 + store i8 %182, ptr %179, align 1 + store i8 %181, ptr %180, align 1 + %183 = add nuw nsw i64 %.sroa.04.09.i, 1 + %exitcond.not.i = icmp eq i64 %183, 8 + br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit, label %.preheader32 + +184: ; preds = %169 + %185 = add i64 %.sroa.08.0.i.i48, -16 + %186 = load i64, ptr %16, align 8, !noundef !7 + %187 = and i64 %186, %185 + %188 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %189 = getelementptr inbounds i8, ptr %188, i64 %.sroa.08.0.i.i48 + store i8 -1, ptr %189, align 1 + %190 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %191 = getelementptr i8, ptr %190, i64 %187 + %192 = getelementptr i8, ptr %191, i64 16 + store i8 -1, ptr %192, align 1 + %193 = load i64, ptr %129, align 1 + store i64 %193, ptr %164, align 1 + br label %194 + +194: ; preds = %195, %184, %.lr.ph49 + %exitcond.not = icmp eq i64 %.sroa.08.0.i.i48, %17 + br i1 %exitcond.not, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit", label %.lr.ph49 + +195: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" + %196 = lshr i64 %138, 57 + %197 = trunc nuw nsw i64 %196 to i8 + %198 = add i64 %.sroa.08.0.i.i48, -16 + %199 = and i64 %.val7, %198 + %200 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.08.0.i.i48 + store i8 %197, ptr %200, align 1 + %201 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %202 = getelementptr i8, ptr %201, i64 %199 + %203 = getelementptr i8, ptr %202, i64 16 + store i8 %197, ptr %203, align 1 + br label %194 + +204: ; preds = %120 + %205 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hd62aa59d1fda1c9fE() #27 unreachable -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit": ; preds = %193 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit": ; preds = %194 %.pre = load i64, ptr %16, align 8 - %.pre68 = load i64, ptr %10, align 8 - %.pre70 = add i64 %.pre, 1 - %.pre71 = lshr i64 %.pre70, 3 - %.pre73 = mul nuw i64 %.pre71, 7 + %.pre69 = load i64, ptr %10, align 8 + %.pre71 = add i64 %.pre, 1 + %.pre72 = lshr i64 %.pre71, 3 + %.pre74 = mul nuw i64 %.pre72, 7 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit", %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit" - %.pre-phi74 = phi i64 [ %.pre73, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %21, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit" ] - %205 = phi i64 [ %.pre68, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %11, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit" ] - %206 = phi i64 [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ -1, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit" ] - %207 = icmp ult i64 %206, 8 - %.sroa.05.0.i.i = select i1 %207, i64 %206, i64 %.pre-phi74 - %208 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %209 = sub i64 %.sroa.05.0.i.i, %205 - store i64 %209, ptr %208, align 8 - call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7), !noalias !48 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79", %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" + %.pre-phi75 = phi i64 [ %.pre74, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %21, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] + %206 = phi i64 [ %.pre69, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %11, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] + %207 = phi i64 [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ -1, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] + %208 = icmp ult i64 %207, 8 + %.sroa.05.0.i.i = select i1 %208, i64 %207, i64 %.pre-phi75 + %209 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %210 = sub i64 %.sroa.05.0.i.i, %206 + store i64 %210, ptr %209, align 8 + call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7), !noalias !42 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit" -210: ; preds = %23 +211: ; preds = %23 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %9), !noalias !14 store ptr @anon.0464f3f8a1044c7ac829485398a26f09.12, ptr %9, align 8, !noalias !14 - %211 = getelementptr inbounds nuw i8, ptr %9, i64 8 - store i64 1, ptr %211, align 8, !noalias !14 - %212 = getelementptr inbounds nuw i8, ptr %9, i64 32 - store ptr null, ptr %212, align 8, !noalias !14 - %213 = getelementptr inbounds nuw i8, ptr %9, i64 16 - store ptr inttoptr (i64 8 to ptr), ptr %213, align 8, !noalias !14 - %214 = getelementptr inbounds nuw i8, ptr %9, i64 24 - store i64 0, ptr %214, align 8, !noalias !14 + %212 = getelementptr inbounds nuw i8, ptr %9, i64 8 + store i64 1, ptr %212, align 8, !noalias !14 + %213 = getelementptr inbounds nuw i8, ptr %9, i64 32 + store ptr null, ptr %213, align 8, !noalias !14 + %214 = getelementptr inbounds nuw i8, ptr %9, i64 16 + store ptr inttoptr (i64 8 to ptr), ptr %214, align 8, !noalias !14 + %215 = getelementptr inbounds nuw i8, ptr %9, i64 24 + store i64 0, ptr %215, align 8, !noalias !14 call void @_ZN4core9panicking9panic_fmt17hdc63834ffaaefae5E(ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %9, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.0464f3f8a1044c7ac829485398a26f09.14) #26, !noalias !14 unreachable "_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit": ; preds = %34, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E.exit", %23, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" %.sroa.4.0.i = phi i64 [ undef, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" ], [ undef, %23 ], [ %31, %34 ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E.exit" ] %.sroa.02.0.i = phi i64 [ -9223372036854775807, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" ], [ 0, %23 ], [ %29, %34 ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E.exit" ] - %215 = insertvalue { i64, i64 } poison, i64 %.sroa.02.0.i, 0 - %216 = insertvalue { i64, i64 } %215, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %216 + %216 = insertvalue { i64, i64 } poison, i64 %.sroa.02.0.i, 0 + %217 = insertvalue { i64, i64 } %216, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %217 } ; Function Attrs: nonlazybind uwtable @@ -1018,15 +1023,15 @@ attributes #27 = { cold noreturn nounwind } !39 = !{!40} !40 = distinct !{!40, !41, !"_ZN4core9core_arch3x864sse214_mm_load_si12817h618d09c88288abc7E.llvm.290506550049245918: argument 0"} !41 = distinct !{!41, !"_ZN4core9core_arch3x864sse214_mm_load_si12817h618d09c88288abc7E.llvm.290506550049245918"} -!42 = !{!43} -!43 = distinct !{!43, !44, !"_ZN4core9core_arch3x864sse214_mm_load_si12817h618d09c88288abc7E.llvm.290506550049245918: argument 0"} -!44 = distinct !{!44, !"_ZN4core9core_arch3x864sse214_mm_load_si12817h618d09c88288abc7E.llvm.290506550049245918"} +!42 = !{!43, !15} +!43 = distinct !{!43, !44, !"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E: argument 0"} +!44 = distinct !{!44, !"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E"} !45 = !{!46} -!46 = distinct !{!46, !47, !"_ZN4core9core_arch3x864sse215_mm_store_si12817heea4372f146b23f8E: argument 0"} -!47 = distinct !{!47, !"_ZN4core9core_arch3x864sse215_mm_store_si12817heea4372f146b23f8E"} -!48 = !{!49, !15} -!49 = distinct !{!49, !50, !"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E: argument 0"} -!50 = distinct !{!50, !"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E"} +!46 = distinct !{!46, !47, !"_ZN4core9core_arch3x864sse214_mm_load_si12817h618d09c88288abc7E.llvm.290506550049245918: argument 0"} +!47 = distinct !{!47, !"_ZN4core9core_arch3x864sse214_mm_load_si12817h618d09c88288abc7E.llvm.290506550049245918"} +!48 = !{!49} +!49 = distinct !{!49, !50, !"_ZN4core9core_arch3x864sse215_mm_store_si12817heea4372f146b23f8E: argument 0"} +!50 = distinct !{!50, !"_ZN4core9core_arch3x864sse215_mm_store_si12817heea4372f146b23f8E"} !51 = !{!52, !54} !52 = distinct !{!52, !53, !"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17he6d9908702e6ed3dE: argument 0"} !53 = distinct !{!53, !"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17he6d9908702e6ed3dE"} diff --git a/bench/graphviz/optimized/spring_electrical.ll b/bench/graphviz/optimized/spring_electrical.ll index a5077e50d24..afe3ad5f624 100644 --- a/bench/graphviz/optimized/spring_electrical.ll +++ b/bench/graphviz/optimized/spring_electrical.ll @@ -857,275 +857,267 @@ define internal fastcc void @beautify_leaves(i32 noundef range(i32 1, -214748364 %17 = icmp ne i32 %16, 0 %18 = zext i1 %17 to i64 %19 = add nuw nsw i64 %15, %18 - %.not.i.i = icmp eq i64 %19, 0 - br i1 %.not.i.i, label %.thread.i.i, label %21 + %20 = tail call noalias ptr @calloc(i64 noundef range(i64 -2147483648, 2305843009213693953) %19, i64 noundef 1) #22 + %21 = icmp eq ptr %20, null + br i1 %21, label %22, label %bitarray_new.exit -.thread.i.i: ; preds = %14 - %20 = tail call noalias ptr @calloc(i64 noundef 0, i64 noundef 1) #22 - br label %bitarray_new.exit - -21: ; preds = %14 - %22 = tail call noalias ptr @calloc(i64 noundef range(i64 -2147483648, 2305843009213693953) %19, i64 noundef 1) #22 - %23 = icmp eq ptr %22, null - br i1 %23, label %24, label %bitarray_new.exit - -24: ; preds = %21 - %25 = load ptr, ptr @stderr, align 8, !tbaa !3 - %26 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %25, ptr noundef nonnull @.str.26, i64 noundef %19) #23 +22: ; preds = %14 + %23 = load ptr, ptr @stderr, align 8, !tbaa !3 + %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.26, i64 noundef %19) #23 tail call fastcc void @graphviz_exit() #24 unreachable -bitarray_new.exit: ; preds = %3, %.thread.i.i, %21 - %.sroa.0.0.i = phi ptr [ null, %3 ], [ %20, %.thread.i.i ], [ %22, %21 ] +bitarray_new.exit: ; preds = %3, %14 + %.sroa.0.0.i = phi ptr [ null, %3 ], [ %20, %14 ] store ptr %.sroa.0.0.i, ptr %6, align 8 - %27 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store i64 %12, ptr %27, align 8 - %28 = icmp sgt i32 %7, 0 - br i1 %28, label %.lr.ph108, label %._crit_edge109 + %25 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store i64 %12, ptr %25, align 8 + %26 = icmp sgt i32 %7, 0 + br i1 %26, label %.lr.ph108, label %._crit_edge109 .lr.ph108: ; preds = %bitarray_new.exit - %29 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %30 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %27 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %28 = getelementptr inbounds nuw i8, ptr %4, i64 8 %wide.trip.count = zext nneg i32 %7 to i64 - br label %31 + br label %29 -31: ; preds = %.lr.ph108, %155 - %indvars.iv112 = phi i64 [ 0, %.lr.ph108 ], [ %indvars.iv.next113, %155 ] +29: ; preds = %.lr.ph108, %153 + %indvars.iv112 = phi i64 [ 0, %.lr.ph108 ], [ %indvars.iv.next113, %153 ] %indvars.iv.next113 = add nuw nsw i64 %indvars.iv112, 1 - %32 = getelementptr inbounds nuw i32, ptr %9, i64 %indvars.iv.next113 + %30 = getelementptr inbounds nuw i32, ptr %9, i64 %indvars.iv.next113 + %31 = load i32, ptr %30, align 4, !tbaa !36 + %32 = getelementptr inbounds nuw i32, ptr %9, i64 %indvars.iv112 %33 = load i32, ptr %32, align 4, !tbaa !36 - %34 = getelementptr inbounds nuw i32, ptr %9, i64 %indvars.iv112 - %35 = load i32, ptr %34, align 4, !tbaa !36 - %36 = sub nsw i32 %33, %35 - %.not = icmp eq i32 %36, 1 - br i1 %.not, label %37, label %155 - -37: ; preds = %31 - %38 = load ptr, ptr %6, align 8 - %39 = load i64, ptr %27, align 8 + %34 = sub nsw i32 %31, %33 + %.not = icmp eq i32 %34, 1 + br i1 %.not, label %35, label %153 + +35: ; preds = %29 + %36 = load ptr, ptr %6, align 8 + %37 = load i64, ptr %25, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) - store ptr %38, ptr %5, align 8 - store i64 %39, ptr %29, align 8 - %40 = icmp ult i64 %39, 65 - %.0.i = select i1 %40, ptr %5, ptr %38 - %41 = lshr i64 %indvars.iv112, 3 - %42 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %41 - %43 = load i8, ptr %42, align 1, !tbaa !56 - %44 = zext i8 %43 to i32 - %45 = trunc nuw nsw i64 %indvars.iv112 to i32 - %46 = and i32 %45, 7 - %47 = shl nuw nsw i32 1, %46 - %48 = and i32 %47, %44 - %.not85 = icmp eq i32 %48, 0 + store ptr %36, ptr %5, align 8 + store i64 %37, ptr %27, align 8 + %38 = icmp ult i64 %37, 65 + %.0.i = select i1 %38, ptr %5, ptr %36 + %39 = lshr i64 %indvars.iv112, 3 + %40 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %39 + %41 = load i8, ptr %40, align 1, !tbaa !56 + %42 = zext i8 %41 to i32 + %43 = trunc nuw nsw i64 %indvars.iv112 to i32 + %44 = and i32 %43, 7 + %45 = shl nuw nsw i32 1, %44 + %46 = and i32 %45, %42 + %.not85 = icmp eq i32 %46, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) - br i1 %.not85, label %49, label %155 + br i1 %.not85, label %47, label %153 -49: ; preds = %37 - %50 = sext i32 %35 to i64 - %51 = getelementptr inbounds i32, ptr %11, i64 %50 - %52 = load i32, ptr %51, align 4, !tbaa !36 - %53 = sext i32 %52 to i64 +47: ; preds = %35 + %48 = sext i32 %33 to i64 + %49 = getelementptr inbounds i32, ptr %11, i64 %48 + %50 = load i32, ptr %49, align 4, !tbaa !36 + %51 = sext i32 %50 to i64 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) - store ptr %38, ptr %4, align 8 - store i64 %39, ptr %30, align 8 - %.0.i61 = select i1 %40, ptr %4, ptr %38 - %54 = lshr i64 %53, 3 - %55 = getelementptr inbounds nuw i8, ptr %.0.i61, i64 %54 - %56 = load i8, ptr %55, align 1, !tbaa !56 - %57 = zext i8 %56 to i32 - %58 = and i32 %52, 7 - %59 = shl nuw nsw i32 1, %58 - %60 = and i32 %59, %57 - %.not86 = icmp eq i32 %60, 0 + store ptr %36, ptr %4, align 8 + store i64 %37, ptr %28, align 8 + %.0.i61 = select i1 %38, ptr %4, ptr %36 + %52 = lshr i64 %51, 3 + %53 = getelementptr inbounds nuw i8, ptr %.0.i61, i64 %52 + %54 = load i8, ptr %53, align 1, !tbaa !56 + %55 = zext i8 %54 to i32 + %56 = and i32 %50, 7 + %57 = shl nuw nsw i32 1, %56 + %58 = and i32 %57, %55 + %.not86 = icmp eq i32 %58, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) - br i1 %.not86, label %bitarray_set.exit, label %155 - -bitarray_set.exit: ; preds = %49 - %spec.select = select i1 %40, ptr %6, ptr %38 - %61 = trunc i32 %52 to i8 - %62 = and i8 %61, 7 - %63 = shl nuw i8 1, %62 - %64 = getelementptr inbounds nuw i8, ptr %spec.select, i64 %54 - %65 = load i8, ptr %64, align 1, !tbaa !56 - %66 = or i8 %65, %63 - store i8 %66, ptr %64, align 1, !tbaa !56 - %67 = getelementptr inbounds i32, ptr %9, i64 %53 + br i1 %.not86, label %bitarray_set.exit, label %153 + +bitarray_set.exit: ; preds = %47 + %spec.select = select i1 %38, ptr %6, ptr %36 + %59 = trunc i32 %50 to i8 + %60 = and i8 %59, 7 + %61 = shl nuw i8 1, %60 + %62 = getelementptr inbounds nuw i8, ptr %spec.select, i64 %52 + %63 = load i8, ptr %62, align 1, !tbaa !56 + %64 = or i8 %63, %61 + store i8 %64, ptr %62, align 1, !tbaa !56 + %65 = getelementptr inbounds i32, ptr %9, i64 %51 + %66 = load i32, ptr %65, align 4, !tbaa !36 + %67 = getelementptr i8, ptr %65, i64 4 %68 = load i32, ptr %67, align 4, !tbaa !36 - %69 = getelementptr i8, ptr %67, i64 4 - %70 = load i32, ptr %69, align 4, !tbaa !36 - %71 = icmp slt i32 %68, %70 - br i1 %71, label %.lr.ph.preheader, label %._crit_edge106 + %69 = icmp slt i32 %66, %68 + br i1 %69, label %.lr.ph.preheader, label %._crit_edge106 .lr.ph.preheader: ; preds = %bitarray_set.exit - %72 = sext i32 %68 to i64 + %70 = sext i32 %66 to i64 br label %.lr.ph -.lr.ph: ; preds = %.lr.ph.preheader, %125 - %73 = phi i32 [ %70, %.lr.ph.preheader ], [ %126, %125 ] - %indvars.iv = phi i64 [ %72, %.lr.ph.preheader ], [ %indvars.iv.next, %125 ] - %.05697 = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %.1, %125 ] - %.sroa.21.295 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.21.3, %125 ] - %.sroa.14.294 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.14.3, %125 ] - %.sroa.9.293 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.9.3, %125 ] - %.sroa.0.292 = phi ptr [ null, %.lr.ph.preheader ], [ %.sroa.0.3, %125 ] - %74 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv - %75 = load i32, ptr %74, align 4, !tbaa !36 - %76 = sext i32 %75 to i64 - %77 = getelementptr i32, ptr %9, i64 %76 - %78 = getelementptr i8, ptr %77, i64 4 - %79 = load i32, ptr %78, align 4, !tbaa !36 - %80 = load i32, ptr %77, align 4, !tbaa !36 - %81 = sub nsw i32 %79, %80 - %82 = icmp eq i32 %81, 1 - br i1 %82, label %bitarray_set.exit64, label %125 +.lr.ph: ; preds = %.lr.ph.preheader, %123 + %71 = phi i32 [ %68, %.lr.ph.preheader ], [ %124, %123 ] + %indvars.iv = phi i64 [ %70, %.lr.ph.preheader ], [ %indvars.iv.next, %123 ] + %.05697 = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %.1, %123 ] + %.sroa.21.295 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.21.3, %123 ] + %.sroa.14.294 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.14.3, %123 ] + %.sroa.9.293 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.9.3, %123 ] + %.sroa.0.292 = phi ptr [ null, %.lr.ph.preheader ], [ %.sroa.0.3, %123 ] + %72 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv + %73 = load i32, ptr %72, align 4, !tbaa !36 + %74 = sext i32 %73 to i64 + %75 = getelementptr i32, ptr %9, i64 %74 + %76 = getelementptr i8, ptr %75, i64 4 + %77 = load i32, ptr %76, align 4, !tbaa !36 + %78 = load i32, ptr %75, align 4, !tbaa !36 + %79 = sub nsw i32 %77, %78 + %80 = icmp eq i32 %79, 1 + br i1 %80, label %bitarray_set.exit64, label %123 bitarray_set.exit64: ; preds = %.lr.ph - %83 = load i64, ptr %27, align 8, !tbaa !59 - %84 = icmp ult i64 %83, 65 - %85 = load ptr, ptr %6, align 8 - %spec.select84 = select i1 %84, ptr %6, ptr %85 - %86 = trunc i32 %75 to i8 - %87 = and i8 %86, 7 - %88 = shl nuw i8 1, %87 - %89 = lshr i64 %76, 3 - %90 = getelementptr inbounds nuw i8, ptr %spec.select84, i64 %89 - %91 = load i8, ptr %90, align 1, !tbaa !56 - %92 = or i8 %91, %88 - store i8 %92, ptr %90, align 1, !tbaa !56 - %93 = load i32, ptr %74, align 4, !tbaa !36 - %94 = tail call double @distance(ptr noundef %2, i32 noundef %0, i32 noundef %52, i32 noundef %93) #25 - %95 = fadd double %.05697, %94 - %96 = load i32, ptr %74, align 4, !tbaa !36 - %97 = icmp eq i64 %.sroa.14.294, %.sroa.21.295 - br i1 %97, label %98, label %ints_append.exit - -98: ; preds = %bitarray_set.exit64 - %99 = icmp eq i64 %.sroa.21.295, 0 - %100 = shl i64 %.sroa.21.295, 1 - %spec.select.i.i = select i1 %99, i64 1, i64 %100 + %81 = load i64, ptr %25, align 8, !tbaa !59 + %82 = icmp ult i64 %81, 65 + %83 = load ptr, ptr %6, align 8 + %spec.select84 = select i1 %82, ptr %6, ptr %83 + %84 = trunc i32 %73 to i8 + %85 = and i8 %84, 7 + %86 = shl nuw i8 1, %85 + %87 = lshr i64 %74, 3 + %88 = getelementptr inbounds nuw i8, ptr %spec.select84, i64 %87 + %89 = load i8, ptr %88, align 1, !tbaa !56 + %90 = or i8 %89, %86 + store i8 %90, ptr %88, align 1, !tbaa !56 + %91 = load i32, ptr %72, align 4, !tbaa !36 + %92 = tail call double @distance(ptr noundef %2, i32 noundef %0, i32 noundef %50, i32 noundef %91) #25 + %93 = fadd double %.05697, %92 + %94 = load i32, ptr %72, align 4, !tbaa !36 + %95 = icmp eq i64 %.sroa.14.294, %.sroa.21.295 + br i1 %95, label %96, label %ints_append.exit + +96: ; preds = %bitarray_set.exit64 + %97 = icmp eq i64 %.sroa.21.295, 0 + %98 = shl i64 %.sroa.21.295, 1 + %spec.select.i.i = select i1 %97, i64 1, i64 %98 %mul.ov.i.i = icmp ugt i64 %spec.select.i.i, 4611686018427387903 - br i1 %mul.ov.i.i, label %117, label %101 - -101: ; preds = %98 - %102 = shl nuw i64 %spec.select.i.i, 2 - %103 = tail call ptr @realloc(ptr noundef %.sroa.0.292, i64 noundef %102) #27 - %104 = icmp eq ptr %103, null - br i1 %104, label %117, label %105 - -105: ; preds = %101 - %106 = getelementptr inbounds nuw i32, ptr %103, i64 %.sroa.21.295 - %107 = sub i64 %spec.select.i.i, %.sroa.21.295 - %108 = shl i64 %107, 2 - tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %106, i8 0, i64 %108, i1 false) - %109 = add i64 %.sroa.21.295, %.sroa.9.293 - %110 = icmp ugt i64 %109, %.sroa.21.295 - br i1 %110, label %111, label %ints_append.exit - -111: ; preds = %105 - %112 = sub i64 %.sroa.21.295, %.sroa.9.293 - %113 = sub i64 %spec.select.i.i, %112 - %114 = getelementptr inbounds nuw i32, ptr %103, i64 %113 - %115 = getelementptr inbounds nuw i32, ptr %103, i64 %.sroa.9.293 - %116 = shl i64 %112, 2 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %114, ptr nonnull align 4 %115, i64 %116, i1 false) + br i1 %mul.ov.i.i, label %115, label %99 + +99: ; preds = %96 + %100 = shl nuw i64 %spec.select.i.i, 2 + %101 = tail call ptr @realloc(ptr noundef %.sroa.0.292, i64 noundef %100) #27 + %102 = icmp eq ptr %101, null + br i1 %102, label %115, label %103 + +103: ; preds = %99 + %104 = getelementptr inbounds nuw i32, ptr %101, i64 %.sroa.21.295 + %105 = sub i64 %spec.select.i.i, %.sroa.21.295 + %106 = shl i64 %105, 2 + tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %104, i8 0, i64 %106, i1 false) + %107 = add i64 %.sroa.21.295, %.sroa.9.293 + %108 = icmp ugt i64 %107, %.sroa.21.295 + br i1 %108, label %109, label %ints_append.exit + +109: ; preds = %103 + %110 = sub i64 %.sroa.21.295, %.sroa.9.293 + %111 = sub i64 %spec.select.i.i, %110 + %112 = getelementptr inbounds nuw i32, ptr %101, i64 %111 + %113 = getelementptr inbounds nuw i32, ptr %101, i64 %.sroa.9.293 + %114 = shl i64 %110, 2 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %112, ptr nonnull align 4 %113, i64 %114, i1 false) br label %ints_append.exit -117: ; preds = %101, %98 - %.2.i.ph.i = phi i32 [ 34, %98 ], [ 12, %101 ] - %118 = load ptr, ptr @stderr, align 8, !tbaa !3 - %119 = tail call ptr @strerror(i32 noundef %.2.i.ph.i) #25 - %120 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %118, ptr noundef nonnull @.str.27, ptr noundef %119) #23 +115: ; preds = %99, %96 + %.2.i.ph.i = phi i32 [ 34, %96 ], [ 12, %99 ] + %116 = load ptr, ptr @stderr, align 8, !tbaa !3 + %117 = tail call ptr @strerror(i32 noundef %.2.i.ph.i) #25 + %118 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %116, ptr noundef nonnull @.str.27, ptr noundef %117) #23 tail call fastcc void @graphviz_exit() #24 unreachable -ints_append.exit: ; preds = %105, %111, %bitarray_set.exit64 - %.sroa.0.4 = phi ptr [ %.sroa.0.292, %bitarray_set.exit64 ], [ %103, %111 ], [ %103, %105 ] - %.sroa.9.5 = phi i64 [ %.sroa.9.293, %bitarray_set.exit64 ], [ %113, %111 ], [ %.sroa.9.293, %105 ] - %.sroa.21.4 = phi i64 [ %.sroa.21.295, %bitarray_set.exit64 ], [ %spec.select.i.i, %111 ], [ %spec.select.i.i, %105 ] - %121 = add i64 %.sroa.9.5, %.sroa.14.294 - %122 = urem i64 %121, %.sroa.21.4 - %123 = getelementptr inbounds nuw i32, ptr %.sroa.0.4, i64 %122 - store i32 %96, ptr %123, align 4, !tbaa !36 - %124 = add i64 %.sroa.14.294, 1 - %.pre = load i32, ptr %69, align 4, !tbaa !36 - br label %125 - -125: ; preds = %.lr.ph, %ints_append.exit - %126 = phi i32 [ %.pre, %ints_append.exit ], [ %73, %.lr.ph ] +ints_append.exit: ; preds = %103, %109, %bitarray_set.exit64 + %.sroa.0.4 = phi ptr [ %.sroa.0.292, %bitarray_set.exit64 ], [ %101, %109 ], [ %101, %103 ] + %.sroa.9.5 = phi i64 [ %.sroa.9.293, %bitarray_set.exit64 ], [ %111, %109 ], [ %.sroa.9.293, %103 ] + %.sroa.21.4 = phi i64 [ %.sroa.21.295, %bitarray_set.exit64 ], [ %spec.select.i.i, %109 ], [ %spec.select.i.i, %103 ] + %119 = add i64 %.sroa.9.5, %.sroa.14.294 + %120 = urem i64 %119, %.sroa.21.4 + %121 = getelementptr inbounds nuw i32, ptr %.sroa.0.4, i64 %120 + store i32 %94, ptr %121, align 4, !tbaa !36 + %122 = add i64 %.sroa.14.294, 1 + %.pre = load i32, ptr %67, align 4, !tbaa !36 + br label %123 + +123: ; preds = %.lr.ph, %ints_append.exit + %124 = phi i32 [ %.pre, %ints_append.exit ], [ %71, %.lr.ph ] %.sroa.0.3 = phi ptr [ %.sroa.0.4, %ints_append.exit ], [ %.sroa.0.292, %.lr.ph ] %.sroa.9.3 = phi i64 [ %.sroa.9.5, %ints_append.exit ], [ %.sroa.9.293, %.lr.ph ] - %.sroa.14.3 = phi i64 [ %124, %ints_append.exit ], [ %.sroa.14.294, %.lr.ph ] + %.sroa.14.3 = phi i64 [ %122, %ints_append.exit ], [ %.sroa.14.294, %.lr.ph ] %.sroa.21.3 = phi i64 [ %.sroa.21.4, %ints_append.exit ], [ %.sroa.21.295, %.lr.ph ] - %.1 = phi double [ %95, %ints_append.exit ], [ %.05697, %.lr.ph ] + %.1 = phi double [ %93, %ints_append.exit ], [ %.05697, %.lr.ph ] %indvars.iv.next = add nsw i64 %indvars.iv, 1 - %127 = sext i32 %126 to i64 - %128 = icmp slt i64 %indvars.iv.next, %127 - br i1 %128, label %.lr.ph, label %._crit_edge, !llvm.loop !61 - -._crit_edge: ; preds = %125 - %129 = uitofp i64 %.sroa.14.3 to double - %130 = fdiv double %.1, %129 - %131 = icmp ugt i64 %.sroa.14.3, 1 - %132 = fdiv double 0x4018552E8777604C, %129 - %133 = select i1 %131, double %132, double 0.000000e+00 + %125 = sext i32 %124 to i64 + %126 = icmp slt i64 %indvars.iv.next, %125 + br i1 %126, label %.lr.ph, label %._crit_edge, !llvm.loop !61 + +._crit_edge: ; preds = %123 + %127 = uitofp i64 %.sroa.14.3 to double + %128 = fdiv double %.1, %127 + %129 = icmp ugt i64 %.sroa.14.3, 1 + %130 = fdiv double 0x4018552E8777604C, %127 + %131 = select i1 %129, double %130, double 0.000000e+00 %.not110 = icmp eq i64 %.sroa.14.3, 0 br i1 %.not110, label %._crit_edge106, label %.lr.ph105 .lr.ph105: ; preds = %._crit_edge - %134 = mul nsw i32 %52, %0 - %135 = sext i32 %134 to i64 - %136 = getelementptr inbounds double, ptr %2, i64 %135 - %137 = getelementptr i8, ptr %136, i64 8 - br label %138 - -._crit_edge106: ; preds = %138, %bitarray_set.exit, %._crit_edge - %.sroa.0.2.lcssa123132 = phi ptr [ %.sroa.0.3, %._crit_edge ], [ null, %bitarray_set.exit ], [ %.sroa.0.3, %138 ] + %132 = mul nsw i32 %50, %0 + %133 = sext i32 %132 to i64 + %134 = getelementptr inbounds double, ptr %2, i64 %133 + %135 = getelementptr i8, ptr %134, i64 8 + br label %136 + +._crit_edge106: ; preds = %136, %bitarray_set.exit, %._crit_edge + %.sroa.0.2.lcssa123132 = phi ptr [ %.sroa.0.3, %._crit_edge ], [ null, %bitarray_set.exit ], [ %.sroa.0.3, %136 ] tail call void @free(ptr noundef %.sroa.0.2.lcssa123132) #25 - br label %155 - -138: ; preds = %.lr.ph105, %138 - %.0103 = phi i64 [ 0, %.lr.ph105 ], [ %154, %138 ] - %.054102 = phi double [ 1.000000e-01, %.lr.ph105 ], [ %153, %138 ] - %139 = add i64 %.0103, %.sroa.9.3 - %140 = urem i64 %139, %.sroa.21.3 - %141 = getelementptr inbounds nuw i32, ptr %.sroa.0.3, i64 %140 - %142 = load i32, ptr %141, align 4, !tbaa !36 - %143 = tail call double @cos(double noundef %.054102) #25, !tbaa !36 - %144 = load double, ptr %136, align 8, !tbaa !39 - %145 = tail call double @llvm.fmuladd.f64(double %143, double %130, double %144) - %146 = mul nsw i32 %142, %0 - %147 = sext i32 %146 to i64 - %148 = getelementptr inbounds double, ptr %2, i64 %147 - store double %145, ptr %148, align 8, !tbaa !39 - %149 = tail call double @sin(double noundef %.054102) #25, !tbaa !36 - %150 = load double, ptr %137, align 8, !tbaa !39 - %151 = tail call double @llvm.fmuladd.f64(double %149, double %130, double %150) - %152 = getelementptr i8, ptr %148, i64 8 - store double %151, ptr %152, align 8, !tbaa !39 - %153 = fadd double %133, %.054102 - %154 = add nuw i64 %.0103, 1 - %exitcond.not = icmp eq i64 %154, %.sroa.14.3 - br i1 %exitcond.not, label %._crit_edge106, label %138, !llvm.loop !62 - -155: ; preds = %49, %._crit_edge106, %37, %31 + br label %153 + +136: ; preds = %.lr.ph105, %136 + %.0103 = phi i64 [ 0, %.lr.ph105 ], [ %152, %136 ] + %.054102 = phi double [ 1.000000e-01, %.lr.ph105 ], [ %151, %136 ] + %137 = add i64 %.0103, %.sroa.9.3 + %138 = urem i64 %137, %.sroa.21.3 + %139 = getelementptr inbounds nuw i32, ptr %.sroa.0.3, i64 %138 + %140 = load i32, ptr %139, align 4, !tbaa !36 + %141 = tail call double @cos(double noundef %.054102) #25, !tbaa !36 + %142 = load double, ptr %134, align 8, !tbaa !39 + %143 = tail call double @llvm.fmuladd.f64(double %141, double %128, double %142) + %144 = mul nsw i32 %140, %0 + %145 = sext i32 %144 to i64 + %146 = getelementptr inbounds double, ptr %2, i64 %145 + store double %143, ptr %146, align 8, !tbaa !39 + %147 = tail call double @sin(double noundef %.054102) #25, !tbaa !36 + %148 = load double, ptr %135, align 8, !tbaa !39 + %149 = tail call double @llvm.fmuladd.f64(double %147, double %128, double %148) + %150 = getelementptr i8, ptr %146, i64 8 + store double %149, ptr %150, align 8, !tbaa !39 + %151 = fadd double %131, %.054102 + %152 = add nuw i64 %.0103, 1 + %exitcond.not = icmp eq i64 %152, %.sroa.14.3 + br i1 %exitcond.not, label %._crit_edge106, label %136, !llvm.loop !62 + +153: ; preds = %47, %._crit_edge106, %35, %29 %exitcond115.not = icmp eq i64 %indvars.iv.next113, %wide.trip.count - br i1 %exitcond115.not, label %._crit_edge109.loopexit, label %31, !llvm.loop !63 + br i1 %exitcond115.not, label %._crit_edge109.loopexit, label %29, !llvm.loop !63 -._crit_edge109.loopexit: ; preds = %155 - %.pre116 = load i64, ptr %27, align 8, !tbaa !59 +._crit_edge109.loopexit: ; preds = %153 + %.pre116 = load i64, ptr %25, align 8, !tbaa !59 br label %._crit_edge109 ._crit_edge109: ; preds = %._crit_edge109.loopexit, %bitarray_new.exit - %156 = phi i64 [ %.pre116, %._crit_edge109.loopexit ], [ %12, %bitarray_new.exit ] - %157 = icmp ugt i64 %156, 64 - br i1 %157, label %158, label %bitarray_reset.exit + %154 = phi i64 [ %.pre116, %._crit_edge109.loopexit ], [ %12, %bitarray_new.exit ] + %155 = icmp ugt i64 %154, 64 + br i1 %155, label %156, label %bitarray_reset.exit -158: ; preds = %._crit_edge109 - %159 = load ptr, ptr %6, align 8, !tbaa !56 - tail call void @free(ptr noundef %159) #25 +156: ; preds = %._crit_edge109 + %157 = load ptr, ptr %6, align 8, !tbaa !56 + tail call void @free(ptr noundef %157) #25 br label %bitarray_reset.exit -bitarray_reset.exit: ; preds = %._crit_edge109, %158 +bitarray_reset.exit: ; preds = %._crit_edge109, %156 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #25 ret void } diff --git a/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll b/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll index 25ac2f380bb..7d779c26f60 100644 --- a/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll +++ b/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll @@ -863,233 +863,236 @@ common.resume: ; preds = %153, %73 137: ; preds = %16 tail call void @llvm.experimental.noalias.scope.decl(metadata !138) %.val18.i = load ptr, ptr %0, align 8, !alias.scope !138 - %138 = lshr i64 %20, 4 - %139 = and i64 %20, 15 - %.not.i.i.i.i.i = icmp ne i64 %139, 0 - %140 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %138, %140 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i, label %.lr.ph.i.i8 + %.not.not4.i.i = icmp eq i64 %20, 0 + br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread, label %.lr.ph.i.i8 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread: ; preds = %137 + %138 = icmp ne ptr %.val18.i, null + tail call void @llvm.assume(i1 %138) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !138 + br label %235 .lr.ph.i.i8: ; preds = %137 - %141 = icmp ne ptr %.val18.i, null - tail call void @llvm.assume(i1 %141) - br label %142 - -142: ; preds = %142, %.lr.ph.i.i8 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i8 ], [ %144, %142 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i8 ], [ %143, %142 ] - %143 = add nsw i64 %.sroa.5.05.i.i, -1 - %144 = add i64 %.sroa.01.06.i.i, 16 - %145 = getelementptr inbounds i8, ptr %.val18.i, i64 %.sroa.01.06.i.i - %146 = load <16 x i8>, ptr %145, align 16, !noalias !141 - %.lobit.i.i.i = ashr <16 x i8> %146, splat (i8 7) - %147 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %148 = or <2 x i64> %147, splat (i64 -9187201950435737472) - store <2 x i64> %148, ptr %145, align 16, !noalias !144 - %.not.not.i.i = icmp eq i64 %143, 0 - br i1 %.not.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i, label %142 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i: ; preds = %142, %137 - %149 = icmp ne ptr %.val18.i, null - tail call void @llvm.assume(i1 %149) - %..i.i = tail call i64 @llvm.umax.i64(i64 %20, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %20, i64 16) - %150 = getelementptr inbounds i8, ptr %.val18.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %150, ptr nonnull align 1 %.val18.i, i64 %.9.i.i, i1 false), !noalias !138 + %139 = lshr i64 %20, 4 + %140 = and i64 %20, 15 + %.not.i.i.i.i.i = icmp ne i64 %140, 0 + %141 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %139, %141 + %142 = icmp ne ptr %.val18.i, null + tail call void @llvm.assume(i1 %142) + br label %146 + +._crit_edge.i.i9: ; preds = %146 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %20, i64 16) + %spec.select29.i = tail call i64 @llvm.umin.i64(i64 %20, i64 16) + %143 = getelementptr inbounds i8, ptr %.val18.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %143, ptr nonnull align 1 %.val18.i, i64 %spec.select29.i, i1 false), !noalias !138 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !138 - %151 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr @"_ZN4core3ptr72drop_in_place$LT$$LP$markup5ever..interface..QualName$C$$LP$$RP$$RP$$GT$17h65a7d17256c551fbE.llvm.15648212929638076209", ptr %151, align 8, !noalias !138 - %152 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 24, ptr %152, align 8, !noalias !138 + %144 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr @"_ZN4core3ptr72drop_in_place$LT$$LP$markup5ever..interface..QualName$C$$LP$$RP$$RP$$GT$17h65a7d17256c551fbE.llvm.15648212929638076209", ptr %144, align 8, !noalias !138 + %145 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 24, ptr %145, align 8, !noalias !138 store ptr %0, ptr %5, align 8, !noalias !138 - %.not10.i = icmp eq i64 %20, 0 - br i1 %.not10.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread, label %.lr.ph.i + br label %155 + +146: ; preds = %146, %.lr.ph.i.i8 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i8 ], [ %148, %146 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i8 ], [ %147, %146 ] + %147 = add i64 %.sroa.5.05.i.i, -1 + %148 = add i64 %.sroa.01.06.i.i, 16 + %149 = getelementptr inbounds i8, ptr %.val18.i, i64 %.sroa.01.06.i.i + %150 = load <16 x i8>, ptr %149, align 16, !noalias !141 + %.lobit.i.i.i = ashr <16 x i8> %150, splat (i8 7) + %151 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %152 = or <2 x i64> %151, splat (i64 -9187201950435737472) + store <2 x i64> %152, ptr %149, align 16, !noalias !144 + %.not.not.i.i = icmp eq i64 %147, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i9, label %146 153: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i %154 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbbfc958adfc9147fE"(ptr noalias noundef align 8 dereferenceable(24) %5) #24 - to label %common.resume unwind label %229 - -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i, %228 - %.sroa.02.09.i = phi i64 [ %155, %228 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i ] - %155 = add nuw i64 %.sroa.02.09.i, 1 - %156 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %157 = getelementptr inbounds i8, ptr %156, i64 %.sroa.02.09.i - %158 = load i8, ptr %157, align 1, !noundef !7 - %.not.i9 = icmp eq i8 %158, -128 - br i1 %.not.i9, label %159, label %228 - -159: ; preds = %.lr.ph.i + to label %common.resume unwind label %230 + +155: ; preds = %229, %._crit_edge.i.i9 + %.sroa.02.09.i = phi i64 [ 0, %._crit_edge.i.i9 ], [ %156, %229 ] + %156 = add nuw i64 %.sroa.02.09.i, 1 + %157 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %158 = getelementptr inbounds i8, ptr %157, i64 %.sroa.02.09.i + %159 = load i8, ptr %158, align 1, !noundef !7 + %.not.i10 = icmp eq i8 %159, -128 + br i1 %.not.i10, label %160, label %229 + +160: ; preds = %155 %.neg.i = mul i64 %.sroa.02.09.i, -24 - %160 = getelementptr i8, ptr %156, i64 %.neg.i - %161 = getelementptr i8, ptr %160, i64 -24 - %162 = sub nsw i64 0, %.sroa.02.09.i + %161 = getelementptr i8, ptr %157, i64 %.neg.i + %162 = getelementptr i8, ptr %161, i64 -24 + %163 = sub nsw i64 0, %.sroa.02.09.i br label %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i _ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i: ; preds = %.preheader.i %.pre.i20 = load ptr, ptr %0, align 8, !alias.scope !147, !noalias !150 br label %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i -_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i, %159 - %163 = phi ptr [ %.pre.i20, %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i ], [ %156, %159 ] - %164 = getelementptr inbounds { { i64, i64, i64 }, {} }, ptr %163, i64 %162 - %165 = getelementptr inbounds i8, ptr %164, i64 -24 - %166 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h25a8e61dd0f73f6cE(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %165) +_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i, %160 + %164 = phi ptr [ %.pre.i20, %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i ], [ %157, %160 ] + %165 = getelementptr inbounds { { i64, i64, i64 }, {} }, ptr %164, i64 %163 + %166 = getelementptr inbounds i8, ptr %165, i64 -24 + %167 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h25a8e61dd0f73f6cE(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %166) to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" unwind label %153 "_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i": ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i - %.val.i12 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 %.val17.i = load i64, ptr %17, align 8, !alias.scope !138, !noundef !7 - %.sroa.0.05.i.i13 = and i64 %.val17.i, %166 - %167 = getelementptr inbounds i8, ptr %.val.i12, i64 %.sroa.0.05.i.i13 - %.0.copyload.i46.i.i14 = load <16 x i8>, ptr %167, align 1, !noalias !152 - %168 = icmp slt <16 x i8> %.0.copyload.i46.i.i14, zeroinitializer - %169 = bitcast <16 x i1> %168 to i16 - %.not.not.i.not7.i.i15 = icmp eq i16 %169, 0 - br i1 %.not.not.i.not7.i.i15, label %.lr.ph.i20.i, label %._crit_edge.i.i16 - -.lr.ph.i20.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i", %.lr.ph.i20.i - %.sroa.0.09.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i20.i ], [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] - %.sroa.7.08.i.i23 = phi i64 [ %170, %.lr.ph.i20.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] - %170 = add i64 %.sroa.7.08.i.i23, 16 - %171 = add i64 %170, %.sroa.0.09.i.i22 - %.sroa.0.0.i.i24 = and i64 %171, %.val17.i - %172 = getelementptr inbounds i8, ptr %.val.i12, i64 %.sroa.0.0.i.i24 - %.0.copyload.i4.i.i25 = load <16 x i8>, ptr %172, align 1, !noalias !152 - %173 = icmp slt <16 x i8> %.0.copyload.i4.i.i25, zeroinitializer - %174 = bitcast <16 x i1> %173 to i16 - %.not.not.i.not.i.i26 = icmp eq i16 %174, 0 - br i1 %.not.not.i.not.i.i26, label %.lr.ph.i20.i, label %._crit_edge.i.i16 - -._crit_edge.i.i16: ; preds = %.lr.ph.i20.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" - %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %.sroa.0.0.i.i24, %.lr.ph.i20.i ] - %.lcssa.i.i18 = phi i16 [ %169, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %174, %.lr.ph.i20.i ] - %175 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) - %176 = zext nneg i16 %175 to i64 - %177 = add i64 %.sroa.0.0.lcssa.i.i17, %176 - %178 = and i64 %177, %.val17.i - %179 = getelementptr inbounds i8, ptr %.val.i12, i64 %178 - %180 = load i8, ptr %179, align 1, !noundef !7 - %181 = icmp sgt i8 %180, -1 - br i1 %181, label %182, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i - -182: ; preds = %._crit_edge.i.i16 - %183 = load <16 x i8>, ptr %.val.i12, align 16, !noalias !155 - %184 = icmp slt <16 x i8> %183, zeroinitializer - %185 = bitcast <16 x i1> %184 to i16 - %.not.i.i.i21 = icmp ne i16 %185, 0 - %186 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %185, i1 true) - %187 = zext nneg i16 %186 to i64 + %.sroa.0.05.i.i14 = and i64 %.val17.i, %167 + %168 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.05.i.i14 + %.0.copyload.i46.i.i15 = load <16 x i8>, ptr %168, align 1, !noalias !152 + %169 = icmp slt <16 x i8> %.0.copyload.i46.i.i15, zeroinitializer + %170 = bitcast <16 x i1> %169 to i16 + %.not.not.i.not7.i.i16 = icmp eq i16 %170, 0 + br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i21.i, label %._crit_edge.i20.i + +.lr.ph.i21.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i", %.lr.ph.i21.i + %.sroa.0.09.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i21.i ], [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] + %.sroa.7.08.i.i23 = phi i64 [ %171, %.lr.ph.i21.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] + %171 = add i64 %.sroa.7.08.i.i23, 16 + %172 = add i64 %171, %.sroa.0.09.i.i22 + %.sroa.0.0.i.i24 = and i64 %172, %.val17.i + %173 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i.i24 + %.0.copyload.i4.i.i25 = load <16 x i8>, ptr %173, align 1, !noalias !152 + %174 = icmp slt <16 x i8> %.0.copyload.i4.i.i25, zeroinitializer + %175 = bitcast <16 x i1> %174 to i16 + %.not.not.i.not.i.i26 = icmp eq i16 %175, 0 + br i1 %.not.not.i.not.i.i26, label %.lr.ph.i21.i, label %._crit_edge.i20.i + +._crit_edge.i20.i: ; preds = %.lr.ph.i21.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" + %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %.sroa.0.0.i.i24, %.lr.ph.i21.i ] + %.lcssa.i.i18 = phi i16 [ %170, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %175, %.lr.ph.i21.i ] + %176 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) + %177 = zext nneg i16 %176 to i64 + %178 = add i64 %.sroa.0.0.lcssa.i.i17, %177 + %179 = and i64 %178, %.val17.i + %180 = getelementptr inbounds i8, ptr %.val.i13, i64 %179 + %181 = load i8, ptr %180, align 1, !noundef !7 + %182 = icmp sgt i8 %181, -1 + br i1 %182, label %183, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i + +183: ; preds = %._crit_edge.i20.i + %184 = load <16 x i8>, ptr %.val.i13, align 16, !noalias !155 + %185 = icmp slt <16 x i8> %184, zeroinitializer + %186 = bitcast <16 x i1> %185 to i16 + %.not.i.i.i21 = icmp ne i16 %186, 0 + %187 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %186, i1 true) + %188 = zext nneg i16 %187 to i64 tail call void @llvm.assume(i1 %.not.i.i.i21) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i: ; preds = %182, %._crit_edge.i.i16 - %.0.i.i.i19 = phi i64 [ %187, %182 ], [ %178, %._crit_edge.i.i16 ] - %188 = sub i64 %.sroa.02.09.i, %.sroa.0.05.i.i13 - %189 = sub i64 %.0.i.i.i19, %.sroa.0.05.i.i13 - %190 = xor i64 %189, %188 - %.unshifted.i = and i64 %190, %.val17.i - %191 = icmp ult i64 %.unshifted.i, 16 - br i1 %191, label %205, label %192 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i: ; preds = %183, %._crit_edge.i20.i + %.0.i.i.i19 = phi i64 [ %188, %183 ], [ %179, %._crit_edge.i20.i ] + %189 = sub i64 %.sroa.02.09.i, %.sroa.0.05.i.i14 + %190 = sub i64 %.0.i.i.i19, %.sroa.0.05.i.i14 + %191 = xor i64 %190, %189 + %.unshifted.i = and i64 %191, %.val17.i + %192 = icmp ult i64 %.unshifted.i, 16 + br i1 %192, label %206, label %193 -192: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i +193: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i %.neg16.i = mul i64 %.0.i.i.i19, -24 - %193 = getelementptr i8, ptr %.val.i12, i64 %.neg16.i - %194 = getelementptr i8, ptr %193, i64 -24 - %195 = getelementptr inbounds i8, ptr %.val.i12, i64 %.0.i.i.i19 - %196 = load i8, ptr %195, align 1, !noundef !7 - %197 = lshr i64 %166, 57 - %198 = trunc nuw nsw i64 %197 to i8 - %199 = add i64 %.0.i.i.i19, -16 - %200 = and i64 %199, %.val17.i - store i8 %198, ptr %195, align 1 - %201 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %202 = getelementptr i8, ptr %201, i64 %200 - %203 = getelementptr i8, ptr %202, i64 16 - store i8 %198, ptr %203, align 1 - %204 = icmp eq i8 %196, -1 - br i1 %204, label %219, label %.preheader.i - -205: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i - %206 = lshr i64 %166, 57 - %207 = trunc nuw nsw i64 %206 to i8 - %208 = add i64 %.sroa.02.09.i, -16 - %209 = and i64 %.val17.i, %208 - %210 = getelementptr inbounds i8, ptr %.val.i12, i64 %.sroa.02.09.i - store i8 %207, ptr %210, align 1 - %211 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %212 = getelementptr i8, ptr %211, i64 %209 - %213 = getelementptr i8, ptr %212, i64 16 - store i8 %207, ptr %213, align 1 - br label %228 - -.preheader.i: ; preds = %192, %.preheader.i - %.0910.i.i = phi i64 [ %218, %.preheader.i ], [ 0, %192 ] - %214 = getelementptr inbounds nuw i8, ptr %161, i64 %.0910.i.i - %215 = getelementptr inbounds nuw i8, ptr %194, i64 %.0910.i.i - %216 = load i8, ptr %214, align 1 + %194 = getelementptr i8, ptr %.val.i13, i64 %.neg16.i + %195 = getelementptr i8, ptr %194, i64 -24 + %196 = getelementptr inbounds i8, ptr %.val.i13, i64 %.0.i.i.i19 + %197 = load i8, ptr %196, align 1, !noundef !7 + %198 = lshr i64 %167, 57 + %199 = trunc nuw nsw i64 %198 to i8 + %200 = add i64 %.0.i.i.i19, -16 + %201 = and i64 %200, %.val17.i + store i8 %199, ptr %196, align 1 + %202 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %203 = getelementptr i8, ptr %202, i64 %201 + %204 = getelementptr i8, ptr %203, i64 16 + store i8 %199, ptr %204, align 1 + %205 = icmp eq i8 %197, -1 + br i1 %205, label %220, label %.preheader.i + +206: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i + %207 = lshr i64 %167, 57 + %208 = trunc nuw nsw i64 %207 to i8 + %209 = add i64 %.sroa.02.09.i, -16 + %210 = and i64 %.val17.i, %209 + %211 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.02.09.i + store i8 %208, ptr %211, align 1 + %212 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %213 = getelementptr i8, ptr %212, i64 %210 + %214 = getelementptr i8, ptr %213, i64 16 + store i8 %208, ptr %214, align 1 + br label %229 + +.preheader.i: ; preds = %193, %.preheader.i + %.0910.i.i = phi i64 [ %219, %.preheader.i ], [ 0, %193 ] + %215 = getelementptr inbounds nuw i8, ptr %162, i64 %.0910.i.i + %216 = getelementptr inbounds nuw i8, ptr %195, i64 %.0910.i.i %217 = load i8, ptr %215, align 1 - store i8 %217, ptr %214, align 1 - store i8 %216, ptr %215, align 1 - %218 = add nuw nsw i64 %.0910.i.i, 1 - %exitcond.not.i.i = icmp eq i64 %218, 24 + %218 = load i8, ptr %216, align 1 + store i8 %218, ptr %215, align 1 + store i8 %217, ptr %216, align 1 + %219 = add nuw nsw i64 %.0910.i.i, 1 + %exitcond.not.i.i = icmp eq i64 %219, 24 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i, label %.preheader.i -219: ; preds = %192 - %220 = add i64 %.sroa.02.09.i, -16 - %221 = load i64, ptr %17, align 8, !alias.scope !138, !noundef !7 - %222 = and i64 %221, %220 - %223 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %224 = getelementptr inbounds i8, ptr %223, i64 %.sroa.02.09.i - store i8 -1, ptr %224, align 1 - %225 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %226 = getelementptr i8, ptr %225, i64 %222 - %227 = getelementptr i8, ptr %226, i64 16 - store i8 -1, ptr %227, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %194, ptr noundef nonnull align 1 dereferenceable(24) %161, i64 24, i1 false) - br label %228 - -228: ; preds = %219, %205, %.lr.ph.i +220: ; preds = %193 + %221 = add i64 %.sroa.02.09.i, -16 + %222 = load i64, ptr %17, align 8, !alias.scope !138, !noundef !7 + %223 = and i64 %222, %221 + %224 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %225 = getelementptr inbounds i8, ptr %224, i64 %.sroa.02.09.i + store i8 -1, ptr %225, align 1 + %226 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %227 = getelementptr i8, ptr %226, i64 %223 + %228 = getelementptr i8, ptr %227, i64 16 + store i8 -1, ptr %228, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %195, ptr noundef nonnull align 1 dereferenceable(24) %162, i64 24, i1 false) + br label %229 + +229: ; preds = %220, %206, %155 %exitcond.not.i = icmp eq i64 %.sroa.02.09.i, %18 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, label %.lr.ph.i + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, label %155 -229: ; preds = %153 - %230 = landingpad { ptr, i32 } +230: ; preds = %153 + %231 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #25 unreachable -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit: ; preds = %228 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit: ; preds = %229 %.pre16.i = load i64, ptr %17, align 8, !alias.scope !138 %.pre16.i.fr = freeze i64 %.pre16.i %.pre17.i = add i64 %.pre16.i.fr, 1 - %231 = lshr i64 %.pre17.i, 3 - %232 = mul nuw i64 %231, 7 - %233 = icmp ult i64 %.pre16.i.fr, 8 - %spec.select = select i1 %233, i64 %.pre16.i.fr, i64 %232 + %232 = lshr i64 %.pre17.i, 3 + %233 = mul nuw i64 %232, 7 + %234 = icmp ult i64 %.pre16.i.fr, 8 + %spec.select = select i1 %234, i64 %.pre16.i.fr, i64 %233 %.pre = load i64, ptr %9, align 8, !alias.scope !138 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i - %234 = phi i64 [ %10, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] - %235 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] - %236 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %237 = sub i64 %235, %234 - store i64 %237, ptr %236, align 8, !alias.scope !138 + br label %235 + +235: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread + %236 = phi i64 [ %10, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] + %237 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] + %238 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %239 = sub i64 %237, %236 + store i64 %239, ptr %238, align 8, !alias.scope !138 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5), !noalias !138 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %.sroa.9.049.ph, %72 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %.sroa.5.051.ph, %72 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit" ] - %238 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %239 = insertvalue { i64, i64 } %238, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit", %235 + %.sroa.4.1.i = phi i64 [ undef, %235 ], [ %.sroa.9.049.ph, %72 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %235 ], [ %.sroa.5.051.ph, %72 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit" ] + %240 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %241 = insertvalue { i64, i64 } %240, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h852a4cd86cdebbbeE.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h852a4cd86cdebbbeE.exit: ; preds = %14, %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i - %.merged.i = phi { i64, i64 } [ %15, %14 ], [ %239, %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i ] + %.merged.i = phi { i64, i64 } [ %15, %14 ], [ %241, %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/hyperscan/optimized/mcclellancompile.ll b/bench/hyperscan/optimized/mcclellancompile.ll index 1ccb81f4d9d..4773e4b8280 100644 --- a/bench/hyperscan/optimized/mcclellancompile.ll +++ b/bench/hyperscan/optimized/mcclellancompile.ll @@ -2654,6 +2654,10 @@ _ZNSt5queueItSt5dequeItSaItEEEC2IS2_vEEv.exit.i: ; preds = %_ZN3ue212_GLOBAL__N %261 = getelementptr inbounds nuw i8, ptr %259, i64 24 %262 = load ptr, ptr %261, align 8 %263 = load ptr, ptr %260, align 8 + %.not.i30.i = icmp eq ptr %262, %263 + br i1 %.not.i30.i, label %279, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i + +_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i: ; preds = %_ZNSt5queueItSt5dequeItSaItEEEC2IS2_vEEv.exit.i %264 = ptrtoint ptr %262 to i64 %265 = ptrtoint ptr %263 to i64 %266 = sub i64 %264, %265 @@ -2663,10 +2667,6 @@ _ZNSt5queueItSt5dequeItSaItEEEC2IS2_vEEv.exit.i: ; preds = %_ZN3ue212_GLOBAL__N %270 = icmp ne i64 %269, 0 %271 = zext i1 %270 to i64 %272 = add nuw nsw i64 %268, %271 - %.not.i30.i = icmp eq i64 %272, 0 - br i1 %.not.i30.i, label %279, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i - -_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i: ; preds = %_ZNSt5queueItSt5dequeItSaItEEEC2IS2_vEEv.exit.i %273 = shl nuw nsw i64 %272, 3 %274 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %273) #23 to label %.noexc158.i unwind label %_ZNSt6vectorImSaImEED2Ev.exit.i.i diff --git a/bench/hyperscan/optimized/ng_mcclellan.ll b/bench/hyperscan/optimized/ng_mcclellan.ll index 78ea723e9a0..920677335bf 100644 --- a/bench/hyperscan/optimized/ng_mcclellan.ll +++ b/bench/hyperscan/optimized/ng_mcclellan.ll @@ -1972,9 +1972,9 @@ _ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolder %.phi.trans.insert.i.i = getelementptr inbounds nuw i8, ptr %67, i64 8 %.pre.i.i = load i64, ptr %.phi.trans.insert.i.i, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #25 - %.not243.i.i = icmp eq i64 %.pre.i.i, 0 + %.not242.i.i = icmp eq i64 %.pre.i.i, 0 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %14, i8 0, i64 16, i1 false) - br i1 %.not243.i.i, label %_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE6resizeEmRKS8_.exit.i.i.i, label %76 + br i1 %.not242.i.i, label %_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE6resizeEmRKS8_.exit.i.i.i, label %76 76: ; preds = %_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE5clearEv.exit.i.i.i invoke void @_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS8_SA_EEmRKS8_(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr null, i64 noundef %.pre.i.i, ptr noundef nonnull align 8 dereferenceable(16) %14) @@ -2208,12 +2208,12 @@ _ZN3ue2L12populateInitINS_8bitfieldILm256EEEEEvRKNS_8NGHolderERKNS_8flat_setINS_ br i1 %.not191.i.i, label %_ZNSt10_HashtableIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESt4pairIKS8_N5boost14dynamic_bitsetImSaImEEEESaISF_ENSt8__detail10_Select1stESt8equal_toIS8_ESt4hashIS8_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE5clearEv.exit.i.i.i.i, label %.lr.ph.i.i ._crit_edge.i.i: ; preds = %336 - %.pre240.i.i = load ptr, ptr %160, align 8 - %.not5.i.i.i.i.i.i = icmp eq ptr %.pre240.i.i, null + %.pre239.i.i = load ptr, ptr %160, align 8 + %.not5.i.i.i.i.i.i = icmp eq ptr %.pre239.i.i, null br i1 %.not5.i.i.i.i.i.i, label %_ZNSt10_HashtableIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESt4pairIKS8_N5boost14dynamic_bitsetImSaImEEEESaISF_ENSt8__detail10_Select1stESt8equal_toIS8_ESt4hashIS8_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE5clearEv.exit.i.i.i.i, label %.lr.ph.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i: ; preds = %._crit_edge.i.i, %_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKN3ue212graph_detail17vertex_descriptorINS3_9ue2_graphINS3_8NGHolderENS3_19NFAGraphVertexPropsENS3_17NFAGraphEdgePropsEEEEEN5boost14dynamic_bitsetImSaImEEEELb1EEEEE18_M_deallocate_nodeEPSI_.exit.i.i.i.i.i.i - %.06.i.i.i.i.i.i = phi ptr [ %162, %_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKN3ue212graph_detail17vertex_descriptorINS3_9ue2_graphINS3_8NGHolderENS3_19NFAGraphVertexPropsENS3_17NFAGraphEdgePropsEEEEEN5boost14dynamic_bitsetImSaImEEEELb1EEEEE18_M_deallocate_nodeEPSI_.exit.i.i.i.i.i.i ], [ %.pre240.i.i, %._crit_edge.i.i ] + %.06.i.i.i.i.i.i = phi ptr [ %162, %_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKN3ue212graph_detail17vertex_descriptorINS3_9ue2_graphINS3_8NGHolderENS3_19NFAGraphVertexPropsENS3_17NFAGraphEdgePropsEEEEEN5boost14dynamic_bitsetImSaImEEEELb1EEEEE18_M_deallocate_nodeEPSI_.exit.i.i.i.i.i.i ], [ %.pre239.i.i, %._crit_edge.i.i ] %162 = load ptr, ptr %.06.i.i.i.i.i.i, align 8 %163 = getelementptr inbounds nuw i8, ptr %.06.i.i.i.i.i.i, i64 24 %164 = load ptr, ptr %163, align 8 @@ -2415,9 +2415,9 @@ _ZNK3ue29CharReach9find_nextEm.exit.i.i.i: ; preds = %220, %213 .lr.ph.i29.i.i: ; preds = %.noexc33.i.i %250 = getelementptr inbounds nuw i8, ptr %.sroa.0164.0192.i.i, i64 48 %251 = load i64, ptr %250, align 8, !noalias !201 - %.fr213.i.i = freeze i64 %251 - %252 = add i64 %.fr213.i.i, -1 - %253 = icmp eq i64 %.fr213.i.i, 0 + %.fr212.i.i = freeze i64 %251 + %252 = add i64 %.fr212.i.i, -1 + %253 = icmp eq i64 %.fr212.i.i, 0 %254 = getelementptr inbounds nuw i8, ptr %.sroa.0164.0192.i.i, i64 32 br i1 %253, label %.lr.ph.i29.split.us.i.i, label %.lr.ph.i29.split.i.i @@ -2440,8 +2440,8 @@ _ZNK3ue29CharReach9find_nextEm.exit.i.i.i: ; preds = %220, %213 %265 = load i64, ptr %264, align 8, !alias.scope !201 %266 = or i64 %262, %265 store i64 %266, ptr %264, align 8, !alias.scope !201 - %.not214.i.i = icmp ult i64 %.06.i.i.i, %252 - br i1 %.not214.i.i, label %267, label %_ZN3ue212_GLOBAL__N_112Graph_Traits11copy_statesERKN5boost14dynamic_bitsetImSaImEEEj.exit.i.i + %.not213.i.i = icmp ult i64 %.06.i.i.i, %252 + br i1 %.not213.i.i, label %267, label %_ZN3ue212_GLOBAL__N_112Graph_Traits11copy_statesERKN5boost14dynamic_bitsetImSaImEEEj.exit.i.i 267: ; preds = %.lr.ph.i29.split.i.i %268 = add nuw nsw i64 %.06.i.i.i, 1 @@ -2679,16 +2679,15 @@ _ZNSt6vectorIN3ue29CharReachESaIS1_EED2Ev.exit.i.i: ; preds = %344, %_ZN3ue2L10p 348: ; preds = %_ZNSt6vectorIN3ue29CharReachESaIS1_EED2Ev.exit.i.i, %_ZNSt6vectorIN3ue29CharReachESaIS1_EED2Ev.exit.i.i, %_ZNSt6vectorIN3ue29CharReachESaIS1_EED2Ev.exit.i.i call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #25 %349 = load i32, ptr %49, align 8 - %.fr.i.i = freeze i32 %349 - %350 = zext i32 %.fr.i.i to i64 + %350 = zext i32 %349 to i64 %351 = getelementptr inbounds nuw i8, ptr %18, i64 24 - %352 = add nuw nsw i64 %350, 63 - %353 = lshr i64 %352, 6 - %.not.i38.i.i = icmp eq i32 %.fr.i.i, 0 + %.not.i38.i.i = icmp eq i32 %349, 0 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %18, i8 0, i64 24, i1 false) br i1 %.not.i38.i.i, label %364, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i.i _ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i.i: ; preds = %348 + %352 = add nuw nsw i64 %350, 63 + %353 = lshr i64 %352, 6 %354 = getelementptr inbounds nuw i8, ptr %18, i64 8 %355 = getelementptr inbounds nuw i8, ptr %18, i64 16 %356 = shl nuw nsw i64 %353, 3 @@ -2889,8 +2888,8 @@ _ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i138.i.i: ; preds = %select.un %427 = load i64, ptr %426, align 8, !alias.scope !209 %428 = or i64 %424, %427 store i64 %428, ptr %426, align 8, !alias.scope !209 - %.not215.i.i = icmp ult i64 %.06.i41.i.i, %416 - br i1 %.not215.i.i, label %429, label %.sink.split.i.i + %.not214.i.i = icmp ult i64 %.06.i41.i.i, %416 + br i1 %.not214.i.i, label %429, label %.sink.split.i.i 429: ; preds = %.lr.ph.i40.i.i %430 = add nuw nsw i64 %.06.i41.i.i, 1 @@ -4191,13 +4190,13 @@ _ZNSt6vectorIN3ue29CharReachESaIS1_EED2Ev.exit.i.i97: ; preds = %928, %_ZN3ue2L1 %933 = load i32, ptr %545, align 8 %934 = zext i32 %933 to i64 %935 = getelementptr inbounds nuw i8, ptr %13, i64 24 - %936 = add nuw nsw i64 %934, 63 - %937 = lshr i64 %936, 6 %.not.i101.i.i = icmp eq i32 %933, 0 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %13, i8 0, i64 24, i1 false) br i1 %.not.i101.i.i, label %948, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i.i98 _ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i.i98: ; preds = %932 + %936 = add nuw nsw i64 %934, 63 + %937 = lshr i64 %936, 6 %938 = getelementptr inbounds nuw i8, ptr %13, i64 8 %939 = getelementptr inbounds nuw i8, ptr %13, i64 16 %940 = shl nuw nsw i64 %937, 3 diff --git a/bench/hyperscan/optimized/ng_misc_opt.ll b/bench/hyperscan/optimized/ng_misc_opt.ll index 09e84daba68..d3e32216298 100644 --- a/bench/hyperscan/optimized/ng_misc_opt.ll +++ b/bench/hyperscan/optimized/ng_misc_opt.ll @@ -8824,20 +8824,20 @@ _ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceISt6vectorIhSaIhEESaIvELN9_ call void @llvm.memset.p0.i64(ptr align 1 %26, i8 0, i64 %32, i1 false), !noalias !749 %33 = load i64, ptr %5, align 8 %34 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %35 = lshr i64 %33, 6 - %36 = and i64 %33, 63 - %37 = icmp ne i64 %36, 0 - %38 = zext i1 %37 to i64 - %39 = add nuw nsw i64 %35, %38 - %.not.i = icmp eq i64 %39, 0 + %.not.i = icmp eq i64 %33, 0 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %34, i8 0, i64 32, i1 false) - br i1 %.not.i, label %45, label %40 - -40: ; preds = %25 - invoke void @_ZNSt6vectorImSaImEE17_M_default_appendEm(ptr noundef nonnull align 8 dereferenceable(32) %34, i64 noundef %39) + br i1 %.not.i, label %45, label %35 + +35: ; preds = %25 + %36 = lshr i64 %33, 6 + %37 = and i64 %33, 63 + %38 = icmp ne i64 %37, 0 + %39 = zext i1 %38 to i64 + %40 = add nuw nsw i64 %36, %39 + invoke void @_ZNSt6vectorImSaImEE17_M_default_appendEm(ptr noundef nonnull align 8 dereferenceable(32) %34, i64 noundef %40) to label %45 unwind label %41 -41: ; preds = %40 +41: ; preds = %35 %42 = landingpad { ptr, i32 } cleanup %43 = load ptr, ptr %34, align 8 @@ -8848,7 +8848,7 @@ _ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceISt6vectorIhSaIhEESaIvELN9_ call void @_ZdlPv(ptr noundef nonnull %43) #26 br label %.body10 -45: ; preds = %40, %25 +45: ; preds = %35, %25 %46 = getelementptr inbounds nuw i8, ptr %0, i64 96 store i64 %33, ptr %46, align 8 ret void diff --git a/bench/image-rs/optimized/244uszkx0e8t5ie1.ll b/bench/image-rs/optimized/244uszkx0e8t5ie1.ll index f1602ea6b75..cf3a4b08ca9 100644 --- a/bench/image-rs/optimized/244uszkx0e8t5ie1.ll +++ b/bench/image-rs/optimized/244uszkx0e8t5ie1.ll @@ -9884,15 +9884,15 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(256) %4, i8 0, i64 256, i1 false) %6 = getelementptr inbounds nuw i8, ptr %1, i64 20 %7 = load i32, ptr %6, align 4, !alias.scope !1262, !noundef !7 + %.not.i78 = icmp eq i32 %7, 0 + br i1 %.not.i78, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %2 %8 = lshr i32 %7, 3 %9 = and i32 %7, 7 %.not.i.i.i = icmp ne i32 %9, 0 %10 = zext i1 %.not.i.i.i to i32 %.0.i.i.i = add nuw nsw i32 %8, %10 - %.not.i78 = icmp eq i32 %.0.i.i.i, 0 - br i1 %.not.i78, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %2 %11 = getelementptr inbounds nuw i8, ptr %1, i64 16 %12 = load i32, ptr %11, align 8, !alias.scope !1267, !noundef !7 %13 = lshr i32 %12, 3 @@ -9924,7 +9924,7 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ %.sroa.041.080 = phi i32 [ 0, %.lr.ph ], [ %30, %.loopexit ] %.sroa.6.079 = phi i32 [ %.0.i.i.i, %.lr.ph ], [ %31, %.loopexit ] %30 = add i32 %.sroa.041.080, 8 - %31 = add nsw i32 %.sroa.6.079, -1 + %31 = add i32 %.sroa.6.079, -1 br label %32 ._crit_edge: ; preds = %.loopexit, %54, %2 @@ -10062,15 +10062,15 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(256) %4, i8 0, i64 256, i1 false) %6 = getelementptr inbounds nuw i8, ptr %1, i64 20 %7 = load i32, ptr %6, align 4, !alias.scope !1289, !noundef !7 + %.not.i78 = icmp eq i32 %7, 0 + br i1 %.not.i78, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %2 %8 = lshr i32 %7, 3 %9 = and i32 %7, 7 %.not.i.i.i = icmp ne i32 %9, 0 %10 = zext i1 %.not.i.i.i to i32 %.0.i.i.i = add nuw nsw i32 %8, %10 - %.not.i78 = icmp eq i32 %.0.i.i.i, 0 - br i1 %.not.i78, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %2 %11 = getelementptr inbounds nuw i8, ptr %1, i64 16 %12 = load i32, ptr %11, align 8, !alias.scope !1294, !noundef !7 %13 = lshr i32 %12, 3 @@ -10102,7 +10102,7 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ %.sroa.041.080 = phi i32 [ 0, %.lr.ph ], [ %30, %.loopexit ] %.sroa.6.079 = phi i32 [ %.0.i.i.i, %.lr.ph ], [ %31, %.loopexit ] %30 = add i32 %.sroa.041.080, 8 - %31 = add nsw i32 %.sroa.6.079, -1 + %31 = add i32 %.sroa.6.079, -1 br label %32 ._crit_edge: ; preds = %.loopexit, %54, %2 @@ -10252,15 +10252,15 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %6, i8 0, i64 64, i1 false) %12 = getelementptr inbounds nuw i8, ptr %1, i64 20 %13 = load i32, ptr %12, align 4, !alias.scope !1313, !noundef !7 + %.not.i121 = icmp eq i32 %13, 0 + br i1 %.not.i121, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %2 %14 = lshr i32 %13, 3 %15 = and i32 %13, 7 %.not.i.i.i = icmp ne i32 %15, 0 %16 = zext i1 %.not.i.i.i to i32 %.0.i.i.i = add nuw nsw i32 %14, %16 - %.not.i121 = icmp eq i32 %.0.i.i.i, 0 - br i1 %.not.i121, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %2 %17 = getelementptr inbounds nuw i8, ptr %1, i64 16 %18 = load i32, ptr %17, align 8, !alias.scope !1318, !noundef !7 %19 = lshr i32 %18, 3 @@ -10304,7 +10304,7 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ %.sroa.6.0123 = phi i32 [ %.0.i.i.i, %.lr.ph ], [ %47, %.loopexit ] %.sroa.079.0122 = phi i32 [ 0, %.lr.ph ], [ %46, %.loopexit ] %46 = add i32 %.sroa.079.0122, 8 - %47 = add nsw i32 %.sroa.6.0123, -1 + %47 = add i32 %.sroa.6.0123, -1 br label %48 ._crit_edge: ; preds = %.loopexit, %100, %112, %116, %2 @@ -10546,15 +10546,15 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %6, i8 0, i64 64, i1 false) %12 = getelementptr inbounds nuw i8, ptr %1, i64 20 %13 = load i32, ptr %12, align 4, !alias.scope !1354, !noundef !7 + %.not.i121 = icmp eq i32 %13, 0 + br i1 %.not.i121, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %2 %14 = lshr i32 %13, 3 %15 = and i32 %13, 7 %.not.i.i.i = icmp ne i32 %15, 0 %16 = zext i1 %.not.i.i.i to i32 %.0.i.i.i = add nuw nsw i32 %14, %16 - %.not.i121 = icmp eq i32 %.0.i.i.i, 0 - br i1 %.not.i121, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %2 %17 = getelementptr inbounds nuw i8, ptr %1, i64 16 %18 = load i32, ptr %17, align 8, !alias.scope !1359, !noundef !7 %19 = lshr i32 %18, 3 @@ -10598,7 +10598,7 @@ define internal fastcc noundef ptr @"_ZN5image6codecs4jpeg7encoder20JpegEncoder$ %.sroa.6.0123 = phi i32 [ %.0.i.i.i, %.lr.ph ], [ %47, %.loopexit ] %.sroa.079.0122 = phi i32 [ 0, %.lr.ph ], [ %46, %.loopexit ] %46 = add i32 %.sroa.079.0122, 8 - %47 = add nsw i32 %.sroa.6.0123, -1 + %47 = add i32 %.sroa.6.0123, -1 br label %48 ._crit_edge: ; preds = %.loopexit, %101, %113, %117, %2 diff --git a/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll b/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll index daf865b20d4..f2aa4f6eac4 100644 --- a/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll +++ b/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll @@ -56,8 +56,6 @@ target triple = "x86_64-unknown-linux-gnu" @anon.3a573e31fa13f546b6d503667aff8f01.62 = private unnamed_addr constant <{ [121 x i8] }> <{ [121 x i8] c"/home/dtcxzyw/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2/arrow-buffer-50.0.0/src/buffer/mutable.rs" }>, align 1 @anon.3a573e31fa13f546b6d503667aff8f01.63 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.3a573e31fa13f546b6d503667aff8f01.62, [16 x i8] c"y\00\00\00\00\00\00\00I\00\00\00C\00\00\00" }>, align 8 @anon.3a573e31fa13f546b6d503667aff8f01.66 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.3a573e31fa13f546b6d503667aff8f01.60, [16 x i8] c"x\00\00\00\00\00\00\00R\00\00\00\05\00\00\00" }>, align 8 -@anon.3a573e31fa13f546b6d503667aff8f01.69 = private unnamed_addr constant <{ [122 x i8] }> <{ [122 x i8] c"/home/dtcxzyw/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2/arrow-buffer-50.0.0/src/builder/boolean.rs" }>, align 1 -@anon.3a573e31fa13f546b6d503667aff8f01.71 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.3a573e31fa13f546b6d503667aff8f01.69, [16 x i8] c"z\00\00\00\00\00\00\00\A2\00\00\00<\00\00\00" }>, align 8 @anon.3a573e31fa13f546b6d503667aff8f01.72 = private unnamed_addr constant <{ [24 x i8] }> <{ [24 x i8] c"Array expects DataType::" }>, align 1 @anon.3a573e31fa13f546b6d503667aff8f01.73 = private unnamed_addr constant <{ ptr, [8 x i8], ptr, [8 x i8], ptr, [8 x i8] }> <{ ptr @anon.3a573e31fa13f546b6d503667aff8f01.11, [8 x i8] zeroinitializer, ptr @anon.3a573e31fa13f546b6d503667aff8f01.11, [8 x i8] zeroinitializer, ptr @anon.3a573e31fa13f546b6d503667aff8f01.72, [8 x i8] c"\18\00\00\00\00\00\00\00" }>, align 8 @anon.3a573e31fa13f546b6d503667aff8f01.74 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.3a573e31fa13f546b6d503667aff8f01.19, [16 x i8] c"z\00\00\00\00\00\00\00\EC\01\00\00\09\00\00\00" }>, align 8 @@ -729,8 +727,8 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd44654158 store i64 128, ptr %9, align 8 %.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 8 store i64 %37, ptr %.sroa.4.0..sroa_idx, align 8 - %.sroa.528.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 16 - store ptr %.0.i, ptr %.sroa.528.0..sroa_idx, align 8 + %.sroa.527.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 16 + store ptr %.0.i, ptr %.sroa.527.0..sroa_idx, align 8 %.sroa.6.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 24 %44 = getelementptr inbounds nuw i8, ptr %9, i64 32 %45 = getelementptr inbounds nuw i8, ptr %1, i64 72 @@ -739,22 +737,22 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd44654158 %47 = icmp eq ptr %46, null br i1 %47, label %._crit_edge.i, label %48 -"_ZN4core6option19Option$LT$$RF$T$GT$6cloned17h94d15cf511857d9aE.exit": ; preds = %"_ZN77_$LT$arrow_buffer..buffer..null..NullBuffer$u20$as$u20$core..clone..Clone$GT$5clone17h3e513d09b4d6aea3E.llvm.171605402441639591.exit.i", %17, %98 +"_ZN4core6option19Option$LT$$RF$T$GT$6cloned17h94d15cf511857d9aE.exit": ; preds = %"_ZN77_$LT$arrow_buffer..buffer..null..NullBuffer$u20$as$u20$core..clone..Clone$GT$5clone17h3e513d09b4d6aea3E.llvm.171605402441639591.exit.i", %17, %97 ret void 48: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd446541586E.llvm.12936710431969675094.exit invoke void @_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder13append_buffer17hbe88d65e20dd880fE(ptr noalias noundef nonnull align 8 dereferenceable(40) %9, ptr noalias noundef nonnull readonly align 8 dereferenceable(40) %45) - to label %76 unwind label %49 + to label %75 unwind label %49 -49: ; preds = %122, %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i, %.thread29, %58, %97, %48 +49: ; preds = %121, %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i, %58, %96, %48 %50 = landingpad { ptr, i32 } cleanup br label %.body -.body: ; preds = %91, %49 - %eh.lpad-body = phi { ptr, i32 } [ %50, %49 ], [ %92, %91 ] +.body: ; preds = %90, %49 + %eh.lpad-body = phi { ptr, i32 } [ %50, %49 ], [ %91, %90 ] invoke void @"_ZN86_$LT$arrow_buffer..buffer..mutable..MutableBuffer$u20$as$u20$core..ops..drop..Drop$GT$4drop17h88adb87742f498e4E"(ptr noalias noundef nonnull align 8 dereferenceable(40) %9) - to label %"_ZN4core3ptr73drop_in_place$LT$arrow_buffer..builder..boolean..BooleanBufferBuilder$GT$17h29fb1d42be871d16E.exit" unwind label %129 + to label %"_ZN4core3ptr73drop_in_place$LT$arrow_buffer..builder..boolean..BooleanBufferBuilder$GT$17h29fb1d42be871d16E.exit" unwind label %128 ._crit_edge.i: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd446541586E.llvm.12936710431969675094.exit %51 = lshr i64 %.val, 5 @@ -763,11 +761,11 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd44654158 %54 = zext i1 %53 to i64 %55 = add nuw nsw i64 %51, %54 %.not = icmp eq i64 %55, 0 - br i1 %.not, label %.thread, label %56 + br i1 %.not, label %65, label %56 56: ; preds = %._crit_edge.i %57 = icmp samesign ugt i64 %55, %37 - br i1 %57, label %58, label %62 + br i1 %57, label %58, label %_ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i 58: ; preds = %56 %59 = add nuw nsw i64 %55, 63 @@ -779,80 +777,72 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd44654158 .noexc22: ; preds = %58 %.pre18.i = load i64, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !83 - %.pre = load ptr, ptr %.sroa.528.0..sroa_idx, align 8, !alias.scope !83 - br label %62 + %.pre = load ptr, ptr %.sroa.527.0..sroa_idx, align 8, !alias.scope !83 + br label %_ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i + +_ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i: ; preds = %.noexc22, %56 + %62 = phi ptr [ %.0.i, %56 ], [ %.pre, %.noexc22 ] + %63 = phi i64 [ 0, %56 ], [ %.pre18.i, %.noexc22 ] + %64 = getelementptr inbounds i8, ptr %62, i64 %63 + call void @llvm.memset.p0.i64(ptr nonnull align 1 %64, i8 -1, i64 %55, i1 false) + br label %65 -62: ; preds = %56, %.noexc22 - %63 = phi ptr [ %.0.i, %56 ], [ %.pre, %.noexc22 ] - %64 = phi i64 [ 0, %56 ], [ %.pre18.i, %.noexc22 ] - %65 = getelementptr inbounds i8, ptr %63, i64 %64 - call void @llvm.memset.p0.i64(ptr nonnull align 1 %65, i8 -1, i64 %55, i1 false) +65: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i, %._crit_edge.i store i64 %55, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !83 %66 = icmp eq i64 %52, 0 - br i1 %66, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, label %68 - -.thread: ; preds = %._crit_edge.i - %67 = icmp eq i64 %52, 0 - br i1 %67, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, label %.thread29 - -.thread29: ; preds = %.thread - invoke void @_ZN4core9panicking5panic17h195fc2a96298d4c3E(ptr noalias noundef nonnull readonly align 1 @anon.3a573e31fa13f546b6d503667aff8f01.18.llvm.12936710431969675094, i64 noundef 43, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.3a573e31fa13f546b6d503667aff8f01.71) #32 - to label %.noexc23 unwind label %49 - -.noexc23: ; preds = %.thread29 - unreachable - -68: ; preds = %62 - %69 = load ptr, ptr %.sroa.528.0..sroa_idx, align 8, !alias.scope !83, !nonnull !4 - %70 = add nsw i64 %55, -1 - %71 = getelementptr inbounds nuw [0 x i8], ptr %69, i64 0, i64 %70 - %72 = trunc nuw nsw i64 %52 to i8 - %notmask16.i = shl nsw i8 -1, %72 - %73 = xor i8 %notmask16.i, -1 - %74 = load i8, ptr %71, align 1, !noundef !4 - %75 = and i8 %74, %73 - store i8 %75, ptr %71, align 1 + br i1 %66, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, label %67 + +67: ; preds = %65 + %68 = trunc nuw nsw i64 %52 to i8 + %notmask16.i = shl nsw i8 -1, %68 + %69 = xor i8 %notmask16.i, -1 + %70 = load ptr, ptr %.sroa.527.0..sroa_idx, align 8, !alias.scope !83, !nonnull !4 + %71 = add nsw i64 %55, -1 + %72 = getelementptr inbounds nuw [0 x i8], ptr %70, i64 0, i64 %71 + %73 = load i8, ptr %72, align 1, !noundef !4 + %74 = and i8 %73, %69 + store i8 %74, ptr %72, align 1 br label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit -_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit: ; preds = %.thread, %62, %68 +_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit: ; preds = %65, %67 store i64 %33, ptr %44, align 8, !alias.scope !83 - br label %76 - -76: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, %48 - %77 = getelementptr inbounds nuw i8, ptr %1, i64 56 - %78 = load ptr, ptr %77, align 8, !nonnull !4, !noundef !4 - %79 = getelementptr inbounds nuw i32, ptr %78, i64 %33 - %80 = icmp ult i64 %.val, 4 - br i1 %80, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %76 - %81 = getelementptr inbounds nuw i8, ptr %11, i64 32 - %82 = getelementptr inbounds nuw i8, ptr %11, i64 8 - %83 = getelementptr inbounds nuw i8, ptr %11, i64 24 - br label %99 - -._crit_edge: ; preds = %106, %76 + br label %75 + +75: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, %48 + %76 = getelementptr inbounds nuw i8, ptr %1, i64 56 + %77 = load ptr, ptr %76, align 8, !nonnull !4, !noundef !4 + %78 = getelementptr inbounds nuw i32, ptr %77, i64 %33 + %79 = icmp ult i64 %.val, 4 + br i1 %79, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %75 + %80 = getelementptr inbounds nuw i8, ptr %11, i64 32 + %81 = getelementptr inbounds nuw i8, ptr %11, i64 8 + %82 = getelementptr inbounds nuw i8, ptr %11, i64 24 + br label %98 + +._crit_edge: ; preds = %105, %75 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) call void @llvm.experimental.noalias.scope.decl(metadata !86) %.sroa.05.0.copyload.i = load i64, ptr %9, align 8, !alias.scope !86, !noalias !89 %.sroa.46.0.copyload.i = load i64, ptr %.sroa.4.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 - %.sroa.57.0.copyload.i = load ptr, ptr %.sroa.528.0..sroa_idx, align 8, !alias.scope !86, !noalias !89, !nonnull !4, !noundef !4 + %.sroa.57.0.copyload.i = load ptr, ptr %.sroa.527.0..sroa_idx, align 8, !alias.scope !86, !noalias !89, !nonnull !4, !noundef !4 %.sroa.68.0.copyload.i = load i64, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 store i64 128, ptr %9, align 8, !alias.scope !86, !noalias !89 store i64 0, ptr %.sroa.4.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 - store ptr inttoptr (i64 128 to ptr), ptr %.sroa.528.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 + store ptr inttoptr (i64 128 to ptr), ptr %.sroa.527.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 store i64 0, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 - %84 = load i64, ptr %44, align 8, !alias.scope !86, !noalias !89, !noundef !4 + %83 = load i64, ptr %44, align 8, !alias.scope !86, !noalias !89, !noundef !4 store i64 0, ptr %44, align 8, !alias.scope !86, !noalias !89 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !91 call void @llvm.experimental.noalias.scope.decl(metadata !92) call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %5), !noalias !95 store i64 1, ptr %5, align 8, !noalias !95 - %85 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store i64 1, ptr %85, align 8, !noalias !95 - %86 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 0, ptr %86, align 8, !noalias !99 + %84 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store i64 1, ptr %84, align 8, !noalias !95 + %85 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 0, ptr %85, align 8, !noalias !99 %.sroa.4.0..sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 24 store i64 %.sroa.05.0.copyload.i, ptr %.sroa.4.0..sroa_idx.i.i, align 8, !noalias !99 %.sroa.5.0..sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 32 @@ -861,47 +851,47 @@ _ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88 store ptr %.sroa.57.0.copyload.i, ptr %.sroa.6.0..sroa_idx11.i.i, align 8, !noalias !99 %.sroa.7.0..sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 %.sroa.68.0.copyload.i, ptr %.sroa.7.0..sroa_idx.i.i, align 8, !noalias !99 - %87 = load volatile i8, ptr @__rust_no_alloc_shim_is_unstable, align 1, !noalias !100 - %88 = call noundef align 8 dereferenceable_or_null(56) ptr @__rust_alloc(i64 noundef range(i64 48, 897) 56, i64 noundef range(i64 8, 129) 8) #31, !noalias !100 - %89 = icmp eq ptr %88, null - br i1 %89, label %90, label %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i + %86 = load volatile i8, ptr @__rust_no_alloc_shim_is_unstable, align 1, !noalias !100 + %87 = call noundef align 8 dereferenceable_or_null(56) ptr @__rust_alloc(i64 noundef range(i64 48, 897) 56, i64 noundef range(i64 8, 129) 8) #31, !noalias !100 + %88 = icmp eq ptr %87, null + br i1 %88, label %89, label %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i -90: ; preds = %._crit_edge +89: ; preds = %._crit_edge invoke void @_ZN5alloc5alloc18handle_alloc_error17h7d585e222775d2b3E(i64 noundef 8, i64 noundef 56) #32 - to label %.noexc.i.i.i unwind label %91, !noalias !95 + to label %.noexc.i.i.i unwind label %90, !noalias !95 -.noexc.i.i.i: ; preds = %90 +.noexc.i.i.i: ; preds = %89 unreachable -91: ; preds = %90 - %92 = landingpad { ptr, i32 } +90: ; preds = %89 + %91 = landingpad { ptr, i32 } cleanup invoke void @"_ZN4core3ptr76drop_in_place$LT$alloc..sync..ArcInner$LT$arrow_buffer..bytes..Bytes$GT$$GT$17hddd689cb55906b13E"(ptr noalias noundef nonnull align 8 dereferenceable(56) %5) #29 - to label %.body unwind label %93, !noalias !95 + to label %.body unwind label %92, !noalias !95 -93: ; preds = %91 - %94 = landingpad { ptr, i32 } +92: ; preds = %90 + %93 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hd44bb2114362504eE() #30, !noalias !95 unreachable _ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i: ; preds = %._crit_edge - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %88, ptr noundef nonnull align 8 dereferenceable(56) %5, i64 56, i1 false), !noalias !95 + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %87, ptr noundef nonnull align 8 dereferenceable(56) %5, i64 56, i1 false), !noalias !95 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5), !noalias !95 - store ptr %88, ptr %6, align 8, !alias.scope !92, !noalias !103 - %95 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr %.sroa.57.0.copyload.i, ptr %95, align 8, !alias.scope !92, !noalias !103 - %96 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 %.sroa.68.0.copyload.i, ptr %96, align 8, !alias.scope !92, !noalias !103 - invoke void @_ZN12arrow_buffer6buffer7boolean13BooleanBuffer3new17hb61e88c67471e6baE(ptr noalias noundef nonnull sret({ { ptr, ptr, i64 }, i64, i64 }) align 8 captures(none) dereferenceable(40) %7, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(24) %6, i64 noundef 0, i64 noundef %84) - to label %97 unwind label %49 - -97: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i + store ptr %87, ptr %6, align 8, !alias.scope !92, !noalias !103 + %94 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr %.sroa.57.0.copyload.i, ptr %94, align 8, !alias.scope !92, !noalias !103 + %95 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 %.sroa.68.0.copyload.i, ptr %95, align 8, !alias.scope !92, !noalias !103 + invoke void @_ZN12arrow_buffer6buffer7boolean13BooleanBuffer3new17hb61e88c67471e6baE(ptr noalias noundef nonnull sret({ { ptr, ptr, i64 }, i64, i64 }) align 8 captures(none) dereferenceable(40) %7, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(24) %6, i64 noundef 0, i64 noundef %83) + to label %96 unwind label %49 + +96: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !91 invoke void @"_ZN130_$LT$arrow_buffer..buffer..null..NullBuffer$u20$as$u20$core..convert..From$LT$arrow_buffer..buffer..boolean..BooleanBuffer$GT$$GT$4from17h9e49cc6f18f24971E"(ptr noalias noundef nonnull sret({ { { ptr, ptr, i64 }, i64, i64 }, i64 }) align 8 captures(none) dereferenceable(48) %8, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(40) %7) - to label %98 unwind label %49 + to label %97 unwind label %49 -98: ; preds = %97 +97: ; preds = %96 call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 8 dereferenceable(48) %8, i64 48, i1 false) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) @@ -909,68 +899,68 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) br label %"_ZN4core6option19Option$LT$$RF$T$GT$6cloned17h94d15cf511857d9aE.exit" -99: ; preds = %.lr.ph, %106 - %.sroa.0.038 = phi ptr [ %78, %.lr.ph ], [ %100, %106 ] - %.sroa.7.037 = phi i64 [ 0, %.lr.ph ], [ %101, %106 ] - %100 = getelementptr inbounds nuw i8, ptr %.sroa.0.038, i64 4 - %101 = add nuw nsw i64 %.sroa.7.037, 1 - %102 = load i32, ptr %.sroa.0.038, align 4, !noundef !4 - %103 = sext i32 %102 to i64 - %104 = load i64, ptr %81, align 8, !noundef !4 - %105 = icmp ugt i64 %104, %103 - br i1 %105, label %108, label %106 - -106: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, %99, %108 - %107 = icmp eq ptr %100, %79 - br i1 %107, label %._crit_edge, label %99 - -108: ; preds = %99 +98: ; preds = %.lr.ph, %105 + %.sroa.0.034 = phi ptr [ %77, %.lr.ph ], [ %99, %105 ] + %.sroa.7.033 = phi i64 [ 0, %.lr.ph ], [ %100, %105 ] + %99 = getelementptr inbounds nuw i8, ptr %.sroa.0.034, i64 4 + %100 = add nuw nsw i64 %.sroa.7.033, 1 + %101 = load i32, ptr %.sroa.0.034, align 4, !noundef !4 + %102 = sext i32 %101 to i64 + %103 = load i64, ptr %80, align 8, !noundef !4 + %104 = icmp ugt i64 %103, %102 + br i1 %104, label %107, label %105 + +105: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, %98, %107 + %106 = icmp eq ptr %99, %78 + br i1 %106, label %._crit_edge, label %98 + +107: ; preds = %98 call void @llvm.experimental.noalias.scope.decl(metadata !104) - %109 = load ptr, ptr %82, align 8, !alias.scope !104, !noundef !4 - %110 = load i64, ptr %83, align 8, !alias.scope !104, !noundef !4 - %111 = add i64 %110, %103 - %112 = lshr i64 %111, 3 - %113 = getelementptr inbounds nuw i8, ptr %109, i64 %112 - %114 = load i8, ptr %113, align 1, !noalias !104, !noundef !4 + %108 = load ptr, ptr %81, align 8, !alias.scope !104, !noundef !4 + %109 = load i64, ptr %82, align 8, !alias.scope !104, !noundef !4 + %110 = add i64 %109, %102 + %111 = lshr i64 %110, 3 + %112 = getelementptr inbounds nuw i8, ptr %108, i64 %111 + %113 = load i8, ptr %112, align 1, !noalias !104, !noundef !4 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4), !noalias !104 store <8 x i8> , ptr %4, align 8, !noalias !104 - %115 = and i64 %111, 7 - %116 = getelementptr inbounds nuw [8 x i8], ptr %4, i64 0, i64 %115 - %117 = load i8, ptr %116, align 1, !noalias !104, !noundef !4 - %118 = and i8 %117, %114 - %.not36 = icmp eq i8 %118, 0 + %114 = and i64 %110, 7 + %115 = getelementptr inbounds nuw [8 x i8], ptr %4, i64 0, i64 %114 + %116 = load i8, ptr %115, align 1, !noalias !104, !noundef !4 + %117 = and i8 %116, %113 + %.not32 = icmp eq i8 %117, 0 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4), !noalias !104 - br i1 %.not36, label %119, label %106 + br i1 %.not32, label %118, label %105 -119: ; preds = %108 - %.val20 = load ptr, ptr %.sroa.528.0..sroa_idx, align 8, !nonnull !4, !noundef !4 +118: ; preds = %107 + %.val20 = load ptr, ptr %.sroa.527.0..sroa_idx, align 8, !nonnull !4, !noundef !4 %.val21 = load i64, ptr %.sroa.6.0..sroa_idx, align 8, !noundef !4 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) store <8 x i8> , ptr %3, align 8 - %120 = lshr i64 %.sroa.7.037, 3 - %121 = icmp ult i64 %120, %.val21 - br i1 %121, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, label %122, !prof !107 + %119 = lshr i64 %.sroa.7.033, 3 + %120 = icmp ult i64 %119, %.val21 + br i1 %120, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, label %121, !prof !107 -122: ; preds = %119 - invoke void @_ZN4core9panicking18panic_bounds_check17h326a19b32dc06d6dE(i64 noundef %120, i64 noundef %.val21, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.3a573e31fa13f546b6d503667aff8f01.66) #32 - to label %.noexc26 unwind label %49 +121: ; preds = %118 + invoke void @_ZN4core9panicking18panic_bounds_check17h326a19b32dc06d6dE(i64 noundef %119, i64 noundef %.val21, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.3a573e31fa13f546b6d503667aff8f01.66) #32 + to label %.noexc25 unwind label %49 -.noexc26: ; preds = %122 +.noexc25: ; preds = %121 unreachable -_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit: ; preds = %119 - %123 = and i64 %.sroa.7.037, 7 - %124 = getelementptr inbounds nuw [8 x i8], ptr %3, i64 0, i64 %123 - %125 = load i8, ptr %124, align 1, !noundef !4 - %126 = getelementptr inbounds nuw [0 x i8], ptr %.val20, i64 0, i64 %120 - %127 = load i8, ptr %126, align 1, !noundef !4 - %128 = and i8 %127, %125 - store i8 %128, ptr %126, align 1 +_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit: ; preds = %118 + %122 = and i64 %.sroa.7.033, 7 + %123 = getelementptr inbounds nuw [8 x i8], ptr %3, i64 0, i64 %122 + %124 = load i8, ptr %123, align 1, !noundef !4 + %125 = getelementptr inbounds nuw [0 x i8], ptr %.val20, i64 0, i64 %119 + %126 = load i8, ptr %125, align 1, !noundef !4 + %127 = and i8 %126, %124 + store i8 %127, ptr %125, align 1 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) - br label %106 + br label %105 -129: ; preds = %.body - %130 = landingpad { ptr, i32 } +128: ; preds = %.body + %129 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hd44bb2114362504eE() #30 unreachable diff --git a/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll b/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll index 41bf12219f7..f2f29b4eed4 100644 --- a/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll +++ b/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll @@ -1340,219 +1340,224 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val19 = load i64, ptr %6, align 8, !noundef !16 %7 = add i64 %.val19, 1 - %8 = lshr i64 %7, 4 - %9 = and i64 %7, 15 - %.not.i.i.i.i = icmp ne i64 %9, 0 - %10 = zext i1 %.not.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %8, %10 - %.not.i12.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not.i12.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit, label %.lr.ph.i + %.not.i12.i = icmp eq i64 %7, 0 + br i1 %.not.i12.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21: ; preds = %4 + %8 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %8) + %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + br label %._crit_edge .lr.ph.i: ; preds = %4 - %11 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %11) - br label %12 + %10 = lshr i64 %7, 4 + %11 = and i64 %7, 15 + %.not.i.i.i.i = icmp ne i64 %11, 0 + %12 = zext i1 %.not.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %10, %12 + %13 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %13) + br label %17 -12: ; preds = %12, %.lr.ph.i - %.sroa.52.014.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i ], [ %14, %12 ] - %.sroa.01.013.i = phi i64 [ 0, %.lr.ph.i ], [ %13, %12 ] - %13 = add i64 %.sroa.01.013.i, 16 - %14 = add nsw i64 %.sroa.52.014.i, -1 - %15 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.013.i - %16 = load <16 x i8>, ptr %15, align 16, !noalias !284 - %.lobit.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16, !noalias !287 - %.not.i.i = icmp eq i64 %14, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit, label %12 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.17.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds i8, ptr %.val, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val, i64 %.17.i, i1 false) +._crit_edge.i: ; preds = %17 + %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) + %spec.select31 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) + %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select31, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %15, align 8 + %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %16, align 8 store ptr %0, ptr %5, align 8 - %.not9 = icmp eq i64 %7, 0 - br i1 %.not9, label %._crit_edge, label %.lr.ph - -._crit_edge.loopexit: ; preds = %104 + br label %.lr.ph + +17: ; preds = %17, %.lr.ph.i + %.sroa.52.014.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i ], [ %19, %17 ] + %.sroa.01.013.i = phi i64 [ 0, %.lr.ph.i ], [ %18, %17 ] + %18 = add i64 %.sroa.01.013.i, 16 + %19 = add i64 %.sroa.52.014.i, -1 + %20 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.013.i + %21 = load <16 x i8>, ptr %20, align 16, !noalias !284 + %.lobit.i.i = ashr <16 x i8> %21, splat (i8 7) + %22 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %23 = or <2 x i64> %22, splat (i64 -9187201950435737472) + store <2 x i64> %23, ptr %20, align 16, !noalias !287 + %.not.i.i = icmp eq i64 %19, 0 + br i1 %.not.i.i, label %._crit_edge.i, label %17 + +._crit_edge.loopexit: ; preds = %105 %.pre = load i64, ptr %6, align 8 %.pre17 = add i64 %.pre, 1 - %23 = lshr i64 %.pre17, 3 - %24 = mul nuw i64 %23, 7 + %24 = lshr i64 %.pre17, 3 + %25 = mul nuw i64 %24, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit - %.pre-phi = phi i64 [ %24, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit ] - %25 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit ] - %26 = icmp ult i64 %25, 8 - %.sroa.08.0 = select i1 %26, i64 %25, i64 %.pre-phi - %27 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %28 = load i64, ptr %27, align 8, !noundef !16 - %29 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %30 = sub i64 %.sroa.08.0, %28 - store i64 %30, ptr %29, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %25, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21 ] + %26 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21 ] + %27 = icmp ult i64 %26, 8 + %.sroa.08.0 = select i1 %27, i64 %26, i64 %.pre-phi + %28 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %29 = load i64, ptr %28, align 8, !noundef !16 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %31 = sub i64 %.sroa.08.0, %29 + store i64 %31, ptr %30, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -31: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit - %32 = landingpad { ptr, i32 } +32: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit + %33 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h9bfc22970ab2eca4E"(ptr noalias noundef align 8 dereferenceable(24) %5) #33 - to label %107 unwind label %105 - -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit, %104 - %.sroa.02.08 = phi i64 [ %33, %104 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit ] - %33 = add nuw i64 %.sroa.02.08, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.08 - %36 = load i8, ptr %35, align 1, !noundef !16 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %104 - -37: ; preds = %.lr.ph + to label %108 unwind label %106 + +.lr.ph: ; preds = %._crit_edge.i, %105 + %.sroa.02.08 = phi i64 [ %34, %105 ], [ 0, %._crit_edge.i ] + %34 = add nuw i64 %.sroa.02.08, 1 + %35 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.08 + %37 = load i8, ptr %36, align 1, !noundef !16 + %.not = icmp eq i8 %37, -128 + br i1 %.not, label %38, label %105 + +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.08, -1 %.neg16 = mul i64 %2, %.neg - %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 + %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit -_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit: ; preds = %.preheader, %37 - %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) - to label %40 unwind label %31 +_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) + to label %41 unwind label %32 -40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !290) - %41 = load i64, ptr %6, align 8, !alias.scope !290, !noundef !16 - %42 = load ptr, ptr %0, align 8, !alias.scope !290, !nonnull !16, !noundef !16 - %.sroa.0.015.i = and i64 %41, %39 - %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.015.i - %.sroa.0.0.copyload.i1316.i = load <16 x i8>, ptr %43, align 1, !noalias !293 - %44 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1316.i, zeroinitializer - %45 = bitcast <16 x i1> %44 to i16 - %.not.i.not17.i = icmp eq i16 %45, 0 - br i1 %.not.i.not17.i, label %.lr.ph.i20, label %._crit_edge.i - -.lr.ph.i20: ; preds = %40, %.lr.ph.i20 - %.sroa.0.019.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i20 ], [ %.sroa.0.015.i, %40 ] - %.sroa.7.018.i = phi i64 [ %46, %.lr.ph.i20 ], [ 0, %40 ] - %46 = add i64 %.sroa.7.018.i, 16 - %47 = add i64 %46, %.sroa.0.019.i - %.sroa.0.0.i = and i64 %47, %41 - %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i - %.sroa.0.0.copyload.i13.i = load <16 x i8>, ptr %48, align 1, !noalias !293 - %49 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i, zeroinitializer - %50 = bitcast <16 x i1> %49 to i16 - %.not.i.not.i = icmp eq i16 %50, 0 - br i1 %.not.i.not.i, label %.lr.ph.i20, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i20, %40 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.015.i, %40 ], [ %.sroa.0.0.i, %.lr.ph.i20 ] - %.lcssa.i = phi i16 [ %45, %40 ], [ %50, %.lr.ph.i20 ] - %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %52 = zext nneg i16 %51 to i64 - %53 = add i64 %.sroa.0.0.lcssa.i, %52 - %54 = and i64 %53, %41 - %55 = getelementptr inbounds i8, ptr %42, i64 %54 - %56 = load i8, ptr %55, align 1, !noalias !290, !noundef !16 - %57 = icmp sgt i8 %56, -1 - br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit - -58: ; preds = %._crit_edge.i - %59 = load <16 x i8>, ptr %42, align 16, !noalias !296 - %60 = icmp slt <16 x i8> %59, zeroinitializer - %61 = bitcast <16 x i1> %60 to i16 - %62 = icmp ne i16 %61, 0 - tail call void @llvm.assume(i1 %62) - %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) - %64 = zext nneg i16 %63 to i64 + %42 = load i64, ptr %6, align 8, !alias.scope !290, !noundef !16 + %43 = load ptr, ptr %0, align 8, !alias.scope !290, !nonnull !16, !noundef !16 + %.sroa.0.015.i = and i64 %42, %40 + %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.015.i + %.sroa.0.0.copyload.i1316.i = load <16 x i8>, ptr %44, align 1, !noalias !293 + %45 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1316.i, zeroinitializer + %46 = bitcast <16 x i1> %45 to i16 + %.not.i.not17.i = icmp eq i16 %46, 0 + br i1 %.not.i.not17.i, label %.lr.ph.i21, label %._crit_edge.i20 + +.lr.ph.i21: ; preds = %41, %.lr.ph.i21 + %.sroa.0.019.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i21 ], [ %.sroa.0.015.i, %41 ] + %.sroa.7.018.i = phi i64 [ %47, %.lr.ph.i21 ], [ 0, %41 ] + %47 = add i64 %.sroa.7.018.i, 16 + %48 = add i64 %47, %.sroa.0.019.i + %.sroa.0.0.i = and i64 %48, %42 + %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i + %.sroa.0.0.copyload.i13.i = load <16 x i8>, ptr %49, align 1, !noalias !293 + %50 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i, zeroinitializer + %51 = bitcast <16 x i1> %50 to i16 + %.not.i.not.i = icmp eq i16 %51, 0 + br i1 %.not.i.not.i, label %.lr.ph.i21, label %._crit_edge.i20 + +._crit_edge.i20: ; preds = %.lr.ph.i21, %41 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.015.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i21 ] + %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i21 ] + %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %53 = zext nneg i16 %52 to i64 + %54 = add i64 %.sroa.0.0.lcssa.i, %53 + %55 = and i64 %54, %42 + %56 = getelementptr inbounds i8, ptr %43, i64 %55 + %57 = load i8, ptr %56, align 1, !noalias !290, !noundef !16 + %58 = icmp sgt i8 %57, -1 + br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit + +59: ; preds = %._crit_edge.i20 + %60 = load <16 x i8>, ptr %43, align 16, !noalias !296 + %61 = icmp slt <16 x i8> %60, zeroinitializer + %62 = bitcast <16 x i1> %61 to i16 + %63 = icmp ne i16 %62, 0 + tail call void @llvm.assume(i1 %63) + %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) + %65 = zext nneg i16 %64 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit: ; preds = %58, %._crit_edge.i - %.sroa.0.0.i8.i = phi i64 [ %64, %58 ], [ %54, %._crit_edge.i ] - %65 = sub i64 %.sroa.02.08, %.sroa.0.015.i - %66 = sub i64 %.sroa.0.0.i8.i, %.sroa.0.015.i - %67 = xor i64 %66, %65 - %.unshifted = and i64 %67, %41 - %68 = icmp ult i64 %.unshifted, 16 - br i1 %68, label %81, label %69 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit: ; preds = %59, %._crit_edge.i20 + %.sroa.0.0.i8.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i20 ] + %66 = sub i64 %.sroa.02.08, %.sroa.0.015.i + %67 = sub i64 %.sroa.0.0.i8.i, %.sroa.0.015.i + %68 = xor i64 %67, %66 + %.unshifted = and i64 %68, %42 + %69 = icmp ult i64 %.unshifted, 16 + br i1 %69, label %82, label %70 -69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit +70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit %.neg17 = xor i64 %.sroa.0.0.i8.i, -1 %.neg18 = mul i64 %2, %.neg17 - %70 = getelementptr inbounds i8, ptr %42, i64 %.neg18 - %71 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i8.i - %72 = load i8, ptr %71, align 1, !noundef !16 - %73 = lshr i64 %39, 57 - %74 = trunc nuw nsw i64 %73 to i8 - %75 = add i64 %.sroa.0.0.i8.i, -16 - %76 = and i64 %75, %41 - store i8 %74, ptr %71, align 1 - %77 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %78 = getelementptr i8, ptr %77, i64 %76 - %79 = getelementptr i8, ptr %78, i64 16 - store i8 %74, ptr %79, align 1 - %80 = icmp eq i8 %72, -1 - br i1 %80, label %95, label %.preheader - -81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit - %82 = lshr i64 %39, 57 - %83 = trunc nuw nsw i64 %82 to i8 - %84 = add i64 %.sroa.02.08, -16 - %85 = and i64 %41, %84 - %86 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.08 - store i8 %83, ptr %86, align 1 - %87 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %88 = getelementptr i8, ptr %87, i64 %85 - %89 = getelementptr i8, ptr %88, i64 16 - store i8 %83, ptr %89, align 1 - br label %104 - -.preheader: ; preds = %69, %.preheader - %.sroa.04.09.i = phi i64 [ %94, %.preheader ], [ 0, %69 ] - %90 = getelementptr inbounds nuw i8, ptr %38, i64 %.sroa.04.09.i - %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.sroa.04.09.i - %92 = load i8, ptr %90, align 1 + %71 = getelementptr inbounds i8, ptr %43, i64 %.neg18 + %72 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i8.i + %73 = load i8, ptr %72, align 1, !noundef !16 + %74 = lshr i64 %40, 57 + %75 = trunc nuw nsw i64 %74 to i8 + %76 = add i64 %.sroa.0.0.i8.i, -16 + %77 = and i64 %76, %42 + store i8 %75, ptr %72, align 1 + %78 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %79 = getelementptr i8, ptr %78, i64 %77 + %80 = getelementptr i8, ptr %79, i64 16 + store i8 %75, ptr %80, align 1 + %81 = icmp eq i8 %73, -1 + br i1 %81, label %96, label %.preheader + +82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit + %83 = lshr i64 %40, 57 + %84 = trunc nuw nsw i64 %83 to i8 + %85 = add i64 %.sroa.02.08, -16 + %86 = and i64 %42, %85 + %87 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.08 + store i8 %84, ptr %87, align 1 + %88 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %89 = getelementptr i8, ptr %88, i64 %86 + %90 = getelementptr i8, ptr %89, i64 16 + store i8 %84, ptr %90, align 1 + br label %105 + +.preheader: ; preds = %70, %.preheader + %.sroa.04.09.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] + %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.sroa.04.09.i + %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.sroa.04.09.i %93 = load i8, ptr %91, align 1 - store i8 %93, ptr %90, align 1 - store i8 %92, ptr %91, align 1 - %94 = add nuw nsw i64 %.sroa.04.09.i, 1 - %exitcond.not.i = icmp eq i64 %94, %2 + %94 = load i8, ptr %92, align 1 + store i8 %94, ptr %91, align 1 + store i8 %93, ptr %92, align 1 + %95 = add nuw nsw i64 %.sroa.04.09.i, 1 + %exitcond.not.i = icmp eq i64 %95, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit, label %.preheader -95: ; preds = %69 - %96 = add i64 %.sroa.02.08, -16 - %97 = load i64, ptr %6, align 8, !noundef !16 - %98 = and i64 %97, %96 - %99 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.08 - store i8 -1, ptr %100, align 1 - %101 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %102 = getelementptr i8, ptr %101, i64 %98 - %103 = getelementptr i8, ptr %102, i64 16 - store i8 -1, ptr %103, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) - br label %104 - -104: ; preds = %.lr.ph, %95, %81 +96: ; preds = %70 + %97 = add i64 %.sroa.02.08, -16 + %98 = load i64, ptr %6, align 8, !noundef !16 + %99 = and i64 %98, %97 + %100 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.08 + store i8 -1, ptr %101, align 1 + %102 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %103 = getelementptr i8, ptr %102, i64 %99 + %104 = getelementptr i8, ptr %103, i64 16 + store i8 -1, ptr %104, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %105 + +105: ; preds = %.lr.ph, %96, %82 %exitcond.not = icmp eq i64 %.sroa.02.08, %.val19 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -105: ; preds = %31 - %106 = landingpad { ptr, i32 } +106: ; preds = %32 + %107 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hd62aa59d1fda1c9fE() #31 unreachable -107: ; preds = %31 - resume { ptr, i32 } %32 +108: ; preds = %32 + resume { ptr, i32 } %33 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll b/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll index 8d66696af28..ac0f3c09b18 100644 --- a/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll +++ b/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll @@ -6867,215 +6867,220 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val21 = load i64, ptr %6, align 8, !noundef !16 %7 = add i64 %.val21, 1 - %8 = lshr i64 %7, 4 - %9 = and i64 %7, 15 - %.not.i.i.i.i = icmp ne i64 %9, 0 - %10 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %8, %10 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %7, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20: ; preds = %4 + %8 = icmp ne ptr %.val20, null + tail call void @llvm.assume(i1 %8) + %9 = getelementptr inbounds nuw i8, ptr %.val20, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val20, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + br label %._crit_edge .lr.ph.i: ; preds = %4 - %11 = icmp ne ptr %.val20, null - tail call void @llvm.assume(i1 %11) - br label %12 + %10 = lshr i64 %7, 4 + %11 = and i64 %7, 15 + %.not.i.i.i.i = icmp ne i64 %11, 0 + %12 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %10, %12 + %13 = icmp ne ptr %.val20, null + tail call void @llvm.assume(i1 %13) + br label %17 -12: ; preds = %12, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %14, %12 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %13, %12 ] - %13 = add nsw i64 %.sroa.5.05.i, -1 - %14 = add i64 %.sroa.01.06.i, 16 - %15 = getelementptr inbounds i8, ptr %.val20, i64 %.sroa.01.06.i - %16 = load <16 x i8>, ptr %15, align 16, !noalias !1938 - %.lobit.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16, !noalias !1941 - %.not.not.i = icmp eq i64 %13, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, label %12 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val20, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds i8, ptr %.val20, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val20, i64 %.9.i, i1 false) +._crit_edge.i: ; preds = %17 + %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) + %spec.select28 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) + %14 = getelementptr inbounds i8, ptr %.val20, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val20, i64 %spec.select28, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %15, align 8 + %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %16, align 8 store ptr %0, ptr %5, align 8 - %.not10 = icmp eq i64 %7, 0 - br i1 %.not10, label %._crit_edge, label %.lr.ph + br label %.lr.ph -23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit - %24 = landingpad { ptr, i32 } +17: ; preds = %17, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %19, %17 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %18, %17 ] + %18 = add i64 %.sroa.5.05.i, -1 + %19 = add i64 %.sroa.01.06.i, 16 + %20 = getelementptr inbounds i8, ptr %.val20, i64 %.sroa.01.06.i + %21 = load <16 x i8>, ptr %20, align 16, !noalias !1938 + %.lobit.i.i = ashr <16 x i8> %21, splat (i8 7) + %22 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %23 = or <2 x i64> %22, splat (i64 -9187201950435737472) + store <2 x i64> %23, ptr %20, align 16, !noalias !1941 + %.not.not.i = icmp eq i64 %18, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %17 + +24: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit + %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb4af58817a3e580eE"(ptr noalias noundef align 8 dereferenceable(24) %5) #44 - to label %102 unwind label %103 + to label %103 unwind label %104 -._crit_edge.loopexit: ; preds = %101 +._crit_edge.loopexit: ; preds = %102 %.pre = load i64, ptr %6, align 8 %.pre16 = add i64 %.pre, 1 - %25 = lshr i64 %.pre16, 3 - %26 = mul nuw i64 %25, 7 + %26 = lshr i64 %.pre16, 3 + %27 = mul nuw i64 %26, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !16 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %29 = icmp ult i64 %28, 8 + %.0 = select i1 %29, i64 %28, i64 %.pre-phi + %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %31 = load i64, ptr %30, align 8, !noundef !16 + %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %33 = sub i64 %.0, %31 + store i64 %33, ptr %32, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, %101 - %.sroa.02.09 = phi i64 [ %33, %101 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %33 = add nuw i64 %.sroa.02.09, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.09 - %36 = load i8, ptr %35, align 1, !noundef !16 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %101 +.lr.ph: ; preds = %._crit_edge.i, %102 + %.sroa.02.09 = phi i64 [ %34, %102 ], [ 0, %._crit_edge.i ] + %34 = add nuw i64 %.sroa.02.09, 1 + %35 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.09 + %37 = load i8, ptr %36, align 1, !noundef !16 + %.not = icmp eq i8 %37, -128 + br i1 %.not, label %38, label %102 -37: ; preds = %.lr.ph +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.09, -1 %.neg16 = mul i64 %2, %.neg - %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 + %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit -_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit: ; preds = %.preheader, %37 - %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) - to label %40 unwind label %23 +_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) + to label %41 unwind label %24 -40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit %.val = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 %.val19 = load i64, ptr %6, align 8, !noundef !16 - %.sroa.0.05.i = and i64 %.val19, %39 - %41 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %41, align 1, !noalias !1944 - %42 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %43 = bitcast <16 x i1> %42 to i16 - %.not.not.i.not7.i = icmp eq i16 %43, 0 - br i1 %.not.not.i.not7.i, label %.lr.ph.i22, label %._crit_edge.i - -.lr.ph.i22: ; preds = %40, %.lr.ph.i22 - %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i22 ], [ %.sroa.0.05.i, %40 ] - %.sroa.7.08.i = phi i64 [ %44, %.lr.ph.i22 ], [ 0, %40 ] - %44 = add i64 %.sroa.7.08.i, 16 - %45 = add i64 %44, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %45, %.val19 - %46 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %46, align 1, !noalias !1944 - %47 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %48 = bitcast <16 x i1> %47 to i16 - %.not.not.i.not.i = icmp eq i16 %48, 0 - br i1 %.not.not.i.not.i, label %.lr.ph.i22, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i22, %40 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %40 ], [ %.sroa.0.0.i, %.lr.ph.i22 ] - %.lcssa.i = phi i16 [ %43, %40 ], [ %48, %.lr.ph.i22 ] - %49 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %50 = zext nneg i16 %49 to i64 - %51 = add i64 %.sroa.0.0.lcssa.i, %50 - %52 = and i64 %51, %.val19 - %53 = getelementptr inbounds i8, ptr %.val, i64 %52 - %54 = load i8, ptr %53, align 1, !noundef !16 - %55 = icmp sgt i8 %54, -1 - br i1 %55, label %56, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - -56: ; preds = %._crit_edge.i - %57 = load <16 x i8>, ptr %.val, align 16, !noalias !1947 - %58 = icmp slt <16 x i8> %57, zeroinitializer - %59 = bitcast <16 x i1> %58 to i16 - %.not.i.i = icmp ne i16 %59, 0 - %60 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %59, i1 true) - %61 = zext nneg i16 %60 to i64 + %.sroa.0.05.i = and i64 %.val19, %40 + %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !1944 + %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %44 = bitcast <16 x i1> %43 to i16 + %.not.not.i.not7.i = icmp eq i16 %44, 0 + br i1 %.not.not.i.not7.i, label %.lr.ph.i23, label %._crit_edge.i22 + +.lr.ph.i23: ; preds = %41, %.lr.ph.i23 + %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i23 ], [ %.sroa.0.05.i, %41 ] + %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i23 ], [ 0, %41 ] + %45 = add i64 %.sroa.7.08.i, 16 + %46 = add i64 %45, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %46, %.val19 + %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !1944 + %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %49 = bitcast <16 x i1> %48 to i16 + %.not.not.i.not.i = icmp eq i16 %49, 0 + br i1 %.not.not.i.not.i, label %.lr.ph.i23, label %._crit_edge.i22 + +._crit_edge.i22: ; preds = %.lr.ph.i23, %41 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i23 ] + %.lcssa.i = phi i16 [ %44, %41 ], [ %49, %.lr.ph.i23 ] + %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %51 = zext nneg i16 %50 to i64 + %52 = add i64 %.sroa.0.0.lcssa.i, %51 + %53 = and i64 %52, %.val19 + %54 = getelementptr inbounds i8, ptr %.val, i64 %53 + %55 = load i8, ptr %54, align 1, !noundef !16 + %56 = icmp sgt i8 %55, -1 + br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + +57: ; preds = %._crit_edge.i22 + %58 = load <16 x i8>, ptr %.val, align 16, !noalias !1947 + %59 = icmp slt <16 x i8> %58, zeroinitializer + %60 = bitcast <16 x i1> %59 to i16 + %.not.i.i = icmp ne i16 %60, 0 + %61 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) + %62 = zext nneg i16 %61 to i64 tail call void @llvm.assume(i1 %.not.i.i) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %56, %._crit_edge.i - %.0.i.i = phi i64 [ %61, %56 ], [ %52, %._crit_edge.i ] - %62 = sub i64 %.sroa.02.09, %.sroa.0.05.i - %63 = sub i64 %.0.i.i, %.sroa.0.05.i - %64 = xor i64 %63, %62 - %.unshifted = and i64 %64, %.val19 - %65 = icmp ult i64 %.unshifted, 16 - br i1 %65, label %78, label %66 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %57, %._crit_edge.i22 + %.0.i.i = phi i64 [ %62, %57 ], [ %53, %._crit_edge.i22 ] + %63 = sub i64 %.sroa.02.09, %.sroa.0.05.i + %64 = sub i64 %.0.i.i, %.sroa.0.05.i + %65 = xor i64 %64, %63 + %.unshifted = and i64 %65, %.val19 + %66 = icmp ult i64 %.unshifted, 16 + br i1 %66, label %79, label %67 -66: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit +67: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit %.neg17 = xor i64 %.0.i.i, -1 %.neg18 = mul i64 %2, %.neg17 - %67 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 - %68 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %69 = load i8, ptr %68, align 1, !noundef !16 - %70 = lshr i64 %39, 57 - %71 = trunc nuw nsw i64 %70 to i8 - %72 = add i64 %.0.i.i, -16 - %73 = and i64 %72, %.val19 - store i8 %71, ptr %68, align 1 - %74 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %75 = getelementptr i8, ptr %74, i64 %73 - %76 = getelementptr i8, ptr %75, i64 16 - store i8 %71, ptr %76, align 1 - %77 = icmp eq i8 %69, -1 - br i1 %77, label %92, label %.preheader - -78: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - %79 = lshr i64 %39, 57 - %80 = trunc nuw nsw i64 %79 to i8 - %81 = add i64 %.sroa.02.09, -16 - %82 = and i64 %.val19, %81 - %83 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 - store i8 %80, ptr %83, align 1 - %84 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %85 = getelementptr i8, ptr %84, i64 %82 - %86 = getelementptr i8, ptr %85, i64 16 - store i8 %80, ptr %86, align 1 - br label %101 - -.preheader: ; preds = %66, %.preheader - %.0910.i = phi i64 [ %91, %.preheader ], [ 0, %66 ] - %87 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i - %88 = getelementptr inbounds nuw i8, ptr %67, i64 %.0910.i - %89 = load i8, ptr %87, align 1 + %68 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 + %69 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %70 = load i8, ptr %69, align 1, !noundef !16 + %71 = lshr i64 %40, 57 + %72 = trunc nuw nsw i64 %71 to i8 + %73 = add i64 %.0.i.i, -16 + %74 = and i64 %73, %.val19 + store i8 %72, ptr %69, align 1 + %75 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %76 = getelementptr i8, ptr %75, i64 %74 + %77 = getelementptr i8, ptr %76, i64 16 + store i8 %72, ptr %77, align 1 + %78 = icmp eq i8 %70, -1 + br i1 %78, label %93, label %.preheader + +79: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + %80 = lshr i64 %40, 57 + %81 = trunc nuw nsw i64 %80 to i8 + %82 = add i64 %.sroa.02.09, -16 + %83 = and i64 %.val19, %82 + %84 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 + store i8 %81, ptr %84, align 1 + %85 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %86 = getelementptr i8, ptr %85, i64 %83 + %87 = getelementptr i8, ptr %86, i64 16 + store i8 %81, ptr %87, align 1 + br label %102 + +.preheader: ; preds = %67, %.preheader + %.0910.i = phi i64 [ %92, %.preheader ], [ 0, %67 ] + %88 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %89 = getelementptr inbounds nuw i8, ptr %68, i64 %.0910.i %90 = load i8, ptr %88, align 1 - store i8 %90, ptr %87, align 1 - store i8 %89, ptr %88, align 1 - %91 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %91, %2 + %91 = load i8, ptr %89, align 1 + store i8 %91, ptr %88, align 1 + store i8 %90, ptr %89, align 1 + %92 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %92, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit, label %.preheader -92: ; preds = %66 - %93 = add i64 %.sroa.02.09, -16 - %94 = load i64, ptr %6, align 8, !noundef !16 - %95 = and i64 %94, %93 - %96 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %97 = getelementptr inbounds i8, ptr %96, i64 %.sroa.02.09 - store i8 -1, ptr %97, align 1 - %98 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %99 = getelementptr i8, ptr %98, i64 %95 - %100 = getelementptr i8, ptr %99, i64 16 - store i8 -1, ptr %100, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %67, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) - br label %101 - -101: ; preds = %.lr.ph, %92, %78 +93: ; preds = %67 + %94 = add i64 %.sroa.02.09, -16 + %95 = load i64, ptr %6, align 8, !noundef !16 + %96 = and i64 %95, %94 + %97 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %98 = getelementptr inbounds i8, ptr %97, i64 %.sroa.02.09 + store i8 -1, ptr %98, align 1 + %99 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %100 = getelementptr i8, ptr %99, i64 %96 + %101 = getelementptr i8, ptr %100, i64 16 + store i8 -1, ptr %101, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %68, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %102 + +102: ; preds = %.lr.ph, %93, %79 %exitcond.not = icmp eq i64 %.sroa.02.09, %.val21 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -102: ; preds = %23 - resume { ptr, i32 } %24 +103: ; preds = %24 + resume { ptr, i32 } %25 -103: ; preds = %23 - %104 = landingpad { ptr, i32 } +104: ; preds = %24 + %105 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #45 unreachable diff --git a/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll b/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll index d8a46a99f71..0e757e26be4 100644 --- a/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll +++ b/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll @@ -4686,215 +4686,220 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val21 = load i64, ptr %6, align 8, !noundef !4 %7 = add i64 %.val21, 1 - %8 = lshr i64 %7, 4 - %9 = and i64 %7, 15 - %.not.i.i.i.i = icmp ne i64 %9, 0 - %10 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %8, %10 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %7, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, label %.lr.ph.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20: ; preds = %4 + %8 = icmp ne ptr %.val20, null + tail call void @llvm.assume(i1 %8) + %9 = getelementptr inbounds nuw i8, ptr %.val20, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val20, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + br label %._crit_edge .lr.ph.i: ; preds = %4 - %11 = icmp ne ptr %.val20, null - tail call void @llvm.assume(i1 %11) - br label %12 + %10 = lshr i64 %7, 4 + %11 = and i64 %7, 15 + %.not.i.i.i.i = icmp ne i64 %11, 0 + %12 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %10, %12 + %13 = icmp ne ptr %.val20, null + tail call void @llvm.assume(i1 %13) + br label %17 -12: ; preds = %12, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %14, %12 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %13, %12 ] - %13 = add nsw i64 %.sroa.5.05.i, -1 - %14 = add i64 %.sroa.01.06.i, 16 - %15 = getelementptr inbounds i8, ptr %.val20, i64 %.sroa.01.06.i - %16 = load <16 x i8>, ptr %15, align 16, !noalias !1448 - %.lobit.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16, !noalias !1451 - %.not.not.i = icmp eq i64 %13, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, label %12 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val20, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds i8, ptr %.val20, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val20, i64 %.9.i, i1 false) +._crit_edge.i: ; preds = %17 + %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) + %spec.select28 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) + %14 = getelementptr inbounds i8, ptr %.val20, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val20, i64 %spec.select28, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %15, align 8 + %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %16, align 8 store ptr %0, ptr %5, align 8 - %.not10 = icmp eq i64 %7, 0 - br i1 %.not10, label %._crit_edge, label %.lr.ph - -23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit - %24 = landingpad { ptr, i32 } + br label %.lr.ph + +17: ; preds = %17, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %19, %17 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %18, %17 ] + %18 = add i64 %.sroa.5.05.i, -1 + %19 = add i64 %.sroa.01.06.i, 16 + %20 = getelementptr inbounds i8, ptr %.val20, i64 %.sroa.01.06.i + %21 = load <16 x i8>, ptr %20, align 16, !noalias !1448 + %.lobit.i.i = ashr <16 x i8> %21, splat (i8 7) + %22 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %23 = or <2 x i64> %22, splat (i64 -9187201950435737472) + store <2 x i64> %23, ptr %20, align 16, !noalias !1451 + %.not.not.i = icmp eq i64 %18, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %17 + +24: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit + %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h40d1933d66f79d6bE"(ptr noalias noundef align 8 dereferenceable(24) %5) #50 - to label %102 unwind label %103 + to label %103 unwind label %104 -._crit_edge.loopexit: ; preds = %101 +._crit_edge.loopexit: ; preds = %102 %.pre = load i64, ptr %6, align 8 %.pre16 = add i64 %.pre, 1 - %25 = lshr i64 %.pre16, 3 - %26 = mul nuw i64 %25, 7 + %26 = lshr i64 %.pre16, 3 + %27 = mul nuw i64 %26, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !4 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %29 = icmp ult i64 %28, 8 + %.0 = select i1 %29, i64 %28, i64 %.pre-phi + %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %31 = load i64, ptr %30, align 8, !noundef !4 + %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %33 = sub i64 %.0, %31 + store i64 %33, ptr %32, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit, %101 - %.sroa.02.09 = phi i64 [ %33, %101 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit ] - %33 = add nuw i64 %.sroa.02.09, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.09 - %36 = load i8, ptr %35, align 1, !noundef !4 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %101 +.lr.ph: ; preds = %._crit_edge.i, %102 + %.sroa.02.09 = phi i64 [ %34, %102 ], [ 0, %._crit_edge.i ] + %34 = add nuw i64 %.sroa.02.09, 1 + %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.09 + %37 = load i8, ptr %36, align 1, !noundef !4 + %.not = icmp eq i8 %37, -128 + br i1 %.not, label %38, label %102 -37: ; preds = %.lr.ph +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.09, -1 %.neg16 = mul i64 %2, %.neg - %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 + %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit -_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit: ; preds = %.preheader, %37 - %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) - to label %40 unwind label %23 +_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) + to label %41 unwind label %24 -40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit %.val = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 %.val19 = load i64, ptr %6, align 8, !noundef !4 - %.sroa.0.05.i = and i64 %.val19, %39 - %41 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %41, align 1, !noalias !1454 - %42 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %43 = bitcast <16 x i1> %42 to i16 - %.not.not.i.not7.i = icmp eq i16 %43, 0 - br i1 %.not.not.i.not7.i, label %.lr.ph.i22, label %._crit_edge.i - -.lr.ph.i22: ; preds = %40, %.lr.ph.i22 - %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i22 ], [ %.sroa.0.05.i, %40 ] - %.sroa.7.08.i = phi i64 [ %44, %.lr.ph.i22 ], [ 0, %40 ] - %44 = add i64 %.sroa.7.08.i, 16 - %45 = add i64 %44, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %45, %.val19 - %46 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %46, align 1, !noalias !1454 - %47 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %48 = bitcast <16 x i1> %47 to i16 - %.not.not.i.not.i = icmp eq i16 %48, 0 - br i1 %.not.not.i.not.i, label %.lr.ph.i22, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i22, %40 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %40 ], [ %.sroa.0.0.i, %.lr.ph.i22 ] - %.lcssa.i = phi i16 [ %43, %40 ], [ %48, %.lr.ph.i22 ] - %49 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %50 = zext nneg i16 %49 to i64 - %51 = add i64 %.sroa.0.0.lcssa.i, %50 - %52 = and i64 %51, %.val19 - %53 = getelementptr inbounds i8, ptr %.val, i64 %52 - %54 = load i8, ptr %53, align 1, !noundef !4 - %55 = icmp sgt i8 %54, -1 - br i1 %55, label %56, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - -56: ; preds = %._crit_edge.i - %57 = load <16 x i8>, ptr %.val, align 16, !noalias !1457 - %58 = icmp slt <16 x i8> %57, zeroinitializer - %59 = bitcast <16 x i1> %58 to i16 - %.not.i.i = icmp ne i16 %59, 0 - %60 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %59, i1 true) - %61 = zext nneg i16 %60 to i64 + %.sroa.0.05.i = and i64 %.val19, %40 + %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !1454 + %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %44 = bitcast <16 x i1> %43 to i16 + %.not.not.i.not7.i = icmp eq i16 %44, 0 + br i1 %.not.not.i.not7.i, label %.lr.ph.i23, label %._crit_edge.i22 + +.lr.ph.i23: ; preds = %41, %.lr.ph.i23 + %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i23 ], [ %.sroa.0.05.i, %41 ] + %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i23 ], [ 0, %41 ] + %45 = add i64 %.sroa.7.08.i, 16 + %46 = add i64 %45, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %46, %.val19 + %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !1454 + %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %49 = bitcast <16 x i1> %48 to i16 + %.not.not.i.not.i = icmp eq i16 %49, 0 + br i1 %.not.not.i.not.i, label %.lr.ph.i23, label %._crit_edge.i22 + +._crit_edge.i22: ; preds = %.lr.ph.i23, %41 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i23 ] + %.lcssa.i = phi i16 [ %44, %41 ], [ %49, %.lr.ph.i23 ] + %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %51 = zext nneg i16 %50 to i64 + %52 = add i64 %.sroa.0.0.lcssa.i, %51 + %53 = and i64 %52, %.val19 + %54 = getelementptr inbounds i8, ptr %.val, i64 %53 + %55 = load i8, ptr %54, align 1, !noundef !4 + %56 = icmp sgt i8 %55, -1 + br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + +57: ; preds = %._crit_edge.i22 + %58 = load <16 x i8>, ptr %.val, align 16, !noalias !1457 + %59 = icmp slt <16 x i8> %58, zeroinitializer + %60 = bitcast <16 x i1> %59 to i16 + %.not.i.i = icmp ne i16 %60, 0 + %61 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) + %62 = zext nneg i16 %61 to i64 tail call void @llvm.assume(i1 %.not.i.i) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %56, %._crit_edge.i - %.0.i.i = phi i64 [ %61, %56 ], [ %52, %._crit_edge.i ] - %62 = sub i64 %.sroa.02.09, %.sroa.0.05.i - %63 = sub i64 %.0.i.i, %.sroa.0.05.i - %64 = xor i64 %63, %62 - %.unshifted = and i64 %64, %.val19 - %65 = icmp ult i64 %.unshifted, 16 - br i1 %65, label %78, label %66 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %57, %._crit_edge.i22 + %.0.i.i = phi i64 [ %62, %57 ], [ %53, %._crit_edge.i22 ] + %63 = sub i64 %.sroa.02.09, %.sroa.0.05.i + %64 = sub i64 %.0.i.i, %.sroa.0.05.i + %65 = xor i64 %64, %63 + %.unshifted = and i64 %65, %.val19 + %66 = icmp ult i64 %.unshifted, 16 + br i1 %66, label %79, label %67 -66: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit +67: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit %.neg17 = xor i64 %.0.i.i, -1 %.neg18 = mul i64 %2, %.neg17 - %67 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 - %68 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %69 = load i8, ptr %68, align 1, !noundef !4 - %70 = lshr i64 %39, 57 - %71 = trunc nuw nsw i64 %70 to i8 - %72 = add i64 %.0.i.i, -16 - %73 = and i64 %72, %.val19 - store i8 %71, ptr %68, align 1 - %74 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %75 = getelementptr i8, ptr %74, i64 %73 - %76 = getelementptr i8, ptr %75, i64 16 - store i8 %71, ptr %76, align 1 - %77 = icmp eq i8 %69, -1 - br i1 %77, label %92, label %.preheader - -78: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - %79 = lshr i64 %39, 57 - %80 = trunc nuw nsw i64 %79 to i8 - %81 = add i64 %.sroa.02.09, -16 - %82 = and i64 %.val19, %81 - %83 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 - store i8 %80, ptr %83, align 1 - %84 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %85 = getelementptr i8, ptr %84, i64 %82 - %86 = getelementptr i8, ptr %85, i64 16 - store i8 %80, ptr %86, align 1 - br label %101 - -.preheader: ; preds = %66, %.preheader - %.0910.i = phi i64 [ %91, %.preheader ], [ 0, %66 ] - %87 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i - %88 = getelementptr inbounds nuw i8, ptr %67, i64 %.0910.i - %89 = load i8, ptr %87, align 1 + %68 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 + %69 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %70 = load i8, ptr %69, align 1, !noundef !4 + %71 = lshr i64 %40, 57 + %72 = trunc nuw nsw i64 %71 to i8 + %73 = add i64 %.0.i.i, -16 + %74 = and i64 %73, %.val19 + store i8 %72, ptr %69, align 1 + %75 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %76 = getelementptr i8, ptr %75, i64 %74 + %77 = getelementptr i8, ptr %76, i64 16 + store i8 %72, ptr %77, align 1 + %78 = icmp eq i8 %70, -1 + br i1 %78, label %93, label %.preheader + +79: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + %80 = lshr i64 %40, 57 + %81 = trunc nuw nsw i64 %80 to i8 + %82 = add i64 %.sroa.02.09, -16 + %83 = and i64 %.val19, %82 + %84 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 + store i8 %81, ptr %84, align 1 + %85 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %86 = getelementptr i8, ptr %85, i64 %83 + %87 = getelementptr i8, ptr %86, i64 16 + store i8 %81, ptr %87, align 1 + br label %102 + +.preheader: ; preds = %67, %.preheader + %.0910.i = phi i64 [ %92, %.preheader ], [ 0, %67 ] + %88 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %89 = getelementptr inbounds nuw i8, ptr %68, i64 %.0910.i %90 = load i8, ptr %88, align 1 - store i8 %90, ptr %87, align 1 - store i8 %89, ptr %88, align 1 - %91 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %91, %2 + %91 = load i8, ptr %89, align 1 + store i8 %91, ptr %88, align 1 + store i8 %90, ptr %89, align 1 + %92 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %92, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit, label %.preheader -92: ; preds = %66 - %93 = add i64 %.sroa.02.09, -16 - %94 = load i64, ptr %6, align 8, !noundef !4 - %95 = and i64 %94, %93 - %96 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %97 = getelementptr inbounds i8, ptr %96, i64 %.sroa.02.09 - store i8 -1, ptr %97, align 1 - %98 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %99 = getelementptr i8, ptr %98, i64 %95 - %100 = getelementptr i8, ptr %99, i64 16 - store i8 -1, ptr %100, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %67, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) - br label %101 - -101: ; preds = %.lr.ph, %92, %78 +93: ; preds = %67 + %94 = add i64 %.sroa.02.09, -16 + %95 = load i64, ptr %6, align 8, !noundef !4 + %96 = and i64 %95, %94 + %97 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %98 = getelementptr inbounds i8, ptr %97, i64 %.sroa.02.09 + store i8 -1, ptr %98, align 1 + %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %100 = getelementptr i8, ptr %99, i64 %96 + %101 = getelementptr i8, ptr %100, i64 16 + store i8 -1, ptr %101, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %68, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %102 + +102: ; preds = %.lr.ph, %93, %79 %exitcond.not = icmp eq i64 %.sroa.02.09, %.val21 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -102: ; preds = %23 - resume { ptr, i32 } %24 +103: ; preds = %24 + resume { ptr, i32 } %25 -103: ; preds = %23 - %104 = landingpad { ptr, i32 } +104: ; preds = %24 + %105 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #49 unreachable diff --git a/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll b/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll index 0b41b33257e..83e5944374f 100644 --- a/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll +++ b/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll @@ -3184,55 +3184,54 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hb6e79ba0f31224c4E.llvm.18 114: ; preds = %13 tail call void @llvm.experimental.noalias.scope.decl(metadata !684) %.val15.i = load ptr, ptr %0, align 8, !alias.scope !684 - %115 = lshr i64 %17, 4 - %116 = and i64 %17, 15 - %.not.i.i.i.i.i = icmp ne i64 %116, 0 - %117 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %115, %117 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.i", label %.lr.ph.i.i5 + %.not.not4.i.i = icmp eq i64 %17, 0 + br i1 %.not.not4.i.i, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.thread24.i", label %.lr.ph.i.i5 + +"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.thread24.i": ; preds = %114 + %115 = icmp ne ptr %.val15.i, null + tail call void @llvm.assume(i1 %115) + br label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$15rehash_in_place17h8bcc2323c476cdb1E.exit" .lr.ph.i.i5: ; preds = %114 - %118 = icmp ne ptr %.val15.i, null - tail call void @llvm.assume(i1 %118) - br label %119 - -119: ; preds = %119, %.lr.ph.i.i5 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i5 ], [ %121, %119 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i5 ], [ %120, %119 ] - %120 = add nsw i64 %.sroa.5.05.i.i, -1 - %121 = add i64 %.sroa.01.06.i.i, 16 - %122 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.01.06.i.i - %123 = load <16 x i8>, ptr %122, align 16, !noalias !687 - %.lobit.i.i.i = ashr <16 x i8> %123, splat (i8 7) - %124 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %125 = or <2 x i64> %124, splat (i64 -9187201950435737472) - store <2 x i64> %125, ptr %122, align 16, !noalias !690 - %.not.not.i.i = icmp eq i64 %120, 0 - br i1 %.not.not.i.i, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.i", label %119 - -"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.i": ; preds = %119, %114 - %126 = icmp ne ptr %.val15.i, null - tail call void @llvm.assume(i1 %126) - %..i.i = tail call i64 @llvm.umax.i64(i64 %17, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) - %127 = getelementptr inbounds i8, ptr %.val15.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %127, ptr nonnull align 1 %.val15.i, i64 %.9.i.i, i1 false), !noalias !684 - %.not17.i = icmp eq i64 %17, 0 - br i1 %.not17.i, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$15rehash_in_place17h8bcc2323c476cdb1E.exit", label %.lr.ph.i - -.lr.ph.i: ; preds = %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.i" + %116 = lshr i64 %17, 4 + %117 = and i64 %17, 15 + %.not.i.i.i.i.i = icmp ne i64 %117, 0 + %118 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %116, %118 + %119 = icmp ne ptr %.val15.i, null + tail call void @llvm.assume(i1 %119) + br label %121 + +._crit_edge.i.i6: ; preds = %121 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %17, i64 16) + %spec.select30.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) + %120 = getelementptr inbounds i8, ptr %.val15.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %120, ptr nonnull align 1 %.val15.i, i64 %spec.select30.i, i1 false), !noalias !684 %invariant.gep11.i = getelementptr i8, ptr %.val15.i, i64 -64 %invariant.gep.i = getelementptr i8, ptr %.val15.i, i64 16 br label %128 -128: ; preds = %187, %.lr.ph.i - %.sroa.02.010.i = phi i64 [ 0, %.lr.ph.i ], [ %129, %187 ] +121: ; preds = %121, %.lr.ph.i.i5 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i5 ], [ %123, %121 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i5 ], [ %122, %121 ] + %122 = add i64 %.sroa.5.05.i.i, -1 + %123 = add i64 %.sroa.01.06.i.i, 16 + %124 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.01.06.i.i + %125 = load <16 x i8>, ptr %124, align 16, !noalias !687 + %.lobit.i.i.i = ashr <16 x i8> %125, splat (i8 7) + %126 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %127 = or <2 x i64> %126, splat (i64 -9187201950435737472) + store <2 x i64> %127, ptr %124, align 16, !noalias !690 + %.not.not.i.i = icmp eq i64 %122, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i6, label %121 + +128: ; preds = %187, %._crit_edge.i.i6 + %.sroa.02.010.i = phi i64 [ 0, %._crit_edge.i.i6 ], [ %129, %187 ] %129 = add nuw i64 %.sroa.02.010.i, 1 %130 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.02.010.i %131 = load i8, ptr %130, align 1, !noalias !684, !noundef !7 - %.not.i6 = icmp eq i8 %131, -128 - br i1 %.not.i6, label %132, label %187 + %.not.i7 = icmp eq i8 %131, -128 + br i1 %.not.i7, label %132, label %187 132: ; preds = %128 %133 = shl i64 %.sroa.02.010.i, 6 @@ -3243,19 +3242,19 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hb6e79ba0f31224c4E.llvm.18 br label %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.preheader.i, %132 - %.val3.i.i8 = load i128, ptr %gep12.i, align 8, !alias.scope !693, !noalias !698, !noundef !7 - %137 = trunc i128 %.val3.i.i8 to i64 - %.sroa.0.05.i.i9 = and i64 %15, %137 - %138 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.0.05.i.i9 - %.0.copyload.i46.i.i10 = load <16 x i8>, ptr %138, align 1, !noalias !705 - %139 = icmp slt <16 x i8> %.0.copyload.i46.i.i10, zeroinitializer + %.val3.i.i9 = load i128, ptr %gep12.i, align 8, !alias.scope !693, !noalias !698, !noundef !7 + %137 = trunc i128 %.val3.i.i9 to i64 + %.sroa.0.05.i.i10 = and i64 %15, %137 + %138 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.0.05.i.i10 + %.0.copyload.i46.i.i11 = load <16 x i8>, ptr %138, align 1, !noalias !705 + %139 = icmp slt <16 x i8> %.0.copyload.i46.i.i11, zeroinitializer %140 = bitcast <16 x i1> %139 to i16 - %.not.not.i.not7.i.i11 = icmp eq i16 %140, 0 - br i1 %.not.not.i.not7.i.i11, label %.lr.ph.i17.i, label %._crit_edge.i.i12 + %.not.not.i.not7.i.i12 = icmp eq i16 %140, 0 + br i1 %.not.not.i.not7.i.i12, label %.lr.ph.i18.i, label %._crit_edge.i17.i -.lr.ph.i17.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i, %.lr.ph.i17.i - %.sroa.0.09.i.i17 = phi i64 [ %.sroa.0.0.i.i19, %.lr.ph.i17.i ], [ %.sroa.0.05.i.i9, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ] - %.sroa.7.08.i.i18 = phi i64 [ %141, %.lr.ph.i17.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ] +.lr.ph.i18.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i, %.lr.ph.i18.i + %.sroa.0.09.i.i17 = phi i64 [ %.sroa.0.0.i.i19, %.lr.ph.i18.i ], [ %.sroa.0.05.i.i10, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ] + %.sroa.7.08.i.i18 = phi i64 [ %141, %.lr.ph.i18.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ] %141 = add i64 %.sroa.7.08.i.i18, 16 %142 = add i64 %141, %.sroa.0.09.i.i17 %.sroa.0.0.i.i19 = and i64 %142, %15 @@ -3264,11 +3263,11 @@ _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.prehea %144 = icmp slt <16 x i8> %.0.copyload.i4.i.i20, zeroinitializer %145 = bitcast <16 x i1> %144 to i16 %.not.not.i.not.i.i21 = icmp eq i16 %145, 0 - br i1 %.not.not.i.not.i.i21, label %.lr.ph.i17.i, label %._crit_edge.i.i12 + br i1 %.not.not.i.not.i.i21, label %.lr.ph.i18.i, label %._crit_edge.i17.i -._crit_edge.i.i12: ; preds = %.lr.ph.i17.i, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i - %.sroa.0.0.lcssa.i.i13 = phi i64 [ %.sroa.0.05.i.i9, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ], [ %.sroa.0.0.i.i19, %.lr.ph.i17.i ] - %.lcssa.i.i14 = phi i16 [ %140, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ], [ %145, %.lr.ph.i17.i ] +._crit_edge.i17.i: ; preds = %.lr.ph.i18.i, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i + %.sroa.0.0.lcssa.i.i13 = phi i64 [ %.sroa.0.05.i.i10, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ], [ %.sroa.0.0.i.i19, %.lr.ph.i18.i ] + %.lcssa.i.i14 = phi i16 [ %140, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ], [ %145, %.lr.ph.i18.i ] %146 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i14, i1 true) %147 = zext nneg i16 %146 to i64 %148 = add i64 %.sroa.0.0.lcssa.i.i13, %147 @@ -3278,7 +3277,7 @@ _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.prehea %152 = icmp sgt i8 %151, -1 br i1 %152, label %153, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i" -153: ; preds = %._crit_edge.i.i12 +153: ; preds = %._crit_edge.i17.i %154 = load <16 x i8>, ptr %.val15.i, align 16, !noalias !708 %155 = icmp slt <16 x i8> %154, zeroinitializer %156 = bitcast <16 x i1> %155 to i16 @@ -3288,10 +3287,10 @@ _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.prehea tail call void @llvm.assume(i1 %.not.i.i.i16) br label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i" -"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i": ; preds = %153, %._crit_edge.i.i12 - %.0.i.i.i15 = phi i64 [ %158, %153 ], [ %149, %._crit_edge.i.i12 ] - %159 = sub i64 %.sroa.02.010.i, %.sroa.0.05.i.i9 - %160 = sub i64 %.0.i.i.i15, %.sroa.0.05.i.i9 +"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i": ; preds = %153, %._crit_edge.i17.i + %.0.i.i.i15 = phi i64 [ %158, %153 ], [ %149, %._crit_edge.i17.i ] + %159 = sub i64 %.sroa.02.010.i, %.sroa.0.05.i.i10 + %160 = sub i64 %.0.i.i.i15, %.sroa.0.05.i.i10 %161 = xor i64 %160, %159 %.unshifted.i = and i64 %161, %15 %162 = icmp ult i64 %.unshifted.i, 16 @@ -3348,7 +3347,7 @@ _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.prehea %exitcond.not.i = icmp eq i64 %.sroa.02.010.i, %15 br i1 %exitcond.not.i, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$15rehash_in_place17h8bcc2323c476cdb1E.exit", label %128 -"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$15rehash_in_place17h8bcc2323c476cdb1E.exit": ; preds = %187, %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.i" +"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$15rehash_in_place17h8bcc2323c476cdb1E.exit": ; preds = %187, %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.thread24.i" %188 = getelementptr inbounds nuw i8, ptr %0, i64 16 %189 = sub i64 %.0.i, %7 store i64 %189, ptr %188, align 8, !alias.scope !684 diff --git a/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll b/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll index 25ff9618ad4..c3efba24d5d 100644 --- a/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll +++ b/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll @@ -3165,245 +3165,248 @@ _ZN4core10intrinsics25typed_swap_nonoverlapping17he528361149ecc2adE.exit: ; pred store i64 %132, ptr %131, align 1 br label %.backedge -common.resume: ; preds = %162, %90 - %common.resume.op = phi { ptr, i32 } [ %91, %90 ], [ %lpad.phi.i, %162 ] +common.resume: ; preds = %163, %90 + %common.resume.op = phi { ptr, i32 } [ %91, %90 ], [ %lpad.phi.i, %163 ] resume { ptr, i32 } %common.resume.op 133: ; preds = %12 tail call void @llvm.experimental.noalias.scope.decl(metadata !281) %.val12.i = load ptr, ptr %0, align 8, !alias.scope !281 - %134 = lshr i64 %17, 4 - %135 = and i64 %17, 15 - %.not9.i.i.i.i = icmp ne i64 %135, 0 - %136 = zext i1 %.not9.i.i.i.i to i64 - %.sroa.05.0.i.i.i.i = add nuw nsw i64 %134, %136 - %.not1.i.i = icmp eq i64 %.sroa.05.0.i.i.i.i, 0 - br i1 %.not1.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i", label %.lr.ph.i.i7 + %.not1.i.i = icmp eq i64 %17, 0 + br i1 %.not1.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread", label %.lr.ph.i.i7 + +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread": ; preds = %133 + %134 = icmp ne ptr %.val12.i, null + tail call void @llvm.assume(i1 %134) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !281 + br label %236 .lr.ph.i.i7: ; preds = %133 - %137 = icmp ne ptr %.val12.i, null - tail call void @llvm.assume(i1 %137) - br label %138 - -138: ; preds = %138, %.lr.ph.i.i7 - %.sroa.04.03.i.i = phi i64 [ %.sroa.05.0.i.i.i.i, %.lr.ph.i.i7 ], [ %140, %138 ] - %.sroa.03.02.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %139, %138 ] - %139 = add i64 %.sroa.03.02.i.i, 16 - %140 = add nsw i64 %.sroa.04.03.i.i, -1 - %141 = getelementptr inbounds nuw i8, ptr %.val12.i, i64 %.sroa.03.02.i.i - %142 = load <16 x i8>, ptr %141, align 16, !noalias !281 - %.lobit.i.i.i.i = ashr <16 x i8> %142, splat (i8 7) - %143 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> - %144 = or <2 x i64> %143, splat (i64 -9187201950435737472) - store <2 x i64> %144, ptr %141, align 16, !noalias !281 - %.not.i.i = icmp eq i64 %140, 0 - br i1 %.not.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i", label %138 - -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i": ; preds = %138, %133 - %145 = icmp ne ptr %.val12.i, null - tail call void @llvm.assume(i1 %145) - %..i.i = tail call i64 @llvm.umax.i64(i64 %17, i64 16) - %.6.i.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) - %146 = getelementptr inbounds nuw i8, ptr %.val12.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %146, ptr nonnull align 1 %.val12.i, i64 %.6.i.i, i1 false), !noalias !281 + %135 = lshr i64 %17, 4 + %136 = and i64 %17, 15 + %.not9.i.i.i.i = icmp ne i64 %136, 0 + %137 = zext i1 %.not9.i.i.i.i to i64 + %.sroa.05.0.i.i.i.i = add nuw nsw i64 %135, %137 + %138 = icmp ne ptr %.val12.i, null + tail call void @llvm.assume(i1 %138) + br label %142 + +._crit_edge.i.i8: ; preds = %142 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %17, i64 16) + %spec.select65.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) + %139 = getelementptr inbounds nuw i8, ptr %.val12.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %139, ptr nonnull align 1 %.val12.i, i64 %spec.select65.i, i1 false), !noalias !281 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !281 - %147 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr null, ptr %147, align 8, !noalias !281 - %148 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 8, ptr %148, align 8, !noalias !281 + %140 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr null, ptr %140, align 8, !noalias !281 + %141 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 8, ptr %141, align 8, !noalias !281 store ptr %0, ptr %6, align 8, !noalias !281 - %.not21.i = icmp eq i64 %17, 0 - br i1 %.not21.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread", label %.lr.ph.i - -.lr.ph.i: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i", %218 - %.sroa.06.120.i = phi i64 [ %.sroa.06.1.i, %218 ], [ 1, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i" ] - %.sroa.06.019.i = phi i64 [ %.sroa.06.120.i, %218 ], [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i" ] - %149 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %150 = getelementptr inbounds nuw i8, ptr %149, i64 %.sroa.06.019.i - %151 = load i8, ptr %150, align 1, !noundef !19 - %.not.i8 = icmp eq i8 %151, -128 - br i1 %.not.i8, label %152, label %218 - -152: ; preds = %.lr.ph.i - %153 = shl i64 %.sroa.06.019.i, 3 - %154 = sub nuw nsw i64 -8, %153 - %155 = getelementptr inbounds i8, ptr %149, i64 %154 - %156 = sub nsw i64 0, %.sroa.06.019.i + br label %149 + +142: ; preds = %142, %.lr.ph.i.i7 + %.sroa.04.03.i.i = phi i64 [ %.sroa.05.0.i.i.i.i, %.lr.ph.i.i7 ], [ %144, %142 ] + %.sroa.03.02.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %143, %142 ] + %143 = add i64 %.sroa.03.02.i.i, 16 + %144 = add i64 %.sroa.04.03.i.i, -1 + %145 = getelementptr inbounds nuw i8, ptr %.val12.i, i64 %.sroa.03.02.i.i + %146 = load <16 x i8>, ptr %145, align 16, !noalias !281 + %.lobit.i.i.i.i = ashr <16 x i8> %146, splat (i8 7) + %147 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> + %148 = or <2 x i64> %147, splat (i64 -9187201950435737472) + store <2 x i64> %148, ptr %145, align 16, !noalias !281 + %.not.i.i = icmp eq i64 %144, 0 + br i1 %.not.i.i, label %._crit_edge.i.i8, label %142 + +149: ; preds = %219, %._crit_edge.i.i8 + %.sroa.06.120.i = phi i64 [ 1, %._crit_edge.i.i8 ], [ %.sroa.06.1.i, %219 ] + %.sroa.06.019.i = phi i64 [ 0, %._crit_edge.i.i8 ], [ %.sroa.06.120.i, %219 ] + %150 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %151 = getelementptr inbounds nuw i8, ptr %150, i64 %.sroa.06.019.i + %152 = load i8, ptr %151, align 1, !noundef !19 + %.not.i9 = icmp eq i8 %152, -128 + br i1 %.not.i9, label %153, label %219 + +153: ; preds = %149 + %154 = shl i64 %.sroa.06.019.i, 3 + %155 = sub nuw nsw i64 -8, %154 + %156 = getelementptr inbounds i8, ptr %150, i64 %155 + %157 = sub nsw i64 0, %.sroa.06.019.i br label %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i -_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i: ; preds = %217, %152 +_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i: ; preds = %218, %153 tail call void @llvm.experimental.noalias.scope.decl(metadata !284) - %157 = load ptr, ptr %0, align 8, !alias.scope !287, !noalias !288, !nonnull !19, !noundef !19 - %158 = getelementptr inbounds i64, ptr %157, i64 %156 - %159 = getelementptr inbounds i8, ptr %158, i64 -8 - %.val3.i.i11 = load i64, ptr %159, align 8, !noalias !290, !noundef !19 - %160 = icmp ult i64 %.val3.i.i11, %3 - br i1 %160, label %163, label %161 - -161: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i - invoke void @_ZN4core9panicking18panic_bounds_check17h2d3ab0b83311a572E(i64 noundef %.val3.i.i11, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.477136bb849fca936c1882c11250d7c7.20) #28 + %158 = load ptr, ptr %0, align 8, !alias.scope !287, !noalias !288, !nonnull !19, !noundef !19 + %159 = getelementptr inbounds i64, ptr %158, i64 %157 + %160 = getelementptr inbounds i8, ptr %159, i64 -8 + %.val3.i.i12 = load i64, ptr %160, align 8, !noalias !290, !noundef !19 + %161 = icmp ult i64 %.val3.i.i12, %3 + br i1 %161, label %164, label %162 + +162: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i + invoke void @_ZN4core9panicking18panic_bounds_check17h2d3ab0b83311a572E(i64 noundef %.val3.i.i12, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.477136bb849fca936c1882c11250d7c7.20) #28 to label %.noexc.i unwind label %.loopexit.split-lp.i -.noexc.i: ; preds = %161 +.noexc.i: ; preds = %162 unreachable -.loopexit.i: ; preds = %217 +.loopexit.i: ; preds = %218 %lpad.loopexit.i = landingpad { ptr, i32 } cleanup - br label %162 + br label %163 -.loopexit.split-lp.i: ; preds = %161 +.loopexit.split-lp.i: ; preds = %162 %lpad.loopexit.split-lp.i = landingpad { ptr, i32 } cleanup - br label %162 + br label %163 -162: ; preds = %.loopexit.split-lp.i, %.loopexit.i +163: ; preds = %.loopexit.split-lp.i, %.loopexit.i %lpad.phi.i = phi { ptr, i32 } [ %lpad.loopexit.i, %.loopexit.i ], [ %lpad.loopexit.split-lp.i, %.loopexit.split-lp.i ] invoke fastcc void @"_ZN4core3ptr297drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h48edcdd41ec96a7fE"(ptr noalias noundef align 8 dereferenceable(24) %6) #25 - to label %common.resume unwind label %230 + to label %common.resume unwind label %231 -163: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i - %164 = getelementptr inbounds nuw { { { { { i64, ptr, {} }, {} }, i64 } }, { i64, [2 x i64] }, i64 }, ptr %2, i64 %.val3.i.i11, i32 2 - %165 = load i64, ptr %164, align 8, !noalias !290, !noundef !19 +164: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i + %165 = getelementptr inbounds nuw { { { { { i64, ptr, {} }, {} }, i64 } }, { i64, [2 x i64] }, i64 }, ptr %2, i64 %.val3.i.i12, i32 2 + %166 = load i64, ptr %165, align 8, !noalias !290, !noundef !19 %.val11.i = load i64, ptr %14, align 8, !alias.scope !281, !noundef !19 - %.sroa.02.02.i.i13 = and i64 %.val11.i, %165 - %166 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.02.02.i.i13 - %.sroa.0.0.copyload.i13.i.i14 = load <16 x i8>, ptr %166, align 1 - %167 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i.i14, zeroinitializer - %168 = bitcast <16 x i1> %167 to i16 - %169 = icmp eq i16 %168, 0 - br i1 %169, label %.lr.ph.i14.i, label %._crit_edge.i.i15 - -.lr.ph.i14.i: ; preds = %163, %.lr.ph.i14.i - %.sroa.02.05.i.i19 = phi i64 [ %.sroa.02.0.i.i21, %.lr.ph.i14.i ], [ %.sroa.02.02.i.i13, %163 ] - %.sroa.9.04.i.i20 = phi i64 [ %170, %.lr.ph.i14.i ], [ 0, %163 ] - %170 = add i64 %.sroa.9.04.i.i20, 16 - %171 = add i64 %170, %.sroa.02.05.i.i19 - %.sroa.02.0.i.i21 = and i64 %171, %.val11.i - %172 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.02.0.i.i21 - %.sroa.0.0.copyload.i1.i.i22 = load <16 x i8>, ptr %172, align 1 - %173 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1.i.i22, zeroinitializer - %174 = bitcast <16 x i1> %173 to i16 - %175 = icmp eq i16 %174, 0 - br i1 %175, label %.lr.ph.i14.i, label %._crit_edge.i.i15 - -._crit_edge.i.i15: ; preds = %.lr.ph.i14.i, %163 - %.sroa.02.0.lcssa.i.i16 = phi i64 [ %.sroa.02.02.i.i13, %163 ], [ %.sroa.02.0.i.i21, %.lr.ph.i14.i ] - %.lcssa.i.i17 = phi i16 [ %168, %163 ], [ %174, %.lr.ph.i14.i ] - %176 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) - %177 = zext nneg i16 %176 to i64 - %178 = add i64 %.sroa.02.0.lcssa.i.i16, %177 - %179 = and i64 %178, %.val11.i - %180 = getelementptr inbounds nuw i8, ptr %157, i64 %179 - %181 = load i8, ptr %180, align 1, !noundef !19 - %182 = icmp sgt i8 %181, -1 - br i1 %182, label %183, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i", !prof !256 - -183: ; preds = %._crit_edge.i.i15 - %184 = load <16 x i8>, ptr %157, align 16 - %185 = icmp slt <16 x i8> %184, zeroinitializer - %186 = bitcast <16 x i1> %185 to i16 - %187 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %186, i1 false) - %188 = zext nneg i16 %187 to i64 + %.sroa.02.02.i.i14 = and i64 %.val11.i, %166 + %167 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.02.02.i.i14 + %.sroa.0.0.copyload.i13.i.i15 = load <16 x i8>, ptr %167, align 1 + %168 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i.i15, zeroinitializer + %169 = bitcast <16 x i1> %168 to i16 + %170 = icmp eq i16 %169, 0 + br i1 %170, label %.lr.ph.i15.i, label %._crit_edge.i14.i + +.lr.ph.i15.i: ; preds = %164, %.lr.ph.i15.i + %.sroa.02.05.i.i19 = phi i64 [ %.sroa.02.0.i.i21, %.lr.ph.i15.i ], [ %.sroa.02.02.i.i14, %164 ] + %.sroa.9.04.i.i20 = phi i64 [ %171, %.lr.ph.i15.i ], [ 0, %164 ] + %171 = add i64 %.sroa.9.04.i.i20, 16 + %172 = add i64 %171, %.sroa.02.05.i.i19 + %.sroa.02.0.i.i21 = and i64 %172, %.val11.i + %173 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.02.0.i.i21 + %.sroa.0.0.copyload.i1.i.i22 = load <16 x i8>, ptr %173, align 1 + %174 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1.i.i22, zeroinitializer + %175 = bitcast <16 x i1> %174 to i16 + %176 = icmp eq i16 %175, 0 + br i1 %176, label %.lr.ph.i15.i, label %._crit_edge.i14.i + +._crit_edge.i14.i: ; preds = %.lr.ph.i15.i, %164 + %.sroa.02.0.lcssa.i.i16 = phi i64 [ %.sroa.02.02.i.i14, %164 ], [ %.sroa.02.0.i.i21, %.lr.ph.i15.i ] + %.lcssa.i.i17 = phi i16 [ %169, %164 ], [ %175, %.lr.ph.i15.i ] + %177 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) + %178 = zext nneg i16 %177 to i64 + %179 = add i64 %.sroa.02.0.lcssa.i.i16, %178 + %180 = and i64 %179, %.val11.i + %181 = getelementptr inbounds nuw i8, ptr %158, i64 %180 + %182 = load i8, ptr %181, align 1, !noundef !19 + %183 = icmp sgt i8 %182, -1 + br i1 %183, label %184, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i", !prof !256 + +184: ; preds = %._crit_edge.i14.i + %185 = load <16 x i8>, ptr %158, align 16 + %186 = icmp slt <16 x i8> %185, zeroinitializer + %187 = bitcast <16 x i1> %186 to i16 + %188 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %187, i1 false) + %189 = zext nneg i16 %188 to i64 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i": ; preds = %183, %._crit_edge.i.i15 - %.sroa.0.0.i.i18 = phi i64 [ %188, %183 ], [ %179, %._crit_edge.i.i15 ] - %189 = shl i64 %.sroa.0.0.i.i18, 3 - %190 = sub nuw nsw i64 -8, %189 - %191 = getelementptr inbounds i8, ptr %157, i64 %190 - %192 = sub i64 %.sroa.06.019.i, %.sroa.02.02.i.i13 - %193 = sub i64 %.sroa.0.0.i.i18, %.sroa.02.02.i.i13 - %194 = xor i64 %193, %192 - %.unshifted.i = and i64 %194, %.val11.i - %195 = icmp ult i64 %.unshifted.i, 16 - br i1 %195, label %221, label %196, !prof !291 - -196: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" - %197 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.0.0.i.i18 - %198 = load i8, ptr %197, align 1, !noundef !19 - %199 = lshr i64 %165, 57 - %200 = trunc nuw nsw i64 %199 to i8 - %201 = add i64 %.sroa.0.0.i.i18, -16 - %202 = and i64 %201, %.val11.i - store i8 %200, ptr %197, align 1 - %203 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %204 = getelementptr i8, ptr %203, i64 %202 - %205 = getelementptr i8, ptr %204, i64 16 - store i8 %200, ptr %205, align 1 - %206 = icmp eq i8 %198, -1 - br i1 %206, label %207, label %217 - -207: ; preds = %196 - %208 = add i64 %.sroa.06.019.i, -16 - %209 = load i64, ptr %14, align 8, !alias.scope !281, !noundef !19 - %210 = and i64 %209, %208 - %211 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %212 = getelementptr inbounds nuw i8, ptr %211, i64 %.sroa.06.019.i - store i8 -1, ptr %212, align 1 - %213 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %214 = getelementptr i8, ptr %213, i64 %210 - %215 = getelementptr i8, ptr %214, i64 16 - store i8 -1, ptr %215, align 1 - %216 = load i64, ptr %155, align 1 - store i64 %216, ptr %191, align 1 - br label %218 - -217: ; preds = %196 - invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17hf3bc7d2be57cd08dE(ptr noundef nonnull %155, ptr noundef nonnull %191, i64 noundef 1) +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i": ; preds = %184, %._crit_edge.i14.i + %.sroa.0.0.i.i18 = phi i64 [ %189, %184 ], [ %180, %._crit_edge.i14.i ] + %190 = shl i64 %.sroa.0.0.i.i18, 3 + %191 = sub nuw nsw i64 -8, %190 + %192 = getelementptr inbounds i8, ptr %158, i64 %191 + %193 = sub i64 %.sroa.06.019.i, %.sroa.02.02.i.i14 + %194 = sub i64 %.sroa.0.0.i.i18, %.sroa.02.02.i.i14 + %195 = xor i64 %194, %193 + %.unshifted.i = and i64 %195, %.val11.i + %196 = icmp ult i64 %.unshifted.i, 16 + br i1 %196, label %222, label %197, !prof !291 + +197: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" + %198 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.0.0.i.i18 + %199 = load i8, ptr %198, align 1, !noundef !19 + %200 = lshr i64 %166, 57 + %201 = trunc nuw nsw i64 %200 to i8 + %202 = add i64 %.sroa.0.0.i.i18, -16 + %203 = and i64 %202, %.val11.i + store i8 %201, ptr %198, align 1 + %204 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %205 = getelementptr i8, ptr %204, i64 %203 + %206 = getelementptr i8, ptr %205, i64 16 + store i8 %201, ptr %206, align 1 + %207 = icmp eq i8 %199, -1 + br i1 %207, label %208, label %218 + +208: ; preds = %197 + %209 = add i64 %.sroa.06.019.i, -16 + %210 = load i64, ptr %14, align 8, !alias.scope !281, !noundef !19 + %211 = and i64 %210, %209 + %212 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %213 = getelementptr inbounds nuw i8, ptr %212, i64 %.sroa.06.019.i + store i8 -1, ptr %213, align 1 + %214 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %215 = getelementptr i8, ptr %214, i64 %211 + %216 = getelementptr i8, ptr %215, i64 16 + store i8 -1, ptr %216, align 1 + %217 = load i64, ptr %156, align 1 + store i64 %217, ptr %192, align 1 + br label %219 + +218: ; preds = %197 + invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17hf3bc7d2be57cd08dE(ptr noundef nonnull %156, ptr noundef nonnull %192, i64 noundef 1) to label %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i unwind label %.loopexit.i -218: ; preds = %221, %207, %.lr.ph.i - %219 = icmp ult i64 %.sroa.06.120.i, %17 - %220 = zext i1 %219 to i64 - %.sroa.06.1.i = add nuw i64 %.sroa.06.120.i, %220 - br i1 %219, label %.lr.ph.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" - -221: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" - %222 = lshr i64 %165, 57 - %223 = trunc nuw nsw i64 %222 to i8 - %224 = add i64 %.sroa.06.019.i, -16 - %225 = and i64 %.val11.i, %224 - %226 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.06.019.i - store i8 %223, ptr %226, align 1 - %227 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %228 = getelementptr i8, ptr %227, i64 %225 - %229 = getelementptr i8, ptr %228, i64 16 - store i8 %223, ptr %229, align 1 - br label %218 - -230: ; preds = %162 - %231 = landingpad { ptr, i32 } +219: ; preds = %222, %208, %149 + %220 = icmp ult i64 %.sroa.06.120.i, %17 + %221 = zext i1 %220 to i64 + %.sroa.06.1.i = add nuw i64 %.sroa.06.120.i, %221 + br i1 %220, label %149, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" + +222: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" + %223 = lshr i64 %166, 57 + %224 = trunc nuw nsw i64 %223 to i8 + %225 = add i64 %.sroa.06.019.i, -16 + %226 = and i64 %.val11.i, %225 + %227 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.06.019.i + store i8 %224, ptr %227, align 1 + %228 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %229 = getelementptr i8, ptr %228, i64 %226 + %230 = getelementptr i8, ptr %229, i64 16 + store i8 %224, ptr %230, align 1 + br label %219 + +231: ; preds = %163 + %232 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #26 unreachable -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit": ; preds = %218 - %.pre.i9 = load i64, ptr %14, align 8, !alias.scope !281 - %.pre.i9.fr = freeze i64 %.pre.i9 - %.pre40.i = add i64 %.pre.i9.fr, 1 - %232 = lshr i64 %.pre40.i, 3 - %233 = mul nuw i64 %232, 7 - %234 = icmp ult i64 %.pre.i9.fr, 8 - %spec.select = select i1 %234, i64 %.pre.i9.fr, i64 %233 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit": ; preds = %219 + %.pre.i10 = load i64, ptr %14, align 8, !alias.scope !281 + %.pre.i10.fr = freeze i64 %.pre.i10 + %.pre40.i = add i64 %.pre.i10.fr, 1 + %233 = lshr i64 %.pre40.i, 3 + %234 = mul nuw i64 %233, 7 + %235 = icmp ult i64 %.pre.i10.fr, 8 + %spec.select = select i1 %235, i64 %.pre.i10.fr, i64 %234 %.pre = load i64, ptr %8, align 8, !alias.scope !281 - br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" - -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit", %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i" - %235 = phi i64 [ %9, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i" ], [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] - %236 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h77ef094afd471d3eE.exit.i" ], [ %spec.select, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] - %237 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %238 = sub i64 %236, %235 - store i64 %238, ptr %237, align 8, !alias.scope !281 + br label %236 + +236: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit", %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" + %237 = phi i64 [ %9, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] + %238 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %spec.select, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] + %239 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %240 = sub i64 %238, %237 + store i64 %240, ptr %239, align 8, !alias.scope !281 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !281 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h777a3a14b06f5306E.exit" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h777a3a14b06f5306E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit", %21, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" - %.sroa.4.0.i = phi i64 [ %24, %21 ], [ undef, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %.sroa.14.07.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread" ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit" ] - %.sroa.0.0.i = phi i64 [ %23, %21 ], [ -9223372036854775807, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %.sroa.8.06.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread" ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit" ] - %239 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %240 = insertvalue { i64, i64 } %239, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %240 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h777a3a14b06f5306E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit", %21, %236 + %.sroa.4.0.i = phi i64 [ %24, %21 ], [ undef, %236 ], [ %.sroa.14.07.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread" ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit" ] + %.sroa.0.0.i = phi i64 [ %23, %21 ], [ -9223372036854775807, %236 ], [ %.sroa.8.06.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread" ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit" ] + %241 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %242 = insertvalue { i64, i64 } %241, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %242 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll b/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll index ae910497dd2..21d805ae7b5 100644 --- a/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll +++ b/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll @@ -36254,7 +36254,7 @@ define hidden void @_ZN14polars_parquet5arrow4read11deserialize12nested_utils20c %42 = load i64, ptr %14, align 8, !alias.scope !2819, !noalias !2816, !noundef !6 %43 = icmp ult i64 %42, 4611686018427387904 call void @llvm.assume(i1 %43) - %.not14.i = icmp eq i64 %39, 0 + %.not14.i = icmp eq i64 %34, 0 br i1 %.not14.i, label %"_ZN14polars_parquet7parquet8encoding9bitpacked6decode16Decoder$LT$T$GT$12collect_into17h100b9982af42f8ffE.exit", label %.lr.ph.i .lr.ph.i: ; preds = %33 @@ -36321,7 +36321,7 @@ _ZN14polars_parquet7parquet8encoding9bitpacked6decode11decode_pack17hc429c7ce337 br i1 %exitcond.not.i, label %._crit_edge.loopexit.i, label %45 "_ZN14polars_parquet7parquet8encoding9bitpacked6decode16Decoder$LT$T$GT$12collect_into17h100b9982af42f8ffE.exit": ; preds = %33, %._crit_edge.loopexit.i - %64 = phi i64 [ %.pre18.i, %._crit_edge.loopexit.i ], [ %34, %33 ] + %64 = phi i64 [ %.pre18.i, %._crit_edge.loopexit.i ], [ 0, %33 ] %65 = phi i64 [ %.pre.i, %._crit_edge.loopexit.i ], [ %42, %33 ] %66 = icmp ult i64 %65, 4611686018427387904 call void @llvm.assume(i1 %66) diff --git a/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll b/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll index 86cf1024037..07975815d92 100644 --- a/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll +++ b/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll @@ -1581,83 +1581,83 @@ common.resume: ; preds = %174, %76 147: ; preds = %18 tail call void @llvm.experimental.noalias.scope.decl(metadata !308) %.val16.i = load ptr, ptr %0, align 8, !alias.scope !308 - %148 = lshr i64 %22, 4 - %149 = and i64 %22, 15 - %.not.i.i.i.i.i = icmp ne i64 %149, 0 - %150 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %148, %150 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.i, label %.lr.ph.i.i9 + %.not.not4.i.i = icmp eq i64 %22, 0 + br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread, label %.lr.ph.i.i9 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread: ; preds = %147 + %148 = icmp ne ptr %.val16.i, null + tail call void @llvm.assume(i1 %148) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !308 + br label %287 .lr.ph.i.i9: ; preds = %147 - %151 = icmp ne ptr %.val16.i, null - tail call void @llvm.assume(i1 %151) - br label %152 - -152: ; preds = %152, %.lr.ph.i.i9 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %154, %152 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %153, %152 ] - %153 = add nsw i64 %.sroa.5.05.i.i, -1 - %154 = add i64 %.sroa.01.06.i.i, 16 - %155 = getelementptr inbounds i8, ptr %.val16.i, i64 %.sroa.01.06.i.i - %156 = load <16 x i8>, ptr %155, align 16, !noalias !311 - %.lobit.i.i.i = ashr <16 x i8> %156, splat (i8 7) - %157 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %158 = or <2 x i64> %157, splat (i64 -9187201950435737472) - store <2 x i64> %158, ptr %155, align 16, !noalias !314 - %.not.not.i.i = icmp eq i64 %153, 0 - br i1 %.not.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.i, label %152 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.i: ; preds = %152, %147 - %159 = icmp ne ptr %.val16.i, null - tail call void @llvm.assume(i1 %159) - %..i.i = tail call i64 @llvm.umax.i64(i64 %22, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %22, i64 16) - %160 = getelementptr inbounds i8, ptr %.val16.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %160, ptr nonnull align 1 %.val16.i, i64 %.9.i.i, i1 false), !noalias !308 + %149 = lshr i64 %22, 4 + %150 = and i64 %22, 15 + %.not.i.i.i.i.i = icmp ne i64 %150, 0 + %151 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %149, %151 + %152 = icmp ne ptr %.val16.i, null + tail call void @llvm.assume(i1 %152) + br label %167 + +._crit_edge.i.i10: ; preds = %167 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %22, i64 16) + %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %22, i64 16) + %153 = getelementptr inbounds i8, ptr %.val16.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %153, ptr nonnull align 1 %.val16.i, i64 %spec.select28.i, i1 false), !noalias !308 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !308 - %161 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store ptr @"_ZN4core3ptr85drop_in_place$LT$$LP$alloc..borrow..Cow$LT$str$GT$$C$serde_json..value..Value$RP$$GT$17hc5f4d9c7a396909eE.llvm.17854369902771195939", ptr %161, align 8, !noalias !308 - %162 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store i64 56, ptr %162, align 8, !noalias !308 + %154 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr @"_ZN4core3ptr85drop_in_place$LT$$LP$alloc..borrow..Cow$LT$str$GT$$C$serde_json..value..Value$RP$$GT$17hc5f4d9c7a396909eE.llvm.17854369902771195939", ptr %154, align 8, !noalias !308 + %155 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store i64 56, ptr %155, align 8, !noalias !308 store ptr %0, ptr %8, align 8, !noalias !308 - %.not9.i = icmp eq i64 %22, 0 - br i1 %.not9.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread, label %.lr.ph.i - -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.i %.sroa.0.sroa.4.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 8 %.sroa.0.sroa.5.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 16 %.sroa.0.sroa.6.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 24 %.sroa.0.sroa.7.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 32 %.sroa.0.sroa.8.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 40 %.sroa.0.sroa.9.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 48 - %163 = getelementptr inbounds nuw i8, ptr %7, i64 56 - %164 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %165 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %166 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %167 = load i64, ptr %2, align 8 - %168 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %169 = load i64, ptr %168, align 8 - %170 = xor i64 %167, 8317987319222330741 - %171 = xor i64 %169, 7237128888997146477 - %172 = xor i64 %167, 7816392313619706465 - %173 = xor i64 %169, 8387220255154660723 + %156 = getelementptr inbounds nuw i8, ptr %7, i64 56 + %157 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %158 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %159 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %160 = load i64, ptr %2, align 8 + %161 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %162 = load i64, ptr %161, align 8 + %163 = xor i64 %160, 8317987319222330741 + %164 = xor i64 %162, 7237128888997146477 + %165 = xor i64 %160, 7816392313619706465 + %166 = xor i64 %162, 8387220255154660723 br label %176 -174: ; preds = %.noexc21.i, %.noexc20.i, %.noexc19.i, %"_ZN4core4hash5impls52_$LT$impl$u20$core..hash..Hash$u20$for$u20$$RF$T$GT$4hash17h0109a3c227b2f635E.llvm.7778471099111231181.exit.i.i", %197 +167: ; preds = %167, %.lr.ph.i.i9 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %169, %167 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %168, %167 ] + %168 = add i64 %.sroa.5.05.i.i, -1 + %169 = add i64 %.sroa.01.06.i.i, 16 + %170 = getelementptr inbounds i8, ptr %.val16.i, i64 %.sroa.01.06.i.i + %171 = load <16 x i8>, ptr %170, align 16, !noalias !311 + %.lobit.i.i.i = ashr <16 x i8> %171, splat (i8 7) + %172 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %173 = or <2 x i64> %172, splat (i64 -9187201950435737472) + store <2 x i64> %173, ptr %170, align 16, !noalias !314 + %.not.not.i.i = icmp eq i64 %168, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i10, label %167 + +174: ; preds = %.noexc22.i, %.noexc21.i, %.noexc20.i, %"_ZN4core4hash5impls52_$LT$impl$u20$core..hash..Hash$u20$for$u20$$RF$T$GT$4hash17h0109a3c227b2f635E.llvm.7778471099111231181.exit.i.i", %197 %175 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9249fcb96d65c98E"(ptr noalias noundef align 8 dereferenceable(24) %8) #24 to label %common.resume unwind label %282 -176: ; preds = %281, %.lr.ph.i - %.sroa.02.08.i = phi i64 [ 0, %.lr.ph.i ], [ %177, %281 ] +176: ; preds = %281, %._crit_edge.i.i10 + %.sroa.02.08.i = phi i64 [ 0, %._crit_edge.i.i10 ], [ %177, %281 ] %177 = add nuw i64 %.sroa.02.08.i, 1 %178 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 %179 = getelementptr inbounds i8, ptr %178, i64 %.sroa.02.08.i %180 = load i8, ptr %179, align 1, !noundef !7 - %.not.i10 = icmp eq i8 %180, -128 - br i1 %.not.i10, label %181, label %281 + %.not.i11 = icmp eq i8 %180, -128 + br i1 %.not.i11, label %181, label %281 181: ; preds = %176 %.neg.i = mul i64 %.sroa.02.08.i, -56 @@ -1676,12 +1676,12 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor %187 = getelementptr inbounds i8, ptr %186, i64 -56 call void @llvm.experimental.noalias.scope.decl(metadata !322) call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7), !noalias !325 - store i64 %170, ptr %7, align 8, !alias.scope !327, !noalias !330 - store i64 %172, ptr %.sroa.0.sroa.4.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %171, ptr %.sroa.0.sroa.5.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %173, ptr %.sroa.0.sroa.6.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %167, ptr %.sroa.0.sroa.7.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %169, ptr %.sroa.0.sroa.8.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %163, ptr %7, align 8, !alias.scope !327, !noalias !330 + store i64 %165, ptr %.sroa.0.sroa.4.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %164, ptr %.sroa.0.sroa.5.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %166, ptr %.sroa.0.sroa.6.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %160, ptr %.sroa.0.sroa.7.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %162, ptr %.sroa.0.sroa.8.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.0.sroa.9.0..sroa_idx.i.i.i, i8 0, i64 24, i1 false), !alias.scope !327, !noalias !330 call void @llvm.experimental.noalias.scope.decl(metadata !332) %188 = load i64, ptr %187, align 8, !range !35, !alias.scope !335, !noalias !338, !noundef !7 @@ -1706,15 +1706,15 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor %199 = extractvalue { ptr, i64 } %.merged.i.i.i.i.i, 0 %200 = extractvalue { ptr, i64 } %.merged.i.i.i.i.i, 1 invoke void @"_ZN71_$LT$core..hash..sip..Hasher$LT$S$GT$$u20$as$u20$core..hash..Hasher$GT$5write17hdd82c62c8a9c99c3E.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %199, i64 noundef %200) - to label %.noexc19.i unwind label %174 + to label %.noexc20.i unwind label %174 -.noexc19.i: ; preds = %"_ZN4core4hash5impls52_$LT$impl$u20$core..hash..Hash$u20$for$u20$$RF$T$GT$4hash17h0109a3c227b2f635E.llvm.7778471099111231181.exit.i.i" +.noexc20.i: ; preds = %"_ZN4core4hash5impls52_$LT$impl$u20$core..hash..Hash$u20$for$u20$$RF$T$GT$4hash17h0109a3c227b2f635E.llvm.7778471099111231181.exit.i.i" call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6), !noalias !344 store i8 -1, ptr %6, align 1, !noalias !344 invoke void @"_ZN71_$LT$core..hash..sip..Hasher$LT$S$GT$$u20$as$u20$core..hash..Hasher$GT$5write17hdd82c62c8a9c99c3E.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %6, i64 noundef 1) - to label %.noexc20.i unwind label %174 + to label %.noexc21.i unwind label %174 -.noexc20.i: ; preds = %.noexc19.i +.noexc21.i: ; preds = %.noexc20.i call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6), !noalias !344 call void @llvm.experimental.noalias.scope.decl(metadata !351) call void @llvm.experimental.noalias.scope.decl(metadata !354) @@ -1722,71 +1722,71 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull readonly align 8 dereferenceable(72) %7, i64 32, i1 false), !noalias !325 %201 = load i64, ptr %.sroa.0.sroa.9.0..sroa_idx.i.i.i, align 8, !alias.scope !358, !noalias !325, !noundef !7 %202 = shl i64 %201, 56 - %203 = load i64, ptr %163, align 8, !alias.scope !358, !noalias !325, !noundef !7 + %203 = load i64, ptr %156, align 8, !alias.scope !358, !noalias !325, !noundef !7 %204 = or i64 %202, %203 - %205 = load i64, ptr %164, align 8, !noalias !357, !noundef !7 + %205 = load i64, ptr %157, align 8, !noalias !357, !noundef !7 %206 = xor i64 %205, %204 - store i64 %206, ptr %164, align 8, !noalias !357 + store i64 %206, ptr %157, align 8, !noalias !357 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17h335b7146b8b370bdE.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) - to label %.noexc21.i unwind label %174 + to label %.noexc22.i unwind label %174 -.noexc21.i: ; preds = %.noexc20.i +.noexc22.i: ; preds = %.noexc21.i %207 = load i64, ptr %5, align 8, !noalias !357, !noundef !7 %208 = xor i64 %207, %204 store i64 %208, ptr %5, align 8, !noalias !357 - %209 = load i64, ptr %165, align 8, !noalias !357, !noundef !7 + %209 = load i64, ptr %158, align 8, !noalias !357, !noundef !7 %210 = xor i64 %209, 255 - store i64 %210, ptr %165, align 8, !noalias !357 + store i64 %210, ptr %158, align 8, !noalias !357 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17hb9c1f1437bde9803E.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %211 unwind label %174 -211: ; preds = %.noexc21.i +211: ; preds = %.noexc22.i %212 = load i64, ptr %5, align 8, !noalias !357, !noundef !7 - %213 = load i64, ptr %166, align 8, !noalias !357, !noundef !7 + %213 = load i64, ptr %159, align 8, !noalias !357, !noundef !7 %214 = xor i64 %213, %212 - %215 = load i64, ptr %165, align 8, !noalias !357, !noundef !7 + %215 = load i64, ptr %158, align 8, !noalias !357, !noundef !7 %216 = xor i64 %214, %215 - %217 = load i64, ptr %164, align 8, !noalias !357, !noundef !7 + %217 = load i64, ptr %157, align 8, !noalias !357, !noundef !7 %218 = xor i64 %216, %217 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5), !noalias !357 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7), !noalias !325 - %.val.i14 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 + %.val.i15 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 %.val15.i = load i64, ptr %19, align 8, !alias.scope !308, !noundef !7 - %.sroa.0.05.i.i15 = and i64 %.val15.i, %218 - %219 = getelementptr inbounds i8, ptr %.val.i14, i64 %.sroa.0.05.i.i15 - %.0.copyload.i46.i.i16 = load <16 x i8>, ptr %219, align 1, !noalias !359 - %220 = icmp slt <16 x i8> %.0.copyload.i46.i.i16, zeroinitializer + %.sroa.0.05.i.i16 = and i64 %.val15.i, %218 + %219 = getelementptr inbounds i8, ptr %.val.i15, i64 %.sroa.0.05.i.i16 + %.0.copyload.i46.i.i17 = load <16 x i8>, ptr %219, align 1, !noalias !359 + %220 = icmp slt <16 x i8> %.0.copyload.i46.i.i17, zeroinitializer %221 = bitcast <16 x i1> %220 to i16 - %.not.i.not7.i.i17 = icmp eq i16 %221, 0 - br i1 %.not.i.not7.i.i17, label %.lr.ph.i18.i, label %._crit_edge.i.i18 + %.not.i.not7.i.i18 = icmp eq i16 %221, 0 + br i1 %.not.i.not7.i.i18, label %.lr.ph.i19.i, label %._crit_edge.i18.i -.lr.ph.i18.i: ; preds = %211, %.lr.ph.i18.i - %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i18.i ], [ %.sroa.0.05.i.i15, %211 ] - %.sroa.7.08.i.i24 = phi i64 [ %222, %.lr.ph.i18.i ], [ 0, %211 ] +.lr.ph.i19.i: ; preds = %211, %.lr.ph.i19.i + %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ], [ %.sroa.0.05.i.i16, %211 ] + %.sroa.7.08.i.i24 = phi i64 [ %222, %.lr.ph.i19.i ], [ 0, %211 ] %222 = add i64 %.sroa.7.08.i.i24, 16 %223 = add i64 %222, %.sroa.0.09.i.i23 %.sroa.0.0.i.i25 = and i64 %223, %.val15.i - %224 = getelementptr inbounds i8, ptr %.val.i14, i64 %.sroa.0.0.i.i25 + %224 = getelementptr inbounds i8, ptr %.val.i15, i64 %.sroa.0.0.i.i25 %.0.copyload.i4.i.i26 = load <16 x i8>, ptr %224, align 1, !noalias !359 %225 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer %226 = bitcast <16 x i1> %225 to i16 %.not.i.not.i.i27 = icmp eq i16 %226, 0 - br i1 %.not.i.not.i.i27, label %.lr.ph.i18.i, label %._crit_edge.i.i18 + br i1 %.not.i.not.i.i27, label %.lr.ph.i19.i, label %._crit_edge.i18.i -._crit_edge.i.i18: ; preds = %.lr.ph.i18.i, %211 - %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i15, %211 ], [ %.sroa.0.0.i.i25, %.lr.ph.i18.i ] - %.lcssa.i.i20 = phi i16 [ %221, %211 ], [ %226, %.lr.ph.i18.i ] +._crit_edge.i18.i: ; preds = %.lr.ph.i19.i, %211 + %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i16, %211 ], [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ] + %.lcssa.i.i20 = phi i16 [ %221, %211 ], [ %226, %.lr.ph.i19.i ] %227 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i20, i1 true) %228 = zext nneg i16 %227 to i64 %229 = add i64 %.sroa.0.0.lcssa.i.i19, %228 %230 = and i64 %229, %.val15.i - %231 = getelementptr inbounds i8, ptr %.val.i14, i64 %230 + %231 = getelementptr inbounds i8, ptr %.val.i15, i64 %230 %232 = load i8, ptr %231, align 1, !noundef !7 %233 = icmp sgt i8 %232, -1 br i1 %233, label %234, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i -234: ; preds = %._crit_edge.i.i18 - %235 = load <16 x i8>, ptr %.val.i14, align 16, !noalias !362 +234: ; preds = %._crit_edge.i18.i + %235 = load <16 x i8>, ptr %.val.i15, align 16, !noalias !362 %236 = icmp slt <16 x i8> %235, zeroinitializer %237 = bitcast <16 x i1> %236 to i16 %238 = icmp ne i16 %237, 0 @@ -1795,10 +1795,10 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %238) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; preds = %234, %._crit_edge.i.i18 - %.0.i.i.i21 = phi i64 [ %240, %234 ], [ %230, %._crit_edge.i.i18 ] - %241 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i15 - %242 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i15 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; preds = %234, %._crit_edge.i18.i + %.0.i.i.i21 = phi i64 [ %240, %234 ], [ %230, %._crit_edge.i18.i ] + %241 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i16 + %242 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i16 %243 = xor i64 %242, %241 %.unshifted.i = and i64 %243, %.val15.i %244 = icmp ult i64 %.unshifted.i, 16 @@ -1806,9 +1806,9 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; 245: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i %.neg14.i = mul i64 %.0.i.i.i21, -56 - %246 = getelementptr i8, ptr %.val.i14, i64 %.neg14.i + %246 = getelementptr i8, ptr %.val.i15, i64 %.neg14.i %247 = getelementptr i8, ptr %246, i64 -56 - %248 = getelementptr inbounds i8, ptr %.val.i14, i64 %.0.i.i.i21 + %248 = getelementptr inbounds i8, ptr %.val.i15, i64 %.0.i.i.i21 %249 = load i8, ptr %248, align 1, !noundef !7 %250 = lshr i64 %218, 57 %251 = trunc nuw nsw i64 %250 to i8 @@ -1827,7 +1827,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; %260 = trunc nuw nsw i64 %259 to i8 %261 = add i64 %.sroa.02.08.i, -16 %262 = and i64 %.val15.i, %261 - %263 = getelementptr inbounds i8, ptr %.val.i14, i64 %.sroa.02.08.i + %263 = getelementptr inbounds i8, ptr %.val.i15, i64 %.sroa.02.08.i store i8 %260, ptr %263, align 1 %264 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 %265 = getelementptr i8, ptr %264, i64 %262 @@ -1862,8 +1862,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; br label %281 281: ; preds = %272, %258, %176 - %exitcond.not.i11 = icmp eq i64 %.sroa.02.08.i, %20 - br i1 %exitcond.not.i11, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, label %176 + %exitcond.not.i12 = icmp eq i64 %.sroa.02.08.i, %20 + br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, label %176 282: ; preds = %174 %283 = landingpad { ptr, i32 } @@ -1880,26 +1880,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit: ; pr %286 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %286, i64 %.pre15.i.fr, i64 %285 %.pre = load i64, ptr %11, align 8, !alias.scope !308 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.i - %287 = phi i64 [ %12, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] - %288 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] - %289 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %290 = sub i64 %288, %287 - store i64 %290, ptr %289, align 8, !alias.scope !308 + br label %287 + +287: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread + %288 = phi i64 [ %12, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] + %289 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] + %290 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %291 = sub i64 %289, %288 + store i64 %291, ptr %290, align 8, !alias.scope !308 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8), !noalias !308 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i: ; preds = %75, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %.sroa.9.050.ph, %75 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %.sroa.5.052.ph, %75 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit" ] - %291 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %292 = insertvalue { i64, i64 } %291, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i: ; preds = %75, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit", %287 + %.sroa.4.1.i = phi i64 [ undef, %287 ], [ %.sroa.9.050.ph, %75 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %287 ], [ %.sroa.5.052.ph, %75 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit" ] + %292 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %293 = insertvalue { i64, i64 } %292, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hd521649ce15b7224E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hd521649ce15b7224E.exit: ; preds = %16, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i - %.merged.i = phi { i64, i64 } [ %17, %16 ], [ %292, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i ] + %.merged.i = phi { i64, i64 } [ %17, %16 ], [ %293, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll b/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll index dc7949252de..4813baf38e5 100644 --- a/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll +++ b/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll @@ -688,7 +688,7 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res store i64 8, ptr %.sroa.622.i.i.sroa.4.0..sroa.622.0..sroa_idx.i.i.sroa_idx, align 8, !noalias !89 %.sroa.622.i.i.sroa.5.0..sroa.622.0..sroa_idx.i.i.sroa_idx = getelementptr inbounds nuw i8, ptr %6, i64 40 store i64 16, ptr %.sroa.622.i.i.sroa.5.0..sroa.622.0..sroa_idx.i.i.sroa_idx, align 8, !noalias !89 - %invariant.gep70 = getelementptr i8, ptr %63, i64 16 + %invariant.gep71 = getelementptr i8, ptr %63, i64 16 %.not = icmp eq i64 %20, 0 br i1 %.not, label %.preheader.preheader, label %.lr.ph @@ -697,12 +697,12 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res .lr.ph: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit" %69 = load ptr, ptr %0, align 8, !alias.scope !89, !nonnull !4, !noundef !4 - %invariant.gep73 = getelementptr i8, ptr %69, i64 -8 + %invariant.gep74 = getelementptr i8, ptr %69, i64 -8 br label %77 "_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread": ; preds = %40, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" - %.sroa.5.044.ph = phi i64 [ %.sroa.6.063.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %42, %40 ] - %.sroa.9.042.ph = phi i64 [ %.sroa.11.05061.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %.sroa.67.0.i.i, %40 ] + %.sroa.5.045.ph = phi i64 [ %.sroa.6.063.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %42, %40 ] + %.sroa.9.043.ph = phi i64 [ %.sroa.11.05061.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %.sroa.67.0.i.i, %40 ] call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6), !noalias !89 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit" @@ -725,15 +725,15 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit, label %.preheader 77: ; preds = %.lr.ph, %.backedge - %.sroa.011.0.i.i72 = phi i64 [ 0, %.lr.ph ], [ %78, %.backedge ] - %78 = add nuw i64 %.sroa.011.0.i.i72, 1 - %79 = getelementptr inbounds i8, ptr %69, i64 %.sroa.011.0.i.i72 + %.sroa.011.0.i.i73 = phi i64 [ 0, %.lr.ph ], [ %78, %.backedge ] + %78 = add nuw i64 %.sroa.011.0.i.i73, 1 + %79 = getelementptr inbounds i8, ptr %69, i64 %.sroa.011.0.i.i73 %80 = load i8, ptr %79, align 1, !noundef !4 %81 = icmp sgt i8 %80, -1 br i1 %81, label %94, label %.backedge .backedge: ; preds = %77, %121 - %exitcond.not = icmp eq i64 %.sroa.011.0.i.i72, %18 + %exitcond.not = icmp eq i64 %.sroa.011.0.i.i73, %18 br i1 %exitcond.not, label %.preheader.preheader, label %77 _ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit: ; preds = %.preheader @@ -765,9 +765,9 @@ _ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit: ; preds = %.preheade br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit" 94: ; preds = %77 - %95 = sub nsw i64 0, %.sroa.011.0.i.i72 - %gep74 = getelementptr i64, ptr %invariant.gep73, i64 %95 - %.val5.i = load i64, ptr %gep74, align 8, !noalias !108, !noundef !4 + %95 = sub nsw i64 0, %.sroa.011.0.i.i73 + %gep75 = getelementptr i64, ptr %invariant.gep74, i64 %95 + %.val5.i = load i64, ptr %gep75, align 8, !noalias !108, !noundef !4 %96 = icmp ult i64 %.val5.i, %3 br i1 %96, label %98, label %97, !prof !112 @@ -830,9 +830,9 @@ _ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit: ; preds = %.preheade %125 = add i64 %.0.i.i, -16 %126 = and i64 %125, %64 store i8 %124, ptr %122, align 1 - %gep71 = getelementptr i8, ptr %invariant.gep70, i64 %126 - store i8 %124, ptr %gep71, align 1 - %127 = shl i64 %.sroa.011.0.i.i72, 3 + %gep72 = getelementptr i8, ptr %invariant.gep71, i64 %126 + store i8 %124, ptr %gep72, align 1 + %127 = shl i64 %.sroa.011.0.i.i73, 3 %128 = sub nuw nsw i64 -8, %127 %129 = getelementptr inbounds i8, ptr %69, i64 %128 %130 = shl i64 %.0.i.i, 3 @@ -849,47 +849,46 @@ common.resume: ; preds = %148, %70 134: ; preds = %16 tail call void @llvm.experimental.noalias.scope.decl(metadata !122) %.val.i10 = load ptr, ptr %0, align 8, !alias.scope !122 - %135 = lshr i64 %20, 4 - %136 = and i64 %20, 15 - %.not.i.i.i.i.i = icmp ne i64 %136, 0 - %137 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %135, %137 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i", label %.lr.ph.i.i11 + %.not.not4.i.i = icmp eq i64 %20, 0 + br i1 %.not.not4.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread", label %.lr.ph.i.i11 + +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread": ; preds = %134 + %135 = icmp ne ptr %.val.i10, null + tail call void @llvm.assume(i1 %135) + br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" .lr.ph.i.i11: ; preds = %134 - %138 = icmp ne ptr %.val.i10, null - tail call void @llvm.assume(i1 %138) - br label %139 - -139: ; preds = %139, %.lr.ph.i.i11 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i11 ], [ %141, %139 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i11 ], [ %140, %139 ] - %140 = add nsw i64 %.sroa.5.05.i.i, -1 - %141 = add i64 %.sroa.01.06.i.i, 16 - %142 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.01.06.i.i - %143 = load <16 x i8>, ptr %142, align 16, !noalias !125 - %.lobit.i.i.i = ashr <16 x i8> %143, splat (i8 7) - %144 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %145 = or <2 x i64> %144, splat (i64 -9187201950435737472) - store <2 x i64> %145, ptr %142, align 16, !noalias !128 - %.not.not.i.i = icmp eq i64 %140, 0 - br i1 %.not.not.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i", label %139 - -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i": ; preds = %139, %134 - %146 = icmp ne ptr %.val.i10, null - tail call void @llvm.assume(i1 %146) - %..i.i = tail call i64 @llvm.umax.i64(i64 %20, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %20, i64 16) - %147 = getelementptr inbounds i8, ptr %.val.i10, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %147, ptr nonnull align 1 %.val.i10, i64 %.9.i.i, i1 false), !noalias !122 - %.not26.i = icmp eq i64 %20, 0 - br i1 %.not26.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread", label %.lr.ph24.i.preheader - -.lr.ph24.i.preheader: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i" - %invariant.gep64 = getelementptr i8, ptr %.val.i10, i64 -8 - %invariant.gep66 = getelementptr i8, ptr %.val.i10, i64 16 - br label %.lr.ph24.i + %136 = lshr i64 %20, 4 + %137 = and i64 %20, 15 + %.not.i.i.i.i.i = icmp ne i64 %137, 0 + %138 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %136, %138 + %139 = icmp ne ptr %.val.i10, null + tail call void @llvm.assume(i1 %139) + br label %141 + +._crit_edge.i.i12: ; preds = %141 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %20, i64 16) + %spec.select66.i = tail call i64 @llvm.umin.i64(i64 %20, i64 16) + %140 = getelementptr inbounds i8, ptr %.val.i10, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %140, ptr nonnull align 1 %.val.i10, i64 %spec.select66.i, i1 false), !noalias !122 + %invariant.gep65 = getelementptr i8, ptr %.val.i10, i64 -8 + %invariant.gep67 = getelementptr i8, ptr %.val.i10, i64 16 + br label %152 + +141: ; preds = %141, %.lr.ph.i.i11 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i11 ], [ %143, %141 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i11 ], [ %142, %141 ] + %142 = add i64 %.sroa.5.05.i.i, -1 + %143 = add i64 %.sroa.01.06.i.i, 16 + %144 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.01.06.i.i + %145 = load <16 x i8>, ptr %144, align 16, !noalias !125 + %.lobit.i.i.i = ashr <16 x i8> %145, splat (i8 7) + %146 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %147 = or <2 x i64> %146, splat (i64 -9187201950435737472) + store <2 x i64> %147, ptr %144, align 16, !noalias !128 + %.not.not.i.i = icmp eq i64 %142, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i12, label %141 148: ; preds = %._crit_edge.i %149 = landingpad { ptr, i32 } @@ -899,156 +898,156 @@ common.resume: ; preds = %148, %70 store i64 %151, ptr %150, align 8, !noalias !131 br label %common.resume -.lr.ph24.i: ; preds = %.lr.ph24.i.preheader, %208 - %.sroa.02.023.i = phi i64 [ %152, %208 ], [ 0, %.lr.ph24.i.preheader ] - %152 = add nuw i64 %.sroa.02.023.i, 1 - %153 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.02.023.i - %154 = load i8, ptr %153, align 1, !noundef !4 - %.not.i12 = icmp eq i8 %154, -128 - br i1 %.not.i12, label %155, label %208 - -155: ; preds = %.lr.ph24.i - %156 = shl i64 %.sroa.02.023.i, 3 - %157 = sub nuw nsw i64 -8, %156 - %158 = getelementptr inbounds i8, ptr %.val.i10, i64 %157 - %159 = sub nsw i64 0, %.sroa.02.023.i - %gep65 = getelementptr i64, ptr %invariant.gep64, i64 %159 - %.val5.i17.i = load i64, ptr %gep65, align 8, !noalias !136, !noundef !4 - %160 = icmp ult i64 %.val5.i17.i, %3 - br i1 %160, label %.lr.ph.i, label %._crit_edge.i, !prof !140 +152: ; preds = %209, %._crit_edge.i.i12 + %.sroa.02.023.i = phi i64 [ 0, %._crit_edge.i.i12 ], [ %153, %209 ] + %153 = add nuw i64 %.sroa.02.023.i, 1 + %154 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.02.023.i + %155 = load i8, ptr %154, align 1, !noundef !4 + %.not.i13 = icmp eq i8 %155, -128 + br i1 %.not.i13, label %156, label %209 + +156: ; preds = %152 + %157 = shl i64 %.sroa.02.023.i, 3 + %158 = sub nuw nsw i64 -8, %157 + %159 = getelementptr inbounds i8, ptr %.val.i10, i64 %158 + %160 = sub nsw i64 0, %.sroa.02.023.i + %gep66 = getelementptr i64, ptr %invariant.gep65, i64 %160 + %.val5.i17.i = load i64, ptr %gep66, align 8, !noalias !136, !noundef !4 + %161 = icmp ult i64 %.val5.i17.i, %3 + br i1 %161, label %.lr.ph.i, label %._crit_edge.i, !prof !140 _ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i: ; preds = %.preheader.i - %.val5.i.i = load i64, ptr %gep65, align 8, !noalias !141, !noundef !4 - %161 = icmp ult i64 %.val5.i.i, %3 - br i1 %161, label %.lr.ph.i, label %._crit_edge.i, !prof !143 + %.val5.i.i = load i64, ptr %gep66, align 8, !noalias !141, !noundef !4 + %162 = icmp ult i64 %.val5.i.i, %3 + br i1 %162, label %.lr.ph.i, label %._crit_edge.i, !prof !143 -._crit_edge.i: ; preds = %155, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i - %.val5.i.lcssa.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i ], [ %.val5.i17.i, %155 ] +._crit_edge.i: ; preds = %156, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i + %.val5.i.lcssa.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i ], [ %.val5.i17.i, %156 ] invoke void @_ZN4core9panicking18panic_bounds_check17he5254f424ac3a4c4E(i64 noundef %.val5.i.lcssa.i, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.7e20509450ee5745c10100bff534e0f7.10) #36 to label %.noexc.i unwind label %148 .noexc.i: ; preds = %._crit_edge.i unreachable -.lr.ph.i: ; preds = %155, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i - %.val5.i19.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i ], [ %.val5.i17.i, %155 ] - %162 = getelementptr inbounds [0 x { { { { i64, ptr, {} }, i64 } }, { i64, [30 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i19.i, i32 2 - %163 = load i64, ptr %162, align 8, !noalias !144, !noundef !4 - %.sroa.0.015.i.i17 = and i64 %163, %18 - %164 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.015.i.i17 - %.0.copyload.i1316.i.i18 = load <16 x i8>, ptr %164, align 1, !noalias !146 - %165 = icmp slt <16 x i8> %.0.copyload.i1316.i.i18, zeroinitializer - %166 = bitcast <16 x i1> %165 to i16 - %.not17.i.i19 = icmp eq i16 %166, 0 - br i1 %.not17.i.i19, label %.lr.ph.i18.i, label %._crit_edge.i.i20 - -._crit_edge.i.i20: ; preds = %.lr.ph.i18.i, %.lr.ph.i - %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.015.i.i17, %.lr.ph.i ], [ %.sroa.0.0.i.i28, %.lr.ph.i18.i ] - %.lcssa.i.i22 = phi i16 [ %166, %.lr.ph.i ], [ %177, %.lr.ph.i18.i ] - %167 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i22, i1 true) - %168 = zext nneg i16 %167 to i64 - %169 = add i64 %.sroa.0.0.lcssa.i.i21, %168 - %170 = and i64 %169, %18 - %171 = getelementptr inbounds i8, ptr %.val.i10, i64 %170 - %172 = load i8, ptr %171, align 1, !noalias !151, !noundef !4 - %cond.i.i23 = icmp sgt i8 %172, -1 - br i1 %cond.i.i23, label %178, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" - -.lr.ph.i18.i: ; preds = %.lr.ph.i, %.lr.ph.i18.i - %.sroa.0.019.i.i26 = phi i64 [ %.sroa.0.0.i.i28, %.lr.ph.i18.i ], [ %.sroa.0.015.i.i17, %.lr.ph.i ] - %.sroa.9.018.i.i27 = phi i64 [ %173, %.lr.ph.i18.i ], [ 0, %.lr.ph.i ] - %173 = add i64 %.sroa.9.018.i.i27, 16 - %174 = add i64 %173, %.sroa.0.019.i.i26 - %.sroa.0.0.i.i28 = and i64 %174, %18 - %175 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.0.i.i28 - %.0.copyload.i13.i.i29 = load <16 x i8>, ptr %175, align 1, !noalias !146 - %176 = icmp slt <16 x i8> %.0.copyload.i13.i.i29, zeroinitializer - %177 = bitcast <16 x i1> %176 to i16 - %.not.i.i30 = icmp eq i16 %177, 0 - br i1 %.not.i.i30, label %.lr.ph.i18.i, label %._crit_edge.i.i20 - -178: ; preds = %._crit_edge.i.i20 - %179 = load <16 x i8>, ptr %.val.i10, align 16, !noalias !152 - %180 = icmp slt <16 x i8> %179, zeroinitializer - %181 = bitcast <16 x i1> %180 to i16 - %182 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %181, i1 false) - %183 = zext nneg i16 %182 to i64 +.lr.ph.i: ; preds = %156, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i + %.val5.i19.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i ], [ %.val5.i17.i, %156 ] + %163 = getelementptr inbounds [0 x { { { { i64, ptr, {} }, i64 } }, { i64, [30 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i19.i, i32 2 + %164 = load i64, ptr %163, align 8, !noalias !144, !noundef !4 + %.sroa.0.015.i.i18 = and i64 %164, %18 + %165 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.015.i.i18 + %.0.copyload.i1316.i.i19 = load <16 x i8>, ptr %165, align 1, !noalias !146 + %166 = icmp slt <16 x i8> %.0.copyload.i1316.i.i19, zeroinitializer + %167 = bitcast <16 x i1> %166 to i16 + %.not17.i.i20 = icmp eq i16 %167, 0 + br i1 %.not17.i.i20, label %.lr.ph.i19.i, label %._crit_edge.i18.i + +._crit_edge.i18.i: ; preds = %.lr.ph.i19.i, %.lr.ph.i + %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.015.i.i18, %.lr.ph.i ], [ %.sroa.0.0.i.i28, %.lr.ph.i19.i ] + %.lcssa.i.i22 = phi i16 [ %167, %.lr.ph.i ], [ %178, %.lr.ph.i19.i ] + %168 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i22, i1 true) + %169 = zext nneg i16 %168 to i64 + %170 = add i64 %.sroa.0.0.lcssa.i.i21, %169 + %171 = and i64 %170, %18 + %172 = getelementptr inbounds i8, ptr %.val.i10, i64 %171 + %173 = load i8, ptr %172, align 1, !noalias !151, !noundef !4 + %cond.i.i23 = icmp sgt i8 %173, -1 + br i1 %cond.i.i23, label %179, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" + +.lr.ph.i19.i: ; preds = %.lr.ph.i, %.lr.ph.i19.i + %.sroa.0.019.i.i26 = phi i64 [ %.sroa.0.0.i.i28, %.lr.ph.i19.i ], [ %.sroa.0.015.i.i18, %.lr.ph.i ] + %.sroa.9.018.i.i27 = phi i64 [ %174, %.lr.ph.i19.i ], [ 0, %.lr.ph.i ] + %174 = add i64 %.sroa.9.018.i.i27, 16 + %175 = add i64 %174, %.sroa.0.019.i.i26 + %.sroa.0.0.i.i28 = and i64 %175, %18 + %176 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.0.i.i28 + %.0.copyload.i13.i.i29 = load <16 x i8>, ptr %176, align 1, !noalias !146 + %177 = icmp slt <16 x i8> %.0.copyload.i13.i.i29, zeroinitializer + %178 = bitcast <16 x i1> %177 to i16 + %.not.i.i30 = icmp eq i16 %178, 0 + br i1 %.not.i.i30, label %.lr.ph.i19.i, label %._crit_edge.i18.i + +179: ; preds = %._crit_edge.i18.i + %180 = load <16 x i8>, ptr %.val.i10, align 16, !noalias !152 + %181 = icmp slt <16 x i8> %180, zeroinitializer + %182 = bitcast <16 x i1> %181 to i16 + %183 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %182, i1 false) + %184 = zext nneg i16 %183 to i64 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i": ; preds = %178, %._crit_edge.i.i20 - %.0.i.i24 = phi i64 [ %183, %178 ], [ %170, %._crit_edge.i.i20 ] - %184 = shl i64 %.0.i.i24, 3 - %185 = sub nuw nsw i64 -8, %184 - %186 = getelementptr inbounds i8, ptr %.val.i10, i64 %185 - %187 = sub i64 %.sroa.02.023.i, %.sroa.0.015.i.i17 - %188 = sub i64 %.0.i.i24, %.sroa.0.015.i.i17 - %189 = xor i64 %188, %187 - %.unshifted.i = and i64 %189, %18 - %190 = icmp ult i64 %.unshifted.i, 16 - br i1 %190, label %.critedge.i, label %191 - -191: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" - %192 = getelementptr inbounds i8, ptr %.val.i10, i64 %.0.i.i24 - %193 = load i8, ptr %192, align 1, !noundef !4 - %194 = lshr i64 %163, 57 - %195 = trunc nuw nsw i64 %194 to i8 - %196 = add i64 %.0.i.i24, -16 - %197 = and i64 %196, %18 - store i8 %195, ptr %192, align 1 - %gep = getelementptr i8, ptr %invariant.gep66, i64 %197 - store i8 %195, ptr %gep, align 1 - %198 = icmp eq i8 %193, -1 - br i1 %198, label %204, label %.preheader.i - -.preheader.i: ; preds = %191, %.preheader.i - %.0910.i.i = phi i64 [ %203, %.preheader.i ], [ 0, %191 ] - %199 = getelementptr inbounds nuw i8, ptr %158, i64 %.0910.i.i - %200 = getelementptr inbounds nuw i8, ptr %186, i64 %.0910.i.i - %201 = load i8, ptr %199, align 1 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i": ; preds = %179, %._crit_edge.i18.i + %.0.i.i24 = phi i64 [ %184, %179 ], [ %171, %._crit_edge.i18.i ] + %185 = shl i64 %.0.i.i24, 3 + %186 = sub nuw nsw i64 -8, %185 + %187 = getelementptr inbounds i8, ptr %.val.i10, i64 %186 + %188 = sub i64 %.sroa.02.023.i, %.sroa.0.015.i.i18 + %189 = sub i64 %.0.i.i24, %.sroa.0.015.i.i18 + %190 = xor i64 %189, %188 + %.unshifted.i = and i64 %190, %18 + %191 = icmp ult i64 %.unshifted.i, 16 + br i1 %191, label %.critedge.i, label %192 + +192: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" + %193 = getelementptr inbounds i8, ptr %.val.i10, i64 %.0.i.i24 + %194 = load i8, ptr %193, align 1, !noundef !4 + %195 = lshr i64 %164, 57 + %196 = trunc nuw nsw i64 %195 to i8 + %197 = add i64 %.0.i.i24, -16 + %198 = and i64 %197, %18 + store i8 %196, ptr %193, align 1 + %gep = getelementptr i8, ptr %invariant.gep67, i64 %198 + store i8 %196, ptr %gep, align 1 + %199 = icmp eq i8 %194, -1 + br i1 %199, label %205, label %.preheader.i + +.preheader.i: ; preds = %192, %.preheader.i + %.0910.i.i = phi i64 [ %204, %.preheader.i ], [ 0, %192 ] + %200 = getelementptr inbounds nuw i8, ptr %159, i64 %.0910.i.i + %201 = getelementptr inbounds nuw i8, ptr %187, i64 %.0910.i.i %202 = load i8, ptr %200, align 1 - store i8 %202, ptr %199, align 1 - store i8 %201, ptr %200, align 1 - %203 = add nuw nsw i64 %.0910.i.i, 1 - %exitcond.not.i.i = icmp eq i64 %203, 8 + %203 = load i8, ptr %201, align 1 + store i8 %203, ptr %200, align 1 + store i8 %202, ptr %201, align 1 + %204 = add nuw nsw i64 %.0910.i.i, 1 + %exitcond.not.i.i = icmp eq i64 %204, 8 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i, label %.preheader.i -204: ; preds = %191 - %205 = add i64 %.sroa.02.023.i, -16 - %206 = and i64 %205, %18 - store i8 -1, ptr %153, align 1 - %gep67 = getelementptr i8, ptr %invariant.gep66, i64 %206 - store i8 -1, ptr %gep67, align 1 - %207 = load i64, ptr %158, align 1 - store i64 %207, ptr %186, align 1 - br label %208 +205: ; preds = %192 + %206 = add i64 %.sroa.02.023.i, -16 + %207 = and i64 %206, %18 + store i8 -1, ptr %154, align 1 + %gep68 = getelementptr i8, ptr %invariant.gep67, i64 %207 + store i8 -1, ptr %gep68, align 1 + %208 = load i64, ptr %159, align 1 + store i64 %208, ptr %187, align 1 + br label %209 -208: ; preds = %.critedge.i, %204, %.lr.ph24.i - %exitcond.not.i13 = icmp eq i64 %.sroa.02.023.i, %18 - br i1 %exitcond.not.i13, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread", label %.lr.ph24.i +209: ; preds = %.critedge.i, %205, %152 + %exitcond.not.i14 = icmp eq i64 %.sroa.02.023.i, %18 + br i1 %exitcond.not.i14, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit", label %152 .critedge.i: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" - %209 = lshr i64 %163, 57 - %210 = trunc nuw nsw i64 %209 to i8 - %211 = add i64 %.sroa.02.023.i, -16 - %212 = and i64 %211, %18 - store i8 %210, ptr %153, align 1 - %gep69 = getelementptr i8, ptr %invariant.gep66, i64 %212 - store i8 %210, ptr %gep69, align 1 - br label %208 - -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread": ; preds = %208, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i" - %213 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i" ], [ %.0.i, %208 ] - %214 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %215 = sub i64 %213, %8 - store i64 %215, ptr %214, align 8, !alias.scope !122 + %210 = lshr i64 %164, 57 + %211 = trunc nuw nsw i64 %210 to i8 + %212 = add i64 %.sroa.02.023.i, -16 + %213 = and i64 %212, %18 + store i8 %211, ptr %154, align 1 + %gep70 = getelementptr i8, ptr %invariant.gep67, i64 %213 + store i8 %211, ptr %gep70, align 1 + br label %209 + +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit": ; preds = %209, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" + %214 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" ], [ %.0.i, %209 ] + %215 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %216 = sub i64 %214, %8 + store i64 %216, ptr %215, align 8, !alias.scope !122 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit", %12, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" - %.sroa.4.0.i = phi i64 [ %15, %12 ], [ undef, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" ], [ %.sroa.9.042.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] - %.sroa.0.0.i = phi i64 [ %14, %12 ], [ -9223372036854775807, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" ], [ %.sroa.5.044.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] - %216 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %217 = insertvalue { i64, i64 } %216, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %217 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit", %12, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" + %.sroa.4.0.i = phi i64 [ %15, %12 ], [ undef, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" ], [ %.sroa.9.043.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] + %.sroa.0.0.i = phi i64 [ %14, %12 ], [ -9223372036854775807, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" ], [ %.sroa.5.045.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] + %217 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %218 = insertvalue { i64, i64 } %217, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %218 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll b/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll index 99c3d547a16..7fe139463a4 100644 --- a/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll +++ b/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll @@ -1865,219 +1865,224 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val17 = load i64, ptr %6, align 8, !noundef !4 %7 = add i64 %.val17, 1 - %8 = lshr i64 %7, 4 - %9 = and i64 %7, 15 - %.not.i.i.i.i = icmp ne i64 %9, 0 - %10 = zext i1 %.not.i.i.i.i to i64 - %.0.i.i.i.i = add nuw nsw i64 %8, %10 - %.not.not4.i = icmp eq i64 %.0.i.i.i.i, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit, label %.lr.ph.i + %.not.not4.i = icmp eq i64 %7, 0 + br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23, label %.lr.ph.i -.lr.ph.i: ; preds = %4 - %11 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %11) - br label %12 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23: ; preds = %4 + %8 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %8) + %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + br label %._crit_edge -12: ; preds = %12, %.lr.ph.i - %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %14, %12 ] - %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %13, %12 ] - %13 = add nsw i64 %.sroa.5.05.i, -1 - %14 = add i64 %.sroa.01.06.i, 16 - %15 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i - %16 = load <16 x i8>, ptr %15, align 16, !noalias !317 - %.lobit.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16, !noalias !320 - %.not.not.i = icmp eq i64 %13, 0 - br i1 %.not.not.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit, label %12 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.9.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds i8, ptr %.val, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val, i64 %.9.i, i1 false) +.lr.ph.i: ; preds = %4 + %10 = lshr i64 %7, 4 + %11 = and i64 %7, 15 + %.not.i.i.i.i = icmp ne i64 %11, 0 + %12 = zext i1 %.not.i.i.i.i to i64 + %.0.i.i.i.i = add nuw nsw i64 %10, %12 + %13 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %13) + br label %17 + +._crit_edge.i: ; preds = %17 + %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) + %spec.select33 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) + %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select33, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %15, align 8 + %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %16, align 8 store ptr %0, ptr %5, align 8 - %.not11 = icmp eq i64 %7, 0 - br i1 %.not11, label %._crit_edge, label %.lr.ph - -23: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit - %24 = landingpad { ptr, i32 } + br label %.lr.ph + +17: ; preds = %17, %.lr.ph.i + %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %19, %17 ] + %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %18, %17 ] + %18 = add i64 %.sroa.5.05.i, -1 + %19 = add i64 %.sroa.01.06.i, 16 + %20 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.01.06.i + %21 = load <16 x i8>, ptr %20, align 16, !noalias !317 + %.lobit.i.i = ashr <16 x i8> %21, splat (i8 7) + %22 = bitcast <16 x i8> %.lobit.i.i to <2 x i64> + %23 = or <2 x i64> %22, splat (i64 -9187201950435737472) + store <2 x i64> %23, ptr %20, align 16, !noalias !320 + %.not.not.i = icmp eq i64 %18, 0 + br i1 %.not.not.i, label %._crit_edge.i, label %17 + +24: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit + %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hc8cd03725d4e589eE"(ptr noalias noundef align 8 dereferenceable(24) %5) #41 - to label %107 unwind label %105 + to label %108 unwind label %106 -._crit_edge.loopexit: ; preds = %104 +._crit_edge.loopexit: ; preds = %105 %.pre = load i64, ptr %6, align 8 %.pre19 = add i64 %.pre, 1 - %25 = lshr i64 %.pre19, 3 - %26 = mul nuw i64 %25, 7 + %26 = lshr i64 %.pre19, 3 + %27 = mul nuw i64 %26, 7 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !4 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 +._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23, %._crit_edge.loopexit + %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23 ] + %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23 ] + %29 = icmp ult i64 %28, 8 + %.0 = select i1 %29, i64 %28, i64 %.pre-phi + %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %31 = load i64, ptr %30, align 8, !noundef !4 + %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %33 = sub i64 %.0, %31 + store i64 %33, ptr %32, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit, %104 - %.sroa.02.010 = phi i64 [ %33, %104 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit ] - %33 = add nuw i64 %.sroa.02.010, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.010 - %36 = load i8, ptr %35, align 1, !noundef !4 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %104 +.lr.ph: ; preds = %._crit_edge.i, %105 + %.sroa.02.010 = phi i64 [ %34, %105 ], [ 0, %._crit_edge.i ] + %34 = add nuw i64 %.sroa.02.010, 1 + %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.010 + %37 = load i8, ptr %36, align 1, !noundef !4 + %.not = icmp eq i8 %37, -128 + br i1 %.not, label %38, label %105 -37: ; preds = %.lr.ph +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.010, -1 %.neg14 = mul i64 %2, %.neg - %38 = getelementptr inbounds i8, ptr %34, i64 %.neg14 + %39 = getelementptr inbounds i8, ptr %35, i64 %.neg14 br label %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit -_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit: ; preds = %.preheader, %37 - %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) - to label %40 unwind label %23 +_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) + to label %41 unwind label %24 -40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !323) - %41 = load i64, ptr %6, align 8, !alias.scope !323, !noundef !4 - %42 = load ptr, ptr %0, align 8, !alias.scope !323, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %41, %39 - %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %43, align 1, !noalias !326 - %44 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %45 = bitcast <16 x i1> %44 to i16 - %.not.i.not13.i = icmp eq i16 %45, 0 - br i1 %.not.i.not13.i, label %.lr.ph.i18, label %._crit_edge.i - -.lr.ph.i18: ; preds = %40, %.lr.ph.i18 - %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i18 ], [ %.sroa.0.011.i, %40 ] - %.sroa.7.014.i = phi i64 [ %46, %.lr.ph.i18 ], [ 0, %40 ] - %46 = add i64 %.sroa.7.014.i, 16 - %47 = add i64 %46, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %47, %41 - %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %48, align 1, !noalias !326 - %49 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %50 = bitcast <16 x i1> %49 to i16 - %.not.i.not.i = icmp eq i16 %50, 0 - br i1 %.not.i.not.i, label %.lr.ph.i18, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i18, %40 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %40 ], [ %.sroa.0.0.i, %.lr.ph.i18 ] - %.lcssa.i = phi i16 [ %45, %40 ], [ %50, %.lr.ph.i18 ] - %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %52 = zext nneg i16 %51 to i64 - %53 = add i64 %.sroa.0.0.lcssa.i, %52 - %54 = and i64 %53, %41 - %55 = getelementptr inbounds i8, ptr %42, i64 %54 - %56 = load i8, ptr %55, align 1, !noalias !323, !noundef !4 - %57 = icmp sgt i8 %56, -1 - br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit - -58: ; preds = %._crit_edge.i - %59 = load <16 x i8>, ptr %42, align 16, !noalias !329 - %60 = icmp slt <16 x i8> %59, zeroinitializer - %61 = bitcast <16 x i1> %60 to i16 - %62 = icmp ne i16 %61, 0 - %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) - %64 = zext nneg i16 %63 to i64 - tail call void @llvm.assume(i1 %62) + %42 = load i64, ptr %6, align 8, !alias.scope !323, !noundef !4 + %43 = load ptr, ptr %0, align 8, !alias.scope !323, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %42, %40 + %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !326 + %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %46 = bitcast <16 x i1> %45 to i16 + %.not.i.not13.i = icmp eq i16 %46, 0 + br i1 %.not.i.not13.i, label %.lr.ph.i19, label %._crit_edge.i18 + +.lr.ph.i19: ; preds = %41, %.lr.ph.i19 + %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i19 ], [ %.sroa.0.011.i, %41 ] + %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i19 ], [ 0, %41 ] + %47 = add i64 %.sroa.7.014.i, 16 + %48 = add i64 %47, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %48, %42 + %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !326 + %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %51 = bitcast <16 x i1> %50 to i16 + %.not.i.not.i = icmp eq i16 %51, 0 + br i1 %.not.i.not.i, label %.lr.ph.i19, label %._crit_edge.i18 + +._crit_edge.i18: ; preds = %.lr.ph.i19, %41 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i19 ] + %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i19 ] + %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %53 = zext nneg i16 %52 to i64 + %54 = add i64 %.sroa.0.0.lcssa.i, %53 + %55 = and i64 %54, %42 + %56 = getelementptr inbounds i8, ptr %43, i64 %55 + %57 = load i8, ptr %56, align 1, !noalias !323, !noundef !4 + %58 = icmp sgt i8 %57, -1 + br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit + +59: ; preds = %._crit_edge.i18 + %60 = load <16 x i8>, ptr %43, align 16, !noalias !329 + %61 = icmp slt <16 x i8> %60, zeroinitializer + %62 = bitcast <16 x i1> %61 to i16 + %63 = icmp ne i16 %62, 0 + %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) + %65 = zext nneg i16 %64 to i64 + tail call void @llvm.assume(i1 %63) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit: ; preds = %58, %._crit_edge.i - %.0.i.i = phi i64 [ %64, %58 ], [ %54, %._crit_edge.i ] - %65 = sub i64 %.sroa.02.010, %.sroa.0.011.i - %66 = sub i64 %.0.i.i, %.sroa.0.011.i - %67 = xor i64 %66, %65 - %.unshifted = and i64 %67, %41 - %68 = icmp ult i64 %.unshifted, 16 - br i1 %68, label %81, label %69 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit: ; preds = %59, %._crit_edge.i18 + %.0.i.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i18 ] + %66 = sub i64 %.sroa.02.010, %.sroa.0.011.i + %67 = sub i64 %.0.i.i, %.sroa.0.011.i + %68 = xor i64 %67, %66 + %.unshifted = and i64 %68, %42 + %69 = icmp ult i64 %.unshifted, 16 + br i1 %69, label %82, label %70 -69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit +70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit %.neg15 = xor i64 %.0.i.i, -1 %.neg16 = mul i64 %2, %.neg15 - %70 = getelementptr inbounds i8, ptr %42, i64 %.neg16 - %71 = getelementptr inbounds i8, ptr %42, i64 %.0.i.i - %72 = load i8, ptr %71, align 1, !noundef !4 - %73 = lshr i64 %39, 57 - %74 = trunc nuw nsw i64 %73 to i8 - %75 = add i64 %.0.i.i, -16 - %76 = and i64 %75, %41 - store i8 %74, ptr %71, align 1 - %77 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %78 = getelementptr i8, ptr %77, i64 %76 - %79 = getelementptr i8, ptr %78, i64 16 - store i8 %74, ptr %79, align 1 - %80 = icmp eq i8 %72, -1 - br i1 %80, label %95, label %.preheader - -81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit - %82 = lshr i64 %39, 57 - %83 = trunc nuw nsw i64 %82 to i8 - %84 = add i64 %.sroa.02.010, -16 - %85 = and i64 %41, %84 - %86 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.010 - store i8 %83, ptr %86, align 1 - %87 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %88 = getelementptr i8, ptr %87, i64 %85 - %89 = getelementptr i8, ptr %88, i64 16 - store i8 %83, ptr %89, align 1 - br label %104 - -.preheader: ; preds = %69, %.preheader - %.0910.i = phi i64 [ %94, %.preheader ], [ 0, %69 ] - %90 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i - %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.0910.i - %92 = load i8, ptr %90, align 1 + %71 = getelementptr inbounds i8, ptr %43, i64 %.neg16 + %72 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i + %73 = load i8, ptr %72, align 1, !noundef !4 + %74 = lshr i64 %40, 57 + %75 = trunc nuw nsw i64 %74 to i8 + %76 = add i64 %.0.i.i, -16 + %77 = and i64 %76, %42 + store i8 %75, ptr %72, align 1 + %78 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %79 = getelementptr i8, ptr %78, i64 %77 + %80 = getelementptr i8, ptr %79, i64 16 + store i8 %75, ptr %80, align 1 + %81 = icmp eq i8 %73, -1 + br i1 %81, label %96, label %.preheader + +82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit + %83 = lshr i64 %40, 57 + %84 = trunc nuw nsw i64 %83 to i8 + %85 = add i64 %.sroa.02.010, -16 + %86 = and i64 %42, %85 + %87 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.010 + store i8 %84, ptr %87, align 1 + %88 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %89 = getelementptr i8, ptr %88, i64 %86 + %90 = getelementptr i8, ptr %89, i64 16 + store i8 %84, ptr %90, align 1 + br label %105 + +.preheader: ; preds = %70, %.preheader + %.0910.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] + %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.0910.i %93 = load i8, ptr %91, align 1 - store i8 %93, ptr %90, align 1 - store i8 %92, ptr %91, align 1 - %94 = add nuw nsw i64 %.0910.i, 1 - %exitcond.not.i = icmp eq i64 %94, %2 + %94 = load i8, ptr %92, align 1 + store i8 %94, ptr %91, align 1 + store i8 %93, ptr %92, align 1 + %95 = add nuw nsw i64 %.0910.i, 1 + %exitcond.not.i = icmp eq i64 %95, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit, label %.preheader -95: ; preds = %69 - %96 = add i64 %.sroa.02.010, -16 - %97 = load i64, ptr %6, align 8, !noundef !4 - %98 = and i64 %97, %96 - %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.010 - store i8 -1, ptr %100, align 1 - %101 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %102 = getelementptr i8, ptr %101, i64 %98 - %103 = getelementptr i8, ptr %102, i64 16 - store i8 -1, ptr %103, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) - br label %104 - -104: ; preds = %.lr.ph, %95, %81 +96: ; preds = %70 + %97 = add i64 %.sroa.02.010, -16 + %98 = load i64, ptr %6, align 8, !noundef !4 + %99 = and i64 %98, %97 + %100 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.010 + store i8 -1, ptr %101, align 1 + %102 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %103 = getelementptr i8, ptr %102, i64 %99 + %104 = getelementptr i8, ptr %103, i64 16 + store i8 -1, ptr %104, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %105 + +105: ; preds = %.lr.ph, %96, %82 %exitcond.not = icmp eq i64 %.sroa.02.010, %.val17 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -105: ; preds = %23 - %106 = landingpad { ptr, i32 } +106: ; preds = %24 + %107 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h76c6e1c84248d3ffE() #40 unreachable -107: ; preds = %23 - resume { ptr, i32 } %24 +108: ; preds = %24 + resume { ptr, i32 } %25 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll b/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll index 2109f9ef524..0c7a6b6c20c 100644 --- a/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll +++ b/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll @@ -8207,220 +8207,236 @@ define internal fastcc void @_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_p %6 = getelementptr inbounds nuw i8, ptr %0, i64 8 %.val13 = load i64, ptr %6, align 8, !noundef !3 %7 = add i64 %.val13, 1 + %.not1.i = icmp eq i64 %7, 0 + br i1 %.not1.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit, label %.lr.ph.i + +.lr.ph.i: ; preds = %4 %8 = lshr i64 %7, 4 %9 = and i64 %7, 15 %.not11.i.i.i = icmp ne i64 %9, 0 %10 = zext i1 %.not11.i.i.i to i64 %.sroa.07.0.i.i.i = add nuw nsw i64 %8, %10 - %.not1.i = icmp eq i64 %.sroa.07.0.i.i.i, 0 - br i1 %.not1.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit, label %.lr.ph.i - -.lr.ph.i: ; preds = %4 %11 = icmp ne ptr %.val12, null tail call void @llvm.assume(i1 %11) - br label %12 + br label %16 + +._crit_edge.i: ; preds = %16 + %12 = icmp ult i64 %7, 16 + br i1 %12, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit.thread -12: ; preds = %12, %.lr.ph.i - %.sroa.04.03.i = phi i64 [ %.sroa.07.0.i.i.i, %.lr.ph.i ], [ %14, %12 ] - %.sroa.03.02.i = phi i64 [ 0, %.lr.ph.i ], [ %13, %12 ] - %13 = add i64 %.sroa.03.02.i, 16 - %14 = add nsw i64 %.sroa.04.03.i, -1 - %15 = getelementptr inbounds nuw i8, ptr %.val12, i64 %.sroa.03.02.i - %16 = load <16 x i8>, ptr %15, align 16 - %.lobit.i.i.i = ashr <16 x i8> %16, splat (i8 7) - %17 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %18 = or <2 x i64> %17, splat (i64 -9187201950435737472) - store <2 x i64> %18, ptr %15, align 16 - %.not.i = icmp eq i64 %14, 0 - br i1 %.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit, label %12 - -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit: ; preds = %12, %4 - %19 = icmp ne ptr %.val12, null - tail call void @llvm.assume(i1 %19) - %..i = tail call i64 @llvm.umax.i64(i64 %7, i64 16) - %.6.i = tail call i64 @llvm.umin.i64(i64 %7, i64 16) - %20 = getelementptr inbounds nuw i8, ptr %.val12, i64 %..i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %20, ptr nonnull align 1 %.val12, i64 %.6.i, i1 false) +_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit.thread: ; preds = %._crit_edge.i + %13 = getelementptr inbounds nuw i8, ptr %.val12, i64 %7 + tail call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) %13, ptr noundef nonnull align 1 dereferenceable(16) %.val12, i64 16, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %22, align 8 + %14 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %14, align 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %15, align 8 + store ptr %0, ptr %5, align 8 + br label %.lr.ph.preheader + +16: ; preds = %16, %.lr.ph.i + %.sroa.04.03.i = phi i64 [ %.sroa.07.0.i.i.i, %.lr.ph.i ], [ %18, %16 ] + %.sroa.03.02.i = phi i64 [ 0, %.lr.ph.i ], [ %17, %16 ] + %17 = add i64 %.sroa.03.02.i, 16 + %18 = add i64 %.sroa.04.03.i, -1 + %19 = getelementptr inbounds nuw i8, ptr %.val12, i64 %.sroa.03.02.i + %20 = load <16 x i8>, ptr %19, align 16 + %.lobit.i.i.i = ashr <16 x i8> %20, splat (i8 7) + %21 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %22 = or <2 x i64> %21, splat (i64 -9187201950435737472) + store <2 x i64> %22, ptr %19, align 16 + %.not.i = icmp eq i64 %18, 0 + br i1 %.not.i, label %._crit_edge.i, label %16 + +_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit: ; preds = %4, %._crit_edge.i + %23 = icmp ne ptr %.val12, null + tail call void @llvm.assume(i1 %23) + %24 = getelementptr inbounds nuw i8, ptr %.val12, i64 16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %24, ptr nonnull align 1 %.val12, i64 %7, i1 false) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) + %25 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %25, align 8 + %26 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %26, align 8 store ptr %0, ptr %5, align 8 %.not14 = icmp eq i64 %7, 0 - br i1 %.not14, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit, %101 - %.sroa.04.17 = phi i64 [ %.sroa.04.1, %101 ], [ 1, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] - %.sroa.04.06 = phi i64 [ %.sroa.04.17, %101 ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] - %23 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %24 = getelementptr inbounds nuw i8, ptr %23, i64 %.sroa.04.06 - %25 = load i8, ptr %24, align 1, !noundef !3 - %.not = icmp eq i8 %25, -128 - br i1 %.not, label %34, label %101 - -._crit_edge.loopexit: ; preds = %101 + br i1 %.not14, label %._crit_edge, label %.lr.ph.preheader + +.lr.ph.preheader: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit.thread, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit + br label %.lr.ph + +.lr.ph: ; preds = %.lr.ph.preheader, %105 + %.sroa.04.17 = phi i64 [ %.sroa.04.1, %105 ], [ 1, %.lr.ph.preheader ] + %.sroa.04.06 = phi i64 [ %.sroa.04.17, %105 ], [ 0, %.lr.ph.preheader ] + %27 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %28 = getelementptr inbounds nuw i8, ptr %27, i64 %.sroa.04.06 + %29 = load i8, ptr %28, align 1, !noundef !3 + %.not = icmp eq i8 %29, -128 + br i1 %.not, label %38, label %105 + +._crit_edge.loopexit: ; preds = %105 %.pre = load i64, ptr %6, align 8 %.pre13 = add i64 %.pre, 1 - %26 = lshr i64 %.pre13, 3 - %27 = mul nuw i64 %26, 7 + %30 = lshr i64 %.pre13, 3 + %31 = mul nuw i64 %30, 7 br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit - %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] - %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] - %29 = icmp ult i64 %28, 8 - %.sroa.01.0 = select i1 %29, i64 %28, i64 %.pre-phi - %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %31 = load i64, ptr %30, align 8, !noundef !3 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %33 = sub i64 %.sroa.01.0, %31 - store i64 %33, ptr %32, align 8 + %.pre-phi = phi i64 [ %31, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] + %32 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] + %33 = icmp ult i64 %32, 8 + %.sroa.01.0 = select i1 %33, i64 %32, i64 %.pre-phi + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %35 = load i64, ptr %34, align 8, !noundef !3 + %36 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %37 = sub i64 %.sroa.01.0, %35 + store i64 %37, ptr %36, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -34: ; preds = %.lr.ph +38: ; preds = %.lr.ph %.neg = xor i64 %.sroa.04.06, -1 %.neg8 = mul i64 %2, %.neg - %35 = getelementptr inbounds i8, ptr %23, i64 %.neg8 + %39 = getelementptr inbounds i8, ptr %27, i64 %.neg8 br label %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit -_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit: ; preds = %.preheader, %34 - %36 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.04.06) - to label %39 unwind label %37 +_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit: ; preds = %.preheader, %38 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.04.06) + to label %43 unwind label %41 -37: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit - %38 = landingpad { ptr, i32 } +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit + %42 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr195drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hfc1fd274a5bb3741E"(ptr noalias noundef align 8 dereferenceable(24) %5) #29 - to label %106 unwind label %104 + to label %110 unwind label %108 -39: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit +43: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit %.val = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 %.val11 = load i64, ptr %6, align 8, !noundef !3 - %.sroa.0.08.i = and i64 %.val11, %36 - %40 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.08.i - %.sroa.0.0.copyload.i79.i = load <16 x i8>, ptr %40, align 1 - %41 = icmp slt <16 x i8> %.sroa.0.0.copyload.i79.i, zeroinitializer - %42 = bitcast <16 x i1> %41 to i16 - %.not.i10.i = icmp eq i16 %42, 0 - br i1 %.not.i10.i, label %.lr.ph.i14, label %._crit_edge.i - -.lr.ph.i14: ; preds = %39, %.lr.ph.i14 - %.sroa.0.012.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i14 ], [ %.sroa.0.08.i, %39 ] - %.sroa.7.011.i = phi i64 [ %43, %.lr.ph.i14 ], [ 0, %39 ] - %43 = add i64 %.sroa.7.011.i, 16 - %44 = add i64 %43, %.sroa.0.012.i - %.sroa.0.0.i = and i64 %44, %.val11 - %45 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i - %.sroa.0.0.copyload.i7.i = load <16 x i8>, ptr %45, align 1 - %46 = icmp slt <16 x i8> %.sroa.0.0.copyload.i7.i, zeroinitializer - %47 = bitcast <16 x i1> %46 to i16 - %.not.i.i = icmp eq i16 %47, 0 - br i1 %.not.i.i, label %.lr.ph.i14, label %._crit_edge.i - -._crit_edge.i: ; preds = %.lr.ph.i14, %39 - %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.08.i, %39 ], [ %.sroa.0.0.i, %.lr.ph.i14 ] - %.lcssa.i = phi i16 [ %42, %39 ], [ %47, %.lr.ph.i14 ] - %48 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %49 = zext nneg i16 %48 to i64 - %50 = add i64 %.sroa.0.0.lcssa.i, %49 - %51 = and i64 %50, %.val11 - %52 = getelementptr inbounds nuw i8, ptr %.val, i64 %51 - %53 = load i8, ptr %52, align 1, !noundef !3 - %54 = icmp sgt i8 %53, -1 - br i1 %54, label %55, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit - -55: ; preds = %._crit_edge.i - %56 = load <16 x i8>, ptr %.val, align 16 - %57 = icmp slt <16 x i8> %56, zeroinitializer - %58 = bitcast <16 x i1> %57 to i16 - %59 = icmp ne i16 %58, 0 - tail call void @llvm.assume(i1 %59) - %60 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %58, i1 true) - %61 = zext nneg i16 %60 to i64 + %.sroa.0.08.i = and i64 %.val11, %40 + %44 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.08.i + %.sroa.0.0.copyload.i79.i = load <16 x i8>, ptr %44, align 1 + %45 = icmp slt <16 x i8> %.sroa.0.0.copyload.i79.i, zeroinitializer + %46 = bitcast <16 x i1> %45 to i16 + %.not.i10.i = icmp eq i16 %46, 0 + br i1 %.not.i10.i, label %.lr.ph.i15, label %._crit_edge.i14 + +.lr.ph.i15: ; preds = %43, %.lr.ph.i15 + %.sroa.0.012.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i15 ], [ %.sroa.0.08.i, %43 ] + %.sroa.7.011.i = phi i64 [ %47, %.lr.ph.i15 ], [ 0, %43 ] + %47 = add i64 %.sroa.7.011.i, 16 + %48 = add i64 %47, %.sroa.0.012.i + %.sroa.0.0.i = and i64 %48, %.val11 + %49 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i + %.sroa.0.0.copyload.i7.i = load <16 x i8>, ptr %49, align 1 + %50 = icmp slt <16 x i8> %.sroa.0.0.copyload.i7.i, zeroinitializer + %51 = bitcast <16 x i1> %50 to i16 + %.not.i.i = icmp eq i16 %51, 0 + br i1 %.not.i.i, label %.lr.ph.i15, label %._crit_edge.i14 + +._crit_edge.i14: ; preds = %.lr.ph.i15, %43 + %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.08.i, %43 ], [ %.sroa.0.0.i, %.lr.ph.i15 ] + %.lcssa.i = phi i16 [ %46, %43 ], [ %51, %.lr.ph.i15 ] + %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %53 = zext nneg i16 %52 to i64 + %54 = add i64 %.sroa.0.0.lcssa.i, %53 + %55 = and i64 %54, %.val11 + %56 = getelementptr inbounds nuw i8, ptr %.val, i64 %55 + %57 = load i8, ptr %56, align 1, !noundef !3 + %58 = icmp sgt i8 %57, -1 + br i1 %58, label %59, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit + +59: ; preds = %._crit_edge.i14 + %60 = load <16 x i8>, ptr %.val, align 16 + %61 = icmp slt <16 x i8> %60, zeroinitializer + %62 = bitcast <16 x i1> %61 to i16 + %63 = icmp ne i16 %62, 0 + tail call void @llvm.assume(i1 %63) + %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) + %65 = zext nneg i16 %64 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit: ; preds = %55, %._crit_edge.i - %.sroa.0.0.i4.i = phi i64 [ %61, %55 ], [ %51, %._crit_edge.i ] - %62 = sub i64 %.sroa.04.06, %.sroa.0.08.i - %63 = sub i64 %.sroa.0.0.i4.i, %.sroa.0.08.i - %64 = xor i64 %63, %62 - %.unshifted = and i64 %64, %.val11 - %65 = icmp ult i64 %.unshifted, 16 - br i1 %65, label %78, label %66 +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit: ; preds = %59, %._crit_edge.i14 + %.sroa.0.0.i4.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i14 ] + %66 = sub i64 %.sroa.04.06, %.sroa.0.08.i + %67 = sub i64 %.sroa.0.0.i4.i, %.sroa.0.08.i + %68 = xor i64 %67, %66 + %.unshifted = and i64 %68, %.val11 + %69 = icmp ult i64 %.unshifted, 16 + br i1 %69, label %82, label %70 -66: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit +70: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit %.neg9 = xor i64 %.sroa.0.0.i4.i, -1 %.neg10 = mul i64 %2, %.neg9 - %67 = getelementptr inbounds i8, ptr %.val, i64 %.neg10 - %68 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i4.i - %69 = load i8, ptr %68, align 1, !noundef !3 - %70 = lshr i64 %36, 57 - %71 = trunc nuw nsw i64 %70 to i8 - %72 = add i64 %.sroa.0.0.i4.i, -16 - %73 = and i64 %72, %.val11 - store i8 %71, ptr %68, align 1 - %74 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %75 = getelementptr i8, ptr %74, i64 %73 - %76 = getelementptr i8, ptr %75, i64 16 - store i8 %71, ptr %76, align 1 - %77 = icmp eq i8 %69, -1 - br i1 %77, label %92, label %.preheader - -78: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit - %79 = lshr i64 %36, 57 - %80 = trunc nuw nsw i64 %79 to i8 - %81 = add i64 %.sroa.04.06, -16 - %82 = and i64 %.val11, %81 - %83 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.04.06 - store i8 %80, ptr %83, align 1 - %84 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %85 = getelementptr i8, ptr %84, i64 %82 - %86 = getelementptr i8, ptr %85, i64 16 - store i8 %80, ptr %86, align 1 - br label %101 + %71 = getelementptr inbounds i8, ptr %.val, i64 %.neg10 + %72 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i4.i + %73 = load i8, ptr %72, align 1, !noundef !3 + %74 = lshr i64 %40, 57 + %75 = trunc nuw nsw i64 %74 to i8 + %76 = add i64 %.sroa.0.0.i4.i, -16 + %77 = and i64 %76, %.val11 + store i8 %75, ptr %72, align 1 + %78 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %79 = getelementptr i8, ptr %78, i64 %77 + %80 = getelementptr i8, ptr %79, i64 16 + store i8 %75, ptr %80, align 1 + %81 = icmp eq i8 %73, -1 + br i1 %81, label %96, label %.preheader + +82: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit + %83 = lshr i64 %40, 57 + %84 = trunc nuw nsw i64 %83 to i8 + %85 = add i64 %.sroa.04.06, -16 + %86 = and i64 %.val11, %85 + %87 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.04.06 + store i8 %84, ptr %87, align 1 + %88 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %89 = getelementptr i8, ptr %88, i64 %86 + %90 = getelementptr i8, ptr %89, i64 16 + store i8 %84, ptr %90, align 1 + br label %105 -.preheader: ; preds = %66, %.preheader - %.sroa.04.09.i = phi i64 [ %91, %.preheader ], [ 0, %66 ] - %87 = getelementptr inbounds nuw i8, ptr %35, i64 %.sroa.04.09.i - %88 = getelementptr inbounds nuw i8, ptr %67, i64 %.sroa.04.09.i - %89 = load i8, ptr %87, align 1 - %90 = load i8, ptr %88, align 1 - store i8 %90, ptr %87, align 1 - store i8 %89, ptr %88, align 1 - %91 = add nuw nsw i64 %.sroa.04.09.i, 1 - %exitcond.not.i = icmp eq i64 %91, %2 +.preheader: ; preds = %70, %.preheader + %.sroa.04.09.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] + %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.sroa.04.09.i + %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.sroa.04.09.i + %93 = load i8, ptr %91, align 1 + %94 = load i8, ptr %92, align 1 + store i8 %94, ptr %91, align 1 + store i8 %93, ptr %92, align 1 + %95 = add nuw nsw i64 %.sroa.04.09.i, 1 + %exitcond.not.i = icmp eq i64 %95, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit, label %.preheader -92: ; preds = %66 - %93 = add i64 %.sroa.04.06, -16 - %94 = load i64, ptr %6, align 8, !noundef !3 - %95 = and i64 %94, %93 - %96 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %97 = getelementptr inbounds nuw i8, ptr %96, i64 %.sroa.04.06 - store i8 -1, ptr %97, align 1 - %98 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %99 = getelementptr i8, ptr %98, i64 %95 - %100 = getelementptr i8, ptr %99, i64 16 - store i8 -1, ptr %100, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %67, ptr noundef nonnull align 1 dereferenceable(1) %35, i64 %2, i1 false) - br label %101 +96: ; preds = %70 + %97 = add i64 %.sroa.04.06, -16 + %98 = load i64, ptr %6, align 8, !noundef !3 + %99 = and i64 %98, %97 + %100 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %101 = getelementptr inbounds nuw i8, ptr %100, i64 %.sroa.04.06 + store i8 -1, ptr %101, align 1 + %102 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %103 = getelementptr i8, ptr %102, i64 %99 + %104 = getelementptr i8, ptr %103, i64 16 + store i8 -1, ptr %104, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) + br label %105 -101: ; preds = %.lr.ph, %92, %78 - %102 = icmp ult i64 %.sroa.04.17, %7 - %103 = zext i1 %102 to i64 - %.sroa.04.1 = add nuw i64 %.sroa.04.17, %103 - br i1 %102, label %.lr.ph, label %._crit_edge.loopexit +105: ; preds = %.lr.ph, %96, %82 + %106 = icmp ult i64 %.sroa.04.17, %7 + %107 = zext i1 %106 to i64 + %.sroa.04.1 = add nuw i64 %.sroa.04.17, %107 + br i1 %106, label %.lr.ph, label %._crit_edge.loopexit -104: ; preds = %37 - %105 = landingpad { ptr, i32 } +108: ; preds = %41 + %109 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbadeae7294749c32E() #30 unreachable -106: ; preds = %37 - resume { ptr, i32 } %38 +110: ; preds = %41 + resume { ptr, i32 } %42 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll b/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll index d4322772757..2e273af95a2 100644 --- a/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll +++ b/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll @@ -2638,7 +2638,7 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thr %64 = load i64, ptr %10, align 8, !alias.scope !284, !noalias !285, !noundef !3 %invariant.gep = getelementptr i8, ptr %63, i64 16 %65 = icmp eq i64 %64, 0 - br i1 %65, label %._crit_edge54, label %.preheader.lr.ph + br i1 %65, label %._crit_edge53, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %58 %66 = load ptr, ptr %0, align 8, !alias.scope !284, !noalias !285, !nonnull !3, !noundef !3 @@ -2650,37 +2650,37 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thr .preheader: ; preds = %.preheader.lr.ph, %131 %71 = phi ptr [ %66, %.preheader.lr.ph ], [ %137, %131 ] - %.sroa.024.053 = phi ptr [ %66, %.preheader.lr.ph ], [ %.sroa.024.1.lcssa, %131 ] - %.sroa.5.052 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %131 ] - %.sroa.9.051 = phi i64 [ %64, %.preheader.lr.ph ], [ %103, %131 ] - %.sroa.13.050 = phi i16 [ %70, %.preheader.lr.ph ], [ %101, %131 ] - %.not.i245 = icmp eq i16 %.sroa.13.050, 0 - br i1 %.not.i245, label %.noexc3, label %._crit_edge + %.sroa.023.052 = phi ptr [ %66, %.preheader.lr.ph ], [ %.sroa.023.1.lcssa, %131 ] + %.sroa.5.051 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %131 ] + %.sroa.9.050 = phi i64 [ %64, %.preheader.lr.ph ], [ %103, %131 ] + %.sroa.13.049 = phi i16 [ %70, %.preheader.lr.ph ], [ %101, %131 ] + %.not.i244 = icmp eq i16 %.sroa.13.049, 0 + br i1 %.not.i244, label %.noexc3, label %._crit_edge .noexc3: ; preds = %.preheader, %.noexc3 - %.sroa.024.147 = phi ptr [ %72, %.noexc3 ], [ %.sroa.024.053, %.preheader ] - %.sroa.5.146 = phi i64 [ %76, %.noexc3 ], [ %.sroa.5.052, %.preheader ] - %72 = getelementptr inbounds nuw i8, ptr %.sroa.024.147, i64 16 + %.sroa.023.146 = phi ptr [ %72, %.noexc3 ], [ %.sroa.023.052, %.preheader ] + %.sroa.5.145 = phi i64 [ %76, %.noexc3 ], [ %.sroa.5.051, %.preheader ] + %72 = getelementptr inbounds nuw i8, ptr %.sroa.023.146, i64 16 %73 = load <16 x i8>, ptr %72, align 16 %74 = icmp slt <16 x i8> %73, zeroinitializer %75 = bitcast <16 x i1> %74 to i16 - %76 = add i64 %.sroa.5.146, 16 + %76 = add i64 %.sroa.5.145, 16 %.not.i2 = icmp eq i16 %75, -1 br i1 %.not.i2, label %.noexc3, label %._crit_edge.loopexit -._crit_edge54.loopexit: ; preds = %131 - %.pre64 = load i64, ptr %10, align 8, !alias.scope !284, !noalias !285 - br label %._crit_edge54 +._crit_edge53.loopexit: ; preds = %131 + %.pre63 = load i64, ptr %10, align 8, !alias.scope !284, !noalias !285 + br label %._crit_edge53 -._crit_edge54: ; preds = %._crit_edge54.loopexit, %58 - %77 = phi i64 [ %.pre64, %._crit_edge54.loopexit ], [ 0, %58 ] +._crit_edge53: ; preds = %._crit_edge53.loopexit, %58 + %77 = phi i64 [ %.pre63, %._crit_edge53.loopexit ], [ 0, %58 ] %78 = sub i64 %.sroa.02.0.i.i, %77 store i64 %78, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !275 store i64 %77, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !275 br label %79 -79: ; preds = %79, %._crit_edge54 - %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge54 ], [ %84, %79 ] +79: ; preds = %79, %._crit_edge53 + %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge53 ], [ %84, %79 ] %80 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %81 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i %82 = load i64, ptr %80, align 8 @@ -2727,15 +2727,15 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hec2d3e3444dfa7daE.exit.i. br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.050, %.preheader ], [ %97, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.052, %.preheader ], [ %76, %._crit_edge.loopexit ] - %.sroa.024.1.lcssa = phi ptr [ %.sroa.024.053, %.preheader ], [ %72, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.049, %.preheader ], [ %97, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.051, %.preheader ], [ %76, %._crit_edge.loopexit ] + %.sroa.023.1.lcssa = phi ptr [ %.sroa.023.052, %.preheader ], [ %72, %._crit_edge.loopexit ] %98 = add i16 %.sroa.13.1.lcssa, -1 %99 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %100 = zext nneg i16 %99 to i64 %101 = and i16 %98, %.sroa.13.1.lcssa %102 = add i64 %.sroa.5.1.lcssa, %100 - %103 = add i64 %.sroa.9.051, -1 + %103 = add i64 %.sroa.9.050, -1 %104 = sub nsw i64 0, %102 %105 = getelementptr inbounds { { { i64, [1 x i64] } }, { i32, [3 x i32] } }, ptr %71, i64 %104 %106 = getelementptr inbounds i8, ptr %105, i64 -32 @@ -2810,7 +2810,7 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hec2d3e3444dfa7daE.exit.i. %143 = getelementptr inbounds i8, ptr %63, i64 %142 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %143, ptr noundef nonnull align 1 dereferenceable(32) %140, i64 32, i1 false) %144 = icmp eq i64 %103, 0 - br i1 %144, label %._crit_edge54.loopexit, label %.preheader + br i1 %144, label %._crit_edge53.loopexit, label %.preheader common.resume: ; preds = %172, %56 %common.resume.op = phi { ptr, i32 } [ %57, %56 ], [ %173, %172 ] @@ -2819,52 +2819,55 @@ common.resume: ; preds = %172, %56 145: ; preds = %14 tail call void @llvm.experimental.noalias.scope.decl(metadata !302) %.val9.i = load ptr, ptr %0, align 8, !alias.scope !302 - %146 = lshr i64 %19, 4 - %147 = and i64 %19, 15 - %.not11.i.i.i.i = icmp ne i64 %147, 0 - %148 = zext i1 %.not11.i.i.i.i to i64 - %.sroa.07.0.i.i.i.i = add nuw nsw i64 %146, %148 - %.not1.i.i = icmp eq i64 %.sroa.07.0.i.i.i.i, 0 - br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i, label %.lr.ph.i.i7 + %.not1.i.i = icmp eq i64 %19, 0 + br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread, label %.lr.ph.i.i7 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread: ; preds = %145 + %146 = icmp ne ptr %.val9.i, null + tail call void @llvm.assume(i1 %146) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !302 + br label %247 .lr.ph.i.i7: ; preds = %145 - %149 = icmp ne ptr %.val9.i, null - tail call void @llvm.assume(i1 %149) - br label %150 - -150: ; preds = %150, %.lr.ph.i.i7 - %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %151, %150 ] - %.sroa.5.02.i.i = phi i64 [ %.sroa.07.0.i.i.i.i, %.lr.ph.i.i7 ], [ %152, %150 ] - %151 = add i64 %.sroa.0.03.i.i, 16 - %152 = add nsw i64 %.sroa.5.02.i.i, -1 - %153 = getelementptr inbounds nuw i8, ptr %.val9.i, i64 %.sroa.0.03.i.i - %154 = load <16 x i8>, ptr %153, align 16, !noalias !302 - %.lobit.i.i.i.i = ashr <16 x i8> %154, splat (i8 7) - %155 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> - %156 = or <2 x i64> %155, splat (i64 -9187201950435737472) - store <2 x i64> %156, ptr %153, align 16, !noalias !302 - %.not.i.i = icmp eq i64 %152, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i, label %150 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i: ; preds = %150, %145 - %157 = icmp ne ptr %.val9.i, null - tail call void @llvm.assume(i1 %157) - %..i.i8 = tail call i64 @llvm.umax.i64(i64 %19, i64 16) - %.6.i.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) - %158 = getelementptr inbounds nuw i8, ptr %.val9.i, i64 %..i.i8 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %158, ptr nonnull align 1 %.val9.i, i64 %.6.i.i, i1 false), !noalias !302 + %147 = lshr i64 %19, 4 + %148 = and i64 %19, 15 + %.not11.i.i.i.i = icmp ne i64 %148, 0 + %149 = zext i1 %.not11.i.i.i.i to i64 + %.sroa.07.0.i.i.i.i = add nuw nsw i64 %147, %149 + %150 = icmp ne ptr %.val9.i, null + tail call void @llvm.assume(i1 %150) + br label %154 + +._crit_edge.i.i8: ; preds = %154 + %. = tail call i64 @llvm.umax.i64(i64 %19, i64 16) + %.75 = tail call i64 @llvm.umin.i64(i64 %19, i64 16) + %151 = getelementptr inbounds nuw i8, ptr %.val9.i, i64 %. + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %151, ptr nonnull align 1 %.val9.i, i64 %.75, i1 false), !noalias !302 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !302 - %159 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @_ZN4core3ops8function6FnOnce9call_once17h2a9985a138731b93E, ptr %159, align 8, !noalias !302 - %160 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 32, ptr %160, align 8, !noalias !302 + %152 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @_ZN4core3ops8function6FnOnce9call_once17h2a9985a138731b93E, ptr %152, align 8, !noalias !302 + %153 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 32, ptr %153, align 8, !noalias !302 store ptr %0, ptr %6, align 8, !noalias !302 - %.not15.i = icmp eq i64 %19, 0 - br i1 %.not15.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread, label %.lr.ph.i + br label %.lr.ph.i -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i, %239 - %.sroa.0.17.i = phi i64 [ %.sroa.0.1.i10, %239 ], [ 1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i ] - %.sroa.0.06.i = phi i64 [ %.sroa.0.17.i, %239 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i ] +154: ; preds = %154, %.lr.ph.i.i7 + %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %155, %154 ] + %.sroa.5.02.i.i = phi i64 [ %.sroa.07.0.i.i.i.i, %.lr.ph.i.i7 ], [ %156, %154 ] + %155 = add i64 %.sroa.0.03.i.i, 16 + %156 = add i64 %.sroa.5.02.i.i, -1 + %157 = getelementptr inbounds nuw i8, ptr %.val9.i, i64 %.sroa.0.03.i.i + %158 = load <16 x i8>, ptr %157, align 16, !noalias !302 + %.lobit.i.i.i.i = ashr <16 x i8> %158, splat (i8 7) + %159 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> + %160 = or <2 x i64> %159, splat (i64 -9187201950435737472) + store <2 x i64> %160, ptr %157, align 16, !noalias !302 + %.not.i.i = icmp eq i64 %156, 0 + br i1 %.not.i.i, label %._crit_edge.i.i8, label %154 + +.lr.ph.i: ; preds = %239, %._crit_edge.i.i8 + %.sroa.0.17.i = phi i64 [ %.sroa.0.1.i10, %239 ], [ 1, %._crit_edge.i.i8 ] + %.sroa.0.06.i = phi i64 [ %.sroa.0.17.i, %239 ], [ 0, %._crit_edge.i.i8 ] %161 = load ptr, ptr %0, align 8, !alias.scope !302, !nonnull !3, !noundef !3 %162 = getelementptr inbounds nuw i8, ptr %161, i64 %.sroa.0.06.i %163 = load i8, ptr %162, align 1, !noundef !3 @@ -2879,11 +2882,11 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.ex br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i: ; preds = %.preheader.i - %.pre.i18 = load ptr, ptr %0, align 8, !alias.scope !305 + %.pre.i17 = load ptr, ptr %0, align 8, !alias.scope !305 br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i, %164 - %169 = phi ptr [ %.pre.i18, %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i ], [ %161, %164 ] + %169 = phi ptr [ %.pre.i17, %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i ], [ %161, %164 ] call void @llvm.experimental.noalias.scope.decl(metadata !308) %170 = getelementptr inbounds { { { i64, [1 x i64] } }, { i32, [3 x i32] } }, ptr %169, i64 %168 %171 = getelementptr inbounds i8, ptr %170, i64 -32 @@ -2910,34 +2913,34 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i: ; preds = %177 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i12, zeroinitializer %178 = bitcast <16 x i1> %177 to i16 %.not.not.i.not7.i.i13 = icmp eq i16 %178, 0 - br i1 %.not.not.i.not7.i.i13, label %.lr.ph.i11.i, label %._crit_edge.i.i14, !prof !300 - -.lr.ph.i11.i: ; preds = %174, %.lr.ph.i11.i - %.sroa.0.09.i.i19 = phi i64 [ %.sroa.0.0.i.i21, %.lr.ph.i11.i ], [ %.sroa.0.05.i.i11, %174 ] - %.sroa.7.08.i.i20 = phi i64 [ %179, %.lr.ph.i11.i ], [ 0, %174 ] - %179 = add i64 %.sroa.7.08.i.i20, 16 - %180 = add i64 %179, %.sroa.0.09.i.i19 - %.sroa.0.0.i.i21 = and i64 %180, %.val8.i - %181 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i.i21 - %.sroa.0.0.copyload.i4.i.i22 = load <16 x i8>, ptr %181, align 1 - %182 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i22, zeroinitializer + br i1 %.not.not.i.not7.i.i13, label %.lr.ph.i12.i, label %._crit_edge.i11.i, !prof !300 + +.lr.ph.i12.i: ; preds = %174, %.lr.ph.i12.i + %.sroa.0.09.i.i18 = phi i64 [ %.sroa.0.0.i.i20, %.lr.ph.i12.i ], [ %.sroa.0.05.i.i11, %174 ] + %.sroa.7.08.i.i19 = phi i64 [ %179, %.lr.ph.i12.i ], [ 0, %174 ] + %179 = add i64 %.sroa.7.08.i.i19, 16 + %180 = add i64 %179, %.sroa.0.09.i.i18 + %.sroa.0.0.i.i20 = and i64 %180, %.val8.i + %181 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i.i20 + %.sroa.0.0.copyload.i4.i.i21 = load <16 x i8>, ptr %181, align 1 + %182 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i21, zeroinitializer %183 = bitcast <16 x i1> %182 to i16 - %.not.not.i.not.i.i23 = icmp eq i16 %183, 0 - br i1 %.not.not.i.not.i.i23, label %.lr.ph.i11.i, label %._crit_edge.i.i14, !prof !301 + %.not.not.i.not.i.i22 = icmp eq i16 %183, 0 + br i1 %.not.not.i.not.i.i22, label %.lr.ph.i12.i, label %._crit_edge.i11.i, !prof !301 -._crit_edge.i.i14: ; preds = %.lr.ph.i11.i, %174 - %.sroa.0.0.lcssa.i.i15 = phi i64 [ %.sroa.0.05.i.i11, %174 ], [ %.sroa.0.0.i.i21, %.lr.ph.i11.i ] - %.lcssa.i.i16 = phi i16 [ %178, %174 ], [ %183, %.lr.ph.i11.i ] - %184 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i16, i1 true) +._crit_edge.i11.i: ; preds = %.lr.ph.i12.i, %174 + %.sroa.0.0.lcssa.i.i14 = phi i64 [ %.sroa.0.05.i.i11, %174 ], [ %.sroa.0.0.i.i20, %.lr.ph.i12.i ] + %.lcssa.i.i15 = phi i16 [ %178, %174 ], [ %183, %.lr.ph.i12.i ] + %184 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i15, i1 true) %185 = zext nneg i16 %184 to i64 - %186 = add i64 %.sroa.0.0.lcssa.i.i15, %185 + %186 = add i64 %.sroa.0.0.lcssa.i.i14, %185 %187 = and i64 %186, %.val8.i %188 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %187 %189 = load i8, ptr %188, align 1, !noundef !3 %190 = icmp sgt i8 %189, -1 br i1 %190, label %191, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i, !prof !21 -191: ; preds = %._crit_edge.i.i14 +191: ; preds = %._crit_edge.i11.i %192 = load <16 x i8>, ptr %.val.i, align 16 %193 = icmp slt <16 x i8> %192, zeroinitializer %194 = bitcast <16 x i1> %193 to i16 @@ -2947,24 +2950,24 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i: ; preds = %197 = zext nneg i16 %196 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i: ; preds = %191, %._crit_edge.i.i14 - %.sroa.0.0.i4.i.i17 = phi i64 [ %197, %191 ], [ %187, %._crit_edge.i.i14 ] +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i: ; preds = %191, %._crit_edge.i11.i + %.sroa.0.0.i4.i.i16 = phi i64 [ %197, %191 ], [ %187, %._crit_edge.i11.i ] %198 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i11 - %199 = sub i64 %.sroa.0.0.i4.i.i17, %.sroa.0.05.i.i11 + %199 = sub i64 %.sroa.0.0.i4.i.i16, %.sroa.0.05.i.i11 %200 = xor i64 %199, %198 %.unshifted.i = and i64 %200, %.val8.i %201 = icmp ult i64 %.unshifted.i, 16 br i1 %201, label %216, label %202, !prof !179 202: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i - %203 = shl i64 %.sroa.0.0.i4.i.i17, 5 + %203 = shl i64 %.sroa.0.0.i4.i.i16, 5 %204 = sub nuw nsw i64 -32, %203 %205 = getelementptr inbounds i8, ptr %.val.i, i64 %204 - %206 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i4.i.i17 + %206 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i4.i.i16 %207 = load i8, ptr %206, align 1, !noundef !3 %208 = lshr i64 %175, 57 %209 = trunc nuw nsw i64 %208 to i8 - %210 = add i64 %.sroa.0.0.i4.i.i17, -16 + %210 = add i64 %.sroa.0.0.i4.i.i16, -16 %211 = and i64 %210, %.val8.i store i8 %209, ptr %206, align 1 %212 = load ptr, ptr %0, align 8, !alias.scope !302, !nonnull !3, !noundef !3 @@ -3034,26 +3037,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit: ; pr %246 = icmp ult i64 %.pre13.i.fr, 8 %spec.select = select i1 %246, i64 %.pre13.i.fr, i64 %245 %.pre = load i64, ptr %10, align 8, !alias.scope !302 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i - %247 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] - %248 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17ha910026f64bb7729E.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] - %249 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %250 = sub i64 %248, %247 - store i64 %250, ptr %249, align 8, !alias.scope !302 + br label %247 + +247: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread + %248 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] + %249 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] + %250 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %251 = sub i64 %249, %248 + store i64 %251, ptr %250, align 8, !alias.scope !302 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !302 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %.sroa.12.0.ph, %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %.sroa.7.0.ph, %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit" ] - %251 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %252 = insertvalue { i64, i64 } %251, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit", %247 + %.sroa.4.1.i = phi i64 [ undef, %247 ], [ %.sroa.12.0.ph, %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %247 ], [ %.sroa.7.0.ph, %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit" ] + %252 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %253 = insertvalue { i64, i64 } %252, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h961fbf1d95712217E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h961fbf1d95712217E.exit: ; preds = %23, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i - %.merged.i = phi { i64, i64 } [ %24, %23 ], [ %252, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i ] + %.merged.i = phi { i64, i64 } [ %24, %23 ], [ %253, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll b/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll index a30832dd70c..5bd8f64e802 100644 --- a/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll +++ b/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll @@ -3664,48 +3664,51 @@ common.resume: ; preds = %167, %75 151: ; preds = %17 tail call void @llvm.experimental.noalias.scope.decl(metadata !668) %.val.i = load ptr, ptr %0, align 8, !alias.scope !668 - %152 = lshr i64 %21, 4 - %153 = and i64 %21, 15 - %.not.i.i.i.i.i = icmp ne i64 %153, 0 - %154 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %152, %154 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %.lr.ph.i.i8 + %.not.not4.i.i = icmp eq i64 %21, 0 + br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i8 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %151 + %152 = icmp ne ptr %.val.i, null + tail call void @llvm.assume(i1 %152) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !668 + br label %256 .lr.ph.i.i8: ; preds = %151 - %155 = icmp ne ptr %.val.i, null - tail call void @llvm.assume(i1 %155) - br label %156 - -156: ; preds = %156, %.lr.ph.i.i8 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i8 ], [ %158, %156 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i8 ], [ %157, %156 ] - %157 = add nsw i64 %.sroa.5.05.i.i, -1 - %158 = add i64 %.sroa.01.06.i.i, 16 - %159 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.01.06.i.i - %160 = load <16 x i8>, ptr %159, align 16, !noalias !671 - %.lobit.i.i.i = ashr <16 x i8> %160, splat (i8 7) - %161 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %162 = or <2 x i64> %161, splat (i64 -9187201950435737472) - store <2 x i64> %162, ptr %159, align 16, !noalias !674 - %.not.not.i.i = icmp eq i64 %157, 0 - br i1 %.not.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %156 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i: ; preds = %156, %151 - %163 = icmp ne ptr %.val.i, null - tail call void @llvm.assume(i1 %163) - %..i.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) - %164 = getelementptr inbounds i8, ptr %.val.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %164, ptr nonnull align 1 %.val.i, i64 %.9.i.i, i1 false), !noalias !668 + %153 = lshr i64 %21, 4 + %154 = and i64 %21, 15 + %.not.i.i.i.i.i = icmp ne i64 %154, 0 + %155 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %153, %155 + %156 = icmp ne ptr %.val.i, null + tail call void @llvm.assume(i1 %156) + br label %160 + +._crit_edge.i.i9: ; preds = %160 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) + %spec.select34.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) + %157 = getelementptr inbounds i8, ptr %.val.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %157, ptr nonnull align 1 %.val.i, i64 %spec.select34.i, i1 false), !noalias !668 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !668 - %165 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr null, ptr %165, align 8, !noalias !668 - %166 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 24, ptr %166, align 8, !noalias !668 + %158 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr null, ptr %158, align 8, !noalias !668 + %159 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 24, ptr %159, align 8, !noalias !668 store ptr %0, ptr %6, align 8, !noalias !668 - %.not11.i = icmp eq i64 %21, 0 - br i1 %.not11.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i + br label %.lr.ph.i + +160: ; preds = %160, %.lr.ph.i.i8 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i8 ], [ %162, %160 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i8 ], [ %161, %160 ] + %161 = add i64 %.sroa.5.05.i.i, -1 + %162 = add i64 %.sroa.01.06.i.i, 16 + %163 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.01.06.i.i + %164 = load <16 x i8>, ptr %163, align 16, !noalias !671 + %.lobit.i.i.i = ashr <16 x i8> %164, splat (i8 7) + %165 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %166 = or <2 x i64> %165, splat (i64 -9187201950435737472) + store <2 x i64> %166, ptr %163, align 16, !noalias !674 + %.not.not.i.i = icmp eq i64 %161, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i9, label %160 167: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i %168 = landingpad { ptr, i32 } @@ -3713,14 +3716,14 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h806a0048b79d62b3E"(ptr noalias noundef align 8 dereferenceable(24) %6) #42 to label %common.resume unwind label %251 -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, %250 - %.sroa.02.010.i = phi i64 [ %169, %250 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ] +.lr.ph.i: ; preds = %250, %._crit_edge.i.i9 + %.sroa.02.010.i = phi i64 [ %169, %250 ], [ 0, %._crit_edge.i.i9 ] %169 = add nuw i64 %.sroa.02.010.i, 1 %170 = load ptr, ptr %0, align 8, !alias.scope !668, !nonnull !7, !noundef !7 %171 = getelementptr inbounds i8, ptr %170, i64 %.sroa.02.010.i %172 = load i8, ptr %171, align 1, !noundef !7 - %.not.i9 = icmp eq i8 %172, -128 - br i1 %.not.i9, label %173, label %250 + %.not.i10 = icmp eq i8 %172, -128 + br i1 %.not.i10, label %173, label %250 173: ; preds = %.lr.ph.i %.neg.i = mul i64 %.sroa.02.010.i, -24 @@ -3755,17 +3758,17 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor call void @llvm.experimental.noalias.scope.decl(metadata !710) %186 = load i64, ptr %18, align 8, !alias.scope !713, !noundef !7 %187 = load ptr, ptr %0, align 8, !alias.scope !713, !nonnull !7, !noundef !7 - %.sroa.0.011.i.i12 = and i64 %185, %186 - %188 = getelementptr inbounds i8, ptr %187, i64 %.sroa.0.011.i.i12 - %.0.copyload.i912.i.i13 = load <16 x i8>, ptr %188, align 1, !noalias !714 - %189 = icmp slt <16 x i8> %.0.copyload.i912.i.i13, zeroinitializer + %.sroa.0.011.i.i13 = and i64 %185, %186 + %188 = getelementptr inbounds i8, ptr %187, i64 %.sroa.0.011.i.i13 + %.0.copyload.i912.i.i14 = load <16 x i8>, ptr %188, align 1, !noalias !714 + %189 = icmp slt <16 x i8> %.0.copyload.i912.i.i14, zeroinitializer %190 = bitcast <16 x i1> %189 to i16 - %.not.i.not13.i.i14 = icmp eq i16 %190, 0 - br i1 %.not.i.not13.i.i14, label %.lr.ph.i16.i, label %._crit_edge.i.i15 + %.not.i.not13.i.i15 = icmp eq i16 %190, 0 + br i1 %.not.i.not13.i.i15, label %.lr.ph.i17.i, label %._crit_edge.i16.i -.lr.ph.i16.i: ; preds = %181, %.lr.ph.i16.i - %.sroa.0.015.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i16.i ], [ %.sroa.0.011.i.i12, %181 ] - %.sroa.7.014.i.i21 = phi i64 [ %191, %.lr.ph.i16.i ], [ 0, %181 ] +.lr.ph.i17.i: ; preds = %181, %.lr.ph.i17.i + %.sroa.0.015.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i17.i ], [ %.sroa.0.011.i.i13, %181 ] + %.sroa.7.014.i.i21 = phi i64 [ %191, %.lr.ph.i17.i ], [ 0, %181 ] %191 = add i64 %.sroa.7.014.i.i21, 16 %192 = add i64 %191, %.sroa.0.015.i.i20 %.sroa.0.0.i.i22 = and i64 %192, %186 @@ -3774,11 +3777,11 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor %194 = icmp slt <16 x i8> %.0.copyload.i9.i.i23, zeroinitializer %195 = bitcast <16 x i1> %194 to i16 %.not.i.not.i.i24 = icmp eq i16 %195, 0 - br i1 %.not.i.not.i.i24, label %.lr.ph.i16.i, label %._crit_edge.i.i15 + br i1 %.not.i.not.i.i24, label %.lr.ph.i17.i, label %._crit_edge.i16.i -._crit_edge.i.i15: ; preds = %.lr.ph.i16.i, %181 - %.sroa.0.0.lcssa.i.i16 = phi i64 [ %.sroa.0.011.i.i12, %181 ], [ %.sroa.0.0.i.i22, %.lr.ph.i16.i ] - %.lcssa.i.i17 = phi i16 [ %190, %181 ], [ %195, %.lr.ph.i16.i ] +._crit_edge.i16.i: ; preds = %.lr.ph.i17.i, %181 + %.sroa.0.0.lcssa.i.i16 = phi i64 [ %.sroa.0.011.i.i13, %181 ], [ %.sroa.0.0.i.i22, %.lr.ph.i17.i ] + %.lcssa.i.i17 = phi i16 [ %190, %181 ], [ %195, %.lr.ph.i17.i ] %196 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) %197 = zext nneg i16 %196 to i64 %198 = add i64 %.sroa.0.0.lcssa.i.i16, %197 @@ -3788,7 +3791,7 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor %202 = icmp sgt i8 %201, -1 br i1 %202, label %203, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i -203: ; preds = %._crit_edge.i.i15 +203: ; preds = %._crit_edge.i16.i %204 = load <16 x i8>, ptr %187, align 16, !noalias !717 %205 = icmp slt <16 x i8> %204, zeroinitializer %206 = bitcast <16 x i1> %205 to i16 @@ -3798,10 +3801,10 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %207) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i: ; preds = %203, %._crit_edge.i.i15 - %.0.i.i.i18 = phi i64 [ %209, %203 ], [ %199, %._crit_edge.i.i15 ] - %210 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i12 - %211 = sub i64 %.0.i.i.i18, %.sroa.0.011.i.i12 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i: ; preds = %203, %._crit_edge.i16.i + %.0.i.i.i18 = phi i64 [ %209, %203 ], [ %199, %._crit_edge.i16.i ] + %210 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i13 + %211 = sub i64 %.0.i.i.i18, %.sroa.0.011.i.i13 %212 = xor i64 %211, %210 %.unshifted.i = and i64 %212, %186 %213 = icmp ult i64 %.unshifted.i, 16 @@ -3865,8 +3868,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778 br label %250 250: ; preds = %241, %227, %.lr.ph.i - %exitcond.not.i10 = icmp eq i64 %.sroa.02.010.i, %19 - br i1 %exitcond.not.i10, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i + %exitcond.not.i11 = icmp eq i64 %.sroa.02.010.i, %19 + br i1 %exitcond.not.i11, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i 251: ; preds = %167 %252 = landingpad { ptr, i32 } @@ -3883,26 +3886,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; pr %255 = icmp ult i64 %.pre19.i.fr, 8 %spec.select = select i1 %255, i64 %.pre19.i.fr, i64 %254 %.pre = load i64, ptr %10, align 8, !alias.scope !668 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i - %256 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %257 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %258 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %259 = sub i64 %257, %256 - store i64 %259, ptr %258, align 8, !alias.scope !668 + br label %256 + +256: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %257 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %258 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %259 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %260 = sub i64 %258, %257 + store i64 %260, ptr %259, align 8, !alias.scope !668 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !668 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i: ; preds = %74, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.sroa.9.047.ph, %74 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.sroa.5.049.ph, %74 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit" ] - %260 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %261 = insertvalue { i64, i64 } %260, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i: ; preds = %74, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit", %256 + %.sroa.4.1.i = phi i64 [ undef, %256 ], [ %.sroa.9.047.ph, %74 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %256 ], [ %.sroa.5.049.ph, %74 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit" ] + %261 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %262 = insertvalue { i64, i64 } %261, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hae6cf7ace7c7a820E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hae6cf7ace7c7a820E.exit: ; preds = %15, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i - %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %261, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i ] + %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %262, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll b/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll index 13218259397..5a735d5ee56 100644 --- a/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll +++ b/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll @@ -5418,63 +5418,66 @@ common.resume: ; preds = %170, %69 154: ; preds = %15 tail call void @llvm.experimental.noalias.scope.decl(metadata !854) %.val15.i = load ptr, ptr %0, align 8, !alias.scope !854 - %155 = lshr i64 %19, 4 - %156 = and i64 %19, 15 - %.not.i.i.i.i.i = icmp ne i64 %156, 0 - %157 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %155, %157 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %.lr.ph.i.i10 + %.not.not4.i.i = icmp eq i64 %19, 0 + br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i10 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %154 + %155 = icmp ne ptr %.val15.i, null + tail call void @llvm.assume(i1 %155) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !854 + br label %264 .lr.ph.i.i10: ; preds = %154 - %158 = icmp ne ptr %.val15.i, null - tail call void @llvm.assume(i1 %158) - br label %159 - -159: ; preds = %159, %.lr.ph.i.i10 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i10 ], [ %161, %159 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i10 ], [ %160, %159 ] - %160 = add nsw i64 %.sroa.5.05.i.i, -1 - %161 = add i64 %.sroa.01.06.i.i, 16 - %162 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.01.06.i.i - %163 = load <16 x i8>, ptr %162, align 16, !noalias !857 - %.lobit.i.i.i = ashr <16 x i8> %163, splat (i8 7) - %164 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %165 = or <2 x i64> %164, splat (i64 -9187201950435737472) - store <2 x i64> %165, ptr %162, align 16, !noalias !860 - %.not.not.i.i = icmp eq i64 %160, 0 - br i1 %.not.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %159 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i: ; preds = %159, %154 - %166 = icmp ne ptr %.val15.i, null - tail call void @llvm.assume(i1 %166) - %..i.i = tail call i64 @llvm.umax.i64(i64 %19, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) - %167 = getelementptr inbounds i8, ptr %.val15.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %167, ptr nonnull align 1 %.val15.i, i64 %.9.i.i, i1 false), !noalias !854 + %156 = lshr i64 %19, 4 + %157 = and i64 %19, 15 + %.not.i.i.i.i.i = icmp ne i64 %157, 0 + %158 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %156, %158 + %159 = icmp ne ptr %.val15.i, null + tail call void @llvm.assume(i1 %159) + br label %163 + +._crit_edge.i.i11: ; preds = %163 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %19, i64 16) + %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) + %160 = getelementptr inbounds i8, ptr %.val15.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %160, ptr nonnull align 1 %.val15.i, i64 %spec.select28.i, i1 false), !noalias !854 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !854 - %168 = getelementptr inbounds nuw i8, ptr %3, i64 8 - store ptr @"_ZN4core3ptr374drop_in_place$LT$$LP$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$C$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$RP$$GT$17h58d7ceec90bd6ec6E.llvm.3712155024907033177", ptr %168, align 8, !noalias !854 - %169 = getelementptr inbounds nuw i8, ptr %3, i64 16 - store i64 32, ptr %169, align 8, !noalias !854 + %161 = getelementptr inbounds nuw i8, ptr %3, i64 8 + store ptr @"_ZN4core3ptr374drop_in_place$LT$$LP$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$C$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$RP$$GT$17h58d7ceec90bd6ec6E.llvm.3712155024907033177", ptr %161, align 8, !noalias !854 + %162 = getelementptr inbounds nuw i8, ptr %3, i64 16 + store i64 32, ptr %162, align 8, !noalias !854 store ptr %0, ptr %3, align 8, !noalias !854 - %.not9.i = icmp eq i64 %19, 0 - br i1 %.not9.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i - -170: ; preds = %.noexc.i14, %_ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i + br label %.lr.ph.i + +163: ; preds = %163, %.lr.ph.i.i10 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i10 ], [ %165, %163 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i10 ], [ %164, %163 ] + %164 = add i64 %.sroa.5.05.i.i, -1 + %165 = add i64 %.sroa.01.06.i.i, 16 + %166 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.01.06.i.i + %167 = load <16 x i8>, ptr %166, align 16, !noalias !857 + %.lobit.i.i.i = ashr <16 x i8> %167, splat (i8 7) + %168 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %169 = or <2 x i64> %168, splat (i64 -9187201950435737472) + store <2 x i64> %169, ptr %166, align 16, !noalias !860 + %.not.not.i.i = icmp eq i64 %164, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i11, label %163 + +170: ; preds = %.noexc.i15, %_ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i %171 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17ha2c07ce95b454331E"(ptr noalias noundef align 8 dereferenceable(24) %3) #39 to label %common.resume unwind label %259 -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, %258 - %.sroa.02.08.i = phi i64 [ %172, %258 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ] +.lr.ph.i: ; preds = %258, %._crit_edge.i.i11 + %.sroa.02.08.i = phi i64 [ %172, %258 ], [ 0, %._crit_edge.i.i11 ] %172 = add nuw i64 %.sroa.02.08.i, 1 %173 = load ptr, ptr %0, align 8, !alias.scope !854, !nonnull !4, !noundef !4 %174 = getelementptr inbounds i8, ptr %173, i64 %.sroa.02.08.i %175 = load i8, ptr %174, align 1, !noundef !4 - %.not.i11 = icmp eq i8 %175, -128 - br i1 %.not.i11, label %176, label %258 + %.not.i12 = icmp eq i8 %175, -128 + br i1 %.not.i12, label %176, label %258 176: ; preds = %.lr.ph.i %177 = shl i64 %.sroa.02.08.i, 5 @@ -5497,9 +5500,9 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor %.val5.i.i = load ptr, ptr %184, align 8, !alias.scope !867, !noalias !872, !nonnull !4, !noundef !4 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2), !noalias !877 %185 = invoke { ptr, i32 } @_ZN5rowan6cursor8NodeData3key17hac391177412f5ff8E.llvm.16397098368628515937(ptr noundef nonnull align 8 %.val5.i.i) - to label %.noexc.i14 unwind label %170 + to label %.noexc.i15 unwind label %170 -.noexc.i14: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i +.noexc.i15: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i %186 = mul nuw nsw i64 %.val4.i.i, 5871781006564002453 %187 = call i64 @llvm.fshl.i64(i64 %186, i64 %186, i64 5) %188 = extractvalue { ptr, i32 } %185, 0 @@ -5511,22 +5514,22 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor invoke void @"_ZN59_$LT$rustc_hash..FxHasher$u20$as$u20$core..hash..Hasher$GT$9write_u3217h879fefc5e1be8fbfE.llvm.16397098368628515937"(ptr noalias noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %189) to label %193 unwind label %170 -193: ; preds = %.noexc.i14 +193: ; preds = %.noexc.i15 %194 = load i64, ptr %2, align 8, !alias.scope !888, !noalias !877, !noundef !4 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2), !noalias !877 %.val.i = load ptr, ptr %0, align 8, !alias.scope !854, !nonnull !4, !noundef !4 %.val14.i = load i64, ptr %16, align 8, !alias.scope !854, !noundef !4 - %.sroa.0.05.i.i15 = and i64 %.val14.i, %194 - %195 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.05.i.i15 - %.0.copyload.i46.i.i16 = load <16 x i8>, ptr %195, align 1, !noalias !891 - %196 = icmp slt <16 x i8> %.0.copyload.i46.i.i16, zeroinitializer + %.sroa.0.05.i.i16 = and i64 %.val14.i, %194 + %195 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.05.i.i16 + %.0.copyload.i46.i.i17 = load <16 x i8>, ptr %195, align 1, !noalias !891 + %196 = icmp slt <16 x i8> %.0.copyload.i46.i.i17, zeroinitializer %197 = bitcast <16 x i1> %196 to i16 - %.not.i.not7.i.i17 = icmp eq i16 %197, 0 - br i1 %.not.i.not7.i.i17, label %.lr.ph.i18.i, label %._crit_edge.i.i18 + %.not.i.not7.i.i18 = icmp eq i16 %197, 0 + br i1 %.not.i.not7.i.i18, label %.lr.ph.i19.i, label %._crit_edge.i18.i -.lr.ph.i18.i: ; preds = %193, %.lr.ph.i18.i - %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i18.i ], [ %.sroa.0.05.i.i15, %193 ] - %.sroa.7.08.i.i24 = phi i64 [ %198, %.lr.ph.i18.i ], [ 0, %193 ] +.lr.ph.i19.i: ; preds = %193, %.lr.ph.i19.i + %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ], [ %.sroa.0.05.i.i16, %193 ] + %.sroa.7.08.i.i24 = phi i64 [ %198, %.lr.ph.i19.i ], [ 0, %193 ] %198 = add i64 %.sroa.7.08.i.i24, 16 %199 = add i64 %198, %.sroa.0.09.i.i23 %.sroa.0.0.i.i25 = and i64 %199, %.val14.i @@ -5535,11 +5538,11 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor %201 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer %202 = bitcast <16 x i1> %201 to i16 %.not.i.not.i.i27 = icmp eq i16 %202, 0 - br i1 %.not.i.not.i.i27, label %.lr.ph.i18.i, label %._crit_edge.i.i18 + br i1 %.not.i.not.i.i27, label %.lr.ph.i19.i, label %._crit_edge.i18.i -._crit_edge.i.i18: ; preds = %.lr.ph.i18.i, %193 - %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i15, %193 ], [ %.sroa.0.0.i.i25, %.lr.ph.i18.i ] - %.lcssa.i.i20 = phi i16 [ %197, %193 ], [ %202, %.lr.ph.i18.i ] +._crit_edge.i18.i: ; preds = %.lr.ph.i19.i, %193 + %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i16, %193 ], [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ] + %.lcssa.i.i20 = phi i16 [ %197, %193 ], [ %202, %.lr.ph.i19.i ] %203 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i20, i1 true) %204 = zext nneg i16 %203 to i64 %205 = add i64 %.sroa.0.0.lcssa.i.i19, %204 @@ -5549,7 +5552,7 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor %209 = icmp sgt i8 %208, -1 br i1 %209, label %210, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i -210: ; preds = %._crit_edge.i.i18 +210: ; preds = %._crit_edge.i18.i %211 = load <16 x i8>, ptr %.val.i, align 16, !noalias !894 %212 = icmp slt <16 x i8> %211, zeroinitializer %213 = bitcast <16 x i1> %212 to i16 @@ -5559,10 +5562,10 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %214) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i: ; preds = %210, %._crit_edge.i.i18 - %.0.i.i.i21 = phi i64 [ %216, %210 ], [ %206, %._crit_edge.i.i18 ] - %217 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i15 - %218 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i15 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i: ; preds = %210, %._crit_edge.i18.i + %.0.i.i.i21 = phi i64 [ %216, %210 ], [ %206, %._crit_edge.i18.i ] + %217 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i16 + %218 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i16 %219 = xor i64 %218, %217 %.unshifted.i = and i64 %219, %.val14.i %220 = icmp ult i64 %.unshifted.i, 16 @@ -5626,8 +5629,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i: ; br label %258 258: ; preds = %249, %235, %.lr.ph.i - %exitcond.not.i12 = icmp eq i64 %.sroa.02.08.i, %17 - br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i + %exitcond.not.i13 = icmp eq i64 %.sroa.02.08.i, %17 + br i1 %exitcond.not.i13, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i 259: ; preds = %170 %260 = landingpad { ptr, i32 } @@ -5644,19 +5647,19 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; pr %263 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %263, i64 %.pre15.i.fr, i64 %262 %.pre = load i64, ptr %7, align 8, !alias.scope !854 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i - %264 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %265 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %266 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %267 = sub i64 %265, %264 - store i64 %267, ptr %266, align 8, !alias.scope !854 + br label %264 + +264: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %265 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %266 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %267 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %268 = sub i64 %266, %265 + store i64 %268, ptr %267, align 8, !alias.scope !854 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3), !noalias !854 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h6d85cfa73201d5ddE.exit -_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h6d85cfa73201d5ddE.exit: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb93fdfe614f94da8E.exit", %68, %12 - %.merged.i = phi i64 [ %14, %12 ], [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.sroa.5.052.ph, %68 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb93fdfe614f94da8E.exit" ] +_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h6d85cfa73201d5ddE.exit: ; preds = %264, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb93fdfe614f94da8E.exit", %68, %12 + %.merged.i = phi i64 [ %14, %12 ], [ -9223372036854775807, %264 ], [ %.sroa.5.052.ph, %68 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb93fdfe614f94da8E.exit" ] ret i64 %.merged.i } diff --git a/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll b/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll index 8854b201f3d..15a71597581 100644 --- a/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll +++ b/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll @@ -1486,63 +1486,66 @@ common.resume: ; preds = %167, %73 151: ; preds = %17 tail call void @llvm.experimental.noalias.scope.decl(metadata !332) %.val.i = load ptr, ptr %0, align 8, !alias.scope !332 - %152 = lshr i64 %21, 4 - %153 = and i64 %21, 15 - %.not.i.i.i.i.i = icmp ne i64 %153, 0 - %154 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %152, %154 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %.lr.ph.i.i9 + %.not.not4.i.i = icmp eq i64 %21, 0 + br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i9 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %151 + %152 = icmp ne ptr %.val.i, null + tail call void @llvm.assume(i1 %152) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !332 + br label %258 .lr.ph.i.i9: ; preds = %151 - %155 = icmp ne ptr %.val.i, null - tail call void @llvm.assume(i1 %155) - br label %156 - -156: ; preds = %156, %.lr.ph.i.i9 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %158, %156 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %157, %156 ] - %157 = add nsw i64 %.sroa.5.05.i.i, -1 - %158 = add i64 %.sroa.01.06.i.i, 16 - %159 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.01.06.i.i - %160 = load <16 x i8>, ptr %159, align 16, !noalias !335 - %.lobit.i.i.i = ashr <16 x i8> %160, splat (i8 7) - %161 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %162 = or <2 x i64> %161, splat (i64 -9187201950435737472) - store <2 x i64> %162, ptr %159, align 16, !noalias !338 - %.not.not.i.i = icmp eq i64 %157, 0 - br i1 %.not.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, label %156 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i: ; preds = %156, %151 - %163 = icmp ne ptr %.val.i, null - tail call void @llvm.assume(i1 %163) - %..i.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) - %164 = getelementptr inbounds i8, ptr %.val.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %164, ptr nonnull align 1 %.val.i, i64 %.9.i.i, i1 false), !noalias !332 + %153 = lshr i64 %21, 4 + %154 = and i64 %21, 15 + %.not.i.i.i.i.i = icmp ne i64 %154, 0 + %155 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %153, %155 + %156 = icmp ne ptr %.val.i, null + tail call void @llvm.assume(i1 %156) + br label %160 + +._crit_edge.i.i10: ; preds = %160 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) + %spec.select34.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) + %157 = getelementptr inbounds i8, ptr %.val.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %157, ptr nonnull align 1 %.val.i, i64 %spec.select34.i, i1 false), !noalias !332 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !332 - %165 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @"_ZN4core3ptr71drop_in_place$LT$$LP$smol_str..SmolStr$C$mbe..expander..Binding$RP$$GT$17h449ad8e1b6cbef51E.llvm.5326854279421171428", ptr %165, align 8, !noalias !332 - %166 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 96, ptr %166, align 8, !noalias !332 + %158 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN4core3ptr71drop_in_place$LT$$LP$smol_str..SmolStr$C$mbe..expander..Binding$RP$$GT$17h449ad8e1b6cbef51E.llvm.5326854279421171428", ptr %158, align 8, !noalias !332 + %159 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 96, ptr %159, align 8, !noalias !332 store ptr %0, ptr %6, align 8, !noalias !332 - %.not11.i = icmp eq i64 %21, 0 - br i1 %.not11.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i - -167: ; preds = %.noexc.i13, %_ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i + br label %.lr.ph.i + +160: ; preds = %160, %.lr.ph.i.i9 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %162, %160 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %161, %160 ] + %161 = add i64 %.sroa.5.05.i.i, -1 + %162 = add i64 %.sroa.01.06.i.i, 16 + %163 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.01.06.i.i + %164 = load <16 x i8>, ptr %163, align 16, !noalias !335 + %.lobit.i.i.i = ashr <16 x i8> %164, splat (i8 7) + %165 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %166 = or <2 x i64> %165, splat (i64 -9187201950435737472) + store <2 x i64> %166, ptr %163, align 16, !noalias !338 + %.not.not.i.i = icmp eq i64 %161, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i10, label %160 + +167: ; preds = %.noexc.i14, %_ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i %168 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h0f7679481b8f0aaeE"(ptr noalias noundef align 8 dereferenceable(24) %6) #28 to label %common.resume unwind label %253 -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i, %252 - %.sroa.02.010.i = phi i64 [ %169, %252 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ] +.lr.ph.i: ; preds = %252, %._crit_edge.i.i10 + %.sroa.02.010.i = phi i64 [ %169, %252 ], [ 0, %._crit_edge.i.i10 ] %169 = add nuw i64 %.sroa.02.010.i, 1 %170 = load ptr, ptr %0, align 8, !alias.scope !332, !nonnull !7, !noundef !7 %171 = getelementptr inbounds i8, ptr %170, i64 %.sroa.02.010.i %172 = load i8, ptr %171, align 1, !noundef !7 - %.not.i10 = icmp eq i8 %172, -128 - br i1 %.not.i10, label %173, label %252 + %.not.i11 = icmp eq i8 %172, -128 + br i1 %.not.i11, label %173, label %252 173: ; preds = %.lr.ph.i %.neg.i = mul i64 %.sroa.02.010.i, -96 @@ -1563,15 +1566,15 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5), !noalias !345 store i64 0, ptr %5, align 8, !noalias !345 %180 = invoke { ptr, i64 } @_ZN8smol_str4Repr6as_str17h6612cd4653de1669E.llvm.3862332030041601646(ptr noalias noundef nonnull readonly align 8 dereferenceable(96) %179) - to label %.noexc.i13 unwind label %167 + to label %.noexc.i14 unwind label %167 -.noexc.i13: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i +.noexc.i14: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i %181 = extractvalue { ptr, i64 } %180, 0 %182 = extractvalue { ptr, i64 } %180, 1 invoke void @"_ZN59_$LT$rustc_hash..FxHasher$u20$as$u20$core..hash..Hasher$GT$5write17hdaf3c64ce7294b9eE.llvm.3862332030041601646"(ptr noalias noundef nonnull align 8 dereferenceable(8) %5, ptr noalias noundef nonnull readonly align 1 %181, i64 noundef %182) to label %183 unwind label %167 -183: ; preds = %.noexc.i13 +183: ; preds = %.noexc.i14 %184 = load i64, ptr %5, align 8, !alias.scope !350, !noalias !359, !noundef !7 %185 = call i64 @llvm.fshl.i64(i64 %184, i64 %184, i64 5) %186 = xor i64 %185, 255 @@ -1580,17 +1583,17 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor call void @llvm.experimental.noalias.scope.decl(metadata !363) %188 = load i64, ptr %18, align 8, !alias.scope !366, !noundef !7 %189 = load ptr, ptr %0, align 8, !alias.scope !366, !nonnull !7, !noundef !7 - %.sroa.0.011.i.i14 = and i64 %187, %188 - %190 = getelementptr inbounds i8, ptr %189, i64 %.sroa.0.011.i.i14 - %.0.copyload.i912.i.i15 = load <16 x i8>, ptr %190, align 1, !noalias !367 - %191 = icmp slt <16 x i8> %.0.copyload.i912.i.i15, zeroinitializer + %.sroa.0.011.i.i15 = and i64 %187, %188 + %190 = getelementptr inbounds i8, ptr %189, i64 %.sroa.0.011.i.i15 + %.0.copyload.i912.i.i16 = load <16 x i8>, ptr %190, align 1, !noalias !367 + %191 = icmp slt <16 x i8> %.0.copyload.i912.i.i16, zeroinitializer %192 = bitcast <16 x i1> %191 to i16 - %.not.i.not13.i.i16 = icmp eq i16 %192, 0 - br i1 %.not.i.not13.i.i16, label %.lr.ph.i17.i, label %._crit_edge.i.i17 + %.not.i.not13.i.i17 = icmp eq i16 %192, 0 + br i1 %.not.i.not13.i.i17, label %.lr.ph.i18.i, label %._crit_edge.i17.i -.lr.ph.i17.i: ; preds = %183, %.lr.ph.i17.i - %.sroa.0.015.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i17.i ], [ %.sroa.0.011.i.i14, %183 ] - %.sroa.7.014.i.i23 = phi i64 [ %193, %.lr.ph.i17.i ], [ 0, %183 ] +.lr.ph.i18.i: ; preds = %183, %.lr.ph.i18.i + %.sroa.0.015.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i18.i ], [ %.sroa.0.011.i.i15, %183 ] + %.sroa.7.014.i.i23 = phi i64 [ %193, %.lr.ph.i18.i ], [ 0, %183 ] %193 = add i64 %.sroa.7.014.i.i23, 16 %194 = add i64 %193, %.sroa.0.015.i.i22 %.sroa.0.0.i.i24 = and i64 %194, %188 @@ -1599,11 +1602,11 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor %196 = icmp slt <16 x i8> %.0.copyload.i9.i.i25, zeroinitializer %197 = bitcast <16 x i1> %196 to i16 %.not.i.not.i.i26 = icmp eq i16 %197, 0 - br i1 %.not.i.not.i.i26, label %.lr.ph.i17.i, label %._crit_edge.i.i17 + br i1 %.not.i.not.i.i26, label %.lr.ph.i18.i, label %._crit_edge.i17.i -._crit_edge.i.i17: ; preds = %.lr.ph.i17.i, %183 - %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.011.i.i14, %183 ], [ %.sroa.0.0.i.i24, %.lr.ph.i17.i ] - %.lcssa.i.i19 = phi i16 [ %192, %183 ], [ %197, %.lr.ph.i17.i ] +._crit_edge.i17.i: ; preds = %.lr.ph.i18.i, %183 + %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.011.i.i15, %183 ], [ %.sroa.0.0.i.i24, %.lr.ph.i18.i ] + %.lcssa.i.i19 = phi i16 [ %192, %183 ], [ %197, %.lr.ph.i18.i ] %198 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) %199 = zext nneg i16 %198 to i64 %200 = add i64 %.sroa.0.0.lcssa.i.i18, %199 @@ -1613,7 +1616,7 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor %204 = icmp sgt i8 %203, -1 br i1 %204, label %205, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i -205: ; preds = %._crit_edge.i.i17 +205: ; preds = %._crit_edge.i17.i %206 = load <16 x i8>, ptr %189, align 16, !noalias !370 %207 = icmp slt <16 x i8> %206, zeroinitializer %208 = bitcast <16 x i1> %207 to i16 @@ -1623,10 +1626,10 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %209) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i: ; preds = %205, %._crit_edge.i.i17 - %.0.i.i.i20 = phi i64 [ %211, %205 ], [ %201, %._crit_edge.i.i17 ] - %212 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i14 - %213 = sub i64 %.0.i.i.i20, %.sroa.0.011.i.i14 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i: ; preds = %205, %._crit_edge.i17.i + %.0.i.i.i20 = phi i64 [ %211, %205 ], [ %201, %._crit_edge.i17.i ] + %212 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i15 + %213 = sub i64 %.0.i.i.i20, %.sroa.0.011.i.i15 %214 = xor i64 %213, %212 %.unshifted.i = and i64 %214, %188 %215 = icmp ult i64 %.unshifted.i, 16 @@ -1690,8 +1693,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326 br label %252 252: ; preds = %243, %229, %.lr.ph.i - %exitcond.not.i11 = icmp eq i64 %.sroa.02.010.i, %19 - br i1 %exitcond.not.i11, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i + %exitcond.not.i12 = icmp eq i64 %.sroa.02.010.i, %19 + br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i 253: ; preds = %167 %254 = landingpad { ptr, i32 } @@ -1708,26 +1711,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; pr %257 = icmp ult i64 %.pre19.i.fr, 8 %spec.select = select i1 %257, i64 %.pre19.i.fr, i64 %256 %.pre = load i64, ptr %10, align 8, !alias.scope !332 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i - %258 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %259 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %260 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %261 = sub i64 %259, %258 - store i64 %261, ptr %260, align 8, !alias.scope !332 + br label %258 + +258: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %259 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %260 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %261 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %262 = sub i64 %260, %259 + store i64 %262, ptr %261, align 8, !alias.scope !332 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !332 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.sroa.9.049.ph, %72 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.sroa.5.051.ph, %72 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit" ] - %262 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %263 = insertvalue { i64, i64 } %262, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit", %258 + %.sroa.4.1.i = phi i64 [ undef, %258 ], [ %.sroa.9.049.ph, %72 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %258 ], [ %.sroa.5.051.ph, %72 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit" ] + %263 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %264 = insertvalue { i64, i64 } %263, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hc921e874a7631f52E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hc921e874a7631f52E.exit: ; preds = %15, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i - %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %263, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i ] + %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %264, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll b/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll index 18aa25a9b2b..7df650da6a6 100644 --- a/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll +++ b/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll @@ -481,9 +481,9 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exi store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 %65 = load i64, ptr %8, align 8, !alias.scope !59, !noalias !60, !noundef !13 %invariant.gep = getelementptr i8, ptr %64, i64 16 - %invariant.gep51 = getelementptr i8, ptr %64, i64 -24 + %invariant.gep50 = getelementptr i8, ptr %64, i64 -24 %66 = icmp eq i64 %65, 0 - br i1 %66, label %._crit_edge57, label %.preheader.lr.ph + br i1 %66, label %._crit_edge56, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit %67 = load ptr, ptr %0, align 8, !alias.scope !59, !noalias !60, !nonnull !13, !noundef !13 @@ -495,8 +495,8 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exi _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread: ; preds = %54, %56, %58 %.pn = phi { i64, i64 } [ %59, %58 ], [ %57, %56 ], [ %55, %54 ] - %.sroa.7.036 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.037 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.035 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.036 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6), !noalias !50 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i @@ -508,37 +508,37 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exi .preheader: ; preds = %.preheader.lr.ph, %133 %74 = phi ptr [ %67, %.preheader.lr.ph ], [ %139, %133 ] - %.sroa.026.056 = phi ptr [ %67, %.preheader.lr.ph ], [ %.sroa.026.1.lcssa, %133 ] - %.sroa.5.055 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %133 ] - %.sroa.9.054 = phi i64 [ %65, %.preheader.lr.ph ], [ %106, %133 ] - %.sroa.13.053 = phi i16 [ %71, %.preheader.lr.ph ], [ %104, %133 ] - %.not.i246 = icmp eq i16 %.sroa.13.053, 0 - br i1 %.not.i246, label %.noexc3, label %._crit_edge + %.sroa.025.055 = phi ptr [ %67, %.preheader.lr.ph ], [ %.sroa.025.1.lcssa, %133 ] + %.sroa.5.054 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %133 ] + %.sroa.9.053 = phi i64 [ %65, %.preheader.lr.ph ], [ %106, %133 ] + %.sroa.13.052 = phi i16 [ %71, %.preheader.lr.ph ], [ %104, %133 ] + %.not.i245 = icmp eq i16 %.sroa.13.052, 0 + br i1 %.not.i245, label %.noexc3, label %._crit_edge .noexc3: ; preds = %.preheader, %.noexc3 - %.sroa.026.148 = phi ptr [ %75, %.noexc3 ], [ %.sroa.026.056, %.preheader ] - %.sroa.5.147 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.055, %.preheader ] - %75 = getelementptr inbounds nuw i8, ptr %.sroa.026.148, i64 16 + %.sroa.025.147 = phi ptr [ %75, %.noexc3 ], [ %.sroa.025.055, %.preheader ] + %.sroa.5.146 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.054, %.preheader ] + %75 = getelementptr inbounds nuw i8, ptr %.sroa.025.147, i64 16 %76 = load <16 x i8>, ptr %75, align 16 %77 = icmp slt <16 x i8> %76, zeroinitializer %78 = bitcast <16 x i1> %77 to i16 - %79 = add i64 %.sroa.5.147, 16 + %79 = add i64 %.sroa.5.146, 16 %.not.i2 = icmp eq i16 %78, -1 br i1 %.not.i2, label %.noexc3, label %._crit_edge.loopexit -._crit_edge57.loopexit: ; preds = %133 - %.pre68 = load i64, ptr %8, align 8, !alias.scope !59, !noalias !60 - br label %._crit_edge57 +._crit_edge56.loopexit: ; preds = %133 + %.pre67 = load i64, ptr %8, align 8, !alias.scope !59, !noalias !60 + br label %._crit_edge56 -._crit_edge57: ; preds = %._crit_edge57.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit - %80 = phi i64 [ %.pre68, %._crit_edge57.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit ] +._crit_edge56: ; preds = %._crit_edge56.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit + %80 = phi i64 [ %.pre67, %._crit_edge56.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit ] %81 = sub i64 %.sroa.02.0.i.i, %80 store i64 %81, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 store i64 %80, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 br label %82 -82: ; preds = %82, %._crit_edge57 - %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge57 ], [ %87, %82 ] +82: ; preds = %82, %._crit_edge56 + %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge56 ], [ %87, %82 ] %83 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %84 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i %85 = load i64, ptr %83, align 8 @@ -585,15 +585,15 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h74cbe161f7b8b670E.exit.i. br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.053, %.preheader ], [ %100, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.055, %.preheader ], [ %79, %._crit_edge.loopexit ] - %.sroa.026.1.lcssa = phi ptr [ %.sroa.026.056, %.preheader ], [ %75, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.052, %.preheader ], [ %100, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.054, %.preheader ], [ %79, %._crit_edge.loopexit ] + %.sroa.025.1.lcssa = phi ptr [ %.sroa.025.055, %.preheader ], [ %75, %._crit_edge.loopexit ] %101 = add i16 %.sroa.13.1.lcssa, -1 %102 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %103 = zext nneg i16 %102 to i64 %104 = and i16 %101, %.sroa.13.1.lcssa %105 = add i64 %.sroa.5.1.lcssa, %103 - %106 = add i64 %.sroa.9.054, -1 + %106 = add i64 %.sroa.9.053, -1 %107 = sub nsw i64 0, %105 %108 = getelementptr inbounds { { ptr, [1 x i64] }, ptr }, ptr %74, i64 %107 %109 = getelementptr inbounds i8, ptr %108, i64 -24 @@ -659,247 +659,257 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h74cbe161f7b8b670E.exit.i. %140 = getelementptr i8, ptr %139, i64 %.neg.i.i %141 = getelementptr i8, ptr %140, i64 -24 %.neg73.i.i = mul i64 %.sroa.0.0.i4.i.i, -24 - %gep52 = getelementptr i8, ptr %invariant.gep51, i64 %.neg73.i.i - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep52, ptr noundef nonnull align 1 dereferenceable(24) %141, i64 24, i1 false) + %gep51 = getelementptr i8, ptr %invariant.gep50, i64 %.neg73.i.i + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep51, ptr noundef nonnull align 1 dereferenceable(24) %141, i64 24, i1 false) %142 = icmp eq i64 %106, 0 - br i1 %142, label %._crit_edge57.loopexit, label %.preheader + br i1 %142, label %._crit_edge56.loopexit, label %.preheader -common.resume: ; preds = %170, %72 - %common.resume.op = phi { ptr, i32 } [ %73, %72 ], [ %171, %170 ] +common.resume: ; preds = %172, %72 + %common.resume.op = phi { ptr, i32 } [ %73, %72 ], [ %173, %172 ] resume { ptr, i32 } %common.resume.op 143: ; preds = %12 tail call void @llvm.experimental.noalias.scope.decl(metadata !70) %.val10.i = load ptr, ptr %0, align 8, !alias.scope !70 - %144 = lshr i64 %17, 4 - %145 = and i64 %17, 15 - %.not11.i.i.i.i = icmp ne i64 %145, 0 - %146 = zext i1 %.not11.i.i.i.i to i64 - %.sroa.07.0.i.i.i.i = add nuw nsw i64 %144, %146 - %.not1.i.i = icmp eq i64 %.sroa.07.0.i.i.i.i, 0 - br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i, label %.lr.ph.i.i7 + %.not1.i.i = icmp eq i64 %17, 0 + br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread, label %.lr.ph.i.i7 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread: ; preds = %143 + %144 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %144) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !70 + br label %244 .lr.ph.i.i7: ; preds = %143 - %147 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %147) - br label %148 - -148: ; preds = %148, %.lr.ph.i.i7 - %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %149, %148 ] - %.sroa.5.02.i.i = phi i64 [ %.sroa.07.0.i.i.i.i, %.lr.ph.i.i7 ], [ %150, %148 ] - %149 = add i64 %.sroa.0.03.i.i, 16 - %150 = add nsw i64 %.sroa.5.02.i.i, -1 - %151 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sroa.0.03.i.i - %152 = load <16 x i8>, ptr %151, align 16, !noalias !70 - %.lobit.i.i.i.i = ashr <16 x i8> %152, splat (i8 7) - %153 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> - %154 = or <2 x i64> %153, splat (i64 -9187201950435737472) - store <2 x i64> %154, ptr %151, align 16, !noalias !70 - %.not.i.i = icmp eq i64 %150, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i, label %148 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i: ; preds = %148, %143 - %155 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %155) - %..i.i8 = tail call i64 @llvm.umax.i64(i64 %17, i64 16) - %.6.i.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) - %156 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %..i.i8 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %156, ptr nonnull align 1 %.val10.i, i64 %.6.i.i, i1 false), !noalias !70 + %145 = lshr i64 %17, 4 + %146 = and i64 %17, 15 + %.not11.i.i.i.i = icmp ne i64 %146, 0 + %147 = zext i1 %.not11.i.i.i.i to i64 + %.sroa.07.0.i.i.i.i = add nuw nsw i64 %145, %147 + %148 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %148) + br label %150 + +._crit_edge.i.i8: ; preds = %150 + %149 = icmp ult i64 %17, 16 + br i1 %149, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i, label %.lr.ph.i, !prof !73 + +150: ; preds = %150, %.lr.ph.i.i7 + %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %151, %150 ] + %.sroa.5.02.i.i = phi i64 [ %.sroa.07.0.i.i.i.i, %.lr.ph.i.i7 ], [ %152, %150 ] + %151 = add i64 %.sroa.0.03.i.i, 16 + %152 = add i64 %.sroa.5.02.i.i, -1 + %153 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sroa.0.03.i.i + %154 = load <16 x i8>, ptr %153, align 16, !noalias !70 + %.lobit.i.i.i.i = ashr <16 x i8> %154, splat (i8 7) + %155 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> + %156 = or <2 x i64> %155, splat (i64 -9187201950435737472) + store <2 x i64> %156, ptr %153, align 16, !noalias !70 + %.not.i.i = icmp eq i64 %152, 0 + br i1 %.not.i.i, label %._crit_edge.i.i8, label %150 + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i: ; preds = %._crit_edge.i.i8 + br label %.lr.ph.i + +.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i, %._crit_edge.i.i8 + %.sink26.i = phi i64 [ 16, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i ], [ %17, %._crit_edge.i.i8 ] + %.sink25.i = phi i64 [ %17, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i ], [ 16, %._crit_edge.i.i8 ] + %157 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sink26.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %157, ptr nonnull align 1 %.val10.i, i64 %.sink25.i, i1 false), !noalias !70 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !70 - %157 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr @_ZN4core3ops8function6FnOnce9call_once17h7b495b779f890d8eE, ptr %157, align 8, !noalias !70 - %158 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 24, ptr %158, align 8, !noalias !70 + %158 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr @_ZN4core3ops8function6FnOnce9call_once17h7b495b779f890d8eE, ptr %158, align 8, !noalias !70 + %159 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 24, ptr %159, align 8, !noalias !70 store ptr %0, ptr %5, align 8, !noalias !70 - %.not8.i = icmp eq i64 %17, 0 - br i1 %.not8.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread, label %.lr.ph.i - -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i, %234 - %.sroa.0.17.i = phi i64 [ %.sroa.0.1.i10, %234 ], [ 1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i ] - %.sroa.0.06.i = phi i64 [ %.sroa.0.17.i, %234 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i ] - %159 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %160 = getelementptr inbounds nuw i8, ptr %159, i64 %.sroa.0.06.i - %161 = load i8, ptr %160, align 1, !noundef !13 - %.not.i9 = icmp eq i8 %161, -128 - br i1 %.not.i9, label %162, label %234 - -162: ; preds = %.lr.ph.i + br label %160 + +160: ; preds = %236, %.lr.ph.i + %.sroa.0.17.i = phi i64 [ 1, %.lr.ph.i ], [ %.sroa.0.1.i10, %236 ] + %.sroa.0.06.i = phi i64 [ 0, %.lr.ph.i ], [ %.sroa.0.17.i, %236 ] + %161 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 + %162 = getelementptr inbounds nuw i8, ptr %161, i64 %.sroa.0.06.i + %163 = load i8, ptr %162, align 1, !noundef !13 + %.not.i9 = icmp eq i8 %163, -128 + br i1 %.not.i9, label %164, label %236 + +164: ; preds = %160 %.neg.i = mul i64 %.sroa.0.06.i, -24 - %163 = getelementptr i8, ptr %159, i64 %.neg.i - %164 = getelementptr i8, ptr %163, i64 -24 - %165 = sub nsw i64 0, %.sroa.0.06.i + %165 = getelementptr i8, ptr %161, i64 %.neg.i + %166 = getelementptr i8, ptr %165, i64 -24 + %167 = sub nsw i64 0, %.sroa.0.06.i br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i _ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i: ; preds = %.preheader.i - %.pre.i20 = load ptr, ptr %0, align 8, !alias.scope !73, !noalias !76 + %.pre.i19 = load ptr, ptr %0, align 8, !alias.scope !74, !noalias !77 br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i -_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i, %162 - %166 = phi ptr [ %.pre.i20, %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i ], [ %159, %162 ] - %167 = getelementptr inbounds { { ptr, [1 x i64] }, ptr }, ptr %166, i64 %165 - %168 = getelementptr inbounds i8, ptr %167, i64 -24 - %169 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h439cdb546578af0bE(ptr noalias noundef nonnull readonly align 1 %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %168) - to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" unwind label %170 +_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i, %164 + %168 = phi ptr [ %.pre.i19, %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i ], [ %161, %164 ] + %169 = getelementptr inbounds { { ptr, [1 x i64] }, ptr }, ptr %168, i64 %167 + %170 = getelementptr inbounds i8, ptr %169, i64 -24 + %171 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h439cdb546578af0bE(ptr noalias noundef nonnull readonly align 1 %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %170) + to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" unwind label %172 -170: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i - %171 = landingpad { ptr, i32 } +172: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i + %173 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h2cd39aba3336feb0E"(ptr noalias noundef align 8 dereferenceable(24) %5) #17 - to label %common.resume unwind label %237 + to label %common.resume unwind label %239 "_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i": ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i %.val.i12 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 %.val9.i = load i64, ptr %14, align 8, !alias.scope !70, !noundef !13 - %.sroa.0.05.i.i13 = and i64 %.val9.i, %169 - %172 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.05.i.i13 - %.sroa.0.0.copyload.i46.i.i14 = load <16 x i8>, ptr %172, align 1 - %173 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i14, zeroinitializer - %174 = bitcast <16 x i1> %173 to i16 - %.not.not.i.not7.i.i15 = icmp eq i16 %174, 0 - br i1 %.not.not.i.not7.i.i15, label %.lr.ph.i12.i, label %._crit_edge.i.i16, !prof !68 - -.lr.ph.i12.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i", %.lr.ph.i12.i - %.sroa.0.09.i.i21 = phi i64 [ %.sroa.0.0.i.i23, %.lr.ph.i12.i ], [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] - %.sroa.7.08.i.i22 = phi i64 [ %175, %.lr.ph.i12.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] - %175 = add i64 %.sroa.7.08.i.i22, 16 - %176 = add i64 %175, %.sroa.0.09.i.i21 - %.sroa.0.0.i.i23 = and i64 %176, %.val9.i - %177 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i.i23 - %.sroa.0.0.copyload.i4.i.i24 = load <16 x i8>, ptr %177, align 1 - %178 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i24, zeroinitializer - %179 = bitcast <16 x i1> %178 to i16 - %.not.not.i.not.i.i25 = icmp eq i16 %179, 0 - br i1 %.not.not.i.not.i.i25, label %.lr.ph.i12.i, label %._crit_edge.i.i16, !prof !69 - -._crit_edge.i.i16: ; preds = %.lr.ph.i12.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" - %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %.sroa.0.0.i.i23, %.lr.ph.i12.i ] - %.lcssa.i.i18 = phi i16 [ %174, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %179, %.lr.ph.i12.i ] - %180 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) - %181 = zext nneg i16 %180 to i64 - %182 = add i64 %.sroa.0.0.lcssa.i.i17, %181 - %183 = and i64 %182, %.val9.i - %184 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %183 - %185 = load i8, ptr %184, align 1, !noundef !13 - %186 = icmp sgt i8 %185, -1 - br i1 %186, label %187, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i, !prof !45 - -187: ; preds = %._crit_edge.i.i16 - %188 = load <16 x i8>, ptr %.val.i12, align 16 - %189 = icmp slt <16 x i8> %188, zeroinitializer - %190 = bitcast <16 x i1> %189 to i16 - %191 = icmp ne i16 %190, 0 - tail call void @llvm.assume(i1 %191) - %192 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %190, i1 true) - %193 = zext nneg i16 %192 to i64 + %.sroa.0.05.i.i13 = and i64 %.val9.i, %171 + %174 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.05.i.i13 + %.sroa.0.0.copyload.i46.i.i14 = load <16 x i8>, ptr %174, align 1 + %175 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i14, zeroinitializer + %176 = bitcast <16 x i1> %175 to i16 + %.not.not.i.not7.i.i15 = icmp eq i16 %176, 0 + br i1 %.not.not.i.not7.i.i15, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !68 + +.lr.ph.i13.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i", %.lr.ph.i13.i + %.sroa.0.09.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ], [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] + %.sroa.7.08.i.i21 = phi i64 [ %177, %.lr.ph.i13.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] + %177 = add i64 %.sroa.7.08.i.i21, 16 + %178 = add i64 %177, %.sroa.0.09.i.i20 + %.sroa.0.0.i.i22 = and i64 %178, %.val9.i + %179 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i.i22 + %.sroa.0.0.copyload.i4.i.i23 = load <16 x i8>, ptr %179, align 1 + %180 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i23, zeroinitializer + %181 = bitcast <16 x i1> %180 to i16 + %.not.not.i.not.i.i24 = icmp eq i16 %181, 0 + br i1 %.not.not.i.not.i.i24, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !69 + +._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" + %.sroa.0.0.lcssa.i.i16 = phi i64 [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ] + %.lcssa.i.i17 = phi i16 [ %176, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %181, %.lr.ph.i13.i ] + %182 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) + %183 = zext nneg i16 %182 to i64 + %184 = add i64 %.sroa.0.0.lcssa.i.i16, %183 + %185 = and i64 %184, %.val9.i + %186 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %185 + %187 = load i8, ptr %186, align 1, !noundef !13 + %188 = icmp sgt i8 %187, -1 + br i1 %188, label %189, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i, !prof !45 + +189: ; preds = %._crit_edge.i12.i + %190 = load <16 x i8>, ptr %.val.i12, align 16 + %191 = icmp slt <16 x i8> %190, zeroinitializer + %192 = bitcast <16 x i1> %191 to i16 + %193 = icmp ne i16 %192, 0 + tail call void @llvm.assume(i1 %193) + %194 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %192, i1 true) + %195 = zext nneg i16 %194 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i: ; preds = %187, %._crit_edge.i.i16 - %.sroa.0.0.i4.i.i19 = phi i64 [ %193, %187 ], [ %183, %._crit_edge.i.i16 ] - %194 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i13 - %195 = sub i64 %.sroa.0.0.i4.i.i19, %.sroa.0.05.i.i13 - %196 = xor i64 %195, %194 - %.unshifted.i = and i64 %196, %.val9.i - %197 = icmp ult i64 %.unshifted.i, 16 - br i1 %197, label %211, label %198, !prof !78 - -198: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i - %.neg8.i = mul i64 %.sroa.0.0.i4.i.i19, -24 - %199 = getelementptr i8, ptr %.val.i12, i64 %.neg8.i - %200 = getelementptr i8, ptr %199, i64 -24 - %201 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i4.i.i19 - %202 = load i8, ptr %201, align 1, !noundef !13 - %203 = lshr i64 %169, 57 - %204 = trunc nuw nsw i64 %203 to i8 - %205 = add i64 %.sroa.0.0.i4.i.i19, -16 - %206 = and i64 %205, %.val9.i - store i8 %204, ptr %201, align 1 - %207 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %208 = getelementptr i8, ptr %207, i64 %206 - %209 = getelementptr i8, ptr %208, i64 16 - store i8 %204, ptr %209, align 1 - %210 = icmp eq i8 %202, -1 - br i1 %210, label %225, label %.preheader.i - -211: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i - %212 = lshr i64 %169, 57 - %213 = trunc nuw nsw i64 %212 to i8 - %214 = add i64 %.sroa.0.06.i, -16 - %215 = and i64 %.val9.i, %214 - %216 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.06.i - store i8 %213, ptr %216, align 1 - %217 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %218 = getelementptr i8, ptr %217, i64 %215 - %219 = getelementptr i8, ptr %218, i64 16 - store i8 %213, ptr %219, align 1 - br label %234 - -.preheader.i: ; preds = %198, %.preheader.i - %.sroa.04.09.i.i = phi i64 [ %224, %.preheader.i ], [ 0, %198 ] - %220 = getelementptr inbounds nuw i8, ptr %164, i64 %.sroa.04.09.i.i - %221 = getelementptr inbounds nuw i8, ptr %200, i64 %.sroa.04.09.i.i - %222 = load i8, ptr %220, align 1 - %223 = load i8, ptr %221, align 1 - store i8 %223, ptr %220, align 1 - store i8 %222, ptr %221, align 1 - %224 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i = icmp eq i64 %224, 24 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i: ; preds = %189, %._crit_edge.i12.i + %.sroa.0.0.i4.i.i18 = phi i64 [ %195, %189 ], [ %185, %._crit_edge.i12.i ] + %196 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i13 + %197 = sub i64 %.sroa.0.0.i4.i.i18, %.sroa.0.05.i.i13 + %198 = xor i64 %197, %196 + %.unshifted.i = and i64 %198, %.val9.i + %199 = icmp ult i64 %.unshifted.i, 16 + br i1 %199, label %213, label %200, !prof !79 + +200: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i + %.neg8.i = mul i64 %.sroa.0.0.i4.i.i18, -24 + %201 = getelementptr i8, ptr %.val.i12, i64 %.neg8.i + %202 = getelementptr i8, ptr %201, i64 -24 + %203 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i4.i.i18 + %204 = load i8, ptr %203, align 1, !noundef !13 + %205 = lshr i64 %171, 57 + %206 = trunc nuw nsw i64 %205 to i8 + %207 = add i64 %.sroa.0.0.i4.i.i18, -16 + %208 = and i64 %207, %.val9.i + store i8 %206, ptr %203, align 1 + %209 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 + %210 = getelementptr i8, ptr %209, i64 %208 + %211 = getelementptr i8, ptr %210, i64 16 + store i8 %206, ptr %211, align 1 + %212 = icmp eq i8 %204, -1 + br i1 %212, label %227, label %.preheader.i + +213: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i + %214 = lshr i64 %171, 57 + %215 = trunc nuw nsw i64 %214 to i8 + %216 = add i64 %.sroa.0.06.i, -16 + %217 = and i64 %.val9.i, %216 + %218 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.06.i + store i8 %215, ptr %218, align 1 + %219 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 + %220 = getelementptr i8, ptr %219, i64 %217 + %221 = getelementptr i8, ptr %220, i64 16 + store i8 %215, ptr %221, align 1 + br label %236 + +.preheader.i: ; preds = %200, %.preheader.i + %.sroa.04.09.i.i = phi i64 [ %226, %.preheader.i ], [ 0, %200 ] + %222 = getelementptr inbounds nuw i8, ptr %166, i64 %.sroa.04.09.i.i + %223 = getelementptr inbounds nuw i8, ptr %202, i64 %.sroa.04.09.i.i + %224 = load i8, ptr %222, align 1 + %225 = load i8, ptr %223, align 1 + store i8 %225, ptr %222, align 1 + store i8 %224, ptr %223, align 1 + %226 = add nuw nsw i64 %.sroa.04.09.i.i, 1 + %exitcond.not.i.i = icmp eq i64 %226, 24 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i, label %.preheader.i -225: ; preds = %198 - %226 = add i64 %.sroa.0.06.i, -16 - %227 = load i64, ptr %14, align 8, !alias.scope !70, !noundef !13 - %228 = and i64 %227, %226 - %229 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %230 = getelementptr inbounds nuw i8, ptr %229, i64 %.sroa.0.06.i - store i8 -1, ptr %230, align 1 +227: ; preds = %200 + %228 = add i64 %.sroa.0.06.i, -16 + %229 = load i64, ptr %14, align 8, !alias.scope !70, !noundef !13 + %230 = and i64 %229, %228 %231 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %232 = getelementptr i8, ptr %231, i64 %228 - %233 = getelementptr i8, ptr %232, i64 16 - store i8 -1, ptr %233, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %200, ptr noundef nonnull align 1 dereferenceable(24) %164, i64 24, i1 false) - br label %234 - -234: ; preds = %225, %211, %.lr.ph.i - %235 = icmp ult i64 %.sroa.0.17.i, %17 - %236 = zext i1 %235 to i64 - %.sroa.0.1.i10 = add nuw i64 %.sroa.0.17.i, %236 - br i1 %235, label %.lr.ph.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit - -237: ; preds = %170 - %238 = landingpad { ptr, i32 } + %232 = getelementptr inbounds nuw i8, ptr %231, i64 %.sroa.0.06.i + store i8 -1, ptr %232, align 1 + %233 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 + %234 = getelementptr i8, ptr %233, i64 %230 + %235 = getelementptr i8, ptr %234, i64 16 + store i8 -1, ptr %235, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %202, ptr noundef nonnull align 1 dereferenceable(24) %166, i64 24, i1 false) + br label %236 + +236: ; preds = %227, %213, %160 + %237 = icmp ult i64 %.sroa.0.17.i, %17 + %238 = zext i1 %237 to i64 + %.sroa.0.1.i10 = add nuw i64 %.sroa.0.17.i, %238 + br i1 %237, label %160, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit + +239: ; preds = %172 + %240 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h02d583d60c45268eE() #18 unreachable -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit: ; preds = %234 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit: ; preds = %236 %.pre14.i = load i64, ptr %14, align 8, !alias.scope !70 %.pre14.i.fr = freeze i64 %.pre14.i %.pre15.i = add i64 %.pre14.i.fr, 1 - %239 = lshr i64 %.pre15.i, 3 - %240 = mul nuw i64 %239, 7 - %241 = icmp ult i64 %.pre14.i.fr, 8 - %spec.select = select i1 %241, i64 %.pre14.i.fr, i64 %240 + %241 = lshr i64 %.pre15.i, 3 + %242 = mul nuw i64 %241, 7 + %243 = icmp ult i64 %.pre14.i.fr, 8 + %spec.select = select i1 %243, i64 %.pre14.i.fr, i64 %242 %.pre = load i64, ptr %8, align 8, !alias.scope !70 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i - %242 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] - %243 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] - %244 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %245 = sub i64 %243, %242 - store i64 %245, ptr %244, align 8, !alias.scope !70 + br label %244 + +244: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread + %245 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] + %246 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] + %247 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %248 = sub i64 %246, %245 + store i64 %248, ptr %247, align 8, !alias.scope !70 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5), !noalias !70 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %.sroa.12.037, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %.sroa.7.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] - %246 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %247 = insertvalue { i64, i64 } %246, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit", %244 + %.sroa.4.1.i = phi i64 [ undef, %244 ], [ %.sroa.12.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %244 ], [ %.sroa.7.035, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] + %249 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %250 = insertvalue { i64, i64 } %249, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h1809b63152262295E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h1809b63152262295E.exit: ; preds = %21, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i - %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %247, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i ] + %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %250, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i ] ret { i64, i64 } %.merged.i } @@ -984,9 +994,6 @@ declare void @llvm.experimental.noalias.scope.decl(metadata) #14 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.umax.i64(i64, i64) #15 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #15 - attributes #0 = { inlinehint nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #1 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #2 = { nounwind nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } @@ -1083,9 +1090,10 @@ attributes #18 = { cold noreturn nounwind } !70 = !{!71} !71 = distinct !{!71, !72, !"_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE: argument 0"} !72 = distinct !{!72, !"_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE"} -!73 = !{!74, !71} -!74 = distinct !{!74, !75, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE: argument 1"} -!75 = distinct !{!75, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE"} -!76 = !{!77} -!77 = distinct !{!77, !75, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE: argument 0"} -!78 = !{!"branch_weights", !"expected", i32 2000, i32 1} +!73 = !{!"branch_weights", !"expected", i32 0, i32 -2147483648} +!74 = !{!75, !71} +!75 = distinct !{!75, !76, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE: argument 1"} +!76 = distinct !{!76, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE"} +!77 = !{!78} +!78 = distinct !{!78, !76, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE: argument 0"} +!79 = !{!"branch_weights", !"expected", i32 2000, i32 1} diff --git a/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll b/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll index 859bee931ea..1961eaa80ff 100644 --- a/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll +++ b/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll @@ -755,42 +755,44 @@ common.resume: ; preds = %156, %77 142: ; preds = %18 tail call void @llvm.experimental.noalias.scope.decl(metadata !103) %.val18.i = load ptr, ptr %0, align 8, !alias.scope !103 - %143 = lshr i64 %22, 4 - %144 = and i64 %22, 15 - %.not.i.i.i.i.i = icmp ne i64 %144, 0 - %145 = zext i1 %.not.i.i.i.i.i to i64 - %.0.i.i.i.i.i = add nuw nsw i64 %143, %145 - %.not.not4.i.i = icmp eq i64 %.0.i.i.i.i.i, 0 - br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i, label %.lr.ph.i.i9 + %.not.not4.i.i = icmp eq i64 %22, 0 + br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread, label %.lr.ph.i.i9 + +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread: ; preds = %142 + %143 = icmp ne ptr %.val18.i, null + tail call void @llvm.assume(i1 %143) + br label %250 .lr.ph.i.i9: ; preds = %142 - %146 = icmp ne ptr %.val18.i, null - tail call void @llvm.assume(i1 %146) - br label %147 - -147: ; preds = %147, %.lr.ph.i.i9 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %149, %147 ] - %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %148, %147 ] - %148 = add nsw i64 %.sroa.5.05.i.i, -1 - %149 = add i64 %.sroa.01.06.i.i, 16 - %150 = getelementptr inbounds i8, ptr %.val18.i, i64 %.sroa.01.06.i.i - %151 = load <16 x i8>, ptr %150, align 16, !noalias !106 - %.lobit.i.i.i = ashr <16 x i8> %151, splat (i8 7) - %152 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %153 = or <2 x i64> %152, splat (i64 -9187201950435737472) - store <2 x i64> %153, ptr %150, align 16, !noalias !109 - %.not.not.i.i = icmp eq i64 %148, 0 - br i1 %.not.not.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i, label %147 - -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i: ; preds = %147, %142 - %154 = icmp ne ptr %.val18.i, null - tail call void @llvm.assume(i1 %154) - %..i.i = tail call i64 @llvm.umax.i64(i64 %22, i64 16) - %.9.i.i = tail call i64 @llvm.umin.i64(i64 %22, i64 16) - %155 = getelementptr inbounds i8, ptr %.val18.i, i64 %..i.i - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %155, ptr nonnull align 1 %.val18.i, i64 %.9.i.i, i1 false), !noalias !103 - %.not25.i = icmp eq i64 %22, 0 - br i1 %.not25.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread, label %.lr.ph23.i + %144 = lshr i64 %22, 4 + %145 = and i64 %22, 15 + %.not.i.i.i.i.i = icmp ne i64 %145, 0 + %146 = zext i1 %.not.i.i.i.i.i to i64 + %.0.i.i.i.i.i = add nuw nsw i64 %144, %146 + %147 = icmp ne ptr %.val18.i, null + tail call void @llvm.assume(i1 %147) + br label %149 + +._crit_edge.i.i10: ; preds = %149 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %22, i64 16) + %spec.select61.i = tail call i64 @llvm.umin.i64(i64 %22, i64 16) + %148 = getelementptr inbounds i8, ptr %.val18.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %148, ptr nonnull align 1 %.val18.i, i64 %spec.select61.i, i1 false), !noalias !103 + br label %166 + +149: ; preds = %149, %.lr.ph.i.i9 + %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %151, %149 ] + %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %150, %149 ] + %150 = add i64 %.sroa.5.05.i.i, -1 + %151 = add i64 %.sroa.01.06.i.i, 16 + %152 = getelementptr inbounds i8, ptr %.val18.i, i64 %.sroa.01.06.i.i + %153 = load <16 x i8>, ptr %152, align 16, !noalias !106 + %.lobit.i.i.i = ashr <16 x i8> %153, splat (i8 7) + %154 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %155 = or <2 x i64> %154, splat (i64 -9187201950435737472) + store <2 x i64> %155, ptr %152, align 16, !noalias !109 + %.not.not.i.i = icmp eq i64 %150, 0 + br i1 %.not.not.i.i, label %._crit_edge.i.i10, label %149 156: ; preds = %._crit_edge.i %157 = landingpad { ptr, i32 } @@ -807,187 +809,187 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d5 store i64 %165, ptr %164, align 8, !noalias !112 br label %common.resume -.lr.ph23.i: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i, %244 - %166 = phi ptr [ %245, %244 ], [ %.val18.i, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i ] - %.sroa.02.022.i = phi i64 [ %167, %244 ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i ] - %167 = add nuw i64 %.sroa.02.022.i, 1 - %168 = getelementptr inbounds i8, ptr %166, i64 %.sroa.02.022.i - %169 = load i8, ptr %168, align 1, !noundef !7 - %.not.i10 = icmp eq i8 %169, -128 - br i1 %.not.i10, label %170, label %244 - -170: ; preds = %.lr.ph23.i - %171 = shl i64 %.sroa.02.022.i, 3 - %172 = sub nuw nsw i64 -8, %171 - %173 = getelementptr inbounds i8, ptr %166, i64 %172 - %174 = sub nsw i64 0, %.sroa.02.022.i - %175 = getelementptr inbounds i64, ptr %166, i64 %174 - %176 = getelementptr inbounds i8, ptr %175, i64 -8 - %.val5.i16.i = load i64, ptr %176, align 8, !noalias !117, !noundef !7 - %177 = icmp ult i64 %.val5.i16.i, %3 - br i1 %177, label %.lr.ph.i, label %._crit_edge.i, !prof !121 +166: ; preds = %245, %._crit_edge.i.i10 + %167 = phi ptr [ %.val18.i, %._crit_edge.i.i10 ], [ %246, %245 ] + %.sroa.02.022.i = phi i64 [ 0, %._crit_edge.i.i10 ], [ %168, %245 ] + %168 = add nuw i64 %.sroa.02.022.i, 1 + %169 = getelementptr inbounds i8, ptr %167, i64 %.sroa.02.022.i + %170 = load i8, ptr %169, align 1, !noundef !7 + %.not.i11 = icmp eq i8 %170, -128 + br i1 %.not.i11, label %171, label %245 + +171: ; preds = %166 + %172 = shl i64 %.sroa.02.022.i, 3 + %173 = sub nuw nsw i64 -8, %172 + %174 = getelementptr inbounds i8, ptr %167, i64 %173 + %175 = sub nsw i64 0, %.sroa.02.022.i + %176 = getelementptr inbounds i64, ptr %167, i64 %175 + %177 = getelementptr inbounds i8, ptr %176, i64 -8 + %.val5.i16.i = load i64, ptr %177, align 8, !noalias !117, !noundef !7 + %178 = icmp ult i64 %.val5.i16.i, %3 + br i1 %178, label %.lr.ph.i, label %._crit_edge.i, !prof !121 _ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i: ; preds = %.preheader.i tail call void @llvm.experimental.noalias.scope.decl(metadata !122) %.val.i.i21 = load ptr, ptr %0, align 8, !alias.scope !124, !noalias !125, !nonnull !7, !noundef !7 - %178 = getelementptr inbounds i64, ptr %.val.i.i21, i64 %174 - %179 = getelementptr inbounds i8, ptr %178, i64 -8 - %.val5.i.i = load i64, ptr %179, align 8, !noalias !126, !noundef !7 - %180 = icmp ult i64 %.val5.i.i, %3 - br i1 %180, label %.lr.ph.i, label %._crit_edge.i, !prof !127 - -._crit_edge.i: ; preds = %170, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i - %.val5.i.lcssa.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %.val5.i16.i, %170 ] + %179 = getelementptr inbounds i64, ptr %.val.i.i21, i64 %175 + %180 = getelementptr inbounds i8, ptr %179, i64 -8 + %.val5.i.i = load i64, ptr %180, align 8, !noalias !126, !noundef !7 + %181 = icmp ult i64 %.val5.i.i, %3 + br i1 %181, label %.lr.ph.i, label %._crit_edge.i, !prof !127 + +._crit_edge.i: ; preds = %171, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i + %.val5.i.lcssa.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %.val5.i16.i, %171 ] invoke void @_ZN4core9panicking18panic_bounds_check17h8331054858f0bf20E(i64 noundef %.val5.i.lcssa.i, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.65f7b52c0c3eec1c18e19b0eb65d3e63.7) #23 - to label %.noexc.i13 unwind label %156 + to label %.noexc.i14 unwind label %156 -.noexc.i13: ; preds = %._crit_edge.i +.noexc.i14: ; preds = %._crit_edge.i unreachable -.lr.ph.i: ; preds = %170, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i - %.val5.i18.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %.val5.i16.i, %170 ] - %.val.i17.i = phi ptr [ %.val.i.i21, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %166, %170 ] - %181 = getelementptr inbounds [0 x { { { { i64, ptr }, i64 } }, { i64, [8 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i18.i, i32 2 - %182 = load i64, ptr %181, align 8, !noalias !128, !noundef !7 +.lr.ph.i: ; preds = %171, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i + %.val5.i18.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %.val5.i16.i, %171 ] + %.val.i17.i = phi ptr [ %.val.i.i21, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %167, %171 ] + %182 = getelementptr inbounds [0 x { { { { i64, ptr }, i64 } }, { i64, [8 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i18.i, i32 2 + %183 = load i64, ptr %182, align 8, !noalias !128, !noundef !7 %.val17.i = load i64, ptr %19, align 8, !alias.scope !103, !noundef !7 - %.sroa.0.05.i.i14 = and i64 %.val17.i, %182 - %183 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.05.i.i14 - %.0.copyload.i46.i.i15 = load <16 x i8>, ptr %183, align 1, !noalias !130 - %184 = icmp slt <16 x i8> %.0.copyload.i46.i.i15, zeroinitializer - %185 = bitcast <16 x i1> %184 to i16 - %.not.not.i.not7.i.i16 = icmp eq i16 %185, 0 - br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i20.i, label %._crit_edge.i.i17 - -._crit_edge.i.i17: ; preds = %.lr.ph.i20.i, %.lr.ph.i - %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.05.i.i14, %.lr.ph.i ], [ %.sroa.0.0.i.i25, %.lr.ph.i20.i ] - %.lcssa.i.i19 = phi i16 [ %185, %.lr.ph.i ], [ %203, %.lr.ph.i20.i ] - %186 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) - %187 = zext nneg i16 %186 to i64 - %188 = add i64 %.sroa.0.0.lcssa.i.i18, %187 - %189 = and i64 %188, %.val17.i - %190 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %189 - %191 = load i8, ptr %190, align 1, !noundef !7 - %192 = icmp sgt i8 %191, -1 - br i1 %192, label %193, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i - -193: ; preds = %._crit_edge.i.i17 - %194 = load <16 x i8>, ptr %.val.i17.i, align 16, !noalias !133 - %195 = icmp slt <16 x i8> %194, zeroinitializer - %196 = bitcast <16 x i1> %195 to i16 - %.not.i.i.i22 = icmp ne i16 %196, 0 - %197 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %196, i1 true) - %198 = zext nneg i16 %197 to i64 + %.sroa.0.05.i.i15 = and i64 %.val17.i, %183 + %184 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.05.i.i15 + %.0.copyload.i46.i.i16 = load <16 x i8>, ptr %184, align 1, !noalias !130 + %185 = icmp slt <16 x i8> %.0.copyload.i46.i.i16, zeroinitializer + %186 = bitcast <16 x i1> %185 to i16 + %.not.not.i.not7.i.i17 = icmp eq i16 %186, 0 + br i1 %.not.not.i.not7.i.i17, label %.lr.ph.i21.i, label %._crit_edge.i20.i + +._crit_edge.i20.i: ; preds = %.lr.ph.i21.i, %.lr.ph.i + %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.05.i.i15, %.lr.ph.i ], [ %.sroa.0.0.i.i25, %.lr.ph.i21.i ] + %.lcssa.i.i19 = phi i16 [ %186, %.lr.ph.i ], [ %204, %.lr.ph.i21.i ] + %187 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) + %188 = zext nneg i16 %187 to i64 + %189 = add i64 %.sroa.0.0.lcssa.i.i18, %188 + %190 = and i64 %189, %.val17.i + %191 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %190 + %192 = load i8, ptr %191, align 1, !noundef !7 + %193 = icmp sgt i8 %192, -1 + br i1 %193, label %194, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i + +194: ; preds = %._crit_edge.i20.i + %195 = load <16 x i8>, ptr %.val.i17.i, align 16, !noalias !133 + %196 = icmp slt <16 x i8> %195, zeroinitializer + %197 = bitcast <16 x i1> %196 to i16 + %.not.i.i.i22 = icmp ne i16 %197, 0 + %198 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %197, i1 true) + %199 = zext nneg i16 %198 to i64 tail call void @llvm.assume(i1 %.not.i.i.i22) br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i -.lr.ph.i20.i: ; preds = %.lr.ph.i, %.lr.ph.i20.i - %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i20.i ], [ %.sroa.0.05.i.i14, %.lr.ph.i ] - %.sroa.7.08.i.i24 = phi i64 [ %199, %.lr.ph.i20.i ], [ 0, %.lr.ph.i ] - %199 = add i64 %.sroa.7.08.i.i24, 16 - %200 = add i64 %199, %.sroa.0.09.i.i23 - %.sroa.0.0.i.i25 = and i64 %200, %.val17.i - %201 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.0.i.i25 - %.0.copyload.i4.i.i26 = load <16 x i8>, ptr %201, align 1, !noalias !130 - %202 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer - %203 = bitcast <16 x i1> %202 to i16 - %.not.not.i.not.i.i27 = icmp eq i16 %203, 0 - br i1 %.not.not.i.not.i.i27, label %.lr.ph.i20.i, label %._crit_edge.i.i17 - -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i: ; preds = %193, %._crit_edge.i.i17 - %.0.i.i.i20 = phi i64 [ %198, %193 ], [ %189, %._crit_edge.i.i17 ] - %204 = sub i64 %.sroa.02.022.i, %.sroa.0.05.i.i14 - %205 = sub i64 %.0.i.i.i20, %.sroa.0.05.i.i14 - %206 = xor i64 %205, %204 - %.unshifted.i = and i64 %206, %.val17.i - %207 = icmp ult i64 %.unshifted.i, 16 - br i1 %207, label %222, label %208 - -208: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i - %209 = shl i64 %.0.i.i.i20, 3 - %210 = sub nuw nsw i64 -8, %209 - %211 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %210 - %212 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.0.i.i.i20 - %213 = load i8, ptr %212, align 1, !noundef !7 - %214 = lshr i64 %182, 57 - %215 = trunc nuw nsw i64 %214 to i8 - %216 = add i64 %.0.i.i.i20, -16 - %217 = and i64 %216, %.val17.i - store i8 %215, ptr %212, align 1 - %218 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 - %219 = getelementptr i8, ptr %218, i64 %217 - %220 = getelementptr i8, ptr %219, i64 16 - store i8 %215, ptr %220, align 1 - %221 = icmp eq i8 %213, -1 - br i1 %221, label %236, label %.preheader.i - -222: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i - %223 = lshr i64 %182, 57 - %224 = trunc nuw nsw i64 %223 to i8 - %225 = add i64 %.sroa.02.022.i, -16 - %226 = and i64 %.val17.i, %225 - %227 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.02.022.i - store i8 %224, ptr %227, align 1 - %228 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 - %229 = getelementptr i8, ptr %228, i64 %226 - %230 = getelementptr i8, ptr %229, i64 16 - store i8 %224, ptr %230, align 1 - br label %244 - -.preheader.i: ; preds = %208, %.preheader.i - %.0910.i.i = phi i64 [ %235, %.preheader.i ], [ 0, %208 ] - %231 = getelementptr inbounds nuw i8, ptr %173, i64 %.0910.i.i - %232 = getelementptr inbounds nuw i8, ptr %211, i64 %.0910.i.i - %233 = load i8, ptr %231, align 1 +.lr.ph.i21.i: ; preds = %.lr.ph.i, %.lr.ph.i21.i + %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i21.i ], [ %.sroa.0.05.i.i15, %.lr.ph.i ] + %.sroa.7.08.i.i24 = phi i64 [ %200, %.lr.ph.i21.i ], [ 0, %.lr.ph.i ] + %200 = add i64 %.sroa.7.08.i.i24, 16 + %201 = add i64 %200, %.sroa.0.09.i.i23 + %.sroa.0.0.i.i25 = and i64 %201, %.val17.i + %202 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.0.i.i25 + %.0.copyload.i4.i.i26 = load <16 x i8>, ptr %202, align 1, !noalias !130 + %203 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer + %204 = bitcast <16 x i1> %203 to i16 + %.not.not.i.not.i.i27 = icmp eq i16 %204, 0 + br i1 %.not.not.i.not.i.i27, label %.lr.ph.i21.i, label %._crit_edge.i20.i + +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i: ; preds = %194, %._crit_edge.i20.i + %.0.i.i.i20 = phi i64 [ %199, %194 ], [ %190, %._crit_edge.i20.i ] + %205 = sub i64 %.sroa.02.022.i, %.sroa.0.05.i.i15 + %206 = sub i64 %.0.i.i.i20, %.sroa.0.05.i.i15 + %207 = xor i64 %206, %205 + %.unshifted.i = and i64 %207, %.val17.i + %208 = icmp ult i64 %.unshifted.i, 16 + br i1 %208, label %223, label %209 + +209: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i + %210 = shl i64 %.0.i.i.i20, 3 + %211 = sub nuw nsw i64 -8, %210 + %212 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %211 + %213 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.0.i.i.i20 + %214 = load i8, ptr %213, align 1, !noundef !7 + %215 = lshr i64 %183, 57 + %216 = trunc nuw nsw i64 %215 to i8 + %217 = add i64 %.0.i.i.i20, -16 + %218 = and i64 %217, %.val17.i + store i8 %216, ptr %213, align 1 + %219 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 + %220 = getelementptr i8, ptr %219, i64 %218 + %221 = getelementptr i8, ptr %220, i64 16 + store i8 %216, ptr %221, align 1 + %222 = icmp eq i8 %214, -1 + br i1 %222, label %237, label %.preheader.i + +223: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i + %224 = lshr i64 %183, 57 + %225 = trunc nuw nsw i64 %224 to i8 + %226 = add i64 %.sroa.02.022.i, -16 + %227 = and i64 %.val17.i, %226 + %228 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.02.022.i + store i8 %225, ptr %228, align 1 + %229 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 + %230 = getelementptr i8, ptr %229, i64 %227 + %231 = getelementptr i8, ptr %230, i64 16 + store i8 %225, ptr %231, align 1 + br label %245 + +.preheader.i: ; preds = %209, %.preheader.i + %.0910.i.i = phi i64 [ %236, %.preheader.i ], [ 0, %209 ] + %232 = getelementptr inbounds nuw i8, ptr %174, i64 %.0910.i.i + %233 = getelementptr inbounds nuw i8, ptr %212, i64 %.0910.i.i %234 = load i8, ptr %232, align 1 - store i8 %234, ptr %231, align 1 - store i8 %233, ptr %232, align 1 - %235 = add nuw nsw i64 %.0910.i.i, 1 - %exitcond.not.i.i = icmp eq i64 %235, 8 + %235 = load i8, ptr %233, align 1 + store i8 %235, ptr %232, align 1 + store i8 %234, ptr %233, align 1 + %236 = add nuw nsw i64 %.0910.i.i, 1 + %exitcond.not.i.i = icmp eq i64 %236, 8 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i, label %.preheader.i -236: ; preds = %208 - %237 = add i64 %.sroa.02.022.i, -16 - %238 = load i64, ptr %19, align 8, !alias.scope !103, !noundef !7 - %239 = and i64 %238, %237 - %240 = getelementptr inbounds i8, ptr %218, i64 %.sroa.02.022.i - store i8 -1, ptr %240, align 1 - %241 = getelementptr i8, ptr %218, i64 %239 - %242 = getelementptr i8, ptr %241, i64 16 - store i8 -1, ptr %242, align 1 - %243 = load i64, ptr %173, align 1 - store i64 %243, ptr %211, align 1 - br label %244 - -244: ; preds = %236, %222, %.lr.ph23.i - %245 = phi ptr [ %218, %236 ], [ %228, %222 ], [ %166, %.lr.ph23.i ] +237: ; preds = %209 + %238 = add i64 %.sroa.02.022.i, -16 + %239 = load i64, ptr %19, align 8, !alias.scope !103, !noundef !7 + %240 = and i64 %239, %238 + %241 = getelementptr inbounds i8, ptr %219, i64 %.sroa.02.022.i + store i8 -1, ptr %241, align 1 + %242 = getelementptr i8, ptr %219, i64 %240 + %243 = getelementptr i8, ptr %242, i64 16 + store i8 -1, ptr %243, align 1 + %244 = load i64, ptr %174, align 1 + store i64 %244, ptr %212, align 1 + br label %245 + +245: ; preds = %237, %223, %166 + %246 = phi ptr [ %219, %237 ], [ %229, %223 ], [ %167, %166 ] %exitcond.not.i = icmp eq i64 %.sroa.02.022.i, %20 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, label %.lr.ph23.i - -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit: ; preds = %244 - %.pre.i11 = load i64, ptr %19, align 8, !alias.scope !103 - %.pre.i11.fr = freeze i64 %.pre.i11 - %.pre40.i = add i64 %.pre.i11.fr, 1 - %246 = lshr i64 %.pre40.i, 3 - %247 = mul nuw i64 %246, 7 - %248 = icmp ult i64 %.pre.i11.fr, 8 - %spec.select = select i1 %248, i64 %.pre.i11.fr, i64 %247 + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, label %166 + +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit: ; preds = %245 + %.pre.i12 = load i64, ptr %19, align 8, !alias.scope !103 + %.pre.i12.fr = freeze i64 %.pre.i12 + %.pre40.i = add i64 %.pre.i12.fr, 1 + %247 = lshr i64 %.pre40.i, 3 + %248 = mul nuw i64 %247, 7 + %249 = icmp ult i64 %.pre.i12.fr, 8 + %spec.select = select i1 %249, i64 %.pre.i12.fr, i64 %248 %.pre = load i64, ptr %9, align 8, !alias.scope !103 - br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread - -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i - %249 = phi i64 [ %10, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] - %250 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h3fecbacdbec0d56eE.exit.i ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] - %251 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %252 = sub i64 %250, %249 - store i64 %252, ptr %251, align 8, !alias.scope !103 + br label %250 + +250: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread + %251 = phi i64 [ %10, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] + %252 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] + %253 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %254 = sub i64 %252, %251 + store i64 %254, ptr %253, align 8, !alias.scope !103 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h48e7617b6adb3e13E.exit -_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h48e7617b6adb3e13E.exit: ; preds = %76, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit", %14, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread - %.sroa.4.0.i = phi i64 [ %17, %14 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %.sroa.9.058.ph, %76 ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit" ] - %.sroa.0.0.i = phi i64 [ %16, %14 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %.sroa.5.060.ph, %76 ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit" ] - %253 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %254 = insertvalue { i64, i64 } %253, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %254 +_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h48e7617b6adb3e13E.exit: ; preds = %76, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit", %14, %250 + %.sroa.4.0.i = phi i64 [ %17, %14 ], [ undef, %250 ], [ %.sroa.9.058.ph, %76 ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit" ] + %.sroa.0.0.i = phi i64 [ %16, %14 ], [ -9223372036854775807, %250 ], [ %.sroa.5.060.ph, %76 ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit" ] + %255 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %256 = insertvalue { i64, i64 } %255, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %256 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll b/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll index 450069ea98e..b41d760ea79 100644 --- a/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll +++ b/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll @@ -229,9 +229,9 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %13, i64 48 store i64 %.sroa.738.0.copyload.i, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 %invariant.gep = getelementptr i8, ptr %49, i64 16 - %invariant.gep63 = getelementptr i8, ptr %49, i64 -48 - %.not65 = icmp eq i64 %16, 0 - br i1 %.not65, label %.thread44, label %.preheader.lr.ph + %invariant.gep61 = getelementptr i8, ptr %49, i64 -48 + %.not63 = icmp eq i64 %16, 0 + br i1 %.not63, label %.thread42, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %59 %61 = load ptr, ptr %0, align 8, !alias.scope !57, !noalias !58, !nonnull !14, !noundef !14 @@ -259,21 +259,21 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt br label %.preheader .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit - %.sroa.016.069 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.016.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.5.068 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.9.067 = phi i64 [ %16, %.preheader.lr.ph ], [ %90, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.13.066 = phi i16 [ %65, %.preheader.lr.ph ], [ %88, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %77 = icmp eq i16 %.sroa.13.066, 0 + %.sroa.014.067 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.014.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.5.066 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.9.065 = phi i64 [ %16, %.preheader.lr.ph ], [ %90, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.13.064 = phi i16 [ %65, %.preheader.lr.ph ], [ %88, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %77 = icmp eq i16 %.sroa.13.064, 0 br i1 %77, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.016.260 = phi ptr [ %78, %.noexc2 ], [ %.sroa.016.069, %.preheader ] - %.sroa.5.259 = phi i64 [ %82, %.noexc2 ], [ %.sroa.5.068, %.preheader ] - %78 = getelementptr inbounds nuw i8, ptr %.sroa.016.260, i64 16 + %.sroa.014.258 = phi ptr [ %78, %.noexc2 ], [ %.sroa.014.067, %.preheader ] + %.sroa.5.257 = phi i64 [ %82, %.noexc2 ], [ %.sroa.5.066, %.preheader ] + %78 = getelementptr inbounds nuw i8, ptr %.sroa.014.258, i64 16 %79 = load <16 x i8>, ptr %78, align 16, !noalias !73 %80 = icmp slt <16 x i8> %79, zeroinitializer %81 = bitcast <16 x i1> %80 to i16 - %82 = add i64 %.sroa.5.259, 16 + %82 = add i64 %.sroa.5.257, 16 %83 = icmp eq i16 %81, -1 br i1 %83, label %.noexc2, label %._crit_edge.loopexit @@ -282,15 +282,15 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.066, %.preheader ], [ %84, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.068, %.preheader ], [ %82, %._crit_edge.loopexit ] - %.sroa.016.2.lcssa = phi ptr [ %.sroa.016.069, %.preheader ], [ %78, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.064, %.preheader ], [ %84, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.066, %.preheader ], [ %82, %._crit_edge.loopexit ] + %.sroa.014.2.lcssa = phi ptr [ %.sroa.014.067, %.preheader ], [ %78, %._crit_edge.loopexit ] %85 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %86 = zext nneg i16 %85 to i64 %87 = add i16 %.sroa.13.2.lcssa, -1 %88 = and i16 %87, %.sroa.13.2.lcssa %89 = add i64 %.sroa.5.2.lcssa, %86 - %90 = add i64 %.sroa.9.067, -1 + %90 = add i64 %.sroa.9.065, -1 call void @llvm.experimental.noalias.scope.decl(metadata !76) %91 = load ptr, ptr %0, align 8, !alias.scope !76, !noalias !77, !nonnull !14, !noundef !14 %92 = sub nsw i64 0, %89 @@ -313,19 +313,19 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsff1zCjKRl2o_13turborepo_env.llvm.1724984292951356826(ptr noalias noundef nonnull align 8 dereferenceable(72) %11, ptr noalias noundef nonnull readonly align 1 %.val3.i, i64 noundef %.val4.i) to label %.noexc4 unwind label %57 -.thread44.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit - %.pre79 = load i64, ptr %15, align 8, !alias.scope !57, !noalias !58 - br label %.thread44 +.thread42.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit + %.pre77 = load i64, ptr %15, align 8, !alias.scope !57, !noalias !58 + br label %.thread42 -.thread44: ; preds = %.thread44.loopexit, %59 - %96 = phi i64 [ %.pre79, %.thread44.loopexit ], [ 0, %59 ] +.thread42: ; preds = %.thread42.loopexit, %59 + %96 = phi i64 [ %.pre77, %.thread42.loopexit ], [ 0, %59 ] %97 = sub i64 %54, %96 store i64 %97, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 store i64 %96, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 br label %98 -98: ; preds = %98, %.thread44 - %.sroa.0.05.i.i = phi i64 [ 0, %.thread44 ], [ %103, %98 ] +98: ; preds = %98, %.thread42 + %.sroa.0.05.i.i = phi i64 [ 0, %.thread42 ], [ %103, %98 ] %99 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %100 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i %101 = load i64, ptr %99, align 8 @@ -467,10 +467,10 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit: ; p %162 = getelementptr i8, ptr %161, i64 %.neg.i.i %163 = getelementptr i8, ptr %162, i64 -48 %.neg72.i.i = mul i64 %.sroa.0.0.i12.i, -48 - %gep64 = getelementptr i8, ptr %invariant.gep63, i64 %.neg72.i.i - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %gep64, ptr noundef nonnull align 1 dereferenceable(48) %163, i64 48, i1 false) + %gep62 = getelementptr i8, ptr %invariant.gep61, i64 %.neg72.i.i + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %gep62, ptr noundef nonnull align 1 dereferenceable(48) %163, i64 48, i1 false) %.not = icmp eq i64 %90, 0 - br i1 %.not, label %.thread44.loopexit, label %.preheader + br i1 %.not, label %.thread42.loopexit, label %.preheader common.resume: ; preds = %191, %57 %common.resume.op = phi { ptr, i32 } [ %58, %57 ], [ %192, %191 ] @@ -479,83 +479,83 @@ common.resume: ; preds = %191, %57 164: ; preds = %19 tail call void @llvm.experimental.noalias.scope.decl(metadata !131) %.val11.i = load ptr, ptr %0, align 8, !alias.scope !131 - %165 = lshr i64 %24, 4 - %166 = and i64 %24, 15 - %.not.i.i.i.i = icmp ne i64 %166, 0 - %167 = zext i1 %.not.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %165, %167 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %24, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread, label %.lr.ph.i.i + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %164 + %165 = icmp ne ptr %.val11.i, null + tail call void @llvm.assume(i1 %165) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !131 + br label %292 .lr.ph.i.i: ; preds = %164 - %168 = icmp ne ptr %.val11.i, null - tail call void @llvm.assume(i1 %168) - br label %169 - -169: ; preds = %169, %.lr.ph.i.i - %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %170, %169 ] - %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %171, %169 ] - %170 = add i64 %.sroa.0.07.i.i, 16 - %171 = add nsw i64 %.sroa.5.06.i.i, -1 - %172 = getelementptr inbounds i8, ptr %.val11.i, i64 %.sroa.0.07.i.i - %173 = load <16 x i8>, ptr %172, align 16, !noalias !134 - %.lobit.i.i.i = ashr <16 x i8> %173, splat (i8 7) - %174 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %175 = or <2 x i64> %174, splat (i64 -9187201950435737472) - store <2 x i64> %175, ptr %172, align 16, !noalias !137 - %.not.i.i = icmp eq i64 %171, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i, label %169 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i: ; preds = %169, %164 - %176 = icmp ne ptr %.val11.i, null - tail call void @llvm.assume(i1 %176) - %..i.i8 = tail call i64 @llvm.umax.i64(i64 %24, i64 16) - %.10.i.i = tail call i64 @llvm.umin.i64(i64 %24, i64 16) - %177 = getelementptr inbounds i8, ptr %.val11.i, i64 %..i.i8 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %177, ptr nonnull align 1 %.val11.i, i64 %.10.i.i, i1 false), !noalias !131 + %166 = lshr i64 %24, 4 + %167 = and i64 %24, 15 + %.not.i.i.i.i = icmp ne i64 %167, 0 + %168 = zext i1 %.not.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %166, %168 + %169 = icmp ne ptr %.val11.i, null + tail call void @llvm.assume(i1 %169) + br label %184 + +._crit_edge.i.i: ; preds = %184 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %24, i64 16) + %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %24, i64 16) + %170 = getelementptr inbounds i8, ptr %.val11.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %170, ptr nonnull align 1 %.val11.i, i64 %spec.select28.i, i1 false), !noalias !131 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !131 - %178 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store ptr @_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeTNtNtCs68wO5nsWeTG_5alloc6string6StringBH_EECsff1zCjKRl2o_13turborepo_env.llvm.4734958634498228981, ptr %178, align 8, !noalias !131 - %179 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store i64 48, ptr %179, align 8, !noalias !131 + %171 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr @_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeTNtNtCs68wO5nsWeTG_5alloc6string6StringBH_EECsff1zCjKRl2o_13turborepo_env.llvm.4734958634498228981, ptr %171, align 8, !noalias !131 + %172 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store i64 48, ptr %172, align 8, !noalias !131 store ptr %0, ptr %8, align 8, !noalias !131 - %.not9.i = icmp eq i64 %24, 0 - br i1 %.not9.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread, label %.lr.ph.i9 - -.lr.ph.i9: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i %.sroa.48.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 8 %.sroa.59.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 16 %.sroa.610.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 24 %.sroa.711.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 32 %.sroa.812.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 40 %.sroa.913.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 48 - %180 = getelementptr inbounds nuw i8, ptr %7, i64 56 - %181 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %182 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %183 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %184 = load i64, ptr %2, align 8 - %185 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %186 = load i64, ptr %185, align 8 - %187 = xor i64 %184, 8317987319222330741 - %188 = xor i64 %186, 7237128888997146477 - %189 = xor i64 %184, 7816392313619706465 - %190 = xor i64 %186, 8387220255154660723 + %173 = getelementptr inbounds nuw i8, ptr %7, i64 56 + %174 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %175 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %176 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %177 = load i64, ptr %2, align 8 + %178 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %179 = load i64, ptr %178, align 8 + %180 = xor i64 %177, 8317987319222330741 + %181 = xor i64 %179, 7237128888997146477 + %182 = xor i64 %177, 7816392313619706465 + %183 = xor i64 %179, 8387220255154660723 br label %193 +184: ; preds = %184, %.lr.ph.i.i + %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %185, %184 ] + %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %186, %184 ] + %185 = add i64 %.sroa.0.07.i.i, 16 + %186 = add i64 %.sroa.5.06.i.i, -1 + %187 = getelementptr inbounds i8, ptr %.val11.i, i64 %.sroa.0.07.i.i + %188 = load <16 x i8>, ptr %187, align 16, !noalias !134 + %.lobit.i.i.i = ashr <16 x i8> %188, splat (i8 7) + %189 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %190 = or <2 x i64> %189, splat (i64 -9187201950435737472) + store <2 x i64> %190, ptr %187, align 16, !noalias !137 + %.not.i.i = icmp eq i64 %186, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %184 + 191: ; preds = %.noexc14.i, %.noexc13.i, %.noexc.i, %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_env.exit.i %192 = landingpad { ptr, i32 } cleanup invoke fastcc void @_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardQNtNtBL_3raw13RawTableInnerNCNvMsa_B1A_B1y_15rehash_in_place0EECsff1zCjKRl2o_13turborepo_env(ptr noalias noundef align 8 dereferenceable(24) %8) #27 to label %common.resume unwind label %287 -193: ; preds = %286, %.lr.ph.i9 - %.sroa.0.08.i = phi i64 [ 0, %.lr.ph.i9 ], [ %194, %286 ] +193: ; preds = %286, %._crit_edge.i.i + %.sroa.0.08.i = phi i64 [ 0, %._crit_edge.i.i ], [ %194, %286 ] %194 = add nuw i64 %.sroa.0.08.i, 1 %195 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 %196 = getelementptr inbounds i8, ptr %195, i64 %.sroa.0.08.i %197 = load i8, ptr %196, align 1, !noundef !14 - %.not.i10 = icmp eq i8 %197, -128 - br i1 %.not.i10, label %198, label %286 + %.not.i8 = icmp eq i8 %197, -128 + br i1 %.not.i8, label %198, label %286 198: ; preds = %193 %.neg.i = mul i64 %.sroa.0.08.i, -48 @@ -577,12 +577,12 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e %205 = getelementptr i8, ptr %203, i64 -32 %.val4.i.i = load i64, ptr %205, align 8, !alias.scope !146, !noalias !151, !noundef !14 call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7), !noalias !157 - store i64 %187, ptr %7, align 8, !alias.scope !161, !noalias !164 - store i64 %189, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %188, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %190, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %184, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %186, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %180, ptr %7, align 8, !alias.scope !161, !noalias !164 + store i64 %182, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %181, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %183, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %177, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %179, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.913.0..sroa_idx.i.i.i.i.i, i8 0, i64 24, i1 false), !alias.scope !161, !noalias !164 invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsff1zCjKRl2o_13turborepo_env.llvm.1724984292951356826(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %.val3.i.i, i64 noundef %.val4.i.i) to label %.noexc.i unwind label %191 @@ -601,11 +601,11 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull readonly align 8 dereferenceable(72) %7, i64 32, i1 false), !noalias !157 %206 = load i64, ptr %.sroa.913.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !186, !noalias !157, !noundef !14 %207 = shl i64 %206, 56 - %208 = load i64, ptr %180, align 8, !alias.scope !186, !noalias !157, !noundef !14 + %208 = load i64, ptr %173, align 8, !alias.scope !186, !noalias !157, !noundef !14 %209 = or i64 %207, %208 - %210 = load i64, ptr %181, align 8, !noalias !185, !noundef !14 + %210 = load i64, ptr %174, align 8, !noalias !185, !noundef !14 %211 = xor i64 %210, %209 - store i64 %211, ptr %181, align 8, !noalias !185 + store i64 %211, ptr %174, align 8, !noalias !185 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17h4108cfe4f127f608E.llvm.1724984292951356826"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %.noexc14.i unwind label %191 @@ -613,59 +613,59 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e %212 = load i64, ptr %5, align 8, !noalias !185, !noundef !14 %213 = xor i64 %212, %209 store i64 %213, ptr %5, align 8, !noalias !185 - %214 = load i64, ptr %182, align 8, !noalias !185, !noundef !14 + %214 = load i64, ptr %175, align 8, !noalias !185, !noundef !14 %215 = xor i64 %214, 255 - store i64 %215, ptr %182, align 8, !noalias !185 + store i64 %215, ptr %175, align 8, !noalias !185 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17h0baeda308753a8e4E.llvm.1724984292951356826"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %216 unwind label %191 216: ; preds = %.noexc14.i %217 = load i64, ptr %5, align 8, !noalias !185, !noundef !14 - %218 = load i64, ptr %183, align 8, !noalias !185, !noundef !14 + %218 = load i64, ptr %176, align 8, !noalias !185, !noundef !14 %219 = xor i64 %218, %217 - %220 = load i64, ptr %182, align 8, !noalias !185, !noundef !14 + %220 = load i64, ptr %175, align 8, !noalias !185, !noundef !14 %221 = xor i64 %219, %220 - %222 = load i64, ptr %181, align 8, !noalias !185, !noundef !14 + %222 = load i64, ptr %174, align 8, !noalias !185, !noundef !14 %223 = xor i64 %221, %222 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5), !noalias !185 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7), !noalias !157 - %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 + %.val.i11 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 %.val10.i = load i64, ptr %21, align 8, !alias.scope !131, !noundef !14 %.sroa.0.06.i.i = and i64 %.val10.i, %223 - %224 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.06.i.i + %224 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.06.i.i %.sroa.0.0.copyload.i57.i.i = load <16 x i8>, ptr %224, align 1, !noalias !187 %225 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %226 = bitcast <16 x i1> %225 to i16 %.not.i.not.not8.i.i = icmp eq i16 %226, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i16.i, label %._crit_edge.i.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i17.i, label %._crit_edge.i16.i -.lr.ph.i16.i: ; preds = %216, %.lr.ph.i16.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i15, %.lr.ph.i16.i ], [ %.sroa.0.06.i.i, %216 ] - %.sroa.7.09.i.i = phi i64 [ %227, %.lr.ph.i16.i ], [ 0, %216 ] +.lr.ph.i17.i: ; preds = %216, %.lr.ph.i17.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i13, %.lr.ph.i17.i ], [ %.sroa.0.06.i.i, %216 ] + %.sroa.7.09.i.i = phi i64 [ %227, %.lr.ph.i17.i ], [ 0, %216 ] %227 = add i64 %.sroa.7.09.i.i, 16 %228 = add i64 %227, %.sroa.0.010.i.i - %.sroa.0.0.i.i15 = and i64 %228, %.val10.i - %229 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i.i15 + %.sroa.0.0.i.i13 = and i64 %228, %.val10.i + %229 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i.i13 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %229, align 1, !noalias !187 %230 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %231 = bitcast <16 x i1> %230 to i16 %.not.i.not.not.i.i = icmp eq i16 %231, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i16.i, label %._crit_edge.i.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i17.i, label %._crit_edge.i16.i -._crit_edge.i.i: ; preds = %.lr.ph.i16.i, %216 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %216 ], [ %.sroa.0.0.i.i15, %.lr.ph.i16.i ] - %.lcssa.i.i = phi i16 [ %226, %216 ], [ %231, %.lr.ph.i16.i ] +._crit_edge.i16.i: ; preds = %.lr.ph.i17.i, %216 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %216 ], [ %.sroa.0.0.i.i13, %.lr.ph.i17.i ] + %.lcssa.i.i = phi i16 [ %226, %216 ], [ %231, %.lr.ph.i17.i ] %232 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %233 = zext nneg i16 %232 to i64 %234 = add i64 %.sroa.0.0.lcssa.i.i, %233 %235 = and i64 %234, %.val10.i - %236 = getelementptr inbounds i8, ptr %.val.i13, i64 %235 + %236 = getelementptr inbounds i8, ptr %.val.i11, i64 %235 %237 = load i8, ptr %236, align 1, !noundef !14 %238 = icmp sgt i8 %237, -1 br i1 %238, label %239, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -239: ; preds = %._crit_edge.i.i - %240 = load <16 x i8>, ptr %.val.i13, align 16, !noalias !190 +239: ; preds = %._crit_edge.i16.i + %240 = load <16 x i8>, ptr %.val.i11, align 16, !noalias !190 %241 = icmp slt <16 x i8> %240, zeroinitializer %242 = bitcast <16 x i1> %241 to i16 %243 = icmp ne i16 %242, 0 @@ -674,8 +674,8 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e %245 = zext nneg i16 %244 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %239, %._crit_edge.i.i - %.sroa.0.0.i12.i.i = phi i64 [ %245, %239 ], [ %235, %._crit_edge.i.i ] +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %239, %._crit_edge.i16.i + %.sroa.0.0.i12.i.i = phi i64 [ %245, %239 ], [ %235, %._crit_edge.i16.i ] %246 = sub i64 %.sroa.0.08.i, %.sroa.0.06.i.i %247 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i %248 = xor i64 %247, %246 @@ -685,9 +685,9 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; 250: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i %.neg9.i = mul i64 %.sroa.0.0.i12.i.i, -48 - %251 = getelementptr i8, ptr %.val.i13, i64 %.neg9.i + %251 = getelementptr i8, ptr %.val.i11, i64 %.neg9.i %252 = getelementptr i8, ptr %251, i64 -48 - %253 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i12.i.i + %253 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i12.i.i %254 = load i8, ptr %253, align 1, !noundef !14 %255 = lshr i64 %223, 57 %256 = trunc nuw nsw i64 %255 to i8 @@ -706,7 +706,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; %265 = trunc nuw nsw i64 %264 to i8 %266 = add i64 %.sroa.0.08.i, -16 %267 = and i64 %.val10.i, %266 - %268 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.08.i + %268 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.08.i store i8 %265, ptr %268, align 1 %269 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 %270 = getelementptr i8, ptr %269, i64 %267 @@ -723,8 +723,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; store i8 %275, ptr %272, align 1 store i8 %274, ptr %273, align 1 %276 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i14 = icmp eq i64 %276, 48 - br i1 %exitcond.not.i.i14, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_env.exit.loopexit.i, label %.preheader.i + %exitcond.not.i.i12 = icmp eq i64 %276, 48 + br i1 %exitcond.not.i.i12, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_env.exit.loopexit.i, label %.preheader.i 277: ; preds = %250 %278 = add i64 %.sroa.0.08.i, -16 @@ -759,26 +759,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit: ; pr %291 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %291, i64 %.pre15.i.fr, i64 %290 %.pre = load i64, ptr %15, align 8, !alias.scope !131 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i - %292 = phi i64 [ %16, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %293 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %294 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %295 = sub i64 %293, %292 - store i64 %295, ptr %294, align 8, !alias.scope !131 + br label %292 + +292: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread + %293 = phi i64 [ %16, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %294 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %295 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %296 = sub i64 %294, %293 + store i64 %296, ptr %295, align 8, !alias.scope !131 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8), !noalias !131 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i -_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i: ; preds = %56, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.sroa.9.0.i.i.ph, %56 ], [ undef, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.sroa.7.0.i.i.ph, %56 ], [ -9223372036854775807, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit ] - %296 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %297 = insertvalue { i64, i64 } %296, i64 %.sroa.4.1.i, 1 +_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i: ; preds = %56, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit, %292 + %.sroa.4.1.i = phi i64 [ undef, %292 ], [ %.sroa.9.0.i.i.ph, %56 ], [ undef, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %292 ], [ %.sroa.7.0.i.i.ph, %56 ], [ -9223372036854775807, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit ] + %297 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %298 = insertvalue { i64, i64 } %297, i64 %.sroa.4.1.i, 1 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit: ; preds = %28, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i - %.merged.i = phi { i64, i64 } [ %29, %28 ], [ %297, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i ] + %.merged.i = phi { i64, i64 } [ %29, %28 ], [ %298, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll b/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll index 3373fc6af22..42abbb6fcf5 100644 --- a/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll +++ b/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll @@ -134,8 +134,8 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 %68 = load i64, ptr %14, align 8, !alias.scope !22, !noalias !23, !noundef !9 %invariant.gep = getelementptr i8, ptr %67, i64 16 - %.not62 = icmp eq i64 %68, 0 - br i1 %.not62, label %.thread42, label %.preheader.lr.ph + %.not60 = icmp eq i64 %68, 0 + br i1 %.not60, label %.thread40, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %62 %69 = load ptr, ptr %0, align 8, !alias.scope !22, !noalias !23, !nonnull !9, !noundef !9 @@ -164,21 +164,21 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit %85 = phi ptr [ %69, %.preheader.lr.ph ], [ %169, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.016.066 = phi ptr [ %69, %.preheader.lr.ph ], [ %.sroa.016.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.5.065 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.9.064 = phi i64 [ %68, %.preheader.lr.ph ], [ %99, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.13.063 = phi i16 [ %73, %.preheader.lr.ph ], [ %97, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %86 = icmp eq i16 %.sroa.13.063, 0 + %.sroa.014.064 = phi ptr [ %69, %.preheader.lr.ph ], [ %.sroa.014.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.5.063 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.9.062 = phi i64 [ %68, %.preheader.lr.ph ], [ %99, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.13.061 = phi i16 [ %73, %.preheader.lr.ph ], [ %97, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %86 = icmp eq i16 %.sroa.13.061, 0 br i1 %86, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.016.259 = phi ptr [ %87, %.noexc2 ], [ %.sroa.016.066, %.preheader ] - %.sroa.5.258 = phi i64 [ %91, %.noexc2 ], [ %.sroa.5.065, %.preheader ] - %87 = getelementptr inbounds nuw i8, ptr %.sroa.016.259, i64 16 + %.sroa.014.257 = phi ptr [ %87, %.noexc2 ], [ %.sroa.014.064, %.preheader ] + %.sroa.5.256 = phi i64 [ %91, %.noexc2 ], [ %.sroa.5.063, %.preheader ] + %87 = getelementptr inbounds nuw i8, ptr %.sroa.014.257, i64 16 %88 = load <16 x i8>, ptr %87, align 16, !noalias !38 %89 = icmp slt <16 x i8> %88, zeroinitializer %90 = bitcast <16 x i1> %89 to i16 - %91 = add i64 %.sroa.5.258, 16 + %91 = add i64 %.sroa.5.256, 16 %92 = icmp eq i16 %90, -1 br i1 %92, label %.noexc2, label %._crit_edge.loopexit @@ -187,15 +187,15 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.063, %.preheader ], [ %93, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.065, %.preheader ], [ %91, %._crit_edge.loopexit ] - %.sroa.016.2.lcssa = phi ptr [ %.sroa.016.066, %.preheader ], [ %87, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.061, %.preheader ], [ %93, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.063, %.preheader ], [ %91, %._crit_edge.loopexit ] + %.sroa.014.2.lcssa = phi ptr [ %.sroa.014.064, %.preheader ], [ %87, %._crit_edge.loopexit ] %94 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %95 = zext nneg i16 %94 to i64 %96 = add i16 %.sroa.13.2.lcssa, -1 %97 = and i16 %96, %.sroa.13.2.lcssa %98 = add i64 %.sroa.5.2.lcssa, %95 - %99 = add i64 %.sroa.9.064, -1 + %99 = add i64 %.sroa.9.062, -1 %100 = sub nsw i64 0, %98 %101 = getelementptr inbounds { { ptr, i64 }, { ptr, i64 } }, ptr %85, i64 %100 %102 = getelementptr inbounds i8, ptr %101, i64 -32 @@ -216,19 +216,19 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsjIaN6dkKMFO_12turborepo_ci.llvm.13785578889718008974(ptr noalias noundef nonnull align 8 dereferenceable(72) %11, ptr noalias noundef nonnull readonly align 1 %.val3.i, i64 noundef %.val4.i) to label %.noexc4 unwind label %60 -.thread42.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit - %.pre76 = load i64, ptr %14, align 8, !alias.scope !22, !noalias !23 - br label %.thread42 +.thread40.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit + %.pre74 = load i64, ptr %14, align 8, !alias.scope !22, !noalias !23 + br label %.thread40 -.thread42: ; preds = %.thread42.loopexit, %62 - %104 = phi i64 [ %.pre76, %.thread42.loopexit ], [ 0, %62 ] +.thread40: ; preds = %.thread40.loopexit, %62 + %104 = phi i64 [ %.pre74, %.thread40.loopexit ], [ 0, %62 ] %105 = sub i64 %.sroa.02.0.i.i, %104 store i64 %105, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 store i64 %104, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 br label %106 -106: ; preds = %106, %.thread42 - %.sroa.0.05.i.i = phi i64 [ 0, %.thread42 ], [ %111, %106 ] +106: ; preds = %106, %.thread40 + %.sroa.0.05.i.i = phi i64 [ 0, %.thread40 ], [ %111, %106 ] %107 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %108 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i %109 = load i64, ptr %107, align 8 @@ -374,7 +374,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit: ; p %175 = getelementptr inbounds i8, ptr %67, i64 %174 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %175, ptr noundef nonnull align 1 dereferenceable(32) %172, i64 32, i1 false) %.not = icmp eq i64 %99, 0 - br i1 %.not, label %.thread42.loopexit, label %.preheader + br i1 %.not, label %.thread40.loopexit, label %.preheader common.resume: ; preds = %203, %60 %common.resume.op = phi { ptr, i32 } [ %61, %60 ], [ %204, %203 ] @@ -383,83 +383,83 @@ common.resume: ; preds = %203, %60 176: ; preds = %18 tail call void @llvm.experimental.noalias.scope.decl(metadata !98) %.val10.i = load ptr, ptr %0, align 8, !alias.scope !98 - %177 = lshr i64 %23, 4 - %178 = and i64 %23, 15 - %.not.i.i.i.i = icmp ne i64 %178, 0 - %179 = zext i1 %.not.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %177, %179 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %23, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread, label %.lr.ph.i.i + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %176 + %177 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %177) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !98 + br label %306 .lr.ph.i.i: ; preds = %176 - %180 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %180) - br label %181 - -181: ; preds = %181, %.lr.ph.i.i - %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %182, %181 ] - %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %183, %181 ] - %182 = add i64 %.sroa.0.07.i.i, 16 - %183 = add nsw i64 %.sroa.5.06.i.i, -1 - %184 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.07.i.i - %185 = load <16 x i8>, ptr %184, align 16, !noalias !101 - %.lobit.i.i.i = ashr <16 x i8> %185, splat (i8 7) - %186 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %187 = or <2 x i64> %186, splat (i64 -9187201950435737472) - store <2 x i64> %187, ptr %184, align 16, !noalias !104 - %.not.i.i = icmp eq i64 %183, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i, label %181 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i: ; preds = %181, %176 - %188 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %188) - %..i.i8 = tail call i64 @llvm.umax.i64(i64 %23, i64 16) - %.10.i.i = tail call i64 @llvm.umin.i64(i64 %23, i64 16) - %189 = getelementptr inbounds i8, ptr %.val10.i, i64 %..i.i8 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %189, ptr nonnull align 1 %.val10.i, i64 %.10.i.i, i1 false), !noalias !98 + %178 = lshr i64 %23, 4 + %179 = and i64 %23, 15 + %.not.i.i.i.i = icmp ne i64 %179, 0 + %180 = zext i1 %.not.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %178, %180 + %181 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %181) + br label %196 + +._crit_edge.i.i: ; preds = %196 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %23, i64 16) + %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %23, i64 16) + %182 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %182, ptr nonnull align 1 %.val10.i, i64 %spec.select28.i, i1 false), !noalias !98 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !98 - %190 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store ptr null, ptr %190, align 8, !noalias !98 - %191 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store i64 32, ptr %191, align 8, !noalias !98 + %183 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr null, ptr %183, align 8, !noalias !98 + %184 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store i64 32, ptr %184, align 8, !noalias !98 store ptr %0, ptr %8, align 8, !noalias !98 - %.not9.i = icmp eq i64 %23, 0 - br i1 %.not9.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread, label %.lr.ph.i9 - -.lr.ph.i9: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i %.sroa.48.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 8 %.sroa.59.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 16 %.sroa.610.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 24 %.sroa.711.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 32 %.sroa.812.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 40 %.sroa.913.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 48 - %192 = getelementptr inbounds nuw i8, ptr %7, i64 56 - %193 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %194 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %195 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %196 = load i64, ptr %2, align 8 - %197 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %198 = load i64, ptr %197, align 8 - %199 = xor i64 %196, 8317987319222330741 - %200 = xor i64 %198, 7237128888997146477 - %201 = xor i64 %196, 7816392313619706465 - %202 = xor i64 %198, 8387220255154660723 + %185 = getelementptr inbounds nuw i8, ptr %7, i64 56 + %186 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %187 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %188 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %189 = load i64, ptr %2, align 8 + %190 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %191 = load i64, ptr %190, align 8 + %192 = xor i64 %189, 8317987319222330741 + %193 = xor i64 %191, 7237128888997146477 + %194 = xor i64 %189, 7816392313619706465 + %195 = xor i64 %191, 8387220255154660723 br label %205 +196: ; preds = %196, %.lr.ph.i.i + %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %197, %196 ] + %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %198, %196 ] + %197 = add i64 %.sroa.0.07.i.i, 16 + %198 = add i64 %.sroa.5.06.i.i, -1 + %199 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.07.i.i + %200 = load <16 x i8>, ptr %199, align 16, !noalias !101 + %.lobit.i.i.i = ashr <16 x i8> %200, splat (i8 7) + %201 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %202 = or <2 x i64> %201, splat (i64 -9187201950435737472) + store <2 x i64> %202, ptr %199, align 16, !noalias !104 + %.not.i.i = icmp eq i64 %198, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %196 + 203: ; preds = %.noexc13.i, %.noexc12.i, %.noexc.i, %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_ci.exit.i %204 = landingpad { ptr, i32 } cleanup invoke fastcc void @_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardQNtNtBL_3raw13RawTableInnerNCNvMsa_B1A_B1y_15rehash_in_place0EECsjIaN6dkKMFO_12turborepo_ci(ptr noalias noundef align 8 dereferenceable(24) %8) #24 to label %common.resume unwind label %301 -205: ; preds = %300, %.lr.ph.i9 - %.sroa.0.08.i = phi i64 [ 0, %.lr.ph.i9 ], [ %206, %300 ] +205: ; preds = %300, %._crit_edge.i.i + %.sroa.0.08.i = phi i64 [ 0, %._crit_edge.i.i ], [ %206, %300 ] %206 = add nuw i64 %.sroa.0.08.i, 1 %207 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 %208 = getelementptr inbounds i8, ptr %207, i64 %.sroa.0.08.i %209 = load i8, ptr %208, align 1, !noundef !9 - %.not.i10 = icmp eq i8 %209, -128 - br i1 %.not.i10, label %210, label %300 + %.not.i8 = icmp eq i8 %209, -128 + br i1 %.not.i8, label %210, label %300 210: ; preds = %205 %211 = shl i64 %.sroa.0.08.i, 5 @@ -481,12 +481,12 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c %218 = getelementptr i8, ptr %216, i64 -24 %.val4.i.i = load i64, ptr %218, align 8, !alias.scope !113, !noalias !118, !noundef !9 call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7), !noalias !124 - store i64 %199, ptr %7, align 8, !alias.scope !128, !noalias !131 - store i64 %201, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %200, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %202, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %196, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %198, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %192, ptr %7, align 8, !alias.scope !128, !noalias !131 + store i64 %194, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %193, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %195, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %189, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %191, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.913.0..sroa_idx.i.i.i.i.i, i8 0, i64 24, i1 false), !alias.scope !128, !noalias !131 invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsjIaN6dkKMFO_12turborepo_ci.llvm.13785578889718008974(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %.val3.i.i, i64 noundef %.val4.i.i) to label %.noexc.i unwind label %203 @@ -505,11 +505,11 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull readonly align 8 dereferenceable(72) %7, i64 32, i1 false), !noalias !124 %219 = load i64, ptr %.sroa.913.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !156, !noalias !124, !noundef !9 %220 = shl i64 %219, 56 - %221 = load i64, ptr %192, align 8, !alias.scope !156, !noalias !124, !noundef !9 + %221 = load i64, ptr %185, align 8, !alias.scope !156, !noalias !124, !noundef !9 %222 = or i64 %220, %221 - %223 = load i64, ptr %193, align 8, !noalias !155, !noundef !9 + %223 = load i64, ptr %186, align 8, !noalias !155, !noundef !9 %224 = xor i64 %223, %222 - store i64 %224, ptr %193, align 8, !noalias !155 + store i64 %224, ptr %186, align 8, !noalias !155 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17h4108cfe4f127f608E.llvm.13785578889718008974"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %.noexc13.i unwind label %203 @@ -517,59 +517,59 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c %225 = load i64, ptr %5, align 8, !noalias !155, !noundef !9 %226 = xor i64 %225, %222 store i64 %226, ptr %5, align 8, !noalias !155 - %227 = load i64, ptr %194, align 8, !noalias !155, !noundef !9 + %227 = load i64, ptr %187, align 8, !noalias !155, !noundef !9 %228 = xor i64 %227, 255 - store i64 %228, ptr %194, align 8, !noalias !155 + store i64 %228, ptr %187, align 8, !noalias !155 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17h0baeda308753a8e4E.llvm.13785578889718008974"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %229 unwind label %203 229: ; preds = %.noexc13.i %230 = load i64, ptr %5, align 8, !noalias !155, !noundef !9 - %231 = load i64, ptr %195, align 8, !noalias !155, !noundef !9 + %231 = load i64, ptr %188, align 8, !noalias !155, !noundef !9 %232 = xor i64 %231, %230 - %233 = load i64, ptr %194, align 8, !noalias !155, !noundef !9 + %233 = load i64, ptr %187, align 8, !noalias !155, !noundef !9 %234 = xor i64 %232, %233 - %235 = load i64, ptr %193, align 8, !noalias !155, !noundef !9 + %235 = load i64, ptr %186, align 8, !noalias !155, !noundef !9 %236 = xor i64 %234, %235 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5), !noalias !155 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7), !noalias !124 - %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 + %.val.i11 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 %.val9.i = load i64, ptr %20, align 8, !alias.scope !98, !noundef !9 %.sroa.0.06.i.i = and i64 %.val9.i, %236 - %237 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.06.i.i + %237 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.06.i.i %.sroa.0.0.copyload.i57.i.i = load <16 x i8>, ptr %237, align 1, !noalias !157 %238 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %239 = bitcast <16 x i1> %238 to i16 %.not.i.not.not8.i.i = icmp eq i16 %239, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i15.i, label %._crit_edge.i.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i16.i, label %._crit_edge.i15.i -.lr.ph.i15.i: ; preds = %229, %.lr.ph.i15.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i15, %.lr.ph.i15.i ], [ %.sroa.0.06.i.i, %229 ] - %.sroa.7.09.i.i = phi i64 [ %240, %.lr.ph.i15.i ], [ 0, %229 ] +.lr.ph.i16.i: ; preds = %229, %.lr.ph.i16.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i13, %.lr.ph.i16.i ], [ %.sroa.0.06.i.i, %229 ] + %.sroa.7.09.i.i = phi i64 [ %240, %.lr.ph.i16.i ], [ 0, %229 ] %240 = add i64 %.sroa.7.09.i.i, 16 %241 = add i64 %240, %.sroa.0.010.i.i - %.sroa.0.0.i.i15 = and i64 %241, %.val9.i - %242 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i.i15 + %.sroa.0.0.i.i13 = and i64 %241, %.val9.i + %242 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i.i13 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %242, align 1, !noalias !157 %243 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %244 = bitcast <16 x i1> %243 to i16 %.not.i.not.not.i.i = icmp eq i16 %244, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i15.i, label %._crit_edge.i.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i16.i, label %._crit_edge.i15.i -._crit_edge.i.i: ; preds = %.lr.ph.i15.i, %229 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %229 ], [ %.sroa.0.0.i.i15, %.lr.ph.i15.i ] - %.lcssa.i.i = phi i16 [ %239, %229 ], [ %244, %.lr.ph.i15.i ] +._crit_edge.i15.i: ; preds = %.lr.ph.i16.i, %229 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %229 ], [ %.sroa.0.0.i.i13, %.lr.ph.i16.i ] + %.lcssa.i.i = phi i16 [ %239, %229 ], [ %244, %.lr.ph.i16.i ] %245 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %246 = zext nneg i16 %245 to i64 %247 = add i64 %.sroa.0.0.lcssa.i.i, %246 %248 = and i64 %247, %.val9.i - %249 = getelementptr inbounds i8, ptr %.val.i13, i64 %248 + %249 = getelementptr inbounds i8, ptr %.val.i11, i64 %248 %250 = load i8, ptr %249, align 1, !noundef !9 %251 = icmp sgt i8 %250, -1 br i1 %251, label %252, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -252: ; preds = %._crit_edge.i.i - %253 = load <16 x i8>, ptr %.val.i13, align 16, !noalias !160 +252: ; preds = %._crit_edge.i15.i + %253 = load <16 x i8>, ptr %.val.i11, align 16, !noalias !160 %254 = icmp slt <16 x i8> %253, zeroinitializer %255 = bitcast <16 x i1> %254 to i16 %256 = icmp ne i16 %255, 0 @@ -578,8 +578,8 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c %258 = zext nneg i16 %257 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %252, %._crit_edge.i.i - %.sroa.0.0.i12.i.i = phi i64 [ %258, %252 ], [ %248, %._crit_edge.i.i ] +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %252, %._crit_edge.i15.i + %.sroa.0.0.i12.i.i = phi i64 [ %258, %252 ], [ %248, %._crit_edge.i15.i ] %259 = sub i64 %.sroa.0.08.i, %.sroa.0.06.i.i %260 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i %261 = xor i64 %260, %259 @@ -590,8 +590,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; 263: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i %264 = shl i64 %.sroa.0.0.i12.i.i, 5 %265 = sub nuw nsw i64 -32, %264 - %266 = getelementptr inbounds i8, ptr %.val.i13, i64 %265 - %267 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i12.i.i + %266 = getelementptr inbounds i8, ptr %.val.i11, i64 %265 + %267 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i12.i.i %268 = load i8, ptr %267, align 1, !noundef !9 %269 = lshr i64 %236, 57 %270 = trunc nuw nsw i64 %269 to i8 @@ -610,7 +610,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; %279 = trunc nuw nsw i64 %278 to i8 %280 = add i64 %.sroa.0.08.i, -16 %281 = and i64 %.val9.i, %280 - %282 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.08.i + %282 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.08.i store i8 %279, ptr %282, align 1 %283 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 %284 = getelementptr i8, ptr %283, i64 %281 @@ -627,8 +627,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; store i8 %289, ptr %286, align 1 store i8 %288, ptr %287, align 1 %290 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i14 = icmp eq i64 %290, 32 - br i1 %exitcond.not.i.i14, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_ci.exit.loopexit.i, label %.preheader.i + %exitcond.not.i.i12 = icmp eq i64 %290, 32 + br i1 %exitcond.not.i.i12, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_ci.exit.loopexit.i, label %.preheader.i 291: ; preds = %263 %292 = add i64 %.sroa.0.08.i, -16 @@ -663,26 +663,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit: ; pr %305 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %305, i64 %.pre15.i.fr, i64 %304 %.pre = load i64, ptr %14, align 8, !alias.scope !98 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i - %306 = phi i64 [ %15, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %307 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf6e1d40caaeb2c89E.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %308 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %309 = sub i64 %307, %306 - store i64 %309, ptr %308, align 8, !alias.scope !98 + br label %306 + +306: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread + %307 = phi i64 [ %15, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %308 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %309 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %310 = sub i64 %308, %307 + store i64 %310, ptr %309, align 8, !alias.scope !98 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8), !noalias !98 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i -_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i: ; preds = %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.sroa.9.0.i.i.ph, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i ], [ undef, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.sroa.7.0.i.i.ph, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i ], [ -9223372036854775807, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit ] - %310 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %311 = insertvalue { i64, i64 } %310, i64 %.sroa.4.1.i, 1 +_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i: ; preds = %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit, %306 + %.sroa.4.1.i = phi i64 [ undef, %306 ], [ %.sroa.9.0.i.i.ph, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i ], [ undef, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %306 ], [ %.sroa.7.0.i.i.ph, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i ], [ -9223372036854775807, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit ] + %311 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %312 = insertvalue { i64, i64 } %311, i64 %.sroa.4.1.i, 1 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit: ; preds = %27, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i - %.merged.i = phi { i64, i64 } [ %28, %27 ], [ %311, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i ] + %.merged.i = phi { i64, i64 } [ %28, %27 ], [ %312, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll b/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll index bbdd45a4d2a..e8ae12daa89 100644 --- a/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll +++ b/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll @@ -26947,9 +26947,9 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2 store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !5956 %69 = load i64, ptr %10, align 8, !alias.scope !5965, !noalias !5966, !noundef !13 %invariant.gep = getelementptr i8, ptr %68, i64 16 - %invariant.gep40 = getelementptr i8, ptr %68, i64 -104 + %invariant.gep39 = getelementptr i8, ptr %68, i64 -104 %70 = icmp eq i64 %69, 0 - br i1 %70, label %._crit_edge46, label %.preheader.lr.ph + br i1 %70, label %._crit_edge45, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit %71 = load ptr, ptr %0, align 8, !alias.scope !5965, !noalias !5966, !nonnull !13, !noundef !13 @@ -26961,8 +26961,8 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2 _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread: ; preds = %57, %62, %41 %.pn = phi { i64, i64 } [ %42, %41 ], [ %63, %62 ], [ %58, %57 ] - %.sroa.7.026 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.027 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.025 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.026 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8), !noalias !5956 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit @@ -26974,37 +26974,37 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2 .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit %78 = phi ptr [ %71, %.preheader.lr.ph ], [ %145, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.012.045 = phi ptr [ %71, %.preheader.lr.ph ], [ %.sroa.012.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.5.044 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.9.043 = phi i64 [ %69, %.preheader.lr.ph ], [ %109, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.13.042 = phi i16 [ %75, %.preheader.lr.ph ], [ %107, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %79 = icmp eq i16 %.sroa.13.042, 0 + %.sroa.011.044 = phi ptr [ %71, %.preheader.lr.ph ], [ %.sroa.011.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.5.043 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.9.042 = phi i64 [ %69, %.preheader.lr.ph ], [ %109, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.13.041 = phi i16 [ %75, %.preheader.lr.ph ], [ %107, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %79 = icmp eq i16 %.sroa.13.041, 0 br i1 %79, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.012.137 = phi ptr [ %80, %.noexc2 ], [ %.sroa.012.045, %.preheader ] - %.sroa.5.136 = phi i64 [ %84, %.noexc2 ], [ %.sroa.5.044, %.preheader ] - %80 = getelementptr inbounds nuw i8, ptr %.sroa.012.137, i64 16 + %.sroa.011.136 = phi ptr [ %80, %.noexc2 ], [ %.sroa.011.044, %.preheader ] + %.sroa.5.135 = phi i64 [ %84, %.noexc2 ], [ %.sroa.5.043, %.preheader ] + %80 = getelementptr inbounds nuw i8, ptr %.sroa.011.136, i64 16 %81 = load <16 x i8>, ptr %80, align 16, !noalias !5970 %82 = icmp slt <16 x i8> %81, zeroinitializer %83 = bitcast <16 x i1> %82 to i16 - %84 = add i64 %.sroa.5.136, 16 + %84 = add i64 %.sroa.5.135, 16 %85 = icmp eq i16 %83, -1 br i1 %85, label %.noexc2, label %._crit_edge.loopexit -._crit_edge46.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit - %.pre57 = load i64, ptr %10, align 8, !alias.scope !5965, !noalias !5966 - br label %._crit_edge46 +._crit_edge45.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit + %.pre56 = load i64, ptr %10, align 8, !alias.scope !5965, !noalias !5966 + br label %._crit_edge45 -._crit_edge46: ; preds = %._crit_edge46.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit - %86 = phi i64 [ %.pre57, %._crit_edge46.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit ] +._crit_edge45: ; preds = %._crit_edge45.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit + %86 = phi i64 [ %.pre56, %._crit_edge45.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit ] %87 = sub i64 %.sroa.03.0.i.i, %86 store i64 %87, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !5956 store i64 %86, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !5956 br label %88 -88: ; preds = %88, %._crit_edge46 - %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge46 ], [ %93, %88 ] +88: ; preds = %88, %._crit_edge45 + %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge45 ], [ %93, %88 ] %89 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %90 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i %91 = load i64, ptr %89, align 8 @@ -27045,15 +27045,15 @@ _ZN9hashbrown3raw5inner11TableLayout20calculate_layout_for17hd3f746c8628a2deaE.l br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.042, %.preheader ], [ %103, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.044, %.preheader ], [ %84, %._crit_edge.loopexit ] - %.sroa.012.1.lcssa = phi ptr [ %.sroa.012.045, %.preheader ], [ %80, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.041, %.preheader ], [ %103, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.043, %.preheader ], [ %84, %._crit_edge.loopexit ] + %.sroa.011.1.lcssa = phi ptr [ %.sroa.011.044, %.preheader ], [ %80, %._crit_edge.loopexit ] %104 = add i16 %.sroa.13.1.lcssa, -1 %105 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %106 = zext nneg i16 %105 to i64 %107 = and i16 %104, %.sroa.13.1.lcssa %108 = add i64 %.sroa.5.1.lcssa, %106 - %109 = add i64 %.sroa.9.043, -1 + %109 = add i64 %.sroa.9.042, -1 %110 = sub nsw i64 0, %108 %111 = getelementptr inbounds { { i64, [10 x i64] }, { { { i64, [1 x i64] } } } }, ptr %78, i64 %110 %112 = getelementptr inbounds i8, ptr %111, i64 -104 @@ -27124,10 +27124,10 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %146 = getelementptr i8, ptr %145, i64 %.neg.i.i %147 = getelementptr i8, ptr %146, i64 -104 %.neg72.i.i = mul i64 %.sroa.0.0.i4.i, -104 - %gep41 = getelementptr i8, ptr %invariant.gep40, i64 %.neg72.i.i - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %gep41, ptr noundef nonnull align 1 dereferenceable(104) %147, i64 104, i1 false) + %gep40 = getelementptr i8, ptr %invariant.gep39, i64 %.neg72.i.i + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %gep40, ptr noundef nonnull align 1 dereferenceable(104) %147, i64 104, i1 false) %148 = icmp eq i64 %109, 0 - br i1 %148, label %._crit_edge46.loopexit, label %.preheader + br i1 %148, label %._crit_edge45.loopexit, label %.preheader common.resume: ; preds = %165, %76 %common.resume.op = phi { ptr, i32 } [ %77, %76 ], [ %166, %165 ] @@ -27136,48 +27136,51 @@ common.resume: ; preds = %165, %76 149: ; preds = %14 tail call void @llvm.experimental.noalias.scope.decl(metadata !5995) %.val10.i = load ptr, ptr %0, align 8, !alias.scope !5995 - %150 = lshr i64 %19, 4 - %151 = and i64 %19, 15 - %.not1.i.i.i.i = icmp ne i64 %151, 0 - %152 = zext i1 %.not1.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %150, %152 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %19, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread, label %.lr.ph.i.i + +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread: ; preds = %149 + %150 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %150) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !5995 + br label %251 .lr.ph.i.i: ; preds = %149 - %153 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %153) - br label %154 - -154: ; preds = %154, %.lr.ph.i.i - %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %156, %154 ] - %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %155, %154 ] - %155 = add i64 %.sroa.03.06.i.i, 16 - %156 = add nsw i64 %.sroa.04.07.i.i, -1 - %157 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.03.06.i.i - %158 = load <16 x i8>, ptr %157, align 16, !noalias !5998 - %.lobit.i.i.i = ashr <16 x i8> %158, splat (i8 7) - %159 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %160 = or <2 x i64> %159, splat (i64 -9187201950435737472) - store <2 x i64> %160, ptr %157, align 16, !noalias !6001 - %.not.i.i = icmp eq i64 %156, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i, label %154 - -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i: ; preds = %154, %149 - %161 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %161) - %..i.i7 = tail call i64 @llvm.umax.i64(i64 %19, i64 16) - %.10.i.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) - %162 = getelementptr inbounds i8, ptr %.val10.i, i64 %..i.i7 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %162, ptr nonnull align 1 %.val10.i, i64 %.10.i.i, i1 false), !noalias !5995 + %151 = lshr i64 %19, 4 + %152 = and i64 %19, 15 + %.not1.i.i.i.i = icmp ne i64 %152, 0 + %153 = zext i1 %.not1.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %151, %153 + %154 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %154) + br label %158 + +._crit_edge.i.i: ; preds = %158 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %19, i64 16) + %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) + %155 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %155, ptr nonnull align 1 %.val10.i, i64 %spec.select28.i, i1 false), !noalias !5995 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !5995 - %163 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @"_ZN4core3ptr201drop_in_place$LT$$LP$uv_distribution_types..id..VersionId$C$dashmap..util..SharedValue$LT$uv_once_map..Value$LT$alloc..sync..Arc$LT$uv_resolver..resolver..provider..MetadataResponse$GT$$GT$$GT$$RP$$GT$17hb41467dde9e037b8E", ptr %163, align 8, !noalias !5995 - %164 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 104, ptr %164, align 8, !noalias !5995 + %156 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN4core3ptr201drop_in_place$LT$$LP$uv_distribution_types..id..VersionId$C$dashmap..util..SharedValue$LT$uv_once_map..Value$LT$alloc..sync..Arc$LT$uv_resolver..resolver..provider..MetadataResponse$GT$$GT$$GT$$RP$$GT$17hb41467dde9e037b8E", ptr %156, align 8, !noalias !5995 + %157 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 104, ptr %157, align 8, !noalias !5995 store ptr %0, ptr %6, align 8, !noalias !5995 - %.not9.i = icmp eq i64 %19, 0 - br i1 %.not9.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread, label %.lr.ph.i8 + br label %.lr.ph.i7 + +158: ; preds = %158, %.lr.ph.i.i + %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %160, %158 ] + %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %159, %158 ] + %159 = add i64 %.sroa.03.06.i.i, 16 + %160 = add i64 %.sroa.04.07.i.i, -1 + %161 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.03.06.i.i + %162 = load <16 x i8>, ptr %161, align 16, !noalias !5998 + %.lobit.i.i.i = ashr <16 x i8> %162, splat (i8 7) + %163 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %164 = or <2 x i64> %163, splat (i64 -9187201950435737472) + store <2 x i64> %164, ptr %161, align 16, !noalias !6001 + %.not.i.i = icmp eq i64 %160, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %158 165: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h89a2254c9734b07cE.exit.i %166 = landingpad { ptr, i32 } @@ -27185,16 +27188,16 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f10 invoke fastcc void @"_ZN4core3ptr195drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7ba04efe36d83b48E"(ptr noalias noundef align 8 dereferenceable(24) %6) #70 to label %common.resume unwind label %246 -.lr.ph.i8: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i, %245 - %.sroa.04.08.i = phi i64 [ %167, %245 ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i ] +.lr.ph.i7: ; preds = %245, %._crit_edge.i.i + %.sroa.04.08.i = phi i64 [ %167, %245 ], [ 0, %._crit_edge.i.i ] %167 = add nuw i64 %.sroa.04.08.i, 1 %168 = load ptr, ptr %0, align 8, !alias.scope !5995, !nonnull !13, !noundef !13 %169 = getelementptr inbounds i8, ptr %168, i64 %.sroa.04.08.i %170 = load i8, ptr %169, align 1, !noundef !13 - %.not.i9 = icmp eq i8 %170, -128 - br i1 %.not.i9, label %171, label %245 + %.not.i8 = icmp eq i8 %170, -128 + br i1 %.not.i8, label %171, label %245 -171: ; preds = %.lr.ph.i8 +171: ; preds = %.lr.ph.i7 %.neg.i = mul i64 %.sroa.04.08.i, -104 %172 = getelementptr i8, ptr %168, i64 %.neg.i %173 = getelementptr i8, ptr %172, i64 -104 @@ -27227,24 +27230,24 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h89a2254c9734b07cE.exit.i: ; preds = %182 = icmp slt <16 x i8> %.sroa.0.0.copyload.i810.i.i, zeroinitializer %183 = bitcast <16 x i1> %182 to i16 %184 = icmp eq i16 %183, 0 - br i1 %184, label %.lr.ph.i12.i, label %._crit_edge.i.i + br i1 %184, label %.lr.ph.i13.i, label %._crit_edge.i12.i -.lr.ph.i12.i: ; preds = %178, %.lr.ph.i12.i - %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i11, %.lr.ph.i12.i ], [ %.sroa.0.09.i.i, %178 ] - %.sroa.7.011.i.i = phi i64 [ %185, %.lr.ph.i12.i ], [ 0, %178 ] +.lr.ph.i13.i: ; preds = %178, %.lr.ph.i13.i + %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ], [ %.sroa.0.09.i.i, %178 ] + %.sroa.7.011.i.i = phi i64 [ %185, %.lr.ph.i13.i ], [ 0, %178 ] %185 = add i64 %.sroa.7.011.i.i, 16 %186 = add i64 %185, %.sroa.0.012.i.i - %.sroa.0.0.i.i11 = and i64 %186, %.val9.i - %187 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i11 + %.sroa.0.0.i.i10 = and i64 %186, %.val9.i + %187 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i10 %.sroa.0.0.copyload.i8.i.i = load <16 x i8>, ptr %187, align 1, !noalias !6011 %188 = icmp slt <16 x i8> %.sroa.0.0.copyload.i8.i.i, zeroinitializer %189 = bitcast <16 x i1> %188 to i16 %190 = icmp eq i16 %189, 0 - br i1 %190, label %.lr.ph.i12.i, label %._crit_edge.i.i + br i1 %190, label %.lr.ph.i13.i, label %._crit_edge.i12.i -._crit_edge.i.i: ; preds = %.lr.ph.i12.i, %178 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %178 ], [ %.sroa.0.0.i.i11, %.lr.ph.i12.i ] - %.lcssa.i.i = phi i16 [ %183, %178 ], [ %189, %.lr.ph.i12.i ] +._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %178 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %178 ], [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ] + %.lcssa.i.i = phi i16 [ %183, %178 ], [ %189, %.lr.ph.i13.i ] %191 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %192 = zext nneg i16 %191 to i64 %193 = add i64 %.sroa.0.0.lcssa.i.i, %192 @@ -27254,7 +27257,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h89a2254c9734b07cE.exit.i: ; preds = %197 = icmp sgt i8 %196, -1 br i1 %197, label %198, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -198: ; preds = %._crit_edge.i.i +198: ; preds = %._crit_edge.i12.i %199 = load <16 x i8>, ptr %.val.i, align 16, !noalias !6014 %200 = icmp slt <16 x i8> %199, zeroinitializer %201 = bitcast <16 x i1> %200 to i16 @@ -27264,8 +27267,8 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h89a2254c9734b07cE.exit.i: ; preds = %204 = zext nneg i16 %203 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %198, %._crit_edge.i.i - %.sroa.0.0.i4.i.i = phi i64 [ %204, %198 ], [ %194, %._crit_edge.i.i ] +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %198, %._crit_edge.i12.i + %.sroa.0.0.i4.i.i = phi i64 [ %204, %198 ], [ %194, %._crit_edge.i12.i ] %205 = sub i64 %.sroa.04.08.i, %.sroa.0.09.i.i %206 = sub i64 %.sroa.0.0.i4.i.i, %.sroa.0.09.i.i %207 = xor i64 %206, %205 @@ -27330,9 +27333,9 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(104) %211, ptr noundef nonnull align 1 dereferenceable(104) %173, i64 104, i1 false) br label %245 -245: ; preds = %236, %222, %.lr.ph.i8 +245: ; preds = %236, %222, %.lr.ph.i7 %exitcond.not.i = icmp eq i64 %.sroa.04.08.i, %17 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %.lr.ph.i8 + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %.lr.ph.i7 246: ; preds = %165 %247 = landingpad { ptr, i32 } @@ -27349,23 +27352,23 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit %250 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %250, i64 %.pre15.i.fr, i64 %249 %.pre = load i64, ptr %10, align 8, !alias.scope !5995 - br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread - -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i - %251 = phi i64 [ %11, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] - %252 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] - %253 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %254 = sub i64 %252, %251 - store i64 %254, ptr %253, align 8, !alias.scope !5995 + br label %251 + +251: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread + %252 = phi i64 [ %11, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] + %253 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] + %254 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %255 = sub i64 %253, %252 + store i64 %255, ptr %254, align 8, !alias.scope !5995 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !5995 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit -_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit", %23, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread - %.sroa.4.0.i = phi i64 [ %26, %23 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %.sroa.12.027, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit" ] - %.sroa.0.0.i = phi i64 [ %25, %23 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %.sroa.7.026, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit" ] - %255 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %256 = insertvalue { i64, i64 } %255, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %256 +_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit", %23, %251 + %.sroa.4.0.i = phi i64 [ %26, %23 ], [ undef, %251 ], [ %.sroa.12.026, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit" ] + %.sroa.0.0.i = phi i64 [ %25, %23 ], [ -9223372036854775807, %251 ], [ %.sroa.7.025, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit" ] + %256 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %257 = insertvalue { i64, i64 } %256, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %257 } ; Function Attrs: inlinehint nonlazybind uwtable diff --git a/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll b/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll index 68e4c9795f5..32302a2e577 100644 --- a/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll +++ b/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll @@ -528,9 +528,9 @@ define { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_re br i1 %38, label %47, label %39, !prof !96 39: ; preds = %.thread, %31 - %.sroa.4.0.i.ph.i47 = phi i64 [ %..i.i, %.thread ], [ %37, %31 ] - %40 = shl nuw i64 %.sroa.4.0.i.ph.i47, 7 - %41 = add nuw nsw i64 %.sroa.4.0.i.ph.i47, 16 + %.sroa.4.0.i.ph.i45 = phi i64 [ %..i.i, %.thread ], [ %37, %31 ] + %40 = shl nuw i64 %.sroa.4.0.i.ph.i45, 7 + %41 = add nuw nsw i64 %.sroa.4.0.i.ph.i45, 16 %42 = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %40, i64 %41) %43 = extractvalue { i64, i1 } %42, 1 br i1 %43, label %47, label %44, !prof !55 @@ -555,9 +555,9 @@ define { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_re br label %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit: ; preds = %49 - %55 = icmp samesign ult i64 %.sroa.4.0.i.ph.i47, 9 - %56 = add nsw i64 %.sroa.4.0.i.ph.i47, -1 - %57 = lshr i64 %.sroa.4.0.i.ph.i47, 3 + %55 = icmp samesign ult i64 %.sroa.4.0.i.ph.i45, 9 + %56 = add nsw i64 %.sroa.4.0.i.ph.i45, -1 + %57 = lshr i64 %.sroa.4.0.i.ph.i45, 3 %58 = mul nuw nsw i64 %57, 7 %.sroa.03.0.i.i = select i1 %55, i64 %56, i64 %58 %59 = getelementptr inbounds nuw i8, ptr %51, i64 %40 @@ -574,7 +574,7 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6af store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !91 %invariant.gep = getelementptr i8, ptr %59, i64 16 %60 = icmp eq i64 %7, 0 - br i1 %60, label %._crit_edge37, label %.preheader.lr.ph + br i1 %60, label %._crit_edge35, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit %61 = load ptr, ptr %0, align 8, !alias.scope !100, !noalias !101, !nonnull !9, !noundef !9 @@ -586,38 +586,38 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6af _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread: ; preds = %47, %53, %29 %.pn = phi { i64, i64 } [ %30, %29 ], [ %54, %53 ], [ %48, %47 ] - %.sroa.7.023 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.024 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.021 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.022 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5), !noalias !91 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17hc2c170a3beee1f28E.exit .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit - %.sroa.0.036 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.5.035 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.9.034 = phi i64 [ %7, %.preheader.lr.ph ], [ %95, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.13.033 = phi i16 [ %65, %.preheader.lr.ph ], [ %93, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %66 = icmp eq i16 %.sroa.13.033, 0 + %.sroa.0.034 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.5.033 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.9.032 = phi i64 [ %7, %.preheader.lr.ph ], [ %95, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.13.031 = phi i16 [ %65, %.preheader.lr.ph ], [ %93, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %66 = icmp eq i16 %.sroa.13.031, 0 br i1 %66, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.0.130 = phi ptr [ %67, %.noexc2 ], [ %.sroa.0.036, %.preheader ] - %.sroa.5.129 = phi i64 [ %71, %.noexc2 ], [ %.sroa.5.035, %.preheader ] - %67 = getelementptr inbounds nuw i8, ptr %.sroa.0.130, i64 16 + %.sroa.0.128 = phi ptr [ %67, %.noexc2 ], [ %.sroa.0.034, %.preheader ] + %.sroa.5.127 = phi i64 [ %71, %.noexc2 ], [ %.sroa.5.033, %.preheader ] + %67 = getelementptr inbounds nuw i8, ptr %.sroa.0.128, i64 16 %68 = load <16 x i8>, ptr %67, align 16, !noalias !105 %69 = icmp slt <16 x i8> %68, zeroinitializer %70 = bitcast <16 x i1> %69 to i16 - %71 = add i64 %.sroa.5.129, 16 + %71 = add i64 %.sroa.5.127, 16 %72 = icmp eq i16 %70, -1 br i1 %72, label %.noexc2, label %._crit_edge.loopexit -._crit_edge37: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit +._crit_edge35: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit %73 = sub i64 %.sroa.03.0.i.i, %7 store i64 %73, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !91 store i64 %7, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !91 br label %74 -74: ; preds = %74, %._crit_edge37 - %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge37 ], [ %79, %74 ] +74: ; preds = %74, %._crit_edge35 + %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge35 ], [ %79, %74 ] %75 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %76 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i %77 = load i64, ptr %75, align 8 @@ -658,15 +658,15 @@ _ZN9hashbrown3raw5inner11TableLayout20calculate_layout_for17hd3f746c8628a2deaE.l br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.033, %.preheader ], [ %89, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.035, %.preheader ], [ %71, %._crit_edge.loopexit ] - %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.036, %.preheader ], [ %67, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.031, %.preheader ], [ %89, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.033, %.preheader ], [ %71, %._crit_edge.loopexit ] + %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.034, %.preheader ], [ %67, %._crit_edge.loopexit ] %90 = add i16 %.sroa.13.1.lcssa, -1 %91 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %92 = zext nneg i16 %91 to i64 %93 = and i16 %90, %.sroa.13.1.lcssa %94 = add i64 %.sroa.5.1.lcssa, %92 - %95 = add i64 %.sroa.9.034, -1 + %95 = add i64 %.sroa.9.032, -1 %96 = tail call fastcc noundef i64 @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h57caef270687ceb1E"(ptr nonnull align 1 poison, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %94) %.sroa.0.09.i = and i64 %56, %96 %97 = getelementptr inbounds nuw i8, ptr %59, i64 %.sroa.0.09.i @@ -729,59 +729,58 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %131 = getelementptr inbounds i8, ptr %59, i64 %130 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(128) %131, ptr noundef nonnull align 1 dereferenceable(128) %128, i64 128, i1 false) %132 = icmp eq i64 %95, 0 - br i1 %132, label %._crit_edge37, label %.preheader + br i1 %132, label %._crit_edge35, label %.preheader 133: ; preds = %10 tail call void @llvm.experimental.noalias.scope.decl(metadata !124) %.val9.i = load ptr, ptr %0, align 8, !alias.scope !124 - %134 = lshr i64 %15, 4 - %135 = and i64 %15, 15 - %.not1.i.i.i.i = icmp ne i64 %135, 0 - %136 = zext i1 %.not1.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %134, %136 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %15, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread20.i, label %.lr.ph.i.i + +_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread20.i: ; preds = %133 + %134 = icmp ne ptr %.val9.i, null + tail call void @llvm.assume(i1 %134) + br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit .lr.ph.i.i: ; preds = %133 - %137 = icmp ne ptr %.val9.i, null - tail call void @llvm.assume(i1 %137) - br label %138 - -138: ; preds = %138, %.lr.ph.i.i - %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %140, %138 ] - %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %139, %138 ] - %139 = add i64 %.sroa.03.06.i.i, 16 - %140 = add nsw i64 %.sroa.04.07.i.i, -1 - %141 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.03.06.i.i - %142 = load <16 x i8>, ptr %141, align 16, !noalias !127 - %.lobit.i.i.i = ashr <16 x i8> %142, splat (i8 7) - %143 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %144 = or <2 x i64> %143, splat (i64 -9187201950435737472) - store <2 x i64> %144, ptr %141, align 16, !noalias !130 - %.not.i.i = icmp eq i64 %140, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i, label %138 - -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i: ; preds = %138, %133 - %145 = icmp ne ptr %.val9.i, null - tail call void @llvm.assume(i1 %145) - %..i.i5 = tail call i64 @llvm.umax.i64(i64 %15, i64 16) - %.10.i.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) - %146 = getelementptr inbounds i8, ptr %.val9.i, i64 %..i.i5 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %146, ptr nonnull align 1 %.val9.i, i64 %.10.i.i, i1 false), !noalias !124 - %.not13.i = icmp eq i64 %15, 0 - br i1 %.not13.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %.lr.ph.i6 - -.lr.ph.i6: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i + %135 = lshr i64 %15, 4 + %136 = and i64 %15, 15 + %.not1.i.i.i.i = icmp ne i64 %136, 0 + %137 = zext i1 %.not1.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %135, %137 + %138 = icmp ne ptr %.val9.i, null + tail call void @llvm.assume(i1 %138) + br label %140 + +._crit_edge.i.i: ; preds = %140 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %15, i64 16) + %spec.select26.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) + %139 = getelementptr inbounds i8, ptr %.val9.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %139, ptr nonnull align 1 %.val9.i, i64 %spec.select26.i, i1 false), !noalias !124 %invariant.gep.i = getelementptr i8, ptr %.val9.i, i64 16 br label %147 -147: ; preds = %208, %.lr.ph.i6 - %.sroa.04.08.i = phi i64 [ 0, %.lr.ph.i6 ], [ %148, %208 ] +140: ; preds = %140, %.lr.ph.i.i + %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %142, %140 ] + %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %141, %140 ] + %141 = add i64 %.sroa.03.06.i.i, 16 + %142 = add i64 %.sroa.04.07.i.i, -1 + %143 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.03.06.i.i + %144 = load <16 x i8>, ptr %143, align 16, !noalias !127 + %.lobit.i.i.i = ashr <16 x i8> %144, splat (i8 7) + %145 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %146 = or <2 x i64> %145, splat (i64 -9187201950435737472) + store <2 x i64> %146, ptr %143, align 16, !noalias !130 + %.not.i.i = icmp eq i64 %142, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %140 + +147: ; preds = %208, %._crit_edge.i.i + %.sroa.04.08.i = phi i64 [ 0, %._crit_edge.i.i ], [ %148, %208 ] %148 = add nuw i64 %.sroa.04.08.i, 1 %149 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.04.08.i %150 = load i8, ptr %149, align 1, !noalias !124, !noundef !9 - %.not.i7 = icmp eq i8 %150, -128 - br i1 %.not.i7, label %151, label %208 + %.not.i5 = icmp eq i8 %150, -128 + br i1 %.not.i5, label %151, label %208 151: ; preds = %147 %152 = shl i64 %.sroa.04.08.i, 7 @@ -797,24 +796,24 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i: ; preds = %157 = icmp slt <16 x i8> %.sroa.0.0.copyload.i810.i.i, zeroinitializer %158 = bitcast <16 x i1> %157 to i16 %159 = icmp eq i16 %158, 0 - br i1 %159, label %.lr.ph.i11.i, label %._crit_edge.i.i + br i1 %159, label %.lr.ph.i12.i, label %._crit_edge.i11.i -.lr.ph.i11.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i, %.lr.ph.i11.i - %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i9, %.lr.ph.i11.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ] - %.sroa.7.011.i.i = phi i64 [ %160, %.lr.ph.i11.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ] +.lr.ph.i12.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i, %.lr.ph.i12.i + %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i7, %.lr.ph.i12.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ] + %.sroa.7.011.i.i = phi i64 [ %160, %.lr.ph.i12.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ] %160 = add i64 %.sroa.7.011.i.i, 16 %161 = add i64 %160, %.sroa.0.012.i.i - %.sroa.0.0.i.i9 = and i64 %161, %13 - %162 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.0.0.i.i9 + %.sroa.0.0.i.i7 = and i64 %161, %13 + %162 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.0.0.i.i7 %.sroa.0.0.copyload.i8.i.i = load <16 x i8>, ptr %162, align 1, !noalias !133 %163 = icmp slt <16 x i8> %.sroa.0.0.copyload.i8.i.i, zeroinitializer %164 = bitcast <16 x i1> %163 to i16 %165 = icmp eq i16 %164, 0 - br i1 %165, label %.lr.ph.i11.i, label %._crit_edge.i.i + br i1 %165, label %.lr.ph.i12.i, label %._crit_edge.i11.i -._crit_edge.i.i: ; preds = %.lr.ph.i11.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ], [ %.sroa.0.0.i.i9, %.lr.ph.i11.i ] - %.lcssa.i.i = phi i16 [ %158, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ], [ %164, %.lr.ph.i11.i ] +._crit_edge.i11.i: ; preds = %.lr.ph.i12.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ], [ %.sroa.0.0.i.i7, %.lr.ph.i12.i ] + %.lcssa.i.i = phi i16 [ %158, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ], [ %164, %.lr.ph.i12.i ] %166 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %167 = zext nneg i16 %166 to i64 %168 = add i64 %.sroa.0.0.lcssa.i.i, %167 @@ -824,7 +823,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i: ; preds = %172 = icmp sgt i8 %171, -1 br i1 %172, label %173, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -173: ; preds = %._crit_edge.i.i +173: ; preds = %._crit_edge.i11.i %174 = load <16 x i8>, ptr %.val9.i, align 16, !noalias !136 %175 = icmp slt <16 x i8> %174, zeroinitializer %176 = bitcast <16 x i1> %175 to i16 @@ -834,8 +833,8 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i: ; preds = %179 = zext nneg i16 %178 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %173, %._crit_edge.i.i - %.sroa.0.0.i4.i.i = phi i64 [ %179, %173 ], [ %169, %._crit_edge.i.i ] +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %173, %._crit_edge.i11.i + %.sroa.0.0.i4.i.i = phi i64 [ %179, %173 ], [ %169, %._crit_edge.i11.i ] %180 = sub i64 %.sroa.04.08.i, %.sroa.0.09.i.i %181 = sub i64 %.sroa.0.0.i4.i.i, %.sroa.0.09.i.i %182 = xor i64 %181, %180 @@ -894,15 +893,15 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %exitcond.not.i = icmp eq i64 %.sroa.04.08.i, %13 br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %147 -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit: ; preds = %208, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit: ; preds = %208, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread20.i %209 = getelementptr inbounds nuw i8, ptr %0, i64 16 %210 = sub i64 %.sroa.03.0.i, %7 store i64 %210, ptr %209, align 8, !alias.scope !124 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17hc2c170a3beee1f28E.exit _ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17hc2c170a3beee1f28E.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit", %19, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit - %.sroa.4.0.i = phi i64 [ %22, %19 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.024, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] - %.sroa.0.0.i = phi i64 [ %21, %19 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.023, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] + %.sroa.4.0.i = phi i64 [ %22, %19 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.022, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] + %.sroa.0.0.i = phi i64 [ %21, %19 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.021, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] %211 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 %212 = insertvalue { i64, i64 } %211, i64 %.sroa.4.0.i, 1 ret { i64, i64 } %212 diff --git a/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll b/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll index c7c67146d94..9f359abdebf 100644 --- a/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll +++ b/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll @@ -635,9 +635,9 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a2 %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !45 %invariant.gep = getelementptr i8, ptr %66, i64 16 - %invariant.gep33 = getelementptr i8, ptr %66, i64 -168 + %invariant.gep31 = getelementptr i8, ptr %66, i64 -168 %67 = icmp eq i64 %9, 0 - br i1 %67, label %._crit_edge39, label %.preheader.lr.ph + br i1 %67, label %._crit_edge37, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit %68 = load ptr, ptr %0, align 8, !alias.scope !54, !noalias !55, !nonnull !3, !noundef !3 @@ -645,48 +645,48 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a2 %70 = icmp slt <16 x i8> %69, zeroinitializer %71 = bitcast <16 x i1> %70 to i16 %72 = xor i16 %71, -1 - %invariant.gep53 = getelementptr i8, ptr %68, i64 -168 + %invariant.gep51 = getelementptr i8, ptr %68, i64 -168 br label %.preheader _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread: ; preds = %55, %60, %39 %.pn = phi { i64, i64 } [ %40, %39 ], [ %61, %60 ], [ %56, %55 ] - %.sroa.7.024 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.025 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.022 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.023 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5), !noalias !45 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h6edc8a3c1f0ada68E.exit .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit - %.sroa.0.038 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.5.037 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.9.036 = phi i64 [ %9, %.preheader.lr.ph ], [ %103, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.13.035 = phi i16 [ %72, %.preheader.lr.ph ], [ %101, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %73 = icmp eq i16 %.sroa.13.035, 0 + %.sroa.0.036 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.5.035 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.9.034 = phi i64 [ %9, %.preheader.lr.ph ], [ %103, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.13.033 = phi i16 [ %72, %.preheader.lr.ph ], [ %101, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %73 = icmp eq i16 %.sroa.13.033, 0 br i1 %73, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.0.130 = phi ptr [ %74, %.noexc2 ], [ %.sroa.0.038, %.preheader ] - %.sroa.5.129 = phi i64 [ %78, %.noexc2 ], [ %.sroa.5.037, %.preheader ] - %74 = getelementptr inbounds nuw i8, ptr %.sroa.0.130, i64 16 + %.sroa.0.128 = phi ptr [ %74, %.noexc2 ], [ %.sroa.0.036, %.preheader ] + %.sroa.5.127 = phi i64 [ %78, %.noexc2 ], [ %.sroa.5.035, %.preheader ] + %74 = getelementptr inbounds nuw i8, ptr %.sroa.0.128, i64 16 %75 = load <16 x i8>, ptr %74, align 16, !noalias !59 %76 = icmp slt <16 x i8> %75, zeroinitializer %77 = bitcast <16 x i1> %76 to i16 - %78 = add i64 %.sroa.5.129, 16 + %78 = add i64 %.sroa.5.127, 16 %79 = icmp eq i16 %77, -1 br i1 %79, label %.noexc2, label %._crit_edge.loopexit -._crit_edge39.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit +._crit_edge37.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit %.pre = load i64, ptr %8, align 8, !alias.scope !54, !noalias !55 - br label %._crit_edge39 + br label %._crit_edge37 -._crit_edge39: ; preds = %._crit_edge39.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit - %80 = phi i64 [ %.pre, %._crit_edge39.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit ] +._crit_edge37: ; preds = %._crit_edge37.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit + %80 = phi i64 [ %.pre, %._crit_edge37.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit ] %81 = sub i64 %.sroa.03.0.i.i, %80 store i64 %81, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !45 store i64 %80, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !45 br label %82 -82: ; preds = %82, %._crit_edge39 - %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge39 ], [ %87, %82 ] +82: ; preds = %82, %._crit_edge37 + %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge37 ], [ %87, %82 ] %83 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %84 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i %85 = load i64, ptr %83, align 8 @@ -727,15 +727,15 @@ _ZN9hashbrown3raw5inner11TableLayout20calculate_layout_for17hd3f746c8628a2deaE.e br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.035, %.preheader ], [ %97, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.037, %.preheader ], [ %78, %._crit_edge.loopexit ] - %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.038, %.preheader ], [ %74, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.033, %.preheader ], [ %97, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.035, %.preheader ], [ %78, %._crit_edge.loopexit ] + %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.036, %.preheader ], [ %74, %._crit_edge.loopexit ] %98 = add i16 %.sroa.13.1.lcssa, -1 %99 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %100 = zext nneg i16 %99 to i64 %101 = and i16 %98, %.sroa.13.1.lcssa %102 = add i64 %.sroa.5.1.lcssa, %100 - %103 = add i64 %.sroa.9.036, -1 + %103 = add i64 %.sroa.9.034, -1 %104 = call fastcc noundef i64 @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h864b9b38086ca43fE"(ptr noundef nonnull align 1 %6, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %102) %.sroa.0.09.i = and i64 %63, %104 %105 = getelementptr inbounds nuw i8, ptr %66, i64 %.sroa.0.09.i @@ -791,65 +791,64 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %gep = getelementptr i8, ptr %invariant.gep, i64 %132 store i8 %130, ptr %gep, align 1 %.neg.i.i = mul i64 %102, -168 - %gep54 = getelementptr i8, ptr %invariant.gep53, i64 %.neg.i.i + %gep52 = getelementptr i8, ptr %invariant.gep51, i64 %.neg.i.i %.neg72.i.i = mul i64 %.sroa.0.0.i4.i, -168 - %gep34 = getelementptr i8, ptr %invariant.gep33, i64 %.neg72.i.i - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(168) %gep34, ptr noundef nonnull align 1 dereferenceable(168) %gep54, i64 168, i1 false) + %gep32 = getelementptr i8, ptr %invariant.gep31, i64 %.neg72.i.i + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(168) %gep32, ptr noundef nonnull align 1 dereferenceable(168) %gep52, i64 168, i1 false) %134 = icmp eq i64 %103, 0 - br i1 %134, label %._crit_edge39.loopexit, label %.preheader + br i1 %134, label %._crit_edge37.loopexit, label %.preheader 135: ; preds = %12 call void @llvm.experimental.noalias.scope.decl(metadata !75) %.val10.i = load ptr, ptr %0, align 8, !alias.scope !75 - %136 = lshr i64 %17, 4 - %137 = and i64 %17, 15 - %.not1.i.i.i.i = icmp ne i64 %137, 0 - %138 = zext i1 %.not1.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %136, %138 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %17, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread23.i, label %.lr.ph.i.i + +_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread23.i: ; preds = %135 + %136 = icmp ne ptr %.val10.i, null + call void @llvm.assume(i1 %136) + br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit .lr.ph.i.i: ; preds = %135 - %139 = icmp ne ptr %.val10.i, null - call void @llvm.assume(i1 %139) - br label %140 - -140: ; preds = %140, %.lr.ph.i.i - %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %142, %140 ] - %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %141, %140 ] - %141 = add i64 %.sroa.03.06.i.i, 16 - %142 = add nsw i64 %.sroa.04.07.i.i, -1 - %143 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.03.06.i.i - %144 = load <16 x i8>, ptr %143, align 16, !noalias !78 - %.lobit.i.i.i = ashr <16 x i8> %144, splat (i8 7) - %145 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %146 = or <2 x i64> %145, splat (i64 -9187201950435737472) - store <2 x i64> %146, ptr %143, align 16, !noalias !81 - %.not.i.i = icmp eq i64 %142, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i, label %140 - -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i: ; preds = %140, %135 - %147 = icmp ne ptr %.val10.i, null - call void @llvm.assume(i1 %147) - %..i.i6 = call i64 @llvm.umax.i64(i64 %17, i64 16) - %.10.i.i = call i64 @llvm.umin.i64(i64 %17, i64 16) - %148 = getelementptr inbounds i8, ptr %.val10.i, i64 %..i.i6 - call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %148, ptr nonnull align 1 %.val10.i, i64 %.10.i.i, i1 false), !noalias !75 - %.not17.i = icmp eq i64 %17, 0 - br i1 %.not17.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %.lr.ph.i7 - -.lr.ph.i7: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i + %137 = lshr i64 %17, 4 + %138 = and i64 %17, 15 + %.not1.i.i.i.i = icmp ne i64 %138, 0 + %139 = zext i1 %.not1.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %137, %139 + %140 = icmp ne ptr %.val10.i, null + call void @llvm.assume(i1 %140) + br label %142 + +._crit_edge.i.i: ; preds = %142 + %spec.select.i = call i64 @llvm.umax.i64(i64 %17, i64 16) + %spec.select28.i = call i64 @llvm.umin.i64(i64 %17, i64 16) + %141 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i + call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %141, ptr nonnull align 1 %.val10.i, i64 %spec.select28.i, i1 false), !noalias !75 %invariant.gep11.i = getelementptr i8, ptr %.val10.i, i64 -168 %invariant.gep8.i = getelementptr i8, ptr %.val10.i, i64 16 br label %149 -149: ; preds = %204, %.lr.ph.i7 - %.sroa.04.010.i = phi i64 [ 0, %.lr.ph.i7 ], [ %150, %204 ] +142: ; preds = %142, %.lr.ph.i.i + %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %144, %142 ] + %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %143, %142 ] + %143 = add i64 %.sroa.03.06.i.i, 16 + %144 = add i64 %.sroa.04.07.i.i, -1 + %145 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.03.06.i.i + %146 = load <16 x i8>, ptr %145, align 16, !noalias !78 + %.lobit.i.i.i = ashr <16 x i8> %146, splat (i8 7) + %147 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %148 = or <2 x i64> %147, splat (i64 -9187201950435737472) + store <2 x i64> %148, ptr %145, align 16, !noalias !81 + %.not.i.i = icmp eq i64 %144, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %142 + +149: ; preds = %204, %._crit_edge.i.i + %.sroa.04.010.i = phi i64 [ 0, %._crit_edge.i.i ], [ %150, %204 ] %150 = add nuw i64 %.sroa.04.010.i, 1 %151 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.04.010.i %152 = load i8, ptr %151, align 1, !noalias !75, !noundef !3 - %.not.i8 = icmp eq i8 %152, -128 - br i1 %.not.i8, label %153, label %204 + %.not.i6 = icmp eq i8 %152, -128 + br i1 %.not.i6, label %153, label %204 153: ; preds = %149 %.neg.i = mul i64 %.sroa.04.010.i, -168 @@ -864,24 +863,24 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i: ; preds = %156 = icmp slt <16 x i8> %.sroa.0.0.copyload.i810.i.i, zeroinitializer %157 = bitcast <16 x i1> %156 to i16 %158 = icmp eq i16 %157, 0 - br i1 %158, label %.lr.ph.i12.i, label %._crit_edge.i.i + br i1 %158, label %.lr.ph.i13.i, label %._crit_edge.i12.i -.lr.ph.i12.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i, %.lr.ph.i12.i - %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i10, %.lr.ph.i12.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ] - %.sroa.7.011.i.i = phi i64 [ %159, %.lr.ph.i12.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ] +.lr.ph.i13.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i, %.lr.ph.i13.i + %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ] + %.sroa.7.011.i.i = phi i64 [ %159, %.lr.ph.i13.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ] %159 = add i64 %.sroa.7.011.i.i, 16 %160 = add i64 %159, %.sroa.0.012.i.i - %.sroa.0.0.i.i10 = and i64 %160, %15 - %161 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i10 + %.sroa.0.0.i.i8 = and i64 %160, %15 + %161 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i8 %.sroa.0.0.copyload.i8.i.i = load <16 x i8>, ptr %161, align 1, !noalias !84 %162 = icmp slt <16 x i8> %.sroa.0.0.copyload.i8.i.i, zeroinitializer %163 = bitcast <16 x i1> %162 to i16 %164 = icmp eq i16 %163, 0 - br i1 %164, label %.lr.ph.i12.i, label %._crit_edge.i.i + br i1 %164, label %.lr.ph.i13.i, label %._crit_edge.i12.i -._crit_edge.i.i: ; preds = %.lr.ph.i12.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ], [ %.sroa.0.0.i.i10, %.lr.ph.i12.i ] - %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ], [ %163, %.lr.ph.i12.i ] +._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ], [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ] + %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ], [ %163, %.lr.ph.i13.i ] %165 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %166 = zext nneg i16 %165 to i64 %167 = add i64 %.sroa.0.0.lcssa.i.i, %166 @@ -891,7 +890,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i: ; preds = %171 = icmp sgt i8 %170, -1 br i1 %171, label %172, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -172: ; preds = %._crit_edge.i.i +172: ; preds = %._crit_edge.i12.i %173 = load <16 x i8>, ptr %.val10.i, align 16, !noalias !87 %174 = icmp slt <16 x i8> %173, zeroinitializer %175 = bitcast <16 x i1> %174 to i16 @@ -901,8 +900,8 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i: ; preds = %178 = zext nneg i16 %177 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %172, %._crit_edge.i.i - %.sroa.0.0.i4.i.i = phi i64 [ %178, %172 ], [ %168, %._crit_edge.i.i ] +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %172, %._crit_edge.i12.i + %.sroa.0.0.i4.i.i = phi i64 [ %178, %172 ], [ %168, %._crit_edge.i12.i ] %179 = sub i64 %.sroa.04.010.i, %.sroa.0.09.i.i %180 = sub i64 %.sroa.0.0.i4.i.i, %.sroa.0.09.i.i %181 = xor i64 %180, %179 @@ -960,15 +959,15 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %exitcond.not.i = icmp eq i64 %.sroa.04.010.i, %15 br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %149 -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit: ; preds = %204, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.i +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit: ; preds = %204, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread23.i %205 = getelementptr inbounds nuw i8, ptr %0, i64 16 %206 = sub i64 %.sroa.03.0.i, %9 store i64 %206, ptr %205, align 8, !alias.scope !75 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h6edc8a3c1f0ada68E.exit _ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h6edc8a3c1f0ada68E.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit", %21, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit - %.sroa.4.0.i = phi i64 [ %24, %21 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.025, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] - %.sroa.0.0.i = phi i64 [ %23, %21 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.024, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] + %.sroa.4.0.i = phi i64 [ %24, %21 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.023, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] + %.sroa.0.0.i = phi i64 [ %23, %21 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.022, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] %207 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 %208 = insertvalue { i64, i64 } %207, i64 %.sroa.4.0.i, 1 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) diff --git a/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll b/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll index b906244e9cd..0084957734b 100644 --- a/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll +++ b/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll @@ -1132,7 +1132,7 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exi store i64 0, ptr %.sroa.620.sroa.6.0..sroa.620.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !89 %66 = load i64, ptr %8, align 8, !alias.scope !98, !noalias !99, !noundef !3 %67 = icmp eq i64 %66, 0 - br i1 %67, label %._crit_edge55, label %.preheader.lr.ph + br i1 %67, label %._crit_edge54, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit %68 = load ptr, ptr %0, align 8, !alias.scope !98, !noalias !99, !nonnull !3, !noundef !3 @@ -1141,13 +1141,13 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exi %71 = bitcast <16 x i1> %70 to i16 %72 = xor i16 %71, -1 %invariant.gep = getelementptr i8, ptr %61, i64 16 - %invariant.gep77 = getelementptr i8, ptr %61, i64 -24 + %invariant.gep76 = getelementptr i8, ptr %61, i64 -24 br label %.preheader _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread: ; preds = %55, %57, %59 %.pn = phi { i64, i64 } [ %60, %59 ], [ %58, %57 ], [ %56, %55 ] - %.sroa.7.036 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.037 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.035 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.036 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6), !noalias !89 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i @@ -1158,43 +1158,43 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exi br label %common.resume .preheader: ; preds = %.preheader.lr.ph, %134 - %.sroa.026.054 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.026.1.lcssa, %134 ] - %.sroa.5.053 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %134 ] - %.sroa.9.052 = phi i64 [ %66, %.preheader.lr.ph ], [ %106, %134 ] - %.sroa.13.051 = phi i16 [ %72, %.preheader.lr.ph ], [ %104, %134 ] - %.not.i246 = icmp eq i16 %.sroa.13.051, 0 - br i1 %.not.i246, label %.noexc3, label %._crit_edge + %.sroa.025.053 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.025.1.lcssa, %134 ] + %.sroa.5.052 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %134 ] + %.sroa.9.051 = phi i64 [ %66, %.preheader.lr.ph ], [ %106, %134 ] + %.sroa.13.050 = phi i16 [ %72, %.preheader.lr.ph ], [ %104, %134 ] + %.not.i245 = icmp eq i16 %.sroa.13.050, 0 + br i1 %.not.i245, label %.noexc3, label %._crit_edge .noexc3: ; preds = %.preheader, %.noexc3 - %.sroa.026.148 = phi ptr [ %75, %.noexc3 ], [ %.sroa.026.054, %.preheader ] - %.sroa.5.147 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.053, %.preheader ] - %75 = getelementptr inbounds nuw i8, ptr %.sroa.026.148, i64 16 + %.sroa.025.147 = phi ptr [ %75, %.noexc3 ], [ %.sroa.025.053, %.preheader ] + %.sroa.5.146 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.052, %.preheader ] + %75 = getelementptr inbounds nuw i8, ptr %.sroa.025.147, i64 16 %76 = load <16 x i8>, ptr %75, align 16 %77 = icmp slt <16 x i8> %76, zeroinitializer %78 = bitcast <16 x i1> %77 to i16 - %79 = add i64 %.sroa.5.147, 16 + %79 = add i64 %.sroa.5.146, 16 %.not.i2 = icmp eq i16 %78, -1 br i1 %.not.i2, label %.noexc3, label %._crit_edge.loopexit -._crit_edge55.loopexit: ; preds = %134 - %.pre67 = load i64, ptr %8, align 8, !alias.scope !98, !noalias !99 - br label %._crit_edge55 +._crit_edge54.loopexit: ; preds = %134 + %.pre66 = load i64, ptr %8, align 8, !alias.scope !98, !noalias !99 + br label %._crit_edge54 -._crit_edge55: ; preds = %._crit_edge55.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit - %80 = phi i64 [ %.pre67, %._crit_edge55.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit ] +._crit_edge54: ; preds = %._crit_edge54.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit + %80 = phi i64 [ %.pre66, %._crit_edge54.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit ] %81 = sub i64 %.sroa.02.0.i.i, %80 store i64 %81, ptr %.sroa.620.sroa.5.0..sroa.620.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !89 store i64 %80, ptr %.sroa.620.sroa.6.0..sroa.620.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !89 invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17he19fe9ca5101d9d2E(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %.sroa.620.0..sroa_idx.i.i, i64 noundef 4) to label %_ZN4core10intrinsics25typed_swap_nonoverlapping17h63504aec4c741120E.exit unwind label %82 -82: ; preds = %._crit_edge55 +82: ; preds = %._crit_edge54 %83 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking19panic_cannot_unwind17h82fcc9c695da0defE() #16 unreachable -_ZN4core10intrinsics25typed_swap_nonoverlapping17h63504aec4c741120E.exit: ; preds = %._crit_edge55 +_ZN4core10intrinsics25typed_swap_nonoverlapping17h63504aec4c741120E.exit: ; preds = %._crit_edge54 call void @llvm.experimental.noalias.scope.decl(metadata !100) call void @llvm.experimental.noalias.scope.decl(metadata !103) %.val1.i.i = load i64, ptr %.sroa.5.0..sroa_idx.i.i, align 8, !alias.scope !106 @@ -1236,15 +1236,15 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h59ce126c8eb9b7f7E.exit.i. br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.051, %.preheader ], [ %100, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.053, %.preheader ], [ %79, %._crit_edge.loopexit ] - %.sroa.026.1.lcssa = phi ptr [ %.sroa.026.054, %.preheader ], [ %75, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.050, %.preheader ], [ %100, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.052, %.preheader ], [ %79, %._crit_edge.loopexit ] + %.sroa.025.1.lcssa = phi ptr [ %.sroa.025.053, %.preheader ], [ %75, %._crit_edge.loopexit ] %101 = add i16 %.sroa.13.1.lcssa, -1 %102 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %103 = zext nneg i16 %102 to i64 %104 = and i16 %101, %.sroa.13.1.lcssa %105 = add i64 %.sroa.5.1.lcssa, %103 - %106 = add i64 %.sroa.9.052, -1 + %106 = add i64 %.sroa.9.051, -1 %107 = load ptr, ptr %0, align 8, !alias.scope !107, !noalias !110, !nonnull !3, !noundef !3 %108 = sub nsw i64 0, %105 %109 = getelementptr inbounds { { { { { ptr, i64 } }, {} }, {} }, ptr }, ptr %107, i64 %108 @@ -1311,235 +1311,245 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h59ce126c8eb9b7f7E.exit.i. %141 = getelementptr i8, ptr %140, i64 %.neg.i.i %142 = getelementptr i8, ptr %141, i64 -24 %.neg69.i.i = mul i64 %.sroa.0.0.i4.i.i, -24 - %gep78 = getelementptr i8, ptr %invariant.gep77, i64 %.neg69.i.i - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep78, ptr noundef nonnull align 1 dereferenceable(24) %142, i64 24, i1 false) + %gep77 = getelementptr i8, ptr %invariant.gep76, i64 %.neg69.i.i + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep77, ptr noundef nonnull align 1 dereferenceable(24) %142, i64 24, i1 false) %143 = icmp eq i64 %106, 0 - br i1 %143, label %._crit_edge55.loopexit, label %.preheader + br i1 %143, label %._crit_edge54.loopexit, label %.preheader -common.resume: ; preds = %171, %73 - %common.resume.op = phi { ptr, i32 } [ %74, %73 ], [ %172, %171 ] +common.resume: ; preds = %173, %73 + %common.resume.op = phi { ptr, i32 } [ %74, %73 ], [ %174, %173 ] resume { ptr, i32 } %common.resume.op 144: ; preds = %12 tail call void @llvm.experimental.noalias.scope.decl(metadata !114) %.val10.i = load ptr, ptr %0, align 8, !alias.scope !114 - %145 = lshr i64 %17, 4 - %146 = and i64 %17, 15 - %.not9.i.i.i.i = icmp ne i64 %146, 0 - %147 = zext i1 %.not9.i.i.i.i to i64 - %.sroa.05.0.i.i.i.i = add nuw nsw i64 %145, %147 - %.not1.i.i = icmp eq i64 %.sroa.05.0.i.i.i.i, 0 - br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i, label %.lr.ph.i.i7 + %.not1.i.i = icmp eq i64 %17, 0 + br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread, label %.lr.ph.i.i7 + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread: ; preds = %144 + %145 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %145) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !114 + br label %241 .lr.ph.i.i7: ; preds = %144 - %148 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %148) - br label %149 - -149: ; preds = %149, %.lr.ph.i.i7 - %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %150, %149 ] - %.sroa.5.02.i.i = phi i64 [ %.sroa.05.0.i.i.i.i, %.lr.ph.i.i7 ], [ %151, %149 ] - %150 = add i64 %.sroa.0.03.i.i, 16 - %151 = add nsw i64 %.sroa.5.02.i.i, -1 - %152 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sroa.0.03.i.i - %153 = load <16 x i8>, ptr %152, align 16, !noalias !114 - %.lobit.i.i.i.i = ashr <16 x i8> %153, splat (i8 7) - %154 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> - %155 = or <2 x i64> %154, splat (i64 -9187201950435737472) - store <2 x i64> %155, ptr %152, align 16, !noalias !114 - %.not.i.i = icmp eq i64 %151, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i, label %149 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i: ; preds = %149, %144 - %156 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %156) - %..i.i8 = tail call i64 @llvm.umax.i64(i64 %17, i64 16) - %.6.i.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) - %157 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %..i.i8 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %157, ptr nonnull align 1 %.val10.i, i64 %.6.i.i, i1 false), !noalias !114 + %146 = lshr i64 %17, 4 + %147 = and i64 %17, 15 + %.not9.i.i.i.i = icmp ne i64 %147, 0 + %148 = zext i1 %.not9.i.i.i.i to i64 + %.sroa.05.0.i.i.i.i = add nuw nsw i64 %146, %148 + %149 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %149) + br label %151 + +._crit_edge.i.i8: ; preds = %151 + %150 = icmp ult i64 %17, 16 + br i1 %150, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i, label %.lr.ph.i, !prof !117 + +151: ; preds = %151, %.lr.ph.i.i7 + %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %152, %151 ] + %.sroa.5.02.i.i = phi i64 [ %.sroa.05.0.i.i.i.i, %.lr.ph.i.i7 ], [ %153, %151 ] + %152 = add i64 %.sroa.0.03.i.i, 16 + %153 = add i64 %.sroa.5.02.i.i, -1 + %154 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sroa.0.03.i.i + %155 = load <16 x i8>, ptr %154, align 16, !noalias !114 + %.lobit.i.i.i.i = ashr <16 x i8> %155, splat (i8 7) + %156 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> + %157 = or <2 x i64> %156, splat (i64 -9187201950435737472) + store <2 x i64> %157, ptr %154, align 16, !noalias !114 + %.not.i.i = icmp eq i64 %153, 0 + br i1 %.not.i.i, label %._crit_edge.i.i8, label %151 + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i: ; preds = %._crit_edge.i.i8 + br label %.lr.ph.i + +.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i, %._crit_edge.i.i8 + %.sink25.i = phi i64 [ 16, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i ], [ %17, %._crit_edge.i.i8 ] + %.sink24.i = phi i64 [ %17, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i ], [ 16, %._crit_edge.i.i8 ] + %158 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sink25.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %158, ptr nonnull align 1 %.val10.i, i64 %.sink24.i, i1 false), !noalias !114 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !114 - %158 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr @_ZN4core3ops8function6FnOnce9call_once17h2cee6687614f72c9E, ptr %158, align 8, !noalias !114 - %159 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 24, ptr %159, align 8, !noalias !114 + %159 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr @_ZN4core3ops8function6FnOnce9call_once17h2cee6687614f72c9E, ptr %159, align 8, !noalias !114 + %160 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 24, ptr %160, align 8, !noalias !114 store ptr %0, ptr %5, align 8, !noalias !114 - %.not8.i = icmp eq i64 %17, 0 - br i1 %.not8.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread, label %.lr.ph.i - -.lr.ph.i: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i, %231 - %.sroa.0.17.i = phi i64 [ %.sroa.0.1.i10, %231 ], [ 1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i ] - %.sroa.0.06.i = phi i64 [ %.sroa.0.17.i, %231 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i ] - %160 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %161 = getelementptr inbounds nuw i8, ptr %160, i64 %.sroa.0.06.i - %162 = load i8, ptr %161, align 1, !noundef !3 - %.not.i9 = icmp eq i8 %162, -128 - br i1 %.not.i9, label %163, label %231 - -163: ; preds = %.lr.ph.i + br label %161 + +161: ; preds = %233, %.lr.ph.i + %.sroa.0.17.i = phi i64 [ 1, %.lr.ph.i ], [ %.sroa.0.1.i10, %233 ] + %.sroa.0.06.i = phi i64 [ 0, %.lr.ph.i ], [ %.sroa.0.17.i, %233 ] + %162 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 + %163 = getelementptr inbounds nuw i8, ptr %162, i64 %.sroa.0.06.i + %164 = load i8, ptr %163, align 1, !noundef !3 + %.not.i9 = icmp eq i8 %164, -128 + br i1 %.not.i9, label %165, label %233 + +165: ; preds = %161 %.neg.i = mul i64 %.sroa.0.06.i, -24 - %164 = getelementptr i8, ptr %160, i64 %.neg.i - %165 = getelementptr i8, ptr %164, i64 -24 - %166 = sub nsw i64 0, %.sroa.0.06.i + %166 = getelementptr i8, ptr %162, i64 %.neg.i + %167 = getelementptr i8, ptr %166, i64 -24 + %168 = sub nsw i64 0, %.sroa.0.06.i br label %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i -_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i: ; preds = %230, %163 - %167 = load ptr, ptr %0, align 8, !alias.scope !117, !noalias !120, !nonnull !3, !noundef !3 - %168 = getelementptr inbounds { { { { { ptr, i64 } }, {} }, {} }, ptr }, ptr %167, i64 %166 - %169 = getelementptr inbounds i8, ptr %168, i64 -24 - %170 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h5f2ae8b6bed3ffa9E(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %169) - to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" unwind label %171 +_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i: ; preds = %232, %165 + %169 = load ptr, ptr %0, align 8, !alias.scope !118, !noalias !121, !nonnull !3, !noundef !3 + %170 = getelementptr inbounds { { { { { ptr, i64 } }, {} }, {} }, ptr }, ptr %169, i64 %168 + %171 = getelementptr inbounds i8, ptr %170, i64 -24 + %172 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h5f2ae8b6bed3ffa9E(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %171) + to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" unwind label %173 -171: ; preds = %230, %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i - %172 = landingpad { ptr, i32 } +173: ; preds = %232, %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i + %174 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h74dc9cc952c556a4E"(ptr noalias noundef align 8 dereferenceable(24) %5) #15 - to label %common.resume unwind label %234 + to label %common.resume unwind label %236 "_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i": ; preds = %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 %.val9.i = load i64, ptr %14, align 8, !alias.scope !114, !noundef !3 - %.sroa.0.05.i.i14 = and i64 %.val9.i, %170 - %173 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.05.i.i14 - %.sroa.0.0.copyload.i46.i.i15 = load <16 x i8>, ptr %173, align 1 - %174 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i15, zeroinitializer - %175 = bitcast <16 x i1> %174 to i16 - %.not.not.i.not7.i.i16 = icmp eq i16 %175, 0 - br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i12.i, label %._crit_edge.i.i17, !prof !112 - -.lr.ph.i12.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i", %.lr.ph.i12.i - %.sroa.0.09.i.i21 = phi i64 [ %.sroa.0.0.i.i23, %.lr.ph.i12.i ], [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] - %.sroa.7.08.i.i22 = phi i64 [ %176, %.lr.ph.i12.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] - %176 = add i64 %.sroa.7.08.i.i22, 16 - %177 = add i64 %176, %.sroa.0.09.i.i21 - %.sroa.0.0.i.i23 = and i64 %177, %.val9.i - %178 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i.i23 - %.sroa.0.0.copyload.i4.i.i24 = load <16 x i8>, ptr %178, align 1 - %179 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i24, zeroinitializer - %180 = bitcast <16 x i1> %179 to i16 - %.not.not.i.not.i.i25 = icmp eq i16 %180, 0 - br i1 %.not.not.i.not.i.i25, label %.lr.ph.i12.i, label %._crit_edge.i.i17, !prof !113 - -._crit_edge.i.i17: ; preds = %.lr.ph.i12.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" - %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %.sroa.0.0.i.i23, %.lr.ph.i12.i ] - %.lcssa.i.i19 = phi i16 [ %175, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %180, %.lr.ph.i12.i ] - %181 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) - %182 = zext nneg i16 %181 to i64 - %183 = add i64 %.sroa.0.0.lcssa.i.i18, %182 - %184 = and i64 %183, %.val9.i - %185 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %184 - %186 = load i8, ptr %185, align 1, !noundef !3 - %187 = icmp sgt i8 %186, -1 - br i1 %187, label %188, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i, !prof !84 - -188: ; preds = %._crit_edge.i.i17 - %189 = load <16 x i8>, ptr %.val.i13, align 16 - %190 = icmp slt <16 x i8> %189, zeroinitializer - %191 = bitcast <16 x i1> %190 to i16 - %192 = icmp ne i16 %191, 0 - tail call void @llvm.assume(i1 %192) - %193 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %191, i1 true) - %194 = zext nneg i16 %193 to i64 + %.sroa.0.05.i.i14 = and i64 %.val9.i, %172 + %175 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.05.i.i14 + %.sroa.0.0.copyload.i46.i.i15 = load <16 x i8>, ptr %175, align 1 + %176 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i15, zeroinitializer + %177 = bitcast <16 x i1> %176 to i16 + %.not.not.i.not7.i.i16 = icmp eq i16 %177, 0 + br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !112 + +.lr.ph.i13.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i", %.lr.ph.i13.i + %.sroa.0.09.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ], [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] + %.sroa.7.08.i.i21 = phi i64 [ %178, %.lr.ph.i13.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] + %178 = add i64 %.sroa.7.08.i.i21, 16 + %179 = add i64 %178, %.sroa.0.09.i.i20 + %.sroa.0.0.i.i22 = and i64 %179, %.val9.i + %180 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i.i22 + %.sroa.0.0.copyload.i4.i.i23 = load <16 x i8>, ptr %180, align 1 + %181 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i23, zeroinitializer + %182 = bitcast <16 x i1> %181 to i16 + %.not.not.i.not.i.i24 = icmp eq i16 %182, 0 + br i1 %.not.not.i.not.i.i24, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !113 + +._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" + %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ] + %.lcssa.i.i18 = phi i16 [ %177, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %182, %.lr.ph.i13.i ] + %183 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) + %184 = zext nneg i16 %183 to i64 + %185 = add i64 %.sroa.0.0.lcssa.i.i17, %184 + %186 = and i64 %185, %.val9.i + %187 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %186 + %188 = load i8, ptr %187, align 1, !noundef !3 + %189 = icmp sgt i8 %188, -1 + br i1 %189, label %190, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i, !prof !84 + +190: ; preds = %._crit_edge.i12.i + %191 = load <16 x i8>, ptr %.val.i13, align 16 + %192 = icmp slt <16 x i8> %191, zeroinitializer + %193 = bitcast <16 x i1> %192 to i16 + %194 = icmp ne i16 %193, 0 + tail call void @llvm.assume(i1 %194) + %195 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %193, i1 true) + %196 = zext nneg i16 %195 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i: ; preds = %188, %._crit_edge.i.i17 - %.sroa.0.0.i4.i.i20 = phi i64 [ %194, %188 ], [ %184, %._crit_edge.i.i17 ] - %195 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i14 - %196 = sub i64 %.sroa.0.0.i4.i.i20, %.sroa.0.05.i.i14 - %197 = xor i64 %196, %195 - %.unshifted.i = and i64 %197, %.val9.i - %198 = icmp ult i64 %.unshifted.i, 16 - br i1 %198, label %212, label %199, !prof !122 - -199: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i - %.neg8.i = mul i64 %.sroa.0.0.i4.i.i20, -24 - %200 = getelementptr i8, ptr %.val.i13, i64 %.neg8.i - %201 = getelementptr i8, ptr %200, i64 -24 - %202 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i4.i.i20 - %203 = load i8, ptr %202, align 1, !noundef !3 - %204 = lshr i64 %170, 57 - %205 = trunc nuw nsw i64 %204 to i8 - %206 = add i64 %.sroa.0.0.i4.i.i20, -16 - %207 = and i64 %206, %.val9.i - store i8 %205, ptr %202, align 1 - %208 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %209 = getelementptr i8, ptr %208, i64 %207 - %210 = getelementptr i8, ptr %209, i64 16 - store i8 %205, ptr %210, align 1 - %211 = icmp eq i8 %203, -1 - br i1 %211, label %221, label %230 - -212: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i - %213 = lshr i64 %170, 57 - %214 = trunc nuw nsw i64 %213 to i8 - %215 = add i64 %.sroa.0.06.i, -16 - %216 = and i64 %.val9.i, %215 - %217 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.06.i - store i8 %214, ptr %217, align 1 - %218 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %219 = getelementptr i8, ptr %218, i64 %216 - %220 = getelementptr i8, ptr %219, i64 16 - store i8 %214, ptr %220, align 1 - br label %231 - -221: ; preds = %199 - %222 = add i64 %.sroa.0.06.i, -16 - %223 = load i64, ptr %14, align 8, !alias.scope !114, !noundef !3 - %224 = and i64 %223, %222 - %225 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %226 = getelementptr inbounds nuw i8, ptr %225, i64 %.sroa.0.06.i - store i8 -1, ptr %226, align 1 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i: ; preds = %190, %._crit_edge.i12.i + %.sroa.0.0.i4.i.i19 = phi i64 [ %196, %190 ], [ %186, %._crit_edge.i12.i ] + %197 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i14 + %198 = sub i64 %.sroa.0.0.i4.i.i19, %.sroa.0.05.i.i14 + %199 = xor i64 %198, %197 + %.unshifted.i = and i64 %199, %.val9.i + %200 = icmp ult i64 %.unshifted.i, 16 + br i1 %200, label %214, label %201, !prof !123 + +201: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i + %.neg8.i = mul i64 %.sroa.0.0.i4.i.i19, -24 + %202 = getelementptr i8, ptr %.val.i13, i64 %.neg8.i + %203 = getelementptr i8, ptr %202, i64 -24 + %204 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i4.i.i19 + %205 = load i8, ptr %204, align 1, !noundef !3 + %206 = lshr i64 %172, 57 + %207 = trunc nuw nsw i64 %206 to i8 + %208 = add i64 %.sroa.0.0.i4.i.i19, -16 + %209 = and i64 %208, %.val9.i + store i8 %207, ptr %204, align 1 + %210 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 + %211 = getelementptr i8, ptr %210, i64 %209 + %212 = getelementptr i8, ptr %211, i64 16 + store i8 %207, ptr %212, align 1 + %213 = icmp eq i8 %205, -1 + br i1 %213, label %223, label %232 + +214: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i + %215 = lshr i64 %172, 57 + %216 = trunc nuw nsw i64 %215 to i8 + %217 = add i64 %.sroa.0.06.i, -16 + %218 = and i64 %.val9.i, %217 + %219 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.06.i + store i8 %216, ptr %219, align 1 + %220 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 + %221 = getelementptr i8, ptr %220, i64 %218 + %222 = getelementptr i8, ptr %221, i64 16 + store i8 %216, ptr %222, align 1 + br label %233 + +223: ; preds = %201 + %224 = add i64 %.sroa.0.06.i, -16 + %225 = load i64, ptr %14, align 8, !alias.scope !114, !noundef !3 + %226 = and i64 %225, %224 %227 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %228 = getelementptr i8, ptr %227, i64 %224 - %229 = getelementptr i8, ptr %228, i64 16 - store i8 -1, ptr %229, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %201, ptr noundef nonnull align 1 dereferenceable(24) %165, i64 24, i1 false) - br label %231 - -230: ; preds = %199 - invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17he19fe9ca5101d9d2E(ptr noundef nonnull %165, ptr noundef nonnull %201, i64 noundef 3) - to label %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i unwind label %171 - -231: ; preds = %221, %212, %.lr.ph.i - %232 = icmp ult i64 %.sroa.0.17.i, %17 - %233 = zext i1 %232 to i64 - %.sroa.0.1.i10 = add nuw i64 %.sroa.0.17.i, %233 - br i1 %232, label %.lr.ph.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit - -234: ; preds = %171 - %235 = landingpad { ptr, i32 } + %228 = getelementptr inbounds nuw i8, ptr %227, i64 %.sroa.0.06.i + store i8 -1, ptr %228, align 1 + %229 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 + %230 = getelementptr i8, ptr %229, i64 %226 + %231 = getelementptr i8, ptr %230, i64 16 + store i8 -1, ptr %231, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %203, ptr noundef nonnull align 1 dereferenceable(24) %167, i64 24, i1 false) + br label %233 + +232: ; preds = %201 + invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17he19fe9ca5101d9d2E(ptr noundef nonnull %167, ptr noundef nonnull %203, i64 noundef 3) + to label %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i unwind label %173 + +233: ; preds = %223, %214, %161 + %234 = icmp ult i64 %.sroa.0.17.i, %17 + %235 = zext i1 %234 to i64 + %.sroa.0.1.i10 = add nuw i64 %.sroa.0.17.i, %235 + br i1 %234, label %161, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit + +236: ; preds = %173 + %237 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #16 unreachable -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit: ; preds = %231 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit: ; preds = %233 %.pre.i11 = load i64, ptr %14, align 8, !alias.scope !114 %.pre.i11.fr = freeze i64 %.pre.i11 %.pre14.i = add i64 %.pre.i11.fr, 1 - %236 = lshr i64 %.pre14.i, 3 - %237 = mul nuw i64 %236, 7 - %238 = icmp ult i64 %.pre.i11.fr, 8 - %spec.select = select i1 %238, i64 %.pre.i11.fr, i64 %237 + %238 = lshr i64 %.pre14.i, 3 + %239 = mul nuw i64 %238, 7 + %240 = icmp ult i64 %.pre.i11.fr, 8 + %spec.select = select i1 %240, i64 %.pre.i11.fr, i64 %239 %.pre = load i64, ptr %8, align 8, !alias.scope !114 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i - %239 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] - %240 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] - %241 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %242 = sub i64 %240, %239 - store i64 %242, ptr %241, align 8, !alias.scope !114 + br label %241 + +241: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread + %242 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] + %243 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] + %244 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %245 = sub i64 %243, %242 + store i64 %245, ptr %244, align 8, !alias.scope !114 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5), !noalias !114 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread - %.sroa.4.1.i = phi i64 [ undef, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %.sroa.12.037, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %.sroa.7.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] - %243 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %244 = insertvalue { i64, i64 } %243, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit", %241 + %.sroa.4.1.i = phi i64 [ undef, %241 ], [ %.sroa.12.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %241 ], [ %.sroa.7.035, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] + %246 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %247 = insertvalue { i64, i64 } %246, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h247dba77688ad226E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h247dba77688ad226E.exit: ; preds = %21, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i - %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %244, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i ] + %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %247, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i ] ret { i64, i64 } %.merged.i } @@ -1732,9 +1742,6 @@ declare void @llvm.experimental.noalias.scope.decl(metadata) #12 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.umax.i64(i64, i64) #13 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.umin.i64(i64, i64) #13 - attributes #0 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #1 = { inlinehint nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #2 = { nounwind nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } @@ -1873,9 +1880,10 @@ attributes #16 = { cold noreturn nounwind } !114 = !{!115} !115 = distinct !{!115, !116, !"_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE: argument 0"} !116 = distinct !{!116, !"_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE"} -!117 = !{!118, !115} -!118 = distinct !{!118, !119, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E: argument 1"} -!119 = distinct !{!119, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E"} -!120 = !{!121} -!121 = distinct !{!121, !119, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E: argument 0"} -!122 = !{!"branch_weights", !"expected", i32 2000, i32 1} +!117 = !{!"branch_weights", !"expected", i32 0, i32 -2147483648} +!118 = !{!119, !115} +!119 = distinct !{!119, !120, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E: argument 1"} +!120 = distinct !{!120, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E"} +!121 = !{!122} +!122 = distinct !{!122, !120, !"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E: argument 0"} +!123 = !{!"branch_weights", !"expected", i32 2000, i32 1} diff --git a/bench/wireshark/optimized/packet-bmc.ll b/bench/wireshark/optimized/packet-bmc.ll index 431a8c13930..6521b90f50e 100644 --- a/bench/wireshark/optimized/packet-bmc.ll +++ b/bench/wireshark/optimized/packet-bmc.ll @@ -117,10 +117,10 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %23 = zext i8 %19 to i32 %24 = tail call ptr @val_to_str(i32 noundef %23, ptr noundef nonnull @message_type_vals, ptr noundef nonnull @.str.44) tail call void @col_add_str(ptr noundef %22, i32 noundef 25, ptr noundef %24) - switch i8 %19, label %90 [ + switch i8 %19, label %89 [ i8 1, label %25 i8 2, label %32 - i8 3, label %83 + i8 3, label %82 ] 25: ; preds = %4 @@ -130,7 +130,7 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %29 = tail call ptr @tvb_new_subset_remaining(ptr noundef %18, i32 noundef 6) %30 = tail call i32 @dissect_umts_cell_broadcast_message(ptr noundef %29, ptr noundef %1, ptr noundef %12, ptr noundef null) %31 = tail call i32 @tvb_reported_length(ptr noundef %29) - br label %90 + br label %89 32: ; preds = %4 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3 @@ -150,7 +150,7 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %43 = add nuw nsw i32 %41, 3 %44 = load i32, ptr @ett_bmc_message_description, align 4 %45 = call ptr @proto_tree_add_subtree(ptr noundef %12, ptr noundef %18, i32 noundef %43, i32 noundef 0, i32 noundef %44, ptr noundef nonnull %5, ptr noundef nonnull @.str.45) - %.not15.i = icmp eq i8 %spec.select.i, 0 + %.not15.i = icmp eq i8 %35, 0 br i1 %.not15.i, label %._crit_edge8.i, label %.preheader.i .preheader.i: ; preds = %32, %._crit_edge.i @@ -181,10 +181,10 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, .sink.split.i: ; preds = %54, %.lr.ph.i %hf_bmc_message_id.sink.i = phi ptr [ @hf_bmc_offset_to_ctch_bs_index_of_first_transmission, %54 ], [ @hf_bmc_message_id, %.lr.ph.i ] - %.sink20.i = phi i32 [ 1, %54 ], [ 2, %.lr.ph.i ] + %.sink21.i = phi i32 [ 1, %54 ], [ 2, %.lr.ph.i ] %.sink.i = phi i32 [ 2, %54 ], [ 3, %.lr.ph.i ] %55 = load i32, ptr %hf_bmc_message_id.sink.i, align 4 - %56 = call ptr @proto_tree_add_item(ptr noundef %45, i32 noundef %55, ptr noundef %18, i32 noundef %52, i32 noundef %.sink20.i, i32 noundef 0) + %56 = call ptr @proto_tree_add_item(ptr noundef %45, i32 noundef %55, ptr noundef %18, i32 noundef %52, i32 noundef %.sink21.i, i32 noundef 0) %57 = add i32 %.sink.i, %.13.i br label %58 @@ -198,64 +198,64 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %.185.lcssa.i = phi i8 [ %.0846.i, %.preheader.i ], [ %59, %58 ] %.1.lcssa.i = phi i32 [ %.07.i, %.preheader.i ], [ %.2.i, %58 ] %60 = add nuw nsw i32 %.0875.i, 1 - %61 = icmp samesign ult i32 %60, %41 - br i1 %61, label %.preheader.i, label %._crit_edge8.i, !llvm.loop !8 + %exitcond.not.i = icmp eq i32 %60, %41 + br i1 %exitcond.not.i, label %._crit_edge8.i, label %.preheader.i, !llvm.loop !8 ._crit_edge8.i: ; preds = %._crit_edge.i, %32 %.0.lcssa.i = phi i32 [ %43, %32 ], [ %.1.lcssa.i, %._crit_edge.i ] - %62 = load ptr, ptr %5, align 8 - %63 = sub i32 %.0.lcssa.i, %43 - call void @proto_item_set_len(ptr noundef %62, i32 noundef %63) - %64 = call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef %.0.lcssa.i) - %.not91.i = icmp eq i32 %64, 0 - br i1 %.not91.i, label %dissect_bmc_schedule_message.exit, label %65 - -65: ; preds = %._crit_edge8.i - %66 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.0.lcssa.i) - %67 = load i32, ptr @hf_bmc_future_extension_bitmap, align 4 - %68 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %67, ptr noundef %18, i32 noundef %.0.lcssa.i, i32 noundef 1, i32 noundef 0) - %69 = add i32 %.0.lcssa.i, 1 - %70 = and i8 %66, 1 - %.not92.i = icmp eq i8 %70, 0 - br i1 %.not92.i, label %dissect_bmc_schedule_message.exit, label %71 - -71: ; preds = %65 - %72 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %69) - %73 = load i32, ptr @hf_bmc_length_of_serial_number_list, align 4 - %74 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %73, ptr noundef %18, i32 noundef %69, i32 noundef 1, i32 noundef 0) - %75 = add i32 %.0.lcssa.i, 2 - %.not16.i = icmp eq i8 %72, 0 + %61 = load ptr, ptr %5, align 8 + %62 = sub i32 %.0.lcssa.i, %43 + call void @proto_item_set_len(ptr noundef %61, i32 noundef %62) + %63 = call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef %.0.lcssa.i) + %.not91.i = icmp eq i32 %63, 0 + br i1 %.not91.i, label %dissect_bmc_schedule_message.exit, label %64 + +64: ; preds = %._crit_edge8.i + %65 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.0.lcssa.i) + %66 = load i32, ptr @hf_bmc_future_extension_bitmap, align 4 + %67 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %66, ptr noundef %18, i32 noundef %.0.lcssa.i, i32 noundef 1, i32 noundef 0) + %68 = add i32 %.0.lcssa.i, 1 + %69 = and i8 %65, 1 + %.not92.i = icmp eq i8 %69, 0 + br i1 %.not92.i, label %dissect_bmc_schedule_message.exit, label %70 + +70: ; preds = %64 + %71 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %68) + %72 = load i32, ptr @hf_bmc_length_of_serial_number_list, align 4 + %73 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %72, ptr noundef %18, i32 noundef %68, i32 noundef 1, i32 noundef 0) + %74 = add i32 %.0.lcssa.i, 2 + %.not16.i = icmp eq i8 %71, 0 br i1 %.not16.i, label %dissect_bmc_schedule_message.exit, label %.lr.ph13.i -.lr.ph13.i: ; preds = %71, %.lr.ph13.i - %.411.i = phi i32 [ %81, %.lr.ph13.i ], [ %75, %71 ] - %.08610.i = phi i8 [ %82, %.lr.ph13.i ], [ 0, %71 ] - %76 = load i32, ptr @hf_bmc_serial_number, align 4 - %77 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %76, ptr noundef %18, i32 noundef %.411.i, i32 noundef 2, i32 noundef 0) - %78 = add i32 %.411.i, 2 - %79 = load i32, ptr @hf_bmc_ctch_bs_index, align 4 - %80 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %79, ptr noundef %18, i32 noundef %78, i32 noundef 1, i32 noundef 0) - %81 = add i32 %.411.i, 3 - %82 = add nuw i8 %.08610.i, 1 - %exitcond.not.i = icmp eq i8 %82, %72 - br i1 %exitcond.not.i, label %dissect_bmc_schedule_message.exit, label %.lr.ph13.i, !llvm.loop !9 - -dissect_bmc_schedule_message.exit: ; preds = %.lr.ph13.i, %._crit_edge8.i, %65, %71 - %.3.i = phi i32 [ %69, %65 ], [ %.0.lcssa.i, %._crit_edge8.i ], [ %75, %71 ], [ %81, %.lr.ph13.i ] +.lr.ph13.i: ; preds = %70, %.lr.ph13.i + %.411.i = phi i32 [ %80, %.lr.ph13.i ], [ %74, %70 ] + %.08610.i = phi i8 [ %81, %.lr.ph13.i ], [ 0, %70 ] + %75 = load i32, ptr @hf_bmc_serial_number, align 4 + %76 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %75, ptr noundef %18, i32 noundef %.411.i, i32 noundef 2, i32 noundef 0) + %77 = add i32 %.411.i, 2 + %78 = load i32, ptr @hf_bmc_ctch_bs_index, align 4 + %79 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %78, ptr noundef %18, i32 noundef %77, i32 noundef 1, i32 noundef 0) + %80 = add i32 %.411.i, 3 + %81 = add nuw i8 %.08610.i, 1 + %exitcond18.not.i = icmp eq i8 %81, %71 + br i1 %exitcond18.not.i, label %dissect_bmc_schedule_message.exit, label %.lr.ph13.i, !llvm.loop !9 + +dissect_bmc_schedule_message.exit: ; preds = %.lr.ph13.i, %._crit_edge8.i, %64, %70 + %.3.i = phi i32 [ %68, %64 ], [ %.0.lcssa.i, %._crit_edge8.i ], [ %74, %70 ], [ %80, %.lr.ph13.i ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3 - br label %90 - -83: ; preds = %4 - %84 = load i32, ptr @hf_bmc_broadcast_address, align 4 - %85 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %84, ptr noundef %18, i32 noundef 1, i32 noundef 5, i32 noundef 0) - %86 = load i32, ptr @hf_bmc_cb_data41, align 4 - %87 = tail call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef 6) - %88 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %86, ptr noundef %18, i32 noundef 6, i32 noundef %87, i32 noundef 0) - %89 = tail call i32 @tvb_reported_length(ptr noundef %18) - br label %90 - -90: ; preds = %4, %83, %dissect_bmc_schedule_message.exit, %25 - %.0 = phi i32 [ 1, %4 ], [ %31, %25 ], [ %.3.i, %dissect_bmc_schedule_message.exit ], [ %89, %83 ] + br label %89 + +82: ; preds = %4 + %83 = load i32, ptr @hf_bmc_broadcast_address, align 4 + %84 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %83, ptr noundef %18, i32 noundef 1, i32 noundef 5, i32 noundef 0) + %85 = load i32, ptr @hf_bmc_cb_data41, align 4 + %86 = tail call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef 6) + %87 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %85, ptr noundef %18, i32 noundef 6, i32 noundef %86, i32 noundef 0) + %88 = tail call i32 @tvb_reported_length(ptr noundef %18) + br label %89 + +89: ; preds = %4, %82, %dissect_bmc_schedule_message.exit, %25 + %.0 = phi i32 [ 1, %4 ], [ %31, %25 ], [ %.3.i, %dissect_bmc_schedule_message.exit ], [ %88, %82 ] ret i32 %.0 } diff --git a/bench/wolfssl/optimized/random.ll b/bench/wolfssl/optimized/random.ll index f4292ef997c..90462bd0a30 100644 --- a/bench/wolfssl/optimized/random.ll +++ b/bench/wolfssl/optimized/random.ll @@ -888,12 +888,12 @@ define internal fastcc range(i32 0, 3) i32 @Hash_DRBG_Generate(ptr noundef %0, p call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #9 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #9 %11 = icmp eq ptr %0, null - br i1 %11, label %114, label %12 + br i1 %11, label %115, label %12 12: ; preds = %3 %13 = load i32, ptr %0, align 8, !tbaa !17 %14 = icmp eq i32 %13, 1000000 - br i1 %14, label %114, label %15 + br i1 %14, label %115, label %15 15: ; preds = %12 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #9 @@ -909,249 +909,248 @@ define internal fastcc range(i32 0, 3) i32 @Hash_DRBG_Generate(ptr noundef %0, p %19 = zext i1 %.not.i to i32 %20 = add nuw nsw i32 %17, %19 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(55) %4, ptr noundef nonnull readonly align 1 dereferenceable(55) %16, i64 55, i1 false) - %.not10.i = icmp eq i32 %20, 0 - br i1 %.not10.i, label %.lr.ph29.preheader.i.i, label %.lr.ph.i - -.lr.ph.i: ; preds = %15, %array_add_one.exit.i - %.0217.i = phi i32 [ %43, %array_add_one.exit.i ], [ 0, %15 ] - %.0236.i = phi ptr [ %.124.i, %array_add_one.exit.i ], [ %1, %15 ] - %.0255.i = phi i32 [ %.126.i, %array_add_one.exit.i ], [ %2, %15 ] - %21 = call i32 @wc_InitSha256(ptr noundef nonnull %6) #9 - %22 = icmp eq i32 %21, 0 - br i1 %22, label %23, label %.thread2.i - -23: ; preds = %.lr.ph.i - %24 = call i32 @wc_Sha256Update(ptr noundef nonnull %6, ptr noundef nonnull %4, i32 noundef 55) #9 - %25 = icmp eq i32 %24, 0 - br i1 %25, label %26, label %.thread2.i - -.thread2.i: ; preds = %23, %.lr.ph.i + br label %21 + +21: ; preds = %array_add_one.exit.i, %15 + %.0217.i = phi i32 [ 0, %15 ], [ %44, %array_add_one.exit.i ] + %.0236.i = phi ptr [ %1, %15 ], [ %.124.i, %array_add_one.exit.i ] + %.0255.i = phi i32 [ %2, %15 ], [ %.126.i, %array_add_one.exit.i ] + %22 = call i32 @wc_InitSha256(ptr noundef nonnull %6) #9 + %23 = icmp eq i32 %22, 0 + br i1 %23, label %24, label %.thread2.i + +24: ; preds = %21 + %25 = call i32 @wc_Sha256Update(ptr noundef nonnull %6, ptr noundef nonnull %4, i32 noundef 55) #9 + %26 = icmp eq i32 %25, 0 + br i1 %26, label %27, label %.thread2.i + +.thread2.i: ; preds = %24, %21 call void @wc_Sha256Free(ptr noundef nonnull %6) #9 br label %.lr.ph29.preheader.i.i -26: ; preds = %23 - %27 = call i32 @wc_Sha256Final(ptr noundef nonnull %6, ptr noundef nonnull %5) #9 +27: ; preds = %24 + %28 = call i32 @wc_Sha256Final(ptr noundef nonnull %6, ptr noundef nonnull %5) #9 call void @wc_Sha256Free(ptr noundef nonnull %6) #9 - %28 = icmp eq i32 %27, 0 - br i1 %28, label %29, label %.lr.ph29.preheader.i.i + %29 = icmp eq i32 %28, 0 + br i1 %29, label %30, label %.lr.ph29.preheader.i.i -29: ; preds = %26 +30: ; preds = %27 %.not28.i = icmp eq i32 %.0255.i, 0 - br i1 %.not28.i, label %array_add_one.exit.i, label %30 + br i1 %.not28.i, label %array_add_one.exit.i, label %31 -30: ; preds = %29 - %31 = icmp ugt i32 %.0255.i, 31 - br i1 %31, label %32, label %39 +31: ; preds = %30 + %32 = icmp ugt i32 %.0255.i, 31 + br i1 %32, label %33, label %40 -32: ; preds = %30 +33: ; preds = %31 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %.0236.i, ptr noundef nonnull align 16 dereferenceable(32) %5, i64 32, i1 false) - br label %33 - -33: ; preds = %33, %32 - %.06.i.i = phi i32 [ 54, %32 ], [ %38, %33 ] - %34 = zext nneg i32 %.06.i.i to i64 - %35 = getelementptr inbounds nuw i8, ptr %4, i64 %34 - %36 = load i8, ptr %35, align 1, !tbaa !15 - %37 = add i8 %36, 1 - store i8 %37, ptr %35, align 1, !tbaa !15 - %.not.i.i = icmp ne i8 %37, 0 - %38 = add nsw i32 %.06.i.i, -1 + br label %34 + +34: ; preds = %34, %33 + %.06.i.i = phi i32 [ 54, %33 ], [ %39, %34 ] + %35 = zext nneg i32 %.06.i.i to i64 + %36 = getelementptr inbounds nuw i8, ptr %4, i64 %35 + %37 = load i8, ptr %36, align 1, !tbaa !15 + %38 = add i8 %37, 1 + store i8 %38, ptr %36, align 1, !tbaa !15 + %.not.i.i = icmp ne i8 %38, 0 + %39 = add nsw i32 %.06.i.i, -1 %.not7.i.i = icmp eq i32 %.06.i.i, 0 %or.cond.i.i = or i1 %.not7.i.i, %.not.i.i - br i1 %or.cond.i.i, label %array_add_one.exit.loopexit.i, label %33, !llvm.loop !30 + br i1 %or.cond.i.i, label %array_add_one.exit.loopexit.i, label %34, !llvm.loop !30 -39: ; preds = %30 - %40 = zext nneg i32 %.0255.i to i64 - call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0236.i, ptr nonnull align 16 %5, i64 %40, i1 false) +40: ; preds = %31 + %41 = zext nneg i32 %.0255.i to i64 + call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0236.i, ptr nonnull align 16 %5, i64 %41, i1 false) br label %array_add_one.exit.i -array_add_one.exit.loopexit.i: ; preds = %33 - %41 = add i32 %.0255.i, -32 - %42 = getelementptr inbounds nuw i8, ptr %.0236.i, i64 32 +array_add_one.exit.loopexit.i: ; preds = %34 + %42 = add i32 %.0255.i, -32 + %43 = getelementptr inbounds nuw i8, ptr %.0236.i, i64 32 br label %array_add_one.exit.i -array_add_one.exit.i: ; preds = %array_add_one.exit.loopexit.i, %39, %29 - %.126.i = phi i32 [ 0, %39 ], [ 0, %29 ], [ %41, %array_add_one.exit.loopexit.i ] - %.124.i = phi ptr [ %.0236.i, %39 ], [ %.0236.i, %29 ], [ %42, %array_add_one.exit.loopexit.i ] - %43 = add nuw nsw i32 %.0217.i, 1 - %exitcond.not.i = icmp eq i32 %43, %20 - br i1 %exitcond.not.i, label %.lr.ph29.preheader.i.i, label %.lr.ph.i, !llvm.loop !31 +array_add_one.exit.i: ; preds = %array_add_one.exit.loopexit.i, %40, %30 + %.126.i = phi i32 [ 0, %40 ], [ 0, %30 ], [ %42, %array_add_one.exit.loopexit.i ] + %.124.i = phi ptr [ %.0236.i, %40 ], [ %.0236.i, %30 ], [ %43, %array_add_one.exit.loopexit.i ] + %44 = add nuw nsw i32 %.0217.i, 1 + %exitcond.not.i = icmp eq i32 %44, %20 + br i1 %exitcond.not.i, label %.lr.ph29.preheader.i.i, label %21, !llvm.loop !31 -.lr.ph29.preheader.i.i: ; preds = %array_add_one.exit.i, %26, %.thread2.i, %15 - %44 = phi i1 [ false, %.thread2.i ], [ false, %15 ], [ %28, %26 ], [ %28, %array_add_one.exit.i ] +.lr.ph29.preheader.i.i: ; preds = %array_add_one.exit.i, %27, %.thread2.i + %45 = phi i1 [ false, %.thread2.i ], [ %29, %27 ], [ %29, %array_add_one.exit.i ] br label %.lr.ph29.i.i .lr.ph29.i.i: ; preds = %.lr.ph29.i.i, %.lr.ph29.preheader.i.i - %.01528.i.i = phi ptr [ %45, %.lr.ph29.i.i ], [ %4, %.lr.ph29.preheader.i.i ] - %.01827.i.i = phi i32 [ %46, %.lr.ph29.i.i ], [ 55, %.lr.ph29.preheader.i.i ] - %45 = getelementptr inbounds nuw i8, ptr %.01528.i.i, i64 8 + %.01528.i.i = phi ptr [ %46, %.lr.ph29.i.i ], [ %4, %.lr.ph29.preheader.i.i ] + %.01827.i.i = phi i32 [ %47, %.lr.ph29.i.i ], [ 55, %.lr.ph29.preheader.i.i ] + %46 = getelementptr inbounds nuw i8, ptr %.01528.i.i, i64 8 store volatile i64 0, ptr %.01528.i.i, align 8, !tbaa !11 - %46 = add nsw i32 %.01827.i.i, -8 - %47 = icmp ugt i32 %46, 7 - br i1 %47, label %.lr.ph29.i.i, label %.lr.ph35.i.i, !llvm.loop !13 + %47 = add nsw i32 %.01827.i.i, -8 + %48 = icmp ugt i32 %47, 7 + br i1 %48, label %.lr.ph29.i.i, label %.lr.ph35.i.i, !llvm.loop !13 .lr.ph35.i.i: ; preds = %.lr.ph29.i.i, %.lr.ph35.i.i - %.11734.i.i = phi ptr [ %49, %.lr.ph35.i.i ], [ %45, %.lr.ph29.i.i ] - %.11933.i.i = phi i32 [ %48, %.lr.ph35.i.i ], [ 7, %.lr.ph29.i.i ] - %48 = add nsw i32 %.11933.i.i, -1 - %49 = getelementptr inbounds nuw i8, ptr %.11734.i.i, i64 1 + %.11734.i.i = phi ptr [ %50, %.lr.ph35.i.i ], [ %46, %.lr.ph29.i.i ] + %.11933.i.i = phi i32 [ %49, %.lr.ph35.i.i ], [ 7, %.lr.ph29.i.i ] + %49 = add nsw i32 %.11933.i.i, -1 + %50 = getelementptr inbounds nuw i8, ptr %.11734.i.i, i64 1 store volatile i8 0, ptr %.11734.i.i, align 1, !tbaa !15 - %.not22.i.i = icmp eq i32 %48, 0 + %.not22.i.i = icmp eq i32 %49, 0 br i1 %.not22.i.i, label %Hash_gen.exit, label %.lr.ph35.i.i, !llvm.loop !16 Hash_gen.exit: ; preds = %.lr.ph35.i.i call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %6) #9 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #9 call void @llvm.lifetime.end.p0(i64 55, ptr nonnull %4) #9 - br i1 %44, label %50, label %.lr.ph29.preheader.i + br i1 %45, label %51, label %.lr.ph29.preheader.i -50: ; preds = %Hash_gen.exit - %51 = call i32 @wc_InitSha256(ptr noundef nonnull %7) #9 - %52 = icmp eq i32 %51, 0 - br i1 %52, label %53, label %.critedge23.thread +51: ; preds = %Hash_gen.exit + %52 = call i32 @wc_InitSha256(ptr noundef nonnull %7) #9 + %53 = icmp eq i32 %52, 0 + br i1 %53, label %54, label %.critedge23.thread -53: ; preds = %50 - %54 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %8, i32 noundef 1) #9 - %55 = icmp eq i32 %54, 0 - br i1 %55, label %.critedge, label %.critedge23.thread +54: ; preds = %51 + %55 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %8, i32 noundef 1) #9 + %56 = icmp eq i32 %55, 0 + br i1 %56, label %.critedge, label %.critedge23.thread -.critedge: ; preds = %53 - %56 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %16, i32 noundef 55) #9 - %57 = icmp eq i32 %56, 0 - br i1 %57, label %.critedge23, label %.critedge23.thread +.critedge: ; preds = %54 + %57 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %16, i32 noundef 55) #9 + %58 = icmp eq i32 %57, 0 + br i1 %58, label %.critedge23, label %.critedge23.thread -.critedge23.thread: ; preds = %.critedge, %50, %53 +.critedge23.thread: ; preds = %.critedge, %51, %54 call void @wc_Sha256Free(ptr noundef nonnull %7) #9 - br label %array_add.exit55 + br label %array_add.exit54 .critedge23: ; preds = %.critedge - %58 = call i32 @wc_Sha256Final(ptr noundef nonnull %7, ptr noundef nonnull %10) #9 - %59 = icmp eq i32 %58, 0 + %59 = call i32 @wc_Sha256Final(ptr noundef nonnull %7, ptr noundef nonnull %10) #9 + %60 = icmp eq i32 %59, 0 call void @wc_Sha256Free(ptr noundef nonnull %7) #9 - br i1 %59, label %.preheader, label %array_add.exit55 + br i1 %60, label %.preheader, label %array_add.exit54 .preheader: ; preds = %.critedge23, %.preheader %indvars.iv38.i = phi i64 [ %indvars.iv.next39.i, %.preheader ], [ 32, %.critedge23 ] %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %.preheader ], [ 54, %.critedge23 ] - %.034.i = phi i16 [ %69, %.preheader ], [ 0, %.critedge23 ] + %.034.i = phi i16 [ %70, %.preheader ], [ 0, %.critedge23 ] %indvars.iv.next39.i = add nsw i64 %indvars.iv38.i, -1 - %60 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i - %61 = load i8, ptr %60, align 1, !tbaa !15 - %62 = zext i8 %61 to i16 - %63 = add nuw nsw i16 %.034.i, %62 - %64 = getelementptr inbounds nuw i8, ptr %10, i64 %indvars.iv.next39.i - %65 = load i8, ptr %64, align 1, !tbaa !15 - %66 = zext i8 %65 to i16 - %67 = add nuw nsw i16 %63, %66 - %68 = trunc i16 %67 to i8 - store i8 %68, ptr %60, align 1, !tbaa !15 - %69 = lshr i16 %67, 8 + %61 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i + %62 = load i8, ptr %61, align 1, !tbaa !15 + %63 = zext i8 %62 to i16 + %64 = add nuw nsw i16 %.034.i, %63 + %65 = getelementptr inbounds nuw i8, ptr %10, i64 %indvars.iv.next39.i + %66 = load i8, ptr %65, align 1, !tbaa !15 + %67 = zext i8 %66 to i16 + %68 = add nuw nsw i16 %64, %67 + %69 = trunc i16 %68 to i8 + store i8 %69, ptr %61, align 1, !tbaa !15 + %70 = lshr i16 %68, 8 %indvars.iv.next.i = add nsw i64 %indvars.iv.i, -1 - %70 = icmp samesign ugt i64 %indvars.iv38.i, 1 - br i1 %70, label %.preheader, label %.lr.ph.i24, !llvm.loop !32 - -.lr.ph.i24: ; preds = %.preheader, %.lr.ph.i24 - %indvars.iv42.i = phi i64 [ %indvars.iv.next43.i, %.lr.ph.i24 ], [ 22, %.preheader ] - %.136.i = phi i16 [ %76, %.lr.ph.i24 ], [ %69, %.preheader ] - %71 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i - %72 = load i8, ptr %71, align 1, !tbaa !15 - %73 = zext i8 %72 to i16 - %74 = add nuw nsw i16 %.136.i, %73 - %75 = trunc i16 %74 to i8 - store i8 %75, ptr %71, align 1, !tbaa !15 - %76 = lshr i16 %74, 8 + %71 = icmp samesign ugt i64 %indvars.iv38.i, 1 + br i1 %71, label %.preheader, label %.lr.ph.i, !llvm.loop !32 + +.lr.ph.i: ; preds = %.preheader, %.lr.ph.i + %indvars.iv42.i = phi i64 [ %indvars.iv.next43.i, %.lr.ph.i ], [ 22, %.preheader ] + %.136.i = phi i16 [ %77, %.lr.ph.i ], [ %70, %.preheader ] + %72 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i + %73 = load i8, ptr %72, align 1, !tbaa !15 + %74 = zext i8 %73 to i16 + %75 = add nuw nsw i16 %.136.i, %74 + %76 = trunc i16 %75 to i8 + store i8 %76, ptr %72, align 1, !tbaa !15 + %77 = lshr i16 %75, 8 %indvars.iv.next43.i = add nsw i64 %indvars.iv42.i, -1 - %.not.i25 = icmp eq i64 %indvars.iv42.i, 0 - br i1 %.not.i25, label %array_add.exit, label %.lr.ph.i24, !llvm.loop !33 - -array_add.exit: ; preds = %.lr.ph.i24 - %77 = getelementptr inbounds nuw i8, ptr %0, i64 59 - br label %78 - -78: ; preds = %78, %array_add.exit - %indvars.iv38.i27 = phi i64 [ 55, %array_add.exit ], [ %indvars.iv.next39.i30, %78 ] - %indvars.iv.i28 = phi i64 [ 54, %array_add.exit ], [ %indvars.iv.next.i31, %78 ] - %.034.i29 = phi i16 [ 0, %array_add.exit ], [ %88, %78 ] - %indvars.iv.next39.i30 = add nsw i64 %indvars.iv38.i27, -1 - %79 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i28 - %80 = load i8, ptr %79, align 1, !tbaa !15 - %81 = zext i8 %80 to i16 - %82 = add nuw nsw i16 %.034.i29, %81 - %83 = getelementptr inbounds nuw i8, ptr %77, i64 %indvars.iv.next39.i30 - %84 = load i8, ptr %83, align 1, !tbaa !15 - %85 = zext i8 %84 to i16 - %86 = add nuw nsw i16 %82, %85 - %87 = trunc i16 %86 to i8 - store i8 %87, ptr %79, align 1, !tbaa !15 - %88 = lshr i16 %86, 8 - %indvars.iv.next.i31 = add nsw i64 %indvars.iv.i28, -1 - %89 = icmp samesign ugt i64 %indvars.iv38.i27, 1 - br i1 %89, label %78, label %array_add.exit40, !llvm.loop !32 - -array_add.exit40: ; preds = %78 - %90 = call noundef i32 @llvm.bswap.i32(i32 %13) - store i32 %90, ptr %9, align 4, !tbaa !29 - br label %91 - -91: ; preds = %91, %array_add.exit40 - %indvars.iv38.i42 = phi i64 [ 4, %array_add.exit40 ], [ %indvars.iv.next39.i45, %91 ] - %indvars.iv.i43 = phi i64 [ 54, %array_add.exit40 ], [ %indvars.iv.next.i46, %91 ] - %.034.i44 = phi i16 [ 0, %array_add.exit40 ], [ %101, %91 ] - %indvars.iv.next39.i45 = add nsw i64 %indvars.iv38.i42, -1 - %92 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i43 - %93 = load i8, ptr %92, align 1, !tbaa !15 - %94 = zext i8 %93 to i16 - %95 = add nuw nsw i16 %.034.i44, %94 - %96 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.next39.i45 - %97 = load i8, ptr %96, align 1, !tbaa !15 - %98 = zext i8 %97 to i16 - %99 = add nuw nsw i16 %95, %98 - %100 = trunc i16 %99 to i8 - store i8 %100, ptr %92, align 1, !tbaa !15 - %101 = lshr i16 %99, 8 - %indvars.iv.next.i46 = add nsw i64 %indvars.iv.i43, -1 - %102 = icmp samesign ugt i64 %indvars.iv38.i42, 1 - br i1 %102, label %91, label %.lr.ph.i50, !llvm.loop !32 - -.lr.ph.i50: ; preds = %91, %.lr.ph.i50 - %indvars.iv42.i51 = phi i64 [ %indvars.iv.next43.i53, %.lr.ph.i50 ], [ 50, %91 ] - %.136.i52 = phi i16 [ %108, %.lr.ph.i50 ], [ %101, %91 ] - %103 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i51 - %104 = load i8, ptr %103, align 1, !tbaa !15 - %105 = zext i8 %104 to i16 - %106 = add nuw nsw i16 %.136.i52, %105 - %107 = trunc i16 %106 to i8 - store i8 %107, ptr %103, align 1, !tbaa !15 - %108 = lshr i16 %106, 8 - %indvars.iv.next43.i53 = add nsw i64 %indvars.iv42.i51, -1 - %.not.i54 = icmp eq i64 %indvars.iv42.i51, 0 - br i1 %.not.i54, label %array_add.exit55, label %.lr.ph.i50, !llvm.loop !33 - -array_add.exit55: ; preds = %.lr.ph.i50, %.critedge23.thread, %.critedge23 - %109 = phi i32 [ 1, %.critedge23.thread ], [ 1, %.critedge23 ], [ 0, %.lr.ph.i50 ] - %110 = load i32, ptr %0, align 8, !tbaa !17 - %111 = add i32 %110, 1 - store i32 %111, ptr %0, align 8, !tbaa !17 + %.not.i24 = icmp eq i64 %indvars.iv42.i, 0 + br i1 %.not.i24, label %array_add.exit, label %.lr.ph.i, !llvm.loop !33 + +array_add.exit: ; preds = %.lr.ph.i + %78 = getelementptr inbounds nuw i8, ptr %0, i64 59 + br label %79 + +79: ; preds = %79, %array_add.exit + %indvars.iv38.i26 = phi i64 [ 55, %array_add.exit ], [ %indvars.iv.next39.i29, %79 ] + %indvars.iv.i27 = phi i64 [ 54, %array_add.exit ], [ %indvars.iv.next.i30, %79 ] + %.034.i28 = phi i16 [ 0, %array_add.exit ], [ %89, %79 ] + %indvars.iv.next39.i29 = add nsw i64 %indvars.iv38.i26, -1 + %80 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i27 + %81 = load i8, ptr %80, align 1, !tbaa !15 + %82 = zext i8 %81 to i16 + %83 = add nuw nsw i16 %.034.i28, %82 + %84 = getelementptr inbounds nuw i8, ptr %78, i64 %indvars.iv.next39.i29 + %85 = load i8, ptr %84, align 1, !tbaa !15 + %86 = zext i8 %85 to i16 + %87 = add nuw nsw i16 %83, %86 + %88 = trunc i16 %87 to i8 + store i8 %88, ptr %80, align 1, !tbaa !15 + %89 = lshr i16 %87, 8 + %indvars.iv.next.i30 = add nsw i64 %indvars.iv.i27, -1 + %90 = icmp samesign ugt i64 %indvars.iv38.i26, 1 + br i1 %90, label %79, label %array_add.exit39, !llvm.loop !32 + +array_add.exit39: ; preds = %79 + %91 = call noundef i32 @llvm.bswap.i32(i32 %13) + store i32 %91, ptr %9, align 4, !tbaa !29 + br label %92 + +92: ; preds = %92, %array_add.exit39 + %indvars.iv38.i41 = phi i64 [ 4, %array_add.exit39 ], [ %indvars.iv.next39.i44, %92 ] + %indvars.iv.i42 = phi i64 [ 54, %array_add.exit39 ], [ %indvars.iv.next.i45, %92 ] + %.034.i43 = phi i16 [ 0, %array_add.exit39 ], [ %102, %92 ] + %indvars.iv.next39.i44 = add nsw i64 %indvars.iv38.i41, -1 + %93 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i42 + %94 = load i8, ptr %93, align 1, !tbaa !15 + %95 = zext i8 %94 to i16 + %96 = add nuw nsw i16 %.034.i43, %95 + %97 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.next39.i44 + %98 = load i8, ptr %97, align 1, !tbaa !15 + %99 = zext i8 %98 to i16 + %100 = add nuw nsw i16 %96, %99 + %101 = trunc i16 %100 to i8 + store i8 %101, ptr %93, align 1, !tbaa !15 + %102 = lshr i16 %100, 8 + %indvars.iv.next.i45 = add nsw i64 %indvars.iv.i42, -1 + %103 = icmp samesign ugt i64 %indvars.iv38.i41, 1 + br i1 %103, label %92, label %.lr.ph.i49, !llvm.loop !32 + +.lr.ph.i49: ; preds = %92, %.lr.ph.i49 + %indvars.iv42.i50 = phi i64 [ %indvars.iv.next43.i52, %.lr.ph.i49 ], [ 50, %92 ] + %.136.i51 = phi i16 [ %109, %.lr.ph.i49 ], [ %102, %92 ] + %104 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i50 + %105 = load i8, ptr %104, align 1, !tbaa !15 + %106 = zext i8 %105 to i16 + %107 = add nuw nsw i16 %.136.i51, %106 + %108 = trunc i16 %107 to i8 + store i8 %108, ptr %104, align 1, !tbaa !15 + %109 = lshr i16 %107, 8 + %indvars.iv.next43.i52 = add nsw i64 %indvars.iv42.i50, -1 + %.not.i53 = icmp eq i64 %indvars.iv42.i50, 0 + br i1 %.not.i53, label %array_add.exit54, label %.lr.ph.i49, !llvm.loop !33 + +array_add.exit54: ; preds = %.lr.ph.i49, %.critedge23.thread, %.critedge23 + %110 = phi i32 [ 1, %.critedge23.thread ], [ 1, %.critedge23 ], [ 0, %.lr.ph.i49 ] + %111 = load i32, ptr %0, align 8, !tbaa !17 + %112 = add i32 %111, 1 + store i32 %112, ptr %0, align 8, !tbaa !17 br label %.lr.ph29.preheader.i -.lr.ph29.preheader.i: ; preds = %Hash_gen.exit, %array_add.exit55 - %.0 = phi i32 [ %109, %array_add.exit55 ], [ 1, %Hash_gen.exit ] +.lr.ph29.preheader.i: ; preds = %Hash_gen.exit, %array_add.exit54 + %.0 = phi i32 [ %110, %array_add.exit54 ], [ 1, %Hash_gen.exit ] br label %.lr.ph29.i .lr.ph29.i: ; preds = %.lr.ph29.i, %.lr.ph29.preheader.i - %.01528.i = phi ptr [ %112, %.lr.ph29.i ], [ %10, %.lr.ph29.preheader.i ] - %.01827.i = phi i32 [ %113, %.lr.ph29.i ], [ 32, %.lr.ph29.preheader.i ] - %112 = getelementptr inbounds nuw i8, ptr %.01528.i, i64 8 + %.01528.i = phi ptr [ %113, %.lr.ph29.i ], [ %10, %.lr.ph29.preheader.i ] + %.01827.i = phi i32 [ %114, %.lr.ph29.i ], [ 32, %.lr.ph29.preheader.i ] + %113 = getelementptr inbounds nuw i8, ptr %.01528.i, i64 8 store volatile i64 0, ptr %.01528.i, align 8, !tbaa !11 - %113 = add nsw i32 %.01827.i, -8 - %.not = icmp eq i32 %113, 0 + %114 = add nsw i32 %.01827.i, -8 + %.not = icmp eq i32 %114, 0 br i1 %.not, label %ForceZero.exit, label %.lr.ph29.i, !llvm.loop !13 ForceZero.exit: ; preds = %.lr.ph29.i call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #9 - br label %114 + br label %115 -114: ; preds = %12, %3, %ForceZero.exit +115: ; preds = %12, %3, %ForceZero.exit %.019 = phi i32 [ %.0, %ForceZero.exit ], [ 1, %3 ], [ 2, %12 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #9 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #9 diff --git a/bench/yalantinglibs/optimized/channel.ll b/bench/yalantinglibs/optimized/channel.ll index b4fbb346c57..ef827e0ab03 100644 --- a/bench/yalantinglibs/optimized/channel.ll +++ b/bench/yalantinglibs/optimized/channel.ll @@ -74928,7 +74928,7 @@ _ZN10moodycamel15ConcurrentQueueISt10unique_ptrIN7cinatra16coro_http_clientESt14 %add.i = add nuw nsw i64 %div3.i, %conv.i %initialBlockPoolSize.i.i = getelementptr inbounds nuw i8, ptr %this, i64 32 store i64 %add.i, ptr %initialBlockPoolSize.i.i, align 8 - %cmp.i.i = icmp eq i64 %add.i, 0 + %cmp.i.i = icmp eq i64 %reserve_size, 0 br i1 %cmp.i.i, label %if.then.i.i, label %if.end.i.i if.then.i.i: ; preds = %_ZN10moodycamel15ConcurrentQueueISt10unique_ptrIN7cinatra16coro_http_clientESt14default_deleteIS3_EENS_28ConcurrentQueueDefaultTraitsEE39populate_initial_implicit_producer_hashEv.exit.i @@ -74944,14 +74944,14 @@ if.end.i.i: ; preds = %_ZN10moodycamel15Co for.body.i.i.i: ; preds = %if.end.i.i, %for.body.i.i.i %i.07.i.i.i = phi i64 [ %inc.i.i.i, %for.body.i.i.i ], [ 0, %if.end.i.i ] - %add.ptr.i.i.i = getelementptr inbounds nuw %"struct.moodycamel::ConcurrentQueue>::Block", ptr %call.i.i.i.i.i, i64 %i.07.i.i.i + %add.ptr.i.i.i = getelementptr inbounds %"struct.moodycamel::ConcurrentQueue>::Block", ptr %call.i.i.i.i.i, i64 %i.07.i.i.i %next.i.i.i.i = getelementptr inbounds nuw i8, ptr %add.ptr.i.i.i, i64 256 %freeListNext.i.i.i.i = getelementptr inbounds nuw i8, ptr %add.ptr.i.i.i, i64 312 store ptr null, ptr %freeListNext.i.i.i.i, align 8 %dynamicallyAllocated.i.i.i.i = getelementptr inbounds nuw i8, ptr %add.ptr.i.i.i, i64 320 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(52) %next.i.i.i.i, i8 0, i64 52, i1 false) store i8 1, ptr %dynamicallyAllocated.i.i.i.i, align 8 - %inc.i.i.i = add nuw nsw i64 %i.07.i.i.i, 1 + %inc.i.i.i = add nuw i64 %i.07.i.i.i, 1 %cmp1.not.i.i.i = icmp eq i64 %inc.i.i.i, %add.i br i1 %cmp1.not.i.i.i, label %for.body.preheader.i.i, label %for.body.i.i.i, !llvm.loop !768 @@ -75031,14 +75031,14 @@ if.end.i.i27: ; preds = %_ZN10moodycamel15Co for.body.i.i.i31: ; preds = %if.end.i.i27, %for.body.i.i.i31 %i.07.i.i.i32 = phi i64 [ %inc.i.i.i37, %for.body.i.i.i31 ], [ 0, %if.end.i.i27 ] - %add.ptr.i.i.i33 = getelementptr inbounds nuw %"struct.moodycamel::ConcurrentQueue>::Block", ptr %call.i.i.i.i.i29, i64 %i.07.i.i.i32 + %add.ptr.i.i.i33 = getelementptr inbounds %"struct.moodycamel::ConcurrentQueue>::Block", ptr %call.i.i.i.i.i29, i64 %i.07.i.i.i32 %next.i.i.i.i34 = getelementptr inbounds nuw i8, ptr %add.ptr.i.i.i33, i64 256 %freeListNext.i.i.i.i35 = getelementptr inbounds nuw i8, ptr %add.ptr.i.i.i33, i64 312 store ptr null, ptr %freeListNext.i.i.i.i35, align 8 %dynamicallyAllocated.i.i.i.i36 = getelementptr inbounds nuw i8, ptr %add.ptr.i.i.i33, i64 320 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(52) %next.i.i.i.i34, i8 0, i64 52, i1 false) store i8 1, ptr %dynamicallyAllocated.i.i.i.i36, align 8 - %inc.i.i.i37 = add nuw nsw i64 %i.07.i.i.i32, 1 + %inc.i.i.i37 = add nuw i64 %i.07.i.i.i32, 1 %cmp1.not.i.i.i38 = icmp eq i64 %inc.i.i.i37, %add.i br i1 %cmp1.not.i.i.i38, label %for.body.preheader.i.i39, label %for.body.i.i.i31, !llvm.loop !768 diff --git a/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll b/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll index ac49ebaa514..2be54af49dd 100644 --- a/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll +++ b/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll @@ -1178,8 +1178,8 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !216 %invariant.gep = getelementptr i8, ptr %57, i64 16 - %.not51 = icmp eq i64 %7, 0 - br i1 %.not51, label %.thread35, label %.preheader.lr.ph + %.not49 = icmp eq i64 %7, 0 + br i1 %.not49, label %.thread33, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %52 %58 = load ptr, ptr %0, align 8, !alias.scope !224, !noalias !225, !nonnull !4, !noundef !4 @@ -1187,25 +1187,25 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr %60 = icmp slt <16 x i8> %59, zeroinitializer %61 = bitcast <16 x i1> %60 to i16 %62 = xor i16 %61, -1 - %invariant.gep56 = getelementptr i8, ptr %58, i64 -24 + %invariant.gep54 = getelementptr i8, ptr %58, i64 -24 br label %.preheader .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit - %.sroa.09.055 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.09.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %.sroa.5.054 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %.sroa.9.053 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %.sroa.13.052 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %63 = icmp eq i16 %.sroa.13.052, 0 + %.sroa.07.053 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.07.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %.sroa.5.052 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %.sroa.9.051 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %.sroa.13.050 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %63 = icmp eq i16 %.sroa.13.050, 0 br i1 %63, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.09.248 = phi ptr [ %64, %.noexc2 ], [ %.sroa.09.055, %.preheader ] - %.sroa.5.247 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.054, %.preheader ] - %64 = getelementptr inbounds nuw i8, ptr %.sroa.09.248, i64 16 + %.sroa.07.246 = phi ptr [ %64, %.noexc2 ], [ %.sroa.07.053, %.preheader ] + %.sroa.5.245 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.052, %.preheader ] + %64 = getelementptr inbounds nuw i8, ptr %.sroa.07.246, i64 16 %65 = load <16 x i8>, ptr %64, align 16, !noalias !229 %66 = icmp slt <16 x i8> %65, zeroinitializer %67 = bitcast <16 x i1> %66 to i16 - %68 = add i64 %.sroa.5.247, 16 + %68 = add i64 %.sroa.5.245, 16 %69 = icmp eq i16 %67, -1 br i1 %69, label %.noexc2, label %._crit_edge.loopexit @@ -1214,18 +1214,18 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.052, %.preheader ], [ %70, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.054, %.preheader ], [ %68, %._crit_edge.loopexit ] - %.sroa.09.2.lcssa = phi ptr [ %.sroa.09.055, %.preheader ], [ %64, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.050, %.preheader ], [ %70, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.052, %.preheader ], [ %68, %._crit_edge.loopexit ] + %.sroa.07.2.lcssa = phi ptr [ %.sroa.07.053, %.preheader ], [ %64, %._crit_edge.loopexit ] %71 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %72 = zext nneg i16 %71 to i64 %73 = add i16 %.sroa.13.2.lcssa, -1 %74 = and i16 %73, %.sroa.13.2.lcssa %75 = add i64 %.sroa.5.2.lcssa, %72 - %76 = add i64 %.sroa.9.053, -1 + %76 = add i64 %.sroa.9.051, -1 %77 = sub nsw i64 0, %75 - %gep57 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep56, i64 %77 - %.val3.i = load i64, ptr %gep57, align 8, !alias.scope !232, !noalias !237, !noundef !4 + %gep55 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep54, i64 %77 + %.val3.i = load i64, ptr %gep55, align 8, !alias.scope !232, !noalias !237, !noundef !4 %78 = mul i64 %.val3.i, 5871781006564002453 %.sroa.0.019.i = and i64 %54, %78 %79 = getelementptr inbounds nuw i8, ptr %57, i64 %.sroa.0.019.i @@ -1235,14 +1235,14 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr %.not.i.not.not21.i = icmp eq i16 %81, 0 br i1 %.not.i.not.not21.i, label %.lr.ph.i, label %._crit_edge.i -.thread35: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit, %52 +.thread33: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit, %52 %82 = sub i64 %.sroa.02.0.i.i, %7 store i64 %82, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !216 store i64 %7, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !216 br label %83 -83: ; preds = %83, %.thread35 - %.sroa.0.05.i.i = phi i64 [ 0, %.thread35 ], [ %88, %83 ] +83: ; preds = %83, %.thread33 + %.sroa.0.05.i.i = phi i64 [ 0, %.thread33 ], [ %88, %83 ] %84 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %85 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i %86 = load i64, ptr %84, align 8 @@ -1337,60 +1337,59 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086 %130 = getelementptr inbounds i8, ptr %57, i64 %129 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %130, ptr noundef nonnull align 1 dereferenceable(32) %127, i64 32, i1 false) %.not = icmp eq i64 %76, 0 - br i1 %.not, label %.thread35, label %.preheader + br i1 %.not, label %.thread33, label %.preheader 131: ; preds = %10 tail call void @llvm.experimental.noalias.scope.decl(metadata !263) %.val.i = load ptr, ptr %0, align 8, !alias.scope !263 - %132 = lshr i64 %15, 4 - %133 = and i64 %15, 15 - %.not.i.i.i.i = icmp ne i64 %133, 0 - %134 = zext i1 %.not.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %132, %134 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %15, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread24.i, label %.lr.ph.i.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread24.i: ; preds = %131 + %132 = icmp ne ptr %.val.i, null + tail call void @llvm.assume(i1 %132) + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit .lr.ph.i.i: ; preds = %131 - %135 = icmp ne ptr %.val.i, null - tail call void @llvm.assume(i1 %135) - br label %136 - -136: ; preds = %136, %.lr.ph.i.i - %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %137, %136 ] - %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %138, %136 ] - %137 = add i64 %.sroa.0.07.i.i, 16 - %138 = add nsw i64 %.sroa.5.06.i.i, -1 - %139 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.07.i.i - %140 = load <16 x i8>, ptr %139, align 16, !noalias !266 - %.lobit.i.i.i = ashr <16 x i8> %140, splat (i8 7) - %141 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %142 = or <2 x i64> %141, splat (i64 -9187201950435737472) - store <2 x i64> %142, ptr %139, align 16, !noalias !269 - %.not.i.i = icmp eq i64 %138, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i, label %136 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i: ; preds = %136, %131 - %143 = icmp ne ptr %.val.i, null - tail call void @llvm.assume(i1 %143) - %..i.i3 = tail call i64 @llvm.umax.i64(i64 %15, i64 16) - %.10.i.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) - %144 = getelementptr inbounds i8, ptr %.val.i, i64 %..i.i3 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %144, ptr nonnull align 1 %.val.i, i64 %.10.i.i, i1 false), !noalias !263 - %.not17.i = icmp eq i64 %15, 0 - br i1 %.not17.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %.lr.ph.i4 - -.lr.ph.i4: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i + %133 = lshr i64 %15, 4 + %134 = and i64 %15, 15 + %.not.i.i.i.i = icmp ne i64 %134, 0 + %135 = zext i1 %.not.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %133, %135 + %136 = icmp ne ptr %.val.i, null + tail call void @llvm.assume(i1 %136) + br label %138 + +._crit_edge.i.i: ; preds = %138 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %15, i64 16) + %spec.select30.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) + %137 = getelementptr inbounds i8, ptr %.val.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %137, ptr nonnull align 1 %.val.i, i64 %spec.select30.i, i1 false), !noalias !263 %invariant.gep11.i = getelementptr i8, ptr %.val.i, i64 -24 %invariant.gep.i = getelementptr i8, ptr %.val.i, i64 16 br label %145 -145: ; preds = %205, %.lr.ph.i4 - %.sroa.0.010.i = phi i64 [ 0, %.lr.ph.i4 ], [ %146, %205 ] +138: ; preds = %138, %.lr.ph.i.i + %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %139, %138 ] + %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %140, %138 ] + %139 = add i64 %.sroa.0.07.i.i, 16 + %140 = add i64 %.sroa.5.06.i.i, -1 + %141 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.07.i.i + %142 = load <16 x i8>, ptr %141, align 16, !noalias !266 + %.lobit.i.i.i = ashr <16 x i8> %142, splat (i8 7) + %143 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %144 = or <2 x i64> %143, splat (i64 -9187201950435737472) + store <2 x i64> %144, ptr %141, align 16, !noalias !269 + %.not.i.i = icmp eq i64 %140, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %138 + +145: ; preds = %205, %._crit_edge.i.i + %.sroa.0.010.i = phi i64 [ 0, %._crit_edge.i.i ], [ %146, %205 ] %146 = add nuw i64 %.sroa.0.010.i, 1 %147 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.010.i %148 = load i8, ptr %147, align 1, !noalias !263, !noundef !4 - %.not.i5 = icmp eq i8 %148, -128 - br i1 %.not.i5, label %149, label %205 + %.not.i3 = icmp eq i8 %148, -128 + br i1 %.not.i3, label %149, label %205 149: ; preds = %145 %150 = shl i64 %.sroa.0.010.i, 5 @@ -1409,24 +1408,24 @@ _ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i: ; preds = %.prehea %156 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1720.i.i, zeroinitializer %157 = bitcast <16 x i1> %156 to i16 %.not.i.not.not21.i.i = icmp eq i16 %157, 0 - br i1 %.not.i.not.not21.i.i, label %.lr.ph.i10.i, label %._crit_edge.i.i + br i1 %.not.i.not.not21.i.i, label %.lr.ph.i11.i, label %._crit_edge.i10.i -.lr.ph.i10.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, %.lr.ph.i10.i - %.sroa.0.023.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i10.i ], [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ] - %.sroa.7.022.i.i = phi i64 [ %158, %.lr.ph.i10.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ] +.lr.ph.i11.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, %.lr.ph.i11.i + %.sroa.0.023.i.i = phi i64 [ %.sroa.0.0.i.i6, %.lr.ph.i11.i ], [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ] + %.sroa.7.022.i.i = phi i64 [ %158, %.lr.ph.i11.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ] %158 = add i64 %.sroa.7.022.i.i, 16 %159 = add i64 %158, %.sroa.0.023.i.i - %.sroa.0.0.i.i8 = and i64 %159, %13 - %160 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i8 + %.sroa.0.0.i.i6 = and i64 %159, %13 + %160 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i6 %.sroa.0.0.copyload.i17.i.i = load <16 x i8>, ptr %160, align 1, !noalias !284 %161 = icmp slt <16 x i8> %.sroa.0.0.copyload.i17.i.i, zeroinitializer %162 = bitcast <16 x i1> %161 to i16 %.not.i.not.not.i.i = icmp eq i16 %162, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i10.i, label %._crit_edge.i.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i11.i, label %._crit_edge.i10.i -._crit_edge.i.i: ; preds = %.lr.ph.i10.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ], [ %.sroa.0.0.i.i8, %.lr.ph.i10.i ] - %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ], [ %162, %.lr.ph.i10.i ] +._crit_edge.i10.i: ; preds = %.lr.ph.i11.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ], [ %.sroa.0.0.i.i6, %.lr.ph.i11.i ] + %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ], [ %162, %.lr.ph.i11.i ] %163 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %164 = zext nneg i16 %163 to i64 %165 = add i64 %.sroa.0.0.lcssa.i.i, %164 @@ -1436,7 +1435,7 @@ _ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i: ; preds = %.prehea %169 = icmp sgt i8 %168, -1 br i1 %169, label %170, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i -170: ; preds = %._crit_edge.i.i +170: ; preds = %._crit_edge.i10.i %171 = load <16 x i8>, ptr %.val.i, align 16, !noalias !290 %172 = icmp slt <16 x i8> %171, zeroinitializer %173 = bitcast <16 x i1> %172 to i16 @@ -1446,8 +1445,8 @@ _ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i: ; preds = %.prehea %176 = zext nneg i16 %175 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i: ; preds = %170, %._crit_edge.i.i - %.sroa.0.0.i12.i.i = phi i64 [ %176, %170 ], [ %166, %._crit_edge.i.i ] +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i: ; preds = %170, %._crit_edge.i10.i + %.sroa.0.0.i12.i.i = phi i64 [ %176, %170 ], [ %166, %._crit_edge.i10.i ] %177 = sub i64 %.sroa.0.010.i, %.sroa.0.019.i.i %178 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.019.i.i %179 = xor i64 %178, %177 @@ -1490,8 +1489,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086 store i8 %200, ptr %197, align 1, !noalias !263 store i8 %199, ptr %198, align 1, !noalias !263 %201 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i7 = icmp eq i64 %201, 32 - br i1 %exitcond.not.i.i7, label %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, label %.preheader.i + %exitcond.not.i.i5 = icmp eq i64 %201, 32 + br i1 %exitcond.not.i.i5, label %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, label %.preheader.i 202: ; preds = %181 %203 = add i64 %.sroa.0.010.i, -16 @@ -1506,7 +1505,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086 %exitcond.not.i = icmp eq i64 %.sroa.0.010.i, %13 br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %145 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit: ; preds = %205, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit: ; preds = %205, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread24.i %206 = getelementptr inbounds nuw i8, ptr %0, i64 16 %207 = sub i64 %.sroa.03.0.i, %7 store i64 %207, ptr %206, align 8, !alias.scope !263 diff --git a/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll b/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll index 586a9ee9c32..d201f6889c8 100644 --- a/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll +++ b/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll @@ -7016,9 +7016,9 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !1419 %63 = load i64, ptr %7, align 8, !alias.scope !1427, !noalias !1428, !noundef !4 %invariant.gep = getelementptr i8, ptr %62, i64 16 - %invariant.gep54 = getelementptr i8, ptr %62, i64 -40 - %.not56 = icmp eq i64 %63, 0 - br i1 %.not56, label %.thread36, label %.preheader.lr.ph + %invariant.gep53 = getelementptr i8, ptr %62, i64 -40 + %.not55 = icmp eq i64 %63, 0 + br i1 %.not55, label %.thread35, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit %64 = load ptr, ptr %0, align 8, !alias.scope !1427, !noalias !1428, !nonnull !4, !noundef !4 @@ -7042,21 +7042,21 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit %71 = phi ptr [ %64, %.preheader.lr.ph ], [ %150, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.010.060 = phi ptr [ %64, %.preheader.lr.ph ], [ %.sroa.010.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.5.059 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.9.058 = phi i64 [ %63, %.preheader.lr.ph ], [ %85, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.13.057 = phi i16 [ %68, %.preheader.lr.ph ], [ %83, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %72 = icmp eq i16 %.sroa.13.057, 0 + %.sroa.09.059 = phi ptr [ %64, %.preheader.lr.ph ], [ %.sroa.09.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.5.058 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.9.057 = phi i64 [ %63, %.preheader.lr.ph ], [ %85, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.13.056 = phi i16 [ %68, %.preheader.lr.ph ], [ %83, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %72 = icmp eq i16 %.sroa.13.056, 0 br i1 %72, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.010.251 = phi ptr [ %73, %.noexc2 ], [ %.sroa.010.060, %.preheader ] - %.sroa.5.250 = phi i64 [ %77, %.noexc2 ], [ %.sroa.5.059, %.preheader ] - %73 = getelementptr inbounds nuw i8, ptr %.sroa.010.251, i64 16 + %.sroa.09.250 = phi ptr [ %73, %.noexc2 ], [ %.sroa.09.059, %.preheader ] + %.sroa.5.249 = phi i64 [ %77, %.noexc2 ], [ %.sroa.5.058, %.preheader ] + %73 = getelementptr inbounds nuw i8, ptr %.sroa.09.250, i64 16 %74 = load <16 x i8>, ptr %73, align 16, !noalias !1432 %75 = icmp slt <16 x i8> %74, zeroinitializer %76 = bitcast <16 x i1> %75 to i16 - %77 = add i64 %.sroa.5.250, 16 + %77 = add i64 %.sroa.5.249, 16 %78 = icmp eq i16 %76, -1 br i1 %78, label %.noexc2, label %._crit_edge.loopexit @@ -7065,15 +7065,15 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.057, %.preheader ], [ %79, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.059, %.preheader ], [ %77, %._crit_edge.loopexit ] - %.sroa.010.2.lcssa = phi ptr [ %.sroa.010.060, %.preheader ], [ %73, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.056, %.preheader ], [ %79, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.058, %.preheader ], [ %77, %._crit_edge.loopexit ] + %.sroa.09.2.lcssa = phi ptr [ %.sroa.09.059, %.preheader ], [ %73, %._crit_edge.loopexit ] %80 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %81 = zext nneg i16 %80 to i64 %82 = add i16 %.sroa.13.2.lcssa, -1 %83 = and i16 %82, %.sroa.13.2.lcssa %84 = add i64 %.sroa.5.2.lcssa, %81 - %85 = add i64 %.sroa.9.058, -1 + %85 = add i64 %.sroa.9.057, -1 %86 = sub nsw i64 0, %84 %87 = getelementptr inbounds { { i64, [2 x i64] }, { { { { ptr, ptr } }, {} }, {} } }, ptr %71, i64 %86 %88 = getelementptr inbounds i8, ptr %87, i64 -40 @@ -7090,19 +7090,19 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi %91 = getelementptr inbounds i8, ptr %87, i64 -32 br i1 %.not.i.i.i, label %112, label %115 -.thread36.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit +.thread35.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit %.pre = load i64, ptr %7, align 8, !alias.scope !1427, !noalias !1428 - br label %.thread36 + br label %.thread35 -.thread36: ; preds = %.thread36.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit - %92 = phi i64 [ %.pre, %.thread36.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit ] +.thread35: ; preds = %.thread35.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit + %92 = phi i64 [ %.pre, %.thread35.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit ] %93 = sub i64 %.sroa.02.0.i.i, %92 store i64 %93, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !1419 store i64 %92, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !1419 br label %94 -94: ; preds = %94, %.thread36 - %.sroa.0.05.i.i = phi i64 [ 0, %.thread36 ], [ %99, %94 ] +94: ; preds = %94, %.thread35 + %.sroa.0.05.i.i = phi i64 [ 0, %.thread35 ], [ %99, %94 ] %95 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %96 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i %97 = load i64, ptr %95, align 8 @@ -7224,10 +7224,10 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit: ; p %151 = getelementptr i8, ptr %150, i64 %.neg.i.i %152 = getelementptr i8, ptr %151, i64 -40 %.neg72.i.i = mul i64 %.sroa.0.0.i12.i, -40 - %gep55 = getelementptr i8, ptr %invariant.gep54, i64 %.neg72.i.i - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %gep55, ptr noundef nonnull align 1 dereferenceable(40) %152, i64 40, i1 false) + %gep54 = getelementptr i8, ptr %invariant.gep53, i64 %.neg72.i.i + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %gep54, ptr noundef nonnull align 1 dereferenceable(40) %152, i64 40, i1 false) %.not = icmp eq i64 %85, 0 - br i1 %.not, label %.thread36.loopexit, label %.preheader + br i1 %.not, label %.thread35.loopexit, label %.preheader common.resume: ; preds = %169, %69 %common.resume.op = phi { ptr, i32 } [ %70, %69 ], [ %170, %169 ] @@ -7236,48 +7236,51 @@ common.resume: ; preds = %169, %69 153: ; preds = %10 tail call void @llvm.experimental.noalias.scope.decl(metadata !1484) %.val11.i = load ptr, ptr %0, align 8, !alias.scope !1484 - %154 = lshr i64 %14, 4 - %155 = and i64 %14, 15 - %.not.i.i.i.i = icmp ne i64 %155, 0 - %156 = zext i1 %.not.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %154, %156 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %14, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread, label %.lr.ph.i.i + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread: ; preds = %153 + %154 = icmp ne ptr %.val11.i, null + tail call void @llvm.assume(i1 %154) + call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !1484 + br label %264 .lr.ph.i.i: ; preds = %153 - %157 = icmp ne ptr %.val11.i, null - tail call void @llvm.assume(i1 %157) - br label %158 - -158: ; preds = %158, %.lr.ph.i.i - %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %159, %158 ] - %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %160, %158 ] - %159 = add i64 %.sroa.0.07.i.i, 16 - %160 = add nsw i64 %.sroa.5.06.i.i, -1 - %161 = getelementptr inbounds i8, ptr %.val11.i, i64 %.sroa.0.07.i.i - %162 = load <16 x i8>, ptr %161, align 16, !noalias !1487 - %.lobit.i.i.i = ashr <16 x i8> %162, splat (i8 7) - %163 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %164 = or <2 x i64> %163, splat (i64 -9187201950435737472) - store <2 x i64> %164, ptr %161, align 16, !noalias !1490 - %.not.i.i = icmp eq i64 %160, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i, label %158 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i: ; preds = %158, %153 - %165 = icmp ne ptr %.val11.i, null - tail call void @llvm.assume(i1 %165) - %..i.i5 = tail call i64 @llvm.umax.i64(i64 %14, i64 16) - %.10.i.i = tail call i64 @llvm.umin.i64(i64 %14, i64 16) - %166 = getelementptr inbounds i8, ptr %.val11.i, i64 %..i.i5 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %166, ptr nonnull align 1 %.val11.i, i64 %.10.i.i, i1 false), !noalias !1484 + %155 = lshr i64 %14, 4 + %156 = and i64 %14, 15 + %.not.i.i.i.i = icmp ne i64 %156, 0 + %157 = zext i1 %.not.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %155, %157 + %158 = icmp ne ptr %.val11.i, null + tail call void @llvm.assume(i1 %158) + br label %162 + +._crit_edge.i.i: ; preds = %162 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %14, i64 16) + %spec.select26.i = tail call i64 @llvm.umin.i64(i64 %14, i64 16) + %159 = getelementptr inbounds i8, ptr %.val11.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %159, ptr nonnull align 1 %.val11.i, i64 %spec.select26.i, i1 false), !noalias !1484 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !1484 - %167 = getelementptr inbounds nuw i8, ptr %3, i64 8 - store ptr @"_ZN4core3ptr244drop_in_place$LT$$LP$lsp..RequestId$C$alloc..boxed..Box$LT$dyn$u20$core..ops..function..FnOnce$LT$$LP$core..result..Result$LT$alloc..string..String$C$lsp..Error$GT$$C$$RP$$GT$$u2b$Output$u20$$u3d$$u20$$LP$$RP$$u2b$core..marker..Send$GT$$RP$$GT$17h835eaba873fdc9feE", ptr %167, align 8, !noalias !1484 - %168 = getelementptr inbounds nuw i8, ptr %3, i64 16 - store i64 40, ptr %168, align 8, !noalias !1484 + %160 = getelementptr inbounds nuw i8, ptr %3, i64 8 + store ptr @"_ZN4core3ptr244drop_in_place$LT$$LP$lsp..RequestId$C$alloc..boxed..Box$LT$dyn$u20$core..ops..function..FnOnce$LT$$LP$core..result..Result$LT$alloc..string..String$C$lsp..Error$GT$$C$$RP$$GT$$u2b$Output$u20$$u3d$$u20$$LP$$RP$$u2b$core..marker..Send$GT$$RP$$GT$17h835eaba873fdc9feE", ptr %160, align 8, !noalias !1484 + %161 = getelementptr inbounds nuw i8, ptr %3, i64 16 + store i64 40, ptr %161, align 8, !noalias !1484 store ptr %0, ptr %3, align 8, !noalias !1484 - %.not8.i = icmp eq i64 %14, 0 - br i1 %.not8.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread, label %.lr.ph.i6 + br label %.lr.ph.i5 + +162: ; preds = %162, %.lr.ph.i.i + %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %163, %162 ] + %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %164, %162 ] + %163 = add i64 %.sroa.0.07.i.i, 16 + %164 = add i64 %.sroa.5.06.i.i, -1 + %165 = getelementptr inbounds i8, ptr %.val11.i, i64 %.sroa.0.07.i.i + %166 = load <16 x i8>, ptr %165, align 16, !noalias !1487 + %.lobit.i.i.i = ashr <16 x i8> %166, splat (i8 7) + %167 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %168 = or <2 x i64> %167, splat (i64 -9187201950435737472) + store <2 x i64> %168, ptr %165, align 16, !noalias !1490 + %.not.i.i = icmp eq i64 %164, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %162 169: ; preds = %188 %170 = landingpad { ptr, i32 } @@ -7285,8 +7288,8 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17ha45003918da87280E"(ptr noalias noundef align 8 dereferenceable(24) %3) #44 to label %common.resume unwind label %259 -.lr.ph.i6: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i, %258 - %.sroa.0.07.i = phi i64 [ %171, %258 ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i ] +.lr.ph.i5: ; preds = %258, %._crit_edge.i.i + %.sroa.0.07.i = phi i64 [ %171, %258 ], [ 0, %._crit_edge.i.i ] %171 = add nuw i64 %.sroa.0.07.i, 1 %172 = load ptr, ptr %0, align 8, !alias.scope !1484, !nonnull !4, !noundef !4 %173 = getelementptr inbounds i8, ptr %172, i64 %.sroa.0.07.i @@ -7294,7 +7297,7 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex %.not.i = icmp eq i8 %174, -128 br i1 %.not.i, label %175, label %258 -175: ; preds = %.lr.ph.i6 +175: ; preds = %.lr.ph.i5 %.neg.i = mul i64 %.sroa.0.07.i, -40 %176 = getelementptr i8, ptr %172, i64 %.neg.i %177 = getelementptr i8, ptr %176, i64 -40 @@ -7354,24 +7357,24 @@ _ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.i: ; preds = %_ZN4cor %197 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %198 = bitcast <16 x i1> %197 to i16 %.not.i.not.not8.i.i = icmp eq i16 %198, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i14.i, label %._crit_edge.i.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i15.i, label %._crit_edge.i14.i -.lr.ph.i14.i: ; preds = %195, %.lr.ph.i14.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i9, %.lr.ph.i14.i ], [ %.sroa.0.06.i.i, %195 ] - %.sroa.7.09.i.i = phi i64 [ %199, %.lr.ph.i14.i ], [ 0, %195 ] +.lr.ph.i15.i: ; preds = %195, %.lr.ph.i15.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i15.i ], [ %.sroa.0.06.i.i, %195 ] + %.sroa.7.09.i.i = phi i64 [ %199, %.lr.ph.i15.i ], [ 0, %195 ] %199 = add i64 %.sroa.7.09.i.i, 16 %200 = add i64 %199, %.sroa.0.010.i.i - %.sroa.0.0.i.i9 = and i64 %200, %.val10.i - %201 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i9 + %.sroa.0.0.i.i8 = and i64 %200, %.val10.i + %201 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i8 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %201, align 1, !noalias !1528 %202 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %203 = bitcast <16 x i1> %202 to i16 %.not.i.not.not.i.i = icmp eq i16 %203, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i14.i, label %._crit_edge.i.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i15.i, label %._crit_edge.i14.i -._crit_edge.i.i: ; preds = %.lr.ph.i14.i, %195 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %195 ], [ %.sroa.0.0.i.i9, %.lr.ph.i14.i ] - %.lcssa.i.i = phi i16 [ %198, %195 ], [ %203, %.lr.ph.i14.i ] +._crit_edge.i14.i: ; preds = %.lr.ph.i15.i, %195 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %195 ], [ %.sroa.0.0.i.i8, %.lr.ph.i15.i ] + %.lcssa.i.i = phi i16 [ %198, %195 ], [ %203, %.lr.ph.i15.i ] %204 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %205 = zext nneg i16 %204 to i64 %206 = add i64 %.sroa.0.0.lcssa.i.i, %205 @@ -7381,7 +7384,7 @@ _ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.i: ; preds = %_ZN4cor %210 = icmp sgt i8 %209, -1 br i1 %210, label %211, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -211: ; preds = %._crit_edge.i.i +211: ; preds = %._crit_edge.i14.i %212 = load <16 x i8>, ptr %.val.i, align 16, !noalias !1531 %213 = icmp slt <16 x i8> %212, zeroinitializer %214 = bitcast <16 x i1> %213 to i16 @@ -7391,8 +7394,8 @@ _ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.i: ; preds = %_ZN4cor %217 = zext nneg i16 %216 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %211, %._crit_edge.i.i - %.sroa.0.0.i12.i.i = phi i64 [ %217, %211 ], [ %207, %._crit_edge.i.i ] +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %211, %._crit_edge.i14.i + %.sroa.0.0.i12.i.i = phi i64 [ %217, %211 ], [ %207, %._crit_edge.i14.i ] %218 = sub i64 %.sroa.0.07.i, %.sroa.0.06.i.i %219 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i %220 = xor i64 %219, %218 @@ -7440,8 +7443,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; store i8 %247, ptr %244, align 1 store i8 %246, ptr %245, align 1 %248 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i8 = icmp eq i64 %248, 40 - br i1 %exitcond.not.i.i8, label %_ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.loopexit.i, label %.preheader.i + %exitcond.not.i.i7 = icmp eq i64 %248, 40 + br i1 %exitcond.not.i.i7, label %_ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.loopexit.i, label %.preheader.i 249: ; preds = %222 %250 = add i64 %.sroa.0.07.i, -16 @@ -7457,9 +7460,9 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(40) %224, ptr noundef nonnull align 1 dereferenceable(40) %177, i64 40, i1 false) br label %258 -258: ; preds = %249, %235, %.lr.ph.i6 +258: ; preds = %249, %235, %.lr.ph.i5 %exitcond.not.i = icmp eq i64 %.sroa.0.07.i, %12 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %.lr.ph.i6 + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %.lr.ph.i5 259: ; preds = %169 %260 = landingpad { ptr, i32 } @@ -7475,20 +7478,20 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit: ; pr %262 = mul nuw i64 %261, 7 %263 = icmp ult i64 %.pre14.i.fr, 8 %spec.select = select i1 %263, i64 %.pre14.i.fr, i64 %262 - %.pre70 = load i64, ptr %7, align 8, !alias.scope !1484 - br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread - -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i - %264 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i ], [ %.pre70, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] - %265 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] - %266 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %267 = sub i64 %265, %264 - store i64 %267, ptr %266, align 8, !alias.scope !1484 + %.pre69 = load i64, ptr %7, align 8, !alias.scope !1484 + br label %264 + +264: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread + %265 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread ], [ %.pre69, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] + %266 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] + %267 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %268 = sub i64 %266, %265 + store i64 %268, ptr %267, align 8, !alias.scope !1484 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3), !noalias !1484 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha6a42e656fc23b0bE.exit -_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha6a42e656fc23b0bE.exit: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h8068e8f06ace5fe6E.exit", %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit.thread, %18 - %.merged.i = phi i64 [ %20, %18 ], [ -9223372036854775807, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread ], [ %.sroa.7.0.i.i.ph, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h8068e8f06ace5fe6E.exit" ] +_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha6a42e656fc23b0bE.exit: ; preds = %264, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h8068e8f06ace5fe6E.exit", %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit.thread, %18 + %.merged.i = phi i64 [ %20, %18 ], [ -9223372036854775807, %264 ], [ %.sroa.7.0.i.i.ph, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h8068e8f06ace5fe6E.exit" ] ret i64 %.merged.i } diff --git a/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll b/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll index 20ab530500b..af981e6e7ac 100644 --- a/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll +++ b/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll @@ -116,8 +116,8 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 %invariant.gep = getelementptr i8, ptr %57, i64 16 - %.not53 = icmp eq i64 %7, 0 - br i1 %.not53, label %.thread37, label %.preheader.lr.ph + %.not51 = icmp eq i64 %7, 0 + br i1 %.not51, label %.thread35, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %52 %58 = load ptr, ptr %0, align 8, !alias.scope !22, !noalias !23, !nonnull !9, !noundef !9 @@ -125,25 +125,25 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr %60 = icmp slt <16 x i8> %59, zeroinitializer %61 = bitcast <16 x i1> %60 to i16 %62 = xor i16 %61, -1 - %invariant.gep58 = getelementptr i8, ptr %58, i64 -24 + %invariant.gep56 = getelementptr i8, ptr %58, i64 -24 br label %.preheader .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit - %.sroa.011.057 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.011.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.5.056 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.9.055 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.13.054 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %63 = icmp eq i16 %.sroa.13.054, 0 + %.sroa.09.055 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.09.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.5.054 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.9.053 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.13.052 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %63 = icmp eq i16 %.sroa.13.052, 0 br i1 %63, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.011.250 = phi ptr [ %64, %.noexc2 ], [ %.sroa.011.057, %.preheader ] - %.sroa.5.249 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.056, %.preheader ] - %64 = getelementptr inbounds nuw i8, ptr %.sroa.011.250, i64 16 + %.sroa.09.248 = phi ptr [ %64, %.noexc2 ], [ %.sroa.09.055, %.preheader ] + %.sroa.5.247 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.054, %.preheader ] + %64 = getelementptr inbounds nuw i8, ptr %.sroa.09.248, i64 16 %65 = load <16 x i8>, ptr %64, align 16, !noalias !27 %66 = icmp slt <16 x i8> %65, zeroinitializer %67 = bitcast <16 x i1> %66 to i16 - %68 = add i64 %.sroa.5.249, 16 + %68 = add i64 %.sroa.5.247, 16 %69 = icmp eq i16 %67, -1 br i1 %69, label %.noexc2, label %._crit_edge.loopexit @@ -152,18 +152,18 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.054, %.preheader ], [ %70, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.056, %.preheader ], [ %68, %._crit_edge.loopexit ] - %.sroa.011.2.lcssa = phi ptr [ %.sroa.011.057, %.preheader ], [ %64, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.052, %.preheader ], [ %70, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.054, %.preheader ], [ %68, %._crit_edge.loopexit ] + %.sroa.09.2.lcssa = phi ptr [ %.sroa.09.055, %.preheader ], [ %64, %._crit_edge.loopexit ] %71 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %72 = zext nneg i16 %71 to i64 %73 = add i16 %.sroa.13.2.lcssa, -1 %74 = and i16 %73, %.sroa.13.2.lcssa %75 = add i64 %.sroa.5.2.lcssa, %72 - %76 = add i64 %.sroa.9.055, -1 + %76 = add i64 %.sroa.9.053, -1 %77 = sub nsw i64 0, %75 - %gep59 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep58, i64 %77 - %.val3.i = load i64, ptr %gep59, align 8, !alias.scope !30, !noalias !35, !noundef !9 + %gep57 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep56, i64 %77 + %.val3.i = load i64, ptr %gep57, align 8, !alias.scope !30, !noalias !35, !noundef !9 %78 = mul i64 %.val3.i, 5871781006564002453 %.sroa.0.06.i = and i64 %78, %54 %79 = getelementptr inbounds nuw i8, ptr %57, i64 %.sroa.0.06.i @@ -173,14 +173,14 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr %.not.i.not.not8.i = icmp eq i16 %81, 0 br i1 %.not.i.not.not8.i, label %.lr.ph.i, label %._crit_edge.i -.thread37: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit, %52 +.thread35: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit, %52 %82 = sub i64 %.sroa.02.0.i.i, %7 store i64 %82, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 store i64 %7, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 br label %83 -83: ; preds = %83, %.thread37 - %.sroa.0.05.i.i = phi i64 [ 0, %.thread37 ], [ %88, %83 ] +83: ; preds = %83, %.thread35 + %.sroa.0.05.i.i = phi i64 [ 0, %.thread35 ], [ %88, %83 ] %84 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %85 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i %86 = load i64, ptr %84, align 8 @@ -275,60 +275,59 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit: ; p %130 = getelementptr inbounds i8, ptr %57, i64 %129 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %130, ptr noundef nonnull align 1 dereferenceable(32) %127, i64 32, i1 false) %.not = icmp eq i64 %76, 0 - br i1 %.not, label %.thread37, label %.preheader + br i1 %.not, label %.thread35, label %.preheader 131: ; preds = %10 tail call void @llvm.experimental.noalias.scope.decl(metadata !55) %.val10.i = load ptr, ptr %0, align 8, !alias.scope !55 - %132 = lshr i64 %15, 4 - %133 = and i64 %15, 15 - %.not.i.i.i.i = icmp ne i64 %133, 0 - %134 = zext i1 %.not.i.i.i.i to i64 - %.sroa.0.0.i.i.i.i = add nuw nsw i64 %132, %134 - %.not5.i.i = icmp eq i64 %.sroa.0.0.i.i.i.i, 0 - br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i, label %.lr.ph.i.i + %.not5.i.i = icmp eq i64 %15, 0 + br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread23.i, label %.lr.ph.i.i + +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread23.i: ; preds = %131 + %132 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %132) + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit .lr.ph.i.i: ; preds = %131 - %135 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %135) - br label %136 - -136: ; preds = %136, %.lr.ph.i.i - %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %137, %136 ] - %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %138, %136 ] - %137 = add i64 %.sroa.0.07.i.i, 16 - %138 = add nsw i64 %.sroa.5.06.i.i, -1 - %139 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.07.i.i - %140 = load <16 x i8>, ptr %139, align 16, !noalias !58 - %.lobit.i.i.i = ashr <16 x i8> %140, splat (i8 7) - %141 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> - %142 = or <2 x i64> %141, splat (i64 -9187201950435737472) - store <2 x i64> %142, ptr %139, align 16, !noalias !61 - %.not.i.i = icmp eq i64 %138, 0 - br i1 %.not.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i, label %136 - -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i: ; preds = %136, %131 - %143 = icmp ne ptr %.val10.i, null - tail call void @llvm.assume(i1 %143) - %..i.i4 = tail call i64 @llvm.umax.i64(i64 %15, i64 16) - %.10.i.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) - %144 = getelementptr inbounds i8, ptr %.val10.i, i64 %..i.i4 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %144, ptr nonnull align 1 %.val10.i, i64 %.10.i.i, i1 false), !noalias !55 - %.not16.i = icmp eq i64 %15, 0 - br i1 %.not16.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %.lr.ph.i5 - -.lr.ph.i5: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i + %133 = lshr i64 %15, 4 + %134 = and i64 %15, 15 + %.not.i.i.i.i = icmp ne i64 %134, 0 + %135 = zext i1 %.not.i.i.i.i to i64 + %.sroa.0.0.i.i.i.i = add nuw nsw i64 %133, %135 + %136 = icmp ne ptr %.val10.i, null + tail call void @llvm.assume(i1 %136) + br label %138 + +._crit_edge.i.i: ; preds = %138 + %spec.select.i = tail call i64 @llvm.umax.i64(i64 %15, i64 16) + %spec.select29.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) + %137 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %137, ptr nonnull align 1 %.val10.i, i64 %spec.select29.i, i1 false), !noalias !55 %invariant.gep10.i = getelementptr i8, ptr %.val10.i, i64 -24 %invariant.gep.i = getelementptr i8, ptr %.val10.i, i64 16 br label %145 -145: ; preds = %205, %.lr.ph.i5 - %.sroa.0.09.i = phi i64 [ 0, %.lr.ph.i5 ], [ %146, %205 ] +138: ; preds = %138, %.lr.ph.i.i + %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %139, %138 ] + %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %140, %138 ] + %139 = add i64 %.sroa.0.07.i.i, 16 + %140 = add i64 %.sroa.5.06.i.i, -1 + %141 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.07.i.i + %142 = load <16 x i8>, ptr %141, align 16, !noalias !58 + %.lobit.i.i.i = ashr <16 x i8> %142, splat (i8 7) + %143 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> + %144 = or <2 x i64> %143, splat (i64 -9187201950435737472) + store <2 x i64> %144, ptr %141, align 16, !noalias !61 + %.not.i.i = icmp eq i64 %140, 0 + br i1 %.not.i.i, label %._crit_edge.i.i, label %138 + +145: ; preds = %205, %._crit_edge.i.i + %.sroa.0.09.i = phi i64 [ 0, %._crit_edge.i.i ], [ %146, %205 ] %146 = add nuw i64 %.sroa.0.09.i, 1 %147 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.09.i %148 = load i8, ptr %147, align 1, !noalias !55, !noundef !9 - %.not.i6 = icmp eq i8 %148, -128 - br i1 %.not.i6, label %149, label %205 + %.not.i4 = icmp eq i8 %148, -128 + br i1 %.not.i4, label %149, label %205 149: ; preds = %145 %150 = shl i64 %.sroa.0.09.i, 5 @@ -339,32 +338,32 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex br label %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i _ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i: ; preds = %.preheader.i, %149 - %.val3.i.i8 = load i64, ptr %gep11.i, align 8, !alias.scope !64, !noalias !69, !noundef !9 - %154 = mul i64 %.val3.i.i8, 5871781006564002453 + %.val3.i.i6 = load i64, ptr %gep11.i, align 8, !alias.scope !64, !noalias !69, !noundef !9 + %154 = mul i64 %.val3.i.i6, 5871781006564002453 %.sroa.0.06.i.i = and i64 %154, %13 %155 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.06.i.i %.sroa.0.0.copyload.i57.i.i = load <16 x i8>, ptr %155, align 1, !noalias !76 %156 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %157 = bitcast <16 x i1> %156 to i16 %.not.i.not.not8.i.i = icmp eq i16 %157, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i12.i, label %._crit_edge.i.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i13.i, label %._crit_edge.i12.i -.lr.ph.i12.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, %.lr.ph.i12.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i10, %.lr.ph.i12.i ], [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ] - %.sroa.7.09.i.i = phi i64 [ %158, %.lr.ph.i12.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ] +.lr.ph.i13.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, %.lr.ph.i13.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ], [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ] + %.sroa.7.09.i.i = phi i64 [ %158, %.lr.ph.i13.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ] %158 = add i64 %.sroa.7.09.i.i, 16 %159 = add i64 %158, %.sroa.0.010.i.i - %.sroa.0.0.i.i10 = and i64 %159, %13 - %160 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i10 + %.sroa.0.0.i.i8 = and i64 %159, %13 + %160 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i8 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %160, align 1, !noalias !76 %161 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %162 = bitcast <16 x i1> %161 to i16 %.not.i.not.not.i.i = icmp eq i16 %162, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i12.i, label %._crit_edge.i.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i13.i, label %._crit_edge.i12.i -._crit_edge.i.i: ; preds = %.lr.ph.i12.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ], [ %.sroa.0.0.i.i10, %.lr.ph.i12.i ] - %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ], [ %162, %.lr.ph.i12.i ] +._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ], [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ] + %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ], [ %162, %.lr.ph.i13.i ] %163 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %164 = zext nneg i16 %163 to i64 %165 = add i64 %.sroa.0.0.lcssa.i.i, %164 @@ -374,7 +373,7 @@ _ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i: ; preds = %.prehea %169 = icmp sgt i8 %168, -1 br i1 %169, label %170, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -170: ; preds = %._crit_edge.i.i +170: ; preds = %._crit_edge.i12.i %171 = load <16 x i8>, ptr %.val10.i, align 16, !noalias !79 %172 = icmp slt <16 x i8> %171, zeroinitializer %173 = bitcast <16 x i1> %172 to i16 @@ -384,8 +383,8 @@ _ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i: ; preds = %.prehea %176 = zext nneg i16 %175 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %170, %._crit_edge.i.i - %.sroa.0.0.i12.i.i = phi i64 [ %176, %170 ], [ %166, %._crit_edge.i.i ] +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %170, %._crit_edge.i12.i + %.sroa.0.0.i12.i.i = phi i64 [ %176, %170 ], [ %166, %._crit_edge.i12.i ] %177 = sub i64 %.sroa.0.09.i, %.sroa.0.06.i.i %178 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i %179 = xor i64 %178, %177 @@ -428,8 +427,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; store i8 %200, ptr %197, align 1, !noalias !55 store i8 %199, ptr %198, align 1, !noalias !55 %201 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i9 = icmp eq i64 %201, 32 - br i1 %exitcond.not.i.i9, label %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, label %.preheader.i + %exitcond.not.i.i7 = icmp eq i64 %201, 32 + br i1 %exitcond.not.i.i7, label %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, label %.preheader.i 202: ; preds = %181 %203 = add i64 %.sroa.0.09.i, -16 @@ -444,7 +443,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; %exitcond.not.i = icmp eq i64 %.sroa.0.09.i, %13 br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %145 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit: ; preds = %205, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.i +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit: ; preds = %205, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread23.i %206 = getelementptr inbounds nuw i8, ptr %0, i64 16 %207 = sub i64 %.sroa.03.0.i, %7 store i64 %207, ptr %206, align 8, !alias.scope !55 From 32f29b4a7373d9df8d6b2e54d10e624efc5f9018 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 22 Jun 2025 07:39:43 +0000 Subject: [PATCH 3/3] pre-commit: Remap --- bench/actix-rs/optimized/2wg1z1eatrkafji9.ll | 268 ++++++------- bench/actix-rs/optimized/36qa1hw006t0trtl.ll | 272 ++++++------- bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll | 262 ++++++------- .../optimized/2y94il9ncyebrpt0.ll | 260 ++++++------- bench/delta-rs/optimized/3w98mau10rb6qf7d.ll | 112 +++--- bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll | 260 ++++++------- bench/duckdb/optimized/bignum.ll | 40 +- .../ub_duckdb_storage_compression_roaring.ll | 8 +- bench/egg-rs/optimized/208b1a9t1vdfvafq.ll | 308 +++++++-------- bench/graphviz/optimized/spring_electrical.ll | 364 +++++++++--------- .../html5ever-rs/optimized/1mf2h4bh94yx6is.ll | 282 +++++++------- bench/hyperscan/optimized/ng_mcclellan.ll | 24 +- bench/hyperscan/optimized/ng_misc_opt.ll | 8 +- .../influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll | 204 +++++----- .../optimized/7fmwz6nrtt7kwsj.ll | 272 ++++++------- .../mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll | 256 ++++++------ .../mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll | 254 ++++++------ bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll | 46 +-- .../optimized/buvg05ofkihfrgtzxvq0wm8fb.ll | 314 +++++++-------- bench/qdrant-rs/optimized/14hho85eanhsaepf.ll | 148 +++---- bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll | 284 +++++++------- bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll | 270 ++++++------- .../optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll | 270 ++++++------- .../optimized/dv3u0zj1g96ml2orvqzylystz.ll | 142 +++---- .../optimized/2gfo4qfvfsgl8tkl.ll | 74 ++-- .../optimized/3bcyxdd3fm70gs30.ll | 72 ++-- .../optimized/635ry91nhs2ocdh.ll | 78 ++-- .../optimized/5l8bi66t9fkz97f2037rofy4n.ll | 324 ++++++++-------- .../optimized/2xun21ofbsn7p9xn.ll | 308 +++++++-------- .../optimized/3l7xg3ikfppult5o2lclnyys7.ll | 178 ++++----- .../optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll | 172 ++++----- .../optimized/1owd0gjazgnm3wlfvndm01xt6.ll | 120 +++--- .../optimized/4dcxzssfl4exl338cy92tfq1l.ll | 86 ++--- .../optimized/8hv30atg5watxkzkqbi6e75uu.ll | 88 ++--- .../optimized/3n432rns6m5cu25igp84708nl.ll | 308 +++++++-------- bench/wireshark/optimized/packet-bmc.ll | 112 +++--- bench/wolfssl/optimized/random.ll | 342 ++++++++-------- .../optimized/4fjzcqwe72s61qqj6jfld7d0e.ll | 80 ++-- .../optimized/8v0fi0zpujn3n5viw54gladc4.ll | 110 +++--- .../optimized/cn5tr75hwj0e1t163yn1kh0fu.ll | 84 ++-- 40 files changed, 3732 insertions(+), 3732 deletions(-) diff --git a/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll b/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll index d068fc7fd8e..58df92e002c 100644 --- a/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll +++ b/bench/actix-rs/optimized/2wg1z1eatrkafji9.ll @@ -4411,7 +4411,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.not4.i = icmp eq i64 %6, 0 br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19: ; preds = %3 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19:; preds = %3 %7 = icmp ne ptr %.val15, null tail call void @llvm.assume(i1 %7) %8 = getelementptr inbounds nuw i8, ptr %.val15, i64 16 @@ -4429,16 +4429,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex tail call void @llvm.assume(i1 %12) br label %16 -._crit_edge.i: ; preds = %16 +11: ; preds = %16 %spec.select = tail call i64 @llvm.umax.i64(i64 %6, i64 16) %spec.select27 = tail call i64 @llvm.umin.i64(i64 %6, i64 16) %13 = getelementptr inbounds i8, ptr %.val15, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %13, ptr nonnull align 1 %.val15, i64 %spec.select27, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) - %14 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store ptr %2, ptr %14, align 8 - %15 = getelementptr inbounds nuw i8, ptr %4, i64 16 - store i64 32, ptr %15, align 8 + %20 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store ptr %2, ptr %20, align 8 + %21 = getelementptr inbounds nuw i8, ptr %4, i64 16 + store i64 32, ptr %21, align 8 store ptr %0, ptr %4, align 8 br label %.lr.ph @@ -4460,137 +4460,137 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex %24 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h4cd20b6166d6f1f7E"(ptr noalias noundef align 8 dereferenceable(24) %4) #50 - to label %109 unwind label %107 + to label %109 unwind label %106 -._crit_edge.loopexit: ; preds = %106 +._crit_edge.loopexit: ; preds = %105 %.pre = load i64, ptr %5, align 8 %.pre15 = add i64 %.pre, 1 - %25 = lshr i64 %.pre15, 3 - %26 = mul nuw i64 %25, 7 + %24 = lshr i64 %.pre15, 3 + %25 = mul nuw i64 %24, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !42 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 + %.pre-phi = phi i64 [ %25, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %26 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %27 = icmp ult i64 %26, 8 + %.0 = select i1 %27, i64 %26, i64 %.pre-phi + %28 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %29 = load i64, ptr %28, align 8, !noundef !42 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %31 = sub i64 %.0, %29 + store i64 %31, ptr %30, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) ret void -.lr.ph: ; preds = %._crit_edge.i, %106 - %.sroa.02.08 = phi i64 [ %33, %106 ], [ 0, %._crit_edge.i ] - %33 = add nuw i64 %.sroa.02.08, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.08 - %36 = load i8, ptr %35, align 1, !noundef !42 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %106 +.lr.ph: ; preds = %11, %105 + %.sroa.02.08 = phi i64 [ %32, %106 ], [ 0, %._crit_edge.i ] + %32 = add nuw i64 %.sroa.02.08, 1 + %33 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %34 = getelementptr inbounds i8, ptr %33, i64 %.sroa.02.08 + %35 = load i8, ptr %34, align 1, !noundef !42 + %.not = icmp eq i8 %35, -128 + br i1 %.not, label %36, label %105 -37: ; preds = %.lr.ph - %38 = shl i64 %.sroa.02.08, 5 - %39 = sub nuw nsw i64 -32, %38 - %40 = getelementptr inbounds i8, ptr %34, i64 %39 +36: ; preds = %.lr.ph + %37 = shl i64 %.sroa.02.08, 5 + %38 = sub nuw nsw i64 -32, %37 + %39 = getelementptr inbounds i8, ptr %33, i64 %38 br label %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit -_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit: ; preds = %.preheader, %37 - %41 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) +_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit: ; preds = %.preheader, %36 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) to label %42 unwind label %23 -42: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit %.val = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 %.val14 = load i64, ptr %5, align 8, !noundef !42 - %.sroa.0.05.i = and i64 %.val14, %41 - %43 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %43, align 1, !noalias !757 - %44 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %45 = bitcast <16 x i1> %44 to i16 - %.not.i.not7.i = icmp eq i16 %45, 0 - br i1 %.not.i.not7.i, label %.lr.ph.i18, label %._crit_edge.i17 - -.lr.ph.i18: ; preds = %42, %.lr.ph.i18 + %.sroa.0.05.i = and i64 %.val14, %40 + %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !757 + %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %44 = bitcast <16 x i1> %43 to i16 + %.not.i.not7.i = icmp eq i16 %44, 0 + br i1 %.not.i.not7.i, label %.lr.ph.i17, label %._crit_edge.i + +.lr.ph.i17: ; preds = %41, %.lr.ph.i17 %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i18 ], [ %.sroa.0.05.i, %42 ] - %.sroa.7.08.i = phi i64 [ %46, %.lr.ph.i18 ], [ 0, %42 ] - %46 = add i64 %.sroa.7.08.i, 16 - %47 = add i64 %46, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %47, %.val14 - %48 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %48, align 1, !noalias !757 - %49 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %50 = bitcast <16 x i1> %49 to i16 - %.not.i.not.i = icmp eq i16 %50, 0 - br i1 %.not.i.not.i, label %.lr.ph.i18, label %._crit_edge.i17 - -._crit_edge.i17: ; preds = %.lr.ph.i18, %42 + %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i18 ], [ 0, %42 ] + %45 = add i64 %.sroa.7.08.i, 16 + %46 = add i64 %45, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %46, %.val14 + %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !757 + %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %49 = bitcast <16 x i1> %48 to i16 + %.not.i.not.i = icmp eq i16 %49, 0 + br i1 %.not.i.not.i, label %.lr.ph.i17, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i17, %41 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %42 ], [ %.sroa.0.0.i, %.lr.ph.i18 ] - %.lcssa.i = phi i16 [ %45, %42 ], [ %50, %.lr.ph.i18 ] - %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %52 = zext nneg i16 %51 to i64 - %53 = add i64 %.sroa.0.0.lcssa.i, %52 - %54 = and i64 %53, %.val14 - %55 = getelementptr inbounds i8, ptr %.val, i64 %54 - %56 = load i8, ptr %55, align 1, !noundef !42 - %57 = icmp sgt i8 %56, -1 - br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - -58: ; preds = %._crit_edge.i17 - %59 = load <16 x i8>, ptr %.val, align 16, !noalias !760 - %60 = icmp slt <16 x i8> %59, zeroinitializer - %61 = bitcast <16 x i1> %60 to i16 - %62 = icmp ne i16 %61, 0 - %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) - %64 = zext nneg i16 %63 to i64 - tail call void @llvm.assume(i1 %62) + %.lcssa.i = phi i16 [ %44, %42 ], [ %49, %.lr.ph.i18 ] + %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %51 = zext nneg i16 %50 to i64 + %52 = add i64 %.sroa.0.0.lcssa.i, %51 + %53 = and i64 %52, %.val14 + %54 = getelementptr inbounds i8, ptr %.val, i64 %53 + %55 = load i8, ptr %54, align 1, !noundef !42 + %56 = icmp sgt i8 %55, -1 + br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + +57: ; preds = %._crit_edge.i + %58 = load <16 x i8>, ptr %.val, align 16, !noalias !760 + %59 = icmp slt <16 x i8> %58, zeroinitializer + %60 = bitcast <16 x i1> %59 to i16 + %61 = icmp ne i16 %60, 0 + %62 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) + %63 = zext nneg i16 %62 to i64 + tail call void @llvm.assume(i1 %61) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %58, %._crit_edge.i17 - %.0.i.i = phi i64 [ %64, %58 ], [ %54, %._crit_edge.i17 ] - %65 = sub i64 %.sroa.02.08, %.sroa.0.05.i - %66 = sub i64 %.0.i.i, %.sroa.0.05.i - %67 = xor i64 %66, %65 - %.unshifted = and i64 %67, %.val14 - %68 = icmp ult i64 %.unshifted, 16 - br i1 %68, label %83, label %69 - -69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - %70 = shl i64 %.0.i.i, 5 - %71 = sub nuw nsw i64 -32, %70 - %72 = getelementptr inbounds i8, ptr %.val, i64 %71 - %73 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %74 = load i8, ptr %73, align 1, !noundef !42 - %75 = lshr i64 %41, 57 - %76 = trunc nuw nsw i64 %75 to i8 - %77 = add i64 %.0.i.i, -16 - %78 = and i64 %77, %.val14 - store i8 %76, ptr %73, align 1 - %79 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %80 = getelementptr i8, ptr %79, i64 %78 - %81 = getelementptr i8, ptr %80, i64 16 - store i8 %76, ptr %81, align 1 - %82 = icmp eq i8 %74, -1 - br i1 %82, label %97, label %.preheader - -83: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - %84 = lshr i64 %41, 57 - %85 = trunc nuw nsw i64 %84 to i8 - %86 = add i64 %.sroa.02.08, -16 - %87 = and i64 %.val14, %86 - %88 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 - store i8 %85, ptr %88, align 1 - %89 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %90 = getelementptr i8, ptr %89, i64 %87 - %91 = getelementptr i8, ptr %90, i64 16 - store i8 %85, ptr %91, align 1 - br label %106 - -.preheader: ; preds = %69, %.preheader +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %57, %._crit_edge.i + %.0.i.i = phi i64 [ %63, %58 ], [ %53, %._crit_edge.i17 ] + %64 = sub i64 %.sroa.02.08, %.sroa.0.05.i + %65 = sub i64 %.0.i.i, %.sroa.0.05.i + %66 = xor i64 %65, %64 + %.unshifted = and i64 %66, %.val14 + %67 = icmp ult i64 %.unshifted, 16 + br i1 %67, label %82, label %68 + +68: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + %69 = shl i64 %.0.i.i, 5 + %70 = sub nuw nsw i64 -32, %69 + %71 = getelementptr inbounds i8, ptr %.val, i64 %70 + %72 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %73 = load i8, ptr %72, align 1, !noundef !42 + %74 = lshr i64 %40, 57 + %75 = trunc nuw nsw i64 %74 to i8 + %76 = add i64 %.0.i.i, -16 + %77 = and i64 %76, %.val14 + store i8 %75, ptr %72, align 1 + %78 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %79 = getelementptr i8, ptr %78, i64 %77 + %80 = getelementptr i8, ptr %79, i64 16 + store i8 %75, ptr %80, align 1 + %81 = icmp eq i8 %73, -1 + br i1 %81, label %96, label %.preheader + +82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + %83 = lshr i64 %40, 57 + %84 = trunc nuw nsw i64 %83 to i8 + %85 = add i64 %.sroa.02.08, -16 + %86 = and i64 %.val14, %85 + %87 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 + store i8 %84, ptr %87, align 1 + %88 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %89 = getelementptr i8, ptr %88, i64 %86 + %90 = getelementptr i8, ptr %89, i64 16 + store i8 %84, ptr %90, align 1 + br label %105 + +.preheader: ; preds = %68, %.preheader %.0910.i = phi i64 [ %96, %.preheader ], [ 0, %69 ] - %92 = getelementptr inbounds nuw i8, ptr %40, i64 %.0910.i - %93 = getelementptr inbounds nuw i8, ptr %72, i64 %.0910.i + %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.0910.i %94 = load i8, ptr %92, align 1 %95 = load i8, ptr %93, align 1 store i8 %95, ptr %92, align 1 @@ -4599,31 +4599,31 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; p %exitcond.not.i = icmp eq i64 %96, 32 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h59d8210a82ad7a34E.exit, label %.preheader -97: ; preds = %69 - %98 = add i64 %.sroa.02.08, -16 - %99 = load i64, ptr %5, align 8, !noundef !42 - %100 = and i64 %99, %98 - %101 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %102 = getelementptr inbounds i8, ptr %101, i64 %.sroa.02.08 - store i8 -1, ptr %102, align 1 - %103 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 - %104 = getelementptr i8, ptr %103, i64 %100 - %105 = getelementptr i8, ptr %104, i64 16 - store i8 -1, ptr %105, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %72, ptr noundef nonnull align 1 dereferenceable(32) %40, i64 32, i1 false) - br label %106 - -106: ; preds = %.lr.ph, %97, %83 +96: ; preds = %68 + %97 = add i64 %.sroa.02.08, -16 + %98 = load i64, ptr %5, align 8, !noundef !42 + %99 = and i64 %98, %97 + %100 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.08 + store i8 -1, ptr %101, align 1 + %102 = load ptr, ptr %0, align 8, !nonnull !42, !noundef !42 + %103 = getelementptr i8, ptr %102, i64 %99 + %104 = getelementptr i8, ptr %103, i64 16 + store i8 -1, ptr %104, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %71, ptr noundef nonnull align 1 dereferenceable(32) %39, i64 32, i1 false) + br label %105 + +105: ; preds = %.lr.ph, %96, %82 %exitcond.not = icmp eq i64 %.sroa.02.08, %.val16 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -107: ; preds = %23 - %108 = landingpad { ptr, i32 } +106: ; preds = %23 + %107 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #51 unreachable -109: ; preds = %23 +108: ; preds = %23 resume { ptr, i32 } %24 } diff --git a/bench/actix-rs/optimized/36qa1hw006t0trtl.ll b/bench/actix-rs/optimized/36qa1hw006t0trtl.ll index 65e4f2d1115..f0a5b3d0f1a 100644 --- a/bench/actix-rs/optimized/36qa1hw006t0trtl.ll +++ b/bench/actix-rs/optimized/36qa1hw006t0trtl.ll @@ -6758,7 +6758,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.not4.i = icmp eq i64 %6, 0 br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23: ; preds = %3 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23:; preds = %3 %7 = icmp ne ptr %.val, null tail call void @llvm.assume(i1 %7) %8 = getelementptr inbounds nuw i8, ptr %.val, i64 16 @@ -6776,16 +6776,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex tail call void @llvm.assume(i1 %12) br label %16 -._crit_edge.i: ; preds = %16 +11: ; preds = %16 %spec.select = tail call i64 @llvm.umax.i64(i64 %6, i64 16) %spec.select33 = tail call i64 @llvm.umin.i64(i64 %6, i64 16) %13 = getelementptr inbounds i8, ptr %.val, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %13, ptr nonnull align 1 %.val, i64 %spec.select33, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) - %14 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store ptr %2, ptr %14, align 8 - %15 = getelementptr inbounds nuw i8, ptr %4, i64 16 - store i64 64, ptr %15, align 8 + %20 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store ptr %2, ptr %20, align 8 + %21 = getelementptr inbounds nuw i8, ptr %4, i64 16 + store i64 64, ptr %21, align 8 store ptr %0, ptr %4, align 8 br label %.lr.ph @@ -6807,138 +6807,138 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex %24 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hf2622f0f124eb1a5E"(ptr noalias noundef align 8 dereferenceable(24) %4) #53 - to label %111 unwind label %109 + to label %111 unwind label %108 -._crit_edge.loopexit: ; preds = %108 +._crit_edge.loopexit: ; preds = %107 %.pre = load i64, ptr %5, align 8 %.pre19 = add i64 %.pre, 1 - %25 = lshr i64 %.pre19, 3 - %26 = mul nuw i64 %25, 7 + %24 = lshr i64 %.pre19, 3 + %25 = mul nuw i64 %24, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] - %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] - %28 = icmp ult i64 %27, 8 - %.0 = select i1 %28, i64 %27, i64 %.pre-phi - %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %30 = load i64, ptr %29, align 8, !noundef !4 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %32 = sub i64 %.0, %30 - store i64 %32, ptr %31, align 8 + %.pre-phi = phi i64 [ %25, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %26 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %27 = icmp ult i64 %26, 8 + %.0 = select i1 %27, i64 %26, i64 %.pre-phi + %28 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %29 = load i64, ptr %28, align 8, !noundef !4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %31 = sub i64 %.0, %29 + store i64 %31, ptr %30, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) ret void -.lr.ph: ; preds = %._crit_edge.i, %108 - %.sroa.02.010 = phi i64 [ %33, %108 ], [ 0, %._crit_edge.i ] - %33 = add nuw i64 %.sroa.02.010, 1 - %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.010 - %36 = load i8, ptr %35, align 1, !noundef !4 - %.not = icmp eq i8 %36, -128 - br i1 %.not, label %37, label %108 +.lr.ph: ; preds = %11, %107 + %.sroa.02.010 = phi i64 [ %32, %108 ], [ 0, %._crit_edge.i ] + %32 = add nuw i64 %.sroa.02.010, 1 + %33 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %34 = getelementptr inbounds i8, ptr %33, i64 %.sroa.02.010 + %35 = load i8, ptr %34, align 1, !noundef !4 + %.not = icmp eq i8 %35, -128 + br i1 %.not, label %36, label %107 -37: ; preds = %.lr.ph - %38 = shl i64 %.sroa.02.010, 6 - %39 = sub nuw nsw i64 -64, %38 - %40 = getelementptr inbounds i8, ptr %34, i64 %39 +36: ; preds = %.lr.ph + %37 = shl i64 %.sroa.02.010, 6 + %38 = sub nuw nsw i64 -64, %37 + %39 = getelementptr inbounds i8, ptr %33, i64 %38 br label %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit -_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit: ; preds = %.preheader, %37 - %41 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) +_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit: ; preds = %.preheader, %36 + %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) to label %42 unwind label %23 -42: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit +41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !1472) - %43 = load i64, ptr %5, align 8, !alias.scope !1472, !noundef !4 - %44 = load ptr, ptr %0, align 8, !alias.scope !1472, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %43, %41 - %45 = getelementptr inbounds i8, ptr %44, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %45, align 1, !noalias !1475 - %46 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %47 = bitcast <16 x i1> %46 to i16 - %.not.i.not13.i = icmp eq i16 %47, 0 - br i1 %.not.i.not13.i, label %.lr.ph.i16, label %._crit_edge.i15 - -.lr.ph.i16: ; preds = %42, %.lr.ph.i16 + %42 = load i64, ptr %5, align 8, !alias.scope !1472, !noundef !4 + %43 = load ptr, ptr %0, align 8, !alias.scope !1472, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %42, %40 + %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !1475 + %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %46 = bitcast <16 x i1> %45 to i16 + %.not.i.not13.i = icmp eq i16 %46, 0 + br i1 %.not.i.not13.i, label %.lr.ph.i15, label %._crit_edge.i + +.lr.ph.i15: ; preds = %41, %.lr.ph.i15 %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i16 ], [ %.sroa.0.011.i, %42 ] - %.sroa.7.014.i = phi i64 [ %48, %.lr.ph.i16 ], [ 0, %42 ] - %48 = add i64 %.sroa.7.014.i, 16 - %49 = add i64 %48, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %49, %43 - %50 = getelementptr inbounds i8, ptr %44, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %50, align 1, !noalias !1475 - %51 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %52 = bitcast <16 x i1> %51 to i16 - %.not.i.not.i = icmp eq i16 %52, 0 - br i1 %.not.i.not.i, label %.lr.ph.i16, label %._crit_edge.i15 - -._crit_edge.i15: ; preds = %.lr.ph.i16, %42 + %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i16 ], [ 0, %42 ] + %47 = add i64 %.sroa.7.014.i, 16 + %48 = add i64 %47, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %48, %42 + %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !1475 + %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %51 = bitcast <16 x i1> %50 to i16 + %.not.i.not.i = icmp eq i16 %51, 0 + br i1 %.not.i.not.i, label %.lr.ph.i15, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i15, %41 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %42 ], [ %.sroa.0.0.i, %.lr.ph.i16 ] - %.lcssa.i = phi i16 [ %47, %42 ], [ %52, %.lr.ph.i16 ] - %53 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %54 = zext nneg i16 %53 to i64 - %55 = add i64 %.sroa.0.0.lcssa.i, %54 - %56 = and i64 %55, %43 - %57 = getelementptr inbounds i8, ptr %44, i64 %56 - %58 = load i8, ptr %57, align 1, !noalias !1472, !noundef !4 - %59 = icmp sgt i8 %58, -1 - br i1 %59, label %60, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit - -60: ; preds = %._crit_edge.i15 - %61 = load <16 x i8>, ptr %44, align 16, !noalias !1478 - %62 = icmp slt <16 x i8> %61, zeroinitializer - %63 = bitcast <16 x i1> %62 to i16 - %64 = icmp ne i16 %63, 0 - %65 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %63, i1 true) - %66 = zext nneg i16 %65 to i64 - tail call void @llvm.assume(i1 %64) + %.lcssa.i = phi i16 [ %46, %42 ], [ %51, %.lr.ph.i16 ] + %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %53 = zext nneg i16 %52 to i64 + %54 = add i64 %.sroa.0.0.lcssa.i, %53 + %55 = and i64 %54, %42 + %56 = getelementptr inbounds i8, ptr %43, i64 %55 + %57 = load i8, ptr %56, align 1, !noalias !1472, !noundef !4 + %58 = icmp sgt i8 %57, -1 + br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit + +59: ; preds = %._crit_edge.i + %60 = load <16 x i8>, ptr %43, align 16, !noalias !1478 + %61 = icmp slt <16 x i8> %60, zeroinitializer + %62 = bitcast <16 x i1> %61 to i16 + %63 = icmp ne i16 %62, 0 + %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) + %65 = zext nneg i16 %64 to i64 + tail call void @llvm.assume(i1 %63) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit: ; preds = %60, %._crit_edge.i15 - %.0.i.i = phi i64 [ %66, %60 ], [ %56, %._crit_edge.i15 ] - %67 = sub i64 %.sroa.02.010, %.sroa.0.011.i - %68 = sub i64 %.0.i.i, %.sroa.0.011.i - %69 = xor i64 %68, %67 - %.unshifted = and i64 %69, %43 - %70 = icmp ult i64 %.unshifted, 16 - br i1 %70, label %85, label %71 - -71: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit - %72 = shl i64 %.0.i.i, 6 - %73 = sub nuw nsw i64 -64, %72 - %74 = getelementptr inbounds i8, ptr %44, i64 %73 - %75 = getelementptr inbounds i8, ptr %44, i64 %.0.i.i - %76 = load i8, ptr %75, align 1, !noundef !4 - %77 = lshr i64 %41, 57 - %78 = trunc nuw nsw i64 %77 to i8 - %79 = add i64 %.0.i.i, -16 - %80 = and i64 %79, %43 - store i8 %78, ptr %75, align 1 - %81 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %82 = getelementptr i8, ptr %81, i64 %80 - %83 = getelementptr i8, ptr %82, i64 16 - store i8 %78, ptr %83, align 1 - %84 = icmp eq i8 %76, -1 - br i1 %84, label %99, label %.preheader - -85: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit - %86 = lshr i64 %41, 57 - %87 = trunc nuw nsw i64 %86 to i8 - %88 = add i64 %.sroa.02.010, -16 - %89 = and i64 %43, %88 - %90 = getelementptr inbounds i8, ptr %44, i64 %.sroa.02.010 - store i8 %87, ptr %90, align 1 - %91 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %92 = getelementptr i8, ptr %91, i64 %89 - %93 = getelementptr i8, ptr %92, i64 16 - store i8 %87, ptr %93, align 1 - br label %108 - -.preheader: ; preds = %71, %.preheader +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit: ; preds = %59, %._crit_edge.i + %.0.i.i = phi i64 [ %65, %60 ], [ %55, %._crit_edge.i15 ] + %66 = sub i64 %.sroa.02.010, %.sroa.0.011.i + %67 = sub i64 %.0.i.i, %.sroa.0.011.i + %68 = xor i64 %67, %66 + %.unshifted = and i64 %68, %42 + %69 = icmp ult i64 %.unshifted, 16 + br i1 %69, label %84, label %70 + +70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit + %71 = shl i64 %.0.i.i, 6 + %72 = sub nuw nsw i64 -64, %71 + %73 = getelementptr inbounds i8, ptr %43, i64 %72 + %74 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i + %75 = load i8, ptr %74, align 1, !noundef !4 + %76 = lshr i64 %40, 57 + %77 = trunc nuw nsw i64 %76 to i8 + %78 = add i64 %.0.i.i, -16 + %79 = and i64 %78, %42 + store i8 %77, ptr %74, align 1 + %80 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %81 = getelementptr i8, ptr %80, i64 %79 + %82 = getelementptr i8, ptr %81, i64 16 + store i8 %77, ptr %82, align 1 + %83 = icmp eq i8 %75, -1 + br i1 %83, label %98, label %.preheader + +84: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.17320615007082653151.exit + %85 = lshr i64 %40, 57 + %86 = trunc nuw nsw i64 %85 to i8 + %87 = add i64 %.sroa.02.010, -16 + %88 = and i64 %42, %87 + %89 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.010 + store i8 %86, ptr %89, align 1 + %90 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %91 = getelementptr i8, ptr %90, i64 %88 + %92 = getelementptr i8, ptr %91, i64 16 + store i8 %86, ptr %92, align 1 + br label %107 + +.preheader: ; preds = %70, %.preheader %.0910.i = phi i64 [ %98, %.preheader ], [ 0, %71 ] - %94 = getelementptr inbounds nuw i8, ptr %40, i64 %.0910.i - %95 = getelementptr inbounds nuw i8, ptr %74, i64 %.0910.i + %93 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i + %94 = getelementptr inbounds nuw i8, ptr %73, i64 %.0910.i %96 = load i8, ptr %94, align 1 %97 = load i8, ptr %95, align 1 store i8 %97, ptr %94, align 1 @@ -6947,31 +6947,31 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1732 %exitcond.not.i = icmp eq i64 %98, 64 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h21a8e8fca3f9633dE.exit, label %.preheader -99: ; preds = %71 - %100 = add i64 %.sroa.02.010, -16 - %101 = load i64, ptr %5, align 8, !noundef !4 - %102 = and i64 %101, %100 - %103 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %104 = getelementptr inbounds i8, ptr %103, i64 %.sroa.02.010 - store i8 -1, ptr %104, align 1 - %105 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %106 = getelementptr i8, ptr %105, i64 %102 - %107 = getelementptr i8, ptr %106, i64 16 - store i8 -1, ptr %107, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %74, ptr noundef nonnull align 1 dereferenceable(64) %40, i64 64, i1 false) - br label %108 - -108: ; preds = %.lr.ph, %99, %85 +98: ; preds = %70 + %99 = add i64 %.sroa.02.010, -16 + %100 = load i64, ptr %5, align 8, !noundef !4 + %101 = and i64 %100, %99 + %102 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %103 = getelementptr inbounds i8, ptr %102, i64 %.sroa.02.010 + store i8 -1, ptr %103, align 1 + %104 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %105 = getelementptr i8, ptr %104, i64 %101 + %106 = getelementptr i8, ptr %105, i64 16 + store i8 -1, ptr %106, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %73, ptr noundef nonnull align 1 dereferenceable(64) %39, i64 64, i1 false) + br label %107 + +107: ; preds = %.lr.ph, %98, %84 %exitcond.not = icmp eq i64 %.sroa.02.010, %.val14 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -109: ; preds = %23 - %110 = landingpad { ptr, i32 } +108: ; preds = %23 + %109 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #51 unreachable -111: ; preds = %23 +110: ; preds = %23 resume { ptr, i32 } %24 } diff --git a/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll b/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll index 049329972f6..8f879e5220d 100644 --- a/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll +++ b/bench/actix-rs/optimized/520p8qtoxfmkvgyc.ll @@ -6333,7 +6333,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.not4.i = icmp eq i64 %7, 0 br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23: ; preds = %4 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23:; preds = %4 %8 = icmp ne ptr %.val, null tail call void @llvm.assume(i1 %8) %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 @@ -6351,16 +6351,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex tail call void @llvm.assume(i1 %13) br label %17 -._crit_edge.i: ; preds = %17 +12: ; preds = %17 %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) %spec.select33 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select33, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %15, align 8 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %16, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph @@ -6382,138 +6382,138 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17heb69bf2421029736E"(ptr noalias noundef align 8 dereferenceable(24) %5) #49 - to label %108 unwind label %106 + to label %108 unwind label %105 -._crit_edge.loopexit: ; preds = %105 +._crit_edge.loopexit: ; preds = %104 %.pre = load i64, ptr %6, align 8 %.pre19 = add i64 %.pre, 1 - %26 = lshr i64 %.pre19, 3 - %27 = mul nuw i64 %26, 7 + %25 = lshr i64 %.pre19, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] - %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] - %29 = icmp ult i64 %28, 8 - %.0 = select i1 %29, i64 %28, i64 %.pre-phi - %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %31 = load i64, ptr %30, align 8, !noundef !4 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %33 = sub i64 %.0, %31 - store i64 %33, ptr %32, align 8 + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread23 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !4 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %._crit_edge.i, %105 - %.sroa.02.010 = phi i64 [ %34, %105 ], [ 0, %._crit_edge.i ] - %34 = add nuw i64 %.sroa.02.010, 1 - %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.010 - %37 = load i8, ptr %36, align 1, !noundef !4 - %.not = icmp eq i8 %37, -128 - br i1 %.not, label %38, label %105 +.lr.ph: ; preds = %12, %104 + %.sroa.02.010 = phi i64 [ %33, %105 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.010, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.010 + %36 = load i8, ptr %35, align 1, !noundef !4 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %104 -38: ; preds = %.lr.ph +37: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.010, -1 %.neg14 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %35, i64 %.neg14 + %38 = getelementptr inbounds i8, ptr %34, i64 %.neg14 br label %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit -_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) +_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit: ; preds = %.preheader, %37 + %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) to label %41 unwind label %24 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit +40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !1385) - %42 = load i64, ptr %6, align 8, !alias.scope !1385, !noundef !4 - %43 = load ptr, ptr %0, align 8, !alias.scope !1385, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %42, %40 - %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !1388 - %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %46 = bitcast <16 x i1> %45 to i16 - %.not.i.not13.i = icmp eq i16 %46, 0 - br i1 %.not.i.not13.i, label %.lr.ph.i19, label %._crit_edge.i18 - -.lr.ph.i19: ; preds = %41, %.lr.ph.i19 + %41 = load i64, ptr %6, align 8, !alias.scope !1385, !noundef !4 + %42 = load ptr, ptr %0, align 8, !alias.scope !1385, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %41, %39 + %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %43, align 1, !noalias !1388 + %44 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %45 = bitcast <16 x i1> %44 to i16 + %.not.i.not13.i = icmp eq i16 %45, 0 + br i1 %.not.i.not13.i, label %.lr.ph.i18, label %._crit_edge.i + +.lr.ph.i18: ; preds = %40, %.lr.ph.i18 %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i19 ], [ %.sroa.0.011.i, %41 ] - %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i19 ], [ 0, %41 ] - %47 = add i64 %.sroa.7.014.i, 16 - %48 = add i64 %47, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %48, %42 - %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !1388 - %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %51 = bitcast <16 x i1> %50 to i16 - %.not.i.not.i = icmp eq i16 %51, 0 - br i1 %.not.i.not.i, label %.lr.ph.i19, label %._crit_edge.i18 - -._crit_edge.i18: ; preds = %.lr.ph.i19, %41 + %.sroa.7.014.i = phi i64 [ %46, %.lr.ph.i19 ], [ 0, %41 ] + %46 = add i64 %.sroa.7.014.i, 16 + %47 = add i64 %46, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %47, %41 + %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %48, align 1, !noalias !1388 + %49 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %50 = bitcast <16 x i1> %49 to i16 + %.not.i.not.i = icmp eq i16 %50, 0 + br i1 %.not.i.not.i, label %.lr.ph.i18, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i18, %40 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i19 ] - %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i19 ] - %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %53 = zext nneg i16 %52 to i64 - %54 = add i64 %.sroa.0.0.lcssa.i, %53 - %55 = and i64 %54, %42 - %56 = getelementptr inbounds i8, ptr %43, i64 %55 - %57 = load i8, ptr %56, align 1, !noalias !1385, !noundef !4 - %58 = icmp sgt i8 %57, -1 - br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit - -59: ; preds = %._crit_edge.i18 - %60 = load <16 x i8>, ptr %43, align 16, !noalias !1391 - %61 = icmp slt <16 x i8> %60, zeroinitializer - %62 = bitcast <16 x i1> %61 to i16 - %63 = icmp ne i16 %62, 0 - %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) - %65 = zext nneg i16 %64 to i64 - tail call void @llvm.assume(i1 %63) + %.lcssa.i = phi i16 [ %45, %41 ], [ %50, %.lr.ph.i19 ] + %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %52 = zext nneg i16 %51 to i64 + %53 = add i64 %.sroa.0.0.lcssa.i, %52 + %54 = and i64 %53, %41 + %55 = getelementptr inbounds i8, ptr %42, i64 %54 + %56 = load i8, ptr %55, align 1, !noalias !1385, !noundef !4 + %57 = icmp sgt i8 %56, -1 + br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit + +58: ; preds = %._crit_edge.i + %59 = load <16 x i8>, ptr %42, align 16, !noalias !1391 + %60 = icmp slt <16 x i8> %59, zeroinitializer + %61 = bitcast <16 x i1> %60 to i16 + %62 = icmp ne i16 %61, 0 + %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) + %64 = zext nneg i16 %63 to i64 + tail call void @llvm.assume(i1 %62) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit: ; preds = %59, %._crit_edge.i18 - %.0.i.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i18 ] - %66 = sub i64 %.sroa.02.010, %.sroa.0.011.i - %67 = sub i64 %.0.i.i, %.sroa.0.011.i - %68 = xor i64 %67, %66 - %.unshifted = and i64 %68, %42 - %69 = icmp ult i64 %.unshifted, 16 - br i1 %69, label %82, label %70 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit: ; preds = %58, %._crit_edge.i + %.0.i.i = phi i64 [ %64, %59 ], [ %54, %._crit_edge.i18 ] + %65 = sub i64 %.sroa.02.010, %.sroa.0.011.i + %66 = sub i64 %.0.i.i, %.sroa.0.011.i + %67 = xor i64 %66, %65 + %.unshifted = and i64 %67, %41 + %68 = icmp ult i64 %.unshifted, 16 + br i1 %68, label %81, label %69 -70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit +69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit %.neg15 = xor i64 %.0.i.i, -1 %.neg16 = mul i64 %2, %.neg15 - %71 = getelementptr inbounds i8, ptr %43, i64 %.neg16 - %72 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i - %73 = load i8, ptr %72, align 1, !noundef !4 - %74 = lshr i64 %40, 57 - %75 = trunc nuw nsw i64 %74 to i8 - %76 = add i64 %.0.i.i, -16 - %77 = and i64 %76, %42 - store i8 %75, ptr %72, align 1 - %78 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %79 = getelementptr i8, ptr %78, i64 %77 - %80 = getelementptr i8, ptr %79, i64 16 - store i8 %75, ptr %80, align 1 - %81 = icmp eq i8 %73, -1 - br i1 %81, label %96, label %.preheader - -82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit - %83 = lshr i64 %40, 57 - %84 = trunc nuw nsw i64 %83 to i8 - %85 = add i64 %.sroa.02.010, -16 - %86 = and i64 %42, %85 - %87 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.010 - store i8 %84, ptr %87, align 1 - %88 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %89 = getelementptr i8, ptr %88, i64 %86 - %90 = getelementptr i8, ptr %89, i64 16 - store i8 %84, ptr %90, align 1 - br label %105 - -.preheader: ; preds = %70, %.preheader + %70 = getelementptr inbounds i8, ptr %42, i64 %.neg16 + %71 = getelementptr inbounds i8, ptr %42, i64 %.0.i.i + %72 = load i8, ptr %71, align 1, !noundef !4 + %73 = lshr i64 %39, 57 + %74 = trunc nuw nsw i64 %73 to i8 + %75 = add i64 %.0.i.i, -16 + %76 = and i64 %75, %41 + store i8 %74, ptr %71, align 1 + %77 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %78 = getelementptr i8, ptr %77, i64 %76 + %79 = getelementptr i8, ptr %78, i64 16 + store i8 %74, ptr %79, align 1 + %80 = icmp eq i8 %72, -1 + br i1 %80, label %95, label %.preheader + +81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.222537792231950641.exit + %82 = lshr i64 %39, 57 + %83 = trunc nuw nsw i64 %82 to i8 + %84 = add i64 %.sroa.02.010, -16 + %85 = and i64 %41, %84 + %86 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.010 + store i8 %83, ptr %86, align 1 + %87 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %88 = getelementptr i8, ptr %87, i64 %85 + %89 = getelementptr i8, ptr %88, i64 16 + store i8 %83, ptr %89, align 1 + br label %104 + +.preheader: ; preds = %69, %.preheader %.0910.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] - %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.0910.i + %90 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i + %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.0910.i %93 = load i8, ptr %91, align 1 %94 = load i8, ptr %92, align 1 store i8 %94, ptr %91, align 1 @@ -6522,31 +6522,31 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.2225 %exitcond.not.i = icmp eq i64 %95, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h1a925daf5d7772e1E.exit, label %.preheader -96: ; preds = %70 - %97 = add i64 %.sroa.02.010, -16 - %98 = load i64, ptr %6, align 8, !noundef !4 - %99 = and i64 %98, %97 - %100 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.010 - store i8 -1, ptr %101, align 1 - %102 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %103 = getelementptr i8, ptr %102, i64 %99 - %104 = getelementptr i8, ptr %103, i64 16 - store i8 -1, ptr %104, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %105 - -105: ; preds = %.lr.ph, %96, %82 +95: ; preds = %69 + %96 = add i64 %.sroa.02.010, -16 + %97 = load i64, ptr %6, align 8, !noundef !4 + %98 = and i64 %97, %96 + %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.010 + store i8 -1, ptr %100, align 1 + %101 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %102 = getelementptr i8, ptr %101, i64 %98 + %103 = getelementptr i8, ptr %102, i64 16 + store i8 -1, ptr %103, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) + br label %104 + +104: ; preds = %.lr.ph, %95, %81 %exitcond.not = icmp eq i64 %.sroa.02.010, %.val17 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -106: ; preds = %24 - %107 = landingpad { ptr, i32 } +105: ; preds = %24 + %106 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #50 unreachable -108: ; preds = %24 +107: ; preds = %24 resume { ptr, i32 } %25 } diff --git a/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll b/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll index 73917f7e71b..4fce80bdc6a 100644 --- a/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll +++ b/bench/coreutils-rs/optimized/2y94il9ncyebrpt0.ll @@ -991,7 +991,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.not4.i = icmp eq i64 %7, 0 br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19: ; preds = %4 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19:; preds = %4 %8 = icmp ne ptr %.val18, null tail call void @llvm.assume(i1 %8) %9 = getelementptr inbounds nuw i8, ptr %.val18, i64 16 @@ -1009,16 +1009,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex tail call void @llvm.assume(i1 %13) br label %17 -._crit_edge.i: ; preds = %17 +12: ; preds = %17 %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) %spec.select27 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) %14 = getelementptr inbounds i8, ptr %.val18, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val18, i64 %spec.select27, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %15, align 8 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %16, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph @@ -1040,170 +1040,170 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.ex %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h18a6c372d2f6b9d2E"(ptr noalias noundef align 8 dereferenceable(24) %5) #27 - to label %106 unwind label %104 + to label %106 unwind label %103 -._crit_edge.loopexit: ; preds = %103 +._crit_edge.loopexit: ; preds = %102 %.pre = load i64, ptr %6, align 8 %.pre15 = add i64 %.pre, 1 - %26 = lshr i64 %.pre15, 3 - %27 = mul nuw i64 %26, 7 + %25 = lshr i64 %.pre15, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] - %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] - %29 = icmp ult i64 %28, 8 - %.0 = select i1 %29, i64 %28, i64 %.pre-phi - %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %31 = load i64, ptr %30, align 8, !noundef !7 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %33 = sub i64 %.0, %31 - store i64 %33, ptr %32, align 8 + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h2d7ad79becd9a34aE.exit.thread19 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !7 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %._crit_edge.i, %103 - %.sroa.02.08 = phi i64 [ %34, %103 ], [ 0, %._crit_edge.i ] - %34 = add nuw i64 %.sroa.02.08, 1 - %35 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.08 - %37 = load i8, ptr %36, align 1, !noundef !7 - %.not = icmp eq i8 %37, -128 - br i1 %.not, label %38, label %103 +.lr.ph: ; preds = %12, %102 + %.sroa.02.08 = phi i64 [ %33, %103 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.08, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.08 + %36 = load i8, ptr %35, align 1, !noundef !7 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %102 -38: ; preds = %.lr.ph +37: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.08, -1 %.neg14 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %35, i64 %.neg14 + %38 = getelementptr inbounds i8, ptr %34, i64 %.neg14 br label %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit -_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) +_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit: ; preds = %.preheader, %37 + %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) to label %41 unwind label %24 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit +40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit %.val = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 %.val17 = load i64, ptr %6, align 8, !noundef !7 - %.sroa.0.05.i = and i64 %.val17, %40 - %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !184 - %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %44 = bitcast <16 x i1> %43 to i16 - %.not.i.not7.i = icmp eq i16 %44, 0 - br i1 %.not.i.not7.i, label %.lr.ph.i21, label %._crit_edge.i20 - -.lr.ph.i21: ; preds = %41, %.lr.ph.i21 + %.sroa.0.05.i = and i64 %.val17, %39 + %41 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %41, align 1, !noalias !184 + %42 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %43 = bitcast <16 x i1> %42 to i16 + %.not.i.not7.i = icmp eq i16 %43, 0 + br i1 %.not.i.not7.i, label %.lr.ph.i20, label %._crit_edge.i + +.lr.ph.i20: ; preds = %40, %.lr.ph.i20 %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i21 ], [ %.sroa.0.05.i, %41 ] - %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i21 ], [ 0, %41 ] - %45 = add i64 %.sroa.7.08.i, 16 - %46 = add i64 %45, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %46, %.val17 - %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !184 - %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %49 = bitcast <16 x i1> %48 to i16 - %.not.i.not.i = icmp eq i16 %49, 0 - br i1 %.not.i.not.i, label %.lr.ph.i21, label %._crit_edge.i20 - -._crit_edge.i20: ; preds = %.lr.ph.i21, %41 + %.sroa.7.08.i = phi i64 [ %44, %.lr.ph.i21 ], [ 0, %41 ] + %44 = add i64 %.sroa.7.08.i, 16 + %45 = add i64 %44, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %45, %.val17 + %46 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %46, align 1, !noalias !184 + %47 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %48 = bitcast <16 x i1> %47 to i16 + %.not.i.not.i = icmp eq i16 %48, 0 + br i1 %.not.i.not.i, label %.lr.ph.i20, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i20, %40 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i21 ] - %.lcssa.i = phi i16 [ %44, %41 ], [ %49, %.lr.ph.i21 ] - %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %51 = zext nneg i16 %50 to i64 - %52 = add i64 %.sroa.0.0.lcssa.i, %51 - %53 = and i64 %52, %.val17 - %54 = getelementptr inbounds i8, ptr %.val, i64 %53 - %55 = load i8, ptr %54, align 1, !noundef !7 - %56 = icmp sgt i8 %55, -1 - br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - -57: ; preds = %._crit_edge.i20 - %58 = load <16 x i8>, ptr %.val, align 16, !noalias !187 - %59 = icmp slt <16 x i8> %58, zeroinitializer - %60 = bitcast <16 x i1> %59 to i16 - %61 = icmp ne i16 %60, 0 - %62 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) - %63 = zext nneg i16 %62 to i64 - tail call void @llvm.assume(i1 %61) + %.lcssa.i = phi i16 [ %43, %41 ], [ %48, %.lr.ph.i21 ] + %49 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %50 = zext nneg i16 %49 to i64 + %51 = add i64 %.sroa.0.0.lcssa.i, %50 + %52 = and i64 %51, %.val17 + %53 = getelementptr inbounds i8, ptr %.val, i64 %52 + %54 = load i8, ptr %53, align 1, !noundef !7 + %55 = icmp sgt i8 %54, -1 + br i1 %55, label %56, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + +56: ; preds = %._crit_edge.i + %57 = load <16 x i8>, ptr %.val, align 16, !noalias !187 + %58 = icmp slt <16 x i8> %57, zeroinitializer + %59 = bitcast <16 x i1> %58 to i16 + %60 = icmp ne i16 %59, 0 + %61 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %59, i1 true) + %62 = zext nneg i16 %61 to i64 + tail call void @llvm.assume(i1 %60) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %57, %._crit_edge.i20 - %.0.i.i = phi i64 [ %63, %57 ], [ %53, %._crit_edge.i20 ] - %64 = sub i64 %.sroa.02.08, %.sroa.0.05.i - %65 = sub i64 %.0.i.i, %.sroa.0.05.i - %66 = xor i64 %65, %64 - %.unshifted = and i64 %66, %.val17 - %67 = icmp ult i64 %.unshifted, 16 - br i1 %67, label %80, label %68 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit: ; preds = %56, %._crit_edge.i + %.0.i.i = phi i64 [ %62, %57 ], [ %52, %._crit_edge.i20 ] + %63 = sub i64 %.sroa.02.08, %.sroa.0.05.i + %64 = sub i64 %.0.i.i, %.sroa.0.05.i + %65 = xor i64 %64, %63 + %.unshifted = and i64 %65, %.val17 + %66 = icmp ult i64 %.unshifted, 16 + br i1 %66, label %79, label %67 -68: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit +67: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit %.neg15 = xor i64 %.0.i.i, -1 %.neg16 = mul i64 %2, %.neg15 - %69 = getelementptr inbounds i8, ptr %.val, i64 %.neg16 - %70 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %71 = load i8, ptr %70, align 1, !noundef !7 - %72 = lshr i64 %40, 57 - %73 = trunc nuw nsw i64 %72 to i8 - %74 = add i64 %.0.i.i, -16 - %75 = and i64 %74, %.val17 - store i8 %73, ptr %70, align 1 - %76 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %77 = getelementptr i8, ptr %76, i64 %75 - %78 = getelementptr i8, ptr %77, i64 16 - store i8 %73, ptr %78, align 1 - %79 = icmp eq i8 %71, -1 - br i1 %79, label %94, label %.preheader - -80: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit - %81 = lshr i64 %40, 57 - %82 = trunc nuw nsw i64 %81 to i8 - %83 = add i64 %.sroa.02.08, -16 - %84 = and i64 %.val17, %83 - %85 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 - store i8 %82, ptr %85, align 1 - %86 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %87 = getelementptr i8, ptr %86, i64 %84 - %88 = getelementptr i8, ptr %87, i64 16 - store i8 %82, ptr %88, align 1 - br label %103 - -.preheader: ; preds = %68, %.preheader + %68 = getelementptr inbounds i8, ptr %.val, i64 %.neg16 + %69 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %70 = load i8, ptr %69, align 1, !noundef !7 + %71 = lshr i64 %39, 57 + %72 = trunc nuw nsw i64 %71 to i8 + %73 = add i64 %.0.i.i, -16 + %74 = and i64 %73, %.val17 + store i8 %72, ptr %69, align 1 + %75 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %76 = getelementptr i8, ptr %75, i64 %74 + %77 = getelementptr i8, ptr %76, i64 16 + store i8 %72, ptr %77, align 1 + %78 = icmp eq i8 %70, -1 + br i1 %78, label %93, label %.preheader + +79: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit + %80 = lshr i64 %39, 57 + %81 = trunc nuw nsw i64 %80 to i8 + %82 = add i64 %.sroa.02.08, -16 + %83 = and i64 %.val17, %82 + %84 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.08 + store i8 %81, ptr %84, align 1 + %85 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %86 = getelementptr i8, ptr %85, i64 %83 + %87 = getelementptr i8, ptr %86, i64 16 + store i8 %81, ptr %87, align 1 + br label %102 + +.preheader: ; preds = %67, %.preheader %.0910.i = phi i64 [ %93, %.preheader ], [ 0, %68 ] - %89 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %90 = getelementptr inbounds nuw i8, ptr %69, i64 %.0910.i + %88 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i + %89 = getelementptr inbounds nuw i8, ptr %68, i64 %.0910.i %91 = load i8, ptr %89, align 1 - %92 = load i8, ptr %90, align 1 + %92 = load i8, ptr %88, align 1 store i8 %92, ptr %89, align 1 store i8 %91, ptr %90, align 1 %93 = add nuw nsw i64 %.0910.i, 1 %exitcond.not.i = icmp eq i64 %93, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h9911196c6dacc9f9E.exit, label %.preheader -94: ; preds = %68 - %95 = add i64 %.sroa.02.08, -16 - %96 = load i64, ptr %6, align 8, !noundef !7 - %97 = and i64 %96, %95 - %98 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %99 = getelementptr inbounds i8, ptr %98, i64 %.sroa.02.08 - store i8 -1, ptr %99, align 1 - %100 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %101 = getelementptr i8, ptr %100, i64 %97 - %102 = getelementptr i8, ptr %101, i64 16 - store i8 -1, ptr %102, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %69, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %103 - -103: ; preds = %.lr.ph, %94, %80 +93: ; preds = %67 + %94 = add i64 %.sroa.02.08, -16 + %95 = load i64, ptr %6, align 8, !noundef !7 + %96 = and i64 %95, %94 + %97 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %98 = getelementptr inbounds i8, ptr %97, i64 %.sroa.02.08 + store i8 -1, ptr %98, align 1 + %99 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %100 = getelementptr i8, ptr %99, i64 %96 + %101 = getelementptr i8, ptr %100, i64 16 + store i8 -1, ptr %101, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %68, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) + br label %102 + +102: ; preds = %.lr.ph, %93, %79 %exitcond.not = icmp eq i64 %.sroa.02.08, %.val19 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -104: ; preds = %24 - %105 = landingpad { ptr, i32 } +103: ; preds = %24 + %104 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbacfddf1bcf21a1eE() #28 unreachable -106: ; preds = %24 +105: ; preds = %24 resume { ptr, i32 } %25 } diff --git a/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll b/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll index 6177a69e954..30ca8e372d4 100644 --- a/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll +++ b/bench/delta-rs/optimized/3w98mau10rb6qf7d.ll @@ -2054,7 +2054,7 @@ common.resume: ; preds = %181, %82 %.not.not4.i.i = icmp eq i64 %21, 0 br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i10 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %158 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread:; preds = %158 %159 = icmp ne ptr %.val.i9, null tail call void @llvm.assume(i1 %159) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !420 @@ -2070,30 +2070,30 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa tail call void @llvm.assume(i1 %163) br label %174 -._crit_edge.i.i11: ; preds = %174 +._crit_edge.i.i11:; preds = %174 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) %spec.select33.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) %164 = getelementptr inbounds i8, ptr %.val.i9, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %164, ptr nonnull align 1 %.val.i9, i64 %spec.select33.i, i1 false), !noalias !420 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !420 - %165 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @"_ZN4core3ptr92drop_in_place$LT$$LP$deltalake_mount..config..MountConfigKey$C$alloc..string..String$RP$$GT$17hc4a9d7adf886ccb3E.llvm.5511991536938204981", ptr %165, align 8, !noalias !420 - %166 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 24, ptr %166, align 8, !noalias !420 + %172 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN4core3ptr92drop_in_place$LT$$LP$deltalake_mount..config..MountConfigKey$C$alloc..string..String$RP$$GT$17hc4a9d7adf886ccb3E.llvm.5511991536938204981", ptr %172, align 8, !noalias !420 + %173 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 24, ptr %173, align 8, !noalias !420 store ptr %0, ptr %6, align 8, !noalias !420 %.sroa.4.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %5, i64 8 %.sroa.5.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %5, i64 16 %.sroa.6.0..sroa_idx.i.i.i.i = getelementptr inbounds nuw i8, ptr %5, i64 24 - %167 = load i64, ptr %2, align 8 - %168 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %169 = load i64, ptr %168, align 8 - %170 = xor i64 %167, 8317987319222330741 - %171 = xor i64 %169, 7237128888997146477 - %172 = xor i64 %167, 7816392313619706465 - %173 = xor i64 %169, 8387220255154660723 + %174 = load i64, ptr %2, align 8 + %175 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %176 = load i64, ptr %175, align 8 + %177 = xor i64 %174, 8317987319222330741 + %178 = xor i64 %176, 7237128888997146477 + %179 = xor i64 %174, 7816392313619706465 + %180 = xor i64 %176, 8387220255154660723 br label %183 -174: ; preds = %174, %.lr.ph.i.i10 +181: ; preds = %174, %.lr.ph.i.i10 %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i10 ], [ %176, %174 ] %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i10 ], [ %175, %174 ] %175 = add i64 %.sroa.5.05.i.i, -1 @@ -2119,8 +2119,8 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa %185 = load ptr, ptr %0, align 8, !alias.scope !420, !nonnull !7, !noundef !7 %186 = getelementptr inbounds i8, ptr %185, i64 %.sroa.02.010.i %187 = load i8, ptr %186, align 1, !noundef !7 - %.not.i12 = icmp eq i8 %187, -128 - br i1 %.not.i12, label %188, label %265 + %.not.i11 = icmp eq i8 %187, -128 + br i1 %.not.i11, label %188, label %265 188: ; preds = %183 %.neg.i = mul i64 %.sroa.02.010.i, -24 @@ -2130,21 +2130,21 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.preheader.i, %188 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5), !noalias !429 - store i64 %170, ptr %5, align 8, !noalias !438 - store i64 %172, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !438 - store i64 %171, ptr %.sroa.5.0..sroa_idx.i.i.i.i, align 8, !noalias !438 - store i64 %173, ptr %.sroa.6.0..sroa_idx.i.i.i.i, align 8, !noalias !429 + store i64 %177, ptr %5, align 8, !noalias !438 + store i64 %179, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !438 + store i64 %178, ptr %.sroa.5.0..sroa_idx.i.i.i.i, align 8, !noalias !438 + store i64 %180, ptr %.sroa.6.0..sroa_idx.i.i.i.i, align 8, !noalias !429 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17hcb48a26c074fadc7E.llvm.5846782993716646778"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %.noexc.i17 unwind label %181 -.noexc.i17: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i +.noexc.i16: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i %191 = load i64, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !429, !noundef !7 %192 = xor i64 %191, 255 store i64 %192, ptr %.sroa.4.0..sroa_idx.i.i.i.i, align 8, !noalias !429 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17hb339440addaeedcbE.llvm.5846782993716646778"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %193 unwind label %181 -193: ; preds = %.noexc.i17 +193: ; preds = %.noexc.i16 %194 = load i64, ptr %5, align 8, !noalias !429, !noundef !7 %195 = load i64, ptr %.sroa.5.0..sroa_idx.i.i.i.i, align 8, !noalias !429, !noundef !7 %196 = xor i64 %195, %194 @@ -2156,16 +2156,16 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea call void @llvm.experimental.noalias.scope.decl(metadata !439) %201 = load i64, ptr %18, align 8, !alias.scope !442, !noundef !7 %202 = load ptr, ptr %0, align 8, !alias.scope !442, !nonnull !7, !noundef !7 - %.sroa.0.011.i.i18 = and i64 %201, %200 - %203 = getelementptr inbounds i8, ptr %202, i64 %.sroa.0.011.i.i18 - %.0.copyload.i912.i.i19 = load <16 x i8>, ptr %203, align 1, !noalias !443 - %204 = icmp slt <16 x i8> %.0.copyload.i912.i.i19, zeroinitializer + %.sroa.0.011.i.i17 = and i64 %201, %200 + %203 = getelementptr inbounds i8, ptr %202, i64 %.sroa.0.011.i.i17 + %.0.copyload.i912.i.i18 = load <16 x i8>, ptr %203, align 1, !noalias !443 + %204 = icmp slt <16 x i8> %.0.copyload.i912.i.i18, zeroinitializer %205 = bitcast <16 x i1> %204 to i16 - %.not.i.not13.i.i20 = icmp eq i16 %205, 0 - br i1 %.not.i.not13.i.i20, label %.lr.ph.i18.i, label %._crit_edge.i17.i + %.not.i.not13.i.i19 = icmp eq i16 %205, 0 + br i1 %.not.i.not13.i.i19, label %.lr.ph.i17.i, label %._crit_edge.i.i20 -.lr.ph.i18.i: ; preds = %193, %.lr.ph.i18.i - %.sroa.0.015.i.i24 = phi i64 [ %.sroa.0.0.i.i26, %.lr.ph.i18.i ], [ %.sroa.0.011.i.i18, %193 ] +.lr.ph.i17.i: ; preds = %193, %.lr.ph.i17.i + %.sroa.0.015.i.i24 = phi i64 [ %.sroa.0.0.i.i26, %.lr.ph.i18.i ], [ %.sroa.0.011.i.i17, %193 ] %.sroa.7.014.i.i25 = phi i64 [ %206, %.lr.ph.i18.i ], [ 0, %193 ] %206 = add i64 %.sroa.7.014.i.i25, 16 %207 = add i64 %206, %.sroa.0.015.i.i24 @@ -2175,10 +2175,10 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea %209 = icmp slt <16 x i8> %.0.copyload.i9.i.i27, zeroinitializer %210 = bitcast <16 x i1> %209 to i16 %.not.i.not.i.i28 = icmp eq i16 %210, 0 - br i1 %.not.i.not.i.i28, label %.lr.ph.i18.i, label %._crit_edge.i17.i + br i1 %.not.i.not.i.i28, label %.lr.ph.i17.i, label %._crit_edge.i.i20 -._crit_edge.i17.i: ; preds = %.lr.ph.i18.i, %193 - %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.011.i.i18, %193 ], [ %.sroa.0.0.i.i26, %.lr.ph.i18.i ] +._crit_edge.i.i20: ; preds = %.lr.ph.i17.i, %193 + %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.011.i.i17, %193 ], [ %.sroa.0.0.i.i26, %.lr.ph.i18.i ] %.lcssa.i.i22 = phi i16 [ %205, %193 ], [ %210, %.lr.ph.i18.i ] %211 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i22, i1 true) %212 = zext nneg i16 %211 to i64 @@ -2189,7 +2189,7 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea %217 = icmp sgt i8 %216, -1 br i1 %217, label %218, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i -218: ; preds = %._crit_edge.i17.i +218: ; preds = %._crit_edge.i.i20 %219 = load <16 x i8>, ptr %202, align 16, !noalias !446 %220 = icmp slt <16 x i8> %219, zeroinitializer %221 = bitcast <16 x i1> %220 to i16 @@ -2199,10 +2199,10 @@ _ZN4core3ptr19swap_nonoverlapping17h6277ab0daee7c8d1E.exit.i: ; preds = %.prehea call void @llvm.assume(i1 %222) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i: ; preds = %218, %._crit_edge.i17.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511991536938204981.exit.i: ; preds = %218, %._crit_edge.i.i20 %.0.i.i.i23 = phi i64 [ %224, %218 ], [ %214, %._crit_edge.i17.i ] - %225 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i18 - %226 = sub i64 %.0.i.i.i23, %.sroa.0.011.i.i18 + %225 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i17 + %226 = sub i64 %.0.i.i.i23, %.sroa.0.011.i.i17 %227 = xor i64 %226, %225 %.unshifted.i = and i64 %227, %201 %228 = icmp ult i64 %.unshifted.i, 16 @@ -2266,8 +2266,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511 br label %265 265: ; preds = %256, %242, %183 - %exitcond.not.i13 = icmp eq i64 %.sroa.02.010.i, %19 - br i1 %exitcond.not.i13, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %183 + %exitcond.not.i12 = icmp eq i64 %.sroa.02.010.i, %19 + br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %183 266: ; preds = %181 %267 = landingpad { ptr, i32 } @@ -2276,34 +2276,34 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5511 unreachable _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; preds = %265 - %.pre.i14 = load i64, ptr %18, align 8, !alias.scope !420 - %.pre.i14.fr = freeze i64 %.pre.i14 - %.pre19.i = add i64 %.pre.i14.fr, 1 + %.pre.i13 = load i64, ptr %18, align 8, !alias.scope !420 + %.pre.i13.fr = freeze i64 %.pre.i13 + %.pre19.i = add i64 %.pre.i13.fr, 1 %268 = lshr i64 %.pre19.i, 3 %269 = mul nuw i64 %268, 7 - %270 = icmp ult i64 %.pre.i14.fr, 8 - %spec.select = select i1 %270, i64 %.pre.i14.fr, i64 %269 + %270 = icmp ult i64 %.pre.i13.fr, 8 + %spec.select = select i1 %270, i64 %.pre.i13.fr, i64 %269 %.pre = load i64, ptr %10, align 8, !alias.scope !420 - br label %271 - -271: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - %272 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %273 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %274 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %275 = sub i64 %273, %272 - store i64 %275, ptr %274, align 8, !alias.scope !420 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %271 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %272 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %273 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %274 = sub i64 %272, %271 + store i64 %274, ptr %273, align 8, !alias.scope !420 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !420 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i: ; preds = %81, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit", %271 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i: ; preds = %81, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %271 ], [ %.sroa.9.051.ph, %81 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit" ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %271 ], [ %.sroa.5.053.ph, %81 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h427c2d85494b9a96E.exit" ] - %276 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %277 = insertvalue { i64, i64 } %276, i64 %.sroa.4.1.i, 1 + %275 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %276 = insertvalue { i64, i64 } %275, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha2ebd903f8ce5b0bE.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha2ebd903f8ce5b0bE.exit: ; preds = %15, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i - %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %277, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i ] + %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %276, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h42d0ff72429a3729E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll b/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll index 2b4da4a1c78..86183c06a56 100644 --- a/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll +++ b/bench/diesel-rs/optimized/3nv3xphjbq527f6u.ll @@ -2464,7 +2464,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.not4.i = icmp eq i64 %7, 0 br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24: ; preds = %4 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24:; preds = %4 %8 = icmp ne ptr %.val, null tail call void @llvm.assume(i1 %8) %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 @@ -2482,16 +2482,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.ex tail call void @llvm.assume(i1 %13) br label %17 -._crit_edge.i: ; preds = %17 +12: ; preds = %17 %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) %spec.select34 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select34, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %15, align 8 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %16, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph @@ -2513,138 +2513,138 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.ex %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h46f1587603d9dcacE"(ptr noalias noundef align 8 dereferenceable(24) %5) #46 - to label %105 unwind label %106 + to label %105 unwind label %105 -._crit_edge.loopexit: ; preds = %104 +._crit_edge.loopexit: ; preds = %103 %.pre = load i64, ptr %6, align 8 %.pre20 = add i64 %.pre, 1 - %26 = lshr i64 %.pre20, 3 - %27 = mul nuw i64 %26, 7 + %25 = lshr i64 %.pre20, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24 ] - %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24 ] - %29 = icmp ult i64 %28, 8 - %.0 = select i1 %29, i64 %28, i64 %.pre-phi - %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %31 = load i64, ptr %30, align 8, !noundef !4 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %33 = sub i64 %.0, %31 - store i64 %33, ptr %32, align 8 + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread24 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !4 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %._crit_edge.i, %104 - %.sroa.02.011 = phi i64 [ %34, %104 ], [ 0, %._crit_edge.i ] - %34 = add nuw i64 %.sroa.02.011, 1 - %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.011 - %37 = load i8, ptr %36, align 1, !noundef !4 - %.not = icmp eq i8 %37, -128 - br i1 %.not, label %38, label %104 +.lr.ph: ; preds = %12, %103 + %.sroa.02.011 = phi i64 [ %33, %104 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.011, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.011 + %36 = load i8, ptr %35, align 1, !noundef !4 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %103 -38: ; preds = %.lr.ph +37: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.011, -1 %.neg16 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 + %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit -_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.011) +_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit: ; preds = %.preheader, %37 + %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.011) to label %41 unwind label %24 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit +40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !401) - %42 = load i64, ptr %6, align 8, !alias.scope !401, !noundef !4 - %43 = load ptr, ptr %0, align 8, !alias.scope !401, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %42, %40 - %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !404 - %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %46 = bitcast <16 x i1> %45 to i16 - %.not.not.i.not13.i = icmp eq i16 %46, 0 - br i1 %.not.not.i.not13.i, label %.lr.ph.i21, label %._crit_edge.i20 - -.lr.ph.i21: ; preds = %41, %.lr.ph.i21 + %41 = load i64, ptr %6, align 8, !alias.scope !401, !noundef !4 + %42 = load ptr, ptr %0, align 8, !alias.scope !401, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %41, %39 + %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %43, align 1, !noalias !404 + %44 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %45 = bitcast <16 x i1> %44 to i16 + %.not.not.i.not13.i = icmp eq i16 %45, 0 + br i1 %.not.not.i.not13.i, label %.lr.ph.i20, label %._crit_edge.i + +.lr.ph.i20: ; preds = %40, %.lr.ph.i20 %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i21 ], [ %.sroa.0.011.i, %41 ] - %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i21 ], [ 0, %41 ] - %47 = add i64 %.sroa.7.014.i, 16 - %48 = add i64 %47, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %48, %42 - %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !404 - %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %51 = bitcast <16 x i1> %50 to i16 - %.not.not.i.not.i = icmp eq i16 %51, 0 - br i1 %.not.not.i.not.i, label %.lr.ph.i21, label %._crit_edge.i20 - -._crit_edge.i20: ; preds = %.lr.ph.i21, %41 + %.sroa.7.014.i = phi i64 [ %46, %.lr.ph.i21 ], [ 0, %41 ] + %46 = add i64 %.sroa.7.014.i, 16 + %47 = add i64 %46, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %47, %41 + %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %48, align 1, !noalias !404 + %49 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %50 = bitcast <16 x i1> %49 to i16 + %.not.not.i.not.i = icmp eq i16 %50, 0 + br i1 %.not.not.i.not.i, label %.lr.ph.i20, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i20, %40 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i21 ] - %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i21 ] - %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %53 = zext nneg i16 %52 to i64 - %54 = add i64 %.sroa.0.0.lcssa.i, %53 - %55 = and i64 %54, %42 - %56 = getelementptr inbounds i8, ptr %43, i64 %55 - %57 = load i8, ptr %56, align 1, !noalias !401, !noundef !4 - %58 = icmp sgt i8 %57, -1 - br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit - -59: ; preds = %._crit_edge.i20 - %60 = load <16 x i8>, ptr %43, align 16, !noalias !407 - %61 = icmp slt <16 x i8> %60, zeroinitializer - %62 = bitcast <16 x i1> %61 to i16 - %.not.i.i = icmp ne i16 %62, 0 - %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) - %64 = zext nneg i16 %63 to i64 + %.lcssa.i = phi i16 [ %45, %41 ], [ %50, %.lr.ph.i21 ] + %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %52 = zext nneg i16 %51 to i64 + %53 = add i64 %.sroa.0.0.lcssa.i, %52 + %54 = and i64 %53, %41 + %55 = getelementptr inbounds i8, ptr %42, i64 %54 + %56 = load i8, ptr %55, align 1, !noalias !401, !noundef !4 + %57 = icmp sgt i8 %56, -1 + br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit + +58: ; preds = %._crit_edge.i + %59 = load <16 x i8>, ptr %42, align 16, !noalias !407 + %60 = icmp slt <16 x i8> %59, zeroinitializer + %61 = bitcast <16 x i1> %60 to i16 + %.not.i.i = icmp ne i16 %61, 0 + %62 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) + %63 = zext nneg i16 %62 to i64 tail call void @llvm.assume(i1 %.not.i.i) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit: ; preds = %59, %._crit_edge.i20 - %.0.i.i = phi i64 [ %64, %59 ], [ %55, %._crit_edge.i20 ] - %65 = sub i64 %.sroa.02.011, %.sroa.0.011.i - %66 = sub i64 %.0.i.i, %.sroa.0.011.i - %67 = xor i64 %66, %65 - %.unshifted = and i64 %67, %42 - %68 = icmp ult i64 %.unshifted, 16 - br i1 %68, label %81, label %69 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit: ; preds = %58, %._crit_edge.i + %.0.i.i = phi i64 [ %63, %59 ], [ %54, %._crit_edge.i20 ] + %64 = sub i64 %.sroa.02.011, %.sroa.0.011.i + %65 = sub i64 %.0.i.i, %.sroa.0.011.i + %66 = xor i64 %65, %64 + %.unshifted = and i64 %66, %41 + %67 = icmp ult i64 %.unshifted, 16 + br i1 %67, label %80, label %68 -69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit +68: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit %.neg17 = xor i64 %.0.i.i, -1 %.neg18 = mul i64 %2, %.neg17 - %70 = getelementptr inbounds i8, ptr %43, i64 %.neg18 - %71 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i - %72 = load i8, ptr %71, align 1, !noundef !4 - %73 = lshr i64 %40, 57 - %74 = trunc nuw nsw i64 %73 to i8 - %75 = add i64 %.0.i.i, -16 - %76 = and i64 %75, %42 - store i8 %74, ptr %71, align 1 - %77 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %78 = getelementptr i8, ptr %77, i64 %76 - %79 = getelementptr i8, ptr %78, i64 16 - store i8 %74, ptr %79, align 1 - %80 = icmp eq i8 %72, -1 - br i1 %80, label %95, label %.preheader - -81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit - %82 = lshr i64 %40, 57 - %83 = trunc nuw nsw i64 %82 to i8 - %84 = add i64 %.sroa.02.011, -16 - %85 = and i64 %42, %84 - %86 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.011 - store i8 %83, ptr %86, align 1 - %87 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %88 = getelementptr i8, ptr %87, i64 %85 - %89 = getelementptr i8, ptr %88, i64 16 - store i8 %83, ptr %89, align 1 - br label %104 - -.preheader: ; preds = %69, %.preheader + %69 = getelementptr inbounds i8, ptr %42, i64 %.neg18 + %70 = getelementptr inbounds i8, ptr %42, i64 %.0.i.i + %71 = load i8, ptr %70, align 1, !noundef !4 + %72 = lshr i64 %39, 57 + %73 = trunc nuw nsw i64 %72 to i8 + %74 = add i64 %.0.i.i, -16 + %75 = and i64 %74, %41 + store i8 %73, ptr %70, align 1 + %76 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %77 = getelementptr i8, ptr %76, i64 %75 + %78 = getelementptr i8, ptr %77, i64 16 + store i8 %73, ptr %78, align 1 + %79 = icmp eq i8 %71, -1 + br i1 %79, label %94, label %.preheader + +80: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.11693277841074805610.exit + %81 = lshr i64 %39, 57 + %82 = trunc nuw nsw i64 %81 to i8 + %83 = add i64 %.sroa.02.011, -16 + %84 = and i64 %41, %83 + %85 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.011 + store i8 %82, ptr %85, align 1 + %86 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %87 = getelementptr i8, ptr %86, i64 %84 + %88 = getelementptr i8, ptr %87, i64 16 + store i8 %82, ptr %88, align 1 + br label %103 + +.preheader: ; preds = %68, %.preheader %.0910.i = phi i64 [ %94, %.preheader ], [ 0, %69 ] - %90 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.0910.i + %89 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i + %90 = getelementptr inbounds nuw i8, ptr %69, i64 %.0910.i %92 = load i8, ptr %90, align 1 %93 = load i8, ptr %91, align 1 store i8 %93, ptr %90, align 1 @@ -2653,29 +2653,29 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.llvm.1169 %exitcond.not.i = icmp eq i64 %94, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h7faf88d4d5112b6fE.exit, label %.preheader -95: ; preds = %69 - %96 = add i64 %.sroa.02.011, -16 - %97 = load i64, ptr %6, align 8, !noundef !4 - %98 = and i64 %97, %96 - %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.011 - store i8 -1, ptr %100, align 1 - %101 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %102 = getelementptr i8, ptr %101, i64 %98 - %103 = getelementptr i8, ptr %102, i64 16 - store i8 -1, ptr %103, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %104 - -104: ; preds = %.lr.ph, %95, %81 +94: ; preds = %68 + %95 = add i64 %.sroa.02.011, -16 + %96 = load i64, ptr %6, align 8, !noundef !4 + %97 = and i64 %96, %95 + %98 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %99 = getelementptr inbounds i8, ptr %98, i64 %.sroa.02.011 + store i8 -1, ptr %99, align 1 + %100 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %101 = getelementptr i8, ptr %100, i64 %97 + %102 = getelementptr i8, ptr %101, i64 16 + store i8 -1, ptr %102, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %69, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) + br label %103 + +103: ; preds = %.lr.ph, %94, %80 %exitcond.not = icmp eq i64 %.sroa.02.011, %.val19 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -105: ; preds = %24 +104: ; preds = %24 resume { ptr, i32 } %25 -106: ; preds = %24 - %107 = landingpad { ptr, i32 } +105: ; preds = %24 + %106 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #47 unreachable diff --git a/bench/duckdb/optimized/bignum.ll b/bench/duckdb/optimized/bignum.ll index 9aaf6243d03..ab4443da5c2 100644 --- a/bench/duckdb/optimized/bignum.ll +++ b/bench/duckdb/optimized/bignum.ll @@ -1543,22 +1543,22 @@ define hidden noundef range(i32 -16, 1) i32 @mbedtls_mpi_read_binary(ptr noundef tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %17, ptr align 1 %1, i64 %2, i1 false) %18 = load ptr, ptr %15, align 8, !tbaa !11 %19 = getelementptr i64, ptr %18, i64 %8 - %.01214.i = getelementptr i8, ptr %19, i64 -8 + %20 = getelementptr i8, ptr %19, i64 -8 %.not15.i = icmp ugt ptr %18, %.01214.i br i1 %.not15.i, label %_ZL21mpi_bigendian_to_hostPmm.exit, label %.lr.ph.i .lr.ph.i: ; preds = %12, %.lr.ph.i %.01217.i = phi ptr [ %.012.i, %.lr.ph.i ], [ %.01214.i, %12 ] - %.016.i = phi ptr [ %24, %.lr.ph.i ], [ %18, %12 ] - %20 = load i64, ptr %.016.i, align 8, !tbaa !13 - %21 = tail call noundef i64 @llvm.bswap.i64(i64 %20) - %22 = load i64, ptr %.01217.i, align 8, !tbaa !13 - %23 = tail call noundef i64 @llvm.bswap.i64(i64 %22) - store i64 %23, ptr %.016.i, align 8, !tbaa !13 - store i64 %21, ptr %.01217.i, align 8, !tbaa !13 - %24 = getelementptr inbounds nuw i8, ptr %.016.i, i64 8 + %.016.i = phi ptr [ %25, %.lr.ph.i ], [ %18, %12 ] + %21 = load i64, ptr %.016.i, align 8, !tbaa !13 + %22 = tail call noundef i64 @llvm.bswap.i64(i64 %21) + %23 = load i64, ptr %.01217.i, align 8, !tbaa !13 + %24 = tail call noundef i64 @llvm.bswap.i64(i64 %23) + store i64 %24, ptr %.016.i, align 8, !tbaa !13 + store i64 %22, ptr %.01217.i, align 8, !tbaa !13 + %25 = getelementptr inbounds nuw i8, ptr %.016.i, i64 8 %.012.i = getelementptr i8, ptr %.01217.i, i64 -8 - %.not.i = icmp ugt ptr %24, %.012.i + %.not.i = icmp ugt ptr %25, %.012.i br i1 %.not.i, label %_ZL21mpi_bigendian_to_hostPmm.exit, label %.lr.ph.i, !llvm.loop !31 _ZL21mpi_bigendian_to_hostPmm.exit: ; preds = %.lr.ph.i, %12, %3 @@ -5977,22 +5977,22 @@ define hidden noundef i32 @mbedtls_mpi_fill_random(ptr noundef captures(address_ 30: ; preds = %17 %31 = load ptr, ptr %20, align 8, !tbaa !11 %32 = getelementptr i64, ptr %31, i64 %9 - %.01214.i.i = getelementptr i8, ptr %32, i64 -8 + %33 = getelementptr i8, ptr %32, i64 -8 %.not15.i.i = icmp ugt ptr %31, %.01214.i.i br i1 %.not15.i.i, label %_ZL24mpi_fill_random_internalP11mbedtls_mpimPFiPvPhmES1_.exit, label %.lr.ph.i.i .lr.ph.i.i: ; preds = %30, %.lr.ph.i.i %.01217.i.i = phi ptr [ %.012.i.i, %.lr.ph.i.i ], [ %.01214.i.i, %30 ] - %.016.i.i = phi ptr [ %37, %.lr.ph.i.i ], [ %31, %30 ] - %33 = load i64, ptr %.016.i.i, align 8, !tbaa !13 - %34 = tail call noundef i64 @llvm.bswap.i64(i64 %33) - %35 = load i64, ptr %.01217.i.i, align 8, !tbaa !13 - %36 = tail call noundef i64 @llvm.bswap.i64(i64 %35) - store i64 %36, ptr %.016.i.i, align 8, !tbaa !13 - store i64 %34, ptr %.01217.i.i, align 8, !tbaa !13 - %37 = getelementptr inbounds nuw i8, ptr %.016.i.i, i64 8 + %.016.i.i = phi ptr [ %38, %.lr.ph.i.i ], [ %31, %30 ] + %34 = load i64, ptr %.016.i.i, align 8, !tbaa !13 + %35 = tail call noundef i64 @llvm.bswap.i64(i64 %34) + %36 = load i64, ptr %.01217.i.i, align 8, !tbaa !13 + %37 = tail call noundef i64 @llvm.bswap.i64(i64 %36) + store i64 %37, ptr %.016.i.i, align 8, !tbaa !13 + store i64 %35, ptr %.01217.i.i, align 8, !tbaa !13 + %38 = getelementptr inbounds nuw i8, ptr %.016.i.i, i64 8 %.012.i.i = getelementptr i8, ptr %.01217.i.i, i64 -8 - %.not.i.i = icmp ugt ptr %37, %.012.i.i + %.not.i.i = icmp ugt ptr %38, %.012.i.i br i1 %.not.i.i, label %_ZL24mpi_fill_random_internalP11mbedtls_mpimPFiPvPhmES1_.exit, label %.lr.ph.i.i, !llvm.loop !31 _ZL24mpi_fill_random_internalP11mbedtls_mpimPFiPvPhmES1_.exit: ; preds = %.lr.ph.i.i, %30, %17, %13, %4, %11 diff --git a/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll b/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll index 08d292d69b3..a45be922875 100644 --- a/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll +++ b/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll @@ -7735,13 +7735,13 @@ _ZNSt12_Vector_baseImSaImEE11_M_allocateEm.exit.i: ; preds = %47 _ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i: ; preds = %63, %.noexc34 %.not.i8.i = icmp eq ptr %50, null - br i1 %.not.i8.i, label %_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i, label %64 + br i1 %.not.i8.i, label %_ZNSt6vectorImSaImEE7reserveEm.exit.thread, label %64 64: ; preds = %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i call void @_ZdlPv(ptr noundef nonnull %50) #29 - br label %_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i + br label %_ZNSt6vectorImSaImEE7reserveEm.exit.thread -_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i: ; preds = %64, %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i +_ZNSt6vectorImSaImEE7reserveEm.exit.thread: ; preds = %64, %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit.i store ptr %61, ptr %11, align 8, !tbaa !198 %65 = getelementptr inbounds nuw i8, ptr %61, i64 %59 store ptr %65, ptr %56, align 8, !tbaa !450 @@ -7749,7 +7749,7 @@ _ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i: ; preds = %64, %_ZNSt6vec store ptr %66, ptr %48, align 8, !tbaa !449 br label %_ZNSt6vectorImSaImEE7reserveEm.exit -_ZNSt6vectorImSaImEE7reserveEm.exit: ; preds = %_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm.exit.i, %47 +_ZNSt6vectorImSaImEE7reserveEm.exit: ; preds = %_ZNSt6vectorImSaImEE7reserveEm.exit.thread, %47 %.not79 = icmp eq i64 %34, 0 br i1 %.not79, label %._crit_edge, label %.lr.ph diff --git a/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll b/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll index 2c19c8829cf..de8499f939a 100644 --- a/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll +++ b/bench/egg-rs/optimized/208b1a9t1vdfvafq.ll @@ -246,7 +246,7 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res br i1 %.not.i, label %24, label %103 23: ; preds = %5 - br i1 %4, label %211, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit" + br i1 %4, label %210, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit" 24: ; preds = %15 %25 = add nuw i64 %.sroa.05.0.i, 1 @@ -278,16 +278,16 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res %.sroa.618.i.i.sroa.5.0..sroa.618.0..sroa_idx.i.i.sroa_idx = getelementptr inbounds nuw i8, ptr %8, i64 40 store i64 16, ptr %.sroa.618.i.i.sroa.5.0..sroa.618.0..sroa_idx.i.i.sroa_idx, align 8, !noalias !20 %invariant.gep = getelementptr i8, ptr %26, i64 16 - %.not53 = icmp eq i64 %19, 0 - br i1 %.not53, label %.preheader.preheader, label %.lr.ph52.preheader + %.not52 = icmp eq i64 %19, 0 + br i1 %.not52, label %.preheader.preheader, label %.lr.ph51.preheader .preheader.preheader: ; preds = %.backedge, %32 br label %.preheader -.lr.ph52.preheader: ; preds = %32 - %.pre70 = load ptr, ptr %0, align 8, !alias.scope !20 - %invariant.gep94 = getelementptr i8, ptr %.pre70, i64 -8 - br label %.lr.ph52 +.lr.ph51.preheader: ; preds = %32 + %.pre69 = load ptr, ptr %0, align 8, !alias.scope !20 + %invariant.gep89 = getelementptr i8, ptr %.pre69, i64 -8 + br label %.lr.ph51 34: ; preds = %24 call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8), !noalias !20 @@ -343,22 +343,22 @@ _ZN4core10intrinsics10typed_swap17h54f84bb71b663d01E.exit: ; preds = %.preheader call fastcc void @"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E"(ptr noalias noundef align 8 dereferenceable(48) %8) #25 br label %common.resume -.lr.ph52: ; preds = %.lr.ph52.preheader, %.backedge - %.sroa.024.0.i.i50 = phi i64 [ %56, %.backedge ], [ 0, %.lr.ph52.preheader ] - %56 = add nuw i64 %.sroa.024.0.i.i50, 1 - %57 = getelementptr inbounds i8, ptr %.pre70, i64 %.sroa.024.0.i.i50 +.lr.ph51: ; preds = %.lr.ph51.preheader, %.backedge + %.sroa.024.0.i.i49 = phi i64 [ %56, %.backedge ], [ 0, %.lr.ph52.preheader ] + %56 = add nuw i64 %.sroa.024.0.i.i49, 1 + %57 = getelementptr inbounds i8, ptr %.pre69, i64 %.sroa.024.0.i.i49 %58 = load i8, ptr %57, align 1, !noundef !7 %59 = icmp sgt i8 %58, -1 br i1 %59, label %60, label %.backedge -.backedge: ; preds = %.lr.ph52, %90 - %exitcond68.not = icmp eq i64 %.sroa.024.0.i.i50, %17 - br i1 %exitcond68.not, label %.preheader.preheader, label %.lr.ph52 +.backedge: ; preds = %.lr.ph51, %90 + %exitcond67.not = icmp eq i64 %.sroa.024.0.i.i49, %17 + br i1 %exitcond67.not, label %.preheader.preheader, label %.lr.ph51 -60: ; preds = %.lr.ph52 - %61 = sub nsw i64 0, %.sroa.024.0.i.i50 - %gep95 = getelementptr i64, ptr %invariant.gep94, i64 %61 - %.val4.i = load i64, ptr %gep95, align 8, !noalias !31, !noundef !7 +60: ; preds = %.lr.ph51 + %61 = sub nsw i64 0, %.sroa.024.0.i.i49 + %gep90 = getelementptr i64, ptr %invariant.gep89, i64 %61 + %.val4.i = load i64, ptr %gep90, align 8, !noalias !31, !noundef !7 %62 = icmp ult i64 %.val4.i, %3 br i1 %62, label %64, label %63, !prof !35 @@ -423,9 +423,9 @@ _ZN4core10intrinsics10typed_swap17h54f84bb71b663d01E.exit: ; preds = %.preheader store i8 %93, ptr %91, align 1 %gep = getelementptr i8, ptr %invariant.gep, i64 %95 store i8 %93, ptr %gep, align 1 - %96 = shl i64 %.sroa.024.0.i.i50, 3 + %96 = shl i64 %.sroa.024.0.i.i49, 3 %97 = sub nuw nsw i64 -8, %96 - %98 = getelementptr inbounds i8, ptr %.pre70, i64 %97 + %98 = getelementptr inbounds i8, ptr %.pre69, i64 %97 %99 = shl i64 %.sroa.0.0.i.i14, 3 %100 = sub nuw nsw i64 -8, %99 %101 = getelementptr inbounds i8, ptr %26, i64 %100 @@ -442,7 +442,7 @@ common.resume: ; preds = %120, %54 %.not.i12.i = icmp eq i64 %19, 0 br i1 %.not.i12.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79", label %.lr.ph.i -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79": ; preds = %103 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79":; preds = %103 %104 = icmp ne ptr %.val10, null tail call void @llvm.assume(i1 %104) %105 = getelementptr inbounds nuw i8, ptr %.val10, i64 16 @@ -460,7 +460,7 @@ common.resume: ; preds = %120, %54 tail call void @llvm.assume(i1 %109) br label %113 -._crit_edge.i: ; preds = %113 +._crit_edge.i:; preds = %113 %spec.select = tail call i64 @llvm.umax.i64(i64 %19, i64 16) %spec.select98 = tail call i64 @llvm.umin.i64(i64 %19, i64 16) %110 = getelementptr inbounds i8, ptr %.val10, i64 %spec.select @@ -473,7 +473,7 @@ common.resume: ; preds = %120, %54 store ptr %0, ptr %7, align 8, !noalias !42 br label %.lr.ph49 -113: ; preds = %113, %.lr.ph.i +113:; preds = %113, %.lr.ph.i %.sroa.52.014.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i ], [ %115, %113 ] %.sroa.01.013.i = phi i64 [ 0, %.lr.ph.i ], [ %114, %113 ] %114 = add i64 %.sroa.01.013.i, 16 @@ -493,120 +493,120 @@ common.resume: ; preds = %120, %54 invoke fastcc void @"_ZN4core3ptr297drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h45f6103fc3ead8c6E"(ptr noalias noundef align 8 dereferenceable(24) %7) #25 to label %common.resume unwind label %204 -.lr.ph49: ; preds = %._crit_edge.i, %194 - %.sroa.08.0.i.i48 = phi i64 [ %122, %194 ], [ 0, %._crit_edge.i ] - %122 = add nuw i64 %.sroa.08.0.i.i48, 1 - %123 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 - %124 = getelementptr inbounds i8, ptr %123, i64 %.sroa.08.0.i.i48 - %125 = load i8, ptr %124, align 1, !noundef !7 - %.not.i.i = icmp eq i8 %125, -128 - br i1 %.not.i.i, label %126, label %194 - -126: ; preds = %.lr.ph49 - %127 = shl i64 %.sroa.08.0.i.i48, 3 - %128 = sub nuw nsw i64 -8, %127 - %129 = getelementptr inbounds i8, ptr %123, i64 %128 - %130 = sub nsw i64 0, %.sroa.08.0.i.i48 - %131 = getelementptr inbounds i64, ptr %123, i64 %130 - %132 = getelementptr inbounds i8, ptr %131, i64 -8 - %.val4.i1844 = load i64, ptr %132, align 8, !noalias !51, !noundef !7 - %133 = icmp ult i64 %.val4.i1844, %3 - br i1 %133, label %.lr.ph, label %._crit_edge, !prof !55 - -_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = %.preheader32 +.lr.ph48: ; preds = %._crit_edge.i, %194 + %.sroa.08.0.i.i47 = phi i64 [ %121, %194 ], [ 0, %._crit_edge.i ] + %121 = add nuw i64 %.sroa.08.0.i.i47, 1 + %122 = load ptr, ptr %0, align 8, !nonnull !7, !noundef !7 + %123 = getelementptr inbounds i8, ptr %122, i64 %.sroa.08.0.i.i47 + %124 = load i8, ptr %123, align 1, !noundef !7 + %.not.i.i = icmp eq i8 %124, -128 + br i1 %.not.i.i, label %125, label %194 + +125: ; preds = %.lr.ph48 + %126 = shl i64 %.sroa.08.0.i.i47, 3 + %127 = sub nuw nsw i64 -8, %126 + %128 = getelementptr inbounds i8, ptr %122, i64 %127 + %129 = sub nsw i64 0, %.sroa.08.0.i.i47 + %130 = getelementptr inbounds i64, ptr %122, i64 %129 + %131 = getelementptr inbounds i8, ptr %130, i64 -8 + %.val4.i1843 = load i64, ptr %131, align 8, !noalias !51, !noundef !7 + %132 = icmp ult i64 %.val4.i1843, %3 + br i1 %132, label %.lr.ph, label %._crit_edge, !prof !55 + +_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = %.preheader31 tail call void @llvm.experimental.noalias.scope.decl(metadata !56) %.val.i16 = load ptr, ptr %0, align 8, !alias.scope !56, !noalias !58, !nonnull !7, !noundef !7 - %134 = getelementptr inbounds i64, ptr %.val.i16, i64 %130 - %135 = getelementptr inbounds i8, ptr %134, i64 -8 - %.val4.i18 = load i64, ptr %135, align 8, !noalias !59, !noundef !7 - %136 = icmp ult i64 %.val4.i18, %3 - br i1 %136, label %.lr.ph, label %._crit_edge, !prof !60 - -._crit_edge: ; preds = %126, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit - %.val4.i18.lcssa = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1844, %126 ] + %133 = getelementptr inbounds i64, ptr %.val.i16, i64 %129 + %134 = getelementptr inbounds i8, ptr %133, i64 -8 + %.val4.i18 = load i64, ptr %134, align 8, !noalias !59, !noundef !7 + %135 = icmp ult i64 %.val4.i18, %3 + br i1 %135, label %.lr.ph, label %._crit_edge, !prof !60 + +._crit_edge: ; preds = %125, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit + %.val4.i18.lcssa = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1843, %126 ] invoke void @_ZN4core9panicking18panic_bounds_check17hd7e618b1b39cc1c3E(i64 noundef %.val4.i18.lcssa, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.0464f3f8a1044c7ac829485398a26f09.8) #26 to label %.noexc20 unwind label %120 .noexc20: ; preds = %._crit_edge unreachable -.lr.ph: ; preds = %126, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit - %.val4.i1846 = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1844, %126 ] - %.val.i1645 = phi ptr [ %.val.i16, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %123, %126 ] - %137 = getelementptr inbounds [0 x { i64, { i64, i64, i64, i64, i64 }, i32, [1 x i32] }], ptr %2, i64 0, i64 %.val4.i1846 - %138 = load i64, ptr %137, align 8, !noalias !61, !noundef !7 +.lr.ph: ; preds = %125, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit + %.val4.i1845 = phi i64 [ %.val4.i18, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %.val4.i1843, %126 ] + %.val.i1644 = phi ptr [ %.val.i16, %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit ], [ %122, %126 ] + %136 = getelementptr inbounds [0 x { i64, { i64, i64, i64, i64, i64 }, i32, [1 x i32] }], ptr %2, i64 0, i64 %.val4.i1845 + %137 = load i64, ptr %136, align 8, !noalias !61, !noundef !7 %.val7 = load i64, ptr %16, align 8, !noundef !7 - %.sroa.02.05.i = and i64 %.val7, %138 - %139 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.02.05.i - %.sroa.0.0.copyload.i46.i = load <16 x i8>, ptr %139, align 1, !noalias !63 - %140 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i, zeroinitializer - %141 = bitcast <16 x i1> %140 to i16 - %142 = icmp eq i16 %141, 0 - br i1 %142, label %.lr.ph.i23, label %._crit_edge.i22 - -.lr.ph.i23: ; preds = %.lr.ph, %.lr.ph.i23 - %.sroa.02.08.i = phi i64 [ %.sroa.02.0.i24, %.lr.ph.i23 ], [ %.sroa.02.05.i, %.lr.ph ] - %.sroa.9.07.i = phi i64 [ %143, %.lr.ph.i23 ], [ 0, %.lr.ph ] - %143 = add i64 %.sroa.9.07.i, 16 - %144 = add i64 %143, %.sroa.02.08.i - %.sroa.02.0.i24 = and i64 %144, %.val7 - %145 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.02.0.i24 - %.sroa.0.0.copyload.i4.i = load <16 x i8>, ptr %145, align 1, !noalias !63 - %146 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i, zeroinitializer - %147 = bitcast <16 x i1> %146 to i16 - %148 = icmp eq i16 %147, 0 - br i1 %148, label %.lr.ph.i23, label %._crit_edge.i22 - -._crit_edge.i22: ; preds = %.lr.ph.i23, %.lr.ph - %.sroa.02.0.lcssa.i = phi i64 [ %.sroa.02.05.i, %.lr.ph ], [ %.sroa.02.0.i24, %.lr.ph.i23 ] - %.lcssa.i = phi i16 [ %141, %.lr.ph ], [ %147, %.lr.ph.i23 ] - %149 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %150 = zext nneg i16 %149 to i64 - %151 = add i64 %.sroa.02.0.lcssa.i, %150 - %152 = and i64 %151, %.val7 - %153 = getelementptr inbounds i8, ptr %.val.i1645, i64 %152 - %154 = load i8, ptr %153, align 1, !noundef !7 - %155 = icmp sgt i8 %154, -1 - br i1 %155, label %156, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" - -156: ; preds = %._crit_edge.i22 - %157 = load <16 x i8>, ptr %.val.i1645, align 16, !noalias !66 - %158 = icmp slt <16 x i8> %157, zeroinitializer - %159 = bitcast <16 x i1> %158 to i16 - %160 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %159, i1 false) - %161 = zext nneg i16 %160 to i64 + %.sroa.02.05.i = and i64 %.val7, %137 + %138 = getelementptr inbounds i8, ptr %.val.i1644, i64 %.sroa.02.05.i + %.sroa.0.0.copyload.i46.i = load <16 x i8>, ptr %138, align 1, !noalias !63 + %139 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i, zeroinitializer + %140 = bitcast <16 x i1> %139 to i16 + %141 = icmp eq i16 %140, 0 + br i1 %141, label %.lr.ph.i22, label %._crit_edge.i + +.lr.ph.i22: ; preds = %.lr.ph, %.lr.ph.i22 + %.sroa.02.08.i = phi i64 [ %.sroa.02.0.i23, %.lr.ph.i23 ], [ %.sroa.02.05.i, %.lr.ph ] + %.sroa.9.07.i = phi i64 [ %142, %.lr.ph.i23 ], [ 0, %.lr.ph ] + %142 = add i64 %.sroa.9.07.i, 16 + %143 = add i64 %142, %.sroa.02.08.i + %.sroa.02.0.i23 = and i64 %143, %.val7 + %144 = getelementptr inbounds i8, ptr %.val.i1644, i64 %.sroa.02.0.i23 + %.sroa.0.0.copyload.i4.i = load <16 x i8>, ptr %144, align 1, !noalias !63 + %145 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i, zeroinitializer + %146 = bitcast <16 x i1> %145 to i16 + %147 = icmp eq i16 %146, 0 + br i1 %147, label %.lr.ph.i22, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i22, %.lr.ph + %.sroa.02.0.lcssa.i = phi i64 [ %.sroa.02.05.i, %.lr.ph ], [ %.sroa.02.0.i23, %.lr.ph.i23 ] + %.lcssa.i = phi i16 [ %140, %.lr.ph ], [ %146, %.lr.ph.i23 ] + %148 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %149 = zext nneg i16 %148 to i64 + %150 = add i64 %.sroa.02.0.lcssa.i, %149 + %151 = and i64 %150, %.val7 + %152 = getelementptr inbounds i8, ptr %.val.i1644, i64 %151 + %153 = load i8, ptr %152, align 1, !noundef !7 + %154 = icmp sgt i8 %153, -1 + br i1 %154, label %155, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" + +155: ; preds = %._crit_edge.i + %156 = load <16 x i8>, ptr %.val.i1644, align 16, !noalias !66 + %157 = icmp slt <16 x i8> %156, zeroinitializer + %158 = bitcast <16 x i1> %157 to i16 + %159 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %158, i1 false) + %160 = zext nneg i16 %159 to i64 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit": ; preds = %156, %._crit_edge.i22 - %.sroa.0.0.i = phi i64 [ %161, %156 ], [ %152, %._crit_edge.i22 ] - %162 = shl i64 %.sroa.0.0.i, 3 - %163 = sub nuw nsw i64 -8, %162 - %164 = getelementptr inbounds i8, ptr %.val.i1645, i64 %163 - %165 = sub i64 %.sroa.08.0.i.i48, %.sroa.02.05.i - %166 = sub i64 %.sroa.0.0.i, %.sroa.02.05.i - %167 = xor i64 %166, %165 - %.unshifted.i.i = and i64 %167, %.val7 - %168 = icmp ult i64 %.unshifted.i.i, 16 - br i1 %168, label %195, label %169 - -169: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" - %170 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.0.0.i - %171 = load i8, ptr %170, align 1, !noundef !7 - %172 = lshr i64 %138, 57 - %173 = trunc nuw nsw i64 %172 to i8 - %174 = add i64 %.sroa.0.0.i, -16 - %175 = and i64 %174, %.val7 - store i8 %173, ptr %170, align 1 - %176 = getelementptr i8, ptr %.val.i1645, i64 %175 - %177 = getelementptr i8, ptr %176, i64 16 - store i8 %173, ptr %177, align 1 - %178 = icmp eq i8 %171, -1 - br i1 %178, label %184, label %.preheader32 - -.preheader32: ; preds = %169, %.preheader32 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit": ; preds = %155, %._crit_edge.i + %.sroa.0.0.i = phi i64 [ %160, %156 ], [ %151, %._crit_edge.i22 ] + %161 = shl i64 %.sroa.0.0.i, 3 + %162 = sub nuw nsw i64 -8, %161 + %163 = getelementptr inbounds i8, ptr %.val.i1644, i64 %162 + %164 = sub i64 %.sroa.08.0.i.i47, %.sroa.02.05.i + %165 = sub i64 %.sroa.0.0.i, %.sroa.02.05.i + %166 = xor i64 %165, %164 + %.unshifted.i.i = and i64 %166, %.val7 + %167 = icmp ult i64 %.unshifted.i.i, 16 + br i1 %167, label %195, label %168 + +168: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" + %169 = getelementptr inbounds i8, ptr %.val.i1644, i64 %.sroa.0.0.i + %170 = load i8, ptr %169, align 1, !noundef !7 + %171 = lshr i64 %137, 57 + %172 = trunc nuw nsw i64 %171 to i8 + %173 = add i64 %.sroa.0.0.i, -16 + %174 = and i64 %173, %.val7 + store i8 %172, ptr %169, align 1 + %175 = getelementptr i8, ptr %.val.i1644, i64 %174 + %176 = getelementptr i8, ptr %175, i64 16 + store i8 %172, ptr %176, align 1 + %177 = icmp eq i8 %170, -1 + br i1 %177, label %184, label %.preheader31 + +.preheader31: ; preds = %168, %.preheader31 %.sroa.04.09.i = phi i64 [ %183, %.preheader32 ], [ 0, %169 ] - %179 = getelementptr inbounds nuw i8, ptr %129, i64 %.sroa.04.09.i - %180 = getelementptr inbounds nuw i8, ptr %164, i64 %.sroa.04.09.i + %178 = getelementptr inbounds nuw i8, ptr %128, i64 %.sroa.04.09.i + %179 = getelementptr inbounds nuw i8, ptr %163, i64 %.sroa.04.09.i %181 = load i8, ptr %179, align 1 %182 = load i8, ptr %180, align 1 store i8 %182, ptr %179, align 1 @@ -615,7 +615,7 @@ _ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = % %exitcond.not.i = icmp eq i64 %183, 8 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit, label %.preheader32 -184: ; preds = %169 +184:; preds = %169 %185 = add i64 %.sroa.08.0.i.i48, -16 %186 = load i64, ptr %16, align 8, !noundef !7 %187 = and i64 %186, %185 @@ -630,14 +630,14 @@ _ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = % store i64 %193, ptr %164, align 1 br label %194 -194: ; preds = %195, %184, %.lr.ph49 +194:; preds = %195, %184, %.lr.ph49 %exitcond.not = icmp eq i64 %.sroa.08.0.i.i48, %17 br i1 %exitcond.not, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit", label %.lr.ph49 -195: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" +195:; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17h40479a7a32c77fd8E.exit" %196 = lshr i64 %138, 57 %197 = trunc nuw nsw i64 %196 to i8 - %198 = add i64 %.sroa.08.0.i.i48, -16 + %198 = add i64 %.sroa.08.0.i.i47, -16 %199 = and i64 %.val7, %198 %200 = getelementptr inbounds i8, ptr %.val.i1645, i64 %.sroa.08.0.i.i48 store i8 %197, ptr %200, align 1 @@ -647,7 +647,7 @@ _ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = % store i8 %197, ptr %203, align 1 br label %194 -204: ; preds = %120 +204:; preds = %120 %205 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hd62aa59d1fda1c9fE() #27 @@ -655,44 +655,44 @@ _ZN4core3ptr19swap_nonoverlapping17hf866f6a6feb866b4E.exit.loopexit: ; preds = % "_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit": ; preds = %194 %.pre = load i64, ptr %16, align 8 - %.pre69 = load i64, ptr %10, align 8 - %.pre71 = add i64 %.pre, 1 - %.pre72 = lshr i64 %.pre71, 3 - %.pre74 = mul nuw i64 %.pre72, 7 + %.pre68 = load i64, ptr %10, align 8 + %.pre70 = add i64 %.pre, 1 + %.pre71 = lshr i64 %.pre70, 3 + %.pre73 = mul nuw i64 %.pre71, 7 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" "_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79", %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" - %.pre-phi75 = phi i64 [ %.pre74, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %21, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] - %206 = phi i64 [ %.pre69, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %11, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] - %207 = phi i64 [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ -1, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] - %208 = icmp ult i64 %207, 8 - %.sroa.05.0.i.i = select i1 %208, i64 %207, i64 %.pre-phi75 - %209 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %210 = sub i64 %.sroa.05.0.i.i, %206 - store i64 %210, ptr %209, align 8 + %.pre-phi74 = phi i64 [ %.pre73, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %21, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] + %205 = phi i64 [ %.pre68, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ %11, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] + %206 = phi i64 [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i.loopexit" ], [ -1, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h539e86137da34e45E.exit.thread79" ] + %207 = icmp ult i64 %206, 8 + %.sroa.05.0.i.i = select i1 %207, i64 %206, i64 %.pre-phi74 + %208 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %209 = sub i64 %.sroa.05.0.i.i, %205 + store i64 %209, ptr %208, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7), !noalias !42 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit" -211: ; preds = %23 +210: ; preds = %23 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %9), !noalias !14 store ptr @anon.0464f3f8a1044c7ac829485398a26f09.12, ptr %9, align 8, !noalias !14 - %212 = getelementptr inbounds nuw i8, ptr %9, i64 8 - store i64 1, ptr %212, align 8, !noalias !14 - %213 = getelementptr inbounds nuw i8, ptr %9, i64 32 - store ptr null, ptr %213, align 8, !noalias !14 - %214 = getelementptr inbounds nuw i8, ptr %9, i64 16 - store ptr inttoptr (i64 8 to ptr), ptr %214, align 8, !noalias !14 - %215 = getelementptr inbounds nuw i8, ptr %9, i64 24 - store i64 0, ptr %215, align 8, !noalias !14 + %211 = getelementptr inbounds nuw i8, ptr %9, i64 8 + store i64 1, ptr %211, align 8, !noalias !14 + %212 = getelementptr inbounds nuw i8, ptr %9, i64 32 + store ptr null, ptr %212, align 8, !noalias !14 + %213 = getelementptr inbounds nuw i8, ptr %9, i64 16 + store ptr inttoptr (i64 8 to ptr), ptr %213, align 8, !noalias !14 + %214 = getelementptr inbounds nuw i8, ptr %9, i64 24 + store i64 0, ptr %214, align 8, !noalias !14 call void @_ZN4core9panicking9panic_fmt17hdc63834ffaaefae5E(ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %9, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.0464f3f8a1044c7ac829485398a26f09.14) #26, !noalias !14 unreachable "_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h3955e03f6be39fc1E.exit": ; preds = %34, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E.exit", %23, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" %.sroa.4.0.i = phi i64 [ undef, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" ], [ undef, %23 ], [ %31, %34 ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E.exit" ] %.sroa.02.0.i = phi i64 [ -9223372036854775807, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17hf7d3c56bdebf3282E.exit.i" ], [ 0, %23 ], [ %29, %34 ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hd9f379552fb2c839E.exit" ] - %216 = insertvalue { i64, i64 } poison, i64 %.sroa.02.0.i, 0 - %217 = insertvalue { i64, i64 } %216, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %217 + %215 = insertvalue { i64, i64 } poison, i64 %.sroa.02.0.i, 0 + %216 = insertvalue { i64, i64 } %215, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %216 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/graphviz/optimized/spring_electrical.ll b/bench/graphviz/optimized/spring_electrical.ll index afe3ad5f624..40b58078ad2 100644 --- a/bench/graphviz/optimized/spring_electrical.ll +++ b/bench/graphviz/optimized/spring_electrical.ll @@ -861,7 +861,7 @@ define internal fastcc void @beautify_leaves(i32 noundef range(i32 1, -214748364 %21 = icmp eq ptr %20, null br i1 %21, label %22, label %bitarray_new.exit -22: ; preds = %14 +.thread.i.i: ; preds = %14 %23 = load ptr, ptr @stderr, align 8, !tbaa !3 %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.26, i64 noundef %19) #23 tail call fastcc void @graphviz_exit() #24 @@ -870,21 +870,21 @@ define internal fastcc void @beautify_leaves(i32 noundef range(i32 1, -214748364 bitarray_new.exit: ; preds = %3, %14 %.sroa.0.0.i = phi ptr [ null, %3 ], [ %20, %14 ] store ptr %.sroa.0.0.i, ptr %6, align 8 - %25 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store i64 %12, ptr %25, align 8 - %26 = icmp sgt i32 %7, 0 - br i1 %26, label %.lr.ph108, label %._crit_edge109 + %27 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store i64 %12, ptr %27, align 8 + %28 = icmp sgt i32 %7, 0 + br i1 %28, label %.lr.ph108, label %._crit_edge109 .lr.ph108: ; preds = %bitarray_new.exit - %27 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %28 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %29 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %30 = getelementptr inbounds nuw i8, ptr %4, i64 8 %wide.trip.count = zext nneg i32 %7 to i64 - br label %29 + br label %31 -29: ; preds = %.lr.ph108, %153 +31: ; preds = %.lr.ph108, %155 %indvars.iv112 = phi i64 [ 0, %.lr.ph108 ], [ %indvars.iv.next113, %153 ] %indvars.iv.next113 = add nuw nsw i64 %indvars.iv112, 1 - %30 = getelementptr inbounds nuw i32, ptr %9, i64 %indvars.iv.next113 + %32 = getelementptr inbounds nuw i32, ptr %9, i64 %indvars.iv.next113 %31 = load i32, ptr %30, align 4, !tbaa !36 %32 = getelementptr inbounds nuw i32, ptr %9, i64 %indvars.iv112 %33 = load i32, ptr %32, align 4, !tbaa !36 @@ -892,56 +892,56 @@ bitarray_new.exit: ; preds = %3, %14 %.not = icmp eq i32 %34, 1 br i1 %.not, label %35, label %153 -35: ; preds = %29 +35: ; preds = %31 %36 = load ptr, ptr %6, align 8 %37 = load i64, ptr %25, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) store ptr %36, ptr %5, align 8 - store i64 %37, ptr %27, align 8 - %38 = icmp ult i64 %37, 65 - %.0.i = select i1 %38, ptr %5, ptr %36 - %39 = lshr i64 %indvars.iv112, 3 - %40 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %39 - %41 = load i8, ptr %40, align 1, !tbaa !56 - %42 = zext i8 %41 to i32 - %43 = trunc nuw nsw i64 %indvars.iv112 to i32 - %44 = and i32 %43, 7 - %45 = shl nuw nsw i32 1, %44 - %46 = and i32 %45, %42 - %.not85 = icmp eq i32 %46, 0 + store i64 %37, ptr %29, align 8 + %40 = icmp ult i64 %37, 65 + %.0.i = select i1 %40, ptr %5, ptr %36 + %41 = lshr i64 %indvars.iv112, 3 + %42 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %41 + %43 = load i8, ptr %42, align 1, !tbaa !56 + %44 = zext i8 %43 to i32 + %45 = trunc nuw nsw i64 %indvars.iv112 to i32 + %46 = and i32 %45, 7 + %47 = shl nuw nsw i32 1, %46 + %48 = and i32 %47, %44 + %.not85 = icmp eq i32 %48, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) - br i1 %.not85, label %47, label %153 + br i1 %.not85, label %49, label %155 -47: ; preds = %35 - %48 = sext i32 %33 to i64 - %49 = getelementptr inbounds i32, ptr %11, i64 %48 - %50 = load i32, ptr %49, align 4, !tbaa !36 - %51 = sext i32 %50 to i64 +49: ; preds = %35 + %50 = sext i32 %33 to i64 + %51 = getelementptr inbounds i32, ptr %11, i64 %50 + %52 = load i32, ptr %51, align 4, !tbaa !36 + %53 = sext i32 %52 to i64 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) store ptr %36, ptr %4, align 8 - store i64 %37, ptr %28, align 8 - %.0.i61 = select i1 %38, ptr %4, ptr %36 - %52 = lshr i64 %51, 3 - %53 = getelementptr inbounds nuw i8, ptr %.0.i61, i64 %52 - %54 = load i8, ptr %53, align 1, !tbaa !56 - %55 = zext i8 %54 to i32 - %56 = and i32 %50, 7 - %57 = shl nuw nsw i32 1, %56 - %58 = and i32 %57, %55 - %.not86 = icmp eq i32 %58, 0 + store i64 %37, ptr %30, align 8 + %.0.i61 = select i1 %40, ptr %4, ptr %36 + %54 = lshr i64 %53, 3 + %55 = getelementptr inbounds nuw i8, ptr %.0.i61, i64 %54 + %56 = load i8, ptr %55, align 1, !tbaa !56 + %57 = zext i8 %56 to i32 + %58 = and i32 %52, 7 + %59 = shl nuw nsw i32 1, %58 + %60 = and i32 %59, %57 + %.not86 = icmp eq i32 %60, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) - br i1 %.not86, label %bitarray_set.exit, label %153 - -bitarray_set.exit: ; preds = %47 - %spec.select = select i1 %38, ptr %6, ptr %36 - %59 = trunc i32 %50 to i8 - %60 = and i8 %59, 7 - %61 = shl nuw i8 1, %60 - %62 = getelementptr inbounds nuw i8, ptr %spec.select, i64 %52 - %63 = load i8, ptr %62, align 1, !tbaa !56 - %64 = or i8 %63, %61 - store i8 %64, ptr %62, align 1, !tbaa !56 - %65 = getelementptr inbounds i32, ptr %9, i64 %51 + br i1 %.not86, label %bitarray_set.exit, label %155 + +bitarray_set.exit: ; preds = %49 + %spec.select = select i1 %40, ptr %6, ptr %36 + %61 = trunc i32 %52 to i8 + %62 = and i8 %61, 7 + %63 = shl nuw i8 1, %62 + %64 = getelementptr inbounds nuw i8, ptr %spec.select, i64 %54 + %65 = load i8, ptr %64, align 1, !tbaa !56 + %66 = or i8 %65, %63 + store i8 %66, ptr %64, align 1, !tbaa !56 + %67 = getelementptr inbounds i32, ptr %9, i64 %53 %66 = load i32, ptr %65, align 4, !tbaa !36 %67 = getelementptr i8, ptr %65, i64 4 %68 = load i32, ptr %67, align 4, !tbaa !36 @@ -949,175 +949,175 @@ bitarray_set.exit: ; preds = %47 br i1 %69, label %.lr.ph.preheader, label %._crit_edge106 .lr.ph.preheader: ; preds = %bitarray_set.exit - %70 = sext i32 %66 to i64 + %72 = sext i32 %66 to i64 br label %.lr.ph -.lr.ph: ; preds = %.lr.ph.preheader, %123 - %71 = phi i32 [ %68, %.lr.ph.preheader ], [ %124, %123 ] - %indvars.iv = phi i64 [ %70, %.lr.ph.preheader ], [ %indvars.iv.next, %123 ] +.lr.ph: ; preds = %.lr.ph.preheader, %125 + %73 = phi i32 [ %68, %.lr.ph.preheader ], [ %126, %123 ] + %indvars.iv = phi i64 [ %72, %.lr.ph.preheader ], [ %indvars.iv.next, %123 ] %.05697 = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %.1, %123 ] %.sroa.21.295 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.21.3, %123 ] %.sroa.14.294 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.14.3, %123 ] %.sroa.9.293 = phi i64 [ 0, %.lr.ph.preheader ], [ %.sroa.9.3, %123 ] %.sroa.0.292 = phi ptr [ null, %.lr.ph.preheader ], [ %.sroa.0.3, %123 ] - %72 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv - %73 = load i32, ptr %72, align 4, !tbaa !36 - %74 = sext i32 %73 to i64 - %75 = getelementptr i32, ptr %9, i64 %74 - %76 = getelementptr i8, ptr %75, i64 4 - %77 = load i32, ptr %76, align 4, !tbaa !36 - %78 = load i32, ptr %75, align 4, !tbaa !36 - %79 = sub nsw i32 %77, %78 - %80 = icmp eq i32 %79, 1 - br i1 %80, label %bitarray_set.exit64, label %123 + %74 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv + %75 = load i32, ptr %74, align 4, !tbaa !36 + %76 = sext i32 %75 to i64 + %77 = getelementptr i32, ptr %9, i64 %76 + %78 = getelementptr i8, ptr %77, i64 4 + %79 = load i32, ptr %78, align 4, !tbaa !36 + %80 = load i32, ptr %77, align 4, !tbaa !36 + %81 = sub nsw i32 %79, %80 + %82 = icmp eq i32 %81, 1 + br i1 %82, label %bitarray_set.exit64, label %125 bitarray_set.exit64: ; preds = %.lr.ph - %81 = load i64, ptr %25, align 8, !tbaa !59 - %82 = icmp ult i64 %81, 65 - %83 = load ptr, ptr %6, align 8 - %spec.select84 = select i1 %82, ptr %6, ptr %83 - %84 = trunc i32 %73 to i8 - %85 = and i8 %84, 7 - %86 = shl nuw i8 1, %85 - %87 = lshr i64 %74, 3 - %88 = getelementptr inbounds nuw i8, ptr %spec.select84, i64 %87 - %89 = load i8, ptr %88, align 1, !tbaa !56 - %90 = or i8 %89, %86 - store i8 %90, ptr %88, align 1, !tbaa !56 - %91 = load i32, ptr %72, align 4, !tbaa !36 - %92 = tail call double @distance(ptr noundef %2, i32 noundef %0, i32 noundef %50, i32 noundef %91) #25 - %93 = fadd double %.05697, %92 - %94 = load i32, ptr %72, align 4, !tbaa !36 - %95 = icmp eq i64 %.sroa.14.294, %.sroa.21.295 - br i1 %95, label %96, label %ints_append.exit - -96: ; preds = %bitarray_set.exit64 - %97 = icmp eq i64 %.sroa.21.295, 0 - %98 = shl i64 %.sroa.21.295, 1 - %spec.select.i.i = select i1 %97, i64 1, i64 %98 + %83 = load i64, ptr %27, align 8, !tbaa !59 + %84 = icmp ult i64 %83, 65 + %85 = load ptr, ptr %6, align 8 + %spec.select84 = select i1 %84, ptr %6, ptr %85 + %86 = trunc i32 %75 to i8 + %87 = and i8 %86, 7 + %88 = shl nuw i8 1, %87 + %89 = lshr i64 %76, 3 + %90 = getelementptr inbounds nuw i8, ptr %spec.select84, i64 %89 + %91 = load i8, ptr %90, align 1, !tbaa !56 + %92 = or i8 %91, %88 + store i8 %92, ptr %90, align 1, !tbaa !56 + %93 = load i32, ptr %74, align 4, !tbaa !36 + %94 = tail call double @distance(ptr noundef %2, i32 noundef %0, i32 noundef %52, i32 noundef %93) #25 + %95 = fadd double %.05697, %94 + %96 = load i32, ptr %74, align 4, !tbaa !36 + %97 = icmp eq i64 %.sroa.14.294, %.sroa.21.295 + br i1 %97, label %98, label %ints_append.exit + +98: ; preds = %bitarray_set.exit64 + %99 = icmp eq i64 %.sroa.21.295, 0 + %100 = shl i64 %.sroa.21.295, 1 + %spec.select.i.i = select i1 %99, i64 1, i64 %100 %mul.ov.i.i = icmp ugt i64 %spec.select.i.i, 4611686018427387903 - br i1 %mul.ov.i.i, label %115, label %99 - -99: ; preds = %96 - %100 = shl nuw i64 %spec.select.i.i, 2 - %101 = tail call ptr @realloc(ptr noundef %.sroa.0.292, i64 noundef %100) #27 - %102 = icmp eq ptr %101, null - br i1 %102, label %115, label %103 - -103: ; preds = %99 - %104 = getelementptr inbounds nuw i32, ptr %101, i64 %.sroa.21.295 - %105 = sub i64 %spec.select.i.i, %.sroa.21.295 - %106 = shl i64 %105, 2 - tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %104, i8 0, i64 %106, i1 false) - %107 = add i64 %.sroa.21.295, %.sroa.9.293 - %108 = icmp ugt i64 %107, %.sroa.21.295 - br i1 %108, label %109, label %ints_append.exit - -109: ; preds = %103 - %110 = sub i64 %.sroa.21.295, %.sroa.9.293 - %111 = sub i64 %spec.select.i.i, %110 - %112 = getelementptr inbounds nuw i32, ptr %101, i64 %111 - %113 = getelementptr inbounds nuw i32, ptr %101, i64 %.sroa.9.293 - %114 = shl i64 %110, 2 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %112, ptr nonnull align 4 %113, i64 %114, i1 false) + br i1 %mul.ov.i.i, label %117, label %101 + +101: ; preds = %98 + %102 = shl nuw i64 %spec.select.i.i, 2 + %103 = tail call ptr @realloc(ptr noundef %.sroa.0.292, i64 noundef %102) #27 + %104 = icmp eq ptr %103, null + br i1 %104, label %117, label %105 + +105: ; preds = %101 + %106 = getelementptr inbounds nuw i32, ptr %103, i64 %.sroa.21.295 + %107 = sub i64 %spec.select.i.i, %.sroa.21.295 + %108 = shl i64 %107, 2 + tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %106, i8 0, i64 %108, i1 false) + %109 = add i64 %.sroa.21.295, %.sroa.9.293 + %110 = icmp ugt i64 %109, %.sroa.21.295 + br i1 %110, label %111, label %ints_append.exit + +111: ; preds = %105 + %112 = sub i64 %.sroa.21.295, %.sroa.9.293 + %113 = sub i64 %spec.select.i.i, %112 + %114 = getelementptr inbounds nuw i32, ptr %103, i64 %113 + %115 = getelementptr inbounds nuw i32, ptr %103, i64 %.sroa.9.293 + %116 = shl i64 %112, 2 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %114, ptr nonnull align 4 %115, i64 %116, i1 false) br label %ints_append.exit -115: ; preds = %99, %96 +117: ; preds = %101, %98 %.2.i.ph.i = phi i32 [ 34, %96 ], [ 12, %99 ] - %116 = load ptr, ptr @stderr, align 8, !tbaa !3 - %117 = tail call ptr @strerror(i32 noundef %.2.i.ph.i) #25 - %118 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %116, ptr noundef nonnull @.str.27, ptr noundef %117) #23 + %118 = load ptr, ptr @stderr, align 8, !tbaa !3 + %119 = tail call ptr @strerror(i32 noundef %.2.i.ph.i) #25 + %120 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %118, ptr noundef nonnull @.str.27, ptr noundef %119) #23 tail call fastcc void @graphviz_exit() #24 unreachable -ints_append.exit: ; preds = %103, %109, %bitarray_set.exit64 - %.sroa.0.4 = phi ptr [ %.sroa.0.292, %bitarray_set.exit64 ], [ %101, %109 ], [ %101, %103 ] - %.sroa.9.5 = phi i64 [ %.sroa.9.293, %bitarray_set.exit64 ], [ %111, %109 ], [ %.sroa.9.293, %103 ] +ints_append.exit: ; preds = %105, %111, %bitarray_set.exit64 + %.sroa.0.4 = phi ptr [ %.sroa.0.292, %bitarray_set.exit64 ], [ %103, %109 ], [ %103, %103 ] + %.sroa.9.5 = phi i64 [ %.sroa.9.293, %bitarray_set.exit64 ], [ %113, %109 ], [ %.sroa.9.293, %103 ] %.sroa.21.4 = phi i64 [ %.sroa.21.295, %bitarray_set.exit64 ], [ %spec.select.i.i, %109 ], [ %spec.select.i.i, %103 ] - %119 = add i64 %.sroa.9.5, %.sroa.14.294 - %120 = urem i64 %119, %.sroa.21.4 - %121 = getelementptr inbounds nuw i32, ptr %.sroa.0.4, i64 %120 - store i32 %94, ptr %121, align 4, !tbaa !36 - %122 = add i64 %.sroa.14.294, 1 + %121 = add i64 %.sroa.9.5, %.sroa.14.294 + %122 = urem i64 %121, %.sroa.21.4 + %123 = getelementptr inbounds nuw i32, ptr %.sroa.0.4, i64 %122 + store i32 %96, ptr %123, align 4, !tbaa !36 + %124 = add i64 %.sroa.14.294, 1 %.pre = load i32, ptr %67, align 4, !tbaa !36 - br label %123 + br label %125 -123: ; preds = %.lr.ph, %ints_append.exit - %124 = phi i32 [ %.pre, %ints_append.exit ], [ %71, %.lr.ph ] +125: ; preds = %.lr.ph, %ints_append.exit + %126 = phi i32 [ %.pre, %ints_append.exit ], [ %73, %.lr.ph ] %.sroa.0.3 = phi ptr [ %.sroa.0.4, %ints_append.exit ], [ %.sroa.0.292, %.lr.ph ] %.sroa.9.3 = phi i64 [ %.sroa.9.5, %ints_append.exit ], [ %.sroa.9.293, %.lr.ph ] - %.sroa.14.3 = phi i64 [ %122, %ints_append.exit ], [ %.sroa.14.294, %.lr.ph ] + %.sroa.14.3 = phi i64 [ %124, %ints_append.exit ], [ %.sroa.14.294, %.lr.ph ] %.sroa.21.3 = phi i64 [ %.sroa.21.4, %ints_append.exit ], [ %.sroa.21.295, %.lr.ph ] - %.1 = phi double [ %93, %ints_append.exit ], [ %.05697, %.lr.ph ] + %.1 = phi double [ %95, %ints_append.exit ], [ %.05697, %.lr.ph ] %indvars.iv.next = add nsw i64 %indvars.iv, 1 - %125 = sext i32 %124 to i64 - %126 = icmp slt i64 %indvars.iv.next, %125 - br i1 %126, label %.lr.ph, label %._crit_edge, !llvm.loop !61 - -._crit_edge: ; preds = %123 - %127 = uitofp i64 %.sroa.14.3 to double - %128 = fdiv double %.1, %127 - %129 = icmp ugt i64 %.sroa.14.3, 1 - %130 = fdiv double 0x4018552E8777604C, %127 - %131 = select i1 %129, double %130, double 0.000000e+00 + %127 = sext i32 %126 to i64 + %128 = icmp slt i64 %indvars.iv.next, %127 + br i1 %128, label %.lr.ph, label %._crit_edge, !llvm.loop !61 + +._crit_edge: ; preds = %125 + %129 = uitofp i64 %.sroa.14.3 to double + %130 = fdiv double %.1, %129 + %131 = icmp ugt i64 %.sroa.14.3, 1 + %132 = fdiv double 0x4018552E8777604C, %129 + %133 = select i1 %131, double %132, double 0.000000e+00 %.not110 = icmp eq i64 %.sroa.14.3, 0 br i1 %.not110, label %._crit_edge106, label %.lr.ph105 .lr.ph105: ; preds = %._crit_edge - %132 = mul nsw i32 %50, %0 - %133 = sext i32 %132 to i64 - %134 = getelementptr inbounds double, ptr %2, i64 %133 - %135 = getelementptr i8, ptr %134, i64 8 - br label %136 + %134 = mul nsw i32 %52, %0 + %135 = sext i32 %134 to i64 + %136 = getelementptr inbounds double, ptr %2, i64 %135 + %137 = getelementptr i8, ptr %136, i64 8 + br label %138 -._crit_edge106: ; preds = %136, %bitarray_set.exit, %._crit_edge +._crit_edge106: ; preds = %138, %bitarray_set.exit, %._crit_edge %.sroa.0.2.lcssa123132 = phi ptr [ %.sroa.0.3, %._crit_edge ], [ null, %bitarray_set.exit ], [ %.sroa.0.3, %136 ] tail call void @free(ptr noundef %.sroa.0.2.lcssa123132) #25 - br label %153 - -136: ; preds = %.lr.ph105, %136 - %.0103 = phi i64 [ 0, %.lr.ph105 ], [ %152, %136 ] - %.054102 = phi double [ 1.000000e-01, %.lr.ph105 ], [ %151, %136 ] - %137 = add i64 %.0103, %.sroa.9.3 - %138 = urem i64 %137, %.sroa.21.3 - %139 = getelementptr inbounds nuw i32, ptr %.sroa.0.3, i64 %138 - %140 = load i32, ptr %139, align 4, !tbaa !36 - %141 = tail call double @cos(double noundef %.054102) #25, !tbaa !36 - %142 = load double, ptr %134, align 8, !tbaa !39 - %143 = tail call double @llvm.fmuladd.f64(double %141, double %128, double %142) - %144 = mul nsw i32 %140, %0 - %145 = sext i32 %144 to i64 - %146 = getelementptr inbounds double, ptr %2, i64 %145 - store double %143, ptr %146, align 8, !tbaa !39 - %147 = tail call double @sin(double noundef %.054102) #25, !tbaa !36 - %148 = load double, ptr %135, align 8, !tbaa !39 - %149 = tail call double @llvm.fmuladd.f64(double %147, double %128, double %148) - %150 = getelementptr i8, ptr %146, i64 8 - store double %149, ptr %150, align 8, !tbaa !39 - %151 = fadd double %131, %.054102 - %152 = add nuw i64 %.0103, 1 - %exitcond.not = icmp eq i64 %152, %.sroa.14.3 - br i1 %exitcond.not, label %._crit_edge106, label %136, !llvm.loop !62 - -153: ; preds = %47, %._crit_edge106, %35, %29 + br label %155 + +138: ; preds = %.lr.ph105, %138 + %.0103 = phi i64 [ 0, %.lr.ph105 ], [ %154, %136 ] + %.054102 = phi double [ 1.000000e-01, %.lr.ph105 ], [ %153, %136 ] + %139 = add i64 %.0103, %.sroa.9.3 + %140 = urem i64 %139, %.sroa.21.3 + %141 = getelementptr inbounds nuw i32, ptr %.sroa.0.3, i64 %140 + %142 = load i32, ptr %141, align 4, !tbaa !36 + %143 = tail call double @cos(double noundef %.054102) #25, !tbaa !36 + %144 = load double, ptr %136, align 8, !tbaa !39 + %145 = tail call double @llvm.fmuladd.f64(double %143, double %130, double %144) + %146 = mul nsw i32 %142, %0 + %147 = sext i32 %146 to i64 + %148 = getelementptr inbounds double, ptr %2, i64 %147 + store double %145, ptr %148, align 8, !tbaa !39 + %149 = tail call double @sin(double noundef %.054102) #25, !tbaa !36 + %150 = load double, ptr %137, align 8, !tbaa !39 + %151 = tail call double @llvm.fmuladd.f64(double %149, double %130, double %150) + %152 = getelementptr i8, ptr %148, i64 8 + store double %151, ptr %152, align 8, !tbaa !39 + %153 = fadd double %133, %.054102 + %154 = add nuw i64 %.0103, 1 + %exitcond.not = icmp eq i64 %154, %.sroa.14.3 + br i1 %exitcond.not, label %._crit_edge106, label %138, !llvm.loop !62 + +155: ; preds = %49, %._crit_edge106, %35, %31 %exitcond115.not = icmp eq i64 %indvars.iv.next113, %wide.trip.count - br i1 %exitcond115.not, label %._crit_edge109.loopexit, label %29, !llvm.loop !63 + br i1 %exitcond115.not, label %._crit_edge109.loopexit, label %31, !llvm.loop !63 -._crit_edge109.loopexit: ; preds = %153 - %.pre116 = load i64, ptr %25, align 8, !tbaa !59 +._crit_edge109.loopexit: ; preds = %155 + %.pre116 = load i64, ptr %27, align 8, !tbaa !59 br label %._crit_edge109 ._crit_edge109: ; preds = %._crit_edge109.loopexit, %bitarray_new.exit - %154 = phi i64 [ %.pre116, %._crit_edge109.loopexit ], [ %12, %bitarray_new.exit ] - %155 = icmp ugt i64 %154, 64 - br i1 %155, label %156, label %bitarray_reset.exit + %156 = phi i64 [ %.pre116, %._crit_edge109.loopexit ], [ %12, %bitarray_new.exit ] + %157 = icmp ugt i64 %156, 64 + br i1 %157, label %158, label %bitarray_reset.exit -156: ; preds = %._crit_edge109 - %157 = load ptr, ptr %6, align 8, !tbaa !56 - tail call void @free(ptr noundef %157) #25 +158: ; preds = %._crit_edge109 + %159 = load ptr, ptr %6, align 8, !tbaa !56 + tail call void @free(ptr noundef %159) #25 br label %bitarray_reset.exit -bitarray_reset.exit: ; preds = %._crit_edge109, %156 +bitarray_reset.exit: ; preds = %._crit_edge109, %158 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #25 ret void } diff --git a/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll b/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll index 7d779c26f60..d4284fa9efe 100644 --- a/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll +++ b/bench/html5ever-rs/optimized/1mf2h4bh94yx6is.ll @@ -866,7 +866,7 @@ common.resume: ; preds = %153, %73 %.not.not4.i.i = icmp eq i64 %20, 0 br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread, label %.lr.ph.i.i8 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread: ; preds = %137 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread:; preds = %137 %138 = icmp ne ptr %.val18.i, null tail call void @llvm.assume(i1 %138) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !138 @@ -882,16 +882,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.threa tail call void @llvm.assume(i1 %142) br label %146 -._crit_edge.i.i9: ; preds = %146 +._crit_edge.i.i9:; preds = %146 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %20, i64 16) %spec.select29.i = tail call i64 @llvm.umin.i64(i64 %20, i64 16) %143 = getelementptr inbounds i8, ptr %.val18.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %143, ptr nonnull align 1 %.val18.i, i64 %spec.select29.i, i1 false), !noalias !138 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !138 - %144 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr @"_ZN4core3ptr72drop_in_place$LT$$LP$markup5ever..interface..QualName$C$$LP$$RP$$RP$$GT$17h65a7d17256c551fbE.llvm.15648212929638076209", ptr %144, align 8, !noalias !138 - %145 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 24, ptr %145, align 8, !noalias !138 + %151 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr @"_ZN4core3ptr72drop_in_place$LT$$LP$markup5ever..interface..QualName$C$$LP$$RP$$RP$$GT$17h65a7d17256c551fbE.llvm.15648212929638076209", ptr %151, align 8, !noalias !138 + %152 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 24, ptr %152, align 8, !noalias !138 store ptr %0, ptr %5, align 8, !noalias !138 br label %155 @@ -913,125 +913,125 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.threa %154 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbbfc958adfc9147fE"(ptr noalias noundef align 8 dereferenceable(24) %5) #24 - to label %common.resume unwind label %230 + to label %common.resume unwind label %229 -155: ; preds = %229, %._crit_edge.i.i9 +.lr.ph.i: ; preds = %229, %._crit_edge.i.i9 %.sroa.02.09.i = phi i64 [ 0, %._crit_edge.i.i9 ], [ %156, %229 ] - %156 = add nuw i64 %.sroa.02.09.i, 1 - %157 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %158 = getelementptr inbounds i8, ptr %157, i64 %.sroa.02.09.i - %159 = load i8, ptr %158, align 1, !noundef !7 - %.not.i10 = icmp eq i8 %159, -128 - br i1 %.not.i10, label %160, label %229 - -160: ; preds = %155 + %155 = add nuw i64 %.sroa.02.09.i, 1 + %156 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %157 = getelementptr inbounds i8, ptr %156, i64 %.sroa.02.09.i + %158 = load i8, ptr %157, align 1, !noundef !7 + %.not.i9 = icmp eq i8 %158, -128 + br i1 %.not.i9, label %159, label %228 + +159: ; preds = %.lr.ph.i %.neg.i = mul i64 %.sroa.02.09.i, -24 - %161 = getelementptr i8, ptr %157, i64 %.neg.i - %162 = getelementptr i8, ptr %161, i64 -24 - %163 = sub nsw i64 0, %.sroa.02.09.i + %160 = getelementptr i8, ptr %156, i64 %.neg.i + %161 = getelementptr i8, ptr %160, i64 -24 + %162 = sub nsw i64 0, %.sroa.02.09.i br label %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i _ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i: ; preds = %.preheader.i %.pre.i20 = load ptr, ptr %0, align 8, !alias.scope !147, !noalias !150 br label %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i -_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i, %160 - %164 = phi ptr [ %.pre.i20, %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i ], [ %157, %160 ] - %165 = getelementptr inbounds { { i64, i64, i64 }, {} }, ptr %164, i64 %163 - %166 = getelementptr inbounds i8, ptr %165, i64 -24 - %167 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h25a8e61dd0f73f6cE(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %166) +_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i, %159 + %163 = phi ptr [ %.pre.i20, %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i ], [ %156, %160 ] + %164 = getelementptr inbounds { { i64, i64, i64 }, {} }, ptr %163, i64 %162 + %165 = getelementptr inbounds i8, ptr %164, i64 -24 + %166 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h25a8e61dd0f73f6cE(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %165) to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" unwind label %153 "_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i": ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.i - %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %.val.i12 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 %.val17.i = load i64, ptr %17, align 8, !alias.scope !138, !noundef !7 - %.sroa.0.05.i.i14 = and i64 %.val17.i, %167 - %168 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.05.i.i14 - %.0.copyload.i46.i.i15 = load <16 x i8>, ptr %168, align 1, !noalias !152 - %169 = icmp slt <16 x i8> %.0.copyload.i46.i.i15, zeroinitializer - %170 = bitcast <16 x i1> %169 to i16 - %.not.not.i.not7.i.i16 = icmp eq i16 %170, 0 - br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i21.i, label %._crit_edge.i20.i - -.lr.ph.i21.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i", %.lr.ph.i21.i - %.sroa.0.09.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i21.i ], [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] - %.sroa.7.08.i.i23 = phi i64 [ %171, %.lr.ph.i21.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] - %171 = add i64 %.sroa.7.08.i.i23, 16 - %172 = add i64 %171, %.sroa.0.09.i.i22 - %.sroa.0.0.i.i24 = and i64 %172, %.val17.i - %173 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i.i24 - %.0.copyload.i4.i.i25 = load <16 x i8>, ptr %173, align 1, !noalias !152 - %174 = icmp slt <16 x i8> %.0.copyload.i4.i.i25, zeroinitializer - %175 = bitcast <16 x i1> %174 to i16 - %.not.not.i.not.i.i26 = icmp eq i16 %175, 0 - br i1 %.not.not.i.not.i.i26, label %.lr.ph.i21.i, label %._crit_edge.i20.i - -._crit_edge.i20.i: ; preds = %.lr.ph.i21.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" - %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %.sroa.0.0.i.i24, %.lr.ph.i21.i ] - %.lcssa.i.i18 = phi i16 [ %170, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %175, %.lr.ph.i21.i ] - %176 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) - %177 = zext nneg i16 %176 to i64 - %178 = add i64 %.sroa.0.0.lcssa.i.i17, %177 - %179 = and i64 %178, %.val17.i - %180 = getelementptr inbounds i8, ptr %.val.i13, i64 %179 - %181 = load i8, ptr %180, align 1, !noundef !7 - %182 = icmp sgt i8 %181, -1 - br i1 %182, label %183, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i - -183: ; preds = %._crit_edge.i20.i - %184 = load <16 x i8>, ptr %.val.i13, align 16, !noalias !155 - %185 = icmp slt <16 x i8> %184, zeroinitializer - %186 = bitcast <16 x i1> %185 to i16 - %.not.i.i.i21 = icmp ne i16 %186, 0 - %187 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %186, i1 true) - %188 = zext nneg i16 %187 to i64 + %.sroa.0.05.i.i13 = and i64 %.val17.i, %166 + %167 = getelementptr inbounds i8, ptr %.val.i12, i64 %.sroa.0.05.i.i13 + %.0.copyload.i46.i.i14 = load <16 x i8>, ptr %167, align 1, !noalias !152 + %168 = icmp slt <16 x i8> %.0.copyload.i46.i.i14, zeroinitializer + %169 = bitcast <16 x i1> %168 to i16 + %.not.not.i.not7.i.i15 = icmp eq i16 %169, 0 + br i1 %.not.not.i.not7.i.i15, label %.lr.ph.i20.i, label %._crit_edge.i.i16 + +.lr.ph.i20.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i", %.lr.ph.i20.i + %.sroa.0.09.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i21.i ], [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] + %.sroa.7.08.i.i23 = phi i64 [ %170, %.lr.ph.i21.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ] + %170 = add i64 %.sroa.7.08.i.i23, 16 + %171 = add i64 %170, %.sroa.0.09.i.i22 + %.sroa.0.0.i.i24 = and i64 %171, %.val17.i + %172 = getelementptr inbounds i8, ptr %.val.i12, i64 %.sroa.0.0.i.i24 + %.0.copyload.i4.i.i25 = load <16 x i8>, ptr %172, align 1, !noalias !152 + %173 = icmp slt <16 x i8> %.0.copyload.i4.i.i25, zeroinitializer + %174 = bitcast <16 x i1> %173 to i16 + %.not.not.i.not.i.i26 = icmp eq i16 %174, 0 + br i1 %.not.not.i.not.i.i26, label %.lr.ph.i20.i, label %._crit_edge.i.i16 + +._crit_edge.i.i16: ; preds = %.lr.ph.i20.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" + %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %.sroa.0.0.i.i24, %.lr.ph.i21.i ] + %.lcssa.i.i18 = phi i16 [ %169, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h4b9498579da9eea6E.exit.i" ], [ %174, %.lr.ph.i21.i ] + %175 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) + %176 = zext nneg i16 %175 to i64 + %177 = add i64 %.sroa.0.0.lcssa.i.i17, %176 + %178 = and i64 %177, %.val17.i + %179 = getelementptr inbounds i8, ptr %.val.i12, i64 %178 + %180 = load i8, ptr %179, align 1, !noundef !7 + %181 = icmp sgt i8 %180, -1 + br i1 %181, label %182, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i + +182: ; preds = %._crit_edge.i.i16 + %183 = load <16 x i8>, ptr %.val.i12, align 16, !noalias !155 + %184 = icmp slt <16 x i8> %183, zeroinitializer + %185 = bitcast <16 x i1> %184 to i16 + %.not.i.i.i21 = icmp ne i16 %185, 0 + %186 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %185, i1 true) + %187 = zext nneg i16 %186 to i64 tail call void @llvm.assume(i1 %.not.i.i.i21) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i: ; preds = %183, %._crit_edge.i20.i - %.0.i.i.i19 = phi i64 [ %188, %183 ], [ %179, %._crit_edge.i20.i ] - %189 = sub i64 %.sroa.02.09.i, %.sroa.0.05.i.i14 - %190 = sub i64 %.0.i.i.i19, %.sroa.0.05.i.i14 - %191 = xor i64 %190, %189 - %.unshifted.i = and i64 %191, %.val17.i - %192 = icmp ult i64 %.unshifted.i, 16 - br i1 %192, label %206, label %193 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i: ; preds = %182, %._crit_edge.i.i16 + %.0.i.i.i19 = phi i64 [ %187, %183 ], [ %178, %._crit_edge.i20.i ] + %188 = sub i64 %.sroa.02.09.i, %.sroa.0.05.i.i13 + %189 = sub i64 %.0.i.i.i19, %.sroa.0.05.i.i13 + %190 = xor i64 %189, %188 + %.unshifted.i = and i64 %190, %.val17.i + %191 = icmp ult i64 %.unshifted.i, 16 + br i1 %191, label %205, label %192 -193: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i +192: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i %.neg16.i = mul i64 %.0.i.i.i19, -24 - %194 = getelementptr i8, ptr %.val.i13, i64 %.neg16.i - %195 = getelementptr i8, ptr %194, i64 -24 - %196 = getelementptr inbounds i8, ptr %.val.i13, i64 %.0.i.i.i19 - %197 = load i8, ptr %196, align 1, !noundef !7 - %198 = lshr i64 %167, 57 - %199 = trunc nuw nsw i64 %198 to i8 - %200 = add i64 %.0.i.i.i19, -16 - %201 = and i64 %200, %.val17.i - store i8 %199, ptr %196, align 1 - %202 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %203 = getelementptr i8, ptr %202, i64 %201 - %204 = getelementptr i8, ptr %203, i64 16 - store i8 %199, ptr %204, align 1 - %205 = icmp eq i8 %197, -1 - br i1 %205, label %220, label %.preheader.i - -206: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i - %207 = lshr i64 %167, 57 - %208 = trunc nuw nsw i64 %207 to i8 - %209 = add i64 %.sroa.02.09.i, -16 - %210 = and i64 %.val17.i, %209 - %211 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.02.09.i - store i8 %208, ptr %211, align 1 - %212 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %213 = getelementptr i8, ptr %212, i64 %210 - %214 = getelementptr i8, ptr %213, i64 16 - store i8 %208, ptr %214, align 1 - br label %229 - -.preheader.i: ; preds = %193, %.preheader.i + %193 = getelementptr i8, ptr %.val.i12, i64 %.neg16.i + %194 = getelementptr i8, ptr %193, i64 -24 + %195 = getelementptr inbounds i8, ptr %.val.i12, i64 %.0.i.i.i19 + %196 = load i8, ptr %195, align 1, !noundef !7 + %197 = lshr i64 %166, 57 + %198 = trunc nuw nsw i64 %197 to i8 + %199 = add i64 %.0.i.i.i19, -16 + %200 = and i64 %199, %.val17.i + store i8 %198, ptr %195, align 1 + %201 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %202 = getelementptr i8, ptr %201, i64 %200 + %203 = getelementptr i8, ptr %202, i64 16 + store i8 %198, ptr %203, align 1 + %204 = icmp eq i8 %196, -1 + br i1 %204, label %219, label %.preheader.i + +205: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i + %206 = lshr i64 %166, 57 + %207 = trunc nuw nsw i64 %206 to i8 + %208 = add i64 %.sroa.02.09.i, -16 + %209 = and i64 %.val17.i, %208 + %210 = getelementptr inbounds i8, ptr %.val.i12, i64 %.sroa.02.09.i + store i8 %207, ptr %210, align 1 + %211 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %212 = getelementptr i8, ptr %211, i64 %209 + %213 = getelementptr i8, ptr %212, i64 16 + store i8 %207, ptr %213, align 1 + br label %228 + +.preheader.i: ; preds = %192, %.preheader.i %.0910.i.i = phi i64 [ %219, %.preheader.i ], [ 0, %193 ] - %215 = getelementptr inbounds nuw i8, ptr %162, i64 %.0910.i.i - %216 = getelementptr inbounds nuw i8, ptr %195, i64 %.0910.i.i + %214 = getelementptr inbounds nuw i8, ptr %161, i64 %.0910.i.i + %215 = getelementptr inbounds nuw i8, ptr %194, i64 %.0910.i.i %217 = load i8, ptr %215, align 1 %218 = load i8, ptr %216, align 1 store i8 %218, ptr %215, align 1 @@ -1040,59 +1040,59 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit.i: ; %exitcond.not.i.i = icmp eq i64 %219, 24 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping17h2c06dedf466b3d6eE.exit.loopexit.i, label %.preheader.i -220: ; preds = %193 - %221 = add i64 %.sroa.02.09.i, -16 - %222 = load i64, ptr %17, align 8, !alias.scope !138, !noundef !7 - %223 = and i64 %222, %221 - %224 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %225 = getelementptr inbounds i8, ptr %224, i64 %.sroa.02.09.i - store i8 -1, ptr %225, align 1 - %226 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 - %227 = getelementptr i8, ptr %226, i64 %223 - %228 = getelementptr i8, ptr %227, i64 16 - store i8 -1, ptr %228, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %195, ptr noundef nonnull align 1 dereferenceable(24) %162, i64 24, i1 false) - br label %229 - -229: ; preds = %220, %206, %155 +219: ; preds = %192 + %220 = add i64 %.sroa.02.09.i, -16 + %221 = load i64, ptr %17, align 8, !alias.scope !138, !noundef !7 + %222 = and i64 %221, %220 + %223 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %224 = getelementptr inbounds i8, ptr %223, i64 %.sroa.02.09.i + store i8 -1, ptr %224, align 1 + %225 = load ptr, ptr %0, align 8, !alias.scope !138, !nonnull !7, !noundef !7 + %226 = getelementptr i8, ptr %225, i64 %222 + %227 = getelementptr i8, ptr %226, i64 16 + store i8 -1, ptr %227, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %194, ptr noundef nonnull align 1 dereferenceable(24) %161, i64 24, i1 false) + br label %228 + +228: ; preds = %219, %205, %.lr.ph.i %exitcond.not.i = icmp eq i64 %.sroa.02.09.i, %18 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, label %155 + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, label %.lr.ph.i -230: ; preds = %153 - %231 = landingpad { ptr, i32 } +229: ; preds = %153 + %230 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #25 unreachable -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit: ; preds = %229 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit: ; preds = %228 %.pre16.i = load i64, ptr %17, align 8, !alias.scope !138 %.pre16.i.fr = freeze i64 %.pre16.i %.pre17.i = add i64 %.pre16.i.fr, 1 - %232 = lshr i64 %.pre17.i, 3 - %233 = mul nuw i64 %232, 7 - %234 = icmp ult i64 %.pre16.i.fr, 8 - %spec.select = select i1 %234, i64 %.pre16.i.fr, i64 %233 + %231 = lshr i64 %.pre17.i, 3 + %232 = mul nuw i64 %231, 7 + %233 = icmp ult i64 %.pre16.i.fr, 8 + %spec.select = select i1 %233, i64 %.pre16.i.fr, i64 %232 %.pre = load i64, ptr %9, align 8, !alias.scope !138 - br label %235 - -235: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread - %236 = phi i64 [ %10, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] - %237 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] - %238 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %239 = sub i64 %237, %236 - store i64 %239, ptr %238, align 8, !alias.scope !138 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread + %234 = phi i64 [ %10, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] + %235 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit ] + %236 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %237 = sub i64 %235, %234 + store i64 %237, ptr %236, align 8, !alias.scope !138 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5), !noalias !138 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit", %235 +_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h5e1937b492ec0710E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %235 ], [ %.sroa.9.049.ph, %72 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit" ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %235 ], [ %.sroa.5.051.ph, %72 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17he437ab504fde7372E.exit" ] - %240 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %241 = insertvalue { i64, i64 } %240, i64 %.sroa.4.1.i, 1 + %238 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %239 = insertvalue { i64, i64 } %238, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h852a4cd86cdebbbeE.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h852a4cd86cdebbbeE.exit: ; preds = %14, %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i - %.merged.i = phi { i64, i64 } [ %15, %14 ], [ %241, %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i ] + %.merged.i = phi { i64, i64 } [ %15, %14 ], [ %239, %_ZN9hashbrown3raw13RawTableInner12resize_inner17hd6e42187924e8921E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/hyperscan/optimized/ng_mcclellan.ll b/bench/hyperscan/optimized/ng_mcclellan.ll index 920677335bf..6fccea9586c 100644 --- a/bench/hyperscan/optimized/ng_mcclellan.ll +++ b/bench/hyperscan/optimized/ng_mcclellan.ll @@ -1972,9 +1972,9 @@ _ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolder %.phi.trans.insert.i.i = getelementptr inbounds nuw i8, ptr %67, i64 8 %.pre.i.i = load i64, ptr %.phi.trans.insert.i.i, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #25 - %.not242.i.i = icmp eq i64 %.pre.i.i, 0 + %.not243.i.i = icmp eq i64 %.pre.i.i, 0 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %14, i8 0, i64 16, i1 false) - br i1 %.not242.i.i, label %_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE6resizeEmRKS8_.exit.i.i.i, label %76 + br i1 %.not243.i.i, label %_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE6resizeEmRKS8_.exit.i.i.i, label %76 76: ; preds = %_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE5clearEv.exit.i.i.i invoke void @_ZNSt6vectorIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESaIS8_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS8_SA_EEmRKS8_(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr null, i64 noundef %.pre.i.i, ptr noundef nonnull align 8 dereferenceable(16) %14) @@ -2208,12 +2208,12 @@ _ZN3ue2L12populateInitINS_8bitfieldILm256EEEEEvRKNS_8NGHolderERKNS_8flat_setINS_ br i1 %.not191.i.i, label %_ZNSt10_HashtableIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESt4pairIKS8_N5boost14dynamic_bitsetImSaImEEEESaISF_ENSt8__detail10_Select1stESt8equal_toIS8_ESt4hashIS8_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE5clearEv.exit.i.i.i.i, label %.lr.ph.i.i ._crit_edge.i.i: ; preds = %336 - %.pre239.i.i = load ptr, ptr %160, align 8 - %.not5.i.i.i.i.i.i = icmp eq ptr %.pre239.i.i, null + %.pre240.i.i = load ptr, ptr %160, align 8 + %.not5.i.i.i.i.i.i = icmp eq ptr %.pre240.i.i, null br i1 %.not5.i.i.i.i.i.i, label %_ZNSt10_HashtableIN3ue212graph_detail17vertex_descriptorINS0_9ue2_graphINS0_8NGHolderENS0_19NFAGraphVertexPropsENS0_17NFAGraphEdgePropsEEEEESt4pairIKS8_N5boost14dynamic_bitsetImSaImEEEESaISF_ENSt8__detail10_Select1stESt8equal_toIS8_ESt4hashIS8_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE5clearEv.exit.i.i.i.i, label %.lr.ph.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i: ; preds = %._crit_edge.i.i, %_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKN3ue212graph_detail17vertex_descriptorINS3_9ue2_graphINS3_8NGHolderENS3_19NFAGraphVertexPropsENS3_17NFAGraphEdgePropsEEEEEN5boost14dynamic_bitsetImSaImEEEELb1EEEEE18_M_deallocate_nodeEPSI_.exit.i.i.i.i.i.i - %.06.i.i.i.i.i.i = phi ptr [ %162, %_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKN3ue212graph_detail17vertex_descriptorINS3_9ue2_graphINS3_8NGHolderENS3_19NFAGraphVertexPropsENS3_17NFAGraphEdgePropsEEEEEN5boost14dynamic_bitsetImSaImEEEELb1EEEEE18_M_deallocate_nodeEPSI_.exit.i.i.i.i.i.i ], [ %.pre239.i.i, %._crit_edge.i.i ] + %.06.i.i.i.i.i.i = phi ptr [ %162, %_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKN3ue212graph_detail17vertex_descriptorINS3_9ue2_graphINS3_8NGHolderENS3_19NFAGraphVertexPropsENS3_17NFAGraphEdgePropsEEEEEN5boost14dynamic_bitsetImSaImEEEELb1EEEEE18_M_deallocate_nodeEPSI_.exit.i.i.i.i.i.i ], [ %.pre240.i.i, %._crit_edge.i.i ] %162 = load ptr, ptr %.06.i.i.i.i.i.i, align 8 %163 = getelementptr inbounds nuw i8, ptr %.06.i.i.i.i.i.i, i64 24 %164 = load ptr, ptr %163, align 8 @@ -2415,9 +2415,9 @@ _ZNK3ue29CharReach9find_nextEm.exit.i.i.i: ; preds = %220, %213 .lr.ph.i29.i.i: ; preds = %.noexc33.i.i %250 = getelementptr inbounds nuw i8, ptr %.sroa.0164.0192.i.i, i64 48 %251 = load i64, ptr %250, align 8, !noalias !201 - %.fr212.i.i = freeze i64 %251 - %252 = add i64 %.fr212.i.i, -1 - %253 = icmp eq i64 %.fr212.i.i, 0 + %.fr213.i.i = freeze i64 %251 + %252 = add i64 %.fr213.i.i, -1 + %253 = icmp eq i64 %.fr213.i.i, 0 %254 = getelementptr inbounds nuw i8, ptr %.sroa.0164.0192.i.i, i64 32 br i1 %253, label %.lr.ph.i29.split.us.i.i, label %.lr.ph.i29.split.i.i @@ -2440,8 +2440,8 @@ _ZNK3ue29CharReach9find_nextEm.exit.i.i.i: ; preds = %220, %213 %265 = load i64, ptr %264, align 8, !alias.scope !201 %266 = or i64 %262, %265 store i64 %266, ptr %264, align 8, !alias.scope !201 - %.not213.i.i = icmp ult i64 %.06.i.i.i, %252 - br i1 %.not213.i.i, label %267, label %_ZN3ue212_GLOBAL__N_112Graph_Traits11copy_statesERKN5boost14dynamic_bitsetImSaImEEEj.exit.i.i + %.not214.i.i = icmp ult i64 %.06.i.i.i, %252 + br i1 %.not214.i.i, label %267, label %_ZN3ue212_GLOBAL__N_112Graph_Traits11copy_statesERKN5boost14dynamic_bitsetImSaImEEEj.exit.i.i 267: ; preds = %.lr.ph.i29.split.i.i %268 = add nuw nsw i64 %.06.i.i.i, 1 @@ -2888,8 +2888,8 @@ _ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i138.i.i: ; preds = %select.un %427 = load i64, ptr %426, align 8, !alias.scope !209 %428 = or i64 %424, %427 store i64 %428, ptr %426, align 8, !alias.scope !209 - %.not214.i.i = icmp ult i64 %.06.i41.i.i, %416 - br i1 %.not214.i.i, label %429, label %.sink.split.i.i + %.not215.i.i = icmp ult i64 %.06.i41.i.i, %416 + br i1 %.not215.i.i, label %429, label %.sink.split.i.i 429: ; preds = %.lr.ph.i40.i.i %430 = add nuw nsw i64 %.06.i41.i.i, 1 diff --git a/bench/hyperscan/optimized/ng_misc_opt.ll b/bench/hyperscan/optimized/ng_misc_opt.ll index d3e32216298..7cf6b6ef01c 100644 --- a/bench/hyperscan/optimized/ng_misc_opt.ll +++ b/bench/hyperscan/optimized/ng_misc_opt.ll @@ -8826,9 +8826,9 @@ _ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceISt6vectorIhSaIhEESaIvELN9_ %34 = getelementptr inbounds nuw i8, ptr %0, i64 72 %.not.i = icmp eq i64 %33, 0 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %34, i8 0, i64 32, i1 false) - br i1 %.not.i, label %45, label %35 + br i1 %.not.i, label %45, label %40 -35: ; preds = %25 +40: ; preds = %25 %36 = lshr i64 %33, 6 %37 = and i64 %33, 63 %38 = icmp ne i64 %37, 0 @@ -8837,7 +8837,7 @@ _ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceISt6vectorIhSaIhEESaIvELN9_ invoke void @_ZNSt6vectorImSaImEE17_M_default_appendEm(ptr noundef nonnull align 8 dereferenceable(32) %34, i64 noundef %40) to label %45 unwind label %41 -41: ; preds = %35 +41: ; preds = %40 %42 = landingpad { ptr, i32 } cleanup %43 = load ptr, ptr %34, align 8 @@ -8848,7 +8848,7 @@ _ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceISt6vectorIhSaIhEESaIvELN9_ call void @_ZdlPv(ptr noundef nonnull %43) #26 br label %.body10 -45: ; preds = %35, %25 +45: ; preds = %40, %25 %46 = getelementptr inbounds nuw i8, ptr %0, i64 96 store i64 %33, ptr %46, align 8 ret void diff --git a/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll b/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll index f2aa4f6eac4..d3b9615a6ef 100644 --- a/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll +++ b/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll @@ -727,8 +727,8 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd44654158 store i64 128, ptr %9, align 8 %.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 8 store i64 %37, ptr %.sroa.4.0..sroa_idx, align 8 - %.sroa.527.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 16 - store ptr %.0.i, ptr %.sroa.527.0..sroa_idx, align 8 + %.sroa.528.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 16 + store ptr %.0.i, ptr %.sroa.528.0..sroa_idx, align 8 %.sroa.6.0..sroa_idx = getelementptr inbounds nuw i8, ptr %9, i64 24 %44 = getelementptr inbounds nuw i8, ptr %9, i64 32 %45 = getelementptr inbounds nuw i8, ptr %1, i64 72 @@ -737,22 +737,22 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd44654158 %47 = icmp eq ptr %46, null br i1 %47, label %._crit_edge.i, label %48 -"_ZN4core6option19Option$LT$$RF$T$GT$6cloned17h94d15cf511857d9aE.exit": ; preds = %"_ZN77_$LT$arrow_buffer..buffer..null..NullBuffer$u20$as$u20$core..clone..Clone$GT$5clone17h3e513d09b4d6aea3E.llvm.171605402441639591.exit.i", %17, %97 +"_ZN4core6option19Option$LT$$RF$T$GT$6cloned17h94d15cf511857d9aE.exit": ; preds = %"_ZN77_$LT$arrow_buffer..buffer..null..NullBuffer$u20$as$u20$core..clone..Clone$GT$5clone17h3e513d09b4d6aea3E.llvm.171605402441639591.exit.i", %17, %98 ret void 48: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd446541586E.llvm.12936710431969675094.exit invoke void @_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder13append_buffer17hbe88d65e20dd880fE(ptr noalias noundef nonnull align 8 dereferenceable(40) %9, ptr noalias noundef nonnull readonly align 8 dereferenceable(40) %45) to label %75 unwind label %49 -49: ; preds = %121, %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i, %58, %96, %48 +49: ; preds = %122, %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i, %58, %97, %48 %50 = landingpad { ptr, i32 } cleanup br label %.body -.body: ; preds = %90, %49 - %eh.lpad-body = phi { ptr, i32 } [ %50, %49 ], [ %91, %90 ] +.body: ; preds = %91, %49 + %eh.lpad-body = phi { ptr, i32 } [ %50, %49 ], [ %92, %90 ] invoke void @"_ZN86_$LT$arrow_buffer..buffer..mutable..MutableBuffer$u20$as$u20$core..ops..drop..Drop$GT$4drop17h88adb87742f498e4E"(ptr noalias noundef nonnull align 8 dereferenceable(40) %9) - to label %"_ZN4core3ptr73drop_in_place$LT$arrow_buffer..builder..boolean..BooleanBufferBuilder$GT$17h29fb1d42be871d16E.exit" unwind label %128 + to label %"_ZN4core3ptr73drop_in_place$LT$arrow_buffer..builder..boolean..BooleanBufferBuilder$GT$17h29fb1d42be871d16E.exit" unwind label %129 ._crit_edge.i: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd446541586E.llvm.12936710431969675094.exit %51 = lshr i64 %.val, 5 @@ -777,7 +777,7 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer13with_capacity17h599cdfd44654158 .noexc22: ; preds = %58 %.pre18.i = load i64, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !83 - %.pre = load ptr, ptr %.sroa.527.0..sroa_idx, align 8, !alias.scope !83 + %.pre = load ptr, ptr %.sroa.528.0..sroa_idx, align 8, !alias.scope !83 br label %_ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i _ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i: ; preds = %.noexc22, %56 @@ -787,12 +787,12 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm call void @llvm.memset.p0.i64(ptr nonnull align 1 %64, i8 -1, i64 %55, i1 false) br label %65 -65: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i, %._crit_edge.i +62: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm.12936710431969675094.exit.i, %._crit_edge.i store i64 %55, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !83 %66 = icmp eq i64 %52, 0 br i1 %66, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, label %67 -67: ; preds = %65 +.thread: ; preds = %65 %68 = trunc nuw nsw i64 %52 to i8 %notmask16.i = shl nsw i8 -1, %68 %69 = xor i8 %notmask16.i, -1 @@ -804,45 +804,45 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer7reserve17h7e5b055f3d43f39bE.llvm store i8 %74, ptr %72, align 1 br label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit -_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit: ; preds = %65, %67 +_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit: ; preds = %62, %67 store i64 %33, ptr %44, align 8, !alias.scope !83 - br label %75 - -75: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, %48 - %76 = getelementptr inbounds nuw i8, ptr %1, i64 56 - %77 = load ptr, ptr %76, align 8, !nonnull !4, !noundef !4 - %78 = getelementptr inbounds nuw i32, ptr %77, i64 %33 - %79 = icmp ult i64 %.val, 4 - br i1 %79, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %75 - %80 = getelementptr inbounds nuw i8, ptr %11, i64 32 - %81 = getelementptr inbounds nuw i8, ptr %11, i64 8 - %82 = getelementptr inbounds nuw i8, ptr %11, i64 24 - br label %98 - -._crit_edge: ; preds = %105, %75 + br label %76 + +76: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88995E.exit, %48 + %77 = getelementptr inbounds nuw i8, ptr %1, i64 56 + %78 = load ptr, ptr %77, align 8, !nonnull !4, !noundef !4 + %79 = getelementptr inbounds nuw i32, ptr %78, i64 %33 + %80 = icmp ult i64 %.val, 4 + br i1 %80, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %76 + %81 = getelementptr inbounds nuw i8, ptr %11, i64 32 + %82 = getelementptr inbounds nuw i8, ptr %11, i64 8 + %83 = getelementptr inbounds nuw i8, ptr %11, i64 24 + br label %99 + +._crit_edge: ; preds = %106, %76 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) call void @llvm.experimental.noalias.scope.decl(metadata !86) %.sroa.05.0.copyload.i = load i64, ptr %9, align 8, !alias.scope !86, !noalias !89 %.sroa.46.0.copyload.i = load i64, ptr %.sroa.4.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 - %.sroa.57.0.copyload.i = load ptr, ptr %.sroa.527.0..sroa_idx, align 8, !alias.scope !86, !noalias !89, !nonnull !4, !noundef !4 + %.sroa.57.0.copyload.i = load ptr, ptr %.sroa.528.0..sroa_idx, align 8, !alias.scope !86, !noalias !89, !nonnull !4, !noundef !4 %.sroa.68.0.copyload.i = load i64, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 store i64 128, ptr %9, align 8, !alias.scope !86, !noalias !89 store i64 0, ptr %.sroa.4.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 - store ptr inttoptr (i64 128 to ptr), ptr %.sroa.527.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 + store ptr inttoptr (i64 128 to ptr), ptr %.sroa.528.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 store i64 0, ptr %.sroa.6.0..sroa_idx, align 8, !alias.scope !86, !noalias !89 - %83 = load i64, ptr %44, align 8, !alias.scope !86, !noalias !89, !noundef !4 + %84 = load i64, ptr %44, align 8, !alias.scope !86, !noalias !89, !noundef !4 store i64 0, ptr %44, align 8, !alias.scope !86, !noalias !89 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !91 call void @llvm.experimental.noalias.scope.decl(metadata !92) call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %5), !noalias !95 store i64 1, ptr %5, align 8, !noalias !95 - %84 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store i64 1, ptr %84, align 8, !noalias !95 - %85 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 0, ptr %85, align 8, !noalias !99 + %85 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store i64 1, ptr %85, align 8, !noalias !95 + %86 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 0, ptr %86, align 8, !noalias !99 %.sroa.4.0..sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 24 store i64 %.sroa.05.0.copyload.i, ptr %.sroa.4.0..sroa_idx.i.i, align 8, !noalias !99 %.sroa.5.0..sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 32 @@ -851,47 +851,47 @@ _ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder8append_n17hae7f67c3f4b88 store ptr %.sroa.57.0.copyload.i, ptr %.sroa.6.0..sroa_idx11.i.i, align 8, !noalias !99 %.sroa.7.0..sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 %.sroa.68.0.copyload.i, ptr %.sroa.7.0..sroa_idx.i.i, align 8, !noalias !99 - %86 = load volatile i8, ptr @__rust_no_alloc_shim_is_unstable, align 1, !noalias !100 - %87 = call noundef align 8 dereferenceable_or_null(56) ptr @__rust_alloc(i64 noundef range(i64 48, 897) 56, i64 noundef range(i64 8, 129) 8) #31, !noalias !100 - %88 = icmp eq ptr %87, null - br i1 %88, label %89, label %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i + %87 = load volatile i8, ptr @__rust_no_alloc_shim_is_unstable, align 1, !noalias !100 + %88 = call noundef align 8 dereferenceable_or_null(56) ptr @__rust_alloc(i64 noundef range(i64 48, 897) 56, i64 noundef range(i64 8, 129) 8) #31, !noalias !100 + %89 = icmp eq ptr %88, null + br i1 %89, label %90, label %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i -89: ; preds = %._crit_edge +90: ; preds = %._crit_edge invoke void @_ZN5alloc5alloc18handle_alloc_error17h7d585e222775d2b3E(i64 noundef 8, i64 noundef 56) #32 - to label %.noexc.i.i.i unwind label %90, !noalias !95 + to label %.noexc.i.i.i unwind label %91, !noalias !95 -.noexc.i.i.i: ; preds = %89 +.noexc.i.i.i: ; preds = %90 unreachable -90: ; preds = %89 - %91 = landingpad { ptr, i32 } +91: ; preds = %90 + %92 = landingpad { ptr, i32 } cleanup invoke void @"_ZN4core3ptr76drop_in_place$LT$alloc..sync..ArcInner$LT$arrow_buffer..bytes..Bytes$GT$$GT$17hddd689cb55906b13E"(ptr noalias noundef nonnull align 8 dereferenceable(56) %5) #29 - to label %.body unwind label %92, !noalias !95 + to label %.body unwind label %93, !noalias !95 -92: ; preds = %90 - %93 = landingpad { ptr, i32 } +93: ; preds = %91 + %94 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hd44bb2114362504eE() #30, !noalias !95 unreachable _ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i: ; preds = %._crit_edge - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %87, ptr noundef nonnull align 8 dereferenceable(56) %5, i64 56, i1 false), !noalias !95 + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %88, ptr noundef nonnull align 8 dereferenceable(56) %5, i64 56, i1 false), !noalias !95 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5), !noalias !95 - store ptr %87, ptr %6, align 8, !alias.scope !92, !noalias !103 - %94 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr %.sroa.57.0.copyload.i, ptr %94, align 8, !alias.scope !92, !noalias !103 - %95 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 %.sroa.68.0.copyload.i, ptr %95, align 8, !alias.scope !92, !noalias !103 - invoke void @_ZN12arrow_buffer6buffer7boolean13BooleanBuffer3new17hb61e88c67471e6baE(ptr noalias noundef nonnull sret({ { ptr, ptr, i64 }, i64, i64 }) align 8 captures(none) dereferenceable(40) %7, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(24) %6, i64 noundef 0, i64 noundef %83) + store ptr %88, ptr %6, align 8, !alias.scope !92, !noalias !103 + %95 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr %.sroa.57.0.copyload.i, ptr %95, align 8, !alias.scope !92, !noalias !103 + %96 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 %.sroa.68.0.copyload.i, ptr %96, align 8, !alias.scope !92, !noalias !103 + invoke void @_ZN12arrow_buffer6buffer7boolean13BooleanBuffer3new17hb61e88c67471e6baE(ptr noalias noundef nonnull sret({ { ptr, ptr, i64 }, i64, i64 }) align 8 captures(none) dereferenceable(40) %7, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(24) %6, i64 noundef 0, i64 noundef %84) to label %96 unwind label %49 -96: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i +97: ; preds = %_ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE.exit.i call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !91 invoke void @"_ZN130_$LT$arrow_buffer..buffer..null..NullBuffer$u20$as$u20$core..convert..From$LT$arrow_buffer..buffer..boolean..BooleanBuffer$GT$$GT$4from17h9e49cc6f18f24971E"(ptr noalias noundef nonnull sret({ { { ptr, ptr, i64 }, i64, i64 }, i64 }) align 8 captures(none) dereferenceable(48) %8, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(40) %7) to label %97 unwind label %49 -97: ; preds = %96 +98: ; preds = %97 call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 8 dereferenceable(48) %8, i64 48, i1 false) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) @@ -899,68 +899,68 @@ _ZN12arrow_buffer6buffer7mutable13MutableBuffer11into_buffer17hb20936623a6c6fedE call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) br label %"_ZN4core6option19Option$LT$$RF$T$GT$6cloned17h94d15cf511857d9aE.exit" -98: ; preds = %.lr.ph, %105 - %.sroa.0.034 = phi ptr [ %77, %.lr.ph ], [ %99, %105 ] - %.sroa.7.033 = phi i64 [ 0, %.lr.ph ], [ %100, %105 ] - %99 = getelementptr inbounds nuw i8, ptr %.sroa.0.034, i64 4 - %100 = add nuw nsw i64 %.sroa.7.033, 1 - %101 = load i32, ptr %.sroa.0.034, align 4, !noundef !4 - %102 = sext i32 %101 to i64 - %103 = load i64, ptr %80, align 8, !noundef !4 - %104 = icmp ugt i64 %103, %102 - br i1 %104, label %107, label %105 - -105: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, %98, %107 - %106 = icmp eq ptr %99, %78 - br i1 %106, label %._crit_edge, label %98 - -107: ; preds = %98 +99: ; preds = %.lr.ph, %106 + %.sroa.0.038 = phi ptr [ %78, %.lr.ph ], [ %100, %105 ] + %.sroa.7.037 = phi i64 [ 0, %.lr.ph ], [ %101, %105 ] + %100 = getelementptr inbounds nuw i8, ptr %.sroa.0.038, i64 4 + %101 = add nuw nsw i64 %.sroa.7.037, 1 + %102 = load i32, ptr %.sroa.0.038, align 4, !noundef !4 + %103 = sext i32 %102 to i64 + %104 = load i64, ptr %81, align 8, !noundef !4 + %105 = icmp ugt i64 %104, %103 + br i1 %105, label %108, label %106 + +106: ; preds = %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, %99, %108 + %107 = icmp eq ptr %100, %79 + br i1 %107, label %._crit_edge, label %99 + +108: ; preds = %99 call void @llvm.experimental.noalias.scope.decl(metadata !104) - %108 = load ptr, ptr %81, align 8, !alias.scope !104, !noundef !4 - %109 = load i64, ptr %82, align 8, !alias.scope !104, !noundef !4 - %110 = add i64 %109, %102 - %111 = lshr i64 %110, 3 - %112 = getelementptr inbounds nuw i8, ptr %108, i64 %111 - %113 = load i8, ptr %112, align 1, !noalias !104, !noundef !4 + %109 = load ptr, ptr %82, align 8, !alias.scope !104, !noundef !4 + %110 = load i64, ptr %83, align 8, !alias.scope !104, !noundef !4 + %111 = add i64 %110, %103 + %112 = lshr i64 %111, 3 + %113 = getelementptr inbounds nuw i8, ptr %109, i64 %112 + %114 = load i8, ptr %113, align 1, !noalias !104, !noundef !4 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4), !noalias !104 store <8 x i8> , ptr %4, align 8, !noalias !104 - %114 = and i64 %110, 7 - %115 = getelementptr inbounds nuw [8 x i8], ptr %4, i64 0, i64 %114 - %116 = load i8, ptr %115, align 1, !noalias !104, !noundef !4 - %117 = and i8 %116, %113 - %.not32 = icmp eq i8 %117, 0 + %115 = and i64 %111, 7 + %116 = getelementptr inbounds nuw [8 x i8], ptr %4, i64 0, i64 %115 + %117 = load i8, ptr %116, align 1, !noalias !104, !noundef !4 + %118 = and i8 %117, %114 + %.not36 = icmp eq i8 %118, 0 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4), !noalias !104 - br i1 %.not32, label %118, label %105 + br i1 %.not36, label %119, label %106 -118: ; preds = %107 - %.val20 = load ptr, ptr %.sroa.527.0..sroa_idx, align 8, !nonnull !4, !noundef !4 +119: ; preds = %108 + %.val20 = load ptr, ptr %.sroa.528.0..sroa_idx, align 8, !nonnull !4, !noundef !4 %.val21 = load i64, ptr %.sroa.6.0..sroa_idx, align 8, !noundef !4 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) store <8 x i8> , ptr %3, align 8 - %119 = lshr i64 %.sroa.7.033, 3 - %120 = icmp ult i64 %119, %.val21 - br i1 %120, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, label %121, !prof !107 + %120 = lshr i64 %.sroa.7.037, 3 + %121 = icmp ult i64 %120, %.val21 + br i1 %121, label %_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit, label %122, !prof !107 -121: ; preds = %118 - invoke void @_ZN4core9panicking18panic_bounds_check17h326a19b32dc06d6dE(i64 noundef %119, i64 noundef %.val21, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.3a573e31fa13f546b6d503667aff8f01.66) #32 +122: ; preds = %119 + invoke void @_ZN4core9panicking18panic_bounds_check17h326a19b32dc06d6dE(i64 noundef %120, i64 noundef %.val21, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.3a573e31fa13f546b6d503667aff8f01.66) #32 to label %.noexc25 unwind label %49 -.noexc25: ; preds = %121 +.noexc26: ; preds = %122 unreachable -_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit: ; preds = %118 - %122 = and i64 %.sroa.7.033, 7 - %123 = getelementptr inbounds nuw [8 x i8], ptr %3, i64 0, i64 %122 - %124 = load i8, ptr %123, align 1, !noundef !4 - %125 = getelementptr inbounds nuw [0 x i8], ptr %.val20, i64 0, i64 %119 - %126 = load i8, ptr %125, align 1, !noundef !4 - %127 = and i8 %126, %124 - store i8 %127, ptr %125, align 1 +_ZN12arrow_buffer7builder7boolean20BooleanBufferBuilder7set_bit17h53990ec1af67b8f4E.exit: ; preds = %119 + %123 = and i64 %.sroa.7.037, 7 + %124 = getelementptr inbounds nuw [8 x i8], ptr %3, i64 0, i64 %123 + %125 = load i8, ptr %124, align 1, !noundef !4 + %126 = getelementptr inbounds nuw [0 x i8], ptr %.val20, i64 0, i64 %120 + %127 = load i8, ptr %126, align 1, !noundef !4 + %128 = and i8 %127, %125 + store i8 %128, ptr %126, align 1 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) - br label %105 + br label %106 -128: ; preds = %.body - %129 = landingpad { ptr, i32 } +129: ; preds = %.body + %130 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hd44bb2114362504eE() #30 unreachable diff --git a/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll b/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll index f2f29b4eed4..1aae81f7f0f 100644 --- a/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll +++ b/bench/meilisearch-rs/optimized/7fmwz6nrtt7kwsj.ll @@ -1343,7 +1343,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.i12.i = icmp eq i64 %7, 0 br i1 %.not.i12.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21: ; preds = %4 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21:; preds = %4 %8 = icmp ne ptr %.val, null tail call void @llvm.assume(i1 %8) %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 @@ -1361,16 +1361,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.ex tail call void @llvm.assume(i1 %13) br label %17 -._crit_edge.i: ; preds = %17 +12: ; preds = %17 %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) %spec.select31 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select31, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %15, align 8 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %16, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph @@ -1391,139 +1391,139 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.ex ._crit_edge.loopexit: ; preds = %105 %.pre = load i64, ptr %6, align 8 %.pre17 = add i64 %.pre, 1 - %24 = lshr i64 %.pre17, 3 - %25 = mul nuw i64 %24, 7 + %23 = lshr i64 %.pre17, 3 + %24 = mul nuw i64 %23, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %25, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21 ] - %26 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21 ] - %27 = icmp ult i64 %26, 8 - %.sroa.08.0 = select i1 %27, i64 %26, i64 %.pre-phi - %28 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %29 = load i64, ptr %28, align 8, !noundef !16 - %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %31 = sub i64 %.sroa.08.0, %29 - store i64 %31, ptr %30, align 8 + %.pre-phi = phi i64 [ %24, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21 ] + %25 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hf512be2a85161756E.exit.thread21 ] + %26 = icmp ult i64 %25, 8 + %.sroa.08.0 = select i1 %26, i64 %25, i64 %.pre-phi + %27 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %28 = load i64, ptr %27, align 8, !noundef !16 + %29 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %30 = sub i64 %.sroa.08.0, %28 + store i64 %30, ptr %29, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -32: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit - %33 = landingpad { ptr, i32 } +31: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit + %32 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h9bfc22970ab2eca4E"(ptr noalias noundef align 8 dereferenceable(24) %5) #33 - to label %108 unwind label %106 - -.lr.ph: ; preds = %._crit_edge.i, %105 - %.sroa.02.08 = phi i64 [ %34, %105 ], [ 0, %._crit_edge.i ] - %34 = add nuw i64 %.sroa.02.08, 1 - %35 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.08 - %37 = load i8, ptr %36, align 1, !noundef !16 - %.not = icmp eq i8 %37, -128 - br i1 %.not, label %38, label %105 - -38: ; preds = %.lr.ph + to label %108 unwind label %105 + +.lr.ph: ; preds = %12, %104 + %.sroa.02.08 = phi i64 [ %33, %105 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.08, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.08 + %36 = load i8, ptr %35, align 1, !noundef !16 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %104 + +37: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.08, -1 %.neg16 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 + %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit -_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) - to label %41 unwind label %32 +_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit: ; preds = %.preheader, %37 + %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.08) + to label %41 unwind label %31 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit +40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !290) - %42 = load i64, ptr %6, align 8, !alias.scope !290, !noundef !16 - %43 = load ptr, ptr %0, align 8, !alias.scope !290, !nonnull !16, !noundef !16 - %.sroa.0.015.i = and i64 %42, %40 - %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.015.i - %.sroa.0.0.copyload.i1316.i = load <16 x i8>, ptr %44, align 1, !noalias !293 - %45 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1316.i, zeroinitializer - %46 = bitcast <16 x i1> %45 to i16 - %.not.i.not17.i = icmp eq i16 %46, 0 - br i1 %.not.i.not17.i, label %.lr.ph.i21, label %._crit_edge.i20 - -.lr.ph.i21: ; preds = %41, %.lr.ph.i21 + %41 = load i64, ptr %6, align 8, !alias.scope !290, !noundef !16 + %42 = load ptr, ptr %0, align 8, !alias.scope !290, !nonnull !16, !noundef !16 + %.sroa.0.015.i = and i64 %41, %39 + %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.015.i + %.sroa.0.0.copyload.i1316.i = load <16 x i8>, ptr %43, align 1, !noalias !293 + %44 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1316.i, zeroinitializer + %45 = bitcast <16 x i1> %44 to i16 + %.not.i.not17.i = icmp eq i16 %45, 0 + br i1 %.not.i.not17.i, label %.lr.ph.i20, label %._crit_edge.i + +.lr.ph.i20: ; preds = %40, %.lr.ph.i20 %.sroa.0.019.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i21 ], [ %.sroa.0.015.i, %41 ] - %.sroa.7.018.i = phi i64 [ %47, %.lr.ph.i21 ], [ 0, %41 ] - %47 = add i64 %.sroa.7.018.i, 16 - %48 = add i64 %47, %.sroa.0.019.i - %.sroa.0.0.i = and i64 %48, %42 - %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i - %.sroa.0.0.copyload.i13.i = load <16 x i8>, ptr %49, align 1, !noalias !293 - %50 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i, zeroinitializer - %51 = bitcast <16 x i1> %50 to i16 - %.not.i.not.i = icmp eq i16 %51, 0 - br i1 %.not.i.not.i, label %.lr.ph.i21, label %._crit_edge.i20 - -._crit_edge.i20: ; preds = %.lr.ph.i21, %41 + %.sroa.7.018.i = phi i64 [ %46, %.lr.ph.i21 ], [ 0, %41 ] + %46 = add i64 %.sroa.7.018.i, 16 + %47 = add i64 %46, %.sroa.0.019.i + %.sroa.0.0.i = and i64 %47, %41 + %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i + %.sroa.0.0.copyload.i13.i = load <16 x i8>, ptr %48, align 1, !noalias !293 + %49 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i, zeroinitializer + %50 = bitcast <16 x i1> %49 to i16 + %.not.i.not.i = icmp eq i16 %50, 0 + br i1 %.not.i.not.i, label %.lr.ph.i20, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i20, %40 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.015.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i21 ] - %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i21 ] - %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %53 = zext nneg i16 %52 to i64 - %54 = add i64 %.sroa.0.0.lcssa.i, %53 - %55 = and i64 %54, %42 - %56 = getelementptr inbounds i8, ptr %43, i64 %55 - %57 = load i8, ptr %56, align 1, !noalias !290, !noundef !16 - %58 = icmp sgt i8 %57, -1 - br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit - -59: ; preds = %._crit_edge.i20 - %60 = load <16 x i8>, ptr %43, align 16, !noalias !296 - %61 = icmp slt <16 x i8> %60, zeroinitializer - %62 = bitcast <16 x i1> %61 to i16 - %63 = icmp ne i16 %62, 0 - tail call void @llvm.assume(i1 %63) - %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) - %65 = zext nneg i16 %64 to i64 + %.lcssa.i = phi i16 [ %45, %41 ], [ %50, %.lr.ph.i21 ] + %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %52 = zext nneg i16 %51 to i64 + %53 = add i64 %.sroa.0.0.lcssa.i, %52 + %54 = and i64 %53, %41 + %55 = getelementptr inbounds i8, ptr %42, i64 %54 + %56 = load i8, ptr %55, align 1, !noalias !290, !noundef !16 + %57 = icmp sgt i8 %56, -1 + br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit + +58: ; preds = %._crit_edge.i + %59 = load <16 x i8>, ptr %42, align 16, !noalias !296 + %60 = icmp slt <16 x i8> %59, zeroinitializer + %61 = bitcast <16 x i1> %60 to i16 + %62 = icmp ne i16 %61, 0 + tail call void @llvm.assume(i1 %62) + %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) + %64 = zext nneg i16 %63 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit: ; preds = %59, %._crit_edge.i20 - %.sroa.0.0.i8.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i20 ] - %66 = sub i64 %.sroa.02.08, %.sroa.0.015.i - %67 = sub i64 %.sroa.0.0.i8.i, %.sroa.0.015.i - %68 = xor i64 %67, %66 - %.unshifted = and i64 %68, %42 - %69 = icmp ult i64 %.unshifted, 16 - br i1 %69, label %82, label %70 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit: ; preds = %58, %._crit_edge.i + %.sroa.0.0.i8.i = phi i64 [ %64, %59 ], [ %54, %._crit_edge.i20 ] + %65 = sub i64 %.sroa.02.08, %.sroa.0.015.i + %66 = sub i64 %.sroa.0.0.i8.i, %.sroa.0.015.i + %67 = xor i64 %66, %65 + %.unshifted = and i64 %67, %41 + %68 = icmp ult i64 %.unshifted, 16 + br i1 %68, label %81, label %69 -70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit +69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit %.neg17 = xor i64 %.sroa.0.0.i8.i, -1 %.neg18 = mul i64 %2, %.neg17 - %71 = getelementptr inbounds i8, ptr %43, i64 %.neg18 - %72 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i8.i - %73 = load i8, ptr %72, align 1, !noundef !16 - %74 = lshr i64 %40, 57 - %75 = trunc nuw nsw i64 %74 to i8 - %76 = add i64 %.sroa.0.0.i8.i, -16 - %77 = and i64 %76, %42 - store i8 %75, ptr %72, align 1 - %78 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %79 = getelementptr i8, ptr %78, i64 %77 - %80 = getelementptr i8, ptr %79, i64 16 - store i8 %75, ptr %80, align 1 - %81 = icmp eq i8 %73, -1 - br i1 %81, label %96, label %.preheader - -82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit - %83 = lshr i64 %40, 57 - %84 = trunc nuw nsw i64 %83 to i8 - %85 = add i64 %.sroa.02.08, -16 - %86 = and i64 %42, %85 - %87 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.08 - store i8 %84, ptr %87, align 1 - %88 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %89 = getelementptr i8, ptr %88, i64 %86 - %90 = getelementptr i8, ptr %89, i64 16 - store i8 %84, ptr %90, align 1 - br label %105 - -.preheader: ; preds = %70, %.preheader + %70 = getelementptr inbounds i8, ptr %42, i64 %.neg18 + %71 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i8.i + %72 = load i8, ptr %71, align 1, !noundef !16 + %73 = lshr i64 %39, 57 + %74 = trunc nuw nsw i64 %73 to i8 + %75 = add i64 %.sroa.0.0.i8.i, -16 + %76 = and i64 %75, %41 + store i8 %74, ptr %71, align 1 + %77 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %78 = getelementptr i8, ptr %77, i64 %76 + %79 = getelementptr i8, ptr %78, i64 16 + store i8 %74, ptr %79, align 1 + %80 = icmp eq i8 %72, -1 + br i1 %80, label %95, label %.preheader + +81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.13625133489657380139.exit + %82 = lshr i64 %39, 57 + %83 = trunc nuw nsw i64 %82 to i8 + %84 = add i64 %.sroa.02.08, -16 + %85 = and i64 %41, %84 + %86 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.08 + store i8 %83, ptr %86, align 1 + %87 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %88 = getelementptr i8, ptr %87, i64 %85 + %89 = getelementptr i8, ptr %88, i64 16 + store i8 %83, ptr %89, align 1 + br label %104 + +.preheader: ; preds = %69, %.preheader %.sroa.04.09.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] - %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.sroa.04.09.i - %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.sroa.04.09.i + %90 = getelementptr inbounds nuw i8, ptr %38, i64 %.sroa.04.09.i + %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.sroa.04.09.i %93 = load i8, ptr %91, align 1 %94 = load i8, ptr %92, align 1 store i8 %94, ptr %91, align 1 @@ -1532,32 +1532,32 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h2cc45d5e345b63c4E.llvm.1362 %exitcond.not.i = icmp eq i64 %95, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h9f177abcfb1bb7baE.exit, label %.preheader -96: ; preds = %70 - %97 = add i64 %.sroa.02.08, -16 - %98 = load i64, ptr %6, align 8, !noundef !16 - %99 = and i64 %98, %97 - %100 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.08 - store i8 -1, ptr %101, align 1 - %102 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %103 = getelementptr i8, ptr %102, i64 %99 - %104 = getelementptr i8, ptr %103, i64 16 - store i8 -1, ptr %104, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %105 - -105: ; preds = %.lr.ph, %96, %82 +95: ; preds = %69 + %96 = add i64 %.sroa.02.08, -16 + %97 = load i64, ptr %6, align 8, !noundef !16 + %98 = and i64 %97, %96 + %99 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.08 + store i8 -1, ptr %100, align 1 + %101 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %102 = getelementptr i8, ptr %101, i64 %98 + %103 = getelementptr i8, ptr %102, i64 16 + store i8 -1, ptr %103, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) + br label %104 + +104: ; preds = %.lr.ph, %95, %81 %exitcond.not = icmp eq i64 %.sroa.02.08, %.val19 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -106: ; preds = %32 - %107 = landingpad { ptr, i32 } +105: ; preds = %31 + %106 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hd62aa59d1fda1c9fE() #31 unreachable -108: ; preds = %32 - resume { ptr, i32 } %33 +107: ; preds = %31 + resume { ptr, i32 } %32 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll b/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll index ac0f3c09b18..a55a56efec1 100644 --- a/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll +++ b/bench/mini-lsm-rs/optimized/1mavrvqu7b39yar1.ll @@ -6870,7 +6870,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.not4.i = icmp eq i64 %7, 0 br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20: ; preds = %4 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20:; preds = %4 %8 = icmp ne ptr %.val20, null tail call void @llvm.assume(i1 %8) %9 = getelementptr inbounds nuw i8, ptr %.val20, i64 16 @@ -6888,20 +6888,20 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.ex tail call void @llvm.assume(i1 %13) br label %17 -._crit_edge.i: ; preds = %17 +12: ; preds = %17 %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) %spec.select28 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) %14 = getelementptr inbounds i8, ptr %.val20, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val20, i64 %spec.select28, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %15, align 8 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %16, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph -17: ; preds = %17, %.lr.ph.i +23: ; preds = %17, %.lr.ph.i %.sroa.01.06.i = phi i64 [ 0, %.lr.ph.i ], [ %19, %17 ] %.sroa.5.05.i = phi i64 [ %.0.i.i.i.i, %.lr.ph.i ], [ %18, %17 ] %18 = add i64 %.sroa.5.05.i, -1 @@ -6919,137 +6919,137 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.ex %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb4af58817a3e580eE"(ptr noalias noundef align 8 dereferenceable(24) %5) #44 - to label %103 unwind label %104 + to label %103 unwind label %103 -._crit_edge.loopexit: ; preds = %102 +._crit_edge.loopexit: ; preds = %101 %.pre = load i64, ptr %6, align 8 %.pre16 = add i64 %.pre, 1 - %26 = lshr i64 %.pre16, 3 - %27 = mul nuw i64 %26, 7 + %25 = lshr i64 %.pre16, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] - %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] - %29 = icmp ult i64 %28, 8 - %.0 = select i1 %29, i64 %28, i64 %.pre-phi - %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %31 = load i64, ptr %30, align 8, !noundef !16 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %33 = sub i64 %.0, %31 - store i64 %33, ptr %32, align 8 + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !16 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %._crit_edge.i, %102 - %.sroa.02.09 = phi i64 [ %34, %102 ], [ 0, %._crit_edge.i ] - %34 = add nuw i64 %.sroa.02.09, 1 - %35 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.09 - %37 = load i8, ptr %36, align 1, !noundef !16 - %.not = icmp eq i8 %37, -128 - br i1 %.not, label %38, label %102 +.lr.ph: ; preds = %12, %101 + %.sroa.02.09 = phi i64 [ %33, %102 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.09, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.09 + %36 = load i8, ptr %35, align 1, !noundef !16 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %101 -38: ; preds = %.lr.ph +37: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.09, -1 %.neg16 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 + %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit -_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) +_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit: ; preds = %.preheader, %37 + %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) to label %41 unwind label %24 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit +40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit %.val = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 %.val19 = load i64, ptr %6, align 8, !noundef !16 - %.sroa.0.05.i = and i64 %.val19, %40 - %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !1944 - %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %44 = bitcast <16 x i1> %43 to i16 - %.not.not.i.not7.i = icmp eq i16 %44, 0 - br i1 %.not.not.i.not7.i, label %.lr.ph.i23, label %._crit_edge.i22 - -.lr.ph.i23: ; preds = %41, %.lr.ph.i23 + %.sroa.0.05.i = and i64 %.val19, %39 + %41 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %41, align 1, !noalias !1944 + %42 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %43 = bitcast <16 x i1> %42 to i16 + %.not.not.i.not7.i = icmp eq i16 %43, 0 + br i1 %.not.not.i.not7.i, label %.lr.ph.i22, label %._crit_edge.i + +.lr.ph.i22: ; preds = %40, %.lr.ph.i22 %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i23 ], [ %.sroa.0.05.i, %41 ] - %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i23 ], [ 0, %41 ] - %45 = add i64 %.sroa.7.08.i, 16 - %46 = add i64 %45, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %46, %.val19 - %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !1944 - %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %49 = bitcast <16 x i1> %48 to i16 - %.not.not.i.not.i = icmp eq i16 %49, 0 - br i1 %.not.not.i.not.i, label %.lr.ph.i23, label %._crit_edge.i22 + %.sroa.7.08.i = phi i64 [ %44, %.lr.ph.i23 ], [ 0, %41 ] + %44 = add i64 %.sroa.7.08.i, 16 + %45 = add i64 %44, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %45, %.val19 + %46 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %46, align 1, !noalias !1944 + %47 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %48 = bitcast <16 x i1> %47 to i16 + %.not.not.i.not.i = icmp eq i16 %48, 0 + br i1 %.not.not.i.not.i, label %.lr.ph.i22, label %._crit_edge.i -._crit_edge.i22: ; preds = %.lr.ph.i23, %41 +._crit_edge.i: ; preds = %.lr.ph.i22, %40 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i23 ] - %.lcssa.i = phi i16 [ %44, %41 ], [ %49, %.lr.ph.i23 ] - %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %51 = zext nneg i16 %50 to i64 - %52 = add i64 %.sroa.0.0.lcssa.i, %51 - %53 = and i64 %52, %.val19 - %54 = getelementptr inbounds i8, ptr %.val, i64 %53 - %55 = load i8, ptr %54, align 1, !noundef !16 - %56 = icmp sgt i8 %55, -1 - br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - -57: ; preds = %._crit_edge.i22 - %58 = load <16 x i8>, ptr %.val, align 16, !noalias !1947 - %59 = icmp slt <16 x i8> %58, zeroinitializer - %60 = bitcast <16 x i1> %59 to i16 - %.not.i.i = icmp ne i16 %60, 0 - %61 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) - %62 = zext nneg i16 %61 to i64 + %.lcssa.i = phi i16 [ %43, %41 ], [ %48, %.lr.ph.i23 ] + %49 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %50 = zext nneg i16 %49 to i64 + %51 = add i64 %.sroa.0.0.lcssa.i, %50 + %52 = and i64 %51, %.val19 + %53 = getelementptr inbounds i8, ptr %.val, i64 %52 + %54 = load i8, ptr %53, align 1, !noundef !16 + %55 = icmp sgt i8 %54, -1 + br i1 %55, label %56, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + +56: ; preds = %._crit_edge.i + %57 = load <16 x i8>, ptr %.val, align 16, !noalias !1947 + %58 = icmp slt <16 x i8> %57, zeroinitializer + %59 = bitcast <16 x i1> %58 to i16 + %.not.i.i = icmp ne i16 %59, 0 + %60 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %59, i1 true) + %61 = zext nneg i16 %60 to i64 tail call void @llvm.assume(i1 %.not.i.i) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %57, %._crit_edge.i22 - %.0.i.i = phi i64 [ %62, %57 ], [ %53, %._crit_edge.i22 ] - %63 = sub i64 %.sroa.02.09, %.sroa.0.05.i - %64 = sub i64 %.0.i.i, %.sroa.0.05.i - %65 = xor i64 %64, %63 - %.unshifted = and i64 %65, %.val19 - %66 = icmp ult i64 %.unshifted, 16 - br i1 %66, label %79, label %67 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %56, %._crit_edge.i + %.0.i.i = phi i64 [ %61, %57 ], [ %52, %._crit_edge.i22 ] + %62 = sub i64 %.sroa.02.09, %.sroa.0.05.i + %63 = sub i64 %.0.i.i, %.sroa.0.05.i + %64 = xor i64 %63, %62 + %.unshifted = and i64 %64, %.val19 + %65 = icmp ult i64 %.unshifted, 16 + br i1 %65, label %78, label %66 -67: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit +66: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit %.neg17 = xor i64 %.0.i.i, -1 %.neg18 = mul i64 %2, %.neg17 - %68 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 - %69 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %70 = load i8, ptr %69, align 1, !noundef !16 - %71 = lshr i64 %40, 57 - %72 = trunc nuw nsw i64 %71 to i8 - %73 = add i64 %.0.i.i, -16 - %74 = and i64 %73, %.val19 - store i8 %72, ptr %69, align 1 - %75 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %76 = getelementptr i8, ptr %75, i64 %74 - %77 = getelementptr i8, ptr %76, i64 16 - store i8 %72, ptr %77, align 1 - %78 = icmp eq i8 %70, -1 - br i1 %78, label %93, label %.preheader - -79: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - %80 = lshr i64 %40, 57 - %81 = trunc nuw nsw i64 %80 to i8 - %82 = add i64 %.sroa.02.09, -16 - %83 = and i64 %.val19, %82 - %84 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 - store i8 %81, ptr %84, align 1 - %85 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %86 = getelementptr i8, ptr %85, i64 %83 - %87 = getelementptr i8, ptr %86, i64 16 - store i8 %81, ptr %87, align 1 - br label %102 - -.preheader: ; preds = %67, %.preheader + %67 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 + %68 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %69 = load i8, ptr %68, align 1, !noundef !16 + %70 = lshr i64 %39, 57 + %71 = trunc nuw nsw i64 %70 to i8 + %72 = add i64 %.0.i.i, -16 + %73 = and i64 %72, %.val19 + store i8 %71, ptr %68, align 1 + %74 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %75 = getelementptr i8, ptr %74, i64 %73 + %76 = getelementptr i8, ptr %75, i64 16 + store i8 %71, ptr %76, align 1 + %77 = icmp eq i8 %69, -1 + br i1 %77, label %92, label %.preheader + +78: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + %79 = lshr i64 %39, 57 + %80 = trunc nuw nsw i64 %79 to i8 + %81 = add i64 %.sroa.02.09, -16 + %82 = and i64 %.val19, %81 + %83 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 + store i8 %80, ptr %83, align 1 + %84 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %85 = getelementptr i8, ptr %84, i64 %82 + %86 = getelementptr i8, ptr %85, i64 16 + store i8 %80, ptr %86, align 1 + br label %101 + +.preheader: ; preds = %66, %.preheader %.0910.i = phi i64 [ %92, %.preheader ], [ 0, %67 ] - %88 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %89 = getelementptr inbounds nuw i8, ptr %68, i64 %.0910.i + %87 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i + %88 = getelementptr inbounds nuw i8, ptr %67, i64 %.0910.i %90 = load i8, ptr %88, align 1 %91 = load i8, ptr %89, align 1 store i8 %91, ptr %88, align 1 @@ -7058,29 +7058,29 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; p %exitcond.not.i = icmp eq i64 %92, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h8521c7822bb455f8E.exit, label %.preheader -93: ; preds = %67 - %94 = add i64 %.sroa.02.09, -16 - %95 = load i64, ptr %6, align 8, !noundef !16 - %96 = and i64 %95, %94 - %97 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %98 = getelementptr inbounds i8, ptr %97, i64 %.sroa.02.09 - store i8 -1, ptr %98, align 1 - %99 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 - %100 = getelementptr i8, ptr %99, i64 %96 - %101 = getelementptr i8, ptr %100, i64 16 - store i8 -1, ptr %101, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %68, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %102 - -102: ; preds = %.lr.ph, %93, %79 +92: ; preds = %66 + %93 = add i64 %.sroa.02.09, -16 + %94 = load i64, ptr %6, align 8, !noundef !16 + %95 = and i64 %94, %93 + %96 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %97 = getelementptr inbounds i8, ptr %96, i64 %.sroa.02.09 + store i8 -1, ptr %97, align 1 + %98 = load ptr, ptr %0, align 8, !nonnull !16, !noundef !16 + %99 = getelementptr i8, ptr %98, i64 %95 + %100 = getelementptr i8, ptr %99, i64 16 + store i8 -1, ptr %100, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %67, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) + br label %101 + +101: ; preds = %.lr.ph, %92, %78 %exitcond.not = icmp eq i64 %.sroa.02.09, %.val21 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -103: ; preds = %24 +102: ; preds = %24 resume { ptr, i32 } %25 -104: ; preds = %24 - %105 = landingpad { ptr, i32 } +103: ; preds = %24 + %104 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #45 unreachable diff --git a/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll b/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll index 0e757e26be4..2dbe7d6dccc 100644 --- a/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll +++ b/bench/mini-lsm-rs/optimized/2y1m09w3fogtr6jd.ll @@ -4689,7 +4689,7 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.not.not4.i = icmp eq i64 %7, 0 br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, label %.lr.ph.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20: ; preds = %4 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20:; preds = %4 %8 = icmp ne ptr %.val20, null tail call void @llvm.assume(i1 %8) %9 = getelementptr inbounds nuw i8, ptr %.val20, i64 16 @@ -4707,16 +4707,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.ex tail call void @llvm.assume(i1 %13) br label %17 -._crit_edge.i: ; preds = %17 +12: ; preds = %17 %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) %spec.select28 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) %14 = getelementptr inbounds i8, ptr %.val20, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val20, i64 %spec.select28, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %15, align 8 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %16, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph @@ -4738,137 +4738,137 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.ex %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h40d1933d66f79d6bE"(ptr noalias noundef align 8 dereferenceable(24) %5) #50 - to label %103 unwind label %104 + to label %103 unwind label %103 -._crit_edge.loopexit: ; preds = %102 +._crit_edge.loopexit: ; preds = %101 %.pre = load i64, ptr %6, align 8 %.pre16 = add i64 %.pre, 1 - %26 = lshr i64 %.pre16, 3 - %27 = mul nuw i64 %26, 7 + %25 = lshr i64 %.pre16, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] - %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] - %29 = icmp ult i64 %28, 8 - %.0 = select i1 %29, i64 %28, i64 %.pre-phi - %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %31 = load i64, ptr %30, align 8, !noundef !4 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %33 = sub i64 %.0, %31 - store i64 %33, ptr %32, align 8 + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h17c5779ca74bbe5fE.exit.thread20 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !4 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %._crit_edge.i, %102 - %.sroa.02.09 = phi i64 [ %34, %102 ], [ 0, %._crit_edge.i ] - %34 = add nuw i64 %.sroa.02.09, 1 - %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.09 - %37 = load i8, ptr %36, align 1, !noundef !4 - %.not = icmp eq i8 %37, -128 - br i1 %.not, label %38, label %102 +.lr.ph: ; preds = %12, %101 + %.sroa.02.09 = phi i64 [ %33, %102 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.09, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.09 + %36 = load i8, ptr %35, align 1, !noundef !4 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %101 -38: ; preds = %.lr.ph +37: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.09, -1 %.neg16 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %35, i64 %.neg16 + %38 = getelementptr inbounds i8, ptr %34, i64 %.neg16 br label %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit -_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) +_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit: ; preds = %.preheader, %37 + %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.09) to label %41 unwind label %24 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit +40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit %.val = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 %.val19 = load i64, ptr %6, align 8, !noundef !4 - %.sroa.0.05.i = and i64 %.val19, %40 - %42 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i - %.0.copyload.i46.i = load <16 x i8>, ptr %42, align 1, !noalias !1454 - %43 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer - %44 = bitcast <16 x i1> %43 to i16 - %.not.not.i.not7.i = icmp eq i16 %44, 0 - br i1 %.not.not.i.not7.i, label %.lr.ph.i23, label %._crit_edge.i22 - -.lr.ph.i23: ; preds = %41, %.lr.ph.i23 + %.sroa.0.05.i = and i64 %.val19, %39 + %41 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.05.i + %.0.copyload.i46.i = load <16 x i8>, ptr %41, align 1, !noalias !1454 + %42 = icmp slt <16 x i8> %.0.copyload.i46.i, zeroinitializer + %43 = bitcast <16 x i1> %42 to i16 + %.not.not.i.not7.i = icmp eq i16 %43, 0 + br i1 %.not.not.i.not7.i, label %.lr.ph.i22, label %._crit_edge.i + +.lr.ph.i22: ; preds = %40, %.lr.ph.i22 %.sroa.0.09.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i23 ], [ %.sroa.0.05.i, %41 ] - %.sroa.7.08.i = phi i64 [ %45, %.lr.ph.i23 ], [ 0, %41 ] - %45 = add i64 %.sroa.7.08.i, 16 - %46 = add i64 %45, %.sroa.0.09.i - %.sroa.0.0.i = and i64 %46, %.val19 - %47 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i - %.0.copyload.i4.i = load <16 x i8>, ptr %47, align 1, !noalias !1454 - %48 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer - %49 = bitcast <16 x i1> %48 to i16 - %.not.not.i.not.i = icmp eq i16 %49, 0 - br i1 %.not.not.i.not.i, label %.lr.ph.i23, label %._crit_edge.i22 + %.sroa.7.08.i = phi i64 [ %44, %.lr.ph.i23 ], [ 0, %41 ] + %44 = add i64 %.sroa.7.08.i, 16 + %45 = add i64 %44, %.sroa.0.09.i + %.sroa.0.0.i = and i64 %45, %.val19 + %46 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.0.0.i + %.0.copyload.i4.i = load <16 x i8>, ptr %46, align 1, !noalias !1454 + %47 = icmp slt <16 x i8> %.0.copyload.i4.i, zeroinitializer + %48 = bitcast <16 x i1> %47 to i16 + %.not.not.i.not.i = icmp eq i16 %48, 0 + br i1 %.not.not.i.not.i, label %.lr.ph.i22, label %._crit_edge.i -._crit_edge.i22: ; preds = %.lr.ph.i23, %41 +._crit_edge.i: ; preds = %.lr.ph.i22, %40 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.05.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i23 ] - %.lcssa.i = phi i16 [ %44, %41 ], [ %49, %.lr.ph.i23 ] - %50 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %51 = zext nneg i16 %50 to i64 - %52 = add i64 %.sroa.0.0.lcssa.i, %51 - %53 = and i64 %52, %.val19 - %54 = getelementptr inbounds i8, ptr %.val, i64 %53 - %55 = load i8, ptr %54, align 1, !noundef !4 - %56 = icmp sgt i8 %55, -1 - br i1 %56, label %57, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - -57: ; preds = %._crit_edge.i22 - %58 = load <16 x i8>, ptr %.val, align 16, !noalias !1457 - %59 = icmp slt <16 x i8> %58, zeroinitializer - %60 = bitcast <16 x i1> %59 to i16 - %.not.i.i = icmp ne i16 %60, 0 - %61 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %60, i1 true) - %62 = zext nneg i16 %61 to i64 + %.lcssa.i = phi i16 [ %43, %41 ], [ %48, %.lr.ph.i23 ] + %49 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %50 = zext nneg i16 %49 to i64 + %51 = add i64 %.sroa.0.0.lcssa.i, %50 + %52 = and i64 %51, %.val19 + %53 = getelementptr inbounds i8, ptr %.val, i64 %52 + %54 = load i8, ptr %53, align 1, !noundef !4 + %55 = icmp sgt i8 %54, -1 + br i1 %55, label %56, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + +56: ; preds = %._crit_edge.i + %57 = load <16 x i8>, ptr %.val, align 16, !noalias !1457 + %58 = icmp slt <16 x i8> %57, zeroinitializer + %59 = bitcast <16 x i1> %58 to i16 + %.not.i.i = icmp ne i16 %59, 0 + %60 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %59, i1 true) + %61 = zext nneg i16 %60 to i64 tail call void @llvm.assume(i1 %.not.i.i) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %57, %._crit_edge.i22 - %.0.i.i = phi i64 [ %62, %57 ], [ %53, %._crit_edge.i22 ] - %63 = sub i64 %.sroa.02.09, %.sroa.0.05.i - %64 = sub i64 %.0.i.i, %.sroa.0.05.i - %65 = xor i64 %64, %63 - %.unshifted = and i64 %65, %.val19 - %66 = icmp ult i64 %.unshifted, 16 - br i1 %66, label %79, label %67 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; preds = %56, %._crit_edge.i + %.0.i.i = phi i64 [ %61, %57 ], [ %52, %._crit_edge.i22 ] + %62 = sub i64 %.sroa.02.09, %.sroa.0.05.i + %63 = sub i64 %.0.i.i, %.sroa.0.05.i + %64 = xor i64 %63, %62 + %.unshifted = and i64 %64, %.val19 + %65 = icmp ult i64 %.unshifted, 16 + br i1 %65, label %78, label %66 -67: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit +66: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit %.neg17 = xor i64 %.0.i.i, -1 %.neg18 = mul i64 %2, %.neg17 - %68 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 - %69 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i - %70 = load i8, ptr %69, align 1, !noundef !4 - %71 = lshr i64 %40, 57 - %72 = trunc nuw nsw i64 %71 to i8 - %73 = add i64 %.0.i.i, -16 - %74 = and i64 %73, %.val19 - store i8 %72, ptr %69, align 1 - %75 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %76 = getelementptr i8, ptr %75, i64 %74 - %77 = getelementptr i8, ptr %76, i64 16 - store i8 %72, ptr %77, align 1 - %78 = icmp eq i8 %70, -1 - br i1 %78, label %93, label %.preheader - -79: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit - %80 = lshr i64 %40, 57 - %81 = trunc nuw nsw i64 %80 to i8 - %82 = add i64 %.sroa.02.09, -16 - %83 = and i64 %.val19, %82 - %84 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 - store i8 %81, ptr %84, align 1 - %85 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %86 = getelementptr i8, ptr %85, i64 %83 - %87 = getelementptr i8, ptr %86, i64 16 - store i8 %81, ptr %87, align 1 - br label %102 - -.preheader: ; preds = %67, %.preheader + %67 = getelementptr inbounds i8, ptr %.val, i64 %.neg18 + %68 = getelementptr inbounds i8, ptr %.val, i64 %.0.i.i + %69 = load i8, ptr %68, align 1, !noundef !4 + %70 = lshr i64 %39, 57 + %71 = trunc nuw nsw i64 %70 to i8 + %72 = add i64 %.0.i.i, -16 + %73 = and i64 %72, %.val19 + store i8 %71, ptr %68, align 1 + %74 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %75 = getelementptr i8, ptr %74, i64 %73 + %76 = getelementptr i8, ptr %75, i64 16 + store i8 %71, ptr %76, align 1 + %77 = icmp eq i8 %69, -1 + br i1 %77, label %92, label %.preheader + +78: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit + %79 = lshr i64 %39, 57 + %80 = trunc nuw nsw i64 %79 to i8 + %81 = add i64 %.sroa.02.09, -16 + %82 = and i64 %.val19, %81 + %83 = getelementptr inbounds i8, ptr %.val, i64 %.sroa.02.09 + store i8 %80, ptr %83, align 1 + %84 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %85 = getelementptr i8, ptr %84, i64 %82 + %86 = getelementptr i8, ptr %85, i64 16 + store i8 %80, ptr %86, align 1 + br label %101 + +.preheader: ; preds = %66, %.preheader %.0910.i = phi i64 [ %92, %.preheader ], [ 0, %67 ] - %88 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %89 = getelementptr inbounds nuw i8, ptr %68, i64 %.0910.i + %87 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i + %88 = getelementptr inbounds nuw i8, ptr %67, i64 %.0910.i %90 = load i8, ptr %88, align 1 %91 = load i8, ptr %89, align 1 store i8 %91, ptr %88, align 1 @@ -4877,29 +4877,29 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h936d2cdcb480a581E.exit: ; p %exitcond.not.i = icmp eq i64 %92, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17hfe8de68ba54e52d9E.exit, label %.preheader -93: ; preds = %67 - %94 = add i64 %.sroa.02.09, -16 - %95 = load i64, ptr %6, align 8, !noundef !4 - %96 = and i64 %95, %94 - %97 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %98 = getelementptr inbounds i8, ptr %97, i64 %.sroa.02.09 - store i8 -1, ptr %98, align 1 - %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %100 = getelementptr i8, ptr %99, i64 %96 - %101 = getelementptr i8, ptr %100, i64 16 - store i8 -1, ptr %101, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %68, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %102 - -102: ; preds = %.lr.ph, %93, %79 +92: ; preds = %66 + %93 = add i64 %.sroa.02.09, -16 + %94 = load i64, ptr %6, align 8, !noundef !4 + %95 = and i64 %94, %93 + %96 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %97 = getelementptr inbounds i8, ptr %96, i64 %.sroa.02.09 + store i8 -1, ptr %97, align 1 + %98 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %99 = getelementptr i8, ptr %98, i64 %95 + %100 = getelementptr i8, ptr %99, i64 16 + store i8 -1, ptr %100, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %67, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) + br label %101 + +101: ; preds = %.lr.ph, %92, %78 %exitcond.not = icmp eq i64 %.sroa.02.09, %.val21 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -103: ; preds = %24 +102: ; preds = %24 resume { ptr, i32 } %25 -104: ; preds = %24 - %105 = landingpad { ptr, i32 } +103: ; preds = %24 + %104 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h55eb1d85cadde1a1E() #49 unreachable diff --git a/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll b/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll index 83e5944374f..a47a4d0a51b 100644 --- a/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll +++ b/bench/ockam-rs/optimized/59645ou3p4wsm5oz.ll @@ -3187,7 +3187,7 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hb6e79ba0f31224c4E.llvm.18 %.not.not4.i.i = icmp eq i64 %17, 0 br i1 %.not.not4.i.i, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.thread24.i", label %.lr.ph.i.i5 -"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.thread24.i": ; preds = %114 +"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$23prepare_rehash_in_place17h816ba2a0e59828b5E.exit.thread24.i":; preds = %114 %115 = icmp ne ptr %.val15.i, null tail call void @llvm.assume(i1 %115) br label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$15rehash_in_place17h8bcc2323c476cdb1E.exit" @@ -3202,7 +3202,7 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hb6e79ba0f31224c4E.llvm.18 tail call void @llvm.assume(i1 %119) br label %121 -._crit_edge.i.i6: ; preds = %121 +._crit_edge.i.i6:; preds = %121 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %17, i64 16) %spec.select30.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) %120 = getelementptr inbounds i8, ptr %.val15.i, i64 %spec.select.i @@ -3211,8 +3211,8 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hb6e79ba0f31224c4E.llvm.18 %invariant.gep.i = getelementptr i8, ptr %.val15.i, i64 16 br label %128 -121: ; preds = %121, %.lr.ph.i.i5 - %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i5 ], [ %123, %121 ] +128: ; preds = %128, %.lr.ph.i.i5 + %.sroa.02.010.i = phi i64 [ 0, %.lr.ph.i.i5 ], [ %123, %121 ] %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i5 ], [ %122, %121 ] %122 = add i64 %.sroa.5.05.i.i, -1 %123 = add i64 %.sroa.01.06.i.i, 16 @@ -3230,8 +3230,8 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hb6e79ba0f31224c4E.llvm.18 %129 = add nuw i64 %.sroa.02.010.i, 1 %130 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.02.010.i %131 = load i8, ptr %130, align 1, !noalias !684, !noundef !7 - %.not.i7 = icmp eq i8 %131, -128 - br i1 %.not.i7, label %132, label %187 + %.not.i6 = icmp eq i8 %131, -128 + br i1 %.not.i6, label %132, label %187 132: ; preds = %128 %133 = shl i64 %.sroa.02.010.i, 6 @@ -3242,18 +3242,18 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hb6e79ba0f31224c4E.llvm.18 br label %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.preheader.i, %132 - %.val3.i.i9 = load i128, ptr %gep12.i, align 8, !alias.scope !693, !noalias !698, !noundef !7 - %137 = trunc i128 %.val3.i.i9 to i64 - %.sroa.0.05.i.i10 = and i64 %15, %137 - %138 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.0.05.i.i10 - %.0.copyload.i46.i.i11 = load <16 x i8>, ptr %138, align 1, !noalias !705 - %139 = icmp slt <16 x i8> %.0.copyload.i46.i.i11, zeroinitializer + %.val3.i.i8 = load i128, ptr %gep12.i, align 8, !alias.scope !693, !noalias !698, !noundef !7 + %137 = trunc i128 %.val3.i.i8 to i64 + %.sroa.0.05.i.i9 = and i64 %15, %137 + %138 = getelementptr inbounds i8, ptr %.val15.i, i64 %.sroa.0.05.i.i9 + %.0.copyload.i46.i.i10 = load <16 x i8>, ptr %138, align 1, !noalias !705 + %139 = icmp slt <16 x i8> %.0.copyload.i46.i.i10, zeroinitializer %140 = bitcast <16 x i1> %139 to i16 - %.not.not.i.not7.i.i12 = icmp eq i16 %140, 0 - br i1 %.not.not.i.not7.i.i12, label %.lr.ph.i18.i, label %._crit_edge.i17.i + %.not.not.i.not7.i.i11 = icmp eq i16 %140, 0 + br i1 %.not.not.i.not7.i.i11, label %.lr.ph.i17.i, label %._crit_edge.i.i12 -.lr.ph.i18.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i, %.lr.ph.i18.i - %.sroa.0.09.i.i17 = phi i64 [ %.sroa.0.0.i.i19, %.lr.ph.i18.i ], [ %.sroa.0.05.i.i10, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ] +.lr.ph.i17.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i, %.lr.ph.i17.i + %.sroa.0.09.i.i17 = phi i64 [ %.sroa.0.0.i.i19, %.lr.ph.i18.i ], [ %.sroa.0.05.i.i9, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ] %.sroa.7.08.i.i18 = phi i64 [ %141, %.lr.ph.i18.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ] %141 = add i64 %.sroa.7.08.i.i18, 16 %142 = add i64 %141, %.sroa.0.09.i.i17 @@ -3263,10 +3263,10 @@ _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.prehea %144 = icmp slt <16 x i8> %.0.copyload.i4.i.i20, zeroinitializer %145 = bitcast <16 x i1> %144 to i16 %.not.not.i.not.i.i21 = icmp eq i16 %145, 0 - br i1 %.not.not.i.not.i.i21, label %.lr.ph.i18.i, label %._crit_edge.i17.i + br i1 %.not.not.i.not.i.i21, label %.lr.ph.i17.i, label %._crit_edge.i.i12 -._crit_edge.i17.i: ; preds = %.lr.ph.i18.i, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i - %.sroa.0.0.lcssa.i.i13 = phi i64 [ %.sroa.0.05.i.i10, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ], [ %.sroa.0.0.i.i19, %.lr.ph.i18.i ] +._crit_edge.i.i12: ; preds = %.lr.ph.i17.i, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i + %.sroa.0.0.lcssa.i.i13 = phi i64 [ %.sroa.0.05.i.i9, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ], [ %.sroa.0.0.i.i19, %.lr.ph.i18.i ] %.lcssa.i.i14 = phi i16 [ %140, %_ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i ], [ %145, %.lr.ph.i18.i ] %146 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i14, i1 true) %147 = zext nneg i16 %146 to i64 @@ -3277,7 +3277,7 @@ _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.prehea %152 = icmp sgt i8 %151, -1 br i1 %152, label %153, label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i" -153: ; preds = %._crit_edge.i17.i +153: ; preds = %._crit_edge.i.i12 %154 = load <16 x i8>, ptr %.val15.i, align 16, !noalias !708 %155 = icmp slt <16 x i8> %154, zeroinitializer %156 = bitcast <16 x i1> %155 to i16 @@ -3287,10 +3287,10 @@ _ZN4core3ptr19swap_nonoverlapping17h5c7a30743338bf97E.exit.i: ; preds = %.prehea tail call void @llvm.assume(i1 %.not.i.i.i16) br label %"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i" -"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i": ; preds = %153, %._crit_edge.i17.i +"_ZN9hashbrown3raw22RawTableInner$LT$A$GT$16find_insert_slot17h0b694c51b2a6c8acE.exit.i": ; preds = %153, %._crit_edge.i.i12 %.0.i.i.i15 = phi i64 [ %158, %153 ], [ %149, %._crit_edge.i17.i ] - %159 = sub i64 %.sroa.02.010.i, %.sroa.0.05.i.i10 - %160 = sub i64 %.0.i.i.i15, %.sroa.0.05.i.i10 + %159 = sub i64 %.sroa.02.010.i, %.sroa.0.05.i.i9 + %160 = sub i64 %.0.i.i.i15, %.sroa.0.05.i.i9 %161 = xor i64 %160, %159 %.unshifted.i = and i64 %161, %15 %162 = icmp ult i64 %.unshifted.i, 16 diff --git a/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll b/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll index c3efba24d5d..745b1d0b30c 100644 --- a/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll +++ b/bench/pingora-rs/optimized/buvg05ofkihfrgtzxvq0wm8fb.ll @@ -3165,7 +3165,7 @@ _ZN4core10intrinsics25typed_swap_nonoverlapping17he528361149ecc2adE.exit: ; pred store i64 %132, ptr %131, align 1 br label %.backedge -common.resume: ; preds = %163, %90 +common.resume: ; preds = %162, %90 %common.resume.op = phi { ptr, i32 } [ %91, %90 ], [ %lpad.phi.i, %163 ] resume { ptr, i32 } %common.resume.op @@ -3175,7 +3175,7 @@ common.resume: ; preds = %163, %90 %.not1.i.i = icmp eq i64 %17, 0 br i1 %.not1.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread", label %.lr.ph.i.i7 -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread": ; preds = %133 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread":; preds = %133 %134 = icmp ne ptr %.val12.i, null tail call void @llvm.assume(i1 %134) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !281 @@ -3191,34 +3191,34 @@ common.resume: ; preds = %163, %90 tail call void @llvm.assume(i1 %138) br label %142 -._crit_edge.i.i8: ; preds = %142 +._crit_edge.i.i8:; preds = %142 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %17, i64 16) %spec.select65.i = tail call i64 @llvm.umin.i64(i64 %17, i64 16) %139 = getelementptr inbounds nuw i8, ptr %.val12.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %139, ptr nonnull align 1 %.val12.i, i64 %spec.select65.i, i1 false), !noalias !281 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !281 - %140 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr null, ptr %140, align 8, !noalias !281 - %141 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 8, ptr %141, align 8, !noalias !281 + %147 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr null, ptr %147, align 8, !noalias !281 + %148 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 8, ptr %148, align 8, !noalias !281 store ptr %0, ptr %6, align 8, !noalias !281 br label %149 142: ; preds = %142, %.lr.ph.i.i7 %.sroa.04.03.i.i = phi i64 [ %.sroa.05.0.i.i.i.i, %.lr.ph.i.i7 ], [ %144, %142 ] - %.sroa.03.02.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %143, %142 ] - %143 = add i64 %.sroa.03.02.i.i, 16 + %.sroa.06.120.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %143, %142 ] + %143 = add i64 %.sroa.06.120.i, 16 %144 = add i64 %.sroa.04.03.i.i, -1 - %145 = getelementptr inbounds nuw i8, ptr %.val12.i, i64 %.sroa.03.02.i.i - %146 = load <16 x i8>, ptr %145, align 16, !noalias !281 - %.lobit.i.i.i.i = ashr <16 x i8> %146, splat (i8 7) + %150 = getelementptr inbounds nuw i8, ptr %.val12.i, i64 %.sroa.06.120.i + %151 = load <16 x i8>, ptr %150, align 16, !noalias !281 + %.lobit.i.i.i.i = ashr <16 x i8> %151, splat (i8 7) %147 = bitcast <16 x i8> %.lobit.i.i.i.i to <2 x i64> %148 = or <2 x i64> %147, splat (i64 -9187201950435737472) store <2 x i64> %148, ptr %145, align 16, !noalias !281 %.not.i.i = icmp eq i64 %144, 0 br i1 %.not.i.i, label %._crit_edge.i.i8, label %142 -149: ; preds = %219, %._crit_edge.i.i8 +149:; preds = %219, %._crit_edge.i.i8 %.sroa.06.120.i = phi i64 [ 1, %._crit_edge.i.i8 ], [ %.sroa.06.1.i, %219 ] %.sroa.06.019.i = phi i64 [ 0, %._crit_edge.i.i8 ], [ %.sroa.06.120.i, %219 ] %150 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 @@ -3234,179 +3234,179 @@ common.resume: ; preds = %163, %90 %157 = sub nsw i64 0, %.sroa.06.019.i br label %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i -_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i: ; preds = %218, %153 +_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i: ; preds = %217, %153 tail call void @llvm.experimental.noalias.scope.decl(metadata !284) - %158 = load ptr, ptr %0, align 8, !alias.scope !287, !noalias !288, !nonnull !19, !noundef !19 - %159 = getelementptr inbounds i64, ptr %158, i64 %157 - %160 = getelementptr inbounds i8, ptr %159, i64 -8 - %.val3.i.i12 = load i64, ptr %160, align 8, !noalias !290, !noundef !19 - %161 = icmp ult i64 %.val3.i.i12, %3 - br i1 %161, label %164, label %162 - -162: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i - invoke void @_ZN4core9panicking18panic_bounds_check17h2d3ab0b83311a572E(i64 noundef %.val3.i.i12, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.477136bb849fca936c1882c11250d7c7.20) #28 + %157 = load ptr, ptr %0, align 8, !alias.scope !287, !noalias !288, !nonnull !19, !noundef !19 + %158 = getelementptr inbounds i64, ptr %157, i64 %157 + %159 = getelementptr inbounds i8, ptr %158, i64 -8 + %.val3.i.i11 = load i64, ptr %159, align 8, !noalias !290, !noundef !19 + %160 = icmp ult i64 %.val3.i.i11, %3 + br i1 %160, label %163, label %161 + +161: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i + invoke void @_ZN4core9panicking18panic_bounds_check17h2d3ab0b83311a572E(i64 noundef %.val3.i.i11, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.477136bb849fca936c1882c11250d7c7.20) #28 to label %.noexc.i unwind label %.loopexit.split-lp.i -.noexc.i: ; preds = %162 +.noexc.i: ; preds = %161 unreachable -.loopexit.i: ; preds = %218 +.loopexit.i: ; preds = %217 %lpad.loopexit.i = landingpad { ptr, i32 } cleanup - br label %163 + br label %162 -.loopexit.split-lp.i: ; preds = %162 +.loopexit.split-lp.i: ; preds = %161 %lpad.loopexit.split-lp.i = landingpad { ptr, i32 } cleanup - br label %163 + br label %162 -163: ; preds = %.loopexit.split-lp.i, %.loopexit.i +162: ; preds = %.loopexit.split-lp.i, %.loopexit.i %lpad.phi.i = phi { ptr, i32 } [ %lpad.loopexit.i, %.loopexit.i ], [ %lpad.loopexit.split-lp.i, %.loopexit.split-lp.i ] invoke fastcc void @"_ZN4core3ptr297drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h48edcdd41ec96a7fE"(ptr noalias noundef align 8 dereferenceable(24) %6) #25 - to label %common.resume unwind label %231 + to label %common.resume unwind label %230 -164: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i - %165 = getelementptr inbounds nuw { { { { { i64, ptr, {} }, {} }, i64 } }, { i64, [2 x i64] }, i64 }, ptr %2, i64 %.val3.i.i12, i32 2 - %166 = load i64, ptr %165, align 8, !noalias !290, !noundef !19 +163: ; preds = %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i + %164 = getelementptr inbounds nuw { { { { { i64, ptr, {} }, {} }, i64 } }, { i64, [2 x i64] }, i64 }, ptr %2, i64 %.val3.i.i11, i32 2 + %165 = load i64, ptr %164, align 8, !noalias !290, !noundef !19 %.val11.i = load i64, ptr %14, align 8, !alias.scope !281, !noundef !19 - %.sroa.02.02.i.i14 = and i64 %.val11.i, %166 - %167 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.02.02.i.i14 - %.sroa.0.0.copyload.i13.i.i15 = load <16 x i8>, ptr %167, align 1 - %168 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i.i15, zeroinitializer - %169 = bitcast <16 x i1> %168 to i16 - %170 = icmp eq i16 %169, 0 - br i1 %170, label %.lr.ph.i15.i, label %._crit_edge.i14.i - -.lr.ph.i15.i: ; preds = %164, %.lr.ph.i15.i - %.sroa.02.05.i.i19 = phi i64 [ %.sroa.02.0.i.i21, %.lr.ph.i15.i ], [ %.sroa.02.02.i.i14, %164 ] - %.sroa.9.04.i.i20 = phi i64 [ %171, %.lr.ph.i15.i ], [ 0, %164 ] - %171 = add i64 %.sroa.9.04.i.i20, 16 - %172 = add i64 %171, %.sroa.02.05.i.i19 - %.sroa.02.0.i.i21 = and i64 %172, %.val11.i - %173 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.02.0.i.i21 - %.sroa.0.0.copyload.i1.i.i22 = load <16 x i8>, ptr %173, align 1 - %174 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1.i.i22, zeroinitializer - %175 = bitcast <16 x i1> %174 to i16 - %176 = icmp eq i16 %175, 0 - br i1 %176, label %.lr.ph.i15.i, label %._crit_edge.i14.i - -._crit_edge.i14.i: ; preds = %.lr.ph.i15.i, %164 - %.sroa.02.0.lcssa.i.i16 = phi i64 [ %.sroa.02.02.i.i14, %164 ], [ %.sroa.02.0.i.i21, %.lr.ph.i15.i ] - %.lcssa.i.i17 = phi i16 [ %169, %164 ], [ %175, %.lr.ph.i15.i ] - %177 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) - %178 = zext nneg i16 %177 to i64 - %179 = add i64 %.sroa.02.0.lcssa.i.i16, %178 - %180 = and i64 %179, %.val11.i - %181 = getelementptr inbounds nuw i8, ptr %158, i64 %180 - %182 = load i8, ptr %181, align 1, !noundef !19 - %183 = icmp sgt i8 %182, -1 - br i1 %183, label %184, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i", !prof !256 - -184: ; preds = %._crit_edge.i14.i - %185 = load <16 x i8>, ptr %158, align 16 - %186 = icmp slt <16 x i8> %185, zeroinitializer - %187 = bitcast <16 x i1> %186 to i16 - %188 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %187, i1 false) - %189 = zext nneg i16 %188 to i64 + %.sroa.02.02.i.i13 = and i64 %.val11.i, %165 + %166 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.02.02.i.i13 + %.sroa.0.0.copyload.i13.i.i14 = load <16 x i8>, ptr %166, align 1 + %167 = icmp slt <16 x i8> %.sroa.0.0.copyload.i13.i.i14, zeroinitializer + %168 = bitcast <16 x i1> %167 to i16 + %169 = icmp eq i16 %168, 0 + br i1 %169, label %.lr.ph.i14.i, label %._crit_edge.i.i15 + +.lr.ph.i14.i: ; preds = %163, %.lr.ph.i14.i + %.sroa.02.05.i.i19 = phi i64 [ %.sroa.02.0.i.i21, %.lr.ph.i15.i ], [ %.sroa.02.02.i.i13, %164 ] + %.sroa.9.04.i.i20 = phi i64 [ %170, %.lr.ph.i15.i ], [ 0, %164 ] + %170 = add i64 %.sroa.9.04.i.i20, 16 + %171 = add i64 %170, %.sroa.02.05.i.i19 + %.sroa.02.0.i.i21 = and i64 %171, %.val11.i + %172 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.02.0.i.i21 + %.sroa.0.0.copyload.i1.i.i22 = load <16 x i8>, ptr %172, align 1 + %173 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1.i.i22, zeroinitializer + %174 = bitcast <16 x i1> %173 to i16 + %175 = icmp eq i16 %174, 0 + br i1 %175, label %.lr.ph.i14.i, label %._crit_edge.i.i15 + +._crit_edge.i.i15: ; preds = %.lr.ph.i14.i, %163 + %.sroa.02.0.lcssa.i.i16 = phi i64 [ %.sroa.02.02.i.i13, %164 ], [ %.sroa.02.0.i.i21, %.lr.ph.i15.i ] + %.lcssa.i.i17 = phi i16 [ %168, %164 ], [ %174, %.lr.ph.i15.i ] + %176 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) + %177 = zext nneg i16 %176 to i64 + %178 = add i64 %.sroa.02.0.lcssa.i.i16, %177 + %179 = and i64 %178, %.val11.i + %180 = getelementptr inbounds nuw i8, ptr %157, i64 %179 + %181 = load i8, ptr %180, align 1, !noundef !19 + %182 = icmp sgt i8 %181, -1 + br i1 %182, label %183, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i", !prof !256 + +183: ; preds = %._crit_edge.i.i15 + %184 = load <16 x i8>, ptr %157, align 16 + %185 = icmp slt <16 x i8> %184, zeroinitializer + %186 = bitcast <16 x i1> %185 to i16 + %187 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %186, i1 false) + %188 = zext nneg i16 %187 to i64 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i": ; preds = %184, %._crit_edge.i14.i - %.sroa.0.0.i.i18 = phi i64 [ %189, %184 ], [ %180, %._crit_edge.i14.i ] - %190 = shl i64 %.sroa.0.0.i.i18, 3 - %191 = sub nuw nsw i64 -8, %190 - %192 = getelementptr inbounds i8, ptr %158, i64 %191 - %193 = sub i64 %.sroa.06.019.i, %.sroa.02.02.i.i14 - %194 = sub i64 %.sroa.0.0.i.i18, %.sroa.02.02.i.i14 - %195 = xor i64 %194, %193 - %.unshifted.i = and i64 %195, %.val11.i - %196 = icmp ult i64 %.unshifted.i, 16 - br i1 %196, label %222, label %197, !prof !291 - -197: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" - %198 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.0.0.i.i18 - %199 = load i8, ptr %198, align 1, !noundef !19 - %200 = lshr i64 %166, 57 - %201 = trunc nuw nsw i64 %200 to i8 - %202 = add i64 %.sroa.0.0.i.i18, -16 - %203 = and i64 %202, %.val11.i - store i8 %201, ptr %198, align 1 - %204 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %205 = getelementptr i8, ptr %204, i64 %203 - %206 = getelementptr i8, ptr %205, i64 16 - store i8 %201, ptr %206, align 1 - %207 = icmp eq i8 %199, -1 - br i1 %207, label %208, label %218 - -208: ; preds = %197 - %209 = add i64 %.sroa.06.019.i, -16 - %210 = load i64, ptr %14, align 8, !alias.scope !281, !noundef !19 - %211 = and i64 %210, %209 - %212 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %213 = getelementptr inbounds nuw i8, ptr %212, i64 %.sroa.06.019.i - store i8 -1, ptr %213, align 1 - %214 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %215 = getelementptr i8, ptr %214, i64 %211 - %216 = getelementptr i8, ptr %215, i64 16 - store i8 -1, ptr %216, align 1 - %217 = load i64, ptr %156, align 1 - store i64 %217, ptr %192, align 1 - br label %219 - -218: ; preds = %197 - invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17hf3bc7d2be57cd08dE(ptr noundef nonnull %156, ptr noundef nonnull %192, i64 noundef 1) +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i": ; preds = %183, %._crit_edge.i.i15 + %.sroa.0.0.i.i18 = phi i64 [ %188, %184 ], [ %179, %._crit_edge.i14.i ] + %189 = shl i64 %.sroa.0.0.i.i18, 3 + %190 = sub nuw nsw i64 -8, %189 + %191 = getelementptr inbounds i8, ptr %157, i64 %190 + %192 = sub i64 %.sroa.06.019.i, %.sroa.02.02.i.i13 + %193 = sub i64 %.sroa.0.0.i.i18, %.sroa.02.02.i.i13 + %194 = xor i64 %193, %192 + %.unshifted.i = and i64 %194, %.val11.i + %195 = icmp ult i64 %.unshifted.i, 16 + br i1 %195, label %221, label %196, !prof !291 + +196: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" + %197 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.0.0.i.i18 + %198 = load i8, ptr %197, align 1, !noundef !19 + %199 = lshr i64 %165, 57 + %200 = trunc nuw nsw i64 %199 to i8 + %201 = add i64 %.sroa.0.0.i.i18, -16 + %202 = and i64 %201, %.val11.i + store i8 %200, ptr %197, align 1 + %203 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %204 = getelementptr i8, ptr %203, i64 %202 + %205 = getelementptr i8, ptr %204, i64 16 + store i8 %200, ptr %205, align 1 + %206 = icmp eq i8 %198, -1 + br i1 %206, label %207, label %217 + +207: ; preds = %196 + %208 = add i64 %.sroa.06.019.i, -16 + %209 = load i64, ptr %14, align 8, !alias.scope !281, !noundef !19 + %210 = and i64 %209, %208 + %211 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %212 = getelementptr inbounds nuw i8, ptr %211, i64 %.sroa.06.019.i + store i8 -1, ptr %212, align 1 + %213 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %214 = getelementptr i8, ptr %213, i64 %210 + %215 = getelementptr i8, ptr %214, i64 16 + store i8 -1, ptr %215, align 1 + %216 = load i64, ptr %156, align 1 + store i64 %216, ptr %191, align 1 + br label %218 + +217: ; preds = %196 + invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17hf3bc7d2be57cd08dE(ptr noundef nonnull %156, ptr noundef nonnull %191, i64 noundef 1) to label %_ZN4core3ptr25swap_nonoverlapping_bytes17hcaccaa33b16e7432E.exit.i unwind label %.loopexit.i -219: ; preds = %222, %208, %149 - %220 = icmp ult i64 %.sroa.06.120.i, %17 - %221 = zext i1 %220 to i64 - %.sroa.06.1.i = add nuw i64 %.sroa.06.120.i, %221 - br i1 %220, label %149, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" - -222: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" - %223 = lshr i64 %166, 57 - %224 = trunc nuw nsw i64 %223 to i8 - %225 = add i64 %.sroa.06.019.i, -16 - %226 = and i64 %.val11.i, %225 - %227 = getelementptr inbounds nuw i8, ptr %158, i64 %.sroa.06.019.i - store i8 %224, ptr %227, align 1 - %228 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 - %229 = getelementptr i8, ptr %228, i64 %226 - %230 = getelementptr i8, ptr %229, i64 16 - store i8 %224, ptr %230, align 1 - br label %219 - -231: ; preds = %163 - %232 = landingpad { ptr, i32 } +218: ; preds = %221, %207, %149 + %219 = icmp ult i64 %.sroa.06.120.i, %17 + %220 = zext i1 %219 to i64 + %.sroa.06.1.i = add nuw i64 %.sroa.06.120.i, %220 + br i1 %219, label %149, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" + +221: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17ha7a32fce6d3a8a2dE.exit.i" + %222 = lshr i64 %165, 57 + %223 = trunc nuw nsw i64 %222 to i8 + %224 = add i64 %.sroa.06.019.i, -16 + %225 = and i64 %.val11.i, %224 + %226 = getelementptr inbounds nuw i8, ptr %157, i64 %.sroa.06.019.i + store i8 %223, ptr %226, align 1 + %227 = load ptr, ptr %0, align 8, !alias.scope !281, !nonnull !19, !noundef !19 + %228 = getelementptr i8, ptr %227, i64 %225 + %229 = getelementptr i8, ptr %228, i64 16 + store i8 %223, ptr %229, align 1 + br label %218 + +230: ; preds = %162 + %231 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #26 unreachable -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit": ; preds = %219 - %.pre.i10 = load i64, ptr %14, align 8, !alias.scope !281 - %.pre.i10.fr = freeze i64 %.pre.i10 - %.pre40.i = add i64 %.pre.i10.fr, 1 - %233 = lshr i64 %.pre40.i, 3 - %234 = mul nuw i64 %233, 7 - %235 = icmp ult i64 %.pre.i10.fr, 8 - %spec.select = select i1 %235, i64 %.pre.i10.fr, i64 %234 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit": ; preds = %218 + %.pre.i9 = load i64, ptr %14, align 8, !alias.scope !281 + %.pre.i9.fr = freeze i64 %.pre.i9 + %.pre40.i = add i64 %.pre.i9.fr, 1 + %232 = lshr i64 %.pre40.i, 3 + %233 = mul nuw i64 %232, 7 + %234 = icmp ult i64 %.pre.i9.fr, 8 + %spec.select = select i1 %234, i64 %.pre.i9.fr, i64 %233 %.pre = load i64, ptr %8, align 8, !alias.scope !281 - br label %236 - -236: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit", %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" - %237 = phi i64 [ %9, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] - %238 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %spec.select, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] - %239 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %240 = sub i64 %238, %237 - store i64 %240, ptr %239, align 8, !alias.scope !281 + br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" + +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit", %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" + %235 = phi i64 [ %9, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %.pre, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] + %236 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" ], [ %spec.select, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit" ] + %237 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %238 = sub i64 %236, %235 + store i64 %238, ptr %237, align 8, !alias.scope !281 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !281 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h777a3a14b06f5306E.exit" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h777a3a14b06f5306E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit", %21, %236 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17h777a3a14b06f5306E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit", %21, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17ha521468853458d3eE.exit.thread" %.sroa.4.0.i = phi i64 [ %24, %21 ], [ undef, %236 ], [ %.sroa.14.07.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread" ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit" ] %.sroa.0.0.i = phi i64 [ %23, %21 ], [ -9223372036854775807, %236 ], [ %.sroa.8.06.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17hdb068c07c4eedcecE.exit.thread" ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h82b88708b22e0fe4E.exit" ] - %241 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %242 = insertvalue { i64, i64 } %241, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %242 + %239 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %240 = insertvalue { i64, i64 } %239, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %240 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll b/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll index 07975815d92..4670b918327 100644 --- a/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll +++ b/bench/qdrant-rs/optimized/14hho85eanhsaepf.ll @@ -1584,7 +1584,7 @@ common.resume: ; preds = %174, %76 %.not.not4.i.i = icmp eq i64 %22, 0 br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread, label %.lr.ph.i.i9 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread: ; preds = %147 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread:; preds = %147 %148 = icmp ne ptr %.val16.i, null tail call void @llvm.assume(i1 %148) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !308 @@ -1600,16 +1600,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.threa tail call void @llvm.assume(i1 %152) br label %167 -._crit_edge.i.i10: ; preds = %167 +._crit_edge.i.i10:; preds = %167 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %22, i64 16) %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %22, i64 16) %153 = getelementptr inbounds i8, ptr %.val16.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %153, ptr nonnull align 1 %.val16.i, i64 %spec.select28.i, i1 false), !noalias !308 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !308 - %154 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store ptr @"_ZN4core3ptr85drop_in_place$LT$$LP$alloc..borrow..Cow$LT$str$GT$$C$serde_json..value..Value$RP$$GT$17hc5f4d9c7a396909eE.llvm.17854369902771195939", ptr %154, align 8, !noalias !308 - %155 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store i64 56, ptr %155, align 8, !noalias !308 + %161 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr @"_ZN4core3ptr85drop_in_place$LT$$LP$alloc..borrow..Cow$LT$str$GT$$C$serde_json..value..Value$RP$$GT$17hc5f4d9c7a396909eE.llvm.17854369902771195939", ptr %161, align 8, !noalias !308 + %162 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store i64 56, ptr %162, align 8, !noalias !308 store ptr %0, ptr %8, align 8, !noalias !308 %.sroa.0.sroa.4.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 8 %.sroa.0.sroa.5.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 16 @@ -1617,20 +1617,20 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.threa %.sroa.0.sroa.7.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 32 %.sroa.0.sroa.8.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 40 %.sroa.0.sroa.9.0..sroa_idx.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 48 - %156 = getelementptr inbounds nuw i8, ptr %7, i64 56 - %157 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %158 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %159 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %160 = load i64, ptr %2, align 8 - %161 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %162 = load i64, ptr %161, align 8 - %163 = xor i64 %160, 8317987319222330741 - %164 = xor i64 %162, 7237128888997146477 - %165 = xor i64 %160, 7816392313619706465 - %166 = xor i64 %162, 8387220255154660723 + %163 = getelementptr inbounds nuw i8, ptr %7, i64 56 + %164 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %165 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %166 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %167 = load i64, ptr %2, align 8 + %168 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %169 = load i64, ptr %168, align 8 + %170 = xor i64 %167, 8317987319222330741 + %171 = xor i64 %169, 7237128888997146477 + %172 = xor i64 %167, 7816392313619706465 + %173 = xor i64 %169, 8387220255154660723 br label %176 -167: ; preds = %167, %.lr.ph.i.i9 +174: ; preds = %167, %.lr.ph.i.i9 %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %169, %167 ] %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %168, %167 ] %168 = add i64 %.sroa.5.05.i.i, -1 @@ -1656,8 +1656,8 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.threa %178 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 %179 = getelementptr inbounds i8, ptr %178, i64 %.sroa.02.08.i %180 = load i8, ptr %179, align 1, !noundef !7 - %.not.i11 = icmp eq i8 %180, -128 - br i1 %.not.i11, label %181, label %281 + %.not.i10 = icmp eq i8 %180, -128 + br i1 %.not.i10, label %181, label %281 181: ; preds = %176 %.neg.i = mul i64 %.sroa.02.08.i, -56 @@ -1676,12 +1676,12 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor %187 = getelementptr inbounds i8, ptr %186, i64 -56 call void @llvm.experimental.noalias.scope.decl(metadata !322) call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7), !noalias !325 - store i64 %163, ptr %7, align 8, !alias.scope !327, !noalias !330 - store i64 %165, ptr %.sroa.0.sroa.4.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %164, ptr %.sroa.0.sroa.5.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %166, ptr %.sroa.0.sroa.6.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %160, ptr %.sroa.0.sroa.7.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 - store i64 %162, ptr %.sroa.0.sroa.8.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %170, ptr %7, align 8, !alias.scope !327, !noalias !330 + store i64 %172, ptr %.sroa.0.sroa.4.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %171, ptr %.sroa.0.sroa.5.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %173, ptr %.sroa.0.sroa.6.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %167, ptr %.sroa.0.sroa.7.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 + store i64 %169, ptr %.sroa.0.sroa.8.0..sroa_idx.i.i.i, align 8, !alias.scope !327, !noalias !330 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.0.sroa.9.0..sroa_idx.i.i.i, i8 0, i64 24, i1 false), !alias.scope !327, !noalias !330 call void @llvm.experimental.noalias.scope.decl(metadata !332) %188 = load i64, ptr %187, align 8, !range !35, !alias.scope !335, !noalias !338, !noundef !7 @@ -1708,13 +1708,13 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor invoke void @"_ZN71_$LT$core..hash..sip..Hasher$LT$S$GT$$u20$as$u20$core..hash..Hasher$GT$5write17hdd82c62c8a9c99c3E.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %199, i64 noundef %200) to label %.noexc20.i unwind label %174 -.noexc20.i: ; preds = %"_ZN4core4hash5impls52_$LT$impl$u20$core..hash..Hash$u20$for$u20$$RF$T$GT$4hash17h0109a3c227b2f635E.llvm.7778471099111231181.exit.i.i" +.noexc19.i: ; preds = %"_ZN4core4hash5impls52_$LT$impl$u20$core..hash..Hash$u20$for$u20$$RF$T$GT$4hash17h0109a3c227b2f635E.llvm.7778471099111231181.exit.i.i" call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6), !noalias !344 store i8 -1, ptr %6, align 1, !noalias !344 invoke void @"_ZN71_$LT$core..hash..sip..Hasher$LT$S$GT$$u20$as$u20$core..hash..Hasher$GT$5write17hdd82c62c8a9c99c3E.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %6, i64 noundef 1) to label %.noexc21.i unwind label %174 -.noexc21.i: ; preds = %.noexc20.i +.noexc20.i: ; preds = %.noexc19.i call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6), !noalias !344 call void @llvm.experimental.noalias.scope.decl(metadata !351) call void @llvm.experimental.noalias.scope.decl(metadata !354) @@ -1722,71 +1722,71 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull readonly align 8 dereferenceable(72) %7, i64 32, i1 false), !noalias !325 %201 = load i64, ptr %.sroa.0.sroa.9.0..sroa_idx.i.i.i, align 8, !alias.scope !358, !noalias !325, !noundef !7 %202 = shl i64 %201, 56 - %203 = load i64, ptr %156, align 8, !alias.scope !358, !noalias !325, !noundef !7 + %203 = load i64, ptr %163, align 8, !alias.scope !358, !noalias !325, !noundef !7 %204 = or i64 %202, %203 - %205 = load i64, ptr %157, align 8, !noalias !357, !noundef !7 + %205 = load i64, ptr %164, align 8, !noalias !357, !noundef !7 %206 = xor i64 %205, %204 - store i64 %206, ptr %157, align 8, !noalias !357 + store i64 %206, ptr %164, align 8, !noalias !357 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17h335b7146b8b370bdE.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %.noexc22.i unwind label %174 -.noexc22.i: ; preds = %.noexc21.i +.noexc21.i: ; preds = %.noexc20.i %207 = load i64, ptr %5, align 8, !noalias !357, !noundef !7 %208 = xor i64 %207, %204 store i64 %208, ptr %5, align 8, !noalias !357 - %209 = load i64, ptr %158, align 8, !noalias !357, !noundef !7 + %209 = load i64, ptr %165, align 8, !noalias !357, !noundef !7 %210 = xor i64 %209, 255 - store i64 %210, ptr %158, align 8, !noalias !357 + store i64 %210, ptr %165, align 8, !noalias !357 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17hb9c1f1437bde9803E.llvm.7778471099111231181"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %211 unwind label %174 -211: ; preds = %.noexc22.i +211: ; preds = %.noexc21.i %212 = load i64, ptr %5, align 8, !noalias !357, !noundef !7 - %213 = load i64, ptr %159, align 8, !noalias !357, !noundef !7 + %213 = load i64, ptr %166, align 8, !noalias !357, !noundef !7 %214 = xor i64 %213, %212 - %215 = load i64, ptr %158, align 8, !noalias !357, !noundef !7 + %215 = load i64, ptr %165, align 8, !noalias !357, !noundef !7 %216 = xor i64 %214, %215 - %217 = load i64, ptr %157, align 8, !noalias !357, !noundef !7 + %217 = load i64, ptr %164, align 8, !noalias !357, !noundef !7 %218 = xor i64 %216, %217 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5), !noalias !357 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7), !noalias !325 - %.val.i15 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 + %.val.i14 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 %.val15.i = load i64, ptr %19, align 8, !alias.scope !308, !noundef !7 - %.sroa.0.05.i.i16 = and i64 %.val15.i, %218 - %219 = getelementptr inbounds i8, ptr %.val.i15, i64 %.sroa.0.05.i.i16 - %.0.copyload.i46.i.i17 = load <16 x i8>, ptr %219, align 1, !noalias !359 - %220 = icmp slt <16 x i8> %.0.copyload.i46.i.i17, zeroinitializer + %.sroa.0.05.i.i15 = and i64 %.val15.i, %218 + %219 = getelementptr inbounds i8, ptr %.val.i14, i64 %.sroa.0.05.i.i15 + %.0.copyload.i46.i.i16 = load <16 x i8>, ptr %219, align 1, !noalias !359 + %220 = icmp slt <16 x i8> %.0.copyload.i46.i.i16, zeroinitializer %221 = bitcast <16 x i1> %220 to i16 - %.not.i.not7.i.i18 = icmp eq i16 %221, 0 - br i1 %.not.i.not7.i.i18, label %.lr.ph.i19.i, label %._crit_edge.i18.i + %.not.i.not7.i.i17 = icmp eq i16 %221, 0 + br i1 %.not.i.not7.i.i17, label %.lr.ph.i18.i, label %._crit_edge.i.i18 -.lr.ph.i19.i: ; preds = %211, %.lr.ph.i19.i - %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ], [ %.sroa.0.05.i.i16, %211 ] +.lr.ph.i18.i: ; preds = %211, %.lr.ph.i18.i + %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ], [ %.sroa.0.05.i.i15, %211 ] %.sroa.7.08.i.i24 = phi i64 [ %222, %.lr.ph.i19.i ], [ 0, %211 ] %222 = add i64 %.sroa.7.08.i.i24, 16 %223 = add i64 %222, %.sroa.0.09.i.i23 %.sroa.0.0.i.i25 = and i64 %223, %.val15.i - %224 = getelementptr inbounds i8, ptr %.val.i15, i64 %.sroa.0.0.i.i25 + %224 = getelementptr inbounds i8, ptr %.val.i14, i64 %.sroa.0.0.i.i25 %.0.copyload.i4.i.i26 = load <16 x i8>, ptr %224, align 1, !noalias !359 %225 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer %226 = bitcast <16 x i1> %225 to i16 %.not.i.not.i.i27 = icmp eq i16 %226, 0 - br i1 %.not.i.not.i.i27, label %.lr.ph.i19.i, label %._crit_edge.i18.i + br i1 %.not.i.not.i.i27, label %.lr.ph.i18.i, label %._crit_edge.i.i18 -._crit_edge.i18.i: ; preds = %.lr.ph.i19.i, %211 - %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i16, %211 ], [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ] +._crit_edge.i.i18: ; preds = %.lr.ph.i18.i, %211 + %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i15, %211 ], [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ] %.lcssa.i.i20 = phi i16 [ %221, %211 ], [ %226, %.lr.ph.i19.i ] %227 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i20, i1 true) %228 = zext nneg i16 %227 to i64 %229 = add i64 %.sroa.0.0.lcssa.i.i19, %228 %230 = and i64 %229, %.val15.i - %231 = getelementptr inbounds i8, ptr %.val.i15, i64 %230 + %231 = getelementptr inbounds i8, ptr %.val.i14, i64 %230 %232 = load i8, ptr %231, align 1, !noundef !7 %233 = icmp sgt i8 %232, -1 br i1 %233, label %234, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i -234: ; preds = %._crit_edge.i18.i - %235 = load <16 x i8>, ptr %.val.i15, align 16, !noalias !362 +234: ; preds = %._crit_edge.i.i18 + %235 = load <16 x i8>, ptr %.val.i14, align 16, !noalias !362 %236 = icmp slt <16 x i8> %235, zeroinitializer %237 = bitcast <16 x i1> %236 to i16 %238 = icmp ne i16 %237, 0 @@ -1795,10 +1795,10 @@ _ZN4core3ptr19swap_nonoverlapping17he2c990978cc08ecbE.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %238) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; preds = %234, %._crit_edge.i18.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; preds = %234, %._crit_edge.i.i18 %.0.i.i.i21 = phi i64 [ %240, %234 ], [ %230, %._crit_edge.i18.i ] - %241 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i16 - %242 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i16 + %241 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i15 + %242 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i15 %243 = xor i64 %242, %241 %.unshifted.i = and i64 %243, %.val15.i %244 = icmp ult i64 %.unshifted.i, 16 @@ -1806,9 +1806,9 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; 245: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i %.neg14.i = mul i64 %.0.i.i.i21, -56 - %246 = getelementptr i8, ptr %.val.i15, i64 %.neg14.i + %246 = getelementptr i8, ptr %.val.i14, i64 %.neg14.i %247 = getelementptr i8, ptr %246, i64 -56 - %248 = getelementptr inbounds i8, ptr %.val.i15, i64 %.0.i.i.i21 + %248 = getelementptr inbounds i8, ptr %.val.i14, i64 %.0.i.i.i21 %249 = load i8, ptr %248, align 1, !noundef !7 %250 = lshr i64 %218, 57 %251 = trunc nuw nsw i64 %250 to i8 @@ -1827,7 +1827,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; %260 = trunc nuw nsw i64 %259 to i8 %261 = add i64 %.sroa.02.08.i, -16 %262 = and i64 %.val15.i, %261 - %263 = getelementptr inbounds i8, ptr %.val.i15, i64 %.sroa.02.08.i + %263 = getelementptr inbounds i8, ptr %.val.i14, i64 %.sroa.02.08.i store i8 %260, ptr %263, align 1 %264 = load ptr, ptr %0, align 8, !alias.scope !308, !nonnull !7, !noundef !7 %265 = getelementptr i8, ptr %264, i64 %262 @@ -1862,8 +1862,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.exit.i: ; br label %281 281: ; preds = %272, %258, %176 - %exitcond.not.i12 = icmp eq i64 %.sroa.02.08.i, %20 - br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, label %176 + %exitcond.not.i11 = icmp eq i64 %.sroa.02.08.i, %20 + br i1 %exitcond.not.i11, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, label %176 282: ; preds = %174 %283 = landingpad { ptr, i32 } @@ -1880,26 +1880,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit: ; pr %286 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %286, i64 %.pre15.i.fr, i64 %285 %.pre = load i64, ptr %11, align 8, !alias.scope !308 - br label %287 - -287: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread - %288 = phi i64 [ %12, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] - %289 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] - %290 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %291 = sub i64 %289, %288 - store i64 %291, ptr %290, align 8, !alias.scope !308 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread + %287 = phi i64 [ %12, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] + %288 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit ] + %289 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %290 = sub i64 %288, %287 + store i64 %290, ptr %289, align 8, !alias.scope !308 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8), !noalias !308 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i: ; preds = %75, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit", %287 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i: ; preds = %75, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h219538e3b4492417E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %287 ], [ %.sroa.9.050.ph, %75 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit" ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %287 ], [ %.sroa.5.052.ph, %75 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h79ea30c1aaa11cd2E.exit" ] - %292 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %293 = insertvalue { i64, i64 } %292, i64 %.sroa.4.1.i, 1 + %291 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %292 = insertvalue { i64, i64 } %291, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hd521649ce15b7224E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hd521649ce15b7224E.exit: ; preds = %16, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i - %.merged.i = phi { i64, i64 } [ %17, %16 ], [ %293, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i ] + %.merged.i = phi { i64, i64 } [ %17, %16 ], [ %292, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h4d8cfaadd0c9cbd4E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll b/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll index 4813baf38e5..17052481171 100644 --- a/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll +++ b/bench/qdrant-rs/optimized/1604xuzoa424d8h4.ll @@ -688,7 +688,7 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res store i64 8, ptr %.sroa.622.i.i.sroa.4.0..sroa.622.0..sroa_idx.i.i.sroa_idx, align 8, !noalias !89 %.sroa.622.i.i.sroa.5.0..sroa.622.0..sroa_idx.i.i.sroa_idx = getelementptr inbounds nuw i8, ptr %6, i64 40 store i64 16, ptr %.sroa.622.i.i.sroa.5.0..sroa.622.0..sroa_idx.i.i.sroa_idx, align 8, !noalias !89 - %invariant.gep71 = getelementptr i8, ptr %63, i64 16 + %invariant.gep70 = getelementptr i8, ptr %63, i64 16 %.not = icmp eq i64 %20, 0 br i1 %.not, label %.preheader.preheader, label %.lr.ph @@ -697,12 +697,12 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res .lr.ph: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit" %69 = load ptr, ptr %0, align 8, !alias.scope !89, !nonnull !4, !noundef !4 - %invariant.gep74 = getelementptr i8, ptr %69, i64 -8 + %invariant.gep73 = getelementptr i8, ptr %69, i64 -8 br label %77 "_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread": ; preds = %40, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" - %.sroa.5.045.ph = phi i64 [ %.sroa.6.063.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %42, %40 ] - %.sroa.9.043.ph = phi i64 [ %.sroa.11.05061.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %.sroa.67.0.i.i, %40 ] + %.sroa.5.044.ph = phi i64 [ %.sroa.6.063.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %42, %40 ] + %.sroa.9.042.ph = phi i64 [ %.sroa.11.05061.ph.i.i, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$17new_uninitialized17h4ce739d58aaa4341E.exit.thread.i.i" ], [ %.sroa.67.0.i.i, %40 ] call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6), !noalias !89 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit" @@ -725,15 +725,15 @@ define hidden { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14res br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit, label %.preheader 77: ; preds = %.lr.ph, %.backedge - %.sroa.011.0.i.i73 = phi i64 [ 0, %.lr.ph ], [ %78, %.backedge ] - %78 = add nuw i64 %.sroa.011.0.i.i73, 1 - %79 = getelementptr inbounds i8, ptr %69, i64 %.sroa.011.0.i.i73 + %.sroa.011.0.i.i72 = phi i64 [ 0, %.lr.ph ], [ %78, %.backedge ] + %78 = add nuw i64 %.sroa.011.0.i.i72, 1 + %79 = getelementptr inbounds i8, ptr %69, i64 %.sroa.011.0.i.i72 %80 = load i8, ptr %79, align 1, !noundef !4 %81 = icmp sgt i8 %80, -1 br i1 %81, label %94, label %.backedge .backedge: ; preds = %77, %121 - %exitcond.not = icmp eq i64 %.sroa.011.0.i.i73, %18 + %exitcond.not = icmp eq i64 %.sroa.011.0.i.i72, %18 br i1 %exitcond.not, label %.preheader.preheader, label %77 _ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit: ; preds = %.preheader @@ -765,9 +765,9 @@ _ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit: ; preds = %.preheade br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit" 94: ; preds = %77 - %95 = sub nsw i64 0, %.sroa.011.0.i.i73 - %gep75 = getelementptr i64, ptr %invariant.gep74, i64 %95 - %.val5.i = load i64, ptr %gep75, align 8, !noalias !108, !noundef !4 + %95 = sub nsw i64 0, %.sroa.011.0.i.i72 + %gep74 = getelementptr i64, ptr %invariant.gep73, i64 %95 + %.val5.i = load i64, ptr %gep74, align 8, !noalias !108, !noundef !4 %96 = icmp ult i64 %.val5.i, %3 br i1 %96, label %98, label %97, !prof !112 @@ -830,9 +830,9 @@ _ZN4core3ptr19swap_nonoverlapping17h8ec7aa22e4931921E.exit: ; preds = %.preheade %125 = add i64 %.0.i.i, -16 %126 = and i64 %125, %64 store i8 %124, ptr %122, align 1 - %gep72 = getelementptr i8, ptr %invariant.gep71, i64 %126 - store i8 %124, ptr %gep72, align 1 - %127 = shl i64 %.sroa.011.0.i.i73, 3 + %gep71 = getelementptr i8, ptr %invariant.gep70, i64 %126 + store i8 %124, ptr %gep71, align 1 + %127 = shl i64 %.sroa.011.0.i.i72, 3 %128 = sub nuw nsw i64 -8, %127 %129 = getelementptr inbounds i8, ptr %69, i64 %128 %130 = shl i64 %.0.i.i, 3 @@ -852,7 +852,7 @@ common.resume: ; preds = %148, %70 %.not.not4.i.i = icmp eq i64 %20, 0 br i1 %.not.not4.i.i, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread", label %.lr.ph.i.i11 -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread": ; preds = %134 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread":; preds = %134 %135 = icmp ne ptr %.val.i10, null tail call void @llvm.assume(i1 %135) br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" @@ -865,23 +865,23 @@ common.resume: ; preds = %148, %70 %.0.i.i.i.i.i = add nuw nsw i64 %136, %138 %139 = icmp ne ptr %.val.i10, null tail call void @llvm.assume(i1 %139) - br label %141 + br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i" -._crit_edge.i.i12: ; preds = %141 +._crit_edge.i.i12:; preds = %141 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %20, i64 16) %spec.select66.i = tail call i64 @llvm.umin.i64(i64 %20, i64 16) %140 = getelementptr inbounds i8, ptr %.val.i10, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %140, ptr nonnull align 1 %.val.i10, i64 %spec.select66.i, i1 false), !noalias !122 %invariant.gep65 = getelementptr i8, ptr %.val.i10, i64 -8 %invariant.gep67 = getelementptr i8, ptr %.val.i10, i64 16 - br label %152 + br label %.lr.ph24.i -141: ; preds = %141, %.lr.ph.i.i11 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$23prepare_rehash_in_place17hb5fb7b7dadfd5e34E.exit.i": ; preds = %141, %.lr.ph.i.i11 %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i11 ], [ %143, %141 ] %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i11 ], [ %142, %141 ] %142 = add i64 %.sroa.5.05.i.i, -1 %143 = add i64 %.sroa.01.06.i.i, 16 - %144 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.01.06.i.i + %147 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.01.06.i.i %145 = load <16 x i8>, ptr %144, align 16, !noalias !125 %.lobit.i.i.i = ashr <16 x i8> %145, splat (i8 7) %146 = bitcast <16 x i8> %.lobit.i.i.i to <2 x i64> @@ -898,30 +898,30 @@ common.resume: ; preds = %148, %70 store i64 %151, ptr %150, align 8, !noalias !131 br label %common.resume -152: ; preds = %209, %._crit_edge.i.i12 +.lr.ph24.i: ; preds = %209, %._crit_edge.i.i12 %.sroa.02.023.i = phi i64 [ 0, %._crit_edge.i.i12 ], [ %153, %209 ] - %153 = add nuw i64 %.sroa.02.023.i, 1 - %154 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.02.023.i - %155 = load i8, ptr %154, align 1, !noundef !4 - %.not.i13 = icmp eq i8 %155, -128 - br i1 %.not.i13, label %156, label %209 - -156: ; preds = %152 - %157 = shl i64 %.sroa.02.023.i, 3 - %158 = sub nuw nsw i64 -8, %157 - %159 = getelementptr inbounds i8, ptr %.val.i10, i64 %158 - %160 = sub nsw i64 0, %.sroa.02.023.i - %gep66 = getelementptr i64, ptr %invariant.gep65, i64 %160 - %.val5.i17.i = load i64, ptr %gep66, align 8, !noalias !136, !noundef !4 - %161 = icmp ult i64 %.val5.i17.i, %3 - br i1 %161, label %.lr.ph.i, label %._crit_edge.i, !prof !140 + %152 = add nuw i64 %.sroa.02.023.i, 1 + %153 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.02.023.i + %154 = load i8, ptr %153, align 1, !noundef !4 + %.not.i12 = icmp eq i8 %154, -128 + br i1 %.not.i12, label %155, label %208 + +155: ; preds = %.lr.ph24.i + %156 = shl i64 %.sroa.02.023.i, 3 + %157 = sub nuw nsw i64 -8, %156 + %158 = getelementptr inbounds i8, ptr %.val.i10, i64 %157 + %159 = sub nsw i64 0, %.sroa.02.023.i + %gep65 = getelementptr i64, ptr %invariant.gep65, i64 %159 + %.val5.i17.i = load i64, ptr %gep65, align 8, !noalias !136, !noundef !4 + %160 = icmp ult i64 %.val5.i17.i, %3 + br i1 %160, label %.lr.ph.i, label %._crit_edge.i, !prof !140 _ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i: ; preds = %.preheader.i - %.val5.i.i = load i64, ptr %gep66, align 8, !noalias !141, !noundef !4 - %162 = icmp ult i64 %.val5.i.i, %3 - br i1 %162, label %.lr.ph.i, label %._crit_edge.i, !prof !143 + %.val5.i.i = load i64, ptr %gep65, align 8, !noalias !141, !noundef !4 + %161 = icmp ult i64 %.val5.i.i, %3 + br i1 %161, label %.lr.ph.i, label %._crit_edge.i, !prof !143 -._crit_edge.i: ; preds = %156, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i +._crit_edge.i: ; preds = %155, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i %.val5.i.lcssa.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i ], [ %.val5.i17.i, %156 ] invoke void @_ZN4core9panicking18panic_bounds_check17he5254f424ac3a4c4E(i64 noundef %.val5.i.lcssa.i, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.7e20509450ee5745c10100bff534e0f7.10) #36 to label %.noexc.i unwind label %148 @@ -929,80 +929,80 @@ _ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i: ; preds = .noexc.i: ; preds = %._crit_edge.i unreachable -.lr.ph.i: ; preds = %156, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i +.lr.ph.i: ; preds = %155, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i %.val5.i19.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i ], [ %.val5.i17.i, %156 ] - %163 = getelementptr inbounds [0 x { { { { i64, ptr, {} }, i64 } }, { i64, [30 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i19.i, i32 2 - %164 = load i64, ptr %163, align 8, !noalias !144, !noundef !4 - %.sroa.0.015.i.i18 = and i64 %164, %18 - %165 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.015.i.i18 - %.0.copyload.i1316.i.i19 = load <16 x i8>, ptr %165, align 1, !noalias !146 - %166 = icmp slt <16 x i8> %.0.copyload.i1316.i.i19, zeroinitializer - %167 = bitcast <16 x i1> %166 to i16 - %.not17.i.i20 = icmp eq i16 %167, 0 - br i1 %.not17.i.i20, label %.lr.ph.i19.i, label %._crit_edge.i18.i - -._crit_edge.i18.i: ; preds = %.lr.ph.i19.i, %.lr.ph.i - %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.015.i.i18, %.lr.ph.i ], [ %.sroa.0.0.i.i28, %.lr.ph.i19.i ] - %.lcssa.i.i22 = phi i16 [ %167, %.lr.ph.i ], [ %178, %.lr.ph.i19.i ] - %168 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i22, i1 true) - %169 = zext nneg i16 %168 to i64 - %170 = add i64 %.sroa.0.0.lcssa.i.i21, %169 - %171 = and i64 %170, %18 - %172 = getelementptr inbounds i8, ptr %.val.i10, i64 %171 - %173 = load i8, ptr %172, align 1, !noalias !151, !noundef !4 - %cond.i.i23 = icmp sgt i8 %173, -1 - br i1 %cond.i.i23, label %179, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" - -.lr.ph.i19.i: ; preds = %.lr.ph.i, %.lr.ph.i19.i - %.sroa.0.019.i.i26 = phi i64 [ %.sroa.0.0.i.i28, %.lr.ph.i19.i ], [ %.sroa.0.015.i.i18, %.lr.ph.i ] - %.sroa.9.018.i.i27 = phi i64 [ %174, %.lr.ph.i19.i ], [ 0, %.lr.ph.i ] - %174 = add i64 %.sroa.9.018.i.i27, 16 - %175 = add i64 %174, %.sroa.0.019.i.i26 - %.sroa.0.0.i.i28 = and i64 %175, %18 - %176 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.0.i.i28 - %.0.copyload.i13.i.i29 = load <16 x i8>, ptr %176, align 1, !noalias !146 - %177 = icmp slt <16 x i8> %.0.copyload.i13.i.i29, zeroinitializer - %178 = bitcast <16 x i1> %177 to i16 - %.not.i.i30 = icmp eq i16 %178, 0 - br i1 %.not.i.i30, label %.lr.ph.i19.i, label %._crit_edge.i18.i - -179: ; preds = %._crit_edge.i18.i - %180 = load <16 x i8>, ptr %.val.i10, align 16, !noalias !152 - %181 = icmp slt <16 x i8> %180, zeroinitializer - %182 = bitcast <16 x i1> %181 to i16 - %183 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %182, i1 false) - %184 = zext nneg i16 %183 to i64 + %162 = getelementptr inbounds [0 x { { { { i64, ptr, {} }, i64 } }, { i64, [30 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i19.i, i32 2 + %163 = load i64, ptr %162, align 8, !noalias !144, !noundef !4 + %.sroa.0.015.i.i17 = and i64 %163, %18 + %164 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.015.i.i17 + %.0.copyload.i1316.i.i18 = load <16 x i8>, ptr %164, align 1, !noalias !146 + %165 = icmp slt <16 x i8> %.0.copyload.i1316.i.i18, zeroinitializer + %166 = bitcast <16 x i1> %165 to i16 + %.not17.i.i19 = icmp eq i16 %166, 0 + br i1 %.not17.i.i19, label %.lr.ph.i18.i, label %._crit_edge.i.i20 + +._crit_edge.i.i20: ; preds = %.lr.ph.i18.i, %.lr.ph.i + %.sroa.0.0.lcssa.i.i21 = phi i64 [ %.sroa.0.015.i.i17, %.lr.ph.i ], [ %.sroa.0.0.i.i28, %.lr.ph.i19.i ] + %.lcssa.i.i22 = phi i16 [ %166, %.lr.ph.i ], [ %177, %.lr.ph.i19.i ] + %167 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i22, i1 true) + %168 = zext nneg i16 %167 to i64 + %169 = add i64 %.sroa.0.0.lcssa.i.i21, %168 + %170 = and i64 %169, %18 + %171 = getelementptr inbounds i8, ptr %.val.i10, i64 %170 + %172 = load i8, ptr %171, align 1, !noalias !151, !noundef !4 + %cond.i.i23 = icmp sgt i8 %172, -1 + br i1 %cond.i.i23, label %178, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" + +.lr.ph.i18.i: ; preds = %.lr.ph.i, %.lr.ph.i18.i + %.sroa.0.019.i.i26 = phi i64 [ %.sroa.0.0.i.i28, %.lr.ph.i19.i ], [ %.sroa.0.015.i.i17, %.lr.ph.i ] + %.sroa.9.018.i.i27 = phi i64 [ %173, %.lr.ph.i19.i ], [ 0, %.lr.ph.i ] + %173 = add i64 %.sroa.9.018.i.i27, 16 + %174 = add i64 %173, %.sroa.0.019.i.i26 + %.sroa.0.0.i.i28 = and i64 %174, %18 + %175 = getelementptr inbounds i8, ptr %.val.i10, i64 %.sroa.0.0.i.i28 + %.0.copyload.i13.i.i29 = load <16 x i8>, ptr %175, align 1, !noalias !146 + %176 = icmp slt <16 x i8> %.0.copyload.i13.i.i29, zeroinitializer + %177 = bitcast <16 x i1> %176 to i16 + %.not.i.i30 = icmp eq i16 %177, 0 + br i1 %.not.i.i30, label %.lr.ph.i18.i, label %._crit_edge.i.i20 + +178: ; preds = %._crit_edge.i.i20 + %179 = load <16 x i8>, ptr %.val.i10, align 16, !noalias !152 + %180 = icmp slt <16 x i8> %179, zeroinitializer + %181 = bitcast <16 x i1> %180 to i16 + %182 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %181, i1 false) + %183 = zext nneg i16 %182 to i64 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i": ; preds = %179, %._crit_edge.i18.i - %.0.i.i24 = phi i64 [ %184, %179 ], [ %171, %._crit_edge.i18.i ] - %185 = shl i64 %.0.i.i24, 3 - %186 = sub nuw nsw i64 -8, %185 - %187 = getelementptr inbounds i8, ptr %.val.i10, i64 %186 - %188 = sub i64 %.sroa.02.023.i, %.sroa.0.015.i.i18 - %189 = sub i64 %.0.i.i24, %.sroa.0.015.i.i18 - %190 = xor i64 %189, %188 - %.unshifted.i = and i64 %190, %18 - %191 = icmp ult i64 %.unshifted.i, 16 - br i1 %191, label %.critedge.i, label %192 - -192: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" - %193 = getelementptr inbounds i8, ptr %.val.i10, i64 %.0.i.i24 - %194 = load i8, ptr %193, align 1, !noundef !4 - %195 = lshr i64 %164, 57 - %196 = trunc nuw nsw i64 %195 to i8 - %197 = add i64 %.0.i.i24, -16 - %198 = and i64 %197, %18 - store i8 %196, ptr %193, align 1 - %gep = getelementptr i8, ptr %invariant.gep67, i64 %198 - store i8 %196, ptr %gep, align 1 - %199 = icmp eq i8 %194, -1 - br i1 %199, label %205, label %.preheader.i - -.preheader.i: ; preds = %192, %.preheader.i +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i": ; preds = %178, %._crit_edge.i.i20 + %.0.i.i24 = phi i64 [ %183, %179 ], [ %170, %._crit_edge.i18.i ] + %184 = shl i64 %.0.i.i24, 3 + %185 = sub nuw nsw i64 -8, %184 + %186 = getelementptr inbounds i8, ptr %.val.i10, i64 %185 + %187 = sub i64 %.sroa.02.023.i, %.sroa.0.015.i.i17 + %188 = sub i64 %.0.i.i24, %.sroa.0.015.i.i17 + %189 = xor i64 %188, %187 + %.unshifted.i = and i64 %189, %18 + %190 = icmp ult i64 %.unshifted.i, 16 + br i1 %190, label %.critedge.i, label %191 + +191: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" + %192 = getelementptr inbounds i8, ptr %.val.i10, i64 %.0.i.i24 + %193 = load i8, ptr %192, align 1, !noundef !4 + %194 = lshr i64 %163, 57 + %195 = trunc nuw nsw i64 %194 to i8 + %196 = add i64 %.0.i.i24, -16 + %197 = and i64 %196, %18 + store i8 %195, ptr %192, align 1 + %gep = getelementptr i8, ptr %invariant.gep67, i64 %197 + store i8 %195, ptr %gep, align 1 + %198 = icmp eq i8 %193, -1 + br i1 %198, label %204, label %.preheader.i + +.preheader.i: ; preds = %191, %.preheader.i %.0910.i.i = phi i64 [ %204, %.preheader.i ], [ 0, %192 ] - %200 = getelementptr inbounds nuw i8, ptr %159, i64 %.0910.i.i - %201 = getelementptr inbounds nuw i8, ptr %187, i64 %.0910.i.i + %199 = getelementptr inbounds nuw i8, ptr %158, i64 %.0910.i.i + %200 = getelementptr inbounds nuw i8, ptr %186, i64 %.0910.i.i %202 = load i8, ptr %200, align 1 %203 = load i8, ptr %201, align 1 store i8 %203, ptr %200, align 1 @@ -1011,43 +1011,43 @@ _ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i: ; preds = %exitcond.not.i.i = icmp eq i64 %204, 8 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping17hb35a552560e57948E.exit.loopexit.i, label %.preheader.i -205: ; preds = %192 - %206 = add i64 %.sroa.02.023.i, -16 - %207 = and i64 %206, %18 - store i8 -1, ptr %154, align 1 - %gep68 = getelementptr i8, ptr %invariant.gep67, i64 %207 - store i8 -1, ptr %gep68, align 1 - %208 = load i64, ptr %159, align 1 - store i64 %208, ptr %187, align 1 - br label %209 +204: ; preds = %191 + %205 = add i64 %.sroa.02.023.i, -16 + %206 = and i64 %205, %18 + store i8 -1, ptr %153, align 1 + %gep67 = getelementptr i8, ptr %invariant.gep67, i64 %206 + store i8 -1, ptr %gep67, align 1 + %207 = load i64, ptr %158, align 1 + store i64 %207, ptr %186, align 1 + br label %208 -209: ; preds = %.critedge.i, %205, %152 - %exitcond.not.i14 = icmp eq i64 %.sroa.02.023.i, %18 - br i1 %exitcond.not.i14, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit", label %152 +208: ; preds = %.critedge.i, %204, %.lr.ph24.i + %exitcond.not.i13 = icmp eq i64 %.sroa.02.023.i, %18 + br i1 %exitcond.not.i13, label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread", label %.lr.ph24.i .critedge.i: ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$16find_insert_slot17hbbbb8ea0ccb4d81eE.llvm.15013605650928588248.exit.i" - %210 = lshr i64 %164, 57 - %211 = trunc nuw nsw i64 %210 to i8 - %212 = add i64 %.sroa.02.023.i, -16 - %213 = and i64 %212, %18 - store i8 %211, ptr %154, align 1 - %gep70 = getelementptr i8, ptr %invariant.gep67, i64 %213 - store i8 %211, ptr %gep70, align 1 - br label %209 - -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit": ; preds = %209, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" - %214 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" ], [ %.0.i, %209 ] - %215 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %216 = sub i64 %214, %8 - store i64 %216, ptr %215, align 8, !alias.scope !122 + %209 = lshr i64 %163, 57 + %210 = trunc nuw nsw i64 %209 to i8 + %211 = add i64 %.sroa.02.023.i, -16 + %212 = and i64 %211, %18 + store i8 %210, ptr %153, align 1 + %gep69 = getelementptr i8, ptr %invariant.gep67, i64 %212 + store i8 %210, ptr %gep69, align 1 + br label %208 + +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread": ; preds = %208, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" + %213 = phi i64 [ 0, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" ], [ %.0.i, %209 ] + %214 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %215 = sub i64 %213, %8 + store i64 %215, ptr %214, align 8, !alias.scope !122 br label %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit" -"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit", %12, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" - %.sroa.4.0.i = phi i64 [ %15, %12 ], [ undef, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" ], [ %.sroa.9.043.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] - %.sroa.0.0.i = phi i64 [ %14, %12 ], [ -9223372036854775807, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" ], [ %.sroa.5.045.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] - %217 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %218 = insertvalue { i64, i64 } %217, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %218 +"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$20reserve_rehash_inner17hf345efce35d71c39E.exit": ; preds = %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread", %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit", %12, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit.thread" + %.sroa.4.0.i = phi i64 [ %15, %12 ], [ undef, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" ], [ %.sroa.9.042.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ undef, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] + %.sroa.0.0.i = phi i64 [ %14, %12 ], [ -9223372036854775807, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$15rehash_in_place17h15ad34688f435122E.exit" ], [ %.sroa.5.044.ph, %"_ZN9hashbrown3raw5inner22RawTableInner$LT$A$GT$14prepare_resize17h0668aad5c537136eE.exit.thread" ], [ -9223372036854775807, %"_ZN4core3ptr284drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$$C$hashbrown..raw..inner..RawTableInner$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..prepare_resize..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7d4a31a1c977efeaE.exit" ] + %216 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %217 = insertvalue { i64, i64 } %216, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %217 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll b/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll index 7fe139463a4..6dffd24cdec 100644 --- a/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll +++ b/bench/ripgrep-rs/optimized/f8chif48dhkcb7u.ll @@ -1866,17 +1866,17 @@ define internal fastcc void @_ZN9hashbrown3raw13RawTableInner15rehash_in_place17 %.val17 = load i64, ptr %6, align 8, !noundef !4 %7 = add i64 %.val17, 1 %.not.not4.i = icmp eq i64 %7, 0 - br i1 %.not.not4.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23, label %.lr.ph.i + br i1 %.not.not4.i, label %12, label %12 -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23: ; preds = %4 - %8 = icmp ne ptr %.val, null - tail call void @llvm.assume(i1 %8) +.lr.ph.i: ; preds = %4 + %11 = icmp ne ptr %.val, null + tail call void @llvm.assume(i1 %11) %9 = getelementptr inbounds nuw i8, ptr %.val, i64 16 tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %9, ptr nonnull align 1 %.val, i64 %7, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) br label %._crit_edge -.lr.ph.i: ; preds = %4 +12: ; preds = %4 %10 = lshr i64 %7, 4 %11 = and i64 %7, 15 %.not.i.i.i.i = icmp ne i64 %11, 0 @@ -1886,16 +1886,16 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.ex tail call void @llvm.assume(i1 %13) br label %17 -._crit_edge.i: ; preds = %17 +._crit_edge.i:; preds = %17 %spec.select = tail call i64 @llvm.umax.i64(i64 %7, i64 16) %spec.select33 = tail call i64 @llvm.umin.i64(i64 %7, i64 16) %14 = getelementptr inbounds i8, ptr %.val, i64 %spec.select tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %14, ptr nonnull align 1 %.val, i64 %spec.select33, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %15, align 8 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %16, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph @@ -1917,138 +1917,138 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.ex %25 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hc8cd03725d4e589eE"(ptr noalias noundef align 8 dereferenceable(24) %5) #41 - to label %108 unwind label %106 + to label %108 unwind label %105 -._crit_edge.loopexit: ; preds = %105 +._crit_edge.loopexit: ; preds = %104 %.pre = load i64, ptr %6, align 8 %.pre19 = add i64 %.pre, 1 - %26 = lshr i64 %.pre19, 3 - %27 = mul nuw i64 %26, 7 + %25 = lshr i64 %.pre19, 3 + %26 = mul nuw i64 %25, 7 br label %._crit_edge ._crit_edge: ; preds = %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23, %._crit_edge.loopexit - %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23 ] - %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23 ] - %29 = icmp ult i64 %28, 8 - %.0 = select i1 %29, i64 %28, i64 %.pre-phi - %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %31 = load i64, ptr %30, align 8, !noundef !4 - %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %33 = sub i64 %.0, %31 - store i64 %33, ptr %32, align 8 + %.pre-phi = phi i64 [ %26, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23 ] + %27 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17haaa55a53416d5b75E.exit.thread23 ] + %28 = icmp ult i64 %27, 8 + %.0 = select i1 %28, i64 %27, i64 %.pre-phi + %29 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %30 = load i64, ptr %29, align 8, !noundef !4 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %32 = sub i64 %.0, %30 + store i64 %32, ptr %31, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -.lr.ph: ; preds = %._crit_edge.i, %105 - %.sroa.02.010 = phi i64 [ %34, %105 ], [ 0, %._crit_edge.i ] - %34 = add nuw i64 %.sroa.02.010, 1 - %35 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %36 = getelementptr inbounds i8, ptr %35, i64 %.sroa.02.010 - %37 = load i8, ptr %36, align 1, !noundef !4 - %.not = icmp eq i8 %37, -128 - br i1 %.not, label %38, label %105 +.lr.ph: ; preds = %._crit_edge.i, %104 + %.sroa.02.010 = phi i64 [ %33, %105 ], [ 0, %._crit_edge.i ] + %33 = add nuw i64 %.sroa.02.010, 1 + %34 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %35 = getelementptr inbounds i8, ptr %34, i64 %.sroa.02.010 + %36 = load i8, ptr %35, align 1, !noundef !4 + %.not = icmp eq i8 %36, -128 + br i1 %.not, label %37, label %104 -38: ; preds = %.lr.ph +37: ; preds = %.lr.ph %.neg = xor i64 %.sroa.02.010, -1 %.neg14 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %35, i64 %.neg14 + %38 = getelementptr inbounds i8, ptr %34, i64 %.neg14 br label %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit -_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) +_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit: ; preds = %.preheader, %37 + %39 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.02.010) to label %41 unwind label %24 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit +40: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit tail call void @llvm.experimental.noalias.scope.decl(metadata !323) - %42 = load i64, ptr %6, align 8, !alias.scope !323, !noundef !4 - %43 = load ptr, ptr %0, align 8, !alias.scope !323, !nonnull !4, !noundef !4 - %.sroa.0.011.i = and i64 %42, %40 - %44 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.011.i - %.0.copyload.i912.i = load <16 x i8>, ptr %44, align 1, !noalias !326 - %45 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer - %46 = bitcast <16 x i1> %45 to i16 - %.not.i.not13.i = icmp eq i16 %46, 0 - br i1 %.not.i.not13.i, label %.lr.ph.i19, label %._crit_edge.i18 - -.lr.ph.i19: ; preds = %41, %.lr.ph.i19 + %41 = load i64, ptr %6, align 8, !alias.scope !323, !noundef !4 + %42 = load ptr, ptr %0, align 8, !alias.scope !323, !nonnull !4, !noundef !4 + %.sroa.0.011.i = and i64 %41, %39 + %43 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.011.i + %.0.copyload.i912.i = load <16 x i8>, ptr %43, align 1, !noalias !326 + %44 = icmp slt <16 x i8> %.0.copyload.i912.i, zeroinitializer + %45 = bitcast <16 x i1> %44 to i16 + %.not.i.not13.i = icmp eq i16 %45, 0 + br i1 %.not.i.not13.i, label %.lr.ph.i18, label %._crit_edge.i + +.lr.ph.i18: ; preds = %40, %.lr.ph.i18 %.sroa.0.015.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i19 ], [ %.sroa.0.011.i, %41 ] - %.sroa.7.014.i = phi i64 [ %47, %.lr.ph.i19 ], [ 0, %41 ] - %47 = add i64 %.sroa.7.014.i, 16 - %48 = add i64 %47, %.sroa.0.015.i - %.sroa.0.0.i = and i64 %48, %42 - %49 = getelementptr inbounds i8, ptr %43, i64 %.sroa.0.0.i - %.0.copyload.i9.i = load <16 x i8>, ptr %49, align 1, !noalias !326 - %50 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer - %51 = bitcast <16 x i1> %50 to i16 - %.not.i.not.i = icmp eq i16 %51, 0 - br i1 %.not.i.not.i, label %.lr.ph.i19, label %._crit_edge.i18 - -._crit_edge.i18: ; preds = %.lr.ph.i19, %41 + %.sroa.7.014.i = phi i64 [ %46, %.lr.ph.i19 ], [ 0, %41 ] + %46 = add i64 %.sroa.7.014.i, 16 + %47 = add i64 %46, %.sroa.0.015.i + %.sroa.0.0.i = and i64 %47, %41 + %48 = getelementptr inbounds i8, ptr %42, i64 %.sroa.0.0.i + %.0.copyload.i9.i = load <16 x i8>, ptr %48, align 1, !noalias !326 + %49 = icmp slt <16 x i8> %.0.copyload.i9.i, zeroinitializer + %50 = bitcast <16 x i1> %49 to i16 + %.not.i.not.i = icmp eq i16 %50, 0 + br i1 %.not.i.not.i, label %.lr.ph.i18, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i18, %40 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.011.i, %41 ], [ %.sroa.0.0.i, %.lr.ph.i19 ] - %.lcssa.i = phi i16 [ %46, %41 ], [ %51, %.lr.ph.i19 ] - %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %53 = zext nneg i16 %52 to i64 - %54 = add i64 %.sroa.0.0.lcssa.i, %53 - %55 = and i64 %54, %42 - %56 = getelementptr inbounds i8, ptr %43, i64 %55 - %57 = load i8, ptr %56, align 1, !noalias !323, !noundef !4 - %58 = icmp sgt i8 %57, -1 - br i1 %58, label %59, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit - -59: ; preds = %._crit_edge.i18 - %60 = load <16 x i8>, ptr %43, align 16, !noalias !329 - %61 = icmp slt <16 x i8> %60, zeroinitializer - %62 = bitcast <16 x i1> %61 to i16 - %63 = icmp ne i16 %62, 0 - %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) - %65 = zext nneg i16 %64 to i64 - tail call void @llvm.assume(i1 %63) + %.lcssa.i = phi i16 [ %45, %41 ], [ %50, %.lr.ph.i19 ] + %51 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %52 = zext nneg i16 %51 to i64 + %53 = add i64 %.sroa.0.0.lcssa.i, %52 + %54 = and i64 %53, %41 + %55 = getelementptr inbounds i8, ptr %42, i64 %54 + %56 = load i8, ptr %55, align 1, !noalias !323, !noundef !4 + %57 = icmp sgt i8 %56, -1 + br i1 %57, label %58, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit + +58: ; preds = %._crit_edge.i + %59 = load <16 x i8>, ptr %42, align 16, !noalias !329 + %60 = icmp slt <16 x i8> %59, zeroinitializer + %61 = bitcast <16 x i1> %60 to i16 + %62 = icmp ne i16 %61, 0 + %63 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %61, i1 true) + %64 = zext nneg i16 %63 to i64 + tail call void @llvm.assume(i1 %62) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit: ; preds = %59, %._crit_edge.i18 - %.0.i.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i18 ] - %66 = sub i64 %.sroa.02.010, %.sroa.0.011.i - %67 = sub i64 %.0.i.i, %.sroa.0.011.i - %68 = xor i64 %67, %66 - %.unshifted = and i64 %68, %42 - %69 = icmp ult i64 %.unshifted, 16 - br i1 %69, label %82, label %70 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit: ; preds = %58, %._crit_edge.i + %.0.i.i = phi i64 [ %64, %59 ], [ %54, %._crit_edge.i18 ] + %65 = sub i64 %.sroa.02.010, %.sroa.0.011.i + %66 = sub i64 %.0.i.i, %.sroa.0.011.i + %67 = xor i64 %66, %65 + %.unshifted = and i64 %67, %41 + %68 = icmp ult i64 %.unshifted, 16 + br i1 %68, label %81, label %69 -70: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit +69: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit %.neg15 = xor i64 %.0.i.i, -1 %.neg16 = mul i64 %2, %.neg15 - %71 = getelementptr inbounds i8, ptr %43, i64 %.neg16 - %72 = getelementptr inbounds i8, ptr %43, i64 %.0.i.i - %73 = load i8, ptr %72, align 1, !noundef !4 - %74 = lshr i64 %40, 57 - %75 = trunc nuw nsw i64 %74 to i8 - %76 = add i64 %.0.i.i, -16 - %77 = and i64 %76, %42 - store i8 %75, ptr %72, align 1 - %78 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %79 = getelementptr i8, ptr %78, i64 %77 - %80 = getelementptr i8, ptr %79, i64 16 - store i8 %75, ptr %80, align 1 - %81 = icmp eq i8 %73, -1 - br i1 %81, label %96, label %.preheader - -82: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit - %83 = lshr i64 %40, 57 - %84 = trunc nuw nsw i64 %83 to i8 - %85 = add i64 %.sroa.02.010, -16 - %86 = and i64 %42, %85 - %87 = getelementptr inbounds i8, ptr %43, i64 %.sroa.02.010 - store i8 %84, ptr %87, align 1 - %88 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %89 = getelementptr i8, ptr %88, i64 %86 - %90 = getelementptr i8, ptr %89, i64 16 - store i8 %84, ptr %90, align 1 - br label %105 - -.preheader: ; preds = %70, %.preheader + %70 = getelementptr inbounds i8, ptr %42, i64 %.neg16 + %71 = getelementptr inbounds i8, ptr %42, i64 %.0.i.i + %72 = load i8, ptr %71, align 1, !noundef !4 + %73 = lshr i64 %39, 57 + %74 = trunc nuw nsw i64 %73 to i8 + %75 = add i64 %.0.i.i, -16 + %76 = and i64 %75, %41 + store i8 %74, ptr %71, align 1 + %77 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %78 = getelementptr i8, ptr %77, i64 %76 + %79 = getelementptr i8, ptr %78, i64 16 + store i8 %74, ptr %79, align 1 + %80 = icmp eq i8 %72, -1 + br i1 %80, label %95, label %.preheader + +81: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675760887397528319.exit + %82 = lshr i64 %39, 57 + %83 = trunc nuw nsw i64 %82 to i8 + %84 = add i64 %.sroa.02.010, -16 + %85 = and i64 %41, %84 + %86 = getelementptr inbounds i8, ptr %42, i64 %.sroa.02.010 + store i8 %83, ptr %86, align 1 + %87 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %88 = getelementptr i8, ptr %87, i64 %85 + %89 = getelementptr i8, ptr %88, i64 16 + store i8 %83, ptr %89, align 1 + br label %104 + +.preheader: ; preds = %69, %.preheader %.0910.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] - %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.0910.i - %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.0910.i + %90 = getelementptr inbounds nuw i8, ptr %38, i64 %.0910.i + %91 = getelementptr inbounds nuw i8, ptr %70, i64 %.0910.i %93 = load i8, ptr %91, align 1 %94 = load i8, ptr %92, align 1 store i8 %94, ptr %91, align 1 @@ -2057,31 +2057,31 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0d15703798b524f2E.llvm.1675 %exitcond.not.i = icmp eq i64 %95, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping17hb6858ad00fcf4da3E.exit, label %.preheader -96: ; preds = %70 - %97 = add i64 %.sroa.02.010, -16 - %98 = load i64, ptr %6, align 8, !noundef !4 - %99 = and i64 %98, %97 - %100 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %101 = getelementptr inbounds i8, ptr %100, i64 %.sroa.02.010 - store i8 -1, ptr %101, align 1 - %102 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 - %103 = getelementptr i8, ptr %102, i64 %99 - %104 = getelementptr i8, ptr %103, i64 16 - store i8 -1, ptr %104, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %105 - -105: ; preds = %.lr.ph, %96, %82 +95: ; preds = %69 + %96 = add i64 %.sroa.02.010, -16 + %97 = load i64, ptr %6, align 8, !noundef !4 + %98 = and i64 %97, %96 + %99 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %100 = getelementptr inbounds i8, ptr %99, i64 %.sroa.02.010 + store i8 -1, ptr %100, align 1 + %101 = load ptr, ptr %0, align 8, !nonnull !4, !noundef !4 + %102 = getelementptr i8, ptr %101, i64 %98 + %103 = getelementptr i8, ptr %102, i64 16 + store i8 -1, ptr %103, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %70, ptr noundef nonnull align 1 dereferenceable(1) %38, i64 %2, i1 false) + br label %104 + +104: ; preds = %.lr.ph, %95, %81 %exitcond.not = icmp eq i64 %.sroa.02.010, %.val17 br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph -106: ; preds = %24 - %107 = landingpad { ptr, i32 } +105: ; preds = %24 + %106 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17h76c6e1c84248d3ffE() #40 unreachable -108: ; preds = %24 +107: ; preds = %24 resume { ptr, i32 } %25 } diff --git a/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll b/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll index 0c7a6b6c20c..f3f3aebd5a0 100644 --- a/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll +++ b/bench/ruff-rs/optimized/9nvvpt1ezz0xq4qxcl2hj9bws.ll @@ -8224,14 +8224,14 @@ define internal fastcc void @_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_p %12 = icmp ult i64 %7, 16 br i1 %12, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit.thread -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit.thread: ; preds = %._crit_edge.i +12: ; preds = %._crit_edge.i %13 = getelementptr inbounds nuw i8, ptr %.val12, i64 %7 tail call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) %13, ptr noundef nonnull align 1 dereferenceable(16) %.val12, i64 16, i1 false) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) - %14 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %14, align 8 - %15 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %2, ptr %15, align 8 + %21 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %3, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %2, ptr %22, align 8 store ptr %0, ptr %5, align 8 br label %.lr.ph.preheader @@ -8261,12 +8261,12 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fa store i64 %2, ptr %26, align 8 store ptr %0, ptr %5, align 8 %.not14 = icmp eq i64 %7, 0 - br i1 %.not14, label %._crit_edge, label %.lr.ph.preheader + br i1 %.not14, label %._crit_edge, label %.lr.ph -.lr.ph.preheader: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit.thread, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit +.lr.ph: ; preds = %12, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit br label %.lr.ph -.lr.ph: ; preds = %.lr.ph.preheader, %105 +.lr.ph:; preds = %.lr.ph.preheader, %105 %.sroa.04.17 = phi i64 [ %.sroa.04.1, %105 ], [ 1, %.lr.ph.preheader ] %.sroa.04.06 = phi i64 [ %.sroa.04.17, %105 ], [ 0, %.lr.ph.preheader ] %27 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 @@ -8278,165 +8278,165 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fa ._crit_edge.loopexit: ; preds = %105 %.pre = load i64, ptr %6, align 8 %.pre13 = add i64 %.pre, 1 - %30 = lshr i64 %.pre13, 3 - %31 = mul nuw i64 %30, 7 + %26 = lshr i64 %.pre13, 3 + %27 = mul nuw i64 %26, 7 br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit - %.pre-phi = phi i64 [ %31, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] - %32 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] - %33 = icmp ult i64 %32, 8 - %.sroa.01.0 = select i1 %33, i64 %32, i64 %.pre-phi - %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %35 = load i64, ptr %34, align 8, !noundef !3 - %36 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %37 = sub i64 %.sroa.01.0, %35 - store i64 %37, ptr %36, align 8 + %.pre-phi = phi i64 [ %27, %._crit_edge.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] + %28 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ -1, %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17hc6b3ee34d9b4fafbE.exit ] + %29 = icmp ult i64 %28, 8 + %.sroa.01.0 = select i1 %29, i64 %28, i64 %.pre-phi + %30 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %31 = load i64, ptr %30, align 8, !noundef !3 + %32 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %33 = sub i64 %.sroa.01.0, %31 + store i64 %33, ptr %32, align 8 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) ret void -38: ; preds = %.lr.ph +34: ; preds = %.lr.ph %.neg = xor i64 %.sroa.04.06, -1 %.neg8 = mul i64 %2, %.neg - %39 = getelementptr inbounds i8, ptr %27, i64 %.neg8 + %35 = getelementptr inbounds i8, ptr %27, i64 %.neg8 br label %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit -_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit: ; preds = %.preheader, %38 - %40 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.04.06) - to label %43 unwind label %41 +_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit: ; preds = %.preheader, %34 + %36 = invoke noundef i64 %.40.val(ptr noundef nonnull align 1 %1, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %.sroa.04.06) + to label %43 unwind label %37 -41: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit - %42 = landingpad { ptr, i32 } +37: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit + %38 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr195drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hfc1fd274a5bb3741E"(ptr noalias noundef align 8 dereferenceable(24) %5) #29 - to label %110 unwind label %108 + to label %110 unwind label %104 -43: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit +39: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit %.val = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 %.val11 = load i64, ptr %6, align 8, !noundef !3 - %.sroa.0.08.i = and i64 %.val11, %40 - %44 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.08.i - %.sroa.0.0.copyload.i79.i = load <16 x i8>, ptr %44, align 1 - %45 = icmp slt <16 x i8> %.sroa.0.0.copyload.i79.i, zeroinitializer - %46 = bitcast <16 x i1> %45 to i16 - %.not.i10.i = icmp eq i16 %46, 0 - br i1 %.not.i10.i, label %.lr.ph.i15, label %._crit_edge.i14 - -.lr.ph.i15: ; preds = %43, %.lr.ph.i15 + %.sroa.0.08.i = and i64 %.val11, %36 + %40 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.08.i + %.sroa.0.0.copyload.i79.i = load <16 x i8>, ptr %40, align 1 + %41 = icmp slt <16 x i8> %.sroa.0.0.copyload.i79.i, zeroinitializer + %42 = bitcast <16 x i1> %41 to i16 + %.not.i10.i = icmp eq i16 %42, 0 + br i1 %.not.i10.i, label %.lr.ph.i14, label %._crit_edge.i + +.lr.ph.i14: ; preds = %39, %.lr.ph.i14 %.sroa.0.012.i = phi i64 [ %.sroa.0.0.i, %.lr.ph.i15 ], [ %.sroa.0.08.i, %43 ] - %.sroa.7.011.i = phi i64 [ %47, %.lr.ph.i15 ], [ 0, %43 ] - %47 = add i64 %.sroa.7.011.i, 16 - %48 = add i64 %47, %.sroa.0.012.i - %.sroa.0.0.i = and i64 %48, %.val11 - %49 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i - %.sroa.0.0.copyload.i7.i = load <16 x i8>, ptr %49, align 1 - %50 = icmp slt <16 x i8> %.sroa.0.0.copyload.i7.i, zeroinitializer - %51 = bitcast <16 x i1> %50 to i16 - %.not.i.i = icmp eq i16 %51, 0 - br i1 %.not.i.i, label %.lr.ph.i15, label %._crit_edge.i14 - -._crit_edge.i14: ; preds = %.lr.ph.i15, %43 + %.sroa.7.011.i = phi i64 [ %43, %.lr.ph.i15 ], [ 0, %43 ] + %43 = add i64 %.sroa.7.011.i, 16 + %44 = add i64 %43, %.sroa.0.012.i + %.sroa.0.0.i = and i64 %44, %.val11 + %45 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i + %.sroa.0.0.copyload.i7.i = load <16 x i8>, ptr %45, align 1 + %46 = icmp slt <16 x i8> %.sroa.0.0.copyload.i7.i, zeroinitializer + %47 = bitcast <16 x i1> %46 to i16 + %.not.i.i = icmp eq i16 %47, 0 + br i1 %.not.i.i, label %.lr.ph.i14, label %._crit_edge.i + +._crit_edge.i: ; preds = %.lr.ph.i14, %39 %.sroa.0.0.lcssa.i = phi i64 [ %.sroa.0.08.i, %43 ], [ %.sroa.0.0.i, %.lr.ph.i15 ] - %.lcssa.i = phi i16 [ %46, %43 ], [ %51, %.lr.ph.i15 ] - %52 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) - %53 = zext nneg i16 %52 to i64 - %54 = add i64 %.sroa.0.0.lcssa.i, %53 - %55 = and i64 %54, %.val11 - %56 = getelementptr inbounds nuw i8, ptr %.val, i64 %55 - %57 = load i8, ptr %56, align 1, !noundef !3 - %58 = icmp sgt i8 %57, -1 - br i1 %58, label %59, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit - -59: ; preds = %._crit_edge.i14 - %60 = load <16 x i8>, ptr %.val, align 16 - %61 = icmp slt <16 x i8> %60, zeroinitializer - %62 = bitcast <16 x i1> %61 to i16 - %63 = icmp ne i16 %62, 0 - tail call void @llvm.assume(i1 %63) - %64 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %62, i1 true) - %65 = zext nneg i16 %64 to i64 + %.lcssa.i = phi i16 [ %42, %43 ], [ %47, %.lr.ph.i15 ] + %48 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i, i1 true) + %49 = zext nneg i16 %48 to i64 + %50 = add i64 %.sroa.0.0.lcssa.i, %49 + %51 = and i64 %50, %.val11 + %52 = getelementptr inbounds nuw i8, ptr %.val, i64 %51 + %53 = load i8, ptr %52, align 1, !noundef !3 + %54 = icmp sgt i8 %53, -1 + br i1 %54, label %55, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit + +55: ; preds = %._crit_edge.i + %56 = load <16 x i8>, ptr %.val, align 16 + %57 = icmp slt <16 x i8> %56, zeroinitializer + %58 = bitcast <16 x i1> %57 to i16 + %59 = icmp ne i16 %58, 0 + tail call void @llvm.assume(i1 %59) + %60 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %58, i1 true) + %61 = zext nneg i16 %60 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit: ; preds = %59, %._crit_edge.i14 - %.sroa.0.0.i4.i = phi i64 [ %65, %59 ], [ %55, %._crit_edge.i14 ] - %66 = sub i64 %.sroa.04.06, %.sroa.0.08.i - %67 = sub i64 %.sroa.0.0.i4.i, %.sroa.0.08.i - %68 = xor i64 %67, %66 - %.unshifted = and i64 %68, %.val11 - %69 = icmp ult i64 %.unshifted, 16 - br i1 %69, label %82, label %70 +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit: ; preds = %55, %._crit_edge.i + %.sroa.0.0.i4.i = phi i64 [ %61, %59 ], [ %51, %._crit_edge.i14 ] + %62 = sub i64 %.sroa.04.06, %.sroa.0.08.i + %63 = sub i64 %.sroa.0.0.i4.i, %.sroa.0.08.i + %64 = xor i64 %63, %62 + %.unshifted = and i64 %64, %.val11 + %65 = icmp ult i64 %.unshifted, 16 + br i1 %65, label %78, label %66 -70: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit +66: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit %.neg9 = xor i64 %.sroa.0.0.i4.i, -1 %.neg10 = mul i64 %2, %.neg9 - %71 = getelementptr inbounds i8, ptr %.val, i64 %.neg10 - %72 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i4.i - %73 = load i8, ptr %72, align 1, !noundef !3 - %74 = lshr i64 %40, 57 - %75 = trunc nuw nsw i64 %74 to i8 - %76 = add i64 %.sroa.0.0.i4.i, -16 - %77 = and i64 %76, %.val11 - store i8 %75, ptr %72, align 1 - %78 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %79 = getelementptr i8, ptr %78, i64 %77 - %80 = getelementptr i8, ptr %79, i64 16 - store i8 %75, ptr %80, align 1 - %81 = icmp eq i8 %73, -1 - br i1 %81, label %96, label %.preheader - -82: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit - %83 = lshr i64 %40, 57 - %84 = trunc nuw nsw i64 %83 to i8 - %85 = add i64 %.sroa.04.06, -16 - %86 = and i64 %.val11, %85 - %87 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.04.06 - store i8 %84, ptr %87, align 1 - %88 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %89 = getelementptr i8, ptr %88, i64 %86 - %90 = getelementptr i8, ptr %89, i64 16 - store i8 %84, ptr %90, align 1 - br label %105 + %67 = getelementptr inbounds i8, ptr %.val, i64 %.neg10 + %68 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.0.0.i4.i + %69 = load i8, ptr %68, align 1, !noundef !3 + %70 = lshr i64 %36, 57 + %71 = trunc nuw nsw i64 %70 to i8 + %72 = add i64 %.sroa.0.0.i4.i, -16 + %73 = and i64 %72, %.val11 + store i8 %71, ptr %68, align 1 + %74 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %75 = getelementptr i8, ptr %74, i64 %73 + %76 = getelementptr i8, ptr %75, i64 16 + store i8 %71, ptr %76, align 1 + %77 = icmp eq i8 %69, -1 + br i1 %77, label %92, label %.preheader + +78: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17h685b609e1af71bfaE.exit + %79 = lshr i64 %36, 57 + %80 = trunc nuw nsw i64 %79 to i8 + %81 = add i64 %.sroa.04.06, -16 + %82 = and i64 %.val11, %81 + %83 = getelementptr inbounds nuw i8, ptr %.val, i64 %.sroa.04.06 + store i8 %80, ptr %83, align 1 + %84 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %85 = getelementptr i8, ptr %84, i64 %82 + %86 = getelementptr i8, ptr %85, i64 16 + store i8 %80, ptr %86, align 1 + br label %101 -.preheader: ; preds = %70, %.preheader - %.sroa.04.09.i = phi i64 [ %95, %.preheader ], [ 0, %70 ] - %91 = getelementptr inbounds nuw i8, ptr %39, i64 %.sroa.04.09.i - %92 = getelementptr inbounds nuw i8, ptr %71, i64 %.sroa.04.09.i - %93 = load i8, ptr %91, align 1 - %94 = load i8, ptr %92, align 1 - store i8 %94, ptr %91, align 1 - store i8 %93, ptr %92, align 1 - %95 = add nuw nsw i64 %.sroa.04.09.i, 1 - %exitcond.not.i = icmp eq i64 %95, %2 +.preheader: ; preds = %66, %.preheader + %.sroa.04.09.i = phi i64 [ %91, %.preheader ], [ 0, %70 ] + %87 = getelementptr inbounds nuw i8, ptr %35, i64 %.sroa.04.09.i + %88 = getelementptr inbounds nuw i8, ptr %67, i64 %.sroa.04.09.i + %89 = load i8, ptr %87, align 1 + %90 = load i8, ptr %88, align 1 + store i8 %90, ptr %87, align 1 + store i8 %89, ptr %88, align 1 + %91 = add nuw nsw i64 %.sroa.04.09.i, 1 + %exitcond.not.i = icmp eq i64 %91, %2 br i1 %exitcond.not.i, label %_ZN4core3ptr19swap_nonoverlapping7runtime17hbedda6f28f071c7dE.exit, label %.preheader -96: ; preds = %70 - %97 = add i64 %.sroa.04.06, -16 - %98 = load i64, ptr %6, align 8, !noundef !3 - %99 = and i64 %98, %97 - %100 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %101 = getelementptr inbounds nuw i8, ptr %100, i64 %.sroa.04.06 - store i8 -1, ptr %101, align 1 - %102 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 - %103 = getelementptr i8, ptr %102, i64 %99 - %104 = getelementptr i8, ptr %103, i64 16 - store i8 -1, ptr %104, align 1 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %71, ptr noundef nonnull align 1 dereferenceable(1) %39, i64 %2, i1 false) - br label %105 +92: ; preds = %66 + %93 = add i64 %.sroa.04.06, -16 + %94 = load i64, ptr %6, align 8, !noundef !3 + %95 = and i64 %94, %93 + %96 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %97 = getelementptr inbounds nuw i8, ptr %96, i64 %.sroa.04.06 + store i8 -1, ptr %97, align 1 + %98 = load ptr, ptr %0, align 8, !nonnull !3, !noundef !3 + %99 = getelementptr i8, ptr %98, i64 %95 + %100 = getelementptr i8, ptr %99, i64 16 + store i8 -1, ptr %100, align 1 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %67, ptr noundef nonnull align 1 dereferenceable(1) %35, i64 %2, i1 false) + br label %101 -105: ; preds = %.lr.ph, %96, %82 - %106 = icmp ult i64 %.sroa.04.17, %7 - %107 = zext i1 %106 to i64 - %.sroa.04.1 = add nuw i64 %.sroa.04.17, %107 - br i1 %106, label %.lr.ph, label %._crit_edge.loopexit +101: ; preds = %.lr.ph, %92, %78 + %102 = icmp ult i64 %.sroa.04.17, %7 + %103 = zext i1 %102 to i64 + %.sroa.04.1 = add nuw i64 %.sroa.04.17, %103 + br i1 %102, label %.lr.ph, label %._crit_edge.loopexit -108: ; preds = %41 - %109 = landingpad { ptr, i32 } +104: ; preds = %37 + %105 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer tail call void @_ZN4core9panicking16panic_in_cleanup17hbadeae7294749c32E() #30 unreachable -110: ; preds = %41 - resume { ptr, i32 } %42 +106: ; preds = %37 + resume { ptr, i32 } %38 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll b/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll index 2e273af95a2..ecb26be8808 100644 --- a/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll +++ b/bench/ruff-rs/optimized/dv3u0zj1g96ml2orvqzylystz.ll @@ -2638,7 +2638,7 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thr %64 = load i64, ptr %10, align 8, !alias.scope !284, !noalias !285, !noundef !3 %invariant.gep = getelementptr i8, ptr %63, i64 16 %65 = icmp eq i64 %64, 0 - br i1 %65, label %._crit_edge53, label %.preheader.lr.ph + br i1 %65, label %._crit_edge54, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %58 %66 = load ptr, ptr %0, align 8, !alias.scope !284, !noalias !285, !nonnull !3, !noundef !3 @@ -2650,36 +2650,36 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thr .preheader: ; preds = %.preheader.lr.ph, %131 %71 = phi ptr [ %66, %.preheader.lr.ph ], [ %137, %131 ] - %.sroa.023.052 = phi ptr [ %66, %.preheader.lr.ph ], [ %.sroa.023.1.lcssa, %131 ] - %.sroa.5.051 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %131 ] - %.sroa.9.050 = phi i64 [ %64, %.preheader.lr.ph ], [ %103, %131 ] - %.sroa.13.049 = phi i16 [ %70, %.preheader.lr.ph ], [ %101, %131 ] - %.not.i244 = icmp eq i16 %.sroa.13.049, 0 - br i1 %.not.i244, label %.noexc3, label %._crit_edge + %.sroa.024.053 = phi ptr [ %66, %.preheader.lr.ph ], [ %.sroa.024.1.lcssa, %131 ] + %.sroa.5.052 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %131 ] + %.sroa.9.051 = phi i64 [ %64, %.preheader.lr.ph ], [ %103, %131 ] + %.sroa.13.050 = phi i16 [ %70, %.preheader.lr.ph ], [ %101, %131 ] + %.not.i245 = icmp eq i16 %.sroa.13.050, 0 + br i1 %.not.i245, label %.noexc3, label %._crit_edge .noexc3: ; preds = %.preheader, %.noexc3 - %.sroa.023.146 = phi ptr [ %72, %.noexc3 ], [ %.sroa.023.052, %.preheader ] - %.sroa.5.145 = phi i64 [ %76, %.noexc3 ], [ %.sroa.5.051, %.preheader ] - %72 = getelementptr inbounds nuw i8, ptr %.sroa.023.146, i64 16 + %.sroa.024.147 = phi ptr [ %72, %.noexc3 ], [ %.sroa.024.053, %.preheader ] + %.sroa.5.146 = phi i64 [ %76, %.noexc3 ], [ %.sroa.5.052, %.preheader ] + %72 = getelementptr inbounds nuw i8, ptr %.sroa.024.147, i64 16 %73 = load <16 x i8>, ptr %72, align 16 %74 = icmp slt <16 x i8> %73, zeroinitializer %75 = bitcast <16 x i1> %74 to i16 - %76 = add i64 %.sroa.5.145, 16 + %76 = add i64 %.sroa.5.146, 16 %.not.i2 = icmp eq i16 %75, -1 br i1 %.not.i2, label %.noexc3, label %._crit_edge.loopexit -._crit_edge53.loopexit: ; preds = %131 - %.pre63 = load i64, ptr %10, align 8, !alias.scope !284, !noalias !285 - br label %._crit_edge53 +._crit_edge54.loopexit: ; preds = %131 + %.pre64 = load i64, ptr %10, align 8, !alias.scope !284, !noalias !285 + br label %._crit_edge54 -._crit_edge53: ; preds = %._crit_edge53.loopexit, %58 - %77 = phi i64 [ %.pre63, %._crit_edge53.loopexit ], [ 0, %58 ] +._crit_edge54: ; preds = %._crit_edge54.loopexit, %58 + %77 = phi i64 [ %.pre64, %._crit_edge53.loopexit ], [ 0, %58 ] %78 = sub i64 %.sroa.02.0.i.i, %77 store i64 %78, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !275 store i64 %77, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !275 br label %79 -79: ; preds = %79, %._crit_edge53 +79: ; preds = %79, %._crit_edge54 %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge53 ], [ %84, %79 ] %80 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %81 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i @@ -2727,15 +2727,15 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hec2d3e3444dfa7daE.exit.i. br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.049, %.preheader ], [ %97, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.051, %.preheader ], [ %76, %._crit_edge.loopexit ] - %.sroa.023.1.lcssa = phi ptr [ %.sroa.023.052, %.preheader ], [ %72, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.050, %.preheader ], [ %97, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.052, %.preheader ], [ %76, %._crit_edge.loopexit ] + %.sroa.024.1.lcssa = phi ptr [ %.sroa.024.053, %.preheader ], [ %72, %._crit_edge.loopexit ] %98 = add i16 %.sroa.13.1.lcssa, -1 %99 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %100 = zext nneg i16 %99 to i64 %101 = and i16 %98, %.sroa.13.1.lcssa %102 = add i64 %.sroa.5.1.lcssa, %100 - %103 = add i64 %.sroa.9.050, -1 + %103 = add i64 %.sroa.9.051, -1 %104 = sub nsw i64 0, %102 %105 = getelementptr inbounds { { { i64, [1 x i64] } }, { i32, [3 x i32] } }, ptr %71, i64 %104 %106 = getelementptr inbounds i8, ptr %105, i64 -32 @@ -2810,7 +2810,7 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17hec2d3e3444dfa7daE.exit.i. %143 = getelementptr inbounds i8, ptr %63, i64 %142 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %143, ptr noundef nonnull align 1 dereferenceable(32) %140, i64 32, i1 false) %144 = icmp eq i64 %103, 0 - br i1 %144, label %._crit_edge53.loopexit, label %.preheader + br i1 %144, label %._crit_edge54.loopexit, label %.preheader common.resume: ; preds = %172, %56 %common.resume.op = phi { ptr, i32 } [ %57, %56 ], [ %173, %172 ] @@ -2822,7 +2822,7 @@ common.resume: ; preds = %172, %56 %.not1.i.i = icmp eq i64 %19, 0 br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread, label %.lr.ph.i.i7 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread: ; preds = %145 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread:; preds = %145 %146 = icmp ne ptr %.val9.i, null tail call void @llvm.assume(i1 %146) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !302 @@ -2836,24 +2836,24 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.threa %.sroa.07.0.i.i.i.i = add nuw nsw i64 %147, %149 %150 = icmp ne ptr %.val9.i, null tail call void @llvm.assume(i1 %150) - br label %154 + br label %.lr.ph.i -._crit_edge.i.i8: ; preds = %154 +._crit_edge.i.i8:; preds = %154 %. = tail call i64 @llvm.umax.i64(i64 %19, i64 16) %.75 = tail call i64 @llvm.umin.i64(i64 %19, i64 16) %151 = getelementptr inbounds nuw i8, ptr %.val9.i, i64 %. tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %151, ptr nonnull align 1 %.val9.i, i64 %.75, i1 false), !noalias !302 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !302 - %152 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @_ZN4core3ops8function6FnOnce9call_once17h2a9985a138731b93E, ptr %152, align 8, !noalias !302 - %153 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 32, ptr %153, align 8, !noalias !302 + %159 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @_ZN4core3ops8function6FnOnce9call_once17h2a9985a138731b93E, ptr %159, align 8, !noalias !302 + %160 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 32, ptr %160, align 8, !noalias !302 store ptr %0, ptr %6, align 8, !noalias !302 br label %.lr.ph.i -154: ; preds = %154, %.lr.ph.i.i7 - %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %155, %154 ] - %.sroa.5.02.i.i = phi i64 [ %.sroa.07.0.i.i.i.i, %.lr.ph.i.i7 ], [ %156, %154 ] +.lr.ph.i: ; preds = %154, %.lr.ph.i.i7 + %.sroa.0.17.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %155, %154 ] + %.sroa.0.06.i = phi i64 [ %.sroa.07.0.i.i.i.i, %.lr.ph.i.i7 ], [ %156, %154 ] %155 = add i64 %.sroa.0.03.i.i, 16 %156 = add i64 %.sroa.5.02.i.i, -1 %157 = getelementptr inbounds nuw i8, ptr %.val9.i, i64 %.sroa.0.03.i.i @@ -2882,11 +2882,11 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.threa br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i: ; preds = %.preheader.i - %.pre.i17 = load ptr, ptr %0, align 8, !alias.scope !305 + %.pre.i18 = load ptr, ptr %0, align 8, !alias.scope !305 br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i, %164 - %169 = phi ptr [ %.pre.i17, %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i ], [ %161, %164 ] + %169 = phi ptr [ %.pre.i18, %_ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.loopexit.i ], [ %161, %164 ] call void @llvm.experimental.noalias.scope.decl(metadata !308) %170 = getelementptr inbounds { { { i64, [1 x i64] } }, { i32, [3 x i32] } }, ptr %169, i64 %168 %171 = getelementptr inbounds i8, ptr %170, i64 -32 @@ -2913,34 +2913,34 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i: ; preds = %177 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i12, zeroinitializer %178 = bitcast <16 x i1> %177 to i16 %.not.not.i.not7.i.i13 = icmp eq i16 %178, 0 - br i1 %.not.not.i.not7.i.i13, label %.lr.ph.i12.i, label %._crit_edge.i11.i, !prof !300 - -.lr.ph.i12.i: ; preds = %174, %.lr.ph.i12.i - %.sroa.0.09.i.i18 = phi i64 [ %.sroa.0.0.i.i20, %.lr.ph.i12.i ], [ %.sroa.0.05.i.i11, %174 ] - %.sroa.7.08.i.i19 = phi i64 [ %179, %.lr.ph.i12.i ], [ 0, %174 ] - %179 = add i64 %.sroa.7.08.i.i19, 16 - %180 = add i64 %179, %.sroa.0.09.i.i18 - %.sroa.0.0.i.i20 = and i64 %180, %.val8.i - %181 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i.i20 - %.sroa.0.0.copyload.i4.i.i21 = load <16 x i8>, ptr %181, align 1 - %182 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i21, zeroinitializer + br i1 %.not.not.i.not7.i.i13, label %.lr.ph.i11.i, label %._crit_edge.i.i14, !prof !300 + +.lr.ph.i11.i: ; preds = %174, %.lr.ph.i11.i + %.sroa.0.09.i.i19 = phi i64 [ %.sroa.0.0.i.i21, %.lr.ph.i12.i ], [ %.sroa.0.05.i.i11, %174 ] + %.sroa.7.08.i.i20 = phi i64 [ %179, %.lr.ph.i12.i ], [ 0, %174 ] + %179 = add i64 %.sroa.7.08.i.i20, 16 + %180 = add i64 %179, %.sroa.0.09.i.i19 + %.sroa.0.0.i.i21 = and i64 %180, %.val8.i + %181 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i.i21 + %.sroa.0.0.copyload.i4.i.i22 = load <16 x i8>, ptr %181, align 1 + %182 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i22, zeroinitializer %183 = bitcast <16 x i1> %182 to i16 - %.not.not.i.not.i.i22 = icmp eq i16 %183, 0 - br i1 %.not.not.i.not.i.i22, label %.lr.ph.i12.i, label %._crit_edge.i11.i, !prof !301 + %.not.not.i.not.i.i23 = icmp eq i16 %183, 0 + br i1 %.not.not.i.not.i.i23, label %.lr.ph.i11.i, label %._crit_edge.i.i14, !prof !301 -._crit_edge.i11.i: ; preds = %.lr.ph.i12.i, %174 - %.sroa.0.0.lcssa.i.i14 = phi i64 [ %.sroa.0.05.i.i11, %174 ], [ %.sroa.0.0.i.i20, %.lr.ph.i12.i ] - %.lcssa.i.i15 = phi i16 [ %178, %174 ], [ %183, %.lr.ph.i12.i ] - %184 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i15, i1 true) +._crit_edge.i.i14: ; preds = %.lr.ph.i11.i, %174 + %.sroa.0.0.lcssa.i.i15 = phi i64 [ %.sroa.0.05.i.i11, %174 ], [ %.sroa.0.0.i.i21, %.lr.ph.i12.i ] + %.lcssa.i.i16 = phi i16 [ %178, %174 ], [ %183, %.lr.ph.i12.i ] + %184 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i16, i1 true) %185 = zext nneg i16 %184 to i64 - %186 = add i64 %.sroa.0.0.lcssa.i.i14, %185 + %186 = add i64 %.sroa.0.0.lcssa.i.i15, %185 %187 = and i64 %186, %.val8.i %188 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %187 %189 = load i8, ptr %188, align 1, !noundef !3 %190 = icmp sgt i8 %189, -1 br i1 %190, label %191, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i, !prof !21 -191: ; preds = %._crit_edge.i11.i +191: ; preds = %._crit_edge.i.i14 %192 = load <16 x i8>, ptr %.val.i, align 16 %193 = icmp slt <16 x i8> %192, zeroinitializer %194 = bitcast <16 x i1> %193 to i16 @@ -2950,24 +2950,24 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h87fb4b51444ee123E.exit.i: ; preds = %197 = zext nneg i16 %196 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i: ; preds = %191, %._crit_edge.i11.i - %.sroa.0.0.i4.i.i16 = phi i64 [ %197, %191 ], [ %187, %._crit_edge.i11.i ] +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i: ; preds = %191, %._crit_edge.i.i14 + %.sroa.0.0.i4.i.i17 = phi i64 [ %197, %191 ], [ %187, %._crit_edge.i11.i ] %198 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i11 - %199 = sub i64 %.sroa.0.0.i4.i.i16, %.sroa.0.05.i.i11 + %199 = sub i64 %.sroa.0.0.i4.i.i17, %.sroa.0.05.i.i11 %200 = xor i64 %199, %198 %.unshifted.i = and i64 %200, %.val8.i %201 = icmp ult i64 %.unshifted.i, 16 br i1 %201, label %216, label %202, !prof !179 202: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h357805648145c78cE.exit.i - %203 = shl i64 %.sroa.0.0.i4.i.i16, 5 + %203 = shl i64 %.sroa.0.0.i4.i.i17, 5 %204 = sub nuw nsw i64 -32, %203 %205 = getelementptr inbounds i8, ptr %.val.i, i64 %204 - %206 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i4.i.i16 + %206 = getelementptr inbounds nuw i8, ptr %.val.i, i64 %.sroa.0.0.i4.i.i17 %207 = load i8, ptr %206, align 1, !noundef !3 %208 = lshr i64 %175, 57 %209 = trunc nuw nsw i64 %208 to i8 - %210 = add i64 %.sroa.0.0.i4.i.i16, -16 + %210 = add i64 %.sroa.0.0.i4.i.i17, -16 %211 = and i64 %210, %.val8.i store i8 %209, ptr %206, align 1 %212 = load ptr, ptr %0, align 8, !alias.scope !302, !nonnull !3, !noundef !3 @@ -3037,26 +3037,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit: ; pr %246 = icmp ult i64 %.pre13.i.fr, 8 %spec.select = select i1 %246, i64 %.pre13.i.fr, i64 %245 %.pre = load i64, ptr %10, align 8, !alias.scope !302 - br label %247 - -247: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread - %248 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] - %249 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] - %250 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %251 = sub i64 %249, %248 - store i64 %251, ptr %250, align 8, !alias.scope !302 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread + %247 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] + %248 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit ] + %249 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %250 = sub i64 %248, %247 + store i64 %250, ptr %249, align 8, !alias.scope !302 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !302 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit", %247 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hb7f303eb9ae04f02E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %247 ], [ %.sroa.12.0.ph, %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit" ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %247 ], [ %.sroa.7.0.ph, %_ZN9hashbrown3raw13RawTableInner17new_uninitialized17hd4a2a28a1af879cfE.exit.thread.i ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h39dc86e5663c75eaE.exit" ] - %252 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %253 = insertvalue { i64, i64 } %252, i64 %.sroa.4.1.i, 1 + %251 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %252 = insertvalue { i64, i64 } %251, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h961fbf1d95712217E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h961fbf1d95712217E.exit: ; preds = %23, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i - %.merged.i = phi { i64, i64 } [ %24, %23 ], [ %253, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i ] + %.merged.i = phi { i64, i64 } [ %24, %23 ], [ %252, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h10bacc067001f073E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll b/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll index 5bd8f64e802..7a39676e59d 100644 --- a/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll +++ b/bench/rust-analyzer-rs/optimized/2gfo4qfvfsgl8tkl.ll @@ -3667,7 +3667,7 @@ common.resume: ; preds = %167, %75 %.not.not4.i.i = icmp eq i64 %21, 0 br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i8 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %151 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread:; preds = %151 %152 = icmp ne ptr %.val.i, null tail call void @llvm.assume(i1 %152) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !668 @@ -3683,16 +3683,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa tail call void @llvm.assume(i1 %156) br label %160 -._crit_edge.i.i9: ; preds = %160 +._crit_edge.i.i9:; preds = %160 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) %spec.select34.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) %157 = getelementptr inbounds i8, ptr %.val.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %157, ptr nonnull align 1 %.val.i, i64 %spec.select34.i, i1 false), !noalias !668 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !668 - %158 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr null, ptr %158, align 8, !noalias !668 - %159 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 24, ptr %159, align 8, !noalias !668 + %165 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr null, ptr %165, align 8, !noalias !668 + %166 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 24, ptr %166, align 8, !noalias !668 store ptr %0, ptr %6, align 8, !noalias !668 br label %.lr.ph.i @@ -3722,8 +3722,8 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa %170 = load ptr, ptr %0, align 8, !alias.scope !668, !nonnull !7, !noundef !7 %171 = getelementptr inbounds i8, ptr %170, i64 %.sroa.02.010.i %172 = load i8, ptr %171, align 1, !noundef !7 - %.not.i10 = icmp eq i8 %172, -128 - br i1 %.not.i10, label %173, label %250 + %.not.i9 = icmp eq i8 %172, -128 + br i1 %.not.i9, label %173, label %250 173: ; preds = %.lr.ph.i %.neg.i = mul i64 %.sroa.02.010.i, -24 @@ -3758,16 +3758,16 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor call void @llvm.experimental.noalias.scope.decl(metadata !710) %186 = load i64, ptr %18, align 8, !alias.scope !713, !noundef !7 %187 = load ptr, ptr %0, align 8, !alias.scope !713, !nonnull !7, !noundef !7 - %.sroa.0.011.i.i13 = and i64 %185, %186 - %188 = getelementptr inbounds i8, ptr %187, i64 %.sroa.0.011.i.i13 - %.0.copyload.i912.i.i14 = load <16 x i8>, ptr %188, align 1, !noalias !714 - %189 = icmp slt <16 x i8> %.0.copyload.i912.i.i14, zeroinitializer + %.sroa.0.011.i.i12 = and i64 %185, %186 + %188 = getelementptr inbounds i8, ptr %187, i64 %.sroa.0.011.i.i12 + %.0.copyload.i912.i.i13 = load <16 x i8>, ptr %188, align 1, !noalias !714 + %189 = icmp slt <16 x i8> %.0.copyload.i912.i.i13, zeroinitializer %190 = bitcast <16 x i1> %189 to i16 - %.not.i.not13.i.i15 = icmp eq i16 %190, 0 - br i1 %.not.i.not13.i.i15, label %.lr.ph.i17.i, label %._crit_edge.i16.i + %.not.i.not13.i.i14 = icmp eq i16 %190, 0 + br i1 %.not.i.not13.i.i14, label %.lr.ph.i16.i, label %._crit_edge.i.i15 -.lr.ph.i17.i: ; preds = %181, %.lr.ph.i17.i - %.sroa.0.015.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i17.i ], [ %.sroa.0.011.i.i13, %181 ] +.lr.ph.i16.i: ; preds = %181, %.lr.ph.i16.i + %.sroa.0.015.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i17.i ], [ %.sroa.0.011.i.i12, %181 ] %.sroa.7.014.i.i21 = phi i64 [ %191, %.lr.ph.i17.i ], [ 0, %181 ] %191 = add i64 %.sroa.7.014.i.i21, 16 %192 = add i64 %191, %.sroa.0.015.i.i20 @@ -3777,10 +3777,10 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor %194 = icmp slt <16 x i8> %.0.copyload.i9.i.i23, zeroinitializer %195 = bitcast <16 x i1> %194 to i16 %.not.i.not.i.i24 = icmp eq i16 %195, 0 - br i1 %.not.i.not.i.i24, label %.lr.ph.i17.i, label %._crit_edge.i16.i + br i1 %.not.i.not.i.i24, label %.lr.ph.i16.i, label %._crit_edge.i.i15 -._crit_edge.i16.i: ; preds = %.lr.ph.i17.i, %181 - %.sroa.0.0.lcssa.i.i16 = phi i64 [ %.sroa.0.011.i.i13, %181 ], [ %.sroa.0.0.i.i22, %.lr.ph.i17.i ] +._crit_edge.i.i15: ; preds = %.lr.ph.i16.i, %181 + %.sroa.0.0.lcssa.i.i16 = phi i64 [ %.sroa.0.011.i.i12, %181 ], [ %.sroa.0.0.i.i22, %.lr.ph.i17.i ] %.lcssa.i.i17 = phi i16 [ %190, %181 ], [ %195, %.lr.ph.i17.i ] %196 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) %197 = zext nneg i16 %196 to i64 @@ -3791,7 +3791,7 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor %202 = icmp sgt i8 %201, -1 br i1 %202, label %203, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i -203: ; preds = %._crit_edge.i16.i +203: ; preds = %._crit_edge.i.i15 %204 = load <16 x i8>, ptr %187, align 16, !noalias !717 %205 = icmp slt <16 x i8> %204, zeroinitializer %206 = bitcast <16 x i1> %205 to i16 @@ -3801,10 +3801,10 @@ _ZN4core3ptr19swap_nonoverlapping17h4cb21fd7a9296568E.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %207) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i: ; preds = %203, %._crit_edge.i16.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778249362653541369.exit.i: ; preds = %203, %._crit_edge.i.i15 %.0.i.i.i18 = phi i64 [ %209, %203 ], [ %199, %._crit_edge.i16.i ] - %210 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i13 - %211 = sub i64 %.0.i.i.i18, %.sroa.0.011.i.i13 + %210 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i12 + %211 = sub i64 %.0.i.i.i18, %.sroa.0.011.i.i12 %212 = xor i64 %211, %210 %.unshifted.i = and i64 %212, %186 %213 = icmp ult i64 %.unshifted.i, 16 @@ -3868,8 +3868,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.1778 br label %250 250: ; preds = %241, %227, %.lr.ph.i - %exitcond.not.i11 = icmp eq i64 %.sroa.02.010.i, %19 - br i1 %exitcond.not.i11, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i + %exitcond.not.i10 = icmp eq i64 %.sroa.02.010.i, %19 + br i1 %exitcond.not.i10, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i 251: ; preds = %167 %252 = landingpad { ptr, i32 } @@ -3886,26 +3886,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; pr %255 = icmp ult i64 %.pre19.i.fr, 8 %spec.select = select i1 %255, i64 %.pre19.i.fr, i64 %254 %.pre = load i64, ptr %10, align 8, !alias.scope !668 - br label %256 - -256: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - %257 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %258 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %259 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %260 = sub i64 %258, %257 - store i64 %260, ptr %259, align 8, !alias.scope !668 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %256 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %257 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %258 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %259 = sub i64 %257, %256 + store i64 %259, ptr %258, align 8, !alias.scope !668 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !668 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i: ; preds = %74, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit", %256 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i: ; preds = %74, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %256 ], [ %.sroa.9.047.ph, %74 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit" ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %256 ], [ %.sroa.5.049.ph, %74 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7639b82cc6c8c95fE.exit" ] - %261 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %262 = insertvalue { i64, i64 } %261, i64 %.sroa.4.1.i, 1 + %260 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %261 = insertvalue { i64, i64 } %260, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hae6cf7ace7c7a820E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hae6cf7ace7c7a820E.exit: ; preds = %15, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i - %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %262, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i ] + %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %261, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h08b6848f5ae9af9fE.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll b/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll index 5a735d5ee56..bef2a322d1b 100644 --- a/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll +++ b/bench/rust-analyzer-rs/optimized/3bcyxdd3fm70gs30.ll @@ -5421,7 +5421,7 @@ common.resume: ; preds = %170, %69 %.not.not4.i.i = icmp eq i64 %19, 0 br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i10 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %154 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread:; preds = %154 %155 = icmp ne ptr %.val15.i, null tail call void @llvm.assume(i1 %155) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !854 @@ -5437,16 +5437,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa tail call void @llvm.assume(i1 %159) br label %163 -._crit_edge.i.i11: ; preds = %163 +._crit_edge.i.i11:; preds = %163 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %19, i64 16) %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) %160 = getelementptr inbounds i8, ptr %.val15.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %160, ptr nonnull align 1 %.val15.i, i64 %spec.select28.i, i1 false), !noalias !854 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !854 - %161 = getelementptr inbounds nuw i8, ptr %3, i64 8 - store ptr @"_ZN4core3ptr374drop_in_place$LT$$LP$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$C$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$RP$$GT$17h58d7ceec90bd6ec6E.llvm.3712155024907033177", ptr %161, align 8, !noalias !854 - %162 = getelementptr inbounds nuw i8, ptr %3, i64 16 - store i64 32, ptr %162, align 8, !noalias !854 + %168 = getelementptr inbounds nuw i8, ptr %3, i64 8 + store ptr @"_ZN4core3ptr374drop_in_place$LT$$LP$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$C$rowan..utility_types..NodeOrToken$LT$rowan..api..SyntaxNode$LT$syntax..syntax_node..RustLanguage$GT$$C$rowan..api..SyntaxToken$LT$syntax..syntax_node..RustLanguage$GT$$GT$$RP$$GT$17h58d7ceec90bd6ec6E.llvm.3712155024907033177", ptr %168, align 8, !noalias !854 + %169 = getelementptr inbounds nuw i8, ptr %3, i64 16 + store i64 32, ptr %169, align 8, !noalias !854 store ptr %0, ptr %3, align 8, !noalias !854 br label %.lr.ph.i @@ -5476,8 +5476,8 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa %173 = load ptr, ptr %0, align 8, !alias.scope !854, !nonnull !4, !noundef !4 %174 = getelementptr inbounds i8, ptr %173, i64 %.sroa.02.08.i %175 = load i8, ptr %174, align 1, !noundef !4 - %.not.i12 = icmp eq i8 %175, -128 - br i1 %.not.i12, label %176, label %258 + %.not.i11 = icmp eq i8 %175, -128 + br i1 %.not.i11, label %176, label %258 176: ; preds = %.lr.ph.i %177 = shl i64 %.sroa.02.08.i, 5 @@ -5502,7 +5502,7 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor %185 = invoke { ptr, i32 } @_ZN5rowan6cursor8NodeData3key17hac391177412f5ff8E.llvm.16397098368628515937(ptr noundef nonnull align 8 %.val5.i.i) to label %.noexc.i15 unwind label %170 -.noexc.i15: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i +.noexc.i14: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i %186 = mul nuw nsw i64 %.val4.i.i, 5871781006564002453 %187 = call i64 @llvm.fshl.i64(i64 %186, i64 %186, i64 5) %188 = extractvalue { ptr, i32 } %185, 0 @@ -5514,21 +5514,21 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor invoke void @"_ZN59_$LT$rustc_hash..FxHasher$u20$as$u20$core..hash..Hasher$GT$9write_u3217h879fefc5e1be8fbfE.llvm.16397098368628515937"(ptr noalias noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %189) to label %193 unwind label %170 -193: ; preds = %.noexc.i15 +193: ; preds = %.noexc.i14 %194 = load i64, ptr %2, align 8, !alias.scope !888, !noalias !877, !noundef !4 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2), !noalias !877 %.val.i = load ptr, ptr %0, align 8, !alias.scope !854, !nonnull !4, !noundef !4 %.val14.i = load i64, ptr %16, align 8, !alias.scope !854, !noundef !4 - %.sroa.0.05.i.i16 = and i64 %.val14.i, %194 - %195 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.05.i.i16 - %.0.copyload.i46.i.i17 = load <16 x i8>, ptr %195, align 1, !noalias !891 - %196 = icmp slt <16 x i8> %.0.copyload.i46.i.i17, zeroinitializer + %.sroa.0.05.i.i15 = and i64 %.val14.i, %194 + %195 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.05.i.i15 + %.0.copyload.i46.i.i16 = load <16 x i8>, ptr %195, align 1, !noalias !891 + %196 = icmp slt <16 x i8> %.0.copyload.i46.i.i16, zeroinitializer %197 = bitcast <16 x i1> %196 to i16 - %.not.i.not7.i.i18 = icmp eq i16 %197, 0 - br i1 %.not.i.not7.i.i18, label %.lr.ph.i19.i, label %._crit_edge.i18.i + %.not.i.not7.i.i17 = icmp eq i16 %197, 0 + br i1 %.not.i.not7.i.i17, label %.lr.ph.i18.i, label %._crit_edge.i.i18 -.lr.ph.i19.i: ; preds = %193, %.lr.ph.i19.i - %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ], [ %.sroa.0.05.i.i16, %193 ] +.lr.ph.i18.i: ; preds = %193, %.lr.ph.i18.i + %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ], [ %.sroa.0.05.i.i15, %193 ] %.sroa.7.08.i.i24 = phi i64 [ %198, %.lr.ph.i19.i ], [ 0, %193 ] %198 = add i64 %.sroa.7.08.i.i24, 16 %199 = add i64 %198, %.sroa.0.09.i.i23 @@ -5538,10 +5538,10 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor %201 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer %202 = bitcast <16 x i1> %201 to i16 %.not.i.not.i.i27 = icmp eq i16 %202, 0 - br i1 %.not.i.not.i.i27, label %.lr.ph.i19.i, label %._crit_edge.i18.i + br i1 %.not.i.not.i.i27, label %.lr.ph.i18.i, label %._crit_edge.i.i18 -._crit_edge.i18.i: ; preds = %.lr.ph.i19.i, %193 - %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i16, %193 ], [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ] +._crit_edge.i.i18: ; preds = %.lr.ph.i18.i, %193 + %.sroa.0.0.lcssa.i.i19 = phi i64 [ %.sroa.0.05.i.i15, %193 ], [ %.sroa.0.0.i.i25, %.lr.ph.i19.i ] %.lcssa.i.i20 = phi i16 [ %197, %193 ], [ %202, %.lr.ph.i19.i ] %203 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i20, i1 true) %204 = zext nneg i16 %203 to i64 @@ -5552,7 +5552,7 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor %209 = icmp sgt i8 %208, -1 br i1 %209, label %210, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i -210: ; preds = %._crit_edge.i18.i +210: ; preds = %._crit_edge.i.i18 %211 = load <16 x i8>, ptr %.val.i, align 16, !noalias !894 %212 = icmp slt <16 x i8> %211, zeroinitializer %213 = bitcast <16 x i1> %212 to i16 @@ -5562,10 +5562,10 @@ _ZN4core3ptr19swap_nonoverlapping17h2d46392447a93160E.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %214) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i: ; preds = %210, %._crit_edge.i18.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i: ; preds = %210, %._crit_edge.i.i18 %.0.i.i.i21 = phi i64 [ %216, %210 ], [ %206, %._crit_edge.i18.i ] - %217 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i16 - %218 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i16 + %217 = sub i64 %.sroa.02.08.i, %.sroa.0.05.i.i15 + %218 = sub i64 %.0.i.i.i21, %.sroa.0.05.i.i15 %219 = xor i64 %218, %217 %.unshifted.i = and i64 %219, %.val14.i %220 = icmp ult i64 %.unshifted.i, 16 @@ -5629,8 +5629,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.exit.i: ; br label %258 258: ; preds = %249, %235, %.lr.ph.i - %exitcond.not.i13 = icmp eq i64 %.sroa.02.08.i, %17 - br i1 %exitcond.not.i13, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i + %exitcond.not.i12 = icmp eq i64 %.sroa.02.08.i, %17 + br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i 259: ; preds = %170 %260 = landingpad { ptr, i32 } @@ -5647,18 +5647,18 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; pr %263 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %263, i64 %.pre15.i.fr, i64 %262 %.pre = load i64, ptr %7, align 8, !alias.scope !854 - br label %264 - -264: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - %265 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %266 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %267 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %268 = sub i64 %266, %265 - store i64 %268, ptr %267, align 8, !alias.scope !854 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %264 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %265 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %266 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %267 = sub i64 %265, %264 + store i64 %267, ptr %266, align 8, !alias.scope !854 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3), !noalias !854 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h6d85cfa73201d5ddE.exit -_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h6d85cfa73201d5ddE.exit: ; preds = %264, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb93fdfe614f94da8E.exit", %68, %12 +_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h6d85cfa73201d5ddE.exit: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb93fdfe614f94da8E.exit", %68, %12 %.merged.i = phi i64 [ %14, %12 ], [ -9223372036854775807, %264 ], [ %.sroa.5.052.ph, %68 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb93fdfe614f94da8E.exit" ] ret i64 %.merged.i } diff --git a/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll b/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll index 15a71597581..a6e3727a312 100644 --- a/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll +++ b/bench/rust-analyzer-rs/optimized/635ry91nhs2ocdh.ll @@ -1489,7 +1489,7 @@ common.resume: ; preds = %167, %73 %.not.not4.i.i = icmp eq i64 %21, 0 br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread, label %.lr.ph.i.i9 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %151 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread:; preds = %151 %152 = icmp ne ptr %.val.i, null tail call void @llvm.assume(i1 %152) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !332 @@ -1505,16 +1505,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa tail call void @llvm.assume(i1 %156) br label %160 -._crit_edge.i.i10: ; preds = %160 +._crit_edge.i.i10:; preds = %160 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %21, i64 16) %spec.select34.i = tail call i64 @llvm.umin.i64(i64 %21, i64 16) %157 = getelementptr inbounds i8, ptr %.val.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %157, ptr nonnull align 1 %.val.i, i64 %spec.select34.i, i1 false), !noalias !332 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !332 - %158 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @"_ZN4core3ptr71drop_in_place$LT$$LP$smol_str..SmolStr$C$mbe..expander..Binding$RP$$GT$17h449ad8e1b6cbef51E.llvm.5326854279421171428", ptr %158, align 8, !noalias !332 - %159 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 96, ptr %159, align 8, !noalias !332 + %165 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN4core3ptr71drop_in_place$LT$$LP$smol_str..SmolStr$C$mbe..expander..Binding$RP$$GT$17h449ad8e1b6cbef51E.llvm.5326854279421171428", ptr %165, align 8, !noalias !332 + %166 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 96, ptr %166, align 8, !noalias !332 store ptr %0, ptr %6, align 8, !noalias !332 br label %.lr.ph.i @@ -1544,8 +1544,8 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.threa %170 = load ptr, ptr %0, align 8, !alias.scope !332, !nonnull !7, !noundef !7 %171 = getelementptr inbounds i8, ptr %170, i64 %.sroa.02.010.i %172 = load i8, ptr %171, align 1, !noundef !7 - %.not.i11 = icmp eq i8 %172, -128 - br i1 %.not.i11, label %173, label %252 + %.not.i10 = icmp eq i8 %172, -128 + br i1 %.not.i10, label %173, label %252 173: ; preds = %.lr.ph.i %.neg.i = mul i64 %.sroa.02.010.i, -96 @@ -1568,13 +1568,13 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor %180 = invoke { ptr, i64 } @_ZN8smol_str4Repr6as_str17h6612cd4653de1669E.llvm.3862332030041601646(ptr noalias noundef nonnull readonly align 8 dereferenceable(96) %179) to label %.noexc.i14 unwind label %167 -.noexc.i14: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i +.noexc.i13: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i %181 = extractvalue { ptr, i64 } %180, 0 %182 = extractvalue { ptr, i64 } %180, 1 invoke void @"_ZN59_$LT$rustc_hash..FxHasher$u20$as$u20$core..hash..Hasher$GT$5write17hdaf3c64ce7294b9eE.llvm.3862332030041601646"(ptr noalias noundef nonnull align 8 dereferenceable(8) %5, ptr noalias noundef nonnull readonly align 1 %181, i64 noundef %182) to label %183 unwind label %167 -183: ; preds = %.noexc.i14 +183: ; preds = %.noexc.i13 %184 = load i64, ptr %5, align 8, !alias.scope !350, !noalias !359, !noundef !7 %185 = call i64 @llvm.fshl.i64(i64 %184, i64 %184, i64 5) %186 = xor i64 %185, 255 @@ -1583,16 +1583,16 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor call void @llvm.experimental.noalias.scope.decl(metadata !363) %188 = load i64, ptr %18, align 8, !alias.scope !366, !noundef !7 %189 = load ptr, ptr %0, align 8, !alias.scope !366, !nonnull !7, !noundef !7 - %.sroa.0.011.i.i15 = and i64 %187, %188 - %190 = getelementptr inbounds i8, ptr %189, i64 %.sroa.0.011.i.i15 - %.0.copyload.i912.i.i16 = load <16 x i8>, ptr %190, align 1, !noalias !367 - %191 = icmp slt <16 x i8> %.0.copyload.i912.i.i16, zeroinitializer + %.sroa.0.011.i.i14 = and i64 %187, %188 + %190 = getelementptr inbounds i8, ptr %189, i64 %.sroa.0.011.i.i14 + %.0.copyload.i912.i.i15 = load <16 x i8>, ptr %190, align 1, !noalias !367 + %191 = icmp slt <16 x i8> %.0.copyload.i912.i.i15, zeroinitializer %192 = bitcast <16 x i1> %191 to i16 - %.not.i.not13.i.i17 = icmp eq i16 %192, 0 - br i1 %.not.i.not13.i.i17, label %.lr.ph.i18.i, label %._crit_edge.i17.i + %.not.i.not13.i.i16 = icmp eq i16 %192, 0 + br i1 %.not.i.not13.i.i16, label %.lr.ph.i17.i, label %._crit_edge.i.i17 -.lr.ph.i18.i: ; preds = %183, %.lr.ph.i18.i - %.sroa.0.015.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i18.i ], [ %.sroa.0.011.i.i15, %183 ] +.lr.ph.i17.i: ; preds = %183, %.lr.ph.i17.i + %.sroa.0.015.i.i22 = phi i64 [ %.sroa.0.0.i.i24, %.lr.ph.i18.i ], [ %.sroa.0.011.i.i14, %183 ] %.sroa.7.014.i.i23 = phi i64 [ %193, %.lr.ph.i18.i ], [ 0, %183 ] %193 = add i64 %.sroa.7.014.i.i23, 16 %194 = add i64 %193, %.sroa.0.015.i.i22 @@ -1602,10 +1602,10 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor %196 = icmp slt <16 x i8> %.0.copyload.i9.i.i25, zeroinitializer %197 = bitcast <16 x i1> %196 to i16 %.not.i.not.i.i26 = icmp eq i16 %197, 0 - br i1 %.not.i.not.i.i26, label %.lr.ph.i18.i, label %._crit_edge.i17.i + br i1 %.not.i.not.i.i26, label %.lr.ph.i17.i, label %._crit_edge.i.i17 -._crit_edge.i17.i: ; preds = %.lr.ph.i18.i, %183 - %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.011.i.i15, %183 ], [ %.sroa.0.0.i.i24, %.lr.ph.i18.i ] +._crit_edge.i.i17: ; preds = %.lr.ph.i17.i, %183 + %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.011.i.i14, %183 ], [ %.sroa.0.0.i.i24, %.lr.ph.i18.i ] %.lcssa.i.i19 = phi i16 [ %192, %183 ], [ %197, %.lr.ph.i18.i ] %198 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) %199 = zext nneg i16 %198 to i64 @@ -1616,7 +1616,7 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor %204 = icmp sgt i8 %203, -1 br i1 %204, label %205, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i -205: ; preds = %._crit_edge.i17.i +205: ; preds = %._crit_edge.i.i17 %206 = load <16 x i8>, ptr %189, align 16, !noalias !370 %207 = icmp slt <16 x i8> %206, zeroinitializer %208 = bitcast <16 x i1> %207 to i16 @@ -1626,10 +1626,10 @@ _ZN4core3ptr19swap_nonoverlapping17h042d60e91db5eac9E.exit.i: ; preds = %_ZN4cor call void @llvm.assume(i1 %209) br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i: ; preds = %205, %._crit_edge.i17.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326854279421171428.exit.i: ; preds = %205, %._crit_edge.i.i17 %.0.i.i.i20 = phi i64 [ %211, %205 ], [ %201, %._crit_edge.i17.i ] - %212 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i15 - %213 = sub i64 %.0.i.i.i20, %.sroa.0.011.i.i15 + %212 = sub i64 %.sroa.02.010.i, %.sroa.0.011.i.i14 + %213 = sub i64 %.0.i.i.i20, %.sroa.0.011.i.i14 %214 = xor i64 %213, %212 %.unshifted.i = and i64 %214, %188 %215 = icmp ult i64 %.unshifted.i, 16 @@ -1693,8 +1693,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17he8e89ab18b256145E.llvm.5326 br label %252 252: ; preds = %243, %229, %.lr.ph.i - %exitcond.not.i12 = icmp eq i64 %.sroa.02.010.i, %19 - br i1 %exitcond.not.i12, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i + %exitcond.not.i11 = icmp eq i64 %.sroa.02.010.i, %19 + br i1 %exitcond.not.i11, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, label %.lr.ph.i 253: ; preds = %167 %254 = landingpad { ptr, i32 } @@ -1711,26 +1711,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit: ; pr %257 = icmp ult i64 %.pre19.i.fr, 8 %spec.select = select i1 %257, i64 %.pre19.i.fr, i64 %256 %.pre = load i64, ptr %10, align 8, !alias.scope !332 - br label %258 - -258: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread - %259 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %260 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] - %261 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %262 = sub i64 %260, %259 - store i64 %262, ptr %261, align 8, !alias.scope !332 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread + %258 = phi i64 [ %11, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %259 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit ] + %260 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %261 = sub i64 %259, %258 + store i64 %261, ptr %260, align 8, !alias.scope !332 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !332 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit", %258 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i: ; preds = %72, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h782a8b650e027c37E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %258 ], [ %.sroa.9.049.ph, %72 ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit" ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %258 ], [ %.sroa.5.051.ph, %72 ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h5480da71eedc441cE.exit" ] - %263 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %264 = insertvalue { i64, i64 } %263, i64 %.sroa.4.1.i, 1 + %262 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %263 = insertvalue { i64, i64 } %262, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hc921e874a7631f52E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17hc921e874a7631f52E.exit: ; preds = %15, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i - %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %264, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i ] + %.merged.i = phi { i64, i64 } [ %16, %15 ], [ %263, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h22c91aaf131d0654E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll b/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll index 7df650da6a6..78bd3d6d83c 100644 --- a/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll +++ b/bench/tikv-rs/optimized/5l8bi66t9fkz97f2037rofy4n.ll @@ -481,9 +481,9 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exi store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 %65 = load i64, ptr %8, align 8, !alias.scope !59, !noalias !60, !noundef !13 %invariant.gep = getelementptr i8, ptr %64, i64 16 - %invariant.gep50 = getelementptr i8, ptr %64, i64 -24 + %invariant.gep51 = getelementptr i8, ptr %64, i64 -24 %66 = icmp eq i64 %65, 0 - br i1 %66, label %._crit_edge56, label %.preheader.lr.ph + br i1 %66, label %._crit_edge57, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit %67 = load ptr, ptr %0, align 8, !alias.scope !59, !noalias !60, !nonnull !13, !noundef !13 @@ -495,8 +495,8 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exi _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread: ; preds = %54, %56, %58 %.pn = phi { i64, i64 } [ %59, %58 ], [ %57, %56 ], [ %55, %54 ] - %.sroa.7.035 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.036 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.036 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.037 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6), !noalias !50 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i @@ -508,36 +508,36 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exi .preheader: ; preds = %.preheader.lr.ph, %133 %74 = phi ptr [ %67, %.preheader.lr.ph ], [ %139, %133 ] - %.sroa.025.055 = phi ptr [ %67, %.preheader.lr.ph ], [ %.sroa.025.1.lcssa, %133 ] - %.sroa.5.054 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %133 ] - %.sroa.9.053 = phi i64 [ %65, %.preheader.lr.ph ], [ %106, %133 ] - %.sroa.13.052 = phi i16 [ %71, %.preheader.lr.ph ], [ %104, %133 ] - %.not.i245 = icmp eq i16 %.sroa.13.052, 0 - br i1 %.not.i245, label %.noexc3, label %._crit_edge + %.sroa.026.056 = phi ptr [ %67, %.preheader.lr.ph ], [ %.sroa.026.1.lcssa, %133 ] + %.sroa.5.055 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %133 ] + %.sroa.9.054 = phi i64 [ %65, %.preheader.lr.ph ], [ %106, %133 ] + %.sroa.13.053 = phi i16 [ %71, %.preheader.lr.ph ], [ %104, %133 ] + %.not.i246 = icmp eq i16 %.sroa.13.053, 0 + br i1 %.not.i246, label %.noexc3, label %._crit_edge .noexc3: ; preds = %.preheader, %.noexc3 - %.sroa.025.147 = phi ptr [ %75, %.noexc3 ], [ %.sroa.025.055, %.preheader ] - %.sroa.5.146 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.054, %.preheader ] - %75 = getelementptr inbounds nuw i8, ptr %.sroa.025.147, i64 16 + %.sroa.026.148 = phi ptr [ %75, %.noexc3 ], [ %.sroa.026.056, %.preheader ] + %.sroa.5.147 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.055, %.preheader ] + %75 = getelementptr inbounds nuw i8, ptr %.sroa.026.148, i64 16 %76 = load <16 x i8>, ptr %75, align 16 %77 = icmp slt <16 x i8> %76, zeroinitializer %78 = bitcast <16 x i1> %77 to i16 - %79 = add i64 %.sroa.5.146, 16 + %79 = add i64 %.sroa.5.147, 16 %.not.i2 = icmp eq i16 %78, -1 br i1 %.not.i2, label %.noexc3, label %._crit_edge.loopexit -._crit_edge56.loopexit: ; preds = %133 - %.pre67 = load i64, ptr %8, align 8, !alias.scope !59, !noalias !60 - br label %._crit_edge56 +._crit_edge57.loopexit: ; preds = %133 + %.pre68 = load i64, ptr %8, align 8, !alias.scope !59, !noalias !60 + br label %._crit_edge57 -._crit_edge56: ; preds = %._crit_edge56.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit - %80 = phi i64 [ %.pre67, %._crit_edge56.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit ] +._crit_edge57: ; preds = %._crit_edge57.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit + %80 = phi i64 [ %.pre68, %._crit_edge56.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit ] %81 = sub i64 %.sroa.02.0.i.i, %80 store i64 %81, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 store i64 %80, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 br label %82 -82: ; preds = %82, %._crit_edge56 +82: ; preds = %82, %._crit_edge57 %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge56 ], [ %87, %82 ] %83 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %84 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i @@ -585,15 +585,15 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h74cbe161f7b8b670E.exit.i. br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.052, %.preheader ], [ %100, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.054, %.preheader ], [ %79, %._crit_edge.loopexit ] - %.sroa.025.1.lcssa = phi ptr [ %.sroa.025.055, %.preheader ], [ %75, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.053, %.preheader ], [ %100, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.055, %.preheader ], [ %79, %._crit_edge.loopexit ] + %.sroa.026.1.lcssa = phi ptr [ %.sroa.026.056, %.preheader ], [ %75, %._crit_edge.loopexit ] %101 = add i16 %.sroa.13.1.lcssa, -1 %102 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %103 = zext nneg i16 %102 to i64 %104 = and i16 %101, %.sroa.13.1.lcssa %105 = add i64 %.sroa.5.1.lcssa, %103 - %106 = add i64 %.sroa.9.053, -1 + %106 = add i64 %.sroa.9.054, -1 %107 = sub nsw i64 0, %105 %108 = getelementptr inbounds { { ptr, [1 x i64] }, ptr }, ptr %74, i64 %107 %109 = getelementptr inbounds i8, ptr %108, i64 -24 @@ -659,13 +659,13 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h74cbe161f7b8b670E.exit.i. %140 = getelementptr i8, ptr %139, i64 %.neg.i.i %141 = getelementptr i8, ptr %140, i64 -24 %.neg73.i.i = mul i64 %.sroa.0.0.i4.i.i, -24 - %gep51 = getelementptr i8, ptr %invariant.gep50, i64 %.neg73.i.i - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep51, ptr noundef nonnull align 1 dereferenceable(24) %141, i64 24, i1 false) + %gep52 = getelementptr i8, ptr %invariant.gep51, i64 %.neg73.i.i + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep52, ptr noundef nonnull align 1 dereferenceable(24) %141, i64 24, i1 false) %142 = icmp eq i64 %106, 0 - br i1 %142, label %._crit_edge56.loopexit, label %.preheader + br i1 %142, label %._crit_edge57.loopexit, label %.preheader -common.resume: ; preds = %172, %72 - %common.resume.op = phi { ptr, i32 } [ %73, %72 ], [ %173, %172 ] +common.resume: ; preds = %170, %72 + %common.resume.op = phi { ptr, i32 } [ %73, %72 ], [ %171, %172 ] resume { ptr, i32 } %common.resume.op 143: ; preds = %12 @@ -674,7 +674,7 @@ common.resume: ; preds = %172, %72 %.not1.i.i = icmp eq i64 %17, 0 br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread, label %.lr.ph.i.i7 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread: ; preds = %143 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread:; preds = %143 %144 = icmp ne ptr %.val10.i, null tail call void @llvm.assume(i1 %144) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !70 @@ -690,11 +690,11 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.threa tail call void @llvm.assume(i1 %148) br label %150 -._crit_edge.i.i8: ; preds = %150 +._crit_edge.i.i8:; preds = %150 %149 = icmp ult i64 %17, 16 br i1 %149, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.exit.i, label %.lr.ph.i, !prof !73 -150: ; preds = %150, %.lr.ph.i.i7 +150:; preds = %150, %.lr.ph.i.i7 %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %151, %150 ] %.sroa.5.02.i.i = phi i64 [ %.sroa.07.0.i.i.i.i, %.lr.ph.i.i7 ], [ %152, %150 ] %151 = add i64 %.sroa.0.03.i.i, 16 @@ -717,42 +717,42 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hba3a617a77e5b800E.ex %157 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sink26.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %157, ptr nonnull align 1 %.val10.i, i64 %.sink25.i, i1 false), !noalias !70 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !70 - %158 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr @_ZN4core3ops8function6FnOnce9call_once17h7b495b779f890d8eE, ptr %158, align 8, !noalias !70 - %159 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 24, ptr %159, align 8, !noalias !70 + %157 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr @_ZN4core3ops8function6FnOnce9call_once17h7b495b779f890d8eE, ptr %157, align 8, !noalias !70 + %158 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 24, ptr %158, align 8, !noalias !70 store ptr %0, ptr %5, align 8, !noalias !70 br label %160 160: ; preds = %236, %.lr.ph.i %.sroa.0.17.i = phi i64 [ 1, %.lr.ph.i ], [ %.sroa.0.1.i10, %236 ] - %.sroa.0.06.i = phi i64 [ 0, %.lr.ph.i ], [ %.sroa.0.17.i, %236 ] + %.sroa.0.17.i = phi i64 [ 0, %.lr.ph.i ], [ %.sroa.0.17.i, %236 ] %161 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %162 = getelementptr inbounds nuw i8, ptr %161, i64 %.sroa.0.06.i + %162 = getelementptr inbounds nuw i8, ptr %161, i64 %.sroa.0.17.i %163 = load i8, ptr %162, align 1, !noundef !13 %.not.i9 = icmp eq i8 %163, -128 br i1 %.not.i9, label %164, label %236 164: ; preds = %160 %.neg.i = mul i64 %.sroa.0.06.i, -24 - %165 = getelementptr i8, ptr %161, i64 %.neg.i - %166 = getelementptr i8, ptr %165, i64 -24 - %167 = sub nsw i64 0, %.sroa.0.06.i + %163 = getelementptr i8, ptr %161, i64 %.neg.i + %164 = getelementptr i8, ptr %163, i64 -24 + %165 = sub nsw i64 0, %.sroa.0.06.i br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i _ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i: ; preds = %.preheader.i - %.pre.i19 = load ptr, ptr %0, align 8, !alias.scope !74, !noalias !77 + %.pre.i20 = load ptr, ptr %0, align 8, !alias.scope !74, !noalias !77 br label %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i _ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i, %164 - %168 = phi ptr [ %.pre.i19, %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i ], [ %161, %164 ] - %169 = getelementptr inbounds { { ptr, [1 x i64] }, ptr }, ptr %168, i64 %167 - %170 = getelementptr inbounds i8, ptr %169, i64 -24 - %171 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h439cdb546578af0bE(ptr noalias noundef nonnull readonly align 1 %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %170) - to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" unwind label %172 - -172: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i - %173 = landingpad { ptr, i32 } + %166 = phi ptr [ %.pre.i20, %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i ], [ %161, %164 ] + %167 = getelementptr inbounds { { ptr, [1 x i64] }, ptr }, ptr %166, i64 %165 + %168 = getelementptr inbounds i8, ptr %167, i64 -24 + %169 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h439cdb546578af0bE(ptr noalias noundef nonnull readonly align 1 %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %168) + to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" unwind label %170 + +170: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i + %171 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h2cd39aba3336feb0E"(ptr noalias noundef align 8 dereferenceable(24) %5) #17 to label %common.resume unwind label %239 @@ -760,105 +760,105 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i: ; preds = "_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i": ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.i %.val.i12 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 %.val9.i = load i64, ptr %14, align 8, !alias.scope !70, !noundef !13 - %.sroa.0.05.i.i13 = and i64 %.val9.i, %171 - %174 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.05.i.i13 - %.sroa.0.0.copyload.i46.i.i14 = load <16 x i8>, ptr %174, align 1 - %175 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i14, zeroinitializer - %176 = bitcast <16 x i1> %175 to i16 - %.not.not.i.not7.i.i15 = icmp eq i16 %176, 0 - br i1 %.not.not.i.not7.i.i15, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !68 - -.lr.ph.i13.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i", %.lr.ph.i13.i - %.sroa.0.09.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ], [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] - %.sroa.7.08.i.i21 = phi i64 [ %177, %.lr.ph.i13.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] - %177 = add i64 %.sroa.7.08.i.i21, 16 - %178 = add i64 %177, %.sroa.0.09.i.i20 - %.sroa.0.0.i.i22 = and i64 %178, %.val9.i - %179 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i.i22 - %.sroa.0.0.copyload.i4.i.i23 = load <16 x i8>, ptr %179, align 1 - %180 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i23, zeroinitializer - %181 = bitcast <16 x i1> %180 to i16 - %.not.not.i.not.i.i24 = icmp eq i16 %181, 0 - br i1 %.not.not.i.not.i.i24, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !69 - -._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" - %.sroa.0.0.lcssa.i.i16 = phi i64 [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ] - %.lcssa.i.i17 = phi i16 [ %176, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %181, %.lr.ph.i13.i ] - %182 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i17, i1 true) - %183 = zext nneg i16 %182 to i64 - %184 = add i64 %.sroa.0.0.lcssa.i.i16, %183 - %185 = and i64 %184, %.val9.i - %186 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %185 - %187 = load i8, ptr %186, align 1, !noundef !13 - %188 = icmp sgt i8 %187, -1 - br i1 %188, label %189, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i, !prof !45 - -189: ; preds = %._crit_edge.i12.i - %190 = load <16 x i8>, ptr %.val.i12, align 16 - %191 = icmp slt <16 x i8> %190, zeroinitializer - %192 = bitcast <16 x i1> %191 to i16 - %193 = icmp ne i16 %192, 0 - tail call void @llvm.assume(i1 %193) - %194 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %192, i1 true) - %195 = zext nneg i16 %194 to i64 + %.sroa.0.05.i.i13 = and i64 %.val9.i, %169 + %172 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.05.i.i13 + %.sroa.0.0.copyload.i46.i.i14 = load <16 x i8>, ptr %172, align 1 + %173 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i14, zeroinitializer + %174 = bitcast <16 x i1> %173 to i16 + %.not.not.i.not7.i.i15 = icmp eq i16 %174, 0 + br i1 %.not.not.i.not7.i.i15, label %.lr.ph.i12.i, label %._crit_edge.i.i16, !prof !68 + +.lr.ph.i12.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i", %.lr.ph.i12.i + %.sroa.0.09.i.i21 = phi i64 [ %.sroa.0.0.i.i23, %.lr.ph.i13.i ], [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] + %.sroa.7.08.i.i22 = phi i64 [ %175, %.lr.ph.i13.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ] + %175 = add i64 %.sroa.7.08.i.i22, 16 + %176 = add i64 %175, %.sroa.0.09.i.i21 + %.sroa.0.0.i.i23 = and i64 %176, %.val9.i + %177 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i.i23 + %.sroa.0.0.copyload.i4.i.i24 = load <16 x i8>, ptr %177, align 1 + %178 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i24, zeroinitializer + %179 = bitcast <16 x i1> %178 to i16 + %.not.not.i.not.i.i25 = icmp eq i16 %179, 0 + br i1 %.not.not.i.not.i.i25, label %.lr.ph.i12.i, label %._crit_edge.i.i16, !prof !69 + +._crit_edge.i.i16: ; preds = %.lr.ph.i12.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" + %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i13, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %.sroa.0.0.i.i23, %.lr.ph.i13.i ] + %.lcssa.i.i18 = phi i16 [ %174, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hde922dedc6eb239cE.exit.i" ], [ %179, %.lr.ph.i13.i ] + %180 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) + %181 = zext nneg i16 %180 to i64 + %182 = add i64 %.sroa.0.0.lcssa.i.i17, %181 + %183 = and i64 %182, %.val9.i + %184 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %183 + %185 = load i8, ptr %184, align 1, !noundef !13 + %186 = icmp sgt i8 %185, -1 + br i1 %186, label %187, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i, !prof !45 + +187: ; preds = %._crit_edge.i.i16 + %188 = load <16 x i8>, ptr %.val.i12, align 16 + %189 = icmp slt <16 x i8> %188, zeroinitializer + %190 = bitcast <16 x i1> %189 to i16 + %191 = icmp ne i16 %190, 0 + tail call void @llvm.assume(i1 %191) + %192 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %190, i1 true) + %193 = zext nneg i16 %192 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i: ; preds = %189, %._crit_edge.i12.i - %.sroa.0.0.i4.i.i18 = phi i64 [ %195, %189 ], [ %185, %._crit_edge.i12.i ] - %196 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i13 - %197 = sub i64 %.sroa.0.0.i4.i.i18, %.sroa.0.05.i.i13 - %198 = xor i64 %197, %196 - %.unshifted.i = and i64 %198, %.val9.i - %199 = icmp ult i64 %.unshifted.i, 16 - br i1 %199, label %213, label %200, !prof !79 - -200: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i - %.neg8.i = mul i64 %.sroa.0.0.i4.i.i18, -24 - %201 = getelementptr i8, ptr %.val.i12, i64 %.neg8.i - %202 = getelementptr i8, ptr %201, i64 -24 - %203 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i4.i.i18 - %204 = load i8, ptr %203, align 1, !noundef !13 - %205 = lshr i64 %171, 57 - %206 = trunc nuw nsw i64 %205 to i8 - %207 = add i64 %.sroa.0.0.i4.i.i18, -16 - %208 = and i64 %207, %.val9.i - store i8 %206, ptr %203, align 1 - %209 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %210 = getelementptr i8, ptr %209, i64 %208 - %211 = getelementptr i8, ptr %210, i64 16 - store i8 %206, ptr %211, align 1 - %212 = icmp eq i8 %204, -1 - br i1 %212, label %227, label %.preheader.i - -213: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i - %214 = lshr i64 %171, 57 - %215 = trunc nuw nsw i64 %214 to i8 - %216 = add i64 %.sroa.0.06.i, -16 - %217 = and i64 %.val9.i, %216 - %218 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.06.i - store i8 %215, ptr %218, align 1 - %219 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 - %220 = getelementptr i8, ptr %219, i64 %217 - %221 = getelementptr i8, ptr %220, i64 16 - store i8 %215, ptr %221, align 1 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i: ; preds = %187, %._crit_edge.i.i16 + %.sroa.0.0.i4.i.i19 = phi i64 [ %193, %189 ], [ %183, %._crit_edge.i12.i ] + %194 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i13 + %195 = sub i64 %.sroa.0.0.i4.i.i19, %.sroa.0.05.i.i13 + %196 = xor i64 %195, %194 + %.unshifted.i = and i64 %196, %.val9.i + %197 = icmp ult i64 %.unshifted.i, 16 + br i1 %197, label %211, label %198, !prof !79 + +198: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i + %.neg8.i = mul i64 %.sroa.0.0.i4.i.i19, -24 + %199 = getelementptr i8, ptr %.val.i12, i64 %.neg8.i + %200 = getelementptr i8, ptr %199, i64 -24 + %201 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.0.i4.i.i19 + %202 = load i8, ptr %201, align 1, !noundef !13 + %203 = lshr i64 %169, 57 + %204 = trunc nuw nsw i64 %203 to i8 + %205 = add i64 %.sroa.0.0.i4.i.i19, -16 + %206 = and i64 %205, %.val9.i + store i8 %204, ptr %201, align 1 + %207 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 + %208 = getelementptr i8, ptr %207, i64 %206 + %209 = getelementptr i8, ptr %208, i64 16 + store i8 %204, ptr %209, align 1 + %210 = icmp eq i8 %202, -1 + br i1 %210, label %225, label %.preheader.i + +211: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i + %212 = lshr i64 %169, 57 + %213 = trunc nuw nsw i64 %212 to i8 + %214 = add i64 %.sroa.0.06.i, -16 + %215 = and i64 %.val9.i, %214 + %216 = getelementptr inbounds nuw i8, ptr %.val.i12, i64 %.sroa.0.06.i + store i8 %213, ptr %216, align 1 + %217 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 + %218 = getelementptr i8, ptr %217, i64 %215 + %219 = getelementptr i8, ptr %218, i64 16 + store i8 %213, ptr %219, align 1 br label %236 -.preheader.i: ; preds = %200, %.preheader.i - %.sroa.04.09.i.i = phi i64 [ %226, %.preheader.i ], [ 0, %200 ] - %222 = getelementptr inbounds nuw i8, ptr %166, i64 %.sroa.04.09.i.i - %223 = getelementptr inbounds nuw i8, ptr %202, i64 %.sroa.04.09.i.i - %224 = load i8, ptr %222, align 1 - %225 = load i8, ptr %223, align 1 - store i8 %225, ptr %222, align 1 - store i8 %224, ptr %223, align 1 - %226 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i = icmp eq i64 %226, 24 +.preheader.i: ; preds = %198, %.preheader.i + %.sroa.04.09.i.i = phi i64 [ %224, %.preheader.i ], [ 0, %200 ] + %220 = getelementptr inbounds nuw i8, ptr %164, i64 %.sroa.04.09.i.i + %221 = getelementptr inbounds nuw i8, ptr %200, i64 %.sroa.04.09.i.i + %222 = load i8, ptr %220, align 1 + %223 = load i8, ptr %221, align 1 + store i8 %223, ptr %220, align 1 + store i8 %222, ptr %221, align 1 + %224 = add nuw nsw i64 %.sroa.04.09.i.i, 1 + %exitcond.not.i.i = icmp eq i64 %224, 24 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping7runtime17h8e34adbfaf3c7d40E.exit.loopexit.i, label %.preheader.i -227: ; preds = %200 - %228 = add i64 %.sroa.0.06.i, -16 - %229 = load i64, ptr %14, align 8, !alias.scope !70, !noundef !13 - %230 = and i64 %229, %228 +225: ; preds = %198 + %226 = add i64 %.sroa.0.06.i, -16 + %227 = load i64, ptr %14, align 8, !alias.scope !70, !noundef !13 + %228 = and i64 %227, %226 %231 = load ptr, ptr %0, align 8, !alias.scope !70, !nonnull !13, !noundef !13 %232 = getelementptr inbounds nuw i8, ptr %231, i64 %.sroa.0.06.i store i8 -1, ptr %232, align 1 @@ -869,7 +869,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h9ed9541d517f717bE.exit.i: ; tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %202, ptr noundef nonnull align 1 dereferenceable(24) %166, i64 24, i1 false) br label %236 -236: ; preds = %227, %213, %160 +236:; preds = %227, %213, %160 %237 = icmp ult i64 %.sroa.0.17.i, %17 %238 = zext i1 %237 to i64 %.sroa.0.1.i10 = add nuw i64 %.sroa.0.17.i, %238 @@ -885,31 +885,31 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit: ; pr %.pre14.i = load i64, ptr %14, align 8, !alias.scope !70 %.pre14.i.fr = freeze i64 %.pre14.i %.pre15.i = add i64 %.pre14.i.fr, 1 - %241 = lshr i64 %.pre15.i, 3 - %242 = mul nuw i64 %241, 7 - %243 = icmp ult i64 %.pre14.i.fr, 8 - %spec.select = select i1 %243, i64 %.pre14.i.fr, i64 %242 + %239 = lshr i64 %.pre15.i, 3 + %240 = mul nuw i64 %239, 7 + %241 = icmp ult i64 %.pre14.i.fr, 8 + %spec.select = select i1 %241, i64 %.pre14.i.fr, i64 %240 %.pre = load i64, ptr %8, align 8, !alias.scope !70 - br label %244 - -244: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread - %245 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] - %246 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] - %247 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %248 = sub i64 %246, %245 - store i64 %248, ptr %247, align 8, !alias.scope !70 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread + %242 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] + %243 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit ] + %244 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %245 = sub i64 %243, %242 + store i64 %245, ptr %244, align 8, !alias.scope !70 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5), !noalias !70 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit", %244 - %.sroa.4.1.i = phi i64 [ undef, %244 ], [ %.sroa.12.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %244 ], [ %.sroa.7.035, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] - %249 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %250 = insertvalue { i64, i64 } %249, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h50daffe8a0c79e4dE.exit.thread + %.sroa.4.1.i = phi i64 [ undef, %244 ], [ %.sroa.12.037, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %244 ], [ %.sroa.7.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h0de15cd541bb7de0E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hb5d84979d6152939E.exit" ] + %246 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %247 = insertvalue { i64, i64 } %246, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h1809b63152262295E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h1809b63152262295E.exit: ; preds = %21, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i - %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %250, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i ] + %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %247, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h6da2922341bc6f0dE.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll b/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll index 1961eaa80ff..80896c15dce 100644 --- a/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll +++ b/bench/tree-sitter-rs/optimized/2xun21ofbsn7p9xn.ll @@ -758,10 +758,10 @@ common.resume: ; preds = %156, %77 %.not.not4.i.i = icmp eq i64 %22, 0 br i1 %.not.not4.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread, label %.lr.ph.i.i9 -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread: ; preds = %142 +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread:; preds = %142 %143 = icmp ne ptr %.val18.i, null tail call void @llvm.assume(i1 %143) - br label %250 + br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread .lr.ph.i.i9: ; preds = %142 %144 = lshr i64 %22, 4 @@ -773,14 +773,14 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit tail call void @llvm.assume(i1 %147) br label %149 -._crit_edge.i.i10: ; preds = %149 +._crit_edge.i.i10:; preds = %149 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %22, i64 16) %spec.select61.i = tail call i64 @llvm.umin.i64(i64 %22, i64 16) %148 = getelementptr inbounds i8, ptr %.val18.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %148, ptr nonnull align 1 %.val18.i, i64 %spec.select61.i, i1 false), !noalias !103 - br label %166 + br label %.lr.ph23.i -149: ; preds = %149, %.lr.ph.i.i9 +149:; preds = %149, %.lr.ph.i.i9 %.sroa.01.06.i.i = phi i64 [ 0, %.lr.ph.i.i9 ], [ %151, %149 ] %.sroa.5.05.i.i = phi i64 [ %.0.i.i.i.i.i, %.lr.ph.i.i9 ], [ %150, %149 ] %150 = add i64 %.sroa.5.05.i.i, -1 @@ -809,136 +809,136 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit store i64 %165, ptr %164, align 8, !noalias !112 br label %common.resume -166: ; preds = %245, %._crit_edge.i.i10 - %167 = phi ptr [ %.val18.i, %._crit_edge.i.i10 ], [ %246, %245 ] +.lr.ph23.i: ; preds = %245, %._crit_edge.i.i10 + %166 = phi ptr [ %.val18.i, %._crit_edge.i.i10 ], [ %246, %245 ] %.sroa.02.022.i = phi i64 [ 0, %._crit_edge.i.i10 ], [ %168, %245 ] - %168 = add nuw i64 %.sroa.02.022.i, 1 - %169 = getelementptr inbounds i8, ptr %167, i64 %.sroa.02.022.i - %170 = load i8, ptr %169, align 1, !noundef !7 - %.not.i11 = icmp eq i8 %170, -128 - br i1 %.not.i11, label %171, label %245 - -171: ; preds = %166 - %172 = shl i64 %.sroa.02.022.i, 3 - %173 = sub nuw nsw i64 -8, %172 - %174 = getelementptr inbounds i8, ptr %167, i64 %173 - %175 = sub nsw i64 0, %.sroa.02.022.i - %176 = getelementptr inbounds i64, ptr %167, i64 %175 - %177 = getelementptr inbounds i8, ptr %176, i64 -8 - %.val5.i16.i = load i64, ptr %177, align 8, !noalias !117, !noundef !7 - %178 = icmp ult i64 %.val5.i16.i, %3 - br i1 %178, label %.lr.ph.i, label %._crit_edge.i, !prof !121 + %167 = add nuw i64 %.sroa.02.022.i, 1 + %168 = getelementptr inbounds i8, ptr %166, i64 %.sroa.02.022.i + %169 = load i8, ptr %168, align 1, !noundef !7 + %.not.i10 = icmp eq i8 %169, -128 + br i1 %.not.i10, label %170, label %244 + +170: ; preds = %.lr.ph23.i + %171 = shl i64 %.sroa.02.022.i, 3 + %172 = sub nuw nsw i64 -8, %171 + %173 = getelementptr inbounds i8, ptr %166, i64 %172 + %174 = sub nsw i64 0, %.sroa.02.022.i + %175 = getelementptr inbounds i64, ptr %166, i64 %174 + %176 = getelementptr inbounds i8, ptr %175, i64 -8 + %.val5.i16.i = load i64, ptr %176, align 8, !noalias !117, !noundef !7 + %177 = icmp ult i64 %.val5.i16.i, %3 + br i1 %177, label %.lr.ph.i, label %._crit_edge.i, !prof !121 _ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i: ; preds = %.preheader.i tail call void @llvm.experimental.noalias.scope.decl(metadata !122) %.val.i.i21 = load ptr, ptr %0, align 8, !alias.scope !124, !noalias !125, !nonnull !7, !noundef !7 - %179 = getelementptr inbounds i64, ptr %.val.i.i21, i64 %175 - %180 = getelementptr inbounds i8, ptr %179, i64 -8 - %.val5.i.i = load i64, ptr %180, align 8, !noalias !126, !noundef !7 - %181 = icmp ult i64 %.val5.i.i, %3 - br i1 %181, label %.lr.ph.i, label %._crit_edge.i, !prof !127 + %178 = getelementptr inbounds i64, ptr %.val.i.i21, i64 %174 + %179 = getelementptr inbounds i8, ptr %178, i64 -8 + %.val5.i.i = load i64, ptr %179, align 8, !noalias !126, !noundef !7 + %180 = icmp ult i64 %.val5.i.i, %3 + br i1 %180, label %.lr.ph.i, label %._crit_edge.i, !prof !127 -._crit_edge.i: ; preds = %171, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i +._crit_edge.i: ; preds = %170, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i %.val5.i.lcssa.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %.val5.i16.i, %171 ] invoke void @_ZN4core9panicking18panic_bounds_check17h8331054858f0bf20E(i64 noundef %.val5.i.lcssa.i, i64 noundef %3, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.65f7b52c0c3eec1c18e19b0eb65d3e63.7) #23 to label %.noexc.i14 unwind label %156 -.noexc.i14: ; preds = %._crit_edge.i +.noexc.i13: ; preds = %._crit_edge.i unreachable -.lr.ph.i: ; preds = %171, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i +.lr.ph.i: ; preds = %170, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i %.val5.i18.i = phi i64 [ %.val5.i.i, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %.val5.i16.i, %171 ] - %.val.i17.i = phi ptr [ %.val.i.i21, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %167, %171 ] - %182 = getelementptr inbounds [0 x { { { { i64, ptr }, i64 } }, { i64, [8 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i18.i, i32 2 - %183 = load i64, ptr %182, align 8, !noalias !128, !noundef !7 + %.val.i17.i = phi ptr [ %.val.i.i21, %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i ], [ %166, %171 ] + %181 = getelementptr inbounds [0 x { { { { i64, ptr }, i64 } }, { i64, [8 x i64] }, i64 }], ptr %2, i64 0, i64 %.val5.i18.i, i32 2 + %182 = load i64, ptr %181, align 8, !noalias !128, !noundef !7 %.val17.i = load i64, ptr %19, align 8, !alias.scope !103, !noundef !7 - %.sroa.0.05.i.i15 = and i64 %.val17.i, %183 - %184 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.05.i.i15 - %.0.copyload.i46.i.i16 = load <16 x i8>, ptr %184, align 1, !noalias !130 - %185 = icmp slt <16 x i8> %.0.copyload.i46.i.i16, zeroinitializer - %186 = bitcast <16 x i1> %185 to i16 - %.not.not.i.not7.i.i17 = icmp eq i16 %186, 0 - br i1 %.not.not.i.not7.i.i17, label %.lr.ph.i21.i, label %._crit_edge.i20.i - -._crit_edge.i20.i: ; preds = %.lr.ph.i21.i, %.lr.ph.i - %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.05.i.i15, %.lr.ph.i ], [ %.sroa.0.0.i.i25, %.lr.ph.i21.i ] - %.lcssa.i.i19 = phi i16 [ %186, %.lr.ph.i ], [ %204, %.lr.ph.i21.i ] - %187 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) - %188 = zext nneg i16 %187 to i64 - %189 = add i64 %.sroa.0.0.lcssa.i.i18, %188 - %190 = and i64 %189, %.val17.i - %191 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %190 - %192 = load i8, ptr %191, align 1, !noundef !7 - %193 = icmp sgt i8 %192, -1 - br i1 %193, label %194, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i - -194: ; preds = %._crit_edge.i20.i - %195 = load <16 x i8>, ptr %.val.i17.i, align 16, !noalias !133 - %196 = icmp slt <16 x i8> %195, zeroinitializer - %197 = bitcast <16 x i1> %196 to i16 - %.not.i.i.i22 = icmp ne i16 %197, 0 - %198 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %197, i1 true) - %199 = zext nneg i16 %198 to i64 + %.sroa.0.05.i.i14 = and i64 %.val17.i, %182 + %183 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.05.i.i14 + %.0.copyload.i46.i.i15 = load <16 x i8>, ptr %183, align 1, !noalias !130 + %184 = icmp slt <16 x i8> %.0.copyload.i46.i.i15, zeroinitializer + %185 = bitcast <16 x i1> %184 to i16 + %.not.not.i.not7.i.i16 = icmp eq i16 %185, 0 + br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i20.i, label %._crit_edge.i.i17 + +._crit_edge.i.i17: ; preds = %.lr.ph.i20.i, %.lr.ph.i + %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.05.i.i14, %.lr.ph.i ], [ %.sroa.0.0.i.i25, %.lr.ph.i21.i ] + %.lcssa.i.i19 = phi i16 [ %185, %.lr.ph.i ], [ %203, %.lr.ph.i21.i ] + %186 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) + %187 = zext nneg i16 %186 to i64 + %188 = add i64 %.sroa.0.0.lcssa.i.i18, %187 + %189 = and i64 %188, %.val17.i + %190 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %189 + %191 = load i8, ptr %190, align 1, !noundef !7 + %192 = icmp sgt i8 %191, -1 + br i1 %192, label %193, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i + +193: ; preds = %._crit_edge.i.i17 + %194 = load <16 x i8>, ptr %.val.i17.i, align 16, !noalias !133 + %195 = icmp slt <16 x i8> %194, zeroinitializer + %196 = bitcast <16 x i1> %195 to i16 + %.not.i.i.i22 = icmp ne i16 %196, 0 + %197 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %196, i1 true) + %198 = zext nneg i16 %197 to i64 tail call void @llvm.assume(i1 %.not.i.i.i22) br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i -.lr.ph.i21.i: ; preds = %.lr.ph.i, %.lr.ph.i21.i - %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i21.i ], [ %.sroa.0.05.i.i15, %.lr.ph.i ] - %.sroa.7.08.i.i24 = phi i64 [ %200, %.lr.ph.i21.i ], [ 0, %.lr.ph.i ] - %200 = add i64 %.sroa.7.08.i.i24, 16 - %201 = add i64 %200, %.sroa.0.09.i.i23 - %.sroa.0.0.i.i25 = and i64 %201, %.val17.i - %202 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.0.i.i25 - %.0.copyload.i4.i.i26 = load <16 x i8>, ptr %202, align 1, !noalias !130 - %203 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer - %204 = bitcast <16 x i1> %203 to i16 - %.not.not.i.not.i.i27 = icmp eq i16 %204, 0 - br i1 %.not.not.i.not.i.i27, label %.lr.ph.i21.i, label %._crit_edge.i20.i - -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i: ; preds = %194, %._crit_edge.i20.i - %.0.i.i.i20 = phi i64 [ %199, %194 ], [ %190, %._crit_edge.i20.i ] - %205 = sub i64 %.sroa.02.022.i, %.sroa.0.05.i.i15 - %206 = sub i64 %.0.i.i.i20, %.sroa.0.05.i.i15 - %207 = xor i64 %206, %205 - %.unshifted.i = and i64 %207, %.val17.i - %208 = icmp ult i64 %.unshifted.i, 16 - br i1 %208, label %223, label %209 - -209: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i - %210 = shl i64 %.0.i.i.i20, 3 - %211 = sub nuw nsw i64 -8, %210 - %212 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %211 - %213 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.0.i.i.i20 - %214 = load i8, ptr %213, align 1, !noundef !7 - %215 = lshr i64 %183, 57 - %216 = trunc nuw nsw i64 %215 to i8 - %217 = add i64 %.0.i.i.i20, -16 - %218 = and i64 %217, %.val17.i - store i8 %216, ptr %213, align 1 - %219 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 - %220 = getelementptr i8, ptr %219, i64 %218 - %221 = getelementptr i8, ptr %220, i64 16 - store i8 %216, ptr %221, align 1 - %222 = icmp eq i8 %214, -1 - br i1 %222, label %237, label %.preheader.i - -223: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i - %224 = lshr i64 %183, 57 - %225 = trunc nuw nsw i64 %224 to i8 - %226 = add i64 %.sroa.02.022.i, -16 - %227 = and i64 %.val17.i, %226 - %228 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.02.022.i - store i8 %225, ptr %228, align 1 - %229 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 - %230 = getelementptr i8, ptr %229, i64 %227 - %231 = getelementptr i8, ptr %230, i64 16 - store i8 %225, ptr %231, align 1 - br label %245 - -.preheader.i: ; preds = %209, %.preheader.i +.lr.ph.i20.i: ; preds = %.lr.ph.i, %.lr.ph.i20.i + %.sroa.0.09.i.i23 = phi i64 [ %.sroa.0.0.i.i25, %.lr.ph.i21.i ], [ %.sroa.0.05.i.i14, %.lr.ph.i ] + %.sroa.7.08.i.i24 = phi i64 [ %199, %.lr.ph.i21.i ], [ 0, %.lr.ph.i ] + %199 = add i64 %.sroa.7.08.i.i24, 16 + %200 = add i64 %199, %.sroa.0.09.i.i23 + %.sroa.0.0.i.i25 = and i64 %200, %.val17.i + %201 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.0.0.i.i25 + %.0.copyload.i4.i.i26 = load <16 x i8>, ptr %201, align 1, !noalias !130 + %202 = icmp slt <16 x i8> %.0.copyload.i4.i.i26, zeroinitializer + %203 = bitcast <16 x i1> %202 to i16 + %.not.not.i.not.i.i27 = icmp eq i16 %203, 0 + br i1 %.not.not.i.not.i.i27, label %.lr.ph.i20.i, label %._crit_edge.i.i17 + +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i: ; preds = %193, %._crit_edge.i.i17 + %.0.i.i.i20 = phi i64 [ %198, %194 ], [ %189, %._crit_edge.i20.i ] + %204 = sub i64 %.sroa.02.022.i, %.sroa.0.05.i.i14 + %205 = sub i64 %.0.i.i.i20, %.sroa.0.05.i.i14 + %206 = xor i64 %205, %204 + %.unshifted.i = and i64 %206, %.val17.i + %207 = icmp ult i64 %.unshifted.i, 16 + br i1 %207, label %222, label %208 + +208: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i + %209 = shl i64 %.0.i.i.i20, 3 + %210 = sub nuw nsw i64 -8, %209 + %211 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %210 + %212 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.0.i.i.i20 + %213 = load i8, ptr %212, align 1, !noundef !7 + %214 = lshr i64 %182, 57 + %215 = trunc nuw nsw i64 %214 to i8 + %216 = add i64 %.0.i.i.i20, -16 + %217 = and i64 %216, %.val17.i + store i8 %215, ptr %212, align 1 + %218 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 + %219 = getelementptr i8, ptr %218, i64 %217 + %220 = getelementptr i8, ptr %219, i64 16 + store i8 %215, ptr %220, align 1 + %221 = icmp eq i8 %213, -1 + br i1 %221, label %236, label %.preheader.i + +222: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exit.i + %223 = lshr i64 %182, 57 + %224 = trunc nuw nsw i64 %223 to i8 + %225 = add i64 %.sroa.02.022.i, -16 + %226 = and i64 %.val17.i, %225 + %227 = getelementptr inbounds i8, ptr %.val.i17.i, i64 %.sroa.02.022.i + store i8 %224, ptr %227, align 1 + %228 = load ptr, ptr %0, align 8, !alias.scope !103, !nonnull !7, !noundef !7 + %229 = getelementptr i8, ptr %228, i64 %226 + %230 = getelementptr i8, ptr %229, i64 16 + store i8 %224, ptr %230, align 1 + br label %244 + +.preheader.i: ; preds = %208, %.preheader.i %.0910.i.i = phi i64 [ %236, %.preheader.i ], [ 0, %209 ] - %232 = getelementptr inbounds nuw i8, ptr %174, i64 %.0910.i.i - %233 = getelementptr inbounds nuw i8, ptr %212, i64 %.0910.i.i + %231 = getelementptr inbounds nuw i8, ptr %173, i64 %.0910.i.i + %232 = getelementptr inbounds nuw i8, ptr %211, i64 %.0910.i.i %234 = load i8, ptr %232, align 1 %235 = load i8, ptr %233, align 1 store i8 %235, ptr %232, align 1 @@ -947,49 +947,49 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hea573721a387a555E.exi %exitcond.not.i.i = icmp eq i64 %236, 8 br i1 %exitcond.not.i.i, label %_ZN4core3ptr19swap_nonoverlapping17hd96f880487305d45E.exit.loopexit.i, label %.preheader.i -237: ; preds = %209 - %238 = add i64 %.sroa.02.022.i, -16 - %239 = load i64, ptr %19, align 8, !alias.scope !103, !noundef !7 - %240 = and i64 %239, %238 - %241 = getelementptr inbounds i8, ptr %219, i64 %.sroa.02.022.i - store i8 -1, ptr %241, align 1 - %242 = getelementptr i8, ptr %219, i64 %240 - %243 = getelementptr i8, ptr %242, i64 16 - store i8 -1, ptr %243, align 1 - %244 = load i64, ptr %174, align 1 - store i64 %244, ptr %212, align 1 - br label %245 - -245: ; preds = %237, %223, %166 - %246 = phi ptr [ %219, %237 ], [ %229, %223 ], [ %167, %166 ] +236: ; preds = %208 + %237 = add i64 %.sroa.02.022.i, -16 + %238 = load i64, ptr %19, align 8, !alias.scope !103, !noundef !7 + %239 = and i64 %238, %237 + %240 = getelementptr inbounds i8, ptr %218, i64 %.sroa.02.022.i + store i8 -1, ptr %240, align 1 + %241 = getelementptr i8, ptr %218, i64 %239 + %242 = getelementptr i8, ptr %241, i64 16 + store i8 -1, ptr %242, align 1 + %243 = load i64, ptr %173, align 1 + store i64 %243, ptr %211, align 1 + br label %244 + +244: ; preds = %236, %222, %.lr.ph23.i + %245 = phi ptr [ %218, %237 ], [ %228, %223 ], [ %.lr.ph23.i, %166 ] %exitcond.not.i = icmp eq i64 %.sroa.02.022.i, %20 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, label %166 - -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit: ; preds = %245 - %.pre.i12 = load i64, ptr %19, align 8, !alias.scope !103 - %.pre.i12.fr = freeze i64 %.pre.i12 - %.pre40.i = add i64 %.pre.i12.fr, 1 - %247 = lshr i64 %.pre40.i, 3 - %248 = mul nuw i64 %247, 7 - %249 = icmp ult i64 %.pre.i12.fr, 8 - %spec.select = select i1 %249, i64 %.pre.i12.fr, i64 %248 + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, label %.lr.ph23.i + +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit: ; preds = %244 + %.pre.i11 = load i64, ptr %19, align 8, !alias.scope !103 + %.pre.i11.fr = freeze i64 %.pre.i11 + %.pre40.i = add i64 %.pre.i11.fr, 1 + %246 = lshr i64 %.pre40.i, 3 + %247 = mul nuw i64 %246, 7 + %248 = icmp ult i64 %.pre.i11.fr, 8 + %spec.select = select i1 %248, i64 %.pre.i11.fr, i64 %247 %.pre = load i64, ptr %9, align 8, !alias.scope !103 - br label %250 - -250: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread - %251 = phi i64 [ %10, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] - %252 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] - %253 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %254 = sub i64 %252, %251 - store i64 %254, ptr %253, align 8, !alias.scope !103 + br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread + +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread + %249 = phi i64 [ %10, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] + %250 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit ] + %251 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %252 = sub i64 %250, %249 + store i64 %252, ptr %251, align 8, !alias.scope !103 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h48e7617b6adb3e13E.exit -_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h48e7617b6adb3e13E.exit: ; preds = %76, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit", %14, %250 +_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h48e7617b6adb3e13E.exit: ; preds = %76, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit", %14, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h11ac1c8566f75df4E.exit.thread %.sroa.4.0.i = phi i64 [ %17, %14 ], [ undef, %250 ], [ %.sroa.9.058.ph, %76 ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit" ] %.sroa.0.0.i = phi i64 [ %16, %14 ], [ -9223372036854775807, %250 ], [ %.sroa.5.060.ph, %76 ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hbdc2a4a66dc84562E.exit" ] - %255 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %256 = insertvalue { i64, i64 } %255, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %256 + %253 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %254 = insertvalue { i64, i64 } %253, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %254 } ; Function Attrs: nonlazybind uwtable diff --git a/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll b/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll index b41d760ea79..3e6168b035c 100644 --- a/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll +++ b/bench/turborepo-rs/optimized/3l7xg3ikfppult5o2lclnyys7.ll @@ -229,9 +229,9 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %13, i64 48 store i64 %.sroa.738.0.copyload.i, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 %invariant.gep = getelementptr i8, ptr %49, i64 16 - %invariant.gep61 = getelementptr i8, ptr %49, i64 -48 - %.not63 = icmp eq i64 %16, 0 - br i1 %.not63, label %.thread42, label %.preheader.lr.ph + %invariant.gep63 = getelementptr i8, ptr %49, i64 -48 + %.not65 = icmp eq i64 %16, 0 + br i1 %.not65, label %.thread44, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %59 %61 = load ptr, ptr %0, align 8, !alias.scope !57, !noalias !58, !nonnull !14, !noundef !14 @@ -259,21 +259,21 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt br label %.preheader .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit - %.sroa.014.067 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.014.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.5.066 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.9.065 = phi i64 [ %16, %.preheader.lr.ph ], [ %90, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.13.064 = phi i16 [ %65, %.preheader.lr.ph ], [ %88, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %77 = icmp eq i16 %.sroa.13.064, 0 + %.sroa.016.069 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.016.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.5.068 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.9.067 = phi i64 [ %16, %.preheader.lr.ph ], [ %90, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.13.066 = phi i16 [ %65, %.preheader.lr.ph ], [ %88, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %77 = icmp eq i16 %.sroa.13.066, 0 br i1 %77, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.014.258 = phi ptr [ %78, %.noexc2 ], [ %.sroa.014.067, %.preheader ] - %.sroa.5.257 = phi i64 [ %82, %.noexc2 ], [ %.sroa.5.066, %.preheader ] - %78 = getelementptr inbounds nuw i8, ptr %.sroa.014.258, i64 16 + %.sroa.016.260 = phi ptr [ %78, %.noexc2 ], [ %.sroa.016.069, %.preheader ] + %.sroa.5.259 = phi i64 [ %82, %.noexc2 ], [ %.sroa.5.068, %.preheader ] + %78 = getelementptr inbounds nuw i8, ptr %.sroa.016.260, i64 16 %79 = load <16 x i8>, ptr %78, align 16, !noalias !73 %80 = icmp slt <16 x i8> %79, zeroinitializer %81 = bitcast <16 x i1> %80 to i16 - %82 = add i64 %.sroa.5.257, 16 + %82 = add i64 %.sroa.5.259, 16 %83 = icmp eq i16 %81, -1 br i1 %83, label %.noexc2, label %._crit_edge.loopexit @@ -282,15 +282,15 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.064, %.preheader ], [ %84, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.066, %.preheader ], [ %82, %._crit_edge.loopexit ] - %.sroa.014.2.lcssa = phi ptr [ %.sroa.014.067, %.preheader ], [ %78, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.066, %.preheader ], [ %84, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.068, %.preheader ], [ %82, %._crit_edge.loopexit ] + %.sroa.016.2.lcssa = phi ptr [ %.sroa.016.069, %.preheader ], [ %78, %._crit_edge.loopexit ] %85 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %86 = zext nneg i16 %85 to i64 %87 = add i16 %.sroa.13.2.lcssa, -1 %88 = and i16 %87, %.sroa.13.2.lcssa %89 = add i64 %.sroa.5.2.lcssa, %86 - %90 = add i64 %.sroa.9.065, -1 + %90 = add i64 %.sroa.9.067, -1 call void @llvm.experimental.noalias.scope.decl(metadata !76) %91 = load ptr, ptr %0, align 8, !alias.scope !76, !noalias !77, !nonnull !14, !noundef !14 %92 = sub nsw i64 0, %89 @@ -313,18 +313,18 @@ define { i64, i64 } @_RINvMs6_NtCs7oQ2vmvFkJi_9hashbrown3rawINtB6_8RawTableTNtNt invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsff1zCjKRl2o_13turborepo_env.llvm.1724984292951356826(ptr noalias noundef nonnull align 8 dereferenceable(72) %11, ptr noalias noundef nonnull readonly align 1 %.val3.i, i64 noundef %.val4.i) to label %.noexc4 unwind label %57 -.thread42.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit - %.pre77 = load i64, ptr %15, align 8, !alias.scope !57, !noalias !58 - br label %.thread42 +.thread44.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit + %.pre79 = load i64, ptr %15, align 8, !alias.scope !57, !noalias !58 + br label %.thread44 -.thread42: ; preds = %.thread42.loopexit, %59 - %96 = phi i64 [ %.pre77, %.thread42.loopexit ], [ 0, %59 ] +.thread44: ; preds = %.thread44.loopexit, %59 + %96 = phi i64 [ %.pre79, %.thread42.loopexit ], [ 0, %59 ] %97 = sub i64 %54, %96 store i64 %97, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 store i64 %96, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !50 br label %98 -98: ; preds = %98, %.thread42 +98: ; preds = %98, %.thread44 %.sroa.0.05.i.i = phi i64 [ 0, %.thread42 ], [ %103, %98 ] %99 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %100 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i @@ -467,10 +467,10 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit: ; p %162 = getelementptr i8, ptr %161, i64 %.neg.i.i %163 = getelementptr i8, ptr %162, i64 -48 %.neg72.i.i = mul i64 %.sroa.0.0.i12.i, -48 - %gep62 = getelementptr i8, ptr %invariant.gep61, i64 %.neg72.i.i - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %gep62, ptr noundef nonnull align 1 dereferenceable(48) %163, i64 48, i1 false) + %gep64 = getelementptr i8, ptr %invariant.gep63, i64 %.neg72.i.i + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %gep64, ptr noundef nonnull align 1 dereferenceable(48) %163, i64 48, i1 false) %.not = icmp eq i64 %90, 0 - br i1 %.not, label %.thread42.loopexit, label %.preheader + br i1 %.not, label %.thread44.loopexit, label %.preheader common.resume: ; preds = %191, %57 %common.resume.op = phi { ptr, i32 } [ %58, %57 ], [ %192, %191 ] @@ -482,7 +482,7 @@ common.resume: ; preds = %191, %57 %.not5.i.i = icmp eq i64 %24, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread, label %.lr.ph.i.i -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %164 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread:; preds = %164 %165 = icmp ne ptr %.val11.i, null tail call void @llvm.assume(i1 %165) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !131 @@ -498,16 +498,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.threa tail call void @llvm.assume(i1 %169) br label %184 -._crit_edge.i.i: ; preds = %184 +._crit_edge.i.i:; preds = %184 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %24, i64 16) %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %24, i64 16) %170 = getelementptr inbounds i8, ptr %.val11.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %170, ptr nonnull align 1 %.val11.i, i64 %spec.select28.i, i1 false), !noalias !131 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !131 - %171 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store ptr @_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeTNtNtCs68wO5nsWeTG_5alloc6string6StringBH_EECsff1zCjKRl2o_13turborepo_env.llvm.4734958634498228981, ptr %171, align 8, !noalias !131 - %172 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store i64 48, ptr %172, align 8, !noalias !131 + %178 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr @_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeTNtNtCs68wO5nsWeTG_5alloc6string6StringBH_EECsff1zCjKRl2o_13turborepo_env.llvm.4734958634498228981, ptr %178, align 8, !noalias !131 + %179 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store i64 48, ptr %179, align 8, !noalias !131 store ptr %0, ptr %8, align 8, !noalias !131 %.sroa.48.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 8 %.sroa.59.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 16 @@ -515,17 +515,17 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.threa %.sroa.711.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 32 %.sroa.812.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 40 %.sroa.913.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 48 - %173 = getelementptr inbounds nuw i8, ptr %7, i64 56 - %174 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %175 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %176 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %177 = load i64, ptr %2, align 8 - %178 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %179 = load i64, ptr %178, align 8 - %180 = xor i64 %177, 8317987319222330741 - %181 = xor i64 %179, 7237128888997146477 - %182 = xor i64 %177, 7816392313619706465 - %183 = xor i64 %179, 8387220255154660723 + %180 = getelementptr inbounds nuw i8, ptr %7, i64 56 + %181 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %182 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %183 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %184 = load i64, ptr %2, align 8 + %185 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %186 = load i64, ptr %185, align 8 + %187 = xor i64 %184, 8317987319222330741 + %188 = xor i64 %186, 7237128888997146477 + %189 = xor i64 %184, 7816392313619706465 + %190 = xor i64 %186, 8387220255154660723 br label %193 184: ; preds = %184, %.lr.ph.i.i @@ -554,8 +554,8 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.threa %195 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 %196 = getelementptr inbounds i8, ptr %195, i64 %.sroa.0.08.i %197 = load i8, ptr %196, align 1, !noundef !14 - %.not.i8 = icmp eq i8 %197, -128 - br i1 %.not.i8, label %198, label %286 + %.not.i10 = icmp eq i8 %197, -128 + br i1 %.not.i10, label %198, label %286 198: ; preds = %193 %.neg.i = mul i64 %.sroa.0.08.i, -48 @@ -577,12 +577,12 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e %205 = getelementptr i8, ptr %203, i64 -32 %.val4.i.i = load i64, ptr %205, align 8, !alias.scope !146, !noalias !151, !noundef !14 call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7), !noalias !157 - store i64 %180, ptr %7, align 8, !alias.scope !161, !noalias !164 - store i64 %182, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %181, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %183, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %177, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 - store i64 %179, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %187, ptr %7, align 8, !alias.scope !161, !noalias !164 + store i64 %189, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %188, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %190, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %184, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 + store i64 %186, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !161, !noalias !164 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.913.0..sroa_idx.i.i.i.i.i, i8 0, i64 24, i1 false), !alias.scope !161, !noalias !164 invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsff1zCjKRl2o_13turborepo_env.llvm.1724984292951356826(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %.val3.i.i, i64 noundef %.val4.i.i) to label %.noexc.i unwind label %191 @@ -601,11 +601,11 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull readonly align 8 dereferenceable(72) %7, i64 32, i1 false), !noalias !157 %206 = load i64, ptr %.sroa.913.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !186, !noalias !157, !noundef !14 %207 = shl i64 %206, 56 - %208 = load i64, ptr %173, align 8, !alias.scope !186, !noalias !157, !noundef !14 + %208 = load i64, ptr %180, align 8, !alias.scope !186, !noalias !157, !noundef !14 %209 = or i64 %207, %208 - %210 = load i64, ptr %174, align 8, !noalias !185, !noundef !14 + %210 = load i64, ptr %181, align 8, !noalias !185, !noundef !14 %211 = xor i64 %210, %209 - store i64 %211, ptr %174, align 8, !noalias !185 + store i64 %211, ptr %181, align 8, !noalias !185 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17h4108cfe4f127f608E.llvm.1724984292951356826"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %.noexc14.i unwind label %191 @@ -613,59 +613,59 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e %212 = load i64, ptr %5, align 8, !noalias !185, !noundef !14 %213 = xor i64 %212, %209 store i64 %213, ptr %5, align 8, !noalias !185 - %214 = load i64, ptr %175, align 8, !noalias !185, !noundef !14 + %214 = load i64, ptr %182, align 8, !noalias !185, !noundef !14 %215 = xor i64 %214, 255 - store i64 %215, ptr %175, align 8, !noalias !185 + store i64 %215, ptr %182, align 8, !noalias !185 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17h0baeda308753a8e4E.llvm.1724984292951356826"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %216 unwind label %191 216: ; preds = %.noexc14.i %217 = load i64, ptr %5, align 8, !noalias !185, !noundef !14 - %218 = load i64, ptr %176, align 8, !noalias !185, !noundef !14 + %218 = load i64, ptr %183, align 8, !noalias !185, !noundef !14 %219 = xor i64 %218, %217 - %220 = load i64, ptr %175, align 8, !noalias !185, !noundef !14 + %220 = load i64, ptr %182, align 8, !noalias !185, !noundef !14 %221 = xor i64 %219, %220 - %222 = load i64, ptr %174, align 8, !noalias !185, !noundef !14 + %222 = load i64, ptr %181, align 8, !noalias !185, !noundef !14 %223 = xor i64 %221, %222 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5), !noalias !185 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7), !noalias !157 - %.val.i11 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 + %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 %.val10.i = load i64, ptr %21, align 8, !alias.scope !131, !noundef !14 %.sroa.0.06.i.i = and i64 %.val10.i, %223 - %224 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.06.i.i + %224 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.06.i.i %.sroa.0.0.copyload.i57.i.i = load <16 x i8>, ptr %224, align 1, !noalias !187 %225 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %226 = bitcast <16 x i1> %225 to i16 %.not.i.not.not8.i.i = icmp eq i16 %226, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i17.i, label %._crit_edge.i16.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i16.i, label %._crit_edge.i.i -.lr.ph.i17.i: ; preds = %216, %.lr.ph.i17.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i13, %.lr.ph.i17.i ], [ %.sroa.0.06.i.i, %216 ] +.lr.ph.i16.i: ; preds = %216, %.lr.ph.i16.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i15, %.lr.ph.i17.i ], [ %.sroa.0.06.i.i, %216 ] %.sroa.7.09.i.i = phi i64 [ %227, %.lr.ph.i17.i ], [ 0, %216 ] %227 = add i64 %.sroa.7.09.i.i, 16 %228 = add i64 %227, %.sroa.0.010.i.i - %.sroa.0.0.i.i13 = and i64 %228, %.val10.i - %229 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i.i13 + %.sroa.0.0.i.i15 = and i64 %228, %.val10.i + %229 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i.i15 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %229, align 1, !noalias !187 %230 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %231 = bitcast <16 x i1> %230 to i16 %.not.i.not.not.i.i = icmp eq i16 %231, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i17.i, label %._crit_edge.i16.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i16.i, label %._crit_edge.i.i -._crit_edge.i16.i: ; preds = %.lr.ph.i17.i, %216 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %216 ], [ %.sroa.0.0.i.i13, %.lr.ph.i17.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i16.i, %216 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %216 ], [ %.sroa.0.0.i.i15, %.lr.ph.i17.i ] %.lcssa.i.i = phi i16 [ %226, %216 ], [ %231, %.lr.ph.i17.i ] %232 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %233 = zext nneg i16 %232 to i64 %234 = add i64 %.sroa.0.0.lcssa.i.i, %233 %235 = and i64 %234, %.val10.i - %236 = getelementptr inbounds i8, ptr %.val.i11, i64 %235 + %236 = getelementptr inbounds i8, ptr %.val.i13, i64 %235 %237 = load i8, ptr %236, align 1, !noundef !14 %238 = icmp sgt i8 %237, -1 br i1 %238, label %239, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -239: ; preds = %._crit_edge.i16.i - %240 = load <16 x i8>, ptr %.val.i11, align 16, !noalias !190 +239: ; preds = %._crit_edge.i.i + %240 = load <16 x i8>, ptr %.val.i13, align 16, !noalias !190 %241 = icmp slt <16 x i8> %240, zeroinitializer %242 = bitcast <16 x i1> %241 to i16 %243 = icmp ne i16 %242, 0 @@ -674,7 +674,7 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_e %245 = zext nneg i16 %244 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %239, %._crit_edge.i16.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %239, %._crit_edge.i.i %.sroa.0.0.i12.i.i = phi i64 [ %245, %239 ], [ %235, %._crit_edge.i16.i ] %246 = sub i64 %.sroa.0.08.i, %.sroa.0.06.i.i %247 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i @@ -685,9 +685,9 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; 250: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i %.neg9.i = mul i64 %.sroa.0.0.i12.i.i, -48 - %251 = getelementptr i8, ptr %.val.i11, i64 %.neg9.i + %251 = getelementptr i8, ptr %.val.i13, i64 %.neg9.i %252 = getelementptr i8, ptr %251, i64 -48 - %253 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i12.i.i + %253 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i12.i.i %254 = load i8, ptr %253, align 1, !noundef !14 %255 = lshr i64 %223, 57 %256 = trunc nuw nsw i64 %255 to i8 @@ -706,7 +706,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; %265 = trunc nuw nsw i64 %264 to i8 %266 = add i64 %.sroa.0.08.i, -16 %267 = and i64 %.val10.i, %266 - %268 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.08.i + %268 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.08.i store i8 %265, ptr %268, align 1 %269 = load ptr, ptr %0, align 8, !alias.scope !131, !nonnull !14, !noundef !14 %270 = getelementptr i8, ptr %269, i64 %267 @@ -723,8 +723,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; store i8 %275, ptr %272, align 1 store i8 %274, ptr %273, align 1 %276 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i12 = icmp eq i64 %276, 48 - br i1 %exitcond.not.i.i12, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_env.exit.loopexit.i, label %.preheader.i + %exitcond.not.i.i14 = icmp eq i64 %276, 48 + br i1 %exitcond.not.i.i14, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsff1zCjKRl2o_13turborepo_env.exit.loopexit.i, label %.preheader.i 277: ; preds = %250 %278 = add i64 %.sroa.0.08.i, -16 @@ -759,26 +759,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit: ; pr %291 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %291, i64 %.pre15.i.fr, i64 %290 %.pre = load i64, ptr %15, align 8, !alias.scope !131 - br label %292 - -292: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread - %293 = phi i64 [ %16, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %294 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %295 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %296 = sub i64 %294, %293 - store i64 %296, ptr %295, align 8, !alias.scope !131 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread + %292 = phi i64 [ %16, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %293 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %294 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %295 = sub i64 %293, %292 + store i64 %295, ptr %294, align 8, !alias.scope !131 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8), !noalias !131 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i -_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i: ; preds = %56, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit, %292 +_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i: ; preds = %56, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %292 ], [ %.sroa.9.0.i.i.ph, %56 ], [ undef, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %292 ], [ %.sroa.7.0.i.i.ph, %56 ], [ -9223372036854775807, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsff1zCjKRl2o_13turborepo_env.exit ] - %297 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %298 = insertvalue { i64, i64 } %297, i64 %.sroa.4.1.i, 1 + %296 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %297 = insertvalue { i64, i64 } %296, i64 %.sroa.4.1.i, 1 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit: ; preds = %28, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i - %.merged.i = phi { i64, i64 } [ %29, %28 ], [ %298, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i ] + %.merged.i = phi { i64, i64 } [ %29, %28 ], [ %297, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsff1zCjKRl2o_13turborepo_env.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll b/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll index 42abbb6fcf5..d83874485e6 100644 --- a/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll +++ b/bench/turborepo-rs/optimized/5acbtdg9xgmdrsj5fdxgf9kjz.ll @@ -134,8 +134,8 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 %68 = load i64, ptr %14, align 8, !alias.scope !22, !noalias !23, !noundef !9 %invariant.gep = getelementptr i8, ptr %67, i64 16 - %.not60 = icmp eq i64 %68, 0 - br i1 %.not60, label %.thread40, label %.preheader.lr.ph + %.not62 = icmp eq i64 %68, 0 + br i1 %.not62, label %.thread42, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %62 %69 = load ptr, ptr %0, align 8, !alias.scope !22, !noalias !23, !nonnull !9, !noundef !9 @@ -164,21 +164,21 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit %85 = phi ptr [ %69, %.preheader.lr.ph ], [ %169, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.014.064 = phi ptr [ %69, %.preheader.lr.ph ], [ %.sroa.014.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.5.063 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.9.062 = phi i64 [ %68, %.preheader.lr.ph ], [ %99, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %.sroa.13.061 = phi i16 [ %73, %.preheader.lr.ph ], [ %97, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] - %86 = icmp eq i16 %.sroa.13.061, 0 + %.sroa.016.066 = phi ptr [ %69, %.preheader.lr.ph ], [ %.sroa.016.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.5.065 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.9.064 = phi i64 [ %68, %.preheader.lr.ph ], [ %99, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %.sroa.13.063 = phi i16 [ %73, %.preheader.lr.ph ], [ %97, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit ] + %86 = icmp eq i16 %.sroa.13.063, 0 br i1 %86, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.014.257 = phi ptr [ %87, %.noexc2 ], [ %.sroa.014.064, %.preheader ] - %.sroa.5.256 = phi i64 [ %91, %.noexc2 ], [ %.sroa.5.063, %.preheader ] - %87 = getelementptr inbounds nuw i8, ptr %.sroa.014.257, i64 16 + %.sroa.016.259 = phi ptr [ %87, %.noexc2 ], [ %.sroa.016.066, %.preheader ] + %.sroa.5.258 = phi i64 [ %91, %.noexc2 ], [ %.sroa.5.065, %.preheader ] + %87 = getelementptr inbounds nuw i8, ptr %.sroa.016.259, i64 16 %88 = load <16 x i8>, ptr %87, align 16, !noalias !38 %89 = icmp slt <16 x i8> %88, zeroinitializer %90 = bitcast <16 x i1> %89 to i16 - %91 = add i64 %.sroa.5.256, 16 + %91 = add i64 %.sroa.5.258, 16 %92 = icmp eq i16 %90, -1 br i1 %92, label %.noexc2, label %._crit_edge.loopexit @@ -187,15 +187,15 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.061, %.preheader ], [ %93, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.063, %.preheader ], [ %91, %._crit_edge.loopexit ] - %.sroa.014.2.lcssa = phi ptr [ %.sroa.014.064, %.preheader ], [ %87, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.063, %.preheader ], [ %93, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.065, %.preheader ], [ %91, %._crit_edge.loopexit ] + %.sroa.016.2.lcssa = phi ptr [ %.sroa.016.066, %.preheader ], [ %87, %._crit_edge.loopexit ] %94 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %95 = zext nneg i16 %94 to i64 %96 = add i16 %.sroa.13.2.lcssa, -1 %97 = and i16 %96, %.sroa.13.2.lcssa %98 = add i64 %.sroa.5.2.lcssa, %95 - %99 = add i64 %.sroa.9.062, -1 + %99 = add i64 %.sroa.9.064, -1 %100 = sub nsw i64 0, %98 %101 = getelementptr inbounds { { ptr, i64 }, { ptr, i64 } }, ptr %85, i64 %100 %102 = getelementptr inbounds i8, ptr %101, i64 -32 @@ -216,18 +216,18 @@ _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNt invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsjIaN6dkKMFO_12turborepo_ci.llvm.13785578889718008974(ptr noalias noundef nonnull align 8 dereferenceable(72) %11, ptr noalias noundef nonnull readonly align 1 %.val3.i, i64 noundef %.val4.i) to label %.noexc4 unwind label %60 -.thread40.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit - %.pre74 = load i64, ptr %14, align 8, !alias.scope !22, !noalias !23 - br label %.thread40 +.thread42.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit + %.pre76 = load i64, ptr %14, align 8, !alias.scope !22, !noalias !23 + br label %.thread42 -.thread40: ; preds = %.thread40.loopexit, %62 - %104 = phi i64 [ %.pre74, %.thread40.loopexit ], [ 0, %62 ] +.thread42: ; preds = %.thread42.loopexit, %62 + %104 = phi i64 [ %.pre76, %.thread40.loopexit ], [ 0, %62 ] %105 = sub i64 %.sroa.02.0.i.i, %104 store i64 %105, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 store i64 %104, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 br label %106 -106: ; preds = %106, %.thread40 +106: ; preds = %106, %.thread42 %.sroa.0.05.i.i = phi i64 [ 0, %.thread40 ], [ %111, %106 ] %107 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %108 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i @@ -374,7 +374,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit: ; p %175 = getelementptr inbounds i8, ptr %67, i64 %174 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %175, ptr noundef nonnull align 1 dereferenceable(32) %172, i64 32, i1 false) %.not = icmp eq i64 %99, 0 - br i1 %.not, label %.thread40.loopexit, label %.preheader + br i1 %.not, label %.thread42.loopexit, label %.preheader common.resume: ; preds = %203, %60 %common.resume.op = phi { ptr, i32 } [ %61, %60 ], [ %204, %203 ] @@ -386,7 +386,7 @@ common.resume: ; preds = %203, %60 %.not5.i.i = icmp eq i64 %23, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread, label %.lr.ph.i.i -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %176 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread:; preds = %176 %177 = icmp ne ptr %.val10.i, null tail call void @llvm.assume(i1 %177) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !98 @@ -402,16 +402,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.threa tail call void @llvm.assume(i1 %181) br label %196 -._crit_edge.i.i: ; preds = %196 +._crit_edge.i.i:; preds = %196 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %23, i64 16) %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %23, i64 16) %182 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %182, ptr nonnull align 1 %.val10.i, i64 %spec.select28.i, i1 false), !noalias !98 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8), !noalias !98 - %183 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store ptr null, ptr %183, align 8, !noalias !98 - %184 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store i64 32, ptr %184, align 8, !noalias !98 + %190 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr null, ptr %190, align 8, !noalias !98 + %191 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store i64 32, ptr %191, align 8, !noalias !98 store ptr %0, ptr %8, align 8, !noalias !98 %.sroa.48.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 8 %.sroa.59.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 16 @@ -419,17 +419,17 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.threa %.sroa.711.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 32 %.sroa.812.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 40 %.sroa.913.0..sroa_idx.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %7, i64 48 - %185 = getelementptr inbounds nuw i8, ptr %7, i64 56 - %186 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %187 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %188 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %189 = load i64, ptr %2, align 8 - %190 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %191 = load i64, ptr %190, align 8 - %192 = xor i64 %189, 8317987319222330741 - %193 = xor i64 %191, 7237128888997146477 - %194 = xor i64 %189, 7816392313619706465 - %195 = xor i64 %191, 8387220255154660723 + %192 = getelementptr inbounds nuw i8, ptr %7, i64 56 + %193 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %194 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %195 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %196 = load i64, ptr %2, align 8 + %197 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %198 = load i64, ptr %197, align 8 + %199 = xor i64 %196, 8317987319222330741 + %200 = xor i64 %198, 7237128888997146477 + %201 = xor i64 %196, 7816392313619706465 + %202 = xor i64 %198, 8387220255154660723 br label %205 196: ; preds = %196, %.lr.ph.i.i @@ -458,8 +458,8 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.threa %207 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 %208 = getelementptr inbounds i8, ptr %207, i64 %.sroa.0.08.i %209 = load i8, ptr %208, align 1, !noundef !9 - %.not.i8 = icmp eq i8 %209, -128 - br i1 %.not.i8, label %210, label %300 + %.not.i10 = icmp eq i8 %209, -128 + br i1 %.not.i10, label %210, label %300 210: ; preds = %205 %211 = shl i64 %.sroa.0.08.i, 5 @@ -481,12 +481,12 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c %218 = getelementptr i8, ptr %216, i64 -24 %.val4.i.i = load i64, ptr %218, align 8, !alias.scope !113, !noalias !118, !noundef !9 call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7), !noalias !124 - store i64 %192, ptr %7, align 8, !alias.scope !128, !noalias !131 - store i64 %194, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %193, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %195, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %189, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 - store i64 %191, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %199, ptr %7, align 8, !alias.scope !128, !noalias !131 + store i64 %201, ptr %.sroa.48.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %200, ptr %.sroa.59.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %202, ptr %.sroa.610.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %196, ptr %.sroa.711.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 + store i64 %198, ptr %.sroa.812.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !128, !noalias !131 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.913.0..sroa_idx.i.i.i.i.i, i8 0, i64 24, i1 false), !alias.scope !128, !noalias !131 invoke void @_RNvXs3_NtNtCs1LoaDTb72WA_4core4hash3sipINtB5_6HasherNtB5_11Sip13RoundsENtB7_6Hasher5writeCsjIaN6dkKMFO_12turborepo_ci.llvm.13785578889718008974(ptr noalias noundef nonnull align 8 dereferenceable(72) %7, ptr noalias noundef nonnull readonly align 1 %.val3.i.i, i64 noundef %.val4.i.i) to label %.noexc.i unwind label %203 @@ -505,11 +505,11 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull readonly align 8 dereferenceable(72) %7, i64 32, i1 false), !noalias !124 %219 = load i64, ptr %.sroa.913.0..sroa_idx.i.i.i.i.i, align 8, !alias.scope !156, !noalias !124, !noundef !9 %220 = shl i64 %219, 56 - %221 = load i64, ptr %185, align 8, !alias.scope !156, !noalias !124, !noundef !9 + %221 = load i64, ptr %192, align 8, !alias.scope !156, !noalias !124, !noundef !9 %222 = or i64 %220, %221 - %223 = load i64, ptr %186, align 8, !noalias !155, !noundef !9 + %223 = load i64, ptr %193, align 8, !noalias !155, !noundef !9 %224 = xor i64 %223, %222 - store i64 %224, ptr %186, align 8, !noalias !155 + store i64 %224, ptr %193, align 8, !noalias !155 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8c_rounds17h4108cfe4f127f608E.llvm.13785578889718008974"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %.noexc13.i unwind label %203 @@ -517,59 +517,59 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c %225 = load i64, ptr %5, align 8, !noalias !155, !noundef !9 %226 = xor i64 %225, %222 store i64 %226, ptr %5, align 8, !noalias !155 - %227 = load i64, ptr %187, align 8, !noalias !155, !noundef !9 + %227 = load i64, ptr %194, align 8, !noalias !155, !noundef !9 %228 = xor i64 %227, 255 - store i64 %228, ptr %187, align 8, !noalias !155 + store i64 %228, ptr %194, align 8, !noalias !155 invoke void @"_ZN69_$LT$core..hash..sip..Sip13Rounds$u20$as$u20$core..hash..sip..Sip$GT$8d_rounds17h0baeda308753a8e4E.llvm.13785578889718008974"(ptr noalias noundef nonnull align 8 dereferenceable(32) %5) to label %229 unwind label %203 229: ; preds = %.noexc13.i %230 = load i64, ptr %5, align 8, !noalias !155, !noundef !9 - %231 = load i64, ptr %188, align 8, !noalias !155, !noundef !9 + %231 = load i64, ptr %195, align 8, !noalias !155, !noundef !9 %232 = xor i64 %231, %230 - %233 = load i64, ptr %187, align 8, !noalias !155, !noundef !9 + %233 = load i64, ptr %194, align 8, !noalias !155, !noundef !9 %234 = xor i64 %232, %233 - %235 = load i64, ptr %186, align 8, !noalias !155, !noundef !9 + %235 = load i64, ptr %193, align 8, !noalias !155, !noundef !9 %236 = xor i64 %234, %235 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5), !noalias !155 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7), !noalias !124 - %.val.i11 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 + %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 %.val9.i = load i64, ptr %20, align 8, !alias.scope !98, !noundef !9 %.sroa.0.06.i.i = and i64 %.val9.i, %236 - %237 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.06.i.i + %237 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.06.i.i %.sroa.0.0.copyload.i57.i.i = load <16 x i8>, ptr %237, align 1, !noalias !157 %238 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %239 = bitcast <16 x i1> %238 to i16 %.not.i.not.not8.i.i = icmp eq i16 %239, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i16.i, label %._crit_edge.i15.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i15.i, label %._crit_edge.i.i -.lr.ph.i16.i: ; preds = %229, %.lr.ph.i16.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i13, %.lr.ph.i16.i ], [ %.sroa.0.06.i.i, %229 ] +.lr.ph.i15.i: ; preds = %229, %.lr.ph.i15.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i15, %.lr.ph.i16.i ], [ %.sroa.0.06.i.i, %229 ] %.sroa.7.09.i.i = phi i64 [ %240, %.lr.ph.i16.i ], [ 0, %229 ] %240 = add i64 %.sroa.7.09.i.i, 16 %241 = add i64 %240, %.sroa.0.010.i.i - %.sroa.0.0.i.i13 = and i64 %241, %.val9.i - %242 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i.i13 + %.sroa.0.0.i.i15 = and i64 %241, %.val9.i + %242 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i.i15 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %242, align 1, !noalias !157 %243 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %244 = bitcast <16 x i1> %243 to i16 %.not.i.not.not.i.i = icmp eq i16 %244, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i16.i, label %._crit_edge.i15.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i15.i, label %._crit_edge.i.i -._crit_edge.i15.i: ; preds = %.lr.ph.i16.i, %229 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %229 ], [ %.sroa.0.0.i.i13, %.lr.ph.i16.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i15.i, %229 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %229 ], [ %.sroa.0.0.i.i15, %.lr.ph.i16.i ] %.lcssa.i.i = phi i16 [ %239, %229 ], [ %244, %.lr.ph.i16.i ] %245 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %246 = zext nneg i16 %245 to i64 %247 = add i64 %.sroa.0.0.lcssa.i.i, %246 %248 = and i64 %247, %.val9.i - %249 = getelementptr inbounds i8, ptr %.val.i11, i64 %248 + %249 = getelementptr inbounds i8, ptr %.val.i13, i64 %248 %250 = load i8, ptr %249, align 1, !noundef !9 %251 = icmp sgt i8 %250, -1 br i1 %251, label %252, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -252: ; preds = %._crit_edge.i15.i - %253 = load <16 x i8>, ptr %.val.i11, align 16, !noalias !160 +252: ; preds = %._crit_edge.i.i + %253 = load <16 x i8>, ptr %.val.i13, align 16, !noalias !160 %254 = icmp slt <16 x i8> %253, zeroinitializer %255 = bitcast <16 x i1> %254 to i16 %256 = icmp ne i16 %255, 0 @@ -578,7 +578,7 @@ _RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_c %258 = zext nneg i16 %257 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %252, %._crit_edge.i15.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; preds = %252, %._crit_edge.i.i %.sroa.0.0.i12.i.i = phi i64 [ %258, %252 ], [ %248, %._crit_edge.i15.i ] %259 = sub i64 %.sroa.0.08.i, %.sroa.0.06.i.i %260 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i @@ -590,8 +590,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; 263: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i %264 = shl i64 %.sroa.0.0.i12.i.i, 5 %265 = sub nuw nsw i64 -32, %264 - %266 = getelementptr inbounds i8, ptr %.val.i11, i64 %265 - %267 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.0.i12.i.i + %266 = getelementptr inbounds i8, ptr %.val.i13, i64 %265 + %267 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.0.i12.i.i %268 = load i8, ptr %267, align 1, !noundef !9 %269 = lshr i64 %236, 57 %270 = trunc nuw nsw i64 %269 to i8 @@ -610,7 +610,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; %279 = trunc nuw nsw i64 %278 to i8 %280 = add i64 %.sroa.0.08.i, -16 %281 = and i64 %.val9.i, %280 - %282 = getelementptr inbounds i8, ptr %.val.i11, i64 %.sroa.0.08.i + %282 = getelementptr inbounds i8, ptr %.val.i13, i64 %.sroa.0.08.i store i8 %279, ptr %282, align 1 %283 = load ptr, ptr %0, align 8, !alias.scope !98, !nonnull !9, !noundef !9 %284 = getelementptr i8, ptr %283, i64 %281 @@ -627,8 +627,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17h0f006a34970d6e45E.exit.i: ; store i8 %289, ptr %286, align 1 store i8 %288, ptr %287, align 1 %290 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i12 = icmp eq i64 %290, 32 - br i1 %exitcond.not.i.i12, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_ci.exit.loopexit.i, label %.preheader.i + %exitcond.not.i.i14 = icmp eq i64 %290, 32 + br i1 %exitcond.not.i.i14, label %_RINvNtCs1LoaDTb72WA_4core3ptr19swap_nonoverlappinghECsjIaN6dkKMFO_12turborepo_ci.exit.loopexit.i, label %.preheader.i 291: ; preds = %263 %292 = add i64 %.sroa.0.08.i, -16 @@ -663,26 +663,26 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit: ; pr %305 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %305, i64 %.pre15.i.fr, i64 %304 %.pre = load i64, ptr %14, align 8, !alias.scope !98 - br label %306 - -306: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread - %307 = phi i64 [ %15, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %308 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] - %309 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %310 = sub i64 %308, %307 - store i64 %310, ptr %309, align 8, !alias.scope !98 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread + %306 = phi i64 [ %15, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %307 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit ] + %308 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %309 = sub i64 %307, %306 + store i64 %309, ptr %308, align 8, !alias.scope !98 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8), !noalias !98 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i -_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i: ; preds = %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit, %306 +_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i: ; preds = %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf9aaf4adba93ecd7E.exit.thread %.sroa.4.1.i = phi i64 [ undef, %306 ], [ %.sroa.9.0.i.i.ph, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i ], [ undef, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit ] %.sroa.0.1.i = phi i64 [ -9223372036854775807, %306 ], [ %.sroa.7.0.i.i.ph, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner17new_uninitializedNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.thread.i ], [ -9223372036854775807, %_RINvNtCs1LoaDTb72WA_4core3ptr13drop_in_placeINtNtCs7oQ2vmvFkJi_9hashbrown10scopeguard10ScopeGuardNtNtBL_3raw13RawTableInnerNCINvMsa_B1z_B1x_14prepare_resizeNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalE0EECsjIaN6dkKMFO_12turborepo_ci.exit ] - %311 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %312 = insertvalue { i64, i64 } %311, i64 %.sroa.4.1.i, 1 + %310 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %311 = insertvalue { i64, i64 } %310, i64 %.sroa.4.1.i, 1 br label %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit _RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner20reserve_rehash_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit: ; preds = %27, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i - %.merged.i = phi { i64, i64 } [ %28, %27 ], [ %312, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i ] + %.merged.i = phi { i64, i64 } [ %28, %27 ], [ %311, %_RINvMsa_NtCs7oQ2vmvFkJi_9hashbrown3rawNtB6_13RawTableInner12resize_innerNtNtCs68wO5nsWeTG_5alloc5alloc6GlobalECsjIaN6dkKMFO_12turborepo_ci.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll b/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll index e8ae12daa89..c6ace8fe709 100644 --- a/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll +++ b/bench/uv-rs/optimized/1owd0gjazgnm3wlfvndm01xt6.ll @@ -26947,9 +26947,9 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2 store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !5956 %69 = load i64, ptr %10, align 8, !alias.scope !5965, !noalias !5966, !noundef !13 %invariant.gep = getelementptr i8, ptr %68, i64 16 - %invariant.gep39 = getelementptr i8, ptr %68, i64 -104 + %invariant.gep40 = getelementptr i8, ptr %68, i64 -104 %70 = icmp eq i64 %69, 0 - br i1 %70, label %._crit_edge45, label %.preheader.lr.ph + br i1 %70, label %._crit_edge46, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit %71 = load ptr, ptr %0, align 8, !alias.scope !5965, !noalias !5966, !nonnull !13, !noundef !13 @@ -26961,8 +26961,8 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2 _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread: ; preds = %57, %62, %41 %.pn = phi { i64, i64 } [ %42, %41 ], [ %63, %62 ], [ %58, %57 ] - %.sroa.7.025 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.026 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.026 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.027 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8), !noalias !5956 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit @@ -26974,36 +26974,36 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2 .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit %78 = phi ptr [ %71, %.preheader.lr.ph ], [ %145, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.011.044 = phi ptr [ %71, %.preheader.lr.ph ], [ %.sroa.011.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.5.043 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.9.042 = phi i64 [ %69, %.preheader.lr.ph ], [ %109, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.13.041 = phi i16 [ %75, %.preheader.lr.ph ], [ %107, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %79 = icmp eq i16 %.sroa.13.041, 0 + %.sroa.012.045 = phi ptr [ %71, %.preheader.lr.ph ], [ %.sroa.012.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.5.044 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.9.043 = phi i64 [ %69, %.preheader.lr.ph ], [ %109, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.13.042 = phi i16 [ %75, %.preheader.lr.ph ], [ %107, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %79 = icmp eq i16 %.sroa.13.042, 0 br i1 %79, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.011.136 = phi ptr [ %80, %.noexc2 ], [ %.sroa.011.044, %.preheader ] - %.sroa.5.135 = phi i64 [ %84, %.noexc2 ], [ %.sroa.5.043, %.preheader ] - %80 = getelementptr inbounds nuw i8, ptr %.sroa.011.136, i64 16 + %.sroa.012.137 = phi ptr [ %80, %.noexc2 ], [ %.sroa.012.045, %.preheader ] + %.sroa.5.136 = phi i64 [ %84, %.noexc2 ], [ %.sroa.5.044, %.preheader ] + %80 = getelementptr inbounds nuw i8, ptr %.sroa.012.137, i64 16 %81 = load <16 x i8>, ptr %80, align 16, !noalias !5970 %82 = icmp slt <16 x i8> %81, zeroinitializer %83 = bitcast <16 x i1> %82 to i16 - %84 = add i64 %.sroa.5.135, 16 + %84 = add i64 %.sroa.5.136, 16 %85 = icmp eq i16 %83, -1 br i1 %85, label %.noexc2, label %._crit_edge.loopexit -._crit_edge45.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit - %.pre56 = load i64, ptr %10, align 8, !alias.scope !5965, !noalias !5966 - br label %._crit_edge45 +._crit_edge46.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit + %.pre57 = load i64, ptr %10, align 8, !alias.scope !5965, !noalias !5966 + br label %._crit_edge46 -._crit_edge45: ; preds = %._crit_edge45.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit - %86 = phi i64 [ %.pre56, %._crit_edge45.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit ] +._crit_edge46: ; preds = %._crit_edge46.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit + %86 = phi i64 [ %.pre57, %._crit_edge45.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit ] %87 = sub i64 %.sroa.03.0.i.i, %86 store i64 %87, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !5956 store i64 %86, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !5956 br label %88 -88: ; preds = %88, %._crit_edge45 +88: ; preds = %88, %._crit_edge46 %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge45 ], [ %93, %88 ] %89 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %90 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i @@ -27045,15 +27045,15 @@ _ZN9hashbrown3raw5inner11TableLayout20calculate_layout_for17hd3f746c8628a2deaE.l br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.041, %.preheader ], [ %103, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.043, %.preheader ], [ %84, %._crit_edge.loopexit ] - %.sroa.011.1.lcssa = phi ptr [ %.sroa.011.044, %.preheader ], [ %80, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.042, %.preheader ], [ %103, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.044, %.preheader ], [ %84, %._crit_edge.loopexit ] + %.sroa.012.1.lcssa = phi ptr [ %.sroa.012.045, %.preheader ], [ %80, %._crit_edge.loopexit ] %104 = add i16 %.sroa.13.1.lcssa, -1 %105 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %106 = zext nneg i16 %105 to i64 %107 = and i16 %104, %.sroa.13.1.lcssa %108 = add i64 %.sroa.5.1.lcssa, %106 - %109 = add i64 %.sroa.9.042, -1 + %109 = add i64 %.sroa.9.043, -1 %110 = sub nsw i64 0, %108 %111 = getelementptr inbounds { { i64, [10 x i64] }, { { { i64, [1 x i64] } } } }, ptr %78, i64 %110 %112 = getelementptr inbounds i8, ptr %111, i64 -104 @@ -27124,10 +27124,10 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %146 = getelementptr i8, ptr %145, i64 %.neg.i.i %147 = getelementptr i8, ptr %146, i64 -104 %.neg72.i.i = mul i64 %.sroa.0.0.i4.i, -104 - %gep40 = getelementptr i8, ptr %invariant.gep39, i64 %.neg72.i.i - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %gep40, ptr noundef nonnull align 1 dereferenceable(104) %147, i64 104, i1 false) + %gep41 = getelementptr i8, ptr %invariant.gep40, i64 %.neg72.i.i + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %gep41, ptr noundef nonnull align 1 dereferenceable(104) %147, i64 104, i1 false) %148 = icmp eq i64 %109, 0 - br i1 %148, label %._crit_edge45.loopexit, label %.preheader + br i1 %148, label %._crit_edge46.loopexit, label %.preheader common.resume: ; preds = %165, %76 %common.resume.op = phi { ptr, i32 } [ %77, %76 ], [ %166, %165 ] @@ -27139,7 +27139,7 @@ common.resume: ; preds = %165, %76 %.not5.i.i = icmp eq i64 %19, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread, label %.lr.ph.i.i -_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread: ; preds = %149 +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread:; preds = %149 %150 = icmp ne ptr %.val10.i, null tail call void @llvm.assume(i1 %150) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !5995 @@ -27155,16 +27155,16 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit tail call void @llvm.assume(i1 %154) br label %158 -._crit_edge.i.i: ; preds = %158 +._crit_edge.i.i:; preds = %158 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %19, i64 16) %spec.select28.i = tail call i64 @llvm.umin.i64(i64 %19, i64 16) %155 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %155, ptr nonnull align 1 %.val10.i, i64 %spec.select28.i, i1 false), !noalias !5995 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6), !noalias !5995 - %156 = getelementptr inbounds nuw i8, ptr %6, i64 8 - store ptr @"_ZN4core3ptr201drop_in_place$LT$$LP$uv_distribution_types..id..VersionId$C$dashmap..util..SharedValue$LT$uv_once_map..Value$LT$alloc..sync..Arc$LT$uv_resolver..resolver..provider..MetadataResponse$GT$$GT$$GT$$RP$$GT$17hb41467dde9e037b8E", ptr %156, align 8, !noalias !5995 - %157 = getelementptr inbounds nuw i8, ptr %6, i64 16 - store i64 104, ptr %157, align 8, !noalias !5995 + %163 = getelementptr inbounds nuw i8, ptr %6, i64 8 + store ptr @"_ZN4core3ptr201drop_in_place$LT$$LP$uv_distribution_types..id..VersionId$C$dashmap..util..SharedValue$LT$uv_once_map..Value$LT$alloc..sync..Arc$LT$uv_resolver..resolver..provider..MetadataResponse$GT$$GT$$GT$$RP$$GT$17hb41467dde9e037b8E", ptr %163, align 8, !noalias !5995 + %164 = getelementptr inbounds nuw i8, ptr %6, i64 16 + store i64 104, ptr %164, align 8, !noalias !5995 store ptr %0, ptr %6, align 8, !noalias !5995 br label %.lr.ph.i7 @@ -27188,16 +27188,16 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit invoke fastcc void @"_ZN4core3ptr195drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h7ba04efe36d83b48E"(ptr noalias noundef align 8 dereferenceable(24) %6) #70 to label %common.resume unwind label %246 -.lr.ph.i7: ; preds = %245, %._crit_edge.i.i +.lr.ph.i8: ; preds = %245, %._crit_edge.i.i %.sroa.04.08.i = phi i64 [ %167, %245 ], [ 0, %._crit_edge.i.i ] %167 = add nuw i64 %.sroa.04.08.i, 1 %168 = load ptr, ptr %0, align 8, !alias.scope !5995, !nonnull !13, !noundef !13 %169 = getelementptr inbounds i8, ptr %168, i64 %.sroa.04.08.i %170 = load i8, ptr %169, align 1, !noundef !13 - %.not.i8 = icmp eq i8 %170, -128 - br i1 %.not.i8, label %171, label %245 + %.not.i9 = icmp eq i8 %170, -128 + br i1 %.not.i9, label %171, label %245 -171: ; preds = %.lr.ph.i7 +171: ; preds = %.lr.ph.i8 %.neg.i = mul i64 %.sroa.04.08.i, -104 %172 = getelementptr i8, ptr %168, i64 %.neg.i %173 = getelementptr i8, ptr %172, i64 -104 @@ -27230,23 +27230,23 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h89a2254c9734b07cE.exit.i: ; preds = %182 = icmp slt <16 x i8> %.sroa.0.0.copyload.i810.i.i, zeroinitializer %183 = bitcast <16 x i1> %182 to i16 %184 = icmp eq i16 %183, 0 - br i1 %184, label %.lr.ph.i13.i, label %._crit_edge.i12.i + br i1 %184, label %.lr.ph.i12.i, label %._crit_edge.i.i -.lr.ph.i13.i: ; preds = %178, %.lr.ph.i13.i - %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ], [ %.sroa.0.09.i.i, %178 ] +.lr.ph.i12.i: ; preds = %178, %.lr.ph.i12.i + %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i11, %.lr.ph.i13.i ], [ %.sroa.0.09.i.i, %178 ] %.sroa.7.011.i.i = phi i64 [ %185, %.lr.ph.i13.i ], [ 0, %178 ] %185 = add i64 %.sroa.7.011.i.i, 16 %186 = add i64 %185, %.sroa.0.012.i.i - %.sroa.0.0.i.i10 = and i64 %186, %.val9.i - %187 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i10 + %.sroa.0.0.i.i11 = and i64 %186, %.val9.i + %187 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i11 %.sroa.0.0.copyload.i8.i.i = load <16 x i8>, ptr %187, align 1, !noalias !6011 %188 = icmp slt <16 x i8> %.sroa.0.0.copyload.i8.i.i, zeroinitializer %189 = bitcast <16 x i1> %188 to i16 %190 = icmp eq i16 %189, 0 - br i1 %190, label %.lr.ph.i13.i, label %._crit_edge.i12.i + br i1 %190, label %.lr.ph.i12.i, label %._crit_edge.i.i -._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %178 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %178 ], [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i12.i, %178 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %178 ], [ %.sroa.0.0.i.i11, %.lr.ph.i13.i ] %.lcssa.i.i = phi i16 [ %183, %178 ], [ %189, %.lr.ph.i13.i ] %191 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %192 = zext nneg i16 %191 to i64 @@ -27257,7 +27257,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h89a2254c9734b07cE.exit.i: ; preds = %197 = icmp sgt i8 %196, -1 br i1 %197, label %198, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -198: ; preds = %._crit_edge.i12.i +198: ; preds = %._crit_edge.i.i %199 = load <16 x i8>, ptr %.val.i, align 16, !noalias !6014 %200 = icmp slt <16 x i8> %199, zeroinitializer %201 = bitcast <16 x i1> %200 to i16 @@ -27267,7 +27267,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h89a2254c9734b07cE.exit.i: ; preds = %204 = zext nneg i16 %203 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %198, %._crit_edge.i12.i +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %198, %._crit_edge.i.i %.sroa.0.0.i4.i.i = phi i64 [ %204, %198 ], [ %194, %._crit_edge.i12.i ] %205 = sub i64 %.sroa.04.08.i, %.sroa.0.09.i.i %206 = sub i64 %.sroa.0.0.i4.i.i, %.sroa.0.09.i.i @@ -27333,9 +27333,9 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(104) %211, ptr noundef nonnull align 1 dereferenceable(104) %173, i64 104, i1 false) br label %245 -245: ; preds = %236, %222, %.lr.ph.i7 +245: ; preds = %236, %222, %.lr.ph.i8 %exitcond.not.i = icmp eq i64 %.sroa.04.08.i, %17 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %.lr.ph.i7 + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, label %.lr.ph.i8 246: ; preds = %165 %247 = landingpad { ptr, i32 } @@ -27352,23 +27352,23 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit %250 = icmp ult i64 %.pre15.i.fr, 8 %spec.select = select i1 %250, i64 %.pre15.i.fr, i64 %249 %.pre = load i64, ptr %10, align 8, !alias.scope !5995 - br label %251 - -251: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread - %252 = phi i64 [ %11, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] - %253 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] - %254 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %255 = sub i64 %253, %252 - store i64 %255, ptr %254, align 8, !alias.scope !5995 + br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread + +_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread + %251 = phi i64 [ %11, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] + %252 = phi i64 [ 0, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ] + %253 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %254 = sub i64 %252, %251 + store i64 %254, ptr %253, align 8, !alias.scope !5995 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6), !noalias !5995 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit -_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit", %23, %251 +_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h9ee93adbd39d392cE.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit", %23, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit.thread %.sroa.4.0.i = phi i64 [ %26, %23 ], [ undef, %251 ], [ %.sroa.12.026, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit" ] %.sroa.0.0.i = phi i64 [ %25, %23 ], [ -9223372036854775807, %251 ], [ %.sroa.7.025, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17h33e3cad12e27aa2dE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h403935b8d9760f38E.exit" ] - %256 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 - %257 = insertvalue { i64, i64 } %256, i64 %.sroa.4.0.i, 1 - ret { i64, i64 } %257 + %255 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 + %256 = insertvalue { i64, i64 } %255, i64 %.sroa.4.0.i, 1 + ret { i64, i64 } %256 } ; Function Attrs: inlinehint nonlazybind uwtable diff --git a/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll b/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll index 32302a2e577..a61a90f819b 100644 --- a/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll +++ b/bench/uv-rs/optimized/4dcxzssfl4exl338cy92tfq1l.ll @@ -528,9 +528,9 @@ define { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_re br i1 %38, label %47, label %39, !prof !96 39: ; preds = %.thread, %31 - %.sroa.4.0.i.ph.i45 = phi i64 [ %..i.i, %.thread ], [ %37, %31 ] - %40 = shl nuw i64 %.sroa.4.0.i.ph.i45, 7 - %41 = add nuw nsw i64 %.sroa.4.0.i.ph.i45, 16 + %.sroa.4.0.i.ph.i47 = phi i64 [ %..i.i, %.thread ], [ %37, %31 ] + %40 = shl nuw i64 %.sroa.4.0.i.ph.i47, 7 + %41 = add nuw nsw i64 %.sroa.4.0.i.ph.i47, 16 %42 = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %40, i64 %41) %43 = extractvalue { i64, i1 } %42, 1 br i1 %43, label %47, label %44, !prof !55 @@ -555,9 +555,9 @@ define { i64, i64 } @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_re br label %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit: ; preds = %49 - %55 = icmp samesign ult i64 %.sroa.4.0.i.ph.i45, 9 - %56 = add nsw i64 %.sroa.4.0.i.ph.i45, -1 - %57 = lshr i64 %.sroa.4.0.i.ph.i45, 3 + %55 = icmp samesign ult i64 %.sroa.4.0.i.ph.i47, 9 + %56 = add nsw i64 %.sroa.4.0.i.ph.i47, -1 + %57 = lshr i64 %.sroa.4.0.i.ph.i47, 3 %58 = mul nuw nsw i64 %57, 7 %.sroa.03.0.i.i = select i1 %55, i64 %56, i64 %58 %59 = getelementptr inbounds nuw i8, ptr %51, i64 %40 @@ -574,7 +574,7 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6af store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !91 %invariant.gep = getelementptr i8, ptr %59, i64 16 %60 = icmp eq i64 %7, 0 - br i1 %60, label %._crit_edge35, label %.preheader.lr.ph + br i1 %60, label %._crit_edge37, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit %61 = load ptr, ptr %0, align 8, !alias.scope !100, !noalias !101, !nonnull !9, !noundef !9 @@ -586,37 +586,37 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6af _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread: ; preds = %47, %53, %29 %.pn = phi { i64, i64 } [ %30, %29 ], [ %54, %53 ], [ %48, %47 ] - %.sroa.7.021 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.022 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.023 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.024 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5), !noalias !91 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17hc2c170a3beee1f28E.exit .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit - %.sroa.0.034 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.5.033 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.9.032 = phi i64 [ %7, %.preheader.lr.ph ], [ %95, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.13.031 = phi i16 [ %65, %.preheader.lr.ph ], [ %93, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %66 = icmp eq i16 %.sroa.13.031, 0 + %.sroa.0.036 = phi ptr [ %61, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.5.035 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.9.034 = phi i64 [ %7, %.preheader.lr.ph ], [ %95, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.13.033 = phi i16 [ %65, %.preheader.lr.ph ], [ %93, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %66 = icmp eq i16 %.sroa.13.033, 0 br i1 %66, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.0.128 = phi ptr [ %67, %.noexc2 ], [ %.sroa.0.034, %.preheader ] - %.sroa.5.127 = phi i64 [ %71, %.noexc2 ], [ %.sroa.5.033, %.preheader ] - %67 = getelementptr inbounds nuw i8, ptr %.sroa.0.128, i64 16 + %.sroa.0.130 = phi ptr [ %67, %.noexc2 ], [ %.sroa.0.036, %.preheader ] + %.sroa.5.129 = phi i64 [ %71, %.noexc2 ], [ %.sroa.5.035, %.preheader ] + %67 = getelementptr inbounds nuw i8, ptr %.sroa.0.130, i64 16 %68 = load <16 x i8>, ptr %67, align 16, !noalias !105 %69 = icmp slt <16 x i8> %68, zeroinitializer %70 = bitcast <16 x i1> %69 to i16 - %71 = add i64 %.sroa.5.127, 16 + %71 = add i64 %.sroa.5.129, 16 %72 = icmp eq i16 %70, -1 br i1 %72, label %.noexc2, label %._crit_edge.loopexit -._crit_edge35: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit +._crit_edge37: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit %73 = sub i64 %.sroa.03.0.i.i, %7 store i64 %73, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !91 store i64 %7, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !91 br label %74 -74: ; preds = %74, %._crit_edge35 +74: ; preds = %74, %._crit_edge37 %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge35 ], [ %79, %74 ] %75 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %76 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i @@ -658,15 +658,15 @@ _ZN9hashbrown3raw5inner11TableLayout20calculate_layout_for17hd3f746c8628a2deaE.l br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.031, %.preheader ], [ %89, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.033, %.preheader ], [ %71, %._crit_edge.loopexit ] - %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.034, %.preheader ], [ %67, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.033, %.preheader ], [ %89, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.035, %.preheader ], [ %71, %._crit_edge.loopexit ] + %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.036, %.preheader ], [ %67, %._crit_edge.loopexit ] %90 = add i16 %.sroa.13.1.lcssa, -1 %91 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %92 = zext nneg i16 %91 to i64 %93 = and i16 %90, %.sroa.13.1.lcssa %94 = add i64 %.sroa.5.1.lcssa, %92 - %95 = add i64 %.sroa.9.032, -1 + %95 = add i64 %.sroa.9.034, -1 %96 = tail call fastcc noundef i64 @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h57caef270687ceb1E"(ptr nonnull align 1 poison, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %94) %.sroa.0.09.i = and i64 %56, %96 %97 = getelementptr inbounds nuw i8, ptr %59, i64 %.sroa.0.09.i @@ -729,7 +729,7 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %131 = getelementptr inbounds i8, ptr %59, i64 %130 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(128) %131, ptr noundef nonnull align 1 dereferenceable(128) %128, i64 128, i1 false) %132 = icmp eq i64 %95, 0 - br i1 %132, label %._crit_edge35, label %.preheader + br i1 %132, label %._crit_edge37, label %.preheader 133: ; preds = %10 tail call void @llvm.experimental.noalias.scope.decl(metadata !124) @@ -737,7 +737,7 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %.not5.i.i = icmp eq i64 %15, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread20.i, label %.lr.ph.i.i -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread20.i: ; preds = %133 +_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread20.i:; preds = %133 %134 = icmp ne ptr %.val9.i, null tail call void @llvm.assume(i1 %134) br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit @@ -752,7 +752,7 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f10 tail call void @llvm.assume(i1 %138) br label %140 -._crit_edge.i.i: ; preds = %140 +._crit_edge.i.i:; preds = %140 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %15, i64 16) %spec.select26.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) %139 = getelementptr inbounds i8, ptr %.val9.i, i64 %spec.select.i @@ -760,8 +760,8 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f10 %invariant.gep.i = getelementptr i8, ptr %.val9.i, i64 16 br label %147 -140: ; preds = %140, %.lr.ph.i.i - %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %142, %140 ] +147: ; preds = %140, %.lr.ph.i.i + %.sroa.04.08.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %142, %140 ] %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %141, %140 ] %141 = add i64 %.sroa.03.06.i.i, 16 %142 = add i64 %.sroa.04.07.i.i, -1 @@ -779,8 +779,8 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f10 %148 = add nuw i64 %.sroa.04.08.i, 1 %149 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.04.08.i %150 = load i8, ptr %149, align 1, !noalias !124, !noundef !9 - %.not.i5 = icmp eq i8 %150, -128 - br i1 %.not.i5, label %151, label %208 + %.not.i7 = icmp eq i8 %150, -128 + br i1 %.not.i7, label %151, label %208 151: ; preds = %147 %152 = shl i64 %.sroa.04.08.i, 7 @@ -796,23 +796,23 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i: ; preds = %157 = icmp slt <16 x i8> %.sroa.0.0.copyload.i810.i.i, zeroinitializer %158 = bitcast <16 x i1> %157 to i16 %159 = icmp eq i16 %158, 0 - br i1 %159, label %.lr.ph.i12.i, label %._crit_edge.i11.i + br i1 %159, label %.lr.ph.i11.i, label %._crit_edge.i.i -.lr.ph.i12.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i, %.lr.ph.i12.i - %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i7, %.lr.ph.i12.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ] +.lr.ph.i11.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i, %.lr.ph.i11.i + %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i9, %.lr.ph.i12.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ] %.sroa.7.011.i.i = phi i64 [ %160, %.lr.ph.i12.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ] %160 = add i64 %.sroa.7.011.i.i, 16 %161 = add i64 %160, %.sroa.0.012.i.i - %.sroa.0.0.i.i7 = and i64 %161, %13 - %162 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.0.0.i.i7 + %.sroa.0.0.i.i9 = and i64 %161, %13 + %162 = getelementptr inbounds i8, ptr %.val9.i, i64 %.sroa.0.0.i.i9 %.sroa.0.0.copyload.i8.i.i = load <16 x i8>, ptr %162, align 1, !noalias !133 %163 = icmp slt <16 x i8> %.sroa.0.0.copyload.i8.i.i, zeroinitializer %164 = bitcast <16 x i1> %163 to i16 %165 = icmp eq i16 %164, 0 - br i1 %165, label %.lr.ph.i12.i, label %._crit_edge.i11.i + br i1 %165, label %.lr.ph.i11.i, label %._crit_edge.i.i -._crit_edge.i11.i: ; preds = %.lr.ph.i12.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ], [ %.sroa.0.0.i.i7, %.lr.ph.i12.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i11.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ], [ %.sroa.0.0.i.i9, %.lr.ph.i12.i ] %.lcssa.i.i = phi i16 [ %158, %_ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i ], [ %164, %.lr.ph.i12.i ] %166 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %167 = zext nneg i16 %166 to i64 @@ -823,7 +823,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i: ; preds = %172 = icmp sgt i8 %171, -1 br i1 %172, label %173, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -173: ; preds = %._crit_edge.i11.i +173: ; preds = %._crit_edge.i.i %174 = load <16 x i8>, ptr %.val9.i, align 16, !noalias !136 %175 = icmp slt <16 x i8> %174, zeroinitializer %176 = bitcast <16 x i1> %175 to i16 @@ -833,7 +833,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17h9cdd268a14e9e93fE.exit.i: ; preds = %179 = zext nneg i16 %178 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %173, %._crit_edge.i11.i +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %173, %._crit_edge.i.i %.sroa.0.0.i4.i.i = phi i64 [ %179, %173 ], [ %169, %._crit_edge.i11.i ] %180 = sub i64 %.sroa.04.08.i, %.sroa.0.09.i.i %181 = sub i64 %.sroa.0.0.i4.i.i, %.sroa.0.09.i.i @@ -900,8 +900,8 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17hc2c170a3beee1f28E.exit _ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17hc2c170a3beee1f28E.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit", %19, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit - %.sroa.4.0.i = phi i64 [ %22, %19 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.022, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] - %.sroa.0.0.i = phi i64 [ %21, %19 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.021, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] + %.sroa.4.0.i = phi i64 [ %22, %19 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.024, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] + %.sroa.0.0.i = phi i64 [ %21, %19 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.023, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17hef4e20cb32eb6afaE.llvm.18357676930021886625.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17haf6f4b8394b71b51E.exit" ] %211 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 %212 = insertvalue { i64, i64 } %211, i64 %.sroa.4.0.i, 1 ret { i64, i64 } %212 diff --git a/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll b/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll index 9f359abdebf..632d8dbc54b 100644 --- a/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll +++ b/bench/uv-rs/optimized/8hv30atg5watxkzkqbi6e75uu.ll @@ -635,9 +635,9 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a2 %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 0, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !45 %invariant.gep = getelementptr i8, ptr %66, i64 16 - %invariant.gep31 = getelementptr i8, ptr %66, i64 -168 + %invariant.gep33 = getelementptr i8, ptr %66, i64 -168 %67 = icmp eq i64 %9, 0 - br i1 %67, label %._crit_edge37, label %.preheader.lr.ph + br i1 %67, label %._crit_edge39, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit %68 = load ptr, ptr %0, align 8, !alias.scope !54, !noalias !55, !nonnull !3, !noundef !3 @@ -645,47 +645,47 @@ _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a2 %70 = icmp slt <16 x i8> %69, zeroinitializer %71 = bitcast <16 x i1> %70 to i16 %72 = xor i16 %71, -1 - %invariant.gep51 = getelementptr i8, ptr %68, i64 -168 + %invariant.gep53 = getelementptr i8, ptr %68, i64 -168 br label %.preheader _ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread: ; preds = %55, %60, %39 %.pn = phi { i64, i64 } [ %40, %39 ], [ %61, %60 ], [ %56, %55 ] - %.sroa.7.022 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.023 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.024 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.025 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5), !noalias !45 br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h6edc8a3c1f0ada68E.exit .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit - %.sroa.0.036 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.5.035 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.9.034 = phi i64 [ %9, %.preheader.lr.ph ], [ %103, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %.sroa.13.033 = phi i16 [ %72, %.preheader.lr.ph ], [ %101, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] - %73 = icmp eq i16 %.sroa.13.033, 0 + %.sroa.0.038 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.0.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.5.037 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.9.036 = phi i64 [ %9, %.preheader.lr.ph ], [ %103, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %.sroa.13.035 = phi i16 [ %72, %.preheader.lr.ph ], [ %101, %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit ] + %73 = icmp eq i16 %.sroa.13.035, 0 br i1 %73, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.0.128 = phi ptr [ %74, %.noexc2 ], [ %.sroa.0.036, %.preheader ] - %.sroa.5.127 = phi i64 [ %78, %.noexc2 ], [ %.sroa.5.035, %.preheader ] - %74 = getelementptr inbounds nuw i8, ptr %.sroa.0.128, i64 16 + %.sroa.0.130 = phi ptr [ %74, %.noexc2 ], [ %.sroa.0.038, %.preheader ] + %.sroa.5.129 = phi i64 [ %78, %.noexc2 ], [ %.sroa.5.037, %.preheader ] + %74 = getelementptr inbounds nuw i8, ptr %.sroa.0.130, i64 16 %75 = load <16 x i8>, ptr %74, align 16, !noalias !59 %76 = icmp slt <16 x i8> %75, zeroinitializer %77 = bitcast <16 x i1> %76 to i16 - %78 = add i64 %.sroa.5.127, 16 + %78 = add i64 %.sroa.5.129, 16 %79 = icmp eq i16 %77, -1 br i1 %79, label %.noexc2, label %._crit_edge.loopexit -._crit_edge37.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit +._crit_edge39.loopexit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit %.pre = load i64, ptr %8, align 8, !alias.scope !54, !noalias !55 - br label %._crit_edge37 + br label %._crit_edge39 -._crit_edge37: ; preds = %._crit_edge37.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit +._crit_edge39: ; preds = %._crit_edge39.loopexit, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit %80 = phi i64 [ %.pre, %._crit_edge37.loopexit ], [ 0, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit ] %81 = sub i64 %.sroa.03.0.i.i, %80 store i64 %81, ptr %.sroa.631.sroa.5.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !45 store i64 %80, ptr %.sroa.631.sroa.6.0..sroa.631.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !45 br label %82 -82: ; preds = %82, %._crit_edge37 +82: ; preds = %82, %._crit_edge39 %.sroa.0.05.i.i.i = phi i64 [ 0, %._crit_edge37 ], [ %87, %82 ] %83 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i.i %84 = getelementptr inbounds nuw i64, ptr %.sroa.631.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i.i @@ -727,15 +727,15 @@ _ZN9hashbrown3raw5inner11TableLayout20calculate_layout_for17hd3f746c8628a2deaE.e br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.033, %.preheader ], [ %97, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.035, %.preheader ], [ %78, %._crit_edge.loopexit ] - %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.036, %.preheader ], [ %74, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.035, %.preheader ], [ %97, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.037, %.preheader ], [ %78, %._crit_edge.loopexit ] + %.sroa.0.1.lcssa = phi ptr [ %.sroa.0.038, %.preheader ], [ %74, %._crit_edge.loopexit ] %98 = add i16 %.sroa.13.1.lcssa, -1 %99 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %100 = zext nneg i16 %99 to i64 %101 = and i16 %98, %.sroa.13.1.lcssa %102 = add i64 %.sroa.5.1.lcssa, %100 - %103 = add i64 %.sroa.9.034, -1 + %103 = add i64 %.sroa.9.036, -1 %104 = call fastcc noundef i64 @"_ZN9hashbrown3raw5inner21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17h864b9b38086ca43fE"(ptr noundef nonnull align 1 %6, ptr noalias noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %102) %.sroa.0.09.i = and i64 %63, %104 %105 = getelementptr inbounds nuw i8, ptr %66, i64 %.sroa.0.09.i @@ -791,12 +791,12 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %gep = getelementptr i8, ptr %invariant.gep, i64 %132 store i8 %130, ptr %gep, align 1 %.neg.i.i = mul i64 %102, -168 - %gep52 = getelementptr i8, ptr %invariant.gep51, i64 %.neg.i.i + %gep54 = getelementptr i8, ptr %invariant.gep53, i64 %.neg.i.i %.neg72.i.i = mul i64 %.sroa.0.0.i4.i, -168 - %gep32 = getelementptr i8, ptr %invariant.gep31, i64 %.neg72.i.i - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(168) %gep32, ptr noundef nonnull align 1 dereferenceable(168) %gep52, i64 168, i1 false) + %gep34 = getelementptr i8, ptr %invariant.gep33, i64 %.neg72.i.i + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(168) %gep34, ptr noundef nonnull align 1 dereferenceable(168) %gep54, i64 168, i1 false) %134 = icmp eq i64 %103, 0 - br i1 %134, label %._crit_edge37.loopexit, label %.preheader + br i1 %134, label %._crit_edge39.loopexit, label %.preheader 135: ; preds = %12 call void @llvm.experimental.noalias.scope.decl(metadata !75) @@ -804,7 +804,7 @@ _ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exi %.not5.i.i = icmp eq i64 %17, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread23.i, label %.lr.ph.i.i -_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread23.i: ; preds = %135 +_ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f108cE.exit.thread23.i:; preds = %135 %136 = icmp ne ptr %.val10.i, null call void @llvm.assume(i1 %136) br label %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit @@ -819,7 +819,7 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f10 call void @llvm.assume(i1 %140) br label %142 -._crit_edge.i.i: ; preds = %142 +._crit_edge.i.i:; preds = %142 %spec.select.i = call i64 @llvm.umax.i64(i64 %17, i64 16) %spec.select28.i = call i64 @llvm.umin.i64(i64 %17, i64 16) %141 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i @@ -828,8 +828,8 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f10 %invariant.gep8.i = getelementptr i8, ptr %.val10.i, i64 16 br label %149 -142: ; preds = %142, %.lr.ph.i.i - %.sroa.04.07.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %144, %142 ] +149: ; preds = %142, %.lr.ph.i.i + %.sroa.04.010.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %144, %142 ] %.sroa.03.06.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %143, %142 ] %143 = add i64 %.sroa.03.06.i.i, 16 %144 = add i64 %.sroa.04.07.i.i, -1 @@ -847,8 +847,8 @@ _ZN9hashbrown3raw5inner13RawTableInner23prepare_rehash_in_place17h0f79459acf6f10 %150 = add nuw i64 %.sroa.04.010.i, 1 %151 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.04.010.i %152 = load i8, ptr %151, align 1, !noalias !75, !noundef !3 - %.not.i6 = icmp eq i8 %152, -128 - br i1 %.not.i6, label %153, label %204 + %.not.i8 = icmp eq i8 %152, -128 + br i1 %.not.i8, label %153, label %204 153: ; preds = %149 %.neg.i = mul i64 %.sroa.04.010.i, -168 @@ -863,23 +863,23 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i: ; preds = %156 = icmp slt <16 x i8> %.sroa.0.0.copyload.i810.i.i, zeroinitializer %157 = bitcast <16 x i1> %156 to i16 %158 = icmp eq i16 %157, 0 - br i1 %158, label %.lr.ph.i13.i, label %._crit_edge.i12.i + br i1 %158, label %.lr.ph.i12.i, label %._crit_edge.i.i -.lr.ph.i13.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i, %.lr.ph.i13.i - %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ] +.lr.ph.i12.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i, %.lr.ph.i12.i + %.sroa.0.012.i.i = phi i64 [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ], [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ] %.sroa.7.011.i.i = phi i64 [ %159, %.lr.ph.i13.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ] %159 = add i64 %.sroa.7.011.i.i, 16 %160 = add i64 %159, %.sroa.0.012.i.i - %.sroa.0.0.i.i8 = and i64 %160, %15 - %161 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i8 + %.sroa.0.0.i.i10 = and i64 %160, %15 + %161 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i10 %.sroa.0.0.copyload.i8.i.i = load <16 x i8>, ptr %161, align 1, !noalias !84 %162 = icmp slt <16 x i8> %.sroa.0.0.copyload.i8.i.i, zeroinitializer %163 = bitcast <16 x i1> %162 to i16 %164 = icmp eq i16 %163, 0 - br i1 %164, label %.lr.ph.i13.i, label %._crit_edge.i12.i + br i1 %164, label %.lr.ph.i12.i, label %._crit_edge.i.i -._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ], [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i12.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.09.i.i, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ], [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ] %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i ], [ %163, %.lr.ph.i13.i ] %165 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %166 = zext nneg i16 %165 to i64 @@ -890,7 +890,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i: ; preds = %171 = icmp sgt i8 %170, -1 br i1 %171, label %172, label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -172: ; preds = %._crit_edge.i12.i +172: ; preds = %._crit_edge.i.i %173 = load <16 x i8>, ptr %.val10.i, align 16, !noalias !87 %174 = icmp slt <16 x i8> %173, zeroinitializer %175 = bitcast <16 x i1> %174 to i16 @@ -900,7 +900,7 @@ _ZN4core3ptr19swap_nonoverlapping7runtime17hb3cc3afb4815cf26E.exit.i: ; preds = %178 = zext nneg i16 %177 to i64 br label %_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i -_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %172, %._crit_edge.i12.i +_ZN9hashbrown3raw5inner13RawTableInner16find_insert_slot17hf24605cd131b9320E.exit.i: ; preds = %172, %._crit_edge.i.i %.sroa.0.0.i4.i.i = phi i64 [ %178, %172 ], [ %168, %._crit_edge.i12.i ] %179 = sub i64 %.sroa.04.010.i, %.sroa.0.09.i.i %180 = sub i64 %.sroa.0.0.i4.i.i, %.sroa.0.09.i.i @@ -966,8 +966,8 @@ _ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit br label %_ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h6edc8a3c1f0ada68E.exit _ZN9hashbrown3raw5inner13RawTableInner20reserve_rehash_inner17h6edc8a3c1f0ada68E.exit: ; preds = %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit", %21, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit - %.sroa.4.0.i = phi i64 [ %24, %21 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.023, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] - %.sroa.0.0.i = phi i64 [ %23, %21 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.022, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] + %.sroa.4.0.i = phi i64 [ %24, %21 ], [ undef, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.12.025, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ undef, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] + %.sroa.0.0.i = phi i64 [ %23, %21 ], [ -9223372036854775807, %_ZN9hashbrown3raw5inner13RawTableInner15rehash_in_place17h5c663f0535f4eb4eE.exit ], [ %.sroa.7.024, %_ZN9hashbrown3raw5inner13RawTableInner22fallible_with_capacity17he9fe64b738d34a20E.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr233drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..inner..RawTableInner$C$hashbrown..raw..inner..RawTableInner..prepare_resize$LT$hashbrown..raw..inner..alloc..inner..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h6c90520a2548bf86E.exit" ] %207 = insertvalue { i64, i64 } poison, i64 %.sroa.0.0.i, 0 %208 = insertvalue { i64, i64 } %207, i64 %.sroa.4.0.i, 1 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) diff --git a/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll b/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll index 0084957734b..56ffc0beab0 100644 --- a/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll +++ b/bench/wasmi-rs/optimized/3n432rns6m5cu25igp84708nl.ll @@ -1132,7 +1132,7 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exi store i64 0, ptr %.sroa.620.sroa.6.0..sroa.620.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !89 %66 = load i64, ptr %8, align 8, !alias.scope !98, !noalias !99, !noundef !3 %67 = icmp eq i64 %66, 0 - br i1 %67, label %._crit_edge54, label %.preheader.lr.ph + br i1 %67, label %._crit_edge55, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit %68 = load ptr, ptr %0, align 8, !alias.scope !98, !noalias !99, !nonnull !3, !noundef !3 @@ -1141,13 +1141,13 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exi %71 = bitcast <16 x i1> %70 to i16 %72 = xor i16 %71, -1 %invariant.gep = getelementptr i8, ptr %61, i64 16 - %invariant.gep76 = getelementptr i8, ptr %61, i64 -24 + %invariant.gep77 = getelementptr i8, ptr %61, i64 -24 br label %.preheader _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread: ; preds = %55, %57, %59 %.pn = phi { i64, i64 } [ %60, %59 ], [ %58, %57 ], [ %56, %55 ] - %.sroa.7.035 = extractvalue { i64, i64 } %.pn, 0 - %.sroa.12.036 = extractvalue { i64, i64 } %.pn, 1 + %.sroa.7.036 = extractvalue { i64, i64 } %.pn, 0 + %.sroa.12.037 = extractvalue { i64, i64 } %.pn, 1 call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6), !noalias !89 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i @@ -1158,43 +1158,43 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exi br label %common.resume .preheader: ; preds = %.preheader.lr.ph, %134 - %.sroa.025.053 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.025.1.lcssa, %134 ] - %.sroa.5.052 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %134 ] - %.sroa.9.051 = phi i64 [ %66, %.preheader.lr.ph ], [ %106, %134 ] - %.sroa.13.050 = phi i16 [ %72, %.preheader.lr.ph ], [ %104, %134 ] - %.not.i245 = icmp eq i16 %.sroa.13.050, 0 - br i1 %.not.i245, label %.noexc3, label %._crit_edge + %.sroa.026.054 = phi ptr [ %68, %.preheader.lr.ph ], [ %.sroa.026.1.lcssa, %134 ] + %.sroa.5.053 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.1.lcssa, %134 ] + %.sroa.9.052 = phi i64 [ %66, %.preheader.lr.ph ], [ %106, %134 ] + %.sroa.13.051 = phi i16 [ %72, %.preheader.lr.ph ], [ %104, %134 ] + %.not.i246 = icmp eq i16 %.sroa.13.051, 0 + br i1 %.not.i246, label %.noexc3, label %._crit_edge .noexc3: ; preds = %.preheader, %.noexc3 - %.sroa.025.147 = phi ptr [ %75, %.noexc3 ], [ %.sroa.025.053, %.preheader ] - %.sroa.5.146 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.052, %.preheader ] - %75 = getelementptr inbounds nuw i8, ptr %.sroa.025.147, i64 16 + %.sroa.026.148 = phi ptr [ %75, %.noexc3 ], [ %.sroa.026.054, %.preheader ] + %.sroa.5.147 = phi i64 [ %79, %.noexc3 ], [ %.sroa.5.053, %.preheader ] + %75 = getelementptr inbounds nuw i8, ptr %.sroa.026.148, i64 16 %76 = load <16 x i8>, ptr %75, align 16 %77 = icmp slt <16 x i8> %76, zeroinitializer %78 = bitcast <16 x i1> %77 to i16 - %79 = add i64 %.sroa.5.146, 16 + %79 = add i64 %.sroa.5.147, 16 %.not.i2 = icmp eq i16 %78, -1 br i1 %.not.i2, label %.noexc3, label %._crit_edge.loopexit -._crit_edge54.loopexit: ; preds = %134 - %.pre66 = load i64, ptr %8, align 8, !alias.scope !98, !noalias !99 - br label %._crit_edge54 +._crit_edge55.loopexit: ; preds = %134 + %.pre67 = load i64, ptr %8, align 8, !alias.scope !98, !noalias !99 + br label %._crit_edge55 -._crit_edge54: ; preds = %._crit_edge54.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit - %80 = phi i64 [ %.pre66, %._crit_edge54.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit ] +._crit_edge55: ; preds = %._crit_edge55.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit + %80 = phi i64 [ %.pre67, %._crit_edge54.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit ] %81 = sub i64 %.sroa.02.0.i.i, %80 store i64 %81, ptr %.sroa.620.sroa.5.0..sroa.620.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !89 store i64 %80, ptr %.sroa.620.sroa.6.0..sroa.620.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !89 invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17he19fe9ca5101d9d2E(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %.sroa.620.0..sroa_idx.i.i, i64 noundef 4) to label %_ZN4core10intrinsics25typed_swap_nonoverlapping17h63504aec4c741120E.exit unwind label %82 -82: ; preds = %._crit_edge54 +82: ; preds = %._crit_edge55 %83 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking19panic_cannot_unwind17h82fcc9c695da0defE() #16 unreachable -_ZN4core10intrinsics25typed_swap_nonoverlapping17h63504aec4c741120E.exit: ; preds = %._crit_edge54 +_ZN4core10intrinsics25typed_swap_nonoverlapping17h63504aec4c741120E.exit: ; preds = %._crit_edge55 call void @llvm.experimental.noalias.scope.decl(metadata !100) call void @llvm.experimental.noalias.scope.decl(metadata !103) %.val1.i.i = load i64, ptr %.sroa.5.0..sroa_idx.i.i, align 8, !alias.scope !106 @@ -1236,15 +1236,15 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h59ce126c8eb9b7f7E.exit.i. br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.050, %.preheader ], [ %100, %._crit_edge.loopexit ] - %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.052, %.preheader ], [ %79, %._crit_edge.loopexit ] - %.sroa.025.1.lcssa = phi ptr [ %.sroa.025.053, %.preheader ], [ %75, %._crit_edge.loopexit ] + %.sroa.13.1.lcssa = phi i16 [ %.sroa.13.051, %.preheader ], [ %100, %._crit_edge.loopexit ] + %.sroa.5.1.lcssa = phi i64 [ %.sroa.5.053, %.preheader ], [ %79, %._crit_edge.loopexit ] + %.sroa.026.1.lcssa = phi ptr [ %.sroa.026.054, %.preheader ], [ %75, %._crit_edge.loopexit ] %101 = add i16 %.sroa.13.1.lcssa, -1 %102 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.1.lcssa, i1 true) %103 = zext nneg i16 %102 to i64 %104 = and i16 %101, %.sroa.13.1.lcssa %105 = add i64 %.sroa.5.1.lcssa, %103 - %106 = add i64 %.sroa.9.051, -1 + %106 = add i64 %.sroa.9.052, -1 %107 = load ptr, ptr %0, align 8, !alias.scope !107, !noalias !110, !nonnull !3, !noundef !3 %108 = sub nsw i64 0, %105 %109 = getelementptr inbounds { { { { { ptr, i64 } }, {} }, {} }, ptr }, ptr %107, i64 %108 @@ -1311,13 +1311,13 @@ _ZN9hashbrown3raw11TableLayout20calculate_layout_for17h59ce126c8eb9b7f7E.exit.i. %141 = getelementptr i8, ptr %140, i64 %.neg.i.i %142 = getelementptr i8, ptr %141, i64 -24 %.neg69.i.i = mul i64 %.sroa.0.0.i4.i.i, -24 - %gep77 = getelementptr i8, ptr %invariant.gep76, i64 %.neg69.i.i - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep77, ptr noundef nonnull align 1 dereferenceable(24) %142, i64 24, i1 false) + %gep78 = getelementptr i8, ptr %invariant.gep77, i64 %.neg69.i.i + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %gep78, ptr noundef nonnull align 1 dereferenceable(24) %142, i64 24, i1 false) %143 = icmp eq i64 %106, 0 - br i1 %143, label %._crit_edge54.loopexit, label %.preheader + br i1 %143, label %._crit_edge55.loopexit, label %.preheader -common.resume: ; preds = %173, %73 - %common.resume.op = phi { ptr, i32 } [ %74, %73 ], [ %174, %173 ] +common.resume: ; preds = %171, %73 + %common.resume.op = phi { ptr, i32 } [ %74, %73 ], [ %172, %173 ] resume { ptr, i32 } %common.resume.op 144: ; preds = %12 @@ -1326,7 +1326,7 @@ common.resume: ; preds = %173, %73 %.not1.i.i = icmp eq i64 %17, 0 br i1 %.not1.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread, label %.lr.ph.i.i7 -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread: ; preds = %144 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread:; preds = %144 %145 = icmp ne ptr %.val10.i, null tail call void @llvm.assume(i1 %145) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !114 @@ -1342,11 +1342,11 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.threa tail call void @llvm.assume(i1 %149) br label %151 -._crit_edge.i.i8: ; preds = %151 +._crit_edge.i.i8:; preds = %151 %150 = icmp ult i64 %17, 16 br i1 %150, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.exit.i, label %.lr.ph.i, !prof !117 -151: ; preds = %151, %.lr.ph.i.i7 +151:; preds = %151, %.lr.ph.i.i7 %.sroa.0.03.i.i = phi i64 [ 0, %.lr.ph.i.i7 ], [ %152, %151 ] %.sroa.5.02.i.i = phi i64 [ %.sroa.05.0.i.i.i.i, %.lr.ph.i.i7 ], [ %153, %151 ] %152 = add i64 %.sroa.0.03.i.i, 16 @@ -1369,38 +1369,38 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17hdcbcce8ec60b7b37E.ex %158 = getelementptr inbounds nuw i8, ptr %.val10.i, i64 %.sink25.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %158, ptr nonnull align 1 %.val10.i, i64 %.sink24.i, i1 false), !noalias !114 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5), !noalias !114 - %159 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr @_ZN4core3ops8function6FnOnce9call_once17h2cee6687614f72c9E, ptr %159, align 8, !noalias !114 - %160 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 24, ptr %160, align 8, !noalias !114 + %158 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr @_ZN4core3ops8function6FnOnce9call_once17h2cee6687614f72c9E, ptr %158, align 8, !noalias !114 + %159 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 24, ptr %159, align 8, !noalias !114 store ptr %0, ptr %5, align 8, !noalias !114 br label %161 161: ; preds = %233, %.lr.ph.i %.sroa.0.17.i = phi i64 [ 1, %.lr.ph.i ], [ %.sroa.0.1.i10, %233 ] - %.sroa.0.06.i = phi i64 [ 0, %.lr.ph.i ], [ %.sroa.0.17.i, %233 ] + %.sroa.0.17.i = phi i64 [ 0, %.lr.ph.i ], [ %.sroa.0.17.i, %233 ] %162 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %163 = getelementptr inbounds nuw i8, ptr %162, i64 %.sroa.0.06.i + %163 = getelementptr inbounds nuw i8, ptr %162, i64 %.sroa.0.17.i %164 = load i8, ptr %163, align 1, !noundef !3 %.not.i9 = icmp eq i8 %164, -128 br i1 %.not.i9, label %165, label %233 165: ; preds = %161 %.neg.i = mul i64 %.sroa.0.06.i, -24 - %166 = getelementptr i8, ptr %162, i64 %.neg.i - %167 = getelementptr i8, ptr %166, i64 -24 - %168 = sub nsw i64 0, %.sroa.0.06.i + %164 = getelementptr i8, ptr %162, i64 %.neg.i + %165 = getelementptr i8, ptr %164, i64 -24 + %166 = sub nsw i64 0, %.sroa.0.06.i br label %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i _ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i: ; preds = %232, %165 - %169 = load ptr, ptr %0, align 8, !alias.scope !118, !noalias !121, !nonnull !3, !noundef !3 - %170 = getelementptr inbounds { { { { { ptr, i64 } }, {} }, {} }, ptr }, ptr %169, i64 %168 - %171 = getelementptr inbounds i8, ptr %170, i64 -24 - %172 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h5f2ae8b6bed3ffa9E(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %171) - to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" unwind label %173 - -173: ; preds = %232, %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i - %174 = landingpad { ptr, i32 } + %167 = load ptr, ptr %0, align 8, !alias.scope !118, !noalias !121, !nonnull !3, !noundef !3 + %168 = getelementptr inbounds { { { { { ptr, i64 } }, {} }, {} }, ptr }, ptr %167, i64 %166 + %169 = getelementptr inbounds i8, ptr %168, i64 -24 + %170 = invoke noundef i64 @_ZN4core4hash11BuildHasher8hash_one17h5f2ae8b6bed3ffa9E(ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %2, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) %169) + to label %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" unwind label %171 + +171: ; preds = %232, %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i + %172 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h74dc9cc952c556a4E"(ptr noalias noundef align 8 dereferenceable(24) %5) #15 to label %common.resume unwind label %236 @@ -1408,108 +1408,108 @@ _ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i: ; preds = %232, %1 "_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i": ; preds = %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i %.val.i13 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 %.val9.i = load i64, ptr %14, align 8, !alias.scope !114, !noundef !3 - %.sroa.0.05.i.i14 = and i64 %.val9.i, %172 - %175 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.05.i.i14 - %.sroa.0.0.copyload.i46.i.i15 = load <16 x i8>, ptr %175, align 1 - %176 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i15, zeroinitializer - %177 = bitcast <16 x i1> %176 to i16 - %.not.not.i.not7.i.i16 = icmp eq i16 %177, 0 - br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !112 - -.lr.ph.i13.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i", %.lr.ph.i13.i - %.sroa.0.09.i.i20 = phi i64 [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ], [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] - %.sroa.7.08.i.i21 = phi i64 [ %178, %.lr.ph.i13.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] - %178 = add i64 %.sroa.7.08.i.i21, 16 - %179 = add i64 %178, %.sroa.0.09.i.i20 - %.sroa.0.0.i.i22 = and i64 %179, %.val9.i - %180 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i.i22 - %.sroa.0.0.copyload.i4.i.i23 = load <16 x i8>, ptr %180, align 1 - %181 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i23, zeroinitializer - %182 = bitcast <16 x i1> %181 to i16 - %.not.not.i.not.i.i24 = icmp eq i16 %182, 0 - br i1 %.not.not.i.not.i.i24, label %.lr.ph.i13.i, label %._crit_edge.i12.i, !prof !113 - -._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" - %.sroa.0.0.lcssa.i.i17 = phi i64 [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %.sroa.0.0.i.i22, %.lr.ph.i13.i ] - %.lcssa.i.i18 = phi i16 [ %177, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %182, %.lr.ph.i13.i ] - %183 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i18, i1 true) - %184 = zext nneg i16 %183 to i64 - %185 = add i64 %.sroa.0.0.lcssa.i.i17, %184 - %186 = and i64 %185, %.val9.i - %187 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %186 - %188 = load i8, ptr %187, align 1, !noundef !3 - %189 = icmp sgt i8 %188, -1 - br i1 %189, label %190, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i, !prof !84 - -190: ; preds = %._crit_edge.i12.i - %191 = load <16 x i8>, ptr %.val.i13, align 16 - %192 = icmp slt <16 x i8> %191, zeroinitializer - %193 = bitcast <16 x i1> %192 to i16 - %194 = icmp ne i16 %193, 0 - tail call void @llvm.assume(i1 %194) - %195 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %193, i1 true) - %196 = zext nneg i16 %195 to i64 + %.sroa.0.05.i.i14 = and i64 %.val9.i, %170 + %173 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.05.i.i14 + %.sroa.0.0.copyload.i46.i.i15 = load <16 x i8>, ptr %173, align 1 + %174 = icmp slt <16 x i8> %.sroa.0.0.copyload.i46.i.i15, zeroinitializer + %175 = bitcast <16 x i1> %174 to i16 + %.not.not.i.not7.i.i16 = icmp eq i16 %175, 0 + br i1 %.not.not.i.not7.i.i16, label %.lr.ph.i12.i, label %._crit_edge.i.i17, !prof !112 + +.lr.ph.i12.i: ; preds = %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i", %.lr.ph.i12.i + %.sroa.0.09.i.i21 = phi i64 [ %.sroa.0.0.i.i23, %.lr.ph.i13.i ], [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] + %.sroa.7.08.i.i22 = phi i64 [ %176, %.lr.ph.i13.i ], [ 0, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ] + %176 = add i64 %.sroa.7.08.i.i22, 16 + %177 = add i64 %176, %.sroa.0.09.i.i21 + %.sroa.0.0.i.i23 = and i64 %177, %.val9.i + %178 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i.i23 + %.sroa.0.0.copyload.i4.i.i24 = load <16 x i8>, ptr %178, align 1 + %179 = icmp slt <16 x i8> %.sroa.0.0.copyload.i4.i.i24, zeroinitializer + %180 = bitcast <16 x i1> %179 to i16 + %.not.not.i.not.i.i25 = icmp eq i16 %180, 0 + br i1 %.not.not.i.not.i.i25, label %.lr.ph.i12.i, label %._crit_edge.i.i17, !prof !113 + +._crit_edge.i.i17: ; preds = %.lr.ph.i12.i, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" + %.sroa.0.0.lcssa.i.i18 = phi i64 [ %.sroa.0.05.i.i14, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %.sroa.0.0.i.i23, %.lr.ph.i13.i ] + %.lcssa.i.i19 = phi i16 [ %175, %"_ZN9hashbrown3raw21RawTable$LT$T$C$A$GT$14reserve_rehash28_$u7b$$u7b$closure$u7d$$u7d$17hc065cadcfee7b9a9E.exit.i" ], [ %180, %.lr.ph.i13.i ] + %181 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i19, i1 true) + %182 = zext nneg i16 %181 to i64 + %183 = add i64 %.sroa.0.0.lcssa.i.i18, %182 + %184 = and i64 %183, %.val9.i + %185 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %184 + %186 = load i8, ptr %185, align 1, !noundef !3 + %187 = icmp sgt i8 %186, -1 + br i1 %187, label %188, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i, !prof !84 + +188: ; preds = %._crit_edge.i.i17 + %189 = load <16 x i8>, ptr %.val.i13, align 16 + %190 = icmp slt <16 x i8> %189, zeroinitializer + %191 = bitcast <16 x i1> %190 to i16 + %192 = icmp ne i16 %191, 0 + tail call void @llvm.assume(i1 %192) + %193 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %191, i1 true) + %194 = zext nneg i16 %193 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i: ; preds = %190, %._crit_edge.i12.i - %.sroa.0.0.i4.i.i19 = phi i64 [ %196, %190 ], [ %186, %._crit_edge.i12.i ] - %197 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i14 - %198 = sub i64 %.sroa.0.0.i4.i.i19, %.sroa.0.05.i.i14 - %199 = xor i64 %198, %197 - %.unshifted.i = and i64 %199, %.val9.i - %200 = icmp ult i64 %.unshifted.i, 16 - br i1 %200, label %214, label %201, !prof !123 - -201: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i - %.neg8.i = mul i64 %.sroa.0.0.i4.i.i19, -24 - %202 = getelementptr i8, ptr %.val.i13, i64 %.neg8.i - %203 = getelementptr i8, ptr %202, i64 -24 - %204 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i4.i.i19 - %205 = load i8, ptr %204, align 1, !noundef !3 - %206 = lshr i64 %172, 57 - %207 = trunc nuw nsw i64 %206 to i8 - %208 = add i64 %.sroa.0.0.i4.i.i19, -16 - %209 = and i64 %208, %.val9.i - store i8 %207, ptr %204, align 1 - %210 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %211 = getelementptr i8, ptr %210, i64 %209 - %212 = getelementptr i8, ptr %211, i64 16 - store i8 %207, ptr %212, align 1 - %213 = icmp eq i8 %205, -1 - br i1 %213, label %223, label %232 - -214: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i - %215 = lshr i64 %172, 57 - %216 = trunc nuw nsw i64 %215 to i8 - %217 = add i64 %.sroa.0.06.i, -16 - %218 = and i64 %.val9.i, %217 - %219 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.06.i - store i8 %216, ptr %219, align 1 - %220 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %221 = getelementptr i8, ptr %220, i64 %218 - %222 = getelementptr i8, ptr %221, i64 16 - store i8 %216, ptr %222, align 1 +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i: ; preds = %188, %._crit_edge.i.i17 + %.sroa.0.0.i4.i.i20 = phi i64 [ %194, %190 ], [ %184, %._crit_edge.i12.i ] + %195 = sub i64 %.sroa.0.06.i, %.sroa.0.05.i.i14 + %196 = sub i64 %.sroa.0.0.i4.i.i20, %.sroa.0.05.i.i14 + %197 = xor i64 %196, %195 + %.unshifted.i = and i64 %197, %.val9.i + %198 = icmp ult i64 %.unshifted.i, 16 + br i1 %198, label %212, label %199, !prof !123 + +199: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i + %.neg8.i = mul i64 %.sroa.0.0.i4.i.i20, -24 + %200 = getelementptr i8, ptr %.val.i13, i64 %.neg8.i + %201 = getelementptr i8, ptr %200, i64 -24 + %202 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.0.i4.i.i20 + %203 = load i8, ptr %202, align 1, !noundef !3 + %204 = lshr i64 %170, 57 + %205 = trunc nuw nsw i64 %204 to i8 + %206 = add i64 %.sroa.0.0.i4.i.i20, -16 + %207 = and i64 %206, %.val9.i + store i8 %205, ptr %202, align 1 + %208 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 + %209 = getelementptr i8, ptr %208, i64 %207 + %210 = getelementptr i8, ptr %209, i64 16 + store i8 %205, ptr %210, align 1 + %211 = icmp eq i8 %203, -1 + br i1 %211, label %221, label %232 + +212: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17h401dac6d2fd9fc95E.exit.i + %213 = lshr i64 %170, 57 + %214 = trunc nuw nsw i64 %213 to i8 + %215 = add i64 %.sroa.0.06.i, -16 + %216 = and i64 %.val9.i, %215 + %217 = getelementptr inbounds nuw i8, ptr %.val.i13, i64 %.sroa.0.06.i + store i8 %214, ptr %217, align 1 + %218 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 + %219 = getelementptr i8, ptr %218, i64 %216 + %220 = getelementptr i8, ptr %219, i64 16 + store i8 %214, ptr %220, align 1 br label %233 -223: ; preds = %201 - %224 = add i64 %.sroa.0.06.i, -16 - %225 = load i64, ptr %14, align 8, !alias.scope !114, !noundef !3 - %226 = and i64 %225, %224 +221: ; preds = %199 + %222 = add i64 %.sroa.0.06.i, -16 + %223 = load i64, ptr %14, align 8, !alias.scope !114, !noundef !3 + %224 = and i64 %223, %222 %227 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 %228 = getelementptr inbounds nuw i8, ptr %227, i64 %.sroa.0.06.i store i8 -1, ptr %228, align 1 %229 = load ptr, ptr %0, align 8, !alias.scope !114, !nonnull !3, !noundef !3 - %230 = getelementptr i8, ptr %229, i64 %226 + %230 = getelementptr i8, ptr %229, i64 %224 %231 = getelementptr i8, ptr %230, i64 16 store i8 -1, ptr %231, align 1 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(24) %203, ptr noundef nonnull align 1 dereferenceable(24) %167, i64 24, i1 false) br label %233 232: ; preds = %201 - invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17he19fe9ca5101d9d2E(ptr noundef nonnull %167, ptr noundef nonnull %203, i64 noundef 3) + invoke void @_ZN4core3ptr25swap_nonoverlapping_bytes26swap_nonoverlapping_chunks17he19fe9ca5101d9d2E(ptr noundef nonnull %167, ptr noundef nonnull %199, i64 noundef 3) to label %_ZN4core3ptr19swap_nonoverlapping17h16a8478a161c444eE.exit.i unwind label %173 -233: ; preds = %223, %214, %161 +233:; preds = %221, %214, %161 %234 = icmp ult i64 %.sroa.0.17.i, %17 %235 = zext i1 %234 to i64 %.sroa.0.1.i10 = add nuw i64 %.sroa.0.17.i, %235 @@ -1525,31 +1525,31 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit: ; pr %.pre.i11 = load i64, ptr %14, align 8, !alias.scope !114 %.pre.i11.fr = freeze i64 %.pre.i11 %.pre14.i = add i64 %.pre.i11.fr, 1 - %238 = lshr i64 %.pre14.i, 3 - %239 = mul nuw i64 %238, 7 - %240 = icmp ult i64 %.pre.i11.fr, 8 - %spec.select = select i1 %240, i64 %.pre.i11.fr, i64 %239 + %236 = lshr i64 %.pre14.i, 3 + %237 = mul nuw i64 %236, 7 + %238 = icmp ult i64 %.pre.i11.fr, 8 + %spec.select = select i1 %238, i64 %.pre.i11.fr, i64 %237 %.pre = load i64, ptr %8, align 8, !alias.scope !114 - br label %241 - -241: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread - %242 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] - %243 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] - %244 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %245 = sub i64 %243, %242 - store i64 %245, ptr %244, align 8, !alias.scope !114 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread + %239 = phi i64 [ %9, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %.pre, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] + %240 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit ] + %241 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %242 = sub i64 %240, %239 + store i64 %242, ptr %241, align 8, !alias.scope !114 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5), !noalias !114 br label %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i -_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit", %241 - %.sroa.4.1.i = phi i64 [ undef, %241 ], [ %.sroa.12.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] - %.sroa.0.1.i = phi i64 [ -9223372036854775807, %241 ], [ %.sroa.7.035, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] - %246 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 - %247 = insertvalue { i64, i64 } %246, i64 %.sroa.4.1.i, 1 +_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit", %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17hf5d8c1c2f68d687eE.exit.thread + %.sroa.4.1.i = phi i64 [ undef, %241 ], [ %.sroa.12.037, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ undef, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] + %.sroa.0.1.i = phi i64 [ -9223372036854775807, %241 ], [ %.sroa.7.036, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17hf7590bc4c8d264eaE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17hde9f0318fd96ff2fE.exit" ] + %243 = insertvalue { i64, i64 } poison, i64 %.sroa.0.1.i, 0 + %244 = insertvalue { i64, i64 } %243, i64 %.sroa.4.1.i, 1 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h247dba77688ad226E.exit _ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17h247dba77688ad226E.exit: ; preds = %21, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i - %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %247, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i ] + %.merged.i = phi { i64, i64 } [ %22, %21 ], [ %244, %_ZN9hashbrown3raw13RawTableInner12resize_inner17h12144ccc5255f536E.exit.i ] ret { i64, i64 } %.merged.i } diff --git a/bench/wireshark/optimized/packet-bmc.ll b/bench/wireshark/optimized/packet-bmc.ll index 6521b90f50e..cbd349e139d 100644 --- a/bench/wireshark/optimized/packet-bmc.ll +++ b/bench/wireshark/optimized/packet-bmc.ll @@ -120,7 +120,7 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, switch i8 %19, label %89 [ i8 1, label %25 i8 2, label %32 - i8 3, label %82 + i8 3, label %83 ] 25: ; preds = %4 @@ -130,7 +130,7 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %29 = tail call ptr @tvb_new_subset_remaining(ptr noundef %18, i32 noundef 6) %30 = tail call i32 @dissect_umts_cell_broadcast_message(ptr noundef %29, ptr noundef %1, ptr noundef %12, ptr noundef null) %31 = tail call i32 @tvb_reported_length(ptr noundef %29) - br label %89 + br label %90 32: ; preds = %4 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3 @@ -181,10 +181,10 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, .sink.split.i: ; preds = %54, %.lr.ph.i %hf_bmc_message_id.sink.i = phi ptr [ @hf_bmc_offset_to_ctch_bs_index_of_first_transmission, %54 ], [ @hf_bmc_message_id, %.lr.ph.i ] - %.sink21.i = phi i32 [ 1, %54 ], [ 2, %.lr.ph.i ] + %.sink20.i = phi i32 [ 1, %54 ], [ 2, %.lr.ph.i ] %.sink.i = phi i32 [ 2, %54 ], [ 3, %.lr.ph.i ] %55 = load i32, ptr %hf_bmc_message_id.sink.i, align 4 - %56 = call ptr @proto_tree_add_item(ptr noundef %45, i32 noundef %55, ptr noundef %18, i32 noundef %52, i32 noundef %.sink21.i, i32 noundef 0) + %56 = call ptr @proto_tree_add_item(ptr noundef %45, i32 noundef %55, ptr noundef %18, i32 noundef %52, i32 noundef %.sink20.i, i32 noundef 0) %57 = add i32 %.sink.i, %.13.i br label %58 @@ -198,64 +198,64 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %.185.lcssa.i = phi i8 [ %.0846.i, %.preheader.i ], [ %59, %58 ] %.1.lcssa.i = phi i32 [ %.07.i, %.preheader.i ], [ %.2.i, %58 ] %60 = add nuw nsw i32 %.0875.i, 1 - %exitcond.not.i = icmp eq i32 %60, %41 - br i1 %exitcond.not.i, label %._crit_edge8.i, label %.preheader.i, !llvm.loop !8 + %61 = icmp eq i32 %60, %41 + br i1 %61, label %._crit_edge8.i, label %.preheader.i, !llvm.loop !8 ._crit_edge8.i: ; preds = %._crit_edge.i, %32 %.0.lcssa.i = phi i32 [ %43, %32 ], [ %.1.lcssa.i, %._crit_edge.i ] - %61 = load ptr, ptr %5, align 8 - %62 = sub i32 %.0.lcssa.i, %43 - call void @proto_item_set_len(ptr noundef %61, i32 noundef %62) - %63 = call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef %.0.lcssa.i) - %.not91.i = icmp eq i32 %63, 0 - br i1 %.not91.i, label %dissect_bmc_schedule_message.exit, label %64 - -64: ; preds = %._crit_edge8.i - %65 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.0.lcssa.i) - %66 = load i32, ptr @hf_bmc_future_extension_bitmap, align 4 - %67 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %66, ptr noundef %18, i32 noundef %.0.lcssa.i, i32 noundef 1, i32 noundef 0) - %68 = add i32 %.0.lcssa.i, 1 - %69 = and i8 %65, 1 - %.not92.i = icmp eq i8 %69, 0 - br i1 %.not92.i, label %dissect_bmc_schedule_message.exit, label %70 - -70: ; preds = %64 - %71 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %68) - %72 = load i32, ptr @hf_bmc_length_of_serial_number_list, align 4 - %73 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %72, ptr noundef %18, i32 noundef %68, i32 noundef 1, i32 noundef 0) - %74 = add i32 %.0.lcssa.i, 2 - %.not16.i = icmp eq i8 %71, 0 + %62 = load ptr, ptr %5, align 8 + %63 = sub i32 %.0.lcssa.i, %43 + call void @proto_item_set_len(ptr noundef %62, i32 noundef %63) + %64 = call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef %.0.lcssa.i) + %.not91.i = icmp eq i32 %64, 0 + br i1 %.not91.i, label %dissect_bmc_schedule_message.exit, label %65 + +65: ; preds = %._crit_edge8.i + %66 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.0.lcssa.i) + %67 = load i32, ptr @hf_bmc_future_extension_bitmap, align 4 + %68 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %67, ptr noundef %18, i32 noundef %.0.lcssa.i, i32 noundef 1, i32 noundef 0) + %69 = add i32 %.0.lcssa.i, 1 + %70 = and i8 %66, 1 + %.not92.i = icmp eq i8 %70, 0 + br i1 %.not92.i, label %dissect_bmc_schedule_message.exit, label %71 + +71: ; preds = %65 + %72 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %69) + %73 = load i32, ptr @hf_bmc_length_of_serial_number_list, align 4 + %74 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %73, ptr noundef %18, i32 noundef %69, i32 noundef 1, i32 noundef 0) + %75 = add i32 %.0.lcssa.i, 2 + %.not16.i = icmp eq i8 %72, 0 br i1 %.not16.i, label %dissect_bmc_schedule_message.exit, label %.lr.ph13.i -.lr.ph13.i: ; preds = %70, %.lr.ph13.i - %.411.i = phi i32 [ %80, %.lr.ph13.i ], [ %74, %70 ] - %.08610.i = phi i8 [ %81, %.lr.ph13.i ], [ 0, %70 ] - %75 = load i32, ptr @hf_bmc_serial_number, align 4 - %76 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %75, ptr noundef %18, i32 noundef %.411.i, i32 noundef 2, i32 noundef 0) - %77 = add i32 %.411.i, 2 - %78 = load i32, ptr @hf_bmc_ctch_bs_index, align 4 - %79 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %78, ptr noundef %18, i32 noundef %77, i32 noundef 1, i32 noundef 0) - %80 = add i32 %.411.i, 3 - %81 = add nuw i8 %.08610.i, 1 - %exitcond18.not.i = icmp eq i8 %81, %71 - br i1 %exitcond18.not.i, label %dissect_bmc_schedule_message.exit, label %.lr.ph13.i, !llvm.loop !9 - -dissect_bmc_schedule_message.exit: ; preds = %.lr.ph13.i, %._crit_edge8.i, %64, %70 - %.3.i = phi i32 [ %68, %64 ], [ %.0.lcssa.i, %._crit_edge8.i ], [ %74, %70 ], [ %80, %.lr.ph13.i ] +.lr.ph13.i: ; preds = %71, %.lr.ph13.i + %.411.i = phi i32 [ %81, %.lr.ph13.i ], [ %75, %70 ] + %.08610.i = phi i8 [ %82, %.lr.ph13.i ], [ 0, %70 ] + %76 = load i32, ptr @hf_bmc_serial_number, align 4 + %77 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %76, ptr noundef %18, i32 noundef %.411.i, i32 noundef 2, i32 noundef 0) + %78 = add i32 %.411.i, 2 + %79 = load i32, ptr @hf_bmc_ctch_bs_index, align 4 + %80 = call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %79, ptr noundef %18, i32 noundef %78, i32 noundef 1, i32 noundef 0) + %81 = add i32 %.411.i, 3 + %82 = add nuw i8 %.08610.i, 1 + %exitcond.not.i = icmp eq i8 %82, %72 + br i1 %exitcond.not.i, label %dissect_bmc_schedule_message.exit, label %.lr.ph13.i, !llvm.loop !9 + +dissect_bmc_schedule_message.exit: ; preds = %.lr.ph13.i, %._crit_edge8.i, %65, %71 + %.3.i = phi i32 [ %69, %64 ], [ %.0.lcssa.i, %._crit_edge8.i ], [ %75, %70 ], [ %81, %.lr.ph13.i ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3 - br label %89 - -82: ; preds = %4 - %83 = load i32, ptr @hf_bmc_broadcast_address, align 4 - %84 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %83, ptr noundef %18, i32 noundef 1, i32 noundef 5, i32 noundef 0) - %85 = load i32, ptr @hf_bmc_cb_data41, align 4 - %86 = tail call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef 6) - %87 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %85, ptr noundef %18, i32 noundef 6, i32 noundef %86, i32 noundef 0) - %88 = tail call i32 @tvb_reported_length(ptr noundef %18) - br label %89 - -89: ; preds = %4, %82, %dissect_bmc_schedule_message.exit, %25 - %.0 = phi i32 [ 1, %4 ], [ %31, %25 ], [ %.3.i, %dissect_bmc_schedule_message.exit ], [ %88, %82 ] + br label %90 + +83: ; preds = %4 + %84 = load i32, ptr @hf_bmc_broadcast_address, align 4 + %85 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %84, ptr noundef %18, i32 noundef 1, i32 noundef 5, i32 noundef 0) + %86 = load i32, ptr @hf_bmc_cb_data41, align 4 + %87 = tail call i32 @tvb_reported_length_remaining(ptr noundef %18, i32 noundef 6) + %88 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %86, ptr noundef %18, i32 noundef 6, i32 noundef %87, i32 noundef 0) + %89 = tail call i32 @tvb_reported_length(ptr noundef %18) + br label %90 + +90: ; preds = %4, %83, %dissect_bmc_schedule_message.exit, %25 + %.0 = phi i32 [ 1, %4 ], [ %31, %25 ], [ %.3.i, %dissect_bmc_schedule_message.exit ], [ %89, %82 ] ret i32 %.0 } diff --git a/bench/wolfssl/optimized/random.ll b/bench/wolfssl/optimized/random.ll index 90462bd0a30..6aa5440dba5 100644 --- a/bench/wolfssl/optimized/random.ll +++ b/bench/wolfssl/optimized/random.ll @@ -888,12 +888,12 @@ define internal fastcc range(i32 0, 3) i32 @Hash_DRBG_Generate(ptr noundef %0, p call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #9 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #9 %11 = icmp eq ptr %0, null - br i1 %11, label %115, label %12 + br i1 %11, label %114, label %12 12: ; preds = %3 %13 = load i32, ptr %0, align 8, !tbaa !17 %14 = icmp eq i32 %13, 1000000 - br i1 %14, label %115, label %15 + br i1 %14, label %114, label %15 15: ; preds = %12 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #9 @@ -913,8 +913,8 @@ define internal fastcc range(i32 0, 3) i32 @Hash_DRBG_Generate(ptr noundef %0, p 21: ; preds = %array_add_one.exit.i, %15 %.0217.i = phi i32 [ 0, %15 ], [ %44, %array_add_one.exit.i ] - %.0236.i = phi ptr [ %1, %15 ], [ %.124.i, %array_add_one.exit.i ] - %.0255.i = phi i32 [ %2, %15 ], [ %.126.i, %array_add_one.exit.i ] + %.0217.i = phi ptr [ %1, %15 ], [ %.124.i, %array_add_one.exit.i ] + %.0236.i = phi i32 [ %2, %15 ], [ %.126.i, %array_add_one.exit.i ] %22 = call i32 @wc_InitSha256(ptr noundef nonnull %6) #9 %23 = icmp eq i32 %22, 0 br i1 %23, label %24, label %.thread2.i @@ -928,229 +928,229 @@ define internal fastcc range(i32 0, 3) i32 @Hash_DRBG_Generate(ptr noundef %0, p call void @wc_Sha256Free(ptr noundef nonnull %6) #9 br label %.lr.ph29.preheader.i.i -27: ; preds = %24 - %28 = call i32 @wc_Sha256Final(ptr noundef nonnull %6, ptr noundef nonnull %5) #9 +26: ; preds = %24 + %27 = call i32 @wc_Sha256Final(ptr noundef nonnull %6, ptr noundef nonnull %5) #9 call void @wc_Sha256Free(ptr noundef nonnull %6) #9 - %29 = icmp eq i32 %28, 0 - br i1 %29, label %30, label %.lr.ph29.preheader.i.i + %28 = icmp eq i32 %27, 0 + br i1 %28, label %29, label %.lr.ph29.preheader.i.i -30: ; preds = %27 +29: ; preds = %26 %.not28.i = icmp eq i32 %.0255.i, 0 - br i1 %.not28.i, label %array_add_one.exit.i, label %31 + br i1 %.not28.i, label %array_add_one.exit.i, label %30 -31: ; preds = %30 - %32 = icmp ugt i32 %.0255.i, 31 - br i1 %32, label %33, label %40 +30: ; preds = %29 + %31 = icmp ugt i32 %.0255.i, 31 + br i1 %31, label %32, label %39 -33: ; preds = %31 +32: ; preds = %30 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %.0236.i, ptr noundef nonnull align 16 dereferenceable(32) %5, i64 32, i1 false) - br label %34 - -34: ; preds = %34, %33 - %.06.i.i = phi i32 [ 54, %33 ], [ %39, %34 ] - %35 = zext nneg i32 %.06.i.i to i64 - %36 = getelementptr inbounds nuw i8, ptr %4, i64 %35 - %37 = load i8, ptr %36, align 1, !tbaa !15 - %38 = add i8 %37, 1 - store i8 %38, ptr %36, align 1, !tbaa !15 - %.not.i.i = icmp ne i8 %38, 0 - %39 = add nsw i32 %.06.i.i, -1 + br label %33 + +33: ; preds = %33, %32 + %.06.i.i = phi i32 [ 54, %33 ], [ %38, %34 ] + %34 = zext nneg i32 %.06.i.i to i64 + %35 = getelementptr inbounds nuw i8, ptr %4, i64 %34 + %36 = load i8, ptr %35, align 1, !tbaa !15 + %37 = add i8 %36, 1 + store i8 %37, ptr %35, align 1, !tbaa !15 + %.not.i.i = icmp ne i8 %37, 0 + %38 = add nsw i32 %.06.i.i, -1 %.not7.i.i = icmp eq i32 %.06.i.i, 0 %or.cond.i.i = or i1 %.not7.i.i, %.not.i.i - br i1 %or.cond.i.i, label %array_add_one.exit.loopexit.i, label %34, !llvm.loop !30 + br i1 %or.cond.i.i, label %array_add_one.exit.loopexit.i, label %33, !llvm.loop !30 -40: ; preds = %31 - %41 = zext nneg i32 %.0255.i to i64 - call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0236.i, ptr nonnull align 16 %5, i64 %41, i1 false) +39: ; preds = %30 + %40 = zext nneg i32 %.0255.i to i64 + call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0236.i, ptr nonnull align 16 %5, i64 %40, i1 false) br label %array_add_one.exit.i -array_add_one.exit.loopexit.i: ; preds = %34 - %42 = add i32 %.0255.i, -32 - %43 = getelementptr inbounds nuw i8, ptr %.0236.i, i64 32 +array_add_one.exit.loopexit.i: ; preds = %33 + %41 = add i32 %.0255.i, -32 + %42 = getelementptr inbounds nuw i8, ptr %.0236.i, i64 32 br label %array_add_one.exit.i -array_add_one.exit.i: ; preds = %array_add_one.exit.loopexit.i, %40, %30 - %.126.i = phi i32 [ 0, %40 ], [ 0, %30 ], [ %42, %array_add_one.exit.loopexit.i ] - %.124.i = phi ptr [ %.0236.i, %40 ], [ %.0236.i, %30 ], [ %43, %array_add_one.exit.loopexit.i ] - %44 = add nuw nsw i32 %.0217.i, 1 - %exitcond.not.i = icmp eq i32 %44, %20 +array_add_one.exit.i: ; preds = %array_add_one.exit.loopexit.i, %39, %29 + %.126.i = phi i32 [ 0, %40 ], [ 0, %30 ], [ %41, %array_add_one.exit.loopexit.i ] + %.124.i = phi ptr [ %.0236.i, %40 ], [ %.0236.i, %30 ], [ %42, %array_add_one.exit.loopexit.i ] + %43 = add nuw nsw i32 %.0217.i, 1 + %exitcond.not.i = icmp eq i32 %43, %20 br i1 %exitcond.not.i, label %.lr.ph29.preheader.i.i, label %21, !llvm.loop !31 -.lr.ph29.preheader.i.i: ; preds = %array_add_one.exit.i, %27, %.thread2.i - %45 = phi i1 [ false, %.thread2.i ], [ %29, %27 ], [ %29, %array_add_one.exit.i ] +.lr.ph29.preheader.i.i: ; preds = %array_add_one.exit.i, %26, %.thread2.i + %44 = phi i1 [ false, %.thread2.i ], [ %28, %27 ], [ %28, %array_add_one.exit.i ] br label %.lr.ph29.i.i .lr.ph29.i.i: ; preds = %.lr.ph29.i.i, %.lr.ph29.preheader.i.i - %.01528.i.i = phi ptr [ %46, %.lr.ph29.i.i ], [ %4, %.lr.ph29.preheader.i.i ] - %.01827.i.i = phi i32 [ %47, %.lr.ph29.i.i ], [ 55, %.lr.ph29.preheader.i.i ] - %46 = getelementptr inbounds nuw i8, ptr %.01528.i.i, i64 8 + %.01528.i.i = phi ptr [ %45, %.lr.ph29.i.i ], [ %4, %.lr.ph29.preheader.i.i ] + %.01827.i.i = phi i32 [ %46, %.lr.ph29.i.i ], [ 55, %.lr.ph29.preheader.i.i ] + %45 = getelementptr inbounds nuw i8, ptr %.01528.i.i, i64 8 store volatile i64 0, ptr %.01528.i.i, align 8, !tbaa !11 - %47 = add nsw i32 %.01827.i.i, -8 - %48 = icmp ugt i32 %47, 7 - br i1 %48, label %.lr.ph29.i.i, label %.lr.ph35.i.i, !llvm.loop !13 + %46 = add nsw i32 %.01827.i.i, -8 + %47 = icmp ugt i32 %46, 7 + br i1 %47, label %.lr.ph29.i.i, label %.lr.ph35.i.i, !llvm.loop !13 .lr.ph35.i.i: ; preds = %.lr.ph29.i.i, %.lr.ph35.i.i - %.11734.i.i = phi ptr [ %50, %.lr.ph35.i.i ], [ %46, %.lr.ph29.i.i ] - %.11933.i.i = phi i32 [ %49, %.lr.ph35.i.i ], [ 7, %.lr.ph29.i.i ] - %49 = add nsw i32 %.11933.i.i, -1 - %50 = getelementptr inbounds nuw i8, ptr %.11734.i.i, i64 1 + %.11734.i.i = phi ptr [ %49, %.lr.ph35.i.i ], [ %45, %.lr.ph29.i.i ] + %.11933.i.i = phi i32 [ %48, %.lr.ph35.i.i ], [ 7, %.lr.ph29.i.i ] + %48 = add nsw i32 %.11933.i.i, -1 + %49 = getelementptr inbounds nuw i8, ptr %.11734.i.i, i64 1 store volatile i8 0, ptr %.11734.i.i, align 1, !tbaa !15 - %.not22.i.i = icmp eq i32 %49, 0 + %.not22.i.i = icmp eq i32 %48, 0 br i1 %.not22.i.i, label %Hash_gen.exit, label %.lr.ph35.i.i, !llvm.loop !16 Hash_gen.exit: ; preds = %.lr.ph35.i.i call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %6) #9 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #9 call void @llvm.lifetime.end.p0(i64 55, ptr nonnull %4) #9 - br i1 %45, label %51, label %.lr.ph29.preheader.i + br i1 %44, label %50, label %.lr.ph29.preheader.i -51: ; preds = %Hash_gen.exit - %52 = call i32 @wc_InitSha256(ptr noundef nonnull %7) #9 - %53 = icmp eq i32 %52, 0 - br i1 %53, label %54, label %.critedge23.thread +50: ; preds = %Hash_gen.exit + %51 = call i32 @wc_InitSha256(ptr noundef nonnull %7) #9 + %52 = icmp eq i32 %51, 0 + br i1 %52, label %53, label %.critedge23.thread -54: ; preds = %51 - %55 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %8, i32 noundef 1) #9 - %56 = icmp eq i32 %55, 0 - br i1 %56, label %.critedge, label %.critedge23.thread +53: ; preds = %50 + %54 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %8, i32 noundef 1) #9 + %55 = icmp eq i32 %54, 0 + br i1 %55, label %.critedge, label %.critedge23.thread -.critedge: ; preds = %54 - %57 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %16, i32 noundef 55) #9 - %58 = icmp eq i32 %57, 0 - br i1 %58, label %.critedge23, label %.critedge23.thread +.critedge: ; preds = %53 + %56 = call i32 @wc_Sha256Update(ptr noundef nonnull %7, ptr noundef nonnull %16, i32 noundef 55) #9 + %57 = icmp eq i32 %56, 0 + br i1 %57, label %.critedge23, label %.critedge23.thread -.critedge23.thread: ; preds = %.critedge, %51, %54 +.critedge23.thread: ; preds = %.critedge, %50, %53 call void @wc_Sha256Free(ptr noundef nonnull %7) #9 - br label %array_add.exit54 + br label %array_add.exit55 .critedge23: ; preds = %.critedge - %59 = call i32 @wc_Sha256Final(ptr noundef nonnull %7, ptr noundef nonnull %10) #9 - %60 = icmp eq i32 %59, 0 + %58 = call i32 @wc_Sha256Final(ptr noundef nonnull %7, ptr noundef nonnull %10) #9 + %59 = icmp eq i32 %58, 0 call void @wc_Sha256Free(ptr noundef nonnull %7) #9 - br i1 %60, label %.preheader, label %array_add.exit54 + br i1 %59, label %.preheader, label %array_add.exit55 .preheader: ; preds = %.critedge23, %.preheader %indvars.iv38.i = phi i64 [ %indvars.iv.next39.i, %.preheader ], [ 32, %.critedge23 ] %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %.preheader ], [ 54, %.critedge23 ] - %.034.i = phi i16 [ %70, %.preheader ], [ 0, %.critedge23 ] + %.034.i = phi i16 [ %69, %.preheader ], [ 0, %.critedge23 ] %indvars.iv.next39.i = add nsw i64 %indvars.iv38.i, -1 - %61 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i - %62 = load i8, ptr %61, align 1, !tbaa !15 - %63 = zext i8 %62 to i16 - %64 = add nuw nsw i16 %.034.i, %63 - %65 = getelementptr inbounds nuw i8, ptr %10, i64 %indvars.iv.next39.i - %66 = load i8, ptr %65, align 1, !tbaa !15 - %67 = zext i8 %66 to i16 - %68 = add nuw nsw i16 %64, %67 - %69 = trunc i16 %68 to i8 - store i8 %69, ptr %61, align 1, !tbaa !15 - %70 = lshr i16 %68, 8 + %60 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i + %61 = load i8, ptr %60, align 1, !tbaa !15 + %62 = zext i8 %61 to i16 + %63 = add nuw nsw i16 %.034.i, %62 + %64 = getelementptr inbounds nuw i8, ptr %10, i64 %indvars.iv.next39.i + %65 = load i8, ptr %64, align 1, !tbaa !15 + %66 = zext i8 %65 to i16 + %67 = add nuw nsw i16 %63, %66 + %68 = trunc i16 %67 to i8 + store i8 %68, ptr %60, align 1, !tbaa !15 + %69 = lshr i16 %67, 8 %indvars.iv.next.i = add nsw i64 %indvars.iv.i, -1 - %71 = icmp samesign ugt i64 %indvars.iv38.i, 1 - br i1 %71, label %.preheader, label %.lr.ph.i, !llvm.loop !32 + %70 = icmp samesign ugt i64 %indvars.iv38.i, 1 + br i1 %70, label %.preheader, label %.lr.ph.i24, !llvm.loop !32 -.lr.ph.i: ; preds = %.preheader, %.lr.ph.i +.lr.ph.i24: ; preds = %.preheader, %.lr.ph.i24 %indvars.iv42.i = phi i64 [ %indvars.iv.next43.i, %.lr.ph.i ], [ 22, %.preheader ] - %.136.i = phi i16 [ %77, %.lr.ph.i ], [ %70, %.preheader ] - %72 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i - %73 = load i8, ptr %72, align 1, !tbaa !15 - %74 = zext i8 %73 to i16 - %75 = add nuw nsw i16 %.136.i, %74 - %76 = trunc i16 %75 to i8 - store i8 %76, ptr %72, align 1, !tbaa !15 - %77 = lshr i16 %75, 8 + %.136.i = phi i16 [ %76, %.lr.ph.i ], [ %69, %.preheader ] + %71 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i + %72 = load i8, ptr %71, align 1, !tbaa !15 + %73 = zext i8 %72 to i16 + %74 = add nuw nsw i16 %.136.i, %73 + %75 = trunc i16 %74 to i8 + store i8 %75, ptr %71, align 1, !tbaa !15 + %76 = lshr i16 %74, 8 %indvars.iv.next43.i = add nsw i64 %indvars.iv42.i, -1 - %.not.i24 = icmp eq i64 %indvars.iv42.i, 0 - br i1 %.not.i24, label %array_add.exit, label %.lr.ph.i, !llvm.loop !33 - -array_add.exit: ; preds = %.lr.ph.i - %78 = getelementptr inbounds nuw i8, ptr %0, i64 59 - br label %79 - -79: ; preds = %79, %array_add.exit - %indvars.iv38.i26 = phi i64 [ 55, %array_add.exit ], [ %indvars.iv.next39.i29, %79 ] - %indvars.iv.i27 = phi i64 [ 54, %array_add.exit ], [ %indvars.iv.next.i30, %79 ] - %.034.i28 = phi i16 [ 0, %array_add.exit ], [ %89, %79 ] - %indvars.iv.next39.i29 = add nsw i64 %indvars.iv38.i26, -1 - %80 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i27 - %81 = load i8, ptr %80, align 1, !tbaa !15 - %82 = zext i8 %81 to i16 - %83 = add nuw nsw i16 %.034.i28, %82 - %84 = getelementptr inbounds nuw i8, ptr %78, i64 %indvars.iv.next39.i29 - %85 = load i8, ptr %84, align 1, !tbaa !15 - %86 = zext i8 %85 to i16 - %87 = add nuw nsw i16 %83, %86 - %88 = trunc i16 %87 to i8 - store i8 %88, ptr %80, align 1, !tbaa !15 - %89 = lshr i16 %87, 8 - %indvars.iv.next.i30 = add nsw i64 %indvars.iv.i27, -1 - %90 = icmp samesign ugt i64 %indvars.iv38.i26, 1 - br i1 %90, label %79, label %array_add.exit39, !llvm.loop !32 - -array_add.exit39: ; preds = %79 - %91 = call noundef i32 @llvm.bswap.i32(i32 %13) - store i32 %91, ptr %9, align 4, !tbaa !29 - br label %92 - -92: ; preds = %92, %array_add.exit39 - %indvars.iv38.i41 = phi i64 [ 4, %array_add.exit39 ], [ %indvars.iv.next39.i44, %92 ] - %indvars.iv.i42 = phi i64 [ 54, %array_add.exit39 ], [ %indvars.iv.next.i45, %92 ] - %.034.i43 = phi i16 [ 0, %array_add.exit39 ], [ %102, %92 ] - %indvars.iv.next39.i44 = add nsw i64 %indvars.iv38.i41, -1 - %93 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i42 - %94 = load i8, ptr %93, align 1, !tbaa !15 - %95 = zext i8 %94 to i16 - %96 = add nuw nsw i16 %.034.i43, %95 - %97 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.next39.i44 - %98 = load i8, ptr %97, align 1, !tbaa !15 - %99 = zext i8 %98 to i16 - %100 = add nuw nsw i16 %96, %99 - %101 = trunc i16 %100 to i8 - store i8 %101, ptr %93, align 1, !tbaa !15 - %102 = lshr i16 %100, 8 - %indvars.iv.next.i45 = add nsw i64 %indvars.iv.i42, -1 - %103 = icmp samesign ugt i64 %indvars.iv38.i41, 1 - br i1 %103, label %92, label %.lr.ph.i49, !llvm.loop !32 - -.lr.ph.i49: ; preds = %92, %.lr.ph.i49 - %indvars.iv42.i50 = phi i64 [ %indvars.iv.next43.i52, %.lr.ph.i49 ], [ 50, %92 ] - %.136.i51 = phi i16 [ %109, %.lr.ph.i49 ], [ %102, %92 ] - %104 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i50 - %105 = load i8, ptr %104, align 1, !tbaa !15 - %106 = zext i8 %105 to i16 - %107 = add nuw nsw i16 %.136.i51, %106 - %108 = trunc i16 %107 to i8 - store i8 %108, ptr %104, align 1, !tbaa !15 - %109 = lshr i16 %107, 8 - %indvars.iv.next43.i52 = add nsw i64 %indvars.iv42.i50, -1 - %.not.i53 = icmp eq i64 %indvars.iv42.i50, 0 - br i1 %.not.i53, label %array_add.exit54, label %.lr.ph.i49, !llvm.loop !33 - -array_add.exit54: ; preds = %.lr.ph.i49, %.critedge23.thread, %.critedge23 - %110 = phi i32 [ 1, %.critedge23.thread ], [ 1, %.critedge23 ], [ 0, %.lr.ph.i49 ] - %111 = load i32, ptr %0, align 8, !tbaa !17 - %112 = add i32 %111, 1 - store i32 %112, ptr %0, align 8, !tbaa !17 + %.not.i25 = icmp eq i64 %indvars.iv42.i, 0 + br i1 %.not.i25, label %array_add.exit, label %.lr.ph.i24, !llvm.loop !33 + +array_add.exit: ; preds = %.lr.ph.i24 + %77 = getelementptr inbounds nuw i8, ptr %0, i64 59 + br label %78 + +78: ; preds = %78, %array_add.exit + %indvars.iv38.i27 = phi i64 [ 55, %array_add.exit ], [ %indvars.iv.next39.i30, %79 ] + %indvars.iv.i28 = phi i64 [ 54, %array_add.exit ], [ %indvars.iv.next.i31, %79 ] + %.034.i29 = phi i16 [ 0, %array_add.exit ], [ %88, %79 ] + %indvars.iv.next39.i30 = add nsw i64 %indvars.iv38.i27, -1 + %79 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i28 + %80 = load i8, ptr %79, align 1, !tbaa !15 + %81 = zext i8 %80 to i16 + %82 = add nuw nsw i16 %.034.i29, %81 + %83 = getelementptr inbounds nuw i8, ptr %77, i64 %indvars.iv.next39.i30 + %84 = load i8, ptr %83, align 1, !tbaa !15 + %85 = zext i8 %84 to i16 + %86 = add nuw nsw i16 %82, %85 + %87 = trunc i16 %86 to i8 + store i8 %87, ptr %79, align 1, !tbaa !15 + %88 = lshr i16 %86, 8 + %indvars.iv.next.i31 = add nsw i64 %indvars.iv.i28, -1 + %89 = icmp samesign ugt i64 %indvars.iv38.i27, 1 + br i1 %89, label %78, label %array_add.exit40, !llvm.loop !32 + +array_add.exit40: ; preds = %78 + %90 = call noundef i32 @llvm.bswap.i32(i32 %13) + store i32 %90, ptr %9, align 4, !tbaa !29 + br label %91 + +91: ; preds = %91, %array_add.exit40 + %indvars.iv38.i42 = phi i64 [ 4, %array_add.exit39 ], [ %indvars.iv.next39.i45, %92 ] + %indvars.iv.i43 = phi i64 [ 54, %array_add.exit39 ], [ %indvars.iv.next.i46, %92 ] + %.034.i44 = phi i16 [ 0, %array_add.exit39 ], [ %101, %92 ] + %indvars.iv.next39.i45 = add nsw i64 %indvars.iv38.i42, -1 + %92 = getelementptr inbounds i8, ptr %16, i64 %indvars.iv.i43 + %93 = load i8, ptr %92, align 1, !tbaa !15 + %94 = zext i8 %93 to i16 + %95 = add nuw nsw i16 %.034.i44, %94 + %96 = getelementptr inbounds nuw i8, ptr %9, i64 %indvars.iv.next39.i45 + %97 = load i8, ptr %96, align 1, !tbaa !15 + %98 = zext i8 %97 to i16 + %99 = add nuw nsw i16 %95, %98 + %100 = trunc i16 %99 to i8 + store i8 %100, ptr %92, align 1, !tbaa !15 + %101 = lshr i16 %99, 8 + %indvars.iv.next.i46 = add nsw i64 %indvars.iv.i43, -1 + %102 = icmp samesign ugt i64 %indvars.iv38.i42, 1 + br i1 %102, label %91, label %.lr.ph.i50, !llvm.loop !32 + +.lr.ph.i50: ; preds = %91, %.lr.ph.i50 + %indvars.iv42.i51 = phi i64 [ %indvars.iv.next43.i53, %.lr.ph.i49 ], [ 50, %92 ] + %.136.i52 = phi i16 [ %108, %.lr.ph.i49 ], [ %101, %92 ] + %103 = getelementptr inbounds nuw i8, ptr %16, i64 %indvars.iv42.i51 + %104 = load i8, ptr %103, align 1, !tbaa !15 + %105 = zext i8 %104 to i16 + %106 = add nuw nsw i16 %.136.i52, %105 + %107 = trunc i16 %106 to i8 + store i8 %107, ptr %103, align 1, !tbaa !15 + %108 = lshr i16 %106, 8 + %indvars.iv.next43.i53 = add nsw i64 %indvars.iv42.i51, -1 + %.not.i54 = icmp eq i64 %indvars.iv42.i51, 0 + br i1 %.not.i54, label %array_add.exit55, label %.lr.ph.i50, !llvm.loop !33 + +array_add.exit55: ; preds = %.lr.ph.i50, %.critedge23.thread, %.critedge23 + %109 = phi i32 [ 1, %.critedge23.thread ], [ 1, %.critedge23 ], [ 0, %.lr.ph.i49 ] + %110 = load i32, ptr %0, align 8, !tbaa !17 + %111 = add i32 %110, 1 + store i32 %111, ptr %0, align 8, !tbaa !17 br label %.lr.ph29.preheader.i -.lr.ph29.preheader.i: ; preds = %Hash_gen.exit, %array_add.exit54 - %.0 = phi i32 [ %110, %array_add.exit54 ], [ 1, %Hash_gen.exit ] +.lr.ph29.preheader.i: ; preds = %Hash_gen.exit, %array_add.exit55 + %.0 = phi i32 [ %109, %array_add.exit54 ], [ 1, %Hash_gen.exit ] br label %.lr.ph29.i .lr.ph29.i: ; preds = %.lr.ph29.i, %.lr.ph29.preheader.i - %.01528.i = phi ptr [ %113, %.lr.ph29.i ], [ %10, %.lr.ph29.preheader.i ] - %.01827.i = phi i32 [ %114, %.lr.ph29.i ], [ 32, %.lr.ph29.preheader.i ] - %113 = getelementptr inbounds nuw i8, ptr %.01528.i, i64 8 + %.01528.i = phi ptr [ %112, %.lr.ph29.i ], [ %10, %.lr.ph29.preheader.i ] + %.01827.i = phi i32 [ %113, %.lr.ph29.i ], [ 32, %.lr.ph29.preheader.i ] + %112 = getelementptr inbounds nuw i8, ptr %.01528.i, i64 8 store volatile i64 0, ptr %.01528.i, align 8, !tbaa !11 - %114 = add nsw i32 %.01827.i, -8 - %.not = icmp eq i32 %114, 0 + %113 = add nsw i32 %.01827.i, -8 + %.not = icmp eq i32 %113, 0 br i1 %.not, label %ForceZero.exit, label %.lr.ph29.i, !llvm.loop !13 ForceZero.exit: ; preds = %.lr.ph29.i call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #9 - br label %115 + br label %114 -115: ; preds = %12, %3, %ForceZero.exit +114: ; preds = %12, %3, %ForceZero.exit %.019 = phi i32 [ %.0, %ForceZero.exit ], [ 1, %3 ], [ 2, %12 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #9 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #9 diff --git a/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll b/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll index 2be54af49dd..45fae4efac6 100644 --- a/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll +++ b/bench/zed-rs/optimized/4fjzcqwe72s61qqj6jfld7d0e.ll @@ -1178,8 +1178,8 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !216 %invariant.gep = getelementptr i8, ptr %57, i64 16 - %.not49 = icmp eq i64 %7, 0 - br i1 %.not49, label %.thread33, label %.preheader.lr.ph + %.not51 = icmp eq i64 %7, 0 + br i1 %.not51, label %.thread35, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %52 %58 = load ptr, ptr %0, align 8, !alias.scope !224, !noalias !225, !nonnull !4, !noundef !4 @@ -1187,25 +1187,25 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr %60 = icmp slt <16 x i8> %59, zeroinitializer %61 = bitcast <16 x i1> %60 to i16 %62 = xor i16 %61, -1 - %invariant.gep54 = getelementptr i8, ptr %58, i64 -24 + %invariant.gep56 = getelementptr i8, ptr %58, i64 -24 br label %.preheader .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit - %.sroa.07.053 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.07.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %.sroa.5.052 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %.sroa.9.051 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %.sroa.13.050 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] - %63 = icmp eq i16 %.sroa.13.050, 0 + %.sroa.09.055 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.09.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %.sroa.5.054 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %.sroa.9.053 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %.sroa.13.052 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit ] + %63 = icmp eq i16 %.sroa.13.052, 0 br i1 %63, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.07.246 = phi ptr [ %64, %.noexc2 ], [ %.sroa.07.053, %.preheader ] - %.sroa.5.245 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.052, %.preheader ] - %64 = getelementptr inbounds nuw i8, ptr %.sroa.07.246, i64 16 + %.sroa.09.248 = phi ptr [ %64, %.noexc2 ], [ %.sroa.09.055, %.preheader ] + %.sroa.5.247 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.054, %.preheader ] + %64 = getelementptr inbounds nuw i8, ptr %.sroa.09.248, i64 16 %65 = load <16 x i8>, ptr %64, align 16, !noalias !229 %66 = icmp slt <16 x i8> %65, zeroinitializer %67 = bitcast <16 x i1> %66 to i16 - %68 = add i64 %.sroa.5.245, 16 + %68 = add i64 %.sroa.5.247, 16 %69 = icmp eq i16 %67, -1 br i1 %69, label %.noexc2, label %._crit_edge.loopexit @@ -1214,18 +1214,18 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.050, %.preheader ], [ %70, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.052, %.preheader ], [ %68, %._crit_edge.loopexit ] - %.sroa.07.2.lcssa = phi ptr [ %.sroa.07.053, %.preheader ], [ %64, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.052, %.preheader ], [ %70, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.054, %.preheader ], [ %68, %._crit_edge.loopexit ] + %.sroa.09.2.lcssa = phi ptr [ %.sroa.09.055, %.preheader ], [ %64, %._crit_edge.loopexit ] %71 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %72 = zext nneg i16 %71 to i64 %73 = add i16 %.sroa.13.2.lcssa, -1 %74 = and i16 %73, %.sroa.13.2.lcssa %75 = add i64 %.sroa.5.2.lcssa, %72 - %76 = add i64 %.sroa.9.051, -1 + %76 = add i64 %.sroa.9.053, -1 %77 = sub nsw i64 0, %75 - %gep55 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep54, i64 %77 - %.val3.i = load i64, ptr %gep55, align 8, !alias.scope !232, !noalias !237, !noundef !4 + %gep57 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep56, i64 %77 + %.val3.i = load i64, ptr %gep57, align 8, !alias.scope !232, !noalias !237, !noundef !4 %78 = mul i64 %.val3.i, 5871781006564002453 %.sroa.0.019.i = and i64 %54, %78 %79 = getelementptr inbounds nuw i8, ptr %57, i64 %.sroa.0.019.i @@ -1235,13 +1235,13 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h8c3590f0981617dfE.exit.thr %.not.i.not.not21.i = icmp eq i16 %81, 0 br i1 %.not.i.not.not21.i, label %.lr.ph.i, label %._crit_edge.i -.thread33: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit, %52 +.thread35: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit, %52 %82 = sub i64 %.sroa.02.0.i.i, %7 store i64 %82, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !216 store i64 %7, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !216 br label %83 -83: ; preds = %83, %.thread33 +83: ; preds = %83, %.thread35 %.sroa.0.05.i.i = phi i64 [ 0, %.thread33 ], [ %88, %83 ] %84 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %85 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i @@ -1337,7 +1337,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086 %130 = getelementptr inbounds i8, ptr %57, i64 %129 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %130, ptr noundef nonnull align 1 dereferenceable(32) %127, i64 32, i1 false) %.not = icmp eq i64 %76, 0 - br i1 %.not, label %.thread33, label %.preheader + br i1 %.not, label %.thread35, label %.preheader 131: ; preds = %10 tail call void @llvm.experimental.noalias.scope.decl(metadata !263) @@ -1345,7 +1345,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086 %.not5.i.i = icmp eq i64 %15, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread24.i, label %.lr.ph.i.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread24.i: ; preds = %131 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread24.i:; preds = %131 %132 = icmp ne ptr %.val.i, null tail call void @llvm.assume(i1 %132) br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit @@ -1358,9 +1358,9 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex %.sroa.0.0.i.i.i.i = add nuw nsw i64 %133, %135 %136 = icmp ne ptr %.val.i, null tail call void @llvm.assume(i1 %136) - br label %138 + br label %145 -._crit_edge.i.i: ; preds = %138 +._crit_edge.i.i:; preds = %138 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %15, i64 16) %spec.select30.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) %137 = getelementptr inbounds i8, ptr %.val.i, i64 %spec.select.i @@ -1369,8 +1369,8 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex %invariant.gep.i = getelementptr i8, ptr %.val.i, i64 16 br label %145 -138: ; preds = %138, %.lr.ph.i.i - %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %139, %138 ] +145: ; preds = %145, %.lr.ph.i.i + %.sroa.0.010.i = phi i64 [ 0, %.lr.ph.i.i ], [ %139, %138 ] %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %140, %138 ] %139 = add i64 %.sroa.0.07.i.i, 16 %140 = add i64 %.sroa.5.06.i.i, -1 @@ -1388,8 +1388,8 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex %146 = add nuw i64 %.sroa.0.010.i, 1 %147 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.010.i %148 = load i8, ptr %147, align 1, !noalias !263, !noundef !4 - %.not.i3 = icmp eq i8 %148, -128 - br i1 %.not.i3, label %149, label %205 + %.not.i5 = icmp eq i8 %148, -128 + br i1 %.not.i5, label %149, label %205 149: ; preds = %145 %150 = shl i64 %.sroa.0.010.i, 5 @@ -1408,23 +1408,23 @@ _ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i: ; preds = %.prehea %156 = icmp slt <16 x i8> %.sroa.0.0.copyload.i1720.i.i, zeroinitializer %157 = bitcast <16 x i1> %156 to i16 %.not.i.not.not21.i.i = icmp eq i16 %157, 0 - br i1 %.not.i.not.not21.i.i, label %.lr.ph.i11.i, label %._crit_edge.i10.i + br i1 %.not.i.not.not21.i.i, label %.lr.ph.i10.i, label %._crit_edge.i.i -.lr.ph.i11.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, %.lr.ph.i11.i - %.sroa.0.023.i.i = phi i64 [ %.sroa.0.0.i.i6, %.lr.ph.i11.i ], [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ] +.lr.ph.i10.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, %.lr.ph.i10.i + %.sroa.0.023.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i11.i ], [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ] %.sroa.7.022.i.i = phi i64 [ %158, %.lr.ph.i11.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ] %158 = add i64 %.sroa.7.022.i.i, 16 %159 = add i64 %158, %.sroa.0.023.i.i - %.sroa.0.0.i.i6 = and i64 %159, %13 - %160 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i6 + %.sroa.0.0.i.i8 = and i64 %159, %13 + %160 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i8 %.sroa.0.0.copyload.i17.i.i = load <16 x i8>, ptr %160, align 1, !noalias !284 %161 = icmp slt <16 x i8> %.sroa.0.0.copyload.i17.i.i, zeroinitializer %162 = bitcast <16 x i1> %161 to i16 %.not.i.not.not.i.i = icmp eq i16 %162, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i11.i, label %._crit_edge.i10.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i10.i, label %._crit_edge.i.i -._crit_edge.i10.i: ; preds = %.lr.ph.i11.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ], [ %.sroa.0.0.i.i6, %.lr.ph.i11.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i10.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.019.i.i, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ], [ %.sroa.0.0.i.i8, %.lr.ph.i11.i ] %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i ], [ %162, %.lr.ph.i11.i ] %163 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %164 = zext nneg i16 %163 to i64 @@ -1435,7 +1435,7 @@ _ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i: ; preds = %.prehea %169 = icmp sgt i8 %168, -1 br i1 %169, label %170, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i -170: ; preds = %._crit_edge.i10.i +170: ; preds = %._crit_edge.i.i %171 = load <16 x i8>, ptr %.val.i, align 16, !noalias !290 %172 = icmp slt <16 x i8> %171, zeroinitializer %173 = bitcast <16 x i1> %172 to i16 @@ -1445,7 +1445,7 @@ _ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i: ; preds = %.prehea %176 = zext nneg i16 %175 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i: ; preds = %170, %._crit_edge.i10.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086761590127058828.exit.i: ; preds = %170, %._crit_edge.i.i %.sroa.0.0.i12.i.i = phi i64 [ %176, %170 ], [ %166, %._crit_edge.i10.i ] %177 = sub i64 %.sroa.0.010.i, %.sroa.0.019.i.i %178 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.019.i.i @@ -1489,8 +1489,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.llvm.8086 store i8 %200, ptr %197, align 1, !noalias !263 store i8 %199, ptr %198, align 1, !noalias !263 %201 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i5 = icmp eq i64 %201, 32 - br i1 %exitcond.not.i.i5, label %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, label %.preheader.i + %exitcond.not.i.i7 = icmp eq i64 %201, 32 + br i1 %exitcond.not.i.i7, label %_ZN4core3ptr19swap_nonoverlapping17hdacd12d974128e43E.exit.i, label %.preheader.i 202: ; preds = %181 %203 = add i64 %.sroa.0.010.i, -16 diff --git a/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll b/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll index d201f6889c8..a17b9547cb8 100644 --- a/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll +++ b/bench/zed-rs/optimized/8v0fi0zpujn3n5viw54gladc4.ll @@ -7016,9 +7016,9 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !1419 %63 = load i64, ptr %7, align 8, !alias.scope !1427, !noalias !1428, !noundef !4 %invariant.gep = getelementptr i8, ptr %62, i64 16 - %invariant.gep53 = getelementptr i8, ptr %62, i64 -40 - %.not55 = icmp eq i64 %63, 0 - br i1 %.not55, label %.thread35, label %.preheader.lr.ph + %invariant.gep54 = getelementptr i8, ptr %62, i64 -40 + %.not56 = icmp eq i64 %63, 0 + br i1 %.not56, label %.thread36, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit %64 = load ptr, ptr %0, align 8, !alias.scope !1427, !noalias !1428, !nonnull !4, !noundef !4 @@ -7042,21 +7042,21 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit %71 = phi ptr [ %64, %.preheader.lr.ph ], [ %150, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.09.059 = phi ptr [ %64, %.preheader.lr.ph ], [ %.sroa.09.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.5.058 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.9.057 = phi i64 [ %63, %.preheader.lr.ph ], [ %85, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.13.056 = phi i16 [ %68, %.preheader.lr.ph ], [ %83, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %72 = icmp eq i16 %.sroa.13.056, 0 + %.sroa.010.060 = phi ptr [ %64, %.preheader.lr.ph ], [ %.sroa.010.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.5.059 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.9.058 = phi i64 [ %63, %.preheader.lr.ph ], [ %85, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.13.057 = phi i16 [ %68, %.preheader.lr.ph ], [ %83, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %72 = icmp eq i16 %.sroa.13.057, 0 br i1 %72, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.09.250 = phi ptr [ %73, %.noexc2 ], [ %.sroa.09.059, %.preheader ] - %.sroa.5.249 = phi i64 [ %77, %.noexc2 ], [ %.sroa.5.058, %.preheader ] - %73 = getelementptr inbounds nuw i8, ptr %.sroa.09.250, i64 16 + %.sroa.010.251 = phi ptr [ %73, %.noexc2 ], [ %.sroa.010.060, %.preheader ] + %.sroa.5.250 = phi i64 [ %77, %.noexc2 ], [ %.sroa.5.059, %.preheader ] + %73 = getelementptr inbounds nuw i8, ptr %.sroa.010.251, i64 16 %74 = load <16 x i8>, ptr %73, align 16, !noalias !1432 %75 = icmp slt <16 x i8> %74, zeroinitializer %76 = bitcast <16 x i1> %75 to i16 - %77 = add i64 %.sroa.5.249, 16 + %77 = add i64 %.sroa.5.250, 16 %78 = icmp eq i16 %76, -1 br i1 %78, label %.noexc2, label %._crit_edge.loopexit @@ -7065,15 +7065,15 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.056, %.preheader ], [ %79, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.058, %.preheader ], [ %77, %._crit_edge.loopexit ] - %.sroa.09.2.lcssa = phi ptr [ %.sroa.09.059, %.preheader ], [ %73, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.057, %.preheader ], [ %79, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.059, %.preheader ], [ %77, %._crit_edge.loopexit ] + %.sroa.010.2.lcssa = phi ptr [ %.sroa.010.060, %.preheader ], [ %73, %._crit_edge.loopexit ] %80 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %81 = zext nneg i16 %80 to i64 %82 = add i16 %.sroa.13.2.lcssa, -1 %83 = and i16 %82, %.sroa.13.2.lcssa %84 = add i64 %.sroa.5.2.lcssa, %81 - %85 = add i64 %.sroa.9.057, -1 + %85 = add i64 %.sroa.9.058, -1 %86 = sub nsw i64 0, %84 %87 = getelementptr inbounds { { i64, [2 x i64] }, { { { { ptr, ptr } }, {} }, {} } }, ptr %71, i64 %86 %88 = getelementptr inbounds i8, ptr %87, i64 -40 @@ -7090,18 +7090,18 @@ _ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exi %91 = getelementptr inbounds i8, ptr %87, i64 -32 br i1 %.not.i.i.i, label %112, label %115 -.thread35.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit +.thread36.loopexit: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit %.pre = load i64, ptr %7, align 8, !alias.scope !1427, !noalias !1428 - br label %.thread35 + br label %.thread36 -.thread35: ; preds = %.thread35.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit +.thread36: ; preds = %.thread36.loopexit, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit %92 = phi i64 [ %.pre, %.thread35.loopexit ], [ 0, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit ] %93 = sub i64 %.sroa.02.0.i.i, %92 store i64 %93, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !1419 store i64 %92, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !1419 br label %94 -94: ; preds = %94, %.thread35 +94: ; preds = %94, %.thread36 %.sroa.0.05.i.i = phi i64 [ 0, %.thread35 ], [ %99, %94 ] %95 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %96 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i @@ -7224,10 +7224,10 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit: ; p %151 = getelementptr i8, ptr %150, i64 %.neg.i.i %152 = getelementptr i8, ptr %151, i64 -40 %.neg72.i.i = mul i64 %.sroa.0.0.i12.i, -40 - %gep54 = getelementptr i8, ptr %invariant.gep53, i64 %.neg72.i.i - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %gep54, ptr noundef nonnull align 1 dereferenceable(40) %152, i64 40, i1 false) + %gep55 = getelementptr i8, ptr %invariant.gep54, i64 %.neg72.i.i + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %gep55, ptr noundef nonnull align 1 dereferenceable(40) %152, i64 40, i1 false) %.not = icmp eq i64 %85, 0 - br i1 %.not, label %.thread35.loopexit, label %.preheader + br i1 %.not, label %.thread36.loopexit, label %.preheader common.resume: ; preds = %169, %69 %common.resume.op = phi { ptr, i32 } [ %70, %69 ], [ %170, %169 ] @@ -7239,7 +7239,7 @@ common.resume: ; preds = %169, %69 %.not5.i.i = icmp eq i64 %14, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread, label %.lr.ph.i.i -_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread: ; preds = %153 +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread:; preds = %153 %154 = icmp ne ptr %.val11.i, null tail call void @llvm.assume(i1 %154) call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !1484 @@ -7255,16 +7255,16 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.threa tail call void @llvm.assume(i1 %158) br label %162 -._crit_edge.i.i: ; preds = %162 +._crit_edge.i.i:; preds = %162 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %14, i64 16) %spec.select26.i = tail call i64 @llvm.umin.i64(i64 %14, i64 16) %159 = getelementptr inbounds i8, ptr %.val11.i, i64 %spec.select.i tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %159, ptr nonnull align 1 %.val11.i, i64 %spec.select26.i, i1 false), !noalias !1484 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3), !noalias !1484 - %160 = getelementptr inbounds nuw i8, ptr %3, i64 8 - store ptr @"_ZN4core3ptr244drop_in_place$LT$$LP$lsp..RequestId$C$alloc..boxed..Box$LT$dyn$u20$core..ops..function..FnOnce$LT$$LP$core..result..Result$LT$alloc..string..String$C$lsp..Error$GT$$C$$RP$$GT$$u2b$Output$u20$$u3d$$u20$$LP$$RP$$u2b$core..marker..Send$GT$$RP$$GT$17h835eaba873fdc9feE", ptr %160, align 8, !noalias !1484 - %161 = getelementptr inbounds nuw i8, ptr %3, i64 16 - store i64 40, ptr %161, align 8, !noalias !1484 + %167 = getelementptr inbounds nuw i8, ptr %3, i64 8 + store ptr @"_ZN4core3ptr244drop_in_place$LT$$LP$lsp..RequestId$C$alloc..boxed..Box$LT$dyn$u20$core..ops..function..FnOnce$LT$$LP$core..result..Result$LT$alloc..string..String$C$lsp..Error$GT$$C$$RP$$GT$$u2b$Output$u20$$u3d$$u20$$LP$$RP$$u2b$core..marker..Send$GT$$RP$$GT$17h835eaba873fdc9feE", ptr %167, align 8, !noalias !1484 + %168 = getelementptr inbounds nuw i8, ptr %3, i64 16 + store i64 40, ptr %168, align 8, !noalias !1484 store ptr %0, ptr %3, align 8, !noalias !1484 br label %.lr.ph.i5 @@ -7288,7 +7288,7 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.threa invoke fastcc void @"_ZN4core3ptr181drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$$RF$mut$u20$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..rehash_in_place..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17ha45003918da87280E"(ptr noalias noundef align 8 dereferenceable(24) %3) #44 to label %common.resume unwind label %259 -.lr.ph.i5: ; preds = %258, %._crit_edge.i.i +.lr.ph.i6: ; preds = %258, %._crit_edge.i.i %.sroa.0.07.i = phi i64 [ %171, %258 ], [ 0, %._crit_edge.i.i ] %171 = add nuw i64 %.sroa.0.07.i, 1 %172 = load ptr, ptr %0, align 8, !alias.scope !1484, !nonnull !4, !noundef !4 @@ -7297,7 +7297,7 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.threa %.not.i = icmp eq i8 %174, -128 br i1 %.not.i, label %175, label %258 -175: ; preds = %.lr.ph.i5 +175: ; preds = %.lr.ph.i6 %.neg.i = mul i64 %.sroa.0.07.i, -40 %176 = getelementptr i8, ptr %172, i64 %.neg.i %177 = getelementptr i8, ptr %176, i64 -40 @@ -7357,23 +7357,23 @@ _ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.i: ; preds = %_ZN4cor %197 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %198 = bitcast <16 x i1> %197 to i16 %.not.i.not.not8.i.i = icmp eq i16 %198, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i15.i, label %._crit_edge.i14.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i14.i, label %._crit_edge.i.i -.lr.ph.i15.i: ; preds = %195, %.lr.ph.i15.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i15.i ], [ %.sroa.0.06.i.i, %195 ] +.lr.ph.i14.i: ; preds = %195, %.lr.ph.i14.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i9, %.lr.ph.i15.i ], [ %.sroa.0.06.i.i, %195 ] %.sroa.7.09.i.i = phi i64 [ %199, %.lr.ph.i15.i ], [ 0, %195 ] %199 = add i64 %.sroa.7.09.i.i, 16 %200 = add i64 %199, %.sroa.0.010.i.i - %.sroa.0.0.i.i8 = and i64 %200, %.val10.i - %201 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i8 + %.sroa.0.0.i.i9 = and i64 %200, %.val10.i + %201 = getelementptr inbounds i8, ptr %.val.i, i64 %.sroa.0.0.i.i9 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %201, align 1, !noalias !1528 %202 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %203 = bitcast <16 x i1> %202 to i16 %.not.i.not.not.i.i = icmp eq i16 %203, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i15.i, label %._crit_edge.i14.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i14.i, label %._crit_edge.i.i -._crit_edge.i14.i: ; preds = %.lr.ph.i15.i, %195 - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %195 ], [ %.sroa.0.0.i.i8, %.lr.ph.i15.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i14.i, %195 + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %195 ], [ %.sroa.0.0.i.i9, %.lr.ph.i15.i ] %.lcssa.i.i = phi i16 [ %198, %195 ], [ %203, %.lr.ph.i15.i ] %204 = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %205 = zext nneg i16 %204 to i64 @@ -7384,7 +7384,7 @@ _ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.i: ; preds = %_ZN4cor %210 = icmp sgt i8 %209, -1 br i1 %210, label %211, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -211: ; preds = %._crit_edge.i14.i +211: ; preds = %._crit_edge.i.i %212 = load <16 x i8>, ptr %.val.i, align 16, !noalias !1531 %213 = icmp slt <16 x i8> %212, zeroinitializer %214 = bitcast <16 x i1> %213 to i16 @@ -7394,7 +7394,7 @@ _ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.i: ; preds = %_ZN4cor %217 = zext nneg i16 %216 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %211, %._crit_edge.i14.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %211, %._crit_edge.i.i %.sroa.0.0.i12.i.i = phi i64 [ %217, %211 ], [ %207, %._crit_edge.i14.i ] %218 = sub i64 %.sroa.0.07.i, %.sroa.0.06.i.i %219 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i @@ -7443,8 +7443,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; store i8 %247, ptr %244, align 1 store i8 %246, ptr %245, align 1 %248 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i7 = icmp eq i64 %248, 40 - br i1 %exitcond.not.i.i7, label %_ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.loopexit.i, label %.preheader.i + %exitcond.not.i.i8 = icmp eq i64 %248, 40 + br i1 %exitcond.not.i.i8, label %_ZN4core3ptr19swap_nonoverlapping17h024cf96d658905c8E.exit.loopexit.i, label %.preheader.i 249: ; preds = %222 %250 = add i64 %.sroa.0.07.i, -16 @@ -7460,9 +7460,9 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(40) %224, ptr noundef nonnull align 1 dereferenceable(40) %177, i64 40, i1 false) br label %258 -258: ; preds = %249, %235, %.lr.ph.i5 +258: ; preds = %249, %235, %.lr.ph.i6 %exitcond.not.i = icmp eq i64 %.sroa.0.07.i, %12 - br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %.lr.ph.i5 + br i1 %exitcond.not.i, label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, label %.lr.ph.i6 259: ; preds = %169 %260 = landingpad { ptr, i32 } @@ -7478,19 +7478,19 @@ _ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit: ; pr %262 = mul nuw i64 %261, 7 %263 = icmp ult i64 %.pre14.i.fr, 8 %spec.select = select i1 %263, i64 %.pre14.i.fr, i64 %262 - %.pre69 = load i64, ptr %7, align 8, !alias.scope !1484 - br label %264 - -264: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread - %265 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread ], [ %.pre69, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] - %266 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] - %267 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %268 = sub i64 %266, %265 - store i64 %268, ptr %267, align 8, !alias.scope !1484 + %.pre70 = load i64, ptr %7, align 8, !alias.scope !1484 + br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread + +_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread + %264 = phi i64 [ %8, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread ], [ %.pre70, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] + %265 = phi i64 [ 0, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread ], [ %spec.select, %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit ] + %266 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %267 = sub i64 %265, %264 + store i64 %267, ptr %266, align 8, !alias.scope !1484 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3), !noalias !1484 br label %_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha6a42e656fc23b0bE.exit -_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha6a42e656fc23b0bE.exit: ; preds = %264, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h8068e8f06ace5fe6E.exit", %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit.thread, %18 +_ZN9hashbrown3raw13RawTableInner20reserve_rehash_inner17ha6a42e656fc23b0bE.exit: ; preds = %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit.thread, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h8068e8f06ace5fe6E.exit", %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit.thread, %18 %.merged.i = phi i64 [ %20, %18 ], [ -9223372036854775807, %264 ], [ %.sroa.7.0.i.i.ph, %_ZN9hashbrown3raw13RawTableInner22fallible_with_capacity17h501493281d753dadE.exit.thread ], [ -9223372036854775807, %"_ZN4core3ptr196drop_in_place$LT$hashbrown..scopeguard..ScopeGuard$LT$hashbrown..raw..RawTableInner$C$hashbrown..raw..RawTableInner..prepare_resize$LT$alloc..alloc..Global$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$$GT$17h8068e8f06ace5fe6E.exit" ] ret i64 %.merged.i } diff --git a/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll b/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll index af981e6e7ac..1ff1c4d408e 100644 --- a/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll +++ b/bench/zed-rs/optimized/cn5tr75hwj0e1t163yn1kh0fu.ll @@ -116,8 +116,8 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i = getelementptr inbounds nuw i8, ptr %5, i64 48 store i64 0, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 %invariant.gep = getelementptr i8, ptr %57, i64 16 - %.not51 = icmp eq i64 %7, 0 - br i1 %.not51, label %.thread35, label %.preheader.lr.ph + %.not53 = icmp eq i64 %7, 0 + br i1 %.not53, label %.thread37, label %.preheader.lr.ph .preheader.lr.ph: ; preds = %52 %58 = load ptr, ptr %0, align 8, !alias.scope !22, !noalias !23, !nonnull !9, !noundef !9 @@ -125,25 +125,25 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr %60 = icmp slt <16 x i8> %59, zeroinitializer %61 = bitcast <16 x i1> %60 to i16 %62 = xor i16 %61, -1 - %invariant.gep56 = getelementptr i8, ptr %58, i64 -24 + %invariant.gep58 = getelementptr i8, ptr %58, i64 -24 br label %.preheader .preheader: ; preds = %.preheader.lr.ph, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit - %.sroa.09.055 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.09.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.5.054 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.9.053 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %.sroa.13.052 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] - %63 = icmp eq i16 %.sroa.13.052, 0 + %.sroa.011.057 = phi ptr [ %58, %.preheader.lr.ph ], [ %.sroa.011.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.5.056 = phi i64 [ 0, %.preheader.lr.ph ], [ %.sroa.5.2.lcssa, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.9.055 = phi i64 [ %7, %.preheader.lr.ph ], [ %76, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %.sroa.13.054 = phi i16 [ %62, %.preheader.lr.ph ], [ %74, %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit ] + %63 = icmp eq i16 %.sroa.13.054, 0 br i1 %63, label %.noexc2, label %._crit_edge .noexc2: ; preds = %.preheader, %.noexc2 - %.sroa.09.248 = phi ptr [ %64, %.noexc2 ], [ %.sroa.09.055, %.preheader ] - %.sroa.5.247 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.054, %.preheader ] - %64 = getelementptr inbounds nuw i8, ptr %.sroa.09.248, i64 16 + %.sroa.011.250 = phi ptr [ %64, %.noexc2 ], [ %.sroa.011.057, %.preheader ] + %.sroa.5.249 = phi i64 [ %68, %.noexc2 ], [ %.sroa.5.056, %.preheader ] + %64 = getelementptr inbounds nuw i8, ptr %.sroa.011.250, i64 16 %65 = load <16 x i8>, ptr %64, align 16, !noalias !27 %66 = icmp slt <16 x i8> %65, zeroinitializer %67 = bitcast <16 x i1> %66 to i16 - %68 = add i64 %.sroa.5.247, 16 + %68 = add i64 %.sroa.5.249, 16 %69 = icmp eq i16 %67, -1 br i1 %69, label %.noexc2, label %._crit_edge.loopexit @@ -152,18 +152,18 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr br label %._crit_edge ._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader - %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.052, %.preheader ], [ %70, %._crit_edge.loopexit ] - %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.054, %.preheader ], [ %68, %._crit_edge.loopexit ] - %.sroa.09.2.lcssa = phi ptr [ %.sroa.09.055, %.preheader ], [ %64, %._crit_edge.loopexit ] + %.sroa.13.2.lcssa = phi i16 [ %.sroa.13.054, %.preheader ], [ %70, %._crit_edge.loopexit ] + %.sroa.5.2.lcssa = phi i64 [ %.sroa.5.056, %.preheader ], [ %68, %._crit_edge.loopexit ] + %.sroa.011.2.lcssa = phi ptr [ %.sroa.011.057, %.preheader ], [ %64, %._crit_edge.loopexit ] %71 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.sroa.13.2.lcssa, i1 true) %72 = zext nneg i16 %71 to i64 %73 = add i16 %.sroa.13.2.lcssa, -1 %74 = and i16 %73, %.sroa.13.2.lcssa %75 = add i64 %.sroa.5.2.lcssa, %72 - %76 = add i64 %.sroa.9.053, -1 + %76 = add i64 %.sroa.9.055, -1 %77 = sub nsw i64 0, %75 - %gep57 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep56, i64 %77 - %.val3.i = load i64, ptr %gep57, align 8, !alias.scope !30, !noalias !35, !noundef !9 + %gep59 = getelementptr { { { i64, i64 } }, { { { { ptr, ptr } }, {} }, {} } }, ptr %invariant.gep58, i64 %77 + %.val3.i = load i64, ptr %gep59, align 8, !alias.scope !30, !noalias !35, !noundef !9 %78 = mul i64 %.val3.i, 5871781006564002453 %.sroa.0.06.i = and i64 %78, %54 %79 = getelementptr inbounds nuw i8, ptr %57, i64 %.sroa.0.06.i @@ -173,13 +173,13 @@ _ZN9hashbrown3raw13RawTableInner17new_uninitialized17h4004be209a52c5d9E.exit.thr %.not.i.not.not8.i = icmp eq i16 %81, 0 br i1 %.not.i.not.not8.i, label %.lr.ph.i, label %._crit_edge.i -.thread35: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit, %52 +.thread37: ; preds = %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit, %52 %82 = sub i64 %.sroa.02.0.i.i, %7 store i64 %82, ptr %.sroa.628.sroa.5.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 store i64 %7, ptr %.sroa.628.sroa.6.0..sroa.628.0..sroa_idx.sroa_idx.i.i, align 8, !noalias !14 br label %83 -83: ; preds = %83, %.thread35 +83: ; preds = %83, %.thread37 %.sroa.0.05.i.i = phi i64 [ 0, %.thread35 ], [ %88, %83 ] %84 = getelementptr inbounds nuw i64, ptr %0, i64 %.sroa.0.05.i.i %85 = getelementptr inbounds nuw i64, ptr %.sroa.628.0..sroa_idx.i.i, i64 %.sroa.0.05.i.i @@ -275,7 +275,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit: ; p %130 = getelementptr inbounds i8, ptr %57, i64 %129 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %130, ptr noundef nonnull align 1 dereferenceable(32) %127, i64 32, i1 false) %.not = icmp eq i64 %76, 0 - br i1 %.not, label %.thread35, label %.preheader + br i1 %.not, label %.thread37, label %.preheader 131: ; preds = %10 tail call void @llvm.experimental.noalias.scope.decl(metadata !55) @@ -283,7 +283,7 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit: ; p %.not5.i.i = icmp eq i64 %15, 0 br i1 %.not5.i.i, label %_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread23.i, label %.lr.ph.i.i -_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread23.i: ; preds = %131 +_ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.exit.thread23.i:; preds = %131 %132 = icmp ne ptr %.val10.i, null tail call void @llvm.assume(i1 %132) br label %_ZN9hashbrown3raw13RawTableInner15rehash_in_place17h3136a4fc5ae63fadE.exit @@ -296,9 +296,9 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex %.sroa.0.0.i.i.i.i = add nuw nsw i64 %133, %135 %136 = icmp ne ptr %.val10.i, null tail call void @llvm.assume(i1 %136) - br label %138 + br label %145 -._crit_edge.i.i: ; preds = %138 +._crit_edge.i.i:; preds = %138 %spec.select.i = tail call i64 @llvm.umax.i64(i64 %15, i64 16) %spec.select29.i = tail call i64 @llvm.umin.i64(i64 %15, i64 16) %137 = getelementptr inbounds i8, ptr %.val10.i, i64 %spec.select.i @@ -307,8 +307,8 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex %invariant.gep.i = getelementptr i8, ptr %.val10.i, i64 16 br label %145 -138: ; preds = %138, %.lr.ph.i.i - %.sroa.0.07.i.i = phi i64 [ 0, %.lr.ph.i.i ], [ %139, %138 ] +145: ; preds = %145, %.lr.ph.i.i + %.sroa.0.09.i = phi i64 [ 0, %.lr.ph.i.i ], [ %139, %138 ] %.sroa.5.06.i.i = phi i64 [ %.sroa.0.0.i.i.i.i, %.lr.ph.i.i ], [ %140, %138 ] %139 = add i64 %.sroa.0.07.i.i, 16 %140 = add i64 %.sroa.5.06.i.i, -1 @@ -326,8 +326,8 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex %146 = add nuw i64 %.sroa.0.09.i, 1 %147 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.09.i %148 = load i8, ptr %147, align 1, !noalias !55, !noundef !9 - %.not.i4 = icmp eq i8 %148, -128 - br i1 %.not.i4, label %149, label %205 + %.not.i6 = icmp eq i8 %148, -128 + br i1 %.not.i6, label %149, label %205 149: ; preds = %145 %150 = shl i64 %.sroa.0.09.i, 5 @@ -338,31 +338,31 @@ _ZN9hashbrown3raw13RawTableInner23prepare_rehash_in_place17h050e4510560d0497E.ex br label %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i _ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i: ; preds = %.preheader.i, %149 - %.val3.i.i6 = load i64, ptr %gep11.i, align 8, !alias.scope !64, !noalias !69, !noundef !9 - %154 = mul i64 %.val3.i.i6, 5871781006564002453 + %.val3.i.i8 = load i64, ptr %gep11.i, align 8, !alias.scope !64, !noalias !69, !noundef !9 + %154 = mul i64 %.val3.i.i8, 5871781006564002453 %.sroa.0.06.i.i = and i64 %154, %13 %155 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.06.i.i %.sroa.0.0.copyload.i57.i.i = load <16 x i8>, ptr %155, align 1, !noalias !76 %156 = icmp slt <16 x i8> %.sroa.0.0.copyload.i57.i.i, zeroinitializer %157 = bitcast <16 x i1> %156 to i16 %.not.i.not.not8.i.i = icmp eq i16 %157, 0 - br i1 %.not.i.not.not8.i.i, label %.lr.ph.i13.i, label %._crit_edge.i12.i + br i1 %.not.i.not.not8.i.i, label %.lr.ph.i12.i, label %._crit_edge.i.i -.lr.ph.i13.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, %.lr.ph.i13.i - %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ], [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ] +.lr.ph.i12.i: ; preds = %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, %.lr.ph.i12.i + %.sroa.0.010.i.i = phi i64 [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ], [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ] %.sroa.7.09.i.i = phi i64 [ %158, %.lr.ph.i13.i ], [ 0, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ] %158 = add i64 %.sroa.7.09.i.i, 16 %159 = add i64 %158, %.sroa.0.010.i.i - %.sroa.0.0.i.i8 = and i64 %159, %13 - %160 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i8 + %.sroa.0.0.i.i10 = and i64 %159, %13 + %160 = getelementptr inbounds i8, ptr %.val10.i, i64 %.sroa.0.0.i.i10 %.sroa.0.0.copyload.i5.i.i = load <16 x i8>, ptr %160, align 1, !noalias !76 %161 = icmp slt <16 x i8> %.sroa.0.0.copyload.i5.i.i, zeroinitializer %162 = bitcast <16 x i1> %161 to i16 %.not.i.not.not.i.i = icmp eq i16 %162, 0 - br i1 %.not.i.not.not.i.i, label %.lr.ph.i13.i, label %._crit_edge.i12.i + br i1 %.not.i.not.not.i.i, label %.lr.ph.i12.i, label %._crit_edge.i.i -._crit_edge.i12.i: ; preds = %.lr.ph.i13.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i - %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ], [ %.sroa.0.0.i.i8, %.lr.ph.i13.i ] +._crit_edge.i.i: ; preds = %.lr.ph.i12.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i + %.sroa.0.0.lcssa.i.i = phi i64 [ %.sroa.0.06.i.i, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ], [ %.sroa.0.0.i.i10, %.lr.ph.i13.i ] %.lcssa.i.i = phi i16 [ %157, %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i ], [ %162, %.lr.ph.i13.i ] %163 = tail call range(i16 0, 17) i16 @llvm.cttz.i16(i16 %.lcssa.i.i, i1 true) %164 = zext nneg i16 %163 to i64 @@ -373,7 +373,7 @@ _ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i: ; preds = %.prehea %169 = icmp sgt i8 %168, -1 br i1 %169, label %170, label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -170: ; preds = %._crit_edge.i12.i +170: ; preds = %._crit_edge.i.i %171 = load <16 x i8>, ptr %.val10.i, align 16, !noalias !79 %172 = icmp slt <16 x i8> %171, zeroinitializer %173 = bitcast <16 x i1> %172 to i16 @@ -383,7 +383,7 @@ _ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i: ; preds = %.prehea %176 = zext nneg i16 %175 to i64 br label %_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i -_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %170, %._crit_edge.i12.i +_ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; preds = %170, %._crit_edge.i.i %.sroa.0.0.i12.i.i = phi i64 [ %176, %170 ], [ %166, %._crit_edge.i12.i ] %177 = sub i64 %.sroa.0.09.i, %.sroa.0.06.i.i %178 = sub i64 %.sroa.0.0.i12.i.i, %.sroa.0.06.i.i @@ -427,8 +427,8 @@ _ZN9hashbrown3raw13RawTableInner16find_insert_slot17hd5499c650fb46ed7E.exit.i: ; store i8 %200, ptr %197, align 1, !noalias !55 store i8 %199, ptr %198, align 1, !noalias !55 %201 = add nuw nsw i64 %.sroa.04.09.i.i, 1 - %exitcond.not.i.i7 = icmp eq i64 %201, 32 - br i1 %exitcond.not.i.i7, label %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, label %.preheader.i + %exitcond.not.i.i9 = icmp eq i64 %201, 32 + br i1 %exitcond.not.i.i9, label %_ZN4core3ptr19swap_nonoverlapping17h7a2a59d588e68f4fE.exit.i, label %.preheader.i 202: ; preds = %181 %203 = add i64 %.sroa.0.09.i, -16