From 310b48a174548410c7931e57189ab38bd35337f5 Mon Sep 17 00:00:00 2001 From: dtcxzyw <15650457+dtcxzyw@users.noreply.github.com> Date: Sat, 21 Jun 2025 16:34:45 +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 a809d38f09d14779ab9fbf2128c3d0789e3d353e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 21 Jun 2025 08:57:12 +0000 Subject: [PATCH 2/3] pre-commit: Update --- bench/cmake/optimized/zstd_ldm.ll | 14 +- bench/duckdb/optimized/bignum.ll | 52 +- .../ub_duckdb_storage_compression_roaring.ll | 17 +- bench/graphviz/optimized/comp.ll | 858 +++++++++--------- bench/graphviz/optimized/neatoinit.ll | 804 ++++++++-------- bench/graphviz/optimized/spring_electrical.ll | 438 +++++---- bench/hyperscan/optimized/dfa_min.ll | 445 +++++---- bench/hyperscan/optimized/mcclellancompile.ll | 8 +- bench/hyperscan/optimized/ng_mcclellan.ll | 37 +- bench/hyperscan/optimized/ng_misc_opt.ll | 24 +- .../influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll | 266 +++--- bench/lief/optimized/bignum_core.ll | 2 +- bench/miniaudio/optimized/unity.ll | 642 +++++++------ .../optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll | 7 +- .../optimized/byas2yzy27h8nly1lm4ekoo5u.ll | 5 +- bench/raylib/optimized/raudio.ll | 660 +++++++------- bench/wireshark/optimized/packet-bmc.ll | 96 +- bench/wolfssl/optimized/random.ll | 381 ++++---- bench/yalantinglibs/optimized/channel.ll | 10 +- 19 files changed, 2354 insertions(+), 2412 deletions(-) diff --git a/bench/cmake/optimized/zstd_ldm.ll b/bench/cmake/optimized/zstd_ldm.ll index 63e83872119..feeded8933a 100644 --- a/bench/cmake/optimized/zstd_ldm.ll +++ b/bench/cmake/optimized/zstd_ldm.ll @@ -382,15 +382,15 @@ define dso_local range(i64 -119, 1) i64 @ZSTD_ldm_generateSequences(ptr noundef %9 = load i32, ptr %8, align 4, !tbaa !9 %10 = shl nuw i32 1, %9 %11 = getelementptr inbounds nuw i8, ptr %3, i64 %4 + %.not = icmp eq i64 %4, 0 + br i1 %.not, label %.critedge, label %.lr.ph + +.lr.ph: ; preds = %5 %12 = lshr i64 %4, 20 %13 = and i64 %4, 1048575 %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 - br i1 %.not, label %.critedge, label %.lr.ph - -.lr.ph: ; preds = %5 %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 %18 = getelementptr inbounds nuw i8, ptr %1, i64 32 %19 = getelementptr inbounds nuw i8, ptr %0, i64 48 @@ -408,6 +408,7 @@ define dso_local range(i64 -119, 1) i64 @ZSTD_ldm_generateSequences(ptr noundef %31 = getelementptr i8, ptr %2, i64 16 %32 = getelementptr inbounds nuw i8, ptr %6, i64 8 %33 = getelementptr i8, ptr %0, i64 56 + %umax = tail call i64 @llvm.umax.i64(i64 %16, i64 1) %.pre = load i64, ptr %17, align 8, !tbaa !36 br label %34 @@ -1284,7 +1285,7 @@ ZSTD_ldm_generateSequences_internal.exit._crit_edge: ; preds = %ZSTD_ldm_generat 413: ; preds = %405, %411 %.15778 = phi i64 [ %.0.i69, %405 ], [ %412, %411 ] %414 = add nuw nsw i64 %.05588, 1 - %exitcond.not = icmp eq i64 %414, %16 + %exitcond.not = icmp eq i64 %414, %umax br i1 %exitcond.not, label %.critedge, label %34, !llvm.loop !67 .critedge: ; preds = %413, %34, %ZSTD_ldm_generateSequences_internal.exit, %5, %ZSTD_ldm_generateSequences_internal.exit.thread72 @@ -1899,6 +1900,9 @@ declare i32 @llvm.umax.i32(i32, i32) #11 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.usub.sat.i32(i32, i32) #11 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.umax.i64(i64, i64) #11 + attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } 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..742b1c5d3c1 100644 --- a/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll +++ b/bench/duckdb/optimized/ub_duckdb_storage_compression_roaring.ll @@ -7735,31 +7735,32 @@ _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 %70 = getelementptr inbounds nuw i8, ptr %0, i64 160 %71 = getelementptr inbounds nuw i8, ptr %0, i64 168 %72 = getelementptr inbounds nuw i8, ptr %0, i64 184 + %umax = call i64 @llvm.umax.i64(i64 %spec.select, i64 1) br label %77 ._crit_edge: ; preds = %_ZN6duckdb7roaring16RoaringScanState10SkipVectorERKNS0_17ContainerMetadataE.exit, %_ZNSt6vectorImSaImEE7reserveEm.exit @@ -8037,7 +8038,7 @@ _ZN6duckdb7roaring16RoaringScanState10SkipVectorERKNS0_17ContainerMetadataE.exit %.0.i.i = phi i64 [ %.1.i.i, %160 ], [ %.2.i.i, %166 ], [ 256, %_ZNSt6vectorImSaImEE9push_backERKm.exit ] %171 = add i64 %.0.i.i, %.1 %172 = add nuw nsw i64 %.078, 1 - %exitcond.not = icmp eq i64 %172, %spec.select + %exitcond.not = icmp eq i64 %172, %umax br i1 %exitcond.not, label %._crit_edge, label %77, !llvm.loop !456 173: ; preds = %.loopexit, %.loopexit.split-lp, %75 diff --git a/bench/graphviz/optimized/comp.ll b/bench/graphviz/optimized/comp.ll index 84843631618..28d0ac2dbeb 100644 --- a/bench/graphviz/optimized/comp.ll +++ b/bench/graphviz/optimized/comp.ll @@ -39,584 +39,576 @@ define noalias noundef ptr @findCComp(ptr noundef %0, ptr noundef writeonly capt %15 = icmp ne i32 %14, 0 %16 = zext i1 %15 to i64 %17 = add nuw nsw i64 %13, %16 - %.not.i.i = icmp eq i64 %17, 0 - br i1 %.not.i.i, label %.thread.i.i, label %19 + %18 = tail call noalias ptr @calloc(i64 noundef %17, i64 noundef 1) #15 + %19 = icmp eq ptr %18, null + br i1 %19, label %20, label %bitarray_new.exit -.thread.i.i: ; preds = %12 - %18 = tail call noalias ptr @calloc(i64 noundef 0, i64 noundef 1) #15 - br label %bitarray_new.exit - -19: ; preds = %12 - %20 = tail call noalias ptr @calloc(i64 noundef %17, i64 noundef 1) #15 - %21 = icmp eq ptr %20, null - br i1 %21, label %22, label %bitarray_new.exit - -22: ; preds = %19 - %23 = load ptr, ptr @stderr, align 8, !tbaa !3 - %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.4, i64 noundef %17) #16 +20: ; preds = %12 + %21 = load ptr, ptr @stderr, align 8, !tbaa !3 + %22 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.4, i64 noundef %17) #16 tail call fastcc void @graphviz_exit() #17 unreachable -bitarray_new.exit: ; preds = %3, %.thread.i.i, %19 - %.sroa.0.0.i = phi ptr [ null, %3 ], [ %18, %.thread.i.i ], [ %20, %19 ] +bitarray_new.exit: ; preds = %3, %12 + %.sroa.0.0.i = phi ptr [ null, %3 ], [ %18, %12 ] store ptr %.sroa.0.0.i, ptr %8, align 8 - %25 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store i64 %10, ptr %25, align 8 - %26 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %27 = load ptr, ptr %26, align 8, !tbaa !8 - %28 = getelementptr inbounds nuw i8, ptr %27, i64 160 - %29 = load ptr, ptr %28, align 8, !tbaa !14 - %30 = load ptr, ptr %29, align 8, !tbaa !34 - %.not = icmp eq ptr %30, null - br i1 %.not, label %.loopexit, label %31 - -31: ; preds = %bitarray_new.exit - %32 = tail call ptr @agnameof(ptr noundef nonnull %0) #14 - %33 = load i64, ptr @C_cnt, align 8, !tbaa !37 - call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %32, i64 noundef %33) - %34 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %.val.i = load i8, ptr %34, align 1, !tbaa !38 + %23 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store i64 %10, ptr %23, align 8 + %24 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %25 = load ptr, ptr %24, align 8, !tbaa !8 + %26 = getelementptr inbounds nuw i8, ptr %25, i64 160 + %27 = load ptr, ptr %26, align 8, !tbaa !14 + %28 = load ptr, ptr %27, align 8, !tbaa !34 + %.not = icmp eq ptr %28, null + br i1 %.not, label %.loopexit, label %29 + +29: ; preds = %bitarray_new.exit + %30 = tail call ptr @agnameof(ptr noundef nonnull %0) #14 + %31 = load i64, ptr @C_cnt, align 8, !tbaa !37 + call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %30, i64 noundef %31) + %32 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %.val.i = load i8, ptr %32, align 1, !tbaa !38 switch i8 %.val.i, label %agxblen.exit.i.i [ - i8 -1, label %36 + i8 -1, label %34 i8 31, label %agxbclear.exit.thread.i ] -agxblen.exit.i.i: ; preds = %31 - %35 = zext i8 %.val.i to i64 +agxblen.exit.i.i: ; preds = %29 + %33 = zext i8 %.val.i to i64 br label %agxbsizeof.exit.i.i -36: ; preds = %31 - %37 = getelementptr inbounds nuw i8, ptr %7, i64 8 +34: ; preds = %29 + %35 = getelementptr inbounds nuw i8, ptr %7, i64 8 + %36 = load i64, ptr %35, align 8, !tbaa !38 + %37 = getelementptr inbounds nuw i8, ptr %7, i64 16 %38 = load i64, ptr %37, align 8, !tbaa !38 - %39 = getelementptr inbounds nuw i8, ptr %7, i64 16 - %40 = load i64, ptr %39, align 8, !tbaa !38 br label %agxbsizeof.exit.i.i -agxbsizeof.exit.i.i: ; preds = %36, %agxblen.exit.i.i - %.0.i20.i.i = phi i64 [ %38, %36 ], [ %35, %agxblen.exit.i.i ] - %.0.i14.i.i = phi i64 [ %40, %36 ], [ 31, %agxblen.exit.i.i ] +agxbsizeof.exit.i.i: ; preds = %34, %agxblen.exit.i.i + %.0.i20.i.i = phi i64 [ %36, %34 ], [ %33, %agxblen.exit.i.i ] + %.0.i14.i.i = phi i64 [ %38, %34 ], [ 31, %agxblen.exit.i.i ] %.not.i5.i = icmp ult i64 %.0.i20.i.i, %.0.i14.i.i - br i1 %.not.i5.i, label %42, label %41 + br i1 %.not.i5.i, label %40, label %39 -41: ; preds = %agxbsizeof.exit.i.i +39: ; preds = %agxbsizeof.exit.i.i call fastcc void @agxbmore(ptr noundef nonnull %7, i64 noundef 1) - %.val.i15.pre.i.i = load i8, ptr %34, align 1, !tbaa !38 - br label %42 + %.val.i15.pre.i.i = load i8, ptr %32, align 1, !tbaa !38 + br label %40 -42: ; preds = %41, %agxbsizeof.exit.i.i - %.val.i15.i.i = phi i8 [ %.val.i15.pre.i.i, %41 ], [ %.val.i, %agxbsizeof.exit.i.i ] +40: ; preds = %39, %agxbsizeof.exit.i.i + %.val.i15.i.i = phi i8 [ %.val.i15.pre.i.i, %39 ], [ %.val.i, %agxbsizeof.exit.i.i ] %.not.i16.i.i = icmp eq i8 %.val.i15.i.i, -1 - br i1 %.not.i16.i.i, label %48, label %43 - -43: ; preds = %42 - %44 = zext i8 %.val.i15.i.i to i64 - %45 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %44 - store i8 0, ptr %45, align 1, !tbaa !38 - %46 = load i8, ptr %34, align 1, !tbaa !38 - %47 = add i8 %46, 1 - store i8 %47, ptr %34, align 1, !tbaa !38 + br i1 %.not.i16.i.i, label %46, label %41 + +41: ; preds = %40 + %42 = zext i8 %.val.i15.i.i to i64 + %43 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %42 + store i8 0, ptr %43, align 1, !tbaa !38 + %44 = load i8, ptr %32, align 1, !tbaa !38 + %45 = add i8 %44, 1 + store i8 %45, ptr %32, align 1, !tbaa !38 br label %agxbputc.exit.i -48: ; preds = %42 - %49 = getelementptr inbounds nuw i8, ptr %7, i64 8 - %50 = load i64, ptr %49, align 8, !tbaa !38 - %51 = load ptr, ptr %7, align 8, !tbaa !38 - %52 = getelementptr inbounds nuw i8, ptr %51, i64 %50 - store i8 0, ptr %52, align 1, !tbaa !38 - %53 = load i64, ptr %49, align 8, !tbaa !38 - %54 = add i64 %53, 1 - store i64 %54, ptr %49, align 8, !tbaa !38 - %.val.i6.pr.i = load i8, ptr %34, align 1, !tbaa !38 +46: ; preds = %40 + %47 = getelementptr inbounds nuw i8, ptr %7, i64 8 + %48 = load i64, ptr %47, align 8, !tbaa !38 + %49 = load ptr, ptr %7, align 8, !tbaa !38 + %50 = getelementptr inbounds nuw i8, ptr %49, i64 %48 + store i8 0, ptr %50, align 1, !tbaa !38 + %51 = load i64, ptr %47, align 8, !tbaa !38 + %52 = add i64 %51, 1 + store i64 %52, ptr %47, align 8, !tbaa !38 + %.val.i6.pr.i = load i8, ptr %32, align 1, !tbaa !38 br label %agxbputc.exit.i -agxbputc.exit.i: ; preds = %48, %43 - %.val.i8.pr.i = phi i8 [ %.val.i6.pr.i, %48 ], [ %47, %43 ] +agxbputc.exit.i: ; preds = %46, %41 + %.val.i8.pr.i = phi i8 [ %.val.i6.pr.i, %46 ], [ %45, %41 ] %.not.i7.i = icmp eq i8 %.val.i8.pr.i, -1 - br i1 %.not.i7.i, label %55, label %agxbclear.exit.thread.i + br i1 %.not.i7.i, label %53, label %agxbclear.exit.thread.i -agxbclear.exit.thread.i: ; preds = %agxbputc.exit.i, %31 - store i8 0, ptr %34, align 1, !tbaa !38 +agxbclear.exit.thread.i: ; preds = %agxbputc.exit.i, %29 + store i8 0, ptr %32, align 1, !tbaa !38 br label %agxbuse.exit -55: ; preds = %agxbputc.exit.i - %56 = getelementptr inbounds nuw i8, ptr %7, i64 8 - store i64 0, ptr %56, align 8, !tbaa !38 - %57 = load ptr, ptr %7, align 8, !tbaa !38 +53: ; preds = %agxbputc.exit.i + %54 = getelementptr inbounds nuw i8, ptr %7, i64 8 + store i64 0, ptr %54, align 8, !tbaa !38 + %55 = load ptr, ptr %7, align 8, !tbaa !38 br label %agxbuse.exit -agxbuse.exit: ; preds = %agxbclear.exit.thread.i, %55 - %58 = phi ptr [ %57, %55 ], [ %7, %agxbclear.exit.thread.i ] - %59 = call ptr @agsubg(ptr noundef nonnull %0, ptr noundef %58, i32 noundef 1) #14 - %60 = call ptr @agbindrec(ptr noundef %59, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 - %61 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 - %62 = icmp eq ptr %61, null - br i1 %62, label %63, label %gv_alloc.exit - -63: ; preds = %agxbuse.exit - %64 = load ptr, ptr @stderr, align 8, !tbaa !3 - %65 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %64, ptr noundef nonnull @.str.4, i64 noundef 64) #16 +agxbuse.exit: ; preds = %agxbclear.exit.thread.i, %53 + %56 = phi ptr [ %55, %53 ], [ %7, %agxbclear.exit.thread.i ] + %57 = call ptr @agsubg(ptr noundef nonnull %0, ptr noundef %56, i32 noundef 1) #14 + %58 = call ptr @agbindrec(ptr noundef %57, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 + %59 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 + %60 = icmp eq ptr %59, null + br i1 %60, label %61, label %gv_alloc.exit + +61: ; preds = %agxbuse.exit + %62 = load ptr, ptr @stderr, align 8, !tbaa !3 + %63 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %62, ptr noundef nonnull @.str.4, i64 noundef 64) #16 call fastcc void @graphviz_exit() #17 unreachable gv_alloc.exit: ; preds = %agxbuse.exit - %66 = getelementptr inbounds nuw i8, ptr %59, i64 16 - %67 = load ptr, ptr %66, align 8, !tbaa !8 + %64 = getelementptr inbounds nuw i8, ptr %57, i64 16 + %65 = load ptr, ptr %64, align 8, !tbaa !8 + %66 = getelementptr inbounds nuw i8, ptr %65, i64 160 + store ptr %59, ptr %66, align 8, !tbaa !14 + store ptr %28, ptr %59, align 8, !tbaa !34 + %67 = load ptr, ptr %24, align 8, !tbaa !8 %68 = getelementptr inbounds nuw i8, ptr %67, i64 160 - store ptr %61, ptr %68, align 8, !tbaa !14 - store ptr %30, ptr %61, align 8, !tbaa !34 - %69 = load ptr, ptr %26, align 8, !tbaa !8 - %70 = getelementptr inbounds nuw i8, ptr %69, i64 160 - %71 = load ptr, ptr %70, align 8, !tbaa !14 - %72 = getelementptr inbounds nuw i8, ptr %71, i64 8 - %73 = load i32, ptr %72, align 8, !tbaa !39 - %74 = getelementptr inbounds nuw i8, ptr %61, i64 8 - store i32 %73, ptr %74, align 8, !tbaa !39 - %75 = getelementptr inbounds nuw i8, ptr %30, i64 8 - %76 = load ptr, ptr %75, align 8, !tbaa !40 - %.not78129 = icmp eq ptr %76, null + %69 = load ptr, ptr %68, align 8, !tbaa !14 + %70 = getelementptr inbounds nuw i8, ptr %69, i64 8 + %71 = load i32, ptr %70, align 8, !tbaa !39 + %72 = getelementptr inbounds nuw i8, ptr %59, i64 8 + store i32 %71, ptr %72, align 8, !tbaa !39 + %73 = getelementptr inbounds nuw i8, ptr %28, i64 8 + %74 = load ptr, ptr %73, align 8, !tbaa !40 + %.not78129 = icmp eq ptr %74, null br i1 %.not78129, label %.loopexit, label %.lr.ph .lr.ph: ; preds = %gv_alloc.exit - %77 = getelementptr inbounds nuw i8, ptr %6, i64 8 - br label %78 - -78: ; preds = %.lr.ph, %96 - %79 = phi ptr [ %76, %.lr.ph ], [ %99, %96 ] - %.066130 = phi ptr [ %30, %.lr.ph ], [ %97, %96 ] - %80 = getelementptr inbounds nuw i8, ptr %79, i64 16 - %81 = load ptr, ptr %80, align 8, !tbaa !8 - %82 = getelementptr inbounds nuw i8, ptr %81, i64 164 - %83 = load i32, ptr %82, align 4, !tbaa !43 - %84 = sext i32 %83 to i64 - %85 = load ptr, ptr %8, align 8 - %86 = load i64, ptr %25, align 8 + %75 = getelementptr inbounds nuw i8, ptr %6, i64 8 + br label %76 + +76: ; preds = %.lr.ph, %94 + %77 = phi ptr [ %74, %.lr.ph ], [ %97, %94 ] + %.066130 = phi ptr [ %28, %.lr.ph ], [ %95, %94 ] + %78 = getelementptr inbounds nuw i8, ptr %77, i64 16 + %79 = load ptr, ptr %78, align 8, !tbaa !8 + %80 = getelementptr inbounds nuw i8, ptr %79, i64 164 + %81 = load i32, ptr %80, align 4, !tbaa !43 + %82 = sext i32 %81 to i64 + %83 = load ptr, ptr %8, align 8 + %84 = load i64, ptr %23, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) - store ptr %85, ptr %6, align 8 - store i64 %86, ptr %77, align 8 - %87 = icmp ult i64 %86, 65 - %.0.i = select i1 %87, ptr %6, ptr %85 - %88 = lshr i64 %84, 3 - %89 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %88 - %90 = load i8, ptr %89, align 1, !tbaa !38 - %91 = zext i8 %90 to i32 - %92 = and i32 %83, 7 - %93 = shl nuw nsw i32 1, %92 - %94 = and i32 %93, %91 - %.not122 = icmp eq i32 %94, 0 + store ptr %83, ptr %6, align 8 + store i64 %84, ptr %75, align 8 + %85 = icmp ult i64 %84, 65 + %.0.i = select i1 %85, ptr %6, ptr %83 + %86 = lshr i64 %82, 3 + %87 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %86 + %88 = load i8, ptr %87, align 1, !tbaa !38 + %89 = zext i8 %88 to i32 + %90 = and i32 %81, 7 + %91 = shl nuw nsw i32 1, %90 + %92 = and i32 %91, %89 + %.not122 = icmp eq i32 %92, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) - br i1 %.not122, label %95, label %96 - -95: ; preds = %78 - call fastcc void @dfs(ptr noundef nonnull %0, ptr noundef nonnull %79, ptr noundef %59, ptr noundef %8) - br label %96 - -96: ; preds = %78, %95 - %97 = getelementptr inbounds nuw i8, ptr %.066130, i64 24 - %98 = getelementptr inbounds nuw i8, ptr %.066130, i64 32 - %99 = load ptr, ptr %98, align 8, !tbaa !40 - %.not78 = icmp eq ptr %99, null - br i1 %.not78, label %.loopexit, label %78, !llvm.loop !49 - -.loopexit: ; preds = %96, %gv_alloc.exit, %bitarray_new.exit - %.069 = phi ptr [ null, %bitarray_new.exit ], [ %59, %gv_alloc.exit ], [ %59, %96 ] - %.067 = phi i64 [ 0, %bitarray_new.exit ], [ 1, %gv_alloc.exit ], [ 1, %96 ] - %100 = call ptr @agfstnode(ptr noundef %0) #14 - %.not79131 = icmp eq ptr %100, null + br i1 %.not122, label %93, label %94 + +93: ; preds = %76 + call fastcc void @dfs(ptr noundef nonnull %0, ptr noundef nonnull %77, ptr noundef %57, ptr noundef %8) + br label %94 + +94: ; preds = %76, %93 + %95 = getelementptr inbounds nuw i8, ptr %.066130, i64 24 + %96 = getelementptr inbounds nuw i8, ptr %.066130, i64 32 + %97 = load ptr, ptr %96, align 8, !tbaa !40 + %.not78 = icmp eq ptr %97, null + br i1 %.not78, label %.loopexit, label %76, !llvm.loop !49 + +.loopexit: ; preds = %94, %gv_alloc.exit, %bitarray_new.exit + %.069 = phi ptr [ null, %bitarray_new.exit ], [ %57, %gv_alloc.exit ], [ %57, %94 ] + %.067 = phi i64 [ 0, %bitarray_new.exit ], [ 1, %gv_alloc.exit ], [ 1, %94 ] + %98 = call ptr @agfstnode(ptr noundef %0) #14 + %.not79131 = icmp eq ptr %98, null br i1 %.not79131, label %._crit_edge, label %.lr.ph136 .lr.ph136: ; preds = %.loopexit - %101 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %102 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %103 = getelementptr inbounds nuw i8, ptr %7, i64 8 - %104 = getelementptr inbounds nuw i8, ptr %7, i64 16 - br label %105 - -105: ; preds = %.lr.ph136, %161 - %.0135 = phi i32 [ 0, %.lr.ph136 ], [ %.1, %161 ] - %.064134 = phi ptr [ %100, %.lr.ph136 ], [ %162, %161 ] - %.168133 = phi i64 [ %.067, %.lr.ph136 ], [ %.2, %161 ] - %.170132 = phi ptr [ %.069, %.lr.ph136 ], [ %.271, %161 ] - %106 = getelementptr inbounds nuw i8, ptr %.064134, i64 16 - %107 = load ptr, ptr %106, align 8, !tbaa !8 - %108 = getelementptr inbounds nuw i8, ptr %107, i64 164 - %109 = load i32, ptr %108, align 4, !tbaa !43 - %110 = sext i32 %109 to i64 - %111 = load ptr, ptr %8, align 8 - %112 = load i64, ptr %25, align 8 + %99 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %100 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %101 = getelementptr inbounds nuw i8, ptr %7, i64 8 + %102 = getelementptr inbounds nuw i8, ptr %7, i64 16 + br label %103 + +103: ; preds = %.lr.ph136, %159 + %.0135 = phi i32 [ 0, %.lr.ph136 ], [ %.1, %159 ] + %.064134 = phi ptr [ %98, %.lr.ph136 ], [ %160, %159 ] + %.168133 = phi i64 [ %.067, %.lr.ph136 ], [ %.2, %159 ] + %.170132 = phi ptr [ %.069, %.lr.ph136 ], [ %.271, %159 ] + %104 = getelementptr inbounds nuw i8, ptr %.064134, i64 16 + %105 = load ptr, ptr %104, align 8, !tbaa !8 + %106 = getelementptr inbounds nuw i8, ptr %105, i64 164 + %107 = load i32, ptr %106, align 4, !tbaa !43 + %108 = sext i32 %107 to i64 + %109 = load ptr, ptr %8, align 8 + %110 = load i64, ptr %23, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) - store ptr %111, ptr %5, align 8 - store i64 %112, ptr %101, align 8 - %113 = icmp ult i64 %112, 65 - %.0.i88 = select i1 %113, ptr %5, ptr %111 - %114 = lshr i64 %110, 3 - %115 = getelementptr inbounds nuw i8, ptr %.0.i88, i64 %114 - %116 = load i8, ptr %115, align 1, !tbaa !38 - %117 = zext i8 %116 to i32 - %118 = and i32 %109, 7 - %119 = shl nuw nsw i32 1, %118 - %120 = and i32 %119, %117 - %.not123 = icmp eq i32 %120, 0 + store ptr %109, ptr %5, align 8 + store i64 %110, ptr %99, align 8 + %111 = icmp ult i64 %110, 65 + %.0.i88 = select i1 %111, ptr %5, ptr %109 + %112 = lshr i64 %108, 3 + %113 = getelementptr inbounds nuw i8, ptr %.0.i88, i64 %112 + %114 = load i8, ptr %113, align 1, !tbaa !38 + %115 = zext i8 %114 to i32 + %116 = and i32 %107, 7 + %117 = shl nuw nsw i32 1, %116 + %118 = and i32 %117, %115 + %.not123 = icmp eq i32 %118, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) - br i1 %.not123, label %121, label %161 + br i1 %.not123, label %119, label %159 -121: ; preds = %105 - %122 = getelementptr inbounds nuw i8, ptr %107, i64 163 - %123 = load i8, ptr %122, align 1, !tbaa !51 - %.not85 = icmp eq i8 %123, 3 - br i1 %.not85, label %124, label %161 +119: ; preds = %103 + %120 = getelementptr inbounds nuw i8, ptr %105, i64 163 + %121 = load i8, ptr %120, align 1, !tbaa !51 + %.not85 = icmp eq i8 %121, 3 + br i1 %.not85, label %122, label %159 -124: ; preds = %121 +122: ; preds = %119 %.not86 = icmp eq ptr %.170132, null - br i1 %.not86, label %125, label %160 - -125: ; preds = %124 - %126 = call ptr @agnameof(ptr noundef %0) #14 - %127 = add i64 %.168133, 1 - %128 = load i64, ptr @C_cnt, align 8, !tbaa !37 - %129 = add i64 %128, %.168133 - call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %126, i64 noundef %129) - %.val.i89 = load i8, ptr %102, align 1, !tbaa !38 + br i1 %.not86, label %123, label %158 + +123: ; preds = %122 + %124 = call ptr @agnameof(ptr noundef %0) #14 + %125 = add i64 %.168133, 1 + %126 = load i64, ptr @C_cnt, align 8, !tbaa !37 + %127 = add i64 %126, %.168133 + call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %124, i64 noundef %127) + %.val.i89 = load i8, ptr %100, align 1, !tbaa !38 switch i8 %.val.i89, label %agxblen.exit.i.i102 [ - i8 -1, label %131 + i8 -1, label %129 i8 31, label %agxbclear.exit.thread.i90 ] -agxblen.exit.i.i102: ; preds = %125 - %130 = zext i8 %.val.i89 to i64 +agxblen.exit.i.i102: ; preds = %123 + %128 = zext i8 %.val.i89 to i64 br label %agxbsizeof.exit.i.i91 -131: ; preds = %125 - %132 = load i64, ptr %103, align 8, !tbaa !38 - %133 = load i64, ptr %104, align 8, !tbaa !38 +129: ; preds = %123 + %130 = load i64, ptr %101, align 8, !tbaa !38 + %131 = load i64, ptr %102, align 8, !tbaa !38 br label %agxbsizeof.exit.i.i91 -agxbsizeof.exit.i.i91: ; preds = %131, %agxblen.exit.i.i102 - %.0.i20.i.i92 = phi i64 [ %132, %131 ], [ %130, %agxblen.exit.i.i102 ] - %.0.i14.i.i93 = phi i64 [ %133, %131 ], [ 31, %agxblen.exit.i.i102 ] +agxbsizeof.exit.i.i91: ; preds = %129, %agxblen.exit.i.i102 + %.0.i20.i.i92 = phi i64 [ %130, %129 ], [ %128, %agxblen.exit.i.i102 ] + %.0.i14.i.i93 = phi i64 [ %131, %129 ], [ 31, %agxblen.exit.i.i102 ] %.not.i5.i94 = icmp ult i64 %.0.i20.i.i92, %.0.i14.i.i93 - br i1 %.not.i5.i94, label %135, label %134 + br i1 %.not.i5.i94, label %133, label %132 -134: ; preds = %agxbsizeof.exit.i.i91 +132: ; preds = %agxbsizeof.exit.i.i91 call fastcc void @agxbmore(ptr noundef nonnull %7, i64 noundef 1) - %.val.i15.pre.i.i95 = load i8, ptr %102, align 1, !tbaa !38 - br label %135 + %.val.i15.pre.i.i95 = load i8, ptr %100, align 1, !tbaa !38 + br label %133 -135: ; preds = %134, %agxbsizeof.exit.i.i91 - %.val.i15.i.i96 = phi i8 [ %.val.i15.pre.i.i95, %134 ], [ %.val.i89, %agxbsizeof.exit.i.i91 ] +133: ; preds = %132, %agxbsizeof.exit.i.i91 + %.val.i15.i.i96 = phi i8 [ %.val.i15.pre.i.i95, %132 ], [ %.val.i89, %agxbsizeof.exit.i.i91 ] %.not.i16.i.i97 = icmp eq i8 %.val.i15.i.i96, -1 - br i1 %.not.i16.i.i97, label %141, label %136 - -136: ; preds = %135 - %137 = zext i8 %.val.i15.i.i96 to i64 - %138 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %137 - store i8 0, ptr %138, align 1, !tbaa !38 - %139 = load i8, ptr %102, align 1, !tbaa !38 - %140 = add i8 %139, 1 - store i8 %140, ptr %102, align 1, !tbaa !38 + br i1 %.not.i16.i.i97, label %139, label %134 + +134: ; preds = %133 + %135 = zext i8 %.val.i15.i.i96 to i64 + %136 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %135 + store i8 0, ptr %136, align 1, !tbaa !38 + %137 = load i8, ptr %100, align 1, !tbaa !38 + %138 = add i8 %137, 1 + store i8 %138, ptr %100, align 1, !tbaa !38 br label %agxbputc.exit.i98 -141: ; preds = %135 - %142 = load i64, ptr %103, align 8, !tbaa !38 - %143 = load ptr, ptr %7, align 8, !tbaa !38 - %144 = getelementptr inbounds nuw i8, ptr %143, i64 %142 - store i8 0, ptr %144, align 1, !tbaa !38 - %145 = load i64, ptr %103, align 8, !tbaa !38 - %146 = add i64 %145, 1 - store i64 %146, ptr %103, align 8, !tbaa !38 - %.val.i6.pr.i101 = load i8, ptr %102, align 1, !tbaa !38 +139: ; preds = %133 + %140 = load i64, ptr %101, align 8, !tbaa !38 + %141 = load ptr, ptr %7, align 8, !tbaa !38 + %142 = getelementptr inbounds nuw i8, ptr %141, i64 %140 + store i8 0, ptr %142, align 1, !tbaa !38 + %143 = load i64, ptr %101, align 8, !tbaa !38 + %144 = add i64 %143, 1 + store i64 %144, ptr %101, align 8, !tbaa !38 + %.val.i6.pr.i101 = load i8, ptr %100, align 1, !tbaa !38 br label %agxbputc.exit.i98 -agxbputc.exit.i98: ; preds = %141, %136 - %.val.i8.pr.i99 = phi i8 [ %.val.i6.pr.i101, %141 ], [ %140, %136 ] +agxbputc.exit.i98: ; preds = %139, %134 + %.val.i8.pr.i99 = phi i8 [ %.val.i6.pr.i101, %139 ], [ %138, %134 ] %.not.i7.i100 = icmp eq i8 %.val.i8.pr.i99, -1 - br i1 %.not.i7.i100, label %147, label %agxbclear.exit.thread.i90 + br i1 %.not.i7.i100, label %145, label %agxbclear.exit.thread.i90 -agxbclear.exit.thread.i90: ; preds = %agxbputc.exit.i98, %125 - store i8 0, ptr %102, align 1, !tbaa !38 +agxbclear.exit.thread.i90: ; preds = %agxbputc.exit.i98, %123 + store i8 0, ptr %100, align 1, !tbaa !38 br label %agxbuse.exit103 -147: ; preds = %agxbputc.exit.i98 - store i64 0, ptr %103, align 8, !tbaa !38 - %148 = load ptr, ptr %7, align 8, !tbaa !38 +145: ; preds = %agxbputc.exit.i98 + store i64 0, ptr %101, align 8, !tbaa !38 + %146 = load ptr, ptr %7, align 8, !tbaa !38 br label %agxbuse.exit103 -agxbuse.exit103: ; preds = %agxbclear.exit.thread.i90, %147 - %149 = phi ptr [ %148, %147 ], [ %7, %agxbclear.exit.thread.i90 ] - %150 = call ptr @agsubg(ptr noundef %0, ptr noundef %149, i32 noundef 1) #14 - %151 = call ptr @agbindrec(ptr noundef %150, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 - %152 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 - %153 = icmp eq ptr %152, null - br i1 %153, label %154, label %gv_alloc.exit104 - -154: ; preds = %agxbuse.exit103 - %155 = load ptr, ptr @stderr, align 8, !tbaa !3 - %156 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %155, ptr noundef nonnull @.str.4, i64 noundef 64) #16 +agxbuse.exit103: ; preds = %agxbclear.exit.thread.i90, %145 + %147 = phi ptr [ %146, %145 ], [ %7, %agxbclear.exit.thread.i90 ] + %148 = call ptr @agsubg(ptr noundef %0, ptr noundef %147, i32 noundef 1) #14 + %149 = call ptr @agbindrec(ptr noundef %148, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 + %150 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 + %151 = icmp eq ptr %150, null + br i1 %151, label %152, label %gv_alloc.exit104 + +152: ; preds = %agxbuse.exit103 + %153 = load ptr, ptr @stderr, align 8, !tbaa !3 + %154 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %153, ptr noundef nonnull @.str.4, i64 noundef 64) #16 call fastcc void @graphviz_exit() #17 unreachable gv_alloc.exit104: ; preds = %agxbuse.exit103 - %157 = getelementptr inbounds nuw i8, ptr %150, i64 16 - %158 = load ptr, ptr %157, align 8, !tbaa !8 - %159 = getelementptr inbounds nuw i8, ptr %158, i64 160 - store ptr %152, ptr %159, align 8, !tbaa !14 - br label %160 - -160: ; preds = %gv_alloc.exit104, %124 - %.372 = phi ptr [ %.170132, %124 ], [ %150, %gv_alloc.exit104 ] - %.3 = phi i64 [ %.168133, %124 ], [ %127, %gv_alloc.exit104 ] + %155 = getelementptr inbounds nuw i8, ptr %148, i64 16 + %156 = load ptr, ptr %155, align 8, !tbaa !8 + %157 = getelementptr inbounds nuw i8, ptr %156, i64 160 + store ptr %150, ptr %157, align 8, !tbaa !14 + br label %158 + +158: ; preds = %gv_alloc.exit104, %122 + %.372 = phi ptr [ %.170132, %122 ], [ %148, %gv_alloc.exit104 ] + %.3 = phi i64 [ %.168133, %122 ], [ %125, %gv_alloc.exit104 ] call fastcc void @dfs(ptr noundef %0, ptr noundef nonnull %.064134, ptr noundef nonnull %.372, ptr noundef %8) - br label %161 - -161: ; preds = %121, %105, %160 - %.271 = phi ptr [ %.170132, %105 ], [ %.170132, %121 ], [ %.372, %160 ] - %.2 = phi i64 [ %.168133, %105 ], [ %.168133, %121 ], [ %.3, %160 ] - %.1 = phi i32 [ %.0135, %105 ], [ %.0135, %121 ], [ 1, %160 ] - %162 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.064134) #14 - %.not79 = icmp eq ptr %162, null - br i1 %.not79, label %._crit_edge, label %105, !llvm.loop !52 - -._crit_edge: ; preds = %161, %.loopexit - %.170.lcssa = phi ptr [ %.069, %.loopexit ], [ %.271, %161 ] - %.168.lcssa = phi i64 [ %.067, %.loopexit ], [ %.2, %161 ] - %.0.lcssa = phi i32 [ 0, %.loopexit ], [ %.1, %161 ] + br label %159 + +159: ; preds = %119, %103, %158 + %.271 = phi ptr [ %.170132, %103 ], [ %.170132, %119 ], [ %.372, %158 ] + %.2 = phi i64 [ %.168133, %103 ], [ %.168133, %119 ], [ %.3, %158 ] + %.1 = phi i32 [ %.0135, %103 ], [ %.0135, %119 ], [ 1, %158 ] + %160 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.064134) #14 + %.not79 = icmp eq ptr %160, null + br i1 %.not79, label %._crit_edge, label %103, !llvm.loop !52 + +._crit_edge: ; preds = %159, %.loopexit + %.170.lcssa = phi ptr [ %.069, %.loopexit ], [ %.271, %159 ] + %.168.lcssa = phi i64 [ %.067, %.loopexit ], [ %.2, %159 ] + %.0.lcssa = phi i32 [ 0, %.loopexit ], [ %.1, %159 ] %.not80 = icmp eq ptr %.170.lcssa, null - br i1 %.not80, label %165, label %163 + br i1 %.not80, label %163, label %161 -163: ; preds = %._crit_edge - %164 = call i64 @graphviz_node_induce(ptr noundef nonnull %.170.lcssa, ptr noundef null) #14 - br label %165 +161: ; preds = %._crit_edge + %162 = call i64 @graphviz_node_induce(ptr noundef nonnull %.170.lcssa, ptr noundef null) #14 + br label %163 -165: ; preds = %163, %._crit_edge - %166 = call ptr @agfstnode(ptr noundef %0) #14 - %.not81139 = icmp eq ptr %166, null +163: ; preds = %161, %._crit_edge + %164 = call ptr @agfstnode(ptr noundef %0) #14 + %.not81139 = icmp eq ptr %164, null br i1 %.not81139, label %._crit_edge144, label %.lr.ph143 -.lr.ph143: ; preds = %165 - %167 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %168 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %169 = getelementptr inbounds nuw i8, ptr %7, i64 8 - %170 = getelementptr inbounds nuw i8, ptr %7, i64 16 - br label %171 - -171: ; preds = %.lr.ph143, %223 - %.165141 = phi ptr [ %166, %.lr.ph143 ], [ %224, %223 ] - %.4140 = phi i64 [ %.168.lcssa, %.lr.ph143 ], [ %.5, %223 ] - %172 = getelementptr inbounds nuw i8, ptr %.165141, i64 16 - %173 = load ptr, ptr %172, align 8, !tbaa !8 - %174 = getelementptr inbounds nuw i8, ptr %173, i64 164 - %175 = load i32, ptr %174, align 4, !tbaa !43 - %176 = sext i32 %175 to i64 - %177 = load ptr, ptr %8, align 8 - %178 = load i64, ptr %25, align 8 +.lr.ph143: ; preds = %163 + %165 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %166 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %167 = getelementptr inbounds nuw i8, ptr %7, i64 8 + %168 = getelementptr inbounds nuw i8, ptr %7, i64 16 + br label %169 + +169: ; preds = %.lr.ph143, %221 + %.165141 = phi ptr [ %164, %.lr.ph143 ], [ %222, %221 ] + %.4140 = phi i64 [ %.168.lcssa, %.lr.ph143 ], [ %.5, %221 ] + %170 = getelementptr inbounds nuw i8, ptr %.165141, i64 16 + %171 = load ptr, ptr %170, align 8, !tbaa !8 + %172 = getelementptr inbounds nuw i8, ptr %171, i64 164 + %173 = load i32, ptr %172, align 4, !tbaa !43 + %174 = sext i32 %173 to i64 + %175 = load ptr, ptr %8, align 8 + %176 = load i64, ptr %23, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) - store ptr %177, ptr %4, align 8 - store i64 %178, ptr %167, align 8 - %179 = icmp ult i64 %178, 65 - %.0.i105 = select i1 %179, ptr %4, ptr %177 - %180 = lshr i64 %176, 3 - %181 = getelementptr inbounds nuw i8, ptr %.0.i105, i64 %180 - %182 = load i8, ptr %181, align 1, !tbaa !38 - %183 = zext i8 %182 to i32 - %184 = and i32 %175, 7 - %185 = shl nuw nsw i32 1, %184 - %186 = and i32 %185, %183 - %.not124 = icmp eq i32 %186, 0 + store ptr %175, ptr %4, align 8 + store i64 %176, ptr %165, align 8 + %177 = icmp ult i64 %176, 65 + %.0.i105 = select i1 %177, ptr %4, ptr %175 + %178 = lshr i64 %174, 3 + %179 = getelementptr inbounds nuw i8, ptr %.0.i105, i64 %178 + %180 = load i8, ptr %179, align 1, !tbaa !38 + %181 = zext i8 %180 to i32 + %182 = and i32 %173, 7 + %183 = shl nuw nsw i32 1, %182 + %184 = and i32 %183, %181 + %.not124 = icmp eq i32 %184, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) - br i1 %.not124, label %187, label %223 - -187: ; preds = %171 - %188 = call ptr @agnameof(ptr noundef %0) #14 - %189 = add i64 %.4140, 1 - %190 = load i64, ptr @C_cnt, align 8, !tbaa !37 - %191 = add i64 %190, %.4140 - call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str.2, ptr noundef %188, i64 noundef %191) - %.val.i106 = load i8, ptr %168, align 1, !tbaa !38 + br i1 %.not124, label %185, label %221 + +185: ; preds = %169 + %186 = call ptr @agnameof(ptr noundef %0) #14 + %187 = add i64 %.4140, 1 + %188 = load i64, ptr @C_cnt, align 8, !tbaa !37 + %189 = add i64 %188, %.4140 + call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str.2, ptr noundef %186, i64 noundef %189) + %.val.i106 = load i8, ptr %166, align 1, !tbaa !38 switch i8 %.val.i106, label %agxblen.exit.i.i119 [ - i8 -1, label %193 + i8 -1, label %191 i8 31, label %agxbclear.exit.thread.i107 ] -agxblen.exit.i.i119: ; preds = %187 - %192 = zext i8 %.val.i106 to i64 +agxblen.exit.i.i119: ; preds = %185 + %190 = zext i8 %.val.i106 to i64 br label %agxbsizeof.exit.i.i108 -193: ; preds = %187 - %194 = load i64, ptr %169, align 8, !tbaa !38 - %195 = load i64, ptr %170, align 8, !tbaa !38 +191: ; preds = %185 + %192 = load i64, ptr %167, align 8, !tbaa !38 + %193 = load i64, ptr %168, align 8, !tbaa !38 br label %agxbsizeof.exit.i.i108 -agxbsizeof.exit.i.i108: ; preds = %193, %agxblen.exit.i.i119 - %.0.i20.i.i109 = phi i64 [ %194, %193 ], [ %192, %agxblen.exit.i.i119 ] - %.0.i14.i.i110 = phi i64 [ %195, %193 ], [ 31, %agxblen.exit.i.i119 ] +agxbsizeof.exit.i.i108: ; preds = %191, %agxblen.exit.i.i119 + %.0.i20.i.i109 = phi i64 [ %192, %191 ], [ %190, %agxblen.exit.i.i119 ] + %.0.i14.i.i110 = phi i64 [ %193, %191 ], [ 31, %agxblen.exit.i.i119 ] %.not.i5.i111 = icmp ult i64 %.0.i20.i.i109, %.0.i14.i.i110 - br i1 %.not.i5.i111, label %197, label %196 + br i1 %.not.i5.i111, label %195, label %194 -196: ; preds = %agxbsizeof.exit.i.i108 +194: ; preds = %agxbsizeof.exit.i.i108 call fastcc void @agxbmore(ptr noundef nonnull %7, i64 noundef 1) - %.val.i15.pre.i.i112 = load i8, ptr %168, align 1, !tbaa !38 - br label %197 + %.val.i15.pre.i.i112 = load i8, ptr %166, align 1, !tbaa !38 + br label %195 -197: ; preds = %196, %agxbsizeof.exit.i.i108 - %.val.i15.i.i113 = phi i8 [ %.val.i15.pre.i.i112, %196 ], [ %.val.i106, %agxbsizeof.exit.i.i108 ] +195: ; preds = %194, %agxbsizeof.exit.i.i108 + %.val.i15.i.i113 = phi i8 [ %.val.i15.pre.i.i112, %194 ], [ %.val.i106, %agxbsizeof.exit.i.i108 ] %.not.i16.i.i114 = icmp eq i8 %.val.i15.i.i113, -1 - br i1 %.not.i16.i.i114, label %203, label %198 - -198: ; preds = %197 - %199 = zext i8 %.val.i15.i.i113 to i64 - %200 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %199 - store i8 0, ptr %200, align 1, !tbaa !38 - %201 = load i8, ptr %168, align 1, !tbaa !38 - %202 = add i8 %201, 1 - store i8 %202, ptr %168, align 1, !tbaa !38 + br i1 %.not.i16.i.i114, label %201, label %196 + +196: ; preds = %195 + %197 = zext i8 %.val.i15.i.i113 to i64 + %198 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %197 + store i8 0, ptr %198, align 1, !tbaa !38 + %199 = load i8, ptr %166, align 1, !tbaa !38 + %200 = add i8 %199, 1 + store i8 %200, ptr %166, align 1, !tbaa !38 br label %agxbputc.exit.i115 -203: ; preds = %197 - %204 = load i64, ptr %169, align 8, !tbaa !38 - %205 = load ptr, ptr %7, align 8, !tbaa !38 - %206 = getelementptr inbounds nuw i8, ptr %205, i64 %204 - store i8 0, ptr %206, align 1, !tbaa !38 - %207 = load i64, ptr %169, align 8, !tbaa !38 - %208 = add i64 %207, 1 - store i64 %208, ptr %169, align 8, !tbaa !38 - %.val.i6.pr.i118 = load i8, ptr %168, align 1, !tbaa !38 +201: ; preds = %195 + %202 = load i64, ptr %167, align 8, !tbaa !38 + %203 = load ptr, ptr %7, align 8, !tbaa !38 + %204 = getelementptr inbounds nuw i8, ptr %203, i64 %202 + store i8 0, ptr %204, align 1, !tbaa !38 + %205 = load i64, ptr %167, align 8, !tbaa !38 + %206 = add i64 %205, 1 + store i64 %206, ptr %167, align 8, !tbaa !38 + %.val.i6.pr.i118 = load i8, ptr %166, align 1, !tbaa !38 br label %agxbputc.exit.i115 -agxbputc.exit.i115: ; preds = %203, %198 - %.val.i8.pr.i116 = phi i8 [ %.val.i6.pr.i118, %203 ], [ %202, %198 ] +agxbputc.exit.i115: ; preds = %201, %196 + %.val.i8.pr.i116 = phi i8 [ %.val.i6.pr.i118, %201 ], [ %200, %196 ] %.not.i7.i117 = icmp eq i8 %.val.i8.pr.i116, -1 - br i1 %.not.i7.i117, label %209, label %agxbclear.exit.thread.i107 + br i1 %.not.i7.i117, label %207, label %agxbclear.exit.thread.i107 -agxbclear.exit.thread.i107: ; preds = %agxbputc.exit.i115, %187 - store i8 0, ptr %168, align 1, !tbaa !38 +agxbclear.exit.thread.i107: ; preds = %agxbputc.exit.i115, %185 + store i8 0, ptr %166, align 1, !tbaa !38 br label %agxbuse.exit120 -209: ; preds = %agxbputc.exit.i115 - store i64 0, ptr %169, align 8, !tbaa !38 - %210 = load ptr, ptr %7, align 8, !tbaa !38 +207: ; preds = %agxbputc.exit.i115 + store i64 0, ptr %167, align 8, !tbaa !38 + %208 = load ptr, ptr %7, align 8, !tbaa !38 br label %agxbuse.exit120 -agxbuse.exit120: ; preds = %agxbclear.exit.thread.i107, %209 - %211 = phi ptr [ %210, %209 ], [ %7, %agxbclear.exit.thread.i107 ] - %212 = call ptr @agsubg(ptr noundef %0, ptr noundef %211, i32 noundef 1) #14 - %213 = call ptr @agbindrec(ptr noundef %212, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 - %214 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 - %215 = icmp eq ptr %214, null - br i1 %215, label %216, label %gv_alloc.exit121 - -216: ; preds = %agxbuse.exit120 - %217 = load ptr, ptr @stderr, align 8, !tbaa !3 - %218 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %217, ptr noundef nonnull @.str.4, i64 noundef 64) #16 +agxbuse.exit120: ; preds = %agxbclear.exit.thread.i107, %207 + %209 = phi ptr [ %208, %207 ], [ %7, %agxbclear.exit.thread.i107 ] + %210 = call ptr @agsubg(ptr noundef %0, ptr noundef %209, i32 noundef 1) #14 + %211 = call ptr @agbindrec(ptr noundef %210, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 + %212 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 + %213 = icmp eq ptr %212, null + br i1 %213, label %214, label %gv_alloc.exit121 + +214: ; preds = %agxbuse.exit120 + %215 = load ptr, ptr @stderr, align 8, !tbaa !3 + %216 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.4, i64 noundef 64) #16 call fastcc void @graphviz_exit() #17 unreachable gv_alloc.exit121: ; preds = %agxbuse.exit120 - %219 = getelementptr inbounds nuw i8, ptr %212, i64 16 - %220 = load ptr, ptr %219, align 8, !tbaa !8 - %221 = getelementptr inbounds nuw i8, ptr %220, i64 160 - store ptr %214, ptr %221, align 8, !tbaa !14 - call fastcc void @dfs(ptr noundef %0, ptr noundef nonnull %.165141, ptr noundef %212, ptr noundef %8) - %222 = call i64 @graphviz_node_induce(ptr noundef %212, ptr noundef null) #14 - br label %223 - -223: ; preds = %171, %gv_alloc.exit121 - %.5 = phi i64 [ %.4140, %171 ], [ %189, %gv_alloc.exit121 ] - %224 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.165141) #14 - %.not81 = icmp eq ptr %224, null - br i1 %.not81, label %._crit_edge144, label %171, !llvm.loop !53 - -._crit_edge144: ; preds = %223, %165 - %.4.lcssa = phi i64 [ %.168.lcssa, %165 ], [ %.5, %223 ] - %225 = load i64, ptr %25, align 8, !tbaa !54 - %226 = icmp ugt i64 %225, 64 - br i1 %226, label %227, label %bitarray_reset.exit - -227: ; preds = %._crit_edge144 - %228 = load ptr, ptr %8, align 8, !tbaa !38 - call void @free(ptr noundef %228) #14 + %217 = getelementptr inbounds nuw i8, ptr %210, i64 16 + %218 = load ptr, ptr %217, align 8, !tbaa !8 + %219 = getelementptr inbounds nuw i8, ptr %218, i64 160 + store ptr %212, ptr %219, align 8, !tbaa !14 + call fastcc void @dfs(ptr noundef %0, ptr noundef nonnull %.165141, ptr noundef %210, ptr noundef %8) + %220 = call i64 @graphviz_node_induce(ptr noundef %210, ptr noundef null) #14 + br label %221 + +221: ; preds = %169, %gv_alloc.exit121 + %.5 = phi i64 [ %.4140, %169 ], [ %187, %gv_alloc.exit121 ] + %222 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.165141) #14 + %.not81 = icmp eq ptr %222, null + br i1 %.not81, label %._crit_edge144, label %169, !llvm.loop !53 + +._crit_edge144: ; preds = %221, %163 + %.4.lcssa = phi i64 [ %.168.lcssa, %163 ], [ %.5, %221 ] + %223 = load i64, ptr %23, align 8, !tbaa !54 + %224 = icmp ugt i64 %223, 64 + br i1 %224, label %225, label %bitarray_reset.exit + +225: ; preds = %._crit_edge144 + %226 = load ptr, ptr %8, align 8, !tbaa !38 + call void @free(ptr noundef %226) #14 br label %bitarray_reset.exit -bitarray_reset.exit: ; preds = %._crit_edge144, %227 - %229 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %.val87 = load i8, ptr %229, align 1, !tbaa !38 - %230 = icmp eq i8 %.val87, -1 - br i1 %230, label %231, label %agxbfree.exit +bitarray_reset.exit: ; preds = %._crit_edge144, %225 + %227 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %.val87 = load i8, ptr %227, align 1, !tbaa !38 + %228 = icmp eq i8 %.val87, -1 + br i1 %228, label %229, label %agxbfree.exit -231: ; preds = %bitarray_reset.exit +229: ; preds = %bitarray_reset.exit %.val = load ptr, ptr %7, align 8 call void @free(ptr noundef %.val) #14 br label %agxbfree.exit -agxbfree.exit: ; preds = %bitarray_reset.exit, %231 - %232 = load i64, ptr @C_cnt, align 8, !tbaa !37 - %233 = add i64 %232, %.4.lcssa - store i64 %233, ptr @C_cnt, align 8, !tbaa !37 +agxbfree.exit: ; preds = %bitarray_reset.exit, %229 + %230 = load i64, ptr @C_cnt, align 8, !tbaa !37 + %231 = add i64 %230, %.4.lcssa + store i64 %231, ptr @C_cnt, align 8, !tbaa !37 %.not82 = icmp eq ptr %1, null - br i1 %.not82, label %235, label %234 + br i1 %.not82, label %233, label %232 -234: ; preds = %agxbfree.exit +232: ; preds = %agxbfree.exit store i64 %.4.lcssa, ptr %1, align 8, !tbaa !37 - br label %235 + br label %233 -235: ; preds = %234, %agxbfree.exit +233: ; preds = %232, %agxbfree.exit %.not83 = icmp eq ptr %2, null - br i1 %.not83, label %237, label %236 + br i1 %.not83, label %235, label %234 -236: ; preds = %235 +234: ; preds = %233 store i32 %.0.lcssa, ptr %2, align 4, !tbaa !56 - br label %237 + br label %235 -237: ; preds = %236, %235 - %238 = add i64 %.4.lcssa, 1 - %.not.i = icmp eq i64 %238, 0 - br i1 %.not.i, label %.thread.i, label %240 +235: ; preds = %234, %233 + %236 = add i64 %.4.lcssa, 1 + %.not.i = icmp eq i64 %236, 0 + br i1 %.not.i, label %.thread.i, label %238 -.thread.i: ; preds = %237 - %239 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #15 +.thread.i: ; preds = %235 + %237 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #15 br label %gv_calloc.exit -240: ; preds = %237 - %mul.ov.i = icmp ugt i64 %238, 2305843009213693951 - br i1 %mul.ov.i, label %241, label %244 +238: ; preds = %235 + %mul.ov.i = icmp ugt i64 %236, 2305843009213693951 + br i1 %mul.ov.i, label %239, label %242 -241: ; preds = %240 - %242 = load ptr, ptr @stderr, align 8, !tbaa !3 - %243 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %242, ptr noundef nonnull @.str.3, i64 noundef %238, i64 noundef 8) #16 +239: ; preds = %238 + %240 = load ptr, ptr @stderr, align 8, !tbaa !3 + %241 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %240, ptr noundef nonnull @.str.3, i64 noundef %236, i64 noundef 8) #16 call fastcc void @graphviz_exit() #17 unreachable -244: ; preds = %240 - %245 = call noalias ptr @calloc(i64 noundef %238, i64 noundef 8) #15 - %246 = icmp eq ptr %245, null - br i1 %246, label %247, label %gv_calloc.exit +242: ; preds = %238 + %243 = call noalias ptr @calloc(i64 noundef %236, i64 noundef 8) #15 + %244 = icmp eq ptr %243, null + br i1 %244, label %245, label %gv_calloc.exit -247: ; preds = %244 - %248 = load ptr, ptr @stderr, align 8, !tbaa !3 - %249 = shl nuw i64 %238, 3 - %250 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %248, ptr noundef nonnull @.str.4, i64 noundef %249) #16 +245: ; preds = %242 + %246 = load ptr, ptr @stderr, align 8, !tbaa !3 + %247 = shl nuw i64 %236, 3 + %248 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %246, ptr noundef nonnull @.str.4, i64 noundef %247) #16 call fastcc void @graphviz_exit() #17 unreachable -gv_calloc.exit: ; preds = %.thread.i, %244 - %251 = phi ptr [ %239, %.thread.i ], [ %245, %244 ] - %252 = call ptr @agfstsubg(ptr noundef %0) #14 - %.not84146 = icmp eq ptr %252, null +gv_calloc.exit: ; preds = %.thread.i, %242 + %249 = phi ptr [ %237, %.thread.i ], [ %243, %242 ] + %250 = call ptr @agfstsubg(ptr noundef %0) #14 + %.not84146 = icmp eq ptr %250, null br i1 %.not84146, label %._crit_edge150, label %.lr.ph149 .lr.ph149: ; preds = %gv_calloc.exit, %.lr.ph149 - %.063148 = phi ptr [ %253, %.lr.ph149 ], [ %251, %gv_calloc.exit ] - %.473147 = phi ptr [ %254, %.lr.ph149 ], [ %252, %gv_calloc.exit ] - %253 = getelementptr inbounds nuw i8, ptr %.063148, i64 8 + %.063148 = phi ptr [ %251, %.lr.ph149 ], [ %249, %gv_calloc.exit ] + %.473147 = phi ptr [ %252, %.lr.ph149 ], [ %250, %gv_calloc.exit ] + %251 = getelementptr inbounds nuw i8, ptr %.063148, i64 8 store ptr %.473147, ptr %.063148, align 8, !tbaa !57 - %254 = call ptr @agnxtsubg(ptr noundef nonnull %.473147) #14 - %.not84 = icmp eq ptr %254, null + %252 = call ptr @agnxtsubg(ptr noundef nonnull %.473147) #14 + %.not84 = icmp eq ptr %252, null br i1 %.not84, label %._crit_edge150, label %.lr.ph149, !llvm.loop !58 ._crit_edge150: ; preds = %.lr.ph149, %gv_calloc.exit - %.063.lcssa = phi ptr [ %251, %gv_calloc.exit ], [ %253, %.lr.ph149 ] + %.063.lcssa = phi ptr [ %249, %gv_calloc.exit ], [ %251, %.lr.ph149 ] store ptr null, ptr %.063.lcssa, align 8, !tbaa !57 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #14 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #14 - ret ptr %251 + ret ptr %249 } ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) diff --git a/bench/graphviz/optimized/neatoinit.ll b/bench/graphviz/optimized/neatoinit.ll index 5d8593af154..dbac7e6f95a 100644 --- a/bench/graphviz/optimized/neatoinit.ll +++ b/bench/graphviz/optimized/neatoinit.ll @@ -2199,7 +2199,7 @@ define internal fastcc void @neatoLayout(ptr noundef %0, ptr noundef %1, i32 nou %25 = load i32, ptr @MaxIter, align 4 %26 = icmp slt i32 %25, 0 %or.cond = select i1 %24, i1 true, i1 %26 - br i1 %or.cond, label %407, label %27 + br i1 %or.cond, label %405, label %27 27: ; preds = %22 switch i32 %2, label %101 [ @@ -2363,11 +2363,11 @@ mds_model.exit.i: ; preds = %._crit_edge.i.i, %9 kkNeato.exit: ; preds = %mds_model.exit.i, %95 tail call void @solve_model(ptr noundef %1, i32 noundef range(i32 2, -2147483648) %23) #22 - br label %407 + br label %405 100: ; preds = %27 tail call void @sgd(ptr noundef %1, i32 noundef %3) #22 - br label %407 + br label %405 101: ; preds = %27 %102 = load i16, ptr @Ndim, align 2, !tbaa !43 @@ -2484,7 +2484,7 @@ gv_calloc.exit106.i: ; preds = %124, %.thread.i105. 160: ; preds = %156, %153 %.not92.i = icmp eq i32 %2, 1 - br i1 %.not92.i, label %378, label %161 + br i1 %.not92.i, label %376, label %161 161: ; preds = %160 %162 = call ptr @agattr(ptr noundef %1, i32 noundef 0, ptr noundef nonnull @.str.65, ptr noundef null) #22 @@ -2497,7 +2497,7 @@ gv_calloc.exit106.i: ; preds = %124, %.thread.i105. %167 = zext i16 %166 to i32 %168 = load i32, ptr @MaxIter, align 4, !tbaa !53 %169 = call i32 @stress_majorization_with_hierarchy(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %165, i32 noundef %167, i32 noundef %spec.select.i, i32 noundef range(i32 0, 4) %3, i32 noundef %168, double noundef %163) #22 - br label %384 + br label %382 170: ; preds = %161 call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %10) #22 @@ -2513,327 +2513,319 @@ gv_calloc.exit106.i: ; preds = %124, %.thread.i105. %177 = icmp ne i32 %176, 0 %178 = zext i1 %177 to i64 %179 = add nuw nsw i64 %175, %178 - %.not.i.i.i.i = icmp eq i64 %179, 0 - br i1 %.not.i.i.i.i, label %.thread.i.i.i.i, label %181 + %180 = call noalias ptr @calloc(i64 noundef %179, i64 noundef 1) #23 + %181 = icmp eq ptr %180, null + br i1 %181, label %182, label %bitarray_new.exit.i.i -.thread.i.i.i.i: ; preds = %174 - %180 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 1) #23 - br label %bitarray_new.exit.i.i - -181: ; preds = %174 - %182 = call noalias ptr @calloc(i64 noundef %179, i64 noundef 1) #23 - %183 = icmp eq ptr %182, null - br i1 %183, label %184, label %bitarray_new.exit.i.i - -184: ; preds = %181 - %185 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %186 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %185, ptr noundef nonnull @.str.21, i64 noundef %179) #24, !noalias !143 +182: ; preds = %174 + %183 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %184 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %183, ptr noundef nonnull @.str.21, i64 noundef %179) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -bitarray_new.exit.i.i: ; preds = %181, %.thread.i.i.i.i, %170 - %.sroa.0.0.i.i.i = phi ptr [ null, %170 ], [ %180, %.thread.i.i.i.i ], [ %182, %181 ] +bitarray_new.exit.i.i: ; preds = %174, %170 + %.sroa.0.0.i.i.i = phi ptr [ null, %170 ], [ %180, %174 ] store ptr %.sroa.0.0.i.i.i, ptr %7, align 8, !noalias !143 - %187 = getelementptr inbounds nuw i8, ptr %7, i64 8 - store i64 %172, ptr %187, align 8, !noalias !143 - %188 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 - %189 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 - %.not79.i.i = icmp eq ptr %189, null + %185 = getelementptr inbounds nuw i8, ptr %7, i64 8 + store i64 %172, ptr %185, align 8, !noalias !143 + %186 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 + %187 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 + %.not79.i.i = icmp eq ptr %187, null br i1 %.not79.i.i, label %.thread.i57.i.i, label %.lr.ph.i.i25 .lr.ph.i.i25: ; preds = %bitarray_new.exit.i.i, %.lr.ph.i.i25 %.04081.i.i = phi i32 [ %spec.select.i.i, %.lr.ph.i.i25 ], [ 0, %bitarray_new.exit.i.i ] - %.04980.i.i = phi ptr [ %192, %.lr.ph.i.i25 ], [ %189, %bitarray_new.exit.i.i ] - %190 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 - %191 = zext i1 %190 to i32 - %spec.select.i.i = add nuw nsw i32 %.04081.i.i, %191 - %192 = call ptr @agnxtsubg(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 - %.not.i107.i = icmp eq ptr %192, null + %.04980.i.i = phi ptr [ %190, %.lr.ph.i.i25 ], [ %187, %bitarray_new.exit.i.i ] + %188 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 + %189 = zext i1 %188 to i32 + %spec.select.i.i = add nuw nsw i32 %.04081.i.i, %189 + %190 = call ptr @agnxtsubg(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 + %.not.i107.i = icmp eq ptr %190, null br i1 %.not.i107.i, label %._crit_edge.i.i26, label %.lr.ph.i.i25, !llvm.loop !146 ._crit_edge.i.i26: ; preds = %.lr.ph.i.i25 - %193 = zext nneg i32 %spec.select.i.i to i64 + %191 = zext nneg i32 %spec.select.i.i to i64 %.not.i.i.i = icmp eq i32 %spec.select.i.i, 0 - br i1 %.not.i.i.i, label %.thread.i57.i.i, label %194 + br i1 %.not.i.i.i, label %.thread.i57.i.i, label %192 -194: ; preds = %._crit_edge.i.i26 - %195 = call noalias ptr @calloc(i64 noundef %193, i64 noundef 8) #23 - %196 = icmp eq ptr %195, null - br i1 %196, label %197, label %203 +192: ; preds = %._crit_edge.i.i26 + %193 = call noalias ptr @calloc(i64 noundef %191, i64 noundef 8) #23 + %194 = icmp eq ptr %193, null + br i1 %194, label %195, label %201 -197: ; preds = %194 - %198 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %199 = shl nuw nsw i64 %193, 3 - %200 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %198, ptr noundef nonnull @.str.21, i64 noundef %199) #24, !noalias !143 +195: ; preds = %192 + %196 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %197 = shl nuw nsw i64 %191, 3 + %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef nonnull @.str.21, i64 noundef %197) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable .thread.i57.i.i: ; preds = %._crit_edge.i.i26, %bitarray_new.exit.i.i - %201 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #23 - %202 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 + %199 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #23 + %200 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 br label %gv_calloc.exit58.i.i -203: ; preds = %194 - %204 = call noalias ptr @calloc(i64 noundef %193, i64 noundef 4) #23 - %205 = icmp eq ptr %204, null - br i1 %205, label %206, label %gv_calloc.exit58.i.i +201: ; preds = %192 + %202 = call noalias ptr @calloc(i64 noundef %191, i64 noundef 4) #23 + %203 = icmp eq ptr %202, null + br i1 %203, label %204, label %gv_calloc.exit58.i.i -206: ; preds = %203 - %207 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %208 = shl nuw nsw i64 %193, 2 - %209 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %207, ptr noundef nonnull @.str.21, i64 noundef %208) #24, !noalias !143 +204: ; preds = %201 + %205 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %206 = shl nuw nsw i64 %191, 2 + %207 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %205, ptr noundef nonnull @.str.21, i64 noundef %206) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit58.i.i: ; preds = %203, %.thread.i57.i.i - %.sroa.9.0.i = phi i32 [ 0, %.thread.i57.i.i ], [ %spec.select.i.i, %203 ] - %.sroa.15.0.i = phi ptr [ %201, %.thread.i57.i.i ], [ %195, %203 ] - %210 = phi ptr [ %202, %.thread.i57.i.i ], [ %204, %203 ] - %211 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 - %.not5194.i.i = icmp eq ptr %211, null +gv_calloc.exit58.i.i: ; preds = %201, %.thread.i57.i.i + %.sroa.9.0.i = phi i32 [ 0, %.thread.i57.i.i ], [ %spec.select.i.i, %201 ] + %.sroa.15.0.i = phi ptr [ %199, %.thread.i57.i.i ], [ %193, %201 ] + %208 = phi ptr [ %200, %.thread.i57.i.i ], [ %202, %201 ] + %209 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 + %.not5194.i.i = icmp eq ptr %209, null br i1 %.not5194.i.i, label %._crit_edge100.i.i, label %.lr.ph99.i.i .lr.ph99.i.i: ; preds = %gv_calloc.exit58.i.i, %.loopexit.i.i - %.sroa.17.0.i = phi i32 [ %.sroa.17.1.i, %.loopexit.i.i ], [ %188, %gv_calloc.exit58.i.i ] + %.sroa.17.0.i = phi i32 [ %.sroa.17.1.i, %.loopexit.i.i ], [ %186, %gv_calloc.exit58.i.i ] %.sroa.0.1.i = phi i32 [ %.sroa.0.2.i, %.loopexit.i.i ], [ 0, %gv_calloc.exit58.i.i ] - %.04498.i.i = phi ptr [ %.145.i.i, %.loopexit.i.i ], [ %210, %gv_calloc.exit58.i.i ] + %.04498.i.i = phi ptr [ %.145.i.i, %.loopexit.i.i ], [ %208, %gv_calloc.exit58.i.i ] %.04697.i.i = phi ptr [ %.147.i.i, %.loopexit.i.i ], [ %.sroa.15.0.i, %gv_calloc.exit58.i.i ] - %.15095.i.i = phi ptr [ %254, %.loopexit.i.i ], [ %211, %gv_calloc.exit58.i.i ] - %212 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - br i1 %212, label %213, label %.loopexit.i.i - -213: ; preds = %.lr.ph99.i.i - %214 = call i32 @agnnodes(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - store i32 %214, ptr %.04498.i.i, align 4, !tbaa !53, !noalias !143 - %215 = add nsw i32 %214, %.sroa.0.1.i - %216 = getelementptr inbounds nuw i8, ptr %.04498.i.i, i64 4 - %217 = sext i32 %214 to i64 - %.not.i59.i.i = icmp eq i32 %214, 0 - br i1 %.not.i59.i.i, label %.thread.i62.i.i, label %219 - -.thread.i62.i.i: ; preds = %213 - %218 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 + %.15095.i.i = phi ptr [ %252, %.loopexit.i.i ], [ %209, %gv_calloc.exit58.i.i ] + %210 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + br i1 %210, label %211, label %.loopexit.i.i + +211: ; preds = %.lr.ph99.i.i + %212 = call i32 @agnnodes(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + store i32 %212, ptr %.04498.i.i, align 4, !tbaa !53, !noalias !143 + %213 = add nsw i32 %212, %.sroa.0.1.i + %214 = getelementptr inbounds nuw i8, ptr %.04498.i.i, i64 4 + %215 = sext i32 %212 to i64 + %.not.i59.i.i = icmp eq i32 %212, 0 + br i1 %.not.i59.i.i, label %.thread.i62.i.i, label %217 + +.thread.i62.i.i: ; preds = %211 + %216 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 br label %gv_calloc.exit63.i.i -219: ; preds = %213 - %mul.ov.i61.i.i = icmp slt i32 %214, 0 - br i1 %mul.ov.i61.i.i, label %220, label %223 +217: ; preds = %211 + %mul.ov.i61.i.i = icmp slt i32 %212, 0 + br i1 %mul.ov.i61.i.i, label %218, label %221 -220: ; preds = %219 - %221 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %222 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %221, ptr noundef nonnull @.str.20, i64 noundef %217, i64 noundef 4) #24, !noalias !143 +218: ; preds = %217 + %219 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %220 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %219, ptr noundef nonnull @.str.20, i64 noundef %215, i64 noundef 4) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -223: ; preds = %219 - %224 = call noalias ptr @calloc(i64 noundef %217, i64 noundef 4) #23 - %225 = icmp eq ptr %224, null - br i1 %225, label %226, label %gv_calloc.exit63.i.i +221: ; preds = %217 + %222 = call noalias ptr @calloc(i64 noundef %215, i64 noundef 4) #23 + %223 = icmp eq ptr %222, null + br i1 %223, label %224, label %gv_calloc.exit63.i.i -226: ; preds = %223 - %227 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %228 = shl nuw nsw i64 %217, 2 - %229 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %227, ptr noundef nonnull @.str.21, i64 noundef %228) #24, !noalias !143 +224: ; preds = %221 + %225 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %226 = shl nuw nsw i64 %215, 2 + %227 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %225, ptr noundef nonnull @.str.21, i64 noundef %226) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit63.i.i: ; preds = %223, %.thread.i62.i.i - %230 = phi ptr [ %218, %.thread.i62.i.i ], [ %224, %223 ] - %231 = getelementptr inbounds nuw i8, ptr %.04697.i.i, i64 8 - store ptr %230, ptr %.04697.i.i, align 8, !tbaa !134, !noalias !143 - %232 = call ptr @agfstnode(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - %.not5290.i.i = icmp eq ptr %232, null +gv_calloc.exit63.i.i: ; preds = %221, %.thread.i62.i.i + %228 = phi ptr [ %216, %.thread.i62.i.i ], [ %222, %221 ] + %229 = getelementptr inbounds nuw i8, ptr %.04697.i.i, i64 8 + store ptr %228, ptr %.04697.i.i, align 8, !tbaa !134, !noalias !143 + %230 = call ptr @agfstnode(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + %.not5290.i.i = icmp eq ptr %230, null br i1 %.not5290.i.i, label %.loopexit.i.i, label %.lr.ph93.i.i .lr.ph93.i.i: ; preds = %gv_calloc.exit63.i.i, %bitarray_set.exit.i.i - %.sroa.17.3.i = phi i32 [ %252, %bitarray_set.exit.i.i ], [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ] - %.03992.i.i = phi ptr [ %240, %bitarray_set.exit.i.i ], [ %230, %gv_calloc.exit63.i.i ] - %.04891.i.i = phi ptr [ %253, %bitarray_set.exit.i.i ], [ %232, %gv_calloc.exit63.i.i ] - %233 = call ptr @agfstnode(ptr noundef %1) #22, !noalias !143 - %.not5382.i.i = icmp eq ptr %233, null + %.sroa.17.3.i = phi i32 [ %250, %bitarray_set.exit.i.i ], [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ] + %.03992.i.i = phi ptr [ %238, %bitarray_set.exit.i.i ], [ %228, %gv_calloc.exit63.i.i ] + %.04891.i.i = phi ptr [ %251, %bitarray_set.exit.i.i ], [ %230, %gv_calloc.exit63.i.i ] + %231 = call ptr @agfstnode(ptr noundef %1) #22, !noalias !143 + %.not5382.i.i = icmp eq ptr %231, null br i1 %.not5382.i.i, label %bitarray_set.exit.i.i, label %.lr.ph86.i.i -.lr.ph86.i.i: ; preds = %.lr.ph93.i.i, %237 - %.084.i.i = phi i32 [ %238, %237 ], [ 0, %.lr.ph93.i.i ] - %.03883.i.i = phi ptr [ %239, %237 ], [ %233, %.lr.ph93.i.i ] - %234 = load i32, ptr %.03883.i.i, align 8, !noalias !143 - %235 = load i32, ptr %.04891.i.i, align 8, !noalias !143 - %.unshifted.i.i = xor i32 %235, %234 - %236 = icmp ult i32 %.unshifted.i.i, 16 - br i1 %236, label %bitarray_set.exit.i.i, label %237 - -237: ; preds = %.lr.ph86.i.i - %238 = add nuw nsw i32 %.084.i.i, 1 - %239 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.03883.i.i) #22, !noalias !143 - %.not53.i.i = icmp eq ptr %239, null +.lr.ph86.i.i: ; preds = %.lr.ph93.i.i, %235 + %.084.i.i = phi i32 [ %236, %235 ], [ 0, %.lr.ph93.i.i ] + %.03883.i.i = phi ptr [ %237, %235 ], [ %231, %.lr.ph93.i.i ] + %232 = load i32, ptr %.03883.i.i, align 8, !noalias !143 + %233 = load i32, ptr %.04891.i.i, align 8, !noalias !143 + %.unshifted.i.i = xor i32 %233, %232 + %234 = icmp ult i32 %.unshifted.i.i, 16 + br i1 %234, label %bitarray_set.exit.i.i, label %235 + +235: ; preds = %.lr.ph86.i.i + %236 = add nuw nsw i32 %.084.i.i, 1 + %237 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.03883.i.i) #22, !noalias !143 + %.not53.i.i = icmp eq ptr %237, null br i1 %.not53.i.i, label %bitarray_set.exit.i.i, label %.lr.ph86.i.i, !llvm.loop !147 -bitarray_set.exit.i.i: ; preds = %237, %.lr.ph86.i.i, %.lr.ph93.i.i - %.0.lcssa.i.i = phi i32 [ 0, %.lr.ph93.i.i ], [ %.084.i.i, %.lr.ph86.i.i ], [ %238, %237 ] - %240 = getelementptr inbounds nuw i8, ptr %.03992.i.i, i64 4 +bitarray_set.exit.i.i: ; preds = %235, %.lr.ph86.i.i, %.lr.ph93.i.i + %.0.lcssa.i.i = phi i32 [ 0, %.lr.ph93.i.i ], [ %.084.i.i, %.lr.ph86.i.i ], [ %236, %235 ] + %238 = getelementptr inbounds nuw i8, ptr %.03992.i.i, i64 4 store i32 %.0.lcssa.i.i, ptr %.03992.i.i, align 4, !tbaa !53, !noalias !143 - %241 = load i64, ptr %187, align 8, !tbaa !148, !noalias !143 - %242 = icmp ult i64 %241, 65 - %243 = load ptr, ptr %7, align 8, !noalias !143 - %spec.select76.i.i = select i1 %242, ptr %7, ptr %243 - %244 = trunc i32 %.0.lcssa.i.i to i8 - %245 = and i8 %244, 7 - %246 = shl nuw i8 1, %245 - %247 = lshr i32 %.0.lcssa.i.i, 3 - %248 = zext nneg i32 %247 to i64 - %249 = getelementptr inbounds nuw i8, ptr %spec.select76.i.i, i64 %248 - %250 = load i8, ptr %249, align 1, !tbaa !42, !noalias !143 - %251 = or i8 %250, %246 - store i8 %251, ptr %249, align 1, !tbaa !42, !noalias !143 - %252 = add nsw i32 %.sroa.17.3.i, -1 - %253 = call ptr @agnxtnode(ptr noundef nonnull %.15095.i.i, ptr noundef nonnull %.04891.i.i) #22, !noalias !143 - %.not52.i.i = icmp eq ptr %253, null + %239 = load i64, ptr %185, align 8, !tbaa !148, !noalias !143 + %240 = icmp ult i64 %239, 65 + %241 = load ptr, ptr %7, align 8, !noalias !143 + %spec.select76.i.i = select i1 %240, ptr %7, ptr %241 + %242 = trunc i32 %.0.lcssa.i.i to i8 + %243 = and i8 %242, 7 + %244 = shl nuw i8 1, %243 + %245 = lshr i32 %.0.lcssa.i.i, 3 + %246 = zext nneg i32 %245 to i64 + %247 = getelementptr inbounds nuw i8, ptr %spec.select76.i.i, i64 %246 + %248 = load i8, ptr %247, align 1, !tbaa !42, !noalias !143 + %249 = or i8 %248, %244 + store i8 %249, ptr %247, align 1, !tbaa !42, !noalias !143 + %250 = add nsw i32 %.sroa.17.3.i, -1 + %251 = call ptr @agnxtnode(ptr noundef nonnull %.15095.i.i, ptr noundef nonnull %.04891.i.i) #22, !noalias !143 + %.not52.i.i = icmp eq ptr %251, null br i1 %.not52.i.i, label %.loopexit.i.i, label %.lr.ph93.i.i, !llvm.loop !150 .loopexit.i.i: ; preds = %bitarray_set.exit.i.i, %gv_calloc.exit63.i.i, %.lr.ph99.i.i - %.sroa.17.1.i = phi i32 [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ], [ %.sroa.17.0.i, %.lr.ph99.i.i ], [ %252, %bitarray_set.exit.i.i ] - %.sroa.0.2.i = phi i32 [ %215, %gv_calloc.exit63.i.i ], [ %.sroa.0.1.i, %.lr.ph99.i.i ], [ %215, %bitarray_set.exit.i.i ] - %.147.i.i = phi ptr [ %231, %gv_calloc.exit63.i.i ], [ %.04697.i.i, %.lr.ph99.i.i ], [ %231, %bitarray_set.exit.i.i ] - %.145.i.i = phi ptr [ %216, %gv_calloc.exit63.i.i ], [ %.04498.i.i, %.lr.ph99.i.i ], [ %216, %bitarray_set.exit.i.i ] - %254 = call ptr @agnxtsubg(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - %.not51.i.i = icmp eq ptr %254, null + %.sroa.17.1.i = phi i32 [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ], [ %.sroa.17.0.i, %.lr.ph99.i.i ], [ %250, %bitarray_set.exit.i.i ] + %.sroa.0.2.i = phi i32 [ %213, %gv_calloc.exit63.i.i ], [ %.sroa.0.1.i, %.lr.ph99.i.i ], [ %213, %bitarray_set.exit.i.i ] + %.147.i.i = phi ptr [ %229, %gv_calloc.exit63.i.i ], [ %.04697.i.i, %.lr.ph99.i.i ], [ %229, %bitarray_set.exit.i.i ] + %.145.i.i = phi ptr [ %214, %gv_calloc.exit63.i.i ], [ %.04498.i.i, %.lr.ph99.i.i ], [ %214, %bitarray_set.exit.i.i ] + %252 = call ptr @agnxtsubg(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + %.not51.i.i = icmp eq ptr %252, null br i1 %.not51.i.i, label %._crit_edge100.i.i, label %.lr.ph99.i.i, !llvm.loop !151 ._crit_edge100.i.i: ; preds = %.loopexit.i.i, %gv_calloc.exit58.i.i - %.sroa.17.2.i = phi i32 [ %188, %gv_calloc.exit58.i.i ], [ %.sroa.17.1.i, %.loopexit.i.i ] + %.sroa.17.2.i = phi i32 [ %186, %gv_calloc.exit58.i.i ], [ %.sroa.17.1.i, %.loopexit.i.i ] %.sroa.0.3.i = phi i32 [ 0, %gv_calloc.exit58.i.i ], [ %.sroa.0.2.i, %.loopexit.i.i ] - %255 = sext i32 %.sroa.9.0.i to i64 + %253 = sext i32 %.sroa.9.0.i to i64 %.not.i64.i.i = icmp eq i32 %.sroa.9.0.i, 0 - br i1 %.not.i64.i.i, label %.thread.i67.i.i, label %257 + br i1 %.not.i64.i.i, label %.thread.i67.i.i, label %255 .thread.i67.i.i: ; preds = %._crit_edge100.i.i - %256 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 32) #23 + %254 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 32) #23 br label %gv_calloc.exit68.i.i -257: ; preds = %._crit_edge100.i.i - %258 = call noalias ptr @calloc(i64 noundef %255, i64 noundef 32) #23 - %259 = icmp eq ptr %258, null - br i1 %259, label %260, label %gv_calloc.exit68.i.i +255: ; preds = %._crit_edge100.i.i + %256 = call noalias ptr @calloc(i64 noundef %253, i64 noundef 32) #23 + %257 = icmp eq ptr %256, null + br i1 %257, label %258, label %gv_calloc.exit68.i.i -260: ; preds = %257 - %261 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %262 = shl nuw nsw i64 %255, 5 - %263 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %261, ptr noundef nonnull @.str.21, i64 noundef %262) #24, !noalias !143 +258: ; preds = %255 + %259 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %260 = shl nuw nsw i64 %253, 5 + %261 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %259, ptr noundef nonnull @.str.21, i64 noundef %260) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit68.i.i: ; preds = %257, %.thread.i67.i.i - %264 = phi ptr [ %256, %.thread.i67.i.i ], [ %258, %257 ] - %265 = sext i32 %.sroa.17.2.i to i64 +gv_calloc.exit68.i.i: ; preds = %255, %.thread.i67.i.i + %262 = phi ptr [ %254, %.thread.i67.i.i ], [ %256, %255 ] + %263 = sext i32 %.sroa.17.2.i to i64 %.not.i69.i.i = icmp eq i32 %.sroa.17.2.i, 0 - br i1 %.not.i69.i.i, label %.thread.i72.i.i, label %267 + br i1 %.not.i69.i.i, label %.thread.i72.i.i, label %265 .thread.i72.i.i: ; preds = %gv_calloc.exit68.i.i - %266 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 + %264 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 br label %gv_calloc.exit73.i.i -267: ; preds = %gv_calloc.exit68.i.i +265: ; preds = %gv_calloc.exit68.i.i %mul.ov.i71.i.i = icmp slt i32 %.sroa.17.2.i, 0 - br i1 %mul.ov.i71.i.i, label %268, label %271 + br i1 %mul.ov.i71.i.i, label %266, label %269 -268: ; preds = %267 - %269 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %270 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %269, ptr noundef nonnull @.str.20, i64 noundef %265, i64 noundef 4) #24, !noalias !143 +266: ; preds = %265 + %267 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %268 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %267, ptr noundef nonnull @.str.20, i64 noundef %263, i64 noundef 4) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -271: ; preds = %267 - %272 = call noalias ptr @calloc(i64 noundef %265, i64 noundef 4) #23 - %273 = icmp eq ptr %272, null - br i1 %273, label %274, label %gv_calloc.exit73.i.i +269: ; preds = %265 + %270 = call noalias ptr @calloc(i64 noundef %263, i64 noundef 4) #23 + %271 = icmp eq ptr %270, null + br i1 %271, label %272, label %gv_calloc.exit73.i.i -274: ; preds = %271 - %275 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %276 = shl nuw nsw i64 %265, 2 - %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %275, ptr noundef nonnull @.str.21, i64 noundef %276) #24, !noalias !143 +272: ; preds = %269 + %273 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %274 = shl nuw nsw i64 %263, 2 + %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %273, ptr noundef nonnull @.str.21, i64 noundef %274) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit73.i.i: ; preds = %271, %.thread.i72.i.i - %278 = phi ptr [ %266, %.thread.i72.i.i ], [ %272, %271 ] - %279 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 - %280 = icmp sgt i32 %279, 0 - %.pre106.i.i = load i64, ptr %187, align 8, !tbaa !148, !noalias !143 - br i1 %280, label %.lr.ph103.i.i, label %._crit_edge104.i.i +gv_calloc.exit73.i.i: ; preds = %269, %.thread.i72.i.i + %276 = phi ptr [ %264, %.thread.i72.i.i ], [ %270, %269 ] + %277 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 + %278 = icmp sgt i32 %277, 0 + %.pre106.i.i = load i64, ptr %185, align 8, !tbaa !148, !noalias !143 + br i1 %278, label %.lr.ph103.i.i, label %._crit_edge104.i.i .lr.ph103.i.i: ; preds = %gv_calloc.exit73.i.i - %281 = load ptr, ptr %7, align 8, !noalias !143 - %282 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %283 = icmp ult i64 %.pre106.i.i, 65 - %.0.i74.i.i = select i1 %283, ptr %6, ptr %281 - br label %284 - -284: ; preds = %297, %.lr.ph103.i.i - %.041102.i.i = phi i32 [ 0, %.lr.ph103.i.i ], [ %.142.i.i, %297 ] - %.043101.i.i = phi i32 [ 0, %.lr.ph103.i.i ], [ %298, %297 ] + %279 = load ptr, ptr %7, align 8, !noalias !143 + %280 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %281 = icmp ult i64 %.pre106.i.i, 65 + %.0.i74.i.i = select i1 %281, ptr %6, ptr %279 + br label %282 + +282: ; preds = %295, %.lr.ph103.i.i + %.041102.i.i = phi i32 [ 0, %.lr.ph103.i.i ], [ %.142.i.i, %295 ] + %.043101.i.i = phi i32 [ 0, %.lr.ph103.i.i ], [ %296, %295 ] call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6), !noalias !143 - store ptr %281, ptr %6, align 8, !noalias !143 - store i64 %.pre106.i.i, ptr %282, align 8, !noalias !143 - %285 = lshr i32 %.043101.i.i, 3 - %286 = zext nneg i32 %285 to i64 - %287 = getelementptr inbounds nuw i8, ptr %.0.i74.i.i, i64 %286 - %288 = load i8, ptr %287, align 1, !tbaa !42, !noalias !143 - %289 = zext i8 %288 to i32 - %290 = and i32 %.043101.i.i, 7 - %291 = shl nuw nsw i32 1, %290 - %292 = and i32 %291, %289 - %.not77.i.i = icmp eq i32 %292, 0 + store ptr %279, ptr %6, align 8, !noalias !143 + store i64 %.pre106.i.i, ptr %280, align 8, !noalias !143 + %283 = lshr i32 %.043101.i.i, 3 + %284 = zext nneg i32 %283 to i64 + %285 = getelementptr inbounds nuw i8, ptr %.0.i74.i.i, i64 %284 + %286 = load i8, ptr %285, align 1, !tbaa !42, !noalias !143 + %287 = zext i8 %286 to i32 + %288 = and i32 %.043101.i.i, 7 + %289 = shl nuw nsw i32 1, %288 + %290 = and i32 %289, %287 + %.not77.i.i = icmp eq i32 %290, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6), !noalias !143 - br i1 %.not77.i.i, label %293, label %297 - -293: ; preds = %284 - %294 = add nsw i32 %.041102.i.i, 1 - %295 = sext i32 %.041102.i.i to i64 - %296 = getelementptr inbounds i32, ptr %278, i64 %295 - store i32 %.043101.i.i, ptr %296, align 4, !tbaa !53, !noalias !143 - br label %297 - -297: ; preds = %293, %284 - %.142.i.i = phi i32 [ %.041102.i.i, %284 ], [ %294, %293 ] - %298 = add nuw nsw i32 %.043101.i.i, 1 - %299 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 - %300 = icmp slt i32 %298, %299 - br i1 %300, label %284, label %._crit_edge104.i.i, !llvm.loop !152 - -._crit_edge104.i.i: ; preds = %297, %gv_calloc.exit73.i.i - %301 = icmp ugt i64 %.pre106.i.i, 64 - br i1 %301, label %302, label %cluster_map.exit.i - -302: ; preds = %._crit_edge104.i.i - %303 = load ptr, ptr %7, align 8, !tbaa !42, !noalias !143 - call void @free(ptr noundef %303) #22, !noalias !143 + br i1 %.not77.i.i, label %291, label %295 + +291: ; preds = %282 + %292 = add nsw i32 %.041102.i.i, 1 + %293 = sext i32 %.041102.i.i to i64 + %294 = getelementptr inbounds i32, ptr %276, i64 %293 + store i32 %.043101.i.i, ptr %294, align 4, !tbaa !53, !noalias !143 + br label %295 + +295: ; preds = %291, %282 + %.142.i.i = phi i32 [ %.041102.i.i, %282 ], [ %292, %291 ] + %296 = add nuw nsw i32 %.043101.i.i, 1 + %297 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 + %298 = icmp slt i32 %296, %297 + br i1 %298, label %282, label %._crit_edge104.i.i, !llvm.loop !152 + +._crit_edge104.i.i: ; preds = %295, %gv_calloc.exit73.i.i + %299 = icmp ugt i64 %.pre106.i.i, 64 + br i1 %299, label %300, label %cluster_map.exit.i + +300: ; preds = %._crit_edge104.i.i + %301 = load ptr, ptr %7, align 8, !tbaa !42, !noalias !143 + call void @free(ptr noundef %301) #22, !noalias !143 br label %cluster_map.exit.i -cluster_map.exit.i: ; preds = %302, %._crit_edge104.i.i +cluster_map.exit.i: ; preds = %300, %._crit_edge104.i.i call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #22, !noalias !143 - %304 = zext nneg i32 %23 to i64 - %305 = call noalias ptr @calloc(i64 noundef %304, i64 noundef 16) #23 - %306 = icmp eq ptr %305, null - br i1 %306, label %307, label %gv_calloc.exit112.i - -307: ; preds = %cluster_map.exit.i - %308 = load ptr, ptr @stderr, align 8, !tbaa !32 - %309 = shl nuw nsw i64 %304, 4 - %310 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %308, ptr noundef nonnull @.str.21, i64 noundef %309) #24 + %302 = zext nneg i32 %23 to i64 + %303 = call noalias ptr @calloc(i64 noundef %302, i64 noundef 16) #23 + %304 = icmp eq ptr %303, null + br i1 %304, label %305, label %gv_calloc.exit112.i + +305: ; preds = %cluster_map.exit.i + %306 = load ptr, ptr @stderr, align 8, !tbaa !32 + %307 = shl nuw nsw i64 %302, 4 + %308 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %306, ptr noundef nonnull @.str.21, i64 noundef %307) #24 call fastcc void @graphviz_exit() #25 unreachable gv_calloc.exit112.i: ; preds = %cluster_map.exit.i - %311 = getelementptr inbounds nuw i8, ptr %10, i64 8 - store double %163, ptr %311, align 8, !tbaa !153 - %312 = getelementptr inbounds nuw i8, ptr %10, i64 40 - store ptr %305, ptr %312, align 8, !tbaa !157 - %313 = getelementptr inbounds nuw i8, ptr %10, i64 48 - store i32 %.sroa.0.3.i, ptr %313, align 8, !tbaa !53 + %309 = getelementptr inbounds nuw i8, ptr %10, i64 8 + store double %163, ptr %309, align 8, !tbaa !153 + %310 = getelementptr inbounds nuw i8, ptr %10, i64 40 + store ptr %303, ptr %310, align 8, !tbaa !157 + %311 = getelementptr inbounds nuw i8, ptr %10, i64 48 + store i32 %.sroa.0.3.i, ptr %311, align 8, !tbaa !53 %.sroa.9.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 52 store i32 %.sroa.9.0.i, ptr %.sroa.9.0..sroa_idx.i, align 4, !tbaa !53 %.sroa.14.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 56 - store ptr %210, ptr %.sroa.14.0..sroa_idx.i, align 8, !tbaa !134 + store ptr %208, ptr %.sroa.14.0..sroa_idx.i, align 8, !tbaa !134 %.sroa.15.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 64 store ptr %.sroa.15.0.i, ptr %.sroa.15.0..sroa_idx.i, align 8, !tbaa !158 %.sroa.17.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 72 @@ -2841,83 +2833,83 @@ gv_calloc.exit112.i: ; preds = %cluster_map.exit.i %.sroa.21.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 76 store i32 0, ptr %.sroa.21.0..sroa_idx.i, align 4 %.sroa.21126.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 80 - store ptr %278, ptr %.sroa.21126.0..sroa_idx.i, align 8, !tbaa !134 + store ptr %276, ptr %.sroa.21126.0..sroa_idx.i, align 8, !tbaa !134 %.sroa.22.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 88 - store ptr %264, ptr %.sroa.22.0..sroa_idx.i, align 8, !tbaa !159 - %314 = call ptr @agget(ptr noundef %1, ptr noundef nonnull @.str.66) #22 - %315 = call zeroext i1 @mapbool(ptr noundef %314) #22 - br i1 %315, label %316, label %321 + store ptr %262, ptr %.sroa.22.0..sroa_idx.i, align 8, !tbaa !159 + %312 = call ptr @agget(ptr noundef %1, ptr noundef nonnull @.str.66) #22 + %313 = call zeroext i1 @mapbool(ptr noundef %312) #22 + br i1 %313, label %314, label %319 -316: ; preds = %gv_calloc.exit112.i +314: ; preds = %gv_calloc.exit112.i store i32 1, ptr %10, align 8, !tbaa !160 - %317 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not96.i = icmp eq i8 %317, 0 - br i1 %.not96.i, label %330, label %318 + %315 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not96.i = icmp eq i8 %315, 0 + br i1 %.not96.i, label %328, label %316 -318: ; preds = %316 - %319 = load ptr, ptr @stderr, align 8, !tbaa !32 - %320 = call i64 @fwrite(ptr nonnull @.str.67, i64 31, i64 1, ptr %319) #27 - br label %330 +316: ; preds = %314 + %317 = load ptr, ptr @stderr, align 8, !tbaa !32 + %318 = call i64 @fwrite(ptr nonnull @.str.67, i64 31, i64 1, ptr %317) #27 + br label %328 -321: ; preds = %gv_calloc.exit112.i - %.not93.i = icmp eq ptr %314, null - br i1 %.not93.i, label %329, label %322 +319: ; preds = %gv_calloc.exit112.i + %.not93.i = icmp eq ptr %312, null + br i1 %.not93.i, label %327, label %320 -322: ; preds = %321 - %323 = call i32 @strncasecmp(ptr noundef nonnull %314, ptr noundef nonnull @.str.40, i64 noundef 4) #26 - %.not94.i = icmp eq i32 %323, 0 - br i1 %.not94.i, label %324, label %329 +320: ; preds = %319 + %321 = call i32 @strncasecmp(ptr noundef nonnull %312, ptr noundef nonnull @.str.40, i64 noundef 4) #26 + %.not94.i = icmp eq i32 %321, 0 + br i1 %.not94.i, label %322, label %327 -324: ; preds = %322 +322: ; preds = %320 store i32 2, ptr %10, align 8, !tbaa !160 - %325 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not95.i = icmp eq i8 %325, 0 - br i1 %.not95.i, label %330, label %326 + %323 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not95.i = icmp eq i8 %323, 0 + br i1 %.not95.i, label %328, label %324 -326: ; preds = %324 - %327 = load ptr, ptr @stderr, align 8, !tbaa !32 - %328 = call i64 @fwrite(ptr nonnull @.str.68, i64 40, i64 1, ptr %327) #27 - br label %330 +324: ; preds = %322 + %325 = load ptr, ptr @stderr, align 8, !tbaa !32 + %326 = call i64 @fwrite(ptr nonnull @.str.68, i64 40, i64 1, ptr %325) #27 + br label %328 -329: ; preds = %322, %321 +327: ; preds = %320, %319 store i32 0, ptr %10, align 8, !tbaa !160 - br label %330 - -330: ; preds = %329, %326, %324, %318, %316 - %331 = load i32, ptr %4, align 8, !tbaa !161 - %332 = getelementptr inbounds nuw i8, ptr %10, i64 16 - switch i32 %331, label %343 [ - i32 17, label %333 - i32 16, label %338 + br label %328 + +328: ; preds = %327, %324, %322, %316, %314 + %329 = load i32, ptr %4, align 8, !tbaa !161 + %330 = getelementptr inbounds nuw i8, ptr %10, i64 16 + switch i32 %329, label %341 [ + i32 17, label %331 + i32 16, label %336 ] -333: ; preds = %330 - store i32 1, ptr %332, align 8, !tbaa !163 - %334 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not98.i = icmp eq i8 %334, 0 - br i1 %.not98.i, label %344, label %335 - -335: ; preds = %333 - %336 = load ptr, ptr @stderr, align 8, !tbaa !32 - %337 = call i64 @fwrite(ptr nonnull @.str.69, i64 38, i64 1, ptr %336) #27 - br label %344 - -338: ; preds = %330 - store i32 2, ptr %332, align 8, !tbaa !163 - %339 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not97.i = icmp eq i8 %339, 0 - br i1 %.not97.i, label %344, label %340 - -340: ; preds = %338 - %341 = load ptr, ptr @stderr, align 8, !tbaa !32 - %342 = call i64 @fwrite(ptr nonnull @.str.70, i64 36, i64 1, ptr %341) #27 - br label %344 - -343: ; preds = %330 - store i32 0, ptr %332, align 8, !tbaa !163 - br label %344 - -344: ; preds = %343, %340, %338, %335, %333 +331: ; preds = %328 + store i32 1, ptr %330, align 8, !tbaa !163 + %332 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not98.i = icmp eq i8 %332, 0 + br i1 %.not98.i, label %342, label %333 + +333: ; preds = %331 + %334 = load ptr, ptr @stderr, align 8, !tbaa !32 + %335 = call i64 @fwrite(ptr nonnull @.str.69, i64 38, i64 1, ptr %334) #27 + br label %342 + +336: ; preds = %328 + store i32 2, ptr %330, align 8, !tbaa !163 + %337 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not97.i = icmp eq i8 %337, 0 + br i1 %.not97.i, label %342, label %338 + +338: ; preds = %336 + %339 = load ptr, ptr @stderr, align 8, !tbaa !32 + %340 = call i64 @fwrite(ptr nonnull @.str.70, i64 36, i64 1, ptr %339) #27 + br label %342 + +341: ; preds = %328 + store i32 0, ptr %330, align 8, !tbaa !163 + br label %342 + +342: ; preds = %341, %338, %336, %333, %331 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #22 call void @sepFactor(ptr dead_on_unwind nonnull writable sret(%struct.expand_t) align 8 %11, ptr noundef %1) #22 %.sroa.0.0.copyload.i = load double, ptr %11, align 8, !tbaa !45 @@ -2926,140 +2918,140 @@ gv_calloc.exit112.i: ; preds = %cluster_map.exit.i %.sroa.5.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %11, i64 16 %.sroa.5.0.copyload.i = load i8, ptr %.sroa.5.0..sroa_idx.i, align 8, !tbaa !112 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #22 - %345 = trunc i8 %.sroa.5.0.copyload.i to i1 - %346 = fdiv double %.sroa.0.0.copyload.i, 7.200000e+01 + %343 = trunc i8 %.sroa.5.0.copyload.i to i1 + %344 = fdiv double %.sroa.0.0.copyload.i, 7.200000e+01 + %345 = fmul double %344, 2.000000e+00 + %346 = fdiv double %.sroa.4.0.copyload.i, 7.200000e+01 %347 = fmul double %346, 2.000000e+00 - %348 = fdiv double %.sroa.4.0.copyload.i, 7.200000e+01 - %349 = fmul double %348, 2.000000e+00 - %350 = select i1 %345, double %347, double 0x3FBC71C71C71C71C - %351 = select i1 %345, double %349, double 0x3FBC71C71C71C71C - %352 = getelementptr inbounds nuw i8, ptr %10, i64 24 - store double %350, ptr %352, align 8, !tbaa !164 - %353 = getelementptr inbounds nuw i8, ptr %10, i64 32 - store double %351, ptr %353, align 8, !tbaa !165 - %354 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not99.i = icmp eq i8 %354, 0 - br i1 %.not99.i, label %358, label %355 - -355: ; preds = %344 - %356 = load ptr, ptr @stderr, align 8, !tbaa !32 - %357 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %356, ptr noundef nonnull @.str.71, double noundef %350, double noundef %351) #24 - br label %358 - -358: ; preds = %355, %344 - %359 = call ptr @agfstnode(ptr noundef %1) #22 - %.not100145.i = icmp eq ptr %359, null + %348 = select i1 %343, double %345, double 0x3FBC71C71C71C71C + %349 = select i1 %343, double %347, double 0x3FBC71C71C71C71C + %350 = getelementptr inbounds nuw i8, ptr %10, i64 24 + store double %348, ptr %350, align 8, !tbaa !164 + %351 = getelementptr inbounds nuw i8, ptr %10, i64 32 + store double %349, ptr %351, align 8, !tbaa !165 + %352 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not99.i = icmp eq i8 %352, 0 + br i1 %.not99.i, label %356, label %353 + +353: ; preds = %342 + %354 = load ptr, ptr @stderr, align 8, !tbaa !32 + %355 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %354, ptr noundef nonnull @.str.71, double noundef %348, double noundef %349) #24 + br label %356 + +356: ; preds = %353, %342 + %357 = call ptr @agfstnode(ptr noundef %1) #22 + %.not100145.i = icmp eq ptr %357, null br i1 %.not100145.i, label %._crit_edge150.i, label %.lr.ph149.i -.lr.ph149.i: ; preds = %358, %.lr.ph149.i - %.084147.i = phi i64 [ %369, %.lr.ph149.i ], [ 0, %358 ] - %.085146.i = phi ptr [ %368, %.lr.ph149.i ], [ %359, %358 ] - %360 = getelementptr inbounds nuw i8, ptr %.085146.i, i64 16 - %361 = load ptr, ptr %360, align 8, !tbaa !3 - %362 = getelementptr inbounds nuw i8, ptr %361, i64 48 - %363 = load double, ptr %362, align 8, !tbaa !166 - %364 = getelementptr inbounds nuw %struct.pointf_s, ptr %305, i64 %.084147.i - store double %363, ptr %364, align 8, !tbaa !68 - %365 = getelementptr inbounds nuw i8, ptr %361, i64 56 - %366 = load double, ptr %365, align 8, !tbaa !167 - %367 = getelementptr inbounds nuw i8, ptr %364, i64 8 - store double %366, ptr %367, align 8, !tbaa !69 - %368 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.085146.i) #22 - %369 = add i64 %.084147.i, 1 - %.not100.i = icmp eq ptr %368, null +.lr.ph149.i: ; preds = %356, %.lr.ph149.i + %.084147.i = phi i64 [ %367, %.lr.ph149.i ], [ 0, %356 ] + %.085146.i = phi ptr [ %366, %.lr.ph149.i ], [ %357, %356 ] + %358 = getelementptr inbounds nuw i8, ptr %.085146.i, i64 16 + %359 = load ptr, ptr %358, align 8, !tbaa !3 + %360 = getelementptr inbounds nuw i8, ptr %359, i64 48 + %361 = load double, ptr %360, align 8, !tbaa !166 + %362 = getelementptr inbounds nuw %struct.pointf_s, ptr %303, i64 %.084147.i + store double %361, ptr %362, align 8, !tbaa !68 + %363 = getelementptr inbounds nuw i8, ptr %359, i64 56 + %364 = load double, ptr %363, align 8, !tbaa !167 + %365 = getelementptr inbounds nuw i8, ptr %362, i64 8 + store double %364, ptr %365, align 8, !tbaa !69 + %366 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.085146.i) #22 + %367 = add i64 %.084147.i, 1 + %.not100.i = icmp eq ptr %366, null br i1 %.not100.i, label %._crit_edge150.i, label %.lr.ph149.i, !llvm.loop !168 -._crit_edge150.i: ; preds = %.lr.ph149.i, %358 - %370 = load ptr, ptr %9, align 8, !tbaa !142 - %371 = load i16, ptr @Ndim, align 2, !tbaa !43 - %372 = zext i16 %371 to i32 - %373 = load i32, ptr @MaxIter, align 4, !tbaa !53 - %374 = call i32 @stress_majorization_cola(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %370, i32 noundef %372, i32 noundef range(i32 0, 4) %3, i32 noundef %373, ptr noundef nonnull %10) #22 - %375 = icmp sgt i32 %.sroa.9.0.i, 0 - br i1 %375, label %376, label %freeClusterData.exit.i - -376: ; preds = %._crit_edge150.i - %377 = load ptr, ptr %.sroa.15.0.i, align 8, !tbaa !134 - call void @free(ptr noundef %377) #22 +._crit_edge150.i: ; preds = %.lr.ph149.i, %356 + %368 = load ptr, ptr %9, align 8, !tbaa !142 + %369 = load i16, ptr @Ndim, align 2, !tbaa !43 + %370 = zext i16 %369 to i32 + %371 = load i32, ptr @MaxIter, align 4, !tbaa !53 + %372 = call i32 @stress_majorization_cola(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %368, i32 noundef %370, i32 noundef range(i32 0, 4) %3, i32 noundef %371, ptr noundef nonnull %10) #22 + %373 = icmp sgt i32 %.sroa.9.0.i, 0 + br i1 %373, label %374, label %freeClusterData.exit.i + +374: ; preds = %._crit_edge150.i + %375 = load ptr, ptr %.sroa.15.0.i, align 8, !tbaa !134 + call void @free(ptr noundef %375) #22 call void @free(ptr noundef %.sroa.15.0.i) #22 - call void @free(ptr noundef %210) #22 - call void @free(ptr noundef %278) #22 - call void @free(ptr noundef %264) #22 + call void @free(ptr noundef %208) #22 + call void @free(ptr noundef %276) #22 + call void @free(ptr noundef %262) #22 br label %freeClusterData.exit.i -freeClusterData.exit.i: ; preds = %376, %._crit_edge150.i - call void @free(ptr noundef nonnull %305) #22 +freeClusterData.exit.i: ; preds = %374, %._crit_edge150.i + call void @free(ptr noundef nonnull %303) #22 call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %10) #22 - br label %384 - -378: ; preds = %160 - %379 = load ptr, ptr %9, align 8, !tbaa !142 - %380 = load i16, ptr @Ndim, align 2, !tbaa !43 - %381 = zext i16 %380 to i32 - %382 = load i32, ptr @MaxIter, align 4, !tbaa !53 - %383 = call i32 @stress_majorization_kD_mkernel(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %379, i32 noundef %381, i32 noundef %spec.select.i, i32 noundef range(i32 0, 4) %3, i32 noundef %382) #22 - br label %384 - -384: ; preds = %378, %freeClusterData.exit.i, %164 - %385 = phi ptr [ %379, %378 ], [ %165, %164 ], [ %370, %freeClusterData.exit.i ] - %.1.i = phi i32 [ %383, %378 ], [ %169, %164 ], [ %374, %freeClusterData.exit.i ] - %386 = icmp slt i32 %.1.i, 0 - br i1 %386, label %387, label %389 - -387: ; preds = %384 - %388 = call i32 (i32, ptr, ...) @agerr(i32 noundef 3, ptr noundef nonnull @.str.72) #22 + br label %382 + +376: ; preds = %160 + %377 = load ptr, ptr %9, align 8, !tbaa !142 + %378 = load i16, ptr @Ndim, align 2, !tbaa !43 + %379 = zext i16 %378 to i32 + %380 = load i32, ptr @MaxIter, align 4, !tbaa !53 + %381 = call i32 @stress_majorization_kD_mkernel(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %377, i32 noundef %379, i32 noundef %spec.select.i, i32 noundef range(i32 0, 4) %3, i32 noundef %380) #22 + br label %382 + +382: ; preds = %376, %freeClusterData.exit.i, %164 + %383 = phi ptr [ %377, %376 ], [ %165, %164 ], [ %368, %freeClusterData.exit.i ] + %.1.i = phi i32 [ %381, %376 ], [ %169, %164 ], [ %372, %freeClusterData.exit.i ] + %384 = icmp slt i32 %.1.i, 0 + br i1 %384, label %385, label %387 + +385: ; preds = %382 + %386 = call i32 (i32, ptr, ...) @agerr(i32 noundef 3, ptr noundef nonnull @.str.72) #22 br label %majorization.exit -389: ; preds = %384 - %390 = call ptr @agfstnode(ptr noundef %1) #22 - %.not101155.i = icmp eq ptr %390, null +387: ; preds = %382 + %388 = call ptr @agfstnode(ptr noundef %1) #22 + %.not101155.i = icmp eq ptr %388, null br i1 %.not101155.i, label %majorization.exit, label %.lr.ph158.i -.lr.ph158.i: ; preds = %389, %._crit_edge154.i - %.186156.i = phi ptr [ %399, %._crit_edge154.i ], [ %390, %389 ] - %391 = load i16, ptr @Ndim, align 2, !tbaa !43 - %.not159.i = icmp eq i16 %391, 0 +.lr.ph158.i: ; preds = %387, %._crit_edge154.i + %.186156.i = phi ptr [ %397, %._crit_edge154.i ], [ %388, %387 ] + %389 = load i16, ptr @Ndim, align 2, !tbaa !43 + %.not159.i = icmp eq i16 %389, 0 br i1 %.not159.i, label %._crit_edge154.i, label %.lr.ph153.i .lr.ph153.i: ; preds = %.lr.ph158.i - %392 = getelementptr inbounds nuw i8, ptr %.186156.i, i64 16 - %393 = load ptr, ptr %392, align 8, !tbaa !3 - %394 = getelementptr inbounds nuw i8, ptr %393, i64 164 - %395 = load i32, ptr %394, align 4, !tbaa !169 - %396 = sext i32 %395 to i64 - %397 = getelementptr inbounds nuw i8, ptr %393, i64 176 - %398 = load ptr, ptr %397, align 8, !tbaa !34 - %wide.trip.count166.i = zext i16 %391 to i64 - br label %400 - -._crit_edge154.i: ; preds = %400, %.lr.ph158.i - %399 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.186156.i) #22 - %.not101.i = icmp eq ptr %399, null + %390 = getelementptr inbounds nuw i8, ptr %.186156.i, i64 16 + %391 = load ptr, ptr %390, align 8, !tbaa !3 + %392 = getelementptr inbounds nuw i8, ptr %391, i64 164 + %393 = load i32, ptr %392, align 4, !tbaa !169 + %394 = sext i32 %393 to i64 + %395 = getelementptr inbounds nuw i8, ptr %391, i64 176 + %396 = load ptr, ptr %395, align 8, !tbaa !34 + %wide.trip.count166.i = zext i16 %389 to i64 + br label %398 + +._crit_edge154.i: ; preds = %398, %.lr.ph158.i + %397 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.186156.i) #22 + %.not101.i = icmp eq ptr %397, null br i1 %.not101.i, label %majorization.exit, label %.lr.ph158.i, !llvm.loop !170 -400: ; preds = %400, %.lr.ph153.i - %indvars.iv163.i = phi i64 [ 0, %.lr.ph153.i ], [ %indvars.iv.next164.i, %400 ] - %401 = getelementptr inbounds nuw ptr, ptr %133, i64 %indvars.iv163.i - %402 = load ptr, ptr %401, align 8, !tbaa !135 - %403 = getelementptr inbounds double, ptr %402, i64 %396 - %404 = load double, ptr %403, align 8, !tbaa !45 - %405 = getelementptr inbounds nuw double, ptr %398, i64 %indvars.iv163.i - store double %404, ptr %405, align 8, !tbaa !45 +398: ; preds = %398, %.lr.ph153.i + %indvars.iv163.i = phi i64 [ 0, %.lr.ph153.i ], [ %indvars.iv.next164.i, %398 ] + %399 = getelementptr inbounds nuw ptr, ptr %133, i64 %indvars.iv163.i + %400 = load ptr, ptr %399, align 8, !tbaa !135 + %401 = getelementptr inbounds double, ptr %400, i64 %394 + %402 = load double, ptr %401, align 8, !tbaa !45 + %403 = getelementptr inbounds nuw double, ptr %396, i64 %indvars.iv163.i + store double %402, ptr %403, align 8, !tbaa !45 %indvars.iv.next164.i = add nuw nsw i64 %indvars.iv163.i, 1 %exitcond167.not.i = icmp eq i64 %indvars.iv.next164.i, %wide.trip.count166.i - br i1 %exitcond167.not.i, label %._crit_edge154.i, label %400, !llvm.loop !171 + br i1 %exitcond167.not.i, label %._crit_edge154.i, label %398, !llvm.loop !171 -majorization.exit: ; preds = %._crit_edge154.i, %387, %389 +majorization.exit: ; preds = %._crit_edge154.i, %385, %387 call void @freeGraphData(ptr noundef %154) #22 - %406 = load ptr, ptr %133, align 8, !tbaa !135 - call void @free(ptr noundef %406) #22 + %404 = load ptr, ptr %133, align 8, !tbaa !135 + call void @free(ptr noundef %404) #22 call void @free(ptr noundef %133) #22 - call void @free(ptr noundef %385) #22 + call void @free(ptr noundef %383) #22 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #22 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #22 - br label %407 + br label %405 -407: ; preds = %kkNeato.exit, %majorization.exit, %100, %22 +405: ; preds = %kkNeato.exit, %majorization.exit, %100, %22 ret void } 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/hyperscan/optimized/dfa_min.ll b/bench/hyperscan/optimized/dfa_min.ll index 493589324ea..ea85ca010ea 100644 --- a/bench/hyperscan/optimized/dfa_min.ll +++ b/bench/hyperscan/optimized/dfa_min.ll @@ -6395,15 +6395,15 @@ define linkonce_odr hidden void @_ZNK3ue215partitioned_setItE16find_overlappingE %9 = ptrtoint ptr %7 to i64 %10 = sub i64 %8, %9 %11 = sdiv exact i64 %10, 24 + %.not.i = icmp eq ptr %6, %7 + br i1 %.not.i, label %23, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i + +_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i: ; preds = %3 %12 = lshr i64 %11, 6 %13 = and i64 %11, 63 %14 = icmp ne i64 %13, 0 %15 = zext i1 %14 to i64 %16 = add nuw nsw i64 %12, %15 - %.not.i = icmp eq i64 %16, 0 - br i1 %.not.i, label %23, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i - -_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i: ; preds = %3 %17 = shl nuw nsw i64 %16, 3 %18 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %17) #22 store i64 0, ptr %18, align 8 @@ -6432,9 +6432,9 @@ _ZNSt6vectorImSaImEE17_M_default_appendEm.exit: ; preds = %_ZNKSt6vectorImSaIm .lr.ph: ; preds = %23 %28 = load ptr, ptr %0, align 8 - br label %80 + br label %79 -._crit_edge: ; preds = %80, %23 +._crit_edge: ; preds = %79, %23 %29 = ptrtoint ptr %.sroa.13.0 to i64 %30 = ptrtoint ptr %.sroa.092.0 to i64 %31 = sub i64 %29, %30 @@ -6576,26 +6576,25 @@ _ZNK5boost14dynamic_bitsetImSaImEE10find_firstEv.exit: ; preds = %65, %_ZN5boost %76 = getelementptr inbounds nuw i8, ptr %2, i64 8 %77 = getelementptr inbounds nuw i8, ptr %2, i64 16 %78 = add nsw i64 %11, -1 - %79 = icmp eq ptr %6, %7 %.pre = load ptr, ptr %76, align 8 - br label %93 - -80: ; preds = %.lr.ph, %80 - %.sroa.088.0105 = phi ptr [ %24, %.lr.ph ], [ %91, %80 ] - %81 = load i16, ptr %.sroa.088.0105, align 2 - %82 = zext i16 %81 to i64 - %83 = getelementptr inbounds nuw i64, ptr %28, i64 %82 - %84 = load i64, ptr %83, align 8 - %85 = and i64 %84, 63 - %86 = shl nuw i64 1, %85 - %87 = lshr i64 %84, 6 - %88 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %87 - %89 = load i64, ptr %88, align 8 - %90 = or i64 %86, %89 - store i64 %90, ptr %88, align 8 - %91 = getelementptr inbounds nuw i8, ptr %.sroa.088.0105, i64 2 - %.not102 = icmp eq ptr %91, %27 - br i1 %.not102, label %._crit_edge, label %80 + br label %92 + +79: ; preds = %.lr.ph, %79 + %.sroa.088.0105 = phi ptr [ %24, %.lr.ph ], [ %90, %79 ] + %80 = load i16, ptr %.sroa.088.0105, align 2 + %81 = zext i16 %80 to i64 + %82 = getelementptr inbounds nuw i64, ptr %28, i64 %81 + %83 = load i64, ptr %82, align 8 + %84 = and i64 %83, 63 + %85 = shl nuw i64 1, %84 + %86 = lshr i64 %83, 6 + %87 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %86 + %88 = load i64, ptr %87, align 8 + %89 = or i64 %85, %88 + store i64 %89, ptr %87, align 8 + %90 = getelementptr inbounds nuw i8, ptr %.sroa.088.0105, i64 2 + %.not102 = icmp eq ptr %90, %27 + br i1 %.not102, label %._crit_edge, label %79 ._crit_edge125: ; preds = %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52, %_ZNSt6vectorImSaImEE9push_backERKm.exit, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i %.not.i.i.i.i = icmp eq ptr %.sroa.092.0, null @@ -6611,272 +6610,272 @@ _ZN5boost14dynamic_bitsetImSaImEED2Ev.exit: ; preds = %._crit_edge125, %._ .loopexit: ; preds = %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i %lpad.loopexit = landingpad { ptr, i32 } cleanup - br label %92 + br label %91 -.loopexit.split-lp: ; preds = %105 +.loopexit.split-lp: ; preds = %104 %lpad.loopexit.split-lp = landingpad { ptr, i32 } cleanup - br label %92 + br label %91 -92: ; preds = %.loopexit.split-lp, %.loopexit +91: ; preds = %.loopexit.split-lp, %.loopexit %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] %.not.i.i.i.i25 = icmp eq ptr %.sroa.092.0, null - br i1 %.not.i.i.i.i25, label %.body, label %182 + br i1 %.not.i.i.i.i25, label %.body, label %181 -93: ; preds = %.lr.ph124, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit - %94 = phi ptr [ %.pre, %.lr.ph124 ], [ %119, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit ] +92: ; preds = %.lr.ph124, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit + %93 = phi ptr [ %.pre, %.lr.ph124 ], [ %118, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit ] %storemerge123 = phi i64 [ %75, %.lr.ph124 ], [ %.0.i, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit ] - %95 = load ptr, ptr %77, align 8 - %.not.i20 = icmp eq ptr %94, %95 - br i1 %.not.i20, label %99, label %96 - -96: ; preds = %93 - store i64 %storemerge123, ptr %94, align 8 - %97 = load ptr, ptr %76, align 8 - %98 = getelementptr inbounds nuw i8, ptr %97, i64 8 - store ptr %98, ptr %76, align 8 + %94 = load ptr, ptr %77, align 8 + %.not.i20 = icmp eq ptr %93, %94 + br i1 %.not.i20, label %98, label %95 + +95: ; preds = %92 + store i64 %storemerge123, ptr %93, align 8 + %96 = load ptr, ptr %76, align 8 + %97 = getelementptr inbounds nuw i8, ptr %96, i64 8 + store ptr %97, ptr %76, align 8 br label %_ZNSt6vectorImSaImEE9push_backERKm.exit -99: ; preds = %93 - %100 = load ptr, ptr %2, align 8 - %101 = ptrtoint ptr %94 to i64 - %102 = ptrtoint ptr %100 to i64 - %103 = sub i64 %101, %102 - %104 = icmp eq i64 %103, 9223372036854775800 - br i1 %104, label %105, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i +98: ; preds = %92 + %99 = load ptr, ptr %2, align 8 + %100 = ptrtoint ptr %93 to i64 + %101 = ptrtoint ptr %99 to i64 + %102 = sub i64 %100, %101 + %103 = icmp eq i64 %102, 9223372036854775800 + br i1 %103, label %104, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i -105: ; preds = %99 +104: ; preds = %98 invoke void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str.5) #21 to label %.noexc unwind label %.loopexit.split-lp -.noexc: ; preds = %105 +.noexc: ; preds = %104 unreachable -_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i: ; preds = %99 - %106 = ashr exact i64 %103, 3 - %.sroa.speculated.i.i.i = tail call i64 @llvm.umax.i64(i64 %106, i64 1) - %107 = add nsw i64 %.sroa.speculated.i.i.i, %106 - %108 = icmp ult i64 %107, %106 - %109 = tail call i64 @llvm.umin.i64(i64 %107, i64 1152921504606846975) - %110 = select i1 %108, i64 1152921504606846975, i64 %109 - %.not.i.i.i = icmp ne i64 %110, 0 +_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i: ; preds = %98 + %105 = ashr exact i64 %102, 3 + %.sroa.speculated.i.i.i = tail call i64 @llvm.umax.i64(i64 %105, i64 1) + %106 = add nsw i64 %.sroa.speculated.i.i.i, %105 + %107 = icmp ult i64 %106, %105 + %108 = tail call i64 @llvm.umin.i64(i64 %106, i64 1152921504606846975) + %109 = select i1 %107, i64 1152921504606846975, i64 %108 + %.not.i.i.i = icmp ne i64 %109, 0 tail call void @llvm.assume(i1 %.not.i.i.i) - %111 = shl nuw nsw i64 %110, 3 - %112 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %111) #22 + %110 = shl nuw nsw i64 %109, 3 + %111 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %110) #22 to label %.noexc21 unwind label %.loopexit .noexc21: ; preds = %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i - %113 = getelementptr inbounds i8, ptr %112, i64 %103 - store i64 %storemerge123, ptr %113, align 8 - %114 = icmp sgt i64 %103, 0 - br i1 %114, label %115, label %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i + %112 = getelementptr inbounds i8, ptr %111, i64 %102 + store i64 %storemerge123, ptr %112, align 8 + %113 = icmp sgt i64 %102, 0 + br i1 %113, label %114, label %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i -115: ; preds = %.noexc21 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %112, ptr align 8 %100, i64 %103, i1 false) +114: ; preds = %.noexc21 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %111, ptr align 8 %99, i64 %102, i1 false) br label %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i -_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i: ; preds = %115, %.noexc21 - %116 = getelementptr inbounds nuw i8, ptr %113, i64 8 - %.not.i17.i.i = icmp eq ptr %100, null - br i1 %.not.i17.i.i, label %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, label %117 +_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i: ; preds = %114, %.noexc21 + %115 = getelementptr inbounds nuw i8, ptr %112, i64 8 + %.not.i17.i.i = icmp eq ptr %99, null + br i1 %.not.i17.i.i, label %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, label %116 -117: ; preds = %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i - tail call void @_ZdlPv(ptr noundef nonnull %100) #24 +116: ; preds = %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i + tail call void @_ZdlPv(ptr noundef nonnull %99) #24 br label %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i -_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i: ; preds = %117, %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i - store ptr %112, ptr %2, align 8 - store ptr %116, ptr %76, align 8 - %118 = getelementptr inbounds nuw i64, ptr %112, i64 %110 - store ptr %118, ptr %77, align 8 +_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i: ; preds = %116, %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i + store ptr %111, ptr %2, align 8 + store ptr %115, ptr %76, align 8 + %117 = getelementptr inbounds nuw i64, ptr %111, i64 %109 + store ptr %117, ptr %77, align 8 br label %_ZNSt6vectorImSaImEE9push_backERKm.exit -_ZNSt6vectorImSaImEE9push_backERKm.exit: ; preds = %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, %96 - %119 = phi ptr [ %116, %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i ], [ %98, %96 ] - %120 = icmp uge i64 %storemerge123, %78 - %or.cond.i = or i1 %79, %120 - br i1 %or.cond.i, label %._crit_edge125, label %121 - -121: ; preds = %_ZNSt6vectorImSaImEE9push_backERKm.exit - %122 = add nuw i64 %storemerge123, 1 - %123 = lshr i64 %122, 6 - %124 = and i64 %122, 63 - %125 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %123 - %126 = load i64, ptr %125, align 8 - %127 = lshr i64 %126, %124 - %.not.i22 = icmp eq i64 %127, 0 - br i1 %.not.i22, label %136, label %128 - -128: ; preds = %121 - %.not.i.i = sub i64 0, %127 - %129 = and i64 %127, %.not.i.i - %.not17.i.i.i.i = icmp eq i64 %129, 1 +_ZNSt6vectorImSaImEE9push_backERKm.exit: ; preds = %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, %95 + %118 = phi ptr [ %115, %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i ], [ %97, %95 ] + %119 = icmp uge i64 %storemerge123, %78 + %or.cond.i = or i1 %.not.i, %119 + br i1 %or.cond.i, label %._crit_edge125, label %120 + +120: ; preds = %_ZNSt6vectorImSaImEE9push_backERKm.exit + %121 = add nuw i64 %storemerge123, 1 + %122 = lshr i64 %121, 6 + %123 = and i64 %121, 63 + %124 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %122 + %125 = load i64, ptr %124, align 8 + %126 = lshr i64 %125, %123 + %.not.i22 = icmp eq i64 %126, 0 + br i1 %.not.i22, label %135, label %127 + +127: ; preds = %120 + %.not.i.i = sub i64 0, %126 + %128 = and i64 %126, %.not.i.i + %.not17.i.i.i.i = icmp eq i64 %128, 1 br i1 %.not17.i.i.i.i, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i, label %select.unfold.i.i.i.i -select.unfold.i.i.i.i: ; preds = %128, %select.unfold.i.i.i.i - %.020.i.i.i.i = phi i64 [ %spec.select16.i.i.i.i, %select.unfold.i.i.i.i ], [ %129, %128 ] - %.0919.i.i.i.i = phi i32 [ %spec.select15.i.i.i.i, %select.unfold.i.i.i.i ], [ 0, %128 ] - %.01118.i.i.i.i = phi i32 [ %132, %select.unfold.i.i.i.i ], [ 32, %128 ] - %130 = zext nneg i32 %.01118.i.i.i.i to i64 - %131 = lshr i64 %.020.i.i.i.i, %130 - %.not13.i.i.i.i = icmp eq i64 %131, 0 - %132 = sdiv i32 %.01118.i.i.i.i, 2 - %133 = select i1 %.not13.i.i.i.i, i32 0, i32 %.01118.i.i.i.i - %spec.select15.i.i.i.i = add nsw i32 %133, %.0919.i.i.i.i - %spec.select16.i.i.i.i = select i1 %.not13.i.i.i.i, i64 %.020.i.i.i.i, i64 %131 +select.unfold.i.i.i.i: ; preds = %127, %select.unfold.i.i.i.i + %.020.i.i.i.i = phi i64 [ %spec.select16.i.i.i.i, %select.unfold.i.i.i.i ], [ %128, %127 ] + %.0919.i.i.i.i = phi i32 [ %spec.select15.i.i.i.i, %select.unfold.i.i.i.i ], [ 0, %127 ] + %.01118.i.i.i.i = phi i32 [ %131, %select.unfold.i.i.i.i ], [ 32, %127 ] + %129 = zext nneg i32 %.01118.i.i.i.i to i64 + %130 = lshr i64 %.020.i.i.i.i, %129 + %.not13.i.i.i.i = icmp eq i64 %130, 0 + %131 = sdiv i32 %.01118.i.i.i.i, 2 + %132 = select i1 %.not13.i.i.i.i, i32 0, i32 %.01118.i.i.i.i + %spec.select15.i.i.i.i = add nsw i32 %132, %.0919.i.i.i.i + %spec.select16.i.i.i.i = select i1 %.not13.i.i.i.i, i64 %.020.i.i.i.i, i64 %130 %.not.i.i.i.i23 = icmp eq i64 %spec.select16.i.i.i.i, 1 br i1 %.not.i.i.i.i23, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i, label %select.unfold.i.i.i.i _ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i: ; preds = %select.unfold.i.i.i.i - %134 = sext i32 %spec.select15.i.i.i.i to i64 + %133 = sext i32 %spec.select15.i.i.i.i to i64 br label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i -_ZN5boost6detail10lowest_bitImEEiT_.exit.i: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i, %128 - %.09.lcssa.i.i.i.i = phi i64 [ 0, %128 ], [ %134, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i ] - %135 = add i64 %.09.lcssa.i.i.i.i, %122 +_ZN5boost6detail10lowest_bitImEEiT_.exit.i: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i, %127 + %.09.lcssa.i.i.i.i = phi i64 [ 0, %127 ], [ %133, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i ] + %134 = add i64 %.09.lcssa.i.i.i.i, %121 br label %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit -136: ; preds = %121 - %gep = getelementptr inbounds nuw i64, ptr %invariant.gep, i64 %123 - %137 = ptrtoint ptr %gep to i64 - %138 = sub i64 %29, %137 - %139 = ashr i64 %138, 5 - %140 = icmp sgt i64 %139, 0 - br i1 %140, label %.lr.ph.i.i.i.i72, label %._crit_edge.i.i.i.i46 - -.lr.ph.i.i.i.i72: ; preds = %136, %151 - %.052.i.i.i.i73 = phi i64 [ %153, %151 ], [ %139, %136 ] - %.sroa.032.051.i.i.i.i74 = phi ptr [ %152, %151 ], [ %gep, %136 ] - %141 = load i64, ptr %.sroa.032.051.i.i.i.i74, align 8 - %.not9.i75 = icmp eq i64 %141, 0 - br i1 %.not9.i75, label %142, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - -142: ; preds = %.lr.ph.i.i.i.i72 - %143 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 - %144 = load i64, ptr %143, align 8 - %.not10.i76 = icmp eq i64 %144, 0 - br i1 %.not10.i76, label %145, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit - -145: ; preds = %142 - %146 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 - %147 = load i64, ptr %146, align 8 - %.not11.i78 = icmp eq i64 %147, 0 - br i1 %.not11.i78, label %148, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 - -148: ; preds = %145 - %149 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 - %150 = load i64, ptr %149, align 8 - %.not12.i80 = icmp eq i64 %150, 0 - br i1 %.not12.i80, label %151, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 - -151: ; preds = %148 - %152 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 32 - %153 = add nsw i64 %.052.i.i.i.i73, -1 - %154 = icmp sgt i64 %.052.i.i.i.i73, 1 - br i1 %154, label %.lr.ph.i.i.i.i72, label %._crit_edge.loopexit.i.i.i.i82, !llvm.loop !481 - -._crit_edge.loopexit.i.i.i.i82: ; preds = %151 - %.pre.i.i.i.i83 = ptrtoint ptr %152 to i64 +135: ; preds = %120 + %gep = getelementptr inbounds nuw i64, ptr %invariant.gep, i64 %122 + %136 = ptrtoint ptr %gep to i64 + %137 = sub i64 %29, %136 + %138 = ashr i64 %137, 5 + %139 = icmp sgt i64 %138, 0 + br i1 %139, label %.lr.ph.i.i.i.i72, label %._crit_edge.i.i.i.i46 + +.lr.ph.i.i.i.i72: ; preds = %135, %150 + %.052.i.i.i.i73 = phi i64 [ %152, %150 ], [ %138, %135 ] + %.sroa.032.051.i.i.i.i74 = phi ptr [ %151, %150 ], [ %gep, %135 ] + %140 = load i64, ptr %.sroa.032.051.i.i.i.i74, align 8 + %.not9.i75 = icmp eq i64 %140, 0 + br i1 %.not9.i75, label %141, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + +141: ; preds = %.lr.ph.i.i.i.i72 + %142 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 + %143 = load i64, ptr %142, align 8 + %.not10.i76 = icmp eq i64 %143, 0 + br i1 %.not10.i76, label %144, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit + +144: ; preds = %141 + %145 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 + %146 = load i64, ptr %145, align 8 + %.not11.i78 = icmp eq i64 %146, 0 + br i1 %.not11.i78, label %147, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 + +147: ; preds = %144 + %148 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 + %149 = load i64, ptr %148, align 8 + %.not12.i80 = icmp eq i64 %149, 0 + br i1 %.not12.i80, label %150, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 + +150: ; preds = %147 + %151 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 32 + %152 = add nsw i64 %.052.i.i.i.i73, -1 + %153 = icmp sgt i64 %.052.i.i.i.i73, 1 + br i1 %153, label %.lr.ph.i.i.i.i72, label %._crit_edge.loopexit.i.i.i.i82, !llvm.loop !481 + +._crit_edge.loopexit.i.i.i.i82: ; preds = %150 + %.pre.i.i.i.i83 = ptrtoint ptr %151 to i64 %.pre57.i.i.i.i84 = sub i64 %29, %.pre.i.i.i.i83 br label %._crit_edge.i.i.i.i46 -._crit_edge.i.i.i.i46: ; preds = %._crit_edge.loopexit.i.i.i.i82, %136 - %.pre-phi58.i.i.i.i47 = phi i64 [ %.pre57.i.i.i.i84, %._crit_edge.loopexit.i.i.i.i82 ], [ %138, %136 ] - %.sroa.032.0.lcssa.i.i.i.i48 = phi ptr [ %152, %._crit_edge.loopexit.i.i.i.i82 ], [ %gep, %136 ] - %155 = ashr exact i64 %.pre-phi58.i.i.i.i47, 3 - switch i64 %155, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 [ - i64 3, label %156 - i64 2, label %160 - i64 1, label %164 +._crit_edge.i.i.i.i46: ; preds = %._crit_edge.loopexit.i.i.i.i82, %135 + %.pre-phi58.i.i.i.i47 = phi i64 [ %.pre57.i.i.i.i84, %._crit_edge.loopexit.i.i.i.i82 ], [ %137, %135 ] + %.sroa.032.0.lcssa.i.i.i.i48 = phi ptr [ %151, %._crit_edge.loopexit.i.i.i.i82 ], [ %gep, %135 ] + %154 = ashr exact i64 %.pre-phi58.i.i.i.i47, 3 + switch i64 %154, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 [ + i64 3, label %155 + i64 2, label %159 + i64 1, label %163 ] -156: ; preds = %._crit_edge.i.i.i.i46 - %157 = load i64, ptr %.sroa.032.0.lcssa.i.i.i.i48, align 8 - %.not13.i71 = icmp eq i64 %157, 0 - br i1 %.not13.i71, label %158, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - -158: ; preds = %156 - %159 = getelementptr inbounds nuw i8, ptr %.sroa.032.0.lcssa.i.i.i.i48, i64 8 - br label %160 - -160: ; preds = %158, %._crit_edge.i.i.i.i46 - %.sroa.032.1.i.i.i.i69 = phi ptr [ %159, %158 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] - %161 = load i64, ptr %.sroa.032.1.i.i.i.i69, align 8 - %.not14.i70 = icmp eq i64 %161, 0 - br i1 %.not14.i70, label %162, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - -162: ; preds = %160 - %163 = getelementptr inbounds nuw i8, ptr %.sroa.032.1.i.i.i.i69, i64 8 - br label %164 - -164: ; preds = %162, %._crit_edge.i.i.i.i46 - %.sroa.032.2.i.i.i.i49 = phi ptr [ %163, %162 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] - %165 = load i64, ptr %.sroa.032.2.i.i.i.i49, align 8 - %.not15.i50 = icmp eq i64 %165, 0 +155: ; preds = %._crit_edge.i.i.i.i46 + %156 = load i64, ptr %.sroa.032.0.lcssa.i.i.i.i48, align 8 + %.not13.i71 = icmp eq i64 %156, 0 + br i1 %.not13.i71, label %157, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + +157: ; preds = %155 + %158 = getelementptr inbounds nuw i8, ptr %.sroa.032.0.lcssa.i.i.i.i48, i64 8 + br label %159 + +159: ; preds = %157, %._crit_edge.i.i.i.i46 + %.sroa.032.1.i.i.i.i69 = phi ptr [ %158, %157 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] + %160 = load i64, ptr %.sroa.032.1.i.i.i.i69, align 8 + %.not14.i70 = icmp eq i64 %160, 0 + br i1 %.not14.i70, label %161, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + +161: ; preds = %159 + %162 = getelementptr inbounds nuw i8, ptr %.sroa.032.1.i.i.i.i69, i64 8 + br label %163 + +163: ; preds = %161, %._crit_edge.i.i.i.i46 + %.sroa.032.2.i.i.i.i49 = phi ptr [ %162, %161 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] + %164 = load i64, ptr %.sroa.032.2.i.i.i.i49, align 8 + %.not15.i50 = icmp eq i64 %164, 0 %spec.select.i.i.i.i51 = select i1 %.not15.i50, ptr %.sroa.13.0, ptr %.sroa.032.2.i.i.i.i49 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit: ; preds = %142 - %166 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit: ; preds = %141 + %165 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151: ; preds = %145 - %167 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151: ; preds = %144 + %166 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153: ; preds = %148 - %168 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153: ; preds = %147 + %167 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52: ; preds = %.lr.ph.i.i.i.i72, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153, %164, %160, %156, %._crit_edge.i.i.i.i46 - %.sroa.08.0.in.sroa.speculated.i.i.i.i53 = phi ptr [ %.sroa.032.0.lcssa.i.i.i.i48, %156 ], [ %.sroa.032.1.i.i.i.i69, %160 ], [ %.sroa.13.0, %._crit_edge.i.i.i.i46 ], [ %spec.select.i.i.i.i51, %164 ], [ %166, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit ], [ %167, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 ], [ %168, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 ], [ %.sroa.032.051.i.i.i.i74, %.lr.ph.i.i.i.i72 ] - %169 = ptrtoint ptr %.sroa.08.0.in.sroa.speculated.i.i.i.i53 to i64 - %170 = sub i64 %169, %30 - %.not.i54 = icmp ult i64 %170, %31 - br i1 %.not.i54, label %171, label %._crit_edge125 - -171: ; preds = %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - %172 = shl i64 %170, 3 - %173 = getelementptr inbounds nuw i8, ptr %.sroa.092.0, i64 %170 - %174 = load i64, ptr %173, align 8 - %.not.i.i56 = sub i64 0, %174 - %175 = and i64 %174, %.not.i.i56 - %.not17.i.i.i.i57 = icmp eq i64 %175, 1 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52: ; preds = %.lr.ph.i.i.i.i72, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153, %163, %159, %155, %._crit_edge.i.i.i.i46 + %.sroa.08.0.in.sroa.speculated.i.i.i.i53 = phi ptr [ %.sroa.032.0.lcssa.i.i.i.i48, %155 ], [ %.sroa.032.1.i.i.i.i69, %159 ], [ %.sroa.13.0, %._crit_edge.i.i.i.i46 ], [ %spec.select.i.i.i.i51, %163 ], [ %165, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit ], [ %166, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 ], [ %167, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 ], [ %.sroa.032.051.i.i.i.i74, %.lr.ph.i.i.i.i72 ] + %168 = ptrtoint ptr %.sroa.08.0.in.sroa.speculated.i.i.i.i53 to i64 + %169 = sub i64 %168, %30 + %.not.i54 = icmp ult i64 %169, %31 + br i1 %.not.i54, label %170, label %._crit_edge125 + +170: ; preds = %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + %171 = shl i64 %169, 3 + %172 = getelementptr inbounds nuw i8, ptr %.sroa.092.0, i64 %169 + %173 = load i64, ptr %172, align 8 + %.not.i.i56 = sub i64 0, %173 + %174 = and i64 %173, %.not.i.i56 + %.not17.i.i.i.i57 = icmp eq i64 %174, 1 br i1 %.not17.i.i.i.i57, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67, label %select.unfold.i.i.i.i58 -select.unfold.i.i.i.i58: ; preds = %171, %select.unfold.i.i.i.i58 - %.020.i.i.i.i59 = phi i64 [ %spec.select16.i.i.i.i64, %select.unfold.i.i.i.i58 ], [ %175, %171 ] - %.0919.i.i.i.i60 = phi i32 [ %spec.select15.i.i.i.i63, %select.unfold.i.i.i.i58 ], [ 0, %171 ] - %.01118.i.i.i.i61 = phi i32 [ %178, %select.unfold.i.i.i.i58 ], [ 32, %171 ] - %176 = zext nneg i32 %.01118.i.i.i.i61 to i64 - %177 = lshr i64 %.020.i.i.i.i59, %176 - %.not13.i.i.i.i62 = icmp eq i64 %177, 0 - %178 = sdiv i32 %.01118.i.i.i.i61, 2 - %179 = select i1 %.not13.i.i.i.i62, i32 0, i32 %.01118.i.i.i.i61 - %spec.select15.i.i.i.i63 = add nsw i32 %179, %.0919.i.i.i.i60 - %spec.select16.i.i.i.i64 = select i1 %.not13.i.i.i.i62, i64 %.020.i.i.i.i59, i64 %177 +select.unfold.i.i.i.i58: ; preds = %170, %select.unfold.i.i.i.i58 + %.020.i.i.i.i59 = phi i64 [ %spec.select16.i.i.i.i64, %select.unfold.i.i.i.i58 ], [ %174, %170 ] + %.0919.i.i.i.i60 = phi i32 [ %spec.select15.i.i.i.i63, %select.unfold.i.i.i.i58 ], [ 0, %170 ] + %.01118.i.i.i.i61 = phi i32 [ %177, %select.unfold.i.i.i.i58 ], [ 32, %170 ] + %175 = zext nneg i32 %.01118.i.i.i.i61 to i64 + %176 = lshr i64 %.020.i.i.i.i59, %175 + %.not13.i.i.i.i62 = icmp eq i64 %176, 0 + %177 = sdiv i32 %.01118.i.i.i.i61, 2 + %178 = select i1 %.not13.i.i.i.i62, i32 0, i32 %.01118.i.i.i.i61 + %spec.select15.i.i.i.i63 = add nsw i32 %178, %.0919.i.i.i.i60 + %spec.select16.i.i.i.i64 = select i1 %.not13.i.i.i.i62, i64 %.020.i.i.i.i59, i64 %176 %.not.i.i.i.i65 = icmp eq i64 %spec.select16.i.i.i.i64, 1 br i1 %.not.i.i.i.i65, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66, label %select.unfold.i.i.i.i58 _ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66: ; preds = %select.unfold.i.i.i.i58 - %180 = sext i32 %spec.select15.i.i.i.i63 to i64 + %179 = sext i32 %spec.select15.i.i.i.i63 to i64 br label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67 -_ZN5boost6detail10lowest_bitImEEiT_.exit.i67: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66, %171 - %.09.lcssa.i.i.i.i68 = phi i64 [ 0, %171 ], [ %180, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66 ] - %181 = add i64 %.09.lcssa.i.i.i.i68, %172 +_ZN5boost6detail10lowest_bitImEEiT_.exit.i67: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66, %170 + %.09.lcssa.i.i.i.i68 = phi i64 [ 0, %170 ], [ %179, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66 ] + %180 = add i64 %.09.lcssa.i.i.i.i68, %171 br label %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit _ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i - %.0.i = phi i64 [ %135, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i ], [ %181, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67 ] + %.0.i = phi i64 [ %134, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i ], [ %180, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67 ] %.not = icmp eq i64 %.0.i, -1 - br i1 %.not, label %._crit_edge125.thread, label %93 + br i1 %.not, label %._crit_edge125.thread, label %92 -182: ; preds = %92 +181: ; preds = %91 tail call void @_ZdlPv(ptr noundef nonnull %.sroa.092.0) #24 br label %.body -.body: ; preds = %182, %92 +.body: ; preds = %181, %91 resume { ptr, i32 } %lpad.phi } diff --git a/bench/hyperscan/optimized/mcclellancompile.ll b/bench/hyperscan/optimized/mcclellancompile.ll index 774f844f12d..f414ac91de7 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 12b7b18fa0a..f7bd07eea8a 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 @@ -2416,9 +2416,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 @@ -2441,8 +2441,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 @@ -2680,16 +2680,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 @@ -2890,8 +2889,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 @@ -4194,13 +4193,13 @@ _ZNSt6vectorIN3ue29CharReachESaIS1_EED2Ev.exit.i.i98: ; 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.i99 _ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i.i99: ; 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/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll b/bench/influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll index be8bd803fda..76fea41bac7 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/lief/optimized/bignum_core.ll b/bench/lief/optimized/bignum_core.ll index 95a521a4a14..402d441792c 100644 --- a/bench/lief/optimized/bignum_core.ll +++ b/bench/lief/optimized/bignum_core.ll @@ -1254,7 +1254,7 @@ define hidden i32 @mbedtls_mpi_core_fill_random(ptr noundef %0, i64 noundef %1, br i1 %.not, label %20, label %mbedtls_mpi_core_bigendian_to_host.exit 20: ; preds = %12 - %21 = icmp eq i64 %10, 0 + %21 = icmp eq i64 %2, 0 %22 = getelementptr i64, ptr %0, i64 %10 %.01214.i = getelementptr i8, ptr %22, i64 -8 %.not15.i = icmp ugt ptr %0, %.01214.i diff --git a/bench/miniaudio/optimized/unity.ll b/bench/miniaudio/optimized/unity.ll index 94c29511642..72c27fc4eb4 100644 --- a/bench/miniaudio/optimized/unity.ll +++ b/bench/miniaudio/optimized/unity.ll @@ -3074,100 +3074,94 @@ define range(i32 -4, 1) i32 @ma_slot_allocator_alloc(ptr noundef captures(addres %6 = getelementptr inbounds nuw i8, ptr %0, i64 16 br label %.preheader59 -.preheader59: ; preds = %.preheader60, %53 - %7 = phi i1 [ true, %.preheader60 ], [ false, %53 ] +.preheader59: ; preds = %.preheader60, %49 + %7 = phi i1 [ true, %.preheader60 ], [ false, %49 ] %8 = load i32, ptr %5, align 4, !tbaa !60 - %9 = lshr i32 %8, 5 - %10 = and i32 %8, 31 - %.not.i65 = icmp ne i32 %10, 0 - %11 = zext i1 %.not.i65 to i32 - %12 = or i32 %9, %11 - %.not69 = icmp eq i32 %12, 0 - br i1 %.not69, label %._crit_edge, label %.preheader58 - -.preheader58: ; preds = %.preheader59, %44 - %indvars.iv = phi i64 [ %indvars.iv.next, %44 ], [ 0, %.preheader59 ] - br label %13 + %.not69 = icmp eq i32 %8, 0 + br i1 %.not69, label %.thread54, label %.preheader58 -13: ; preds = %.preheader58, %ma_ffs_32.exit - %14 = load ptr, ptr %0, align 8, !tbaa !58 - %15 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %14, i64 %indvars.iv - %16 = load atomic i32, ptr %15 seq_cst, align 4 - %17 = icmp eq i32 %16, -1 - br i1 %17, label %44, label %.preheader - -.preheader: ; preds = %13, %20 - %.08.i = phi i32 [ %21, %20 ], [ 0, %13 ] - %18 = shl nuw i32 1, %.08.i - %19 = and i32 %18, %16 - %.not.i46.not = icmp eq i32 %19, 0 - br i1 %.not.i46.not, label %ma_ffs_32.exit, label %20 - -20: ; preds = %.preheader - %21 = add nuw nsw i32 %.08.i, 1 - %exitcond.not.i = icmp eq i32 %21, 32 +.preheader58: ; preds = %.preheader59, %40 + %indvars.iv = phi i64 [ %indvars.iv.next, %40 ], [ 0, %.preheader59 ] + br label %9 + +9: ; preds = %.preheader58, %ma_ffs_32.exit + %10 = load ptr, ptr %0, align 8, !tbaa !58 + %11 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %10, i64 %indvars.iv + %12 = load atomic i32, ptr %11 seq_cst, align 4 + %13 = icmp eq i32 %12, -1 + br i1 %13, label %40, label %.preheader + +.preheader: ; preds = %9, %16 + %.08.i = phi i32 [ %17, %16 ], [ 0, %9 ] + %14 = shl nuw i32 1, %.08.i + %15 = and i32 %14, %12 + %.not.i46.not = icmp eq i32 %15, 0 + br i1 %.not.i46.not, label %ma_ffs_32.exit, label %16 + +16: ; preds = %.preheader + %17 = add nuw nsw i32 %.08.i, 1 + %exitcond.not.i = icmp eq i32 %17, 32 br i1 %exitcond.not.i, label %.ma_ffs_32.exit_crit_edge, label %.preheader, !llvm.loop !62 -.ma_ffs_32.exit_crit_edge: ; preds = %20 +.ma_ffs_32.exit_crit_edge: ; preds = %16 br label %ma_ffs_32.exit, !llvm.loop !62 ma_ffs_32.exit: ; preds = %.preheader, %.ma_ffs_32.exit_crit_edge %.0.lcssa.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge ], [ %.08.i, %.preheader ] - %22 = shl nuw i32 1, %.0.lcssa.i - %23 = or i32 %22, %16 - %24 = load ptr, ptr %0, align 8, !tbaa !58 - %25 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %24, i64 %indvars.iv - %26 = cmpxchg volatile ptr %25, i32 %16, i32 %23 seq_cst seq_cst, align 4 - %27 = extractvalue { i32, i1 } %26, 1 - br i1 %27, label %28, label %13 - -28: ; preds = %ma_ffs_32.exit - %29 = trunc nuw nsw i64 %indvars.iv to i32 - %30 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 - %31 = shl i32 %29, 5 - %32 = add i32 %.0.lcssa.i, %31 - %33 = load i32, ptr %5, align 4, !tbaa !60 - %.not = icmp ult i32 %32, %33 - br i1 %.not, label %34, label %.thread54 - -34: ; preds = %28 - %35 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %36 = load ptr, ptr %35, align 8, !tbaa !59 - %37 = zext i32 %32 to i64 - %38 = getelementptr inbounds nuw i32, ptr %36, i64 %37 - %39 = load i32, ptr %38, align 4, !tbaa !3 - %40 = add i32 %39, 1 - store i32 %40, ptr %38, align 4, !tbaa !3 - %41 = zext i32 %40 to i64 - %42 = shl nuw i64 %41, 32 - %43 = or disjoint i64 %42, %37 - store i64 %43, ptr %1, align 8, !tbaa !63 + %18 = shl nuw i32 1, %.0.lcssa.i + %19 = or i32 %18, %12 + %20 = load ptr, ptr %0, align 8, !tbaa !58 + %21 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %20, i64 %indvars.iv + %22 = cmpxchg volatile ptr %21, i32 %12, i32 %19 seq_cst seq_cst, align 4 + %23 = extractvalue { i32, i1 } %22, 1 + br i1 %23, label %24, label %9 + +24: ; preds = %ma_ffs_32.exit + %25 = trunc nuw nsw i64 %indvars.iv to i32 + %26 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 + %27 = shl i32 %25, 5 + %28 = add i32 %.0.lcssa.i, %27 + %29 = load i32, ptr %5, align 4, !tbaa !60 + %.not = icmp ult i32 %28, %29 + br i1 %.not, label %30, label %.thread54 + +30: ; preds = %24 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %32 = load ptr, ptr %31, align 8, !tbaa !59 + %33 = zext i32 %28 to i64 + %34 = getelementptr inbounds nuw i32, ptr %32, i64 %33 + %35 = load i32, ptr %34, align 4, !tbaa !3 + %36 = add i32 %35, 1 + store i32 %36, ptr %34, align 4, !tbaa !3 + %37 = zext i32 %36 to i64 + %38 = shl nuw i64 %37, 32 + %39 = or disjoint i64 %38, %33 + store i64 %39, ptr %1, align 8, !tbaa !63 br label %.thread54 -44: ; preds = %13 +40: ; preds = %9 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %45 = load i32, ptr %5, align 4, !tbaa !60 - %46 = lshr i32 %45, 5 - %47 = and i32 %45, 31 - %.not.i = icmp ne i32 %47, 0 - %48 = zext i1 %.not.i to i32 - %spec.select.i45 = add nuw nsw i32 %46, %48 - %49 = zext nneg i32 %spec.select.i45 to i64 - %50 = icmp samesign ult i64 %indvars.iv.next, %49 - br i1 %50, label %.preheader58, label %._crit_edge, !llvm.loop !65 - -._crit_edge: ; preds = %44, %.preheader59 - %.lcssa = phi i32 [ %8, %.preheader59 ], [ %45, %44 ] - %51 = load i32, ptr %6, align 8, !tbaa !66 - %52 = icmp ult i32 %51, %.lcssa - br i1 %52, label %53, label %.thread54 - -53: ; preds = %._crit_edge + %41 = load i32, ptr %5, align 4, !tbaa !60 + %42 = lshr i32 %41, 5 + %43 = and i32 %41, 31 + %.not.i = icmp ne i32 %43, 0 + %44 = zext i1 %.not.i to i32 + %spec.select.i45 = add nuw nsw i32 %42, %44 + %45 = zext nneg i32 %spec.select.i45 to i64 + %46 = icmp samesign ult i64 %indvars.iv.next, %45 + br i1 %46, label %.preheader58, label %._crit_edge, !llvm.loop !65 + +._crit_edge: ; preds = %40 + %47 = load i32, ptr %6, align 8, !tbaa !66 + %48 = icmp ult i32 %47, %41 + br i1 %48, label %49, label %.thread54 + +49: ; preds = %._crit_edge tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 br i1 %7, label %.preheader59, label %.thread54, !llvm.loop !67 -.thread54: ; preds = %._crit_edge, %53, %34, %28, %2 - %.0 = phi i32 [ -2, %2 ], [ -4, %28 ], [ 0, %34 ], [ -4, %53 ], [ -4, %._crit_edge ] +.thread54: ; preds = %.preheader59, %._crit_edge, %49, %30, %24, %2 + %.0 = phi i32 [ -2, %2 ], [ -4, %24 ], [ 0, %30 ], [ -4, %49 ], [ -4, %._crit_edge ], [ -4, %.preheader59 ] ret i32 %.0 } @@ -3422,105 +3416,99 @@ ma_semaphore_init.exit: ; preds = %56, %59, %52, %33 %62 = getelementptr inbounds nuw i8, ptr %2, i64 136 br label %.preheader59.i -.preheader59.i: ; preds = %108, %ma_semaphore_init.exit - %63 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %108 ] +.preheader59.i: ; preds = %104, %ma_semaphore_init.exit + %63 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %104 ] %64 = load i32, ptr %48, align 4, !tbaa !60 - %65 = lshr i32 %64, 5 - %66 = and i32 %64, 31 - %.not.i65.i = icmp ne i32 %66, 0 - %67 = zext i1 %.not.i65.i to i32 - %68 = or i32 %65, %67 - %.not69.i = icmp eq i32 %68, 0 - br i1 %.not69.i, label %._crit_edge.i, label %.preheader58.i - -.preheader58.i: ; preds = %.preheader59.i, %99 - %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %99 ], [ 0, %.preheader59.i ] - br label %69 + %.not69.i = icmp eq i32 %64, 0 + br i1 %.not69.i, label %ma_slot_allocator_alloc.exit, label %.preheader58.i -69: ; preds = %ma_ffs_32.exit.i, %.preheader58.i - %70 = load ptr, ptr %31, align 8, !tbaa !58 - %71 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %70, i64 %indvars.iv.i - %72 = load atomic i32, ptr %71 seq_cst, align 4 - %73 = icmp eq i32 %72, -1 - br i1 %73, label %99, label %.preheader.i - -.preheader.i: ; preds = %69, %76 - %.08.i.i = phi i32 [ %77, %76 ], [ 0, %69 ] - %74 = shl nuw i32 1, %.08.i.i - %75 = and i32 %74, %72 - %.not.i46.not.i = icmp eq i32 %75, 0 - br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %76 - -76: ; preds = %.preheader.i - %77 = add nuw nsw i32 %.08.i.i, 1 - %exitcond.not.i.i = icmp eq i32 %77, 32 +.preheader58.i: ; preds = %.preheader59.i, %95 + %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %95 ], [ 0, %.preheader59.i ] + br label %65 + +65: ; preds = %ma_ffs_32.exit.i, %.preheader58.i + %66 = load ptr, ptr %31, align 8, !tbaa !58 + %67 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %66, i64 %indvars.iv.i + %68 = load atomic i32, ptr %67 seq_cst, align 4 + %69 = icmp eq i32 %68, -1 + br i1 %69, label %95, label %.preheader.i + +.preheader.i: ; preds = %65, %72 + %.08.i.i = phi i32 [ %73, %72 ], [ 0, %65 ] + %70 = shl nuw i32 1, %.08.i.i + %71 = and i32 %70, %68 + %.not.i46.not.i = icmp eq i32 %71, 0 + br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %72 + +72: ; preds = %.preheader.i + %73 = add nuw nsw i32 %.08.i.i, 1 + %exitcond.not.i.i = icmp eq i32 %73, 32 br i1 %exitcond.not.i.i, label %.ma_ffs_32.exit_crit_edge.i, label %.preheader.i, !llvm.loop !62 -.ma_ffs_32.exit_crit_edge.i: ; preds = %76 +.ma_ffs_32.exit_crit_edge.i: ; preds = %72 br label %ma_ffs_32.exit.i, !llvm.loop !62 ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ffs_32.exit_crit_edge.i %.0.lcssa.i.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge.i ], [ %.08.i.i, %.preheader.i ] - %78 = shl nuw i32 1, %.0.lcssa.i.i - %79 = or i32 %78, %72 - %80 = load ptr, ptr %31, align 8, !tbaa !58 - %81 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %80, i64 %indvars.iv.i - %82 = cmpxchg volatile ptr %81, i32 %72, i32 %79 seq_cst seq_cst, align 4 - %83 = extractvalue { i32, i1 } %82, 1 - br i1 %83, label %84, label %69 - -84: ; preds = %ma_ffs_32.exit.i - %85 = trunc nuw nsw i64 %indvars.iv.i to i32 - %86 = atomicrmw add ptr %62, i32 1 seq_cst, align 8 - %87 = shl i32 %85, 5 - %88 = add i32 %.0.lcssa.i.i, %87 - %89 = load i32, ptr %48, align 4, !tbaa !60 - %.not.i = icmp ult i32 %88, %89 - br i1 %.not.i, label %90, label %ma_slot_allocator_alloc.exit - -90: ; preds = %84 - %91 = load ptr, ptr %47, align 8, !tbaa !59 - %92 = zext i32 %88 to i64 - %93 = getelementptr inbounds nuw i32, ptr %91, i64 %92 - %94 = load i32, ptr %93, align 4, !tbaa !3 - %95 = add i32 %94, 1 - store i32 %95, ptr %93, align 4, !tbaa !3 - %96 = zext i32 %95 to i64 - %97 = shl nuw i64 %96, 32 - %98 = or disjoint i64 %97, %92 - store i64 %98, ptr %61, align 8, !tbaa !63 + %74 = shl nuw i32 1, %.0.lcssa.i.i + %75 = or i32 %74, %68 + %76 = load ptr, ptr %31, align 8, !tbaa !58 + %77 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %76, i64 %indvars.iv.i + %78 = cmpxchg volatile ptr %77, i32 %68, i32 %75 seq_cst seq_cst, align 4 + %79 = extractvalue { i32, i1 } %78, 1 + br i1 %79, label %80, label %65 + +80: ; preds = %ma_ffs_32.exit.i + %81 = trunc nuw nsw i64 %indvars.iv.i to i32 + %82 = atomicrmw add ptr %62, i32 1 seq_cst, align 8 + %83 = shl i32 %81, 5 + %84 = add i32 %.0.lcssa.i.i, %83 + %85 = load i32, ptr %48, align 4, !tbaa !60 + %.not.i = icmp ult i32 %84, %85 + br i1 %.not.i, label %86, label %ma_slot_allocator_alloc.exit + +86: ; preds = %80 + %87 = load ptr, ptr %47, align 8, !tbaa !59 + %88 = zext i32 %84 to i64 + %89 = getelementptr inbounds nuw i32, ptr %87, i64 %88 + %90 = load i32, ptr %89, align 4, !tbaa !3 + %91 = add i32 %90, 1 + store i32 %91, ptr %89, align 4, !tbaa !3 + %92 = zext i32 %91 to i64 + %93 = shl nuw i64 %92, 32 + %94 = or disjoint i64 %93, %88 + store i64 %94, ptr %61, align 8, !tbaa !63 br label %ma_slot_allocator_alloc.exit -99: ; preds = %69 +95: ; preds = %65 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %100 = load i32, ptr %48, align 4, !tbaa !60 - %101 = lshr i32 %100, 5 - %102 = and i32 %100, 31 - %.not.i.i38 = icmp ne i32 %102, 0 - %103 = zext i1 %.not.i.i38 to i32 - %spec.select.i45.i = add nuw nsw i32 %101, %103 - %104 = zext nneg i32 %spec.select.i45.i to i64 - %105 = icmp samesign ult i64 %indvars.iv.next.i, %104 - br i1 %105, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 - -._crit_edge.i: ; preds = %99, %.preheader59.i - %.lcssa.i = phi i32 [ %64, %.preheader59.i ], [ %100, %99 ] - %106 = load i32, ptr %62, align 8, !tbaa !66 - %107 = icmp ult i32 %106, %.lcssa.i - br i1 %107, label %108, label %ma_slot_allocator_alloc.exit - -108: ; preds = %._crit_edge.i + %96 = load i32, ptr %48, align 4, !tbaa !60 + %97 = lshr i32 %96, 5 + %98 = and i32 %96, 31 + %.not.i.i38 = icmp ne i32 %98, 0 + %99 = zext i1 %.not.i.i38 to i32 + %spec.select.i45.i = add nuw nsw i32 %97, %99 + %100 = zext nneg i32 %spec.select.i45.i to i64 + %101 = icmp samesign ult i64 %indvars.iv.next.i, %100 + br i1 %101, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 + +._crit_edge.i: ; preds = %95 + %102 = load i32, ptr %62, align 8, !tbaa !66 + %103 = icmp ult i32 %102, %96 + br i1 %103, label %104, label %ma_slot_allocator_alloc.exit + +104: ; preds = %._crit_edge.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 br i1 %63, label %.preheader59.i, label %ma_slot_allocator_alloc.exit, !llvm.loop !67 -ma_slot_allocator_alloc.exit: ; preds = %._crit_edge.i, %108, %84, %90 - %109 = load ptr, ptr %30, align 8, !tbaa !79 - %110 = load i64, ptr %61, align 8, !tbaa !80 - %111 = and i64 %110, 65535 - %112 = getelementptr inbounds nuw %struct.ma_job, ptr %109, i64 %111, i32 1 - store i64 -1, ptr %112, align 8, !tbaa !69 - %113 = getelementptr inbounds nuw i8, ptr %2, i64 16 - store i64 %110, ptr %113, align 8, !tbaa !81 +ma_slot_allocator_alloc.exit: ; preds = %.preheader59.i, %._crit_edge.i, %104, %80, %86 + %105 = load ptr, ptr %30, align 8, !tbaa !79 + %106 = load i64, ptr %61, align 8, !tbaa !80 + %107 = and i64 %106, 65535 + %108 = getelementptr inbounds nuw %struct.ma_job, ptr %105, i64 %107, i32 1 + store i64 -1, ptr %108, align 8, !tbaa !69 + %109 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %106, ptr %109, align 8, !tbaa !81 br label %ma_job_queue_get_heap_layout.exit.thread ma_job_queue_get_heap_layout.exit.thread: ; preds = %ma_zero_memory_default.exit, %6, %ma_zero_memory_default.exit32, %3, %ma_slot_allocator_alloc.exit @@ -3709,198 +3697,192 @@ define range(i32 -4, 1) i32 @ma_job_queue_post(ptr noundef %0, ptr noundef reado %8 = getelementptr inbounds nuw i8, ptr %0, i64 136 br label %.preheader59.i -.preheader59.i: ; preds = %45, %5 - %9 = phi i1 [ true, %5 ], [ false, %45 ] +.preheader59.i: ; preds = %41, %5 + %9 = phi i1 [ true, %5 ], [ false, %41 ] %10 = load i32, ptr %7, align 4, !tbaa !60 - %11 = lshr i32 %10, 5 - %12 = and i32 %10, 31 - %.not.i65.i = icmp ne i32 %12, 0 - %13 = zext i1 %.not.i65.i to i32 - %14 = or i32 %11, %13 - %.not69.i = icmp eq i32 %14, 0 - br i1 %.not69.i, label %._crit_edge.i, label %.preheader58.i - -.preheader58.i: ; preds = %.preheader59.i, %36 - %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %36 ], [ 0, %.preheader59.i ] - br label %15 + %.not69.i = icmp eq i32 %10, 0 + br i1 %.not69.i, label %ma_slot_allocator_alloc.exit.thread, label %.preheader58.i -15: ; preds = %ma_ffs_32.exit.i, %.preheader58.i - %16 = load ptr, ptr %6, align 8, !tbaa !58 - %17 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %16, i64 %indvars.iv.i - %18 = load atomic i32, ptr %17 seq_cst, align 4 - %19 = icmp eq i32 %18, -1 - br i1 %19, label %36, label %.preheader.i - -.preheader.i: ; preds = %15, %22 - %.08.i.i = phi i32 [ %23, %22 ], [ 0, %15 ] - %20 = shl nuw i32 1, %.08.i.i - %21 = and i32 %20, %18 - %.not.i46.not.i = icmp eq i32 %21, 0 - br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %22 - -22: ; preds = %.preheader.i - %23 = add nuw nsw i32 %.08.i.i, 1 - %exitcond.not.i.i = icmp eq i32 %23, 32 +.preheader58.i: ; preds = %.preheader59.i, %32 + %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %32 ], [ 0, %.preheader59.i ] + br label %11 + +11: ; preds = %ma_ffs_32.exit.i, %.preheader58.i + %12 = load ptr, ptr %6, align 8, !tbaa !58 + %13 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %12, i64 %indvars.iv.i + %14 = load atomic i32, ptr %13 seq_cst, align 4 + %15 = icmp eq i32 %14, -1 + br i1 %15, label %32, label %.preheader.i + +.preheader.i: ; preds = %11, %18 + %.08.i.i = phi i32 [ %19, %18 ], [ 0, %11 ] + %16 = shl nuw i32 1, %.08.i.i + %17 = and i32 %16, %14 + %.not.i46.not.i = icmp eq i32 %17, 0 + br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %18 + +18: ; preds = %.preheader.i + %19 = add nuw nsw i32 %.08.i.i, 1 + %exitcond.not.i.i = icmp eq i32 %19, 32 br i1 %exitcond.not.i.i, label %.ma_ffs_32.exit_crit_edge.i, label %.preheader.i, !llvm.loop !62 -.ma_ffs_32.exit_crit_edge.i: ; preds = %22 +.ma_ffs_32.exit_crit_edge.i: ; preds = %18 br label %ma_ffs_32.exit.i, !llvm.loop !62 ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ffs_32.exit_crit_edge.i %.0.lcssa.i.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge.i ], [ %.08.i.i, %.preheader.i ] - %24 = shl nuw i32 1, %.0.lcssa.i.i - %25 = or i32 %24, %18 - %26 = load ptr, ptr %6, align 8, !tbaa !58 - %27 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %26, i64 %indvars.iv.i - %28 = cmpxchg volatile ptr %27, i32 %18, i32 %25 seq_cst seq_cst, align 4 - %29 = extractvalue { i32, i1 } %28, 1 - br i1 %29, label %30, label %15 - -30: ; preds = %ma_ffs_32.exit.i - %31 = trunc nuw nsw i64 %indvars.iv.i to i32 - %32 = atomicrmw add ptr %8, i32 1 seq_cst, align 8 - %33 = shl i32 %31, 5 - %34 = add i32 %.0.lcssa.i.i, %33 - %35 = load i32, ptr %7, align 4, !tbaa !60 - %.not.i = icmp ult i32 %34, %35 - br i1 %.not.i, label %46, label %ma_slot_allocator_alloc.exit.thread + %20 = shl nuw i32 1, %.0.lcssa.i.i + %21 = or i32 %20, %14 + %22 = load ptr, ptr %6, align 8, !tbaa !58 + %23 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %22, i64 %indvars.iv.i + %24 = cmpxchg volatile ptr %23, i32 %14, i32 %21 seq_cst seq_cst, align 4 + %25 = extractvalue { i32, i1 } %24, 1 + br i1 %25, label %26, label %11 -36: ; preds = %15 +26: ; preds = %ma_ffs_32.exit.i + %27 = trunc nuw nsw i64 %indvars.iv.i to i32 + %28 = atomicrmw add ptr %8, i32 1 seq_cst, align 8 + %29 = shl i32 %27, 5 + %30 = add i32 %.0.lcssa.i.i, %29 + %31 = load i32, ptr %7, align 4, !tbaa !60 + %.not.i = icmp ult i32 %30, %31 + br i1 %.not.i, label %42, label %ma_slot_allocator_alloc.exit.thread + +32: ; preds = %11 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %37 = load i32, ptr %7, align 4, !tbaa !60 - %38 = lshr i32 %37, 5 - %39 = and i32 %37, 31 - %.not.i.i = icmp ne i32 %39, 0 - %40 = zext i1 %.not.i.i to i32 - %spec.select.i45.i = add nuw nsw i32 %38, %40 - %41 = zext nneg i32 %spec.select.i45.i to i64 - %42 = icmp samesign ult i64 %indvars.iv.next.i, %41 - br i1 %42, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 - -._crit_edge.i: ; preds = %36, %.preheader59.i - %.lcssa.i = phi i32 [ %10, %.preheader59.i ], [ %37, %36 ] - %43 = load i32, ptr %8, align 8, !tbaa !66 - %44 = icmp ult i32 %43, %.lcssa.i - br i1 %44, label %45, label %ma_slot_allocator_alloc.exit.thread - -45: ; preds = %._crit_edge.i + %33 = load i32, ptr %7, align 4, !tbaa !60 + %34 = lshr i32 %33, 5 + %35 = and i32 %33, 31 + %.not.i.i = icmp ne i32 %35, 0 + %36 = zext i1 %.not.i.i to i32 + %spec.select.i45.i = add nuw nsw i32 %34, %36 + %37 = zext nneg i32 %spec.select.i45.i to i64 + %38 = icmp samesign ult i64 %indvars.iv.next.i, %37 + br i1 %38, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 + +._crit_edge.i: ; preds = %32 + %39 = load i32, ptr %8, align 8, !tbaa !66 + %40 = icmp ult i32 %39, %33 + br i1 %40, label %41, label %ma_slot_allocator_alloc.exit.thread + +41: ; preds = %._crit_edge.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 br i1 %9, label %.preheader59.i, label %ma_slot_allocator_alloc.exit.thread, !llvm.loop !67 -46: ; preds = %30 - %47 = getelementptr inbounds nuw i8, ptr %0, i64 128 - %48 = load ptr, ptr %47, align 8, !tbaa !59 - %49 = zext i32 %34 to i64 - %50 = getelementptr inbounds nuw i32, ptr %48, i64 %49 - %51 = load i32, ptr %50, align 4, !tbaa !3 - %52 = add i32 %51, 1 - store i32 %52, ptr %50, align 4, !tbaa !3 - %53 = zext i32 %52 to i64 - %54 = shl nuw i64 %53, 32 - %55 = or disjoint i64 %54, %49 - %56 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %57 = load ptr, ptr %56, align 8, !tbaa !79 - %58 = and i32 %34, 65535 - %59 = zext nneg i32 %58 to i64 - %60 = getelementptr inbounds nuw %struct.ma_job, ptr %57, i64 %59 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %60, ptr noundef nonnull align 8 dereferenceable(104) %1, i64 104, i1 false), !tbaa.struct !83 - %61 = load ptr, ptr %56, align 8, !tbaa !79 - %62 = getelementptr inbounds nuw %struct.ma_job, ptr %61, i64 %59 - store i64 %55, ptr %62, align 8, !tbaa !7 - %63 = load i16, ptr %1, align 8, !tbaa !7 - %64 = load ptr, ptr %56, align 8, !tbaa !79 - %65 = getelementptr inbounds nuw %struct.ma_job, ptr %64, i64 %59 - store i16 %63, ptr %65, align 8, !tbaa !7 - %66 = load ptr, ptr %56, align 8, !tbaa !79 - %67 = getelementptr inbounds nuw %struct.ma_job, ptr %66, i64 %59, i32 1 - store i64 -1, ptr %67, align 8, !tbaa !69 - %68 = getelementptr inbounds nuw i8, ptr %0, i64 168 - %69 = atomicrmw volatile xchg ptr %68, i32 1 acquire, align 4 - %70 = icmp eq i32 %69, 0 - br i1 %70, label %ma_spinlock_lock.exit, label %.preheader.i37 +42: ; preds = %26 + %43 = getelementptr inbounds nuw i8, ptr %0, i64 128 + %44 = load ptr, ptr %43, align 8, !tbaa !59 + %45 = zext i32 %30 to i64 + %46 = getelementptr inbounds nuw i32, ptr %44, i64 %45 + %47 = load i32, ptr %46, align 4, !tbaa !3 + %48 = add i32 %47, 1 + store i32 %48, ptr %46, align 4, !tbaa !3 + %49 = zext i32 %48 to i64 + %50 = shl nuw i64 %49, 32 + %51 = or disjoint i64 %50, %45 + %52 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %53 = load ptr, ptr %52, align 8, !tbaa !79 + %54 = and i32 %30, 65535 + %55 = zext nneg i32 %54 to i64 + %56 = getelementptr inbounds nuw %struct.ma_job, ptr %53, i64 %55 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %56, ptr noundef nonnull align 8 dereferenceable(104) %1, i64 104, i1 false), !tbaa.struct !83 + %57 = load ptr, ptr %52, align 8, !tbaa !79 + %58 = getelementptr inbounds nuw %struct.ma_job, ptr %57, i64 %55 + store i64 %51, ptr %58, align 8, !tbaa !7 + %59 = load i16, ptr %1, align 8, !tbaa !7 + %60 = load ptr, ptr %52, align 8, !tbaa !79 + %61 = getelementptr inbounds nuw %struct.ma_job, ptr %60, i64 %55 + store i16 %59, ptr %61, align 8, !tbaa !7 + %62 = load ptr, ptr %52, align 8, !tbaa !79 + %63 = getelementptr inbounds nuw %struct.ma_job, ptr %62, i64 %55, i32 1 + store i64 -1, ptr %63, align 8, !tbaa !69 + %64 = getelementptr inbounds nuw i8, ptr %0, i64 168 + %65 = atomicrmw volatile xchg ptr %64, i32 1 acquire, align 4 + %66 = icmp eq i32 %65, 0 + br i1 %66, label %ma_spinlock_lock.exit, label %.preheader.i37 .loopexit.i: ; preds = %.lr.ph.i, %.preheader.i37 - %71 = atomicrmw volatile xchg ptr %68, i32 1 acquire, align 4 - %72 = icmp eq i32 %71, 0 - br i1 %72, label %ma_spinlock_lock.exit, label %.preheader.i37 + %67 = atomicrmw volatile xchg ptr %64, i32 1 acquire, align 4 + %68 = icmp eq i32 %67, 0 + br i1 %68, label %ma_spinlock_lock.exit, label %.preheader.i37 -.preheader.i37: ; preds = %46, %.loopexit.i - %73 = load atomic volatile i32, ptr %68 monotonic, align 4 - %74 = icmp eq i32 %73, 1 - br i1 %74, label %.lr.ph.i, label %.loopexit.i +.preheader.i37: ; preds = %42, %.loopexit.i + %69 = load atomic volatile i32, ptr %64 monotonic, align 4 + %70 = icmp eq i32 %69, 1 + br i1 %70, label %.lr.ph.i, label %.loopexit.i .lr.ph.i: ; preds = %.preheader.i37, %.lr.ph.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 - %75 = load atomic volatile i32, ptr %68 monotonic, align 4 - %76 = icmp eq i32 %75, 1 - br i1 %76, label %.lr.ph.i, label %.loopexit.i, !llvm.loop !40 + %71 = load atomic volatile i32, ptr %64 monotonic, align 4 + %72 = icmp eq i32 %71, 1 + br i1 %72, label %.lr.ph.i, label %.loopexit.i, !llvm.loop !40 -ma_spinlock_lock.exit: ; preds = %.loopexit.i, %46 - %77 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %invariant.op = or disjoint i64 %49, 4294967296 - br label %78 +ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 + %73 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %invariant.op = or disjoint i64 %45, 4294967296 + br label %74 -78: ; preds = %.backedge, %ma_spinlock_lock.exit - %79 = load atomic i64, ptr %77 seq_cst, align 8 - %80 = load ptr, ptr %56, align 8, !tbaa !79 - %81 = and i64 %79, 65535 - %82 = getelementptr inbounds nuw %struct.ma_job, ptr %80, i64 %81, i32 1 - %83 = load atomic i64, ptr %82 seq_cst, align 8 - %84 = load atomic i64, ptr %77 seq_cst, align 8 - %85 = xor i64 %84, %79 - %86 = and i64 %85, -4294901761 - %87 = icmp eq i64 %86, 0 - br i1 %87, label %88, label %.backedge - -88: ; preds = %78 - %89 = and i64 %83, 65535 - %90 = icmp eq i64 %89, 65535 - br i1 %90, label %91, label %97 +74: ; preds = %.backedge, %ma_spinlock_lock.exit + %75 = load atomic i64, ptr %73 seq_cst, align 8 + %76 = load ptr, ptr %52, align 8, !tbaa !79 + %77 = and i64 %75, 65535 + %78 = getelementptr inbounds nuw %struct.ma_job, ptr %76, i64 %77, i32 1 + %79 = load atomic i64, ptr %78 seq_cst, align 8 + %80 = load atomic i64, ptr %73 seq_cst, align 8 + %81 = xor i64 %80, %75 + %82 = and i64 %81, -4294901761 + %83 = icmp eq i64 %82, 0 + br i1 %83, label %84, label %.backedge + +84: ; preds = %74 + %85 = and i64 %79, 65535 + %86 = icmp eq i64 %85, 65535 + br i1 %86, label %87, label %93 -91: ; preds = %88 - %92 = load ptr, ptr %56, align 8, !tbaa !79 - %93 = getelementptr inbounds nuw %struct.ma_job, ptr %92, i64 %81, i32 1 - %94 = and i64 %83, -4294967296 - %.reass = add i64 %94, %invariant.op - %95 = cmpxchg volatile ptr %93, i64 %83, i64 %.reass seq_cst seq_cst, align 8 - %96 = extractvalue { i64, i1 } %95, 1 - br i1 %96, label %102, label %.backedge - -97: ; preds = %88 - %98 = and i64 %79, -4294967296 - %99 = add i64 %98, 4294967296 - %100 = or disjoint i64 %89, %99 - %101 = cmpxchg volatile ptr %77, i64 %79, i64 %100 seq_cst seq_cst, align 8 +87: ; preds = %84 + %88 = load ptr, ptr %52, align 8, !tbaa !79 + %89 = getelementptr inbounds nuw %struct.ma_job, ptr %88, i64 %77, i32 1 + %90 = and i64 %79, -4294967296 + %.reass = add i64 %90, %invariant.op + %91 = cmpxchg volatile ptr %89, i64 %79, i64 %.reass seq_cst seq_cst, align 8 + %92 = extractvalue { i64, i1 } %91, 1 + br i1 %92, label %98, label %.backedge + +93: ; preds = %84 + %94 = and i64 %75, -4294967296 + %95 = add i64 %94, 4294967296 + %96 = or disjoint i64 %85, %95 + %97 = cmpxchg volatile ptr %73, i64 %75, i64 %96 seq_cst seq_cst, align 8 br label %.backedge -.backedge: ; preds = %97, %91, %78 - br label %78 - -102: ; preds = %91 - %103 = and i64 %79, -4294967296 - %104 = add i64 %103, 4294967296 - %105 = or disjoint i64 %104, %49 - %106 = cmpxchg volatile ptr %77, i64 %79, i64 %105 seq_cst seq_cst, align 8 - store atomic volatile i32 0, ptr %68 release, align 4 - %107 = load i32, ptr %0, align 8, !tbaa !77 - %108 = and i32 %107, 1 - %109 = icmp eq i32 %108, 0 - br i1 %109, label %110, label %ma_slot_allocator_alloc.exit.thread +.backedge: ; preds = %93, %87, %74 + br label %74 -110: ; preds = %102 - %111 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %112 = getelementptr inbounds nuw i8, ptr %0, i64 32 - %113 = tail call i32 @pthread_mutex_lock(ptr noundef nonnull %112) #66 - %114 = load i32, ptr %111, align 8, !tbaa !41 - %115 = add nsw i32 %114, 1 - store i32 %115, ptr %111, align 8, !tbaa !41 - %116 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %117 = tail call i32 @pthread_cond_signal(ptr noundef nonnull %116) #66 - %118 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %112) #66 +98: ; preds = %87 + %99 = and i64 %75, -4294967296 + %100 = add i64 %99, 4294967296 + %101 = or disjoint i64 %100, %45 + %102 = cmpxchg volatile ptr %73, i64 %75, i64 %101 seq_cst seq_cst, align 8 + store atomic volatile i32 0, ptr %64 release, align 4 + %103 = load i32, ptr %0, align 8, !tbaa !77 + %104 = and i32 %103, 1 + %105 = icmp eq i32 %104, 0 + br i1 %105, label %106, label %ma_slot_allocator_alloc.exit.thread + +106: ; preds = %98 + %107 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %108 = getelementptr inbounds nuw i8, ptr %0, i64 32 + %109 = tail call i32 @pthread_mutex_lock(ptr noundef nonnull %108) #66 + %110 = load i32, ptr %107, align 8, !tbaa !41 + %111 = add nsw i32 %110, 1 + store i32 %111, ptr %107, align 8, !tbaa !41 + %112 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %113 = tail call i32 @pthread_cond_signal(ptr noundef nonnull %112) #66 + %114 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %108) #66 br label %ma_slot_allocator_alloc.exit.thread -ma_slot_allocator_alloc.exit.thread: ; preds = %._crit_edge.i, %45, %30, %102, %110, %2 - %.0 = phi i32 [ -2, %2 ], [ 0, %110 ], [ 0, %102 ], [ -4, %30 ], [ -4, %45 ], [ -4, %._crit_edge.i ] +ma_slot_allocator_alloc.exit.thread: ; preds = %.preheader59.i, %._crit_edge.i, %41, %26, %98, %106, %2 + %.0 = phi i32 [ -2, %2 ], [ 0, %106 ], [ 0, %98 ], [ -4, %26 ], [ -4, %41 ], [ -4, %._crit_edge.i ], [ -4, %.preheader59.i ] ret i32 %.0 } diff --git a/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll b/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll index ae910497dd2..777659bafc5 100644 --- a/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll +++ b/bench/pola-rs/optimized/1rsrmy2r4dk76n6ayk75n7qe2.ll @@ -36254,11 +36254,12 @@ 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 %44 = getelementptr i16, ptr %41, i64 %42 + %umax.i = call i64 @llvm.umax.i64(i64 %39, i64 1) br label %45 ._crit_edge.loopexit.i: ; preds = %_ZN14polars_parquet7parquet8encoding9bitpacked6decode11decode_pack17hc429c7ce337bba3dE.exit.i @@ -36317,11 +36318,11 @@ define hidden void @_ZN14polars_parquet5arrow4read11deserialize12nested_utils20c _ZN14polars_parquet7parquet8encoding9bitpacked6decode11decode_pack17hc429c7ce337bba3dE.exit.i: ; preds = %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17h4455f0d8d4d9664dE.exit.i.i", %59 %63 = getelementptr i8, ptr %.sroa.03.012.i, i64 32 - %exitcond.not.i = icmp eq i64 %46, %39 + %exitcond.not.i = icmp eq i64 %46, %umax.i 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/pola-rs/optimized/byas2yzy27h8nly1lm4ekoo5u.ll b/bench/pola-rs/optimized/byas2yzy27h8nly1lm4ekoo5u.ll index 14a00dd9d7e..ee89f11a8dd 100644 --- a/bench/pola-rs/optimized/byas2yzy27h8nly1lm4ekoo5u.ll +++ b/bench/pola-rs/optimized/byas2yzy27h8nly1lm4ekoo5u.ll @@ -39147,7 +39147,7 @@ define internal fastcc void @"_ZN14polars_parquet7parquet8encoding9bitpacked6dec %15 = load i64, ptr %14, align 8, !noundef !3 %16 = icmp ult i64 %15, 2305843009213693952 tail call void @llvm.assume(i1 %16) - %.not = icmp eq i64 %10, 0 + %.not = icmp eq i64 %5, 0 br i1 %.not, label %._crit_edge, label %.lr.ph .lr.ph: ; preds = %2 @@ -39161,6 +39161,7 @@ define internal fastcc void @"_ZN14polars_parquet7parquet8encoding9bitpacked6dec %23 = shl i64 %22, 2 %24 = and i64 %23, 2305843009213693948 %.promoted16 = load i64, ptr %18, align 8, !alias.scope !3184 + %umax = tail call i64 @llvm.umax.i64(i64 %10, i64 1) br label %28 ._crit_edge.loopexit: ; preds = %_ZN14polars_parquet7parquet8encoding9bitpacked6decode11decode_pack17he3b20eb4ee3e3a12E.exit @@ -39227,7 +39228,7 @@ define internal fastcc void @"_ZN14polars_parquet7parquet8encoding9bitpacked6dec _ZN14polars_parquet7parquet8encoding9bitpacked6decode11decode_pack17he3b20eb4ee3e3a12E.exit: ; preds = %41, %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17h4455f0d8d4d9664dE.exit.i" %45 = getelementptr i8, ptr %.sroa.03.014, i64 128 - %exitcond.not = icmp eq i64 %31, %10 + %exitcond.not = icmp eq i64 %31, %umax br i1 %exitcond.not, label %._crit_edge.loopexit, label %28 } diff --git a/bench/raylib/optimized/raudio.ll b/bench/raylib/optimized/raudio.ll index d9aeae46275..4af6fe85c41 100644 --- a/bench/raylib/optimized/raudio.ll +++ b/bench/raylib/optimized/raudio.ll @@ -3066,100 +3066,94 @@ define hidden range(i32 -4, 1) i32 @ma_slot_allocator_alloc(ptr noundef captures %6 = getelementptr inbounds nuw i8, ptr %0, i64 16 br label %.preheader59 -.preheader59: ; preds = %.preheader60, %56 - %7 = phi i1 [ true, %.preheader60 ], [ false, %56 ] +.preheader59: ; preds = %.preheader60, %52 + %7 = phi i1 [ true, %.preheader60 ], [ false, %52 ] %8 = load i32, ptr %5, align 4 - %9 = lshr i32 %8, 5 - %10 = and i32 %8, 31 - %.not.i65 = icmp ne i32 %10, 0 - %11 = zext i1 %.not.i65 to i32 - %12 = or i32 %9, %11 - %.not69 = icmp eq i32 %12, 0 - br i1 %.not69, label %._crit_edge, label %.preheader58 - -.preheader58: ; preds = %.preheader59, %47 - %indvars.iv = phi i64 [ %indvars.iv.next, %47 ], [ 0, %.preheader59 ] - br label %13 + %.not69 = icmp eq i32 %8, 0 + br i1 %.not69, label %.thread54, label %.preheader58 -13: ; preds = %.preheader58, %ma_ffs_32.exit - %14 = load ptr, ptr %0, align 8 - %15 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %14, i64 %indvars.iv - %16 = load atomic i32, ptr %15 seq_cst, align 4 - %17 = icmp eq i32 %16, -1 - br i1 %17, label %47, label %.preheader - -.preheader: ; preds = %13, %20 - %.08.i = phi i32 [ %21, %20 ], [ 0, %13 ] - %18 = shl nuw i32 1, %.08.i - %19 = and i32 %18, %16 - %.not.i46.not = icmp eq i32 %19, 0 - br i1 %.not.i46.not, label %ma_ffs_32.exit, label %20 - -20: ; preds = %.preheader - %21 = add nuw nsw i32 %.08.i, 1 - %exitcond.not.i = icmp eq i32 %21, 32 +.preheader58: ; preds = %.preheader59, %43 + %indvars.iv = phi i64 [ %indvars.iv.next, %43 ], [ 0, %.preheader59 ] + br label %9 + +9: ; preds = %.preheader58, %ma_ffs_32.exit + %10 = load ptr, ptr %0, align 8 + %11 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %10, i64 %indvars.iv + %12 = load atomic i32, ptr %11 seq_cst, align 4 + %13 = icmp eq i32 %12, -1 + br i1 %13, label %43, label %.preheader + +.preheader: ; preds = %9, %16 + %.08.i = phi i32 [ %17, %16 ], [ 0, %9 ] + %14 = shl nuw i32 1, %.08.i + %15 = and i32 %14, %12 + %.not.i46.not = icmp eq i32 %15, 0 + br i1 %.not.i46.not, label %ma_ffs_32.exit, label %16 + +16: ; preds = %.preheader + %17 = add nuw nsw i32 %.08.i, 1 + %exitcond.not.i = icmp eq i32 %17, 32 br i1 %exitcond.not.i, label %ma_ffs_32.exit, label %.preheader -ma_ffs_32.exit: ; preds = %.preheader, %20 - %.0.lcssa.i = phi i32 [ 32, %20 ], [ %.08.i, %.preheader ] - %22 = shl nuw i32 1, %.0.lcssa.i - %23 = or i32 %22, %16 - %24 = load ptr, ptr %0, align 8 - %25 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %24, i64 %indvars.iv - %26 = cmpxchg volatile ptr %25, i32 %16, i32 %23 seq_cst seq_cst, align 4 - %27 = extractvalue { i32, i1 } %26, 1 - br i1 %27, label %28, label %13 - -28: ; preds = %ma_ffs_32.exit - %29 = trunc nuw nsw i64 %indvars.iv to i32 - %30 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 - %31 = shl i32 %29, 5 - %32 = add i32 %.0.lcssa.i, %31 - %33 = load i32, ptr %5, align 4 - %.not = icmp ult i32 %32, %33 - br i1 %.not, label %34, label %.thread54 +ma_ffs_32.exit: ; preds = %.preheader, %16 + %.0.lcssa.i = phi i32 [ 32, %16 ], [ %.08.i, %.preheader ] + %18 = shl nuw i32 1, %.0.lcssa.i + %19 = or i32 %18, %12 + %20 = load ptr, ptr %0, align 8 + %21 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %20, i64 %indvars.iv + %22 = cmpxchg volatile ptr %21, i32 %12, i32 %19 seq_cst seq_cst, align 4 + %23 = extractvalue { i32, i1 } %22, 1 + br i1 %23, label %24, label %9 + +24: ; preds = %ma_ffs_32.exit + %25 = trunc nuw nsw i64 %indvars.iv to i32 + %26 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 + %27 = shl i32 %25, 5 + %28 = add i32 %.0.lcssa.i, %27 + %29 = load i32, ptr %5, align 4 + %.not = icmp ult i32 %28, %29 + br i1 %.not, label %30, label %.thread54 -34: ; preds = %28 - %35 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %36 = load ptr, ptr %35, align 8 - %37 = zext i32 %32 to i64 - %38 = getelementptr inbounds nuw i32, ptr %36, i64 %37 +30: ; preds = %24 + %31 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %32 = load ptr, ptr %31, align 8 + %33 = zext i32 %28 to i64 + %34 = getelementptr inbounds nuw i32, ptr %32, i64 %33 + %35 = load i32, ptr %34, align 4 + %36 = add i32 %35, 1 + store i32 %36, ptr %34, align 4 + %37 = load ptr, ptr %31, align 8 + %38 = getelementptr inbounds nuw i32, ptr %37, i64 %33 %39 = load i32, ptr %38, align 4 - %40 = add i32 %39, 1 - store i32 %40, ptr %38, align 4 - %41 = load ptr, ptr %35, align 8 - %42 = getelementptr inbounds nuw i32, ptr %41, i64 %37 - %43 = load i32, ptr %42, align 4 - %44 = zext i32 %43 to i64 - %45 = shl nuw i64 %44, 32 - %46 = or disjoint i64 %45, %37 - store i64 %46, ptr %1, align 8 + %40 = zext i32 %39 to i64 + %41 = shl nuw i64 %40, 32 + %42 = or disjoint i64 %41, %33 + store i64 %42, ptr %1, align 8 br label %.thread54 -47: ; preds = %13 +43: ; preds = %9 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %48 = load i32, ptr %5, align 4 - %49 = lshr i32 %48, 5 - %50 = and i32 %48, 31 - %.not.i = icmp ne i32 %50, 0 - %51 = zext i1 %.not.i to i32 - %spec.select.i45 = add nuw nsw i32 %49, %51 - %52 = zext nneg i32 %spec.select.i45 to i64 - %53 = icmp samesign ult i64 %indvars.iv.next, %52 - br i1 %53, label %.preheader58, label %._crit_edge - -._crit_edge: ; preds = %47, %.preheader59 - %.lcssa = phi i32 [ %8, %.preheader59 ], [ %48, %47 ] - %54 = load i32, ptr %6, align 8 - %55 = icmp ult i32 %54, %.lcssa - br i1 %55, label %56, label %.thread54 - -56: ; preds = %._crit_edge + %44 = load i32, ptr %5, align 4 + %45 = lshr i32 %44, 5 + %46 = and i32 %44, 31 + %.not.i = icmp ne i32 %46, 0 + %47 = zext i1 %.not.i to i32 + %spec.select.i45 = add nuw nsw i32 %45, %47 + %48 = zext nneg i32 %spec.select.i45 to i64 + %49 = icmp samesign ult i64 %indvars.iv.next, %48 + br i1 %49, label %.preheader58, label %._crit_edge + +._crit_edge: ; preds = %43 + %50 = load i32, ptr %6, align 8 + %51 = icmp ult i32 %50, %44 + br i1 %51, label %52, label %.thread54 + +52: ; preds = %._crit_edge tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 br i1 %7, label %.preheader59, label %.thread54 -.thread54: ; preds = %._crit_edge, %56, %34, %28, %2 - %.0 = phi i32 [ -2, %2 ], [ -4, %28 ], [ 0, %34 ], [ -4, %56 ], [ -4, %._crit_edge ] +.thread54: ; preds = %.preheader59, %._crit_edge, %52, %30, %24, %2 + %.0 = phi i32 [ -2, %2 ], [ -4, %24 ], [ 0, %30 ], [ -4, %52 ], [ -4, %._crit_edge ], [ -4, %.preheader59 ] ret i32 %.0 } @@ -3414,106 +3408,100 @@ ma_semaphore_init.exit: ; preds = %57, %60, %53, %34 %63 = getelementptr inbounds nuw i8, ptr %2, i64 136 br label %.preheader59.i -.preheader59.i: ; preds = %112, %ma_semaphore_init.exit - %64 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %112 ] +.preheader59.i: ; preds = %108, %ma_semaphore_init.exit + %64 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %108 ] %65 = load i32, ptr %49, align 4 - %66 = lshr i32 %65, 5 - %67 = and i32 %65, 31 - %.not.i65.i = icmp ne i32 %67, 0 - %68 = zext i1 %.not.i65.i to i32 - %69 = or i32 %66, %68 - %.not69.i = icmp eq i32 %69, 0 - br i1 %.not69.i, label %._crit_edge.i, label %.preheader58.i - -.preheader58.i: ; preds = %.preheader59.i, %103 - %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %103 ], [ 0, %.preheader59.i ] - br label %70 + %.not69.i = icmp eq i32 %65, 0 + br i1 %.not69.i, label %ma_slot_allocator_alloc.exit, label %.preheader58.i + +.preheader58.i: ; preds = %.preheader59.i, %99 + %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %99 ], [ 0, %.preheader59.i ] + br label %66 -70: ; preds = %ma_ffs_32.exit.i, %.preheader58.i - %71 = load ptr, ptr %32, align 8 - %72 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %71, i64 %indvars.iv.i - %73 = load atomic i32, ptr %72 seq_cst, align 4 - %74 = icmp eq i32 %73, -1 - br i1 %74, label %103, label %.preheader.i - -.preheader.i: ; preds = %70, %77 - %.08.i.i = phi i32 [ %78, %77 ], [ 0, %70 ] - %75 = shl nuw i32 1, %.08.i.i - %76 = and i32 %75, %73 - %.not.i46.not.i = icmp eq i32 %76, 0 - br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %77 - -77: ; preds = %.preheader.i - %78 = add nuw nsw i32 %.08.i.i, 1 - %exitcond.not.i.i = icmp eq i32 %78, 32 +66: ; preds = %ma_ffs_32.exit.i, %.preheader58.i + %67 = load ptr, ptr %32, align 8 + %68 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %67, i64 %indvars.iv.i + %69 = load atomic i32, ptr %68 seq_cst, align 4 + %70 = icmp eq i32 %69, -1 + br i1 %70, label %99, label %.preheader.i + +.preheader.i: ; preds = %66, %73 + %.08.i.i = phi i32 [ %74, %73 ], [ 0, %66 ] + %71 = shl nuw i32 1, %.08.i.i + %72 = and i32 %71, %69 + %.not.i46.not.i = icmp eq i32 %72, 0 + br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %73 + +73: ; preds = %.preheader.i + %74 = add nuw nsw i32 %.08.i.i, 1 + %exitcond.not.i.i = icmp eq i32 %74, 32 br i1 %exitcond.not.i.i, label %ma_ffs_32.exit.i, label %.preheader.i -ma_ffs_32.exit.i: ; preds = %.preheader.i, %77 - %.0.lcssa.i.i = phi i32 [ 32, %77 ], [ %.08.i.i, %.preheader.i ] - %79 = shl nuw i32 1, %.0.lcssa.i.i - %80 = or i32 %79, %73 - %81 = load ptr, ptr %32, align 8 - %82 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %81, i64 %indvars.iv.i - %83 = cmpxchg volatile ptr %82, i32 %73, i32 %80 seq_cst seq_cst, align 4 - %84 = extractvalue { i32, i1 } %83, 1 - br i1 %84, label %85, label %70 - -85: ; preds = %ma_ffs_32.exit.i - %86 = trunc nuw nsw i64 %indvars.iv.i to i32 - %87 = atomicrmw add ptr %63, i32 1 seq_cst, align 8 - %88 = shl i32 %86, 5 - %89 = add i32 %.0.lcssa.i.i, %88 - %90 = load i32, ptr %49, align 4 - %.not.i = icmp ult i32 %89, %90 - br i1 %.not.i, label %91, label %ma_slot_allocator_alloc.exit - -91: ; preds = %85 - %92 = load ptr, ptr %48, align 8 - %93 = zext i32 %89 to i64 - %94 = getelementptr inbounds nuw i32, ptr %92, i64 %93 +ma_ffs_32.exit.i: ; preds = %.preheader.i, %73 + %.0.lcssa.i.i = phi i32 [ 32, %73 ], [ %.08.i.i, %.preheader.i ] + %75 = shl nuw i32 1, %.0.lcssa.i.i + %76 = or i32 %75, %69 + %77 = load ptr, ptr %32, align 8 + %78 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %77, i64 %indvars.iv.i + %79 = cmpxchg volatile ptr %78, i32 %69, i32 %76 seq_cst seq_cst, align 4 + %80 = extractvalue { i32, i1 } %79, 1 + br i1 %80, label %81, label %66 + +81: ; preds = %ma_ffs_32.exit.i + %82 = trunc nuw nsw i64 %indvars.iv.i to i32 + %83 = atomicrmw add ptr %63, i32 1 seq_cst, align 8 + %84 = shl i32 %82, 5 + %85 = add i32 %.0.lcssa.i.i, %84 + %86 = load i32, ptr %49, align 4 + %.not.i = icmp ult i32 %85, %86 + br i1 %.not.i, label %87, label %ma_slot_allocator_alloc.exit + +87: ; preds = %81 + %88 = load ptr, ptr %48, align 8 + %89 = zext i32 %85 to i64 + %90 = getelementptr inbounds nuw i32, ptr %88, i64 %89 + %91 = load i32, ptr %90, align 4 + %92 = add i32 %91, 1 + store i32 %92, ptr %90, align 4 + %93 = load ptr, ptr %48, align 8 + %94 = getelementptr inbounds nuw i32, ptr %93, i64 %89 %95 = load i32, ptr %94, align 4 - %96 = add i32 %95, 1 - store i32 %96, ptr %94, align 4 - %97 = load ptr, ptr %48, align 8 - %98 = getelementptr inbounds nuw i32, ptr %97, i64 %93 - %99 = load i32, ptr %98, align 4 - %100 = zext i32 %99 to i64 - %101 = shl nuw i64 %100, 32 - %102 = or disjoint i64 %101, %93 - store i64 %102, ptr %62, align 8 + %96 = zext i32 %95 to i64 + %97 = shl nuw i64 %96, 32 + %98 = or disjoint i64 %97, %89 + store i64 %98, ptr %62, align 8 br label %ma_slot_allocator_alloc.exit -103: ; preds = %70 +99: ; preds = %66 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %104 = load i32, ptr %49, align 4 - %105 = lshr i32 %104, 5 - %106 = and i32 %104, 31 - %.not.i.i38 = icmp ne i32 %106, 0 - %107 = zext i1 %.not.i.i38 to i32 - %spec.select.i45.i = add nuw nsw i32 %105, %107 - %108 = zext nneg i32 %spec.select.i45.i to i64 - %109 = icmp samesign ult i64 %indvars.iv.next.i, %108 - br i1 %109, label %.preheader58.i, label %._crit_edge.i - -._crit_edge.i: ; preds = %103, %.preheader59.i - %.lcssa.i = phi i32 [ %65, %.preheader59.i ], [ %104, %103 ] - %110 = load i32, ptr %63, align 8 - %111 = icmp ult i32 %110, %.lcssa.i - br i1 %111, label %112, label %ma_slot_allocator_alloc.exit - -112: ; preds = %._crit_edge.i + %100 = load i32, ptr %49, align 4 + %101 = lshr i32 %100, 5 + %102 = and i32 %100, 31 + %.not.i.i38 = icmp ne i32 %102, 0 + %103 = zext i1 %.not.i.i38 to i32 + %spec.select.i45.i = add nuw nsw i32 %101, %103 + %104 = zext nneg i32 %spec.select.i45.i to i64 + %105 = icmp samesign ult i64 %indvars.iv.next.i, %104 + br i1 %105, label %.preheader58.i, label %._crit_edge.i + +._crit_edge.i: ; preds = %99 + %106 = load i32, ptr %63, align 8 + %107 = icmp ult i32 %106, %100 + br i1 %107, label %108, label %ma_slot_allocator_alloc.exit + +108: ; preds = %._crit_edge.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 br i1 %64, label %.preheader59.i, label %ma_slot_allocator_alloc.exit -ma_slot_allocator_alloc.exit: ; preds = %._crit_edge.i, %112, %85, %91 - %113 = load ptr, ptr %30, align 8 - %114 = load i64, ptr %62, align 8 - %115 = and i64 %114, 65535 - %116 = getelementptr inbounds nuw %struct.ma_job, ptr %113, i64 %115, i32 1 - store i64 -1, ptr %116, align 8 - %117 = load i64, ptr %62, align 8 - %118 = getelementptr inbounds nuw i8, ptr %2, i64 16 - store i64 %117, ptr %118, align 8 +ma_slot_allocator_alloc.exit: ; preds = %.preheader59.i, %._crit_edge.i, %108, %81, %87 + %109 = load ptr, ptr %30, align 8 + %110 = load i64, ptr %62, align 8 + %111 = and i64 %110, 65535 + %112 = getelementptr inbounds nuw %struct.ma_job, ptr %109, i64 %111, i32 1 + store i64 -1, ptr %112, align 8 + %113 = load i64, ptr %62, align 8 + %114 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %113, ptr %114, align 8 br label %ma_job_queue_get_heap_layout.exit.thread ma_job_queue_get_heap_layout.exit.thread: ; preds = %ma_zero_memory_default.exit, %6, %ma_zero_memory_default.exit32, %3, %ma_slot_allocator_alloc.exit @@ -3702,198 +3690,192 @@ define hidden range(i32 -4, 1) i32 @ma_job_queue_post(ptr noundef %0, ptr nounde %8 = getelementptr inbounds nuw i8, ptr %0, i64 136 br label %.preheader59.i -.preheader59.i: ; preds = %45, %5 - %9 = phi i1 [ true, %5 ], [ false, %45 ] +.preheader59.i: ; preds = %41, %5 + %9 = phi i1 [ true, %5 ], [ false, %41 ] %10 = load i32, ptr %7, align 4 - %11 = lshr i32 %10, 5 - %12 = and i32 %10, 31 - %.not.i65.i = icmp ne i32 %12, 0 - %13 = zext i1 %.not.i65.i to i32 - %14 = or i32 %11, %13 - %.not69.i = icmp eq i32 %14, 0 - br i1 %.not69.i, label %._crit_edge.i, label %.preheader58.i - -.preheader58.i: ; preds = %.preheader59.i, %36 - %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %36 ], [ 0, %.preheader59.i ] - br label %15 + %.not69.i = icmp eq i32 %10, 0 + br i1 %.not69.i, label %ma_slot_allocator_alloc.exit.thread, label %.preheader58.i -15: ; preds = %ma_ffs_32.exit.i, %.preheader58.i - %16 = load ptr, ptr %6, align 8 - %17 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %16, i64 %indvars.iv.i - %18 = load atomic i32, ptr %17 seq_cst, align 4 - %19 = icmp eq i32 %18, -1 - br i1 %19, label %36, label %.preheader.i - -.preheader.i: ; preds = %15, %22 - %.08.i.i = phi i32 [ %23, %22 ], [ 0, %15 ] - %20 = shl nuw i32 1, %.08.i.i - %21 = and i32 %20, %18 - %.not.i46.not.i = icmp eq i32 %21, 0 - br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %22 - -22: ; preds = %.preheader.i - %23 = add nuw nsw i32 %.08.i.i, 1 - %exitcond.not.i.i = icmp eq i32 %23, 32 +.preheader58.i: ; preds = %.preheader59.i, %32 + %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %32 ], [ 0, %.preheader59.i ] + br label %11 + +11: ; preds = %ma_ffs_32.exit.i, %.preheader58.i + %12 = load ptr, ptr %6, align 8 + %13 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %12, i64 %indvars.iv.i + %14 = load atomic i32, ptr %13 seq_cst, align 4 + %15 = icmp eq i32 %14, -1 + br i1 %15, label %32, label %.preheader.i + +.preheader.i: ; preds = %11, %18 + %.08.i.i = phi i32 [ %19, %18 ], [ 0, %11 ] + %16 = shl nuw i32 1, %.08.i.i + %17 = and i32 %16, %14 + %.not.i46.not.i = icmp eq i32 %17, 0 + br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %18 + +18: ; preds = %.preheader.i + %19 = add nuw nsw i32 %.08.i.i, 1 + %exitcond.not.i.i = icmp eq i32 %19, 32 br i1 %exitcond.not.i.i, label %ma_ffs_32.exit.i, label %.preheader.i -ma_ffs_32.exit.i: ; preds = %.preheader.i, %22 - %.0.lcssa.i.i = phi i32 [ 32, %22 ], [ %.08.i.i, %.preheader.i ] - %24 = shl nuw i32 1, %.0.lcssa.i.i - %25 = or i32 %24, %18 - %26 = load ptr, ptr %6, align 8 - %27 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %26, i64 %indvars.iv.i - %28 = cmpxchg volatile ptr %27, i32 %18, i32 %25 seq_cst seq_cst, align 4 - %29 = extractvalue { i32, i1 } %28, 1 - br i1 %29, label %30, label %15 - -30: ; preds = %ma_ffs_32.exit.i - %31 = trunc nuw nsw i64 %indvars.iv.i to i32 - %32 = atomicrmw add ptr %8, i32 1 seq_cst, align 8 - %33 = shl i32 %31, 5 - %34 = add i32 %.0.lcssa.i.i, %33 - %35 = load i32, ptr %7, align 4 - %.not.i = icmp ult i32 %34, %35 - br i1 %.not.i, label %46, label %ma_slot_allocator_alloc.exit.thread +ma_ffs_32.exit.i: ; preds = %.preheader.i, %18 + %.0.lcssa.i.i = phi i32 [ 32, %18 ], [ %.08.i.i, %.preheader.i ] + %20 = shl nuw i32 1, %.0.lcssa.i.i + %21 = or i32 %20, %14 + %22 = load ptr, ptr %6, align 8 + %23 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %22, i64 %indvars.iv.i + %24 = cmpxchg volatile ptr %23, i32 %14, i32 %21 seq_cst seq_cst, align 4 + %25 = extractvalue { i32, i1 } %24, 1 + br i1 %25, label %26, label %11 + +26: ; preds = %ma_ffs_32.exit.i + %27 = trunc nuw nsw i64 %indvars.iv.i to i32 + %28 = atomicrmw add ptr %8, i32 1 seq_cst, align 8 + %29 = shl i32 %27, 5 + %30 = add i32 %.0.lcssa.i.i, %29 + %31 = load i32, ptr %7, align 4 + %.not.i = icmp ult i32 %30, %31 + br i1 %.not.i, label %42, label %ma_slot_allocator_alloc.exit.thread -36: ; preds = %15 +32: ; preds = %11 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %37 = load i32, ptr %7, align 4 - %38 = lshr i32 %37, 5 - %39 = and i32 %37, 31 - %.not.i.i = icmp ne i32 %39, 0 - %40 = zext i1 %.not.i.i to i32 - %spec.select.i45.i = add nuw nsw i32 %38, %40 - %41 = zext nneg i32 %spec.select.i45.i to i64 - %42 = icmp samesign ult i64 %indvars.iv.next.i, %41 - br i1 %42, label %.preheader58.i, label %._crit_edge.i - -._crit_edge.i: ; preds = %36, %.preheader59.i - %.lcssa.i = phi i32 [ %10, %.preheader59.i ], [ %37, %36 ] - %43 = load i32, ptr %8, align 8 - %44 = icmp ult i32 %43, %.lcssa.i - br i1 %44, label %45, label %ma_slot_allocator_alloc.exit.thread - -45: ; preds = %._crit_edge.i + %33 = load i32, ptr %7, align 4 + %34 = lshr i32 %33, 5 + %35 = and i32 %33, 31 + %.not.i.i = icmp ne i32 %35, 0 + %36 = zext i1 %.not.i.i to i32 + %spec.select.i45.i = add nuw nsw i32 %34, %36 + %37 = zext nneg i32 %spec.select.i45.i to i64 + %38 = icmp samesign ult i64 %indvars.iv.next.i, %37 + br i1 %38, label %.preheader58.i, label %._crit_edge.i + +._crit_edge.i: ; preds = %32 + %39 = load i32, ptr %8, align 8 + %40 = icmp ult i32 %39, %33 + br i1 %40, label %41, label %ma_slot_allocator_alloc.exit.thread + +41: ; preds = %._crit_edge.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 br i1 %9, label %.preheader59.i, label %ma_slot_allocator_alloc.exit.thread -46: ; preds = %30 - %47 = getelementptr inbounds nuw i8, ptr %0, i64 128 - %48 = load ptr, ptr %47, align 8 - %49 = zext i32 %34 to i64 - %50 = getelementptr inbounds nuw i32, ptr %48, i64 %49 +42: ; preds = %26 + %43 = getelementptr inbounds nuw i8, ptr %0, i64 128 + %44 = load ptr, ptr %43, align 8 + %45 = zext i32 %30 to i64 + %46 = getelementptr inbounds nuw i32, ptr %44, i64 %45 + %47 = load i32, ptr %46, align 4 + %48 = add i32 %47, 1 + store i32 %48, ptr %46, align 4 + %49 = load ptr, ptr %43, align 8 + %50 = getelementptr inbounds nuw i32, ptr %49, i64 %45 %51 = load i32, ptr %50, align 4 - %52 = add i32 %51, 1 - store i32 %52, ptr %50, align 4 - %53 = load ptr, ptr %47, align 8 - %54 = getelementptr inbounds nuw i32, ptr %53, i64 %49 - %55 = load i32, ptr %54, align 4 - %56 = zext i32 %55 to i64 - %57 = shl nuw i64 %56, 32 - %58 = or disjoint i64 %57, %49 - %59 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %60 = load ptr, ptr %59, align 8 - %61 = and i32 %34, 65535 - %62 = zext nneg i32 %61 to i64 - %63 = getelementptr inbounds nuw %struct.ma_job, ptr %60, i64 %62 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %63, ptr noundef nonnull align 8 dereferenceable(104) %1, i64 104, i1 false) - %64 = load ptr, ptr %59, align 8 - %65 = getelementptr inbounds nuw %struct.ma_job, ptr %64, i64 %62 - store i64 %58, ptr %65, align 8 - %66 = load i16, ptr %1, align 8 - %67 = load ptr, ptr %59, align 8 - %68 = getelementptr inbounds nuw %struct.ma_job, ptr %67, i64 %62 - store i16 %66, ptr %68, align 8 - %69 = load ptr, ptr %59, align 8 - %70 = getelementptr inbounds nuw %struct.ma_job, ptr %69, i64 %62, i32 1 - store i64 -1, ptr %70, align 8 - %71 = getelementptr inbounds nuw i8, ptr %0, i64 168 - %72 = atomicrmw volatile xchg ptr %71, i32 1 acquire, align 4 - %73 = icmp eq i32 %72, 0 - br i1 %73, label %ma_spinlock_lock.exit, label %.preheader.i37 + %52 = zext i32 %51 to i64 + %53 = shl nuw i64 %52, 32 + %54 = or disjoint i64 %53, %45 + %55 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %56 = load ptr, ptr %55, align 8 + %57 = and i32 %30, 65535 + %58 = zext nneg i32 %57 to i64 + %59 = getelementptr inbounds nuw %struct.ma_job, ptr %56, i64 %58 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %59, ptr noundef nonnull align 8 dereferenceable(104) %1, i64 104, i1 false) + %60 = load ptr, ptr %55, align 8 + %61 = getelementptr inbounds nuw %struct.ma_job, ptr %60, i64 %58 + store i64 %54, ptr %61, align 8 + %62 = load i16, ptr %1, align 8 + %63 = load ptr, ptr %55, align 8 + %64 = getelementptr inbounds nuw %struct.ma_job, ptr %63, i64 %58 + store i16 %62, ptr %64, align 8 + %65 = load ptr, ptr %55, align 8 + %66 = getelementptr inbounds nuw %struct.ma_job, ptr %65, i64 %58, i32 1 + store i64 -1, ptr %66, align 8 + %67 = getelementptr inbounds nuw i8, ptr %0, i64 168 + %68 = atomicrmw volatile xchg ptr %67, i32 1 acquire, align 4 + %69 = icmp eq i32 %68, 0 + br i1 %69, label %ma_spinlock_lock.exit, label %.preheader.i37 .loopexit.i: ; preds = %.lr.ph.i, %.preheader.i37 - %74 = atomicrmw volatile xchg ptr %71, i32 1 acquire, align 4 - %75 = icmp eq i32 %74, 0 - br i1 %75, label %ma_spinlock_lock.exit, label %.preheader.i37 + %70 = atomicrmw volatile xchg ptr %67, i32 1 acquire, align 4 + %71 = icmp eq i32 %70, 0 + br i1 %71, label %ma_spinlock_lock.exit, label %.preheader.i37 -.preheader.i37: ; preds = %46, %.loopexit.i - %76 = load atomic volatile i32, ptr %71 monotonic, align 4 - %77 = icmp eq i32 %76, 1 - br i1 %77, label %.lr.ph.i, label %.loopexit.i +.preheader.i37: ; preds = %42, %.loopexit.i + %72 = load atomic volatile i32, ptr %67 monotonic, align 4 + %73 = icmp eq i32 %72, 1 + br i1 %73, label %.lr.ph.i, label %.loopexit.i .lr.ph.i: ; preds = %.preheader.i37, %.lr.ph.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 - %78 = load atomic volatile i32, ptr %71 monotonic, align 4 - %79 = icmp eq i32 %78, 1 - br i1 %79, label %.lr.ph.i, label %.loopexit.i - -ma_spinlock_lock.exit: ; preds = %.loopexit.i, %46 - %80 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %invariant.op = or disjoint i64 %49, 4294967296 - br label %81 + %74 = load atomic volatile i32, ptr %67 monotonic, align 4 + %75 = icmp eq i32 %74, 1 + br i1 %75, label %.lr.ph.i, label %.loopexit.i -81: ; preds = %.backedge, %ma_spinlock_lock.exit - %82 = load atomic i64, ptr %80 seq_cst, align 8 - %83 = load ptr, ptr %59, align 8 - %84 = and i64 %82, 65535 - %85 = getelementptr inbounds nuw %struct.ma_job, ptr %83, i64 %84, i32 1 - %86 = load atomic i64, ptr %85 seq_cst, align 8 - %87 = load atomic i64, ptr %80 seq_cst, align 8 - %88 = xor i64 %87, %82 - %89 = and i64 %88, -4294901761 - %90 = icmp eq i64 %89, 0 - br i1 %90, label %91, label %.backedge +ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 + %76 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %invariant.op = or disjoint i64 %45, 4294967296 + br label %77 -91: ; preds = %81 - %92 = and i64 %86, 65535 - %93 = icmp eq i64 %92, 65535 - br i1 %93, label %94, label %100 +77: ; preds = %.backedge, %ma_spinlock_lock.exit + %78 = load atomic i64, ptr %76 seq_cst, align 8 + %79 = load ptr, ptr %55, align 8 + %80 = and i64 %78, 65535 + %81 = getelementptr inbounds nuw %struct.ma_job, ptr %79, i64 %80, i32 1 + %82 = load atomic i64, ptr %81 seq_cst, align 8 + %83 = load atomic i64, ptr %76 seq_cst, align 8 + %84 = xor i64 %83, %78 + %85 = and i64 %84, -4294901761 + %86 = icmp eq i64 %85, 0 + br i1 %86, label %87, label %.backedge + +87: ; preds = %77 + %88 = and i64 %82, 65535 + %89 = icmp eq i64 %88, 65535 + br i1 %89, label %90, label %96 -94: ; preds = %91 - %95 = load ptr, ptr %59, align 8 - %96 = getelementptr inbounds nuw %struct.ma_job, ptr %95, i64 %84, i32 1 - %97 = and i64 %86, -4294967296 - %.reass = add i64 %97, %invariant.op - %98 = cmpxchg volatile ptr %96, i64 %86, i64 %.reass seq_cst seq_cst, align 8 - %99 = extractvalue { i64, i1 } %98, 1 - br i1 %99, label %105, label %.backedge - -100: ; preds = %91 - %101 = and i64 %82, -4294967296 - %102 = add i64 %101, 4294967296 - %103 = or disjoint i64 %92, %102 - %104 = cmpxchg volatile ptr %80, i64 %82, i64 %103 seq_cst seq_cst, align 8 +90: ; preds = %87 + %91 = load ptr, ptr %55, align 8 + %92 = getelementptr inbounds nuw %struct.ma_job, ptr %91, i64 %80, i32 1 + %93 = and i64 %82, -4294967296 + %.reass = add i64 %93, %invariant.op + %94 = cmpxchg volatile ptr %92, i64 %82, i64 %.reass seq_cst seq_cst, align 8 + %95 = extractvalue { i64, i1 } %94, 1 + br i1 %95, label %101, label %.backedge + +96: ; preds = %87 + %97 = and i64 %78, -4294967296 + %98 = add i64 %97, 4294967296 + %99 = or disjoint i64 %88, %98 + %100 = cmpxchg volatile ptr %76, i64 %78, i64 %99 seq_cst seq_cst, align 8 br label %.backedge -.backedge: ; preds = %100, %94, %81 - br label %81 +.backedge: ; preds = %96, %90, %77 + br label %77 + +101: ; preds = %90 + %102 = and i64 %78, -4294967296 + %103 = add i64 %102, 4294967296 + %104 = or disjoint i64 %103, %45 + %105 = cmpxchg volatile ptr %76, i64 %78, i64 %104 seq_cst seq_cst, align 8 + store atomic volatile i32 0, ptr %67 release, align 4 + %106 = load i32, ptr %0, align 8 + %107 = and i32 %106, 1 + %108 = icmp eq i32 %107, 0 + br i1 %108, label %109, label %ma_slot_allocator_alloc.exit.thread -105: ; preds = %94 - %106 = and i64 %82, -4294967296 - %107 = add i64 %106, 4294967296 - %108 = or disjoint i64 %107, %49 - %109 = cmpxchg volatile ptr %80, i64 %82, i64 %108 seq_cst seq_cst, align 8 - store atomic volatile i32 0, ptr %71 release, align 4 - %110 = load i32, ptr %0, align 8 - %111 = and i32 %110, 1 - %112 = icmp eq i32 %111, 0 - br i1 %112, label %113, label %ma_slot_allocator_alloc.exit.thread - -113: ; preds = %105 - %114 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %115 = getelementptr inbounds nuw i8, ptr %0, i64 32 - %116 = tail call i32 @pthread_mutex_lock(ptr noundef nonnull %115) #71 - %117 = load i32, ptr %114, align 8 - %118 = add nsw i32 %117, 1 - store i32 %118, ptr %114, align 8 - %119 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %120 = tail call i32 @pthread_cond_signal(ptr noundef nonnull %119) #71 - %121 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %115) #71 +109: ; preds = %101 + %110 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %111 = getelementptr inbounds nuw i8, ptr %0, i64 32 + %112 = tail call i32 @pthread_mutex_lock(ptr noundef nonnull %111) #71 + %113 = load i32, ptr %110, align 8 + %114 = add nsw i32 %113, 1 + store i32 %114, ptr %110, align 8 + %115 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %116 = tail call i32 @pthread_cond_signal(ptr noundef nonnull %115) #71 + %117 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %111) #71 br label %ma_slot_allocator_alloc.exit.thread -ma_slot_allocator_alloc.exit.thread: ; preds = %._crit_edge.i, %45, %30, %105, %113, %2 - %.0 = phi i32 [ -2, %2 ], [ 0, %113 ], [ 0, %105 ], [ -4, %30 ], [ -4, %45 ], [ -4, %._crit_edge.i ] +ma_slot_allocator_alloc.exit.thread: ; preds = %.preheader59.i, %._crit_edge.i, %41, %26, %101, %109, %2 + %.0 = phi i32 [ -2, %2 ], [ 0, %109 ], [ 0, %101 ], [ -4, %26 ], [ -4, %41 ], [ -4, %._crit_edge.i ], [ -4, %.preheader59.i ] ret i32 %.0 } diff --git a/bench/wireshark/optimized/packet-bmc.ll b/bench/wireshark/optimized/packet-bmc.ll index 431a8c13930..339ea3da0de 100644 --- a/bench/wireshark/optimized/packet-bmc.ll +++ b/bench/wireshark/optimized/packet-bmc.ll @@ -133,7 +133,7 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, br label %90 32: ; preds = %4 - call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3 + call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4 %33 = load i32, ptr @hf_bmc_offset_to_begin_ctch_bs_index, align 4 %34 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %33, ptr noundef %18, i32 noundef 1, i32 noundef 1, i32 noundef 0) %35 = tail call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef 2) @@ -150,56 +150,60 @@ 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 - br i1 %.not15.i, label %._crit_edge8.i, label %.preheader.i + %.not15.i = icmp eq i8 %35, 0 + br i1 %.not15.i, label %._crit_edge8.i, label %.preheader.preheader.i -.preheader.i: ; preds = %32, %._crit_edge.i - %.07.i = phi i32 [ %.1.lcssa.i, %._crit_edge.i ], [ %43, %32 ] - %.0846.i = phi i8 [ %.185.lcssa.i, %._crit_edge.i ], [ 1, %32 ] - %.0875.i = phi i32 [ %60, %._crit_edge.i ], [ 0, %32 ] +.preheader.preheader.i: ; preds = %32 + %46 = call i32 @llvm.umax.i32(i32 %41, i32 1) + br label %.preheader.i + +.preheader.i: ; preds = %._crit_edge.i, %.preheader.preheader.i + %.07.i = phi i32 [ %.1.lcssa.i, %._crit_edge.i ], [ %43, %.preheader.preheader.i ] + %.0846.i = phi i8 [ %.185.lcssa.i, %._crit_edge.i ], [ 1, %.preheader.preheader.i ] + %.0875.i = phi i32 [ %61, %._crit_edge.i ], [ 0, %.preheader.preheader.i ] %.not931.i = icmp ugt i8 %.0846.i, %35 br i1 %.not931.i, label %._crit_edge.i, label %.lr.ph.i -.lr.ph.i: ; preds = %.preheader.i, %58 - %.13.i = phi i32 [ %.2.i, %58 ], [ %.07.i, %.preheader.i ] - %.1852.i = phi i8 [ %59, %58 ], [ %.0846.i, %.preheader.i ] - %46 = zext i8 %.1852.i to i32 - %47 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.13.i) - %48 = load i32, ptr @hf_bmc_message_description_type, align 4 - %49 = zext i8 %47 to i32 - %50 = call ptr @val_to_str_const(i32 noundef %49, ptr noundef nonnull @message_description_type_vals, ptr noundef nonnull @.str.47) - %51 = call ptr (ptr, i32, ptr, i32, i32, i32, ptr, ...) @proto_tree_add_uint_format(ptr noundef %45, i32 noundef %48, ptr noundef %18, i32 noundef %.13.i, i32 noundef 1, i32 noundef %49, ptr noundef nonnull @.str.46, i32 noundef %46, ptr noundef %50, i32 noundef %49) - %52 = add i32 %.13.i, 1 - %53 = and i8 %47, -5 - switch i8 %53, label %58 [ +.lr.ph.i: ; preds = %.preheader.i, %59 + %.13.i = phi i32 [ %.2.i, %59 ], [ %.07.i, %.preheader.i ] + %.1852.i = phi i8 [ %60, %59 ], [ %.0846.i, %.preheader.i ] + %47 = zext i8 %.1852.i to i32 + %48 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.13.i) + %49 = load i32, ptr @hf_bmc_message_description_type, align 4 + %50 = zext i8 %48 to i32 + %51 = call ptr @val_to_str_const(i32 noundef %50, ptr noundef nonnull @message_description_type_vals, ptr noundef nonnull @.str.47) + %52 = call ptr (ptr, i32, ptr, i32, i32, i32, ptr, ...) @proto_tree_add_uint_format(ptr noundef %45, i32 noundef %49, ptr noundef %18, i32 noundef %.13.i, i32 noundef 1, i32 noundef %50, ptr noundef nonnull @.str.46, i32 noundef %47, ptr noundef %51, i32 noundef %50) + %53 = add i32 %.13.i, 1 + %54 = and i8 %48, -5 + switch i8 %54, label %59 [ i8 1, label %.sink.split.i - i8 0, label %54 + i8 0, label %55 ] -54: ; preds = %.lr.ph.i +55: ; preds = %.lr.ph.i br label %.sink.split.i -.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 ] - %.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) - %57 = add i32 %.sink.i, %.13.i - br label %58 - -58: ; preds = %.sink.split.i, %.lr.ph.i - %.2.i = phi i32 [ %52, %.lr.ph.i ], [ %57, %.sink.split.i ] - %59 = add i8 %.1852.i, 1 - %.not93.i = icmp ugt i8 %59, %35 +.sink.split.i: ; preds = %55, %.lr.ph.i + %hf_bmc_message_id.sink.i = phi ptr [ @hf_bmc_offset_to_ctch_bs_index_of_first_transmission, %55 ], [ @hf_bmc_message_id, %.lr.ph.i ] + %.sink21.i = phi i32 [ 1, %55 ], [ 2, %.lr.ph.i ] + %.sink.i = phi i32 [ 2, %55 ], [ 3, %.lr.ph.i ] + %56 = load i32, ptr %hf_bmc_message_id.sink.i, align 4 + %57 = call ptr @proto_tree_add_item(ptr noundef %45, i32 noundef %56, ptr noundef %18, i32 noundef %53, i32 noundef %.sink21.i, i32 noundef 0) + %58 = add i32 %.sink.i, %.13.i + br label %59 + +59: ; preds = %.sink.split.i, %.lr.ph.i + %.2.i = phi i32 [ %53, %.lr.ph.i ], [ %58, %.sink.split.i ] + %60 = add i8 %.1852.i, 1 + %.not93.i = icmp ugt i8 %60, %35 br i1 %.not93.i, label %._crit_edge.i, label %.lr.ph.i, !llvm.loop !6 -._crit_edge.i: ; preds = %58, %.preheader.i - %.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 +._crit_edge.i: ; preds = %59, %.preheader.i + %.185.lcssa.i = phi i8 [ %.0846.i, %.preheader.i ], [ %60, %59 ] + %.1.lcssa.i = phi i32 [ %.07.i, %.preheader.i ], [ %.2.i, %59 ] + %61 = add nuw nsw i32 %.0875.i, 1 + %exitcond.not.i = icmp eq i32 %61, %46 + 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 ] @@ -237,12 +241,12 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %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 + %exitcond18.not.i = icmp eq i8 %82, %72 + 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, %65, %71 %.3.i = phi i32 [ %69, %65 ], [ %.0.lcssa.i, %._crit_edge8.i ], [ %75, %71 ], [ %81, %.lr.ph13.i ] - call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3 + call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4 br label %90 83: ; preds = %4 @@ -337,10 +341,14 @@ declare void @proto_item_set_len(ptr noundef, i32 noundef) local_unnamed_addr #1 ; Function Attrs: null_pointer_is_valid declare i32 @tvb_reported_length_remaining(ptr noundef, i32 noundef) local_unnamed_addr #1 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.umax.i32(i32, i32) #3 + attributes #0 = { null_pointer_is_valid sspstrong uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "probe-stack"="inline-asm" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { null_pointer_is_valid "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } -attributes #3 = { nounwind } +attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } +attributes #4 = { nounwind } !llvm.module.flags = !{!0, !1, !2, !3, !4, !5} diff --git a/bench/wolfssl/optimized/random.ll b/bench/wolfssl/optimized/random.ll index f4292ef997c..210fa37405f 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,249 @@ 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 + %umax.i = tail call i32 @llvm.umax.i32(i32 %20, i32 1) + 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, %umax.i + 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 @@ -1591,6 +1591,9 @@ declare i32 @llvm.bswap.i32(i32) #8 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #8 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.umax.i32(i32, i32) #8 + attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nofree norecurse nosync nounwind memory(argmem: read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } 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 From 0e55abb986820256ea0e2766337f3bae415ee7b3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 21 Jun 2025 08:57:23 +0000 Subject: [PATCH 3/3] pre-commit: Remap --- bench/duckdb/optimized/bignum.ll | 40 +- .../ub_duckdb_storage_compression_roaring.ll | 8 +- bench/graphviz/optimized/comp.ll | 770 +++++++++--------- bench/graphviz/optimized/neatoinit.ll | 738 ++++++++--------- bench/graphviz/optimized/spring_electrical.ll | 364 ++++----- bench/hyperscan/optimized/dfa_min.ll | 432 +++++----- bench/hyperscan/optimized/ng_mcclellan.ll | 24 +- bench/hyperscan/optimized/ng_misc_opt.ll | 8 +- .../influxdb-rs/optimized/1qfvsl8a7jfomqbf.ll | 204 ++--- bench/miniaudio/optimized/unity.ll | 432 +++++----- bench/raylib/optimized/raudio.ll | 368 ++++----- bench/wireshark/optimized/packet-bmc.ll | 70 +- bench/wolfssl/optimized/random.ll | 362 ++++---- 13 files changed, 1910 insertions(+), 1910 deletions(-) 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 742b1c5d3c1..585cd39b6e1 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/graphviz/optimized/comp.ll b/bench/graphviz/optimized/comp.ll index 28d0ac2dbeb..7667ac318ee 100644 --- a/bench/graphviz/optimized/comp.ll +++ b/bench/graphviz/optimized/comp.ll @@ -43,7 +43,7 @@ define noalias noundef ptr @findCComp(ptr noundef %0, ptr noundef writeonly capt %19 = icmp eq ptr %18, null br i1 %19, label %20, label %bitarray_new.exit -20: ; preds = %12 +.thread.i.i: ; preds = %12 %21 = load ptr, ptr @stderr, align 8, !tbaa !3 %22 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.4, i64 noundef %17) #16 tail call fastcc void @graphviz_exit() #17 @@ -52,107 +52,107 @@ define noalias noundef ptr @findCComp(ptr noundef %0, ptr noundef writeonly capt bitarray_new.exit: ; preds = %3, %12 %.sroa.0.0.i = phi ptr [ null, %3 ], [ %18, %12 ] store ptr %.sroa.0.0.i, ptr %8, align 8 - %23 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store i64 %10, ptr %23, align 8 - %24 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %25 = load ptr, ptr %24, align 8, !tbaa !8 - %26 = getelementptr inbounds nuw i8, ptr %25, i64 160 - %27 = load ptr, ptr %26, align 8, !tbaa !14 - %28 = load ptr, ptr %27, align 8, !tbaa !34 - %.not = icmp eq ptr %28, null - br i1 %.not, label %.loopexit, label %29 - -29: ; preds = %bitarray_new.exit - %30 = tail call ptr @agnameof(ptr noundef nonnull %0) #14 - %31 = load i64, ptr @C_cnt, align 8, !tbaa !37 - call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %30, i64 noundef %31) - %32 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %.val.i = load i8, ptr %32, align 1, !tbaa !38 + %25 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store i64 %10, ptr %25, align 8 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %27 = load ptr, ptr %26, align 8, !tbaa !8 + %28 = getelementptr inbounds nuw i8, ptr %27, i64 160 + %29 = load ptr, ptr %28, align 8, !tbaa !14 + %30 = load ptr, ptr %29, align 8, !tbaa !34 + %.not = icmp eq ptr %30, null + br i1 %.not, label %.loopexit, label %31 + +31: ; preds = %bitarray_new.exit + %32 = tail call ptr @agnameof(ptr noundef nonnull %0) #14 + %33 = load i64, ptr @C_cnt, align 8, !tbaa !37 + call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %32, i64 noundef %33) + %34 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %.val.i = load i8, ptr %34, align 1, !tbaa !38 switch i8 %.val.i, label %agxblen.exit.i.i [ - i8 -1, label %34 + i8 -1, label %36 i8 31, label %agxbclear.exit.thread.i ] -agxblen.exit.i.i: ; preds = %29 - %33 = zext i8 %.val.i to i64 +agxblen.exit.i.i: ; preds = %31 + %35 = zext i8 %.val.i to i64 br label %agxbsizeof.exit.i.i -34: ; preds = %29 - %35 = getelementptr inbounds nuw i8, ptr %7, i64 8 +36: ; preds = %31 + %37 = getelementptr inbounds nuw i8, ptr %7, i64 8 %36 = load i64, ptr %35, align 8, !tbaa !38 %37 = getelementptr inbounds nuw i8, ptr %7, i64 16 %38 = load i64, ptr %37, align 8, !tbaa !38 br label %agxbsizeof.exit.i.i -agxbsizeof.exit.i.i: ; preds = %34, %agxblen.exit.i.i - %.0.i20.i.i = phi i64 [ %36, %34 ], [ %33, %agxblen.exit.i.i ] +agxbsizeof.exit.i.i: ; preds = %36, %agxblen.exit.i.i + %.0.i20.i.i = phi i64 [ %36, %34 ], [ %35, %agxblen.exit.i.i ] %.0.i14.i.i = phi i64 [ %38, %34 ], [ 31, %agxblen.exit.i.i ] %.not.i5.i = icmp ult i64 %.0.i20.i.i, %.0.i14.i.i - br i1 %.not.i5.i, label %40, label %39 + br i1 %.not.i5.i, label %42, label %41 -39: ; preds = %agxbsizeof.exit.i.i +41: ; preds = %agxbsizeof.exit.i.i call fastcc void @agxbmore(ptr noundef nonnull %7, i64 noundef 1) - %.val.i15.pre.i.i = load i8, ptr %32, align 1, !tbaa !38 - br label %40 + %.val.i15.pre.i.i = load i8, ptr %34, align 1, !tbaa !38 + br label %42 -40: ; preds = %39, %agxbsizeof.exit.i.i +42: ; preds = %41, %agxbsizeof.exit.i.i %.val.i15.i.i = phi i8 [ %.val.i15.pre.i.i, %39 ], [ %.val.i, %agxbsizeof.exit.i.i ] %.not.i16.i.i = icmp eq i8 %.val.i15.i.i, -1 - br i1 %.not.i16.i.i, label %46, label %41 - -41: ; preds = %40 - %42 = zext i8 %.val.i15.i.i to i64 - %43 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %42 - store i8 0, ptr %43, align 1, !tbaa !38 - %44 = load i8, ptr %32, align 1, !tbaa !38 - %45 = add i8 %44, 1 - store i8 %45, ptr %32, align 1, !tbaa !38 + br i1 %.not.i16.i.i, label %48, label %43 + +43: ; preds = %42 + %44 = zext i8 %.val.i15.i.i to i64 + %45 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %44 + store i8 0, ptr %45, align 1, !tbaa !38 + %46 = load i8, ptr %34, align 1, !tbaa !38 + %47 = add i8 %46, 1 + store i8 %47, ptr %34, align 1, !tbaa !38 br label %agxbputc.exit.i -46: ; preds = %40 - %47 = getelementptr inbounds nuw i8, ptr %7, i64 8 - %48 = load i64, ptr %47, align 8, !tbaa !38 - %49 = load ptr, ptr %7, align 8, !tbaa !38 - %50 = getelementptr inbounds nuw i8, ptr %49, i64 %48 - store i8 0, ptr %50, align 1, !tbaa !38 - %51 = load i64, ptr %47, align 8, !tbaa !38 - %52 = add i64 %51, 1 - store i64 %52, ptr %47, align 8, !tbaa !38 - %.val.i6.pr.i = load i8, ptr %32, align 1, !tbaa !38 +48: ; preds = %42 + %49 = getelementptr inbounds nuw i8, ptr %7, i64 8 + %50 = load i64, ptr %49, align 8, !tbaa !38 + %51 = load ptr, ptr %7, align 8, !tbaa !38 + %52 = getelementptr inbounds nuw i8, ptr %51, i64 %50 + store i8 0, ptr %52, align 1, !tbaa !38 + %53 = load i64, ptr %49, align 8, !tbaa !38 + %54 = add i64 %53, 1 + store i64 %54, ptr %49, align 8, !tbaa !38 + %.val.i6.pr.i = load i8, ptr %34, align 1, !tbaa !38 br label %agxbputc.exit.i -agxbputc.exit.i: ; preds = %46, %41 - %.val.i8.pr.i = phi i8 [ %.val.i6.pr.i, %46 ], [ %45, %41 ] +agxbputc.exit.i: ; preds = %48, %43 + %.val.i8.pr.i = phi i8 [ %.val.i6.pr.i, %46 ], [ %47, %41 ] %.not.i7.i = icmp eq i8 %.val.i8.pr.i, -1 - br i1 %.not.i7.i, label %53, label %agxbclear.exit.thread.i + br i1 %.not.i7.i, label %55, label %agxbclear.exit.thread.i -agxbclear.exit.thread.i: ; preds = %agxbputc.exit.i, %29 - store i8 0, ptr %32, align 1, !tbaa !38 +agxbclear.exit.thread.i: ; preds = %agxbputc.exit.i, %31 + store i8 0, ptr %34, align 1, !tbaa !38 br label %agxbuse.exit -53: ; preds = %agxbputc.exit.i - %54 = getelementptr inbounds nuw i8, ptr %7, i64 8 - store i64 0, ptr %54, align 8, !tbaa !38 - %55 = load ptr, ptr %7, align 8, !tbaa !38 +55: ; preds = %agxbputc.exit.i + %56 = getelementptr inbounds nuw i8, ptr %7, i64 8 + store i64 0, ptr %56, align 8, !tbaa !38 + %57 = load ptr, ptr %7, align 8, !tbaa !38 br label %agxbuse.exit -agxbuse.exit: ; preds = %agxbclear.exit.thread.i, %53 - %56 = phi ptr [ %55, %53 ], [ %7, %agxbclear.exit.thread.i ] - %57 = call ptr @agsubg(ptr noundef nonnull %0, ptr noundef %56, i32 noundef 1) #14 - %58 = call ptr @agbindrec(ptr noundef %57, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 - %59 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 - %60 = icmp eq ptr %59, null - br i1 %60, label %61, label %gv_alloc.exit - -61: ; preds = %agxbuse.exit - %62 = load ptr, ptr @stderr, align 8, !tbaa !3 - %63 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %62, ptr noundef nonnull @.str.4, i64 noundef 64) #16 +agxbuse.exit: ; preds = %agxbclear.exit.thread.i, %55 + %58 = phi ptr [ %57, %53 ], [ %7, %agxbclear.exit.thread.i ] + %59 = call ptr @agsubg(ptr noundef nonnull %0, ptr noundef %58, i32 noundef 1) #14 + %60 = call ptr @agbindrec(ptr noundef %59, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 + %61 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 + %62 = icmp eq ptr %61, null + br i1 %62, label %63, label %gv_alloc.exit + +63: ; preds = %agxbuse.exit + %64 = load ptr, ptr @stderr, align 8, !tbaa !3 + %65 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %64, ptr noundef nonnull @.str.4, i64 noundef 64) #16 call fastcc void @graphviz_exit() #17 unreachable gv_alloc.exit: ; preds = %agxbuse.exit - %64 = getelementptr inbounds nuw i8, ptr %57, i64 16 - %65 = load ptr, ptr %64, align 8, !tbaa !8 + %66 = getelementptr inbounds nuw i8, ptr %59, i64 16 + %67 = load ptr, ptr %66, align 8, !tbaa !8 %66 = getelementptr inbounds nuw i8, ptr %65, i64 160 store ptr %59, ptr %66, align 8, !tbaa !14 store ptr %28, ptr %59, align 8, !tbaa !34 @@ -160,455 +160,455 @@ gv_alloc.exit: ; preds = %agxbuse.exit %68 = getelementptr inbounds nuw i8, ptr %67, i64 160 %69 = load ptr, ptr %68, align 8, !tbaa !14 %70 = getelementptr inbounds nuw i8, ptr %69, i64 8 - %71 = load i32, ptr %70, align 8, !tbaa !39 - %72 = getelementptr inbounds nuw i8, ptr %59, i64 8 - store i32 %71, ptr %72, align 8, !tbaa !39 - %73 = getelementptr inbounds nuw i8, ptr %28, i64 8 - %74 = load ptr, ptr %73, align 8, !tbaa !40 + %69 = load i32, ptr %70, align 8, !tbaa !39 + %70 = getelementptr inbounds nuw i8, ptr %59, i64 8 + store i32 %69, ptr %70, align 8, !tbaa !41 + %72 = getelementptr inbounds nuw i8, ptr %28, i64 8 + %73 = load ptr, ptr %72, align 8, !tbaa !40 %.not78129 = icmp eq ptr %74, null br i1 %.not78129, label %.loopexit, label %.lr.ph .lr.ph: ; preds = %gv_alloc.exit - %75 = getelementptr inbounds nuw i8, ptr %6, i64 8 - br label %76 - -76: ; preds = %.lr.ph, %94 - %77 = phi ptr [ %74, %.lr.ph ], [ %97, %94 ] - %.066130 = phi ptr [ %28, %.lr.ph ], [ %95, %94 ] - %78 = getelementptr inbounds nuw i8, ptr %77, i64 16 - %79 = load ptr, ptr %78, align 8, !tbaa !8 - %80 = getelementptr inbounds nuw i8, ptr %79, i64 164 - %81 = load i32, ptr %80, align 4, !tbaa !43 - %82 = sext i32 %81 to i64 - %83 = load ptr, ptr %8, align 8 - %84 = load i64, ptr %23, align 8 + %77 = getelementptr inbounds nuw i8, ptr %6, i64 8 + br label %78 + +78: ; preds = %.lr.ph, %96 + %79 = phi ptr [ %74, %.lr.ph ], [ %99, %94 ] + %.066130 = phi ptr [ %30, %.lr.ph ], [ %97, %94 ] + %80 = getelementptr inbounds nuw i8, ptr %79, i64 16 + %81 = load ptr, ptr %80, align 8, !tbaa !8 + %82 = getelementptr inbounds nuw i8, ptr %81, i64 164 + %83 = load i32, ptr %82, align 4, !tbaa !43 + %84 = sext i32 %83 to i64 + %85 = load ptr, ptr %8, align 8 + %86 = load i64, ptr %25, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) - store ptr %83, ptr %6, align 8 - store i64 %84, ptr %75, align 8 - %85 = icmp ult i64 %84, 65 - %.0.i = select i1 %85, ptr %6, ptr %83 - %86 = lshr i64 %82, 3 - %87 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %86 - %88 = load i8, ptr %87, align 1, !tbaa !38 - %89 = zext i8 %88 to i32 - %90 = and i32 %81, 7 - %91 = shl nuw nsw i32 1, %90 - %92 = and i32 %91, %89 - %.not122 = icmp eq i32 %92, 0 + store ptr %85, ptr %6, align 8 + store i64 %86, ptr %77, align 8 + %87 = icmp ult i64 %86, 65 + %.0.i = select i1 %87, ptr %6, ptr %85 + %88 = lshr i64 %84, 3 + %89 = getelementptr inbounds nuw i8, ptr %.0.i, i64 %88 + %90 = load i8, ptr %89, align 1, !tbaa !38 + %91 = zext i8 %90 to i32 + %92 = and i32 %83, 7 + %93 = shl nuw nsw i32 1, %92 + %94 = and i32 %93, %91 + %.not122 = icmp eq i32 %94, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) - br i1 %.not122, label %93, label %94 + br i1 %.not122, label %95, label %96 -93: ; preds = %76 - call fastcc void @dfs(ptr noundef nonnull %0, ptr noundef nonnull %77, ptr noundef %57, ptr noundef %8) - br label %94 +95: ; preds = %78 + call fastcc void @dfs(ptr noundef nonnull %0, ptr noundef nonnull %79, ptr noundef %59, ptr noundef %8) + br label %96 -94: ; preds = %76, %93 - %95 = getelementptr inbounds nuw i8, ptr %.066130, i64 24 - %96 = getelementptr inbounds nuw i8, ptr %.066130, i64 32 - %97 = load ptr, ptr %96, align 8, !tbaa !40 - %.not78 = icmp eq ptr %97, null - br i1 %.not78, label %.loopexit, label %76, !llvm.loop !49 +96: ; preds = %78, %95 + %97 = getelementptr inbounds nuw i8, ptr %.066130, i64 24 + %98 = getelementptr inbounds nuw i8, ptr %.066130, i64 32 + %99 = load ptr, ptr %98, align 8, !tbaa !40 + %.not78 = icmp eq ptr %99, null + br i1 %.not78, label %.loopexit, label %78, !llvm.loop !49 -.loopexit: ; preds = %94, %gv_alloc.exit, %bitarray_new.exit - %.069 = phi ptr [ null, %bitarray_new.exit ], [ %57, %gv_alloc.exit ], [ %57, %94 ] +.loopexit: ; preds = %96, %gv_alloc.exit, %bitarray_new.exit + %.069 = phi ptr [ null, %bitarray_new.exit ], [ %59, %gv_alloc.exit ], [ %59, %94 ] %.067 = phi i64 [ 0, %bitarray_new.exit ], [ 1, %gv_alloc.exit ], [ 1, %94 ] - %98 = call ptr @agfstnode(ptr noundef %0) #14 - %.not79131 = icmp eq ptr %98, null + %100 = call ptr @agfstnode(ptr noundef %0) #14 + %.not79131 = icmp eq ptr %100, null br i1 %.not79131, label %._crit_edge, label %.lr.ph136 .lr.ph136: ; preds = %.loopexit - %99 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %100 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %101 = getelementptr inbounds nuw i8, ptr %7, i64 8 - %102 = getelementptr inbounds nuw i8, ptr %7, i64 16 - br label %103 + %101 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %102 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %103 = getelementptr inbounds nuw i8, ptr %7, i64 8 + %104 = getelementptr inbounds nuw i8, ptr %7, i64 16 + br label %105 -103: ; preds = %.lr.ph136, %159 +105: ; preds = %.lr.ph136, %161 %.0135 = phi i32 [ 0, %.lr.ph136 ], [ %.1, %159 ] - %.064134 = phi ptr [ %98, %.lr.ph136 ], [ %160, %159 ] + %.064134 = phi ptr [ %100, %.lr.ph136 ], [ %162, %159 ] %.168133 = phi i64 [ %.067, %.lr.ph136 ], [ %.2, %159 ] %.170132 = phi ptr [ %.069, %.lr.ph136 ], [ %.271, %159 ] - %104 = getelementptr inbounds nuw i8, ptr %.064134, i64 16 - %105 = load ptr, ptr %104, align 8, !tbaa !8 - %106 = getelementptr inbounds nuw i8, ptr %105, i64 164 - %107 = load i32, ptr %106, align 4, !tbaa !43 - %108 = sext i32 %107 to i64 - %109 = load ptr, ptr %8, align 8 - %110 = load i64, ptr %23, align 8 + %106 = getelementptr inbounds nuw i8, ptr %.064134, i64 16 + %107 = load ptr, ptr %106, align 8, !tbaa !8 + %108 = getelementptr inbounds nuw i8, ptr %107, i64 164 + %109 = load i32, ptr %108, align 4, !tbaa !43 + %110 = sext i32 %109 to i64 + %111 = load ptr, ptr %8, align 8 + %112 = load i64, ptr %25, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) - store ptr %109, ptr %5, align 8 - store i64 %110, ptr %99, align 8 - %111 = icmp ult i64 %110, 65 - %.0.i88 = select i1 %111, ptr %5, ptr %109 - %112 = lshr i64 %108, 3 - %113 = getelementptr inbounds nuw i8, ptr %.0.i88, i64 %112 - %114 = load i8, ptr %113, align 1, !tbaa !38 - %115 = zext i8 %114 to i32 - %116 = and i32 %107, 7 - %117 = shl nuw nsw i32 1, %116 - %118 = and i32 %117, %115 - %.not123 = icmp eq i32 %118, 0 + store ptr %111, ptr %5, align 8 + store i64 %112, ptr %101, align 8 + %113 = icmp ult i64 %112, 65 + %.0.i88 = select i1 %113, ptr %5, ptr %111 + %114 = lshr i64 %110, 3 + %115 = getelementptr inbounds nuw i8, ptr %.0.i88, i64 %114 + %116 = load i8, ptr %115, align 1, !tbaa !38 + %117 = zext i8 %116 to i32 + %118 = and i32 %109, 7 + %119 = shl nuw nsw i32 1, %118 + %120 = and i32 %119, %117 + %.not123 = icmp eq i32 %120, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) - br i1 %.not123, label %119, label %159 + br i1 %.not123, label %121, label %161 -119: ; preds = %103 - %120 = getelementptr inbounds nuw i8, ptr %105, i64 163 - %121 = load i8, ptr %120, align 1, !tbaa !51 - %.not85 = icmp eq i8 %121, 3 - br i1 %.not85, label %122, label %159 +121: ; preds = %105 + %122 = getelementptr inbounds nuw i8, ptr %107, i64 163 + %123 = load i8, ptr %122, align 1, !tbaa !51 + %.not85 = icmp eq i8 %123, 3 + br i1 %.not85, label %124, label %161 -122: ; preds = %119 +124: ; preds = %121 %.not86 = icmp eq ptr %.170132, null - br i1 %.not86, label %123, label %158 - -123: ; preds = %122 - %124 = call ptr @agnameof(ptr noundef %0) #14 - %125 = add i64 %.168133, 1 - %126 = load i64, ptr @C_cnt, align 8, !tbaa !37 - %127 = add i64 %126, %.168133 - call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %124, i64 noundef %127) - %.val.i89 = load i8, ptr %100, align 1, !tbaa !38 + br i1 %.not86, label %125, label %160 + +125: ; preds = %124 + %126 = call ptr @agnameof(ptr noundef %0) #14 + %127 = add i64 %.168133, 1 + %128 = load i64, ptr @C_cnt, align 8, !tbaa !37 + %129 = add i64 %128, %.168133 + call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str, ptr noundef %126, i64 noundef %129) + %.val.i89 = load i8, ptr %102, align 1, !tbaa !38 switch i8 %.val.i89, label %agxblen.exit.i.i102 [ - i8 -1, label %129 + i8 -1, label %131 i8 31, label %agxbclear.exit.thread.i90 ] -agxblen.exit.i.i102: ; preds = %123 - %128 = zext i8 %.val.i89 to i64 +agxblen.exit.i.i102: ; preds = %125 + %130 = zext i8 %.val.i89 to i64 br label %agxbsizeof.exit.i.i91 -129: ; preds = %123 - %130 = load i64, ptr %101, align 8, !tbaa !38 - %131 = load i64, ptr %102, align 8, !tbaa !38 +131: ; preds = %125 + %132 = load i64, ptr %103, align 8, !tbaa !38 + %133 = load i64, ptr %104, align 8, !tbaa !38 br label %agxbsizeof.exit.i.i91 -agxbsizeof.exit.i.i91: ; preds = %129, %agxblen.exit.i.i102 - %.0.i20.i.i92 = phi i64 [ %130, %129 ], [ %128, %agxblen.exit.i.i102 ] - %.0.i14.i.i93 = phi i64 [ %131, %129 ], [ 31, %agxblen.exit.i.i102 ] +agxbsizeof.exit.i.i91: ; preds = %131, %agxblen.exit.i.i102 + %.0.i20.i.i92 = phi i64 [ %132, %129 ], [ %130, %agxblen.exit.i.i102 ] + %.0.i14.i.i93 = phi i64 [ %133, %129 ], [ 31, %agxblen.exit.i.i102 ] %.not.i5.i94 = icmp ult i64 %.0.i20.i.i92, %.0.i14.i.i93 - br i1 %.not.i5.i94, label %133, label %132 + br i1 %.not.i5.i94, label %135, label %134 -132: ; preds = %agxbsizeof.exit.i.i91 +134: ; preds = %agxbsizeof.exit.i.i91 call fastcc void @agxbmore(ptr noundef nonnull %7, i64 noundef 1) - %.val.i15.pre.i.i95 = load i8, ptr %100, align 1, !tbaa !38 - br label %133 + %.val.i15.pre.i.i95 = load i8, ptr %102, align 1, !tbaa !38 + br label %135 -133: ; preds = %132, %agxbsizeof.exit.i.i91 +135: ; preds = %134, %agxbsizeof.exit.i.i91 %.val.i15.i.i96 = phi i8 [ %.val.i15.pre.i.i95, %132 ], [ %.val.i89, %agxbsizeof.exit.i.i91 ] %.not.i16.i.i97 = icmp eq i8 %.val.i15.i.i96, -1 - br i1 %.not.i16.i.i97, label %139, label %134 - -134: ; preds = %133 - %135 = zext i8 %.val.i15.i.i96 to i64 - %136 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %135 - store i8 0, ptr %136, align 1, !tbaa !38 - %137 = load i8, ptr %100, align 1, !tbaa !38 - %138 = add i8 %137, 1 - store i8 %138, ptr %100, align 1, !tbaa !38 + br i1 %.not.i16.i.i97, label %141, label %136 + +136: ; preds = %135 + %137 = zext i8 %.val.i15.i.i96 to i64 + %138 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %137 + store i8 0, ptr %138, align 1, !tbaa !38 + %139 = load i8, ptr %102, align 1, !tbaa !38 + %140 = add i8 %139, 1 + store i8 %140, ptr %102, align 1, !tbaa !38 br label %agxbputc.exit.i98 -139: ; preds = %133 - %140 = load i64, ptr %101, align 8, !tbaa !38 - %141 = load ptr, ptr %7, align 8, !tbaa !38 - %142 = getelementptr inbounds nuw i8, ptr %141, i64 %140 - store i8 0, ptr %142, align 1, !tbaa !38 - %143 = load i64, ptr %101, align 8, !tbaa !38 - %144 = add i64 %143, 1 - store i64 %144, ptr %101, align 8, !tbaa !38 - %.val.i6.pr.i101 = load i8, ptr %100, align 1, !tbaa !38 +141: ; preds = %135 + %142 = load i64, ptr %103, align 8, !tbaa !38 + %143 = load ptr, ptr %7, align 8, !tbaa !38 + %144 = getelementptr inbounds nuw i8, ptr %143, i64 %142 + store i8 0, ptr %144, align 1, !tbaa !38 + %145 = load i64, ptr %103, align 8, !tbaa !38 + %146 = add i64 %145, 1 + store i64 %146, ptr %103, align 8, !tbaa !38 + %.val.i6.pr.i101 = load i8, ptr %102, align 1, !tbaa !38 br label %agxbputc.exit.i98 -agxbputc.exit.i98: ; preds = %139, %134 - %.val.i8.pr.i99 = phi i8 [ %.val.i6.pr.i101, %139 ], [ %138, %134 ] +agxbputc.exit.i98: ; preds = %141, %136 + %.val.i8.pr.i99 = phi i8 [ %.val.i6.pr.i101, %139 ], [ %140, %134 ] %.not.i7.i100 = icmp eq i8 %.val.i8.pr.i99, -1 - br i1 %.not.i7.i100, label %145, label %agxbclear.exit.thread.i90 + br i1 %.not.i7.i100, label %147, label %agxbclear.exit.thread.i90 -agxbclear.exit.thread.i90: ; preds = %agxbputc.exit.i98, %123 - store i8 0, ptr %100, align 1, !tbaa !38 +agxbclear.exit.thread.i90: ; preds = %agxbputc.exit.i98, %125 + store i8 0, ptr %102, align 1, !tbaa !38 br label %agxbuse.exit103 -145: ; preds = %agxbputc.exit.i98 - store i64 0, ptr %101, align 8, !tbaa !38 - %146 = load ptr, ptr %7, align 8, !tbaa !38 +147: ; preds = %agxbputc.exit.i98 + store i64 0, ptr %103, align 8, !tbaa !38 + %148 = load ptr, ptr %7, align 8, !tbaa !38 br label %agxbuse.exit103 -agxbuse.exit103: ; preds = %agxbclear.exit.thread.i90, %145 - %147 = phi ptr [ %146, %145 ], [ %7, %agxbclear.exit.thread.i90 ] - %148 = call ptr @agsubg(ptr noundef %0, ptr noundef %147, i32 noundef 1) #14 - %149 = call ptr @agbindrec(ptr noundef %148, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 - %150 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 - %151 = icmp eq ptr %150, null - br i1 %151, label %152, label %gv_alloc.exit104 - -152: ; preds = %agxbuse.exit103 - %153 = load ptr, ptr @stderr, align 8, !tbaa !3 - %154 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %153, ptr noundef nonnull @.str.4, i64 noundef 64) #16 +agxbuse.exit103: ; preds = %agxbclear.exit.thread.i90, %147 + %149 = phi ptr [ %148, %145 ], [ %7, %agxbclear.exit.thread.i90 ] + %150 = call ptr @agsubg(ptr noundef %0, ptr noundef %149, i32 noundef 1) #14 + %151 = call ptr @agbindrec(ptr noundef %150, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 + %152 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 + %153 = icmp eq ptr %152, null + br i1 %153, label %154, label %gv_alloc.exit104 + +154: ; preds = %agxbuse.exit103 + %155 = load ptr, ptr @stderr, align 8, !tbaa !3 + %156 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %155, ptr noundef nonnull @.str.4, i64 noundef 64) #16 call fastcc void @graphviz_exit() #17 unreachable gv_alloc.exit104: ; preds = %agxbuse.exit103 - %155 = getelementptr inbounds nuw i8, ptr %148, i64 16 - %156 = load ptr, ptr %155, align 8, !tbaa !8 - %157 = getelementptr inbounds nuw i8, ptr %156, i64 160 - store ptr %150, ptr %157, align 8, !tbaa !14 - br label %158 - -158: ; preds = %gv_alloc.exit104, %122 - %.372 = phi ptr [ %.170132, %122 ], [ %148, %gv_alloc.exit104 ] - %.3 = phi i64 [ %.168133, %122 ], [ %125, %gv_alloc.exit104 ] + %157 = getelementptr inbounds nuw i8, ptr %150, i64 16 + %158 = load ptr, ptr %157, align 8, !tbaa !8 + %159 = getelementptr inbounds nuw i8, ptr %158, i64 160 + store ptr %152, ptr %159, align 8, !tbaa !14 + br label %160 + +160: ; preds = %gv_alloc.exit104, %124 + %.372 = phi ptr [ %.170132, %122 ], [ %150, %gv_alloc.exit104 ] + %.3 = phi i64 [ %.168133, %122 ], [ %127, %gv_alloc.exit104 ] call fastcc void @dfs(ptr noundef %0, ptr noundef nonnull %.064134, ptr noundef nonnull %.372, ptr noundef %8) - br label %159 + br label %161 -159: ; preds = %119, %103, %158 +161: ; preds = %121, %105, %160 %.271 = phi ptr [ %.170132, %103 ], [ %.170132, %119 ], [ %.372, %158 ] %.2 = phi i64 [ %.168133, %103 ], [ %.168133, %119 ], [ %.3, %158 ] %.1 = phi i32 [ %.0135, %103 ], [ %.0135, %119 ], [ 1, %158 ] - %160 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.064134) #14 - %.not79 = icmp eq ptr %160, null - br i1 %.not79, label %._crit_edge, label %103, !llvm.loop !52 + %162 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.064134) #14 + %.not79 = icmp eq ptr %162, null + br i1 %.not79, label %._crit_edge, label %105, !llvm.loop !52 -._crit_edge: ; preds = %159, %.loopexit +._crit_edge: ; preds = %161, %.loopexit %.170.lcssa = phi ptr [ %.069, %.loopexit ], [ %.271, %159 ] %.168.lcssa = phi i64 [ %.067, %.loopexit ], [ %.2, %159 ] %.0.lcssa = phi i32 [ 0, %.loopexit ], [ %.1, %159 ] %.not80 = icmp eq ptr %.170.lcssa, null - br i1 %.not80, label %163, label %161 + br i1 %.not80, label %165, label %163 -161: ; preds = %._crit_edge - %162 = call i64 @graphviz_node_induce(ptr noundef nonnull %.170.lcssa, ptr noundef null) #14 - br label %163 +163: ; preds = %._crit_edge + %164 = call i64 @graphviz_node_induce(ptr noundef nonnull %.170.lcssa, ptr noundef null) #14 + br label %165 -163: ; preds = %161, %._crit_edge - %164 = call ptr @agfstnode(ptr noundef %0) #14 - %.not81139 = icmp eq ptr %164, null +165: ; preds = %163, %._crit_edge + %166 = call ptr @agfstnode(ptr noundef %0) #14 + %.not81139 = icmp eq ptr %166, null br i1 %.not81139, label %._crit_edge144, label %.lr.ph143 -.lr.ph143: ; preds = %163 - %165 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %166 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %167 = getelementptr inbounds nuw i8, ptr %7, i64 8 - %168 = getelementptr inbounds nuw i8, ptr %7, i64 16 - br label %169 +.lr.ph143: ; preds = %165 + %167 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %168 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %169 = getelementptr inbounds nuw i8, ptr %7, i64 8 + %170 = getelementptr inbounds nuw i8, ptr %7, i64 16 + br label %171 -169: ; preds = %.lr.ph143, %221 - %.165141 = phi ptr [ %164, %.lr.ph143 ], [ %222, %221 ] +171: ; preds = %.lr.ph143, %223 + %.165141 = phi ptr [ %166, %.lr.ph143 ], [ %224, %221 ] %.4140 = phi i64 [ %.168.lcssa, %.lr.ph143 ], [ %.5, %221 ] - %170 = getelementptr inbounds nuw i8, ptr %.165141, i64 16 - %171 = load ptr, ptr %170, align 8, !tbaa !8 - %172 = getelementptr inbounds nuw i8, ptr %171, i64 164 - %173 = load i32, ptr %172, align 4, !tbaa !43 - %174 = sext i32 %173 to i64 - %175 = load ptr, ptr %8, align 8 - %176 = load i64, ptr %23, align 8 + %172 = getelementptr inbounds nuw i8, ptr %.165141, i64 16 + %173 = load ptr, ptr %172, align 8, !tbaa !8 + %174 = getelementptr inbounds nuw i8, ptr %173, i64 164 + %175 = load i32, ptr %174, align 4, !tbaa !43 + %176 = sext i32 %175 to i64 + %177 = load ptr, ptr %8, align 8 + %178 = load i64, ptr %25, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) - store ptr %175, ptr %4, align 8 - store i64 %176, ptr %165, align 8 - %177 = icmp ult i64 %176, 65 - %.0.i105 = select i1 %177, ptr %4, ptr %175 - %178 = lshr i64 %174, 3 - %179 = getelementptr inbounds nuw i8, ptr %.0.i105, i64 %178 - %180 = load i8, ptr %179, align 1, !tbaa !38 - %181 = zext i8 %180 to i32 - %182 = and i32 %173, 7 - %183 = shl nuw nsw i32 1, %182 - %184 = and i32 %183, %181 - %.not124 = icmp eq i32 %184, 0 + store ptr %177, ptr %4, align 8 + store i64 %178, ptr %167, align 8 + %179 = icmp ult i64 %178, 65 + %.0.i105 = select i1 %179, ptr %4, ptr %177 + %180 = lshr i64 %176, 3 + %181 = getelementptr inbounds nuw i8, ptr %.0.i105, i64 %180 + %182 = load i8, ptr %181, align 1, !tbaa !38 + %183 = zext i8 %182 to i32 + %184 = and i32 %175, 7 + %185 = shl nuw nsw i32 1, %184 + %186 = and i32 %185, %183 + %.not124 = icmp eq i32 %186, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) - br i1 %.not124, label %185, label %221 - -185: ; preds = %169 - %186 = call ptr @agnameof(ptr noundef %0) #14 - %187 = add i64 %.4140, 1 - %188 = load i64, ptr @C_cnt, align 8, !tbaa !37 - %189 = add i64 %188, %.4140 - call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str.2, ptr noundef %186, i64 noundef %189) - %.val.i106 = load i8, ptr %166, align 1, !tbaa !38 + br i1 %.not124, label %187, label %223 + +187: ; preds = %171 + %188 = call ptr @agnameof(ptr noundef %0) #14 + %189 = add i64 %.4140, 1 + %190 = load i64, ptr @C_cnt, align 8, !tbaa !37 + %191 = add i64 %190, %.4140 + call void (ptr, ptr, ...) @agxbprint(ptr noundef %7, ptr noundef nonnull @.str.2, ptr noundef %188, i64 noundef %191) + %.val.i106 = load i8, ptr %168, align 1, !tbaa !38 switch i8 %.val.i106, label %agxblen.exit.i.i119 [ - i8 -1, label %191 + i8 -1, label %193 i8 31, label %agxbclear.exit.thread.i107 ] -agxblen.exit.i.i119: ; preds = %185 - %190 = zext i8 %.val.i106 to i64 +agxblen.exit.i.i119: ; preds = %187 + %192 = zext i8 %.val.i106 to i64 br label %agxbsizeof.exit.i.i108 -191: ; preds = %185 - %192 = load i64, ptr %167, align 8, !tbaa !38 - %193 = load i64, ptr %168, align 8, !tbaa !38 +193: ; preds = %187 + %194 = load i64, ptr %169, align 8, !tbaa !38 + %195 = load i64, ptr %170, align 8, !tbaa !38 br label %agxbsizeof.exit.i.i108 -agxbsizeof.exit.i.i108: ; preds = %191, %agxblen.exit.i.i119 - %.0.i20.i.i109 = phi i64 [ %192, %191 ], [ %190, %agxblen.exit.i.i119 ] - %.0.i14.i.i110 = phi i64 [ %193, %191 ], [ 31, %agxblen.exit.i.i119 ] +agxbsizeof.exit.i.i108: ; preds = %193, %agxblen.exit.i.i119 + %.0.i20.i.i109 = phi i64 [ %194, %191 ], [ %192, %agxblen.exit.i.i119 ] + %.0.i14.i.i110 = phi i64 [ %195, %191 ], [ 31, %agxblen.exit.i.i119 ] %.not.i5.i111 = icmp ult i64 %.0.i20.i.i109, %.0.i14.i.i110 - br i1 %.not.i5.i111, label %195, label %194 + br i1 %.not.i5.i111, label %197, label %196 -194: ; preds = %agxbsizeof.exit.i.i108 +196: ; preds = %agxbsizeof.exit.i.i108 call fastcc void @agxbmore(ptr noundef nonnull %7, i64 noundef 1) - %.val.i15.pre.i.i112 = load i8, ptr %166, align 1, !tbaa !38 - br label %195 + %.val.i15.pre.i.i112 = load i8, ptr %168, align 1, !tbaa !38 + br label %197 -195: ; preds = %194, %agxbsizeof.exit.i.i108 +197: ; preds = %196, %agxbsizeof.exit.i.i108 %.val.i15.i.i113 = phi i8 [ %.val.i15.pre.i.i112, %194 ], [ %.val.i106, %agxbsizeof.exit.i.i108 ] %.not.i16.i.i114 = icmp eq i8 %.val.i15.i.i113, -1 - br i1 %.not.i16.i.i114, label %201, label %196 - -196: ; preds = %195 - %197 = zext i8 %.val.i15.i.i113 to i64 - %198 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %197 - store i8 0, ptr %198, align 1, !tbaa !38 - %199 = load i8, ptr %166, align 1, !tbaa !38 - %200 = add i8 %199, 1 - store i8 %200, ptr %166, align 1, !tbaa !38 + br i1 %.not.i16.i.i114, label %203, label %198 + +198: ; preds = %197 + %199 = zext i8 %.val.i15.i.i113 to i64 + %200 = getelementptr inbounds nuw [31 x i8], ptr %7, i64 0, i64 %199 + store i8 0, ptr %200, align 1, !tbaa !38 + %201 = load i8, ptr %168, align 1, !tbaa !38 + %202 = add i8 %201, 1 + store i8 %202, ptr %168, align 1, !tbaa !38 br label %agxbputc.exit.i115 -201: ; preds = %195 - %202 = load i64, ptr %167, align 8, !tbaa !38 - %203 = load ptr, ptr %7, align 8, !tbaa !38 - %204 = getelementptr inbounds nuw i8, ptr %203, i64 %202 - store i8 0, ptr %204, align 1, !tbaa !38 - %205 = load i64, ptr %167, align 8, !tbaa !38 - %206 = add i64 %205, 1 - store i64 %206, ptr %167, align 8, !tbaa !38 - %.val.i6.pr.i118 = load i8, ptr %166, align 1, !tbaa !38 +203: ; preds = %197 + %204 = load i64, ptr %169, align 8, !tbaa !38 + %205 = load ptr, ptr %7, align 8, !tbaa !38 + %206 = getelementptr inbounds nuw i8, ptr %205, i64 %204 + store i8 0, ptr %206, align 1, !tbaa !38 + %207 = load i64, ptr %169, align 8, !tbaa !38 + %208 = add i64 %207, 1 + store i64 %208, ptr %169, align 8, !tbaa !38 + %.val.i6.pr.i118 = load i8, ptr %168, align 1, !tbaa !38 br label %agxbputc.exit.i115 -agxbputc.exit.i115: ; preds = %201, %196 - %.val.i8.pr.i116 = phi i8 [ %.val.i6.pr.i118, %201 ], [ %200, %196 ] +agxbputc.exit.i115: ; preds = %203, %198 + %.val.i8.pr.i116 = phi i8 [ %.val.i6.pr.i118, %201 ], [ %202, %196 ] %.not.i7.i117 = icmp eq i8 %.val.i8.pr.i116, -1 - br i1 %.not.i7.i117, label %207, label %agxbclear.exit.thread.i107 + br i1 %.not.i7.i117, label %209, label %agxbclear.exit.thread.i107 -agxbclear.exit.thread.i107: ; preds = %agxbputc.exit.i115, %185 - store i8 0, ptr %166, align 1, !tbaa !38 +agxbclear.exit.thread.i107: ; preds = %agxbputc.exit.i115, %187 + store i8 0, ptr %168, align 1, !tbaa !38 br label %agxbuse.exit120 -207: ; preds = %agxbputc.exit.i115 - store i64 0, ptr %167, align 8, !tbaa !38 - %208 = load ptr, ptr %7, align 8, !tbaa !38 +209: ; preds = %agxbputc.exit.i115 + store i64 0, ptr %169, align 8, !tbaa !38 + %210 = load ptr, ptr %7, align 8, !tbaa !38 br label %agxbuse.exit120 -agxbuse.exit120: ; preds = %agxbclear.exit.thread.i107, %207 - %209 = phi ptr [ %208, %207 ], [ %7, %agxbclear.exit.thread.i107 ] - %210 = call ptr @agsubg(ptr noundef %0, ptr noundef %209, i32 noundef 1) #14 - %211 = call ptr @agbindrec(ptr noundef %210, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 - %212 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 - %213 = icmp eq ptr %212, null - br i1 %213, label %214, label %gv_alloc.exit121 - -214: ; preds = %agxbuse.exit120 - %215 = load ptr, ptr @stderr, align 8, !tbaa !3 - %216 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.4, i64 noundef 64) #16 +agxbuse.exit120: ; preds = %agxbclear.exit.thread.i107, %209 + %211 = phi ptr [ %210, %207 ], [ %7, %agxbclear.exit.thread.i107 ] + %212 = call ptr @agsubg(ptr noundef %0, ptr noundef %211, i32 noundef 1) #14 + %213 = call ptr @agbindrec(ptr noundef %212, ptr noundef nonnull @.str.1, i32 noundef 400, i32 noundef 1) #14 + %214 = call noalias dereferenceable_or_null(64) ptr @calloc(i64 noundef 1, i64 noundef 64) #15 + %215 = icmp eq ptr %214, null + br i1 %215, label %216, label %gv_alloc.exit121 + +216: ; preds = %agxbuse.exit120 + %217 = load ptr, ptr @stderr, align 8, !tbaa !3 + %218 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %217, ptr noundef nonnull @.str.4, i64 noundef 64) #16 call fastcc void @graphviz_exit() #17 unreachable gv_alloc.exit121: ; preds = %agxbuse.exit120 - %217 = getelementptr inbounds nuw i8, ptr %210, i64 16 - %218 = load ptr, ptr %217, align 8, !tbaa !8 - %219 = getelementptr inbounds nuw i8, ptr %218, i64 160 - store ptr %212, ptr %219, align 8, !tbaa !14 - call fastcc void @dfs(ptr noundef %0, ptr noundef nonnull %.165141, ptr noundef %210, ptr noundef %8) - %220 = call i64 @graphviz_node_induce(ptr noundef %210, ptr noundef null) #14 - br label %221 - -221: ; preds = %169, %gv_alloc.exit121 - %.5 = phi i64 [ %.4140, %169 ], [ %187, %gv_alloc.exit121 ] - %222 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.165141) #14 - %.not81 = icmp eq ptr %222, null - br i1 %.not81, label %._crit_edge144, label %169, !llvm.loop !53 - -._crit_edge144: ; preds = %221, %163 + %219 = getelementptr inbounds nuw i8, ptr %212, i64 16 + %220 = load ptr, ptr %219, align 8, !tbaa !8 + %221 = getelementptr inbounds nuw i8, ptr %220, i64 160 + store ptr %214, ptr %221, align 8, !tbaa !14 + call fastcc void @dfs(ptr noundef %0, ptr noundef nonnull %.165141, ptr noundef %212, ptr noundef %8) + %222 = call i64 @graphviz_node_induce(ptr noundef %212, ptr noundef null) #14 + br label %223 + +223: ; preds = %171, %gv_alloc.exit121 + %.5 = phi i64 [ %.4140, %169 ], [ %189, %gv_alloc.exit121 ] + %224 = call ptr @agnxtnode(ptr noundef %0, ptr noundef nonnull %.165141) #14 + %.not81 = icmp eq ptr %224, null + br i1 %.not81, label %._crit_edge144, label %171, !llvm.loop !53 + +._crit_edge144: ; preds = %223, %165 %.4.lcssa = phi i64 [ %.168.lcssa, %163 ], [ %.5, %221 ] - %223 = load i64, ptr %23, align 8, !tbaa !54 - %224 = icmp ugt i64 %223, 64 - br i1 %224, label %225, label %bitarray_reset.exit + %225 = load i64, ptr %25, align 8, !tbaa !54 + %226 = icmp ugt i64 %225, 64 + br i1 %226, label %227, label %bitarray_reset.exit -225: ; preds = %._crit_edge144 - %226 = load ptr, ptr %8, align 8, !tbaa !38 - call void @free(ptr noundef %226) #14 +227: ; preds = %._crit_edge144 + %228 = load ptr, ptr %8, align 8, !tbaa !38 + call void @free(ptr noundef %228) #14 br label %bitarray_reset.exit -bitarray_reset.exit: ; preds = %._crit_edge144, %225 - %227 = getelementptr inbounds nuw i8, ptr %7, i64 31 - %.val87 = load i8, ptr %227, align 1, !tbaa !38 - %228 = icmp eq i8 %.val87, -1 - br i1 %228, label %229, label %agxbfree.exit +bitarray_reset.exit: ; preds = %._crit_edge144, %227 + %229 = getelementptr inbounds nuw i8, ptr %7, i64 31 + %.val87 = load i8, ptr %229, align 1, !tbaa !38 + %230 = icmp eq i8 %.val87, -1 + br i1 %230, label %231, label %agxbfree.exit -229: ; preds = %bitarray_reset.exit +231: ; preds = %bitarray_reset.exit %.val = load ptr, ptr %7, align 8 call void @free(ptr noundef %.val) #14 br label %agxbfree.exit -agxbfree.exit: ; preds = %bitarray_reset.exit, %229 - %230 = load i64, ptr @C_cnt, align 8, !tbaa !37 - %231 = add i64 %230, %.4.lcssa - store i64 %231, ptr @C_cnt, align 8, !tbaa !37 +agxbfree.exit: ; preds = %bitarray_reset.exit, %231 + %232 = load i64, ptr @C_cnt, align 8, !tbaa !37 + %233 = add i64 %232, %.4.lcssa + store i64 %233, ptr @C_cnt, align 8, !tbaa !37 %.not82 = icmp eq ptr %1, null - br i1 %.not82, label %233, label %232 + br i1 %.not82, label %235, label %234 -232: ; preds = %agxbfree.exit +234: ; preds = %agxbfree.exit store i64 %.4.lcssa, ptr %1, align 8, !tbaa !37 - br label %233 + br label %235 -233: ; preds = %232, %agxbfree.exit +235: ; preds = %234, %agxbfree.exit %.not83 = icmp eq ptr %2, null - br i1 %.not83, label %235, label %234 + br i1 %.not83, label %237, label %236 -234: ; preds = %233 +236: ; preds = %235 store i32 %.0.lcssa, ptr %2, align 4, !tbaa !56 - br label %235 + br label %237 -235: ; preds = %234, %233 - %236 = add i64 %.4.lcssa, 1 - %.not.i = icmp eq i64 %236, 0 - br i1 %.not.i, label %.thread.i, label %238 +237: ; preds = %236, %235 + %238 = add i64 %.4.lcssa, 1 + %.not.i = icmp eq i64 %238, 0 + br i1 %.not.i, label %.thread.i, label %240 -.thread.i: ; preds = %235 - %237 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #15 +.thread.i: ; preds = %237 + %239 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #15 br label %gv_calloc.exit -238: ; preds = %235 - %mul.ov.i = icmp ugt i64 %236, 2305843009213693951 - br i1 %mul.ov.i, label %239, label %242 +240: ; preds = %237 + %mul.ov.i = icmp ugt i64 %238, 2305843009213693951 + br i1 %mul.ov.i, label %241, label %244 -239: ; preds = %238 - %240 = load ptr, ptr @stderr, align 8, !tbaa !3 - %241 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %240, ptr noundef nonnull @.str.3, i64 noundef %236, i64 noundef 8) #16 +241: ; preds = %240 + %242 = load ptr, ptr @stderr, align 8, !tbaa !3 + %243 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %242, ptr noundef nonnull @.str.3, i64 noundef %238, i64 noundef 8) #16 call fastcc void @graphviz_exit() #17 unreachable -242: ; preds = %238 - %243 = call noalias ptr @calloc(i64 noundef %236, i64 noundef 8) #15 - %244 = icmp eq ptr %243, null - br i1 %244, label %245, label %gv_calloc.exit +244: ; preds = %240 + %245 = call noalias ptr @calloc(i64 noundef %238, i64 noundef 8) #15 + %246 = icmp eq ptr %245, null + br i1 %246, label %247, label %gv_calloc.exit -245: ; preds = %242 - %246 = load ptr, ptr @stderr, align 8, !tbaa !3 - %247 = shl nuw i64 %236, 3 - %248 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %246, ptr noundef nonnull @.str.4, i64 noundef %247) #16 +247: ; preds = %244 + %248 = load ptr, ptr @stderr, align 8, !tbaa !3 + %249 = shl nuw i64 %238, 3 + %250 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %248, ptr noundef nonnull @.str.4, i64 noundef %249) #16 call fastcc void @graphviz_exit() #17 unreachable -gv_calloc.exit: ; preds = %.thread.i, %242 - %249 = phi ptr [ %237, %.thread.i ], [ %243, %242 ] - %250 = call ptr @agfstsubg(ptr noundef %0) #14 - %.not84146 = icmp eq ptr %250, null +gv_calloc.exit: ; preds = %.thread.i, %244 + %251 = phi ptr [ %239, %.thread.i ], [ %245, %242 ] + %252 = call ptr @agfstsubg(ptr noundef %0) #14 + %.not84146 = icmp eq ptr %252, null br i1 %.not84146, label %._crit_edge150, label %.lr.ph149 .lr.ph149: ; preds = %gv_calloc.exit, %.lr.ph149 - %.063148 = phi ptr [ %251, %.lr.ph149 ], [ %249, %gv_calloc.exit ] - %.473147 = phi ptr [ %252, %.lr.ph149 ], [ %250, %gv_calloc.exit ] - %251 = getelementptr inbounds nuw i8, ptr %.063148, i64 8 + %.063148 = phi ptr [ %253, %.lr.ph149 ], [ %251, %gv_calloc.exit ] + %.473147 = phi ptr [ %254, %.lr.ph149 ], [ %252, %gv_calloc.exit ] + %253 = getelementptr inbounds nuw i8, ptr %.063148, i64 8 store ptr %.473147, ptr %.063148, align 8, !tbaa !57 - %252 = call ptr @agnxtsubg(ptr noundef nonnull %.473147) #14 - %.not84 = icmp eq ptr %252, null + %254 = call ptr @agnxtsubg(ptr noundef nonnull %.473147) #14 + %.not84 = icmp eq ptr %254, null br i1 %.not84, label %._crit_edge150, label %.lr.ph149, !llvm.loop !58 ._crit_edge150: ; preds = %.lr.ph149, %gv_calloc.exit - %.063.lcssa = phi ptr [ %249, %gv_calloc.exit ], [ %251, %.lr.ph149 ] + %.063.lcssa = phi ptr [ %251, %gv_calloc.exit ], [ %253, %.lr.ph149 ] store ptr null, ptr %.063.lcssa, align 8, !tbaa !57 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #14 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #14 - ret ptr %249 + ret ptr %251 } ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) diff --git a/bench/graphviz/optimized/neatoinit.ll b/bench/graphviz/optimized/neatoinit.ll index dbac7e6f95a..286907b8529 100644 --- a/bench/graphviz/optimized/neatoinit.ll +++ b/bench/graphviz/optimized/neatoinit.ll @@ -2199,7 +2199,7 @@ define internal fastcc void @neatoLayout(ptr noundef %0, ptr noundef %1, i32 nou %25 = load i32, ptr @MaxIter, align 4 %26 = icmp slt i32 %25, 0 %or.cond = select i1 %24, i1 true, i1 %26 - br i1 %or.cond, label %405, label %27 + br i1 %or.cond, label %407, label %27 27: ; preds = %22 switch i32 %2, label %101 [ @@ -2363,11 +2363,11 @@ mds_model.exit.i: ; preds = %._crit_edge.i.i, %9 kkNeato.exit: ; preds = %mds_model.exit.i, %95 tail call void @solve_model(ptr noundef %1, i32 noundef range(i32 2, -2147483648) %23) #22 - br label %405 + br label %407 100: ; preds = %27 tail call void @sgd(ptr noundef %1, i32 noundef %3) #22 - br label %405 + br label %407 101: ; preds = %27 %102 = load i16, ptr @Ndim, align 2, !tbaa !43 @@ -2484,7 +2484,7 @@ gv_calloc.exit106.i: ; preds = %124, %.thread.i105. 160: ; preds = %156, %153 %.not92.i = icmp eq i32 %2, 1 - br i1 %.not92.i, label %376, label %161 + br i1 %.not92.i, label %378, label %161 161: ; preds = %160 %162 = call ptr @agattr(ptr noundef %1, i32 noundef 0, ptr noundef nonnull @.str.65, ptr noundef null) #22 @@ -2497,7 +2497,7 @@ gv_calloc.exit106.i: ; preds = %124, %.thread.i105. %167 = zext i16 %166 to i32 %168 = load i32, ptr @MaxIter, align 4, !tbaa !53 %169 = call i32 @stress_majorization_with_hierarchy(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %165, i32 noundef %167, i32 noundef %spec.select.i, i32 noundef range(i32 0, 4) %3, i32 noundef %168, double noundef %163) #22 - br label %382 + br label %384 170: ; preds = %161 call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %10) #22 @@ -2517,7 +2517,7 @@ gv_calloc.exit106.i: ; preds = %124, %.thread.i105. %181 = icmp eq ptr %180, null br i1 %181, label %182, label %bitarray_new.exit.i.i -182: ; preds = %174 +.thread.i.i.i.i: ; preds = %174 %183 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 %184 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %183, ptr noundef nonnull @.str.21, i64 noundef %179) #24, !noalias !143 call fastcc void @graphviz_exit() #25 @@ -2526,306 +2526,306 @@ gv_calloc.exit106.i: ; preds = %124, %.thread.i105. bitarray_new.exit.i.i: ; preds = %174, %170 %.sroa.0.0.i.i.i = phi ptr [ null, %170 ], [ %180, %174 ] store ptr %.sroa.0.0.i.i.i, ptr %7, align 8, !noalias !143 - %185 = getelementptr inbounds nuw i8, ptr %7, i64 8 - store i64 %172, ptr %185, align 8, !noalias !143 - %186 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 - %187 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 - %.not79.i.i = icmp eq ptr %187, null + %187 = getelementptr inbounds nuw i8, ptr %7, i64 8 + store i64 %172, ptr %187, align 8, !noalias !143 + %188 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 + %189 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 + %.not79.i.i = icmp eq ptr %189, null br i1 %.not79.i.i, label %.thread.i57.i.i, label %.lr.ph.i.i25 .lr.ph.i.i25: ; preds = %bitarray_new.exit.i.i, %.lr.ph.i.i25 %.04081.i.i = phi i32 [ %spec.select.i.i, %.lr.ph.i.i25 ], [ 0, %bitarray_new.exit.i.i ] - %.04980.i.i = phi ptr [ %190, %.lr.ph.i.i25 ], [ %187, %bitarray_new.exit.i.i ] - %188 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 - %189 = zext i1 %188 to i32 - %spec.select.i.i = add nuw nsw i32 %.04081.i.i, %189 - %190 = call ptr @agnxtsubg(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 - %.not.i107.i = icmp eq ptr %190, null + %.04980.i.i = phi ptr [ %192, %.lr.ph.i.i25 ], [ %189, %bitarray_new.exit.i.i ] + %190 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 + %191 = zext i1 %190 to i32 + %spec.select.i.i = add nuw nsw i32 %.04081.i.i, %191 + %192 = call ptr @agnxtsubg(ptr noundef nonnull %.04980.i.i) #22, !noalias !143 + %.not.i107.i = icmp eq ptr %192, null br i1 %.not.i107.i, label %._crit_edge.i.i26, label %.lr.ph.i.i25, !llvm.loop !146 ._crit_edge.i.i26: ; preds = %.lr.ph.i.i25 - %191 = zext nneg i32 %spec.select.i.i to i64 + %193 = zext nneg i32 %spec.select.i.i to i64 %.not.i.i.i = icmp eq i32 %spec.select.i.i, 0 - br i1 %.not.i.i.i, label %.thread.i57.i.i, label %192 + br i1 %.not.i.i.i, label %.thread.i57.i.i, label %194 -192: ; preds = %._crit_edge.i.i26 - %193 = call noalias ptr @calloc(i64 noundef %191, i64 noundef 8) #23 - %194 = icmp eq ptr %193, null - br i1 %194, label %195, label %201 +194: ; preds = %._crit_edge.i.i26 + %195 = call noalias ptr @calloc(i64 noundef %193, i64 noundef 8) #23 + %196 = icmp eq ptr %195, null + br i1 %196, label %197, label %203 -195: ; preds = %192 - %196 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %197 = shl nuw nsw i64 %191, 3 - %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef nonnull @.str.21, i64 noundef %197) #24, !noalias !143 +197: ; preds = %194 + %198 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %199 = shl nuw nsw i64 %193, 3 + %200 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %198, ptr noundef nonnull @.str.21, i64 noundef %199) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable .thread.i57.i.i: ; preds = %._crit_edge.i.i26, %bitarray_new.exit.i.i - %199 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #23 - %200 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 + %201 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #23 + %202 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 br label %gv_calloc.exit58.i.i -201: ; preds = %192 - %202 = call noalias ptr @calloc(i64 noundef %191, i64 noundef 4) #23 - %203 = icmp eq ptr %202, null - br i1 %203, label %204, label %gv_calloc.exit58.i.i +203: ; preds = %194 + %204 = call noalias ptr @calloc(i64 noundef %193, i64 noundef 4) #23 + %205 = icmp eq ptr %204, null + br i1 %205, label %206, label %gv_calloc.exit58.i.i -204: ; preds = %201 - %205 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %206 = shl nuw nsw i64 %191, 2 - %207 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %205, ptr noundef nonnull @.str.21, i64 noundef %206) #24, !noalias !143 +206: ; preds = %203 + %207 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %208 = shl nuw nsw i64 %193, 2 + %209 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %207, ptr noundef nonnull @.str.21, i64 noundef %208) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit58.i.i: ; preds = %201, %.thread.i57.i.i +gv_calloc.exit58.i.i: ; preds = %203, %.thread.i57.i.i %.sroa.9.0.i = phi i32 [ 0, %.thread.i57.i.i ], [ %spec.select.i.i, %201 ] - %.sroa.15.0.i = phi ptr [ %199, %.thread.i57.i.i ], [ %193, %201 ] - %208 = phi ptr [ %200, %.thread.i57.i.i ], [ %202, %201 ] - %209 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 - %.not5194.i.i = icmp eq ptr %209, null + %.sroa.15.0.i = phi ptr [ %201, %.thread.i57.i.i ], [ %195, %201 ] + %210 = phi ptr [ %202, %.thread.i57.i.i ], [ %204, %201 ] + %211 = call ptr @agfstsubg(ptr noundef %0) #22, !noalias !143 + %.not5194.i.i = icmp eq ptr %211, null br i1 %.not5194.i.i, label %._crit_edge100.i.i, label %.lr.ph99.i.i .lr.ph99.i.i: ; preds = %gv_calloc.exit58.i.i, %.loopexit.i.i - %.sroa.17.0.i = phi i32 [ %.sroa.17.1.i, %.loopexit.i.i ], [ %186, %gv_calloc.exit58.i.i ] + %.sroa.17.0.i = phi i32 [ %.sroa.17.1.i, %.loopexit.i.i ], [ %188, %gv_calloc.exit58.i.i ] %.sroa.0.1.i = phi i32 [ %.sroa.0.2.i, %.loopexit.i.i ], [ 0, %gv_calloc.exit58.i.i ] - %.04498.i.i = phi ptr [ %.145.i.i, %.loopexit.i.i ], [ %208, %gv_calloc.exit58.i.i ] + %.04498.i.i = phi ptr [ %.145.i.i, %.loopexit.i.i ], [ %210, %gv_calloc.exit58.i.i ] %.04697.i.i = phi ptr [ %.147.i.i, %.loopexit.i.i ], [ %.sroa.15.0.i, %gv_calloc.exit58.i.i ] - %.15095.i.i = phi ptr [ %252, %.loopexit.i.i ], [ %209, %gv_calloc.exit58.i.i ] - %210 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - br i1 %210, label %211, label %.loopexit.i.i - -211: ; preds = %.lr.ph99.i.i - %212 = call i32 @agnnodes(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - store i32 %212, ptr %.04498.i.i, align 4, !tbaa !53, !noalias !143 - %213 = add nsw i32 %212, %.sroa.0.1.i - %214 = getelementptr inbounds nuw i8, ptr %.04498.i.i, i64 4 - %215 = sext i32 %212 to i64 - %.not.i59.i.i = icmp eq i32 %212, 0 - br i1 %.not.i59.i.i, label %.thread.i62.i.i, label %217 - -.thread.i62.i.i: ; preds = %211 - %216 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 + %.15095.i.i = phi ptr [ %254, %.loopexit.i.i ], [ %211, %gv_calloc.exit58.i.i ] + %212 = call zeroext i1 @is_a_cluster(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + br i1 %212, label %213, label %.loopexit.i.i + +213: ; preds = %.lr.ph99.i.i + %214 = call i32 @agnnodes(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + store i32 %214, ptr %.04498.i.i, align 4, !tbaa !53, !noalias !143 + %215 = add nsw i32 %214, %.sroa.0.1.i + %216 = getelementptr inbounds nuw i8, ptr %.04498.i.i, i64 4 + %217 = sext i32 %214 to i64 + %.not.i59.i.i = icmp eq i32 %214, 0 + br i1 %.not.i59.i.i, label %.thread.i62.i.i, label %219 + +.thread.i62.i.i: ; preds = %213 + %218 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 br label %gv_calloc.exit63.i.i -217: ; preds = %211 - %mul.ov.i61.i.i = icmp slt i32 %212, 0 - br i1 %mul.ov.i61.i.i, label %218, label %221 +219: ; preds = %213 + %mul.ov.i61.i.i = icmp slt i32 %214, 0 + br i1 %mul.ov.i61.i.i, label %220, label %223 -218: ; preds = %217 - %219 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %220 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %219, ptr noundef nonnull @.str.20, i64 noundef %215, i64 noundef 4) #24, !noalias !143 +220: ; preds = %219 + %221 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %222 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %221, ptr noundef nonnull @.str.20, i64 noundef %217, i64 noundef 4) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -221: ; preds = %217 - %222 = call noalias ptr @calloc(i64 noundef %215, i64 noundef 4) #23 - %223 = icmp eq ptr %222, null - br i1 %223, label %224, label %gv_calloc.exit63.i.i +223: ; preds = %219 + %224 = call noalias ptr @calloc(i64 noundef %217, i64 noundef 4) #23 + %225 = icmp eq ptr %224, null + br i1 %225, label %226, label %gv_calloc.exit63.i.i -224: ; preds = %221 - %225 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %226 = shl nuw nsw i64 %215, 2 - %227 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %225, ptr noundef nonnull @.str.21, i64 noundef %226) #24, !noalias !143 +226: ; preds = %223 + %227 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %228 = shl nuw nsw i64 %217, 2 + %229 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %227, ptr noundef nonnull @.str.21, i64 noundef %228) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit63.i.i: ; preds = %221, %.thread.i62.i.i - %228 = phi ptr [ %216, %.thread.i62.i.i ], [ %222, %221 ] - %229 = getelementptr inbounds nuw i8, ptr %.04697.i.i, i64 8 - store ptr %228, ptr %.04697.i.i, align 8, !tbaa !134, !noalias !143 - %230 = call ptr @agfstnode(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - %.not5290.i.i = icmp eq ptr %230, null +gv_calloc.exit63.i.i: ; preds = %223, %.thread.i62.i.i + %230 = phi ptr [ %218, %.thread.i62.i.i ], [ %224, %221 ] + %231 = getelementptr inbounds nuw i8, ptr %.04697.i.i, i64 8 + store ptr %230, ptr %.04697.i.i, align 8, !tbaa !134, !noalias !143 + %232 = call ptr @agfstnode(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + %.not5290.i.i = icmp eq ptr %232, null br i1 %.not5290.i.i, label %.loopexit.i.i, label %.lr.ph93.i.i .lr.ph93.i.i: ; preds = %gv_calloc.exit63.i.i, %bitarray_set.exit.i.i - %.sroa.17.3.i = phi i32 [ %250, %bitarray_set.exit.i.i ], [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ] - %.03992.i.i = phi ptr [ %238, %bitarray_set.exit.i.i ], [ %228, %gv_calloc.exit63.i.i ] - %.04891.i.i = phi ptr [ %251, %bitarray_set.exit.i.i ], [ %230, %gv_calloc.exit63.i.i ] - %231 = call ptr @agfstnode(ptr noundef %1) #22, !noalias !143 - %.not5382.i.i = icmp eq ptr %231, null + %.sroa.17.3.i = phi i32 [ %252, %bitarray_set.exit.i.i ], [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ] + %.03992.i.i = phi ptr [ %240, %bitarray_set.exit.i.i ], [ %230, %gv_calloc.exit63.i.i ] + %.04891.i.i = phi ptr [ %253, %bitarray_set.exit.i.i ], [ %232, %gv_calloc.exit63.i.i ] + %233 = call ptr @agfstnode(ptr noundef %1) #22, !noalias !143 + %.not5382.i.i = icmp eq ptr %233, null br i1 %.not5382.i.i, label %bitarray_set.exit.i.i, label %.lr.ph86.i.i -.lr.ph86.i.i: ; preds = %.lr.ph93.i.i, %235 - %.084.i.i = phi i32 [ %236, %235 ], [ 0, %.lr.ph93.i.i ] - %.03883.i.i = phi ptr [ %237, %235 ], [ %231, %.lr.ph93.i.i ] - %232 = load i32, ptr %.03883.i.i, align 8, !noalias !143 - %233 = load i32, ptr %.04891.i.i, align 8, !noalias !143 - %.unshifted.i.i = xor i32 %233, %232 - %234 = icmp ult i32 %.unshifted.i.i, 16 - br i1 %234, label %bitarray_set.exit.i.i, label %235 - -235: ; preds = %.lr.ph86.i.i - %236 = add nuw nsw i32 %.084.i.i, 1 - %237 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.03883.i.i) #22, !noalias !143 - %.not53.i.i = icmp eq ptr %237, null +.lr.ph86.i.i: ; preds = %.lr.ph93.i.i, %237 + %.084.i.i = phi i32 [ %238, %235 ], [ 0, %.lr.ph93.i.i ] + %.03883.i.i = phi ptr [ %239, %235 ], [ %233, %.lr.ph93.i.i ] + %234 = load i32, ptr %.03883.i.i, align 8, !noalias !143 + %235 = load i32, ptr %.04891.i.i, align 8, !noalias !143 + %.unshifted.i.i = xor i32 %235, %234 + %236 = icmp ult i32 %.unshifted.i.i, 16 + br i1 %236, label %bitarray_set.exit.i.i, label %237 + +237: ; preds = %.lr.ph86.i.i + %238 = add nuw nsw i32 %.084.i.i, 1 + %239 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.03883.i.i) #22, !noalias !143 + %.not53.i.i = icmp eq ptr %239, null br i1 %.not53.i.i, label %bitarray_set.exit.i.i, label %.lr.ph86.i.i, !llvm.loop !147 -bitarray_set.exit.i.i: ; preds = %235, %.lr.ph86.i.i, %.lr.ph93.i.i - %.0.lcssa.i.i = phi i32 [ 0, %.lr.ph93.i.i ], [ %.084.i.i, %.lr.ph86.i.i ], [ %236, %235 ] - %238 = getelementptr inbounds nuw i8, ptr %.03992.i.i, i64 4 +bitarray_set.exit.i.i: ; preds = %237, %.lr.ph86.i.i, %.lr.ph93.i.i + %.0.lcssa.i.i = phi i32 [ 0, %.lr.ph93.i.i ], [ %.084.i.i, %.lr.ph86.i.i ], [ %238, %235 ] + %240 = getelementptr inbounds nuw i8, ptr %.03992.i.i, i64 4 store i32 %.0.lcssa.i.i, ptr %.03992.i.i, align 4, !tbaa !53, !noalias !143 - %239 = load i64, ptr %185, align 8, !tbaa !148, !noalias !143 - %240 = icmp ult i64 %239, 65 - %241 = load ptr, ptr %7, align 8, !noalias !143 - %spec.select76.i.i = select i1 %240, ptr %7, ptr %241 - %242 = trunc i32 %.0.lcssa.i.i to i8 - %243 = and i8 %242, 7 - %244 = shl nuw i8 1, %243 - %245 = lshr i32 %.0.lcssa.i.i, 3 - %246 = zext nneg i32 %245 to i64 - %247 = getelementptr inbounds nuw i8, ptr %spec.select76.i.i, i64 %246 - %248 = load i8, ptr %247, align 1, !tbaa !42, !noalias !143 - %249 = or i8 %248, %244 - store i8 %249, ptr %247, align 1, !tbaa !42, !noalias !143 - %250 = add nsw i32 %.sroa.17.3.i, -1 - %251 = call ptr @agnxtnode(ptr noundef nonnull %.15095.i.i, ptr noundef nonnull %.04891.i.i) #22, !noalias !143 - %.not52.i.i = icmp eq ptr %251, null + %241 = load i64, ptr %187, align 8, !tbaa !148, !noalias !143 + %242 = icmp ult i64 %241, 65 + %243 = load ptr, ptr %7, align 8, !noalias !143 + %spec.select76.i.i = select i1 %242, ptr %7, ptr %243 + %244 = trunc i32 %.0.lcssa.i.i to i8 + %245 = and i8 %244, 7 + %246 = shl nuw i8 1, %245 + %247 = lshr i32 %.0.lcssa.i.i, 3 + %248 = zext nneg i32 %247 to i64 + %249 = getelementptr inbounds nuw i8, ptr %spec.select76.i.i, i64 %248 + %250 = load i8, ptr %249, align 1, !tbaa !42, !noalias !143 + %251 = or i8 %250, %246 + store i8 %251, ptr %249, align 1, !tbaa !42, !noalias !143 + %252 = add nsw i32 %.sroa.17.3.i, -1 + %253 = call ptr @agnxtnode(ptr noundef nonnull %.15095.i.i, ptr noundef nonnull %.04891.i.i) #22, !noalias !143 + %.not52.i.i = icmp eq ptr %253, null br i1 %.not52.i.i, label %.loopexit.i.i, label %.lr.ph93.i.i, !llvm.loop !150 .loopexit.i.i: ; preds = %bitarray_set.exit.i.i, %gv_calloc.exit63.i.i, %.lr.ph99.i.i - %.sroa.17.1.i = phi i32 [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ], [ %.sroa.17.0.i, %.lr.ph99.i.i ], [ %250, %bitarray_set.exit.i.i ] - %.sroa.0.2.i = phi i32 [ %213, %gv_calloc.exit63.i.i ], [ %.sroa.0.1.i, %.lr.ph99.i.i ], [ %213, %bitarray_set.exit.i.i ] - %.147.i.i = phi ptr [ %229, %gv_calloc.exit63.i.i ], [ %.04697.i.i, %.lr.ph99.i.i ], [ %229, %bitarray_set.exit.i.i ] - %.145.i.i = phi ptr [ %214, %gv_calloc.exit63.i.i ], [ %.04498.i.i, %.lr.ph99.i.i ], [ %214, %bitarray_set.exit.i.i ] - %252 = call ptr @agnxtsubg(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 - %.not51.i.i = icmp eq ptr %252, null + %.sroa.17.1.i = phi i32 [ %.sroa.17.0.i, %gv_calloc.exit63.i.i ], [ %.sroa.17.0.i, %.lr.ph99.i.i ], [ %252, %bitarray_set.exit.i.i ] + %.sroa.0.2.i = phi i32 [ %215, %gv_calloc.exit63.i.i ], [ %.sroa.0.1.i, %.lr.ph99.i.i ], [ %215, %bitarray_set.exit.i.i ] + %.147.i.i = phi ptr [ %231, %gv_calloc.exit63.i.i ], [ %.04697.i.i, %.lr.ph99.i.i ], [ %231, %bitarray_set.exit.i.i ] + %.145.i.i = phi ptr [ %216, %gv_calloc.exit63.i.i ], [ %.04498.i.i, %.lr.ph99.i.i ], [ %216, %bitarray_set.exit.i.i ] + %254 = call ptr @agnxtsubg(ptr noundef nonnull %.15095.i.i) #22, !noalias !143 + %.not51.i.i = icmp eq ptr %254, null br i1 %.not51.i.i, label %._crit_edge100.i.i, label %.lr.ph99.i.i, !llvm.loop !151 ._crit_edge100.i.i: ; preds = %.loopexit.i.i, %gv_calloc.exit58.i.i - %.sroa.17.2.i = phi i32 [ %186, %gv_calloc.exit58.i.i ], [ %.sroa.17.1.i, %.loopexit.i.i ] + %.sroa.17.2.i = phi i32 [ %188, %gv_calloc.exit58.i.i ], [ %.sroa.17.1.i, %.loopexit.i.i ] %.sroa.0.3.i = phi i32 [ 0, %gv_calloc.exit58.i.i ], [ %.sroa.0.2.i, %.loopexit.i.i ] - %253 = sext i32 %.sroa.9.0.i to i64 + %255 = sext i32 %.sroa.9.0.i to i64 %.not.i64.i.i = icmp eq i32 %.sroa.9.0.i, 0 - br i1 %.not.i64.i.i, label %.thread.i67.i.i, label %255 + br i1 %.not.i64.i.i, label %.thread.i67.i.i, label %257 .thread.i67.i.i: ; preds = %._crit_edge100.i.i - %254 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 32) #23 + %256 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 32) #23 br label %gv_calloc.exit68.i.i -255: ; preds = %._crit_edge100.i.i - %256 = call noalias ptr @calloc(i64 noundef %253, i64 noundef 32) #23 - %257 = icmp eq ptr %256, null - br i1 %257, label %258, label %gv_calloc.exit68.i.i +257: ; preds = %._crit_edge100.i.i + %258 = call noalias ptr @calloc(i64 noundef %255, i64 noundef 32) #23 + %259 = icmp eq ptr %258, null + br i1 %259, label %260, label %gv_calloc.exit68.i.i -258: ; preds = %255 - %259 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %260 = shl nuw nsw i64 %253, 5 - %261 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %259, ptr noundef nonnull @.str.21, i64 noundef %260) #24, !noalias !143 +260: ; preds = %257 + %261 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %262 = shl nuw nsw i64 %255, 5 + %263 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %261, ptr noundef nonnull @.str.21, i64 noundef %262) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit68.i.i: ; preds = %255, %.thread.i67.i.i - %262 = phi ptr [ %254, %.thread.i67.i.i ], [ %256, %255 ] - %263 = sext i32 %.sroa.17.2.i to i64 +gv_calloc.exit68.i.i: ; preds = %257, %.thread.i67.i.i + %264 = phi ptr [ %256, %.thread.i67.i.i ], [ %258, %255 ] + %265 = sext i32 %.sroa.17.2.i to i64 %.not.i69.i.i = icmp eq i32 %.sroa.17.2.i, 0 - br i1 %.not.i69.i.i, label %.thread.i72.i.i, label %265 + br i1 %.not.i69.i.i, label %.thread.i72.i.i, label %267 .thread.i72.i.i: ; preds = %gv_calloc.exit68.i.i - %264 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 + %266 = call noalias ptr @calloc(i64 noundef 0, i64 noundef 4) #23 br label %gv_calloc.exit73.i.i -265: ; preds = %gv_calloc.exit68.i.i +267: ; preds = %gv_calloc.exit68.i.i %mul.ov.i71.i.i = icmp slt i32 %.sroa.17.2.i, 0 - br i1 %mul.ov.i71.i.i, label %266, label %269 + br i1 %mul.ov.i71.i.i, label %268, label %271 -266: ; preds = %265 - %267 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %268 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %267, ptr noundef nonnull @.str.20, i64 noundef %263, i64 noundef 4) #24, !noalias !143 +268: ; preds = %267 + %269 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %270 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %269, ptr noundef nonnull @.str.20, i64 noundef %265, i64 noundef 4) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -269: ; preds = %265 - %270 = call noalias ptr @calloc(i64 noundef %263, i64 noundef 4) #23 - %271 = icmp eq ptr %270, null - br i1 %271, label %272, label %gv_calloc.exit73.i.i +271: ; preds = %267 + %272 = call noalias ptr @calloc(i64 noundef %265, i64 noundef 4) #23 + %273 = icmp eq ptr %272, null + br i1 %273, label %274, label %gv_calloc.exit73.i.i -272: ; preds = %269 - %273 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 - %274 = shl nuw nsw i64 %263, 2 - %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %273, ptr noundef nonnull @.str.21, i64 noundef %274) #24, !noalias !143 +274: ; preds = %271 + %275 = load ptr, ptr @stderr, align 8, !tbaa !32, !noalias !143 + %276 = shl nuw nsw i64 %265, 2 + %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %275, ptr noundef nonnull @.str.21, i64 noundef %276) #24, !noalias !143 call fastcc void @graphviz_exit() #25 unreachable -gv_calloc.exit73.i.i: ; preds = %269, %.thread.i72.i.i - %276 = phi ptr [ %264, %.thread.i72.i.i ], [ %270, %269 ] - %277 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 - %278 = icmp sgt i32 %277, 0 - %.pre106.i.i = load i64, ptr %185, align 8, !tbaa !148, !noalias !143 - br i1 %278, label %.lr.ph103.i.i, label %._crit_edge104.i.i +gv_calloc.exit73.i.i: ; preds = %271, %.thread.i72.i.i + %278 = phi ptr [ %266, %.thread.i72.i.i ], [ %272, %269 ] + %279 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 + %280 = icmp sgt i32 %279, 0 + %.pre106.i.i = load i64, ptr %187, align 8, !tbaa !148, !noalias !143 + br i1 %280, label %.lr.ph103.i.i, label %._crit_edge104.i.i .lr.ph103.i.i: ; preds = %gv_calloc.exit73.i.i - %279 = load ptr, ptr %7, align 8, !noalias !143 - %280 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %281 = icmp ult i64 %.pre106.i.i, 65 - %.0.i74.i.i = select i1 %281, ptr %6, ptr %279 - br label %282 + %281 = load ptr, ptr %7, align 8, !noalias !143 + %282 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %283 = icmp ult i64 %.pre106.i.i, 65 + %.0.i74.i.i = select i1 %283, ptr %6, ptr %281 + br label %284 -282: ; preds = %295, %.lr.ph103.i.i +284: ; preds = %297, %.lr.ph103.i.i %.041102.i.i = phi i32 [ 0, %.lr.ph103.i.i ], [ %.142.i.i, %295 ] - %.043101.i.i = phi i32 [ 0, %.lr.ph103.i.i ], [ %296, %295 ] + %.043101.i.i = phi i32 [ 0, %.lr.ph103.i.i ], [ %298, %295 ] call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6), !noalias !143 - store ptr %279, ptr %6, align 8, !noalias !143 - store i64 %.pre106.i.i, ptr %280, align 8, !noalias !143 - %283 = lshr i32 %.043101.i.i, 3 - %284 = zext nneg i32 %283 to i64 - %285 = getelementptr inbounds nuw i8, ptr %.0.i74.i.i, i64 %284 - %286 = load i8, ptr %285, align 1, !tbaa !42, !noalias !143 - %287 = zext i8 %286 to i32 - %288 = and i32 %.043101.i.i, 7 - %289 = shl nuw nsw i32 1, %288 - %290 = and i32 %289, %287 - %.not77.i.i = icmp eq i32 %290, 0 + store ptr %281, ptr %6, align 8, !noalias !143 + store i64 %.pre106.i.i, ptr %282, align 8, !noalias !143 + %285 = lshr i32 %.043101.i.i, 3 + %286 = zext nneg i32 %285 to i64 + %287 = getelementptr inbounds nuw i8, ptr %.0.i74.i.i, i64 %286 + %288 = load i8, ptr %287, align 1, !tbaa !42, !noalias !143 + %289 = zext i8 %288 to i32 + %290 = and i32 %.043101.i.i, 7 + %291 = shl nuw nsw i32 1, %290 + %292 = and i32 %291, %289 + %.not77.i.i = icmp eq i32 %292, 0 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6), !noalias !143 - br i1 %.not77.i.i, label %291, label %295 - -291: ; preds = %282 - %292 = add nsw i32 %.041102.i.i, 1 - %293 = sext i32 %.041102.i.i to i64 - %294 = getelementptr inbounds i32, ptr %276, i64 %293 - store i32 %.043101.i.i, ptr %294, align 4, !tbaa !53, !noalias !143 - br label %295 - -295: ; preds = %291, %282 - %.142.i.i = phi i32 [ %.041102.i.i, %282 ], [ %292, %291 ] - %296 = add nuw nsw i32 %.043101.i.i, 1 - %297 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 - %298 = icmp slt i32 %296, %297 - br i1 %298, label %282, label %._crit_edge104.i.i, !llvm.loop !152 - -._crit_edge104.i.i: ; preds = %295, %gv_calloc.exit73.i.i - %299 = icmp ugt i64 %.pre106.i.i, 64 - br i1 %299, label %300, label %cluster_map.exit.i - -300: ; preds = %._crit_edge104.i.i - %301 = load ptr, ptr %7, align 8, !tbaa !42, !noalias !143 - call void @free(ptr noundef %301) #22, !noalias !143 + br i1 %.not77.i.i, label %293, label %297 + +293: ; preds = %284 + %294 = add nsw i32 %.041102.i.i, 1 + %295 = sext i32 %.041102.i.i to i64 + %296 = getelementptr inbounds i32, ptr %278, i64 %295 + store i32 %.043101.i.i, ptr %296, align 4, !tbaa !53, !noalias !143 + br label %297 + +297: ; preds = %293, %284 + %.142.i.i = phi i32 [ %.041102.i.i, %282 ], [ %294, %291 ] + %298 = add nuw nsw i32 %.043101.i.i, 1 + %299 = call i32 @agnnodes(ptr noundef %1) #22, !noalias !143 + %300 = icmp slt i32 %298, %299 + br i1 %300, label %284, label %._crit_edge104.i.i, !llvm.loop !152 + +._crit_edge104.i.i: ; preds = %297, %gv_calloc.exit73.i.i + %301 = icmp ugt i64 %.pre106.i.i, 64 + br i1 %301, label %302, label %cluster_map.exit.i + +302: ; preds = %._crit_edge104.i.i + %303 = load ptr, ptr %7, align 8, !tbaa !42, !noalias !143 + call void @free(ptr noundef %303) #22, !noalias !143 br label %cluster_map.exit.i -cluster_map.exit.i: ; preds = %300, %._crit_edge104.i.i +cluster_map.exit.i: ; preds = %302, %._crit_edge104.i.i call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #22, !noalias !143 - %302 = zext nneg i32 %23 to i64 - %303 = call noalias ptr @calloc(i64 noundef %302, i64 noundef 16) #23 - %304 = icmp eq ptr %303, null - br i1 %304, label %305, label %gv_calloc.exit112.i - -305: ; preds = %cluster_map.exit.i - %306 = load ptr, ptr @stderr, align 8, !tbaa !32 - %307 = shl nuw nsw i64 %302, 4 - %308 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %306, ptr noundef nonnull @.str.21, i64 noundef %307) #24 + %304 = zext nneg i32 %23 to i64 + %305 = call noalias ptr @calloc(i64 noundef %304, i64 noundef 16) #23 + %306 = icmp eq ptr %305, null + br i1 %306, label %307, label %gv_calloc.exit112.i + +307: ; preds = %cluster_map.exit.i + %308 = load ptr, ptr @stderr, align 8, !tbaa !32 + %309 = shl nuw nsw i64 %304, 4 + %310 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %308, ptr noundef nonnull @.str.21, i64 noundef %309) #24 call fastcc void @graphviz_exit() #25 unreachable gv_calloc.exit112.i: ; preds = %cluster_map.exit.i - %309 = getelementptr inbounds nuw i8, ptr %10, i64 8 - store double %163, ptr %309, align 8, !tbaa !153 - %310 = getelementptr inbounds nuw i8, ptr %10, i64 40 - store ptr %303, ptr %310, align 8, !tbaa !157 - %311 = getelementptr inbounds nuw i8, ptr %10, i64 48 - store i32 %.sroa.0.3.i, ptr %311, align 8, !tbaa !53 + %311 = getelementptr inbounds nuw i8, ptr %10, i64 8 + store double %163, ptr %311, align 8, !tbaa !153 + %312 = getelementptr inbounds nuw i8, ptr %10, i64 40 + store ptr %305, ptr %312, align 8, !tbaa !157 + %313 = getelementptr inbounds nuw i8, ptr %10, i64 48 + store i32 %.sroa.0.3.i, ptr %313, align 8, !tbaa !53 %.sroa.9.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 52 store i32 %.sroa.9.0.i, ptr %.sroa.9.0..sroa_idx.i, align 4, !tbaa !53 %.sroa.14.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 56 - store ptr %208, ptr %.sroa.14.0..sroa_idx.i, align 8, !tbaa !134 + store ptr %210, ptr %.sroa.14.0..sroa_idx.i, align 8, !tbaa !134 %.sroa.15.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 64 store ptr %.sroa.15.0.i, ptr %.sroa.15.0..sroa_idx.i, align 8, !tbaa !158 %.sroa.17.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 72 @@ -2833,83 +2833,83 @@ gv_calloc.exit112.i: ; preds = %cluster_map.exit.i %.sroa.21.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 76 store i32 0, ptr %.sroa.21.0..sroa_idx.i, align 4 %.sroa.21126.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 80 - store ptr %276, ptr %.sroa.21126.0..sroa_idx.i, align 8, !tbaa !134 + store ptr %278, ptr %.sroa.21126.0..sroa_idx.i, align 8, !tbaa !134 %.sroa.22.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %10, i64 88 - store ptr %262, ptr %.sroa.22.0..sroa_idx.i, align 8, !tbaa !159 - %312 = call ptr @agget(ptr noundef %1, ptr noundef nonnull @.str.66) #22 - %313 = call zeroext i1 @mapbool(ptr noundef %312) #22 - br i1 %313, label %314, label %319 + store ptr %264, ptr %.sroa.22.0..sroa_idx.i, align 8, !tbaa !159 + %314 = call ptr @agget(ptr noundef %1, ptr noundef nonnull @.str.66) #22 + %315 = call zeroext i1 @mapbool(ptr noundef %314) #22 + br i1 %315, label %316, label %321 -314: ; preds = %gv_calloc.exit112.i +316: ; preds = %gv_calloc.exit112.i store i32 1, ptr %10, align 8, !tbaa !160 - %315 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not96.i = icmp eq i8 %315, 0 - br i1 %.not96.i, label %328, label %316 + %317 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not96.i = icmp eq i8 %317, 0 + br i1 %.not96.i, label %330, label %318 -316: ; preds = %314 - %317 = load ptr, ptr @stderr, align 8, !tbaa !32 - %318 = call i64 @fwrite(ptr nonnull @.str.67, i64 31, i64 1, ptr %317) #27 - br label %328 +318: ; preds = %316 + %319 = load ptr, ptr @stderr, align 8, !tbaa !32 + %320 = call i64 @fwrite(ptr nonnull @.str.67, i64 31, i64 1, ptr %319) #27 + br label %330 -319: ; preds = %gv_calloc.exit112.i - %.not93.i = icmp eq ptr %312, null - br i1 %.not93.i, label %327, label %320 +321: ; preds = %gv_calloc.exit112.i + %.not93.i = icmp eq ptr %314, null + br i1 %.not93.i, label %329, label %322 -320: ; preds = %319 - %321 = call i32 @strncasecmp(ptr noundef nonnull %312, ptr noundef nonnull @.str.40, i64 noundef 4) #26 - %.not94.i = icmp eq i32 %321, 0 - br i1 %.not94.i, label %322, label %327 +322: ; preds = %321 + %323 = call i32 @strncasecmp(ptr noundef nonnull %314, ptr noundef nonnull @.str.40, i64 noundef 4) #26 + %.not94.i = icmp eq i32 %323, 0 + br i1 %.not94.i, label %324, label %329 -322: ; preds = %320 +324: ; preds = %322 store i32 2, ptr %10, align 8, !tbaa !160 - %323 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not95.i = icmp eq i8 %323, 0 - br i1 %.not95.i, label %328, label %324 + %325 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not95.i = icmp eq i8 %325, 0 + br i1 %.not95.i, label %330, label %326 -324: ; preds = %322 - %325 = load ptr, ptr @stderr, align 8, !tbaa !32 - %326 = call i64 @fwrite(ptr nonnull @.str.68, i64 40, i64 1, ptr %325) #27 - br label %328 +326: ; preds = %324 + %327 = load ptr, ptr @stderr, align 8, !tbaa !32 + %328 = call i64 @fwrite(ptr nonnull @.str.68, i64 40, i64 1, ptr %327) #27 + br label %330 -327: ; preds = %320, %319 +329: ; preds = %322, %321 store i32 0, ptr %10, align 8, !tbaa !160 - br label %328 - -328: ; preds = %327, %324, %322, %316, %314 - %329 = load i32, ptr %4, align 8, !tbaa !161 - %330 = getelementptr inbounds nuw i8, ptr %10, i64 16 - switch i32 %329, label %341 [ - i32 17, label %331 - i32 16, label %336 + br label %330 + +330: ; preds = %329, %326, %324, %318, %316 + %331 = load i32, ptr %4, align 8, !tbaa !161 + %332 = getelementptr inbounds nuw i8, ptr %10, i64 16 + switch i32 %331, label %341 [ + i32 17, label %333 + i32 16, label %338 ] -331: ; preds = %328 - store i32 1, ptr %330, align 8, !tbaa !163 - %332 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not98.i = icmp eq i8 %332, 0 - br i1 %.not98.i, label %342, label %333 - -333: ; preds = %331 - %334 = load ptr, ptr @stderr, align 8, !tbaa !32 - %335 = call i64 @fwrite(ptr nonnull @.str.69, i64 38, i64 1, ptr %334) #27 - br label %342 - -336: ; preds = %328 - store i32 2, ptr %330, align 8, !tbaa !163 - %337 = load i8, ptr @Verbose, align 1, !tbaa !42 - %.not97.i = icmp eq i8 %337, 0 - br i1 %.not97.i, label %342, label %338 - -338: ; preds = %336 - %339 = load ptr, ptr @stderr, align 8, !tbaa !32 - %340 = call i64 @fwrite(ptr nonnull @.str.70, i64 36, i64 1, ptr %339) #27 - br label %342 - -341: ; preds = %328 - store i32 0, ptr %330, align 8, !tbaa !163 - br label %342 - -342: ; preds = %341, %338, %336, %333, %331 +333: ; preds = %330 + store i32 1, ptr %332, align 8, !tbaa !163 + %334 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not98.i = icmp eq i8 %334, 0 + br i1 %.not98.i, label %344, label %335 + +335: ; preds = %333 + %336 = load ptr, ptr @stderr, align 8, !tbaa !32 + %337 = call i64 @fwrite(ptr nonnull @.str.69, i64 38, i64 1, ptr %336) #27 + br label %344 + +338: ; preds = %330 + store i32 2, ptr %332, align 8, !tbaa !163 + %339 = load i8, ptr @Verbose, align 1, !tbaa !42 + %.not97.i = icmp eq i8 %339, 0 + br i1 %.not97.i, label %344, label %340 + +340: ; preds = %338 + %341 = load ptr, ptr @stderr, align 8, !tbaa !32 + %342 = call i64 @fwrite(ptr nonnull @.str.70, i64 36, i64 1, ptr %341) #27 + br label %344 + +343: ; preds = %330 + store i32 0, ptr %332, align 8, !tbaa !163 + br label %344 + +344: ; preds = %343, %340, %338, %335, %333 call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #22 call void @sepFactor(ptr dead_on_unwind nonnull writable sret(%struct.expand_t) align 8 %11, ptr noundef %1) #22 %.sroa.0.0.copyload.i = load double, ptr %11, align 8, !tbaa !45 @@ -2918,8 +2918,8 @@ gv_calloc.exit112.i: ; preds = %cluster_map.exit.i %.sroa.5.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %11, i64 16 %.sroa.5.0.copyload.i = load i8, ptr %.sroa.5.0..sroa_idx.i, align 8, !tbaa !112 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #22 - %343 = trunc i8 %.sroa.5.0.copyload.i to i1 - %344 = fdiv double %.sroa.0.0.copyload.i, 7.200000e+01 + %345 = trunc i8 %.sroa.5.0.copyload.i to i1 + %346 = fdiv double %.sroa.0.0.copyload.i, 7.200000e+01 %345 = fmul double %344, 2.000000e+00 %346 = fdiv double %.sroa.4.0.copyload.i, 7.200000e+01 %347 = fmul double %346, 2.000000e+00 @@ -2927,131 +2927,131 @@ gv_calloc.exit112.i: ; preds = %cluster_map.exit.i %349 = select i1 %343, double %347, double 0x3FBC71C71C71C71C %350 = getelementptr inbounds nuw i8, ptr %10, i64 24 store double %348, ptr %350, align 8, !tbaa !164 - %351 = getelementptr inbounds nuw i8, ptr %10, i64 32 - store double %349, ptr %351, align 8, !tbaa !165 + %352 = getelementptr inbounds nuw i8, ptr %10, i64 32 + store double %349, ptr %352, align 8, !tbaa !165 %352 = load i8, ptr @Verbose, align 1, !tbaa !42 %.not99.i = icmp eq i8 %352, 0 br i1 %.not99.i, label %356, label %353 -353: ; preds = %342 +353: ; preds = %342 %354 = load ptr, ptr @stderr, align 8, !tbaa !32 %355 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %354, ptr noundef nonnull @.str.71, double noundef %348, double noundef %349) #24 br label %356 -356: ; preds = %353, %342 +356:; preds = %353, %342 %357 = call ptr @agfstnode(ptr noundef %1) #22 %.not100145.i = icmp eq ptr %357, null br i1 %.not100145.i, label %._crit_edge150.i, label %.lr.ph149.i .lr.ph149.i: ; preds = %356, %.lr.ph149.i - %.084147.i = phi i64 [ %367, %.lr.ph149.i ], [ 0, %356 ] - %.085146.i = phi ptr [ %366, %.lr.ph149.i ], [ %357, %356 ] - %358 = getelementptr inbounds nuw i8, ptr %.085146.i, i64 16 - %359 = load ptr, ptr %358, align 8, !tbaa !3 - %360 = getelementptr inbounds nuw i8, ptr %359, i64 48 - %361 = load double, ptr %360, align 8, !tbaa !166 - %362 = getelementptr inbounds nuw %struct.pointf_s, ptr %303, i64 %.084147.i - store double %361, ptr %362, align 8, !tbaa !68 - %363 = getelementptr inbounds nuw i8, ptr %359, i64 56 - %364 = load double, ptr %363, align 8, !tbaa !167 - %365 = getelementptr inbounds nuw i8, ptr %362, i64 8 - store double %364, ptr %365, align 8, !tbaa !69 - %366 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.085146.i) #22 - %367 = add i64 %.084147.i, 1 - %.not100.i = icmp eq ptr %366, null + %.084147.i = phi i64 [ %369, %.lr.ph149.i ], [ 0, %356 ] + %.085146.i = phi ptr [ %368, %.lr.ph149.i ], [ %357, %356 ] + %360 = getelementptr inbounds nuw i8, ptr %.085146.i, i64 16 + %361 = load ptr, ptr %360, align 8, !tbaa !3 + %362 = getelementptr inbounds nuw i8, ptr %361, i64 48 + %363 = load double, ptr %362, align 8, !tbaa !166 + %364 = getelementptr inbounds nuw %struct.pointf_s, ptr %305, i64 %.084147.i + store double %363, ptr %364, align 8, !tbaa !68 + %365 = getelementptr inbounds nuw i8, ptr %361, i64 56 + %366 = load double, ptr %365, align 8, !tbaa !167 + %367 = getelementptr inbounds nuw i8, ptr %364, i64 8 + store double %366, ptr %367, align 8, !tbaa !69 + %368 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.085146.i) #22 + %369 = add i64 %.084147.i, 1 + %.not100.i = icmp eq ptr %368, null br i1 %.not100.i, label %._crit_edge150.i, label %.lr.ph149.i, !llvm.loop !168 ._crit_edge150.i: ; preds = %.lr.ph149.i, %356 - %368 = load ptr, ptr %9, align 8, !tbaa !142 - %369 = load i16, ptr @Ndim, align 2, !tbaa !43 - %370 = zext i16 %369 to i32 - %371 = load i32, ptr @MaxIter, align 4, !tbaa !53 - %372 = call i32 @stress_majorization_cola(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %368, i32 noundef %370, i32 noundef range(i32 0, 4) %3, i32 noundef %371, ptr noundef nonnull %10) #22 - %373 = icmp sgt i32 %.sroa.9.0.i, 0 - br i1 %373, label %374, label %freeClusterData.exit.i - -374: ; preds = %._crit_edge150.i - %375 = load ptr, ptr %.sroa.15.0.i, align 8, !tbaa !134 - call void @free(ptr noundef %375) #22 + %370 = load ptr, ptr %9, align 8, !tbaa !142 + %371 = load i16, ptr @Ndim, align 2, !tbaa !43 + %372 = zext i16 %371 to i32 + %373 = load i32, ptr @MaxIter, align 4, !tbaa !53 + %374 = call i32 @stress_majorization_cola(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %370, i32 noundef %372, i32 noundef range(i32 0, 4) %3, i32 noundef %373, ptr noundef nonnull %10) #22 + %375 = icmp sgt i32 %.sroa.9.0.i, 0 + br i1 %375, label %376, label %freeClusterData.exit.i + +376: ; preds = %._crit_edge150.i + %377 = load ptr, ptr %.sroa.15.0.i, align 8, !tbaa !134 + call void @free(ptr noundef %377) #22 call void @free(ptr noundef %.sroa.15.0.i) #22 - call void @free(ptr noundef %208) #22 - call void @free(ptr noundef %276) #22 - call void @free(ptr noundef %262) #22 + call void @free(ptr noundef %210) #22 + call void @free(ptr noundef %278) #22 + call void @free(ptr noundef %264) #22 br label %freeClusterData.exit.i -freeClusterData.exit.i: ; preds = %374, %._crit_edge150.i - call void @free(ptr noundef nonnull %303) #22 +freeClusterData.exit.i: ; preds = %376, %._crit_edge150.i + call void @free(ptr noundef nonnull %305) #22 call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %10) #22 - br label %382 - -376: ; preds = %160 - %377 = load ptr, ptr %9, align 8, !tbaa !142 - %378 = load i16, ptr @Ndim, align 2, !tbaa !43 - %379 = zext i16 %378 to i32 - %380 = load i32, ptr @MaxIter, align 4, !tbaa !53 - %381 = call i32 @stress_majorization_kD_mkernel(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %377, i32 noundef %379, i32 noundef %spec.select.i, i32 noundef range(i32 0, 4) %3, i32 noundef %380) #22 - br label %382 - -382: ; preds = %376, %freeClusterData.exit.i, %164 - %383 = phi ptr [ %377, %376 ], [ %165, %164 ], [ %368, %freeClusterData.exit.i ] - %.1.i = phi i32 [ %381, %376 ], [ %169, %164 ], [ %372, %freeClusterData.exit.i ] - %384 = icmp slt i32 %.1.i, 0 - br i1 %384, label %385, label %387 - -385: ; preds = %382 - %386 = call i32 (i32, ptr, ...) @agerr(i32 noundef 3, ptr noundef nonnull @.str.72) #22 + br label %384 + +378: ; preds = %160 + %379 = load ptr, ptr %9, align 8, !tbaa !142 + %380 = load i16, ptr @Ndim, align 2, !tbaa !43 + %381 = zext i16 %380 to i32 + %382 = load i32, ptr @MaxIter, align 4, !tbaa !53 + %383 = call i32 @stress_majorization_kD_mkernel(ptr noundef %154, i32 noundef range(i32 2, -2147483648) %23, ptr noundef nonnull %133, ptr noundef %379, i32 noundef %381, i32 noundef %spec.select.i, i32 noundef range(i32 0, 4) %3, i32 noundef %382) #22 + br label %384 + +384: ; preds = %378, %freeClusterData.exit.i, %164 + %385 = phi ptr [ %379, %376 ], [ %165, %164 ], [ %370, %freeClusterData.exit.i ] + %.1.i = phi i32 [ %383, %376 ], [ %169, %164 ], [ %374, %freeClusterData.exit.i ] + %386 = icmp slt i32 %.1.i, 0 + br i1 %386, label %387, label %389 + +387: ; preds = %384 + %388 = call i32 (i32, ptr, ...) @agerr(i32 noundef 3, ptr noundef nonnull @.str.72) #22 br label %majorization.exit -387: ; preds = %382 - %388 = call ptr @agfstnode(ptr noundef %1) #22 - %.not101155.i = icmp eq ptr %388, null +389: ; preds = %384 + %390 = call ptr @agfstnode(ptr noundef %1) #22 + %.not101155.i = icmp eq ptr %390, null br i1 %.not101155.i, label %majorization.exit, label %.lr.ph158.i -.lr.ph158.i: ; preds = %387, %._crit_edge154.i - %.186156.i = phi ptr [ %397, %._crit_edge154.i ], [ %388, %387 ] - %389 = load i16, ptr @Ndim, align 2, !tbaa !43 - %.not159.i = icmp eq i16 %389, 0 +.lr.ph158.i: ; preds = %389, %._crit_edge154.i + %.186156.i = phi ptr [ %399, %._crit_edge154.i ], [ %390, %387 ] + %391 = load i16, ptr @Ndim, align 2, !tbaa !43 + %.not159.i = icmp eq i16 %391, 0 br i1 %.not159.i, label %._crit_edge154.i, label %.lr.ph153.i .lr.ph153.i: ; preds = %.lr.ph158.i - %390 = getelementptr inbounds nuw i8, ptr %.186156.i, i64 16 - %391 = load ptr, ptr %390, align 8, !tbaa !3 - %392 = getelementptr inbounds nuw i8, ptr %391, i64 164 - %393 = load i32, ptr %392, align 4, !tbaa !169 - %394 = sext i32 %393 to i64 - %395 = getelementptr inbounds nuw i8, ptr %391, i64 176 - %396 = load ptr, ptr %395, align 8, !tbaa !34 - %wide.trip.count166.i = zext i16 %389 to i64 - br label %398 - -._crit_edge154.i: ; preds = %398, %.lr.ph158.i - %397 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.186156.i) #22 - %.not101.i = icmp eq ptr %397, null + %392 = getelementptr inbounds nuw i8, ptr %.186156.i, i64 16 + %393 = load ptr, ptr %392, align 8, !tbaa !3 + %394 = getelementptr inbounds nuw i8, ptr %393, i64 164 + %395 = load i32, ptr %394, align 4, !tbaa !169 + %396 = sext i32 %395 to i64 + %397 = getelementptr inbounds nuw i8, ptr %393, i64 176 + %398 = load ptr, ptr %397, align 8, !tbaa !34 + %wide.trip.count166.i = zext i16 %391 to i64 + br label %400 + +._crit_edge154.i: ; preds = %400, %.lr.ph158.i + %399 = call ptr @agnxtnode(ptr noundef %1, ptr noundef nonnull %.186156.i) #22 + %.not101.i = icmp eq ptr %399, null br i1 %.not101.i, label %majorization.exit, label %.lr.ph158.i, !llvm.loop !170 -398: ; preds = %398, %.lr.ph153.i +400: ; preds = %400, %.lr.ph153.i %indvars.iv163.i = phi i64 [ 0, %.lr.ph153.i ], [ %indvars.iv.next164.i, %398 ] - %399 = getelementptr inbounds nuw ptr, ptr %133, i64 %indvars.iv163.i - %400 = load ptr, ptr %399, align 8, !tbaa !135 - %401 = getelementptr inbounds double, ptr %400, i64 %394 - %402 = load double, ptr %401, align 8, !tbaa !45 - %403 = getelementptr inbounds nuw double, ptr %396, i64 %indvars.iv163.i - store double %402, ptr %403, align 8, !tbaa !45 + %401 = getelementptr inbounds nuw ptr, ptr %133, i64 %indvars.iv163.i + %402 = load ptr, ptr %401, align 8, !tbaa !135 + %403 = getelementptr inbounds double, ptr %402, i64 %396 + %404 = load double, ptr %403, align 8, !tbaa !45 + %405 = getelementptr inbounds nuw double, ptr %398, i64 %indvars.iv163.i + store double %404, ptr %405, align 8, !tbaa !45 %indvars.iv.next164.i = add nuw nsw i64 %indvars.iv163.i, 1 %exitcond167.not.i = icmp eq i64 %indvars.iv.next164.i, %wide.trip.count166.i - br i1 %exitcond167.not.i, label %._crit_edge154.i, label %398, !llvm.loop !171 + br i1 %exitcond167.not.i, label %._crit_edge154.i, label %400, !llvm.loop !171 -majorization.exit: ; preds = %._crit_edge154.i, %385, %387 +majorization.exit: ; preds = %._crit_edge154.i, %387, %389 call void @freeGraphData(ptr noundef %154) #22 - %404 = load ptr, ptr %133, align 8, !tbaa !135 - call void @free(ptr noundef %404) #22 + %406 = load ptr, ptr %133, align 8, !tbaa !135 + call void @free(ptr noundef %406) #22 call void @free(ptr noundef %133) #22 - call void @free(ptr noundef %383) #22 + call void @free(ptr noundef %385) #22 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #22 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #22 - br label %405 + br label %407 -405: ; preds = %kkNeato.exit, %majorization.exit, %100, %22 +407: ; preds = %kkNeato.exit, %majorization.exit, %100, %22 ret void } 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/hyperscan/optimized/dfa_min.ll b/bench/hyperscan/optimized/dfa_min.ll index ea85ca010ea..4ef9ad0f2a4 100644 --- a/bench/hyperscan/optimized/dfa_min.ll +++ b/bench/hyperscan/optimized/dfa_min.ll @@ -6432,9 +6432,9 @@ _ZNSt6vectorImSaImEE17_M_default_appendEm.exit: ; preds = %_ZNKSt6vectorImSaIm .lr.ph: ; preds = %23 %28 = load ptr, ptr %0, align 8 - br label %79 + br label %80 -._crit_edge: ; preds = %79, %23 +._crit_edge: ; preds = %80, %23 %29 = ptrtoint ptr %.sroa.13.0 to i64 %30 = ptrtoint ptr %.sroa.092.0 to i64 %31 = sub i64 %29, %30 @@ -6577,24 +6577,24 @@ _ZNK5boost14dynamic_bitsetImSaImEE10find_firstEv.exit: ; preds = %65, %_ZN5boost %77 = getelementptr inbounds nuw i8, ptr %2, i64 16 %78 = add nsw i64 %11, -1 %.pre = load ptr, ptr %76, align 8 - br label %92 - -79: ; preds = %.lr.ph, %79 - %.sroa.088.0105 = phi ptr [ %24, %.lr.ph ], [ %90, %79 ] - %80 = load i16, ptr %.sroa.088.0105, align 2 - %81 = zext i16 %80 to i64 - %82 = getelementptr inbounds nuw i64, ptr %28, i64 %81 - %83 = load i64, ptr %82, align 8 - %84 = and i64 %83, 63 - %85 = shl nuw i64 1, %84 - %86 = lshr i64 %83, 6 - %87 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %86 - %88 = load i64, ptr %87, align 8 - %89 = or i64 %85, %88 - store i64 %89, ptr %87, align 8 - %90 = getelementptr inbounds nuw i8, ptr %.sroa.088.0105, i64 2 - %.not102 = icmp eq ptr %90, %27 - br i1 %.not102, label %._crit_edge, label %79 + br label %93 + +80: ; preds = %.lr.ph, %80 + %.sroa.088.0105 = phi ptr [ %24, %.lr.ph ], [ %91, %79 ] + %81 = load i16, ptr %.sroa.088.0105, align 2 + %82 = zext i16 %81 to i64 + %83 = getelementptr inbounds nuw i64, ptr %28, i64 %82 + %84 = load i64, ptr %83, align 8 + %85 = and i64 %84, 63 + %86 = shl nuw i64 1, %85 + %87 = lshr i64 %84, 6 + %88 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %87 + %89 = load i64, ptr %88, align 8 + %90 = or i64 %86, %89 + store i64 %90, ptr %88, align 8 + %91 = getelementptr inbounds nuw i8, ptr %.sroa.088.0105, i64 2 + %.not102 = icmp eq ptr %91, %27 + br i1 %.not102, label %._crit_edge, label %80 ._crit_edge125: ; preds = %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52, %_ZNSt6vectorImSaImEE9push_backERKm.exit, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i %.not.i.i.i.i = icmp eq ptr %.sroa.092.0, null @@ -6610,272 +6610,272 @@ _ZN5boost14dynamic_bitsetImSaImEED2Ev.exit: ; preds = %._crit_edge125, %._ .loopexit: ; preds = %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i %lpad.loopexit = landingpad { ptr, i32 } cleanup - br label %91 + br label %92 -.loopexit.split-lp: ; preds = %104 +.loopexit.split-lp: ; preds = %105 %lpad.loopexit.split-lp = landingpad { ptr, i32 } cleanup - br label %91 + br label %92 -91: ; preds = %.loopexit.split-lp, %.loopexit +92: ; preds = %.loopexit.split-lp, %.loopexit %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] %.not.i.i.i.i25 = icmp eq ptr %.sroa.092.0, null - br i1 %.not.i.i.i.i25, label %.body, label %181 + br i1 %.not.i.i.i.i25, label %.body, label %182 -92: ; preds = %.lr.ph124, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit - %93 = phi ptr [ %.pre, %.lr.ph124 ], [ %118, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit ] +93: ; preds = %.lr.ph124, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit + %94 = phi ptr [ %.pre, %.lr.ph124 ], [ %119, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit ] %storemerge123 = phi i64 [ %75, %.lr.ph124 ], [ %.0.i, %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit ] - %94 = load ptr, ptr %77, align 8 - %.not.i20 = icmp eq ptr %93, %94 - br i1 %.not.i20, label %98, label %95 - -95: ; preds = %92 - store i64 %storemerge123, ptr %93, align 8 - %96 = load ptr, ptr %76, align 8 - %97 = getelementptr inbounds nuw i8, ptr %96, i64 8 - store ptr %97, ptr %76, align 8 + %95 = load ptr, ptr %77, align 8 + %.not.i20 = icmp eq ptr %94, %95 + br i1 %.not.i20, label %99, label %96 + +96: ; preds = %93 + store i64 %storemerge123, ptr %94, align 8 + %97 = load ptr, ptr %76, align 8 + %98 = getelementptr inbounds nuw i8, ptr %97, i64 8 + store ptr %98, ptr %76, align 8 br label %_ZNSt6vectorImSaImEE9push_backERKm.exit -98: ; preds = %92 - %99 = load ptr, ptr %2, align 8 - %100 = ptrtoint ptr %93 to i64 - %101 = ptrtoint ptr %99 to i64 - %102 = sub i64 %100, %101 - %103 = icmp eq i64 %102, 9223372036854775800 - br i1 %103, label %104, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i +99: ; preds = %93 + %100 = load ptr, ptr %2, align 8 + %101 = ptrtoint ptr %94 to i64 + %102 = ptrtoint ptr %100 to i64 + %103 = sub i64 %101, %102 + %104 = icmp eq i64 %103, 9223372036854775800 + br i1 %104, label %105, label %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i -104: ; preds = %98 +105: ; preds = %99 invoke void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str.5) #21 to label %.noexc unwind label %.loopexit.split-lp -.noexc: ; preds = %104 +.noexc: ; preds = %105 unreachable -_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i: ; preds = %98 - %105 = ashr exact i64 %102, 3 - %.sroa.speculated.i.i.i = tail call i64 @llvm.umax.i64(i64 %105, i64 1) - %106 = add nsw i64 %.sroa.speculated.i.i.i, %105 - %107 = icmp ult i64 %106, %105 - %108 = tail call i64 @llvm.umin.i64(i64 %106, i64 1152921504606846975) - %109 = select i1 %107, i64 1152921504606846975, i64 %108 - %.not.i.i.i = icmp ne i64 %109, 0 +_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i: ; preds = %99 + %106 = ashr exact i64 %103, 3 + %.sroa.speculated.i.i.i = tail call i64 @llvm.umax.i64(i64 %106, i64 1) + %107 = add nsw i64 %.sroa.speculated.i.i.i, %106 + %108 = icmp ult i64 %107, %106 + %109 = tail call i64 @llvm.umin.i64(i64 %107, i64 1152921504606846975) + %110 = select i1 %108, i64 1152921504606846975, i64 %109 + %.not.i.i.i = icmp ne i64 %110, 0 tail call void @llvm.assume(i1 %.not.i.i.i) - %110 = shl nuw nsw i64 %109, 3 - %111 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %110) #22 + %111 = shl nuw nsw i64 %110, 3 + %112 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %111) #22 to label %.noexc21 unwind label %.loopexit .noexc21: ; preds = %_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc.exit.i.i - %112 = getelementptr inbounds i8, ptr %111, i64 %102 - store i64 %storemerge123, ptr %112, align 8 - %113 = icmp sgt i64 %102, 0 - br i1 %113, label %114, label %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i + %113 = getelementptr inbounds i8, ptr %112, i64 %103 + store i64 %storemerge123, ptr %113, align 8 + %114 = icmp sgt i64 %103, 0 + br i1 %114, label %115, label %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i -114: ; preds = %.noexc21 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %111, ptr align 8 %99, i64 %102, i1 false) +115: ; preds = %.noexc21 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %112, ptr align 8 %100, i64 %103, i1 false) br label %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i -_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i: ; preds = %114, %.noexc21 - %115 = getelementptr inbounds nuw i8, ptr %112, i64 8 - %.not.i17.i.i = icmp eq ptr %99, null - br i1 %.not.i17.i.i, label %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, label %116 +_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i: ; preds = %115, %.noexc21 + %116 = getelementptr inbounds nuw i8, ptr %113, i64 8 + %.not.i17.i.i = icmp eq ptr %100, null + br i1 %.not.i17.i.i, label %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, label %117 -116: ; preds = %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i - tail call void @_ZdlPv(ptr noundef nonnull %99) #24 +117: ; preds = %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i + tail call void @_ZdlPv(ptr noundef nonnull %100) #24 br label %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i -_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i: ; preds = %116, %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i - store ptr %111, ptr %2, align 8 - store ptr %115, ptr %76, align 8 - %117 = getelementptr inbounds nuw i64, ptr %111, i64 %109 - store ptr %117, ptr %77, align 8 +_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i: ; preds = %117, %_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_.exit16.i.i + store ptr %112, ptr %2, align 8 + store ptr %116, ptr %76, align 8 + %118 = getelementptr inbounds nuw i64, ptr %112, i64 %110 + store ptr %118, ptr %77, align 8 br label %_ZNSt6vectorImSaImEE9push_backERKm.exit -_ZNSt6vectorImSaImEE9push_backERKm.exit: ; preds = %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, %95 - %118 = phi ptr [ %115, %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i ], [ %97, %95 ] - %119 = icmp uge i64 %storemerge123, %78 - %or.cond.i = or i1 %.not.i, %119 - br i1 %or.cond.i, label %._crit_edge125, label %120 - -120: ; preds = %_ZNSt6vectorImSaImEE9push_backERKm.exit - %121 = add nuw i64 %storemerge123, 1 - %122 = lshr i64 %121, 6 - %123 = and i64 %121, 63 - %124 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %122 - %125 = load i64, ptr %124, align 8 - %126 = lshr i64 %125, %123 - %.not.i22 = icmp eq i64 %126, 0 - br i1 %.not.i22, label %135, label %127 - -127: ; preds = %120 - %.not.i.i = sub i64 0, %126 - %128 = and i64 %126, %.not.i.i - %.not17.i.i.i.i = icmp eq i64 %128, 1 +_ZNSt6vectorImSaImEE9push_backERKm.exit: ; preds = %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i, %96 + %119 = phi ptr [ %116, %_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_.exit.i ], [ %98, %95 ] + %120 = icmp uge i64 %storemerge123, %78 + %or.cond.i = or i1 %.not.i, %120 + br i1 %or.cond.i, label %._crit_edge125, label %121 + +121: ; preds = %_ZNSt6vectorImSaImEE9push_backERKm.exit + %122 = add nuw i64 %storemerge123, 1 + %123 = lshr i64 %122, 6 + %124 = and i64 %122, 63 + %125 = getelementptr inbounds nuw i64, ptr %.sroa.092.0, i64 %123 + %126 = load i64, ptr %125, align 8 + %127 = lshr i64 %126, %124 + %.not.i22 = icmp eq i64 %127, 0 + br i1 %.not.i22, label %136, label %128 + +128: ; preds = %121 + %.not.i.i = sub i64 0, %127 + %129 = and i64 %127, %.not.i.i + %.not17.i.i.i.i = icmp eq i64 %129, 1 br i1 %.not17.i.i.i.i, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i, label %select.unfold.i.i.i.i -select.unfold.i.i.i.i: ; preds = %127, %select.unfold.i.i.i.i - %.020.i.i.i.i = phi i64 [ %spec.select16.i.i.i.i, %select.unfold.i.i.i.i ], [ %128, %127 ] +select.unfold.i.i.i.i: ; preds = %128, %select.unfold.i.i.i.i + %.020.i.i.i.i = phi i64 [ %spec.select16.i.i.i.i, %select.unfold.i.i.i.i ], [ %129, %127 ] %.0919.i.i.i.i = phi i32 [ %spec.select15.i.i.i.i, %select.unfold.i.i.i.i ], [ 0, %127 ] - %.01118.i.i.i.i = phi i32 [ %131, %select.unfold.i.i.i.i ], [ 32, %127 ] - %129 = zext nneg i32 %.01118.i.i.i.i to i64 - %130 = lshr i64 %.020.i.i.i.i, %129 - %.not13.i.i.i.i = icmp eq i64 %130, 0 - %131 = sdiv i32 %.01118.i.i.i.i, 2 - %132 = select i1 %.not13.i.i.i.i, i32 0, i32 %.01118.i.i.i.i - %spec.select15.i.i.i.i = add nsw i32 %132, %.0919.i.i.i.i - %spec.select16.i.i.i.i = select i1 %.not13.i.i.i.i, i64 %.020.i.i.i.i, i64 %130 + %.01118.i.i.i.i = phi i32 [ %132, %select.unfold.i.i.i.i ], [ 32, %127 ] + %130 = zext nneg i32 %.01118.i.i.i.i to i64 + %131 = lshr i64 %.020.i.i.i.i, %130 + %.not13.i.i.i.i = icmp eq i64 %131, 0 + %132 = sdiv i32 %.01118.i.i.i.i, 2 + %133 = select i1 %.not13.i.i.i.i, i32 0, i32 %.01118.i.i.i.i + %spec.select15.i.i.i.i = add nsw i32 %133, %.0919.i.i.i.i + %spec.select16.i.i.i.i = select i1 %.not13.i.i.i.i, i64 %.020.i.i.i.i, i64 %131 %.not.i.i.i.i23 = icmp eq i64 %spec.select16.i.i.i.i, 1 br i1 %.not.i.i.i.i23, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i, label %select.unfold.i.i.i.i _ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i: ; preds = %select.unfold.i.i.i.i - %133 = sext i32 %spec.select15.i.i.i.i to i64 + %134 = sext i32 %spec.select15.i.i.i.i to i64 br label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i -_ZN5boost6detail10lowest_bitImEEiT_.exit.i: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i, %127 - %.09.lcssa.i.i.i.i = phi i64 [ 0, %127 ], [ %133, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i ] - %134 = add i64 %.09.lcssa.i.i.i.i, %121 +_ZN5boost6detail10lowest_bitImEEiT_.exit.i: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i, %128 + %.09.lcssa.i.i.i.i = phi i64 [ 0, %127 ], [ %134, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i ] + %135 = add i64 %.09.lcssa.i.i.i.i, %122 br label %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit -135: ; preds = %120 - %gep = getelementptr inbounds nuw i64, ptr %invariant.gep, i64 %122 - %136 = ptrtoint ptr %gep to i64 - %137 = sub i64 %29, %136 - %138 = ashr i64 %137, 5 - %139 = icmp sgt i64 %138, 0 - br i1 %139, label %.lr.ph.i.i.i.i72, label %._crit_edge.i.i.i.i46 - -.lr.ph.i.i.i.i72: ; preds = %135, %150 - %.052.i.i.i.i73 = phi i64 [ %152, %150 ], [ %138, %135 ] - %.sroa.032.051.i.i.i.i74 = phi ptr [ %151, %150 ], [ %gep, %135 ] - %140 = load i64, ptr %.sroa.032.051.i.i.i.i74, align 8 - %.not9.i75 = icmp eq i64 %140, 0 - br i1 %.not9.i75, label %141, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - -141: ; preds = %.lr.ph.i.i.i.i72 - %142 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 - %143 = load i64, ptr %142, align 8 - %.not10.i76 = icmp eq i64 %143, 0 - br i1 %.not10.i76, label %144, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit - -144: ; preds = %141 - %145 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 - %146 = load i64, ptr %145, align 8 - %.not11.i78 = icmp eq i64 %146, 0 - br i1 %.not11.i78, label %147, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 - -147: ; preds = %144 - %148 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 - %149 = load i64, ptr %148, align 8 - %.not12.i80 = icmp eq i64 %149, 0 - br i1 %.not12.i80, label %150, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 - -150: ; preds = %147 - %151 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 32 - %152 = add nsw i64 %.052.i.i.i.i73, -1 - %153 = icmp sgt i64 %.052.i.i.i.i73, 1 - br i1 %153, label %.lr.ph.i.i.i.i72, label %._crit_edge.loopexit.i.i.i.i82, !llvm.loop !481 - -._crit_edge.loopexit.i.i.i.i82: ; preds = %150 - %.pre.i.i.i.i83 = ptrtoint ptr %151 to i64 +136: ; preds = %121 + %gep = getelementptr inbounds nuw i64, ptr %invariant.gep, i64 %123 + %137 = ptrtoint ptr %gep to i64 + %138 = sub i64 %29, %137 + %139 = ashr i64 %138, 5 + %140 = icmp sgt i64 %139, 0 + br i1 %140, label %.lr.ph.i.i.i.i72, label %._crit_edge.i.i.i.i46 + +.lr.ph.i.i.i.i72: ; preds = %136, %151 + %.052.i.i.i.i73 = phi i64 [ %153, %150 ], [ %139, %135 ] + %.sroa.032.051.i.i.i.i74 = phi ptr [ %152, %150 ], [ %gep, %135 ] + %141 = load i64, ptr %.sroa.032.051.i.i.i.i74, align 8 + %.not9.i75 = icmp eq i64 %141, 0 + br i1 %.not9.i75, label %142, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + +142: ; preds = %.lr.ph.i.i.i.i72 + %143 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 + %144 = load i64, ptr %143, align 8 + %.not10.i76 = icmp eq i64 %144, 0 + br i1 %.not10.i76, label %145, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit + +145: ; preds = %142 + %146 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 + %147 = load i64, ptr %146, align 8 + %.not11.i78 = icmp eq i64 %147, 0 + br i1 %.not11.i78, label %148, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 + +148: ; preds = %145 + %149 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 + %150 = load i64, ptr %149, align 8 + %.not12.i80 = icmp eq i64 %150, 0 + br i1 %.not12.i80, label %151, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 + +151: ; preds = %148 + %152 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 32 + %153 = add nsw i64 %.052.i.i.i.i73, -1 + %154 = icmp sgt i64 %.052.i.i.i.i73, 1 + br i1 %154, label %.lr.ph.i.i.i.i72, label %._crit_edge.loopexit.i.i.i.i82, !llvm.loop !481 + +._crit_edge.loopexit.i.i.i.i82: ; preds = %151 + %.pre.i.i.i.i83 = ptrtoint ptr %152 to i64 %.pre57.i.i.i.i84 = sub i64 %29, %.pre.i.i.i.i83 br label %._crit_edge.i.i.i.i46 -._crit_edge.i.i.i.i46: ; preds = %._crit_edge.loopexit.i.i.i.i82, %135 - %.pre-phi58.i.i.i.i47 = phi i64 [ %.pre57.i.i.i.i84, %._crit_edge.loopexit.i.i.i.i82 ], [ %137, %135 ] - %.sroa.032.0.lcssa.i.i.i.i48 = phi ptr [ %151, %._crit_edge.loopexit.i.i.i.i82 ], [ %gep, %135 ] - %154 = ashr exact i64 %.pre-phi58.i.i.i.i47, 3 - switch i64 %154, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 [ - i64 3, label %155 - i64 2, label %159 - i64 1, label %163 +._crit_edge.i.i.i.i46: ; preds = %._crit_edge.loopexit.i.i.i.i82, %136 + %.pre-phi58.i.i.i.i47 = phi i64 [ %.pre57.i.i.i.i84, %._crit_edge.loopexit.i.i.i.i82 ], [ %138, %135 ] + %.sroa.032.0.lcssa.i.i.i.i48 = phi ptr [ %152, %._crit_edge.loopexit.i.i.i.i82 ], [ %gep, %135 ] + %155 = ashr exact i64 %.pre-phi58.i.i.i.i47, 3 + switch i64 %155, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 [ + i64 3, label %156 + i64 2, label %160 + i64 1, label %164 ] -155: ; preds = %._crit_edge.i.i.i.i46 - %156 = load i64, ptr %.sroa.032.0.lcssa.i.i.i.i48, align 8 - %.not13.i71 = icmp eq i64 %156, 0 - br i1 %.not13.i71, label %157, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - -157: ; preds = %155 - %158 = getelementptr inbounds nuw i8, ptr %.sroa.032.0.lcssa.i.i.i.i48, i64 8 - br label %159 - -159: ; preds = %157, %._crit_edge.i.i.i.i46 - %.sroa.032.1.i.i.i.i69 = phi ptr [ %158, %157 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] - %160 = load i64, ptr %.sroa.032.1.i.i.i.i69, align 8 - %.not14.i70 = icmp eq i64 %160, 0 - br i1 %.not14.i70, label %161, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - -161: ; preds = %159 - %162 = getelementptr inbounds nuw i8, ptr %.sroa.032.1.i.i.i.i69, i64 8 - br label %163 - -163: ; preds = %161, %._crit_edge.i.i.i.i46 - %.sroa.032.2.i.i.i.i49 = phi ptr [ %162, %161 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] - %164 = load i64, ptr %.sroa.032.2.i.i.i.i49, align 8 - %.not15.i50 = icmp eq i64 %164, 0 +156: ; preds = %._crit_edge.i.i.i.i46 + %157 = load i64, ptr %.sroa.032.0.lcssa.i.i.i.i48, align 8 + %.not13.i71 = icmp eq i64 %157, 0 + br i1 %.not13.i71, label %158, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + +158: ; preds = %156 + %159 = getelementptr inbounds nuw i8, ptr %.sroa.032.0.lcssa.i.i.i.i48, i64 8 + br label %160 + +160: ; preds = %158, %._crit_edge.i.i.i.i46 + %.sroa.032.1.i.i.i.i69 = phi ptr [ %159, %157 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] + %161 = load i64, ptr %.sroa.032.1.i.i.i.i69, align 8 + %.not14.i70 = icmp eq i64 %161, 0 + br i1 %.not14.i70, label %162, label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + +162: ; preds = %160 + %163 = getelementptr inbounds nuw i8, ptr %.sroa.032.1.i.i.i.i69, i64 8 + br label %164 + +164: ; preds = %162, %._crit_edge.i.i.i.i46 + %.sroa.032.2.i.i.i.i49 = phi ptr [ %163, %161 ], [ %.sroa.032.0.lcssa.i.i.i.i48, %._crit_edge.i.i.i.i46 ] + %165 = load i64, ptr %.sroa.032.2.i.i.i.i49, align 8 + %.not15.i50 = icmp eq i64 %165, 0 %spec.select.i.i.i.i51 = select i1 %.not15.i50, ptr %.sroa.13.0, ptr %.sroa.032.2.i.i.i.i49 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit: ; preds = %141 - %165 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit: ; preds = %142 + %166 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 8 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151: ; preds = %144 - %166 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151: ; preds = %145 + %167 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 16 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153: ; preds = %147 - %167 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153: ; preds = %148 + %168 = getelementptr inbounds nuw i8, ptr %.sroa.032.051.i.i.i.i74, i64 24 br label %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 -_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52: ; preds = %.lr.ph.i.i.i.i72, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153, %163, %159, %155, %._crit_edge.i.i.i.i46 - %.sroa.08.0.in.sroa.speculated.i.i.i.i53 = phi ptr [ %.sroa.032.0.lcssa.i.i.i.i48, %155 ], [ %.sroa.032.1.i.i.i.i69, %159 ], [ %.sroa.13.0, %._crit_edge.i.i.i.i46 ], [ %spec.select.i.i.i.i51, %163 ], [ %165, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit ], [ %166, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 ], [ %167, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 ], [ %.sroa.032.051.i.i.i.i74, %.lr.ph.i.i.i.i72 ] - %168 = ptrtoint ptr %.sroa.08.0.in.sroa.speculated.i.i.i.i53 to i64 - %169 = sub i64 %168, %30 - %.not.i54 = icmp ult i64 %169, %31 - br i1 %.not.i54, label %170, label %._crit_edge125 - -170: ; preds = %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 - %171 = shl i64 %169, 3 - %172 = getelementptr inbounds nuw i8, ptr %.sroa.092.0, i64 %169 - %173 = load i64, ptr %172, align 8 - %.not.i.i56 = sub i64 0, %173 - %174 = and i64 %173, %.not.i.i56 - %.not17.i.i.i.i57 = icmp eq i64 %174, 1 +_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52: ; preds = %.lr.ph.i.i.i.i72, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153, %164, %160, %156, %._crit_edge.i.i.i.i46 + %.sroa.08.0.in.sroa.speculated.i.i.i.i53 = phi ptr [ %.sroa.032.0.lcssa.i.i.i.i48, %155 ], [ %.sroa.032.1.i.i.i.i69, %159 ], [ %.sroa.13.0, %._crit_edge.i.i.i.i46 ], [ %spec.select.i.i.i.i51, %163 ], [ %166, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit ], [ %167, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit151 ], [ %168, %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52.loopexit.split.loop.exit153 ], [ %.sroa.032.051.i.i.i.i74, %.lr.ph.i.i.i.i72 ] + %169 = ptrtoint ptr %.sroa.08.0.in.sroa.speculated.i.i.i.i53 to i64 + %170 = sub i64 %169, %30 + %.not.i54 = icmp ult i64 %170, %31 + br i1 %.not.i54, label %171, label %._crit_edge125 + +171: ; preds = %_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEPFbmEET_SA_SA_T0_.exit.i52 + %172 = shl i64 %170, 3 + %173 = getelementptr inbounds nuw i8, ptr %.sroa.092.0, i64 %170 + %174 = load i64, ptr %173, align 8 + %.not.i.i56 = sub i64 0, %174 + %175 = and i64 %174, %.not.i.i56 + %.not17.i.i.i.i57 = icmp eq i64 %175, 1 br i1 %.not17.i.i.i.i57, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67, label %select.unfold.i.i.i.i58 -select.unfold.i.i.i.i58: ; preds = %170, %select.unfold.i.i.i.i58 - %.020.i.i.i.i59 = phi i64 [ %spec.select16.i.i.i.i64, %select.unfold.i.i.i.i58 ], [ %174, %170 ] +select.unfold.i.i.i.i58: ; preds = %171, %select.unfold.i.i.i.i58 + %.020.i.i.i.i59 = phi i64 [ %spec.select16.i.i.i.i64, %select.unfold.i.i.i.i58 ], [ %175, %170 ] %.0919.i.i.i.i60 = phi i32 [ %spec.select15.i.i.i.i63, %select.unfold.i.i.i.i58 ], [ 0, %170 ] - %.01118.i.i.i.i61 = phi i32 [ %177, %select.unfold.i.i.i.i58 ], [ 32, %170 ] - %175 = zext nneg i32 %.01118.i.i.i.i61 to i64 - %176 = lshr i64 %.020.i.i.i.i59, %175 - %.not13.i.i.i.i62 = icmp eq i64 %176, 0 - %177 = sdiv i32 %.01118.i.i.i.i61, 2 - %178 = select i1 %.not13.i.i.i.i62, i32 0, i32 %.01118.i.i.i.i61 - %spec.select15.i.i.i.i63 = add nsw i32 %178, %.0919.i.i.i.i60 - %spec.select16.i.i.i.i64 = select i1 %.not13.i.i.i.i62, i64 %.020.i.i.i.i59, i64 %176 + %.01118.i.i.i.i61 = phi i32 [ %178, %select.unfold.i.i.i.i58 ], [ 32, %170 ] + %176 = zext nneg i32 %.01118.i.i.i.i61 to i64 + %177 = lshr i64 %.020.i.i.i.i59, %176 + %.not13.i.i.i.i62 = icmp eq i64 %177, 0 + %178 = sdiv i32 %.01118.i.i.i.i61, 2 + %179 = select i1 %.not13.i.i.i.i62, i32 0, i32 %.01118.i.i.i.i61 + %spec.select15.i.i.i.i63 = add nsw i32 %179, %.0919.i.i.i.i60 + %spec.select16.i.i.i.i64 = select i1 %.not13.i.i.i.i62, i64 %.020.i.i.i.i59, i64 %177 %.not.i.i.i.i65 = icmp eq i64 %spec.select16.i.i.i.i64, 1 br i1 %.not.i.i.i.i65, label %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66, label %select.unfold.i.i.i.i58 _ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66: ; preds = %select.unfold.i.i.i.i58 - %179 = sext i32 %spec.select15.i.i.i.i63 to i64 + %180 = sext i32 %spec.select15.i.i.i.i63 to i64 br label %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67 -_ZN5boost6detail10lowest_bitImEEiT_.exit.i67: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66, %170 - %.09.lcssa.i.i.i.i68 = phi i64 [ 0, %170 ], [ %179, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66 ] - %180 = add i64 %.09.lcssa.i.i.i.i68, %171 +_ZN5boost6detail10lowest_bitImEEiT_.exit.i67: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66, %171 + %.09.lcssa.i.i.i.i68 = phi i64 [ 0, %170 ], [ %180, %_ZN5boost6detail10lowest_bitImEEiT_.exit.loopexit.i66 ] + %181 = add i64 %.09.lcssa.i.i.i.i68, %172 br label %_ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit _ZNK5boost14dynamic_bitsetImSaImEE9find_nextEm.exit: ; preds = %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i - %.0.i = phi i64 [ %134, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i ], [ %180, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67 ] + %.0.i = phi i64 [ %135, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i ], [ %181, %_ZN5boost6detail10lowest_bitImEEiT_.exit.i67 ] %.not = icmp eq i64 %.0.i, -1 - br i1 %.not, label %._crit_edge125.thread, label %92 + br i1 %.not, label %._crit_edge125.thread, label %93 -181: ; preds = %91 +182: ; preds = %92 tail call void @_ZdlPv(ptr noundef nonnull %.sroa.092.0) #24 br label %.body -.body: ; preds = %181, %91 +.body: ; preds = %182, %92 resume { ptr, i32 } %lpad.phi } diff --git a/bench/hyperscan/optimized/ng_mcclellan.ll b/bench/hyperscan/optimized/ng_mcclellan.ll index f7bd07eea8a..f1e57b0bad2 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 @@ -2416,9 +2416,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 @@ -2441,8 +2441,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 @@ -2889,8 +2889,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 76fea41bac7..b809e37a8bd 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/miniaudio/optimized/unity.ll b/bench/miniaudio/optimized/unity.ll index 72c27fc4eb4..23ed934b702 100644 --- a/bench/miniaudio/optimized/unity.ll +++ b/bench/miniaudio/optimized/unity.ll @@ -3074,24 +3074,24 @@ define range(i32 -4, 1) i32 @ma_slot_allocator_alloc(ptr noundef captures(addres %6 = getelementptr inbounds nuw i8, ptr %0, i64 16 br label %.preheader59 -.preheader59: ; preds = %.preheader60, %49 - %7 = phi i1 [ true, %.preheader60 ], [ false, %49 ] +.preheader59: ; preds = %.preheader60, %53 + %7 = phi i1 [ true, %.preheader60 ], [ false, %53 ] %8 = load i32, ptr %5, align 4, !tbaa !60 %.not69 = icmp eq i32 %8, 0 - br i1 %.not69, label %.thread54, label %.preheader58 + br i1 %.not69, label %.thread54, label %13 -.preheader58: ; preds = %.preheader59, %40 +13: ; preds = %.preheader59, %40 %indvars.iv = phi i64 [ %indvars.iv.next, %40 ], [ 0, %.preheader59 ] br label %9 -9: ; preds = %.preheader58, %ma_ffs_32.exit +9:; preds = %13, %ma_ffs_32.exit %10 = load ptr, ptr %0, align 8, !tbaa !58 %11 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %10, i64 %indvars.iv %12 = load atomic i32, ptr %11 seq_cst, align 4 %13 = icmp eq i32 %12, -1 br i1 %13, label %40, label %.preheader -.preheader: ; preds = %9, %16 +.preheader:; preds = %9, %16 %.08.i = phi i32 [ %17, %16 ], [ 0, %9 ] %14 = shl nuw i32 1, %.08.i %15 = and i32 %14, %12 @@ -3108,60 +3108,60 @@ define range(i32 -4, 1) i32 @ma_slot_allocator_alloc(ptr noundef captures(addres ma_ffs_32.exit: ; preds = %.preheader, %.ma_ffs_32.exit_crit_edge %.0.lcssa.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge ], [ %.08.i, %.preheader ] - %18 = shl nuw i32 1, %.0.lcssa.i - %19 = or i32 %18, %12 - %20 = load ptr, ptr %0, align 8, !tbaa !58 - %21 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %20, i64 %indvars.iv - %22 = cmpxchg volatile ptr %21, i32 %12, i32 %19 seq_cst seq_cst, align 4 - %23 = extractvalue { i32, i1 } %22, 1 - br i1 %23, label %24, label %9 - -24: ; preds = %ma_ffs_32.exit - %25 = trunc nuw nsw i64 %indvars.iv to i32 - %26 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 - %27 = shl i32 %25, 5 - %28 = add i32 %.0.lcssa.i, %27 - %29 = load i32, ptr %5, align 4, !tbaa !60 - %.not = icmp ult i32 %28, %29 - br i1 %.not, label %30, label %.thread54 - -30: ; preds = %24 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %32 = load ptr, ptr %31, align 8, !tbaa !59 - %33 = zext i32 %28 to i64 - %34 = getelementptr inbounds nuw i32, ptr %32, i64 %33 - %35 = load i32, ptr %34, align 4, !tbaa !3 - %36 = add i32 %35, 1 - store i32 %36, ptr %34, align 4, !tbaa !3 - %37 = zext i32 %36 to i64 - %38 = shl nuw i64 %37, 32 - %39 = or disjoint i64 %38, %33 - store i64 %39, ptr %1, align 8, !tbaa !63 + %22 = shl nuw i32 1, %.0.lcssa.i + %23 = or i32 %22, %12 + %24 = load ptr, ptr %0, align 8, !tbaa !58 + %25 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %24, i64 %indvars.iv + %26 = cmpxchg volatile ptr %25, i32 %12, i32 %23 seq_cst seq_cst, align 4 + %27 = extractvalue { i32, i1 } %26, 1 + br i1 %27, label %28, label %9 + +28: ; preds = %ma_ffs_32.exit + %29 = trunc nuw nsw i64 %indvars.iv to i32 + %30 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 + %31 = shl i32 %29, 5 + %32 = add i32 %.0.lcssa.i, %31 + %33 = load i32, ptr %5, align 4, !tbaa !60 + %.not = icmp ult i32 %32, %33 + br i1 %.not, label %34, label %.thread54 + +34: ; preds = %28 + %35 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %36 = load ptr, ptr %35, align 8, !tbaa !59 + %37 = zext i32 %32 to i64 + %38 = getelementptr inbounds nuw i32, ptr %36, i64 %37 + %39 = load i32, ptr %38, align 4, !tbaa !3 + %40 = add i32 %39, 1 + store i32 %40, ptr %38, align 4, !tbaa !3 + %41 = zext i32 %40 to i64 + %42 = shl nuw i64 %41, 32 + %43 = or disjoint i64 %42, %37 + store i64 %43, ptr %1, align 8, !tbaa !63 br label %.thread54 -40: ; preds = %9 +44: ; preds = %9 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %41 = load i32, ptr %5, align 4, !tbaa !60 - %42 = lshr i32 %41, 5 - %43 = and i32 %41, 31 - %.not.i = icmp ne i32 %43, 0 - %44 = zext i1 %.not.i to i32 - %spec.select.i45 = add nuw nsw i32 %42, %44 - %45 = zext nneg i32 %spec.select.i45 to i64 - %46 = icmp samesign ult i64 %indvars.iv.next, %45 - br i1 %46, label %.preheader58, label %._crit_edge, !llvm.loop !65 - -._crit_edge: ; preds = %40 + %45 = load i32, ptr %5, align 4, !tbaa !60 + %46 = lshr i32 %45, 5 + %47 = and i32 %45, 31 + %.not.i = icmp ne i32 %47, 0 + %48 = zext i1 %.not.i to i32 + %spec.select.i45 = add nuw nsw i32 %46, %48 + %49 = zext nneg i32 %spec.select.i45 to i64 + %50 = icmp samesign ult i64 %indvars.iv.next, %49 + br i1 %50, label %.preheader58, label %._crit_edge, !llvm.loop !65 + +._crit_edge: ; preds = %44 %47 = load i32, ptr %6, align 8, !tbaa !66 - %48 = icmp ult i32 %47, %41 - br i1 %48, label %49, label %.thread54 + %52 = icmp ult i32 %47, %41 + br i1 %52, label %49, label %.thread54 49: ; preds = %._crit_edge tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 br i1 %7, label %.preheader59, label %.thread54, !llvm.loop !67 -.thread54: ; preds = %.preheader59, %._crit_edge, %49, %30, %24, %2 - %.0 = phi i32 [ -2, %2 ], [ -4, %24 ], [ 0, %30 ], [ -4, %49 ], [ -4, %._crit_edge ], [ -4, %.preheader59 ] +.thread54: ; preds = %.preheader59, %._crit_edge, %53, %34, %28, %2 + %.0 = phi i32 [ -2, %2 ], [ -4, %28 ], [ 0, %30 ], [ -4, %53 ], [ -4, %._crit_edge ], [ -4, %.preheader59 ] ret i32 %.0 } @@ -3420,20 +3420,20 @@ ma_semaphore_init.exit: ; preds = %56, %59, %52, %33 %63 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %104 ] %64 = load i32, ptr %48, align 4, !tbaa !60 %.not69.i = icmp eq i32 %64, 0 - br i1 %.not69.i, label %ma_slot_allocator_alloc.exit, label %.preheader58.i + br i1 %.not69.i, label %ma_slot_allocator_alloc.exit, label %15 -.preheader58.i: ; preds = %.preheader59.i, %95 +69: ; preds = %.preheader59.i, %95 %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %95 ], [ 0, %.preheader59.i ] br label %65 -65: ; preds = %ma_ffs_32.exit.i, %.preheader58.i - %66 = load ptr, ptr %31, align 8, !tbaa !58 +65:; preds = %ma_ffs_32.exit.i, %15 + %70 = load ptr, ptr %31, align 8, !tbaa !58 %67 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %66, i64 %indvars.iv.i %68 = load atomic i32, ptr %67 seq_cst, align 4 - %69 = icmp eq i32 %68, -1 + %73 = icmp eq i32 %76, -1 br i1 %69, label %95, label %.preheader.i -.preheader.i: ; preds = %65, %72 +.preheader.i:; preds = %65, %72 %.08.i.i = phi i32 [ %73, %72 ], [ 0, %65 ] %70 = shl nuw i32 1, %.08.i.i %71 = and i32 %70, %68 @@ -3445,52 +3445,52 @@ ma_semaphore_init.exit: ; preds = %56, %59, %52, %33 %exitcond.not.i.i = icmp eq i32 %73, 32 br i1 %exitcond.not.i.i, label %.ma_ffs_32.exit_crit_edge.i, label %.preheader.i, !llvm.loop !62 -.ma_ffs_32.exit_crit_edge.i: ; preds = %72 +.ma_ffs_32.exit_crit_edge.i: ; preds = %76 br label %ma_ffs_32.exit.i, !llvm.loop !62 ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ffs_32.exit_crit_edge.i %.0.lcssa.i.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge.i ], [ %.08.i.i, %.preheader.i ] - %74 = shl nuw i32 1, %.0.lcssa.i.i - %75 = or i32 %74, %68 - %76 = load ptr, ptr %31, align 8, !tbaa !58 - %77 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %76, i64 %indvars.iv.i - %78 = cmpxchg volatile ptr %77, i32 %68, i32 %75 seq_cst seq_cst, align 4 - %79 = extractvalue { i32, i1 } %78, 1 - br i1 %79, label %80, label %65 - -80: ; preds = %ma_ffs_32.exit.i - %81 = trunc nuw nsw i64 %indvars.iv.i to i32 - %82 = atomicrmw add ptr %62, i32 1 seq_cst, align 8 - %83 = shl i32 %81, 5 - %84 = add i32 %.0.lcssa.i.i, %83 - %85 = load i32, ptr %48, align 4, !tbaa !60 - %.not.i = icmp ult i32 %84, %85 - br i1 %.not.i, label %86, label %ma_slot_allocator_alloc.exit - -86: ; preds = %80 - %87 = load ptr, ptr %47, align 8, !tbaa !59 - %88 = zext i32 %84 to i64 - %89 = getelementptr inbounds nuw i32, ptr %87, i64 %88 - %90 = load i32, ptr %89, align 4, !tbaa !3 - %91 = add i32 %90, 1 - store i32 %91, ptr %89, align 4, !tbaa !3 - %92 = zext i32 %91 to i64 - %93 = shl nuw i64 %92, 32 - %94 = or disjoint i64 %93, %88 - store i64 %94, ptr %61, align 8, !tbaa !63 + %78 = shl nuw i32 1, %.0.lcssa.i.i + %79 = or i32 %78, %72 + %80 = load ptr, ptr %31, align 8, !tbaa !58 + %81 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %80, i64 %indvars.iv.i + %82 = cmpxchg volatile ptr %81, i32 %72, i32 %79 seq_cst seq_cst, align 4 + %83 = extractvalue { i32, i1 } %82, 1 + br i1 %83, label %84, label %69 + +84: ; preds = %ma_ffs_32.exit.i + %85 = trunc nuw nsw i64 %indvars.iv.i to i32 + %86 = atomicrmw add ptr %62, i32 1 seq_cst, align 8 + %87 = shl i32 %85, 5 + %88 = add i32 %.0.lcssa.i.i, %87 + %89 = load i32, ptr %48, align 4, !tbaa !60 + %.not.i = icmp ult i32 %88, %89 + br i1 %.not.i, label %90, label %ma_slot_allocator_alloc.exit + +90: ; preds = %84 + %91 = load ptr, ptr %47, align 8, !tbaa !59 + %92 = zext i32 %88 to i64 + %93 = getelementptr inbounds nuw i32, ptr %91, i64 %92 + %94 = load i32, ptr %93, align 4, !tbaa !3 + %95 = add i32 %94, 1 + store i32 %95, ptr %93, align 4, !tbaa !3 + %96 = zext i32 %95 to i64 + %97 = shl nuw i64 %96, 32 + %98 = or disjoint i64 %97, %92 + store i64 %98, ptr %61, align 8, !tbaa !63 br label %ma_slot_allocator_alloc.exit -95: ; preds = %65 +99: ; preds = %69 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %96 = load i32, ptr %48, align 4, !tbaa !60 - %97 = lshr i32 %96, 5 - %98 = and i32 %96, 31 - %.not.i.i38 = icmp ne i32 %98, 0 - %99 = zext i1 %.not.i.i38 to i32 - %spec.select.i45.i = add nuw nsw i32 %97, %99 - %100 = zext nneg i32 %spec.select.i45.i to i64 - %101 = icmp samesign ult i64 %indvars.iv.next.i, %100 - br i1 %101, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 + %100 = load i32, ptr %48, align 4, !tbaa !60 + %101 = lshr i32 %100, 5 + %102 = and i32 %100, 31 + %.not.i.i38 = icmp ne i32 %102, 0 + %103 = zext i1 %.not.i.i38 to i32 + %spec.select.i45.i = add nuw nsw i32 %101, %103 + %104 = zext nneg i32 %spec.select.i45.i to i64 + %105 = icmp samesign ult i64 %indvars.iv.next.i, %104 + br i1 %105, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 ._crit_edge.i: ; preds = %95 %102 = load i32, ptr %62, align 8, !tbaa !66 @@ -3501,14 +3501,14 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 br i1 %63, label %.preheader59.i, label %ma_slot_allocator_alloc.exit, !llvm.loop !67 -ma_slot_allocator_alloc.exit: ; preds = %.preheader59.i, %._crit_edge.i, %104, %80, %86 - %105 = load ptr, ptr %30, align 8, !tbaa !79 - %106 = load i64, ptr %61, align 8, !tbaa !80 - %107 = and i64 %106, 65535 - %108 = getelementptr inbounds nuw %struct.ma_job, ptr %105, i64 %107, i32 1 - store i64 -1, ptr %108, align 8, !tbaa !69 - %109 = getelementptr inbounds nuw i8, ptr %2, i64 16 - store i64 %106, ptr %109, align 8, !tbaa !81 +ma_slot_allocator_alloc.exit: ; preds = %.preheader59.i, %._crit_edge.i, %104, %84, %90 + %109 = load ptr, ptr %30, align 8, !tbaa !79 + %110 = load i64, ptr %61, align 8, !tbaa !80 + %111 = and i64 %110, 65535 + %112 = getelementptr inbounds nuw %struct.ma_job, ptr %109, i64 %111, i32 1 + store i64 -1, ptr %112, align 8, !tbaa !69 + %113 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %110, ptr %113, align 8, !tbaa !81 br label %ma_job_queue_get_heap_layout.exit.thread ma_job_queue_get_heap_layout.exit.thread: ; preds = %ma_zero_memory_default.exit, %6, %ma_zero_memory_default.exit32, %3, %ma_slot_allocator_alloc.exit @@ -3697,49 +3697,49 @@ define range(i32 -4, 1) i32 @ma_job_queue_post(ptr noundef %0, ptr noundef reado %8 = getelementptr inbounds nuw i8, ptr %0, i64 136 br label %.preheader59.i -.preheader59.i: ; preds = %41, %5 - %9 = phi i1 [ true, %5 ], [ false, %41 ] +.preheader59.i: ; preds = %45, %5 + %9 = phi i1 [ true, %5 ], [ false, %45 ] %10 = load i32, ptr %7, align 4, !tbaa !60 %.not69.i = icmp eq i32 %10, 0 - br i1 %.not69.i, label %ma_slot_allocator_alloc.exit.thread, label %.preheader58.i + br i1 %.not69.i, label %ma_slot_allocator_alloc.exit.thread, label %73 -.preheader58.i: ; preds = %.preheader59.i, %32 +15: ; preds = %.preheader59.i, %32 %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %32 ], [ 0, %.preheader59.i ] br label %11 -11: ; preds = %ma_ffs_32.exit.i, %.preheader58.i +11:; preds = %ma_ffs_32.exit.i, %15 %12 = load ptr, ptr %6, align 8, !tbaa !58 %13 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %12, i64 %indvars.iv.i %14 = load atomic i32, ptr %13 seq_cst, align 4 %15 = icmp eq i32 %14, -1 br i1 %15, label %32, label %.preheader.i -.preheader.i: ; preds = %11, %18 - %.08.i.i = phi i32 [ %19, %18 ], [ 0, %11 ] +.preheader.i:; preds = %11, %18 + %.08.i.i = phi i32 [ %19, %22 ], [ 0, %11 ] %16 = shl nuw i32 1, %.08.i.i %17 = and i32 %16, %14 %.not.i46.not.i = icmp eq i32 %17, 0 - br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %18 + br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %22 18: ; preds = %.preheader.i %19 = add nuw nsw i32 %.08.i.i, 1 %exitcond.not.i.i = icmp eq i32 %19, 32 br i1 %exitcond.not.i.i, label %.ma_ffs_32.exit_crit_edge.i, label %.preheader.i, !llvm.loop !62 -.ma_ffs_32.exit_crit_edge.i: ; preds = %18 +.ma_ffs_32.exit_crit_edge.i: ; preds = %22 br label %ma_ffs_32.exit.i, !llvm.loop !62 ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ffs_32.exit_crit_edge.i %.0.lcssa.i.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge.i ], [ %.08.i.i, %.preheader.i ] - %20 = shl nuw i32 1, %.0.lcssa.i.i - %21 = or i32 %20, %14 - %22 = load ptr, ptr %6, align 8, !tbaa !58 - %23 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %22, i64 %indvars.iv.i - %24 = cmpxchg volatile ptr %23, i32 %14, i32 %21 seq_cst seq_cst, align 4 - %25 = extractvalue { i32, i1 } %24, 1 - br i1 %25, label %26, label %11 - -26: ; preds = %ma_ffs_32.exit.i + %24 = shl nuw i32 1, %.0.lcssa.i.i + %25 = or i32 %24, %14 + %26 = load ptr, ptr %6, align 8, !tbaa !58 + %27 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %26, i64 %indvars.iv.i + %28 = cmpxchg volatile ptr %27, i32 %14, i32 %25 seq_cst seq_cst, align 4 + %29 = extractvalue { i32, i1 } %28, 1 + br i1 %29, label %30, label %11 + +36: ; preds = %ma_ffs_32.exit.i %27 = trunc nuw nsw i64 %indvars.iv.i to i32 %28 = atomicrmw add ptr %8, i32 1 seq_cst, align 8 %29 = shl i32 %27, 5 @@ -3750,17 +3750,17 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ 32: ; preds = %11 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %33 = load i32, ptr %7, align 4, !tbaa !60 - %34 = lshr i32 %33, 5 - %35 = and i32 %33, 31 - %.not.i.i = icmp ne i32 %35, 0 - %36 = zext i1 %.not.i.i to i32 - %spec.select.i45.i = add nuw nsw i32 %34, %36 - %37 = zext nneg i32 %spec.select.i45.i to i64 - %38 = icmp samesign ult i64 %indvars.iv.next.i, %37 - br i1 %38, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 - -._crit_edge.i: ; preds = %32 + %37 = load i32, ptr %7, align 4, !tbaa !60 + %38 = lshr i32 %37, 5 + %39 = and i32 %37, 31 + %.not.i.i = icmp ne i32 %39, 0 + %40 = zext i1 %.not.i.i to i32 + %spec.select.i45.i = add nuw nsw i32 %38, %40 + %41 = zext nneg i32 %spec.select.i45.i to i64 + %42 = icmp samesign ult i64 %indvars.iv.next.i, %41 + br i1 %42, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65 + +._crit_edge.i: ; preds = %36 %39 = load i32, ptr %8, align 8, !tbaa !66 %40 = icmp ult i32 %39, %33 br i1 %40, label %41, label %ma_slot_allocator_alloc.exit.thread @@ -3769,105 +3769,105 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 br i1 %9, label %.preheader59.i, label %ma_slot_allocator_alloc.exit.thread, !llvm.loop !67 -42: ; preds = %26 - %43 = getelementptr inbounds nuw i8, ptr %0, i64 128 - %44 = load ptr, ptr %43, align 8, !tbaa !59 - %45 = zext i32 %30 to i64 - %46 = getelementptr inbounds nuw i32, ptr %44, i64 %45 - %47 = load i32, ptr %46, align 4, !tbaa !3 - %48 = add i32 %47, 1 - store i32 %48, ptr %46, align 4, !tbaa !3 - %49 = zext i32 %48 to i64 - %50 = shl nuw i64 %49, 32 - %51 = or disjoint i64 %50, %45 - %52 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %53 = load ptr, ptr %52, align 8, !tbaa !79 - %54 = and i32 %30, 65535 - %55 = zext nneg i32 %54 to i64 - %56 = getelementptr inbounds nuw %struct.ma_job, ptr %53, i64 %55 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %56, ptr noundef nonnull align 8 dereferenceable(104) %1, i64 104, i1 false), !tbaa.struct !83 - %57 = load ptr, ptr %52, align 8, !tbaa !79 - %58 = getelementptr inbounds nuw %struct.ma_job, ptr %57, i64 %55 - store i64 %51, ptr %58, align 8, !tbaa !7 - %59 = load i16, ptr %1, align 8, !tbaa !7 - %60 = load ptr, ptr %52, align 8, !tbaa !79 - %61 = getelementptr inbounds nuw %struct.ma_job, ptr %60, i64 %55 - store i16 %59, ptr %61, align 8, !tbaa !7 - %62 = load ptr, ptr %52, align 8, !tbaa !79 - %63 = getelementptr inbounds nuw %struct.ma_job, ptr %62, i64 %55, i32 1 - store i64 -1, ptr %63, align 8, !tbaa !69 - %64 = getelementptr inbounds nuw i8, ptr %0, i64 168 - %65 = atomicrmw volatile xchg ptr %64, i32 1 acquire, align 4 - %66 = icmp eq i32 %65, 0 - br i1 %66, label %ma_spinlock_lock.exit, label %.preheader.i37 +46: ; preds = %30 + %47 = getelementptr inbounds nuw i8, ptr %0, i64 128 + %48 = load ptr, ptr %47, align 8, !tbaa !59 + %49 = zext i32 %30 to i64 + %50 = getelementptr inbounds nuw i32, ptr %48, i64 %49 + %51 = load i32, ptr %50, align 4, !tbaa !3 + %52 = add i32 %51, 1 + store i32 %52, ptr %50, align 4, !tbaa !3 + %53 = zext i32 %52 to i64 + %54 = shl nuw i64 %53, 32 + %55 = or disjoint i64 %54, %49 + %56 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %57 = load ptr, ptr %56, align 8, !tbaa !79 + %58 = and i32 %34, 65535 + %59 = zext nneg i32 %58 to i64 + %60 = getelementptr inbounds nuw %struct.ma_job, ptr %57, i64 %59 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %60, ptr noundef nonnull align 8 dereferenceable(104) %1, i64 104, i1 false), !tbaa.struct !83 + %61 = load ptr, ptr %56, align 8, !tbaa !79 + %62 = getelementptr inbounds nuw %struct.ma_job, ptr %61, i64 %59 + store i64 %55, ptr %62, align 8, !tbaa !7 + %63 = load i16, ptr %1, align 8, !tbaa !7 + %64 = load ptr, ptr %56, align 8, !tbaa !79 + %65 = getelementptr inbounds nuw %struct.ma_job, ptr %64, i64 %59 + store i16 %63, ptr %65, align 8, !tbaa !7 + %66 = load ptr, ptr %56, align 8, !tbaa !79 + %67 = getelementptr inbounds nuw %struct.ma_job, ptr %66, i64 %59, i32 1 + store i64 -1, ptr %67, align 8, !tbaa !69 + %68 = getelementptr inbounds nuw i8, ptr %0, i64 168 + %69 = atomicrmw volatile xchg ptr %68, i32 1 acquire, align 4 + %70 = icmp eq i32 %69, 0 + br i1 %70, label %ma_spinlock_lock.exit, label %.preheader.i37 .loopexit.i: ; preds = %.lr.ph.i, %.preheader.i37 - %67 = atomicrmw volatile xchg ptr %64, i32 1 acquire, align 4 - %68 = icmp eq i32 %67, 0 - br i1 %68, label %ma_spinlock_lock.exit, label %.preheader.i37 + %71 = atomicrmw volatile xchg ptr %68, i32 1 acquire, align 4 + %72 = icmp eq i32 %71, 0 + br i1 %72, label %ma_spinlock_lock.exit, label %.preheader.i37 -.preheader.i37: ; preds = %42, %.loopexit.i - %69 = load atomic volatile i32, ptr %64 monotonic, align 4 - %70 = icmp eq i32 %69, 1 - br i1 %70, label %.lr.ph.i, label %.loopexit.i +.preheader.i37: ; preds = %46, %.loopexit.i + %73 = load atomic volatile i32, ptr %68 monotonic, align 4 + %74 = icmp eq i32 %73, 1 + br i1 %74, label %.lr.ph.i, label %.loopexit.i .lr.ph.i: ; preds = %.preheader.i37, %.lr.ph.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39 - %71 = load atomic volatile i32, ptr %64 monotonic, align 4 - %72 = icmp eq i32 %71, 1 - br i1 %72, label %.lr.ph.i, label %.loopexit.i, !llvm.loop !40 + %75 = load atomic volatile i32, ptr %68 monotonic, align 4 + %76 = icmp eq i32 %75, 1 + br i1 %76, label %.lr.ph.i, label %.loopexit.i, !llvm.loop !40 -ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 - %73 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %invariant.op = or disjoint i64 %45, 4294967296 - br label %74 +ma_spinlock_lock.exit: ; preds = %.loopexit.i, %46 + %77 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %invariant.op = or disjoint i64 %49, 4294967296 + br label %78 -74: ; preds = %.backedge, %ma_spinlock_lock.exit - %75 = load atomic i64, ptr %73 seq_cst, align 8 - %76 = load ptr, ptr %52, align 8, !tbaa !79 - %77 = and i64 %75, 65535 - %78 = getelementptr inbounds nuw %struct.ma_job, ptr %76, i64 %77, i32 1 - %79 = load atomic i64, ptr %78 seq_cst, align 8 - %80 = load atomic i64, ptr %73 seq_cst, align 8 - %81 = xor i64 %80, %75 - %82 = and i64 %81, -4294901761 - %83 = icmp eq i64 %82, 0 - br i1 %83, label %84, label %.backedge - -84: ; preds = %74 - %85 = and i64 %79, 65535 - %86 = icmp eq i64 %85, 65535 - br i1 %86, label %87, label %93 +78: ; preds = %.backedge, %ma_spinlock_lock.exit + %79 = load atomic i64, ptr %77 seq_cst, align 8 + %80 = load ptr, ptr %56, align 8, !tbaa !79 + %81 = and i64 %79, 65535 + %82 = getelementptr inbounds nuw %struct.ma_job, ptr %80, i64 %81, i32 1 + %83 = load atomic i64, ptr %82 seq_cst, align 8 + %84 = load atomic i64, ptr %77 seq_cst, align 8 + %85 = xor i64 %84, %79 + %86 = and i64 %85, -4294901761 + %87 = icmp eq i64 %86, 0 + br i1 %87, label %88, label %.backedge + +88: ; preds = %78 + %89 = and i64 %83, 65535 + %90 = icmp eq i64 %89, 65535 + br i1 %90, label %91, label %97 -87: ; preds = %84 - %88 = load ptr, ptr %52, align 8, !tbaa !79 - %89 = getelementptr inbounds nuw %struct.ma_job, ptr %88, i64 %77, i32 1 - %90 = and i64 %79, -4294967296 - %.reass = add i64 %90, %invariant.op - %91 = cmpxchg volatile ptr %89, i64 %79, i64 %.reass seq_cst seq_cst, align 8 - %92 = extractvalue { i64, i1 } %91, 1 - br i1 %92, label %98, label %.backedge - -93: ; preds = %84 - %94 = and i64 %75, -4294967296 - %95 = add i64 %94, 4294967296 - %96 = or disjoint i64 %85, %95 - %97 = cmpxchg volatile ptr %73, i64 %75, i64 %96 seq_cst seq_cst, align 8 +91: ; preds = %88 + %92 = load ptr, ptr %56, align 8, !tbaa !79 + %93 = getelementptr inbounds nuw %struct.ma_job, ptr %92, i64 %81, i32 1 + %94 = and i64 %83, -4294967296 + %.reass = add i64 %94, %invariant.op + %95 = cmpxchg volatile ptr %93, i64 %83, i64 %.reass seq_cst seq_cst, align 8 + %96 = extractvalue { i64, i1 } %95, 1 + br i1 %96, label %102, label %.backedge + +97: ; preds = %88 + %98 = and i64 %79, -4294967296 + %99 = add i64 %98, 4294967296 + %100 = or disjoint i64 %89, %99 + %101 = cmpxchg volatile ptr %77, i64 %79, i64 %100 seq_cst seq_cst, align 8 br label %.backedge -.backedge: ; preds = %93, %87, %74 - br label %74 +.backedge: ; preds = %97, %91, %78 + br label %78 -98: ; preds = %87 - %99 = and i64 %75, -4294967296 - %100 = add i64 %99, 4294967296 +110: ; preds = %91 + %103 = and i64 %75, -4294967296 + %100 = add i64 %103, 4294967296 %101 = or disjoint i64 %100, %45 %102 = cmpxchg volatile ptr %73, i64 %75, i64 %101 seq_cst seq_cst, align 8 store atomic volatile i32 0, ptr %64 release, align 4 %103 = load i32, ptr %0, align 8, !tbaa !77 %104 = and i32 %103, 1 %105 = icmp eq i32 %104, 0 - br i1 %105, label %106, label %ma_slot_allocator_alloc.exit.thread + br i1 %105, label %110, label %ma_slot_allocator_alloc.exit.thread 106: ; preds = %98 %107 = getelementptr inbounds nuw i8, ptr %0, i64 24 @@ -3881,8 +3881,8 @@ ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 %114 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %108) #66 br label %ma_slot_allocator_alloc.exit.thread -ma_slot_allocator_alloc.exit.thread: ; preds = %.preheader59.i, %._crit_edge.i, %41, %26, %98, %106, %2 - %.0 = phi i32 [ -2, %2 ], [ 0, %106 ], [ 0, %98 ], [ -4, %26 ], [ -4, %41 ], [ -4, %._crit_edge.i ], [ -4, %.preheader59.i ] +ma_slot_allocator_alloc.exit.thread: ; preds = %.preheader59.i, %._crit_edge.i, %45, %30, %102, %110, %2 + %.0 = phi i32 [ -2, %2 ], [ 0, %110 ], [ 0, %102 ], [ -4, %30 ], [ -4, %45 ], [ -4, %._crit_edge.i ], [ -4, %.preheader59.i ] ret i32 %.0 } diff --git a/bench/raylib/optimized/raudio.ll b/bench/raylib/optimized/raudio.ll index 4af6fe85c41..0563c9b03b9 100644 --- a/bench/raylib/optimized/raudio.ll +++ b/bench/raylib/optimized/raudio.ll @@ -3070,20 +3070,20 @@ define hidden range(i32 -4, 1) i32 @ma_slot_allocator_alloc(ptr noundef captures %7 = phi i1 [ true, %.preheader60 ], [ false, %52 ] %8 = load i32, ptr %5, align 4 %.not69 = icmp eq i32 %8, 0 - br i1 %.not69, label %.thread54, label %.preheader58 + br i1 %.not69, label %.thread54, label %13 -.preheader58: ; preds = %.preheader59, %43 +13: ; preds = %.preheader59, %43 %indvars.iv = phi i64 [ %indvars.iv.next, %43 ], [ 0, %.preheader59 ] br label %9 -9: ; preds = %.preheader58, %ma_ffs_32.exit +9:; preds = %13, %ma_ffs_32.exit %10 = load ptr, ptr %0, align 8 %11 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %10, i64 %indvars.iv %12 = load atomic i32, ptr %11 seq_cst, align 4 %13 = icmp eq i32 %12, -1 br i1 %13, label %43, label %.preheader -.preheader: ; preds = %9, %16 +.preheader:; preds = %9, %16 %.08.i = phi i32 [ %17, %16 ], [ 0, %9 ] %14 = shl nuw i32 1, %.08.i %15 = and i32 %14, %12 @@ -3097,28 +3097,28 @@ define hidden range(i32 -4, 1) i32 @ma_slot_allocator_alloc(ptr noundef captures ma_ffs_32.exit: ; preds = %.preheader, %16 %.0.lcssa.i = phi i32 [ 32, %16 ], [ %.08.i, %.preheader ] - %18 = shl nuw i32 1, %.0.lcssa.i - %19 = or i32 %18, %12 - %20 = load ptr, ptr %0, align 8 - %21 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %20, i64 %indvars.iv - %22 = cmpxchg volatile ptr %21, i32 %12, i32 %19 seq_cst seq_cst, align 4 - %23 = extractvalue { i32, i1 } %22, 1 - br i1 %23, label %24, label %9 - -24: ; preds = %ma_ffs_32.exit - %25 = trunc nuw nsw i64 %indvars.iv to i32 - %26 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 - %27 = shl i32 %25, 5 - %28 = add i32 %.0.lcssa.i, %27 - %29 = load i32, ptr %5, align 4 - %.not = icmp ult i32 %28, %29 - br i1 %.not, label %30, label %.thread54 + %22 = shl nuw i32 1, %.0.lcssa.i + %23 = or i32 %22, %12 + %24 = load ptr, ptr %0, align 8 + %25 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %24, i64 %indvars.iv + %26 = cmpxchg volatile ptr %25, i32 %12, i32 %23 seq_cst seq_cst, align 4 + %27 = extractvalue { i32, i1 } %26, 1 + br i1 %27, label %28, label %9 + +28: ; preds = %ma_ffs_32.exit + %29 = trunc nuw nsw i64 %indvars.iv to i32 + %30 = atomicrmw add ptr %6, i32 1 seq_cst, align 8 + %31 = shl i32 %29, 5 + %32 = add i32 %.0.lcssa.i, %31 + %33 = load i32, ptr %5, align 4 + %.not = icmp ult i32 %32, %33 + br i1 %.not, label %34, label %.thread54 -30: ; preds = %24 - %31 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %32 = load ptr, ptr %31, align 8 - %33 = zext i32 %28 to i64 - %34 = getelementptr inbounds nuw i32, ptr %32, i64 %33 +34: ; preds = %28 + %35 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %36 = load ptr, ptr %35, align 8 + %37 = zext i32 %32 to i64 + %38 = getelementptr inbounds nuw i32, ptr %36, i64 %37 %35 = load i32, ptr %34, align 4 %36 = add i32 %35, 1 store i32 %36, ptr %34, align 4 @@ -3131,29 +3131,29 @@ ma_ffs_32.exit: ; preds = %.preheader, %16 store i64 %42, ptr %1, align 8 br label %.thread54 -43: ; preds = %9 +47: ; preds = %9 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %44 = load i32, ptr %5, align 4 - %45 = lshr i32 %44, 5 - %46 = and i32 %44, 31 - %.not.i = icmp ne i32 %46, 0 - %47 = zext i1 %.not.i to i32 - %spec.select.i45 = add nuw nsw i32 %45, %47 - %48 = zext nneg i32 %spec.select.i45 to i64 - %49 = icmp samesign ult i64 %indvars.iv.next, %48 - br i1 %49, label %.preheader58, label %._crit_edge - -._crit_edge: ; preds = %43 + %48 = load i32, ptr %5, align 4 + %49 = lshr i32 %48, 5 + %50 = and i32 %48, 31 + %.not.i = icmp ne i32 %50, 0 + %51 = zext i1 %.not.i to i32 + %spec.select.i45 = add nuw nsw i32 %49, %51 + %52 = zext nneg i32 %spec.select.i45 to i64 + %53 = icmp samesign ult i64 %indvars.iv.next, %52 + br i1 %53, label %.preheader58, label %._crit_edge + +._crit_edge: ; preds = %47 %50 = load i32, ptr %6, align 8 - %51 = icmp ult i32 %50, %44 + %51 = icmp ult i32 %50, %48 br i1 %51, label %52, label %.thread54 52: ; preds = %._crit_edge tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 br i1 %7, label %.preheader59, label %.thread54 -.thread54: ; preds = %.preheader59, %._crit_edge, %52, %30, %24, %2 - %.0 = phi i32 [ -2, %2 ], [ -4, %24 ], [ 0, %30 ], [ -4, %52 ], [ -4, %._crit_edge ], [ -4, %.preheader59 ] +.thread54: ; preds = %.preheader59, %._crit_edge, %52, %34, %28, %2 + %.0 = phi i32 [ -2, %2 ], [ -4, %28 ], [ 0, %34 ], [ -4, %52 ], [ -4, %._crit_edge ], [ -4, %.preheader59 ] ret i32 %.0 } @@ -3412,54 +3412,54 @@ ma_semaphore_init.exit: ; preds = %57, %60, %53, %34 %64 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %108 ] %65 = load i32, ptr %49, align 4 %.not69.i = icmp eq i32 %65, 0 - br i1 %.not69.i, label %ma_slot_allocator_alloc.exit, label %.preheader58.i + br i1 %.not69.i, label %ma_slot_allocator_alloc.exit, label %15 -.preheader58.i: ; preds = %.preheader59.i, %99 +15:; preds = %.preheader59.i, %103 %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %99 ], [ 0, %.preheader59.i ] br label %66 -66: ; preds = %ma_ffs_32.exit.i, %.preheader58.i - %67 = load ptr, ptr %32, align 8 - %68 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %67, i64 %indvars.iv.i - %69 = load atomic i32, ptr %68 seq_cst, align 4 - %70 = icmp eq i32 %69, -1 - br i1 %70, label %99, label %.preheader.i - -.preheader.i: ; preds = %66, %73 - %.08.i.i = phi i32 [ %74, %73 ], [ 0, %66 ] - %71 = shl nuw i32 1, %.08.i.i - %72 = and i32 %71, %69 - %.not.i46.not.i = icmp eq i32 %72, 0 - br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %73 - -73: ; preds = %.preheader.i - %74 = add nuw nsw i32 %.08.i.i, 1 - %exitcond.not.i.i = icmp eq i32 %74, 32 +70: ; preds = %ma_ffs_32.exit.i, %.preheader58.i + %71 = load ptr, ptr %32, align 8 + %72 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %71, i64 %indvars.iv.i + %73 = load atomic i32, ptr %72 seq_cst, align 4 + %74 = icmp eq i32 %73, -1 + br i1 %74, label %103, label %.preheader.i + +.preheader.i: ; preds = %70, %77 + %.08.i.i = phi i32 [ %78, %77 ], [ 0, %66 ] + %75 = shl nuw i32 1, %.08.i.i + %76 = and i32 %75, %73 + %.not.i46.not.i = icmp eq i32 %76, 0 + br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %77 + +77: ; preds = %.preheader.i + %78 = add nuw nsw i32 %.08.i.i, 1 + %exitcond.not.i.i = icmp eq i32 %78, 32 br i1 %exitcond.not.i.i, label %ma_ffs_32.exit.i, label %.preheader.i -ma_ffs_32.exit.i: ; preds = %.preheader.i, %73 - %.0.lcssa.i.i = phi i32 [ 32, %73 ], [ %.08.i.i, %.preheader.i ] - %75 = shl nuw i32 1, %.0.lcssa.i.i - %76 = or i32 %75, %69 - %77 = load ptr, ptr %32, align 8 - %78 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %77, i64 %indvars.iv.i - %79 = cmpxchg volatile ptr %78, i32 %69, i32 %76 seq_cst seq_cst, align 4 - %80 = extractvalue { i32, i1 } %79, 1 - br i1 %80, label %81, label %66 - -81: ; preds = %ma_ffs_32.exit.i - %82 = trunc nuw nsw i64 %indvars.iv.i to i32 - %83 = atomicrmw add ptr %63, i32 1 seq_cst, align 8 - %84 = shl i32 %82, 5 - %85 = add i32 %.0.lcssa.i.i, %84 - %86 = load i32, ptr %49, align 4 - %.not.i = icmp ult i32 %85, %86 - br i1 %.not.i, label %87, label %ma_slot_allocator_alloc.exit - -87: ; preds = %81 - %88 = load ptr, ptr %48, align 8 - %89 = zext i32 %85 to i64 - %90 = getelementptr inbounds nuw i32, ptr %88, i64 %89 +ma_ffs_32.exit.i: ; preds = %.preheader.i, %77 + %.0.lcssa.i.i = phi i32 [ 32, %77 ], [ %.08.i.i, %.preheader.i ] + %79 = shl nuw i32 1, %.0.lcssa.i.i + %80 = or i32 %79, %73 + %81 = load ptr, ptr %32, align 8 + %82 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %81, i64 %indvars.iv.i + %83 = cmpxchg volatile ptr %82, i32 %73, i32 %80 seq_cst seq_cst, align 4 + %84 = extractvalue { i32, i1 } %83, 1 + br i1 %84, label %85, label %70 + +85: ; preds = %ma_ffs_32.exit.i + %86 = trunc nuw nsw i64 %indvars.iv.i to i32 + %87 = atomicrmw add ptr %63, i32 1 seq_cst, align 8 + %88 = shl i32 %86, 5 + %89 = add i32 %.0.lcssa.i.i, %88 + %90 = load i32, ptr %49, align 4 + %.not.i = icmp ult i32 %89, %90 + br i1 %.not.i, label %91, label %ma_slot_allocator_alloc.exit + +91: ; preds = %85 + %92 = load ptr, ptr %48, align 8 + %93 = zext i32 %89 to i64 + %94 = getelementptr inbounds nuw i32, ptr %92, i64 %93 %91 = load i32, ptr %90, align 4 %92 = add i32 %91, 1 store i32 %92, ptr %90, align 4 @@ -3469,22 +3469,22 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %73 %96 = zext i32 %95 to i64 %97 = shl nuw i64 %96, 32 %98 = or disjoint i64 %97, %89 - store i64 %98, ptr %62, align 8 + store i64 %102, ptr %62, align 8 br label %ma_slot_allocator_alloc.exit -99: ; preds = %66 +103: ; preds = %70 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %100 = load i32, ptr %49, align 4 - %101 = lshr i32 %100, 5 - %102 = and i32 %100, 31 - %.not.i.i38 = icmp ne i32 %102, 0 - %103 = zext i1 %.not.i.i38 to i32 - %spec.select.i45.i = add nuw nsw i32 %101, %103 - %104 = zext nneg i32 %spec.select.i45.i to i64 - %105 = icmp samesign ult i64 %indvars.iv.next.i, %104 - br i1 %105, label %.preheader58.i, label %._crit_edge.i - -._crit_edge.i: ; preds = %99 + %104 = load i32, ptr %49, align 4 + %105 = lshr i32 %104, 5 + %106 = and i32 %104, 31 + %.not.i.i38 = icmp ne i32 %106, 0 + %107 = zext i1 %.not.i.i38 to i32 + %spec.select.i45.i = add nuw nsw i32 %105, %107 + %108 = zext nneg i32 %spec.select.i45.i to i64 + %109 = icmp samesign ult i64 %indvars.iv.next.i, %108 + br i1 %109, label %.preheader58.i, label %._crit_edge.i + +._crit_edge.i: ; preds = %103 %106 = load i32, ptr %63, align 8 %107 = icmp ult i32 %106, %100 br i1 %107, label %108, label %ma_slot_allocator_alloc.exit @@ -3493,15 +3493,15 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %73 tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 br i1 %64, label %.preheader59.i, label %ma_slot_allocator_alloc.exit -ma_slot_allocator_alloc.exit: ; preds = %.preheader59.i, %._crit_edge.i, %108, %81, %87 - %109 = load ptr, ptr %30, align 8 - %110 = load i64, ptr %62, align 8 - %111 = and i64 %110, 65535 - %112 = getelementptr inbounds nuw %struct.ma_job, ptr %109, i64 %111, i32 1 - store i64 -1, ptr %112, align 8 - %113 = load i64, ptr %62, align 8 - %114 = getelementptr inbounds nuw i8, ptr %2, i64 16 - store i64 %113, ptr %114, align 8 +ma_slot_allocator_alloc.exit: ; preds = %.preheader59.i, %._crit_edge.i, %108, %85, %91 + %113 = load ptr, ptr %30, align 8 + %114 = load i64, ptr %62, align 8 + %115 = and i64 %114, 65535 + %116 = getelementptr inbounds nuw %struct.ma_job, ptr %113, i64 %115, i32 1 + store i64 -1, ptr %116, align 8 + %117 = load i64, ptr %62, align 8 + %118 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %117, ptr %118, align 8 br label %ma_job_queue_get_heap_layout.exit.thread ma_job_queue_get_heap_layout.exit.thread: ; preds = %ma_zero_memory_default.exit, %6, %ma_zero_memory_default.exit32, %3, %ma_slot_allocator_alloc.exit @@ -3696,61 +3696,61 @@ define hidden range(i32 -4, 1) i32 @ma_job_queue_post(ptr noundef %0, ptr nounde %.not69.i = icmp eq i32 %10, 0 br i1 %.not69.i, label %ma_slot_allocator_alloc.exit.thread, label %.preheader58.i -.preheader58.i: ; preds = %.preheader59.i, %32 +15: ; preds = %.preheader59.i, %32 %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %32 ], [ 0, %.preheader59.i ] br label %11 -11: ; preds = %ma_ffs_32.exit.i, %.preheader58.i +11:; preds = %ma_ffs_32.exit.i, %15 %12 = load ptr, ptr %6, align 8 %13 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %12, i64 %indvars.iv.i %14 = load atomic i32, ptr %13 seq_cst, align 4 %15 = icmp eq i32 %14, -1 br i1 %15, label %32, label %.preheader.i -.preheader.i: ; preds = %11, %18 - %.08.i.i = phi i32 [ %19, %18 ], [ 0, %11 ] +.preheader.i:; preds = %11, %18 + %.08.i.i = phi i32 [ %19, %22 ], [ 0, %11 ] %16 = shl nuw i32 1, %.08.i.i %17 = and i32 %16, %14 %.not.i46.not.i = icmp eq i32 %17, 0 - br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %18 + br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %22 18: ; preds = %.preheader.i %19 = add nuw nsw i32 %.08.i.i, 1 %exitcond.not.i.i = icmp eq i32 %19, 32 br i1 %exitcond.not.i.i, label %ma_ffs_32.exit.i, label %.preheader.i -ma_ffs_32.exit.i: ; preds = %.preheader.i, %18 - %.0.lcssa.i.i = phi i32 [ 32, %18 ], [ %.08.i.i, %.preheader.i ] - %20 = shl nuw i32 1, %.0.lcssa.i.i - %21 = or i32 %20, %14 - %22 = load ptr, ptr %6, align 8 - %23 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %22, i64 %indvars.iv.i - %24 = cmpxchg volatile ptr %23, i32 %14, i32 %21 seq_cst seq_cst, align 4 - %25 = extractvalue { i32, i1 } %24, 1 - br i1 %25, label %26, label %11 - -26: ; preds = %ma_ffs_32.exit.i - %27 = trunc nuw nsw i64 %indvars.iv.i to i32 - %28 = atomicrmw add ptr %8, i32 1 seq_cst, align 8 - %29 = shl i32 %27, 5 - %30 = add i32 %.0.lcssa.i.i, %29 - %31 = load i32, ptr %7, align 4 - %.not.i = icmp ult i32 %30, %31 - br i1 %.not.i, label %42, label %ma_slot_allocator_alloc.exit.thread - -32: ; preds = %11 +ma_ffs_32.exit.i: ; preds = %.preheader.i, %22 + %.0.lcssa.i.i = phi i32 [ 32, %22 ], [ %.08.i.i, %.preheader.i ] + %24 = shl nuw i32 1, %.0.lcssa.i.i + %25 = or i32 %24, %14 + %26 = load ptr, ptr %6, align 8 + %27 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %26, i64 %indvars.iv.i + %28 = cmpxchg volatile ptr %27, i32 %14, i32 %25 seq_cst seq_cst, align 4 + %29 = extractvalue { i32, i1 } %28, 1 + br i1 %29, label %30, label %11 + +30: ; preds = %ma_ffs_32.exit.i + %31 = trunc nuw nsw i64 %indvars.iv.i to i32 + %32 = atomicrmw add ptr %8, i32 1 seq_cst, align 8 + %33 = shl i32 %31, 5 + %34 = add i32 %.0.lcssa.i.i, %33 + %35 = load i32, ptr %7, align 4 + %.not.i = icmp ult i32 %34, %35 + br i1 %.not.i, label %46, label %ma_slot_allocator_alloc.exit.thread + +36: ; preds = %11 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 - %33 = load i32, ptr %7, align 4 - %34 = lshr i32 %33, 5 - %35 = and i32 %33, 31 - %.not.i.i = icmp ne i32 %35, 0 - %36 = zext i1 %.not.i.i to i32 - %spec.select.i45.i = add nuw nsw i32 %34, %36 - %37 = zext nneg i32 %spec.select.i45.i to i64 - %38 = icmp samesign ult i64 %indvars.iv.next.i, %37 - br i1 %38, label %.preheader58.i, label %._crit_edge.i - -._crit_edge.i: ; preds = %32 + %37 = load i32, ptr %7, align 4 + %38 = lshr i32 %37, 5 + %39 = and i32 %37, 31 + %.not.i.i = icmp ne i32 %39, 0 + %40 = zext i1 %.not.i.i to i32 + %spec.select.i45.i = add nuw nsw i32 %38, %40 + %41 = zext nneg i32 %spec.select.i45.i to i64 + %42 = icmp samesign ult i64 %indvars.iv.next.i, %41 + br i1 %42, label %.preheader58.i, label %._crit_edge.i + +._crit_edge.i: ; preds = %36 %39 = load i32, ptr %8, align 8 %40 = icmp ult i32 %39, %33 br i1 %40, label %41, label %ma_slot_allocator_alloc.exit.thread @@ -3759,11 +3759,11 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %18 tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 br i1 %9, label %.preheader59.i, label %ma_slot_allocator_alloc.exit.thread -42: ; preds = %26 - %43 = getelementptr inbounds nuw i8, ptr %0, i64 128 - %44 = load ptr, ptr %43, align 8 - %45 = zext i32 %30 to i64 - %46 = getelementptr inbounds nuw i32, ptr %44, i64 %45 +46: ; preds = %30 + %47 = getelementptr inbounds nuw i8, ptr %0, i64 128 + %48 = load ptr, ptr %47, align 8 + %49 = zext i32 %34 to i64 + %50 = getelementptr inbounds nuw i32, ptr %48, i64 %49 %47 = load i32, ptr %46, align 4 %48 = add i32 %47, 1 store i32 %48, ptr %46, align 4 @@ -3773,8 +3773,8 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %18 %52 = zext i32 %51 to i64 %53 = shl nuw i64 %52, 32 %54 = or disjoint i64 %53, %45 - %55 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %56 = load ptr, ptr %55, align 8 + %54 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %55 = load ptr, ptr %54, align 8 %57 = and i32 %30, 65535 %58 = zext nneg i32 %57 to i64 %59 = getelementptr inbounds nuw %struct.ma_job, ptr %56, i64 %58 @@ -3789,34 +3789,34 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %18 %65 = load ptr, ptr %55, align 8 %66 = getelementptr inbounds nuw %struct.ma_job, ptr %65, i64 %58, i32 1 store i64 -1, ptr %66, align 8 - %67 = getelementptr inbounds nuw i8, ptr %0, i64 168 - %68 = atomicrmw volatile xchg ptr %67, i32 1 acquire, align 4 + %68 = getelementptr inbounds nuw i8, ptr %0, i64 168 + %68 = atomicrmw volatile xchg ptr %68, i32 1 acquire, align 4 %69 = icmp eq i32 %68, 0 - br i1 %69, label %ma_spinlock_lock.exit, label %.preheader.i37 + br i1 %69, label %81, label %.preheader.i37 .loopexit.i: ; preds = %.lr.ph.i, %.preheader.i37 - %70 = atomicrmw volatile xchg ptr %67, i32 1 acquire, align 4 - %71 = icmp eq i32 %70, 0 - br i1 %71, label %ma_spinlock_lock.exit, label %.preheader.i37 + %74 = atomicrmw volatile xchg ptr %71, i32 1 acquire, align 4 + %75 = icmp eq i32 %74, 0 + br i1 %75, label %ma_spinlock_lock.exit, label %.preheader.i37 -.preheader.i37: ; preds = %42, %.loopexit.i - %72 = load atomic volatile i32, ptr %67 monotonic, align 4 - %73 = icmp eq i32 %72, 1 - br i1 %73, label %.lr.ph.i, label %.loopexit.i +.preheader.i37: ; preds = %46, %.loopexit.i + %76 = load atomic volatile i32, ptr %71 monotonic, align 4 + %77 = icmp eq i32 %76, 1 + br i1 %77, label %.lr.ph.i, label %.loopexit.i .lr.ph.i: ; preds = %.preheader.i37, %.lr.ph.i tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #71, !srcloc !3 - %74 = load atomic volatile i32, ptr %67 monotonic, align 4 - %75 = icmp eq i32 %74, 1 - br i1 %75, label %.lr.ph.i, label %.loopexit.i + %78 = load atomic volatile i32, ptr %71 monotonic, align 4 + %79 = icmp eq i32 %78, 1 + br i1 %79, label %.lr.ph.i, label %.loopexit.i -ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 - %76 = getelementptr inbounds nuw i8, ptr %0, i64 16 +81: ; preds = %.loopexit.i, %42 + %80 = getelementptr inbounds nuw i8, ptr %0, i64 16 %invariant.op = or disjoint i64 %45, 4294967296 - br label %77 + br label %85 -77: ; preds = %.backedge, %ma_spinlock_lock.exit - %78 = load atomic i64, ptr %76 seq_cst, align 8 +91: ; preds = %.backedge, %81 + %82 = load atomic i64, ptr %80 seq_cst, align 8 %79 = load ptr, ptr %55, align 8 %80 = and i64 %78, 65535 %81 = getelementptr inbounds nuw %struct.ma_job, ptr %79, i64 %80, i32 1 @@ -3832,24 +3832,24 @@ ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 %89 = icmp eq i64 %88, 65535 br i1 %89, label %90, label %96 -90: ; preds = %87 - %91 = load ptr, ptr %55, align 8 - %92 = getelementptr inbounds nuw %struct.ma_job, ptr %91, i64 %80, i32 1 - %93 = and i64 %82, -4294967296 - %.reass = add i64 %93, %invariant.op - %94 = cmpxchg volatile ptr %92, i64 %82, i64 %.reass seq_cst seq_cst, align 8 - %95 = extractvalue { i64, i1 } %94, 1 - br i1 %95, label %101, label %.backedge - -96: ; preds = %87 - %97 = and i64 %78, -4294967296 - %98 = add i64 %97, 4294967296 - %99 = or disjoint i64 %88, %98 - %100 = cmpxchg volatile ptr %76, i64 %78, i64 %99 seq_cst seq_cst, align 8 +94: ; preds = %91 + %95 = load ptr, ptr %55, align 8 + %96 = getelementptr inbounds nuw %struct.ma_job, ptr %95, i64 %84, i32 1 + %97 = and i64 %86, -4294967296 + %.reass = add i64 %97, %invariant.op + %98 = cmpxchg volatile ptr %96, i64 %86, i64 %.reass seq_cst seq_cst, align 8 + %99 = extractvalue { i64, i1 } %98, 1 + br i1 %99, label %105, label %.backedge + +100: ; preds = %91 + %101 = and i64 %82, -4294967296 + %102 = add i64 %101, 4294967296 + %103 = or disjoint i64 %92, %102 + %104 = cmpxchg volatile ptr %80, i64 %82, i64 %103 seq_cst seq_cst, align 8 br label %.backedge -.backedge: ; preds = %96, %90, %77 - br label %77 +.backedge: ; preds = %100, %94, %81 + br label %81 101: ; preds = %90 %102 = and i64 %78, -4294967296 @@ -3862,7 +3862,7 @@ ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 %108 = icmp eq i32 %107, 0 br i1 %108, label %109, label %ma_slot_allocator_alloc.exit.thread -109: ; preds = %101 +105: ; preds = %101 %110 = getelementptr inbounds nuw i8, ptr %0, i64 24 %111 = getelementptr inbounds nuw i8, ptr %0, i64 32 %112 = tail call i32 @pthread_mutex_lock(ptr noundef nonnull %111) #71 @@ -3874,8 +3874,8 @@ ma_spinlock_lock.exit: ; preds = %.loopexit.i, %42 %117 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %111) #71 br label %ma_slot_allocator_alloc.exit.thread -ma_slot_allocator_alloc.exit.thread: ; preds = %.preheader59.i, %._crit_edge.i, %41, %26, %101, %109, %2 - %.0 = phi i32 [ -2, %2 ], [ 0, %109 ], [ 0, %101 ], [ -4, %26 ], [ -4, %41 ], [ -4, %._crit_edge.i ], [ -4, %.preheader59.i ] +ma_slot_allocator_alloc.exit.thread: ; preds = %.preheader59.i, %._crit_edge.i, %41, %30, %105, %113, %2 + %.0 = phi i32 [ -2, %2 ], [ 0, %113 ], [ 0, %105 ], [ -4, %30 ], [ -4, %41 ], [ -4, %._crit_edge.i ], [ -4, %.preheader59.i ] ret i32 %.0 } diff --git a/bench/wireshark/optimized/packet-bmc.ll b/bench/wireshark/optimized/packet-bmc.ll index 339ea3da0de..8ed08ed5f28 100644 --- a/bench/wireshark/optimized/packet-bmc.ll +++ b/bench/wireshark/optimized/packet-bmc.ll @@ -133,7 +133,7 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, br label %90 32: ; preds = %4 - call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4 + call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3 %33 = load i32, ptr @hf_bmc_offset_to_begin_ctch_bs_index, align 4 %34 = tail call ptr @proto_tree_add_item(ptr noundef %12, i32 noundef %33, ptr noundef %18, i32 noundef 1, i32 noundef 1, i32 noundef 0) %35 = tail call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef 2) @@ -151,9 +151,9 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %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 %35, 0 - br i1 %.not15.i, label %._crit_edge8.i, label %.preheader.preheader.i + br i1 %.not15.i, label %._crit_edge8.i, label %.preheader.i -.preheader.preheader.i: ; preds = %32 +.preheader.i: ; preds = %32 %46 = call i32 @llvm.umax.i32(i32 %41, i32 1) br label %.preheader.i @@ -164,46 +164,46 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %.not931.i = icmp ugt i8 %.0846.i, %35 br i1 %.not931.i, label %._crit_edge.i, label %.lr.ph.i -.lr.ph.i: ; preds = %.preheader.i, %59 +.lr.ph.i: ; preds = %.preheader.i, %58 %.13.i = phi i32 [ %.2.i, %59 ], [ %.07.i, %.preheader.i ] - %.1852.i = phi i8 [ %60, %59 ], [ %.0846.i, %.preheader.i ] - %47 = zext i8 %.1852.i to i32 - %48 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.13.i) - %49 = load i32, ptr @hf_bmc_message_description_type, align 4 - %50 = zext i8 %48 to i32 - %51 = call ptr @val_to_str_const(i32 noundef %50, ptr noundef nonnull @message_description_type_vals, ptr noundef nonnull @.str.47) - %52 = call ptr (ptr, i32, ptr, i32, i32, i32, ptr, ...) @proto_tree_add_uint_format(ptr noundef %45, i32 noundef %49, ptr noundef %18, i32 noundef %.13.i, i32 noundef 1, i32 noundef %50, ptr noundef nonnull @.str.46, i32 noundef %47, ptr noundef %51, i32 noundef %50) - %53 = add i32 %.13.i, 1 - %54 = and i8 %48, -5 - switch i8 %54, label %59 [ + %.1852.i = phi i8 [ %59, %59 ], [ %.0846.i, %.preheader.i ] + %46 = zext i8 %.1852.i to i32 + %47 = call zeroext i8 @tvb_get_uint8(ptr noundef %18, i32 noundef %.13.i) + %48 = load i32, ptr @hf_bmc_message_description_type, align 4 + %49 = zext i8 %47 to i32 + %50 = call ptr @val_to_str_const(i32 noundef %49, ptr noundef nonnull @message_description_type_vals, ptr noundef nonnull @.str.47) + %51 = call ptr (ptr, i32, ptr, i32, i32, i32, ptr, ...) @proto_tree_add_uint_format(ptr noundef %45, i32 noundef %48, ptr noundef %18, i32 noundef %.13.i, i32 noundef 1, i32 noundef %49, ptr noundef nonnull @.str.46, i32 noundef %46, ptr noundef %50, i32 noundef %49) + %52 = add i32 %.13.i, 1 + %53 = and i8 %47, -5 + switch i8 %53, label %59 [ i8 1, label %.sink.split.i - i8 0, label %55 + i8 0, label %54 ] -55: ; preds = %.lr.ph.i +54: ; preds = %.lr.ph.i br label %.sink.split.i -.sink.split.i: ; preds = %55, %.lr.ph.i +.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, %55 ], [ @hf_bmc_message_id, %.lr.ph.i ] - %.sink21.i = phi i32 [ 1, %55 ], [ 2, %.lr.ph.i ] + %.sink20.i = phi i32 [ 1, %55 ], [ 2, %.lr.ph.i ] %.sink.i = phi i32 [ 2, %55 ], [ 3, %.lr.ph.i ] - %56 = load i32, ptr %hf_bmc_message_id.sink.i, align 4 - %57 = call ptr @proto_tree_add_item(ptr noundef %45, i32 noundef %56, ptr noundef %18, i32 noundef %53, i32 noundef %.sink21.i, i32 noundef 0) - %58 = add i32 %.sink.i, %.13.i - br label %59 - -59: ; preds = %.sink.split.i, %.lr.ph.i - %.2.i = phi i32 [ %53, %.lr.ph.i ], [ %58, %.sink.split.i ] - %60 = add i8 %.1852.i, 1 - %.not93.i = icmp ugt i8 %60, %35 + %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) + %57 = add i32 %.sink.i, %.13.i + br label %58 + +58: ; preds = %.sink.split.i, %.lr.ph.i + %.2.i = phi i32 [ %52, %.lr.ph.i ], [ %57, %.sink.split.i ] + %59 = add i8 %.1852.i, 1 + %.not93.i = icmp ugt i8 %59, %35 br i1 %.not93.i, label %._crit_edge.i, label %.lr.ph.i, !llvm.loop !6 -._crit_edge.i: ; preds = %59, %.preheader.i - %.185.lcssa.i = phi i8 [ %.0846.i, %.preheader.i ], [ %60, %59 ] +._crit_edge.i: ; preds = %58, %.preheader.i + %.185.lcssa.i = phi i8 [ %.0846.i, %.preheader.i ], [ %59, %59 ] %.1.lcssa.i = phi i32 [ %.07.i, %.preheader.i ], [ %.2.i, %59 ] - %61 = add nuw nsw i32 %.0875.i, 1 - %exitcond.not.i = icmp eq i32 %61, %46 - br i1 %exitcond.not.i, label %._crit_edge8.i, label %.preheader.i, !llvm.loop !8 + %60 = add nuw nsw i32 %.0875.i, 1 + %61 = icmp eq i32 %60, %46 + 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 ] @@ -241,12 +241,12 @@ define internal i32 @dissect_bmc(ptr noundef %0, ptr noundef %1, ptr noundef %2, %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 - %exitcond18.not.i = icmp eq i8 %82, %72 - br i1 %exitcond18.not.i, label %dissect_bmc_schedule_message.exit, label %.lr.ph13.i, !llvm.loop !9 + %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 ] - call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4 + call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3 br label %90 83: ; preds = %4 diff --git a/bench/wolfssl/optimized/random.ll b/bench/wolfssl/optimized/random.ll index 210fa37405f..53bf2ba7388 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 @@ -910,248 +910,248 @@ define internal fastcc range(i32 0, 3) i32 @Hash_DRBG_Generate(ptr noundef %0, p %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) %umax.i = tail call i32 @llvm.umax.i32(i32 %20, i32 1) - br label %21 + br label %.lr.ph.i -21: ; preds = %array_add_one.exit.i, %15 - %.0217.i = phi i32 [ 0, %15 ], [ %44, %array_add_one.exit.i ] +.lr.ph.i: ; preds = %array_add_one.exit.i, %15 + %.0217.i = phi i32 [ 0, %15 ], [ %43, %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 + %21 = call i32 @wc_InitSha256(ptr noundef nonnull %6) #9 + %22 = icmp eq i32 %21, 0 + br i1 %22, label %23, 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 +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 = %24, %21 +.thread2.i: ; preds = %23, %.lr.ph.i 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 = %23 + %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, %umax.i - br i1 %exitcond.not.i, label %.lr.ph29.preheader.i.i, label %21, !llvm.loop !31 +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, %umax.i + br i1 %exitcond.not.i, label %.lr.ph29.preheader.i.i, label %.lr.ph.i, !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