From 8faebac8f47d0ba123ce25ca77750f64cfb6907f Mon Sep 17 00:00:00 2001 From: nikic <216080+nikic@users.noreply.github.com> Date: Thu, 4 Dec 2025 19:26:45 +0800 Subject: [PATCH 1/3] pre-commit: PR166935 --- 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 c8d0fce0bf7..d217a05c9df 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/166935 export COMPTIME_MODE=0 export STAT_MODE=0 export STAT_NAME="" From 86375d1ba6baaa271ce1aa51b77b18d7bd9c7908 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 4 Dec 2025 11:45:08 +0000 Subject: [PATCH 2/3] pre-commit: Update --- bench/abc/optimized/cuddZddLin.ll | 952 +++++++++--------- bench/lean4/optimized/AndFlatten.ll | 94 +- bench/lean4/optimized/Assumption.ll | 26 +- bench/lean4/optimized/Attach.ll | 192 ++-- bench/lean4/optimized/AutoBound.ll | 157 ++- bench/lean4/optimized/AuxDeclCache.ll | 190 ++-- bench/lean4/optimized/AuxLemma.ll | 222 ++-- bench/lean4/optimized/ByteArray.ll | 130 ++- bench/lean4/optimized/CSE.ll | 218 ++-- bench/lean4/optimized/Calc.ll | 15 +- bench/lean4/optimized/CaseValues.ll | 128 ++- bench/lean4/optimized/CheckTactic.ll | 220 ++-- bench/lean4/optimized/Client.ll | 128 +-- bench/lean4/optimized/CollectAxioms.ll | 100 +- bench/lean4/optimized/CollectFVars.ll | 98 +- bench/lean4/optimized/ConstFolding.ll | 136 ++- bench/lean4/optimized/Database.ll | 164 ++- bench/lean4/optimized/Delta.ll | 64 +- bench/lean4/optimized/EligibleHeaderDecls.ll | 220 ++-- bench/lean4/optimized/ElimDeadVars.ll | 162 ++- bench/lean4/optimized/EmbeddedConstraint.ll | 222 ++-- bench/lean4/optimized/Encode.ll | 206 ++-- bench/lean4/optimized/ExportAttr.ll | 159 ++- bench/lean4/optimized/External.ll | 62 +- bench/lean4/optimized/FVarSubset.ll | 70 +- bench/lean4/optimized/FVarSubst.ll | 90 +- bench/lean4/optimized/FilePath.ll | 36 +- bench/lean4/optimized/FindLevelMVar.ll | 200 ++-- bench/lean4/optimized/ForEachExprWhere.ll | 92 +- bench/lean4/optimized/GeneralizeTelescope.ll | 126 +-- bench/lean4/optimized/HasConstCache.ll | 238 +++-- bench/lean4/optimized/IndGroupInfo.ll | 192 ++-- bench/lean4/optimized/InitShutdown.ll | 124 +-- bench/lean4/optimized/InlineCandidate.ll | 34 +- bench/lean4/optimized/InputFileConfig.ll | 200 ++-- bench/lean4/optimized/InternalExceptionId.ll | 236 +++-- bench/lean4/optimized/Links.ll | 227 ++--- bench/lean4/optimized/MVarRenaming.ll | 28 +- bench/lean4/optimized/PlainDateTime.ll | 88 +- bench/lean4/optimized/Position.ll | 38 +- bench/lean4/optimized/PrettyPrinter.ll | 164 ++- bench/lean4/optimized/Propagate.ll | 158 ++- bench/lean4/optimized/ReplaceLevel.ll | 90 +- bench/lean4/optimized/RequestCancellation.ll | 104 +- bench/lean4/optimized/Simp.ll | 120 +-- bench/lean4/optimized/TZdb.ll | 160 ++- bench/lean4/optimized/Topological.ll | 94 +- bench/lean4/optimized/TypeName.ll | 162 ++- bench/lean4/optimized/WorkspaceConfig.ll | 198 ++-- bench/lean4/optimized/expr.ll | 74 +- bench/lean4/optimized/inductive.ll | 204 ++-- bench/lean4/optimized/lcnf.ll | 84 +- bench/lean4/optimized/local_ctx.ll | 44 +- bench/lean4/optimized/sharecommon.ll | 230 +++-- bench/lean4/optimized/tcp.ll | 185 ++-- bench/libigl/optimized/unproject.ll | 62 +- .../optimized/vertex_triangle_adjacency.ll | 670 ++++++------ bench/linux/optimized/af_netlink.ll | 196 ++-- bench/linux/optimized/fatent.ll | 178 ++-- bench/linux/optimized/ioam6.ll | 160 ++- bench/linux/optimized/request.ll | 298 +++--- bench/linux/optimized/sta_info.ll | 102 +- bench/linux/optimized/util.ll | 174 ++-- bench/llvm/optimized/Z3CrosscheckVisitor.ll | 58 +- .../optimized/filter_parametrization.ll | 413 ++++---- bench/openjdk/optimized/methodData.ll | 79 +- .../openjdk/optimized/screencast_pipewire.ll | 374 ++++--- .../optimized/acx590v32pn6eo20biyujqd8g.ll | 517 +++++----- bench/postgres/optimized/jsonfuncs.ll | 424 ++++---- bench/ruby/optimized/compile.ll | 686 +++++++------ bench/ruby/optimized/vm.ll | 165 ++- bench/wolfssl/optimized/sha.ll | 193 ++-- 72 files changed, 6012 insertions(+), 7092 deletions(-) diff --git a/bench/abc/optimized/cuddZddLin.ll b/bench/abc/optimized/cuddZddLin.ll index 3aa46b8c9ed..26f8c067f2a 100644 --- a/bench/abc/optimized/cuddZddLin.ll +++ b/bench/abc/optimized/cuddZddLin.ll @@ -1012,13 +1012,13 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, br i1 %exitcond439.not, label %.preheader357, label %.lr.ph381, !llvm.loop !69 .preheader355: ; preds = %.lr.ph385, %.preheader357 - %.0320.lcssa = phi i32 [ %27, %.preheader357 ], [ %107, %.lr.ph385 ] + %.0320.lcssa = phi i32 [ %27, %.preheader357 ], [ %100, %.lr.ph385 ] %.not338399 = icmp eq ptr %.0299.lcssa, null br i1 %.not338399, label %.preheader, label %.lr.ph403 .lr.ph385: ; preds = %.preheader357, %.lr.ph385 %.2315384 = phi ptr [ %69, %.lr.ph385 ], [ %.0.lcssa, %.preheader357 ] - %.0320383 = phi i32 [ %107, %.lr.ph385 ], [ %27, %.preheader357 ] + %.0320383 = phi i32 [ %100, %.lr.ph385 ], [ %27, %.preheader357 ] %68 = getelementptr inbounds nuw i8, ptr %.2315384, i64 8 %69 = load ptr, ptr %68, align 8, !tbaa !48 %70 = getelementptr inbounds nuw i8, ptr %.2315384, i64 16 @@ -1042,371 +1042,374 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, %84 = inttoptr i64 %83 to ptr %85 = getelementptr inbounds nuw i8, ptr %84, i64 32 %86 = load i64, ptr %85, align 8, !tbaa !70 - %87 = shl i64 %86, 1 - %88 = and i64 %82, 1 - %89 = or disjoint i64 %87, %88 - %90 = trunc i64 %89 to i32 - %91 = mul i32 %90, 12582917 - %92 = ptrtoint ptr %78 to i64 - %93 = and i64 %92, -2 - %94 = inttoptr i64 %93 to ptr - %95 = getelementptr inbounds nuw i8, ptr %94, i64 32 - %96 = load i64, ptr %95, align 8, !tbaa !70 - %97 = shl i64 %96, 1 - %98 = and i64 %92, 1 - %99 = or disjoint i64 %97, %98 - %100 = trunc i64 %99 to i32 - %101 = add i32 %91, %100 - %102 = mul i32 %101, 4256249 - %103 = lshr i32 %102, %31 - %104 = sext i32 %103 to i64 - %105 = getelementptr inbounds ptr, ptr %25, i64 %104 - %106 = load ptr, ptr %105, align 8, !tbaa !25 - store ptr %106, ptr %68, align 8, !tbaa !48 - store ptr %.2315384, ptr %105, align 8, !tbaa !25 - %107 = add nsw i32 %.0320383, 1 + %.tr = trunc i64 %86 to i32 + %87 = mul i32 %.tr, 25165834 + %88 = ptrtoint ptr %78 to i64 + %89 = and i64 %88, -2 + %90 = inttoptr i64 %89 to ptr + %91 = getelementptr inbounds nuw i8, ptr %90, i64 32 + %92 = load i64, ptr %91, align 8, !tbaa !70 + %.tr472 = trunc i64 %92 to i32 + %93 = shl i32 %.tr472, 1 + %94 = add i32 %87, %93 + %95 = mul i32 %94, 4256249 + %96 = lshr i32 %95, %31 + %97 = sext i32 %96 to i64 + %98 = getelementptr inbounds ptr, ptr %25, i64 %97 + %99 = load ptr, ptr %98, align 8, !tbaa !25 + store ptr %99, ptr %68, align 8, !tbaa !48 + store ptr %.2315384, ptr %98, align 8, !tbaa !25 + %100 = add nsw i32 %.0320383, 1 %.not = icmp eq ptr %69, null br i1 %.not, label %.preheader355, label %.lr.ph385, !llvm.loop !71 .preheader: ; preds = %.loopexit465, %.preheader355 - %.0325.lcssa = phi i32 [ 0, %.preheader355 ], [ %261, %.loopexit465 ] + %.0325.lcssa = phi i32 [ 0, %.preheader355 ], [ %254, %.loopexit465 ] %.1321.lcssa = phi i32 [ %.0320.lcssa, %.preheader355 ], [ %.3323, %.loopexit465 ] br i1 %33, label %.lr.ph425, label %._crit_edge426 .lr.ph425: ; preds = %.preheader - %108 = getelementptr inbounds nuw i8, ptr %0, i64 400 + %101 = getelementptr inbounds nuw i8, ptr %0, i64 400 %wide.trip.count443 = zext nneg i32 %29 to i64 - br label %265 + br label %258 .lr.ph403: ; preds = %.preheader355, %.loopexit465 - %.3316402 = phi ptr [ %110, %.loopexit465 ], [ %.0299.lcssa, %.preheader355 ] + %.3316402 = phi ptr [ %103, %.loopexit465 ], [ %.0299.lcssa, %.preheader355 ] %.1321401 = phi i32 [ %.3323, %.loopexit465 ], [ %.0320.lcssa, %.preheader355 ] - %.0325400 = phi i32 [ %261, %.loopexit465 ], [ 0, %.preheader355 ] - %109 = getelementptr inbounds nuw i8, ptr %.3316402, i64 8 - %110 = load ptr, ptr %109, align 8, !tbaa !48 - %111 = getelementptr inbounds nuw i8, ptr %.3316402, i64 16 + %.0325400 = phi i32 [ %254, %.loopexit465 ], [ 0, %.preheader355 ] + %102 = getelementptr inbounds nuw i8, ptr %.3316402, i64 8 + %103 = load ptr, ptr %102, align 8, !tbaa !48 + %104 = getelementptr inbounds nuw i8, ptr %.3316402, i64 16 + %105 = load ptr, ptr %104, align 8, !tbaa !64 + %106 = load i32, ptr %105, align 8, !tbaa !65 + %107 = icmp eq i32 %106, %23 + %108 = icmp eq i32 %106, %10 + %or.cond347 = select i1 %107, i1 true, i1 %108 + br i1 %or.cond347, label %109, label %113 + +109: ; preds = %.lr.ph403 + %110 = getelementptr inbounds nuw i8, ptr %105, i64 16 + %111 = getelementptr inbounds nuw i8, ptr %105, i64 24 %112 = load ptr, ptr %111, align 8, !tbaa !64 - %113 = load i32, ptr %112, align 8, !tbaa !65 - %114 = icmp eq i32 %113, %23 - %115 = icmp eq i32 %113, %10 - %or.cond347 = select i1 %114, i1 true, i1 %115 - br i1 %or.cond347, label %116, label %120 - -116: ; preds = %.lr.ph403 - %117 = getelementptr inbounds nuw i8, ptr %112, i64 16 - %118 = getelementptr inbounds nuw i8, ptr %112, i64 24 - %119 = load ptr, ptr %118, align 8, !tbaa !64 - br label %120 - -120: ; preds = %.lr.ph403, %116 - %.0312.in = phi ptr [ %117, %116 ], [ @empty, %.lr.ph403 ] - %.0311 = phi ptr [ %119, %116 ], [ %112, %.lr.ph403 ] + br label %113 + +113: ; preds = %.lr.ph403, %109 + %.0312.in = phi ptr [ %110, %109 ], [ @empty, %.lr.ph403 ] + %.0311 = phi ptr [ %112, %109 ], [ %105, %.lr.ph403 ] %.0312 = load ptr, ptr %.0312.in, align 8, !tbaa !64 - %121 = getelementptr inbounds nuw i8, ptr %.3316402, i64 24 + %114 = getelementptr inbounds nuw i8, ptr %.3316402, i64 24 + %115 = load ptr, ptr %114, align 8, !tbaa !64 + %116 = load i32, ptr %115, align 8, !tbaa !65 + %117 = icmp eq i32 %116, %23 + %118 = icmp eq i32 %116, %10 + %or.cond348 = select i1 %117, i1 true, i1 %118 + br i1 %or.cond348, label %119, label %123 + +119: ; preds = %113 + %120 = getelementptr inbounds nuw i8, ptr %115, i64 16 + %121 = getelementptr inbounds nuw i8, ptr %115, i64 24 %122 = load ptr, ptr %121, align 8, !tbaa !64 - %123 = load i32, ptr %122, align 8, !tbaa !65 - %124 = icmp eq i32 %123, %23 - %125 = icmp eq i32 %123, %10 - %or.cond348 = select i1 %124, i1 true, i1 %125 - br i1 %or.cond348, label %126, label %130 - -126: ; preds = %120 - %127 = getelementptr inbounds nuw i8, ptr %122, i64 16 - %128 = getelementptr inbounds nuw i8, ptr %122, i64 24 - %129 = load ptr, ptr %128, align 8, !tbaa !64 - br label %130 - -130: ; preds = %120, %126 - %.0310.in = phi ptr [ %127, %126 ], [ @empty, %120 ] - %.0309 = phi ptr [ %129, %126 ], [ %122, %120 ] + br label %123 + +123: ; preds = %113, %119 + %.0310.in = phi ptr [ %120, %119 ], [ @empty, %113 ] + %.0309 = phi ptr [ %122, %119 ], [ %115, %113 ] %.0310 = load ptr, ptr %.0310.in, align 8, !tbaa !64 - %131 = load ptr, ptr @empty, align 8, !tbaa !25 - %132 = icmp eq ptr %.0310, %131 - br i1 %132, label %.loopexit466, label %133 - -133: ; preds = %130 - %134 = ptrtoint ptr %.0310 to i64 - %135 = and i64 %134, -2 - %136 = inttoptr i64 %135 to ptr - %137 = getelementptr inbounds nuw i8, ptr %136, i64 32 - %138 = load i64, ptr %137, align 8, !tbaa !70 - %139 = shl i64 %138, 1 - %140 = and i64 %134, 1 - %141 = or disjoint i64 %139, %140 - %142 = trunc i64 %141 to i32 - %143 = mul i32 %142, 12582917 - %144 = ptrtoint ptr %.0311 to i64 - %145 = and i64 %144, -2 - %146 = inttoptr i64 %145 to ptr - %147 = getelementptr inbounds nuw i8, ptr %146, i64 32 - %148 = load i64, ptr %147, align 8, !tbaa !70 - %149 = shl i64 %148, 1 - %150 = and i64 %144, 1 - %151 = or disjoint i64 %149, %150 - %152 = trunc i64 %151 to i32 - %153 = add i32 %143, %152 - %154 = mul i32 %153, 4256249 - %155 = lshr i32 %154, %31 - %156 = sext i32 %155 to i64 - %157 = getelementptr inbounds ptr, ptr %25, i64 %156 - %.1306387 = load ptr, ptr %157, align 8, !tbaa !25 + %124 = load ptr, ptr @empty, align 8, !tbaa !25 + %125 = icmp eq ptr %.0310, %124 + br i1 %125, label %.loopexit466, label %126 + +126: ; preds = %123 + %127 = ptrtoint ptr %.0310 to i64 + %128 = and i64 %127, -2 + %129 = inttoptr i64 %128 to ptr + %130 = getelementptr inbounds nuw i8, ptr %129, i64 32 + %131 = load i64, ptr %130, align 8, !tbaa !70 + %132 = shl i64 %131, 1 + %133 = and i64 %127, 1 + %134 = or disjoint i64 %132, %133 + %135 = trunc i64 %134 to i32 + %136 = mul i32 %135, 12582917 + %137 = ptrtoint ptr %.0311 to i64 + %138 = and i64 %137, -2 + %139 = inttoptr i64 %138 to ptr + %140 = getelementptr inbounds nuw i8, ptr %139, i64 32 + %141 = load i64, ptr %140, align 8, !tbaa !70 + %142 = shl i64 %141, 1 + %143 = and i64 %137, 1 + %144 = or disjoint i64 %142, %143 + %145 = trunc i64 %144 to i32 + %146 = add i32 %136, %145 + %147 = mul i32 %146, 4256249 + %148 = lshr i32 %147, %31 + %149 = sext i32 %148 to i64 + %150 = getelementptr inbounds ptr, ptr %25, i64 %149 + %.1306387 = load ptr, ptr %150, align 8, !tbaa !25 %cond388 = icmp eq ptr %.1306387, null br i1 %cond388, label %._crit_edge392, label %.lr.ph391 -.lr.ph391: ; preds = %133, %168 - %.1306389 = phi ptr [ %.1306, %168 ], [ %.1306387, %133 ] - %158 = getelementptr inbounds nuw i8, ptr %.1306389, i64 16 - %159 = load ptr, ptr %158, align 8, !tbaa !64 - %160 = icmp eq ptr %159, %.0310 - br i1 %160, label %161, label %168 - -161: ; preds = %.lr.ph391 - %162 = getelementptr inbounds nuw i8, ptr %.1306389, i64 24 - %163 = load ptr, ptr %162, align 8, !tbaa !64 - %164 = icmp eq ptr %163, %.0311 - br i1 %164, label %165, label %168 - -165: ; preds = %161 - %166 = load i32, ptr %.1306389, align 8, !tbaa !65 - %167 = icmp eq i32 %166, %23 - br i1 %167, label %.loopexit466, label %168 - -168: ; preds = %165, %161, %.lr.ph391 - %169 = getelementptr inbounds nuw i8, ptr %.1306389, i64 8 - %.1306 = load ptr, ptr %169, align 8, !tbaa !25 +.lr.ph391: ; preds = %126, %161 + %.1306389 = phi ptr [ %.1306, %161 ], [ %.1306387, %126 ] + %151 = getelementptr inbounds nuw i8, ptr %.1306389, i64 16 + %152 = load ptr, ptr %151, align 8, !tbaa !64 + %153 = icmp eq ptr %152, %.0310 + br i1 %153, label %154, label %161 + +154: ; preds = %.lr.ph391 + %155 = getelementptr inbounds nuw i8, ptr %.1306389, i64 24 + %156 = load ptr, ptr %155, align 8, !tbaa !64 + %157 = icmp eq ptr %156, %.0311 + br i1 %157, label %158, label %161 + +158: ; preds = %154 + %159 = load i32, ptr %.1306389, align 8, !tbaa !65 + %160 = icmp eq i32 %159, %23 + br i1 %160, label %.loopexit466, label %161 + +161: ; preds = %158, %154, %.lr.ph391 + %162 = getelementptr inbounds nuw i8, ptr %.1306389, i64 8 + %.1306 = load ptr, ptr %162, align 8, !tbaa !25 %cond = icmp eq ptr %.1306, null br i1 %cond, label %._crit_edge392, label %.lr.ph391, !llvm.loop !72 -._crit_edge392: ; preds = %168, %133 - %170 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 - %171 = icmp eq ptr %170, null - br i1 %171, label %.loopexit, label %172 - -172: ; preds = %._crit_edge392 - store i32 %23, ptr %170, align 8, !tbaa !65 - %173 = getelementptr inbounds nuw i8, ptr %170, i64 4 - store i32 1, ptr %173, align 4, !tbaa !47 - %174 = getelementptr inbounds nuw i8, ptr %170, i64 16 - store ptr %.0310, ptr %174, align 8, !tbaa !64 - %175 = getelementptr inbounds nuw i8, ptr %170, i64 24 - store ptr %.0311, ptr %175, align 8, !tbaa !64 - %176 = add nsw i32 %.1321401, 1 - %177 = load ptr, ptr %157, align 8, !tbaa !25 - %178 = getelementptr inbounds nuw i8, ptr %170, i64 8 - store ptr %177, ptr %178, align 8, !tbaa !48 - store ptr %170, ptr %157, align 8, !tbaa !25 - %179 = getelementptr inbounds nuw i8, ptr %.0310, i64 4 - %180 = load i32, ptr %179, align 4, !tbaa !47 - %181 = add i32 %180, 1 - store i32 %181, ptr %179, align 4, !tbaa !47 +._crit_edge392: ; preds = %161, %126 + %163 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 + %164 = icmp eq ptr %163, null + br i1 %164, label %.loopexit, label %165 + +165: ; preds = %._crit_edge392 + store i32 %23, ptr %163, align 8, !tbaa !65 + %166 = getelementptr inbounds nuw i8, ptr %163, i64 4 + store i32 1, ptr %166, align 4, !tbaa !47 + %167 = getelementptr inbounds nuw i8, ptr %163, i64 16 + store ptr %.0310, ptr %167, align 8, !tbaa !64 + %168 = getelementptr inbounds nuw i8, ptr %163, i64 24 + store ptr %.0311, ptr %168, align 8, !tbaa !64 + %169 = add nsw i32 %.1321401, 1 + %170 = load ptr, ptr %150, align 8, !tbaa !25 + %171 = getelementptr inbounds nuw i8, ptr %163, i64 8 + store ptr %170, ptr %171, align 8, !tbaa !48 + store ptr %163, ptr %150, align 8, !tbaa !25 + %172 = getelementptr inbounds nuw i8, ptr %.0310, i64 4 + %173 = load i32, ptr %172, align 4, !tbaa !47 + %174 = add i32 %173, 1 + store i32 %174, ptr %172, align 4, !tbaa !47 br label %.loopexit466 -.loopexit466: ; preds = %165, %130, %172 - %.1306389.lcssa.sink = phi ptr [ %.0311, %172 ], [ %.0311, %130 ], [ %.1306389, %165 ] - %.2322 = phi i32 [ %176, %172 ], [ %.1321401, %130 ], [ %.1321401, %165 ] - %.0305 = phi ptr [ %170, %172 ], [ %.0311, %130 ], [ %.1306389, %165 ] - %182 = getelementptr inbounds nuw i8, ptr %.1306389.lcssa.sink, i64 4 - %183 = load i32, ptr %182, align 4, !tbaa !47 - %184 = add i32 %183, 1 - store i32 %184, ptr %182, align 4, !tbaa !47 - store ptr %.0305, ptr %111, align 8, !tbaa !64 - %185 = load ptr, ptr @empty, align 8, !tbaa !25 - %186 = icmp eq ptr %.0312, %185 - br i1 %186, label %.loopexit465, label %187 - -187: ; preds = %.loopexit466 - %188 = ptrtoint ptr %.0312 to i64 - %189 = and i64 %188, -2 - %190 = inttoptr i64 %189 to ptr - %191 = getelementptr inbounds nuw i8, ptr %190, i64 32 - %192 = load i64, ptr %191, align 8, !tbaa !70 - %193 = shl i64 %192, 1 - %194 = and i64 %188, 1 - %195 = or disjoint i64 %193, %194 - %196 = trunc i64 %195 to i32 - %197 = mul i32 %196, 12582917 - %198 = ptrtoint ptr %.0309 to i64 - %199 = and i64 %198, -2 - %200 = inttoptr i64 %199 to ptr - %201 = getelementptr inbounds nuw i8, ptr %200, i64 32 - %202 = load i64, ptr %201, align 8, !tbaa !70 - %203 = shl i64 %202, 1 - %204 = and i64 %198, 1 - %205 = or disjoint i64 %203, %204 - %206 = trunc i64 %205 to i32 - %207 = add i32 %197, %206 - %208 = mul i32 %207, 4256249 - %209 = lshr i32 %208, %31 - %210 = sext i32 %209 to i64 - %211 = getelementptr inbounds ptr, ptr %25, i64 %210 - %.1304393 = load ptr, ptr %211, align 8, !tbaa !25 +.loopexit466: ; preds = %158, %123, %165 + %.1306389.lcssa.sink = phi ptr [ %.0311, %165 ], [ %.0311, %123 ], [ %.1306389, %158 ] + %.2322 = phi i32 [ %169, %165 ], [ %.1321401, %123 ], [ %.1321401, %158 ] + %.0305 = phi ptr [ %163, %165 ], [ %.0311, %123 ], [ %.1306389, %158 ] + %175 = getelementptr inbounds nuw i8, ptr %.1306389.lcssa.sink, i64 4 + %176 = load i32, ptr %175, align 4, !tbaa !47 + %177 = add i32 %176, 1 + store i32 %177, ptr %175, align 4, !tbaa !47 + store ptr %.0305, ptr %104, align 8, !tbaa !64 + %178 = load ptr, ptr @empty, align 8, !tbaa !25 + %179 = icmp eq ptr %.0312, %178 + br i1 %179, label %.loopexit465, label %180 + +180: ; preds = %.loopexit466 + %181 = ptrtoint ptr %.0312 to i64 + %182 = and i64 %181, -2 + %183 = inttoptr i64 %182 to ptr + %184 = getelementptr inbounds nuw i8, ptr %183, i64 32 + %185 = load i64, ptr %184, align 8, !tbaa !70 + %186 = shl i64 %185, 1 + %187 = and i64 %181, 1 + %188 = or disjoint i64 %186, %187 + %189 = trunc i64 %188 to i32 + %190 = mul i32 %189, 12582917 + %191 = ptrtoint ptr %.0309 to i64 + %192 = and i64 %191, -2 + %193 = inttoptr i64 %192 to ptr + %194 = getelementptr inbounds nuw i8, ptr %193, i64 32 + %195 = load i64, ptr %194, align 8, !tbaa !70 + %196 = shl i64 %195, 1 + %197 = and i64 %191, 1 + %198 = or disjoint i64 %196, %197 + %199 = trunc i64 %198 to i32 + %200 = add i32 %190, %199 + %201 = mul i32 %200, 4256249 + %202 = lshr i32 %201, %31 + %203 = sext i32 %202 to i64 + %204 = getelementptr inbounds ptr, ptr %25, i64 %203 + %.1304393 = load ptr, ptr %204, align 8, !tbaa !25 %cond351394 = icmp eq ptr %.1304393, null br i1 %cond351394, label %._crit_edge398, label %.lr.ph397 -.lr.ph397: ; preds = %187, %222 - %.1304395 = phi ptr [ %.1304, %222 ], [ %.1304393, %187 ] - %212 = getelementptr inbounds nuw i8, ptr %.1304395, i64 16 - %213 = load ptr, ptr %212, align 8, !tbaa !64 - %214 = icmp eq ptr %213, %.0312 - br i1 %214, label %215, label %222 - -215: ; preds = %.lr.ph397 - %216 = getelementptr inbounds nuw i8, ptr %.1304395, i64 24 - %217 = load ptr, ptr %216, align 8, !tbaa !64 - %218 = icmp eq ptr %217, %.0309 - br i1 %218, label %219, label %222 - -219: ; preds = %215 - %220 = load i32, ptr %.1304395, align 8, !tbaa !65 - %221 = icmp eq i32 %220, %23 - br i1 %221, label %.loopexit465, label %222 - -222: ; preds = %219, %215, %.lr.ph397 - %223 = getelementptr inbounds nuw i8, ptr %.1304395, i64 8 - %.1304 = load ptr, ptr %223, align 8, !tbaa !25 +.lr.ph397: ; preds = %180, %215 + %.1304395 = phi ptr [ %.1304, %215 ], [ %.1304393, %180 ] + %205 = getelementptr inbounds nuw i8, ptr %.1304395, i64 16 + %206 = load ptr, ptr %205, align 8, !tbaa !64 + %207 = icmp eq ptr %206, %.0312 + br i1 %207, label %208, label %215 + +208: ; preds = %.lr.ph397 + %209 = getelementptr inbounds nuw i8, ptr %.1304395, i64 24 + %210 = load ptr, ptr %209, align 8, !tbaa !64 + %211 = icmp eq ptr %210, %.0309 + br i1 %211, label %212, label %215 + +212: ; preds = %208 + %213 = load i32, ptr %.1304395, align 8, !tbaa !65 + %214 = icmp eq i32 %213, %23 + br i1 %214, label %.loopexit465, label %215 + +215: ; preds = %212, %208, %.lr.ph397 + %216 = getelementptr inbounds nuw i8, ptr %.1304395, i64 8 + %.1304 = load ptr, ptr %216, align 8, !tbaa !25 %cond351 = icmp eq ptr %.1304, null br i1 %cond351, label %._crit_edge398, label %.lr.ph397, !llvm.loop !73 -._crit_edge398: ; preds = %222, %187 - %224 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 - %225 = icmp eq ptr %224, null - br i1 %225, label %.loopexit, label %226 - -226: ; preds = %._crit_edge398 - store i32 %23, ptr %224, align 8, !tbaa !65 - %227 = getelementptr inbounds nuw i8, ptr %224, i64 4 - store i32 1, ptr %227, align 4, !tbaa !47 - %228 = getelementptr inbounds nuw i8, ptr %224, i64 16 - store ptr %.0312, ptr %228, align 8, !tbaa !64 - %229 = getelementptr inbounds nuw i8, ptr %224, i64 24 - store ptr %.0309, ptr %229, align 8, !tbaa !64 - %230 = add nsw i32 %.2322, 1 - %231 = load ptr, ptr %211, align 8, !tbaa !25 - %232 = getelementptr inbounds nuw i8, ptr %224, i64 8 - store ptr %231, ptr %232, align 8, !tbaa !48 - store ptr %224, ptr %211, align 8, !tbaa !25 - %233 = getelementptr inbounds nuw i8, ptr %.0312, i64 4 - %234 = load i32, ptr %233, align 4, !tbaa !47 - %235 = add i32 %234, 1 - store i32 %235, ptr %233, align 4, !tbaa !47 +._crit_edge398: ; preds = %215, %180 + %217 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 + %218 = icmp eq ptr %217, null + br i1 %218, label %.loopexit, label %219 + +219: ; preds = %._crit_edge398 + store i32 %23, ptr %217, align 8, !tbaa !65 + %220 = getelementptr inbounds nuw i8, ptr %217, i64 4 + store i32 1, ptr %220, align 4, !tbaa !47 + %221 = getelementptr inbounds nuw i8, ptr %217, i64 16 + store ptr %.0312, ptr %221, align 8, !tbaa !64 + %222 = getelementptr inbounds nuw i8, ptr %217, i64 24 + store ptr %.0309, ptr %222, align 8, !tbaa !64 + %223 = add nsw i32 %.2322, 1 + %224 = load ptr, ptr %204, align 8, !tbaa !25 + %225 = getelementptr inbounds nuw i8, ptr %217, i64 8 + store ptr %224, ptr %225, align 8, !tbaa !48 + store ptr %217, ptr %204, align 8, !tbaa !25 + %226 = getelementptr inbounds nuw i8, ptr %.0312, i64 4 + %227 = load i32, ptr %226, align 4, !tbaa !47 + %228 = add i32 %227, 1 + store i32 %228, ptr %226, align 4, !tbaa !47 br label %.loopexit465 -.loopexit465: ; preds = %219, %.loopexit466, %226 - %.1304395.lcssa.sink = phi ptr [ %.0309, %226 ], [ %.0309, %.loopexit466 ], [ %.1304395, %219 ] - %.3323 = phi i32 [ %230, %226 ], [ %.2322, %.loopexit466 ], [ %.2322, %219 ] - %.0303 = phi ptr [ %224, %226 ], [ %.0309, %.loopexit466 ], [ %.1304395, %219 ] - %236 = getelementptr inbounds nuw i8, ptr %.1304395.lcssa.sink, i64 4 - %237 = load i32, ptr %236, align 4, !tbaa !47 - %238 = add i32 %237, 1 - store i32 %238, ptr %236, align 4, !tbaa !47 - store ptr %.0303, ptr %121, align 8, !tbaa !64 - %239 = ptrtoint ptr %.0305 to i64 - %240 = and i64 %239, -2 - %241 = inttoptr i64 %240 to ptr - %242 = getelementptr inbounds nuw i8, ptr %241, i64 32 - %243 = load i64, ptr %242, align 8, !tbaa !70 - %244 = shl i64 %243, 1 - %245 = and i64 %239, 1 - %246 = or disjoint i64 %244, %245 - %247 = trunc i64 %246 to i32 - %248 = mul i32 %247, 12582917 - %249 = ptrtoint ptr %.0303 to i64 - %250 = and i64 %249, -2 - %251 = inttoptr i64 %250 to ptr - %252 = getelementptr inbounds nuw i8, ptr %251, i64 32 - %253 = load i64, ptr %252, align 8, !tbaa !70 - %254 = shl i64 %253, 1 - %255 = and i64 %249, 1 - %256 = or disjoint i64 %254, %255 - %257 = trunc i64 %256 to i32 - %258 = add i32 %248, %257 - %259 = mul i32 %258, 4256249 - %260 = lshr i32 %259, %20 - %261 = add nuw nsw i32 %.0325400, 1 - %262 = sext i32 %260 to i64 - %263 = getelementptr inbounds ptr, ptr %14, i64 %262 - %264 = load ptr, ptr %263, align 8, !tbaa !25 - store ptr %264, ptr %109, align 8, !tbaa !48 - store ptr %.3316402, ptr %263, align 8, !tbaa !25 - %.not338 = icmp eq ptr %110, null +.loopexit465: ; preds = %212, %.loopexit466, %219 + %.1304395.lcssa.sink = phi ptr [ %.0309, %219 ], [ %.0309, %.loopexit466 ], [ %.1304395, %212 ] + %.3323 = phi i32 [ %223, %219 ], [ %.2322, %.loopexit466 ], [ %.2322, %212 ] + %.0303 = phi ptr [ %217, %219 ], [ %.0309, %.loopexit466 ], [ %.1304395, %212 ] + %229 = getelementptr inbounds nuw i8, ptr %.1304395.lcssa.sink, i64 4 + %230 = load i32, ptr %229, align 4, !tbaa !47 + %231 = add i32 %230, 1 + store i32 %231, ptr %229, align 4, !tbaa !47 + store ptr %.0303, ptr %114, align 8, !tbaa !64 + %232 = ptrtoint ptr %.0305 to i64 + %233 = and i64 %232, -2 + %234 = inttoptr i64 %233 to ptr + %235 = getelementptr inbounds nuw i8, ptr %234, i64 32 + %236 = load i64, ptr %235, align 8, !tbaa !70 + %237 = shl i64 %236, 1 + %238 = and i64 %232, 1 + %239 = or disjoint i64 %237, %238 + %240 = trunc i64 %239 to i32 + %241 = mul i32 %240, 12582917 + %242 = ptrtoint ptr %.0303 to i64 + %243 = and i64 %242, -2 + %244 = inttoptr i64 %243 to ptr + %245 = getelementptr inbounds nuw i8, ptr %244, i64 32 + %246 = load i64, ptr %245, align 8, !tbaa !70 + %247 = shl i64 %246, 1 + %248 = and i64 %242, 1 + %249 = or disjoint i64 %247, %248 + %250 = trunc i64 %249 to i32 + %251 = add i32 %241, %250 + %252 = mul i32 %251, 4256249 + %253 = lshr i32 %252, %20 + %254 = add nuw nsw i32 %.0325400, 1 + %255 = sext i32 %253 to i64 + %256 = getelementptr inbounds ptr, ptr %14, i64 %255 + %257 = load ptr, ptr %256, align 8, !tbaa !25 + store ptr %257, ptr %102, align 8, !tbaa !48 + store ptr %.3316402, ptr %256, align 8, !tbaa !25 + %.not338 = icmp eq ptr %103, null br i1 %.not338, label %.preheader, label %.lr.ph403, !llvm.loop !74 -265: ; preds = %.lr.ph425, %._crit_edge419 +258: ; preds = %.lr.ph425, %._crit_edge419 %indvars.iv440 = phi i64 [ 0, %.lr.ph425 ], [ %indvars.iv.next441, %._crit_edge419 ] %.4324423 = phi i32 [ %.1321.lcssa, %.lr.ph425 ], [ %.5.lcssa, %._crit_edge419 ] %.1326422 = phi i32 [ %.0325.lcssa, %.lr.ph425 ], [ %.2327.lcssa, %._crit_edge419 ] - %266 = getelementptr inbounds nuw ptr, ptr %25, i64 %indvars.iv440 - %267 = load ptr, ptr %266, align 8, !tbaa !25 - %.not339412 = icmp eq ptr %267, null + %259 = getelementptr inbounds nuw ptr, ptr %25, i64 %indvars.iv440 + %260 = load ptr, ptr %259, align 8, !tbaa !25 + %.not339412 = icmp eq ptr %260, null br i1 %.not339412, label %._crit_edge419, label %.lr.ph418 -.lr.ph418: ; preds = %265, %392 - %.0295416 = phi ptr [ %.1296, %392 ], [ null, %265 ] - %.4415 = phi ptr [ %269, %392 ], [ %267, %265 ] - %.5414 = phi i32 [ %.6, %392 ], [ %.4324423, %265 ] - %.2327413 = phi i32 [ %.3328, %392 ], [ %.1326422, %265 ] - %268 = getelementptr inbounds nuw i8, ptr %.4415, i64 8 - %269 = load ptr, ptr %268, align 8, !tbaa !48 - %270 = getelementptr inbounds nuw i8, ptr %.4415, i64 4 - %271 = load i32, ptr %270, align 4, !tbaa !47 - %272 = icmp eq i32 %271, 0 - br i1 %272, label %273, label %290 - -273: ; preds = %.lr.ph418 - %274 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 - %275 = load ptr, ptr %274, align 8, !tbaa !64 - %276 = getelementptr inbounds nuw i8, ptr %275, i64 4 - %277 = load i32, ptr %276, align 4, !tbaa !47 - %278 = add i32 %277, -1 - store i32 %278, ptr %276, align 4, !tbaa !47 - %279 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 - %280 = load ptr, ptr %279, align 8, !tbaa !64 - %281 = getelementptr inbounds nuw i8, ptr %280, i64 4 - %282 = load i32, ptr %281, align 4, !tbaa !47 - %283 = add i32 %282, -1 - store i32 %283, ptr %281, align 4, !tbaa !47 - %284 = load ptr, ptr %108, align 8, !tbaa !46 - store ptr %284, ptr %268, align 8, !tbaa !48 - store ptr %.4415, ptr %108, align 8, !tbaa !46 - %285 = add nsw i32 %.5414, -1 - %286 = icmp eq ptr %.0295416, null - br i1 %286, label %287, label %288 - -287: ; preds = %273 - store ptr %269, ptr %266, align 8, !tbaa !25 - br label %392 - -288: ; preds = %273 - %289 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 - store ptr %269, ptr %289, align 8, !tbaa !48 - br label %392 - -290: ; preds = %.lr.ph418 - %291 = load i32, ptr %.4415, align 8, !tbaa !65 - %292 = icmp eq i32 %291, %10 - br i1 %292, label %293, label %392 - -293: ; preds = %290 - %294 = icmp eq ptr %.0295416, null - br i1 %294, label %295, label %296 - -295: ; preds = %293 - store ptr %269, ptr %266, align 8, !tbaa !25 - br label %298 - -296: ; preds = %293 - %297 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 - store ptr %269, ptr %297, align 8, !tbaa !48 - br label %298 - -298: ; preds = %296, %295 - %299 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 - %300 = load ptr, ptr %299, align 8, !tbaa !64 - %301 = getelementptr inbounds nuw i8, ptr %300, i64 4 - %302 = load i32, ptr %301, align 4, !tbaa !47 - %303 = add i32 %302, -1 - store i32 %303, ptr %301, align 4, !tbaa !47 - %304 = ptrtoint ptr %300 to i64 +.lr.ph418: ; preds = %258, %381 + %.0295416 = phi ptr [ %.1296, %381 ], [ null, %258 ] + %.4415 = phi ptr [ %262, %381 ], [ %260, %258 ] + %.5414 = phi i32 [ %.6, %381 ], [ %.4324423, %258 ] + %.2327413 = phi i32 [ %.3328, %381 ], [ %.1326422, %258 ] + %261 = getelementptr inbounds nuw i8, ptr %.4415, i64 8 + %262 = load ptr, ptr %261, align 8, !tbaa !48 + %263 = getelementptr inbounds nuw i8, ptr %.4415, i64 4 + %264 = load i32, ptr %263, align 4, !tbaa !47 + %265 = icmp eq i32 %264, 0 + br i1 %265, label %266, label %283 + +266: ; preds = %.lr.ph418 + %267 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 + %268 = load ptr, ptr %267, align 8, !tbaa !64 + %269 = getelementptr inbounds nuw i8, ptr %268, i64 4 + %270 = load i32, ptr %269, align 4, !tbaa !47 + %271 = add i32 %270, -1 + store i32 %271, ptr %269, align 4, !tbaa !47 + %272 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 + %273 = load ptr, ptr %272, align 8, !tbaa !64 + %274 = getelementptr inbounds nuw i8, ptr %273, i64 4 + %275 = load i32, ptr %274, align 4, !tbaa !47 + %276 = add i32 %275, -1 + store i32 %276, ptr %274, align 4, !tbaa !47 + %277 = load ptr, ptr %101, align 8, !tbaa !46 + store ptr %277, ptr %261, align 8, !tbaa !48 + store ptr %.4415, ptr %101, align 8, !tbaa !46 + %278 = add nsw i32 %.5414, -1 + %279 = icmp eq ptr %.0295416, null + br i1 %279, label %280, label %281 + +280: ; preds = %266 + store ptr %262, ptr %259, align 8, !tbaa !25 + br label %381 + +281: ; preds = %266 + %282 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 + store ptr %262, ptr %282, align 8, !tbaa !48 + br label %381 + +283: ; preds = %.lr.ph418 + %284 = load i32, ptr %.4415, align 8, !tbaa !65 + %285 = icmp eq i32 %284, %10 + br i1 %285, label %286, label %381 + +286: ; preds = %283 + %287 = icmp eq ptr %.0295416, null + br i1 %287, label %288, label %289 + +288: ; preds = %286 + store ptr %262, ptr %259, align 8, !tbaa !25 + br label %291 + +289: ; preds = %286 + %290 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 + store ptr %262, ptr %290, align 8, !tbaa !48 + br label %291 + +291: ; preds = %289, %288 + %292 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 + %293 = load ptr, ptr %292, align 8, !tbaa !64 + %294 = getelementptr inbounds nuw i8, ptr %293, i64 4 + %295 = load i32, ptr %294, align 4, !tbaa !47 + %296 = add i32 %295, -1 + store i32 %296, ptr %294, align 4, !tbaa !47 + %297 = ptrtoint ptr %293 to i64 + %298 = and i64 %297, -2 + %299 = inttoptr i64 %298 to ptr + %300 = getelementptr inbounds nuw i8, ptr %299, i64 32 + %301 = load i64, ptr %300, align 8, !tbaa !70 + %.tr473 = trunc i64 %301 to i32 + %302 = mul i32 %.tr473, 25165834 + %303 = load ptr, ptr @empty, align 8, !tbaa !25 + %304 = ptrtoint ptr %303 to i64 %305 = and i64 %304, -2 %306 = inttoptr i64 %305 to ptr %307 = getelementptr inbounds nuw i8, ptr %306, i64 32 @@ -1415,176 +1418,165 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, %310 = and i64 %304, 1 %311 = or disjoint i64 %309, %310 %312 = trunc i64 %311 to i32 - %313 = mul i32 %312, 12582917 - %314 = load ptr, ptr @empty, align 8, !tbaa !25 - %315 = ptrtoint ptr %314 to i64 - %316 = and i64 %315, -2 - %317 = inttoptr i64 %316 to ptr - %318 = getelementptr inbounds nuw i8, ptr %317, i64 32 - %319 = load i64, ptr %318, align 8, !tbaa !70 - %320 = shl i64 %319, 1 - %321 = and i64 %315, 1 - %322 = or disjoint i64 %320, %321 - %323 = trunc i64 %322 to i32 - %324 = add i32 %313, %323 - %325 = mul i32 %324, 4256249 - %326 = lshr i32 %325, %31 - %327 = sext i32 %326 to i64 - %328 = getelementptr inbounds ptr, ptr %25, i64 %327 - %.2307406 = load ptr, ptr %328, align 8, !tbaa !25 + %313 = add i32 %302, %312 + %314 = mul i32 %313, 4256249 + %315 = lshr i32 %314, %31 + %316 = sext i32 %315 to i64 + %317 = getelementptr inbounds ptr, ptr %25, i64 %316 + %.2307406 = load ptr, ptr %317, align 8, !tbaa !25 %cond352407 = icmp eq ptr %.2307406, null br i1 %cond352407, label %._crit_edge411, label %.lr.ph410 -.lr.ph410: ; preds = %298, %344 - %.2307408 = phi ptr [ %.2307, %344 ], [ %.2307406, %298 ] - %329 = getelementptr inbounds nuw i8, ptr %.2307408, i64 16 - %330 = load ptr, ptr %329, align 8, !tbaa !64 - %331 = icmp eq ptr %330, %300 - br i1 %331, label %332, label %344 - -332: ; preds = %.lr.ph410 - %333 = getelementptr inbounds nuw i8, ptr %.2307408, i64 24 - %334 = load ptr, ptr %333, align 8, !tbaa !64 - %335 = icmp eq ptr %334, %314 - br i1 %335, label %336, label %344 - -336: ; preds = %332 - %337 = load i32, ptr %.2307408, align 8, !tbaa !65 - %338 = icmp eq i32 %337, %23 - br i1 %338, label %339, label %344 - -339: ; preds = %336 - %340 = getelementptr inbounds nuw i8, ptr %.2307408, i64 4 - %341 = load i32, ptr %340, align 4, !tbaa !47 - %342 = add i32 %341, 1 - store i32 %342, ptr %340, align 4, !tbaa !47 - %343 = add nsw i32 %.5414, -1 - br label %363 - -344: ; preds = %336, %332, %.lr.ph410 - %345 = getelementptr inbounds nuw i8, ptr %.2307408, i64 8 - %.2307 = load ptr, ptr %345, align 8, !tbaa !25 +.lr.ph410: ; preds = %291, %333 + %.2307408 = phi ptr [ %.2307, %333 ], [ %.2307406, %291 ] + %318 = getelementptr inbounds nuw i8, ptr %.2307408, i64 16 + %319 = load ptr, ptr %318, align 8, !tbaa !64 + %320 = icmp eq ptr %319, %293 + br i1 %320, label %321, label %333 + +321: ; preds = %.lr.ph410 + %322 = getelementptr inbounds nuw i8, ptr %.2307408, i64 24 + %323 = load ptr, ptr %322, align 8, !tbaa !64 + %324 = icmp eq ptr %323, %303 + br i1 %324, label %325, label %333 + +325: ; preds = %321 + %326 = load i32, ptr %.2307408, align 8, !tbaa !65 + %327 = icmp eq i32 %326, %23 + br i1 %327, label %328, label %333 + +328: ; preds = %325 + %329 = getelementptr inbounds nuw i8, ptr %.2307408, i64 4 + %330 = load i32, ptr %329, align 4, !tbaa !47 + %331 = add i32 %330, 1 + store i32 %331, ptr %329, align 4, !tbaa !47 + %332 = add nsw i32 %.5414, -1 + br label %352 + +333: ; preds = %325, %321, %.lr.ph410 + %334 = getelementptr inbounds nuw i8, ptr %.2307408, i64 8 + %.2307 = load ptr, ptr %334, align 8, !tbaa !25 %cond352 = icmp eq ptr %.2307, null br i1 %cond352, label %._crit_edge411, label %.lr.ph410, !llvm.loop !75 -._crit_edge411: ; preds = %344, %298 - %346 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 - %347 = icmp eq ptr %346, null - br i1 %347, label %.loopexit, label %348 - -348: ; preds = %._crit_edge411 - store i32 %23, ptr %346, align 8, !tbaa !65 - %349 = getelementptr inbounds nuw i8, ptr %346, i64 4 - store i32 1, ptr %349, align 4, !tbaa !47 - %350 = getelementptr inbounds nuw i8, ptr %346, i64 16 - store ptr %300, ptr %350, align 8, !tbaa !64 - %351 = load ptr, ptr @empty, align 8, !tbaa !25 - %352 = getelementptr inbounds nuw i8, ptr %346, i64 24 - store ptr %351, ptr %352, align 8, !tbaa !64 - %353 = load ptr, ptr %328, align 8, !tbaa !25 - %354 = getelementptr inbounds nuw i8, ptr %346, i64 8 - store ptr %353, ptr %354, align 8, !tbaa !48 - store ptr %346, ptr %328, align 8, !tbaa !25 - %355 = zext i32 %326 to i64 - %356 = icmp eq i64 %indvars.iv440, %355 - %or.cond = and i1 %294, %356 - %spec.select = select i1 %or.cond, ptr %346, ptr %.0295416 - %357 = load i32, ptr %301, align 4, !tbaa !47 - %358 = add i32 %357, 1 - store i32 %358, ptr %301, align 4, !tbaa !47 - %359 = load ptr, ptr @empty, align 8, !tbaa !25 - %360 = getelementptr inbounds nuw i8, ptr %359, i64 4 - %361 = load i32, ptr %360, align 4, !tbaa !47 - %362 = add i32 %361, 1 - store i32 %362, ptr %360, align 4, !tbaa !47 - br label %363 - -363: ; preds = %339, %348 - %.7 = phi i32 [ %.5414, %348 ], [ %343, %339 ] - %.3308 = phi ptr [ %346, %348 ], [ %.2307408, %339 ] - %.2297 = phi ptr [ %spec.select, %348 ], [ %.0295416, %339 ] - store ptr %.3308, ptr %299, align 8, !tbaa !64 - %364 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 - %365 = load ptr, ptr %364, align 8, !tbaa !64 - %366 = ptrtoint ptr %.3308 to i64 - %367 = and i64 %366, -2 - %368 = inttoptr i64 %367 to ptr - %369 = getelementptr inbounds nuw i8, ptr %368, i64 32 - %370 = load i64, ptr %369, align 8, !tbaa !70 - %371 = shl i64 %370, 1 - %372 = and i64 %366, 1 - %373 = or disjoint i64 %371, %372 - %374 = trunc i64 %373 to i32 - %375 = mul i32 %374, 12582917 - %376 = ptrtoint ptr %365 to i64 - %377 = and i64 %376, -2 - %378 = inttoptr i64 %377 to ptr - %379 = getelementptr inbounds nuw i8, ptr %378, i64 32 - %380 = load i64, ptr %379, align 8, !tbaa !70 - %381 = shl i64 %380, 1 - %382 = and i64 %376, 1 - %383 = or disjoint i64 %381, %382 - %384 = trunc i64 %383 to i32 - %385 = add i32 %375, %384 - %386 = mul i32 %385, 4256249 - %387 = lshr i32 %386, %20 - %388 = add nsw i32 %.2327413, 1 - %389 = sext i32 %387 to i64 - %390 = getelementptr inbounds ptr, ptr %14, i64 %389 - %391 = load ptr, ptr %390, align 8, !tbaa !25 - store ptr %391, ptr %268, align 8, !tbaa !48 - store ptr %.4415, ptr %390, align 8, !tbaa !25 - br label %392 - -392: ; preds = %290, %363, %287, %288 - %.3328 = phi i32 [ %.2327413, %287 ], [ %.2327413, %288 ], [ %388, %363 ], [ %.2327413, %290 ] - %.6 = phi i32 [ %285, %287 ], [ %285, %288 ], [ %.7, %363 ], [ %.5414, %290 ] - %.1296 = phi ptr [ null, %287 ], [ %.0295416, %288 ], [ %.2297, %363 ], [ %.4415, %290 ] - %.not339 = icmp eq ptr %269, null +._crit_edge411: ; preds = %333, %291 + %335 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 + %336 = icmp eq ptr %335, null + br i1 %336, label %.loopexit, label %337 + +337: ; preds = %._crit_edge411 + store i32 %23, ptr %335, align 8, !tbaa !65 + %338 = getelementptr inbounds nuw i8, ptr %335, i64 4 + store i32 1, ptr %338, align 4, !tbaa !47 + %339 = getelementptr inbounds nuw i8, ptr %335, i64 16 + store ptr %293, ptr %339, align 8, !tbaa !64 + %340 = load ptr, ptr @empty, align 8, !tbaa !25 + %341 = getelementptr inbounds nuw i8, ptr %335, i64 24 + store ptr %340, ptr %341, align 8, !tbaa !64 + %342 = load ptr, ptr %317, align 8, !tbaa !25 + %343 = getelementptr inbounds nuw i8, ptr %335, i64 8 + store ptr %342, ptr %343, align 8, !tbaa !48 + store ptr %335, ptr %317, align 8, !tbaa !25 + %344 = zext i32 %315 to i64 + %345 = icmp eq i64 %indvars.iv440, %344 + %or.cond = and i1 %287, %345 + %spec.select = select i1 %or.cond, ptr %335, ptr %.0295416 + %346 = load i32, ptr %294, align 4, !tbaa !47 + %347 = add i32 %346, 1 + store i32 %347, ptr %294, align 4, !tbaa !47 + %348 = load ptr, ptr @empty, align 8, !tbaa !25 + %349 = getelementptr inbounds nuw i8, ptr %348, i64 4 + %350 = load i32, ptr %349, align 4, !tbaa !47 + %351 = add i32 %350, 1 + store i32 %351, ptr %349, align 4, !tbaa !47 + br label %352 + +352: ; preds = %328, %337 + %.7 = phi i32 [ %.5414, %337 ], [ %332, %328 ] + %.3308 = phi ptr [ %335, %337 ], [ %.2307408, %328 ] + %.2297 = phi ptr [ %spec.select, %337 ], [ %.0295416, %328 ] + store ptr %.3308, ptr %292, align 8, !tbaa !64 + %353 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 + %354 = load ptr, ptr %353, align 8, !tbaa !64 + %355 = ptrtoint ptr %.3308 to i64 + %356 = and i64 %355, -2 + %357 = inttoptr i64 %356 to ptr + %358 = getelementptr inbounds nuw i8, ptr %357, i64 32 + %359 = load i64, ptr %358, align 8, !tbaa !70 + %360 = shl i64 %359, 1 + %361 = and i64 %355, 1 + %362 = or disjoint i64 %360, %361 + %363 = trunc i64 %362 to i32 + %364 = mul i32 %363, 12582917 + %365 = ptrtoint ptr %354 to i64 + %366 = and i64 %365, -2 + %367 = inttoptr i64 %366 to ptr + %368 = getelementptr inbounds nuw i8, ptr %367, i64 32 + %369 = load i64, ptr %368, align 8, !tbaa !70 + %370 = shl i64 %369, 1 + %371 = and i64 %365, 1 + %372 = or disjoint i64 %370, %371 + %373 = trunc i64 %372 to i32 + %374 = add i32 %364, %373 + %375 = mul i32 %374, 4256249 + %376 = lshr i32 %375, %20 + %377 = add nsw i32 %.2327413, 1 + %378 = sext i32 %376 to i64 + %379 = getelementptr inbounds ptr, ptr %14, i64 %378 + %380 = load ptr, ptr %379, align 8, !tbaa !25 + store ptr %380, ptr %261, align 8, !tbaa !48 + store ptr %.4415, ptr %379, align 8, !tbaa !25 + br label %381 + +381: ; preds = %283, %352, %280, %281 + %.3328 = phi i32 [ %.2327413, %280 ], [ %.2327413, %281 ], [ %377, %352 ], [ %.2327413, %283 ] + %.6 = phi i32 [ %278, %280 ], [ %278, %281 ], [ %.7, %352 ], [ %.5414, %283 ] + %.1296 = phi ptr [ null, %280 ], [ %.0295416, %281 ], [ %.2297, %352 ], [ %.4415, %283 ] + %.not339 = icmp eq ptr %262, null br i1 %.not339, label %._crit_edge419, label %.lr.ph418, !llvm.loop !76 -._crit_edge419: ; preds = %392, %265 - %.2327.lcssa = phi i32 [ %.1326422, %265 ], [ %.3328, %392 ] - %.5.lcssa = phi i32 [ %.4324423, %265 ], [ %.6, %392 ] +._crit_edge419: ; preds = %381, %258 + %.2327.lcssa = phi i32 [ %.1326422, %258 ], [ %.3328, %381 ] + %.5.lcssa = phi i32 [ %.4324423, %258 ], [ %.6, %381 ] %indvars.iv.next441 = add nuw nsw i64 %indvars.iv440, 1 %exitcond444.not = icmp eq i64 %indvars.iv.next441, %wide.trip.count443 - br i1 %exitcond444.not, label %._crit_edge426, label %265, !llvm.loop !77 + br i1 %exitcond444.not, label %._crit_edge426, label %258, !llvm.loop !77 ._crit_edge426: ; preds = %._crit_edge419, %.preheader %.1326.lcssa = phi i32 [ %.0325.lcssa, %.preheader ], [ %.2327.lcssa, %._crit_edge419 ] %.4324.lcssa = phi i32 [ %.1321.lcssa, %.preheader ], [ %.5.lcssa, %._crit_edge419 ] - %393 = load ptr, ptr %11, align 8, !tbaa !29 - %394 = getelementptr inbounds %struct.DdSubtable, ptr %393, i64 %8 - %395 = getelementptr inbounds nuw i8, ptr %394, i64 16 - store i32 %.1326.lcssa, ptr %395, align 8, !tbaa !31 - %396 = getelementptr inbounds %struct.DdSubtable, ptr %393, i64 %21 + %382 = load ptr, ptr %11, align 8, !tbaa !29 + %383 = getelementptr inbounds %struct.DdSubtable, ptr %382, i64 %8 + %384 = getelementptr inbounds nuw i8, ptr %383, i64 16 + store i32 %.1326.lcssa, ptr %384, align 8, !tbaa !31 + %385 = getelementptr inbounds %struct.DdSubtable, ptr %382, i64 %21 + %386 = getelementptr inbounds nuw i8, ptr %385, i64 16 + store i32 %.4324.lcssa, ptr %386, align 8, !tbaa !31 + %387 = add i32 %27, %16 + %388 = getelementptr inbounds nuw i8, ptr %0, i64 232 + %389 = load i32, ptr %388, align 8, !tbaa !36 + %390 = sub i32 %.1326.lcssa, %387 + %391 = add i32 %390, %.4324.lcssa + %392 = add i32 %391, %389 + store i32 %392, ptr %388, align 8, !tbaa !36 + %393 = getelementptr inbounds nuw i8, ptr %0, i64 360 + %394 = load ptr, ptr %393, align 8, !tbaa !78 + %395 = getelementptr inbounds ptr, ptr %394, i64 %8 + %396 = load ptr, ptr %395, align 8, !tbaa !25 %397 = getelementptr inbounds nuw i8, ptr %396, i64 16 - store i32 %.4324.lcssa, ptr %397, align 8, !tbaa !31 - %398 = add i32 %27, %16 - %399 = getelementptr inbounds nuw i8, ptr %0, i64 232 - %400 = load i32, ptr %399, align 8, !tbaa !36 - %401 = sub i32 %.1326.lcssa, %398 - %402 = add i32 %401, %.4324.lcssa - %403 = add i32 %402, %400 - store i32 %403, ptr %399, align 8, !tbaa !36 - %404 = getelementptr inbounds nuw i8, ptr %0, i64 360 - %405 = load ptr, ptr %404, align 8, !tbaa !78 - %406 = getelementptr inbounds ptr, ptr %405, i64 %8 - %407 = load ptr, ptr %406, align 8, !tbaa !25 - %408 = getelementptr inbounds nuw i8, ptr %407, i64 16 - %409 = load ptr, ptr %408, align 8, !tbaa !64 - %410 = getelementptr inbounds ptr, ptr %405, i64 %21 - store ptr %409, ptr %410, align 8, !tbaa !25 - br label %414 + %398 = load ptr, ptr %397, align 8, !tbaa !64 + %399 = getelementptr inbounds ptr, ptr %394, i64 %21 + store ptr %398, ptr %399, align 8, !tbaa !25 + br label %403 .loopexit: ; preds = %._crit_edge398, %._crit_edge392, %._crit_edge411 - %411 = getelementptr inbounds nuw i8, ptr %0, i64 616 - %412 = load ptr, ptr %411, align 8, !tbaa !52 - %413 = tail call i64 @fwrite(ptr nonnull @.str.1, i64 40, i64 1, ptr %412) - br label %414 + %400 = getelementptr inbounds nuw i8, ptr %0, i64 616 + %401 = load ptr, ptr %400, align 8, !tbaa !52 + %402 = tail call i64 @fwrite(ptr nonnull @.str.1, i64 40, i64 1, ptr %401) + br label %403 -414: ; preds = %.loopexit, %._crit_edge426 - %.0329 = phi i32 [ 0, %.loopexit ], [ %403, %._crit_edge426 ] +403: ; preds = %.loopexit, %._crit_edge426 + %.0329 = phi i32 [ 0, %.loopexit ], [ %392, %._crit_edge426 ] ret i32 %.0329 } diff --git a/bench/lean4/optimized/AndFlatten.ll b/bench/lean4/optimized/AndFlatten.ll index ab20e4f613b..6c5ec41f37d 100644 --- a/bench/lean4/optimized/AndFlatten.ll +++ b/bench/lean4/optimized/AndFlatten.ll @@ -13070,82 +13070,70 @@ lean_alloc_closure.exit: ; preds = %7 define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_andFlatteningPass_processGoal___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) local_unnamed_addr #1 { %11 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %11, align 8, !tbaa !12 - %12 = ptrtoint ptr %1 to i64 - %13 = and i64 %12, 1 - %.not = icmp eq i64 %13, 0 - br i1 %.not, label %14, label %lean_dec.exit16 + %12 = load i32, ptr %1, align 8, !tbaa !4 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 14: ; preds = %10 - %15 = load i32, ptr %1, align 4, !tbaa !4 - %16 = icmp sgt i32 %15, 1 - br i1 %16, label %17, label %19, !prof !11 - -17: ; preds = %14 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %1, align 4, !tbaa !4 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit16 -19: ; preds = %14 - %.not.i = icmp eq i32 %15, 0 - br i1 %.not.i, label %lean_dec.exit16, label %20 +16: ; preds = %10 + %.not.i = icmp eq i32 %12, 0 + br i1 %.not.i, label %lean_dec.exit16, label %17 -20: ; preds = %19 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %20, %19, %17, %10 - %21 = getelementptr i8, ptr %2, i64 8 - %.val21 = load i64, ptr %21, align 8, !tbaa !12 - %22 = ptrtoint ptr %2 to i64 - %23 = and i64 %22, 1 - %.not22 = icmp eq i64 %23, 0 - br i1 %.not22, label %24, label %lean_dec.exit15 - -24: ; preds = %lean_dec.exit16 - %25 = load i32, ptr %2, align 4, !tbaa !4 - %26 = icmp sgt i32 %25, 1 - br i1 %26, label %27, label %29, !prof !11 +lean_dec.exit16: ; preds = %17, %16, %14 + %18 = getelementptr i8, ptr %2, i64 8 + %.val21 = load i64, ptr %18, align 8, !tbaa !12 + %19 = load i32, ptr %2, align 8, !tbaa !4 + %20 = icmp sgt i32 %19, 1 + br i1 %20, label %21, label %23, !prof !11 -27: ; preds = %24 - %28 = add nsw i32 %25, -1 - store i32 %28, ptr %2, align 4, !tbaa !4 +21: ; preds = %lean_dec.exit16 + %22 = add nsw i32 %19, -1 + store i32 %22, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit15 -29: ; preds = %24 - %.not.i17 = icmp eq i32 %25, 0 - br i1 %.not.i17, label %lean_dec.exit15, label %30 +23: ; preds = %lean_dec.exit16 + %.not.i17 = icmp eq i32 %19, 0 + br i1 %.not.i17, label %lean_dec.exit15, label %24 -30: ; preds = %29 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit15 -lean_dec.exit15: ; preds = %30, %29, %27, %lean_dec.exit16 - %31 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_andFlatteningPass_processGoal___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val21, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) - %32 = ptrtoint ptr %0 to i64 - %33 = and i64 %32, 1 - %.not23 = icmp eq i64 %33, 0 - br i1 %.not23, label %34, label %lean_dec.exit +lean_dec.exit15: ; preds = %24, %23, %21 + %25 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_andFlatteningPass_processGoal___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val21, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) + %26 = ptrtoint ptr %0 to i64 + %27 = and i64 %26, 1 + %.not23 = icmp eq i64 %27, 0 + br i1 %.not23, label %28, label %lean_dec.exit -34: ; preds = %lean_dec.exit15 - %35 = load i32, ptr %0, align 4, !tbaa !4 - %36 = icmp sgt i32 %35, 1 - br i1 %36, label %37, label %39, !prof !11 +28: ; preds = %lean_dec.exit15 + %29 = load i32, ptr %0, align 4, !tbaa !4 + %30 = icmp sgt i32 %29, 1 + br i1 %30, label %31, label %33, !prof !11 -37: ; preds = %34 - %38 = add nsw i32 %35, -1 - store i32 %38, ptr %0, align 4, !tbaa !4 +31: ; preds = %28 + %32 = add nsw i32 %29, -1 + store i32 %32, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -39: ; preds = %34 - %.not.i19 = icmp eq i32 %35, 0 - br i1 %.not.i19, label %lean_dec.exit, label %40 +33: ; preds = %28 + %.not.i19 = icmp eq i32 %29, 0 + br i1 %.not.i19, label %lean_dec.exit, label %34 -40: ; preds = %39 +34: ; preds = %33 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %40, %39, %37, %lean_dec.exit15 - ret ptr %31 +lean_dec.exit: ; preds = %34, %33, %31, %lean_dec.exit15 + ret ptr %25 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Assumption.ll b/bench/lean4/optimized/Assumption.ll index c905357cc9d..6e99322bbc9 100644 --- a/bench/lean4/optimized/Assumption.ll +++ b/bench/lean4/optimized/Assumption.ll @@ -6169,30 +6169,24 @@ define ptr @l_Lean_LocalContext_findDeclRevM_x3f___at_Lean_Meta_findLocalDeclWit %8 = getelementptr inbounds nuw i8, ptr %1, i64 16 %9 = load ptr, ptr %8, align 8, !tbaa !11 %10 = tail call ptr @l_Lean_PersistentArray_findSomeRevM_x3f___at_Lean_Meta_findLocalDeclWithType_x3f___spec__2(ptr noundef %0, ptr noundef %9, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) - %11 = ptrtoint ptr %1 to i64 - %12 = and i64 %11, 1 - %.not = icmp eq i64 %12, 0 - br i1 %.not, label %13, label %lean_dec.exit + %11 = load i32, ptr %1, align 8, !tbaa !5 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !10 13: ; preds = %7 - %14 = load i32, ptr %1, align 4, !tbaa !5 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !10 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %1, align 4, !tbaa !5 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit -18: ; preds = %13 - %.not.i = icmp eq i32 %14, 0 - br i1 %.not.i, label %lean_dec.exit, label %19 +15: ; preds = %7 + %.not.i = icmp eq i32 %11, 0 + br i1 %.not.i, label %lean_dec.exit, label %16 -19: ; preds = %18 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %19, %18, %16, %7 +lean_dec.exit: ; preds = %16, %15, %13 ret ptr %10 } diff --git a/bench/lean4/optimized/Attach.ll b/bench/lean4/optimized/Attach.ll index 046da890f73..01c8b897ccd 100644 --- a/bench/lean4/optimized/Attach.ll +++ b/bench/lean4/optimized/Attach.ll @@ -205,58 +205,46 @@ lean_alloc_closure.exit: ; preds = %3 define ptr @l_Array_mapMUnsafe_map___at_Vector_pmap___spec__1___rarg___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #0 { %5 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !14 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit8 + %6 = load i32, ptr %1, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !9 8: ; preds = %4 - %9 = load i32, ptr %1, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !9 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit8 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit8, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit8, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %2, i64 8 - %.val11 = load i64, ptr %15, align 8, !tbaa !14 - %16 = ptrtoint ptr %2 to i64 - %17 = and i64 %16, 1 - %.not12 = icmp eq i64 %17, 0 - br i1 %.not12, label %18, label %lean_dec.exit - -18: ; preds = %lean_dec.exit8 - %19 = load i32, ptr %2, align 4, !tbaa !4 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !9 - -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %2, align 4, !tbaa !4 +lean_dec.exit8: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %2, i64 8 + %.val11 = load i64, ptr %12, align 8, !tbaa !14 + %13 = load i32, ptr %2, align 8, !tbaa !4 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !9 + +15: ; preds = %lean_dec.exit8 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -23: ; preds = %18 - %.not.i9 = icmp eq i32 %19, 0 - br i1 %.not.i9, label %lean_dec.exit, label %24 +17: ; preds = %lean_dec.exit8 + %.not.i9 = icmp eq i32 %13, 0 + br i1 %.not.i9, label %lean_dec.exit, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %24, %23, %21, %lean_dec.exit8 - %25 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_pmap___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) - ret ptr %25 +lean_dec.exit: ; preds = %18, %17, %15 + %19 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_pmap___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) + ret ptr %19 } ; Function Attrs: nounwind uwtable @@ -835,58 +823,46 @@ lean_alloc_closure.exit: ; preds = %3 define ptr @l_Array_mapMUnsafe_map___at___private_Init_Data_Vector_Attach_0__Vector_pmapImpl___spec__1___rarg___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #0 { %5 = getelementptr i8, ptr %1, i64 8 %.val11 = load i64, ptr %5, align 8, !tbaa !14 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit8 + %6 = load i32, ptr %1, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !9 8: ; preds = %4 - %9 = load i32, ptr %1, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !9 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit8 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit8, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit8, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %15, align 8, !tbaa !14 - %16 = ptrtoint ptr %2 to i64 - %17 = and i64 %16, 1 - %.not12 = icmp eq i64 %17, 0 - br i1 %.not12, label %18, label %lean_dec.exit - -18: ; preds = %lean_dec.exit8 - %19 = load i32, ptr %2, align 4, !tbaa !4 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !9 - -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %2, align 4, !tbaa !4 +lean_dec.exit8: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %12, align 8, !tbaa !14 + %13 = load i32, ptr %2, align 8, !tbaa !4 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !9 + +15: ; preds = %lean_dec.exit8 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -23: ; preds = %18 - %.not.i9 = icmp eq i32 %19, 0 - br i1 %.not.i9, label %lean_dec.exit, label %24 +17: ; preds = %lean_dec.exit8 + %.not.i9 = icmp eq i32 %13, 0 + br i1 %.not.i9, label %lean_dec.exit, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %24, %23, %21, %lean_dec.exit8 - %25 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Init_Data_Vector_Attach_0__Vector_pmapImpl___spec__1___rarg(ptr noundef %0, i64 noundef %.val11, i64 noundef %.val, ptr noundef %3) - ret ptr %25 +lean_dec.exit: ; preds = %18, %17, %15 + %19 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Init_Data_Vector_Attach_0__Vector_pmapImpl___spec__1___rarg(ptr noundef %0, i64 noundef %.val11, i64 noundef %.val, ptr noundef %3) + ret ptr %19 } ; Function Attrs: nounwind uwtable @@ -1120,58 +1096,46 @@ lean_alloc_closure.exit: ; preds = %2 define ptr @l_Array_mapMUnsafe_map___at_Vector_unattach___spec__1___rarg___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val10 = load i64, ptr %4, align 8, !tbaa !14 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !9 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !9 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %14, align 8, !tbaa !14 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !9 - -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !4 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %11, align 8, !tbaa !14 + %12 = load i32, ptr %1, align 8, !tbaa !4 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !9 + +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_unattach___spec__1___rarg(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_unattach___spec__1___rarg(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/AutoBound.ll b/bench/lean4/optimized/AutoBound.ll index c961dfdcfe6..b49d39240e6 100644 --- a/bench/lean4/optimized/AutoBound.ll +++ b/bench/lean4/optimized/AutoBound.ll @@ -774,123 +774,108 @@ lean_inc.exit24: %2 = shl i64 %.val, 1 %3 = add i64 %2, -1 %4 = inttoptr i64 %3 to ptr - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_inc.exit - -7: ; preds = %lean_inc.exit24 - %.val.i35 = load i32, ptr %0, align 4, !tbaa !10 - %8 = icmp sgt i32 %.val.i35, 0 - br i1 %8, label %9, label %11, !prof !14 + %.val.i35 = load i32, ptr %0, align 8, !tbaa !10 + %5 = icmp sgt i32 %.val.i35, 0 + br i1 %5, label %6, label %8, !prof !14 -9: ; preds = %7 - %10 = add nuw i32 %.val.i35, 1 - store i32 %10, ptr %0, align 4, !tbaa !10 +6: ; preds = %lean_inc.exit24 + %7 = add nuw i32 %.val.i35, 1 + store i32 %7, ptr %0, align 4, !tbaa !10 br label %lean_inc.exit -11: ; preds = %7 +8: ; preds = %lean_inc.exit24 %.not.i36 = icmp eq i32 %.val.i35, 0 - br i1 %.not.i36, label %lean_inc.exit, label %12 + br i1 %.not.i36, label %lean_inc.exit, label %9 -12: ; preds = %11 +9: ; preds = %8 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #3 br label %lean_inc.exit -lean_inc.exit: ; preds = %12, %11, %9, %lean_inc.exit24 +lean_inc.exit: ; preds = %9, %8, %6 tail call void @lean_inc_heartbeat() #3 - %13 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %14 = icmp eq ptr %13, null - br i1 %14, label %15, label %lean_alloc_ctor.exit + %10 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %11 = icmp eq ptr %10, null + br i1 %11, label %12, label %lean_alloc_ctor.exit -15: ; preds = %lean_inc.exit +12: ; preds = %lean_inc.exit tail call void @lean_internal_panic_out_of_memory() #4 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit - %16 = getelementptr inbounds nuw i8, ptr %13, i64 4 - store i32 1, ptr %13, align 4, !tbaa !10 - store i32 196640, ptr %16, align 4 - %17 = getelementptr inbounds nuw i8, ptr %13, i64 8 - store ptr %0, ptr %17, align 8, !tbaa !4 - %18 = getelementptr inbounds nuw i8, ptr %13, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %18, align 8, !tbaa !4 - %19 = getelementptr inbounds nuw i8, ptr %13, i64 24 - store ptr %4, ptr %19, align 8, !tbaa !4 - %20 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %13, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 - %21 = ptrtoint ptr %13 to i64 - %22 = and i64 %21, 1 - %.not39 = icmp eq i64 %22, 0 - br i1 %.not39, label %23, label %lean_dec.exit27 - -23: ; preds = %lean_alloc_ctor.exit - %24 = load i32, ptr %13, align 4, !tbaa !10 - %25 = icmp sgt i32 %24, 1 - br i1 %25, label %26, label %28, !prof !14 - -26: ; preds = %23 - %27 = add nsw i32 %24, -1 - store i32 %27, ptr %13, align 4, !tbaa !10 + %13 = getelementptr inbounds nuw i8, ptr %10, i64 4 + store i32 1, ptr %10, align 4, !tbaa !10 + store i32 196640, ptr %13, align 4 + %14 = getelementptr inbounds nuw i8, ptr %10, i64 8 + store ptr %0, ptr %14, align 8, !tbaa !4 + %15 = getelementptr inbounds nuw i8, ptr %10, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %15, align 8, !tbaa !4 + %16 = getelementptr inbounds nuw i8, ptr %10, i64 24 + store ptr %4, ptr %16, align 8, !tbaa !4 + %17 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %10, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 + %18 = load i32, ptr %10, align 8, !tbaa !10 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !14 + +20: ; preds = %lean_alloc_ctor.exit + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %10, align 4, !tbaa !10 br label %lean_dec.exit27 -28: ; preds = %23 - %.not.i = icmp eq i32 %24, 0 - br i1 %.not.i, label %lean_dec.exit27, label %29 +22: ; preds = %lean_alloc_ctor.exit + %.not.i = icmp eq i32 %18, 0 + br i1 %.not.i, label %lean_dec.exit27, label %23 -29: ; preds = %28 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %13) #3 +23: ; preds = %22 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %10) #3 br label %lean_dec.exit27 -lean_dec.exit27: ; preds = %lean_alloc_ctor.exit, %26, %28, %29 - %30 = ptrtoint ptr %20 to i64 - %31 = and i64 %30, 1 - %.not40 = icmp eq i64 %31, 0 - br i1 %.not40, label %32, label %lean_dec.exit25, !prof !15 - -32: ; preds = %lean_dec.exit27 - %33 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %20) #3 - %34 = load i32, ptr %20, align 4, !tbaa !10 - %35 = icmp sgt i32 %34, 1 - br i1 %35, label %36, label %38, !prof !14 - -36: ; preds = %32 - %37 = add nsw i32 %34, -1 - store i32 %37, ptr %20, align 4, !tbaa !10 +lean_dec.exit27: ; preds = %20, %22, %23 + %24 = ptrtoint ptr %17 to i64 + %25 = and i64 %24, 1 + %.not40 = icmp eq i64 %25, 0 + br i1 %.not40, label %26, label %lean_dec.exit25, !prof !15 + +26: ; preds = %lean_dec.exit27 + %27 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %17) #3 + %28 = load i32, ptr %17, align 4, !tbaa !10 + %29 = icmp sgt i32 %28, 1 + br i1 %29, label %30, label %32, !prof !14 + +30: ; preds = %26 + %31 = add nsw i32 %28, -1 + store i32 %31, ptr %17, align 4, !tbaa !10 br label %lean_dec.exit25 -38: ; preds = %32 - %.not.i28 = icmp eq i32 %34, 0 - br i1 %.not.i28, label %lean_dec.exit25, label %39 +32: ; preds = %26 + %.not.i28 = icmp eq i32 %28, 0 + br i1 %.not.i28, label %lean_dec.exit25, label %33 -39: ; preds = %38 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %20) #3 +33: ; preds = %32 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %17) #3 br label %lean_dec.exit25 -lean_dec.exit25: ; preds = %lean_dec.exit27, %36, %38, %39 - %.0.i48 = phi ptr [ %33, %36 ], [ %33, %38 ], [ %33, %39 ], [ %20, %lean_dec.exit27 ] - %40 = tail call zeroext i8 @l_String_anyAux___at___private_Lean_Elab_AutoBound_0__Lean_Elab_isValidAutoBoundSuffix___spec__1(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef %.0.i48) - br i1 %.not, label %41, label %lean_dec.exit - -41: ; preds = %lean_dec.exit25 - %42 = load i32, ptr %0, align 4, !tbaa !10 - %43 = icmp sgt i32 %42, 1 - br i1 %43, label %44, label %46, !prof !14 +lean_dec.exit25: ; preds = %lean_dec.exit27, %30, %32, %33 + %.0.i48 = phi ptr [ %27, %30 ], [ %27, %32 ], [ %27, %33 ], [ %17, %lean_dec.exit27 ] + %34 = tail call zeroext i8 @l_String_anyAux___at___private_Lean_Elab_AutoBound_0__Lean_Elab_isValidAutoBoundSuffix___spec__1(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef %.0.i48) + %35 = load i32, ptr %0, align 4, !tbaa !10 + %36 = icmp sgt i32 %35, 1 + br i1 %36, label %37, label %39, !prof !14 -44: ; preds = %41 - %45 = add nsw i32 %42, -1 - store i32 %45, ptr %0, align 4, !tbaa !10 +37: ; preds = %lean_dec.exit25 + %38 = add nsw i32 %35, -1 + store i32 %38, ptr %0, align 4, !tbaa !10 br label %lean_dec.exit -46: ; preds = %41 - %.not.i32 = icmp eq i32 %42, 0 - br i1 %.not.i32, label %lean_dec.exit, label %47 +39: ; preds = %lean_dec.exit25 + %.not.i32 = icmp eq i32 %35, 0 + br i1 %.not.i32, label %lean_dec.exit, label %40 -47: ; preds = %46 +40: ; preds = %39 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %47, %46, %44, %lean_dec.exit25 - %. = xor i8 %40, 1 +lean_dec.exit: ; preds = %40, %39, %37 + %. = xor i8 %34, 1 ret i8 %. } diff --git a/bench/lean4/optimized/AuxDeclCache.ll b/bench/lean4/optimized/AuxDeclCache.ll index 2e69ceffa0a..9b15440be49 100644 --- a/bench/lean4/optimized/AuxDeclCache.ll +++ b/bench/lean4/optimized/AuxDeclCache.ll @@ -5145,170 +5145,146 @@ lean_dec.exit: ; preds = %24, %23, %21, %lean define ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__3___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #1 { %4 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %1 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %1, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %1, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %1, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %3 - %14 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) - ret ptr %14 +lean_dec.exit: ; preds = %10, %9, %7 + %11 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) + ret ptr %11 } ; Function Attrs: nounwind uwtable define ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__7___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef readnone captures(none) %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #1 { %7 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %7, align 8, !tbaa !12 - %8 = ptrtoint ptr %0 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit11 + %8 = load i32, ptr %0, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !11 10: ; preds = %6 - %11 = load i32, ptr %0, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !11 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %0, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit11 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit11, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit11, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %16, %15, %13, %6 - %17 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__7(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) - %18 = ptrtoint ptr %2 to i64 - %19 = and i64 %18, 1 - %.not16 = icmp eq i64 %19, 0 - br i1 %.not16, label %20, label %lean_dec.exit10 - -20: ; preds = %lean_dec.exit11 - %21 = load i32, ptr %2, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !11 - -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %2, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %13, %12, %10 + %14 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__7(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) + %15 = ptrtoint ptr %2 to i64 + %16 = and i64 %15, 1 + %.not16 = icmp eq i64 %16, 0 + br i1 %.not16, label %17, label %lean_dec.exit10 + +17: ; preds = %lean_dec.exit11 + %18 = load i32, ptr %2, align 4, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 + +20: ; preds = %17 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit10 -25: ; preds = %20 - %.not.i12 = icmp eq i32 %21, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %26 +22: ; preds = %17 + %.not.i12 = icmp eq i32 %18, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %23 -26: ; preds = %25 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %26, %25, %23, %lean_dec.exit11 - %27 = ptrtoint ptr %1 to i64 - %28 = and i64 %27, 1 - %.not17 = icmp eq i64 %28, 0 - br i1 %.not17, label %29, label %lean_dec.exit +lean_dec.exit10: ; preds = %23, %22, %20, %lean_dec.exit11 + %24 = ptrtoint ptr %1 to i64 + %25 = and i64 %24, 1 + %.not17 = icmp eq i64 %25, 0 + br i1 %.not17, label %26, label %lean_dec.exit -29: ; preds = %lean_dec.exit10 - %30 = load i32, ptr %1, align 4, !tbaa !4 - %31 = icmp sgt i32 %30, 1 - br i1 %31, label %32, label %34, !prof !11 +26: ; preds = %lean_dec.exit10 + %27 = load i32, ptr %1, align 4, !tbaa !4 + %28 = icmp sgt i32 %27, 1 + br i1 %28, label %29, label %31, !prof !11 -32: ; preds = %29 - %33 = add nsw i32 %30, -1 - store i32 %33, ptr %1, align 4, !tbaa !4 +29: ; preds = %26 + %30 = add nsw i32 %27, -1 + store i32 %30, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -34: ; preds = %29 - %.not.i14 = icmp eq i32 %30, 0 - br i1 %.not.i14, label %lean_dec.exit, label %35 +31: ; preds = %26 + %.not.i14 = icmp eq i32 %27, 0 + br i1 %.not.i14, label %lean_dec.exit, label %32 -35: ; preds = %34 +32: ; preds = %31 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 - ret ptr %17 +lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit10 + ret ptr %14 } ; Function Attrs: nounwind uwtable define ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__6___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #1 { %6 = getelementptr i8, ptr %1, i64 8 %.val12 = load i64, ptr %6, align 8, !tbaa !12 - %7 = ptrtoint ptr %1 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit9 + %7 = load i32, ptr %1, align 8, !tbaa !4 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !11 9: ; preds = %5 - %10 = load i32, ptr %1, align 4, !tbaa !4 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !11 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %1, align 4, !tbaa !4 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit9 -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit9, label %15 +11: ; preds = %5 + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit9, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %15, %14, %12, %5 - %16 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %16, align 8, !tbaa !12 - %17 = ptrtoint ptr %2 to i64 - %18 = and i64 %17, 1 - %.not13 = icmp eq i64 %18, 0 - br i1 %.not13, label %19, label %lean_dec.exit +lean_dec.exit9: ; preds = %12, %11, %9 + %13 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %13, align 8, !tbaa !12 + %14 = load i32, ptr %2, align 8, !tbaa !4 + %15 = icmp sgt i32 %14, 1 + br i1 %15, label %16, label %18, !prof !11 -19: ; preds = %lean_dec.exit9 - %20 = load i32, ptr %2, align 4, !tbaa !4 - %21 = icmp sgt i32 %20, 1 - br i1 %21, label %22, label %24, !prof !11 - -22: ; preds = %19 - %23 = add nsw i32 %20, -1 - store i32 %23, ptr %2, align 4, !tbaa !4 +16: ; preds = %lean_dec.exit9 + %17 = add nsw i32 %14, -1 + store i32 %17, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -24: ; preds = %19 - %.not.i10 = icmp eq i32 %20, 0 - br i1 %.not.i10, label %lean_dec.exit, label %25 +18: ; preds = %lean_dec.exit9 + %.not.i10 = icmp eq i32 %14, 0 + br i1 %.not.i10, label %lean_dec.exit, label %19 -25: ; preds = %24 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %25, %24, %22, %lean_dec.exit9 - %26 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__6(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) - ret ptr %26 +lean_dec.exit: ; preds = %19, %18, %16 + %20 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__6(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) + ret ptr %20 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/AuxLemma.ll b/bench/lean4/optimized/AuxLemma.ll index e0008246198..b0b176eed7e 100644 --- a/bench/lean4/optimized/AuxLemma.ll +++ b/bench/lean4/optimized/AuxLemma.ll @@ -9989,138 +9989,120 @@ lean_dec.exit: ; preds = %43, %42, %40, %lean define ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Meta_mkAuxLemma___spec__4___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef readnone captures(none) %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #1 { %7 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %7, align 8, !tbaa !12 - %8 = ptrtoint ptr %0 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit11 + %8 = load i32, ptr %0, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !11 10: ; preds = %6 - %11 = load i32, ptr %0, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !11 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %0, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit11 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit11, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit11, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %16, %15, %13, %6 - %17 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Meta_mkAuxLemma___spec__4(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) - %18 = ptrtoint ptr %2 to i64 - %19 = and i64 %18, 1 - %.not16 = icmp eq i64 %19, 0 - br i1 %.not16, label %20, label %lean_dec.exit10 - -20: ; preds = %lean_dec.exit11 - %21 = load i32, ptr %2, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !11 - -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %2, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %13, %12, %10 + %14 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Meta_mkAuxLemma___spec__4(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) + %15 = ptrtoint ptr %2 to i64 + %16 = and i64 %15, 1 + %.not16 = icmp eq i64 %16, 0 + br i1 %.not16, label %17, label %lean_dec.exit10 + +17: ; preds = %lean_dec.exit11 + %18 = load i32, ptr %2, align 4, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 + +20: ; preds = %17 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit10 -25: ; preds = %20 - %.not.i12 = icmp eq i32 %21, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %26 +22: ; preds = %17 + %.not.i12 = icmp eq i32 %18, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %23 -26: ; preds = %25 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %26, %25, %23, %lean_dec.exit11 - %27 = ptrtoint ptr %1 to i64 - %28 = and i64 %27, 1 - %.not17 = icmp eq i64 %28, 0 - br i1 %.not17, label %29, label %lean_dec.exit +lean_dec.exit10: ; preds = %23, %22, %20, %lean_dec.exit11 + %24 = ptrtoint ptr %1 to i64 + %25 = and i64 %24, 1 + %.not17 = icmp eq i64 %25, 0 + br i1 %.not17, label %26, label %lean_dec.exit -29: ; preds = %lean_dec.exit10 - %30 = load i32, ptr %1, align 4, !tbaa !4 - %31 = icmp sgt i32 %30, 1 - br i1 %31, label %32, label %34, !prof !11 +26: ; preds = %lean_dec.exit10 + %27 = load i32, ptr %1, align 4, !tbaa !4 + %28 = icmp sgt i32 %27, 1 + br i1 %28, label %29, label %31, !prof !11 -32: ; preds = %29 - %33 = add nsw i32 %30, -1 - store i32 %33, ptr %1, align 4, !tbaa !4 +29: ; preds = %26 + %30 = add nsw i32 %27, -1 + store i32 %30, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -34: ; preds = %29 - %.not.i14 = icmp eq i32 %30, 0 - br i1 %.not.i14, label %lean_dec.exit, label %35 +31: ; preds = %26 + %.not.i14 = icmp eq i32 %27, 0 + br i1 %.not.i14, label %lean_dec.exit, label %32 -35: ; preds = %34 +32: ; preds = %31 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 - ret ptr %17 +lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit10 + ret ptr %14 } ; Function Attrs: nounwind uwtable define ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Meta_mkAuxLemma___spec__3___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #1 { %6 = getelementptr i8, ptr %1, i64 8 %.val12 = load i64, ptr %6, align 8, !tbaa !12 - %7 = ptrtoint ptr %1 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit9 + %7 = load i32, ptr %1, align 8, !tbaa !4 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !11 9: ; preds = %5 - %10 = load i32, ptr %1, align 4, !tbaa !4 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !11 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %1, align 4, !tbaa !4 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit9 -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit9, label %15 +11: ; preds = %5 + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit9, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %15, %14, %12, %5 - %16 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %16, align 8, !tbaa !12 - %17 = ptrtoint ptr %2 to i64 - %18 = and i64 %17, 1 - %.not13 = icmp eq i64 %18, 0 - br i1 %.not13, label %19, label %lean_dec.exit - -19: ; preds = %lean_dec.exit9 - %20 = load i32, ptr %2, align 4, !tbaa !4 - %21 = icmp sgt i32 %20, 1 - br i1 %21, label %22, label %24, !prof !11 +lean_dec.exit9: ; preds = %12, %11, %9 + %13 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %13, align 8, !tbaa !12 + %14 = load i32, ptr %2, align 8, !tbaa !4 + %15 = icmp sgt i32 %14, 1 + br i1 %15, label %16, label %18, !prof !11 -22: ; preds = %19 - %23 = add nsw i32 %20, -1 - store i32 %23, ptr %2, align 4, !tbaa !4 +16: ; preds = %lean_dec.exit9 + %17 = add nsw i32 %14, -1 + store i32 %17, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -24: ; preds = %19 - %.not.i10 = icmp eq i32 %20, 0 - br i1 %.not.i10, label %lean_dec.exit, label %25 +18: ; preds = %lean_dec.exit9 + %.not.i10 = icmp eq i32 %14, 0 + br i1 %.not.i10, label %lean_dec.exit, label %19 -25: ; preds = %24 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %25, %24, %22, %lean_dec.exit9 - %26 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Meta_mkAuxLemma___spec__3(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) - ret ptr %26 +lean_dec.exit: ; preds = %19, %18, %16 + %20 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Meta_mkAuxLemma___spec__3(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) + ret ptr %20 } ; Function Attrs: nounwind uwtable @@ -10205,56 +10187,50 @@ lean_dec.exit: ; preds = %33, %32, %30, %lean define ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Meta_mkAuxLemma___spec__7___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #1 { %4 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %1 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit6 + %5 = load i32, ptr %1, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %1, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %1, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit6 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit6, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit6, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit6 -lean_dec.exit6: ; preds = %13, %12, %10, %3 - %14 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Meta_mkAuxLemma___spec__7(ptr noundef %0, i64 noundef %.val, ptr noundef %2) - %15 = ptrtoint ptr %2 to i64 - %16 = and i64 %15, 1 - %.not9 = icmp eq i64 %16, 0 - br i1 %.not9, label %17, label %lean_dec.exit +lean_dec.exit6: ; preds = %10, %9, %7 + %11 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Meta_mkAuxLemma___spec__7(ptr noundef %0, i64 noundef %.val, ptr noundef %2) + %12 = ptrtoint ptr %2 to i64 + %13 = and i64 %12, 1 + %.not9 = icmp eq i64 %13, 0 + br i1 %.not9, label %14, label %lean_dec.exit -17: ; preds = %lean_dec.exit6 - %18 = load i32, ptr %2, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +14: ; preds = %lean_dec.exit6 + %15 = load i32, ptr %2, align 4, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %2, align 4, !tbaa !4 +17: ; preds = %14 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -22: ; preds = %17 - %.not.i7 = icmp eq i32 %18, 0 - br i1 %.not.i7, label %lean_dec.exit, label %23 +19: ; preds = %14 + %.not.i7 = icmp eq i32 %15, 0 + br i1 %.not.i7, label %lean_dec.exit, label %20 -23: ; preds = %22 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit6 - ret ptr %14 +lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit6 + ret ptr %11 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ByteArray.ll b/bench/lean4/optimized/ByteArray.ll index 013251bd4f8..c792a6f95d6 100644 --- a/bench/lean4/optimized/ByteArray.ll +++ b/bench/lean4/optimized/ByteArray.ll @@ -729,35 +729,29 @@ define nonnull ptr @l_Std_Internal_Parsec_ByteArray_instInputIteratorUInt8Nat___ %9 = getelementptr inbounds nuw i8, ptr %4, i64 24 %10 = getelementptr inbounds nuw i8, ptr %9, i64 %8 %11 = load i8, ptr %10, align 1, !tbaa !15 - %12 = ptrtoint ptr %0 to i64 - %13 = and i64 %12, 1 - %.not = icmp eq i64 %13, 0 - br i1 %.not, label %14, label %lean_dec.exit + %12 = load i32, ptr %0, align 8, !tbaa !8 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 14: ; preds = %2 - %15 = load i32, ptr %0, align 4, !tbaa !8 - %16 = icmp sgt i32 %15, 1 - br i1 %16, label %17, label %19, !prof !11 - -17: ; preds = %14 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %0, align 4, !tbaa !8 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -19: ; preds = %14 - %.not.i = icmp eq i32 %15, 0 - br i1 %.not.i, label %lean_dec.exit, label %20 +16: ; preds = %2 + %.not.i = icmp eq i32 %12, 0 + br i1 %.not.i, label %lean_dec.exit, label %17 -20: ; preds = %19 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %20, %19, %17, %2 - %21 = zext i8 %11 to i64 - %22 = shl nuw nsw i64 %21, 1 - %23 = or disjoint i64 %22, 1 - %24 = inttoptr i64 %23 to ptr - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = zext i8 %11 to i64 + %19 = shl nuw nsw i64 %18, 1 + %20 = or disjoint i64 %19, 1 + %21 = inttoptr i64 %20 to ptr + ret ptr %21 } ; Function Attrs: nounwind uwtable @@ -2473,82 +2467,70 @@ lean_alloc_ctor.exit54: ; preds = %lean_dec.exit define noalias noundef nonnull ptr @l_ByteArray_forInUnsafe_loop___at_Std_Internal_Parsec_ByteArray_skipBytes___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 { %6 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %6, align 8, !tbaa !13 - %7 = ptrtoint ptr %1 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit11 + %7 = load i32, ptr %1, align 8, !tbaa !8 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !11 9: ; preds = %5 - %10 = load i32, ptr %1, align 4, !tbaa !8 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !11 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %1, align 4, !tbaa !8 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit11 -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit11, label %15 +11: ; preds = %5 + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit11, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %15, %14, %12, %5 - %16 = getelementptr i8, ptr %2, i64 8 - %.val16 = load i64, ptr %16, align 8, !tbaa !13 - %17 = ptrtoint ptr %2 to i64 - %18 = and i64 %17, 1 - %.not17 = icmp eq i64 %18, 0 - br i1 %.not17, label %19, label %lean_dec.exit10 - -19: ; preds = %lean_dec.exit11 - %20 = load i32, ptr %2, align 4, !tbaa !8 - %21 = icmp sgt i32 %20, 1 - br i1 %21, label %22, label %24, !prof !11 +lean_dec.exit11: ; preds = %12, %11, %9 + %13 = getelementptr i8, ptr %2, i64 8 + %.val16 = load i64, ptr %13, align 8, !tbaa !13 + %14 = load i32, ptr %2, align 8, !tbaa !8 + %15 = icmp sgt i32 %14, 1 + br i1 %15, label %16, label %18, !prof !11 -22: ; preds = %19 - %23 = add nsw i32 %20, -1 - store i32 %23, ptr %2, align 4, !tbaa !8 +16: ; preds = %lean_dec.exit11 + %17 = add nsw i32 %14, -1 + store i32 %17, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit10 -24: ; preds = %19 - %.not.i12 = icmp eq i32 %20, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %25 +18: ; preds = %lean_dec.exit11 + %.not.i12 = icmp eq i32 %14, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %19 -25: ; preds = %24 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #6 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %25, %24, %22, %lean_dec.exit11 - %26 = tail call ptr @l_ByteArray_forInUnsafe_loop___at_Std_Internal_Parsec_ByteArray_skipBytes___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val16, ptr noundef %3, ptr noundef %4) - %27 = ptrtoint ptr %0 to i64 - %28 = and i64 %27, 1 - %.not18 = icmp eq i64 %28, 0 - br i1 %.not18, label %29, label %lean_dec.exit +lean_dec.exit10: ; preds = %19, %18, %16 + %20 = tail call ptr @l_ByteArray_forInUnsafe_loop___at_Std_Internal_Parsec_ByteArray_skipBytes___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val16, ptr noundef %3, ptr noundef %4) + %21 = ptrtoint ptr %0 to i64 + %22 = and i64 %21, 1 + %.not18 = icmp eq i64 %22, 0 + br i1 %.not18, label %23, label %lean_dec.exit -29: ; preds = %lean_dec.exit10 - %30 = load i32, ptr %0, align 4, !tbaa !8 - %31 = icmp sgt i32 %30, 1 - br i1 %31, label %32, label %34, !prof !11 +23: ; preds = %lean_dec.exit10 + %24 = load i32, ptr %0, align 4, !tbaa !8 + %25 = icmp sgt i32 %24, 1 + br i1 %25, label %26, label %28, !prof !11 -32: ; preds = %29 - %33 = add nsw i32 %30, -1 - store i32 %33, ptr %0, align 4, !tbaa !8 +26: ; preds = %23 + %27 = add nsw i32 %24, -1 + store i32 %27, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -34: ; preds = %29 - %.not.i14 = icmp eq i32 %30, 0 - br i1 %.not.i14, label %lean_dec.exit, label %35 +28: ; preds = %23 + %.not.i14 = icmp eq i32 %24, 0 + br i1 %.not.i14, label %lean_dec.exit, label %29 -35: ; preds = %34 +29: ; preds = %28 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 - ret ptr %26 +lean_dec.exit: ; preds = %29, %28, %26, %lean_dec.exit10 + ret ptr %20 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CSE.ll b/bench/lean4/optimized/CSE.ll index 9d2ffe7457b..29b4d149f51 100644 --- a/bench/lean4/optimized/CSE.ll +++ b/bench/lean4/optimized/CSE.ll @@ -4839,138 +4839,120 @@ lean_alloc_ctor.exit103: ; preds = %161 define ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_CSE_addEntry___spec__3___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef readnone captures(none) %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #1 { %7 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %7, align 8, !tbaa !12 - %8 = ptrtoint ptr %0 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit11 + %8 = load i32, ptr %0, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !11 10: ; preds = %6 - %11 = load i32, ptr %0, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !11 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %0, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit11 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit11, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit11, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %16, %15, %13, %6 - %17 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_CSE_addEntry___spec__3(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) - %18 = ptrtoint ptr %2 to i64 - %19 = and i64 %18, 1 - %.not16 = icmp eq i64 %19, 0 - br i1 %.not16, label %20, label %lean_dec.exit10 +lean_dec.exit11: ; preds = %13, %12, %10 + %14 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_CSE_addEntry___spec__3(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) + %15 = ptrtoint ptr %2 to i64 + %16 = and i64 %15, 1 + %.not16 = icmp eq i64 %16, 0 + br i1 %.not16, label %17, label %lean_dec.exit10 -20: ; preds = %lean_dec.exit11 - %21 = load i32, ptr %2, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !11 +17: ; preds = %lean_dec.exit11 + %18 = load i32, ptr %2, align 4, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %2, align 4, !tbaa !4 +20: ; preds = %17 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit10 -25: ; preds = %20 - %.not.i12 = icmp eq i32 %21, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %26 +22: ; preds = %17 + %.not.i12 = icmp eq i32 %18, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %23 -26: ; preds = %25 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %26, %25, %23, %lean_dec.exit11 - %27 = ptrtoint ptr %1 to i64 - %28 = and i64 %27, 1 - %.not17 = icmp eq i64 %28, 0 - br i1 %.not17, label %29, label %lean_dec.exit +lean_dec.exit10: ; preds = %23, %22, %20, %lean_dec.exit11 + %24 = ptrtoint ptr %1 to i64 + %25 = and i64 %24, 1 + %.not17 = icmp eq i64 %25, 0 + br i1 %.not17, label %26, label %lean_dec.exit -29: ; preds = %lean_dec.exit10 - %30 = load i32, ptr %1, align 4, !tbaa !4 - %31 = icmp sgt i32 %30, 1 - br i1 %31, label %32, label %34, !prof !11 +26: ; preds = %lean_dec.exit10 + %27 = load i32, ptr %1, align 4, !tbaa !4 + %28 = icmp sgt i32 %27, 1 + br i1 %28, label %29, label %31, !prof !11 -32: ; preds = %29 - %33 = add nsw i32 %30, -1 - store i32 %33, ptr %1, align 4, !tbaa !4 +29: ; preds = %26 + %30 = add nsw i32 %27, -1 + store i32 %30, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -34: ; preds = %29 - %.not.i14 = icmp eq i32 %30, 0 - br i1 %.not.i14, label %lean_dec.exit, label %35 +31: ; preds = %26 + %.not.i14 = icmp eq i32 %27, 0 + br i1 %.not.i14, label %lean_dec.exit, label %32 -35: ; preds = %34 +32: ; preds = %31 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 - ret ptr %17 +lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit10 + ret ptr %14 } ; Function Attrs: nounwind uwtable define ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_CSE_addEntry___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #1 { %6 = getelementptr i8, ptr %1, i64 8 %.val12 = load i64, ptr %6, align 8, !tbaa !12 - %7 = ptrtoint ptr %1 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit9 + %7 = load i32, ptr %1, align 8, !tbaa !4 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !11 9: ; preds = %5 - %10 = load i32, ptr %1, align 4, !tbaa !4 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !11 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %1, align 4, !tbaa !4 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit9 -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit9, label %15 +11: ; preds = %5 + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit9, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %15, %14, %12, %5 - %16 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %16, align 8, !tbaa !12 - %17 = ptrtoint ptr %2 to i64 - %18 = and i64 %17, 1 - %.not13 = icmp eq i64 %18, 0 - br i1 %.not13, label %19, label %lean_dec.exit - -19: ; preds = %lean_dec.exit9 - %20 = load i32, ptr %2, align 4, !tbaa !4 - %21 = icmp sgt i32 %20, 1 - br i1 %21, label %22, label %24, !prof !11 +lean_dec.exit9: ; preds = %12, %11, %9 + %13 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %13, align 8, !tbaa !12 + %14 = load i32, ptr %2, align 8, !tbaa !4 + %15 = icmp sgt i32 %14, 1 + br i1 %15, label %16, label %18, !prof !11 -22: ; preds = %19 - %23 = add nsw i32 %20, -1 - store i32 %23, ptr %2, align 4, !tbaa !4 +16: ; preds = %lean_dec.exit9 + %17 = add nsw i32 %14, -1 + store i32 %17, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -24: ; preds = %19 - %.not.i10 = icmp eq i32 %20, 0 - br i1 %.not.i10, label %lean_dec.exit, label %25 +18: ; preds = %lean_dec.exit9 + %.not.i10 = icmp eq i32 %14, 0 + br i1 %.not.i10, label %lean_dec.exit, label %19 -25: ; preds = %24 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %25, %24, %22, %lean_dec.exit9 - %26 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_CSE_addEntry___spec__2(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) - ret ptr %26 +lean_dec.exit: ; preds = %19, %18, %16 + %20 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_CSE_addEntry___spec__2(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) + ret ptr %20 } ; Function Attrs: nounwind uwtable @@ -35747,56 +35729,50 @@ lean_dec.exit: ; preds = %33, %32, %30, %lean define ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_Code_cse_go___spec__3___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #1 { %4 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %1 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit6 + %5 = load i32, ptr %1, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %1, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %1, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit6 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit6, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit6, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit6 -lean_dec.exit6: ; preds = %13, %12, %10, %3 - %14 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_Code_cse_go___spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) - %15 = ptrtoint ptr %2 to i64 - %16 = and i64 %15, 1 - %.not9 = icmp eq i64 %16, 0 - br i1 %.not9, label %17, label %lean_dec.exit +lean_dec.exit6: ; preds = %10, %9, %7 + %11 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_Code_cse_go___spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) + %12 = ptrtoint ptr %2 to i64 + %13 = and i64 %12, 1 + %.not9 = icmp eq i64 %13, 0 + br i1 %.not9, label %14, label %lean_dec.exit -17: ; preds = %lean_dec.exit6 - %18 = load i32, ptr %2, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +14: ; preds = %lean_dec.exit6 + %15 = load i32, ptr %2, align 4, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %2, align 4, !tbaa !4 +17: ; preds = %14 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -22: ; preds = %17 - %.not.i7 = icmp eq i32 %18, 0 - br i1 %.not.i7, label %lean_dec.exit, label %23 +19: ; preds = %14 + %.not.i7 = icmp eq i32 %15, 0 + br i1 %.not.i7, label %lean_dec.exit, label %20 -23: ; preds = %22 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit6 - ret ptr %14 +lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit6 + ret ptr %11 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Calc.ll b/bench/lean4/optimized/Calc.ll index 51de904d7f5..e9a27ebe05e 100644 --- a/bench/lean4/optimized/Calc.ll +++ b/bench/lean4/optimized/Calc.ll @@ -3943,18 +3943,9 @@ lean_alloc_closure.exit: ; preds = %lean_alloc_ctor.exi store i16 1, ptr %23, align 2, !tbaa !15 %24 = getelementptr inbounds nuw i8, ptr %17, i64 24 store ptr %1, ptr %24, align 8, !tbaa !4 - %25 = ptrtoint ptr %17 to i64 - %26 = and i64 %25, 1 - %.not = icmp eq i64 %26, 0 - br i1 %.not, label %lean_inc_ref.exit, label %lean_inc.exit - -lean_inc_ref.exit: ; preds = %lean_alloc_closure.exit - store i32 2, ptr %17, align 4, !tbaa !8 - br label %lean_inc.exit - -lean_inc.exit: ; preds = %lean_alloc_closure.exit, %lean_inc_ref.exit - %27 = tail call ptr @l_Lean_Elab_Term_ensureHasTypeWithErrorMsgs(ptr noundef nonnull %12, ptr noundef %2, ptr noundef nonnull %17, ptr noundef nonnull %17, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10) #4 - ret ptr %27 + store i32 2, ptr %17, align 8, !tbaa !8 + %25 = tail call ptr @l_Lean_Elab_Term_ensureHasTypeWithErrorMsgs(ptr noundef nonnull %12, ptr noundef %2, ptr noundef nonnull %17, ptr noundef nonnull %17, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10) #4 + ret ptr %25 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CaseValues.ll b/bench/lean4/optimized/CaseValues.ll index c1233cec6b6..cfc1f46880b 100644 --- a/bench/lean4/optimized/CaseValues.ll +++ b/bench/lean4/optimized/CaseValues.ll @@ -19209,106 +19209,94 @@ declare ptr @l_Lean_Meta_throwTacticEx___rarg(ptr noundef, ptr noundef, ptr noun define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Meta_caseValues_loop___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) local_unnamed_addr #0 { %11 = getelementptr i8, ptr %2, i64 8 %.val = load i64, ptr %11, align 8, !tbaa !16 - %12 = ptrtoint ptr %2 to i64 - %13 = and i64 %12, 1 - %.not = icmp eq i64 %13, 0 - br i1 %.not, label %14, label %lean_dec.exit18 + %12 = load i32, ptr %2, align 8, !tbaa !4 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 14: ; preds = %10 - %15 = load i32, ptr %2, align 4, !tbaa !4 - %16 = icmp sgt i32 %15, 1 - br i1 %16, label %17, label %19, !prof !11 - -17: ; preds = %14 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %2, align 4, !tbaa !4 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit18 -19: ; preds = %14 - %.not.i = icmp eq i32 %15, 0 - br i1 %.not.i, label %lean_dec.exit18, label %20 +16: ; preds = %10 + %.not.i = icmp eq i32 %12, 0 + br i1 %.not.i, label %lean_dec.exit18, label %17 -20: ; preds = %19 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #5 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %20, %19, %17, %10 - %21 = getelementptr i8, ptr %3, i64 8 - %.val25 = load i64, ptr %21, align 8, !tbaa !16 - %22 = ptrtoint ptr %3 to i64 - %23 = and i64 %22, 1 - %.not26 = icmp eq i64 %23, 0 - br i1 %.not26, label %24, label %lean_dec.exit17 - -24: ; preds = %lean_dec.exit18 - %25 = load i32, ptr %3, align 4, !tbaa !4 - %26 = icmp sgt i32 %25, 1 - br i1 %26, label %27, label %29, !prof !11 - -27: ; preds = %24 - %28 = add nsw i32 %25, -1 - store i32 %28, ptr %3, align 4, !tbaa !4 +lean_dec.exit18: ; preds = %17, %16, %14 + %18 = getelementptr i8, ptr %3, i64 8 + %.val25 = load i64, ptr %18, align 8, !tbaa !16 + %19 = load i32, ptr %3, align 8, !tbaa !4 + %20 = icmp sgt i32 %19, 1 + br i1 %20, label %21, label %23, !prof !11 + +21: ; preds = %lean_dec.exit18 + %22 = add nsw i32 %19, -1 + store i32 %22, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit17 -29: ; preds = %24 - %.not.i19 = icmp eq i32 %25, 0 - br i1 %.not.i19, label %lean_dec.exit17, label %30 +23: ; preds = %lean_dec.exit18 + %.not.i19 = icmp eq i32 %19, 0 + br i1 %.not.i19, label %lean_dec.exit17, label %24 -30: ; preds = %29 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #5 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %30, %29, %27, %lean_dec.exit18 - %31 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Meta_caseValues_loop___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val25, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) - %32 = ptrtoint ptr %1 to i64 - %33 = and i64 %32, 1 - %.not27 = icmp eq i64 %33, 0 - br i1 %.not27, label %34, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %24, %23, %21 + %25 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Meta_caseValues_loop___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val25, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) + %26 = ptrtoint ptr %1 to i64 + %27 = and i64 %26, 1 + %.not27 = icmp eq i64 %27, 0 + br i1 %.not27, label %28, label %lean_dec.exit16 -34: ; preds = %lean_dec.exit17 - %35 = load i32, ptr %1, align 4, !tbaa !4 - %36 = icmp sgt i32 %35, 1 - br i1 %36, label %37, label %39, !prof !11 +28: ; preds = %lean_dec.exit17 + %29 = load i32, ptr %1, align 4, !tbaa !4 + %30 = icmp sgt i32 %29, 1 + br i1 %30, label %31, label %33, !prof !11 -37: ; preds = %34 - %38 = add nsw i32 %35, -1 - store i32 %38, ptr %1, align 4, !tbaa !4 +31: ; preds = %28 + %32 = add nsw i32 %29, -1 + store i32 %32, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit16 -39: ; preds = %34 - %.not.i21 = icmp eq i32 %35, 0 - br i1 %.not.i21, label %lean_dec.exit16, label %40 +33: ; preds = %28 + %.not.i21 = icmp eq i32 %29, 0 + br i1 %.not.i21, label %lean_dec.exit16, label %34 -40: ; preds = %39 +34: ; preds = %33 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %40, %39, %37, %lean_dec.exit17 - %41 = ptrtoint ptr %0 to i64 - %42 = and i64 %41, 1 - %.not28 = icmp eq i64 %42, 0 - br i1 %.not28, label %43, label %lean_dec.exit +lean_dec.exit16: ; preds = %34, %33, %31, %lean_dec.exit17 + %35 = ptrtoint ptr %0 to i64 + %36 = and i64 %35, 1 + %.not28 = icmp eq i64 %36, 0 + br i1 %.not28, label %37, label %lean_dec.exit -43: ; preds = %lean_dec.exit16 - %44 = load i32, ptr %0, align 4, !tbaa !4 - %45 = icmp sgt i32 %44, 1 - br i1 %45, label %46, label %48, !prof !11 +37: ; preds = %lean_dec.exit16 + %38 = load i32, ptr %0, align 4, !tbaa !4 + %39 = icmp sgt i32 %38, 1 + br i1 %39, label %40, label %42, !prof !11 -46: ; preds = %43 - %47 = add nsw i32 %44, -1 - store i32 %47, ptr %0, align 4, !tbaa !4 +40: ; preds = %37 + %41 = add nsw i32 %38, -1 + store i32 %41, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -48: ; preds = %43 - %.not.i23 = icmp eq i32 %44, 0 - br i1 %.not.i23, label %lean_dec.exit, label %49 +42: ; preds = %37 + %.not.i23 = icmp eq i32 %38, 0 + br i1 %.not.i23, label %lean_dec.exit, label %43 -49: ; preds = %48 +43: ; preds = %42 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %49, %48, %46, %lean_dec.exit16 - ret ptr %31 +lean_dec.exit: ; preds = %43, %42, %40, %lean_dec.exit16 + ret ptr %25 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CheckTactic.ll b/bench/lean4/optimized/CheckTactic.ll index d29a08ca3e8..a8c8eecc298 100644 --- a/bench/lean4/optimized/CheckTactic.ll +++ b/bench/lean4/optimized/CheckTactic.ll @@ -37531,104 +37531,92 @@ lean_alloc_ctor.exit104: ; preds = %lean_inc.exit75 %108 = getelementptr inbounds nuw i8, ptr %102, i64 24 store ptr %95, ptr %108, align 8, !tbaa !4 %109 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__10, align 8, !tbaa !4 - %110 = ptrtoint ptr %102 to i64 - %111 = and i64 %110, 1 - %.not117 = icmp eq i64 %111, 0 - br i1 %.not117, label %lean_inc_ref.exit107, label %lean_inc.exit74 + store i32 2, ptr %102, align 8, !tbaa !8 + br i1 %.not116, label %110, label %lean_inc.exit73 -lean_inc_ref.exit107: ; preds = %lean_alloc_ctor.exit104 - store i32 2, ptr %102, align 4, !tbaa !8 - br label %lean_inc.exit74 - -lean_inc.exit74: ; preds = %lean_alloc_ctor.exit104, %lean_inc_ref.exit107 - br i1 %.not116, label %112, label %lean_inc.exit73 - -112: ; preds = %lean_inc.exit74 +110: ; preds = %lean_alloc_ctor.exit104 %.val.i108 = load i32, ptr %39, align 4, !tbaa !8 - %113 = icmp sgt i32 %.val.i108, 0 - br i1 %113, label %114, label %116, !prof !15 + %111 = icmp sgt i32 %.val.i108, 0 + br i1 %111, label %112, label %114, !prof !15 -114: ; preds = %112 - %115 = add nuw i32 %.val.i108, 1 - store i32 %115, ptr %39, align 4, !tbaa !8 +112: ; preds = %110 + %113 = add nuw i32 %.val.i108, 1 + store i32 %113, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit73 -116: ; preds = %112 +114: ; preds = %110 %.not.i109 = icmp eq i32 %.val.i108, 0 - br i1 %.not.i109, label %lean_inc.exit73, label %117 + br i1 %.not.i109, label %lean_inc.exit73, label %115 -117: ; preds = %116 +115: ; preds = %114 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit73 -lean_inc.exit73: ; preds = %117, %116, %114, %lean_inc.exit74 - %118 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %109, ptr noundef nonnull %102) #6 - %119 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 - br i1 %.not117, label %120, label %lean_inc_n.exit - -120: ; preds = %lean_inc.exit73 +lean_inc.exit73: ; preds = %115, %114, %112, %lean_alloc_ctor.exit104 + %116 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %109, ptr noundef nonnull %102) #6 + %117 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 %.val.i.i = load i32, ptr %102, align 4, !tbaa !8 - %121 = icmp sgt i32 %.val.i.i, 0 - br i1 %121, label %122, label %124, !prof !15 + %118 = icmp sgt i32 %.val.i.i, 0 + br i1 %118, label %119, label %121, !prof !15 -122: ; preds = %120 - %123 = add nuw i32 %.val.i.i, 3 - store i32 %123, ptr %102, align 4, !tbaa !8 +119: ; preds = %lean_inc.exit73 + %120 = add nuw i32 %.val.i.i, 3 + store i32 %120, ptr %102, align 4, !tbaa !8 br label %lean_inc_n.exit -124: ; preds = %120 +121: ; preds = %lean_inc.exit73 %.not.i.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i.i, label %lean_inc_n.exit, label %125 + br i1 %.not.i.i, label %lean_inc_n.exit, label %122 -125: ; preds = %124 +122: ; preds = %121 tail call void @lean_inc_ref_n_cold(ptr noundef nonnull %102, i32 noundef 3) #6 br label %lean_inc_n.exit -lean_inc_n.exit: ; preds = %lean_inc.exit73, %122, %124, %125 - br i1 %.not116, label %126, label %lean_inc.exit +lean_inc_n.exit: ; preds = %119, %121, %122 + br i1 %.not116, label %123, label %lean_inc.exit -126: ; preds = %lean_inc_n.exit +123: ; preds = %lean_inc_n.exit %.val.i112 = load i32, ptr %39, align 4, !tbaa !8 - %127 = icmp sgt i32 %.val.i112, 0 - br i1 %127, label %128, label %130, !prof !15 + %124 = icmp sgt i32 %.val.i112, 0 + br i1 %124, label %125, label %127, !prof !15 -128: ; preds = %126 - %129 = add nuw i32 %.val.i112, 1 - store i32 %129, ptr %39, align 4, !tbaa !8 +125: ; preds = %123 + %126 = add nuw i32 %.val.i112, 1 + store i32 %126, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit -130: ; preds = %126 +127: ; preds = %123 %.not.i113 = icmp eq i32 %.val.i112, 0 - br i1 %.not.i113, label %lean_inc.exit, label %131 + br i1 %.not.i113, label %lean_inc.exit, label %128 -131: ; preds = %130 +128: ; preds = %127 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit -lean_inc.exit: ; preds = %131, %130, %128, %lean_inc_n.exit - %132 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %119, ptr noundef nonnull %88, ptr noundef %118, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102) #6 - %133 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTactic___closed__4, align 8, !tbaa !4 - %134 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %133, ptr noundef nonnull %49, ptr noundef %28, ptr noundef nonnull %62, ptr noundef %29, ptr noundef nonnull %75, ptr noundef %132) #6 +lean_inc.exit: ; preds = %128, %127, %125, %lean_inc_n.exit + %129 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %117, ptr noundef nonnull %88, ptr noundef %116, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102) #6 + %130 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTactic___closed__4, align 8, !tbaa !4 + %131 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %130, ptr noundef nonnull %49, ptr noundef %28, ptr noundef nonnull %62, ptr noundef %29, ptr noundef nonnull %75, ptr noundef %129) #6 tail call void @lean_inc_heartbeat() #6 - %135 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 - %136 = icmp eq ptr %135, null - br i1 %136, label %137, label %lean_alloc_ctor.exit + %132 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 + %133 = icmp eq ptr %132, null + br i1 %133, label %134, label %lean_alloc_ctor.exit -137: ; preds = %lean_inc.exit +134: ; preds = %lean_inc.exit tail call void @lean_internal_panic_out_of_memory() #7 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit, %lean_dec.exit81 - %.sink134 = phi ptr [ %24, %lean_dec.exit81 ], [ %135, %lean_inc.exit ] + %.sink134 = phi ptr [ %24, %lean_dec.exit81 ], [ %132, %lean_inc.exit ] %.sink131 = phi i32 [ 16908312, %lean_dec.exit81 ], [ 131096, %lean_inc.exit ] - %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit81 ], [ %134, %lean_inc.exit ] - %138 = getelementptr inbounds nuw i8, ptr %.sink134, i64 4 + %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit81 ], [ %131, %lean_inc.exit ] + %135 = getelementptr inbounds nuw i8, ptr %.sink134, i64 4 store i32 1, ptr %.sink134, align 4, !tbaa !8 - store i32 %.sink131, ptr %138, align 4 - %139 = getelementptr inbounds nuw i8, ptr %.sink134, i64 8 - store ptr %.sink, ptr %139, align 8, !tbaa !4 - %140 = getelementptr inbounds nuw i8, ptr %.sink134, i64 16 - store ptr %2, ptr %140, align 8, !tbaa !4 + store i32 %.sink131, ptr %135, align 4 + %136 = getelementptr inbounds nuw i8, ptr %.sink134, i64 8 + store ptr %.sink, ptr %136, align 8, !tbaa !4 + %137 = getelementptr inbounds nuw i8, ptr %.sink134, i64 16 + store ptr %2, ptr %137, align 8, !tbaa !4 ret ptr %.sink134 } @@ -37941,104 +37929,92 @@ lean_alloc_ctor.exit90: ; preds = %lean_inc.exit66 %95 = getelementptr inbounds nuw i8, ptr %89, i64 24 store ptr %82, ptr %95, align 8, !tbaa !4 %96 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__10, align 8, !tbaa !4 - %97 = ptrtoint ptr %89 to i64 - %98 = and i64 %97, 1 - %.not104 = icmp eq i64 %98, 0 - br i1 %.not104, label %lean_inc_ref.exit93, label %lean_inc.exit65 + store i32 2, ptr %89, align 8, !tbaa !8 + br i1 %.not103, label %97, label %lean_inc.exit64 -lean_inc_ref.exit93: ; preds = %lean_alloc_ctor.exit90 - store i32 2, ptr %89, align 4, !tbaa !8 - br label %lean_inc.exit65 - -lean_inc.exit65: ; preds = %lean_alloc_ctor.exit90, %lean_inc_ref.exit93 - br i1 %.not103, label %99, label %lean_inc.exit64 - -99: ; preds = %lean_inc.exit65 +97: ; preds = %lean_alloc_ctor.exit90 %.val.i94 = load i32, ptr %39, align 4, !tbaa !8 - %100 = icmp sgt i32 %.val.i94, 0 - br i1 %100, label %101, label %103, !prof !15 + %98 = icmp sgt i32 %.val.i94, 0 + br i1 %98, label %99, label %101, !prof !15 -101: ; preds = %99 - %102 = add nuw i32 %.val.i94, 1 - store i32 %102, ptr %39, align 4, !tbaa !8 +99: ; preds = %97 + %100 = add nuw i32 %.val.i94, 1 + store i32 %100, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit64 -103: ; preds = %99 +101: ; preds = %97 %.not.i95 = icmp eq i32 %.val.i94, 0 - br i1 %.not.i95, label %lean_inc.exit64, label %104 + br i1 %.not.i95, label %lean_inc.exit64, label %102 -104: ; preds = %103 +102: ; preds = %101 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit64 -lean_inc.exit64: ; preds = %104, %103, %101, %lean_inc.exit65 - %105 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %96, ptr noundef nonnull %89) #6 - %106 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 - br i1 %.not104, label %107, label %lean_inc_n.exit - -107: ; preds = %lean_inc.exit64 +lean_inc.exit64: ; preds = %102, %101, %99, %lean_alloc_ctor.exit90 + %103 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %96, ptr noundef nonnull %89) #6 + %104 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 %.val.i.i = load i32, ptr %89, align 4, !tbaa !8 - %108 = icmp sgt i32 %.val.i.i, 0 - br i1 %108, label %109, label %111, !prof !15 + %105 = icmp sgt i32 %.val.i.i, 0 + br i1 %105, label %106, label %108, !prof !15 -109: ; preds = %107 - %110 = add nuw i32 %.val.i.i, 3 - store i32 %110, ptr %89, align 4, !tbaa !8 +106: ; preds = %lean_inc.exit64 + %107 = add nuw i32 %.val.i.i, 3 + store i32 %107, ptr %89, align 4, !tbaa !8 br label %lean_inc_n.exit -111: ; preds = %107 +108: ; preds = %lean_inc.exit64 %.not.i.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i.i, label %lean_inc_n.exit, label %112 + br i1 %.not.i.i, label %lean_inc_n.exit, label %109 -112: ; preds = %111 +109: ; preds = %108 tail call void @lean_inc_ref_n_cold(ptr noundef nonnull %89, i32 noundef 3) #6 br label %lean_inc_n.exit -lean_inc_n.exit: ; preds = %lean_inc.exit64, %109, %111, %112 - br i1 %.not103, label %113, label %lean_inc.exit +lean_inc_n.exit: ; preds = %106, %108, %109 + br i1 %.not103, label %110, label %lean_inc.exit -113: ; preds = %lean_inc_n.exit +110: ; preds = %lean_inc_n.exit %.val.i98 = load i32, ptr %39, align 4, !tbaa !8 - %114 = icmp sgt i32 %.val.i98, 0 - br i1 %114, label %115, label %117, !prof !15 + %111 = icmp sgt i32 %.val.i98, 0 + br i1 %111, label %112, label %114, !prof !15 -115: ; preds = %113 - %116 = add nuw i32 %.val.i98, 1 - store i32 %116, ptr %39, align 4, !tbaa !8 +112: ; preds = %110 + %113 = add nuw i32 %.val.i98, 1 + store i32 %113, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit -117: ; preds = %113 +114: ; preds = %110 %.not.i99 = icmp eq i32 %.val.i98, 0 - br i1 %.not.i99, label %lean_inc.exit, label %118 + br i1 %.not.i99, label %lean_inc.exit, label %115 -118: ; preds = %117 +115: ; preds = %114 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit -lean_inc.exit: ; preds = %118, %117, %115, %lean_inc_n.exit - %119 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %106, ptr noundef nonnull %75, ptr noundef %105, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89) #6 - %120 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTacticFailure___closed__2, align 8, !tbaa !4 - %121 = tail call ptr @l_Lean_Syntax_node4(ptr noundef %39, ptr noundef %120, ptr noundef nonnull %49, ptr noundef %36, ptr noundef nonnull %62, ptr noundef %119) #6 +lean_inc.exit: ; preds = %115, %114, %112, %lean_inc_n.exit + %116 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %104, ptr noundef nonnull %75, ptr noundef %103, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89) #6 + %117 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTacticFailure___closed__2, align 8, !tbaa !4 + %118 = tail call ptr @l_Lean_Syntax_node4(ptr noundef %39, ptr noundef %117, ptr noundef nonnull %49, ptr noundef %36, ptr noundef nonnull %62, ptr noundef %116) #6 tail call void @lean_inc_heartbeat() #6 - %122 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 - %123 = icmp eq ptr %122, null - br i1 %123, label %124, label %lean_alloc_ctor.exit + %119 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 + %120 = icmp eq ptr %119, null + br i1 %120, label %121, label %lean_alloc_ctor.exit -124: ; preds = %lean_inc.exit +121: ; preds = %lean_inc.exit tail call void @lean_internal_panic_out_of_memory() #7 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit, %lean_dec.exit71 - %.sink120 = phi ptr [ %25, %lean_dec.exit71 ], [ %122, %lean_inc.exit ] + %.sink120 = phi ptr [ %25, %lean_dec.exit71 ], [ %119, %lean_inc.exit ] %.sink117 = phi i32 [ 16908312, %lean_dec.exit71 ], [ 131096, %lean_inc.exit ] - %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit71 ], [ %121, %lean_inc.exit ] - %125 = getelementptr inbounds nuw i8, ptr %.sink120, i64 4 + %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit71 ], [ %118, %lean_inc.exit ] + %122 = getelementptr inbounds nuw i8, ptr %.sink120, i64 4 store i32 1, ptr %.sink120, align 4, !tbaa !8 - store i32 %.sink117, ptr %125, align 4 - %126 = getelementptr inbounds nuw i8, ptr %.sink120, i64 8 - store ptr %.sink, ptr %126, align 8, !tbaa !4 - %127 = getelementptr inbounds nuw i8, ptr %.sink120, i64 16 - store ptr %2, ptr %127, align 8, !tbaa !4 + store i32 %.sink117, ptr %122, align 4 + %123 = getelementptr inbounds nuw i8, ptr %.sink120, i64 8 + store ptr %.sink, ptr %123, align 8, !tbaa !4 + %124 = getelementptr inbounds nuw i8, ptr %.sink120, i64 16 + store ptr %2, ptr %124, align 8, !tbaa !4 ret ptr %.sink120 } diff --git a/bench/lean4/optimized/Client.ll b/bench/lean4/optimized/Client.ll index 9e9257836cf..e0772b27073 100644 --- a/bench/lean4/optimized/Client.ll +++ b/bench/lean4/optimized/Client.ll @@ -1532,58 +1532,46 @@ lean_alloc_ctor.exit18: ; preds = %lean_alloc_ctor.exi define ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_toJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_258____spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !8 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %14, align 8, !tbaa !12 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 - -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !8 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %11, align 8, !tbaa !12 + %12 = load i32, ptr %1, align 8, !tbaa !8 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 + +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_toJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_258____spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_toJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_258____spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable @@ -2457,58 +2445,46 @@ lean_alloc_ctor.exit47: ; preds = %lean_dec.exit define ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_fromJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_296____spec__3___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val10 = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !8 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %14, align 8, !tbaa !12 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 - -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !8 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %11, align 8, !tbaa !12 + %12 = load i32, ptr %1, align 8, !tbaa !8 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 + +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_fromJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_296____spec__3(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_fromJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_296____spec__3(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CollectAxioms.ll b/bench/lean4/optimized/CollectAxioms.ll index c91471b5800..b08676a8a4b 100644 --- a/bench/lean4/optimized/CollectAxioms.ll +++ b/bench/lean4/optimized/CollectAxioms.ll @@ -6003,82 +6003,70 @@ declare ptr @l_Lean_Expr_getUsedConstants(ptr noundef) local_unnamed_addr #2 define noalias nonnull ptr @l_Array_foldlMUnsafe_fold___at_Lean_CollectAxioms_collect___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #0 { %7 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %7, align 8, !tbaa !12 - %8 = ptrtoint ptr %1 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit12 + %8 = load i32, ptr %1, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !9 10: ; preds = %6 - %11 = load i32, ptr %1, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !9 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %1, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit12 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit12, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit12, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %16, %15, %13, %6 - %17 = getelementptr i8, ptr %2, i64 8 - %.val17 = load i64, ptr %17, align 8, !tbaa !12 - %18 = ptrtoint ptr %2 to i64 - %19 = and i64 %18, 1 - %.not18 = icmp eq i64 %19, 0 - br i1 %.not18, label %20, label %lean_dec.exit11 - -20: ; preds = %lean_dec.exit12 - %21 = load i32, ptr %2, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !9 - -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %2, align 4, !tbaa !4 +lean_dec.exit12: ; preds = %13, %12, %10 + %14 = getelementptr i8, ptr %2, i64 8 + %.val17 = load i64, ptr %14, align 8, !tbaa !12 + %15 = load i32, ptr %2, align 8, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !9 + +17: ; preds = %lean_dec.exit12 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit11 -25: ; preds = %20 - %.not.i13 = icmp eq i32 %21, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %26 +19: ; preds = %lean_dec.exit12 + %.not.i13 = icmp eq i32 %15, 0 + br i1 %.not.i13, label %lean_dec.exit11, label %20 -26: ; preds = %25 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %26, %25, %23, %lean_dec.exit12 - %27 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_CollectAxioms_collect___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val17, ptr noundef %3, ptr noundef %4, ptr noundef %5) - %28 = ptrtoint ptr %0 to i64 - %29 = and i64 %28, 1 - %.not19 = icmp eq i64 %29, 0 - br i1 %.not19, label %30, label %lean_dec.exit - -30: ; preds = %lean_dec.exit11 - %31 = load i32, ptr %0, align 4, !tbaa !4 - %32 = icmp sgt i32 %31, 1 - br i1 %32, label %33, label %35, !prof !9 - -33: ; preds = %30 - %34 = add nsw i32 %31, -1 - store i32 %34, ptr %0, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %20, %19, %17 + %21 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_CollectAxioms_collect___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val17, ptr noundef %3, ptr noundef %4, ptr noundef %5) + %22 = ptrtoint ptr %0 to i64 + %23 = and i64 %22, 1 + %.not19 = icmp eq i64 %23, 0 + br i1 %.not19, label %24, label %lean_dec.exit + +24: ; preds = %lean_dec.exit11 + %25 = load i32, ptr %0, align 4, !tbaa !4 + %26 = icmp sgt i32 %25, 1 + br i1 %26, label %27, label %29, !prof !9 + +27: ; preds = %24 + %28 = add nsw i32 %25, -1 + store i32 %28, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -35: ; preds = %30 - %.not.i15 = icmp eq i32 %31, 0 - br i1 %.not.i15, label %lean_dec.exit, label %36 +29: ; preds = %24 + %.not.i15 = icmp eq i32 %25, 0 + br i1 %.not.i15, label %lean_dec.exit, label %30 -36: ; preds = %35 +30: ; preds = %29 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 - ret ptr %27 +lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 + ret ptr %21 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CollectFVars.ll b/bench/lean4/optimized/CollectFVars.ll index 6780a85a9cc..e81b4aa9e06 100644 --- a/bench/lean4/optimized/CollectFVars.ll +++ b/bench/lean4/optimized/CollectFVars.ll @@ -10857,82 +10857,70 @@ lean_dec.exit: ; preds = %21, %20, %18, %lean define ptr @l_Array_foldrMUnsafe_fold___at_Lean_Meta_removeUnused___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) local_unnamed_addr #0 { %10 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %10, align 8, !tbaa !12 - %11 = ptrtoint ptr %1 to i64 - %12 = and i64 %11, 1 - %.not = icmp eq i64 %12, 0 - br i1 %.not, label %13, label %lean_dec.exit15 + %11 = load i32, ptr %1, align 8, !tbaa !4 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !11 13: ; preds = %9 - %14 = load i32, ptr %1, align 4, !tbaa !4 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !11 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %1, align 4, !tbaa !4 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit15 -18: ; preds = %13 - %.not.i = icmp eq i32 %14, 0 - br i1 %.not.i, label %lean_dec.exit15, label %19 +15: ; preds = %9 + %.not.i = icmp eq i32 %11, 0 + br i1 %.not.i, label %lean_dec.exit15, label %16 -19: ; preds = %18 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit15 -lean_dec.exit15: ; preds = %19, %18, %16, %9 - %20 = getelementptr i8, ptr %2, i64 8 - %.val20 = load i64, ptr %20, align 8, !tbaa !12 - %21 = ptrtoint ptr %2 to i64 - %22 = and i64 %21, 1 - %.not21 = icmp eq i64 %22, 0 - br i1 %.not21, label %23, label %lean_dec.exit14 - -23: ; preds = %lean_dec.exit15 - %24 = load i32, ptr %2, align 4, !tbaa !4 - %25 = icmp sgt i32 %24, 1 - br i1 %25, label %26, label %28, !prof !11 +lean_dec.exit15: ; preds = %16, %15, %13 + %17 = getelementptr i8, ptr %2, i64 8 + %.val20 = load i64, ptr %17, align 8, !tbaa !12 + %18 = load i32, ptr %2, align 8, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 -26: ; preds = %23 - %27 = add nsw i32 %24, -1 - store i32 %27, ptr %2, align 4, !tbaa !4 +20: ; preds = %lean_dec.exit15 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit14 -28: ; preds = %23 - %.not.i16 = icmp eq i32 %24, 0 - br i1 %.not.i16, label %lean_dec.exit14, label %29 +22: ; preds = %lean_dec.exit15 + %.not.i16 = icmp eq i32 %18, 0 + br i1 %.not.i16, label %lean_dec.exit14, label %23 -29: ; preds = %28 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit14 -lean_dec.exit14: ; preds = %29, %28, %26, %lean_dec.exit15 - %30 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_Meta_removeUnused___spec__2(ptr noundef %0, i64 noundef %.val, i64 noundef %.val20, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) - %31 = ptrtoint ptr %0 to i64 - %32 = and i64 %31, 1 - %.not22 = icmp eq i64 %32, 0 - br i1 %.not22, label %33, label %lean_dec.exit - -33: ; preds = %lean_dec.exit14 - %34 = load i32, ptr %0, align 4, !tbaa !4 - %35 = icmp sgt i32 %34, 1 - br i1 %35, label %36, label %38, !prof !11 - -36: ; preds = %33 - %37 = add nsw i32 %34, -1 - store i32 %37, ptr %0, align 4, !tbaa !4 +lean_dec.exit14: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_Meta_removeUnused___spec__2(ptr noundef %0, i64 noundef %.val, i64 noundef %.val20, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) + %25 = ptrtoint ptr %0 to i64 + %26 = and i64 %25, 1 + %.not22 = icmp eq i64 %26, 0 + br i1 %.not22, label %27, label %lean_dec.exit + +27: ; preds = %lean_dec.exit14 + %28 = load i32, ptr %0, align 4, !tbaa !4 + %29 = icmp sgt i32 %28, 1 + br i1 %29, label %30, label %32, !prof !11 + +30: ; preds = %27 + %31 = add nsw i32 %28, -1 + store i32 %31, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -38: ; preds = %33 - %.not.i18 = icmp eq i32 %34, 0 - br i1 %.not.i18, label %lean_dec.exit, label %39 +32: ; preds = %27 + %.not.i18 = icmp eq i32 %28, 0 + br i1 %.not.i18, label %lean_dec.exit, label %33 -39: ; preds = %38 +33: ; preds = %32 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %39, %38, %36, %lean_dec.exit14 - ret ptr %30 +lean_dec.exit: ; preds = %33, %32, %30, %lean_dec.exit14 + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ConstFolding.ll b/bench/lean4/optimized/ConstFolding.ll index 29609c81981..d13eeb13bed 100644 --- a/bench/lean4/optimized/ConstFolding.ll +++ b/bench/lean4/optimized/ConstFolding.ll @@ -321,59 +321,53 @@ define nonnull ptr @l_Lean_Compiler_isOfNat___lambda__1___boxed(ptr noundef %0, %3 = getelementptr inbounds nuw i8, ptr %1, i64 24 %4 = load ptr, ptr %3, align 8, !tbaa !4 %5 = tail call zeroext i8 @lean_name_eq(ptr noundef %4, ptr noundef %0) #5 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit5 + %6 = load i32, ptr %1, align 8, !tbaa !8 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !11 8: ; preds = %2 - %9 = load i32, ptr %1, align 4, !tbaa !8 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !11 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !8 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit5 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit5, label %14 +10: ; preds = %2 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit5, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit5 -lean_dec.exit5: ; preds = %14, %13, %11, %2 - %15 = ptrtoint ptr %0 to i64 - %16 = and i64 %15, 1 - %.not8 = icmp eq i64 %16, 0 - br i1 %.not8, label %17, label %lean_dec.exit +lean_dec.exit5: ; preds = %11, %10, %8 + %12 = ptrtoint ptr %0 to i64 + %13 = and i64 %12, 1 + %.not8 = icmp eq i64 %13, 0 + br i1 %.not8, label %14, label %lean_dec.exit -17: ; preds = %lean_dec.exit5 - %18 = load i32, ptr %0, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +14: ; preds = %lean_dec.exit5 + %15 = load i32, ptr %0, align 4, !tbaa !8 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %0, align 4, !tbaa !8 +17: ; preds = %14 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -22: ; preds = %17 - %.not.i6 = icmp eq i32 %18, 0 - br i1 %.not.i6, label %lean_dec.exit, label %23 +19: ; preds = %14 + %.not.i6 = icmp eq i32 %15, 0 + br i1 %.not.i6, label %lean_dec.exit, label %20 -23: ; preds = %22 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit5 - %24 = zext i8 %5 to i64 - %25 = shl nuw nsw i64 %24, 1 - %26 = or disjoint i64 %25, 1 - %27 = inttoptr i64 %26 to ptr - ret ptr %27 +lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit5 + %21 = zext i8 %5 to i64 + %22 = shl nuw nsw i64 %21, 1 + %23 = or disjoint i64 %22, 1 + %24 = inttoptr i64 %23 to ptr + ret ptr %24 } declare zeroext i8 @l_List_any___rarg(ptr noundef, ptr noundef) local_unnamed_addr #1 @@ -451,59 +445,53 @@ define nonnull ptr @l_Lean_Compiler_isToNat___lambda__1___boxed(ptr noundef %0, %3 = getelementptr inbounds nuw i8, ptr %1, i64 32 %4 = load ptr, ptr %3, align 8, !tbaa !4 %5 = tail call zeroext i8 @lean_name_eq(ptr noundef %4, ptr noundef %0) #5 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit5 + %6 = load i32, ptr %1, align 8, !tbaa !8 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !11 8: ; preds = %2 - %9 = load i32, ptr %1, align 4, !tbaa !8 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !11 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !8 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit5 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit5, label %14 +10: ; preds = %2 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit5, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit5 -lean_dec.exit5: ; preds = %14, %13, %11, %2 - %15 = ptrtoint ptr %0 to i64 - %16 = and i64 %15, 1 - %.not8 = icmp eq i64 %16, 0 - br i1 %.not8, label %17, label %lean_dec.exit +lean_dec.exit5: ; preds = %11, %10, %8 + %12 = ptrtoint ptr %0 to i64 + %13 = and i64 %12, 1 + %.not8 = icmp eq i64 %13, 0 + br i1 %.not8, label %14, label %lean_dec.exit -17: ; preds = %lean_dec.exit5 - %18 = load i32, ptr %0, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +14: ; preds = %lean_dec.exit5 + %15 = load i32, ptr %0, align 4, !tbaa !8 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %0, align 4, !tbaa !8 +17: ; preds = %14 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -22: ; preds = %17 - %.not.i6 = icmp eq i32 %18, 0 - br i1 %.not.i6, label %lean_dec.exit, label %23 +19: ; preds = %14 + %.not.i6 = icmp eq i32 %15, 0 + br i1 %.not.i6, label %lean_dec.exit, label %20 -23: ; preds = %22 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit5 - %24 = zext i8 %5 to i64 - %25 = shl nuw nsw i64 %24, 1 - %26 = or disjoint i64 %25, 1 - %27 = inttoptr i64 %26 to ptr - ret ptr %27 +lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit5 + %21 = zext i8 %5 to i64 + %22 = shl nuw nsw i64 %21, 1 + %23 = or disjoint i64 %22, 1 + %24 = inttoptr i64 %23 to ptr + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Database.ll b/bench/lean4/optimized/Database.ll index 40a199bb01d..e85efc3a699 100644 --- a/bench/lean4/optimized/Database.ll +++ b/bench/lean4/optimized/Database.ll @@ -2107,130 +2107,118 @@ declare ptr @l_Std_Time_Database_Windows_getZoneRules(ptr noundef, ptr noundef) define ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_defaultGetZoneRules___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) local_unnamed_addr #0 { %10 = getelementptr i8, ptr %5, i64 8 %.val = load i64, ptr %10, align 8, !tbaa !13 - %11 = ptrtoint ptr %5 to i64 - %12 = and i64 %11, 1 - %.not = icmp eq i64 %12, 0 - br i1 %.not, label %13, label %lean_dec.exit19 + %11 = load i32, ptr %5, align 8, !tbaa !4 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !9 13: ; preds = %9 - %14 = load i32, ptr %5, align 4, !tbaa !4 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !9 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %5, align 4, !tbaa !4 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %5, align 4, !tbaa !4 br label %lean_dec.exit19 -18: ; preds = %13 - %.not.i = icmp eq i32 %14, 0 - br i1 %.not.i, label %lean_dec.exit19, label %19 +15: ; preds = %9 + %.not.i = icmp eq i32 %11, 0 + br i1 %.not.i, label %lean_dec.exit19, label %16 -19: ; preds = %18 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %5) #4 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %19, %18, %16, %9 - %20 = getelementptr i8, ptr %6, i64 8 - %.val28 = load i64, ptr %20, align 8, !tbaa !13 - %21 = ptrtoint ptr %6 to i64 - %22 = and i64 %21, 1 - %.not29 = icmp eq i64 %22, 0 - br i1 %.not29, label %23, label %lean_dec.exit18 - -23: ; preds = %lean_dec.exit19 - %24 = load i32, ptr %6, align 4, !tbaa !4 - %25 = icmp sgt i32 %24, 1 - br i1 %25, label %26, label %28, !prof !9 - -26: ; preds = %23 - %27 = add nsw i32 %24, -1 - store i32 %27, ptr %6, align 4, !tbaa !4 +lean_dec.exit19: ; preds = %16, %15, %13 + %17 = getelementptr i8, ptr %6, i64 8 + %.val28 = load i64, ptr %17, align 8, !tbaa !13 + %18 = load i32, ptr %6, align 8, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !9 + +20: ; preds = %lean_dec.exit19 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %6, align 4, !tbaa !4 br label %lean_dec.exit18 -28: ; preds = %23 - %.not.i20 = icmp eq i32 %24, 0 - br i1 %.not.i20, label %lean_dec.exit18, label %29 +22: ; preds = %lean_dec.exit19 + %.not.i20 = icmp eq i32 %18, 0 + br i1 %.not.i20, label %lean_dec.exit18, label %23 -29: ; preds = %28 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %6) #4 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %29, %28, %26, %lean_dec.exit19 - %30 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_defaultGetZoneRules___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) - %31 = ptrtoint ptr %4 to i64 - %32 = and i64 %31, 1 - %.not30 = icmp eq i64 %32, 0 - br i1 %.not30, label %33, label %lean_dec.exit17 - -33: ; preds = %lean_dec.exit18 - %34 = load i32, ptr %4, align 4, !tbaa !4 - %35 = icmp sgt i32 %34, 1 - br i1 %35, label %36, label %38, !prof !9 - -36: ; preds = %33 - %37 = add nsw i32 %34, -1 - store i32 %37, ptr %4, align 4, !tbaa !4 +lean_dec.exit18: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_defaultGetZoneRules___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) + %25 = ptrtoint ptr %4 to i64 + %26 = and i64 %25, 1 + %.not30 = icmp eq i64 %26, 0 + br i1 %.not30, label %27, label %lean_dec.exit17 + +27: ; preds = %lean_dec.exit18 + %28 = load i32, ptr %4, align 4, !tbaa !4 + %29 = icmp sgt i32 %28, 1 + br i1 %29, label %30, label %32, !prof !9 + +30: ; preds = %27 + %31 = add nsw i32 %28, -1 + store i32 %31, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit17 -38: ; preds = %33 - %.not.i22 = icmp eq i32 %34, 0 - br i1 %.not.i22, label %lean_dec.exit17, label %39 +32: ; preds = %27 + %.not.i22 = icmp eq i32 %28, 0 + br i1 %.not.i22, label %lean_dec.exit17, label %33 -39: ; preds = %38 +33: ; preds = %32 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %39, %38, %36, %lean_dec.exit18 - %40 = ptrtoint ptr %2 to i64 - %41 = and i64 %40, 1 - %.not31 = icmp eq i64 %41, 0 - br i1 %.not31, label %42, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %33, %32, %30, %lean_dec.exit18 + %34 = ptrtoint ptr %2 to i64 + %35 = and i64 %34, 1 + %.not31 = icmp eq i64 %35, 0 + br i1 %.not31, label %36, label %lean_dec.exit16 -42: ; preds = %lean_dec.exit17 - %43 = load i32, ptr %2, align 4, !tbaa !4 - %44 = icmp sgt i32 %43, 1 - br i1 %44, label %45, label %47, !prof !9 +36: ; preds = %lean_dec.exit17 + %37 = load i32, ptr %2, align 4, !tbaa !4 + %38 = icmp sgt i32 %37, 1 + br i1 %38, label %39, label %41, !prof !9 -45: ; preds = %42 - %46 = add nsw i32 %43, -1 - store i32 %46, ptr %2, align 4, !tbaa !4 +39: ; preds = %36 + %40 = add nsw i32 %37, -1 + store i32 %40, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit16 -47: ; preds = %42 - %.not.i24 = icmp eq i32 %43, 0 - br i1 %.not.i24, label %lean_dec.exit16, label %48 +41: ; preds = %36 + %.not.i24 = icmp eq i32 %37, 0 + br i1 %.not.i24, label %lean_dec.exit16, label %42 -48: ; preds = %47 +42: ; preds = %41 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %48, %47, %45, %lean_dec.exit17 - %49 = ptrtoint ptr %1 to i64 - %50 = and i64 %49, 1 - %.not32 = icmp eq i64 %50, 0 - br i1 %.not32, label %51, label %lean_dec.exit +lean_dec.exit16: ; preds = %42, %41, %39, %lean_dec.exit17 + %43 = ptrtoint ptr %1 to i64 + %44 = and i64 %43, 1 + %.not32 = icmp eq i64 %44, 0 + br i1 %.not32, label %45, label %lean_dec.exit -51: ; preds = %lean_dec.exit16 - %52 = load i32, ptr %1, align 4, !tbaa !4 - %53 = icmp sgt i32 %52, 1 - br i1 %53, label %54, label %56, !prof !9 +45: ; preds = %lean_dec.exit16 + %46 = load i32, ptr %1, align 4, !tbaa !4 + %47 = icmp sgt i32 %46, 1 + br i1 %47, label %48, label %50, !prof !9 -54: ; preds = %51 - %55 = add nsw i32 %52, -1 - store i32 %55, ptr %1, align 4, !tbaa !4 +48: ; preds = %45 + %49 = add nsw i32 %46, -1 + store i32 %49, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -56: ; preds = %51 - %.not.i26 = icmp eq i32 %52, 0 - br i1 %.not.i26, label %lean_dec.exit, label %57 +50: ; preds = %45 + %.not.i26 = icmp eq i32 %46, 0 + br i1 %.not.i26, label %lean_dec.exit, label %51 -57: ; preds = %56 +51: ; preds = %50 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %57, %56, %54, %lean_dec.exit16 - ret ptr %30 +lean_dec.exit: ; preds = %51, %50, %48, %lean_dec.exit16 + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Delta.ll b/bench/lean4/optimized/Delta.ll index 6976565abec..66fcdf0fc04 100644 --- a/bench/lean4/optimized/Delta.ll +++ b/bench/lean4/optimized/Delta.ll @@ -1564,58 +1564,46 @@ declare ptr @l_Lean_Syntax_getArgs(ptr noundef) local_unnamed_addr #1 define ptr @l_Lean_Elab_Tactic_Conv_evalDelta___lambda__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11) #0 { %13 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %13, align 8, !tbaa !14 - %14 = ptrtoint ptr %0 to i64 - %15 = and i64 %14, 1 - %.not = icmp eq i64 %15, 0 - br i1 %.not, label %16, label %lean_dec.exit16 + %14 = load i32, ptr %0, align 8, !tbaa !4 + %15 = icmp sgt i32 %14, 1 + br i1 %15, label %16, label %18, !prof !9 16: ; preds = %12 - %17 = load i32, ptr %0, align 4, !tbaa !4 - %18 = icmp sgt i32 %17, 1 - br i1 %18, label %19, label %21, !prof !9 - -19: ; preds = %16 - %20 = add nsw i32 %17, -1 - store i32 %20, ptr %0, align 4, !tbaa !4 + %17 = add nsw i32 %14, -1 + store i32 %17, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit16 -21: ; preds = %16 - %.not.i = icmp eq i32 %17, 0 - br i1 %.not.i, label %lean_dec.exit16, label %22 +18: ; preds = %12 + %.not.i = icmp eq i32 %14, 0 + br i1 %.not.i, label %lean_dec.exit16, label %19 -22: ; preds = %21 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %22, %21, %19, %12 - %23 = getelementptr i8, ptr %1, i64 8 - %.val19 = load i64, ptr %23, align 8, !tbaa !14 - %24 = ptrtoint ptr %1 to i64 - %25 = and i64 %24, 1 - %.not20 = icmp eq i64 %25, 0 - br i1 %.not20, label %26, label %lean_dec.exit - -26: ; preds = %lean_dec.exit16 - %27 = load i32, ptr %1, align 4, !tbaa !4 - %28 = icmp sgt i32 %27, 1 - br i1 %28, label %29, label %31, !prof !9 - -29: ; preds = %26 - %30 = add nsw i32 %27, -1 - store i32 %30, ptr %1, align 4, !tbaa !4 +lean_dec.exit16: ; preds = %19, %18, %16 + %20 = getelementptr i8, ptr %1, i64 8 + %.val19 = load i64, ptr %20, align 8, !tbaa !14 + %21 = load i32, ptr %1, align 8, !tbaa !4 + %22 = icmp sgt i32 %21, 1 + br i1 %22, label %23, label %25, !prof !9 + +23: ; preds = %lean_dec.exit16 + %24 = add nsw i32 %21, -1 + store i32 %24, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -31: ; preds = %26 - %.not.i17 = icmp eq i32 %27, 0 - br i1 %.not.i17, label %lean_dec.exit, label %32 +25: ; preds = %lean_dec.exit16 + %.not.i17 = icmp eq i32 %21, 0 + br i1 %.not.i17, label %lean_dec.exit, label %26 -32: ; preds = %31 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit16 - %33 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDelta___lambda__1(i64 noundef %.val, i64 noundef %.val19, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11) - ret ptr %33 +lean_dec.exit: ; preds = %26, %25, %23 + %27 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDelta___lambda__1(i64 noundef %.val, i64 noundef %.val19, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11) + ret ptr %27 } declare ptr @l_Lean_Elab_Tactic_withMainContext___rarg(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1 diff --git a/bench/lean4/optimized/EligibleHeaderDecls.ll b/bench/lean4/optimized/EligibleHeaderDecls.ll index a8172459c1c..258a6fe6a11 100644 --- a/bench/lean4/optimized/EligibleHeaderDecls.ll +++ b/bench/lean4/optimized/EligibleHeaderDecls.ll @@ -3074,82 +3074,70 @@ declare ptr @lean_st_ref_set(ptr noundef, ptr noundef, ptr noundef) local_unname define noalias nonnull ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_getEligibleHeaderDecls___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #0 { %7 = getelementptr i8, ptr %2, i64 8 %.val = load i64, ptr %7, align 8, !tbaa !12 - %8 = ptrtoint ptr %2 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit12 + %8 = load i32, ptr %2, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !11 10: ; preds = %6 - %11 = load i32, ptr %2, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !11 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %2, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit12 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit12, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit12, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %16, %15, %13, %6 - %17 = getelementptr i8, ptr %3, i64 8 - %.val17 = load i64, ptr %17, align 8, !tbaa !12 - %18 = ptrtoint ptr %3 to i64 - %19 = and i64 %18, 1 - %.not18 = icmp eq i64 %19, 0 - br i1 %.not18, label %20, label %lean_dec.exit11 - -20: ; preds = %lean_dec.exit12 - %21 = load i32, ptr %3, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !11 +lean_dec.exit12: ; preds = %13, %12, %10 + %14 = getelementptr i8, ptr %3, i64 8 + %.val17 = load i64, ptr %14, align 8, !tbaa !12 + %15 = load i32, ptr %3, align 8, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %3, align 4, !tbaa !4 +17: ; preds = %lean_dec.exit12 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit11 -25: ; preds = %20 - %.not.i13 = icmp eq i32 %21, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %26 +19: ; preds = %lean_dec.exit12 + %.not.i13 = icmp eq i32 %15, 0 + br i1 %.not.i13, label %lean_dec.exit11, label %20 -26: ; preds = %25 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %26, %25, %23, %lean_dec.exit12 - %27 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_getEligibleHeaderDecls___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) - %28 = ptrtoint ptr %1 to i64 - %29 = and i64 %28, 1 - %.not19 = icmp eq i64 %29, 0 - br i1 %.not19, label %30, label %lean_dec.exit +lean_dec.exit11: ; preds = %20, %19, %17 + %21 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_getEligibleHeaderDecls___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) + %22 = ptrtoint ptr %1 to i64 + %23 = and i64 %22, 1 + %.not19 = icmp eq i64 %23, 0 + br i1 %.not19, label %24, label %lean_dec.exit -30: ; preds = %lean_dec.exit11 - %31 = load i32, ptr %1, align 4, !tbaa !4 - %32 = icmp sgt i32 %31, 1 - br i1 %32, label %33, label %35, !prof !11 +24: ; preds = %lean_dec.exit11 + %25 = load i32, ptr %1, align 4, !tbaa !4 + %26 = icmp sgt i32 %25, 1 + br i1 %26, label %27, label %29, !prof !11 -33: ; preds = %30 - %34 = add nsw i32 %31, -1 - store i32 %34, ptr %1, align 4, !tbaa !4 +27: ; preds = %24 + %28 = add nsw i32 %25, -1 + store i32 %28, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -35: ; preds = %30 - %.not.i15 = icmp eq i32 %31, 0 - br i1 %.not.i15, label %lean_dec.exit, label %36 +29: ; preds = %24 + %.not.i15 = icmp eq i32 %25, 0 + br i1 %.not.i15, label %lean_dec.exit, label %30 -36: ; preds = %35 +30: ; preds = %29 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 - ret ptr %27 +lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 + ret ptr %21 } ; Function Attrs: nounwind uwtable @@ -4020,59 +4008,47 @@ lean_dec.exit: ; preds = %132, %131, %129, %l define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg___lambda__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #0 { %7 = getelementptr i8, ptr %0, i64 8 %.val13 = load i64, ptr %7, align 8, !tbaa !12 - %8 = ptrtoint ptr %0 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit10 + %8 = load i32, ptr %0, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !11 10: ; preds = %6 - %11 = load i32, ptr %0, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !11 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %0, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit10 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit10, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit10, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %16, %15, %13, %6 - %17 = getelementptr i8, ptr %4, i64 8 - %.val = load i64, ptr %17, align 8, !tbaa !12 - %18 = ptrtoint ptr %4 to i64 - %19 = and i64 %18, 1 - %.not14 = icmp eq i64 %19, 0 - br i1 %.not14, label %20, label %lean_dec.exit - -20: ; preds = %lean_dec.exit10 - %21 = load i32, ptr %4, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !11 +lean_dec.exit10: ; preds = %13, %12, %10 + %14 = getelementptr i8, ptr %4, i64 8 + %.val = load i64, ptr %14, align 8, !tbaa !12 + %15 = load i32, ptr %4, align 8, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %4, align 4, !tbaa !4 +17: ; preds = %lean_dec.exit10 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit -25: ; preds = %20 - %.not.i11 = icmp eq i32 %21, 0 - br i1 %.not.i11, label %lean_dec.exit, label %26 +19: ; preds = %lean_dec.exit10 + %.not.i11 = icmp eq i32 %15, 0 + br i1 %.not.i11, label %lean_dec.exit, label %20 -26: ; preds = %25 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %26, %25, %23, %lean_dec.exit10 - %27 = add i64 %.val13, 1 - %28 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %27, i64 noundef %.val, ptr noundef %5) - ret ptr %28 +lean_dec.exit: ; preds = %20, %19, %17 + %21 = add i64 %.val13, 1 + %22 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %21, i64 noundef %.val, ptr noundef %5) + ret ptr %22 } ; Function Attrs: nounwind uwtable @@ -4103,58 +4079,46 @@ lean_alloc_closure.exit: ; preds = %1 define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #0 { %7 = getelementptr i8, ptr %3, i64 8 %.val13 = load i64, ptr %7, align 8, !tbaa !12 - %8 = ptrtoint ptr %3 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit10 + %8 = load i32, ptr %3, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !11 10: ; preds = %6 - %11 = load i32, ptr %3, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !11 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %3, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit10 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit10, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit10, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %16, %15, %13, %6 - %17 = getelementptr i8, ptr %4, i64 8 - %.val = load i64, ptr %17, align 8, !tbaa !12 - %18 = ptrtoint ptr %4 to i64 - %19 = and i64 %18, 1 - %.not14 = icmp eq i64 %19, 0 - br i1 %.not14, label %20, label %lean_dec.exit - -20: ; preds = %lean_dec.exit10 - %21 = load i32, ptr %4, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !11 +lean_dec.exit10: ; preds = %13, %12, %10 + %14 = getelementptr i8, ptr %4, i64 8 + %.val = load i64, ptr %14, align 8, !tbaa !12 + %15 = load i32, ptr %4, align 8, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %4, align 4, !tbaa !4 +17: ; preds = %lean_dec.exit10 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit -25: ; preds = %20 - %.not.i11 = icmp eq i32 %21, 0 - br i1 %.not.i11, label %lean_dec.exit, label %26 +19: ; preds = %lean_dec.exit10 + %.not.i11 = icmp eq i32 %15, 0 + br i1 %.not.i11, label %lean_dec.exit, label %20 -26: ; preds = %25 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %26, %25, %23, %lean_dec.exit10 - %27 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %0, ptr noundef %1, ptr noundef %2, i64 noundef %.val13, i64 noundef %.val, ptr noundef %5) - ret ptr %27 +lean_dec.exit: ; preds = %20, %19, %17 + %21 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %0, ptr noundef %1, ptr noundef %2, i64 noundef %.val13, i64 noundef %.val, ptr noundef %5) + ret ptr %21 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ElimDeadVars.ll b/bench/lean4/optimized/ElimDeadVars.ll index f08957a144d..cdc2229d03d 100644 --- a/bench/lean4/optimized/ElimDeadVars.ll +++ b/bench/lean4/optimized/ElimDeadVars.ll @@ -954,7 +954,7 @@ lean_obj_tag.exit: ; preds = %lean_dec.exit55 %.val.i66 = load i32, ptr %34, align 4 %.mask = and i32 %.val.i66, -16777216 %35 = icmp eq i32 %.mask, 167772160 - br i1 %35, label %38, label %112 + br i1 %35, label %38, label %109 lean_obj_tag.exit.thread: ; preds = %lean_dec.exit55 %36 = and i64 %15, 8589934590 @@ -1143,38 +1143,32 @@ lean_alloc_ctor.exit: ; preds = %lean_dec.exit store ptr %57, ptr %107, align 8, !tbaa !4 %108 = getelementptr inbounds nuw i8, ptr %101, i64 32 store ptr %100, ptr %108, align 8, !tbaa !4 - %109 = ptrtoint ptr %101 to i64 - %110 = and i64 %109, 1 - %.not.i80 = icmp eq i64 %110, 0 - br i1 %.not.i80, label %111, label %l_Lean_IR_reshapeWithoutDead.exit - -111: ; preds = %lean_alloc_ctor.exit - store i32 2, ptr %101, align 4, !tbaa !8 + store i32 2, ptr %101, align 8, !tbaa !8 br label %l_Lean_IR_reshapeWithoutDead.exit -112: ; preds = %lean_obj_tag.exit +109: ; preds = %lean_obj_tag.exit %.val.i.i85 = load i32, ptr %14, align 4, !tbaa !8 - %113 = icmp sgt i32 %.val.i.i85, 0 - br i1 %113, label %114, label %116, !prof !13 + %110 = icmp sgt i32 %.val.i.i85, 0 + br i1 %110, label %111, label %113, !prof !13 -114: ; preds = %112 - %115 = add nuw i32 %.val.i.i85, 1 - store i32 %115, ptr %14, align 4, !tbaa !8 +111: ; preds = %109 + %112 = add nuw i32 %.val.i.i85, 1 + store i32 %112, ptr %14, align 4, !tbaa !8 br label %l_Lean_IR_reshapeWithoutDead.exit -116: ; preds = %112 +113: ; preds = %109 %.not.i.i86 = icmp eq i32 %.val.i.i85, 0 - br i1 %.not.i.i86, label %l_Lean_IR_reshapeWithoutDead.exit, label %117 + br i1 %.not.i.i86, label %l_Lean_IR_reshapeWithoutDead.exit, label %114 -117: ; preds = %116 +114: ; preds = %113 tail call void @lean_inc_ref_cold(ptr noundef nonnull %14) #3 br label %l_Lean_IR_reshapeWithoutDead.exit -l_Lean_IR_reshapeWithoutDead.exit: ; preds = %117, %116, %114, %lean_obj_tag.exit.thread, %111, %lean_alloc_ctor.exit, %50, %49, %47, %40 - %.sink100 = phi ptr [ %14, %40 ], [ %14, %47 ], [ %14, %49 ], [ %14, %50 ], [ %101, %lean_alloc_ctor.exit ], [ %101, %111 ], [ %14, %lean_obj_tag.exit.thread ], [ %14, %114 ], [ %14, %116 ], [ %14, %117 ] - %118 = tail call ptr @l_Lean_IR_FnBody_freeIndices(ptr noundef %.sink100) #3 - %119 = tail call ptr @l_Lean_IR_reshapeWithoutDead_reshape(ptr noundef %33, ptr noundef %.sink100, ptr noundef %118) - ret ptr %119 +l_Lean_IR_reshapeWithoutDead.exit: ; preds = %114, %113, %111, %lean_obj_tag.exit.thread, %lean_alloc_ctor.exit, %50, %49, %47, %40 + %.sink100 = phi ptr [ %14, %40 ], [ %14, %47 ], [ %14, %49 ], [ %14, %50 ], [ %101, %lean_alloc_ctor.exit ], [ %14, %lean_obj_tag.exit.thread ], [ %14, %111 ], [ %14, %113 ], [ %14, %114 ] + %115 = tail call ptr @l_Lean_IR_FnBody_freeIndices(ptr noundef %.sink100) #3 + %116 = tail call ptr @l_Lean_IR_reshapeWithoutDead_reshape(ptr noundef %33, ptr noundef %.sink100, ptr noundef %115) + ret ptr %116 } ; Function Attrs: nounwind uwtable @@ -1617,116 +1611,92 @@ declare ptr @l_Lean_IR_FnBody_flatten(ptr noundef) local_unnamed_addr #1 define ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !11 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !13 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !13 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !8 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %14, align 8, !tbaa !11 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !13 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %11, align 8, !tbaa !11 + %12 = load i32, ptr %1, align 8, !tbaa !8 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !13 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !8 +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable define ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val10 = load i64, ptr %4, align 8, !tbaa !11 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !13 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !13 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !8 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %14, align 8, !tbaa !11 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !13 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %11, align 8, !tbaa !11 + %12 = load i32, ptr %1, align 8, !tbaa !8 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !13 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !8 +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__2(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__2(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/EmbeddedConstraint.ll b/bench/lean4/optimized/EmbeddedConstraint.ll index 6ab461974f9..568d69aff98 100644 --- a/bench/lean4/optimized/EmbeddedConstraint.ll +++ b/bench/lean4/optimized/EmbeddedConstraint.ll @@ -10546,178 +10546,166 @@ lean_dec.exit: ; preds = %32, %31, %29, %lean define ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_embeddedConstraintPass___elambda__1___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) local_unnamed_addr #0 { %14 = getelementptr i8, ptr %3, i64 8 %.val = load i64, ptr %14, align 8, !tbaa !12 - %15 = ptrtoint ptr %3 to i64 - %16 = and i64 %15, 1 - %.not = icmp eq i64 %16, 0 - br i1 %.not, label %17, label %lean_dec.exit27 + %15 = load i32, ptr %3, align 8, !tbaa !8 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !11 17: ; preds = %13 - %18 = load i32, ptr %3, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 - -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %3, align 4, !tbaa !8 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %3, align 4, !tbaa !8 br label %lean_dec.exit27 -22: ; preds = %17 - %.not.i = icmp eq i32 %18, 0 - br i1 %.not.i, label %lean_dec.exit27, label %23 +19: ; preds = %13 + %.not.i = icmp eq i32 %15, 0 + br i1 %.not.i, label %lean_dec.exit27, label %20 -23: ; preds = %22 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit27 -lean_dec.exit27: ; preds = %23, %22, %20, %13 - %24 = getelementptr i8, ptr %4, i64 8 - %.val40 = load i64, ptr %24, align 8, !tbaa !12 - %25 = ptrtoint ptr %4 to i64 - %26 = and i64 %25, 1 - %.not41 = icmp eq i64 %26, 0 - br i1 %.not41, label %27, label %lean_dec.exit26 - -27: ; preds = %lean_dec.exit27 - %28 = load i32, ptr %4, align 4, !tbaa !8 - %29 = icmp sgt i32 %28, 1 - br i1 %29, label %30, label %32, !prof !11 +lean_dec.exit27: ; preds = %20, %19, %17 + %21 = getelementptr i8, ptr %4, i64 8 + %.val40 = load i64, ptr %21, align 8, !tbaa !12 + %22 = load i32, ptr %4, align 8, !tbaa !8 + %23 = icmp sgt i32 %22, 1 + br i1 %23, label %24, label %26, !prof !11 -30: ; preds = %27 - %31 = add nsw i32 %28, -1 - store i32 %31, ptr %4, align 4, !tbaa !8 +24: ; preds = %lean_dec.exit27 + %25 = add nsw i32 %22, -1 + store i32 %25, ptr %4, align 4, !tbaa !8 br label %lean_dec.exit26 -32: ; preds = %27 - %.not.i28 = icmp eq i32 %28, 0 - br i1 %.not.i28, label %lean_dec.exit26, label %33 +26: ; preds = %lean_dec.exit27 + %.not.i28 = icmp eq i32 %22, 0 + br i1 %.not.i28, label %lean_dec.exit26, label %27 -33: ; preds = %32 +27: ; preds = %26 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit26 -lean_dec.exit26: ; preds = %33, %32, %30, %lean_dec.exit27 - %34 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_embeddedConstraintPass___elambda__1___spec__1(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val40, ptr noundef %5, ptr poison, ptr poison, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) - %35 = ptrtoint ptr %7 to i64 - %36 = and i64 %35, 1 - %.not42 = icmp eq i64 %36, 0 - br i1 %.not42, label %37, label %lean_dec.exit25 +lean_dec.exit26: ; preds = %27, %26, %24 + %28 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_embeddedConstraintPass___elambda__1___spec__1(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val40, ptr noundef %5, ptr poison, ptr poison, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) + %29 = ptrtoint ptr %7 to i64 + %30 = and i64 %29, 1 + %.not42 = icmp eq i64 %30, 0 + br i1 %.not42, label %31, label %lean_dec.exit25 -37: ; preds = %lean_dec.exit26 - %38 = load i32, ptr %7, align 4, !tbaa !8 - %39 = icmp sgt i32 %38, 1 - br i1 %39, label %40, label %42, !prof !11 +31: ; preds = %lean_dec.exit26 + %32 = load i32, ptr %7, align 4, !tbaa !8 + %33 = icmp sgt i32 %32, 1 + br i1 %33, label %34, label %36, !prof !11 -40: ; preds = %37 - %41 = add nsw i32 %38, -1 - store i32 %41, ptr %7, align 4, !tbaa !8 +34: ; preds = %31 + %35 = add nsw i32 %32, -1 + store i32 %35, ptr %7, align 4, !tbaa !8 br label %lean_dec.exit25 -42: ; preds = %37 - %.not.i30 = icmp eq i32 %38, 0 - br i1 %.not.i30, label %lean_dec.exit25, label %43 +36: ; preds = %31 + %.not.i30 = icmp eq i32 %32, 0 + br i1 %.not.i30, label %lean_dec.exit25, label %37 -43: ; preds = %42 +37: ; preds = %36 tail call void @lean_dec_ref_cold(ptr noundef nonnull %7) #4 br label %lean_dec.exit25 -lean_dec.exit25: ; preds = %43, %42, %40, %lean_dec.exit26 - %44 = ptrtoint ptr %6 to i64 - %45 = and i64 %44, 1 - %.not43 = icmp eq i64 %45, 0 - br i1 %.not43, label %46, label %lean_dec.exit24 +lean_dec.exit25: ; preds = %37, %36, %34, %lean_dec.exit26 + %38 = ptrtoint ptr %6 to i64 + %39 = and i64 %38, 1 + %.not43 = icmp eq i64 %39, 0 + br i1 %.not43, label %40, label %lean_dec.exit24 -46: ; preds = %lean_dec.exit25 - %47 = load i32, ptr %6, align 4, !tbaa !8 - %48 = icmp sgt i32 %47, 1 - br i1 %48, label %49, label %51, !prof !11 +40: ; preds = %lean_dec.exit25 + %41 = load i32, ptr %6, align 4, !tbaa !8 + %42 = icmp sgt i32 %41, 1 + br i1 %42, label %43, label %45, !prof !11 -49: ; preds = %46 - %50 = add nsw i32 %47, -1 - store i32 %50, ptr %6, align 4, !tbaa !8 +43: ; preds = %40 + %44 = add nsw i32 %41, -1 + store i32 %44, ptr %6, align 4, !tbaa !8 br label %lean_dec.exit24 -51: ; preds = %46 - %.not.i32 = icmp eq i32 %47, 0 - br i1 %.not.i32, label %lean_dec.exit24, label %52 +45: ; preds = %40 + %.not.i32 = icmp eq i32 %41, 0 + br i1 %.not.i32, label %lean_dec.exit24, label %46 -52: ; preds = %51 +46: ; preds = %45 tail call void @lean_dec_ref_cold(ptr noundef nonnull %6) #4 br label %lean_dec.exit24 -lean_dec.exit24: ; preds = %52, %51, %49, %lean_dec.exit25 - %53 = ptrtoint ptr %2 to i64 - %54 = and i64 %53, 1 - %.not44 = icmp eq i64 %54, 0 - br i1 %.not44, label %55, label %lean_dec.exit23 +lean_dec.exit24: ; preds = %46, %45, %43, %lean_dec.exit25 + %47 = ptrtoint ptr %2 to i64 + %48 = and i64 %47, 1 + %.not44 = icmp eq i64 %48, 0 + br i1 %.not44, label %49, label %lean_dec.exit23 -55: ; preds = %lean_dec.exit24 - %56 = load i32, ptr %2, align 4, !tbaa !8 - %57 = icmp sgt i32 %56, 1 - br i1 %57, label %58, label %60, !prof !11 +49: ; preds = %lean_dec.exit24 + %50 = load i32, ptr %2, align 4, !tbaa !8 + %51 = icmp sgt i32 %50, 1 + br i1 %51, label %52, label %54, !prof !11 -58: ; preds = %55 - %59 = add nsw i32 %56, -1 - store i32 %59, ptr %2, align 4, !tbaa !8 +52: ; preds = %49 + %53 = add nsw i32 %50, -1 + store i32 %53, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit23 -60: ; preds = %55 - %.not.i34 = icmp eq i32 %56, 0 - br i1 %.not.i34, label %lean_dec.exit23, label %61 +54: ; preds = %49 + %.not.i34 = icmp eq i32 %50, 0 + br i1 %.not.i34, label %lean_dec.exit23, label %55 -61: ; preds = %60 +55: ; preds = %54 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit23 -lean_dec.exit23: ; preds = %61, %60, %58, %lean_dec.exit24 - %62 = ptrtoint ptr %1 to i64 - %63 = and i64 %62, 1 - %.not45 = icmp eq i64 %63, 0 - br i1 %.not45, label %64, label %lean_dec.exit22 +lean_dec.exit23: ; preds = %55, %54, %52, %lean_dec.exit24 + %56 = ptrtoint ptr %1 to i64 + %57 = and i64 %56, 1 + %.not45 = icmp eq i64 %57, 0 + br i1 %.not45, label %58, label %lean_dec.exit22 -64: ; preds = %lean_dec.exit23 - %65 = load i32, ptr %1, align 4, !tbaa !8 - %66 = icmp sgt i32 %65, 1 - br i1 %66, label %67, label %69, !prof !11 +58: ; preds = %lean_dec.exit23 + %59 = load i32, ptr %1, align 4, !tbaa !8 + %60 = icmp sgt i32 %59, 1 + br i1 %60, label %61, label %63, !prof !11 -67: ; preds = %64 - %68 = add nsw i32 %65, -1 - store i32 %68, ptr %1, align 4, !tbaa !8 +61: ; preds = %58 + %62 = add nsw i32 %59, -1 + store i32 %62, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit22 -69: ; preds = %64 - %.not.i36 = icmp eq i32 %65, 0 - br i1 %.not.i36, label %lean_dec.exit22, label %70 +63: ; preds = %58 + %.not.i36 = icmp eq i32 %59, 0 + br i1 %.not.i36, label %lean_dec.exit22, label %64 -70: ; preds = %69 +64: ; preds = %63 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit22 -lean_dec.exit22: ; preds = %70, %69, %67, %lean_dec.exit23 - %71 = ptrtoint ptr %0 to i64 - %72 = and i64 %71, 1 - %.not46 = icmp eq i64 %72, 0 - br i1 %.not46, label %73, label %lean_dec.exit +lean_dec.exit22: ; preds = %64, %63, %61, %lean_dec.exit23 + %65 = ptrtoint ptr %0 to i64 + %66 = and i64 %65, 1 + %.not46 = icmp eq i64 %66, 0 + br i1 %.not46, label %67, label %lean_dec.exit -73: ; preds = %lean_dec.exit22 - %74 = load i32, ptr %0, align 4, !tbaa !8 - %75 = icmp sgt i32 %74, 1 - br i1 %75, label %76, label %78, !prof !11 +67: ; preds = %lean_dec.exit22 + %68 = load i32, ptr %0, align 4, !tbaa !8 + %69 = icmp sgt i32 %68, 1 + br i1 %69, label %70, label %72, !prof !11 -76: ; preds = %73 - %77 = add nsw i32 %74, -1 - store i32 %77, ptr %0, align 4, !tbaa !8 +70: ; preds = %67 + %71 = add nsw i32 %68, -1 + store i32 %71, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -78: ; preds = %73 - %.not.i38 = icmp eq i32 %74, 0 - br i1 %.not.i38, label %lean_dec.exit, label %79 +72: ; preds = %67 + %.not.i38 = icmp eq i32 %68, 0 + br i1 %.not.i38, label %lean_dec.exit, label %73 -79: ; preds = %78 +73: ; preds = %72 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %79, %78, %76, %lean_dec.exit22 - ret ptr %34 +lean_dec.exit: ; preds = %73, %72, %70, %lean_dec.exit22 + ret ptr %28 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Encode.ll b/bench/lean4/optimized/Encode.ll index 8c2f4898abd..931ba340120 100644 --- a/bench/lean4/optimized/Encode.ll +++ b/bench/lean4/optimized/Encode.ll @@ -204,48 +204,42 @@ lean_alloc_ctor.exit: ; preds = %1 define noalias nonnull ptr @l_Lake_instToTomlFloat___boxed(ptr noundef %0) local_unnamed_addr #0 { %2 = getelementptr i8, ptr %0, i64 8 %.val = load double, ptr %2, align 8, !tbaa !12 - %3 = ptrtoint ptr %0 to i64 - %4 = and i64 %3, 1 - %.not = icmp eq i64 %4, 0 - br i1 %.not, label %5, label %lean_dec.exit + %3 = load i32, ptr %0, align 8, !tbaa !4 + %4 = icmp sgt i32 %3, 1 + br i1 %4, label %5, label %7, !prof !11 5: ; preds = %1 - %6 = load i32, ptr %0, align 4, !tbaa !4 - %7 = icmp sgt i32 %6, 1 - br i1 %7, label %8, label %10, !prof !11 - -8: ; preds = %5 - %9 = add nsw i32 %6, -1 - store i32 %9, ptr %0, align 4, !tbaa !4 + %6 = add nsw i32 %3, -1 + store i32 %6, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -10: ; preds = %5 - %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit, label %11 +7: ; preds = %1 + %.not.i = icmp eq i32 %3, 0 + br i1 %.not.i, label %lean_dec.exit, label %8 -11: ; preds = %10 +8: ; preds = %7 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %11, %10, %8, %1 +lean_dec.exit: ; preds = %8, %7, %5 tail call void @lean_inc_heartbeat() #4 - %12 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 - %13 = icmp eq ptr %12, null - br i1 %13, label %14, label %l_Lake_instToTomlFloat.exit + %9 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 + %10 = icmp eq ptr %9, null + br i1 %10, label %11, label %l_Lake_instToTomlFloat.exit -14: ; preds = %lean_dec.exit +11: ; preds = %lean_dec.exit tail call void @lean_internal_panic_out_of_memory() #5 unreachable l_Lake_instToTomlFloat.exit: ; preds = %lean_dec.exit - %15 = getelementptr inbounds nuw i8, ptr %12, i64 4 - store i32 1, ptr %12, align 4, !tbaa !4 - store i32 33619992, ptr %15, align 4 - %16 = getelementptr inbounds nuw i8, ptr %12, i64 8 - store ptr inttoptr (i64 1 to ptr), ptr %16, align 8, !tbaa !9 - %17 = getelementptr inbounds nuw i8, ptr %12, i64 16 - store double %.val, ptr %17, align 8, !tbaa !12 - ret ptr %12 + %12 = getelementptr inbounds nuw i8, ptr %9, i64 4 + store i32 1, ptr %9, align 4, !tbaa !4 + store i32 33619992, ptr %12, align 4 + %13 = getelementptr inbounds nuw i8, ptr %9, i64 8 + store ptr inttoptr (i64 1 to ptr), ptr %13, align 8, !tbaa !9 + %14 = getelementptr inbounds nuw i8, ptr %9, i64 16 + store double %.val, ptr %14, align 8, !tbaa !12 + ret ptr %9 } ; Function Attrs: nounwind uwtable @@ -520,58 +514,46 @@ lean_alloc_closure.exit: ; preds = %1 define ptr @l_Array_mapMUnsafe_map___at_Lake_instToTomlArray___spec__1___rarg___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #0 { %5 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !14 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit8 + %6 = load i32, ptr %1, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !11 8: ; preds = %4 - %9 = load i32, ptr %1, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !11 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit8 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit8, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit8, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %2, i64 8 - %.val11 = load i64, ptr %15, align 8, !tbaa !14 - %16 = ptrtoint ptr %2 to i64 - %17 = and i64 %16, 1 - %.not12 = icmp eq i64 %17, 0 - br i1 %.not12, label %18, label %lean_dec.exit +lean_dec.exit8: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %2, i64 8 + %.val11 = load i64, ptr %12, align 8, !tbaa !14 + %13 = load i32, ptr %2, align 8, !tbaa !4 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !11 -18: ; preds = %lean_dec.exit8 - %19 = load i32, ptr %2, align 4, !tbaa !4 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !11 - -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %2, align 4, !tbaa !4 +15: ; preds = %lean_dec.exit8 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -23: ; preds = %18 - %.not.i9 = icmp eq i32 %19, 0 - br i1 %.not.i9, label %lean_dec.exit, label %24 +17: ; preds = %lean_dec.exit8 + %.not.i9 = icmp eq i32 %13, 0 + br i1 %.not.i9, label %lean_dec.exit, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %24, %23, %21, %lean_dec.exit8 - %25 = tail call ptr @l_Array_mapMUnsafe_map___at_Lake_instToTomlArray___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) - ret ptr %25 +lean_dec.exit: ; preds = %18, %17, %15 + %19 = tail call ptr @l_Array_mapMUnsafe_map___at_Lake_instToTomlArray___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) + ret ptr %19 } ; Function Attrs: nounwind uwtable @@ -1030,82 +1012,70 @@ lean_alloc_closure.exit: ; preds = %1 define ptr @l_Array_foldlMUnsafe_fold___at_Lake_Toml_encodeArray_x3f___spec__1___rarg___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 { %6 = getelementptr i8, ptr %2, i64 8 %.val16 = load i64, ptr %6, align 8, !tbaa !14 - %7 = ptrtoint ptr %2 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit11 + %7 = load i32, ptr %2, align 8, !tbaa !4 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !11 9: ; preds = %5 - %10 = load i32, ptr %2, align 4, !tbaa !4 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !11 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %2, align 4, !tbaa !4 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit11 -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit11, label %15 +11: ; preds = %5 + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit11, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %15, %14, %12, %5 - %16 = getelementptr i8, ptr %3, i64 8 - %.val = load i64, ptr %16, align 8, !tbaa !14 - %17 = ptrtoint ptr %3 to i64 - %18 = and i64 %17, 1 - %.not17 = icmp eq i64 %18, 0 - br i1 %.not17, label %19, label %lean_dec.exit10 - -19: ; preds = %lean_dec.exit11 - %20 = load i32, ptr %3, align 4, !tbaa !4 - %21 = icmp sgt i32 %20, 1 - br i1 %21, label %22, label %24, !prof !11 +lean_dec.exit11: ; preds = %12, %11, %9 + %13 = getelementptr i8, ptr %3, i64 8 + %.val = load i64, ptr %13, align 8, !tbaa !14 + %14 = load i32, ptr %3, align 8, !tbaa !4 + %15 = icmp sgt i32 %14, 1 + br i1 %15, label %16, label %18, !prof !11 -22: ; preds = %19 - %23 = add nsw i32 %20, -1 - store i32 %23, ptr %3, align 4, !tbaa !4 +16: ; preds = %lean_dec.exit11 + %17 = add nsw i32 %14, -1 + store i32 %17, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit10 -24: ; preds = %19 - %.not.i12 = icmp eq i32 %20, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %25 +18: ; preds = %lean_dec.exit11 + %.not.i12 = icmp eq i32 %14, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %19 -25: ; preds = %24 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %25, %24, %22, %lean_dec.exit11 - %26 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lake_Toml_encodeArray_x3f___spec__1___rarg(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val, ptr noundef %4) - %27 = ptrtoint ptr %1 to i64 - %28 = and i64 %27, 1 - %.not18 = icmp eq i64 %28, 0 - br i1 %.not18, label %29, label %lean_dec.exit +lean_dec.exit10: ; preds = %19, %18, %16 + %20 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lake_Toml_encodeArray_x3f___spec__1___rarg(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val, ptr noundef %4) + %21 = ptrtoint ptr %1 to i64 + %22 = and i64 %21, 1 + %.not18 = icmp eq i64 %22, 0 + br i1 %.not18, label %23, label %lean_dec.exit -29: ; preds = %lean_dec.exit10 - %30 = load i32, ptr %1, align 4, !tbaa !4 - %31 = icmp sgt i32 %30, 1 - br i1 %31, label %32, label %34, !prof !11 +23: ; preds = %lean_dec.exit10 + %24 = load i32, ptr %1, align 4, !tbaa !4 + %25 = icmp sgt i32 %24, 1 + br i1 %25, label %26, label %28, !prof !11 -32: ; preds = %29 - %33 = add nsw i32 %30, -1 - store i32 %33, ptr %1, align 4, !tbaa !4 +26: ; preds = %23 + %27 = add nsw i32 %24, -1 + store i32 %27, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -34: ; preds = %29 - %.not.i14 = icmp eq i32 %30, 0 - br i1 %.not.i14, label %lean_dec.exit, label %35 +28: ; preds = %23 + %.not.i14 = icmp eq i32 %24, 0 + br i1 %.not.i14, label %lean_dec.exit, label %29 -35: ; preds = %34 +29: ; preds = %28 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 - ret ptr %26 +lean_dec.exit: ; preds = %29, %28, %26, %lean_dec.exit10 + ret ptr %20 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ExportAttr.ll b/bench/lean4/optimized/ExportAttr.ll index 9eb82b706f6..db26197564e 100644 --- a/bench/lean4/optimized/ExportAttr.ll +++ b/bench/lean4/optimized/ExportAttr.ll @@ -341,123 +341,108 @@ lean_inc.exit: ; preds = %13, %26 %39 = shl i64 %.val, 1 %40 = add i64 %39, -1 %41 = inttoptr i64 %40 to ptr - %42 = ptrtoint ptr %0 to i64 - %43 = and i64 %42, 1 - %.not104 = icmp eq i64 %43, 0 - br i1 %.not104, label %44, label %lean_inc.exit80 - -44: ; preds = %lean_inc.exit - %.val.i98 = load i32, ptr %0, align 4, !tbaa !5 - %45 = icmp sgt i32 %.val.i98, 0 - br i1 %45, label %46, label %48, !prof !10 - -46: ; preds = %44 - %47 = add nuw i32 %.val.i98, 1 - store i32 %47, ptr %0, align 4, !tbaa !5 + %.val.i98 = load i32, ptr %0, align 8, !tbaa !5 + %42 = icmp sgt i32 %.val.i98, 0 + br i1 %42, label %43, label %45, !prof !10 + +43: ; preds = %lean_inc.exit + %44 = add nuw i32 %.val.i98, 1 + store i32 %44, ptr %0, align 4, !tbaa !5 br label %lean_inc.exit80 -48: ; preds = %44 +45: ; preds = %lean_inc.exit %.not.i99 = icmp eq i32 %.val.i98, 0 - br i1 %.not.i99, label %lean_inc.exit80, label %49 + br i1 %.not.i99, label %lean_inc.exit80, label %46 -49: ; preds = %48 +46: ; preds = %45 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #3 br label %lean_inc.exit80 -lean_inc.exit80: ; preds = %49, %48, %46, %lean_inc.exit +lean_inc.exit80: ; preds = %46, %45, %43 tail call void @lean_inc_heartbeat() #3 - %50 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %51 = icmp eq ptr %50, null - br i1 %51, label %52, label %lean_alloc_ctor.exit + %47 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %48 = icmp eq ptr %47, null + br i1 %48, label %49, label %lean_alloc_ctor.exit -52: ; preds = %lean_inc.exit80 +49: ; preds = %lean_inc.exit80 tail call void @lean_internal_panic_out_of_memory() #4 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit80 - %53 = getelementptr inbounds nuw i8, ptr %50, i64 4 - store i32 1, ptr %50, align 4, !tbaa !5 - store i32 196640, ptr %53, align 4 - %54 = getelementptr inbounds nuw i8, ptr %50, i64 8 - store ptr %0, ptr %54, align 8, !tbaa !13 - %55 = getelementptr inbounds nuw i8, ptr %50, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %55, align 8, !tbaa !13 - %56 = getelementptr inbounds nuw i8, ptr %50, i64 24 - store ptr %41, ptr %56, align 8, !tbaa !13 - %57 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %50, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 - %58 = ptrtoint ptr %50 to i64 - %59 = and i64 %58, 1 - %.not105 = icmp eq i64 %59, 0 - br i1 %.not105, label %60, label %lean_dec.exit74 - -60: ; preds = %lean_alloc_ctor.exit - %61 = load i32, ptr %50, align 4, !tbaa !5 - %62 = icmp sgt i32 %61, 1 - br i1 %62, label %63, label %65, !prof !10 - -63: ; preds = %60 - %64 = add nsw i32 %61, -1 - store i32 %64, ptr %50, align 4, !tbaa !5 + %50 = getelementptr inbounds nuw i8, ptr %47, i64 4 + store i32 1, ptr %47, align 4, !tbaa !5 + store i32 196640, ptr %50, align 4 + %51 = getelementptr inbounds nuw i8, ptr %47, i64 8 + store ptr %0, ptr %51, align 8, !tbaa !13 + %52 = getelementptr inbounds nuw i8, ptr %47, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %52, align 8, !tbaa !13 + %53 = getelementptr inbounds nuw i8, ptr %47, i64 24 + store ptr %41, ptr %53, align 8, !tbaa !13 + %54 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %47, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 + %55 = load i32, ptr %47, align 8, !tbaa !5 + %56 = icmp sgt i32 %55, 1 + br i1 %56, label %57, label %59, !prof !10 + +57: ; preds = %lean_alloc_ctor.exit + %58 = add nsw i32 %55, -1 + store i32 %58, ptr %47, align 4, !tbaa !5 br label %lean_dec.exit74 -65: ; preds = %60 - %.not.i89 = icmp eq i32 %61, 0 - br i1 %.not.i89, label %lean_dec.exit74, label %66 +59: ; preds = %lean_alloc_ctor.exit + %.not.i89 = icmp eq i32 %55, 0 + br i1 %.not.i89, label %lean_dec.exit74, label %60 -66: ; preds = %65 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %50) #3 +60: ; preds = %59 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %47) #3 br label %lean_dec.exit74 -lean_dec.exit74: ; preds = %lean_alloc_ctor.exit, %63, %65, %66 - %67 = ptrtoint ptr %57 to i64 - %68 = and i64 %67, 1 - %.not106 = icmp eq i64 %68, 0 - br i1 %.not106, label %69, label %lean_dec.exit72, !prof !4 - -69: ; preds = %lean_dec.exit74 - %70 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %57) #3 - %71 = load i32, ptr %57, align 4, !tbaa !5 - %72 = icmp sgt i32 %71, 1 - br i1 %72, label %73, label %75, !prof !10 - -73: ; preds = %69 - %74 = add nsw i32 %71, -1 - store i32 %74, ptr %57, align 4, !tbaa !5 - br label %lean_dec.exit72 +lean_dec.exit74: ; preds = %57, %59, %60 + %61 = ptrtoint ptr %54 to i64 + %62 = and i64 %61, 1 + %.not106 = icmp eq i64 %62, 0 + br i1 %.not106, label %63, label %lean_dec.exit72, !prof !4 -75: ; preds = %69 - %.not.i91 = icmp eq i32 %71, 0 - br i1 %.not.i91, label %lean_dec.exit72, label %76 +63: ; preds = %lean_dec.exit74 + %64 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %54) #3 + %65 = load i32, ptr %54, align 4, !tbaa !5 + %66 = icmp sgt i32 %65, 1 + br i1 %66, label %67, label %69, !prof !10 -76: ; preds = %75 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %57) #3 +67: ; preds = %63 + %68 = add nsw i32 %65, -1 + store i32 %68, ptr %54, align 4, !tbaa !5 br label %lean_dec.exit72 -lean_dec.exit72: ; preds = %lean_dec.exit74, %73, %75, %76 - %.0.i122 = phi ptr [ %70, %73 ], [ %70, %75 ], [ %70, %76 ], [ %57, %lean_dec.exit74 ] - %77 = tail call zeroext i8 @l_String_anyAux___at___private_Lean_Compiler_ExportAttr_0__Lean_isValidCppId___spec__1(ptr noundef nonnull %0, ptr noundef nonnull %41, ptr noundef %.0.i122) - br i1 %.not104, label %78, label %lean_dec.exit +69: ; preds = %63 + %.not.i91 = icmp eq i32 %65, 0 + br i1 %.not.i91, label %lean_dec.exit72, label %70 + +70: ; preds = %69 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %54) #3 + br label %lean_dec.exit72 -78: ; preds = %lean_dec.exit72 - %79 = load i32, ptr %0, align 4, !tbaa !5 - %80 = icmp sgt i32 %79, 1 - br i1 %80, label %81, label %83, !prof !10 +lean_dec.exit72: ; preds = %lean_dec.exit74, %67, %69, %70 + %.0.i122 = phi ptr [ %64, %67 ], [ %64, %69 ], [ %64, %70 ], [ %54, %lean_dec.exit74 ] + %71 = tail call zeroext i8 @l_String_anyAux___at___private_Lean_Compiler_ExportAttr_0__Lean_isValidCppId___spec__1(ptr noundef nonnull %0, ptr noundef nonnull %41, ptr noundef %.0.i122) + %72 = load i32, ptr %0, align 4, !tbaa !5 + %73 = icmp sgt i32 %72, 1 + br i1 %73, label %74, label %76, !prof !10 -81: ; preds = %78 - %82 = add nsw i32 %79, -1 - store i32 %82, ptr %0, align 4, !tbaa !5 +74: ; preds = %lean_dec.exit72 + %75 = add nsw i32 %72, -1 + store i32 %75, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -83: ; preds = %78 - %.not.i95 = icmp eq i32 %79, 0 - br i1 %.not.i95, label %lean_dec.exit, label %84 +76: ; preds = %lean_dec.exit72 + %.not.i95 = icmp eq i32 %72, 0 + br i1 %.not.i95, label %lean_dec.exit, label %77 -84: ; preds = %83 +77: ; preds = %76 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %84, %83, %81, %lean_dec.exit72 - %. = xor i8 %77, 1 +lean_dec.exit: ; preds = %77, %76, %74 + %. = xor i8 %71, 1 br label %lean_dec.exit79 lean_dec.exit79: ; preds = %28, %34, %36, %37, %.critedge71, %22, %24, %25, %.critedge, %9, %11, %12, %lean_dec.exit diff --git a/bench/lean4/optimized/External.ll b/bench/lean4/optimized/External.ll index a5461d3b221..45191b3d4fc 100644 --- a/bench/lean4/optimized/External.ll +++ b/bench/lean4/optimized/External.ll @@ -6676,58 +6676,46 @@ lean_dec.exit: ; preds = %15, %14, %12, %2 define ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Tactic_BVDecide_External_ModelParser_parsePartialAssignment___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !8 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %14, align 8, !tbaa !12 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !8 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %11, align 8, !tbaa !12 + %12 = load i32, ptr %1, align 8, !tbaa !8 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !8 +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Tactic_BVDecide_External_ModelParser_parsePartialAssignment___spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Tactic_BVDecide_External_ModelParser_parsePartialAssignment___spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/FVarSubset.ll b/bench/lean4/optimized/FVarSubset.ll index c2f4d3d8f36..0fe94641adc 100644 --- a/bench/lean4/optimized/FVarSubset.ll +++ b/bench/lean4/optimized/FVarSubset.ll @@ -319,67 +319,61 @@ lean_alloc_closure.exit: ; preds = %28 %38 = getelementptr inbounds nuw i8, ptr %31, i64 24 store ptr %30, ptr %38, align 8, !tbaa !4 %39 = tail call ptr @lean_find_ext_expr(ptr noundef nonnull %31, ptr noundef %0) #3 - %40 = ptrtoint ptr %31 to i64 - %41 = and i64 %40, 1 - %.not = icmp eq i64 %41, 0 - br i1 %.not, label %42, label %lean_dec.exit19 + %40 = load i32, ptr %31, align 8, !tbaa !8 + %41 = icmp sgt i32 %40, 1 + br i1 %41, label %42, label %44, !prof !11 42: ; preds = %lean_alloc_closure.exit - %43 = load i32, ptr %31, align 4, !tbaa !8 - %44 = icmp sgt i32 %43, 1 - br i1 %44, label %45, label %47, !prof !11 - -45: ; preds = %42 - %46 = add nsw i32 %43, -1 - store i32 %46, ptr %31, align 4, !tbaa !8 + %43 = add nsw i32 %40, -1 + store i32 %43, ptr %31, align 4, !tbaa !8 br label %lean_dec.exit19 -47: ; preds = %42 - %.not.i24 = icmp eq i32 %43, 0 - br i1 %.not.i24, label %lean_dec.exit19, label %48 +44: ; preds = %lean_alloc_closure.exit + %.not.i24 = icmp eq i32 %40, 0 + br i1 %.not.i24, label %lean_dec.exit19, label %45 -48: ; preds = %47 +45: ; preds = %44 tail call void @lean_dec_ref_cold(ptr noundef nonnull %31) #3 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %48, %47, %45, %lean_alloc_closure.exit - %49 = ptrtoint ptr %39 to i64 - %50 = and i64 %49, 1 - %.not.i28 = icmp eq i64 %50, 0 +lean_dec.exit19: ; preds = %45, %44, %42 + %46 = ptrtoint ptr %39 to i64 + %47 = and i64 %46, 1 + %.not.i28 = icmp eq i64 %47, 0 br i1 %.not.i28, label %lean_obj_tag.exit.thread, label %lean_obj_tag.exit lean_obj_tag.exit: ; preds = %lean_dec.exit19 - %51 = and i64 %49, 8589934590 - %52 = icmp eq i64 %51, 0 - %spec.select = zext i1 %52 to i8 + %48 = and i64 %46, 8589934590 + %49 = icmp eq i64 %48, 0 + %spec.select = zext i1 %49 to i8 br label %lean_dec.exit21 lean_obj_tag.exit.thread: ; preds = %lean_dec.exit19 - %53 = getelementptr i8, ptr %39, i64 4 - %.val.i = load i32, ptr %53, align 4 - %54 = icmp ult i32 %.val.i, 16777216 - br i1 %54, label %lean_dec.exit21, label %.thread + %50 = getelementptr i8, ptr %39, i64 4 + %.val.i = load i32, ptr %50, align 4 + %51 = icmp ult i32 %.val.i, 16777216 + br i1 %51, label %lean_dec.exit21, label %.thread .thread: ; preds = %lean_obj_tag.exit.thread - %55 = load i32, ptr %39, align 4, !tbaa !8 - %56 = icmp sgt i32 %55, 1 - br i1 %56, label %57, label %59, !prof !11 + %52 = load i32, ptr %39, align 4, !tbaa !8 + %53 = icmp sgt i32 %52, 1 + br i1 %53, label %54, label %56, !prof !11 -57: ; preds = %.thread - %58 = add nsw i32 %55, -1 - store i32 %58, ptr %39, align 4, !tbaa !8 +54: ; preds = %.thread + %55 = add nsw i32 %52, -1 + store i32 %55, ptr %39, align 4, !tbaa !8 br label %lean_dec.exit21 -59: ; preds = %.thread - %.not.i26 = icmp eq i32 %55, 0 - br i1 %.not.i26, label %lean_dec.exit21, label %60 +56: ; preds = %.thread + %.not.i26 = icmp eq i32 %52, 0 + br i1 %.not.i26, label %lean_dec.exit21, label %57 -60: ; preds = %59 +57: ; preds = %56 tail call void @lean_dec_ref_cold(ptr noundef nonnull %39) #3 br label %lean_dec.exit21 -lean_dec.exit21: ; preds = %lean_obj_tag.exit, %57, %59, %60, %lean_obj_tag.exit.thread, %18, %24, %26, %27, %5, %11, %13, %14 - %.0 = phi i8 [ 1, %14 ], [ 1, %13 ], [ 1, %11 ], [ 1, %5 ], [ 0, %27 ], [ 0, %26 ], [ 0, %24 ], [ 0, %18 ], [ 1, %lean_obj_tag.exit.thread ], [ 0, %60 ], [ 0, %59 ], [ 0, %57 ], [ %spec.select, %lean_obj_tag.exit ] +lean_dec.exit21: ; preds = %lean_obj_tag.exit, %54, %56, %57, %lean_obj_tag.exit.thread, %18, %24, %26, %27, %5, %11, %13, %14 + %.0 = phi i8 [ 1, %14 ], [ 1, %13 ], [ 1, %11 ], [ 1, %5 ], [ 0, %27 ], [ 0, %26 ], [ 0, %24 ], [ 0, %18 ], [ 1, %lean_obj_tag.exit.thread ], [ 0, %57 ], [ 0, %56 ], [ 0, %54 ], [ %spec.select, %lean_obj_tag.exit ] ret i8 %.0 } diff --git a/bench/lean4/optimized/FVarSubst.ll b/bench/lean4/optimized/FVarSubst.ll index 4d610c97790..78fc517347c 100644 --- a/bench/lean4/optimized/FVarSubst.ll +++ b/bench/lean4/optimized/FVarSubst.ll @@ -1451,7 +1451,7 @@ lean_dec.exit: ; preds = %lean_obj_tag.exit, define ptr @l_Lean_Meta_FVarSubst_apply(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 { %3 = tail call zeroext i8 @l_Lean_AssocList_isEmpty___rarg(ptr noundef %0) #3 %4 = icmp eq i8 %3, 0 - br i1 %4, label %5, label %45 + br i1 %4, label %5, label %42 5: ; preds = %2 %6 = tail call zeroext i8 @l_Lean_Expr_hasFVar(ptr noundef %1) #3 @@ -1529,79 +1529,73 @@ lean_alloc_closure.exit: ; preds = %26 %34 = getelementptr inbounds nuw i8, ptr %27, i64 24 store ptr %0, ptr %34, align 8, !tbaa !10 %35 = tail call ptr @lean_replace_expr(ptr noundef nonnull %27, ptr noundef %1) #3 - %36 = ptrtoint ptr %27 to i64 - %37 = and i64 %36, 1 - %.not28 = icmp eq i64 %37, 0 - br i1 %.not28, label %38, label %lean_inc.exit18 + %36 = load i32, ptr %27, align 8, !tbaa !4 + %37 = icmp sgt i32 %36, 1 + br i1 %37, label %38, label %40, !prof !9 38: ; preds = %lean_alloc_closure.exit - %39 = load i32, ptr %27, align 4, !tbaa !4 - %40 = icmp sgt i32 %39, 1 - br i1 %40, label %41, label %43, !prof !9 - -41: ; preds = %38 - %42 = add nsw i32 %39, -1 - store i32 %42, ptr %27, align 4, !tbaa !4 + %39 = add nsw i32 %36, -1 + store i32 %39, ptr %27, align 4, !tbaa !4 br label %lean_inc.exit18 -43: ; preds = %38 - %.not.i19 = icmp eq i32 %39, 0 - br i1 %.not.i19, label %lean_inc.exit18, label %44 +40: ; preds = %lean_alloc_closure.exit + %.not.i19 = icmp eq i32 %36, 0 + br i1 %.not.i19, label %lean_inc.exit18, label %41 -44: ; preds = %43 +41: ; preds = %40 tail call void @lean_dec_ref_cold(ptr noundef nonnull %27) #3 br label %lean_inc.exit18 -45: ; preds = %2 - %46 = ptrtoint ptr %0 to i64 - %47 = and i64 %46, 1 - %.not = icmp eq i64 %47, 0 - br i1 %.not, label %48, label %lean_dec.exit +42: ; preds = %2 + %43 = ptrtoint ptr %0 to i64 + %44 = and i64 %43, 1 + %.not = icmp eq i64 %44, 0 + br i1 %.not, label %45, label %lean_dec.exit -48: ; preds = %45 - %49 = load i32, ptr %0, align 4, !tbaa !4 - %50 = icmp sgt i32 %49, 1 - br i1 %50, label %51, label %53, !prof !9 +45: ; preds = %42 + %46 = load i32, ptr %0, align 4, !tbaa !4 + %47 = icmp sgt i32 %46, 1 + br i1 %47, label %48, label %50, !prof !9 -51: ; preds = %48 - %52 = add nsw i32 %49, -1 - store i32 %52, ptr %0, align 4, !tbaa !4 +48: ; preds = %45 + %49 = add nsw i32 %46, -1 + store i32 %49, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -53: ; preds = %48 - %.not.i21 = icmp eq i32 %49, 0 - br i1 %.not.i21, label %lean_dec.exit, label %54 +50: ; preds = %45 + %.not.i21 = icmp eq i32 %46, 0 + br i1 %.not.i21, label %lean_dec.exit, label %51 -54: ; preds = %53 +51: ; preds = %50 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %54, %53, %51, %45 - %55 = ptrtoint ptr %1 to i64 - %56 = and i64 %55, 1 - %.not27 = icmp eq i64 %56, 0 - br i1 %.not27, label %57, label %lean_inc.exit18 +lean_dec.exit: ; preds = %51, %50, %48, %42 + %52 = ptrtoint ptr %1 to i64 + %53 = and i64 %52, 1 + %.not27 = icmp eq i64 %53, 0 + br i1 %.not27, label %54, label %lean_inc.exit18 -57: ; preds = %lean_dec.exit +54: ; preds = %lean_dec.exit %.val.i24 = load i32, ptr %1, align 4, !tbaa !4 - %58 = icmp sgt i32 %.val.i24, 0 - br i1 %58, label %59, label %61, !prof !9 + %55 = icmp sgt i32 %.val.i24, 0 + br i1 %55, label %56, label %58, !prof !9 -59: ; preds = %57 - %60 = add nuw i32 %.val.i24, 1 - store i32 %60, ptr %1, align 4, !tbaa !4 +56: ; preds = %54 + %57 = add nuw i32 %.val.i24, 1 + store i32 %57, ptr %1, align 4, !tbaa !4 br label %lean_inc.exit18 -61: ; preds = %57 +58: ; preds = %54 %.not.i25 = icmp eq i32 %.val.i24, 0 - br i1 %.not.i25, label %lean_inc.exit18, label %62 + br i1 %.not.i25, label %lean_inc.exit18, label %59 -62: ; preds = %61 +59: ; preds = %58 tail call void @lean_inc_ref_cold(ptr noundef nonnull %1) #3 br label %lean_inc.exit18 -lean_inc.exit18: ; preds = %lean_dec.exit, %59, %61, %62, %lean_alloc_closure.exit, %41, %43, %44, %lean_dec.exit17, %22, %24, %25 - %.1 = phi ptr [ %1, %25 ], [ %1, %24 ], [ %1, %22 ], [ %1, %lean_dec.exit17 ], [ %35, %44 ], [ %35, %43 ], [ %35, %41 ], [ %35, %lean_alloc_closure.exit ], [ %1, %62 ], [ %1, %61 ], [ %1, %59 ], [ %1, %lean_dec.exit ] +lean_inc.exit18: ; preds = %lean_dec.exit, %56, %58, %59, %38, %40, %41, %lean_dec.exit17, %22, %24, %25 + %.1 = phi ptr [ %1, %25 ], [ %1, %24 ], [ %1, %22 ], [ %1, %lean_dec.exit17 ], [ %35, %41 ], [ %35, %40 ], [ %35, %38 ], [ %1, %59 ], [ %1, %58 ], [ %1, %56 ], [ %1, %lean_dec.exit ] ret ptr %.1 } diff --git a/bench/lean4/optimized/FilePath.ll b/bench/lean4/optimized/FilePath.ll index a6a759d10d2..507be5834c8 100644 --- a/bench/lean4/optimized/FilePath.ll +++ b/bench/lean4/optimized/FilePath.ll @@ -767,35 +767,29 @@ lean_inc.exit: %4 = add i64 %3, -1 %5 = inttoptr i64 %4 to ptr %6 = tail call ptr @l_Lake_modOfFilePath_removeExts(ptr noundef %1, ptr noundef nonnull %5, ptr noundef nonnull %5) - %7 = ptrtoint ptr %1 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit + %7 = load i32, ptr %1, align 8, !tbaa !8 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !11 9: ; preds = %lean_inc.exit - %10 = load i32, ptr %1, align 4, !tbaa !8 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !11 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %1, align 4, !tbaa !8 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit, label %15 +11: ; preds = %lean_inc.exit + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %15, %14, %12, %lean_inc.exit - %16 = load ptr, ptr @l_Lake_joinRelative___closed__3, align 8, !tbaa !13 - %17 = tail call ptr @l_String_stripSuffix(ptr noundef %6, ptr noundef %16) #3 - %18 = tail call ptr @l_System_FilePath_components(ptr noundef %17) #3 - %19 = tail call ptr @l_List_foldl___at_Lake_modOfFilePath___spec__1(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %18) - ret ptr %19 +lean_dec.exit: ; preds = %12, %11, %9 + %13 = load ptr, ptr @l_Lake_joinRelative___closed__3, align 8, !tbaa !13 + %14 = tail call ptr @l_String_stripSuffix(ptr noundef %6, ptr noundef %13) #3 + %15 = tail call ptr @l_System_FilePath_components(ptr noundef %14) #3 + %16 = tail call ptr @l_List_foldl___at_Lake_modOfFilePath___spec__1(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %15) + ret ptr %16 } declare ptr @l_System_FilePath_normalize(ptr noundef) local_unnamed_addr #1 diff --git a/bench/lean4/optimized/FindLevelMVar.ll b/bench/lean4/optimized/FindLevelMVar.ll index 8ee7631e28b..3d4f983ef25 100644 --- a/bench/lean4/optimized/FindLevelMVar.ll +++ b/bench/lean4/optimized/FindLevelMVar.ll @@ -2246,164 +2246,140 @@ lean_dec.exit45: ; preds = %lean_dec.exit39, %3 define ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #0 { %7 = getelementptr i8, ptr %2, i64 8 %.val = load i64, ptr %7, align 8, !tbaa !14 - %8 = ptrtoint ptr %2 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit12 + %8 = load i32, ptr %2, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !9 10: ; preds = %6 - %11 = load i32, ptr %2, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !9 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %2, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit12 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit12, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit12, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %16, %15, %13, %6 - %17 = getelementptr i8, ptr %3, i64 8 - %.val17 = load i64, ptr %17, align 8, !tbaa !14 - %18 = ptrtoint ptr %3 to i64 - %19 = and i64 %18, 1 - %.not18 = icmp eq i64 %19, 0 - br i1 %.not18, label %20, label %lean_dec.exit11 - -20: ; preds = %lean_dec.exit12 - %21 = load i32, ptr %3, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !9 - -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %3, align 4, !tbaa !4 +lean_dec.exit12: ; preds = %13, %12, %10 + %14 = getelementptr i8, ptr %3, i64 8 + %.val17 = load i64, ptr %14, align 8, !tbaa !14 + %15 = load i32, ptr %3, align 8, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !9 + +17: ; preds = %lean_dec.exit12 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit11 -25: ; preds = %20 - %.not.i13 = icmp eq i32 %21, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %26 +19: ; preds = %lean_dec.exit12 + %.not.i13 = icmp eq i32 %15, 0 + br i1 %.not.i13, label %lean_dec.exit11, label %20 -26: ; preds = %25 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %26, %25, %23, %lean_dec.exit12 - %27 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) - %28 = ptrtoint ptr %1 to i64 - %29 = and i64 %28, 1 - %.not19 = icmp eq i64 %29, 0 - br i1 %.not19, label %30, label %lean_dec.exit - -30: ; preds = %lean_dec.exit11 - %31 = load i32, ptr %1, align 4, !tbaa !4 - %32 = icmp sgt i32 %31, 1 - br i1 %32, label %33, label %35, !prof !9 - -33: ; preds = %30 - %34 = add nsw i32 %31, -1 - store i32 %34, ptr %1, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %20, %19, %17 + %21 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) + %22 = ptrtoint ptr %1 to i64 + %23 = and i64 %22, 1 + %.not19 = icmp eq i64 %23, 0 + br i1 %.not19, label %24, label %lean_dec.exit + +24: ; preds = %lean_dec.exit11 + %25 = load i32, ptr %1, align 4, !tbaa !4 + %26 = icmp sgt i32 %25, 1 + br i1 %26, label %27, label %29, !prof !9 + +27: ; preds = %24 + %28 = add nsw i32 %25, -1 + store i32 %28, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -35: ; preds = %30 - %.not.i15 = icmp eq i32 %31, 0 - br i1 %.not.i15, label %lean_dec.exit, label %36 +29: ; preds = %24 + %.not.i15 = icmp eq i32 %25, 0 + br i1 %.not.i15, label %lean_dec.exit, label %30 -36: ; preds = %35 +30: ; preds = %29 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 - ret ptr %27 +lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 + ret ptr %21 } ; Function Attrs: nounwind uwtable define ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__3___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #0 { %7 = getelementptr i8, ptr %2, i64 8 %.val17 = load i64, ptr %7, align 8, !tbaa !14 - %8 = ptrtoint ptr %2 to i64 - %9 = and i64 %8, 1 - %.not = icmp eq i64 %9, 0 - br i1 %.not, label %10, label %lean_dec.exit12 + %8 = load i32, ptr %2, align 8, !tbaa !4 + %9 = icmp sgt i32 %8, 1 + br i1 %9, label %10, label %12, !prof !9 10: ; preds = %6 - %11 = load i32, ptr %2, align 4, !tbaa !4 - %12 = icmp sgt i32 %11, 1 - br i1 %12, label %13, label %15, !prof !9 - -13: ; preds = %10 - %14 = add nsw i32 %11, -1 - store i32 %14, ptr %2, align 4, !tbaa !4 + %11 = add nsw i32 %8, -1 + store i32 %11, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit12 -15: ; preds = %10 - %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit12, label %16 +12: ; preds = %6 + %.not.i = icmp eq i32 %8, 0 + br i1 %.not.i, label %lean_dec.exit12, label %13 -16: ; preds = %15 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %16, %15, %13, %6 - %17 = getelementptr i8, ptr %3, i64 8 - %.val = load i64, ptr %17, align 8, !tbaa !14 - %18 = ptrtoint ptr %3 to i64 - %19 = and i64 %18, 1 - %.not18 = icmp eq i64 %19, 0 - br i1 %.not18, label %20, label %lean_dec.exit11 - -20: ; preds = %lean_dec.exit12 - %21 = load i32, ptr %3, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !9 - -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %3, align 4, !tbaa !4 +lean_dec.exit12: ; preds = %13, %12, %10 + %14 = getelementptr i8, ptr %3, i64 8 + %.val = load i64, ptr %14, align 8, !tbaa !14 + %15 = load i32, ptr %3, align 8, !tbaa !4 + %16 = icmp sgt i32 %15, 1 + br i1 %16, label %17, label %19, !prof !9 + +17: ; preds = %lean_dec.exit12 + %18 = add nsw i32 %15, -1 + store i32 %18, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit11 -25: ; preds = %20 - %.not.i13 = icmp eq i32 %21, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %26 +19: ; preds = %lean_dec.exit12 + %.not.i13 = icmp eq i32 %15, 0 + br i1 %.not.i13, label %lean_dec.exit11, label %20 -26: ; preds = %25 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %26, %25, %23, %lean_dec.exit12 - %27 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__3(ptr noundef %0, ptr noundef %1, i64 noundef %.val17, i64 noundef %.val, ptr noundef %4, ptr noundef %5) - %28 = ptrtoint ptr %1 to i64 - %29 = and i64 %28, 1 - %.not19 = icmp eq i64 %29, 0 - br i1 %.not19, label %30, label %lean_dec.exit - -30: ; preds = %lean_dec.exit11 - %31 = load i32, ptr %1, align 4, !tbaa !4 - %32 = icmp sgt i32 %31, 1 - br i1 %32, label %33, label %35, !prof !9 - -33: ; preds = %30 - %34 = add nsw i32 %31, -1 - store i32 %34, ptr %1, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %20, %19, %17 + %21 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__3(ptr noundef %0, ptr noundef %1, i64 noundef %.val17, i64 noundef %.val, ptr noundef %4, ptr noundef %5) + %22 = ptrtoint ptr %1 to i64 + %23 = and i64 %22, 1 + %.not19 = icmp eq i64 %23, 0 + br i1 %.not19, label %24, label %lean_dec.exit + +24: ; preds = %lean_dec.exit11 + %25 = load i32, ptr %1, align 4, !tbaa !4 + %26 = icmp sgt i32 %25, 1 + br i1 %26, label %27, label %29, !prof !9 + +27: ; preds = %24 + %28 = add nsw i32 %25, -1 + store i32 %28, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -35: ; preds = %30 - %.not.i15 = icmp eq i32 %31, 0 - br i1 %.not.i15, label %lean_dec.exit, label %36 +29: ; preds = %24 + %.not.i15 = icmp eq i32 %25, 0 + br i1 %.not.i15, label %lean_dec.exit, label %30 -36: ; preds = %35 +30: ; preds = %29 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 - ret ptr %27 +lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 + ret ptr %21 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ForEachExprWhere.ll b/bench/lean4/optimized/ForEachExprWhere.ll index 941ae5dc21a..a384e3c76bd 100644 --- a/bench/lean4/optimized/ForEachExprWhere.ll +++ b/bench/lean4/optimized/ForEachExprWhere.ll @@ -675,32 +675,26 @@ lean_dec.exit: ; preds = %134, %133, %131, %l define noalias noundef nonnull ptr @l_Lean_ForEachExprWhere_visited___rarg___lambda__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !13 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %0, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %3 - %14 = tail call ptr @l_Lean_ForEachExprWhere_visited___rarg___lambda__1(i64 noundef %.val, ptr noundef %1, ptr noundef %2) - ret ptr %14 +lean_dec.exit: ; preds = %10, %9, %7 + %11 = tail call ptr @l_Lean_ForEachExprWhere_visited___rarg___lambda__1(i64 noundef %.val, ptr noundef %1, ptr noundef %2) + ret ptr %11 } declare ptr @l_ST_Prim_Ref_modifyGetUnsafe___rarg___boxed(ptr noundef, ptr noundef, ptr noundef) #1 @@ -3582,58 +3576,46 @@ lean_dec.exit: ; preds = %161, %160, %158, %l define noalias noundef nonnull ptr @l_Lean_ForEachExprWhere_checked___rarg___lambda__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #0 { %5 = getelementptr i8, ptr %0, i64 8 %.val11 = load i64, ptr %5, align 8, !tbaa !13 - %6 = ptrtoint ptr %0 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit8 + %6 = load i32, ptr %0, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !11 8: ; preds = %4 - %9 = load i32, ptr %0, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !11 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %0, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit8 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit8, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit8, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %15, align 8, !tbaa !13 - %16 = ptrtoint ptr %1 to i64 - %17 = and i64 %16, 1 - %.not12 = icmp eq i64 %17, 0 - br i1 %.not12, label %18, label %lean_dec.exit - -18: ; preds = %lean_dec.exit8 - %19 = load i32, ptr %1, align 4, !tbaa !4 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !11 +lean_dec.exit8: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %12, align 8, !tbaa !13 + %13 = load i32, ptr %1, align 8, !tbaa !4 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !11 -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %1, align 4, !tbaa !4 +15: ; preds = %lean_dec.exit8 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -23: ; preds = %18 - %.not.i9 = icmp eq i32 %19, 0 - br i1 %.not.i9, label %lean_dec.exit, label %24 +17: ; preds = %lean_dec.exit8 + %.not.i9 = icmp eq i32 %13, 0 + br i1 %.not.i9, label %lean_dec.exit, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %24, %23, %21, %lean_dec.exit8 - %25 = tail call ptr @l_Lean_ForEachExprWhere_checked___rarg___lambda__1(i64 noundef %.val11, i64 noundef %.val, ptr noundef %2, ptr noundef %3) - ret ptr %25 +lean_dec.exit: ; preds = %18, %17, %15 + %19 = tail call ptr @l_Lean_ForEachExprWhere_checked___rarg___lambda__1(i64 noundef %.val11, i64 noundef %.val, ptr noundef %2, ptr noundef %3) + ret ptr %19 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/GeneralizeTelescope.ll b/bench/lean4/optimized/GeneralizeTelescope.ll index ccc89cf2394..df344d6cd0e 100644 --- a/bench/lean4/optimized/GeneralizeTelescope.ll +++ b/bench/lean4/optimized/GeneralizeTelescope.ll @@ -5586,58 +5586,46 @@ lean_alloc_closure.exit: ; preds = %1 define ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_GeneralizeTelescope_generalizeTelescopeAux___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !4 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !9 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !12 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !9 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !12 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !9 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !9 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %14, align 8, !tbaa !4 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !9 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !12 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %11, align 8, !tbaa !4 + %12 = load i32, ptr %1, align 8, !tbaa !9 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !12 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !9 +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !9 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_GeneralizeTelescope_generalizeTelescopeAux___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_GeneralizeTelescope_generalizeTelescopeAux___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable @@ -6883,58 +6871,46 @@ lean_alloc_closure.exit: ; preds = %1 define ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_generalizeTelescope___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) local_unnamed_addr #0 { %9 = getelementptr i8, ptr %0, i64 8 %.val15 = load i64, ptr %9, align 8, !tbaa !4 - %10 = ptrtoint ptr %0 to i64 - %11 = and i64 %10, 1 - %.not = icmp eq i64 %11, 0 - br i1 %.not, label %12, label %lean_dec.exit12 + %10 = load i32, ptr %0, align 8, !tbaa !9 + %11 = icmp sgt i32 %10, 1 + br i1 %11, label %12, label %14, !prof !12 12: ; preds = %8 - %13 = load i32, ptr %0, align 4, !tbaa !9 - %14 = icmp sgt i32 %13, 1 - br i1 %14, label %15, label %17, !prof !12 - -15: ; preds = %12 - %16 = add nsw i32 %13, -1 - store i32 %16, ptr %0, align 4, !tbaa !9 + %13 = add nsw i32 %10, -1 + store i32 %13, ptr %0, align 4, !tbaa !9 br label %lean_dec.exit12 -17: ; preds = %12 - %.not.i = icmp eq i32 %13, 0 - br i1 %.not.i, label %lean_dec.exit12, label %18 +14: ; preds = %8 + %.not.i = icmp eq i32 %10, 0 + br i1 %.not.i, label %lean_dec.exit12, label %15 -18: ; preds = %17 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %18, %17, %15, %8 - %19 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %19, align 8, !tbaa !4 - %20 = ptrtoint ptr %1 to i64 - %21 = and i64 %20, 1 - %.not16 = icmp eq i64 %21, 0 - br i1 %.not16, label %22, label %lean_dec.exit - -22: ; preds = %lean_dec.exit12 - %23 = load i32, ptr %1, align 4, !tbaa !9 - %24 = icmp sgt i32 %23, 1 - br i1 %24, label %25, label %27, !prof !12 - -25: ; preds = %22 - %26 = add nsw i32 %23, -1 - store i32 %26, ptr %1, align 4, !tbaa !9 +lean_dec.exit12: ; preds = %15, %14, %12 + %16 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %16, align 8, !tbaa !4 + %17 = load i32, ptr %1, align 8, !tbaa !9 + %18 = icmp sgt i32 %17, 1 + br i1 %18, label %19, label %21, !prof !12 + +19: ; preds = %lean_dec.exit12 + %20 = add nsw i32 %17, -1 + store i32 %20, ptr %1, align 4, !tbaa !9 br label %lean_dec.exit -27: ; preds = %22 - %.not.i13 = icmp eq i32 %23, 0 - br i1 %.not.i13, label %lean_dec.exit, label %28 +21: ; preds = %lean_dec.exit12 + %.not.i13 = icmp eq i32 %17, 0 + br i1 %.not.i13, label %lean_dec.exit, label %22 -28: ; preds = %27 +22: ; preds = %21 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %28, %27, %25, %lean_dec.exit12 - %29 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_generalizeTelescope___spec__1(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) - ret ptr %29 +lean_dec.exit: ; preds = %22, %21, %19 + %23 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_generalizeTelescope___spec__1(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) + ret ptr %23 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/HasConstCache.ll b/bench/lean4/optimized/HasConstCache.ll index 6fbdc860109..e0462eddb6b 100644 --- a/bench/lean4/optimized/HasConstCache.ll +++ b/bench/lean4/optimized/HasConstCache.ll @@ -5000,175 +5000,163 @@ lean_alloc_ctor.exit610: ; preds = %lean_dec.exit define noundef nonnull ptr @l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #1 { %5 = getelementptr i8, ptr %2, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !11 - %6 = ptrtoint ptr %2 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit13 + %6 = load i32, ptr %2, align 8, !tbaa !8 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !13 8: ; preds = %4 - %9 = load i32, ptr %2, align 4, !tbaa !8 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !13 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %2, align 4, !tbaa !8 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit13 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit13, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit13, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit13 -lean_dec.exit13: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %3, i64 8 - %.val20 = load i64, ptr %15, align 8, !tbaa !11 - %16 = ptrtoint ptr %3 to i64 - %17 = and i64 %16, 1 - %.not22 = icmp eq i64 %17, 0 - br i1 %.not22, label %18, label %lean_dec.exit12 - -18: ; preds = %lean_dec.exit13 - %19 = load i32, ptr %3, align 4, !tbaa !8 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !13 - -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %3, align 4, !tbaa !8 +lean_dec.exit13: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %3, i64 8 + %.val20 = load i64, ptr %12, align 8, !tbaa !11 + %13 = load i32, ptr %3, align 8, !tbaa !8 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !13 + +15: ; preds = %lean_dec.exit13 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %3, align 4, !tbaa !8 br label %lean_dec.exit12 -23: ; preds = %18 - %.not.i14 = icmp eq i32 %19, 0 - br i1 %.not.i14, label %lean_dec.exit12, label %24 +17: ; preds = %lean_dec.exit13 + %.not.i14 = icmp eq i32 %13, 0 + br i1 %.not.i14, label %lean_dec.exit12, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %24, %23, %21, %lean_dec.exit13 +lean_dec.exit12: ; preds = %18, %17, %15 %.not25.i = icmp eq i64 %.val, %.val20 br i1 %.not25.i, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit12 - %25 = getelementptr inbounds nuw i8, ptr %1, i64 24 - br label %28 - -26: ; preds = %lean_dec.exit.i - %27 = add i64 %.01526.i, 1 - %.not.i21 = icmp eq i64 %27, %.val20 - br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit, label %28 - -28: ; preds = %26, %.lr.ph.i - %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %27, %26 ] - %29 = getelementptr inbounds nuw ptr, ptr %25, i64 %.01526.i - %30 = load ptr, ptr %29, align 8, !tbaa !4 - %31 = ptrtoint ptr %30 to i64 - %32 = and i64 %31, 1 - %.not.i20.i = icmp eq i64 %32, 0 - br i1 %.not.i20.i, label %33, label %lean_array_uget.exit.i - -33: ; preds = %28 - %.val.i.i.i = load i32, ptr %30, align 4, !tbaa !8 - %34 = icmp sgt i32 %.val.i.i.i, 0 - br i1 %34, label %35, label %37, !prof !13 - -35: ; preds = %33 - %36 = add nuw i32 %.val.i.i.i, 1 - store i32 %36, ptr %30, align 4, !tbaa !8 - br label %40 + %19 = getelementptr inbounds nuw i8, ptr %1, i64 24 + br label %22 + +20: ; preds = %lean_dec.exit.i + %21 = add i64 %.01526.i, 1 + %.not.i21 = icmp eq i64 %21, %.val20 + br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit, label %22 + +22: ; preds = %20, %.lr.ph.i + %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %21, %20 ] + %23 = getelementptr inbounds nuw ptr, ptr %19, i64 %.01526.i + %24 = load ptr, ptr %23, align 8, !tbaa !4 + %25 = ptrtoint ptr %24 to i64 + %26 = and i64 %25, 1 + %.not.i20.i = icmp eq i64 %26, 0 + br i1 %.not.i20.i, label %27, label %lean_array_uget.exit.i + +27: ; preds = %22 + %.val.i.i.i = load i32, ptr %24, align 4, !tbaa !8 + %28 = icmp sgt i32 %.val.i.i.i, 0 + br i1 %28, label %29, label %31, !prof !13 + +29: ; preds = %27 + %30 = add nuw i32 %.val.i.i.i, 1 + store i32 %30, ptr %24, align 4, !tbaa !8 + br label %34 -37: ; preds = %33 +31: ; preds = %27 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %40, label %38 + br i1 %.not.i.i.i, label %34, label %32 -38: ; preds = %37 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %30) #4 - br label %40 +32: ; preds = %31 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %24) #4 + br label %34 -lean_array_uget.exit.i: ; preds = %28 - %39 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %30) #4 +lean_array_uget.exit.i: ; preds = %22 + %33 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %24) #4 br label %lean_dec.exit.i -40: ; preds = %38, %37, %35 - %41 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %30) #4 - %42 = load i32, ptr %30, align 4, !tbaa !8 - %43 = icmp sgt i32 %42, 1 - br i1 %43, label %44, label %46, !prof !13 +34: ; preds = %32, %31, %29 + %35 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %24) #4 + %36 = load i32, ptr %24, align 4, !tbaa !8 + %37 = icmp sgt i32 %36, 1 + br i1 %37, label %38, label %40, !prof !13 -44: ; preds = %40 - %45 = add nsw i32 %42, -1 - store i32 %45, ptr %30, align 4, !tbaa !8 +38: ; preds = %34 + %39 = add nsw i32 %36, -1 + store i32 %39, ptr %24, align 4, !tbaa !8 br label %lean_dec.exit.i -46: ; preds = %40 - %.not.i.i = icmp eq i32 %42, 0 - br i1 %.not.i.i, label %lean_dec.exit.i, label %47 +40: ; preds = %34 + %.not.i.i = icmp eq i32 %36, 0 + br i1 %.not.i.i, label %lean_dec.exit.i, label %41 -47: ; preds = %46 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %30) #4 +41: ; preds = %40 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %24) #4 br label %lean_dec.exit.i -lean_dec.exit.i: ; preds = %47, %46, %44, %lean_array_uget.exit.i - %48 = phi i8 [ %39, %lean_array_uget.exit.i ], [ %41, %44 ], [ %41, %46 ], [ %41, %47 ] - %49 = icmp eq i8 %48, 0 - br i1 %49, label %26, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit - -l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit: ; preds = %26, %lean_dec.exit.i, %lean_dec.exit12 - %.2.ph.i = phi i64 [ 1, %lean_dec.exit12 ], [ 1, %26 ], [ 3, %lean_dec.exit.i ] - %50 = ptrtoint ptr %1 to i64 - %51 = and i64 %50, 1 - %.not23 = icmp eq i64 %51, 0 - br i1 %.not23, label %52, label %lean_dec.exit11 - -52: ; preds = %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit - %53 = load i32, ptr %1, align 4, !tbaa !8 - %54 = icmp sgt i32 %53, 1 - br i1 %54, label %55, label %57, !prof !13 - -55: ; preds = %52 - %56 = add nsw i32 %53, -1 - store i32 %56, ptr %1, align 4, !tbaa !8 +lean_dec.exit.i: ; preds = %41, %40, %38, %lean_array_uget.exit.i + %42 = phi i8 [ %33, %lean_array_uget.exit.i ], [ %35, %38 ], [ %35, %40 ], [ %35, %41 ] + %43 = icmp eq i8 %42, 0 + br i1 %43, label %20, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit + +l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit: ; preds = %20, %lean_dec.exit.i, %lean_dec.exit12 + %.2.ph.i = phi i64 [ 1, %lean_dec.exit12 ], [ 1, %20 ], [ 3, %lean_dec.exit.i ] + %44 = ptrtoint ptr %1 to i64 + %45 = and i64 %44, 1 + %.not23 = icmp eq i64 %45, 0 + br i1 %.not23, label %46, label %lean_dec.exit11 + +46: ; preds = %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit + %47 = load i32, ptr %1, align 4, !tbaa !8 + %48 = icmp sgt i32 %47, 1 + br i1 %48, label %49, label %51, !prof !13 + +49: ; preds = %46 + %50 = add nsw i32 %47, -1 + store i32 %50, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit11 -57: ; preds = %52 - %.not.i16 = icmp eq i32 %53, 0 - br i1 %.not.i16, label %lean_dec.exit11, label %58 +51: ; preds = %46 + %.not.i16 = icmp eq i32 %47, 0 + br i1 %.not.i16, label %lean_dec.exit11, label %52 -58: ; preds = %57 +52: ; preds = %51 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %58, %57, %55, %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit - %59 = ptrtoint ptr %0 to i64 - %60 = and i64 %59, 1 - %.not24 = icmp eq i64 %60, 0 - br i1 %.not24, label %61, label %lean_dec.exit +lean_dec.exit11: ; preds = %52, %51, %49, %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit + %53 = ptrtoint ptr %0 to i64 + %54 = and i64 %53, 1 + %.not24 = icmp eq i64 %54, 0 + br i1 %.not24, label %55, label %lean_dec.exit -61: ; preds = %lean_dec.exit11 - %62 = load i32, ptr %0, align 4, !tbaa !8 - %63 = icmp sgt i32 %62, 1 - br i1 %63, label %64, label %66, !prof !13 +55: ; preds = %lean_dec.exit11 + %56 = load i32, ptr %0, align 4, !tbaa !8 + %57 = icmp sgt i32 %56, 1 + br i1 %57, label %58, label %60, !prof !13 -64: ; preds = %61 - %65 = add nsw i32 %62, -1 - store i32 %65, ptr %0, align 4, !tbaa !8 +58: ; preds = %55 + %59 = add nsw i32 %56, -1 + store i32 %59, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -66: ; preds = %61 - %.not.i18 = icmp eq i32 %62, 0 - br i1 %.not.i18, label %lean_dec.exit, label %67 +60: ; preds = %55 + %.not.i18 = icmp eq i32 %56, 0 + br i1 %.not.i18, label %lean_dec.exit, label %61 -67: ; preds = %66 +61: ; preds = %60 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %67, %66, %64, %lean_dec.exit11 - %68 = inttoptr i64 %.2.ph.i to ptr - ret ptr %68 +lean_dec.exit: ; preds = %61, %60, %58, %lean_dec.exit11 + %62 = inttoptr i64 %.2.ph.i to ptr + ret ptr %62 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/IndGroupInfo.ll b/bench/lean4/optimized/IndGroupInfo.ll index c00e7e89859..1bf6978d8d2 100644 --- a/bench/lean4/optimized/IndGroupInfo.ll +++ b/bench/lean4/optimized/IndGroupInfo.ll @@ -5415,82 +5415,70 @@ lean_alloc_ctor.exit: ; preds = %lean_dec.exit define ptr @l_Array_anyMUnsafe_any___at_Lean_Elab_Structural_IndGroupInst_isDefEq___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) local_unnamed_addr #0 { %9 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %9, align 8, !tbaa !13 - %10 = ptrtoint ptr %1 to i64 - %11 = and i64 %10, 1 - %.not = icmp eq i64 %11, 0 - br i1 %.not, label %12, label %lean_dec.exit14 + %10 = load i32, ptr %1, align 8, !tbaa !5 + %11 = icmp sgt i32 %10, 1 + br i1 %11, label %12, label %14, !prof !10 12: ; preds = %8 - %13 = load i32, ptr %1, align 4, !tbaa !5 - %14 = icmp sgt i32 %13, 1 - br i1 %14, label %15, label %17, !prof !10 - -15: ; preds = %12 - %16 = add nsw i32 %13, -1 - store i32 %16, ptr %1, align 4, !tbaa !5 + %13 = add nsw i32 %10, -1 + store i32 %13, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit14 -17: ; preds = %12 - %.not.i = icmp eq i32 %13, 0 - br i1 %.not.i, label %lean_dec.exit14, label %18 +14: ; preds = %8 + %.not.i = icmp eq i32 %10, 0 + br i1 %.not.i, label %lean_dec.exit14, label %15 -18: ; preds = %17 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit14 -lean_dec.exit14: ; preds = %18, %17, %15, %8 - %19 = getelementptr i8, ptr %2, i64 8 - %.val19 = load i64, ptr %19, align 8, !tbaa !13 - %20 = ptrtoint ptr %2 to i64 - %21 = and i64 %20, 1 - %.not20 = icmp eq i64 %21, 0 - br i1 %.not20, label %22, label %lean_dec.exit13 - -22: ; preds = %lean_dec.exit14 - %23 = load i32, ptr %2, align 4, !tbaa !5 - %24 = icmp sgt i32 %23, 1 - br i1 %24, label %25, label %27, !prof !10 +lean_dec.exit14: ; preds = %15, %14, %12 + %16 = getelementptr i8, ptr %2, i64 8 + %.val19 = load i64, ptr %16, align 8, !tbaa !13 + %17 = load i32, ptr %2, align 8, !tbaa !5 + %18 = icmp sgt i32 %17, 1 + br i1 %18, label %19, label %21, !prof !10 -25: ; preds = %22 - %26 = add nsw i32 %23, -1 - store i32 %26, ptr %2, align 4, !tbaa !5 +19: ; preds = %lean_dec.exit14 + %20 = add nsw i32 %17, -1 + store i32 %20, ptr %2, align 4, !tbaa !5 br label %lean_dec.exit13 -27: ; preds = %22 - %.not.i15 = icmp eq i32 %23, 0 - br i1 %.not.i15, label %lean_dec.exit13, label %28 +21: ; preds = %lean_dec.exit14 + %.not.i15 = icmp eq i32 %17, 0 + br i1 %.not.i15, label %lean_dec.exit13, label %22 -28: ; preds = %27 +22: ; preds = %21 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit13 -lean_dec.exit13: ; preds = %28, %27, %25, %lean_dec.exit14 - %29 = tail call ptr @l_Array_anyMUnsafe_any___at_Lean_Elab_Structural_IndGroupInst_isDefEq___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val19, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) - %30 = ptrtoint ptr %0 to i64 - %31 = and i64 %30, 1 - %.not21 = icmp eq i64 %31, 0 - br i1 %.not21, label %32, label %lean_dec.exit +lean_dec.exit13: ; preds = %22, %21, %19 + %23 = tail call ptr @l_Array_anyMUnsafe_any___at_Lean_Elab_Structural_IndGroupInst_isDefEq___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val19, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) + %24 = ptrtoint ptr %0 to i64 + %25 = and i64 %24, 1 + %.not21 = icmp eq i64 %25, 0 + br i1 %.not21, label %26, label %lean_dec.exit -32: ; preds = %lean_dec.exit13 - %33 = load i32, ptr %0, align 4, !tbaa !5 - %34 = icmp sgt i32 %33, 1 - br i1 %34, label %35, label %37, !prof !10 +26: ; preds = %lean_dec.exit13 + %27 = load i32, ptr %0, align 4, !tbaa !5 + %28 = icmp sgt i32 %27, 1 + br i1 %28, label %29, label %31, !prof !10 -35: ; preds = %32 - %36 = add nsw i32 %33, -1 - store i32 %36, ptr %0, align 4, !tbaa !5 +29: ; preds = %26 + %30 = add nsw i32 %27, -1 + store i32 %30, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -37: ; preds = %32 - %.not.i17 = icmp eq i32 %33, 0 - br i1 %.not.i17, label %lean_dec.exit, label %38 +31: ; preds = %26 + %.not.i17 = icmp eq i32 %27, 0 + br i1 %.not.i17, label %lean_dec.exit, label %32 -38: ; preds = %37 +32: ; preds = %31 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %38, %37, %35, %lean_dec.exit13 - ret ptr %29 +lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit13 + ret ptr %23 } ; Function Attrs: nounwind uwtable @@ -5798,35 +5786,29 @@ define nonnull ptr @l_Lean_Elab_Structural_IndGroupInst_isDefEq___lambda__4___bo %4 = getelementptr inbounds nuw i8, ptr %0, i64 16 %5 = load ptr, ptr %4, align 8, !tbaa !11 %6 = tail call zeroext i8 @l_Lean_Level_isEquiv(ptr noundef %3, ptr noundef %5) #4 - %7 = ptrtoint ptr %0 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit + %7 = load i32, ptr %0, align 8, !tbaa !5 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !10 9: ; preds = %1 - %10 = load i32, ptr %0, align 4, !tbaa !5 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !10 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %0, align 4, !tbaa !5 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit, label %15 +11: ; preds = %1 + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %15, %14, %12, %1 - %16 = zext i8 %6 to i64 - %17 = shl nuw nsw i64 %16, 1 - %18 = or disjoint i64 %17, 1 - %19 = inttoptr i64 %18 to ptr - ret ptr %19 +lean_dec.exit: ; preds = %12, %11, %9 + %13 = zext i8 %6 to i64 + %14 = shl nuw nsw i64 %13, 1 + %15 = or disjoint i64 %14, 1 + %16 = inttoptr i64 %15 to ptr + ret ptr %16 } ; Function Attrs: nounwind uwtable @@ -9595,58 +9577,46 @@ lean_dec.exit: ; preds = %17, %16, %14, %7 define ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Structural_IndGroupInst_nestedTypeFormers___spec__5___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) local_unnamed_addr #0 { %9 = getelementptr i8, ptr %0, i64 8 %.val15 = load i64, ptr %9, align 8, !tbaa !13 - %10 = ptrtoint ptr %0 to i64 - %11 = and i64 %10, 1 - %.not = icmp eq i64 %11, 0 - br i1 %.not, label %12, label %lean_dec.exit12 + %10 = load i32, ptr %0, align 8, !tbaa !5 + %11 = icmp sgt i32 %10, 1 + br i1 %11, label %12, label %14, !prof !10 12: ; preds = %8 - %13 = load i32, ptr %0, align 4, !tbaa !5 - %14 = icmp sgt i32 %13, 1 - br i1 %14, label %15, label %17, !prof !10 - -15: ; preds = %12 - %16 = add nsw i32 %13, -1 - store i32 %16, ptr %0, align 4, !tbaa !5 + %13 = add nsw i32 %10, -1 + store i32 %13, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit12 -17: ; preds = %12 - %.not.i = icmp eq i32 %13, 0 - br i1 %.not.i, label %lean_dec.exit12, label %18 +14: ; preds = %8 + %.not.i = icmp eq i32 %10, 0 + br i1 %.not.i, label %lean_dec.exit12, label %15 -18: ; preds = %17 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %18, %17, %15, %8 - %19 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %19, align 8, !tbaa !13 - %20 = ptrtoint ptr %1 to i64 - %21 = and i64 %20, 1 - %.not16 = icmp eq i64 %21, 0 - br i1 %.not16, label %22, label %lean_dec.exit - -22: ; preds = %lean_dec.exit12 - %23 = load i32, ptr %1, align 4, !tbaa !5 - %24 = icmp sgt i32 %23, 1 - br i1 %24, label %25, label %27, !prof !10 +lean_dec.exit12: ; preds = %15, %14, %12 + %16 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %16, align 8, !tbaa !13 + %17 = load i32, ptr %1, align 8, !tbaa !5 + %18 = icmp sgt i32 %17, 1 + br i1 %18, label %19, label %21, !prof !10 -25: ; preds = %22 - %26 = add nsw i32 %23, -1 - store i32 %26, ptr %1, align 4, !tbaa !5 +19: ; preds = %lean_dec.exit12 + %20 = add nsw i32 %17, -1 + store i32 %20, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit -27: ; preds = %22 - %.not.i13 = icmp eq i32 %23, 0 - br i1 %.not.i13, label %lean_dec.exit, label %28 +21: ; preds = %lean_dec.exit12 + %.not.i13 = icmp eq i32 %17, 0 + br i1 %.not.i13, label %lean_dec.exit, label %22 -28: ; preds = %27 +22: ; preds = %21 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %28, %27, %25, %lean_dec.exit12 - %29 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Structural_IndGroupInst_nestedTypeFormers___spec__5(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) - ret ptr %29 +lean_dec.exit: ; preds = %22, %21, %19 + %23 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Structural_IndGroupInst_nestedTypeFormers___spec__5(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) + ret ptr %23 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/InitShutdown.ll b/bench/lean4/optimized/InitShutdown.ll index 9a75cf29c63..e8b5d8cd04d 100644 --- a/bench/lean4/optimized/InitShutdown.ll +++ b/bench/lean4/optimized/InitShutdown.ll @@ -3287,58 +3287,46 @@ declare ptr @l___private_Lean_Data_Lsp_Capabilities_0__Lean_Lsp_toJsonClientCapa define ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_InitShutdown_0__Lean_Lsp_toJsonInitializeParams____x40_Lean_Data_Lsp_InitShutdown___hyg_523____spec__5___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %14, align 8, !tbaa !12 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %11, align 8, !tbaa !12 + %12 = load i32, ptr %1, align 8, !tbaa !4 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !4 +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_InitShutdown_0__Lean_Lsp_toJsonInitializeParams____x40_Lean_Data_Lsp_InitShutdown___hyg_523____spec__5(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_InitShutdown_0__Lean_Lsp_toJsonInitializeParams____x40_Lean_Data_Lsp_InitShutdown___hyg_523____spec__5(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable @@ -11731,58 +11719,46 @@ lean_dec.exit: ; preds = %12, %11, %9, %2 define ptr @l_Array_mapMUnsafe_map___at_Lean_Lsp_instFromJsonInitializeParams___spec__8___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val10 = load i64, ptr %4, align 8, !tbaa !12 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %14, align 8, !tbaa !12 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %11, align 8, !tbaa !12 + %12 = load i32, ptr %1, align 8, !tbaa !4 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !4 +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Lsp_instFromJsonInitializeParams___spec__8(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Lsp_instFromJsonInitializeParams___spec__8(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/InlineCandidate.ll b/bench/lean4/optimized/InlineCandidate.ll index ee2f949eb36..72a53694bc6 100644 --- a/bench/lean4/optimized/InlineCandidate.ll +++ b/bench/lean4/optimized/InlineCandidate.ll @@ -62,34 +62,28 @@ define nonnull ptr @l_Lean_Compiler_LCNF_Simp_InlineCandidateInfo_arity___boxed( %3 = load ptr, ptr %2, align 8, !tbaa !4 %4 = getelementptr i8, ptr %3, i64 8 %.val.i = load i64, ptr %4, align 8, !tbaa !8 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %0, align 8, !tbaa !10 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !13 7: ; preds = %1 - %8 = load i32, ptr %0, align 4, !tbaa !10 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !13 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !10 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !10 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %1 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %1 - %14 = shl i64 %.val.i, 1 - %15 = or disjoint i64 %14, 1 - %16 = inttoptr i64 %15 to ptr - ret ptr %16 +lean_dec.exit: ; preds = %10, %9, %7 + %11 = shl i64 %.val.i, 1 + %12 = or disjoint i64 %11, 1 + %13 = inttoptr i64 %12 to ptr + ret ptr %13 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/InputFileConfig.ll b/bench/lean4/optimized/InputFileConfig.ll index 828b7c8223c..8d095d60967 100644 --- a/bench/lean4/optimized/InputFileConfig.ll +++ b/bench/lean4/optimized/InputFileConfig.ll @@ -1449,149 +1449,137 @@ declare ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr define ptr @l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #1 { %5 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !13 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit10 + %6 = load i32, ptr %1, align 8, !tbaa !8 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !12 8: ; preds = %4 - %9 = load i32, ptr %1, align 4, !tbaa !8 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !12 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !8 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit10 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit10, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit10, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #7 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %2, i64 8 - %.val15 = load i64, ptr %15, align 8, !tbaa !13 - %16 = ptrtoint ptr %2 to i64 - %17 = and i64 %16, 1 - %.not17 = icmp eq i64 %17, 0 - br i1 %.not17, label %18, label %lean_dec.exit9 - -18: ; preds = %lean_dec.exit10 - %19 = load i32, ptr %2, align 4, !tbaa !8 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !12 +lean_dec.exit10: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %2, i64 8 + %.val15 = load i64, ptr %12, align 8, !tbaa !13 + %13 = load i32, ptr %2, align 8, !tbaa !8 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !12 -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %2, align 4, !tbaa !8 +15: ; preds = %lean_dec.exit10 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit9 -23: ; preds = %18 - %.not.i11 = icmp eq i32 %19, 0 - br i1 %.not.i11, label %lean_dec.exit9, label %24 +17: ; preds = %lean_dec.exit10 + %.not.i11 = icmp eq i32 %13, 0 + br i1 %.not.i11, label %lean_dec.exit9, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #7 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %24, %23, %21, %lean_dec.exit10 +lean_dec.exit9: ; preds = %18, %17, %15 %.not28.i = icmp eq i64 %.val, %.val15 br i1 %.not28.i, label %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit9 - %25 = getelementptr inbounds nuw i8, ptr %0, i64 24 - br label %26 - -26: ; preds = %47, %.lr.ph.i - %.01730.i = phi i64 [ %.val, %.lr.ph.i ], [ %49, %47 ] - %.01929.i = phi ptr [ %3, %.lr.ph.i ], [ %48, %47 ] - %27 = getelementptr inbounds nuw ptr, ptr %25, i64 %.01730.i - %28 = load ptr, ptr %27, align 8, !tbaa !4 - %29 = ptrtoint ptr %28 to i64 - %30 = and i64 %29, 1 - %.not.i.i = icmp eq i64 %30, 0 - br i1 %.not.i.i, label %31, label %lean_array_uget.exit.i + %19 = getelementptr inbounds nuw i8, ptr %0, i64 24 + br label %20 + +20: ; preds = %41, %.lr.ph.i + %.01730.i = phi i64 [ %.val, %.lr.ph.i ], [ %43, %41 ] + %.01929.i = phi ptr [ %3, %.lr.ph.i ], [ %42, %41 ] + %21 = getelementptr inbounds nuw ptr, ptr %19, i64 %.01730.i + %22 = load ptr, ptr %21, align 8, !tbaa !4 + %23 = ptrtoint ptr %22 to i64 + %24 = and i64 %23, 1 + %.not.i.i = icmp eq i64 %24, 0 + br i1 %.not.i.i, label %25, label %lean_array_uget.exit.i -31: ; preds = %26 - %.val.i.i.i = load i32, ptr %28, align 4, !tbaa !8 - %32 = icmp sgt i32 %.val.i.i.i, 0 - br i1 %32, label %33, label %35, !prof !12 +25: ; preds = %20 + %.val.i.i.i = load i32, ptr %22, align 4, !tbaa !8 + %26 = icmp sgt i32 %.val.i.i.i, 0 + br i1 %26, label %27, label %29, !prof !12 -33: ; preds = %31 - %34 = add nuw i32 %.val.i.i.i, 1 - store i32 %34, ptr %28, align 4, !tbaa !8 +27: ; preds = %25 + %28 = add nuw i32 %.val.i.i.i, 1 + store i32 %28, ptr %22, align 4, !tbaa !8 br label %lean_array_uget.exit.i -35: ; preds = %31 +29: ; preds = %25 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %36 + br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %30 -36: ; preds = %35 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %28) #7 +30: ; preds = %29 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %22) #7 br label %lean_array_uget.exit.i -lean_array_uget.exit.i: ; preds = %36, %35, %33, %26 - %37 = getelementptr inbounds nuw i8, ptr %28, i64 8 - %38 = load ptr, ptr %37, align 8, !tbaa !4 - %39 = ptrtoint ptr %38 to i64 - %40 = and i64 %39, 1 - %.not27.i = icmp eq i64 %40, 0 - br i1 %.not27.i, label %41, label %47 - -41: ; preds = %lean_array_uget.exit.i - %.val.i.i = load i32, ptr %38, align 4, !tbaa !8 - %42 = icmp sgt i32 %.val.i.i, 0 - br i1 %42, label %43, label %45, !prof !12 +lean_array_uget.exit.i: ; preds = %30, %29, %27, %20 + %31 = getelementptr inbounds nuw i8, ptr %22, i64 8 + %32 = load ptr, ptr %31, align 8, !tbaa !4 + %33 = ptrtoint ptr %32 to i64 + %34 = and i64 %33, 1 + %.not27.i = icmp eq i64 %34, 0 + br i1 %.not27.i, label %35, label %41 + +35: ; preds = %lean_array_uget.exit.i + %.val.i.i = load i32, ptr %32, align 4, !tbaa !8 + %36 = icmp sgt i32 %.val.i.i, 0 + br i1 %36, label %37, label %39, !prof !12 -43: ; preds = %41 - %44 = add nuw i32 %.val.i.i, 1 - store i32 %44, ptr %38, align 4, !tbaa !8 - br label %47 +37: ; preds = %35 + %38 = add nuw i32 %.val.i.i, 1 + store i32 %38, ptr %32, align 4, !tbaa !8 + br label %41 -45: ; preds = %41 +39: ; preds = %35 %.not.i21.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i21.i, label %47, label %46 + br i1 %.not.i21.i, label %41, label %40 -46: ; preds = %45 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %38) #7 - br label %47 - -47: ; preds = %46, %45, %43, %lean_array_uget.exit.i - %48 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %38, ptr noundef nonnull %28) #7 - %49 = add i64 %.01730.i, 1 - %.not.i16 = icmp eq i64 %49, %.val15 - br i1 %.not.i16, label %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit, label %26 - -l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit: ; preds = %47, %lean_dec.exit9 - %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %48, %47 ] - %50 = ptrtoint ptr %0 to i64 - %51 = and i64 %50, 1 - %.not18 = icmp eq i64 %51, 0 - br i1 %.not18, label %52, label %lean_dec.exit - -52: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit - %53 = load i32, ptr %0, align 4, !tbaa !8 - %54 = icmp sgt i32 %53, 1 - br i1 %54, label %55, label %57, !prof !12 - -55: ; preds = %52 - %56 = add nsw i32 %53, -1 - store i32 %56, ptr %0, align 4, !tbaa !8 +40: ; preds = %39 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %32) #7 + br label %41 + +41: ; preds = %40, %39, %37, %lean_array_uget.exit.i + %42 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %32, ptr noundef nonnull %22) #7 + %43 = add i64 %.01730.i, 1 + %.not.i16 = icmp eq i64 %43, %.val15 + br i1 %.not.i16, label %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit, label %20 + +l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit: ; preds = %41, %lean_dec.exit9 + %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %42, %41 ] + %44 = ptrtoint ptr %0 to i64 + %45 = and i64 %44, 1 + %.not18 = icmp eq i64 %45, 0 + br i1 %.not18, label %46, label %lean_dec.exit + +46: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit + %47 = load i32, ptr %0, align 4, !tbaa !8 + %48 = icmp sgt i32 %47, 1 + br i1 %48, label %49, label %51, !prof !12 + +49: ; preds = %46 + %50 = add nsw i32 %47, -1 + store i32 %50, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -57: ; preds = %52 - %.not.i13 = icmp eq i32 %53, 0 - br i1 %.not.i13, label %lean_dec.exit, label %58 +51: ; preds = %46 + %.not.i13 = icmp eq i32 %47, 0 + br i1 %.not.i13, label %lean_dec.exit, label %52 -58: ; preds = %57 +52: ; preds = %51 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #7 br label %lean_dec.exit -lean_dec.exit: ; preds = %58, %57, %55, %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit +lean_dec.exit: ; preds = %52, %51, %49, %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit ret ptr %.019.lcssa.i } diff --git a/bench/lean4/optimized/InternalExceptionId.ll b/bench/lean4/optimized/InternalExceptionId.ll index eeb157ba0c3..5d64fc18df6 100644 --- a/bench/lean4/optimized/InternalExceptionId.ll +++ b/bench/lean4/optimized/InternalExceptionId.ll @@ -1041,175 +1041,163 @@ declare ptr @lean_string_append(ptr noundef, ptr noundef) local_unnamed_addr #1 define noundef nonnull ptr @l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 { %5 = getelementptr i8, ptr %2, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !13 - %6 = ptrtoint ptr %2 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit13 + %6 = load i32, ptr %2, align 8, !tbaa !5 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !10 8: ; preds = %4 - %9 = load i32, ptr %2, align 4, !tbaa !5 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !10 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %2, align 4, !tbaa !5 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %2, align 4, !tbaa !5 br label %lean_dec.exit13 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit13, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit13, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit13 -lean_dec.exit13: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %3, i64 8 - %.val20 = load i64, ptr %15, align 8, !tbaa !13 - %16 = ptrtoint ptr %3 to i64 - %17 = and i64 %16, 1 - %.not22 = icmp eq i64 %17, 0 - br i1 %.not22, label %18, label %lean_dec.exit12 - -18: ; preds = %lean_dec.exit13 - %19 = load i32, ptr %3, align 4, !tbaa !5 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !10 +lean_dec.exit13: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %3, i64 8 + %.val20 = load i64, ptr %12, align 8, !tbaa !13 + %13 = load i32, ptr %3, align 8, !tbaa !5 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !10 -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %3, align 4, !tbaa !5 +15: ; preds = %lean_dec.exit13 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %3, align 4, !tbaa !5 br label %lean_dec.exit12 -23: ; preds = %18 - %.not.i14 = icmp eq i32 %19, 0 - br i1 %.not.i14, label %lean_dec.exit12, label %24 +17: ; preds = %lean_dec.exit13 + %.not.i14 = icmp eq i32 %13, 0 + br i1 %.not.i14, label %lean_dec.exit12, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %24, %23, %21, %lean_dec.exit13 +lean_dec.exit12: ; preds = %18, %17, %15 %.not25.i = icmp eq i64 %.val, %.val20 br i1 %.not25.i, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit12 - %25 = getelementptr inbounds nuw i8, ptr %1, i64 24 - br label %28 - -26: ; preds = %lean_dec.exit.i - %27 = add i64 %.01526.i, 1 - %.not.i21 = icmp eq i64 %27, %.val20 - br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit, label %28 - -28: ; preds = %26, %.lr.ph.i - %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %27, %26 ] - %29 = getelementptr inbounds nuw ptr, ptr %25, i64 %.01526.i - %30 = load ptr, ptr %29, align 8, !tbaa !11 - %31 = ptrtoint ptr %30 to i64 - %32 = and i64 %31, 1 - %.not.i20.i = icmp eq i64 %32, 0 - br i1 %.not.i20.i, label %33, label %lean_array_uget.exit.i + %19 = getelementptr inbounds nuw i8, ptr %1, i64 24 + br label %22 + +20: ; preds = %lean_dec.exit.i + %21 = add i64 %.01526.i, 1 + %.not.i21 = icmp eq i64 %21, %.val20 + br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit, label %22 + +22: ; preds = %20, %.lr.ph.i + %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %21, %20 ] + %23 = getelementptr inbounds nuw ptr, ptr %19, i64 %.01526.i + %24 = load ptr, ptr %23, align 8, !tbaa !11 + %25 = ptrtoint ptr %24 to i64 + %26 = and i64 %25, 1 + %.not.i20.i = icmp eq i64 %26, 0 + br i1 %.not.i20.i, label %27, label %lean_array_uget.exit.i + +27: ; preds = %22 + %.val.i.i.i = load i32, ptr %24, align 4, !tbaa !5 + %28 = icmp sgt i32 %.val.i.i.i, 0 + br i1 %28, label %29, label %31, !prof !10 + +29: ; preds = %27 + %30 = add nuw i32 %.val.i.i.i, 1 + store i32 %30, ptr %24, align 4, !tbaa !5 + br label %34 -33: ; preds = %28 - %.val.i.i.i = load i32, ptr %30, align 4, !tbaa !5 - %34 = icmp sgt i32 %.val.i.i.i, 0 - br i1 %34, label %35, label %37, !prof !10 - -35: ; preds = %33 - %36 = add nuw i32 %.val.i.i.i, 1 - store i32 %36, ptr %30, align 4, !tbaa !5 - br label %40 - -37: ; preds = %33 +31: ; preds = %27 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %40, label %38 + br i1 %.not.i.i.i, label %34, label %32 -38: ; preds = %37 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %30) #4 - br label %40 +32: ; preds = %31 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %24) #4 + br label %34 -lean_array_uget.exit.i: ; preds = %28 - %39 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %30) #4 +lean_array_uget.exit.i: ; preds = %22 + %33 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %24) #4 br label %lean_dec.exit.i -40: ; preds = %38, %37, %35 - %41 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %30) #4 - %42 = load i32, ptr %30, align 4, !tbaa !5 - %43 = icmp sgt i32 %42, 1 - br i1 %43, label %44, label %46, !prof !10 +34: ; preds = %32, %31, %29 + %35 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %24) #4 + %36 = load i32, ptr %24, align 4, !tbaa !5 + %37 = icmp sgt i32 %36, 1 + br i1 %37, label %38, label %40, !prof !10 -44: ; preds = %40 - %45 = add nsw i32 %42, -1 - store i32 %45, ptr %30, align 4, !tbaa !5 +38: ; preds = %34 + %39 = add nsw i32 %36, -1 + store i32 %39, ptr %24, align 4, !tbaa !5 br label %lean_dec.exit.i -46: ; preds = %40 - %.not.i.i = icmp eq i32 %42, 0 - br i1 %.not.i.i, label %lean_dec.exit.i, label %47 +40: ; preds = %34 + %.not.i.i = icmp eq i32 %36, 0 + br i1 %.not.i.i, label %lean_dec.exit.i, label %41 -47: ; preds = %46 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %30) #4 +41: ; preds = %40 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %24) #4 br label %lean_dec.exit.i -lean_dec.exit.i: ; preds = %47, %46, %44, %lean_array_uget.exit.i - %48 = phi i8 [ %39, %lean_array_uget.exit.i ], [ %41, %44 ], [ %41, %46 ], [ %41, %47 ] - %49 = icmp eq i8 %48, 0 - br i1 %49, label %26, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit - -l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit: ; preds = %26, %lean_dec.exit.i, %lean_dec.exit12 - %.2.ph.i = phi i64 [ 1, %lean_dec.exit12 ], [ 1, %26 ], [ 3, %lean_dec.exit.i ] - %50 = ptrtoint ptr %1 to i64 - %51 = and i64 %50, 1 - %.not23 = icmp eq i64 %51, 0 - br i1 %.not23, label %52, label %lean_dec.exit11 - -52: ; preds = %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit - %53 = load i32, ptr %1, align 4, !tbaa !5 - %54 = icmp sgt i32 %53, 1 - br i1 %54, label %55, label %57, !prof !10 - -55: ; preds = %52 - %56 = add nsw i32 %53, -1 - store i32 %56, ptr %1, align 4, !tbaa !5 +lean_dec.exit.i: ; preds = %41, %40, %38, %lean_array_uget.exit.i + %42 = phi i8 [ %33, %lean_array_uget.exit.i ], [ %35, %38 ], [ %35, %40 ], [ %35, %41 ] + %43 = icmp eq i8 %42, 0 + br i1 %43, label %20, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit + +l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit: ; preds = %20, %lean_dec.exit.i, %lean_dec.exit12 + %.2.ph.i = phi i64 [ 1, %lean_dec.exit12 ], [ 1, %20 ], [ 3, %lean_dec.exit.i ] + %44 = ptrtoint ptr %1 to i64 + %45 = and i64 %44, 1 + %.not23 = icmp eq i64 %45, 0 + br i1 %.not23, label %46, label %lean_dec.exit11 + +46: ; preds = %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit + %47 = load i32, ptr %1, align 4, !tbaa !5 + %48 = icmp sgt i32 %47, 1 + br i1 %48, label %49, label %51, !prof !10 + +49: ; preds = %46 + %50 = add nsw i32 %47, -1 + store i32 %50, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit11 -57: ; preds = %52 - %.not.i16 = icmp eq i32 %53, 0 - br i1 %.not.i16, label %lean_dec.exit11, label %58 +51: ; preds = %46 + %.not.i16 = icmp eq i32 %47, 0 + br i1 %.not.i16, label %lean_dec.exit11, label %52 -58: ; preds = %57 +52: ; preds = %51 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %58, %57, %55, %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit - %59 = ptrtoint ptr %0 to i64 - %60 = and i64 %59, 1 - %.not24 = icmp eq i64 %60, 0 - br i1 %.not24, label %61, label %lean_dec.exit +lean_dec.exit11: ; preds = %52, %51, %49, %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit + %53 = ptrtoint ptr %0 to i64 + %54 = and i64 %53, 1 + %.not24 = icmp eq i64 %54, 0 + br i1 %.not24, label %55, label %lean_dec.exit -61: ; preds = %lean_dec.exit11 - %62 = load i32, ptr %0, align 4, !tbaa !5 - %63 = icmp sgt i32 %62, 1 - br i1 %63, label %64, label %66, !prof !10 +55: ; preds = %lean_dec.exit11 + %56 = load i32, ptr %0, align 4, !tbaa !5 + %57 = icmp sgt i32 %56, 1 + br i1 %57, label %58, label %60, !prof !10 -64: ; preds = %61 - %65 = add nsw i32 %62, -1 - store i32 %65, ptr %0, align 4, !tbaa !5 +58: ; preds = %55 + %59 = add nsw i32 %56, -1 + store i32 %59, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -66: ; preds = %61 - %.not.i18 = icmp eq i32 %62, 0 - br i1 %.not.i18, label %lean_dec.exit, label %67 +60: ; preds = %55 + %.not.i18 = icmp eq i32 %56, 0 + br i1 %.not.i18, label %lean_dec.exit, label %61 -67: ; preds = %66 +61: ; preds = %60 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %67, %66, %64, %lean_dec.exit11 - %68 = inttoptr i64 %.2.ph.i to ptr - ret ptr %68 +lean_dec.exit: ; preds = %61, %60, %58, %lean_dec.exit11 + %62 = inttoptr i64 %.2.ph.i to ptr + ret ptr %62 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Links.ll b/bench/lean4/optimized/Links.ll index 35aea76f649..e78cba431ec 100644 --- a/bench/lean4/optimized/Links.ll +++ b/bench/lean4/optimized/Links.ll @@ -84,178 +84,163 @@ lean_inc.exit: %3 = shl i64 %.val, 1 %4 = add i64 %3, -1 %5 = inttoptr i64 %4 to ptr - %6 = ptrtoint ptr %0 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_inc.exit41 - -8: ; preds = %lean_inc.exit - %.val.i47 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %.val.i47, 0 - br i1 %9, label %10, label %12, !prof !11 + %.val.i47 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %.val.i47, 0 + br i1 %6, label %7, label %9, !prof !11 -10: ; preds = %8 - %11 = add nuw i32 %.val.i47, 1 - store i32 %11, ptr %0, align 4, !tbaa !8 +7: ; preds = %lean_inc.exit + %8 = add nuw i32 %.val.i47, 1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_inc.exit41 -12: ; preds = %8 +9: ; preds = %lean_inc.exit %.not.i48 = icmp eq i32 %.val.i47, 0 - br i1 %.not.i48, label %lean_inc.exit41, label %13 + br i1 %.not.i48, label %lean_inc.exit41, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #4 br label %lean_inc.exit41 -lean_inc.exit41: ; preds = %13, %12, %10, %lean_inc.exit +lean_inc.exit41: ; preds = %10, %9, %7 tail call void @lean_inc_heartbeat() #4 - %14 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 - %15 = icmp eq ptr %14, null - br i1 %15, label %16, label %lean_nat_sub.exit + %11 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 + %12 = icmp eq ptr %11, null + br i1 %12, label %13, label %lean_nat_sub.exit -16: ; preds = %lean_inc.exit41 +13: ; preds = %lean_inc.exit41 tail call void @lean_internal_panic_out_of_memory() #5 unreachable lean_nat_sub.exit: ; preds = %lean_inc.exit41 - %17 = getelementptr inbounds nuw i8, ptr %14, i64 4 - store i32 1, ptr %14, align 4, !tbaa !8 - store i32 196640, ptr %17, align 4 - %18 = getelementptr inbounds nuw i8, ptr %14, i64 8 - store ptr %0, ptr %18, align 8, !tbaa !12 - %19 = getelementptr inbounds nuw i8, ptr %14, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %19, align 8, !tbaa !12 - %20 = getelementptr inbounds nuw i8, ptr %14, i64 24 - store ptr %5, ptr %20, align 8, !tbaa !12 - %21 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__2, align 8, !tbaa !12 - %22 = tail call ptr @l_Substring_prevn(ptr noundef nonnull %14, ptr noundef %21, ptr noundef nonnull %5) #4 - %23 = ptrtoint ptr %14 to i64 - %24 = and i64 %23, 1 - %.not57 = icmp eq i64 %24, 0 - br i1 %.not57, label %25, label %lean_dec.exit - -25: ; preds = %lean_nat_sub.exit - %26 = load i32, ptr %14, align 4, !tbaa !8 - %27 = icmp sgt i32 %26, 1 - br i1 %27, label %28, label %30, !prof !11 + %14 = getelementptr inbounds nuw i8, ptr %11, i64 4 + store i32 1, ptr %11, align 4, !tbaa !8 + store i32 196640, ptr %14, align 4 + %15 = getelementptr inbounds nuw i8, ptr %11, i64 8 + store ptr %0, ptr %15, align 8, !tbaa !12 + %16 = getelementptr inbounds nuw i8, ptr %11, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %16, align 8, !tbaa !12 + %17 = getelementptr inbounds nuw i8, ptr %11, i64 24 + store ptr %5, ptr %17, align 8, !tbaa !12 + %18 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__2, align 8, !tbaa !12 + %19 = tail call ptr @l_Substring_prevn(ptr noundef nonnull %11, ptr noundef %18, ptr noundef nonnull %5) #4 + %20 = load i32, ptr %11, align 8, !tbaa !8 + %21 = icmp sgt i32 %20, 1 + br i1 %21, label %22, label %24, !prof !11 -28: ; preds = %25 - %29 = add nsw i32 %26, -1 - store i32 %29, ptr %14, align 4, !tbaa !8 +22: ; preds = %lean_nat_sub.exit + %23 = add nsw i32 %20, -1 + store i32 %23, ptr %11, align 4, !tbaa !8 br label %lean_dec.exit -30: ; preds = %25 - %.not.i44 = icmp eq i32 %26, 0 - br i1 %.not.i44, label %lean_dec.exit, label %31 +24: ; preds = %lean_nat_sub.exit + %.not.i44 = icmp eq i32 %20, 0 + br i1 %.not.i44, label %lean_dec.exit, label %25 -31: ; preds = %30 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %14) #4 +25: ; preds = %24 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %11) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %lean_nat_sub.exit, %28, %30, %31 - %32 = ptrtoint ptr %22 to i64 - %33 = and i64 %32, 1 - %.not58 = icmp eq i64 %33, 0 - br i1 %.not58, label %34, label %lean_dec.exit43, !prof !14 - -34: ; preds = %lean_dec.exit - %35 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %22) #4 - %36 = load i32, ptr %22, align 4, !tbaa !8 - %37 = icmp sgt i32 %36, 1 - br i1 %37, label %38, label %40, !prof !11 - -38: ; preds = %34 - %39 = add nsw i32 %36, -1 - store i32 %39, ptr %22, align 4, !tbaa !8 - br label %lean_dec.exit43 +lean_dec.exit: ; preds = %22, %24, %25 + %26 = ptrtoint ptr %19 to i64 + %27 = and i64 %26, 1 + %.not58 = icmp eq i64 %27, 0 + br i1 %.not58, label %28, label %lean_dec.exit43, !prof !14 -40: ; preds = %34 - %.not.i = icmp eq i32 %36, 0 - br i1 %.not.i, label %lean_dec.exit43, label %41 +28: ; preds = %lean_dec.exit + %29 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %19) #4 + %30 = load i32, ptr %19, align 4, !tbaa !8 + %31 = icmp sgt i32 %30, 1 + br i1 %31, label %32, label %34, !prof !11 -41: ; preds = %40 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %22) #4 +32: ; preds = %28 + %33 = add nsw i32 %30, -1 + store i32 %33, ptr %19, align 4, !tbaa !8 br label %lean_dec.exit43 -lean_dec.exit43: ; preds = %lean_dec.exit, %41, %40, %38 - %.0.i68 = phi ptr [ %35, %41 ], [ %35, %40 ], [ %35, %38 ], [ %22, %lean_dec.exit ] - br i1 %.not, label %42, label %lean_inc.exit42 +34: ; preds = %28 + %.not.i = icmp eq i32 %30, 0 + br i1 %.not.i, label %lean_dec.exit43, label %35 + +35: ; preds = %34 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %19) #4 + br label %lean_dec.exit43 -42: ; preds = %lean_dec.exit43 +lean_dec.exit43: ; preds = %32, %34, %35, %lean_dec.exit + %.0.i68 = phi ptr [ %29, %35 ], [ %29, %34 ], [ %29, %32 ], [ %19, %lean_dec.exit ] %.val.i51 = load i32, ptr %0, align 4, !tbaa !8 - %43 = icmp sgt i32 %.val.i51, 0 - br i1 %43, label %44, label %46, !prof !11 + %36 = icmp sgt i32 %.val.i51, 0 + br i1 %36, label %37, label %39, !prof !11 -44: ; preds = %42 - %45 = add nuw i32 %.val.i51, 1 - store i32 %45, ptr %0, align 4, !tbaa !8 +37: ; preds = %lean_dec.exit43 + %38 = add nuw i32 %.val.i51, 1 + store i32 %38, ptr %0, align 4, !tbaa !8 br label %lean_inc.exit42 -46: ; preds = %42 +39: ; preds = %lean_dec.exit43 %.not.i52 = icmp eq i32 %.val.i51, 0 - br i1 %.not.i52, label %lean_inc.exit42, label %47 + br i1 %.not.i52, label %lean_inc.exit42, label %40 -47: ; preds = %46 +40: ; preds = %39 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #4 br label %lean_inc.exit42 -lean_inc.exit42: ; preds = %47, %46, %44, %lean_dec.exit43 +lean_inc.exit42: ; preds = %40, %39, %37 tail call void @lean_inc_heartbeat() #4 - %48 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 - %49 = icmp eq ptr %48, null - br i1 %49, label %50, label %lean_alloc_ctor.exit54 + %41 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 + %42 = icmp eq ptr %41, null + br i1 %42, label %43, label %lean_alloc_ctor.exit54 -50: ; preds = %lean_inc.exit42 +43: ; preds = %lean_inc.exit42 tail call void @lean_internal_panic_out_of_memory() #5 unreachable lean_alloc_ctor.exit54: ; preds = %lean_inc.exit42 - %51 = getelementptr inbounds nuw i8, ptr %48, i64 4 - store i32 1, ptr %48, align 4, !tbaa !8 - store i32 196640, ptr %51, align 4 - %52 = getelementptr inbounds nuw i8, ptr %48, i64 8 - store ptr %0, ptr %52, align 8, !tbaa !12 - %53 = getelementptr inbounds nuw i8, ptr %48, i64 16 - store ptr %.0.i68, ptr %53, align 8, !tbaa !12 - %54 = getelementptr inbounds nuw i8, ptr %48, i64 24 - store ptr %5, ptr %54, align 8, !tbaa !12 - %55 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__4, align 8, !tbaa !12 - %56 = tail call zeroext i8 @l_Substring_beq(ptr noundef nonnull %48, ptr noundef %55) #4 - %57 = icmp eq i8 %56, 0 - br i1 %57, label %58, label %64 - -58: ; preds = %lean_alloc_ctor.exit54 - %59 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__1, align 8, !tbaa !12 - %60 = tail call ptr @lean_string_append(ptr noundef nonnull %0, ptr noundef %59) #4 + %44 = getelementptr inbounds nuw i8, ptr %41, i64 4 + store i32 1, ptr %41, align 4, !tbaa !8 + store i32 196640, ptr %44, align 4 + %45 = getelementptr inbounds nuw i8, ptr %41, i64 8 + store ptr %0, ptr %45, align 8, !tbaa !12 + %46 = getelementptr inbounds nuw i8, ptr %41, i64 16 + store ptr %.0.i68, ptr %46, align 8, !tbaa !12 + %47 = getelementptr inbounds nuw i8, ptr %41, i64 24 + store ptr %5, ptr %47, align 8, !tbaa !12 + %48 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__4, align 8, !tbaa !12 + %49 = tail call zeroext i8 @l_Substring_beq(ptr noundef nonnull %41, ptr noundef %48) #4 + %50 = icmp eq i8 %49, 0 + br i1 %50, label %51, label %57 + +51: ; preds = %lean_alloc_ctor.exit54 + %52 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__1, align 8, !tbaa !12 + %53 = tail call ptr @lean_string_append(ptr noundef nonnull %0, ptr noundef %52) #4 tail call void @lean_inc_heartbeat() #4 - %61 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 - %62 = icmp eq ptr %61, null - br i1 %62, label %63, label %lean_alloc_ctor.exit55 + %54 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 + %55 = icmp eq ptr %54, null + br i1 %55, label %56, label %lean_alloc_ctor.exit55 -63: ; preds = %58 +56: ; preds = %51 tail call void @lean_internal_panic_out_of_memory() #5 unreachable -64: ; preds = %lean_alloc_ctor.exit54 +57: ; preds = %lean_alloc_ctor.exit54 tail call void @lean_inc_heartbeat() #4 - %65 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 - %66 = icmp eq ptr %65, null - br i1 %66, label %67, label %lean_alloc_ctor.exit55 + %58 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 + %59 = icmp eq ptr %58, null + br i1 %59, label %60, label %lean_alloc_ctor.exit55 -67: ; preds = %64 +60: ; preds = %57 tail call void @lean_internal_panic_out_of_memory() #5 unreachable -lean_alloc_ctor.exit55: ; preds = %64, %58 - %.sink75 = phi ptr [ %61, %58 ], [ %65, %64 ] - %.sink = phi ptr [ %60, %58 ], [ %0, %64 ] - %68 = getelementptr inbounds nuw i8, ptr %.sink75, i64 4 +lean_alloc_ctor.exit55: ; preds = %57, %51 + %.sink75 = phi ptr [ %54, %51 ], [ %58, %57 ] + %.sink = phi ptr [ %53, %51 ], [ %0, %57 ] + %61 = getelementptr inbounds nuw i8, ptr %.sink75, i64 4 store i32 1, ptr %.sink75, align 4, !tbaa !8 - store i32 131096, ptr %68, align 4 - %69 = getelementptr inbounds nuw i8, ptr %.sink75, i64 8 - store ptr %.sink, ptr %69, align 8, !tbaa !12 - %70 = getelementptr inbounds nuw i8, ptr %.sink75, i64 16 - store ptr %1, ptr %70, align 8, !tbaa !12 + store i32 131096, ptr %61, align 4 + %62 = getelementptr inbounds nuw i8, ptr %.sink75, i64 8 + store ptr %.sink, ptr %62, align 8, !tbaa !12 + %63 = getelementptr inbounds nuw i8, ptr %.sink75, i64 16 + store ptr %1, ptr %63, align 8, !tbaa !12 ret ptr %.sink75 } diff --git a/bench/lean4/optimized/MVarRenaming.ll b/bench/lean4/optimized/MVarRenaming.ll index 54972ea8243..063780e3b4e 100644 --- a/bench/lean4/optimized/MVarRenaming.ll +++ b/bench/lean4/optimized/MVarRenaming.ll @@ -859,31 +859,25 @@ lean_alloc_closure.exit: ; preds = %40 %48 = getelementptr inbounds nuw i8, ptr %41, i64 24 store ptr %0, ptr %48, align 8, !tbaa !10 %49 = tail call ptr @lean_replace_expr(ptr noundef nonnull %41, ptr noundef %1) #4 - %50 = ptrtoint ptr %41 to i64 - %51 = and i64 %50, 1 - %.not = icmp eq i64 %51, 0 - br i1 %.not, label %52, label %lean_inc.exit15 + %50 = load i32, ptr %41, align 8, !tbaa !4 + %51 = icmp sgt i32 %50, 1 + br i1 %51, label %52, label %54, !prof !9 52: ; preds = %lean_alloc_closure.exit - %53 = load i32, ptr %41, align 4, !tbaa !4 - %54 = icmp sgt i32 %53, 1 - br i1 %54, label %55, label %57, !prof !9 - -55: ; preds = %52 - %56 = add nsw i32 %53, -1 - store i32 %56, ptr %41, align 4, !tbaa !4 + %53 = add nsw i32 %50, -1 + store i32 %53, ptr %41, align 4, !tbaa !4 br label %lean_inc.exit15 -57: ; preds = %52 - %.not.i16 = icmp eq i32 %53, 0 - br i1 %.not.i16, label %lean_inc.exit15, label %58 +54: ; preds = %lean_alloc_closure.exit + %.not.i16 = icmp eq i32 %50, 0 + br i1 %.not.i16, label %lean_inc.exit15, label %55 -58: ; preds = %57 +55: ; preds = %54 tail call void @lean_dec_ref_cold(ptr noundef nonnull %41) #4 br label %lean_inc.exit15 -lean_inc.exit15: ; preds = %lean_alloc_closure.exit, %55, %57, %58, %31, %36, %38, %39, %lean_dec.exit14, %19, %21, %22 - %.0 = phi ptr [ %1, %22 ], [ %1, %21 ], [ %1, %19 ], [ %1, %lean_dec.exit14 ], [ %1, %39 ], [ %1, %38 ], [ %1, %36 ], [ %1, %31 ], [ %49, %58 ], [ %49, %57 ], [ %49, %55 ], [ %49, %lean_alloc_closure.exit ] +lean_inc.exit15: ; preds = %52, %54, %55, %31, %36, %38, %39, %lean_dec.exit14, %19, %21, %22 + %.0 = phi ptr [ %1, %22 ], [ %1, %21 ], [ %1, %19 ], [ %1, %lean_dec.exit14 ], [ %1, %39 ], [ %1, %38 ], [ %1, %36 ], [ %1, %31 ], [ %49, %55 ], [ %49, %54 ], [ %49, %52 ] ret ptr %.0 } diff --git a/bench/lean4/optimized/PlainDateTime.ll b/bench/lean4/optimized/PlainDateTime.ll index b89c1666e37..bf7b4e1ed67 100644 --- a/bench/lean4/optimized/PlainDateTime.ll +++ b/bench/lean4/optimized/PlainDateTime.ll @@ -31691,35 +31691,29 @@ define nonnull ptr @l_Std_Time_PlainDateTime_era___boxed(ptr noundef %0) local_u %4 = getelementptr inbounds nuw i8, ptr %3, i64 8 %5 = load ptr, ptr %4, align 8, !tbaa !5 %6 = tail call zeroext i8 @l_Std_Time_Year_Offset_era(ptr noundef %5) #5 - %7 = ptrtoint ptr %0 to i64 - %8 = and i64 %7, 1 - %.not = icmp eq i64 %8, 0 - br i1 %.not, label %9, label %lean_dec.exit + %7 = load i32, ptr %0, align 8, !tbaa !9 + %8 = icmp sgt i32 %7, 1 + br i1 %8, label %9, label %11, !prof !12 9: ; preds = %1 - %10 = load i32, ptr %0, align 4, !tbaa !9 - %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !12 - -12: ; preds = %9 - %13 = add nsw i32 %10, -1 - store i32 %13, ptr %0, align 4, !tbaa !9 + %10 = add nsw i32 %7, -1 + store i32 %10, ptr %0, align 4, !tbaa !9 br label %lean_dec.exit -14: ; preds = %9 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit, label %15 +11: ; preds = %1 + %.not.i = icmp eq i32 %7, 0 + br i1 %.not.i, label %lean_dec.exit, label %12 -15: ; preds = %14 +12: ; preds = %11 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %15, %14, %12, %1 - %16 = zext i8 %6 to i64 - %17 = shl nuw nsw i64 %16, 1 - %18 = or disjoint i64 %17, 1 - %19 = inttoptr i64 %18 to ptr - ret ptr %19 +lean_dec.exit: ; preds = %12, %11, %9 + %13 = zext i8 %6 to i64 + %14 = shl nuw nsw i64 %13, 1 + %15 = or disjoint i64 %14, 1 + %16 = inttoptr i64 %15 to ptr + ret ptr %16 } ; Function Attrs: nounwind uwtable @@ -32061,30 +32055,24 @@ define ptr @l_Std_Time_PlainDateTime_weekOfMonth___boxed(ptr noundef %0) local_u %2 = getelementptr inbounds nuw i8, ptr %0, i64 8 %3 = load ptr, ptr %2, align 8, !tbaa !5 %4 = tail call ptr @l_Std_Time_PlainDate_weekOfMonth(ptr noundef %3) #5 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %0, align 8, !tbaa !9 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !12 7: ; preds = %1 - %8 = load i32, ptr %0, align 4, !tbaa !9 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !12 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !9 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !9 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %1 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %1 +lean_dec.exit: ; preds = %10, %9, %7 ret ptr %4 } @@ -32593,30 +32581,24 @@ define ptr @l_Std_Time_PlainDateTime_quarter___boxed(ptr noundef %0) local_unnam %2 = getelementptr inbounds nuw i8, ptr %0, i64 8 %3 = load ptr, ptr %2, align 8, !tbaa !5 %4 = tail call ptr @l_Std_Time_PlainDate_quarter(ptr noundef %3) #5 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %0, align 8, !tbaa !9 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !12 7: ; preds = %1 - %8 = load i32, ptr %0, align 4, !tbaa !9 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !12 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !9 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !9 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %1 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %1 +lean_dec.exit: ; preds = %10, %9, %7 ret ptr %4 } diff --git a/bench/lean4/optimized/Position.ll b/bench/lean4/optimized/Position.ll index f5fc89caa95..2c5ea20c6fe 100644 --- a/bench/lean4/optimized/Position.ll +++ b/bench/lean4/optimized/Position.ll @@ -2711,36 +2711,30 @@ define nonnull ptr @l_Lean_FileMap_getLastLine___boxed(ptr noundef %0) local_unn %3 = load ptr, ptr %2, align 8, !tbaa !4 %4 = getelementptr i8, ptr %3, i64 8 %.val.i = load i64, ptr %4, align 8, !tbaa !13 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %0, align 8, !tbaa !9 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !12 7: ; preds = %1 - %8 = load i32, ptr %0, align 4, !tbaa !9 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !12 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !9 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !9 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %1 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %1 - %14 = and i64 %.val.i, 9223372036854775807 - %15 = icmp eq i64 %14, 0 - %16 = shl i64 %.val.i, 1 - %17 = add i64 %16, -1 - %18 = inttoptr i64 %17 to ptr - %.1.i.i = select i1 %15, ptr inttoptr (i64 1 to ptr), ptr %18 +lean_dec.exit: ; preds = %10, %9, %7 + %11 = and i64 %.val.i, 9223372036854775807 + %12 = icmp eq i64 %11, 0 + %13 = shl i64 %.val.i, 1 + %14 = add i64 %13, -1 + %15 = inttoptr i64 %14 to ptr + %.1.i.i = select i1 %12, ptr inttoptr (i64 1 to ptr), ptr %15 ret ptr %.1.i.i } diff --git a/bench/lean4/optimized/PrettyPrinter.ll b/bench/lean4/optimized/PrettyPrinter.ll index d67b3ca8e41..c66f4ba8ffc 100644 --- a/bench/lean4/optimized/PrettyPrinter.ll +++ b/bench/lean4/optimized/PrettyPrinter.ll @@ -23616,58 +23616,46 @@ lean_alloc_ctor.exit210: ; preds = %lean_dec.exit define ptr @l_Array_mapMUnsafe_map___at___private_Lean_PrettyPrinter_0__Lean_PrettyPrinter_noContext___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 { %4 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %4, align 8, !tbaa !13 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit7 + %5 = load i32, ptr %0, align 8, !tbaa !4 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %3 - %8 = load i32, ptr %0, align 4, !tbaa !4 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !4 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit7, label %13 +9: ; preds = %3 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit7, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %13, %12, %10, %3 - %14 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %14, align 8, !tbaa !13 - %15 = ptrtoint ptr %1 to i64 - %16 = and i64 %15, 1 - %.not11 = icmp eq i64 %16, 0 - br i1 %.not11, label %17, label %lean_dec.exit - -17: ; preds = %lean_dec.exit7 - %18 = load i32, ptr %1, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +lean_dec.exit7: ; preds = %10, %9, %7 + %11 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %11, align 8, !tbaa !13 + %12 = load i32, ptr %1, align 8, !tbaa !4 + %13 = icmp sgt i32 %12, 1 + br i1 %13, label %14, label %16, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %1, align 4, !tbaa !4 +14: ; preds = %lean_dec.exit7 + %15 = add nsw i32 %12, -1 + store i32 %15, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -22: ; preds = %17 - %.not.i8 = icmp eq i32 %18, 0 - br i1 %.not.i8, label %lean_dec.exit, label %23 +16: ; preds = %lean_dec.exit7 + %.not.i8 = icmp eq i32 %12, 0 + br i1 %.not.i8, label %lean_dec.exit, label %17 -23: ; preds = %22 +17: ; preds = %16 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit7 - %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_PrettyPrinter_0__Lean_PrettyPrinter_noContext___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %24 +lean_dec.exit: ; preds = %17, %16, %14 + %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_PrettyPrinter_0__Lean_PrettyPrinter_noContext___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %18 } ; Function Attrs: nounwind uwtable @@ -26993,86 +26981,74 @@ lean_dec.exit: ; preds = %25, %24, %22, %l_Le define nonnull ptr @l_Array_anyMUnsafe_any___at_Lean_MessageData_ofLazyM___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 { %5 = getelementptr i8, ptr %2, i64 8 %.val16 = load i64, ptr %5, align 8, !tbaa !13 - %6 = ptrtoint ptr %2 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit11 + %6 = load i32, ptr %2, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !11 8: ; preds = %4 - %9 = load i32, ptr %2, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !11 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %2, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit11 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit11, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit11, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #6 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %3, i64 8 - %.val = load i64, ptr %15, align 8, !tbaa !13 - %16 = ptrtoint ptr %3 to i64 - %17 = and i64 %16, 1 - %.not17 = icmp eq i64 %17, 0 - br i1 %.not17, label %18, label %lean_dec.exit10 - -18: ; preds = %lean_dec.exit11 - %19 = load i32, ptr %3, align 4, !tbaa !4 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !11 +lean_dec.exit11: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %3, i64 8 + %.val = load i64, ptr %12, align 8, !tbaa !13 + %13 = load i32, ptr %3, align 8, !tbaa !4 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !11 -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %3, align 4, !tbaa !4 +15: ; preds = %lean_dec.exit11 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit10 -23: ; preds = %18 - %.not.i12 = icmp eq i32 %19, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %24 +17: ; preds = %lean_dec.exit11 + %.not.i12 = icmp eq i32 %13, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #6 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %24, %23, %21, %lean_dec.exit11 - %25 = tail call zeroext i8 @l_Array_anyMUnsafe_any___at_Lean_MessageData_ofLazyM___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val) - %26 = ptrtoint ptr %1 to i64 - %27 = and i64 %26, 1 - %.not18 = icmp eq i64 %27, 0 - br i1 %.not18, label %28, label %lean_dec.exit +lean_dec.exit10: ; preds = %18, %17, %15 + %19 = tail call zeroext i8 @l_Array_anyMUnsafe_any___at_Lean_MessageData_ofLazyM___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val) + %20 = ptrtoint ptr %1 to i64 + %21 = and i64 %20, 1 + %.not18 = icmp eq i64 %21, 0 + br i1 %.not18, label %22, label %lean_dec.exit -28: ; preds = %lean_dec.exit10 - %29 = load i32, ptr %1, align 4, !tbaa !4 - %30 = icmp sgt i32 %29, 1 - br i1 %30, label %31, label %33, !prof !11 +22: ; preds = %lean_dec.exit10 + %23 = load i32, ptr %1, align 4, !tbaa !4 + %24 = icmp sgt i32 %23, 1 + br i1 %24, label %25, label %27, !prof !11 -31: ; preds = %28 - %32 = add nsw i32 %29, -1 - store i32 %32, ptr %1, align 4, !tbaa !4 +25: ; preds = %22 + %26 = add nsw i32 %23, -1 + store i32 %26, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -33: ; preds = %28 - %.not.i14 = icmp eq i32 %29, 0 - br i1 %.not.i14, label %lean_dec.exit, label %34 +27: ; preds = %22 + %.not.i14 = icmp eq i32 %23, 0 + br i1 %.not.i14, label %lean_dec.exit, label %28 -34: ; preds = %33 +28: ; preds = %27 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %34, %33, %31, %lean_dec.exit10 - %35 = shl nuw nsw i8 %25, 1 - %36 = or disjoint i8 %35, 1 - %37 = zext nneg i8 %36 to i64 - %38 = inttoptr i64 %37 to ptr - ret ptr %38 +lean_dec.exit: ; preds = %28, %27, %25, %lean_dec.exit10 + %29 = shl nuw nsw i8 %19, 1 + %30 = or disjoint i8 %29, 1 + %31 = zext nneg i8 %30 to i64 + %32 = inttoptr i64 %31 to ptr + ret ptr %32 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Propagate.ll b/bench/lean4/optimized/Propagate.ll index 309da0be281..ce3d4a5ee57 100644 --- a/bench/lean4/optimized/Propagate.ll +++ b/bench/lean4/optimized/Propagate.ll @@ -62052,130 +62052,118 @@ lean_alloc_ctor.exit1219: ; preds = %lean_dec.exit define ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Meta_Grind_propagateEqDown___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) local_unnamed_addr #0 { %17 = getelementptr i8, ptr %4, i64 8 %.val = load i64, ptr %17, align 8, !tbaa !16 - %18 = ptrtoint ptr %4 to i64 - %19 = and i64 %18, 1 - %.not = icmp eq i64 %19, 0 - br i1 %.not, label %20, label %lean_dec.exit26 + %18 = load i32, ptr %4, align 8, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !9 20: ; preds = %16 - %21 = load i32, ptr %4, align 4, !tbaa !4 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !9 - -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %4, align 4, !tbaa !4 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit26 -25: ; preds = %20 - %.not.i = icmp eq i32 %21, 0 - br i1 %.not.i, label %lean_dec.exit26, label %26 +22: ; preds = %16 + %.not.i = icmp eq i32 %18, 0 + br i1 %.not.i, label %lean_dec.exit26, label %23 -26: ; preds = %25 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit26 -lean_dec.exit26: ; preds = %26, %25, %23, %16 - %27 = getelementptr i8, ptr %5, i64 8 - %.val35 = load i64, ptr %27, align 8, !tbaa !16 - %28 = ptrtoint ptr %5 to i64 - %29 = and i64 %28, 1 - %.not36 = icmp eq i64 %29, 0 - br i1 %.not36, label %30, label %lean_dec.exit25 - -30: ; preds = %lean_dec.exit26 - %31 = load i32, ptr %5, align 4, !tbaa !4 - %32 = icmp sgt i32 %31, 1 - br i1 %32, label %33, label %35, !prof !9 +lean_dec.exit26: ; preds = %23, %22, %20 + %24 = getelementptr i8, ptr %5, i64 8 + %.val35 = load i64, ptr %24, align 8, !tbaa !16 + %25 = load i32, ptr %5, align 8, !tbaa !4 + %26 = icmp sgt i32 %25, 1 + br i1 %26, label %27, label %29, !prof !9 -33: ; preds = %30 - %34 = add nsw i32 %31, -1 - store i32 %34, ptr %5, align 4, !tbaa !4 +27: ; preds = %lean_dec.exit26 + %28 = add nsw i32 %25, -1 + store i32 %28, ptr %5, align 4, !tbaa !4 br label %lean_dec.exit25 -35: ; preds = %30 - %.not.i27 = icmp eq i32 %31, 0 - br i1 %.not.i27, label %lean_dec.exit25, label %36 +29: ; preds = %lean_dec.exit26 + %.not.i27 = icmp eq i32 %25, 0 + br i1 %.not.i27, label %lean_dec.exit25, label %30 -36: ; preds = %35 +30: ; preds = %29 tail call void @lean_dec_ref_cold(ptr noundef nonnull %5) #4 br label %lean_dec.exit25 -lean_dec.exit25: ; preds = %36, %35, %33, %lean_dec.exit26 - %37 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Meta_Grind_propagateEqDown___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, i64 noundef %.val, i64 noundef %.val35, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) - %38 = ptrtoint ptr %3 to i64 - %39 = and i64 %38, 1 - %.not37 = icmp eq i64 %39, 0 - br i1 %.not37, label %40, label %lean_dec.exit24 +lean_dec.exit25: ; preds = %30, %29, %27 + %31 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Meta_Grind_propagateEqDown___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, i64 noundef %.val, i64 noundef %.val35, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) + %32 = ptrtoint ptr %3 to i64 + %33 = and i64 %32, 1 + %.not37 = icmp eq i64 %33, 0 + br i1 %.not37, label %34, label %lean_dec.exit24 -40: ; preds = %lean_dec.exit25 - %41 = load i32, ptr %3, align 4, !tbaa !4 - %42 = icmp sgt i32 %41, 1 - br i1 %42, label %43, label %45, !prof !9 +34: ; preds = %lean_dec.exit25 + %35 = load i32, ptr %3, align 4, !tbaa !4 + %36 = icmp sgt i32 %35, 1 + br i1 %36, label %37, label %39, !prof !9 -43: ; preds = %40 - %44 = add nsw i32 %41, -1 - store i32 %44, ptr %3, align 4, !tbaa !4 +37: ; preds = %34 + %38 = add nsw i32 %35, -1 + store i32 %38, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit24 -45: ; preds = %40 - %.not.i29 = icmp eq i32 %41, 0 - br i1 %.not.i29, label %lean_dec.exit24, label %46 +39: ; preds = %34 + %.not.i29 = icmp eq i32 %35, 0 + br i1 %.not.i29, label %lean_dec.exit24, label %40 -46: ; preds = %45 +40: ; preds = %39 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit24 -lean_dec.exit24: ; preds = %46, %45, %43, %lean_dec.exit25 - %47 = ptrtoint ptr %2 to i64 - %48 = and i64 %47, 1 - %.not38 = icmp eq i64 %48, 0 - br i1 %.not38, label %49, label %lean_dec.exit23 +lean_dec.exit24: ; preds = %40, %39, %37, %lean_dec.exit25 + %41 = ptrtoint ptr %2 to i64 + %42 = and i64 %41, 1 + %.not38 = icmp eq i64 %42, 0 + br i1 %.not38, label %43, label %lean_dec.exit23 -49: ; preds = %lean_dec.exit24 - %50 = load i32, ptr %2, align 4, !tbaa !4 - %51 = icmp sgt i32 %50, 1 - br i1 %51, label %52, label %54, !prof !9 +43: ; preds = %lean_dec.exit24 + %44 = load i32, ptr %2, align 4, !tbaa !4 + %45 = icmp sgt i32 %44, 1 + br i1 %45, label %46, label %48, !prof !9 -52: ; preds = %49 - %53 = add nsw i32 %50, -1 - store i32 %53, ptr %2, align 4, !tbaa !4 +46: ; preds = %43 + %47 = add nsw i32 %44, -1 + store i32 %47, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit23 -54: ; preds = %49 - %.not.i31 = icmp eq i32 %50, 0 - br i1 %.not.i31, label %lean_dec.exit23, label %55 +48: ; preds = %43 + %.not.i31 = icmp eq i32 %44, 0 + br i1 %.not.i31, label %lean_dec.exit23, label %49 -55: ; preds = %54 +49: ; preds = %48 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit23 -lean_dec.exit23: ; preds = %55, %54, %52, %lean_dec.exit24 - %56 = ptrtoint ptr %1 to i64 - %57 = and i64 %56, 1 - %.not39 = icmp eq i64 %57, 0 - br i1 %.not39, label %58, label %lean_dec.exit +lean_dec.exit23: ; preds = %49, %48, %46, %lean_dec.exit24 + %50 = ptrtoint ptr %1 to i64 + %51 = and i64 %50, 1 + %.not39 = icmp eq i64 %51, 0 + br i1 %.not39, label %52, label %lean_dec.exit -58: ; preds = %lean_dec.exit23 - %59 = load i32, ptr %1, align 4, !tbaa !4 - %60 = icmp sgt i32 %59, 1 - br i1 %60, label %61, label %63, !prof !9 +52: ; preds = %lean_dec.exit23 + %53 = load i32, ptr %1, align 4, !tbaa !4 + %54 = icmp sgt i32 %53, 1 + br i1 %54, label %55, label %57, !prof !9 -61: ; preds = %58 - %62 = add nsw i32 %59, -1 - store i32 %62, ptr %1, align 4, !tbaa !4 +55: ; preds = %52 + %56 = add nsw i32 %53, -1 + store i32 %56, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -63: ; preds = %58 - %.not.i33 = icmp eq i32 %59, 0 - br i1 %.not.i33, label %lean_dec.exit, label %64 +57: ; preds = %52 + %.not.i33 = icmp eq i32 %53, 0 + br i1 %.not.i33, label %lean_dec.exit, label %58 -64: ; preds = %63 +58: ; preds = %57 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %64, %63, %61, %lean_dec.exit23 - ret ptr %37 +lean_dec.exit: ; preds = %58, %57, %55, %lean_dec.exit23 + ret ptr %31 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ReplaceLevel.ll b/bench/lean4/optimized/ReplaceLevel.ll index dded5bb9cef..708c3334f9d 100644 --- a/bench/lean4/optimized/ReplaceLevel.ll +++ b/bench/lean4/optimized/ReplaceLevel.ll @@ -702,32 +702,26 @@ lean_alloc_ctor.exit36: ; preds = %lean_alloc_ctor.exi define noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_cache___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 { %5 = getelementptr i8, ptr %0, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !12 - %6 = ptrtoint ptr %0 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit + %6 = load i32, ptr %0, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !9 8: ; preds = %4 - %9 = load i32, ptr %0, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !9 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %0, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %14, %13, %11, %4 - %15 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_cache(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr noundef %3) - ret ptr %15 +lean_dec.exit: ; preds = %11, %10, %8 + %12 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_cache(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr noundef %3) + ret ptr %12 } ; Function Attrs: nounwind uwtable @@ -4438,32 +4432,26 @@ declare ptr @l_Lean_Expr_proj___override(ptr noundef, ptr noundef, ptr noundef) define noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 { %5 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !12 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit + %6 = load i32, ptr %1, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !9 8: ; preds = %4 - %9 = load i32, ptr %1, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !9 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %14, %13, %11, %4 - %15 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) - ret ptr %15 +lean_dec.exit: ; preds = %11, %10, %8 + %12 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) + ret ptr %12 } ; Function Attrs: nounwind uwtable @@ -4476,32 +4464,26 @@ define noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM(ptr noun define noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 { %5 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !12 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit + %6 = load i32, ptr %1, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !9 8: ; preds = %4 - %9 = load i32, ptr %1, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !9 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %14, %13, %11, %4 - %15 = tail call noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) - ret ptr %15 +lean_dec.exit: ; preds = %11, %10, %8 + %12 = tail call noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) + ret ptr %12 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/RequestCancellation.ll b/bench/lean4/optimized/RequestCancellation.ll index 3db35ae675a..e83b1ab7986 100644 --- a/bench/lean4/optimized/RequestCancellation.ll +++ b/bench/lean4/optimized/RequestCancellation.ll @@ -1413,30 +1413,24 @@ define ptr @l_Lean_Server_RequestCancellationToken_requestCancellationTask___box %2 = getelementptr inbounds nuw i8, ptr %0, i64 24 %3 = load ptr, ptr %2, align 8, !tbaa !4 %4 = tail call ptr @l_IO_Promise_result_x21___rarg(ptr noundef %3) #5 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %1 - %8 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !8 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %1 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %1 +lean_dec.exit: ; preds = %10, %9, %7 ret ptr %4 } @@ -1453,30 +1447,24 @@ define ptr @l_Lean_Server_RequestCancellationToken_editCancellationTask___boxed( %2 = getelementptr inbounds nuw i8, ptr %0, i64 32 %3 = load ptr, ptr %2, align 8, !tbaa !4 %4 = tail call ptr @l_IO_Promise_result_x21___rarg(ptr noundef %3) #5 - %5 = ptrtoint ptr %0 to i64 - %6 = and i64 %5, 1 - %.not = icmp eq i64 %6, 0 - br i1 %.not, label %7, label %lean_dec.exit + %5 = load i32, ptr %0, align 8, !tbaa !8 + %6 = icmp sgt i32 %5, 1 + br i1 %6, label %7, label %9, !prof !11 7: ; preds = %1 - %8 = load i32, ptr %0, align 4, !tbaa !8 - %9 = icmp sgt i32 %8, 1 - br i1 %9, label %10, label %12, !prof !11 - -10: ; preds = %7 - %11 = add nsw i32 %8, -1 - store i32 %11, ptr %0, align 4, !tbaa !8 + %8 = add nsw i32 %5, -1 + store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -12: ; preds = %7 - %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit, label %13 +9: ; preds = %1 + %.not.i = icmp eq i32 %5, 0 + br i1 %.not.i, label %lean_dec.exit, label %10 -13: ; preds = %12 +10: ; preds = %9 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %13, %12, %10, %1 +lean_dec.exit: ; preds = %10, %9, %7 ret ptr %4 } @@ -1570,30 +1558,24 @@ define ptr @l_Lean_Server_RequestCancellationToken_wasCancelledByCancelRequest__ %3 = getelementptr inbounds nuw i8, ptr %0, i64 8 %4 = load ptr, ptr %3, align 8, !tbaa !4 %5 = tail call ptr @lean_st_ref_get(ptr noundef %4, ptr noundef %1) #5 - %6 = ptrtoint ptr %0 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit + %6 = load i32, ptr %0, align 8, !tbaa !8 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !11 8: ; preds = %2 - %9 = load i32, ptr %0, align 4, !tbaa !8 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !11 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %0, align 4, !tbaa !8 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit, label %14 +10: ; preds = %2 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %14, %13, %11, %2 +lean_dec.exit: ; preds = %11, %10, %8 ret ptr %5 } @@ -1610,30 +1592,24 @@ define ptr @l_Lean_Server_RequestCancellationToken_wasCancelledByEdit___boxed(pt %3 = getelementptr inbounds nuw i8, ptr %0, i64 16 %4 = load ptr, ptr %3, align 8, !tbaa !4 %5 = tail call ptr @lean_st_ref_get(ptr noundef %4, ptr noundef %1) #5 - %6 = ptrtoint ptr %0 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit + %6 = load i32, ptr %0, align 8, !tbaa !8 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !11 8: ; preds = %2 - %9 = load i32, ptr %0, align 4, !tbaa !8 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !11 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %0, align 4, !tbaa !8 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit, label %14 +10: ; preds = %2 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %14, %13, %11, %2 +lean_dec.exit: ; preds = %11, %10, %8 ret ptr %5 } diff --git a/bench/lean4/optimized/Simp.ll b/bench/lean4/optimized/Simp.ll index e1c4b6eafa4..7f55c8d051a 100644 --- a/bench/lean4/optimized/Simp.ll +++ b/bench/lean4/optimized/Simp.ll @@ -8728,7 +8728,7 @@ define ptr @l_Lean_Elab_Tactic_Conv_evalSimpTrace___lambda__2(ptr noundef %0, pt %19 = ptrtoint ptr %16 to i64 %20 = and i64 %19, 1 %.not168 = icmp eq i64 %20, 0 - br i1 %18, label %21, label %286 + br i1 %18, label %21, label %283 21: ; preds = %15 br i1 %.not168, label %22, label %lean_inc.exit82.thread @@ -9410,56 +9410,50 @@ lean_alloc_ctor.exit: ; preds = %lean_dec.exit84 %275 = getelementptr inbounds nuw i8, ptr %271, i64 8 store ptr %261, ptr %275, align 8, !tbaa !4 %276 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalSimpTrace___lambda__1(ptr noundef %1, ptr noundef %2, ptr noundef %5, ptr noundef %3, ptr nonnull poison, ptr noundef nonnull %271, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14) - %277 = ptrtoint ptr %271 to i64 - %278 = and i64 %277, 1 - %.not171 = icmp eq i64 %278, 0 - br i1 %.not171, label %279, label %lean_dec.exit83 + %277 = load i32, ptr %271, align 8, !tbaa !8 + %278 = icmp sgt i32 %277, 1 + br i1 %278, label %279, label %281, !prof !11 279: ; preds = %lean_alloc_ctor.exit - %280 = load i32, ptr %271, align 4, !tbaa !8 - %281 = icmp sgt i32 %280, 1 - br i1 %281, label %282, label %284, !prof !11 - -282: ; preds = %279 - %283 = add nsw i32 %280, -1 - store i32 %283, ptr %271, align 4, !tbaa !8 + %280 = add nsw i32 %277, -1 + store i32 %280, ptr %271, align 4, !tbaa !8 br label %lean_dec.exit83 -284: ; preds = %279 - %.not.i157 = icmp eq i32 %280, 0 - br i1 %.not.i157, label %lean_dec.exit83, label %285 +281: ; preds = %lean_alloc_ctor.exit + %.not.i157 = icmp eq i32 %277, 0 + br i1 %.not.i157, label %lean_dec.exit83, label %282 -285: ; preds = %284 +282: ; preds = %281 tail call void @lean_dec_ref_cold(ptr noundef nonnull %271) #5 br label %lean_dec.exit83 -286: ; preds = %15 - br i1 %.not168, label %287, label %lean_dec.exit +283: ; preds = %15 + br i1 %.not168, label %284, label %lean_dec.exit -287: ; preds = %286 - %288 = load i32, ptr %16, align 4, !tbaa !8 - %289 = icmp sgt i32 %288, 1 - br i1 %289, label %290, label %292, !prof !11 +284: ; preds = %283 + %285 = load i32, ptr %16, align 4, !tbaa !8 + %286 = icmp sgt i32 %285, 1 + br i1 %286, label %287, label %289, !prof !11 -290: ; preds = %287 - %291 = add nsw i32 %288, -1 - store i32 %291, ptr %16, align 4, !tbaa !8 +287: ; preds = %284 + %288 = add nsw i32 %285, -1 + store i32 %288, ptr %16, align 4, !tbaa !8 br label %lean_dec.exit -292: ; preds = %287 - %.not.i159 = icmp eq i32 %288, 0 - br i1 %.not.i159, label %lean_dec.exit, label %293 +289: ; preds = %284 + %.not.i159 = icmp eq i32 %285, 0 + br i1 %.not.i159, label %lean_dec.exit, label %290 -293: ; preds = %292 +290: ; preds = %289 tail call void @lean_dec_ref_cold(ptr noundef nonnull %16) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %293, %292, %290, %286 - %294 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalSimpTrace___lambda__1(ptr noundef %1, ptr noundef %2, ptr noundef %5, ptr noundef %3, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14) +lean_dec.exit: ; preds = %290, %289, %287, %283 + %291 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalSimpTrace___lambda__1(ptr noundef %1, ptr noundef %2, ptr noundef %5, ptr noundef %3, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14) br label %lean_dec.exit83 -lean_dec.exit83: ; preds = %lean_alloc_ctor.exit, %282, %284, %285, %lean_dec.exit98, %lean_dec.exit86, %lean_dec.exit - %.2 = phi ptr [ %294, %lean_dec.exit ], [ %130, %lean_dec.exit98 ], [ %251, %lean_dec.exit86 ], [ %276, %285 ], [ %276, %284 ], [ %276, %282 ], [ %276, %lean_alloc_ctor.exit ] +lean_dec.exit83: ; preds = %279, %281, %282, %lean_dec.exit98, %lean_dec.exit86, %lean_dec.exit + %.2 = phi ptr [ %291, %lean_dec.exit ], [ %130, %lean_dec.exit98 ], [ %251, %lean_dec.exit86 ], [ %276, %282 ], [ %276, %281 ], [ %276, %279 ] ret ptr %.2 } @@ -18163,7 +18157,7 @@ define ptr @l_Lean_Elab_Tactic_Conv_evalDSimpTrace___lambda__2(ptr noundef %0, p %18 = ptrtoint ptr %15 to i64 %19 = and i64 %18, 1 %.not166 = icmp eq i64 %19, 0 - br i1 %17, label %20, label %285 + br i1 %17, label %20, label %282 20: ; preds = %14 br i1 %.not166, label %21, label %lean_inc.exit80.thread @@ -18845,56 +18839,50 @@ lean_alloc_ctor.exit: ; preds = %lean_dec.exit82 %274 = getelementptr inbounds nuw i8, ptr %270, i64 8 store ptr %260, ptr %274, align 8, !tbaa !4 %275 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDSimpTrace___lambda__1(ptr noundef %1, ptr noundef %4, ptr noundef %2, ptr nonnull poison, ptr noundef nonnull %270, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) - %276 = ptrtoint ptr %270 to i64 - %277 = and i64 %276, 1 - %.not169 = icmp eq i64 %277, 0 - br i1 %.not169, label %278, label %lean_dec.exit81 + %276 = load i32, ptr %270, align 8, !tbaa !8 + %277 = icmp sgt i32 %276, 1 + br i1 %277, label %278, label %280, !prof !11 278: ; preds = %lean_alloc_ctor.exit - %279 = load i32, ptr %270, align 4, !tbaa !8 - %280 = icmp sgt i32 %279, 1 - br i1 %280, label %281, label %283, !prof !11 - -281: ; preds = %278 - %282 = add nsw i32 %279, -1 - store i32 %282, ptr %270, align 4, !tbaa !8 + %279 = add nsw i32 %276, -1 + store i32 %279, ptr %270, align 4, !tbaa !8 br label %lean_dec.exit81 -283: ; preds = %278 - %.not.i155 = icmp eq i32 %279, 0 - br i1 %.not.i155, label %lean_dec.exit81, label %284 +280: ; preds = %lean_alloc_ctor.exit + %.not.i155 = icmp eq i32 %276, 0 + br i1 %.not.i155, label %lean_dec.exit81, label %281 -284: ; preds = %283 +281: ; preds = %280 tail call void @lean_dec_ref_cold(ptr noundef nonnull %270) #5 br label %lean_dec.exit81 -285: ; preds = %14 - br i1 %.not166, label %286, label %lean_dec.exit +282: ; preds = %14 + br i1 %.not166, label %283, label %lean_dec.exit -286: ; preds = %285 - %287 = load i32, ptr %15, align 4, !tbaa !8 - %288 = icmp sgt i32 %287, 1 - br i1 %288, label %289, label %291, !prof !11 +283: ; preds = %282 + %284 = load i32, ptr %15, align 4, !tbaa !8 + %285 = icmp sgt i32 %284, 1 + br i1 %285, label %286, label %288, !prof !11 -289: ; preds = %286 - %290 = add nsw i32 %287, -1 - store i32 %290, ptr %15, align 4, !tbaa !8 +286: ; preds = %283 + %287 = add nsw i32 %284, -1 + store i32 %287, ptr %15, align 4, !tbaa !8 br label %lean_dec.exit -291: ; preds = %286 - %.not.i157 = icmp eq i32 %287, 0 - br i1 %.not.i157, label %lean_dec.exit, label %292 +288: ; preds = %283 + %.not.i157 = icmp eq i32 %284, 0 + br i1 %.not.i157, label %lean_dec.exit, label %289 -292: ; preds = %291 +289: ; preds = %288 tail call void @lean_dec_ref_cold(ptr noundef nonnull %15) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %292, %291, %289, %285 - %293 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDSimpTrace___lambda__1(ptr noundef %1, ptr noundef %4, ptr noundef %2, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) +lean_dec.exit: ; preds = %289, %288, %286, %282 + %290 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDSimpTrace___lambda__1(ptr noundef %1, ptr noundef %4, ptr noundef %2, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) br label %lean_dec.exit81 -lean_dec.exit81: ; preds = %lean_alloc_ctor.exit, %281, %283, %284, %lean_dec.exit96, %lean_dec.exit84, %lean_dec.exit - %.2 = phi ptr [ %293, %lean_dec.exit ], [ %129, %lean_dec.exit96 ], [ %250, %lean_dec.exit84 ], [ %275, %284 ], [ %275, %283 ], [ %275, %281 ], [ %275, %lean_alloc_ctor.exit ] +lean_dec.exit81: ; preds = %278, %280, %281, %lean_dec.exit96, %lean_dec.exit84, %lean_dec.exit + %.2 = phi ptr [ %290, %lean_dec.exit ], [ %129, %lean_dec.exit96 ], [ %250, %lean_dec.exit84 ], [ %275, %281 ], [ %275, %280 ], [ %275, %278 ] ret ptr %.2 } diff --git a/bench/lean4/optimized/TZdb.ll b/bench/lean4/optimized/TZdb.ll index 956e2f3887c..aba1aca56a2 100644 --- a/bench/lean4/optimized/TZdb.ll +++ b/bench/lean4/optimized/TZdb.ll @@ -4020,130 +4020,118 @@ lean_dec.exit: ; preds = %21, %20, %18, %lean define ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_TZdb_inst___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) local_unnamed_addr #0 { %10 = getelementptr i8, ptr %5, i64 8 %.val = load i64, ptr %10, align 8, !tbaa !12 - %11 = ptrtoint ptr %5 to i64 - %12 = and i64 %11, 1 - %.not = icmp eq i64 %12, 0 - br i1 %.not, label %13, label %lean_dec.exit19 + %11 = load i32, ptr %5, align 8, !tbaa !8 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !11 13: ; preds = %9 - %14 = load i32, ptr %5, align 4, !tbaa !8 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !11 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %5, align 4, !tbaa !8 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %5, align 4, !tbaa !8 br label %lean_dec.exit19 -18: ; preds = %13 - %.not.i = icmp eq i32 %14, 0 - br i1 %.not.i, label %lean_dec.exit19, label %19 +15: ; preds = %9 + %.not.i = icmp eq i32 %11, 0 + br i1 %.not.i, label %lean_dec.exit19, label %16 -19: ; preds = %18 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %5) #3 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %19, %18, %16, %9 - %20 = getelementptr i8, ptr %6, i64 8 - %.val28 = load i64, ptr %20, align 8, !tbaa !12 - %21 = ptrtoint ptr %6 to i64 - %22 = and i64 %21, 1 - %.not29 = icmp eq i64 %22, 0 - br i1 %.not29, label %23, label %lean_dec.exit18 - -23: ; preds = %lean_dec.exit19 - %24 = load i32, ptr %6, align 4, !tbaa !8 - %25 = icmp sgt i32 %24, 1 - br i1 %25, label %26, label %28, !prof !11 - -26: ; preds = %23 - %27 = add nsw i32 %24, -1 - store i32 %27, ptr %6, align 4, !tbaa !8 +lean_dec.exit19: ; preds = %16, %15, %13 + %17 = getelementptr i8, ptr %6, i64 8 + %.val28 = load i64, ptr %17, align 8, !tbaa !12 + %18 = load i32, ptr %6, align 8, !tbaa !8 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 + +20: ; preds = %lean_dec.exit19 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %6, align 4, !tbaa !8 br label %lean_dec.exit18 -28: ; preds = %23 - %.not.i20 = icmp eq i32 %24, 0 - br i1 %.not.i20, label %lean_dec.exit18, label %29 +22: ; preds = %lean_dec.exit19 + %.not.i20 = icmp eq i32 %18, 0 + br i1 %.not.i20, label %lean_dec.exit18, label %23 -29: ; preds = %28 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %6) #3 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %29, %28, %26, %lean_dec.exit19 - %30 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_TZdb_inst___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) - %31 = ptrtoint ptr %4 to i64 - %32 = and i64 %31, 1 - %.not30 = icmp eq i64 %32, 0 - br i1 %.not30, label %33, label %lean_dec.exit17 +lean_dec.exit18: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_TZdb_inst___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) + %25 = ptrtoint ptr %4 to i64 + %26 = and i64 %25, 1 + %.not30 = icmp eq i64 %26, 0 + br i1 %.not30, label %27, label %lean_dec.exit17 -33: ; preds = %lean_dec.exit18 - %34 = load i32, ptr %4, align 4, !tbaa !8 - %35 = icmp sgt i32 %34, 1 - br i1 %35, label %36, label %38, !prof !11 +27: ; preds = %lean_dec.exit18 + %28 = load i32, ptr %4, align 4, !tbaa !8 + %29 = icmp sgt i32 %28, 1 + br i1 %29, label %30, label %32, !prof !11 -36: ; preds = %33 - %37 = add nsw i32 %34, -1 - store i32 %37, ptr %4, align 4, !tbaa !8 +30: ; preds = %27 + %31 = add nsw i32 %28, -1 + store i32 %31, ptr %4, align 4, !tbaa !8 br label %lean_dec.exit17 -38: ; preds = %33 - %.not.i22 = icmp eq i32 %34, 0 - br i1 %.not.i22, label %lean_dec.exit17, label %39 +32: ; preds = %27 + %.not.i22 = icmp eq i32 %28, 0 + br i1 %.not.i22, label %lean_dec.exit17, label %33 -39: ; preds = %38 +33: ; preds = %32 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #3 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %39, %38, %36, %lean_dec.exit18 - %40 = ptrtoint ptr %2 to i64 - %41 = and i64 %40, 1 - %.not31 = icmp eq i64 %41, 0 - br i1 %.not31, label %42, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %33, %32, %30, %lean_dec.exit18 + %34 = ptrtoint ptr %2 to i64 + %35 = and i64 %34, 1 + %.not31 = icmp eq i64 %35, 0 + br i1 %.not31, label %36, label %lean_dec.exit16 -42: ; preds = %lean_dec.exit17 - %43 = load i32, ptr %2, align 4, !tbaa !8 - %44 = icmp sgt i32 %43, 1 - br i1 %44, label %45, label %47, !prof !11 +36: ; preds = %lean_dec.exit17 + %37 = load i32, ptr %2, align 4, !tbaa !8 + %38 = icmp sgt i32 %37, 1 + br i1 %38, label %39, label %41, !prof !11 -45: ; preds = %42 - %46 = add nsw i32 %43, -1 - store i32 %46, ptr %2, align 4, !tbaa !8 +39: ; preds = %36 + %40 = add nsw i32 %37, -1 + store i32 %40, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit16 -47: ; preds = %42 - %.not.i24 = icmp eq i32 %43, 0 - br i1 %.not.i24, label %lean_dec.exit16, label %48 +41: ; preds = %36 + %.not.i24 = icmp eq i32 %37, 0 + br i1 %.not.i24, label %lean_dec.exit16, label %42 -48: ; preds = %47 +42: ; preds = %41 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %48, %47, %45, %lean_dec.exit17 - %49 = ptrtoint ptr %1 to i64 - %50 = and i64 %49, 1 - %.not32 = icmp eq i64 %50, 0 - br i1 %.not32, label %51, label %lean_dec.exit +lean_dec.exit16: ; preds = %42, %41, %39, %lean_dec.exit17 + %43 = ptrtoint ptr %1 to i64 + %44 = and i64 %43, 1 + %.not32 = icmp eq i64 %44, 0 + br i1 %.not32, label %45, label %lean_dec.exit -51: ; preds = %lean_dec.exit16 - %52 = load i32, ptr %1, align 4, !tbaa !8 - %53 = icmp sgt i32 %52, 1 - br i1 %53, label %54, label %56, !prof !11 +45: ; preds = %lean_dec.exit16 + %46 = load i32, ptr %1, align 4, !tbaa !8 + %47 = icmp sgt i32 %46, 1 + br i1 %47, label %48, label %50, !prof !11 -54: ; preds = %51 - %55 = add nsw i32 %52, -1 - store i32 %55, ptr %1, align 4, !tbaa !8 +48: ; preds = %45 + %49 = add nsw i32 %46, -1 + store i32 %49, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -56: ; preds = %51 - %.not.i26 = icmp eq i32 %52, 0 - br i1 %.not.i26, label %lean_dec.exit, label %57 +50: ; preds = %45 + %.not.i26 = icmp eq i32 %46, 0 + br i1 %.not.i26, label %lean_dec.exit, label %51 -57: ; preds = %56 +51: ; preds = %50 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %57, %56, %54, %lean_dec.exit16 - ret ptr %30 +lean_dec.exit: ; preds = %51, %50, %48, %lean_dec.exit16 + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Topological.ll b/bench/lean4/optimized/Topological.ll index c36be0a7629..50fd72f44fb 100644 --- a/bench/lean4/optimized/Topological.ll +++ b/bench/lean4/optimized/Topological.ll @@ -987,39 +987,30 @@ lean_alloc_closure.exit: ; preds = %6 store ptr %4, ptr %17, align 8, !tbaa !10 %18 = getelementptr inbounds nuw i8, ptr %7, i64 56 store ptr %0, ptr %18, align 8, !tbaa !10 - %19 = ptrtoint ptr %7 to i64 - %20 = and i64 %19, 1 - %.not.i = icmp eq i64 %20, 0 - br i1 %.not.i, label %21, label %lean_inc.exit.i - -21: ; preds = %lean_alloc_closure.exit - store i32 2, ptr %7, align 4, !tbaa !4 - br label %lean_inc.exit.i - -lean_inc.exit.i: ; preds = %21, %lean_alloc_closure.exit + store i32 2, ptr %7, align 8, !tbaa !4 tail call void @lean_inc_heartbeat() #3 - %22 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %23 = icmp eq ptr %22, null - br i1 %23, label %24, label %l_Lake_recFetch___rarg.exit + %19 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %20 = icmp eq ptr %19, null + br i1 %20, label %21, label %l_Lake_recFetch___rarg.exit -24: ; preds = %lean_inc.exit.i +21: ; preds = %lean_alloc_closure.exit tail call void @lean_internal_panic_out_of_memory() #4 unreachable -l_Lake_recFetch___rarg.exit: ; preds = %lean_inc.exit.i - %25 = getelementptr inbounds nuw i8, ptr %22, i64 4 - store i32 1, ptr %22, align 4, !tbaa !4 - store i32 -184549344, ptr %25, align 4 - %26 = getelementptr inbounds nuw i8, ptr %22, i64 8 - store ptr @l_Lake_recFetch___rarg, ptr %26, align 8, !tbaa !10 - %27 = getelementptr inbounds nuw i8, ptr %22, i64 16 - store i16 2, ptr %27, align 8, !tbaa !12 - %28 = getelementptr inbounds nuw i8, ptr %22, i64 18 - store i16 1, ptr %28, align 2, !tbaa !12 - %29 = getelementptr inbounds nuw i8, ptr %22, i64 24 - store ptr %7, ptr %29, align 8, !tbaa !10 - %30 = tail call ptr @lean_apply_2(ptr noundef nonnull %7, ptr noundef %5, ptr noundef nonnull %22) #3 - ret ptr %30 +l_Lake_recFetch___rarg.exit: ; preds = %lean_alloc_closure.exit + %22 = getelementptr inbounds nuw i8, ptr %19, i64 4 + store i32 1, ptr %19, align 4, !tbaa !4 + store i32 -184549344, ptr %22, align 4 + %23 = getelementptr inbounds nuw i8, ptr %19, i64 8 + store ptr @l_Lake_recFetch___rarg, ptr %23, align 8, !tbaa !10 + %24 = getelementptr inbounds nuw i8, ptr %19, i64 16 + store i16 2, ptr %24, align 8, !tbaa !12 + %25 = getelementptr inbounds nuw i8, ptr %19, i64 18 + store i16 1, ptr %25, align 2, !tbaa !12 + %26 = getelementptr inbounds nuw i8, ptr %19, i64 24 + store ptr %7, ptr %26, align 8, !tbaa !10 + %27 = tail call ptr @lean_apply_2(ptr noundef nonnull %7, ptr noundef %5, ptr noundef nonnull %19) #3 + ret ptr %27 } ; Function Attrs: nounwind uwtable @@ -2061,39 +2052,30 @@ lean_alloc_closure.exit: ; preds = %7 store ptr %3, ptr %19, align 8, !tbaa !10 %20 = getelementptr inbounds nuw i8, ptr %8, i64 64 store ptr %0, ptr %20, align 8, !tbaa !10 - %21 = ptrtoint ptr %8 to i64 - %22 = and i64 %21, 1 - %.not.i = icmp eq i64 %22, 0 - br i1 %.not.i, label %23, label %lean_inc.exit.i - -23: ; preds = %lean_alloc_closure.exit - store i32 2, ptr %8, align 4, !tbaa !4 - br label %lean_inc.exit.i - -lean_inc.exit.i: ; preds = %23, %lean_alloc_closure.exit + store i32 2, ptr %8, align 8, !tbaa !4 tail call void @lean_inc_heartbeat() #3 - %24 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %25 = icmp eq ptr %24, null - br i1 %25, label %26, label %l_Lake_recFetch___rarg.exit + %21 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %22 = icmp eq ptr %21, null + br i1 %22, label %23, label %l_Lake_recFetch___rarg.exit -26: ; preds = %lean_inc.exit.i +23: ; preds = %lean_alloc_closure.exit tail call void @lean_internal_panic_out_of_memory() #4 unreachable -l_Lake_recFetch___rarg.exit: ; preds = %lean_inc.exit.i - %27 = getelementptr inbounds nuw i8, ptr %24, i64 4 - store i32 1, ptr %24, align 4, !tbaa !4 - store i32 -184549344, ptr %27, align 4 - %28 = getelementptr inbounds nuw i8, ptr %24, i64 8 - store ptr @l_Lake_recFetch___rarg, ptr %28, align 8, !tbaa !10 - %29 = getelementptr inbounds nuw i8, ptr %24, i64 16 - store i16 2, ptr %29, align 8, !tbaa !12 - %30 = getelementptr inbounds nuw i8, ptr %24, i64 18 - store i16 1, ptr %30, align 2, !tbaa !12 - %31 = getelementptr inbounds nuw i8, ptr %24, i64 24 - store ptr %8, ptr %31, align 8, !tbaa !10 - %32 = tail call ptr @lean_apply_2(ptr noundef nonnull %8, ptr noundef %6, ptr noundef nonnull %24) #3 - ret ptr %32 +l_Lake_recFetch___rarg.exit: ; preds = %lean_alloc_closure.exit + %24 = getelementptr inbounds nuw i8, ptr %21, i64 4 + store i32 1, ptr %21, align 4, !tbaa !4 + store i32 -184549344, ptr %24, align 4 + %25 = getelementptr inbounds nuw i8, ptr %21, i64 8 + store ptr @l_Lake_recFetch___rarg, ptr %25, align 8, !tbaa !10 + %26 = getelementptr inbounds nuw i8, ptr %21, i64 16 + store i16 2, ptr %26, align 8, !tbaa !12 + %27 = getelementptr inbounds nuw i8, ptr %21, i64 18 + store i16 1, ptr %27, align 2, !tbaa !12 + %28 = getelementptr inbounds nuw i8, ptr %21, i64 24 + store ptr %8, ptr %28, align 8, !tbaa !10 + %29 = tail call ptr @lean_apply_2(ptr noundef nonnull %8, ptr noundef %6, ptr noundef nonnull %21) #3 + ret ptr %29 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/TypeName.ll b/bench/lean4/optimized/TypeName.ll index 80fc6deca17..5a6f9205bd9 100644 --- a/bench/lean4/optimized/TypeName.ll +++ b/bench/lean4/optimized/TypeName.ll @@ -14220,130 +14220,118 @@ lean_dec.exit: ; preds = %15, %14, %12, %5 define ptr @l_Array_forIn_x27Unsafe_loop___at___private_Lean_Elab_Deriving_TypeName_0__Lean_Elab_deriveTypeNameInstance___spec__3___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) local_unnamed_addr #0 { %10 = getelementptr i8, ptr %3, i64 8 %.val = load i64, ptr %10, align 8, !tbaa !15 - %11 = ptrtoint ptr %3 to i64 - %12 = and i64 %11, 1 - %.not = icmp eq i64 %12, 0 - br i1 %.not, label %13, label %lean_dec.exit19 + %11 = load i32, ptr %3, align 8, !tbaa !8 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !11 13: ; preds = %9 - %14 = load i32, ptr %3, align 4, !tbaa !8 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !11 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %3, align 4, !tbaa !8 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %3, align 4, !tbaa !8 br label %lean_dec.exit19 -18: ; preds = %13 - %.not.i = icmp eq i32 %14, 0 - br i1 %.not.i, label %lean_dec.exit19, label %19 +15: ; preds = %9 + %.not.i = icmp eq i32 %11, 0 + br i1 %.not.i, label %lean_dec.exit19, label %16 -19: ; preds = %18 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %19, %18, %16, %9 - %20 = getelementptr i8, ptr %4, i64 8 - %.val28 = load i64, ptr %20, align 8, !tbaa !15 - %21 = ptrtoint ptr %4 to i64 - %22 = and i64 %21, 1 - %.not29 = icmp eq i64 %22, 0 - br i1 %.not29, label %23, label %lean_dec.exit18 - -23: ; preds = %lean_dec.exit19 - %24 = load i32, ptr %4, align 4, !tbaa !8 - %25 = icmp sgt i32 %24, 1 - br i1 %25, label %26, label %28, !prof !11 +lean_dec.exit19: ; preds = %16, %15, %13 + %17 = getelementptr i8, ptr %4, i64 8 + %.val28 = load i64, ptr %17, align 8, !tbaa !15 + %18 = load i32, ptr %4, align 8, !tbaa !8 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 -26: ; preds = %23 - %27 = add nsw i32 %24, -1 - store i32 %27, ptr %4, align 4, !tbaa !8 +20: ; preds = %lean_dec.exit19 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %4, align 4, !tbaa !8 br label %lean_dec.exit18 -28: ; preds = %23 - %.not.i20 = icmp eq i32 %24, 0 - br i1 %.not.i20, label %lean_dec.exit18, label %29 +22: ; preds = %lean_dec.exit19 + %.not.i20 = icmp eq i32 %18, 0 + br i1 %.not.i20, label %lean_dec.exit18, label %23 -29: ; preds = %28 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %29, %28, %26, %lean_dec.exit19 - %30 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at___private_Lean_Elab_Deriving_TypeName_0__Lean_Elab_deriveTypeNameInstance___spec__3(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val28, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) - %31 = ptrtoint ptr %2 to i64 - %32 = and i64 %31, 1 - %.not30 = icmp eq i64 %32, 0 - br i1 %.not30, label %33, label %lean_dec.exit17 - -33: ; preds = %lean_dec.exit18 - %34 = load i32, ptr %2, align 4, !tbaa !8 - %35 = icmp sgt i32 %34, 1 - br i1 %35, label %36, label %38, !prof !11 - -36: ; preds = %33 - %37 = add nsw i32 %34, -1 - store i32 %37, ptr %2, align 4, !tbaa !8 +lean_dec.exit18: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at___private_Lean_Elab_Deriving_TypeName_0__Lean_Elab_deriveTypeNameInstance___spec__3(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val28, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) + %25 = ptrtoint ptr %2 to i64 + %26 = and i64 %25, 1 + %.not30 = icmp eq i64 %26, 0 + br i1 %.not30, label %27, label %lean_dec.exit17 + +27: ; preds = %lean_dec.exit18 + %28 = load i32, ptr %2, align 4, !tbaa !8 + %29 = icmp sgt i32 %28, 1 + br i1 %29, label %30, label %32, !prof !11 + +30: ; preds = %27 + %31 = add nsw i32 %28, -1 + store i32 %31, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit17 -38: ; preds = %33 - %.not.i22 = icmp eq i32 %34, 0 - br i1 %.not.i22, label %lean_dec.exit17, label %39 +32: ; preds = %27 + %.not.i22 = icmp eq i32 %28, 0 + br i1 %.not.i22, label %lean_dec.exit17, label %33 -39: ; preds = %38 +33: ; preds = %32 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %39, %38, %36, %lean_dec.exit18 - %40 = ptrtoint ptr %1 to i64 - %41 = and i64 %40, 1 - %.not31 = icmp eq i64 %41, 0 - br i1 %.not31, label %42, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %33, %32, %30, %lean_dec.exit18 + %34 = ptrtoint ptr %1 to i64 + %35 = and i64 %34, 1 + %.not31 = icmp eq i64 %35, 0 + br i1 %.not31, label %36, label %lean_dec.exit16 -42: ; preds = %lean_dec.exit17 - %43 = load i32, ptr %1, align 4, !tbaa !8 - %44 = icmp sgt i32 %43, 1 - br i1 %44, label %45, label %47, !prof !11 +36: ; preds = %lean_dec.exit17 + %37 = load i32, ptr %1, align 4, !tbaa !8 + %38 = icmp sgt i32 %37, 1 + br i1 %38, label %39, label %41, !prof !11 -45: ; preds = %42 - %46 = add nsw i32 %43, -1 - store i32 %46, ptr %1, align 4, !tbaa !8 +39: ; preds = %36 + %40 = add nsw i32 %37, -1 + store i32 %40, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit16 -47: ; preds = %42 - %.not.i24 = icmp eq i32 %43, 0 - br i1 %.not.i24, label %lean_dec.exit16, label %48 +41: ; preds = %36 + %.not.i24 = icmp eq i32 %37, 0 + br i1 %.not.i24, label %lean_dec.exit16, label %42 -48: ; preds = %47 +42: ; preds = %41 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %48, %47, %45, %lean_dec.exit17 - %49 = ptrtoint ptr %0 to i64 - %50 = and i64 %49, 1 - %.not32 = icmp eq i64 %50, 0 - br i1 %.not32, label %51, label %lean_dec.exit +lean_dec.exit16: ; preds = %42, %41, %39, %lean_dec.exit17 + %43 = ptrtoint ptr %0 to i64 + %44 = and i64 %43, 1 + %.not32 = icmp eq i64 %44, 0 + br i1 %.not32, label %45, label %lean_dec.exit -51: ; preds = %lean_dec.exit16 - %52 = load i32, ptr %0, align 4, !tbaa !8 - %53 = icmp sgt i32 %52, 1 - br i1 %53, label %54, label %56, !prof !11 +45: ; preds = %lean_dec.exit16 + %46 = load i32, ptr %0, align 4, !tbaa !8 + %47 = icmp sgt i32 %46, 1 + br i1 %47, label %48, label %50, !prof !11 -54: ; preds = %51 - %55 = add nsw i32 %52, -1 - store i32 %55, ptr %0, align 4, !tbaa !8 +48: ; preds = %45 + %49 = add nsw i32 %46, -1 + store i32 %49, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -56: ; preds = %51 - %.not.i26 = icmp eq i32 %52, 0 - br i1 %.not.i26, label %lean_dec.exit, label %57 +50: ; preds = %45 + %.not.i26 = icmp eq i32 %46, 0 + br i1 %.not.i26, label %lean_dec.exit, label %51 -57: ; preds = %56 +51: ; preds = %50 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %57, %56, %54, %lean_dec.exit16 - ret ptr %30 +lean_dec.exit: ; preds = %51, %50, %48, %lean_dec.exit16 + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/WorkspaceConfig.ll b/bench/lean4/optimized/WorkspaceConfig.ll index 6a1ed338d3c..0cb62691ef6 100644 --- a/bench/lean4/optimized/WorkspaceConfig.ll +++ b/bench/lean4/optimized/WorkspaceConfig.ll @@ -581,149 +581,137 @@ declare ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr define ptr @l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1___boxed(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 { %5 = getelementptr i8, ptr %1, i64 8 %.val = load i64, ptr %5, align 8, !tbaa !11 - %6 = ptrtoint ptr %1 to i64 - %7 = and i64 %6, 1 - %.not = icmp eq i64 %7, 0 - br i1 %.not, label %8, label %lean_dec.exit10 + %6 = load i32, ptr %1, align 8, !tbaa !4 + %7 = icmp sgt i32 %6, 1 + br i1 %7, label %8, label %10, !prof !13 8: ; preds = %4 - %9 = load i32, ptr %1, align 4, !tbaa !4 - %10 = icmp sgt i32 %9, 1 - br i1 %10, label %11, label %13, !prof !13 - -11: ; preds = %8 - %12 = add nsw i32 %9, -1 - store i32 %12, ptr %1, align 4, !tbaa !4 + %9 = add nsw i32 %6, -1 + store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit10 -13: ; preds = %8 - %.not.i = icmp eq i32 %9, 0 - br i1 %.not.i, label %lean_dec.exit10, label %14 +10: ; preds = %4 + %.not.i = icmp eq i32 %6, 0 + br i1 %.not.i, label %lean_dec.exit10, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %14, %13, %11, %4 - %15 = getelementptr i8, ptr %2, i64 8 - %.val15 = load i64, ptr %15, align 8, !tbaa !11 - %16 = ptrtoint ptr %2 to i64 - %17 = and i64 %16, 1 - %.not17 = icmp eq i64 %17, 0 - br i1 %.not17, label %18, label %lean_dec.exit9 - -18: ; preds = %lean_dec.exit10 - %19 = load i32, ptr %2, align 4, !tbaa !4 - %20 = icmp sgt i32 %19, 1 - br i1 %20, label %21, label %23, !prof !13 - -21: ; preds = %18 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %2, align 4, !tbaa !4 +lean_dec.exit10: ; preds = %11, %10, %8 + %12 = getelementptr i8, ptr %2, i64 8 + %.val15 = load i64, ptr %12, align 8, !tbaa !11 + %13 = load i32, ptr %2, align 8, !tbaa !4 + %14 = icmp sgt i32 %13, 1 + br i1 %14, label %15, label %17, !prof !13 + +15: ; preds = %lean_dec.exit10 + %16 = add nsw i32 %13, -1 + store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit9 -23: ; preds = %18 - %.not.i11 = icmp eq i32 %19, 0 - br i1 %.not.i11, label %lean_dec.exit9, label %24 +17: ; preds = %lean_dec.exit10 + %.not.i11 = icmp eq i32 %13, 0 + br i1 %.not.i11, label %lean_dec.exit9, label %18 -24: ; preds = %23 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #5 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %24, %23, %21, %lean_dec.exit10 +lean_dec.exit9: ; preds = %18, %17, %15 %.not28.i = icmp eq i64 %.val, %.val15 br i1 %.not28.i, label %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit9 - %25 = getelementptr inbounds nuw i8, ptr %0, i64 24 - br label %26 + %19 = getelementptr inbounds nuw i8, ptr %0, i64 24 + br label %20 + +20: ; preds = %40, %.lr.ph.i + %.01730.i = phi i64 [ %.val, %.lr.ph.i ], [ %42, %40 ] + %.01929.i = phi ptr [ %3, %.lr.ph.i ], [ %41, %40 ] + %21 = getelementptr inbounds nuw ptr, ptr %19, i64 %.01730.i + %22 = load ptr, ptr %21, align 8, !tbaa !9 + %23 = ptrtoint ptr %22 to i64 + %24 = and i64 %23, 1 + %.not.i.i = icmp eq i64 %24, 0 + br i1 %.not.i.i, label %25, label %lean_array_uget.exit.i + +25: ; preds = %20 + %.val.i.i.i = load i32, ptr %22, align 4, !tbaa !4 + %26 = icmp sgt i32 %.val.i.i.i, 0 + br i1 %26, label %27, label %29, !prof !13 -26: ; preds = %46, %.lr.ph.i - %.01730.i = phi i64 [ %.val, %.lr.ph.i ], [ %48, %46 ] - %.01929.i = phi ptr [ %3, %.lr.ph.i ], [ %47, %46 ] - %27 = getelementptr inbounds nuw ptr, ptr %25, i64 %.01730.i - %28 = load ptr, ptr %27, align 8, !tbaa !9 - %29 = ptrtoint ptr %28 to i64 - %30 = and i64 %29, 1 - %.not.i.i = icmp eq i64 %30, 0 - br i1 %.not.i.i, label %31, label %lean_array_uget.exit.i - -31: ; preds = %26 - %.val.i.i.i = load i32, ptr %28, align 4, !tbaa !4 - %32 = icmp sgt i32 %.val.i.i.i, 0 - br i1 %32, label %33, label %35, !prof !13 - -33: ; preds = %31 - %34 = add nuw i32 %.val.i.i.i, 1 - store i32 %34, ptr %28, align 4, !tbaa !4 +27: ; preds = %25 + %28 = add nuw i32 %.val.i.i.i, 1 + store i32 %28, ptr %22, align 4, !tbaa !4 br label %lean_array_uget.exit.i -35: ; preds = %31 +29: ; preds = %25 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %36 + br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %30 -36: ; preds = %35 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %28) #5 +30: ; preds = %29 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %22) #5 br label %lean_array_uget.exit.i -lean_array_uget.exit.i: ; preds = %36, %35, %33, %26 - %37 = getelementptr i8, ptr %28, i64 8 - %.val.i = load ptr, ptr %37, align 8, !tbaa !9 - %38 = ptrtoint ptr %.val.i to i64 - %39 = and i64 %38, 1 - %.not27.i = icmp eq i64 %39, 0 - br i1 %.not27.i, label %40, label %46 +lean_array_uget.exit.i: ; preds = %30, %29, %27, %20 + %31 = getelementptr i8, ptr %22, i64 8 + %.val.i = load ptr, ptr %31, align 8, !tbaa !9 + %32 = ptrtoint ptr %.val.i to i64 + %33 = and i64 %32, 1 + %.not27.i = icmp eq i64 %33, 0 + br i1 %.not27.i, label %34, label %40 -40: ; preds = %lean_array_uget.exit.i +34: ; preds = %lean_array_uget.exit.i %.val.i.i = load i32, ptr %.val.i, align 4, !tbaa !4 - %41 = icmp sgt i32 %.val.i.i, 0 - br i1 %41, label %42, label %44, !prof !13 + %35 = icmp sgt i32 %.val.i.i, 0 + br i1 %35, label %36, label %38, !prof !13 -42: ; preds = %40 - %43 = add nuw i32 %.val.i.i, 1 - store i32 %43, ptr %.val.i, align 4, !tbaa !4 - br label %46 +36: ; preds = %34 + %37 = add nuw i32 %.val.i.i, 1 + store i32 %37, ptr %.val.i, align 4, !tbaa !4 + br label %40 -44: ; preds = %40 +38: ; preds = %34 %.not.i21.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i21.i, label %46, label %45 + br i1 %.not.i21.i, label %40, label %39 -45: ; preds = %44 +39: ; preds = %38 tail call void @lean_inc_ref_cold(ptr noundef nonnull %.val.i) #5 - br label %46 - -46: ; preds = %45, %44, %42, %lean_array_uget.exit.i - %47 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %.val.i, ptr noundef nonnull %28) #5 - %48 = add i64 %.01730.i, 1 - %.not.i16 = icmp eq i64 %48, %.val15 - br i1 %.not.i16, label %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit, label %26 - -l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit: ; preds = %46, %lean_dec.exit9 - %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %47, %46 ] - %49 = ptrtoint ptr %0 to i64 - %50 = and i64 %49, 1 - %.not18 = icmp eq i64 %50, 0 - br i1 %.not18, label %51, label %lean_dec.exit - -51: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit - %52 = load i32, ptr %0, align 4, !tbaa !4 - %53 = icmp sgt i32 %52, 1 - br i1 %53, label %54, label %56, !prof !13 - -54: ; preds = %51 - %55 = add nsw i32 %52, -1 - store i32 %55, ptr %0, align 4, !tbaa !4 + br label %40 + +40: ; preds = %39, %38, %36, %lean_array_uget.exit.i + %41 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %.val.i, ptr noundef nonnull %22) #5 + %42 = add i64 %.01730.i, 1 + %.not.i16 = icmp eq i64 %42, %.val15 + br i1 %.not.i16, label %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit, label %20 + +l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit: ; preds = %40, %lean_dec.exit9 + %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %41, %40 ] + %43 = ptrtoint ptr %0 to i64 + %44 = and i64 %43, 1 + %.not18 = icmp eq i64 %44, 0 + br i1 %.not18, label %45, label %lean_dec.exit + +45: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit + %46 = load i32, ptr %0, align 4, !tbaa !4 + %47 = icmp sgt i32 %46, 1 + br i1 %47, label %48, label %50, !prof !13 + +48: ; preds = %45 + %49 = add nsw i32 %46, -1 + store i32 %49, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -56: ; preds = %51 - %.not.i13 = icmp eq i32 %52, 0 - br i1 %.not.i13, label %lean_dec.exit, label %57 +50: ; preds = %45 + %.not.i13 = icmp eq i32 %46, 0 + br i1 %.not.i13, label %lean_dec.exit, label %51 -57: ; preds = %56 +51: ; preds = %50 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %57, %56, %54, %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit +lean_dec.exit: ; preds = %51, %50, %48, %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit ret ptr %.019.lcssa.i } diff --git a/bench/lean4/optimized/expr.ll b/bench/lean4/optimized/expr.ll index 7643fc495b9..60e3218c4bb 100644 --- a/bench/lean4/optimized/expr.ll +++ b/bench/lean4/optimized/expr.ll @@ -3283,78 +3283,72 @@ define hidden void @_ZN4lean14update_bindingERKNS_4exprES2_S2_(ptr dead_on_unwin %12 = load ptr, ptr %11, align 8, !tbaa !10 %13 = load ptr, ptr %3, align 8, !tbaa !10 %14 = icmp eq ptr %12, %13 - br i1 %14, label %32, label %15 + br i1 %14, label %29, label %15 15: ; preds = %10, %4 %16 = getelementptr i8, ptr %5, i64 4 %.val.i.i.i = load i32, ptr %16, align 4 %17 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %18 = ptrtoint ptr %5 to i64 - %19 = and i64 %18, 1 - %.not.i.i.i = icmp eq i64 %19, 0 - br i1 %.not.i.i.i, label %20, label %_ZN4lean12binding_infoERKNS_4exprE.exit - -20: ; preds = %15 %.val.i.i.i.i = load i32, ptr %5, align 4, !tbaa !21 - %21 = icmp sgt i32 %.val.i.i.i.i, 0 - br i1 %21, label %22, label %24, !prof !24 + %18 = icmp sgt i32 %.val.i.i.i.i, 0 + br i1 %18, label %19, label %21, !prof !24 -22: ; preds = %20 - %23 = add nuw nsw i32 %.val.i.i.i.i, 1 - store i32 %23, ptr %5, align 4, !tbaa !21 +19: ; preds = %15 + %20 = add nuw nsw i32 %.val.i.i.i.i, 1 + store i32 %20, ptr %5, align 4, !tbaa !21 br label %_ZN4lean12binding_infoERKNS_4exprE.exit -24: ; preds = %20 +21: ; preds = %15 %.not.i.i.i.i = icmp eq i32 %.val.i.i.i.i, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean12binding_infoERKNS_4exprE.exit, label %25 + br i1 %.not.i.i.i.i, label %_ZN4lean12binding_infoERKNS_4exprE.exit, label %22 -25: ; preds = %24 +22: ; preds = %21 tail call void @lean_inc_ref_cold(ptr noundef nonnull %5) %.pre.i.i = load ptr, ptr %1, align 8, !tbaa !10 br label %_ZN4lean12binding_infoERKNS_4exprE.exit -_ZN4lean12binding_infoERKNS_4exprE.exit: ; preds = %15, %22, %24, %25 - %26 = phi ptr [ %5, %15 ], [ %5, %22 ], [ %5, %24 ], [ %.pre.i.i, %25 ] - %27 = tail call zeroext i8 @lean_expr_binder_info(ptr noundef %26) - %28 = zext i8 %27 to i32 +_ZN4lean12binding_infoERKNS_4exprE.exit: ; preds = %19, %21, %22 + %23 = phi ptr [ %5, %19 ], [ %5, %21 ], [ %.pre.i.i, %22 ] + %24 = tail call zeroext i8 @lean_expr_binder_info(ptr noundef %23) + %25 = zext i8 %24 to i32 %.mask = and i32 %.val.i.i.i, -16777216 - %29 = icmp eq i32 %.mask, 117440512 - br i1 %29, label %30, label %31 + %26 = icmp eq i32 %.mask, 117440512 + br i1 %26, label %27, label %28 -30: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit - tail call void @_ZN4lean5mk_piERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %28) +27: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit + tail call void @_ZN4lean5mk_piERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %25) br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -31: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit - tail call void @_ZN4lean9mk_lambdaERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %28) +28: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit + tail call void @_ZN4lean9mk_lambdaERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %25) br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -32: ; preds = %10 +29: ; preds = %10 store ptr %5, ptr %0, align 8, !tbaa !10 - %33 = ptrtoint ptr %5 to i64 - %34 = and i64 %33, 1 - %.not.i.i.i10 = icmp eq i64 %34, 0 - br i1 %.not.i.i.i10, label %35, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit + %30 = ptrtoint ptr %5 to i64 + %31 = and i64 %30, 1 + %.not.i.i.i10 = icmp eq i64 %31, 0 + br i1 %.not.i.i.i10, label %32, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -35: ; preds = %32 +32: ; preds = %29 %.val.i.i.i.i11 = load i32, ptr %5, align 4, !tbaa !21 - %36 = icmp sgt i32 %.val.i.i.i.i11, 0 - br i1 %36, label %37, label %39, !prof !24 + %33 = icmp sgt i32 %.val.i.i.i.i11, 0 + br i1 %33, label %34, label %36, !prof !24 -37: ; preds = %35 - %38 = add nuw nsw i32 %.val.i.i.i.i11, 1 - store i32 %38, ptr %5, align 4, !tbaa !21 +34: ; preds = %32 + %35 = add nuw nsw i32 %.val.i.i.i.i11, 1 + store i32 %35, ptr %5, align 4, !tbaa !21 br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -39: ; preds = %35 +36: ; preds = %32 %.not.i.i.i.i12 = icmp eq i32 %.val.i.i.i.i11, 0 - br i1 %.not.i.i.i.i12, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit, label %40 + br i1 %.not.i.i.i.i12, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit, label %37 -40: ; preds = %39 +37: ; preds = %36 tail call void @lean_inc_ref_cold(ptr noundef nonnull %5) br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit: ; preds = %40, %39, %37, %32, %31, %30 +_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit: ; preds = %37, %36, %34, %29, %28, %27 ret void } diff --git a/bench/lean4/optimized/inductive.ll b/bench/lean4/optimized/inductive.ll index 3a4bcecf7a1..54eeacbb58b 100644 --- a/bench/lean4/optimized/inductive.ll +++ b/bench/lean4/optimized/inductive.ll @@ -780,38 +780,32 @@ define hidden noundef zeroext i1 @_ZN4lean12is_inductiveERKNS_11environmentERKNS %.val.i.i.i = load i32, ptr %9, align 4 %.mask.i = and i32 %.val.i.i.i, -16777216 %10 = icmp eq i32 %.mask.i, 83886080 - %11 = ptrtoint ptr %8 to i64 - %12 = and i64 %11, 1 - %.not.i.i.i = icmp eq i64 %12, 0 - br i1 %.not.i.i.i, label %13, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit + %11 = load i32, ptr %8, align 4, !tbaa !8 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !11 13: ; preds = %6 - %14 = load i32, ptr %8, align 4, !tbaa !8 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !11 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %8, align 4, !tbaa !8 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %8, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -18: ; preds = %13 - %.not.i.i.i.i = icmp eq i32 %14, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %19 +15: ; preds = %6 + %.not.i.i.i.i = icmp eq i32 %11, 0 + br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %16 -19: ; preds = %18 +16: ; preds = %15 invoke void @lean_dec_ref_cold(ptr noundef nonnull %8) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %20 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %17 -20: ; preds = %19 - %21 = landingpad { ptr, i32 } +17: ; preds = %16 + %18 = landingpad { ptr, i32 } catch ptr null - %22 = extractvalue { ptr, i32 } %21, 0 - call void @__clang_call_terminate(ptr %22) #15 + %19 = extractvalue { ptr, i32 } %18, 0 + call void @__clang_call_terminate(ptr %19) #15 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %6, %16, %18, %19 - %spec.select = phi i1 [ %10, %6 ], [ %10, %16 ], [ %10, %18 ], [ %10, %19 ], [ false, %2 ] +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %15, %16 + %spec.select = phi i1 [ %10, %13 ], [ %10, %15 ], [ %10, %16 ], [ false, %2 ] call void @llvm.lifetime.end.p0(ptr nonnull %3) ret i1 %spec.select } @@ -877,38 +871,32 @@ define hidden noundef zeroext i1 @_ZN4lean14is_constructorERKNS_11environmentERK %.val.i.i.i = load i32, ptr %9, align 4 %.mask.i = and i32 %.val.i.i.i, -16777216 %10 = icmp eq i32 %.mask.i, 100663296 - %11 = ptrtoint ptr %8 to i64 - %12 = and i64 %11, 1 - %.not.i.i.i = icmp eq i64 %12, 0 - br i1 %.not.i.i.i, label %13, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit + %11 = load i32, ptr %8, align 4, !tbaa !8 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !11 13: ; preds = %6 - %14 = load i32, ptr %8, align 4, !tbaa !8 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !11 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %8, align 4, !tbaa !8 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %8, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -18: ; preds = %13 - %.not.i.i.i.i = icmp eq i32 %14, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %19 +15: ; preds = %6 + %.not.i.i.i.i = icmp eq i32 %11, 0 + br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %16 -19: ; preds = %18 +16: ; preds = %15 invoke void @lean_dec_ref_cold(ptr noundef nonnull %8) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %20 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %17 -20: ; preds = %19 - %21 = landingpad { ptr, i32 } +17: ; preds = %16 + %18 = landingpad { ptr, i32 } catch ptr null - %22 = extractvalue { ptr, i32 } %21, 0 - call void @__clang_call_terminate(ptr %22) #15 + %19 = extractvalue { ptr, i32 } %18, 0 + call void @__clang_call_terminate(ptr %19) #15 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %6, %16, %18, %19 - %spec.select = phi i1 [ %10, %6 ], [ %10, %16 ], [ %10, %18 ], [ %10, %19 ], [ false, %2 ] +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %15, %16 + %spec.select = phi i1 [ %10, %13 ], [ %10, %15 ], [ %10, %16 ], [ false, %2 ] call void @llvm.lifetime.end.p0(ptr nonnull %3) ret i1 %spec.select } @@ -929,38 +917,32 @@ define hidden noundef zeroext i1 @_ZN4lean11is_recursorERKNS_11environmentERKNS_ %.val.i.i.i = load i32, ptr %9, align 4 %.mask.i = and i32 %.val.i.i.i, -16777216 %10 = icmp eq i32 %.mask.i, 117440512 - %11 = ptrtoint ptr %8 to i64 - %12 = and i64 %11, 1 - %.not.i.i.i = icmp eq i64 %12, 0 - br i1 %.not.i.i.i, label %13, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit + %11 = load i32, ptr %8, align 4, !tbaa !8 + %12 = icmp sgt i32 %11, 1 + br i1 %12, label %13, label %15, !prof !11 13: ; preds = %6 - %14 = load i32, ptr %8, align 4, !tbaa !8 - %15 = icmp sgt i32 %14, 1 - br i1 %15, label %16, label %18, !prof !11 - -16: ; preds = %13 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %8, align 4, !tbaa !8 + %14 = add nsw i32 %11, -1 + store i32 %14, ptr %8, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -18: ; preds = %13 - %.not.i.i.i.i = icmp eq i32 %14, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %19 +15: ; preds = %6 + %.not.i.i.i.i = icmp eq i32 %11, 0 + br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %16 -19: ; preds = %18 +16: ; preds = %15 invoke void @lean_dec_ref_cold(ptr noundef nonnull %8) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %20 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %17 -20: ; preds = %19 - %21 = landingpad { ptr, i32 } +17: ; preds = %16 + %18 = landingpad { ptr, i32 } catch ptr null - %22 = extractvalue { ptr, i32 } %21, 0 - call void @__clang_call_terminate(ptr %22) #15 + %19 = extractvalue { ptr, i32 } %18, 0 + call void @__clang_call_terminate(ptr %19) #15 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %6, %16, %18, %19 - %spec.select = phi i1 [ %10, %6 ], [ %10, %16 ], [ %10, %18 ], [ %10, %19 ], [ false, %2 ] +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %15, %16 + %spec.select = phi i1 [ %10, %13 ], [ %10, %15 ], [ %10, %16 ], [ false, %2 ] call void @llvm.lifetime.end.p0(ptr nonnull %3) ret i1 %spec.select } @@ -974,7 +956,7 @@ define hidden void @_ZN4lean18is_constructor_appERKNS_11environmentERKNS_4exprE( %.val.i.i.i.i.i = load i32, ptr %7, align 4 %.mask.i.i = and i32 %.val.i.i.i.i.i, -16777216 %8 = icmp eq i32 %.mask.i.i, 67108864 - br i1 %8, label %9, label %43 + br i1 %8, label %9, label %40 9: ; preds = %3 %10 = getelementptr inbounds nuw i8, ptr %6, i64 8 @@ -986,7 +968,7 @@ define hidden void @_ZN4lean18is_constructor_appERKNS_11environmentERKNS_4exprE( _ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread: ; preds = %9 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br label %43 + br label %40 13: ; preds = %9 %14 = getelementptr inbounds nuw i8, ptr %4, i64 8 @@ -995,76 +977,70 @@ _ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread: ; preds = % %.val.i.i.i.i = load i32, ptr %16, align 4 %.mask.i.i5 = and i32 %.val.i.i.i.i, -16777216 %17 = icmp eq i32 %.mask.i.i5, 100663296 - %18 = ptrtoint ptr %15 to i64 - %19 = and i64 %18, 1 - %.not.i.i.i.i = icmp eq i64 %19, 0 - br i1 %.not.i.i.i.i, label %20, label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit + %18 = load i32, ptr %15, align 4, !tbaa !8 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 20: ; preds = %13 - %21 = load i32, ptr %15, align 4, !tbaa !8 - %22 = icmp sgt i32 %21, 1 - br i1 %22, label %23, label %25, !prof !11 - -23: ; preds = %20 - %24 = add nsw i32 %21, -1 - store i32 %24, ptr %15, align 4, !tbaa !8 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %15, align 4, !tbaa !8 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br i1 %17, label %30, label %43 + br i1 %17, label %27, label %40 -25: ; preds = %20 - %.not.i.i.i.i.i = icmp eq i32 %21, 0 - br i1 %.not.i.i.i.i.i, label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, label %26 +22: ; preds = %13 + %.not.i.i.i.i.i = icmp eq i32 %18, 0 + br i1 %.not.i.i.i.i.i, label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, label %23 -26: ; preds = %25 +23: ; preds = %22 invoke void @lean_dec_ref_cold(ptr noundef nonnull %15) - to label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit unwind label %27 + to label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit unwind label %24 -27: ; preds = %26 - %28 = landingpad { ptr, i32 } +24: ; preds = %23 + %25 = landingpad { ptr, i32 } catch ptr null - %29 = extractvalue { ptr, i32 } %28, 0 - call void @__clang_call_terminate(ptr %29) #15 + %26 = extractvalue { ptr, i32 } %25, 0 + call void @__clang_call_terminate(ptr %26) #15 unreachable -_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit: ; preds = %13, %25, %26 +_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit: ; preds = %22, %23 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br i1 %17, label %30, label %43 + br i1 %17, label %27, label %40 -30: ; preds = %23, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit - %31 = load ptr, ptr %5, align 8, !tbaa !3 - %32 = getelementptr inbounds nuw i8, ptr %31, i64 8 +27: ; preds = %20, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit + %28 = load ptr, ptr %5, align 8, !tbaa !3 + %29 = getelementptr inbounds nuw i8, ptr %28, i64 8 store i8 1, ptr %0, align 8, !tbaa !20 - %33 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %34 = load ptr, ptr %32, align 8, !tbaa !3 - store ptr %34, ptr %33, align 8, !tbaa !3 - %35 = ptrtoint ptr %34 to i64 - %36 = and i64 %35, 1 - %.not.i.i.i.i6 = icmp eq i64 %36, 0 - br i1 %.not.i.i.i.i6, label %37, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit + %30 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %31 = load ptr, ptr %29, align 8, !tbaa !3 + store ptr %31, ptr %30, align 8, !tbaa !3 + %32 = ptrtoint ptr %31 to i64 + %33 = and i64 %32, 1 + %.not.i.i.i.i6 = icmp eq i64 %33, 0 + br i1 %.not.i.i.i.i6, label %34, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -37: ; preds = %30 - %.val.i.i.i.i.i7 = load i32, ptr %34, align 4, !tbaa !8 - %38 = icmp sgt i32 %.val.i.i.i.i.i7, 0 - br i1 %38, label %39, label %41, !prof !11 +34: ; preds = %27 + %.val.i.i.i.i.i7 = load i32, ptr %31, align 4, !tbaa !8 + %35 = icmp sgt i32 %.val.i.i.i.i.i7, 0 + br i1 %35, label %36, label %38, !prof !11 -39: ; preds = %37 - %40 = add nuw nsw i32 %.val.i.i.i.i.i7, 1 - store i32 %40, ptr %34, align 4, !tbaa !8 +36: ; preds = %34 + %37 = add nuw nsw i32 %.val.i.i.i.i.i7, 1 + store i32 %37, ptr %31, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -41: ; preds = %37 +38: ; preds = %34 %.not.i.i.i.i.i8 = icmp eq i32 %.val.i.i.i.i.i7, 0 - br i1 %.not.i.i.i.i.i8, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit, label %42 + br i1 %.not.i.i.i.i.i8, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit, label %39 -42: ; preds = %41 - call void @lean_inc_ref_cold(ptr noundef nonnull %34) +39: ; preds = %38 + call void @lean_inc_ref_cold(ptr noundef nonnull %31) br label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -43: ; preds = %23, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, %3 +40: ; preds = %20, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, %3 store i8 0, ptr %0, align 8, !tbaa !20 br label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit: ; preds = %42, %41, %39, %30, %43 +_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit: ; preds = %39, %38, %36, %27, %40 ret void } diff --git a/bench/lean4/optimized/lcnf.ll b/bench/lean4/optimized/lcnf.ll index 574a767165d..60b5fbaac17 100644 --- a/bench/lean4/optimized/lcnf.ll +++ b/bench/lean4/optimized/lcnf.ll @@ -15106,40 +15106,34 @@ _ZNK4lean16elab_environment4findERKNS_4nameE.exit: ; preds = %5, %12, %14, %15 %.val.i.i.i = load i32, ptr %26, align 4 %.mask.i = and i32 %.val.i.i.i, -16777216 %27 = icmp eq i32 %.mask.i, 67108864 - %28 = ptrtoint ptr %25 to i64 - %29 = and i64 %28, 1 - %.not.i.i.i3 = icmp eq i64 %29, 0 - br i1 %.not.i.i.i3, label %30, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit + %28 = load i32, ptr %25, align 4, !tbaa !8 + %29 = icmp sgt i32 %28, 1 + br i1 %29, label %30, label %32, !prof !11 30: ; preds = %23 - %31 = load i32, ptr %25, align 4, !tbaa !8 - %32 = icmp sgt i32 %31, 1 - br i1 %32, label %33, label %35, !prof !11 - -33: ; preds = %30 - %34 = add nsw i32 %31, -1 - store i32 %34, ptr %25, align 4, !tbaa !8 + %31 = add nsw i32 %28, -1 + store i32 %31, ptr %25, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -35: ; preds = %30 - %.not.i.i.i.i4 = icmp eq i32 %31, 0 - br i1 %.not.i.i.i.i4, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %36 +32: ; preds = %23 + %.not.i.i.i.i4 = icmp eq i32 %28, 0 + br i1 %.not.i.i.i.i4, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %33 -36: ; preds = %35 +33: ; preds = %32 invoke void @lean_dec_ref_cold(ptr noundef nonnull %25) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %37 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %34 -37: ; preds = %36 - %38 = landingpad { ptr, i32 } +34: ; preds = %33 + %35 = landingpad { ptr, i32 } catch ptr null - %39 = extractvalue { ptr, i32 } %38, 0 - call void @__clang_call_terminate(ptr %39) #16 + %36 = extractvalue { ptr, i32 } %35, 0 + call void @__clang_call_terminate(ptr %36) #16 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %_ZNK4lean16elab_environment4findERKNS_4nameE.exit, %23, %33, %35, %36 - %40 = phi i1 [ %27, %23 ], [ %27, %33 ], [ %27, %35 ], [ %27, %36 ], [ false, %_ZNK4lean16elab_environment4findERKNS_4nameE.exit ] +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %_ZNK4lean16elab_environment4findERKNS_4nameE.exit, %30, %32, %33 + %37 = phi i1 [ %27, %30 ], [ %27, %32 ], [ %27, %33 ], [ false, %_ZNK4lean16elab_environment4findERKNS_4nameE.exit ] call void @llvm.lifetime.end.p0(ptr nonnull %4) - ret i1 %40 + ret i1 %37 } ; Function Attrs: mustprogress uwtable @@ -16854,42 +16848,36 @@ define linkonce_odr hidden noundef i32 @_ZN4lean10to_lcnf_fn23get_constructor_nf %24 = load ptr, ptr %23, align 8, !tbaa !3 %25 = getelementptr inbounds nuw i8, ptr %24, i64 40 %26 = load ptr, ptr %25, align 8, !tbaa !3 - %27 = ptrtoint ptr %22 to i64 - %28 = and i64 %27, 1 - %.not.i.i = icmp eq i64 %28, 0 - br i1 %.not.i.i, label %29, label %_ZN4lean10object_refD2Ev.exit + %27 = load i32, ptr %22, align 8, !tbaa !8 + %28 = icmp sgt i32 %27, 1 + br i1 %28, label %29, label %31, !prof !11 29: ; preds = %21 - %30 = load i32, ptr %22, align 4, !tbaa !8 - %31 = icmp sgt i32 %30, 1 - br i1 %31, label %32, label %34, !prof !11 - -32: ; preds = %29 - %33 = add nsw i32 %30, -1 - store i32 %33, ptr %22, align 4, !tbaa !8 + %30 = add nsw i32 %27, -1 + store i32 %30, ptr %22, align 4, !tbaa !8 br label %_ZN4lean10object_refD2Ev.exit -34: ; preds = %29 - %.not.i.i.i3 = icmp eq i32 %30, 0 - br i1 %.not.i.i.i3, label %_ZN4lean10object_refD2Ev.exit, label %35 +31: ; preds = %21 + %.not.i.i.i3 = icmp eq i32 %27, 0 + br i1 %.not.i.i.i3, label %_ZN4lean10object_refD2Ev.exit, label %32 -35: ; preds = %34 +32: ; preds = %31 invoke void @lean_dec_ref_cold(ptr noundef nonnull %22) - to label %_ZN4lean10object_refD2Ev.exit unwind label %36 + to label %_ZN4lean10object_refD2Ev.exit unwind label %33 -36: ; preds = %35 - %37 = landingpad { ptr, i32 } +33: ; preds = %32 + %34 = landingpad { ptr, i32 } catch ptr null - %38 = extractvalue { ptr, i32 } %37, 0 - call void @__clang_call_terminate(ptr %38) #16 + %35 = extractvalue { ptr, i32 } %34, 0 + call void @__clang_call_terminate(ptr %35) #16 unreachable -_ZN4lean10object_refD2Ev.exit: ; preds = %21, %32, %34, %35 - %39 = ptrtoint ptr %26 to i64 - %40 = lshr i64 %39, 1 - %41 = trunc i64 %40 to i32 +_ZN4lean10object_refD2Ev.exit: ; preds = %29, %31, %32 + %36 = ptrtoint ptr %26 to i64 + %37 = lshr i64 %36, 1 + %38 = trunc i64 %37 to i32 call void @llvm.lifetime.end.p0(ptr nonnull %4) - ret i32 %41 + ret i32 %38 } declare void @_ZN4lean15instantiate_revERKNS_4exprEjPS1_(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef) local_unnamed_addr #1 diff --git a/bench/lean4/optimized/local_ctx.ll b/bench/lean4/optimized/local_ctx.ll index d8be5956596..cf75a1fe581 100644 --- a/bench/lean4/optimized/local_ctx.ll +++ b/bench/lean4/optimized/local_ctx.ll @@ -390,40 +390,34 @@ define hidden void @_ZN4lean10local_declC2ERKS0_RKNS_4exprE(ptr noundef nonnull %4 = load ptr, ptr %1, align 8, !tbaa !8 %5 = getelementptr inbounds nuw i8, ptr %4, i64 8 %6 = load ptr, ptr %5, align 8, !tbaa !8 - %7 = ptrtoint ptr %4 to i64 - %8 = and i64 %7, 1 - %.not.i.i.i = icmp eq i64 %8, 0 - br i1 %.not.i.i.i, label %9, label %_ZNK4lean10local_decl8get_infoEv.exit - -9: ; preds = %3 - %.val.i.i.i.i = load i32, ptr %4, align 4, !tbaa !10 - %10 = icmp sgt i32 %.val.i.i.i.i, 0 - br i1 %10, label %11, label %13, !prof !13 + %.val.i.i.i.i = load i32, ptr %4, align 8, !tbaa !10 + %7 = icmp sgt i32 %.val.i.i.i.i, 0 + br i1 %7, label %8, label %10, !prof !13 -11: ; preds = %9 - %12 = add nuw nsw i32 %.val.i.i.i.i, 1 - store i32 %12, ptr %4, align 4, !tbaa !10 +8: ; preds = %3 + %9 = add nuw nsw i32 %.val.i.i.i.i, 1 + store i32 %9, ptr %4, align 4, !tbaa !10 br label %_ZNK4lean10local_decl8get_infoEv.exit -13: ; preds = %9 +10: ; preds = %3 %.not.i.i.i.i = icmp eq i32 %.val.i.i.i.i, 0 - br i1 %.not.i.i.i.i, label %_ZNK4lean10local_decl8get_infoEv.exit, label %14 + br i1 %.not.i.i.i.i, label %_ZNK4lean10local_decl8get_infoEv.exit, label %11 -14: ; preds = %13 +11: ; preds = %10 tail call void @lean_inc_ref_cold(ptr noundef nonnull %4) %.pre.i.i = load ptr, ptr %1, align 8, !tbaa !8 br label %_ZNK4lean10local_decl8get_infoEv.exit -_ZNK4lean10local_decl8get_infoEv.exit: ; preds = %3, %11, %13, %14 - %15 = phi ptr [ %4, %3 ], [ %4, %11 ], [ %4, %13 ], [ %.pre.i.i, %14 ] - %16 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %17 = getelementptr inbounds nuw i8, ptr %4, i64 16 - %18 = ptrtoint ptr %6 to i64 - %19 = lshr i64 %18, 1 - %20 = trunc i64 %19 to i32 - %21 = tail call zeroext i8 @lean_local_decl_binder_info(ptr noundef %15) - %22 = zext i8 %21 to i32 - tail call void @_ZN4lean10local_declC2EjRKNS_4nameES3_RKNS_4exprENS_11binder_infoE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %20, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %22) +_ZNK4lean10local_decl8get_infoEv.exit: ; preds = %8, %10, %11 + %12 = phi ptr [ %4, %8 ], [ %4, %10 ], [ %.pre.i.i, %11 ] + %13 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %14 = getelementptr inbounds nuw i8, ptr %4, i64 16 + %15 = ptrtoint ptr %6 to i64 + %16 = lshr i64 %15, 1 + %17 = trunc i64 %16 to i32 + %18 = tail call zeroext i8 @lean_local_decl_binder_info(ptr noundef %12) + %19 = zext i8 %18 to i32 + tail call void @_ZN4lean10local_declC2EjRKNS_4nameES3_RKNS_4exprENS_11binder_infoE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %17, ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %19) ret void } diff --git a/bench/lean4/optimized/sharecommon.ll b/bench/lean4/optimized/sharecommon.ll index 2d8fe9a13d6..0c28058590e 100644 --- a/bench/lean4/optimized/sharecommon.ll +++ b/bench/lean4/optimized/sharecommon.ll @@ -2542,164 +2542,158 @@ _ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__ 72: ; preds = %34 %73 = tail call noundef ptr @_ZN4lean17sharecommon_state8map_findEP11lean_object(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull %1) %.not.not = icmp eq ptr %73, inttoptr (i64 1 to ptr) - br i1 %.not.not, label %114, label %74 + br i1 %.not.not, label %111, label %74 74: ; preds = %72 %75 = getelementptr inbounds nuw i8, ptr %73, i64 8 %76 = load ptr, ptr %75, align 8, !tbaa !3 - %77 = ptrtoint ptr %73 to i64 - %78 = and i64 %77, 1 - %.not = icmp eq i64 %78, 0 - br i1 %.not, label %79, label %_ZL8lean_decP11lean_object.exit + %77 = load i32, ptr %73, align 8, !tbaa !13 + %78 = icmp sgt i32 %77, 1 + br i1 %78, label %79, label %81, !prof !16 79: ; preds = %74 - %80 = load i32, ptr %73, align 4, !tbaa !13 - %81 = icmp sgt i32 %80, 1 - br i1 %81, label %82, label %84, !prof !16 - -82: ; preds = %79 - %83 = add nsw i32 %80, -1 - store i32 %83, ptr %73, align 4, !tbaa !13 + %80 = add nsw i32 %77, -1 + store i32 %80, ptr %73, align 4, !tbaa !13 br label %_ZL8lean_decP11lean_object.exit -84: ; preds = %79 - %.not.i.i = icmp eq i32 %80, 0 - br i1 %.not.i.i, label %_ZL8lean_decP11lean_object.exit, label %85 +81: ; preds = %74 + %.not.i.i = icmp eq i32 %77, 0 + br i1 %.not.i.i, label %_ZL8lean_decP11lean_object.exit, label %82 -85: ; preds = %84 +82: ; preds = %81 tail call void @lean_dec_ref_cold(ptr noundef nonnull %73) br label %_ZL8lean_decP11lean_object.exit -_ZL8lean_decP11lean_object.exit: ; preds = %82, %84, %85, %74 - %86 = getelementptr inbounds nuw i8, ptr %0, i64 48 - %87 = getelementptr inbounds nuw i8, ptr %0, i64 56 - %88 = load ptr, ptr %87, align 8, !tbaa !73 - %89 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %90 = load ptr, ptr %89, align 8, !tbaa !21 - %.not.i15 = icmp eq ptr %88, %90 - br i1 %.not.i15, label %94, label %91 - -91: ; preds = %_ZL8lean_decP11lean_object.exit - store ptr %76, ptr %88, align 8, !tbaa !3 - %92 = load ptr, ptr %87, align 8, !tbaa !73 - %93 = getelementptr inbounds nuw i8, ptr %92, i64 8 - store ptr %93, ptr %87, align 8, !tbaa !73 +_ZL8lean_decP11lean_object.exit: ; preds = %79, %81, %82 + %83 = getelementptr inbounds nuw i8, ptr %0, i64 48 + %84 = getelementptr inbounds nuw i8, ptr %0, i64 56 + %85 = load ptr, ptr %84, align 8, !tbaa !73 + %86 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %87 = load ptr, ptr %86, align 8, !tbaa !21 + %.not.i15 = icmp eq ptr %85, %87 + br i1 %.not.i15, label %91, label %88 + +88: ; preds = %_ZL8lean_decP11lean_object.exit + store ptr %76, ptr %85, align 8, !tbaa !3 + %89 = load ptr, ptr %84, align 8, !tbaa !73 + %90 = getelementptr inbounds nuw i8, ptr %89, i64 8 + store ptr %90, ptr %84, align 8, !tbaa !73 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -94: ; preds = %_ZL8lean_decP11lean_object.exit - %95 = load ptr, ptr %86, align 8, !tbaa !18 - %96 = ptrtoint ptr %88 to i64 - %97 = ptrtoint ptr %95 to i64 - %98 = sub i64 %96, %97 - %99 = icmp eq i64 %98, 9223372036854775800 - br i1 %99, label %100, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 +91: ; preds = %_ZL8lean_decP11lean_object.exit + %92 = load ptr, ptr %83, align 8, !tbaa !18 + %93 = ptrtoint ptr %85 to i64 + %94 = ptrtoint ptr %92 to i64 + %95 = sub i64 %93, %94 + %96 = icmp eq i64 %95, 9223372036854775800 + br i1 %96, label %97, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 -100: ; preds = %94 +97: ; preds = %91 tail call void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str) #23 unreachable -_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16: ; preds = %94 - %101 = ashr exact i64 %98, 3 - %.sroa.speculated.i.i.i17 = tail call i64 @llvm.umax.i64(i64 %101, i64 1) - %102 = add nsw i64 %.sroa.speculated.i.i.i17, %101 - %103 = icmp ult i64 %102, %101 - %104 = tail call i64 @llvm.umin.i64(i64 %102, i64 1152921504606846975) - %105 = select i1 %103, i64 1152921504606846975, i64 %104 - %.not.i.i.i18 = icmp ne i64 %105, 0 +_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16: ; preds = %91 + %98 = ashr exact i64 %95, 3 + %.sroa.speculated.i.i.i17 = tail call i64 @llvm.umax.i64(i64 %98, i64 1) + %99 = add nsw i64 %.sroa.speculated.i.i.i17, %98 + %100 = icmp ult i64 %99, %98 + %101 = tail call i64 @llvm.umin.i64(i64 %99, i64 1152921504606846975) + %102 = select i1 %100, i64 1152921504606846975, i64 %101 + %.not.i.i.i18 = icmp ne i64 %102, 0 tail call void @llvm.assume(i1 %.not.i.i.i18) - %106 = shl nuw nsw i64 %105, 3 - %107 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %106) #24 - %108 = getelementptr inbounds i8, ptr %107, i64 %98 - store ptr %76, ptr %108, align 8, !tbaa !3 - %109 = icmp sgt i64 %98, 0 - br i1 %109, label %110, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 - -110: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %107, ptr align 8 %95, i64 %98, i1 false) + %103 = shl nuw nsw i64 %102, 3 + %104 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %103) #24 + %105 = getelementptr inbounds i8, ptr %104, i64 %95 + store ptr %76, ptr %105, align 8, !tbaa !3 + %106 = icmp sgt i64 %95, 0 + br i1 %106, label %107, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 + +107: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %104, ptr align 8 %92, i64 %95, i1 false) br label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 -_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19: ; preds = %110, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 - %111 = getelementptr inbounds nuw i8, ptr %108, i64 8 - %.not.i17.i.i20 = icmp eq ptr %95, null - br i1 %.not.i17.i.i20, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, label %112 +_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19: ; preds = %107, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 + %108 = getelementptr inbounds nuw i8, ptr %105, i64 8 + %.not.i17.i.i20 = icmp eq ptr %92, null + br i1 %.not.i17.i.i20, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, label %109 -112: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 - tail call void @_ZdlPvm(ptr noundef nonnull %95, i64 noundef %98) #20 +109: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 + tail call void @_ZdlPvm(ptr noundef nonnull %92, i64 noundef %95) #20 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21 -_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21: ; preds = %112, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 - store ptr %107, ptr %86, align 8, !tbaa !18 - store ptr %111, ptr %87, align 8, !tbaa !73 - %113 = getelementptr inbounds nuw ptr, ptr %107, i64 %105 - store ptr %113, ptr %89, align 8, !tbaa !21 +_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21: ; preds = %109, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 + store ptr %104, ptr %83, align 8, !tbaa !18 + store ptr %108, ptr %84, align 8, !tbaa !73 + %110 = getelementptr inbounds nuw ptr, ptr %104, i64 %102 + store ptr %110, ptr %86, align 8, !tbaa !21 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -114: ; preds = %72 - %115 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %116 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %117 = load ptr, ptr %116, align 8, !tbaa !73 - %118 = getelementptr inbounds nuw i8, ptr %0, i64 88 - %119 = load ptr, ptr %118, align 8, !tbaa !21 - %.not.i23 = icmp eq ptr %117, %119 - br i1 %.not.i23, label %123, label %120 - -120: ; preds = %114 - store ptr %1, ptr %117, align 8, !tbaa !3 - %121 = load ptr, ptr %116, align 8, !tbaa !73 - %122 = getelementptr inbounds nuw i8, ptr %121, i64 8 - store ptr %122, ptr %116, align 8, !tbaa !73 +111: ; preds = %72 + %112 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %113 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %114 = load ptr, ptr %113, align 8, !tbaa !73 + %115 = getelementptr inbounds nuw i8, ptr %0, i64 88 + %116 = load ptr, ptr %115, align 8, !tbaa !21 + %.not.i23 = icmp eq ptr %114, %116 + br i1 %.not.i23, label %120, label %117 + +117: ; preds = %111 + store ptr %1, ptr %114, align 8, !tbaa !3 + %118 = load ptr, ptr %113, align 8, !tbaa !73 + %119 = getelementptr inbounds nuw i8, ptr %118, i64 8 + store ptr %119, ptr %113, align 8, !tbaa !73 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -123: ; preds = %114 - %124 = load ptr, ptr %115, align 8, !tbaa !18 - %125 = ptrtoint ptr %117 to i64 - %126 = ptrtoint ptr %124 to i64 - %127 = sub i64 %125, %126 - %128 = icmp eq i64 %127, 9223372036854775800 - br i1 %128, label %129, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 +120: ; preds = %111 + %121 = load ptr, ptr %112, align 8, !tbaa !18 + %122 = ptrtoint ptr %114 to i64 + %123 = ptrtoint ptr %121 to i64 + %124 = sub i64 %122, %123 + %125 = icmp eq i64 %124, 9223372036854775800 + br i1 %125, label %126, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 -129: ; preds = %123 +126: ; preds = %120 tail call void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str) #23 unreachable -_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24: ; preds = %123 - %130 = ashr exact i64 %127, 3 - %.sroa.speculated.i.i.i25 = tail call i64 @llvm.umax.i64(i64 %130, i64 1) - %131 = add nsw i64 %.sroa.speculated.i.i.i25, %130 - %132 = icmp ult i64 %131, %130 - %133 = tail call i64 @llvm.umin.i64(i64 %131, i64 1152921504606846975) - %134 = select i1 %132, i64 1152921504606846975, i64 %133 - %.not.i.i.i26 = icmp ne i64 %134, 0 +_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24: ; preds = %120 + %127 = ashr exact i64 %124, 3 + %.sroa.speculated.i.i.i25 = tail call i64 @llvm.umax.i64(i64 %127, i64 1) + %128 = add nsw i64 %.sroa.speculated.i.i.i25, %127 + %129 = icmp ult i64 %128, %127 + %130 = tail call i64 @llvm.umin.i64(i64 %128, i64 1152921504606846975) + %131 = select i1 %129, i64 1152921504606846975, i64 %130 + %.not.i.i.i26 = icmp ne i64 %131, 0 tail call void @llvm.assume(i1 %.not.i.i.i26) - %135 = shl nuw nsw i64 %134, 3 - %136 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %135) #24 - %137 = getelementptr inbounds i8, ptr %136, i64 %127 - store ptr %1, ptr %137, align 8, !tbaa !3 - %138 = icmp sgt i64 %127, 0 - br i1 %138, label %139, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 - -139: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %136, ptr align 8 %124, i64 %127, i1 false) + %132 = shl nuw nsw i64 %131, 3 + %133 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %132) #24 + %134 = getelementptr inbounds i8, ptr %133, i64 %124 + store ptr %1, ptr %134, align 8, !tbaa !3 + %135 = icmp sgt i64 %124, 0 + br i1 %135, label %136, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 + +136: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %133, ptr align 8 %121, i64 %124, i1 false) br label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 -_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27: ; preds = %139, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 - %140 = getelementptr inbounds nuw i8, ptr %137, i64 8 - %.not.i17.i.i28 = icmp eq ptr %124, null - br i1 %.not.i17.i.i28, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, label %141 +_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27: ; preds = %136, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 + %137 = getelementptr inbounds nuw i8, ptr %134, i64 8 + %.not.i17.i.i28 = icmp eq ptr %121, null + br i1 %.not.i17.i.i28, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, label %138 -141: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 - tail call void @_ZdlPvm(ptr noundef nonnull %124, i64 noundef %127) #20 +138: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 + tail call void @_ZdlPvm(ptr noundef nonnull %121, i64 noundef %124) #20 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29 -_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29: ; preds = %141, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 - store ptr %136, ptr %115, align 8, !tbaa !18 - store ptr %140, ptr %116, align 8, !tbaa !73 - %142 = getelementptr inbounds nuw ptr, ptr %136, i64 %134 - store ptr %142, ptr %118, align 8, !tbaa !21 +_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29: ; preds = %138, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 + store ptr %133, ptr %112, align 8, !tbaa !18 + store ptr %137, ptr %113, align 8, !tbaa !73 + %139 = getelementptr inbounds nuw ptr, ptr %133, i64 %131 + store ptr %139, ptr %115, align 8, !tbaa !21 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, %120, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, %91, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i13, %49, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i, %11 - %.0 = phi i1 [ true, %11 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i ], [ true, %49 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i13 ], [ true, %91 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21 ], [ false, %120 ], [ false, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29 ] +_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, %117, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, %88, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i13, %49, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i, %11 + %.0 = phi i1 [ true, %11 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i ], [ true, %49 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i13 ], [ true, %88 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21 ], [ false, %117 ], [ false, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29 ] ret i1 %.0 } diff --git a/bench/lean4/optimized/tcp.ll b/bench/lean4/optimized/tcp.ll index ab511bc0e5a..39839311799 100644 --- a/bench/lean4/optimized/tcp.ll +++ b/bench/lean4/optimized/tcp.ll @@ -266,157 +266,148 @@ define noalias noundef nonnull ptr @lean_uv_tcp_connect(ptr noundef %0, ptr noun %9 = getelementptr inbounds nuw i8, ptr %8, i64 8 store ptr %0, ptr %9, align 8, !tbaa !47 store ptr %8, ptr %7, align 8, !tbaa !48 - %10 = ptrtoint ptr %0 to i64 - %11 = and i64 %10, 1 - %.not = icmp eq i64 %11, 0 - br i1 %.not, label %12, label %_ZL8lean_incP11lean_object.exit - -12: ; preds = %3 - %.val.i = load i32, ptr %0, align 4, !tbaa !40 - %13 = icmp sgt i32 %.val.i, 0 - br i1 %13, label %14, label %16, !prof !9 + %.val.i = load i32, ptr %0, align 8, !tbaa !40 + %10 = icmp sgt i32 %.val.i, 0 + br i1 %10, label %11, label %13, !prof !9 -14: ; preds = %12 - %15 = add nuw nsw i32 %.val.i, 1 - store i32 %15, ptr %0, align 4, !tbaa !40 +11: ; preds = %3 + %12 = add nuw nsw i32 %.val.i, 1 + store i32 %12, ptr %0, align 4, !tbaa !40 br label %_ZL8lean_incP11lean_object.exit -16: ; preds = %12 +13: ; preds = %3 %.not.i29 = icmp eq i32 %.val.i, 0 - br i1 %.not.i29, label %_ZL8lean_incP11lean_object.exit, label %17 + br i1 %.not.i29, label %_ZL8lean_incP11lean_object.exit, label %14 -17: ; preds = %16 +14: ; preds = %13 call void @lean_inc_ref_cold(ptr noundef nonnull %0) br label %_ZL8lean_incP11lean_object.exit -_ZL8lean_incP11lean_object.exit: ; preds = %17, %16, %14, %3 - %18 = ptrtoint ptr %6 to i64 - %19 = and i64 %18, 1 - %.not35 = icmp eq i64 %19, 0 - br i1 %.not35, label %20, label %_ZL8lean_incP11lean_object.exit22 +_ZL8lean_incP11lean_object.exit: ; preds = %14, %13, %11 + %15 = ptrtoint ptr %6 to i64 + %16 = and i64 %15, 1 + %.not35 = icmp eq i64 %16, 0 + br i1 %.not35, label %17, label %_ZL8lean_incP11lean_object.exit22 -20: ; preds = %_ZL8lean_incP11lean_object.exit +17: ; preds = %_ZL8lean_incP11lean_object.exit %.val.i30 = load i32, ptr %6, align 4, !tbaa !40 - %21 = icmp sgt i32 %.val.i30, 0 - br i1 %21, label %22, label %24, !prof !9 + %18 = icmp sgt i32 %.val.i30, 0 + br i1 %18, label %19, label %21, !prof !9 -22: ; preds = %20 - %23 = add nuw nsw i32 %.val.i30, 1 - store i32 %23, ptr %6, align 4, !tbaa !40 +19: ; preds = %17 + %20 = add nuw nsw i32 %.val.i30, 1 + store i32 %20, ptr %6, align 4, !tbaa !40 br label %_ZL8lean_incP11lean_object.exit22 -24: ; preds = %20 +21: ; preds = %17 %.not.i31 = icmp eq i32 %.val.i30, 0 - br i1 %.not.i31, label %_ZL8lean_incP11lean_object.exit22, label %25 + br i1 %.not.i31, label %_ZL8lean_incP11lean_object.exit22, label %22 -25: ; preds = %24 +22: ; preds = %21 call void @lean_inc_ref_cold(ptr noundef nonnull %6) br label %_ZL8lean_incP11lean_object.exit22 -_ZL8lean_incP11lean_object.exit22: ; preds = %25, %24, %22, %_ZL8lean_incP11lean_object.exit +_ZL8lean_incP11lean_object.exit22: ; preds = %22, %21, %19, %_ZL8lean_incP11lean_object.exit call void @_ZN4lean15event_loop_lockEPNS_12event_loop_tE(ptr noundef nonnull @_ZN4lean9global_evE) - %26 = load ptr, ptr %.val, align 8, !tbaa !22 - %27 = call i32 @uv_tcp_connect(ptr noundef nonnull %7, ptr noundef %26, ptr noundef nonnull %4, ptr noundef nonnull @"_ZZ19lean_uv_tcp_connectEN3$_08__invokeEP12uv_connect_si") + %23 = load ptr, ptr %.val, align 8, !tbaa !22 + %24 = call i32 @uv_tcp_connect(ptr noundef nonnull %7, ptr noundef %23, ptr noundef nonnull %4, ptr noundef nonnull @"_ZZ19lean_uv_tcp_connectEN3$_08__invokeEP12uv_connect_si") call void @_ZN4lean17event_loop_unlockEPNS_12event_loop_tE(ptr noundef nonnull @_ZN4lean9global_evE) - %28 = icmp slt i32 %27, 0 - br i1 %28, label %29, label %56 + %25 = icmp slt i32 %24, 0 + br i1 %25, label %26, label %52 -29: ; preds = %_ZL8lean_incP11lean_object.exit22 - br i1 %.not35, label %30, label %_ZL8lean_decP11lean_object.exit23 +26: ; preds = %_ZL8lean_incP11lean_object.exit22 + br i1 %.not35, label %27, label %_ZL8lean_decP11lean_object.exit23 -30: ; preds = %29 - %31 = load i32, ptr %6, align 4, !tbaa !40 - %32 = icmp sgt i32 %31, 1 - br i1 %32, label %33, label %35, !prof !9 +27: ; preds = %26 + %28 = load i32, ptr %6, align 4, !tbaa !40 + %29 = icmp sgt i32 %28, 1 + br i1 %29, label %30, label %32, !prof !9 -33: ; preds = %30 - %34 = add nsw i32 %31, -1 - store i32 %34, ptr %6, align 4, !tbaa !40 - br label %37 +30: ; preds = %27 + %31 = add nsw i32 %28, -1 + store i32 %31, ptr %6, align 4, !tbaa !40 + br label %34 -35: ; preds = %30 - %.not.i27 = icmp eq i32 %31, 0 - br i1 %.not.i27, label %_ZL8lean_decP11lean_object.exit23, label %36 +32: ; preds = %27 + %.not.i27 = icmp eq i32 %28, 0 + br i1 %.not.i27, label %_ZL8lean_decP11lean_object.exit23, label %33 -36: ; preds = %35 +33: ; preds = %32 call void @lean_dec_ref_cold(ptr noundef nonnull %6) %.pr = load i32, ptr %6, align 4, !tbaa !40 - br label %37 + br label %34 -37: ; preds = %36, %33 - %38 = phi i32 [ %.pr, %36 ], [ %34, %33 ] - %39 = icmp sgt i32 %38, 1 - br i1 %39, label %40, label %42, !prof !52 +34: ; preds = %33, %30 + %35 = phi i32 [ %.pr, %33 ], [ %31, %30 ] + %36 = icmp sgt i32 %35, 1 + br i1 %36, label %37, label %39, !prof !52 -40: ; preds = %37 - %41 = add nsw i32 %38, -1 - store i32 %41, ptr %6, align 4, !tbaa !40 +37: ; preds = %34 + %38 = add nsw i32 %35, -1 + store i32 %38, ptr %6, align 4, !tbaa !40 br label %_ZL8lean_decP11lean_object.exit23 -42: ; preds = %37 - %.not.i25 = icmp eq i32 %38, 0 - br i1 %.not.i25, label %_ZL8lean_decP11lean_object.exit23, label %43 +39: ; preds = %34 + %.not.i25 = icmp eq i32 %35, 0 + br i1 %.not.i25, label %_ZL8lean_decP11lean_object.exit23, label %40 -43: ; preds = %42 +40: ; preds = %39 call void @lean_dec_ref_cold(ptr noundef nonnull %6) br label %_ZL8lean_decP11lean_object.exit23 -_ZL8lean_decP11lean_object.exit23: ; preds = %35, %43, %42, %40, %29 - br i1 %.not, label %44, label %_ZL8lean_decP11lean_object.exit24 - -44: ; preds = %_ZL8lean_decP11lean_object.exit23 - %45 = load i32, ptr %0, align 4, !tbaa !40 - %46 = icmp sgt i32 %45, 1 - br i1 %46, label %47, label %49, !prof !9 +_ZL8lean_decP11lean_object.exit23: ; preds = %26, %37, %39, %40, %32 + %41 = load i32, ptr %0, align 4, !tbaa !40 + %42 = icmp sgt i32 %41, 1 + br i1 %42, label %43, label %45, !prof !9 -47: ; preds = %44 - %48 = add nsw i32 %45, -1 - store i32 %48, ptr %0, align 4, !tbaa !40 +43: ; preds = %_ZL8lean_decP11lean_object.exit23 + %44 = add nsw i32 %41, -1 + store i32 %44, ptr %0, align 4, !tbaa !40 br label %_ZL8lean_decP11lean_object.exit24 -49: ; preds = %44 - %.not.i = icmp eq i32 %45, 0 - br i1 %.not.i, label %_ZL8lean_decP11lean_object.exit24, label %50 +45: ; preds = %_ZL8lean_decP11lean_object.exit23 + %.not.i = icmp eq i32 %41, 0 + br i1 %.not.i, label %_ZL8lean_decP11lean_object.exit24, label %46 -50: ; preds = %49 +46: ; preds = %45 call void @lean_dec_ref_cold(ptr noundef nonnull %0) br label %_ZL8lean_decP11lean_object.exit24 -_ZL8lean_decP11lean_object.exit24: ; preds = %50, %49, %47, %_ZL8lean_decP11lean_object.exit23 - %51 = load ptr, ptr %7, align 8, !tbaa !48 - call void @free(ptr noundef %51) #15 +_ZL8lean_decP11lean_object.exit24: ; preds = %46, %45, %43 + %47 = load ptr, ptr %7, align 8, !tbaa !48 + call void @free(ptr noundef %47) #15 call void @free(ptr noundef nonnull %7) #15 - %52 = call ptr @lean_decode_uv_error(i32 noundef %27, ptr noundef null) + %48 = call ptr @lean_decode_uv_error(i32 noundef %24, ptr noundef null) call void @lean_inc_heartbeat() - %53 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 - %54 = icmp eq ptr %53, null - br i1 %54, label %55, label %_ZL23lean_io_result_mk_errorP11lean_object.exit + %49 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 + %50 = icmp eq ptr %49, null + br i1 %50, label %51, label %_ZL23lean_io_result_mk_errorP11lean_object.exit -55: ; preds = %_ZL8lean_decP11lean_object.exit24 +51: ; preds = %_ZL8lean_decP11lean_object.exit24 call void @lean_internal_panic_out_of_memory() #16 unreachable -56: ; preds = %_ZL8lean_incP11lean_object.exit22 +52: ; preds = %_ZL8lean_incP11lean_object.exit22 call void @lean_inc_heartbeat() - %57 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 - %58 = icmp eq ptr %57, null - br i1 %58, label %59, label %_ZL23lean_io_result_mk_errorP11lean_object.exit + %53 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 + %54 = icmp eq ptr %53, null + br i1 %54, label %55, label %_ZL23lean_io_result_mk_errorP11lean_object.exit -59: ; preds = %56 +55: ; preds = %52 call void @lean_internal_panic_out_of_memory() #16 unreachable -_ZL23lean_io_result_mk_errorP11lean_object.exit: ; preds = %56, %_ZL8lean_decP11lean_object.exit24 - %.sink50 = phi ptr [ %53, %_ZL8lean_decP11lean_object.exit24 ], [ %57, %56 ] - %.sink47 = phi i32 [ 16908312, %_ZL8lean_decP11lean_object.exit24 ], [ 131096, %56 ] - %.sink = phi ptr [ %52, %_ZL8lean_decP11lean_object.exit24 ], [ %6, %56 ] - %60 = getelementptr inbounds nuw i8, ptr %.sink50, i64 4 +_ZL23lean_io_result_mk_errorP11lean_object.exit: ; preds = %52, %_ZL8lean_decP11lean_object.exit24 + %.sink50 = phi ptr [ %49, %_ZL8lean_decP11lean_object.exit24 ], [ %53, %52 ] + %.sink47 = phi i32 [ 16908312, %_ZL8lean_decP11lean_object.exit24 ], [ 131096, %52 ] + %.sink = phi ptr [ %48, %_ZL8lean_decP11lean_object.exit24 ], [ %6, %52 ] + %56 = getelementptr inbounds nuw i8, ptr %.sink50, i64 4 store i32 1, ptr %.sink50, align 4, !tbaa !40 - store i32 %.sink47, ptr %60, align 4 - %61 = getelementptr inbounds nuw i8, ptr %.sink50, i64 8 - store ptr %.sink, ptr %61, align 8, !tbaa !34 - %62 = getelementptr inbounds nuw i8, ptr %.sink50, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %62, align 8, !tbaa !34 + store i32 %.sink47, ptr %56, align 4 + %57 = getelementptr inbounds nuw i8, ptr %.sink50, i64 8 + store ptr %.sink, ptr %57, align 8, !tbaa !34 + %58 = getelementptr inbounds nuw i8, ptr %.sink50, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %58, align 8, !tbaa !34 call void @llvm.lifetime.end.p0(ptr nonnull %4) ret ptr %.sink50 } diff --git a/bench/libigl/optimized/unproject.ll b/bench/libigl/optimized/unproject.ll index d73523b0805..be673ed981d 100644 --- a/bench/libigl/optimized/unproject.ll +++ b/bench/libigl/optimized/unproject.ll @@ -190,46 +190,46 @@ define weak_odr dso_local void @_ZN3igl9unprojectIdEEN5Eigen6MatrixIT_Li3ELi1ELi %27 = fmul <2 x double> %.sroa.0.i.i.sroa.7.24.vec.insert, splat (double 2.000000e+00) %28 = fadd <2 x double> %27, splat (double -1.000000e+00) %29 = shufflevector <2 x double> %28, <2 x double> poison, <2 x i32> - %30 = getelementptr inbounds nuw i8, ptr %6, i64 96 + %30 = getelementptr inbounds nuw i8, ptr %6, i64 112 %31 = load <2 x double>, ptr %30, align 16, !tbaa !14 %32 = fmul <2 x double> %29, %31 - %33 = shufflevector <2 x double> %28, <2 x double> poison, <2 x i32> zeroinitializer - %34 = getelementptr inbounds nuw i8, ptr %6, i64 64 + %33 = shufflevector <2 x double> %26, <2 x double> poison, <2 x i32> zeroinitializer + %34 = getelementptr inbounds nuw i8, ptr %6, i64 16 %35 = load <2 x double>, ptr %34, align 16, !tbaa !14 %36 = fmul <2 x double> %33, %35 - %37 = shufflevector <2 x double> %26, <2 x double> poison, <2 x i32> zeroinitializer - %38 = load <2 x double>, ptr %6, align 16, !tbaa !14 - %39 = fmul <2 x double> %37, %38 - %40 = getelementptr inbounds nuw i8, ptr %6, i64 32 - %41 = load <2 x double>, ptr %40, align 16, !tbaa !14 %.sroa.0.i.i.sroa.0.8.vec.extract = extractelement <2 x double> %26, i64 1 - %42 = bitcast double %.sroa.0.i.i.sroa.0.8.vec.extract to <1 x double> - %43 = shufflevector <1 x double> %42, <1 x double> poison, <2 x i32> zeroinitializer - %44 = fmul <2 x double> %41, %43 - %45 = fadd <2 x double> %39, %44 - %46 = fadd <2 x double> %36, %45 - %47 = fadd <2 x double> %32, %46 - %48 = getelementptr inbounds nuw i8, ptr %6, i64 112 - %49 = load <2 x double>, ptr %48, align 16, !tbaa !14 - %50 = fmul <2 x double> %29, %49 - %51 = getelementptr inbounds nuw i8, ptr %6, i64 16 + %37 = bitcast double %.sroa.0.i.i.sroa.0.8.vec.extract to <1 x double> + %38 = shufflevector <1 x double> %37, <1 x double> poison, <2 x i32> zeroinitializer + %39 = getelementptr inbounds nuw i8, ptr %6, i64 48 + %40 = load <2 x double>, ptr %39, align 16, !tbaa !14 + %41 = fmul <2 x double> %38, %40 + %42 = fadd <2 x double> %36, %41 + %43 = shufflevector <2 x double> %28, <2 x double> poison, <2 x i32> zeroinitializer + %44 = getelementptr inbounds nuw i8, ptr %6, i64 80 + %45 = load <2 x double>, ptr %44, align 16, !tbaa !14 + %46 = fmul <2 x double> %43, %45 + %47 = fadd <2 x double> %42, %46 + %48 = fadd <2 x double> %32, %47 + %49 = shufflevector <2 x double> %48, <2 x double> poison, <2 x i32> + %50 = fdiv <2 x double> %48, %49 + %51 = getelementptr inbounds nuw i8, ptr %6, i64 96 %52 = load <2 x double>, ptr %51, align 16, !tbaa !14 - %53 = fmul <2 x double> %37, %52 - %54 = getelementptr inbounds nuw i8, ptr %6, i64 48 + %53 = fmul <2 x double> %29, %52 + %54 = getelementptr inbounds nuw i8, ptr %6, i64 64 %55 = load <2 x double>, ptr %54, align 16, !tbaa !14 %56 = fmul <2 x double> %43, %55 - %57 = fadd <2 x double> %53, %56 - %58 = getelementptr inbounds nuw i8, ptr %6, i64 80 - %59 = load <2 x double>, ptr %58, align 16, !tbaa !14 - %60 = fmul <2 x double> %33, %59 - %61 = fadd <2 x double> %57, %60 - %62 = fadd <2 x double> %50, %61 - %63 = shufflevector <2 x double> %62, <2 x double> poison, <2 x i32> - %64 = fdiv <2 x double> %47, %63 - %65 = fdiv <2 x double> %62, %63 - %66 = extractelement <2 x double> %65, i64 0 + %57 = load <2 x double>, ptr %6, align 16, !tbaa !14 + %58 = fmul <2 x double> %33, %57 + %59 = getelementptr inbounds nuw i8, ptr %6, i64 32 + %60 = load <2 x double>, ptr %59, align 16, !tbaa !14 + %61 = fmul <2 x double> %60, %38 + %62 = fadd <2 x double> %58, %61 + %63 = fadd <2 x double> %56, %62 + %64 = fadd <2 x double> %53, %63 + %65 = fdiv <2 x double> %64, %49 + %66 = extractelement <2 x double> %50, i64 0 call void @llvm.lifetime.end.p0(ptr nonnull %6) - store <2 x double> %64, ptr %0, align 8, !tbaa !14 + store <2 x double> %65, ptr %0, align 8, !tbaa !14 %67 = getelementptr inbounds nuw i8, ptr %0, i64 16 store double %66, ptr %67, align 8, !tbaa !18 ret void diff --git a/bench/libigl/optimized/vertex_triangle_adjacency.ll b/bench/libigl/optimized/vertex_triangle_adjacency.ll index ab5994f2ab9..9140b8a2a17 100644 --- a/bench/libigl/optimized/vertex_triangle_adjacency.ll +++ b/bench/libigl/optimized/vertex_triangle_adjacency.ll @@ -2882,7 +2882,7 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc ._crit_edge: ; preds = %23, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18scalar_constant_opIiEES1_EEEERKNS_9EigenBaseIT_EE.exit invoke void @_ZN3igl6cumsumIN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEES3_EEvRKNS1_10MatrixBaseIT_EEiRNS1_15PlainObjectBaseIT0_EE(ptr noundef nonnull align 1 dereferenceable(1) %5, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(16) %3) - to label %32 unwind label %125 + to label %32 unwind label %122 23: ; preds = %24 %indvars.iv.next78 = add nuw nsw i64 %indvars.iv77, 1 @@ -2907,13 +2907,13 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc %33 = add nsw i32 %1, 1 %34 = sext i32 %33 to i64 %or.cond = icmp sgt i32 %1, -1 - br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %42 + br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 %35 = shl nuw nsw i64 %34, 2 %36 = call noalias ptr @malloc(i64 noundef %35) #19 %37 = icmp eq ptr %36, null - br i1 %37, label %38, label %42 + br i1 %37, label %38, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i 38: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i %39 = call ptr @__cxa_allocate_exception(i64 8) #18 @@ -2929,256 +2929,247 @@ _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 cleanup br label %.body -42: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 +_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 %.sroa.0.0 = phi ptr [ null, %32 ], [ %36, %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i ] store i32 0, ptr %.sroa.0.0, align 4, !tbaa !19, !noalias !111 - %43 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %44 = load i64, ptr %43, align 8, !tbaa !106 - %45 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 - %46 = load ptr, ptr %3, align 8, !tbaa !108 - %47 = ptrtoint ptr %45 to i64 - %48 = and i64 %47, 3 - %.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %48, 0 - br i1 %.not.i.i.i.i.i.i.i.i.i.i.i.i, label %49, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - -49: ; preds = %42 - %50 = lshr exact i64 %47, 2 - %51 = sub nsw i64 0, %50 - %52 = and i64 %51, 3 - %53 = call i64 @llvm.smin.i64(i64 %52, i64 %44) - br label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - -_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %49, %42 - %.0.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %53, %49 ], [ %44, %42 ] - %54 = sub nsw i64 %44, %.0.i.i.i.i.i.i.i.i.i.i.i.i - %55 = sdiv i64 %54, 4 - %56 = shl nsw i64 %55, 2 - %57 = add nsw i64 %56, %.0.i.i.i.i.i.i.i.i.i.i.i.i - %58 = icmp sgt i64 %.0.i.i.i.i.i.i.i.i.i.i.i.i, 0 - br i1 %58, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i + %42 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %43 = load i64, ptr %42, align 8, !tbaa !106 + %44 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 + %45 = load ptr, ptr %3, align 8, !tbaa !108 + %46 = ptrtoint ptr %44 to i64 + %47 = lshr exact i64 %46, 2 + %48 = sub nsw i64 0, %47 + %49 = and i64 %48, 3 + %50 = call i64 @llvm.smin.i64(i64 %49, i64 %43) + %51 = sub nsw i64 %43, %50 + %52 = sdiv i64 %51, 4 + %53 = shl nsw i64 %52, 2 + %54 = add nsw i64 %53, %50 + %55 = icmp sgt i64 %50, 0 + br i1 %55, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %62, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] - %59 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %60 = getelementptr inbounds nuw i32, ptr %46, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %61 = load i32, ptr %60, align 4, !tbaa !19 - store i32 %61, ptr %59, align 4, !tbaa !19 - %62 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %62, %.0.i.i.i.i.i.i.i.i.i.i.i.i + %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %59, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] + %56 = getelementptr inbounds nuw i32, ptr %44, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %57 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %58 = load i32, ptr %57, align 4, !tbaa !19 + store i32 %58, ptr %56, align 4, !tbaa !19 + %59 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %59, %50 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 _ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - %63 = icmp sgt i64 %54, 3 - br i1 %63, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i + %60 = icmp sgt i64 %51, 3 + br i1 %60, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ._crit_edge.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i - %64 = icmp slt i64 %57, %44 - br i1 %64, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %61 = icmp slt i64 %54, %43 + br i1 %61, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit .lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i - %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %68, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %57, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] - %65 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %66 = getelementptr inbounds i32, ptr %46, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %67 = load i32, ptr %66, align 4, !tbaa !19 - store i32 %67, ptr %65, align 4, !tbaa !19 - %68 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %68, %44 + %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %65, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %54, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] + %62 = getelementptr inbounds i32, ptr %44, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %63 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %64 = load i32, ptr %63, align 4, !tbaa !19 + store i32 %64, ptr %62, align 4, !tbaa !19 + %65 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %65, %43 br i1 %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 .lr.ph.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i - %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %72, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %.0.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] - %69 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %70 = getelementptr inbounds i32, ptr %46, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %71 = load <2 x i64>, ptr %70, align 1, !tbaa !115 - store <2 x i64> %71, ptr %69, align 16, !tbaa !115 - %72 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 - %73 = icmp slt i64 %72, %57 - br i1 %73, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 + %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %69, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %50, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] + %66 = getelementptr inbounds i32, ptr %44, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %67 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %68 = load <2 x i64>, ptr %67, align 1, !tbaa !115 + store <2 x i64> %68, ptr %66, align 16, !tbaa !115 + %69 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 + %70 = icmp slt i64 %69, %54 + br i1 %70, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 _ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i - %.not.i.i.i.i.i.i.i.i = icmp eq i64 %44, %34 - br i1 %.not.i.i.i.i.i.i.i.i, label %74, label %thread-pre-split.i.i.i.i.i.i.i + %.not.i.i.i.i.i.i.i.i = icmp eq i64 %43, %34 + br i1 %.not.i.i.i.i.i.i.i.i, label %71, label %thread-pre-split.i.i.i.i.i.i.i thread-pre-split.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %34, i64 noundef 1) - to label %.noexc unwind label %127 + to label %.noexc unwind label %124 .noexc: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %.pr.i.i.i.i.i.i.i = load i64, ptr %43, align 8, !tbaa !106 + %.pr.i.i.i.i.i.i.i = load i64, ptr %42, align 8, !tbaa !106 %.pre = load ptr, ptr %3, align 8, !tbaa !108 - br label %74 + br label %71 -74: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit - %75 = phi ptr [ %.pre, %.noexc ], [ %46, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %76 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %77 = sdiv i64 %76, 4 - %78 = shl nsw i64 %77, 2 - %79 = icmp sgt i64 %76, 3 - br i1 %79, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i +71: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %72 = phi ptr [ %.pre, %.noexc ], [ %45, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %73 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %74 = sdiv i64 %73, 4 + %75 = shl nsw i64 %74, 2 + %76 = icmp sgt i64 %73, 3 + br i1 %76, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i -._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %74 - %80 = icmp slt i64 %78, %76 - br i1 %80, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit +._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %71 + %77 = icmp slt i64 %75, %73 + br i1 %77, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit .lr.ph.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %84, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %78, %._crit_edge.i.i.i.i.i.i.i.i ] - %81 = getelementptr inbounds i32, ptr %75, i64 %.05.i.i.i.i.i.i.i.i.i - %82 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i - %83 = load i32, ptr %82, align 4, !tbaa !19 - store i32 %83, ptr %81, align 4, !tbaa !19 - %84 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %84, %76 + %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %81, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %75, %._crit_edge.i.i.i.i.i.i.i.i ] + %78 = getelementptr inbounds i32, ptr %72, i64 %.05.i.i.i.i.i.i.i.i.i + %79 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i + %80 = load i32, ptr %79, align 4, !tbaa !19 + store i32 %80, ptr %78, align 4, !tbaa !19 + %81 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %81, %73 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i: ; preds = %74, %.lr.ph.i.i.i.i.i.i.i.i - %.011.i.i.i.i.i.i.i.i = phi i64 [ %88, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %74 ] - %85 = getelementptr inbounds nuw i32, ptr %75, i64 %.011.i.i.i.i.i.i.i.i - %86 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i - %87 = load <2 x i64>, ptr %86, align 16, !tbaa !115 - store <2 x i64> %87, ptr %85, align 16, !tbaa !115 - %88 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 - %89 = icmp slt i64 %88, %78 - br i1 %89, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i: ; preds = %71, %.lr.ph.i.i.i.i.i.i.i.i + %.011.i.i.i.i.i.i.i.i = phi i64 [ %85, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %71 ] + %82 = getelementptr inbounds nuw i32, ptr %72, i64 %.011.i.i.i.i.i.i.i.i + %83 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i + %84 = load <2 x i64>, ptr %83, align 16, !tbaa !115 + store <2 x i64> %84, ptr %82, align 16, !tbaa !115 + %85 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 + %86 = icmp slt i64 %85, %75 + br i1 %86, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i call void @free(ptr noundef nonnull %.sroa.0.0) #18 - %90 = load ptr, ptr %3, align 8, !tbaa !108 - %91 = load i64, ptr %43, align 8, !tbaa !106 - %92 = load i64, ptr %8, align 8, !tbaa !106 - %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %92, %91 - br i1 %.not.i.i.i.i.i.i.i.i43, label %93, label %thread-pre-split.i.i.i.i.i.i.i44 + %87 = load ptr, ptr %3, align 8, !tbaa !108 + %88 = load i64, ptr %42, align 8, !tbaa !106 + %89 = load i64, ptr %8, align 8, !tbaa !106 + %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %89, %88 + br i1 %.not.i.i.i.i.i.i.i.i43, label %90, label %thread-pre-split.i.i.i.i.i.i.i44 thread-pre-split.i.i.i.i.i.i.i44: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %91, i64 noundef 1) - to label %.noexc52 unwind label %125 + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %88, i64 noundef 1) + to label %.noexc52 unwind label %122 .noexc52: ; preds = %thread-pre-split.i.i.i.i.i.i.i44 %.pr.i.i.i.i.i.i.i45 = load i64, ptr %8, align 8, !tbaa !106 - br label %93 + br label %90 -93: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - %94 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %91, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] - %95 = load ptr, ptr %5, align 8, !tbaa !108 - %96 = sdiv i64 %94, 4 - %97 = shl nsw i64 %96, 2 - %98 = icmp sgt i64 %94, 3 - br i1 %98, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 +90: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit + %91 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %88, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] + %92 = load ptr, ptr %5, align 8, !tbaa !108 + %93 = sdiv i64 %91, 4 + %94 = shl nsw i64 %93, 2 + %95 = icmp sgt i64 %91, 3 + br i1 %95, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 -._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %93 - %99 = icmp slt i64 %97, %94 - br i1 %99, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit +._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %90 + %96 = icmp slt i64 %94, %91 + br i1 %96, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit .lr.ph.i.i.i.i.i.i.i.i.i47: ; preds = %._crit_edge.i.i.i.i.i.i.i.i46, %.lr.ph.i.i.i.i.i.i.i.i.i47 - %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %103, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %97, %._crit_edge.i.i.i.i.i.i.i.i46 ] - %100 = getelementptr inbounds i32, ptr %95, i64 %.05.i.i.i.i.i.i.i.i.i48 - %101 = getelementptr inbounds i32, ptr %90, i64 %.05.i.i.i.i.i.i.i.i.i48 - %102 = load i32, ptr %101, align 4, !tbaa !19 - store i32 %102, ptr %100, align 4, !tbaa !19 - %103 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %103, %94 + %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %100, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %94, %._crit_edge.i.i.i.i.i.i.i.i46 ] + %97 = getelementptr inbounds i32, ptr %92, i64 %.05.i.i.i.i.i.i.i.i.i48 + %98 = getelementptr inbounds i32, ptr %87, i64 %.05.i.i.i.i.i.i.i.i.i48 + %99 = load i32, ptr %98, align 4, !tbaa !19 + store i32 %99, ptr %97, align 4, !tbaa !19 + %100 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %100, %91 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i49, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i47, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %93, %.lr.ph.i.i.i.i.i.i.i.i50 - %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %107, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %93 ] - %104 = getelementptr inbounds nuw i32, ptr %95, i64 %.011.i.i.i.i.i.i.i.i51 - %105 = getelementptr inbounds nuw i32, ptr %90, i64 %.011.i.i.i.i.i.i.i.i51 - %106 = load <2 x i64>, ptr %105, align 16, !tbaa !115 - store <2 x i64> %106, ptr %104, align 16, !tbaa !115 - %107 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 - %108 = icmp slt i64 %107, %97 - br i1 %108, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %90, %.lr.ph.i.i.i.i.i.i.i.i50 + %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %104, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %90 ] + %101 = getelementptr inbounds nuw i32, ptr %92, i64 %.011.i.i.i.i.i.i.i.i51 + %102 = getelementptr inbounds nuw i32, ptr %87, i64 %.011.i.i.i.i.i.i.i.i51 + %103 = load <2 x i64>, ptr %102, align 16, !tbaa !115 + store <2 x i64> %103, ptr %101, align 16, !tbaa !115 + %104 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 + %105 = icmp slt i64 %104, %94 + br i1 %105, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i47, %._crit_edge.i.i.i.i.i.i.i.i46 call void @llvm.lifetime.start.p0(ptr nonnull %6) - %109 = load i64, ptr %17, align 8, !tbaa !80 - %110 = mul nsw i64 %109, 3 + %106 = load i64, ptr %17, align 8, !tbaa !80 + %107 = mul nsw i64 %106, 3 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, i8 0, i64 16, i1 false) - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %110, i64 noundef 1) + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %107, i64 noundef 1) to label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit unwind label %.body53 .body53: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %111 = landingpad { ptr, i32 } + %108 = landingpad { ptr, i32 } cleanup - %112 = load ptr, ptr %6, align 8, !tbaa !108 - call void @free(ptr noundef %112) #18 + %109 = load ptr, ptr %6, align 8, !tbaa !108 + call void @free(ptr noundef %109) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) br label %.body _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %113 = load ptr, ptr %2, align 8, !tbaa !119 - %114 = load ptr, ptr %6, align 8, !tbaa !119 - store ptr %114, ptr %2, align 8, !tbaa !119 - store ptr %113, ptr %6, align 8, !tbaa !119 - %115 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %116 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %117 = load i64, ptr %115, align 8, !tbaa !12 - %118 = load i64, ptr %116, align 8, !tbaa !12 - store i64 %118, ptr %115, align 8, !tbaa !12 - store i64 %117, ptr %116, align 8, !tbaa !12 - call void @free(ptr noundef %113) #18 + %110 = load ptr, ptr %2, align 8, !tbaa !119 + %111 = load ptr, ptr %6, align 8, !tbaa !119 + store ptr %111, ptr %2, align 8, !tbaa !119 + store ptr %110, ptr %6, align 8, !tbaa !119 + %112 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %113 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %114 = load i64, ptr %112, align 8, !tbaa !12 + %115 = load i64, ptr %113, align 8, !tbaa !12 + store i64 %115, ptr %112, align 8, !tbaa !12 + store i64 %114, ptr %113, align 8, !tbaa !12 + call void @free(ptr noundef %110) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) - %119 = load i64, ptr %17, align 8, !tbaa !80 - %120 = icmp sgt i64 %119, 0 + %116 = load i64, ptr %17, align 8, !tbaa !80 + %117 = icmp sgt i64 %116, 0 %.pre93 = load ptr, ptr %5, align 8, !tbaa !108 - br i1 %120, label %.preheader.lr.ph, label %._crit_edge75 + br i1 %117, label %.preheader.lr.ph, label %._crit_edge75 .preheader.lr.ph: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit - %121 = load ptr, ptr %0, align 8, !tbaa !83 - %122 = load ptr, ptr %2, align 8, !tbaa !108 + %118 = load ptr, ptr %0, align 8, !tbaa !83 + %119 = load ptr, ptr %2, align 8, !tbaa !108 br label %.preheader -.preheader: ; preds = %.preheader.lr.ph, %129 - %indvars.iv89 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next90, %129 ] - %123 = getelementptr i32, ptr %121, i64 %indvars.iv89 - %124 = trunc nuw nsw i64 %indvars.iv89 to i32 - br label %130 +.preheader: ; preds = %.preheader.lr.ph, %126 + %indvars.iv89 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next90, %126 ] + %120 = getelementptr i32, ptr %118, i64 %indvars.iv89 + %121 = trunc nuw nsw i64 %indvars.iv89 to i32 + br label %127 -._crit_edge75: ; preds = %129, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit +._crit_edge75: ; preds = %126, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit call void @free(ptr noundef %.pre93) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) ret void -125: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge - %126 = landingpad { ptr, i32 } +122: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge + %123 = landingpad { ptr, i32 } cleanup br label %.body -127: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %128 = landingpad { ptr, i32 } +124: ; preds = %thread-pre-split.i.i.i.i.i.i.i + %125 = landingpad { ptr, i32 } cleanup call void @free(ptr noundef nonnull %.sroa.0.0) #18 br label %.body -129: ; preds = %130 +126: ; preds = %127 %indvars.iv.next90 = add nuw nsw i64 %indvars.iv89, 1 - %exitcond92.not = icmp eq i64 %indvars.iv.next90, %119 + %exitcond92.not = icmp eq i64 %indvars.iv.next90, %116 br i1 %exitcond92.not, label %._crit_edge75, label %.preheader, !llvm.loop !120 -130: ; preds = %.preheader, %130 - %indvars.iv85 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next86, %130 ] - %131 = mul nuw nsw i64 %119, %indvars.iv85 - %132 = getelementptr i32, ptr %123, i64 %131 +127: ; preds = %.preheader, %127 + %indvars.iv85 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next86, %127 ] + %128 = mul nuw nsw i64 %116, %indvars.iv85 + %129 = getelementptr i32, ptr %120, i64 %128 + %130 = load i32, ptr %129, align 4, !tbaa !19 + %131 = sext i32 %130 to i64 + %132 = getelementptr inbounds i32, ptr %.pre93, i64 %131 %133 = load i32, ptr %132, align 4, !tbaa !19 %134 = sext i32 %133 to i64 - %135 = getelementptr inbounds i32, ptr %.pre93, i64 %134 - %136 = load i32, ptr %135, align 4, !tbaa !19 + %135 = getelementptr inbounds i32, ptr %119, i64 %134 + store i32 %121, ptr %135, align 4, !tbaa !19 + %136 = load i32, ptr %129, align 4, !tbaa !19 %137 = sext i32 %136 to i64 - %138 = getelementptr inbounds i32, ptr %122, i64 %137 - store i32 %124, ptr %138, align 4, !tbaa !19 - %139 = load i32, ptr %132, align 4, !tbaa !19 - %140 = sext i32 %139 to i64 - %141 = getelementptr inbounds i32, ptr %.pre93, i64 %140 - %142 = load i32, ptr %141, align 4, !tbaa !19 - %143 = add nsw i32 %142, 1 - store i32 %143, ptr %141, align 4, !tbaa !19 + %138 = getelementptr inbounds i32, ptr %.pre93, i64 %137 + %139 = load i32, ptr %138, align 4, !tbaa !19 + %140 = add nsw i32 %139, 1 + store i32 %140, ptr %138, align 4, !tbaa !19 %indvars.iv.next86 = add nuw nsw i64 %indvars.iv85, 1 %exitcond88.not = icmp eq i64 %indvars.iv.next86, 3 - br i1 %exitcond88.not, label %129, label %130, !llvm.loop !121 + br i1 %exitcond88.not, label %126, label %127, !llvm.loop !121 -.body: ; preds = %127, %40, %.body53, %125 - %.pn41 = phi { ptr, i32 } [ %111, %.body53 ], [ %126, %125 ], [ %128, %127 ], [ %41, %40 ] - %144 = load ptr, ptr %5, align 8, !tbaa !108 - call void @free(ptr noundef %144) #18 +.body: ; preds = %124, %40, %.body53, %122 + %.pn41 = phi { ptr, i32 } [ %108, %.body53 ], [ %123, %122 ], [ %125, %124 ], [ %41, %40 ] + %141 = load ptr, ptr %5, align 8, !tbaa !108 + call void @free(ptr noundef %141) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) br label %common.resume } @@ -3249,7 +3240,7 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc ._crit_edge: ; preds = %23, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18scalar_constant_opIiEES1_EEEERKNS_9EigenBaseIT_EE.exit invoke void @_ZN3igl6cumsumIN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEES3_EEvRKNS1_10MatrixBaseIT_EEiRNS1_15PlainObjectBaseIT0_EE(ptr noundef nonnull align 1 dereferenceable(1) %5, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(16) %3) - to label %32 unwind label %125 + to label %32 unwind label %122 23: ; preds = %24 %indvars.iv.next78 = add nuw nsw i64 %indvars.iv77, 1 @@ -3274,13 +3265,13 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc %33 = add nsw i32 %1, 1 %34 = sext i32 %33 to i64 %or.cond = icmp sgt i32 %1, -1 - br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %42 + br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 %35 = shl nuw nsw i64 %34, 2 %36 = call noalias ptr @malloc(i64 noundef %35) #19 %37 = icmp eq ptr %36, null - br i1 %37, label %38, label %42 + br i1 %37, label %38, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i 38: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i %39 = call ptr @__cxa_allocate_exception(i64 8) #18 @@ -3296,256 +3287,247 @@ _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 cleanup br label %.body -42: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 +_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 %.sroa.0.0 = phi ptr [ null, %32 ], [ %36, %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i ] store i32 0, ptr %.sroa.0.0, align 4, !tbaa !19, !noalias !124 - %43 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %44 = load i64, ptr %43, align 8, !tbaa !106 - %45 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 - %46 = load ptr, ptr %3, align 8, !tbaa !108 - %47 = ptrtoint ptr %45 to i64 - %48 = and i64 %47, 3 - %.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %48, 0 - br i1 %.not.i.i.i.i.i.i.i.i.i.i.i.i, label %49, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - -49: ; preds = %42 - %50 = lshr exact i64 %47, 2 - %51 = sub nsw i64 0, %50 - %52 = and i64 %51, 3 - %53 = call i64 @llvm.smin.i64(i64 %52, i64 %44) - br label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - -_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %49, %42 - %.0.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %53, %49 ], [ %44, %42 ] - %54 = sub nsw i64 %44, %.0.i.i.i.i.i.i.i.i.i.i.i.i - %55 = sdiv i64 %54, 4 - %56 = shl nsw i64 %55, 2 - %57 = add nsw i64 %56, %.0.i.i.i.i.i.i.i.i.i.i.i.i - %58 = icmp sgt i64 %.0.i.i.i.i.i.i.i.i.i.i.i.i, 0 - br i1 %58, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i + %42 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %43 = load i64, ptr %42, align 8, !tbaa !106 + %44 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 + %45 = load ptr, ptr %3, align 8, !tbaa !108 + %46 = ptrtoint ptr %44 to i64 + %47 = lshr exact i64 %46, 2 + %48 = sub nsw i64 0, %47 + %49 = and i64 %48, 3 + %50 = call i64 @llvm.smin.i64(i64 %49, i64 %43) + %51 = sub nsw i64 %43, %50 + %52 = sdiv i64 %51, 4 + %53 = shl nsw i64 %52, 2 + %54 = add nsw i64 %53, %50 + %55 = icmp sgt i64 %50, 0 + br i1 %55, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %62, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] - %59 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %60 = getelementptr inbounds nuw i32, ptr %46, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %61 = load i32, ptr %60, align 4, !tbaa !19 - store i32 %61, ptr %59, align 4, !tbaa !19 - %62 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %62, %.0.i.i.i.i.i.i.i.i.i.i.i.i + %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %59, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] + %56 = getelementptr inbounds nuw i32, ptr %44, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %57 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %58 = load i32, ptr %57, align 4, !tbaa !19 + store i32 %58, ptr %56, align 4, !tbaa !19 + %59 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %59, %50 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 _ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - %63 = icmp sgt i64 %54, 3 - br i1 %63, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i + %60 = icmp sgt i64 %51, 3 + br i1 %60, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ._crit_edge.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i - %64 = icmp slt i64 %57, %44 - br i1 %64, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %61 = icmp slt i64 %54, %43 + br i1 %61, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit .lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i - %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %68, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %57, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] - %65 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %66 = getelementptr inbounds i32, ptr %46, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %67 = load i32, ptr %66, align 4, !tbaa !19 - store i32 %67, ptr %65, align 4, !tbaa !19 - %68 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %68, %44 + %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %65, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %54, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] + %62 = getelementptr inbounds i32, ptr %44, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %63 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %64 = load i32, ptr %63, align 4, !tbaa !19 + store i32 %64, ptr %62, align 4, !tbaa !19 + %65 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %65, %43 br i1 %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 .lr.ph.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i - %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %72, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %.0.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] - %69 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %70 = getelementptr inbounds i32, ptr %46, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %71 = load <2 x i64>, ptr %70, align 1, !tbaa !115 - store <2 x i64> %71, ptr %69, align 16, !tbaa !115 - %72 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 - %73 = icmp slt i64 %72, %57 - br i1 %73, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 + %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %69, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %50, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] + %66 = getelementptr inbounds i32, ptr %44, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %67 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %68 = load <2 x i64>, ptr %67, align 1, !tbaa !115 + store <2 x i64> %68, ptr %66, align 16, !tbaa !115 + %69 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 + %70 = icmp slt i64 %69, %54 + br i1 %70, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 _ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i - %.not.i.i.i.i.i.i.i.i = icmp eq i64 %44, %34 - br i1 %.not.i.i.i.i.i.i.i.i, label %74, label %thread-pre-split.i.i.i.i.i.i.i + %.not.i.i.i.i.i.i.i.i = icmp eq i64 %43, %34 + br i1 %.not.i.i.i.i.i.i.i.i, label %71, label %thread-pre-split.i.i.i.i.i.i.i thread-pre-split.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %34, i64 noundef 1) - to label %.noexc unwind label %127 + to label %.noexc unwind label %124 .noexc: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %.pr.i.i.i.i.i.i.i = load i64, ptr %43, align 8, !tbaa !106 + %.pr.i.i.i.i.i.i.i = load i64, ptr %42, align 8, !tbaa !106 %.pre = load ptr, ptr %3, align 8, !tbaa !108 - br label %74 + br label %71 -74: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit - %75 = phi ptr [ %.pre, %.noexc ], [ %46, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %76 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %77 = sdiv i64 %76, 4 - %78 = shl nsw i64 %77, 2 - %79 = icmp sgt i64 %76, 3 - br i1 %79, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i +71: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %72 = phi ptr [ %.pre, %.noexc ], [ %45, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %73 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %74 = sdiv i64 %73, 4 + %75 = shl nsw i64 %74, 2 + %76 = icmp sgt i64 %73, 3 + br i1 %76, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i -._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %74 - %80 = icmp slt i64 %78, %76 - br i1 %80, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit +._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %71 + %77 = icmp slt i64 %75, %73 + br i1 %77, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit .lr.ph.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %84, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %78, %._crit_edge.i.i.i.i.i.i.i.i ] - %81 = getelementptr inbounds i32, ptr %75, i64 %.05.i.i.i.i.i.i.i.i.i - %82 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i - %83 = load i32, ptr %82, align 4, !tbaa !19 - store i32 %83, ptr %81, align 4, !tbaa !19 - %84 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %84, %76 + %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %81, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %75, %._crit_edge.i.i.i.i.i.i.i.i ] + %78 = getelementptr inbounds i32, ptr %72, i64 %.05.i.i.i.i.i.i.i.i.i + %79 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i + %80 = load i32, ptr %79, align 4, !tbaa !19 + store i32 %80, ptr %78, align 4, !tbaa !19 + %81 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %81, %73 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i: ; preds = %74, %.lr.ph.i.i.i.i.i.i.i.i - %.011.i.i.i.i.i.i.i.i = phi i64 [ %88, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %74 ] - %85 = getelementptr inbounds nuw i32, ptr %75, i64 %.011.i.i.i.i.i.i.i.i - %86 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i - %87 = load <2 x i64>, ptr %86, align 16, !tbaa !115 - store <2 x i64> %87, ptr %85, align 16, !tbaa !115 - %88 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 - %89 = icmp slt i64 %88, %78 - br i1 %89, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i: ; preds = %71, %.lr.ph.i.i.i.i.i.i.i.i + %.011.i.i.i.i.i.i.i.i = phi i64 [ %85, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %71 ] + %82 = getelementptr inbounds nuw i32, ptr %72, i64 %.011.i.i.i.i.i.i.i.i + %83 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i + %84 = load <2 x i64>, ptr %83, align 16, !tbaa !115 + store <2 x i64> %84, ptr %82, align 16, !tbaa !115 + %85 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 + %86 = icmp slt i64 %85, %75 + br i1 %86, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i call void @free(ptr noundef nonnull %.sroa.0.0) #18 - %90 = load ptr, ptr %3, align 8, !tbaa !108 - %91 = load i64, ptr %43, align 8, !tbaa !106 - %92 = load i64, ptr %8, align 8, !tbaa !106 - %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %92, %91 - br i1 %.not.i.i.i.i.i.i.i.i43, label %93, label %thread-pre-split.i.i.i.i.i.i.i44 + %87 = load ptr, ptr %3, align 8, !tbaa !108 + %88 = load i64, ptr %42, align 8, !tbaa !106 + %89 = load i64, ptr %8, align 8, !tbaa !106 + %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %89, %88 + br i1 %.not.i.i.i.i.i.i.i.i43, label %90, label %thread-pre-split.i.i.i.i.i.i.i44 thread-pre-split.i.i.i.i.i.i.i44: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %91, i64 noundef 1) - to label %.noexc52 unwind label %125 + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %88, i64 noundef 1) + to label %.noexc52 unwind label %122 .noexc52: ; preds = %thread-pre-split.i.i.i.i.i.i.i44 %.pr.i.i.i.i.i.i.i45 = load i64, ptr %8, align 8, !tbaa !106 - br label %93 + br label %90 -93: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - %94 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %91, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] - %95 = load ptr, ptr %5, align 8, !tbaa !108 - %96 = sdiv i64 %94, 4 - %97 = shl nsw i64 %96, 2 - %98 = icmp sgt i64 %94, 3 - br i1 %98, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 +90: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit + %91 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %88, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] + %92 = load ptr, ptr %5, align 8, !tbaa !108 + %93 = sdiv i64 %91, 4 + %94 = shl nsw i64 %93, 2 + %95 = icmp sgt i64 %91, 3 + br i1 %95, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 -._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %93 - %99 = icmp slt i64 %97, %94 - br i1 %99, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit +._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %90 + %96 = icmp slt i64 %94, %91 + br i1 %96, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit .lr.ph.i.i.i.i.i.i.i.i.i47: ; preds = %._crit_edge.i.i.i.i.i.i.i.i46, %.lr.ph.i.i.i.i.i.i.i.i.i47 - %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %103, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %97, %._crit_edge.i.i.i.i.i.i.i.i46 ] - %100 = getelementptr inbounds i32, ptr %95, i64 %.05.i.i.i.i.i.i.i.i.i48 - %101 = getelementptr inbounds i32, ptr %90, i64 %.05.i.i.i.i.i.i.i.i.i48 - %102 = load i32, ptr %101, align 4, !tbaa !19 - store i32 %102, ptr %100, align 4, !tbaa !19 - %103 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %103, %94 + %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %100, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %94, %._crit_edge.i.i.i.i.i.i.i.i46 ] + %97 = getelementptr inbounds i32, ptr %92, i64 %.05.i.i.i.i.i.i.i.i.i48 + %98 = getelementptr inbounds i32, ptr %87, i64 %.05.i.i.i.i.i.i.i.i.i48 + %99 = load i32, ptr %98, align 4, !tbaa !19 + store i32 %99, ptr %97, align 4, !tbaa !19 + %100 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %100, %91 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i49, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i47, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %93, %.lr.ph.i.i.i.i.i.i.i.i50 - %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %107, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %93 ] - %104 = getelementptr inbounds nuw i32, ptr %95, i64 %.011.i.i.i.i.i.i.i.i51 - %105 = getelementptr inbounds nuw i32, ptr %90, i64 %.011.i.i.i.i.i.i.i.i51 - %106 = load <2 x i64>, ptr %105, align 16, !tbaa !115 - store <2 x i64> %106, ptr %104, align 16, !tbaa !115 - %107 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 - %108 = icmp slt i64 %107, %97 - br i1 %108, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %90, %.lr.ph.i.i.i.i.i.i.i.i50 + %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %104, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %90 ] + %101 = getelementptr inbounds nuw i32, ptr %92, i64 %.011.i.i.i.i.i.i.i.i51 + %102 = getelementptr inbounds nuw i32, ptr %87, i64 %.011.i.i.i.i.i.i.i.i51 + %103 = load <2 x i64>, ptr %102, align 16, !tbaa !115 + store <2 x i64> %103, ptr %101, align 16, !tbaa !115 + %104 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 + %105 = icmp slt i64 %104, %94 + br i1 %105, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i47, %._crit_edge.i.i.i.i.i.i.i.i46 call void @llvm.lifetime.start.p0(ptr nonnull %6) - %109 = load i64, ptr %17, align 8, !tbaa !13 - %110 = mul nsw i64 %109, 3 + %106 = load i64, ptr %17, align 8, !tbaa !13 + %107 = mul nsw i64 %106, 3 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, i8 0, i64 16, i1 false) - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %110, i64 noundef 1) + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %107, i64 noundef 1) to label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit unwind label %.body53 .body53: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %111 = landingpad { ptr, i32 } + %108 = landingpad { ptr, i32 } cleanup - %112 = load ptr, ptr %6, align 8, !tbaa !108 - call void @free(ptr noundef %112) #18 + %109 = load ptr, ptr %6, align 8, !tbaa !108 + call void @free(ptr noundef %109) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) br label %.body _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %113 = load ptr, ptr %2, align 8, !tbaa !119 - %114 = load ptr, ptr %6, align 8, !tbaa !119 - store ptr %114, ptr %2, align 8, !tbaa !119 - store ptr %113, ptr %6, align 8, !tbaa !119 - %115 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %116 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %117 = load i64, ptr %115, align 8, !tbaa !12 - %118 = load i64, ptr %116, align 8, !tbaa !12 - store i64 %118, ptr %115, align 8, !tbaa !12 - store i64 %117, ptr %116, align 8, !tbaa !12 - call void @free(ptr noundef %113) #18 + %110 = load ptr, ptr %2, align 8, !tbaa !119 + %111 = load ptr, ptr %6, align 8, !tbaa !119 + store ptr %111, ptr %2, align 8, !tbaa !119 + store ptr %110, ptr %6, align 8, !tbaa !119 + %112 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %113 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %114 = load i64, ptr %112, align 8, !tbaa !12 + %115 = load i64, ptr %113, align 8, !tbaa !12 + store i64 %115, ptr %112, align 8, !tbaa !12 + store i64 %114, ptr %113, align 8, !tbaa !12 + call void @free(ptr noundef %110) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) - %119 = load i64, ptr %17, align 8, !tbaa !13 - %120 = icmp sgt i64 %119, 0 + %116 = load i64, ptr %17, align 8, !tbaa !13 + %117 = icmp sgt i64 %116, 0 %.pre93 = load ptr, ptr %5, align 8, !tbaa !108 - br i1 %120, label %.preheader.lr.ph, label %._crit_edge75 + br i1 %117, label %.preheader.lr.ph, label %._crit_edge75 .preheader.lr.ph: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit - %121 = load ptr, ptr %0, align 8, !tbaa !16 - %122 = load ptr, ptr %2, align 8, !tbaa !108 + %118 = load ptr, ptr %0, align 8, !tbaa !16 + %119 = load ptr, ptr %2, align 8, !tbaa !108 br label %.preheader -.preheader: ; preds = %.preheader.lr.ph, %129 - %indvars.iv89 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next90, %129 ] - %123 = getelementptr i32, ptr %121, i64 %indvars.iv89 - %124 = trunc nuw nsw i64 %indvars.iv89 to i32 - br label %130 +.preheader: ; preds = %.preheader.lr.ph, %126 + %indvars.iv89 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next90, %126 ] + %120 = getelementptr i32, ptr %118, i64 %indvars.iv89 + %121 = trunc nuw nsw i64 %indvars.iv89 to i32 + br label %127 -._crit_edge75: ; preds = %129, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit +._crit_edge75: ; preds = %126, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit call void @free(ptr noundef %.pre93) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) ret void -125: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge - %126 = landingpad { ptr, i32 } +122: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge + %123 = landingpad { ptr, i32 } cleanup br label %.body -127: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %128 = landingpad { ptr, i32 } +124: ; preds = %thread-pre-split.i.i.i.i.i.i.i + %125 = landingpad { ptr, i32 } cleanup call void @free(ptr noundef nonnull %.sroa.0.0) #18 br label %.body -129: ; preds = %130 +126: ; preds = %127 %indvars.iv.next90 = add nuw nsw i64 %indvars.iv89, 1 - %exitcond92.not = icmp eq i64 %indvars.iv.next90, %119 + %exitcond92.not = icmp eq i64 %indvars.iv.next90, %116 br i1 %exitcond92.not, label %._crit_edge75, label %.preheader, !llvm.loop !127 -130: ; preds = %.preheader, %130 - %indvars.iv85 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next86, %130 ] - %131 = mul nuw nsw i64 %119, %indvars.iv85 - %132 = getelementptr i32, ptr %123, i64 %131 +127: ; preds = %.preheader, %127 + %indvars.iv85 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next86, %127 ] + %128 = mul nuw nsw i64 %116, %indvars.iv85 + %129 = getelementptr i32, ptr %120, i64 %128 + %130 = load i32, ptr %129, align 4, !tbaa !19 + %131 = sext i32 %130 to i64 + %132 = getelementptr inbounds i32, ptr %.pre93, i64 %131 %133 = load i32, ptr %132, align 4, !tbaa !19 %134 = sext i32 %133 to i64 - %135 = getelementptr inbounds i32, ptr %.pre93, i64 %134 - %136 = load i32, ptr %135, align 4, !tbaa !19 + %135 = getelementptr inbounds i32, ptr %119, i64 %134 + store i32 %121, ptr %135, align 4, !tbaa !19 + %136 = load i32, ptr %129, align 4, !tbaa !19 %137 = sext i32 %136 to i64 - %138 = getelementptr inbounds i32, ptr %122, i64 %137 - store i32 %124, ptr %138, align 4, !tbaa !19 - %139 = load i32, ptr %132, align 4, !tbaa !19 - %140 = sext i32 %139 to i64 - %141 = getelementptr inbounds i32, ptr %.pre93, i64 %140 - %142 = load i32, ptr %141, align 4, !tbaa !19 - %143 = add nsw i32 %142, 1 - store i32 %143, ptr %141, align 4, !tbaa !19 + %138 = getelementptr inbounds i32, ptr %.pre93, i64 %137 + %139 = load i32, ptr %138, align 4, !tbaa !19 + %140 = add nsw i32 %139, 1 + store i32 %140, ptr %138, align 4, !tbaa !19 %indvars.iv.next86 = add nuw nsw i64 %indvars.iv85, 1 %exitcond88.not = icmp eq i64 %indvars.iv.next86, 3 - br i1 %exitcond88.not, label %129, label %130, !llvm.loop !128 + br i1 %exitcond88.not, label %126, label %127, !llvm.loop !128 -.body: ; preds = %127, %40, %.body53, %125 - %.pn41 = phi { ptr, i32 } [ %111, %.body53 ], [ %126, %125 ], [ %128, %127 ], [ %41, %40 ] - %144 = load ptr, ptr %5, align 8, !tbaa !108 - call void @free(ptr noundef %144) #18 +.body: ; preds = %124, %40, %.body53, %122 + %.pn41 = phi { ptr, i32 } [ %108, %.body53 ], [ %123, %122 ], [ %125, %124 ], [ %41, %40 ] + %141 = load ptr, ptr %5, align 8, !tbaa !108 + call void @free(ptr noundef %141) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) br label %common.resume } diff --git a/bench/linux/optimized/af_netlink.ll b/bench/linux/optimized/af_netlink.ll index 5f51e263b6f..f7f926343a4 100644 --- a/bench/linux/optimized/af_netlink.ll +++ b/bench/linux/optimized/af_netlink.ll @@ -2569,7 +2569,7 @@ define internal fastcc range(i32 -16, -17) i32 @netlink_insert(ptr noundef %0, i 93: ; preds = %89, %87 %94 = phi ptr [ %88, %87 ], [ %92, %89 ] %95 = icmp eq ptr %94, null - br i1 %95, label %211, label %96 + br i1 %95, label %207, label %96 96: ; preds = %93 call void @llvm.lifetime.start.p0(ptr nonnull %4) @@ -2653,7 +2653,7 @@ define internal fastcc range(i32 -16, -17) i32 @netlink_insert(ptr noundef %0, i 129: ; preds = %128, %125 call void @__rcu_read_unlock() #23 %130 = call ptr @rhashtable_insert_slow(ptr noundef %18, ptr noundef nonnull %5, ptr noundef nonnull %34) #23 - br label %224 + br label %220 131: ; preds = %.loopexit8 %132 = load ptr, ptr %94, align 8 @@ -2728,137 +2728,133 @@ define internal fastcc range(i32 -16, -17) i32 @netlink_insert(ptr noundef %0, i %181 = inttoptr i64 %138 to ptr store volatile ptr %181, ptr %34, align 8 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; incl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %166, ptr nonnull elementtype(i32) %166) #23, !srcloc !29 - %182 = ptrtoint ptr %34 to i64 - %183 = and i64 %182, 1 - %184 = icmp eq i64 %183, 0 - %185 = select i1 %184, ptr %34, ptr null call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !76 - store volatile ptr %185, ptr %94, align 8 + store volatile ptr %34, ptr %94, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !77 - %186 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 - %187 = icmp ult i8 %186, 2 - call void @llvm.assume(i1 %187) - %188 = icmp eq i8 %186, 0 - br i1 %188, label %192, label %189, !prof !9 - -189: ; preds = %180 - %190 = call i64 @llvm.read_register.i64(metadata !0) - %191 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %190) #23, !srcloc !78 - call void @llvm.write_register.i64(metadata !0, i64 %191) + %182 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 + %183 = icmp ult i8 %182, 2 + call void @llvm.assume(i1 %183) + %184 = icmp eq i8 %182, 0 + br i1 %184, label %188, label %185, !prof !9 + +185: ; preds = %180 + %186 = call i64 @llvm.read_register.i64(metadata !0) + %187 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %186) #23, !srcloc !78 + call void @llvm.write_register.i64(metadata !0, i64 %187) + br label %188 + +188: ; preds = %185, %180 + %189 = and i64 %97, 512 + %190 = icmp eq i64 %189, 0 + br i1 %190, label %192, label %191 + +191: ; preds = %188 + call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !74 br label %192 -192: ; preds = %189, %180 - %193 = and i64 %97, 512 - %194 = icmp eq i64 %193, 0 - br i1 %194, label %196, label %195 +192: ; preds = %191, %188 + %193 = load volatile i32, ptr %166, align 4 + %194 = load i32, ptr %40, align 64 + %195 = lshr i32 %194, 2 + %196 = mul nuw i32 %195, 3 + %197 = icmp ugt i32 %193, %196 + br i1 %197, label %198, label %207 + +198: ; preds = %192 + %199 = getelementptr inbounds nuw i8, ptr %18, i64 24 + %200 = load i32, ptr %199, align 8 + %201 = add i32 %200, -1 + %202 = icmp ult i32 %201, %194 + br i1 %202, label %207, label %203 + +203: ; preds = %198 + %204 = getelementptr inbounds nuw i8, ptr %18, i64 64 + %205 = load ptr, ptr @system_wq, align 8 + %206 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %205, ptr noundef nonnull %204) #23 + br label %207 -195: ; preds = %192 - call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !74 - br label %196 - -196: ; preds = %195, %192 - %197 = load volatile i32, ptr %166, align 4 - %198 = load i32, ptr %40, align 64 - %199 = lshr i32 %198, 2 - %200 = mul nuw i32 %199, 3 - %201 = icmp ugt i32 %197, %200 - br i1 %201, label %202, label %211 - -202: ; preds = %196 - %203 = getelementptr inbounds nuw i8, ptr %18, i64 24 - %204 = load i32, ptr %203, align 8 - %205 = add i32 %204, -1 - %206 = icmp ult i32 %205, %198 - br i1 %206, label %211, label %207 - -207: ; preds = %202 - %208 = getelementptr inbounds nuw i8, ptr %18, i64 64 - %209 = load ptr, ptr @system_wq, align 8 - %210 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %209, ptr noundef nonnull %208) #23 - br label %211 - -211: ; preds = %223, %220, %207, %202, %196, %93 - %212 = phi ptr [ inttoptr (i64 -12 to ptr), %93 ], [ null, %207 ], [ null, %202 ], [ null, %196 ], [ %213, %220 ], [ %213, %223 ] +207: ; preds = %219, %216, %203, %198, %192, %93 + %208 = phi ptr [ inttoptr (i64 -12 to ptr), %93 ], [ null, %203 ], [ null, %198 ], [ null, %192 ], [ %209, %216 ], [ %209, %219 ] call void @__rcu_read_unlock() #23 - br label %224 + br label %220 .loopexit: ; preds = %156, %165 - %213 = phi ptr [ inttoptr (i64 -7 to ptr), %165 ], [ %152, %156 ] + %209 = phi ptr [ inttoptr (i64 -7 to ptr), %165 ], [ %152, %156 ] call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !70 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; andb ${1:b},$0", "=*m,iq,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %94, i32 -2, ptr nonnull elementtype(i8) %94) #23, !srcloc !71 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !72 - %214 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 - %215 = icmp ult i8 %214, 2 - call void @llvm.assume(i1 %215) - %216 = icmp eq i8 %214, 0 - br i1 %216, label %220, label %217, !prof !9 - -217: ; preds = %.loopexit - %218 = call i64 @llvm.read_register.i64(metadata !0) - %219 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %218) #23, !srcloc !73 - call void @llvm.write_register.i64(metadata !0, i64 %219) - br label %220 - -220: ; preds = %217, %.loopexit - %221 = and i64 %97, 512 - %222 = icmp eq i64 %221, 0 - br i1 %222, label %211, label %223 - -223: ; preds = %220 + %210 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 + %211 = icmp ult i8 %210, 2 + call void @llvm.assume(i1 %211) + %212 = icmp eq i8 %210, 0 + br i1 %212, label %216, label %213, !prof !9 + +213: ; preds = %.loopexit + %214 = call i64 @llvm.read_register.i64(metadata !0) + %215 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %214) #23, !srcloc !73 + call void @llvm.write_register.i64(metadata !0, i64 %215) + br label %216 + +216: ; preds = %213, %.loopexit + %217 = and i64 %97, 512 + %218 = icmp eq i64 %217, 0 + br i1 %218, label %207, label %219 + +219: ; preds = %216 call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !74 - br label %211 - -224: ; preds = %211, %129 - %225 = phi ptr [ %130, %129 ], [ %212, %211 ] - %226 = icmp ugt ptr %225, inttoptr (i64 -4096 to ptr) - %227 = ptrtoint ptr %225 to i64 - %228 = trunc i64 %227 to i32 - %229 = icmp eq ptr %225, null - %230 = select i1 %229, i32 0, i32 -17 - %231 = select i1 %226, i32 %228, i32 %230 + br label %207 + +220: ; preds = %207, %129 + %221 = phi ptr [ %130, %129 ], [ %208, %207 ] + %222 = icmp ugt ptr %221, inttoptr (i64 -4096 to ptr) + %223 = ptrtoint ptr %221 to i64 + %224 = trunc i64 %223 to i32 + %225 = icmp eq ptr %221, null + %226 = select i1 %225, i32 0, i32 -17 + %227 = select i1 %222, i32 %224, i32 %226 call void @llvm.lifetime.end.p0(ptr nonnull %5) - switch i32 %231, label %.thread5.fold.split [ - i32 0, label %240 + switch i32 %227, label %.thread5.fold.split [ + i32 0, label %236 i32 -16, label %.thread5 - i32 -17, label %232 + i32 -17, label %228 ], !prof !79 -232: ; preds = %224 +228: ; preds = %220 br label %.thread5 -.thread5.fold.split: ; preds = %224 +.thread5.fold.split: ; preds = %220 br label %.thread5 -.thread5: ; preds = %224, %.thread5.fold.split, %232 - %233 = phi i32 [ -98, %232 ], [ -75, %224 ], [ %231, %.thread5.fold.split ] - %234 = call i32 asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; xaddl $0, $1\0A", "=r,=*m,0,*m,~{memory},~{cc},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %19, i32 -1, ptr nonnull elementtype(i32) %19) #23, !srcloc !30 - %235 = icmp eq i32 %234, 1 - br i1 %235, label %239, label %236 +.thread5: ; preds = %220, %.thread5.fold.split, %228 + %229 = phi i32 [ -98, %228 ], [ -75, %220 ], [ %227, %.thread5.fold.split ] + %230 = call i32 asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; xaddl $0, $1\0A", "=r,=*m,0,*m,~{memory},~{cc},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %19, i32 -1, ptr nonnull elementtype(i32) %19) #23, !srcloc !30 + %231 = icmp eq i32 %230, 1 + br i1 %231, label %235, label %232 -236: ; preds = %.thread5 - %237 = icmp sgt i32 %234, 0 - br i1 %237, label %.thread7, label %238, !prof !9 +232: ; preds = %.thread5 + %233 = icmp sgt i32 %230, 0 + br i1 %233, label %.thread7, label %234, !prof !9 -238: ; preds = %236 +234: ; preds = %232 call void @refcount_warn_saturate(ptr noundef nonnull %19, i32 noundef 3) #23 br label %.thread7 -239: ; preds = %.thread5 +235: ; preds = %.thread5 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !31 call void @sk_free(ptr noundef %0) #23 br label %.thread7 -240: ; preds = %224 +236: ; preds = %220 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !80 - %241 = icmp ne i32 %1, 0 - %242 = zext i1 %241 to i8 - store volatile i8 %242, ptr %13, align 8 + %237 = icmp ne i32 %1, 0 + %238 = zext i1 %237 to i8 + store volatile i8 %238, ptr %13, align 8 br label %.thread7 -.thread7: ; preds = %236, %238, %240, %239, %2 - %243 = phi i32 [ %12, %2 ], [ 0, %240 ], [ %233, %239 ], [ %233, %238 ], [ %233, %236 ] +.thread7: ; preds = %232, %234, %236, %235, %2 + %239 = phi i32 [ %12, %2 ], [ 0, %236 ], [ %229, %235 ], [ %229, %234 ], [ %229, %232 ] call void @release_sock(ptr noundef %0) #23 - ret i32 %243 + ret i32 %239 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/fatent.ll b/bench/linux/optimized/fatent.ll index 3b20669159e..e138642d2f9 100644 --- a/bench/linux/optimized/fatent.ll +++ b/bench/linux/optimized/fatent.ll @@ -2098,22 +2098,10 @@ define internal range(i32 0, 268435456) i32 @fat32_ent_get(ptr noundef readonly %2 = getelementptr inbounds nuw i8, ptr %0, i64 8 %3 = load ptr, ptr %2, align 8 %4 = load i32, ptr %3, align 4 - %5 = ptrtoint ptr %3 to i64 - %6 = and i64 %5, 3 - %7 = icmp eq i64 %6, 0 - br i1 %7, label %9, label %8, !prof !31 - -8: ; preds = %1 - tail call void asm sideeffect "427: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 427b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 427) #9, !srcloc !41 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 150, i32 2305, i64 12) #9, !srcloc !42 - tail call void asm sideeffect "428: nop\0A\09.pushsection .discard.instr_end\0A\09.long 428b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 428) #9, !srcloc !43 - br label %9 - -9: ; preds = %8, %1 - %10 = and i32 %4, 268435455 - %11 = icmp samesign ugt i32 %10, 268435446 - %12 = select i1 %11, i32 268435455, i32 %10 - ret i32 %12 + %5 = and i32 %4, 268435455 + %6 = icmp samesign ugt i32 %5, 268435446 + %7 = select i1 %6, i32 268435455, i32 %5 + ret i32 %7 } ; Function Attrs: fn_ret_thunk_extern nounwind null_pointer_is_valid @@ -2122,9 +2110,9 @@ define internal void @fat32_ent_put(ptr noundef readonly captures(none) %0, i32 br i1 %3, label %5, label %4, !prof !31 4: ; preds = %2 - tail call void asm sideeffect "429: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 429b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 429) #9, !srcloc !44 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 189, i32 2305, i64 12) #9, !srcloc !45 - tail call void asm sideeffect "430: nop\0A\09.pushsection .discard.instr_end\0A\09.long 430b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 430) #9, !srcloc !46 + tail call void asm sideeffect "429: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 429b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 429) #9, !srcloc !41 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 189, i32 2305, i64 12) #9, !srcloc !42 + tail call void asm sideeffect "430: nop\0A\09.pushsection .discard.instr_end\0A\09.long 430b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 430) #9, !srcloc !43 br label %5 5: ; preds = %4, %2 @@ -2184,9 +2172,9 @@ define internal void @fat16_ent_set_ptr(ptr noundef captures(none) initializes(( br i1 %4, label %6, label %5, !prof !31 5: ; preds = %2 - tail call void asm sideeffect "417: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 417b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 417) #9, !srcloc !47 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 59, i32 2305, i64 12) #9, !srcloc !48 - tail call void asm sideeffect "418: nop\0A\09.pushsection .discard.instr_end\0A\09.long 418b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 418) #9, !srcloc !49 + tail call void asm sideeffect "417: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 417b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 417) #9, !srcloc !44 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 59, i32 2305, i64 12) #9, !srcloc !45 + tail call void asm sideeffect "418: nop\0A\09.pushsection .discard.instr_end\0A\09.long 418b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 418) #9, !srcloc !46 br label %6 6: ; preds = %5, %2 @@ -2206,22 +2194,10 @@ define internal range(i32 0, 268435456) i32 @fat16_ent_get(ptr noundef readonly %2 = getelementptr inbounds nuw i8, ptr %0, i64 8 %3 = load ptr, ptr %2, align 8 %4 = load i16, ptr %3, align 2 - %5 = ptrtoint ptr %3 to i64 - %6 = and i64 %5, 1 - %7 = icmp eq i64 %6, 0 - br i1 %7, label %9, label %8, !prof !31 - -8: ; preds = %1 - tail call void asm sideeffect "425: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 425b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 425) #9, !srcloc !50 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 141, i32 2305, i64 12) #9, !srcloc !51 - tail call void asm sideeffect "426: nop\0A\09.pushsection .discard.instr_end\0A\09.long 426b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 426) #9, !srcloc !52 - br label %9 - -9: ; preds = %8, %1 - %10 = zext i16 %4 to i32 - %11 = icmp ugt i16 %4, -10 - %12 = select i1 %11, i32 268435455, i32 %10 - ret i32 %12 + %5 = zext i16 %4 to i32 + %6 = icmp ugt i16 %4, -10 + %7 = select i1 %6, i32 268435455, i32 %5 + ret i32 %7 } ; Function Attrs: fn_ret_thunk_extern nounwind null_pointer_is_valid @@ -2276,9 +2252,9 @@ define internal void @fat12_ent_blocknr(ptr noundef readonly captures(none) %0, br i1 %12, label %14, label %13, !prof !31 13: ; preds = %8, %4 - tail call void asm sideeffect "409: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 409b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 409) #9, !srcloc !53 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 28, i32 2305, i64 12) #9, !srcloc !54 - tail call void asm sideeffect "410: nop\0A\09.pushsection .discard.instr_end\0A\09.long 410b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 410) #9, !srcloc !55 + tail call void asm sideeffect "409: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 409b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 409) #9, !srcloc !47 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 28, i32 2305, i64 12) #9, !srcloc !48 + tail call void asm sideeffect "410: nop\0A\09.pushsection .discard.instr_end\0A\09.long 410b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 410) #9, !srcloc !49 br label %14 14: ; preds = %13, %8 @@ -2321,9 +2297,9 @@ define internal void @fat12_ent_set_ptr(ptr noundef captures(none) initializes(( br i1 %13, label %15, label %14, !prof !31 14: ; preds = %12 - tail call void asm sideeffect "413: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 413b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 413) #9, !srcloc !56 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 47, i32 2305, i64 12) #9, !srcloc !57 - tail call void asm sideeffect "414: nop\0A\09.pushsection .discard.instr_end\0A\09.long 414b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 414) #9, !srcloc !58 + tail call void asm sideeffect "413: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 413b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 413) #9, !srcloc !50 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 47, i32 2305, i64 12) #9, !srcloc !51 + tail call void asm sideeffect "414: nop\0A\09.pushsection .discard.instr_end\0A\09.long 414b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 414) #9, !srcloc !52 %.pre1 = load ptr, ptr %3, align 8 br label %15 @@ -2345,9 +2321,9 @@ define internal void @fat12_ent_set_ptr(ptr noundef captures(none) initializes(( br i1 %26, label %28, label %27, !prof !31 27: ; preds = %25 - tail call void asm sideeffect "415: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 415b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 415) #9, !srcloc !59 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 51, i32 2305, i64 12) #9, !srcloc !60 - tail call void asm sideeffect "416: nop\0A\09.pushsection .discard.instr_end\0A\09.long 416b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 416) #9, !srcloc !61 + tail call void asm sideeffect "415: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 415b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 415) #9, !srcloc !53 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 51, i32 2305, i64 12) #9, !srcloc !54 + tail call void asm sideeffect "416: nop\0A\09.pushsection .discard.instr_end\0A\09.long 416b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 416) #9, !srcloc !55 %.pre = load ptr, ptr %3, align 8 br label %28 @@ -2383,9 +2359,9 @@ define internal noundef range(i32 -5, 1) i32 @fat12_ent_bread(ptr noundef %0, pt br i1 %11, label %12, label %13, !prof !13 12: ; preds = %4 - tail call void asm sideeffect "421: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 421b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 421) #9, !srcloc !62 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 74, i32 2305, i64 12) #9, !srcloc !63 - tail call void asm sideeffect "422: nop\0A\09.pushsection .discard.instr_end\0A\09.long 422b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 422) #9, !srcloc !64 + tail call void asm sideeffect "421: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 421b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 421) #9, !srcloc !56 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 74, i32 2305, i64 12) #9, !srcloc !57 + tail call void asm sideeffect "422: nop\0A\09.pushsection .discard.instr_end\0A\09.long 422b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 422) #9, !srcloc !58 %.pre = load ptr, ptr %6, align 8 br label %13 @@ -2433,9 +2409,9 @@ define internal noundef range(i32 -5, 1) i32 @fat12_ent_bread(ptr noundef %0, pt br i1 %43, label %45, label %44, !prof !31 44: ; preds = %37 - tail call void asm sideeffect "413: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 413b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 413) #9, !srcloc !56 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 47, i32 2305, i64 12) #9, !srcloc !57 - tail call void asm sideeffect "414: nop\0A\09.pushsection .discard.instr_end\0A\09.long 414b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 414) #9, !srcloc !58 + tail call void asm sideeffect "413: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 413b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 413) #9, !srcloc !50 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 47, i32 2305, i64 12) #9, !srcloc !51 + tail call void asm sideeffect "414: nop\0A\09.pushsection .discard.instr_end\0A\09.long 414b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 414) #9, !srcloc !52 %.pre5 = load ptr, ptr %5, align 8 br label %45 @@ -2464,9 +2440,9 @@ define internal noundef range(i32 -5, 1) i32 @fat12_ent_bread(ptr noundef %0, pt br i1 %61, label %63, label %62, !prof !31 62: ; preds = %54 - tail call void asm sideeffect "415: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 415b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 415) #9, !srcloc !59 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 51, i32 2305, i64 12) #9, !srcloc !60 - tail call void asm sideeffect "416: nop\0A\09.pushsection .discard.instr_end\0A\09.long 416b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 416) #9, !srcloc !61 + tail call void asm sideeffect "415: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 415b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 415) #9, !srcloc !53 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 51, i32 2305, i64 12) #9, !srcloc !54 + tail call void asm sideeffect "416: nop\0A\09.pushsection .discard.instr_end\0A\09.long 416b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 416) #9, !srcloc !55 %.pre3 = load ptr, ptr %5, align 8 %.pre4 = load ptr, ptr %35, align 8 br label %63 @@ -2648,9 +2624,9 @@ define internal noundef range(i32 0, 2) i32 @fat12_ent_next(ptr noundef captures br i1 %24, label %25, label %26, !prof !13 25: ; preds = %22 - tail call void asm sideeffect "431: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 431b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 431) #9, !srcloc !65 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 204, i32 2305, i64 12) #9, !srcloc !66 - tail call void asm sideeffect "432: nop\0A\09.pushsection .discard.instr_end\0A\09.long 432b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 432) #9, !srcloc !67 + tail call void asm sideeffect "431: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 431b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 431) #9, !srcloc !59 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 204, i32 2305, i64 12) #9, !srcloc !60 + tail call void asm sideeffect "432: nop\0A\09.pushsection .discard.instr_end\0A\09.long 432b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 432) #9, !srcloc !61 %.pre2 = load ptr, ptr %4, align 8 %.pre3 = load ptr, ptr %3, align 8 %.phi.trans.insert = getelementptr inbounds nuw i8, ptr %.pre3, i64 40 @@ -2669,9 +2645,9 @@ define internal noundef range(i32 0, 2) i32 @fat12_ent_next(ptr noundef captures br i1 %32, label %33, label %34, !prof !13 33: ; preds = %26 - tail call void asm sideeffect "433: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 433b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 433) #9, !srcloc !68 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 206, i32 2305, i64 12) #9, !srcloc !69 - tail call void asm sideeffect "434: nop\0A\09.pushsection .discard.instr_end\0A\09.long 434b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 434) #9, !srcloc !70 + tail call void asm sideeffect "433: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 433b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 433) #9, !srcloc !62 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 206, i32 2305, i64 12) #9, !srcloc !63 + tail call void asm sideeffect "434: nop\0A\09.pushsection .discard.instr_end\0A\09.long 434b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 434) #9, !srcloc !64 %.pre7 = load ptr, ptr %3, align 8 %.phi.trans.insert8 = getelementptr inbounds nuw i8, ptr %.pre7, i64 40 %.pre9 = load ptr, ptr %.phi.trans.insert8, align 8 @@ -2699,9 +2675,9 @@ define internal noundef range(i32 0, 2) i32 @fat12_ent_next(ptr noundef captures br i1 %44, label %46, label %45, !prof !31 45: ; preds = %42 - tail call void asm sideeffect "435: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 435b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 435) #9, !srcloc !71 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 214, i32 2305, i64 12) #9, !srcloc !72 - tail call void asm sideeffect "436: nop\0A\09.pushsection .discard.instr_end\0A\09.long 436b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 436) #9, !srcloc !73 + tail call void asm sideeffect "435: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 435b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 435) #9, !srcloc !65 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 214, i32 2305, i64 12) #9, !srcloc !66 + tail call void asm sideeffect "436: nop\0A\09.pushsection .discard.instr_end\0A\09.long 436b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 436) #9, !srcloc !67 %.pre = load ptr, ptr %4, align 8 br label %46 @@ -2715,9 +2691,9 @@ define internal noundef range(i32 0, 2) i32 @fat12_ent_next(ptr noundef captures br i1 %52, label %54, label %53, !prof !31 53: ; preds = %46 - tail call void asm sideeffect "437: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 437b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 437) #9, !srcloc !74 - tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 215, i32 2305, i64 12) #9, !srcloc !75 - tail call void asm sideeffect "438: nop\0A\09.pushsection .discard.instr_end\0A\09.long 438b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 438) #9, !srcloc !76 + tail call void asm sideeffect "437: nop\0A\09.pushsection .discard.instr_begin\0A\09.long 437b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 437) #9, !srcloc !68 + tail call void asm sideeffect "1:\09.byte 0x0f, 0x0b\0A.pushsection __bug_table,\22aw\22\0A2:\09.long 1b - .\09# bug_entry::bug_addr\0A\09.long ${0:c} - .\09# bug_entry::file\0A\09.word ${1:c}\09# bug_entry::line\0A\09.word ${2:c}\09# bug_entry::flags\0A\09.org 2b+${3:c}\0A.popsection\0A998:\0A\09.pushsection .discard.reachable\0A\09.long 998b\0A\09.popsection\0A\09", "i,i,i,i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull @.str.3, i32 215, i32 2305, i64 12) #9, !srcloc !69 + tail call void asm sideeffect "438: nop\0A\09.pushsection .discard.instr_end\0A\09.long 438b - .\0A\09.popsection\0A\09", "i,~{dirflag},~{fpsr},~{flags}"(i32 438) #9, !srcloc !70 br label %54 54: ; preds = %53, %46 @@ -2866,39 +2842,33 @@ attributes #11 = { nounwind memory(none) } !38 = !{i64 2155580933, i64 2155580742, i64 2155580794, i64 2155580840, i64 2155580868} !39 = !{i64 2155581007, i64 2155581036, i64 2155581082, i64 2155581140, i64 2155581194, i64 2155581248, i64 2155581303, i64 2155581334, i64 2155581642, i64 2155581648, i64 2155581695, i64 2155581718, i64 2155581744} !40 = !{i64 2155582192, i64 2155582003, i64 2155582053, i64 2155582099, i64 2155582127} -!41 = !{i64 2155585977, i64 2155585786, i64 2155585838, i64 2155585884, i64 2155585912} -!42 = !{i64 2155586051, i64 2155586080, i64 2155586126, i64 2155586184, i64 2155586238, i64 2155586292, i64 2155586347, i64 2155586378, i64 2155586686, i64 2155586692, i64 2155586739, i64 2155586762, i64 2155586788} -!43 = !{i64 2155587236, i64 2155587047, i64 2155587097, i64 2155587143, i64 2155587171} -!44 = !{i64 2155588196, i64 2155588005, i64 2155588057, i64 2155588103, i64 2155588131} -!45 = !{i64 2155588270, i64 2155588299, i64 2155588345, i64 2155588403, i64 2155588457, i64 2155588511, i64 2155588566, i64 2155588597, i64 2155588905, i64 2155588911, i64 2155588958, i64 2155588981, i64 2155589007} -!46 = !{i64 2155589455, i64 2155589266, i64 2155589316, i64 2155589362, i64 2155589390} -!47 = !{i64 2155574014, i64 2155573823, i64 2155573875, i64 2155573921, i64 2155573949} -!48 = !{i64 2155574088, i64 2155574117, i64 2155574163, i64 2155574221, i64 2155574275, i64 2155574329, i64 2155574384, i64 2155574415, i64 2155574723, i64 2155574729, i64 2155574776, i64 2155574799, i64 2155574825} -!49 = !{i64 2155575272, i64 2155575083, i64 2155575133, i64 2155575179, i64 2155575207} -!50 = !{i64 2155583780, i64 2155583589, i64 2155583641, i64 2155583687, i64 2155583715} -!51 = !{i64 2155583854, i64 2155583883, i64 2155583929, i64 2155583987, i64 2155584041, i64 2155584095, i64 2155584150, i64 2155584181, i64 2155584489, i64 2155584495, i64 2155584542, i64 2155584565, i64 2155584591} -!52 = !{i64 2155585039, i64 2155584850, i64 2155584900, i64 2155584946, i64 2155584974} -!53 = !{i64 2155565662, i64 2155565471, i64 2155565523, i64 2155565569, i64 2155565597} -!54 = !{i64 2155565736, i64 2155565765, i64 2155565811, i64 2155565869, i64 2155565923, i64 2155565977, i64 2155566032, i64 2155566063, i64 2155566371, i64 2155566377, i64 2155566424, i64 2155566447, i64 2155566473} -!55 = !{i64 2155566920, i64 2155566731, i64 2155566781, i64 2155566827, i64 2155566855} -!56 = !{i64 2155569844, i64 2155569653, i64 2155569705, i64 2155569751, i64 2155569779} -!57 = !{i64 2155569918, i64 2155569947, i64 2155569993, i64 2155570051, i64 2155570105, i64 2155570159, i64 2155570214, i64 2155570245, i64 2155570553, i64 2155570559, i64 2155570606, i64 2155570629, i64 2155570655} -!58 = !{i64 2155571102, i64 2155570913, i64 2155570963, i64 2155571009, i64 2155571037} -!59 = !{i64 2155571936, i64 2155571745, i64 2155571797, i64 2155571843, i64 2155571871} -!60 = !{i64 2155572010, i64 2155572039, i64 2155572085, i64 2155572143, i64 2155572197, i64 2155572251, i64 2155572306, i64 2155572337, i64 2155572645, i64 2155572651, i64 2155572698, i64 2155572721, i64 2155572747} -!61 = !{i64 2155573194, i64 2155573005, i64 2155573055, i64 2155573101, i64 2155573129} -!62 = !{i64 2155578187, i64 2155577996, i64 2155578048, i64 2155578094, i64 2155578122} -!63 = !{i64 2155578261, i64 2155578290, i64 2155578336, i64 2155578394, i64 2155578448, i64 2155578502, i64 2155578557, i64 2155578588, i64 2155578896, i64 2155578902, i64 2155578949, i64 2155578972, i64 2155578998} -!64 = !{i64 2155579445, i64 2155579256, i64 2155579306, i64 2155579352, i64 2155579380} -!65 = !{i64 2155590433, i64 2155590242, i64 2155590294, i64 2155590340, i64 2155590368} -!66 = !{i64 2155590507, i64 2155590536, i64 2155590582, i64 2155590640, i64 2155590694, i64 2155590748, i64 2155590803, i64 2155590834, i64 2155591142, i64 2155591148, i64 2155591195, i64 2155591218, i64 2155591244} -!67 = !{i64 2155591692, i64 2155591503, i64 2155591553, i64 2155591599, i64 2155591627} -!68 = !{i64 2155592561, i64 2155592370, i64 2155592422, i64 2155592468, i64 2155592496} -!69 = !{i64 2155592635, i64 2155592664, i64 2155592710, i64 2155592768, i64 2155592822, i64 2155592876, i64 2155592931, i64 2155592962, i64 2155593270, i64 2155593276, i64 2155593323, i64 2155593346, i64 2155593372} -!70 = !{i64 2155593820, i64 2155593631, i64 2155593681, i64 2155593727, i64 2155593755} -!71 = !{i64 2155594690, i64 2155594499, i64 2155594551, i64 2155594597, i64 2155594625} -!72 = !{i64 2155594764, i64 2155594793, i64 2155594839, i64 2155594897, i64 2155594951, i64 2155595005, i64 2155595060, i64 2155595091, i64 2155595399, i64 2155595405, i64 2155595452, i64 2155595475, i64 2155595501} -!73 = !{i64 2155595949, i64 2155595760, i64 2155595810, i64 2155595856, i64 2155595884} -!74 = !{i64 2155596787, i64 2155596596, i64 2155596648, i64 2155596694, i64 2155596722} -!75 = !{i64 2155596861, i64 2155596890, i64 2155596936, i64 2155596994, i64 2155597048, i64 2155597102, i64 2155597157, i64 2155597188, i64 2155597496, i64 2155597502, i64 2155597549, i64 2155597572, i64 2155597598} -!76 = !{i64 2155598046, i64 2155597857, i64 2155597907, i64 2155597953, i64 2155597981} +!41 = !{i64 2155588196, i64 2155588005, i64 2155588057, i64 2155588103, i64 2155588131} +!42 = !{i64 2155588270, i64 2155588299, i64 2155588345, i64 2155588403, i64 2155588457, i64 2155588511, i64 2155588566, i64 2155588597, i64 2155588905, i64 2155588911, i64 2155588958, i64 2155588981, i64 2155589007} +!43 = !{i64 2155589455, i64 2155589266, i64 2155589316, i64 2155589362, i64 2155589390} +!44 = !{i64 2155574014, i64 2155573823, i64 2155573875, i64 2155573921, i64 2155573949} +!45 = !{i64 2155574088, i64 2155574117, i64 2155574163, i64 2155574221, i64 2155574275, i64 2155574329, i64 2155574384, i64 2155574415, i64 2155574723, i64 2155574729, i64 2155574776, i64 2155574799, i64 2155574825} +!46 = !{i64 2155575272, i64 2155575083, i64 2155575133, i64 2155575179, i64 2155575207} +!47 = !{i64 2155565662, i64 2155565471, i64 2155565523, i64 2155565569, i64 2155565597} +!48 = !{i64 2155565736, i64 2155565765, i64 2155565811, i64 2155565869, i64 2155565923, i64 2155565977, i64 2155566032, i64 2155566063, i64 2155566371, i64 2155566377, i64 2155566424, i64 2155566447, i64 2155566473} +!49 = !{i64 2155566920, i64 2155566731, i64 2155566781, i64 2155566827, i64 2155566855} +!50 = !{i64 2155569844, i64 2155569653, i64 2155569705, i64 2155569751, i64 2155569779} +!51 = !{i64 2155569918, i64 2155569947, i64 2155569993, i64 2155570051, i64 2155570105, i64 2155570159, i64 2155570214, i64 2155570245, i64 2155570553, i64 2155570559, i64 2155570606, i64 2155570629, i64 2155570655} +!52 = !{i64 2155571102, i64 2155570913, i64 2155570963, i64 2155571009, i64 2155571037} +!53 = !{i64 2155571936, i64 2155571745, i64 2155571797, i64 2155571843, i64 2155571871} +!54 = !{i64 2155572010, i64 2155572039, i64 2155572085, i64 2155572143, i64 2155572197, i64 2155572251, i64 2155572306, i64 2155572337, i64 2155572645, i64 2155572651, i64 2155572698, i64 2155572721, i64 2155572747} +!55 = !{i64 2155573194, i64 2155573005, i64 2155573055, i64 2155573101, i64 2155573129} +!56 = !{i64 2155578187, i64 2155577996, i64 2155578048, i64 2155578094, i64 2155578122} +!57 = !{i64 2155578261, i64 2155578290, i64 2155578336, i64 2155578394, i64 2155578448, i64 2155578502, i64 2155578557, i64 2155578588, i64 2155578896, i64 2155578902, i64 2155578949, i64 2155578972, i64 2155578998} +!58 = !{i64 2155579445, i64 2155579256, i64 2155579306, i64 2155579352, i64 2155579380} +!59 = !{i64 2155590433, i64 2155590242, i64 2155590294, i64 2155590340, i64 2155590368} +!60 = !{i64 2155590507, i64 2155590536, i64 2155590582, i64 2155590640, i64 2155590694, i64 2155590748, i64 2155590803, i64 2155590834, i64 2155591142, i64 2155591148, i64 2155591195, i64 2155591218, i64 2155591244} +!61 = !{i64 2155591692, i64 2155591503, i64 2155591553, i64 2155591599, i64 2155591627} +!62 = !{i64 2155592561, i64 2155592370, i64 2155592422, i64 2155592468, i64 2155592496} +!63 = !{i64 2155592635, i64 2155592664, i64 2155592710, i64 2155592768, i64 2155592822, i64 2155592876, i64 2155592931, i64 2155592962, i64 2155593270, i64 2155593276, i64 2155593323, i64 2155593346, i64 2155593372} +!64 = !{i64 2155593820, i64 2155593631, i64 2155593681, i64 2155593727, i64 2155593755} +!65 = !{i64 2155594690, i64 2155594499, i64 2155594551, i64 2155594597, i64 2155594625} +!66 = !{i64 2155594764, i64 2155594793, i64 2155594839, i64 2155594897, i64 2155594951, i64 2155595005, i64 2155595060, i64 2155595091, i64 2155595399, i64 2155595405, i64 2155595452, i64 2155595475, i64 2155595501} +!67 = !{i64 2155595949, i64 2155595760, i64 2155595810, i64 2155595856, i64 2155595884} +!68 = !{i64 2155596787, i64 2155596596, i64 2155596648, i64 2155596694, i64 2155596722} +!69 = !{i64 2155596861, i64 2155596890, i64 2155596936, i64 2155596994, i64 2155597048, i64 2155597102, i64 2155597157, i64 2155597188, i64 2155597496, i64 2155597502, i64 2155597549, i64 2155597572, i64 2155597598} +!70 = !{i64 2155598046, i64 2155597857, i64 2155597907, i64 2155597953, i64 2155597981} diff --git a/bench/linux/optimized/ioam6.ll b/bench/linux/optimized/ioam6.ll index 825b1f0241b..3ccc558c0eb 100644 --- a/bench/linux/optimized/ioam6.ll +++ b/bench/linux/optimized/ioam6.ll @@ -2004,7 +2004,7 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no 70: ; preds = %66, %64 %71 = phi ptr [ %65, %64 ], [ %69, %66 ] %72 = icmp eq ptr %71, null - br i1 %72, label %217, label %73 + br i1 %72, label %213, label %73 73: ; preds = %70 call void @llvm.lifetime.start.p0(ptr nonnull %4) @@ -2088,7 +2088,7 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no 106: ; preds = %105, %102 call void @__rcu_read_unlock() #16 %107 = call ptr @rhashtable_insert_slow(ptr noundef %0, ptr noundef %19, ptr noundef nonnull %1) #16 - br label %231 + br label %227 108: ; preds = %.loopexit %109 = load ptr, ptr %71, align 8 @@ -2170,7 +2170,7 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no %.pre-phi27 = phi i64 [ %.pre26, %.split11.us.loopexit17 ], [ %131, %137 ] %.us-phi12 = phi ptr [ %150, %.split11.us.loopexit17 ], [ %138, %137 ] %158 = getelementptr i8, ptr %.us-phi12, i64 %.pre-phi27 - br label %219 + br label %215 159: ; preds = %.split.split %160 = add i32 %151, -1 @@ -2191,7 +2191,7 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no %169 = getelementptr inbounds nuw i8, ptr %0, i64 12 %170 = load i32, ptr %169, align 4 %171 = icmp ult i32 %168, %170 - br i1 %171, label %172, label %219, !prof !6 + br i1 %171, label %172, label %215, !prof !6 172: ; preds = %166 %173 = load volatile i32, ptr %167, align 4 @@ -2215,96 +2215,92 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no %187 = inttoptr i64 %186 to ptr store volatile ptr %187, ptr %1, align 8 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; incl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %167, ptr nonnull elementtype(i32) %167) #16, !srcloc !45 - %188 = ptrtoint ptr %1 to i64 - %189 = and i64 %188, 1 - %190 = icmp eq i64 %189, 0 - %191 = select i1 %190, ptr %1, ptr null call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !46 - store volatile ptr %191, ptr %71, align 8 + store volatile ptr %1, ptr %71, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !47 - %192 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 - %193 = icmp ult i8 %192, 2 - call void @llvm.assume(i1 %193) - %194 = icmp eq i8 %192, 0 - br i1 %194, label %198, label %195, !prof !6 - -195: ; preds = %181 - %196 = call i64 @llvm.read_register.i64(metadata !0) - %197 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %196) #16, !srcloc !48 - call void @llvm.write_register.i64(metadata !0, i64 %197) + %188 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 + %189 = icmp ult i8 %188, 2 + call void @llvm.assume(i1 %189) + %190 = icmp eq i8 %188, 0 + br i1 %190, label %194, label %191, !prof !6 + +191: ; preds = %181 + %192 = call i64 @llvm.read_register.i64(metadata !0) + %193 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %192) #16, !srcloc !48 + call void @llvm.write_register.i64(metadata !0, i64 %193) + br label %194 + +194: ; preds = %191, %181 + %195 = and i64 %74, 512 + %196 = icmp eq i64 %195, 0 + br i1 %196, label %198, label %197 + +197: ; preds = %194 + call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !43 br label %198 -198: ; preds = %195, %181 - %199 = and i64 %74, 512 - %200 = icmp eq i64 %199, 0 - br i1 %200, label %202, label %201 - -201: ; preds = %198 - call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !43 - br label %202 - -202: ; preds = %201, %198 - %203 = load volatile i32, ptr %167, align 4 - %204 = load i32, ptr %29, align 64 - %205 = lshr i32 %204, 2 - %206 = mul nuw i32 %205, 3 - %207 = icmp ugt i32 %203, %206 - br i1 %207, label %208, label %217 - -208: ; preds = %202 - %209 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %210 = load i32, ptr %209, align 8 - %211 = add i32 %210, -1 - %212 = icmp ult i32 %211, %204 - br i1 %212, label %217, label %213 - -213: ; preds = %208 - %214 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %215 = load ptr, ptr @system_wq, align 8 - %216 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %215, ptr noundef nonnull %214) #16 - br label %217 - -217: ; preds = %230, %227, %213, %208, %202, %70 - %218 = phi ptr [ inttoptr (i64 -12 to ptr), %70 ], [ null, %213 ], [ null, %208 ], [ null, %202 ], [ %220, %227 ], [ %220, %230 ] +198: ; preds = %197, %194 + %199 = load volatile i32, ptr %167, align 4 + %200 = load i32, ptr %29, align 64 + %201 = lshr i32 %200, 2 + %202 = mul nuw i32 %201, 3 + %203 = icmp ugt i32 %199, %202 + br i1 %203, label %204, label %213 + +204: ; preds = %198 + %205 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %206 = load i32, ptr %205, align 8 + %207 = add i32 %206, -1 + %208 = icmp ult i32 %207, %200 + br i1 %208, label %213, label %209 + +209: ; preds = %204 + %210 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %211 = load ptr, ptr @system_wq, align 8 + %212 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %211, ptr noundef nonnull %210) #16 + br label %213 + +213: ; preds = %226, %223, %209, %204, %198, %70 + %214 = phi ptr [ inttoptr (i64 -12 to ptr), %70 ], [ null, %209 ], [ null, %204 ], [ null, %198 ], [ %216, %223 ], [ %216, %226 ] call void @__rcu_read_unlock() #16 - br label %231 + br label %227 -219: ; preds = %.split11.us, %166 - %220 = phi ptr [ inttoptr (i64 -7 to ptr), %166 ], [ %158, %.split11.us ] +215: ; preds = %.split11.us, %166 + %216 = phi ptr [ inttoptr (i64 -7 to ptr), %166 ], [ %158, %.split11.us ] call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !39 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; andb ${1:b},$0", "=*m,iq,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %71, i32 -2, ptr nonnull elementtype(i8) %71) #16, !srcloc !40 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !41 - %221 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 - %222 = icmp ult i8 %221, 2 - call void @llvm.assume(i1 %222) - %223 = icmp eq i8 %221, 0 - br i1 %223, label %227, label %224, !prof !6 - -224: ; preds = %219 - %225 = call i64 @llvm.read_register.i64(metadata !0) - %226 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %225) #16, !srcloc !42 - call void @llvm.write_register.i64(metadata !0, i64 %226) - br label %227 - -227: ; preds = %224, %219 - %228 = and i64 %74, 512 - %229 = icmp eq i64 %228, 0 - br i1 %229, label %217, label %230 - -230: ; preds = %227 + %217 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 + %218 = icmp ult i8 %217, 2 + call void @llvm.assume(i1 %218) + %219 = icmp eq i8 %217, 0 + br i1 %219, label %223, label %220, !prof !6 + +220: ; preds = %215 + %221 = call i64 @llvm.read_register.i64(metadata !0) + %222 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %221) #16, !srcloc !42 + call void @llvm.write_register.i64(metadata !0, i64 %222) + br label %223 + +223: ; preds = %220, %215 + %224 = and i64 %74, 512 + %225 = icmp eq i64 %224, 0 + br i1 %225, label %213, label %226 + +226: ; preds = %223 call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !43 - br label %217 + br label %213 -231: ; preds = %217, %106 - %232 = phi ptr [ %107, %106 ], [ %218, %217 ] +227: ; preds = %213, %106 + %228 = phi ptr [ %107, %106 ], [ %214, %213 ] call void @llvm.lifetime.end.p0(ptr nonnull %5) - %233 = icmp ugt ptr %232, inttoptr (i64 -4096 to ptr) - %234 = ptrtoint ptr %232 to i64 - %235 = trunc i64 %234 to i32 - %236 = icmp eq ptr %232, null - %237 = select i1 %236, i32 0, i32 -17 - %238 = select i1 %233, i32 %235, i32 %237 - ret i32 %238 + %229 = icmp ugt ptr %228, inttoptr (i64 -4096 to ptr) + %230 = ptrtoint ptr %228 to i64 + %231 = trunc i64 %230 to i32 + %232 = icmp eq ptr %228, null + %233 = select i1 %232, i32 0, i32 -17 + %234 = select i1 %229, i32 %231, i32 %233 + ret i32 %234 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/request.ll b/bench/linux/optimized/request.ll index 7cbd2f92ba2..78304e3f1fc 100644 --- a/bench/linux/optimized/request.ll +++ b/bench/linux/optimized/request.ll @@ -335,7 +335,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address 12: ; preds = %8, %3 tail call void @kfree(ptr noundef %1) #11 - br label %277 + br label %273 13: ; preds = %8 %14 = getelementptr inbounds nuw i8, ptr %0, i64 24 @@ -347,7 +347,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address 18: ; preds = %13 tail call void @kfree(ptr noundef nonnull %1) #11 - br label %277 + br label %273 19: ; preds = %13 %20 = getelementptr inbounds nuw i8, ptr %15, i64 712 @@ -360,7 +360,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %25 = load ptr, ptr %24, align 8 %26 = tail call ptr @handshake_pernet(ptr noundef %25) #11 %27 = icmp eq ptr %26, null - br i1 %27, label %253, label %28 + br i1 %27, label %249, label %28 28: ; preds = %19 %29 = getelementptr inbounds nuw i8, ptr %26, i64 4 @@ -368,7 +368,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %31 = getelementptr inbounds nuw i8, ptr %26, i64 8 %32 = load i32, ptr %31, align 8 %33 = icmp slt i32 %30, %32 - br i1 %33, label %34, label %253 + br i1 %33, label %34, label %249 34: ; preds = %28 tail call void @_raw_spin_lock(ptr noundef nonnull %26) #11 @@ -376,7 +376,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %36 = load volatile i64, ptr %35, align 8 %37 = and i64 %36, 1 %38 = icmp eq i64 %37, 0 - br i1 %38, label %39, label %251 + br i1 %38, label %39, label %247 39: ; preds = %34 %40 = getelementptr inbounds nuw i8, ptr %1, i64 16 @@ -454,7 +454,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address 99: ; preds = %95, %93 %100 = phi ptr [ %94, %93 ], [ %98, %95 ] %101 = icmp eq ptr %100, null - br i1 %101, label %216, label %102 + br i1 %101, label %212, label %102 102: ; preds = %99 call void @llvm.lifetime.start.p0(ptr nonnull %4) @@ -538,7 +538,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address 135: ; preds = %134, %131 call void @__rcu_read_unlock() #11 %136 = call ptr @rhashtable_insert_slow(ptr noundef nonnull @handshake_rhashtbl, ptr noundef %51, ptr noundef nonnull %40) #11 - br label %229 + br label %225 137: ; preds = %.loopexit8 %138 = load ptr, ptr %100, align 8 @@ -616,172 +616,168 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %188 = inttoptr i64 %144 to ptr store volatile ptr %188, ptr %40, align 8 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; incl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 132), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 132)) #11, !srcloc !38 - %189 = ptrtoint ptr %40 to i64 - %190 = and i64 %189, 1 - %191 = icmp eq i64 %190, 0 - %192 = select i1 %191, ptr %40, ptr null call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !39 - store volatile ptr %192, ptr %100, align 8 + store volatile ptr %40, ptr %100, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !40 - %193 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 - %194 = icmp ult i8 %193, 2 - call void @llvm.assume(i1 %194) - %195 = icmp eq i8 %193, 0 - br i1 %195, label %199, label %196, !prof !6 - -196: ; preds = %187 - %197 = call i64 @llvm.read_register.i64(metadata !0) - %198 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %197) #11, !srcloc !41 - call void @llvm.write_register.i64(metadata !0, i64 %198) + %189 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 + %190 = icmp ult i8 %189, 2 + call void @llvm.assume(i1 %190) + %191 = icmp eq i8 %189, 0 + br i1 %191, label %195, label %192, !prof !6 + +192: ; preds = %187 + %193 = call i64 @llvm.read_register.i64(metadata !0) + %194 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %193) #11, !srcloc !41 + call void @llvm.write_register.i64(metadata !0, i64 %194) + br label %195 + +195: ; preds = %192, %187 + %196 = and i64 %103, 512 + %197 = icmp eq i64 %196, 0 + br i1 %197, label %199, label %198 + +198: ; preds = %195 + call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !35 br label %199 -199: ; preds = %196, %187 - %200 = and i64 %103, 512 - %201 = icmp eq i64 %200, 0 - br i1 %201, label %203, label %202 - -202: ; preds = %199 - call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !35 - br label %203 - -203: ; preds = %202, %199 - %204 = load volatile i32, ptr getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 132), align 4 - %205 = load i32, ptr %52, align 64 - %206 = lshr i32 %205, 2 - %207 = mul nuw i32 %206, 3 - %208 = icmp ugt i32 %204, %207 - %209 = load i32, ptr getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 24), align 8 - %210 = add i32 %209, -1 - %211 = icmp uge i32 %210, %205 - %212 = select i1 %208, i1 %211, i1 false - br i1 %212, label %213, label %216 - -213: ; preds = %203 - %214 = load ptr, ptr @system_wq, align 8 - %215 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %214, ptr noundef nonnull getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 64)) #11 - br label %216 - -216: ; preds = %228, %225, %213, %203, %99 - %217 = phi ptr [ inttoptr (i64 -12 to ptr), %99 ], [ null, %213 ], [ null, %203 ], [ %218, %225 ], [ %218, %228 ] +199: ; preds = %198, %195 + %200 = load volatile i32, ptr getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 132), align 4 + %201 = load i32, ptr %52, align 64 + %202 = lshr i32 %201, 2 + %203 = mul nuw i32 %202, 3 + %204 = icmp ugt i32 %200, %203 + %205 = load i32, ptr getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 24), align 8 + %206 = add i32 %205, -1 + %207 = icmp uge i32 %206, %201 + %208 = select i1 %204, i1 %207, i1 false + br i1 %208, label %209, label %212 + +209: ; preds = %199 + %210 = load ptr, ptr @system_wq, align 8 + %211 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %210, ptr noundef nonnull getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 64)) #11 + br label %212 + +212: ; preds = %224, %221, %209, %199, %99 + %213 = phi ptr [ inttoptr (i64 -12 to ptr), %99 ], [ null, %209 ], [ null, %199 ], [ %214, %221 ], [ %214, %224 ] call void @__rcu_read_unlock() #11 - br label %229 + br label %225 .loopexit: ; preds = %.split, %175 - %218 = phi ptr [ inttoptr (i64 -7 to ptr), %175 ], [ %166, %.split ] + %214 = phi ptr [ inttoptr (i64 -7 to ptr), %175 ], [ %166, %.split ] call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !31 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; andb ${1:b},$0", "=*m,iq,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %100, i32 -2, ptr nonnull elementtype(i8) %100) #11, !srcloc !32 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !33 - %219 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 - %220 = icmp ult i8 %219, 2 - call void @llvm.assume(i1 %220) - %221 = icmp eq i8 %219, 0 - br i1 %221, label %225, label %222, !prof !6 - -222: ; preds = %.loopexit - %223 = call i64 @llvm.read_register.i64(metadata !0) - %224 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %223) #11, !srcloc !34 - call void @llvm.write_register.i64(metadata !0, i64 %224) - br label %225 - -225: ; preds = %222, %.loopexit - %226 = and i64 %103, 512 - %227 = icmp eq i64 %226, 0 - br i1 %227, label %216, label %228 - -228: ; preds = %225 + %215 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 + %216 = icmp ult i8 %215, 2 + call void @llvm.assume(i1 %216) + %217 = icmp eq i8 %215, 0 + br i1 %217, label %221, label %218, !prof !6 + +218: ; preds = %.loopexit + %219 = call i64 @llvm.read_register.i64(metadata !0) + %220 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %219) #11, !srcloc !34 + call void @llvm.write_register.i64(metadata !0, i64 %220) + br label %221 + +221: ; preds = %218, %.loopexit + %222 = and i64 %103, 512 + %223 = icmp eq i64 %222, 0 + br i1 %223, label %212, label %224 + +224: ; preds = %221 call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !35 - br label %216 - -229: ; preds = %216, %135 - %230 = phi ptr [ %136, %135 ], [ %217, %216 ] - %231 = icmp ugt ptr %230, inttoptr (i64 -4096 to ptr) - %232 = ptrtoint ptr %230 to i64 - %233 = icmp eq ptr %230, null - %234 = and i64 %232, 4294967295 - %235 = icmp eq i64 %234, 0 - %236 = select i1 %231, i1 %235, i1 %233 - br i1 %236, label %237, label %251 - -237: ; preds = %229 - %238 = call fastcc zeroext i1 @__add_pending_locked(ptr noundef nonnull %26, ptr noundef nonnull %1) - br i1 %238, label %239, label %251 - -239: ; preds = %237 + br label %212 + +225: ; preds = %212, %135 + %226 = phi ptr [ %136, %135 ], [ %213, %212 ] + %227 = icmp ugt ptr %226, inttoptr (i64 -4096 to ptr) + %228 = ptrtoint ptr %226 to i64 + %229 = icmp eq ptr %226, null + %230 = and i64 %228, 4294967295 + %231 = icmp eq i64 %230, 0 + %232 = select i1 %227, i1 %231, i1 %229 + br i1 %232, label %233, label %247 + +233: ; preds = %225 + %234 = call fastcc zeroext i1 @__add_pending_locked(ptr noundef nonnull %26, ptr noundef nonnull %1) + br i1 %234, label %235, label %247 + +235: ; preds = %233 call void @_raw_spin_unlock(ptr noundef nonnull %26) #11 - %240 = getelementptr inbounds nuw i8, ptr %1, i64 32 - %241 = load ptr, ptr %240, align 8 - %242 = call i32 @handshake_genl_notify(ptr noundef %25, ptr noundef %241, i32 noundef %2) #11 - %243 = icmp eq i32 %242, 0 - br i1 %243, label %247, label %244 - -244: ; preds = %239 - %245 = load ptr, ptr %16, align 8 - call fastcc void @trace_handshake_notify_err(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %245, i32 noundef %242) - %246 = call fastcc zeroext i1 @remove_pending(ptr noundef nonnull %26, ptr noundef nonnull %1) - br i1 %246, label %253, label %247 - -247: ; preds = %244, %239 - %248 = load ptr, ptr %16, align 8 - %249 = getelementptr inbounds nuw i8, ptr %248, i64 128 - call fastcc void @refcount_inc(ptr noundef nonnull %249) - %250 = load ptr, ptr %16, align 8 - call fastcc void @trace_handshake_submit(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %250) - br label %277 - -251: ; preds = %237, %229, %34 - %252 = phi i32 [ -16, %237 ], [ -16, %229 ], [ -95, %34 ] + %236 = getelementptr inbounds nuw i8, ptr %1, i64 32 + %237 = load ptr, ptr %236, align 8 + %238 = call i32 @handshake_genl_notify(ptr noundef %25, ptr noundef %237, i32 noundef %2) #11 + %239 = icmp eq i32 %238, 0 + br i1 %239, label %243, label %240 + +240: ; preds = %235 + %241 = load ptr, ptr %16, align 8 + call fastcc void @trace_handshake_notify_err(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %241, i32 noundef %238) + %242 = call fastcc zeroext i1 @remove_pending(ptr noundef nonnull %26, ptr noundef nonnull %1) + br i1 %242, label %249, label %243 + +243: ; preds = %240, %235 + %244 = load ptr, ptr %16, align 8 + %245 = getelementptr inbounds nuw i8, ptr %244, i64 128 + call fastcc void @refcount_inc(ptr noundef nonnull %245) + %246 = load ptr, ptr %16, align 8 + call fastcc void @trace_handshake_submit(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %246) + br label %273 + +247: ; preds = %233, %225, %34 + %248 = phi i32 [ -16, %233 ], [ -16, %225 ], [ -95, %34 ] call void @_raw_spin_unlock(ptr noundef nonnull %26) #11 - br label %253 + br label %249 -253: ; preds = %251, %244, %28, %19 - %254 = phi i32 [ -11, %28 ], [ %252, %251 ], [ %242, %244 ], [ -95, %19 ] - %255 = load ptr, ptr %16, align 8 +249: ; preds = %247, %240, %28, %19 + %250 = phi i32 [ -11, %28 ], [ %248, %247 ], [ %238, %240 ], [ -95, %19 ] + %251 = load ptr, ptr %16, align 8 callbr void asm sideeffect "1:jmp ${2:l} # objtool NOPs this \0A\09.pushsection __jump_table, \22aw\22 \0A\09 .balign 8 \0A\09.long 1b - . \0A\09.long ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsection \0A\09", "i,i,!i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull getelementptr inbounds nuw (i8, ptr @__tracepoint_handshake_submit_err, i64 8), i32 2) #11 - to label %276 [label %256], !srcloc !42 - -256: ; preds = %253 - %257 = call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #11, !srcloc !43 - %258 = zext i32 %257 to i64 - %259 = call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %258) #11, !srcloc !44 - %260 = icmp ult i8 %259, 2 - call void @llvm.assume(i1 %260) - %261 = icmp eq i8 %259, 0 - br i1 %261, label %276, label %262 - -262: ; preds = %256 + to label %272 [label %252], !srcloc !42 + +252: ; preds = %249 + %253 = call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #11, !srcloc !43 + %254 = zext i32 %253 to i64 + %255 = call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %254) #11, !srcloc !44 + %256 = icmp ult i8 %255, 2 + call void @llvm.assume(i1 %256) + %257 = icmp eq i8 %255, 0 + br i1 %257, label %272, label %258 + +258: ; preds = %252 call void asm "incl %gs:$0", "=*m,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !19 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !45 - %263 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @__tracepoint_handshake_submit_err, i64 72), align 8 - %264 = icmp eq ptr %263, null - br i1 %264, label %269, label %265 + %259 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @__tracepoint_handshake_submit_err, i64 72), align 8 + %260 = icmp eq ptr %259, null + br i1 %260, label %265, label %261 -265: ; preds = %262 - %266 = getelementptr inbounds nuw i8, ptr %263, i64 8 - %267 = load ptr, ptr %266, align 8 - %268 = call i32 @__SCT__tp_func_handshake_submit_err(ptr noundef %267, ptr noundef %25, ptr noundef nonnull %1, ptr noundef %255, i32 noundef %254) #11 - br label %269 +261: ; preds = %258 + %262 = getelementptr inbounds nuw i8, ptr %259, i64 8 + %263 = load ptr, ptr %262, align 8 + %264 = call i32 @__SCT__tp_func_handshake_submit_err(ptr noundef %263, ptr noundef %25, ptr noundef nonnull %1, ptr noundef %251, i32 noundef %250) #11 + br label %265 -269: ; preds = %265, %262 +265: ; preds = %261, %258 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !46 - %270 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 - %271 = icmp ult i8 %270, 2 - call void @llvm.assume(i1 %271) - %272 = icmp eq i8 %270, 0 - br i1 %272, label %276, label %273, !prof !6 - -273: ; preds = %269 - %274 = call i64 @llvm.read_register.i64(metadata !0) - %275 = call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %274) #11, !srcloc !47 - call void @llvm.write_register.i64(metadata !0, i64 %275) - br label %276 - -276: ; preds = %273, %269, %256, %253 + %266 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 + %267 = icmp ult i8 %266, 2 + call void @llvm.assume(i1 %267) + %268 = icmp eq i8 %266, 0 + br i1 %268, label %272, label %269, !prof !6 + +269: ; preds = %265 + %270 = call i64 @llvm.read_register.i64(metadata !0) + %271 = call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %270) #11, !srcloc !47 + call void @llvm.write_register.i64(metadata !0, i64 %271) + br label %272 + +272: ; preds = %269, %265, %252, %249 call fastcc void @handshake_req_destroy(ptr noundef nonnull %1) - br label %277 + br label %273 -277: ; preds = %276, %247, %18, %12 - %278 = phi i32 [ %254, %276 ], [ 0, %247 ], [ -22, %18 ], [ -22, %12 ] - ret i32 %278 +273: ; preds = %272, %243, %18, %12 + %274 = phi i32 [ %250, %272 ], [ 0, %243 ], [ -22, %18 ], [ -22, %12 ] + ret i32 %274 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/sta_info.ll b/bench/linux/optimized/sta_info.ll index d8d80b8eca4..f05f082f600 100644 --- a/bench/linux/optimized/sta_info.ll +++ b/bench/linux/optimized/sta_info.ll @@ -8135,7 +8135,7 @@ define internal fastcc i32 @rhltable_insert(ptr noundef %0, ptr noundef %1, ptr 98: ; preds = %97, %94 call void @__rcu_read_unlock() #18 %99 = call ptr @rhashtable_insert_slow(ptr noundef %0, ptr noundef %14, ptr noundef %1) #18 - br label %247 + br label %243 100: ; preds = %.loopexit %101 = load ptr, ptr %63, align 8 @@ -8302,7 +8302,7 @@ define internal fastcc i32 @rhltable_insert(ptr noundef %0, ptr noundef %1, ptr %196 = getelementptr inbounds nuw i8, ptr %0, i64 12 %197 = load i32, ptr %196, align 4 %198 = icmp ult i32 %195, %197 - br i1 %198, label %199, label %246, !prof !9 + br i1 %198, label %199, label %242, !prof !9 199: ; preds = %193 %200 = load volatile i32, ptr %194, align 4 @@ -8328,70 +8328,66 @@ define internal fastcc i32 @rhltable_insert(ptr noundef %0, ptr noundef %1, ptr %215 = getelementptr inbounds nuw i8, ptr %1, i64 8 store volatile ptr null, ptr %215, align 8 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; incl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %194, ptr nonnull elementtype(i32) %194) #18, !srcloc !299 - %216 = ptrtoint ptr %1 to i64 - %217 = and i64 %216, 1 - %218 = icmp eq i64 %217, 0 - %219 = select i1 %218, ptr %1, ptr null call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #18, !srcloc !288 - store volatile ptr %219, ptr %63, align 8 + store volatile ptr %1, ptr %63, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #18, !srcloc !289 - %220 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #18, !srcloc !71 - %221 = icmp ult i8 %220, 2 - call void @llvm.assume(i1 %221) - %222 = icmp eq i8 %220, 0 - br i1 %222, label %226, label %223, !prof !9 - -223: ; preds = %208 - %224 = call i64 @llvm.read_register.i64(metadata !0) - %225 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %224) #18, !srcloc !290 - call void @llvm.write_register.i64(metadata !0, i64 %225) - br label %226 + %216 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #18, !srcloc !71 + %217 = icmp ult i8 %216, 2 + call void @llvm.assume(i1 %217) + %218 = icmp eq i8 %216, 0 + br i1 %218, label %222, label %219, !prof !9 + +219: ; preds = %208 + %220 = call i64 @llvm.read_register.i64(metadata !0) + %221 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %220) #18, !srcloc !290 + call void @llvm.write_register.i64(metadata !0, i64 %221) + br label %222 -226: ; preds = %223, %208 - %227 = and i64 %66, 512 - %228 = icmp eq i64 %227, 0 - br i1 %228, label %230, label %229 +222: ; preds = %219, %208 + %223 = and i64 %66, 512 + %224 = icmp eq i64 %223, 0 + br i1 %224, label %226, label %225 -229: ; preds = %226 +225: ; preds = %222 call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #18, !srcloc !287 - br label %230 - -230: ; preds = %229, %226 - %231 = load volatile i32, ptr %194, align 4 - %232 = load i32, ptr %22, align 64 - %233 = lshr i32 %232, 2 - %234 = mul nuw i32 %233, 3 - %235 = icmp ugt i32 %231, %234 - br i1 %235, label %236, label %.thread - -236: ; preds = %230 - %237 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %238 = load i32, ptr %237, align 8 - %239 = add i32 %238, -1 - %240 = icmp ult i32 %239, %232 - br i1 %240, label %.thread, label %241 - -241: ; preds = %236 - %242 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %243 = load ptr, ptr @system_wq, align 8 - %244 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %243, ptr noundef nonnull %242) #18 + br label %226 + +226: ; preds = %225, %222 + %227 = load volatile i32, ptr %194, align 4 + %228 = load i32, ptr %22, align 64 + %229 = lshr i32 %228, 2 + %230 = mul nuw i32 %229, 3 + %231 = icmp ugt i32 %227, %230 + br i1 %231, label %232, label %.thread + +232: ; preds = %226 + %233 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %234 = load i32, ptr %233, align 8 + %235 = add i32 %234, -1 + %236 = icmp ult i32 %235, %228 + br i1 %236, label %.thread, label %237 + +237: ; preds = %232 + %238 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %239 = load ptr, ptr @system_wq, align 8 + %240 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %239, ptr noundef nonnull %238) #18 br label %.thread -.thread: ; preds = %185, %184, %176, %175, %246, %241, %236, %230, %62 - %245 = phi ptr [ inttoptr (i64 -7 to ptr), %246 ], [ inttoptr (i64 -12 to ptr), %62 ], [ null, %241 ], [ null, %236 ], [ null, %230 ], [ null, %175 ], [ null, %176 ], [ null, %184 ], [ null, %185 ] +.thread: ; preds = %185, %184, %176, %175, %242, %237, %232, %226, %62 + %241 = phi ptr [ inttoptr (i64 -7 to ptr), %242 ], [ inttoptr (i64 -12 to ptr), %62 ], [ null, %237 ], [ null, %232 ], [ null, %226 ], [ null, %175 ], [ null, %176 ], [ null, %184 ], [ null, %185 ] call void @__rcu_read_unlock() #18 - br label %247 + br label %243 -246: ; preds = %193 +242: ; preds = %193 call fastcc void @rht_unlock(ptr noundef nonnull %63, i64 noundef %66) br label %.thread -247: ; preds = %.thread, %98 - %248 = phi ptr [ %99, %98 ], [ %245, %.thread ] +243: ; preds = %.thread, %98 + %244 = phi ptr [ %99, %98 ], [ %241, %.thread ] call void @llvm.lifetime.end.p0(ptr nonnull %5) - %249 = ptrtoint ptr %248 to i64 - %250 = trunc i64 %249 to i32 - ret i32 %250 + %245 = ptrtoint ptr %244 to i64 + %246 = trunc i64 %245 to i32 + ret i32 %246 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/util.ll b/bench/linux/optimized/util.ll index c7a83760f55..a47d50dd857 100644 --- a/bench/linux/optimized/util.ll +++ b/bench/linux/optimized/util.ll @@ -145,7 +145,7 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) %7 = tail call i32 @llvm.smin.i32(i32 %6, i32 %2) %8 = load i32, ptr %0, align 8 %9 = icmp slt i32 %8, %7 - br i1 %9, label %10, label %242 + br i1 %9, label %10, label %238 10: ; preds = %3 tail call void @idr_preload(i32 noundef 3264) #15 @@ -299,7 +299,7 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) 117: ; preds = %113, %111 %118 = phi ptr [ %112, %111 ], [ %116, %113 ] %119 = icmp eq ptr %118, null - br i1 %119, label %220, label %120 + br i1 %119, label %216, label %120 120: ; preds = %117 call void @llvm.lifetime.start.p0(ptr nonnull %4) @@ -383,7 +383,7 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) 153: ; preds = %152, %149 call void @__rcu_read_unlock() #15 %154 = call ptr @rhashtable_insert_slow(ptr noundef nonnull %71, ptr noundef null, ptr noundef nonnull %72) #15 - br label %223 + br label %219 155: ; preds = %.loopexit %156 = load ptr, ptr %118, align 8 @@ -418,7 +418,7 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) %178 = getelementptr inbounds nuw i8, ptr %0, i64 92 %179 = load i32, ptr %178, align 4 %180 = icmp ult i32 %177, %179 - br i1 %180, label %181, label %222, !prof !10 + br i1 %180, label %181, label %218, !prof !10 181: ; preds = %175 %182 = load volatile i32, ptr %176, align 4 @@ -436,103 +436,99 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) 190: ; preds = %185, %181 store volatile ptr %163, ptr %72, align 8 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; incl $0", "=*m,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %176, ptr nonnull elementtype(i32) %176) #15, !srcloc !34 - %191 = ptrtoint ptr %72 to i64 - %192 = and i64 %191, 1 - %193 = icmp eq i64 %192, 0 - %194 = select i1 %193, ptr %72, ptr null call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #15, !srcloc !35 - store volatile ptr %194, ptr %118, align 8 + store volatile ptr %72, ptr %118, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #15, !srcloc !36 - %195 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #15, !srcloc !9 - %196 = icmp ult i8 %195, 2 - call void @llvm.assume(i1 %196) - %197 = icmp eq i8 %195, 0 - br i1 %197, label %201, label %198, !prof !10 - -198: ; preds = %190 - %199 = call i64 @llvm.read_register.i64(metadata !0) - %200 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %199) #15, !srcloc !37 - call void @llvm.write_register.i64(metadata !0, i64 %200) + %191 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #15, !srcloc !9 + %192 = icmp ult i8 %191, 2 + call void @llvm.assume(i1 %192) + %193 = icmp eq i8 %191, 0 + br i1 %193, label %197, label %194, !prof !10 + +194: ; preds = %190 + %195 = call i64 @llvm.read_register.i64(metadata !0) + %196 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %195) #15, !srcloc !37 + call void @llvm.write_register.i64(metadata !0, i64 %196) + br label %197 + +197: ; preds = %194, %190 + %198 = and i64 %121, 512 + %199 = icmp eq i64 %198, 0 + br i1 %199, label %201, label %200 + +200: ; preds = %197 + call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #15, !srcloc !32 br label %201 -201: ; preds = %198, %190 - %202 = and i64 %121, 512 - %203 = icmp eq i64 %202, 0 - br i1 %203, label %205, label %204 - -204: ; preds = %201 - call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #15, !srcloc !32 - br label %205 - -205: ; preds = %204, %201 - %206 = load volatile i32, ptr %176, align 4 - %207 = load i32, ptr %73, align 64 - %208 = lshr i32 %207, 2 - %209 = mul nuw i32 %208, 3 - %210 = icmp ugt i32 %206, %209 - br i1 %210, label %211, label %220 - -211: ; preds = %205 - %212 = getelementptr inbounds nuw i8, ptr %0, i64 104 - %213 = load i32, ptr %212, align 8 - %214 = add i32 %213, -1 - %215 = icmp ult i32 %214, %207 - br i1 %215, label %220, label %216 - -216: ; preds = %211 - %217 = getelementptr inbounds nuw i8, ptr %0, i64 144 - %218 = load ptr, ptr @system_wq, align 8 - %219 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %218, ptr noundef nonnull %217) #15 - br label %220 - -220: ; preds = %222, %216, %211, %205, %117 - %221 = phi ptr [ inttoptr (i64 -7 to ptr), %222 ], [ inttoptr (i64 -12 to ptr), %117 ], [ null, %216 ], [ null, %211 ], [ null, %205 ] +201: ; preds = %200, %197 + %202 = load volatile i32, ptr %176, align 4 + %203 = load i32, ptr %73, align 64 + %204 = lshr i32 %203, 2 + %205 = mul nuw i32 %204, 3 + %206 = icmp ugt i32 %202, %205 + br i1 %206, label %207, label %216 + +207: ; preds = %201 + %208 = getelementptr inbounds nuw i8, ptr %0, i64 104 + %209 = load i32, ptr %208, align 8 + %210 = add i32 %209, -1 + %211 = icmp ult i32 %210, %203 + br i1 %211, label %216, label %212 + +212: ; preds = %207 + %213 = getelementptr inbounds nuw i8, ptr %0, i64 144 + %214 = load ptr, ptr @system_wq, align 8 + %215 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %214, ptr noundef nonnull %213) #15 + br label %216 + +216: ; preds = %218, %212, %207, %201, %117 + %217 = phi ptr [ inttoptr (i64 -7 to ptr), %218 ], [ inttoptr (i64 -12 to ptr), %117 ], [ null, %212 ], [ null, %207 ], [ null, %201 ] call void @__rcu_read_unlock() #15 - br label %223 + br label %219 -222: ; preds = %175 +218: ; preds = %175 call fastcc void @rht_unlock(ptr noundef nonnull %118, i64 noundef %121) - br label %220 - -223: ; preds = %220, %153 - %224 = phi ptr [ %154, %153 ], [ %221, %220 ] - %225 = icmp ugt ptr %224, inttoptr (i64 -4096 to ptr) - %226 = ptrtoint ptr %224 to i64 - %227 = trunc i64 %226 to i32 - %228 = icmp eq ptr %224, null - %229 = select i1 %228, i32 0, i32 -17 - %230 = select i1 %225, i32 %227, i32 %229 - %231 = icmp slt i32 %230, 0 - br i1 %231, label %232, label %.thread6 - -232: ; preds = %223 - %233 = zext nneg i32 %32 to i64 - %234 = call ptr @idr_remove(ptr noundef nonnull %31, i64 noundef %233) #15 + br label %216 + +219: ; preds = %216, %153 + %220 = phi ptr [ %154, %153 ], [ %217, %216 ] + %221 = icmp ugt ptr %220, inttoptr (i64 -4096 to ptr) + %222 = ptrtoint ptr %220 to i64 + %223 = trunc i64 %222 to i32 + %224 = icmp eq ptr %220, null + %225 = select i1 %224, i32 0, i32 -17 + %226 = select i1 %221, i32 %223, i32 %225 + %227 = icmp slt i32 %226, 0 + br i1 %227, label %228, label %.thread6 + +228: ; preds = %219 + %229 = zext nneg i32 %32 to i64 + %230 = call ptr @idr_remove(ptr noundef nonnull %31, i64 noundef %229) #15 br label %.thread -.thread: ; preds = %65, %232 - %235 = phi i32 [ %32, %65 ], [ %230, %232 ] +.thread: ; preds = %65, %228 + %231 = phi i32 [ %32, %65 ], [ %226, %228 ] store i8 1, ptr %23, align 4 call void @_raw_spin_unlock(ptr noundef %1) #15 call void @__rcu_read_unlock() #15 - br label %242 - -.thread6: ; preds = %223, %66 - %236 = load i32, ptr %0, align 8 - %237 = add i32 %236, 1 - store i32 %237, ptr %0, align 8 - %238 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %239 = load i32, ptr %238, align 8 - %240 = icmp sgt i32 %32, %239 - br i1 %240, label %241, label %242 - -241: ; preds = %.thread6 - store i32 %32, ptr %238, align 8 - br label %242 - -242: ; preds = %241, %.thread6, %.thread, %3 - %243 = phi i32 [ %235, %.thread ], [ -28, %3 ], [ %32, %241 ], [ %32, %.thread6 ] - ret i32 %243 + br label %238 + +.thread6: ; preds = %219, %66 + %232 = load i32, ptr %0, align 8 + %233 = add i32 %232, 1 + store i32 %233, ptr %0, align 8 + %234 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %235 = load i32, ptr %234, align 8 + %236 = icmp sgt i32 %32, %235 + br i1 %236, label %237, label %238 + +237: ; preds = %.thread6 + store i32 %32, ptr %234, align 8 + br label %238 + +238: ; preds = %237, %.thread6, %.thread, %3 + %239 = phi i32 [ %231, %.thread ], [ -28, %3 ], [ %32, %237 ], [ %32, %.thread6 ] + ret i32 %239 } ; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) diff --git a/bench/llvm/optimized/Z3CrosscheckVisitor.ll b/bench/llvm/optimized/Z3CrosscheckVisitor.ll index 393e75ef2ee..1617d1f5329 100644 --- a/bench/llvm/optimized/Z3CrosscheckVisitor.ll +++ b/bench/llvm/optimized/Z3CrosscheckVisitor.ll @@ -163,41 +163,33 @@ $_ZZN5clang4ento17ProgramStateTraitIN4llvm12ImmutableMapIPKNS0_7SymExprENS0_8Ran ; Function Attrs: mustprogress nounwind uwtable define dso_local void @_ZN5clang4ento19Z3CrosscheckVisitorC2ERNS1_8Z3ResultERKNS_15AnalyzerOptionsE(ptr noundef nonnull writeonly align 8 captures(none) dereferenceable(40) initializes((0, 40)) %0, ptr noundef nonnull align 4 dereferenceable(12) %1, ptr noundef nonnull align 8 dereferenceable(488) %2) unnamed_addr #0 align 2 { - %4 = getelementptr inbounds nuw i8, ptr %0, i64 8 - store ptr null, ptr %4, align 8, !tbaa !3 +_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento7SymExprENS3_8RangeSetEEEED2Ev.exit: + %3 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store ptr null, ptr %3, align 8, !tbaa !3 store ptr getelementptr inbounds nuw inrange(-16, 48) (i8, ptr @_ZTVN5clang4ento19Z3CrosscheckVisitorE, i64 16), ptr %0, align 8, !tbaa !8 - %5 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %6 = tail call noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #19 - %7 = getelementptr inbounds nuw i8, ptr %6, i64 16 - %8 = getelementptr inbounds nuw i8, ptr %6, i64 32 - tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %6, i8 0, i64 64, i1 false) - store ptr %8, ptr %7, align 8, !tbaa !10 - %9 = getelementptr inbounds nuw i8, ptr %6, i64 28 - store i32 4, ptr %9, align 4, !tbaa !13 - %10 = getelementptr inbounds nuw i8, ptr %6, i64 64 - %11 = getelementptr inbounds nuw i8, ptr %6, i64 80 - store ptr %11, ptr %10, align 8, !tbaa !10 - %12 = getelementptr inbounds nuw i8, ptr %6, i64 72 - %13 = getelementptr inbounds nuw i8, ptr %6, i64 88 - tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %12, i8 0, i64 16, i1 false) - store i64 1, ptr %13, align 8, !tbaa !14 - %14 = ptrtoint ptr %6 to i64 - store ptr null, ptr %5, align 8, !tbaa !27, !alias.scope !30 - %15 = and i64 %14, 1 - %16 = icmp eq i64 %15, 0 - br i1 %16, label %17, label %_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento7SymExprENS3_8RangeSetEEEED2Ev.exit - -17: ; preds = %3 - tail call void @_ZN4llvm20BumpPtrAllocatorImplINS_15MallocAllocatorELm4096ELm4096ELm128EED2Ev(ptr noundef nonnull align 8 dereferenceable(96) %6) #20 - tail call void @_ZdlPvm(ptr noundef nonnull %6, i64 noundef 96) #21 - br label %_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento7SymExprENS3_8RangeSetEEEED2Ev.exit - -_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento7SymExprENS3_8RangeSetEEEED2Ev.exit: ; preds = %17, %3 + %4 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %5 = tail call noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #19 + %6 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %7 = getelementptr inbounds nuw i8, ptr %5, i64 32 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %5, i8 0, i64 64, i1 false) + store ptr %7, ptr %6, align 8, !tbaa !10 + %8 = getelementptr inbounds nuw i8, ptr %5, i64 28 + store i32 4, ptr %8, align 4, !tbaa !13 + %9 = getelementptr inbounds nuw i8, ptr %5, i64 64 + %10 = getelementptr inbounds nuw i8, ptr %5, i64 80 + store ptr %10, ptr %9, align 8, !tbaa !10 + %11 = getelementptr inbounds nuw i8, ptr %5, i64 72 + %12 = getelementptr inbounds nuw i8, ptr %5, i64 88 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, i8 0, i64 16, i1 false) + store i64 1, ptr %12, align 8, !tbaa !14 + store ptr null, ptr %4, align 8, !tbaa !27, !alias.scope !30 + tail call void @_ZN4llvm20BumpPtrAllocatorImplINS_15MallocAllocatorELm4096ELm4096ELm128EED2Ev(ptr noundef nonnull align 8 dereferenceable(96) %5) #20 + tail call void @_ZdlPvm(ptr noundef nonnull %5, i64 noundef 96) #21 tail call void @_ZN4llvm17deallocate_bufferEPvmm(ptr noundef null, i64 noundef 0, i64 noundef 8) #20 - %18 = getelementptr inbounds nuw i8, ptr %0, i64 24 - store ptr %1, ptr %18, align 8, !tbaa !33 - %19 = getelementptr inbounds nuw i8, ptr %0, i64 32 - store ptr %2, ptr %19, align 8, !tbaa !35 + %13 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store ptr %1, ptr %13, align 8, !tbaa !33 + %14 = getelementptr inbounds nuw i8, ptr %0, i64 32 + store ptr %2, ptr %14, align 8, !tbaa !35 ret void } diff --git a/bench/meshlab/optimized/filter_parametrization.ll b/bench/meshlab/optimized/filter_parametrization.ll index 0109e012fe9..ac3ad365b38 100644 --- a/bench/meshlab/optimized/filter_parametrization.ll +++ b/bench/meshlab/optimized/filter_parametrization.ll @@ -7341,13 +7341,13 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc %45 = add nsw i32 %1, 1 %46 = sext i32 %45 to i64 %or.cond = icmp sgt i32 %1, -1 - br i1 %or.cond, label %47, label %55 + br i1 %or.cond, label %47, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i 47: ; preds = %43 %48 = shl nuw nsw i64 %46, 2 %49 = call noalias ptr @malloc(i64 noundef %48) #43 %50 = icmp eq ptr %49, null - br i1 %50, label %51, label %55 + br i1 %50, label %51, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i 51: ; preds = %47 %52 = call ptr @__cxa_allocate_exception(i64 8) #21 @@ -7363,286 +7363,277 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc cleanup br label %.body -55: ; preds = %43, %47 +_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %43, %47 %.sroa.0.0102 = phi ptr [ null, %43 ], [ %49, %47 ] store i32 0, ptr %.sroa.0.0102, align 4, !noalias !102 - %56 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %57 = load i64, ptr %56, align 8 - %58 = getelementptr inbounds nuw i8, ptr %.sroa.0.0102, i64 4 - %59 = load ptr, ptr %3, align 8 - %60 = ptrtoint ptr %58 to i64 - %61 = and i64 %60, 3 - %.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %61, 0 - br i1 %.not.i.i.i.i.i.i.i.i.i.i.i.i, label %62, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - -62: ; preds = %55 - %63 = lshr exact i64 %60, 2 - %64 = sub nsw i64 0, %63 - %65 = and i64 %64, 3 - %66 = call i64 @llvm.smin.i64(i64 %65, i64 %57) - br label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - -_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %62, %55 - %.0.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %66, %62 ], [ %57, %55 ] - %67 = sub nsw i64 %57, %.0.i.i.i.i.i.i.i.i.i.i.i.i - %68 = sdiv i64 %67, 4 - %69 = shl nsw i64 %68, 2 - %70 = add nsw i64 %69, %.0.i.i.i.i.i.i.i.i.i.i.i.i - %71 = icmp sgt i64 %.0.i.i.i.i.i.i.i.i.i.i.i.i, 0 - br i1 %71, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i + %55 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %56 = load i64, ptr %55, align 8 + %57 = getelementptr inbounds nuw i8, ptr %.sroa.0.0102, i64 4 + %58 = load ptr, ptr %3, align 8 + %59 = ptrtoint ptr %57 to i64 + %60 = lshr exact i64 %59, 2 + %61 = sub nsw i64 0, %60 + %62 = and i64 %61, 3 + %63 = call i64 @llvm.smin.i64(i64 %62, i64 %56) + %64 = sub nsw i64 %56, %63 + %65 = sdiv i64 %64, 4 + %66 = shl nsw i64 %65, 2 + %67 = add nsw i64 %66, %63 + %68 = icmp sgt i64 %63, 0 + br i1 %68, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %75, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] - %72 = getelementptr inbounds nuw i32, ptr %58, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %73 = getelementptr inbounds nuw i32, ptr %59, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %74 = load i32, ptr %73, align 4 - store i32 %74, ptr %72, align 4 - %75 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %75, %.0.i.i.i.i.i.i.i.i.i.i.i.i + %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %72, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] + %69 = getelementptr inbounds nuw i32, ptr %57, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %70 = getelementptr inbounds nuw i32, ptr %58, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %71 = load i32, ptr %70, align 4 + store i32 %71, ptr %69, align 4 + %72 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %72, %63 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !105 _ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - %76 = icmp sgt i64 %67, 3 - br i1 %76, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i + %73 = icmp sgt i64 %64, 3 + br i1 %73, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i - %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %80, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %.0.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] - %77 = getelementptr inbounds i32, ptr %58, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %78 = getelementptr inbounds i32, ptr %59, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %79 = load <2 x i64>, ptr %78, align 1 - store <2 x i64> %79, ptr %77, align 16 - %80 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 - %81 = icmp slt i64 %80, %70 - br i1 %81, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !106 + %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %77, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %63, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] + %74 = getelementptr inbounds i32, ptr %57, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %75 = getelementptr inbounds i32, ptr %58, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %76 = load <2 x i64>, ptr %75, align 1 + store <2 x i64> %76, ptr %74, align 16 + %77 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 + %78 = icmp slt i64 %77, %67 + br i1 %78, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !106 ._crit_edge.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i - %82 = icmp slt i64 %70, %57 - br i1 %82, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %79 = icmp slt i64 %67, %56 + br i1 %79, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit .lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i - %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %86, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %70, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] - %83 = getelementptr inbounds i32, ptr %58, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %84 = getelementptr inbounds i32, ptr %59, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %85 = load i32, ptr %84, align 4 - store i32 %85, ptr %83, align 4 - %86 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %86, %57 + %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %83, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %67, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] + %80 = getelementptr inbounds i32, ptr %57, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %81 = getelementptr inbounds i32, ptr %58, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %82 = load i32, ptr %81, align 4 + store i32 %82, ptr %80, align 4 + %83 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %83, %56 br i1 %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !105 _ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i - %.not.i.i.i.i.i.i.i.i = icmp eq i64 %57, %46 - br i1 %.not.i.i.i.i.i.i.i.i, label %87, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i + %.not.i.i.i.i.i.i.i.i = icmp eq i64 %56, %46 + br i1 %.not.i.i.i.i.i.i.i.i, label %84, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit invoke void @_ZN5Eigen12DenseStorageIiLin1ELin1ELi1ELi0EE6resizeElll(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %46, i64 noundef %46, i64 noundef 1) - to label %.noexc unwind label %171 + to label %.noexc unwind label %168 .noexc: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i - %.pr.i.i.i.i.i.i.i = load i64, ptr %56, align 8 + %.pr.i.i.i.i.i.i.i = load i64, ptr %55, align 8 %.pre = load ptr, ptr %3, align 8 - br label %87 - -87: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit - %88 = phi ptr [ %.pre, %.noexc ], [ %59, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %89 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %46, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %90 = sdiv i64 %89, 4 - %91 = shl nsw i64 %90, 2 - %92 = icmp sgt i64 %89, 3 - br i1 %92, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i - -.lr.ph.i.i.i.i.i.i.i.i: ; preds = %87, %.lr.ph.i.i.i.i.i.i.i.i - %.011.i.i.i.i.i.i.i.i = phi i64 [ %96, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %87 ] - %93 = getelementptr inbounds nuw i32, ptr %88, i64 %.011.i.i.i.i.i.i.i.i - %94 = getelementptr inbounds nuw i32, ptr %.sroa.0.0102, i64 %.011.i.i.i.i.i.i.i.i - %95 = load <2 x i64>, ptr %94, align 16 - store <2 x i64> %95, ptr %93, align 16 - %96 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 - %97 = icmp slt i64 %96, %91 - br i1 %97, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !107 + br label %84 -._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %87 - %98 = icmp slt i64 %91, %89 - br i1 %98, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit +84: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %85 = phi ptr [ %.pre, %.noexc ], [ %58, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %86 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %46, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %87 = sdiv i64 %86, 4 + %88 = shl nsw i64 %87, 2 + %89 = icmp sgt i64 %86, 3 + br i1 %89, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i + +.lr.ph.i.i.i.i.i.i.i.i: ; preds = %84, %.lr.ph.i.i.i.i.i.i.i.i + %.011.i.i.i.i.i.i.i.i = phi i64 [ %93, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %84 ] + %90 = getelementptr inbounds nuw i32, ptr %85, i64 %.011.i.i.i.i.i.i.i.i + %91 = getelementptr inbounds nuw i32, ptr %.sroa.0.0102, i64 %.011.i.i.i.i.i.i.i.i + %92 = load <2 x i64>, ptr %91, align 16 + store <2 x i64> %92, ptr %90, align 16 + %93 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 + %94 = icmp slt i64 %93, %88 + br i1 %94, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !107 + +._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %84 + %95 = icmp slt i64 %88, %86 + br i1 %95, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit .lr.ph.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %102, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %91, %._crit_edge.i.i.i.i.i.i.i.i ] - %99 = getelementptr inbounds i32, ptr %88, i64 %.05.i.i.i.i.i.i.i.i.i - %100 = getelementptr inbounds i32, ptr %.sroa.0.0102, i64 %.05.i.i.i.i.i.i.i.i.i - %101 = load i32, ptr %100, align 4 - store i32 %101, ptr %99, align 4 - %102 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %102, %89 + %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %99, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %88, %._crit_edge.i.i.i.i.i.i.i.i ] + %96 = getelementptr inbounds i32, ptr %85, i64 %.05.i.i.i.i.i.i.i.i.i + %97 = getelementptr inbounds i32, ptr %.sroa.0.0102, i64 %.05.i.i.i.i.i.i.i.i.i + %98 = load i32, ptr %97, align 4 + store i32 %98, ptr %96, align 4 + %99 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %99, %86 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i, !llvm.loop !108 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i call void @free(ptr noundef nonnull %.sroa.0.0102) #21 - %103 = load ptr, ptr %3, align 8 - %104 = load i64, ptr %56, align 8 - %105 = load i64, ptr %10, align 8 - %.not.i.i.i.i.i.i.i.i41 = icmp eq i64 %105, %104 + %100 = load ptr, ptr %3, align 8 + %101 = load i64, ptr %55, align 8 + %102 = load i64, ptr %10, align 8 + %.not.i.i.i.i.i.i.i.i41 = icmp eq i64 %102, %101 %.pre125 = load ptr, ptr %8, align 8 - br i1 %.not.i.i.i.i.i.i.i.i41, label %114, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 + br i1 %.not.i.i.i.i.i.i.i.i41, label %111, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit call void @free(ptr noundef %.pre125) #21 - %106 = icmp sgt i64 %104, 0 - br i1 %106, label %107, label %.noexc50 + %103 = icmp sgt i64 %101, 0 + br i1 %103, label %104, label %.noexc50 -107: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 - %108 = icmp samesign ugt i64 %104, 4611686018427387903 - br i1 %108, label %.invoke, label %109 +104: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 + %105 = icmp samesign ugt i64 %101, 4611686018427387903 + br i1 %105, label %.invoke, label %106 -109: ; preds = %107 - %110 = shl nuw i64 %104, 2 - %111 = call noalias ptr @malloc(i64 noundef %110) #43 - %112 = icmp eq ptr %111, null - br i1 %112, label %.invoke, label %.noexc50 +106: ; preds = %104 + %107 = shl nuw i64 %101, 2 + %108 = call noalias ptr @malloc(i64 noundef %107) #43 + %109 = icmp eq ptr %108, null + br i1 %109, label %.invoke, label %.noexc50 -.invoke: ; preds = %109, %107 - %113 = call ptr @__cxa_allocate_exception(i64 8) #21 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %113, align 8 - invoke void @__cxa_throw(ptr nonnull %113, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 +.invoke: ; preds = %106, %104 + %110 = call ptr @__cxa_allocate_exception(i64 8) #21 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %110, align 8 + invoke void @__cxa_throw(ptr nonnull %110, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 to label %.cont unwind label %37 .cont: ; preds = %.invoke unreachable -.noexc50: ; preds = %109, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 - %.sink.i69 = phi ptr [ %111, %109 ], [ null, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 ] +.noexc50: ; preds = %106, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 + %.sink.i69 = phi ptr [ %108, %106 ], [ null, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 ] store ptr %.sink.i69, ptr %8, align 8 - store i64 %104, ptr %10, align 8 - br label %114 + store i64 %101, ptr %10, align 8 + br label %111 -114: ; preds = %.noexc50, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - %115 = phi ptr [ %.sink.i69, %.noexc50 ], [ %.pre125, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] - %116 = sdiv i64 %104, 4 - %117 = shl nsw i64 %116, 2 - %118 = icmp sgt i64 %104, 3 - br i1 %118, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44 - -.lr.ph.i.i.i.i.i.i.i.i48: ; preds = %114, %.lr.ph.i.i.i.i.i.i.i.i48 - %.011.i.i.i.i.i.i.i.i49 = phi i64 [ %122, %.lr.ph.i.i.i.i.i.i.i.i48 ], [ 0, %114 ] - %119 = getelementptr inbounds nuw i32, ptr %115, i64 %.011.i.i.i.i.i.i.i.i49 - %120 = getelementptr inbounds nuw i32, ptr %103, i64 %.011.i.i.i.i.i.i.i.i49 - %121 = load <2 x i64>, ptr %120, align 16 - store <2 x i64> %121, ptr %119, align 16 - %122 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i49, 4 - %123 = icmp slt i64 %122, %117 - br i1 %123, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44, !llvm.loop !107 - -._crit_edge.i.i.i.i.i.i.i.i44: ; preds = %.lr.ph.i.i.i.i.i.i.i.i48, %114 - %124 = icmp slt i64 %117, %104 - br i1 %124, label %.lr.ph.i.i.i.i.i.i.i.i.i45, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit +111: ; preds = %.noexc50, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit + %112 = phi ptr [ %.sink.i69, %.noexc50 ], [ %.pre125, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] + %113 = sdiv i64 %101, 4 + %114 = shl nsw i64 %113, 2 + %115 = icmp sgt i64 %101, 3 + br i1 %115, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44 + +.lr.ph.i.i.i.i.i.i.i.i48: ; preds = %111, %.lr.ph.i.i.i.i.i.i.i.i48 + %.011.i.i.i.i.i.i.i.i49 = phi i64 [ %119, %.lr.ph.i.i.i.i.i.i.i.i48 ], [ 0, %111 ] + %116 = getelementptr inbounds nuw i32, ptr %112, i64 %.011.i.i.i.i.i.i.i.i49 + %117 = getelementptr inbounds nuw i32, ptr %100, i64 %.011.i.i.i.i.i.i.i.i49 + %118 = load <2 x i64>, ptr %117, align 16 + store <2 x i64> %118, ptr %116, align 16 + %119 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i49, 4 + %120 = icmp slt i64 %119, %114 + br i1 %120, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44, !llvm.loop !107 + +._crit_edge.i.i.i.i.i.i.i.i44: ; preds = %.lr.ph.i.i.i.i.i.i.i.i48, %111 + %121 = icmp slt i64 %114, %101 + br i1 %121, label %.lr.ph.i.i.i.i.i.i.i.i.i45, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit .lr.ph.i.i.i.i.i.i.i.i.i45: ; preds = %._crit_edge.i.i.i.i.i.i.i.i44, %.lr.ph.i.i.i.i.i.i.i.i.i45 - %.05.i.i.i.i.i.i.i.i.i46 = phi i64 [ %128, %.lr.ph.i.i.i.i.i.i.i.i.i45 ], [ %117, %._crit_edge.i.i.i.i.i.i.i.i44 ] - %125 = getelementptr inbounds i32, ptr %115, i64 %.05.i.i.i.i.i.i.i.i.i46 - %126 = getelementptr inbounds i32, ptr %103, i64 %.05.i.i.i.i.i.i.i.i.i46 - %127 = load i32, ptr %126, align 4 - store i32 %127, ptr %125, align 4 - %128 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i46, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i47 = icmp eq i64 %128, %104 + %.05.i.i.i.i.i.i.i.i.i46 = phi i64 [ %125, %.lr.ph.i.i.i.i.i.i.i.i.i45 ], [ %114, %._crit_edge.i.i.i.i.i.i.i.i44 ] + %122 = getelementptr inbounds i32, ptr %112, i64 %.05.i.i.i.i.i.i.i.i.i46 + %123 = getelementptr inbounds i32, ptr %100, i64 %.05.i.i.i.i.i.i.i.i.i46 + %124 = load i32, ptr %123, align 4 + store i32 %124, ptr %122, align 4 + %125 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i46, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i47 = icmp eq i64 %125, %101 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i45, !llvm.loop !108 _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i45, %._crit_edge.i.i.i.i.i.i.i.i44 - %129 = load i64, ptr %22, align 8 - %130 = mul nsw i64 %129, 3 - %131 = icmp sgt i64 %129, 0 - br i1 %131, label %132, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit + %126 = load i64, ptr %22, align 8 + %127 = mul nsw i64 %126, 3 + %128 = icmp sgt i64 %126, 0 + br i1 %128, label %129, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit -132: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %133 = icmp samesign ugt i64 %130, 4611686018427387903 - br i1 %133, label %.invoke141, label %134 +129: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit + %130 = icmp samesign ugt i64 %127, 4611686018427387903 + br i1 %130, label %.invoke141, label %131 -134: ; preds = %132 - %135 = mul i64 %129, 12 - %136 = call noalias ptr @malloc(i64 noundef %135) #43 - %137 = icmp eq ptr %136, null - br i1 %137, label %.invoke141, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit +131: ; preds = %129 + %132 = mul i64 %126, 12 + %133 = call noalias ptr @malloc(i64 noundef %132) #43 + %134 = icmp eq ptr %133, null + br i1 %134, label %.invoke141, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit -.invoke141: ; preds = %134, %132 - %138 = call ptr @__cxa_allocate_exception(i64 8) #21 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %138, align 8 - invoke void @__cxa_throw(ptr nonnull %138, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 - to label %.cont142 unwind label %139 +.invoke141: ; preds = %131, %129 + %135 = call ptr @__cxa_allocate_exception(i64 8) #21 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %135, align 8 + invoke void @__cxa_throw(ptr nonnull %135, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 + to label %.cont142 unwind label %136 .cont142: ; preds = %.invoke141 unreachable -139: ; preds = %.invoke141 - %140 = landingpad { ptr, i32 } +136: ; preds = %.invoke141 + %137 = landingpad { ptr, i32 } cleanup br label %.body -_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %134, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %.sroa.0.0 = phi ptr [ null, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit ], [ %136, %134 ] - %141 = load ptr, ptr %2, align 8 +_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %131, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit + %.sroa.0.0 = phi ptr [ null, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit ], [ %133, %131 ] + %138 = load ptr, ptr %2, align 8 store ptr %.sroa.0.0, ptr %2, align 8 - %142 = getelementptr inbounds nuw i8, ptr %2, i64 8 - store i64 %130, ptr %142, align 8 - call void @free(ptr noundef %141) #21 - %143 = load i64, ptr %22, align 8 - %144 = icmp sgt i64 %143, 0 - br i1 %144, label %.preheader, label %._crit_edge109 - -.preheader: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit, %173 - %indvars.iv122 = phi i64 [ %indvars.iv.next123, %173 ], [ 0, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit ] - %145 = trunc nuw nsw i64 %indvars.iv122 to i32 - br label %146 + %139 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %127, ptr %139, align 8 + call void @free(ptr noundef %138) #21 + %140 = load i64, ptr %22, align 8 + %141 = icmp sgt i64 %140, 0 + br i1 %141, label %.preheader, label %._crit_edge109 + +.preheader: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit, %170 + %indvars.iv122 = phi i64 [ %indvars.iv.next123, %170 ], [ 0, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit ] + %142 = trunc nuw nsw i64 %indvars.iv122 to i32 + br label %143 -146: ; preds = %.preheader, %146 - %indvars.iv118 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next119, %146 ] - %147 = load ptr, ptr %0, align 8 - %148 = load i64, ptr %22, align 8 - %149 = mul nsw i64 %148, %indvars.iv118 - %150 = getelementptr i32, ptr %147, i64 %indvars.iv122 - %151 = getelementptr i32, ptr %150, i64 %149 - %152 = load i32, ptr %151, align 4 - %153 = sext i32 %152 to i64 - %154 = load ptr, ptr %8, align 8 - %155 = getelementptr inbounds i32, ptr %154, i64 %153 - %156 = load i32, ptr %155, align 4 - %157 = sext i32 %156 to i64 - %158 = load ptr, ptr %2, align 8 - %159 = getelementptr inbounds i32, ptr %158, i64 %157 - store i32 %145, ptr %159, align 4 - %160 = load ptr, ptr %0, align 8 - %161 = load i64, ptr %22, align 8 - %162 = mul nsw i64 %161, %indvars.iv118 - %163 = getelementptr i32, ptr %160, i64 %indvars.iv122 - %164 = getelementptr i32, ptr %163, i64 %162 - %165 = load i32, ptr %164, align 4 - %166 = sext i32 %165 to i64 - %167 = load ptr, ptr %8, align 8 - %168 = getelementptr inbounds i32, ptr %167, i64 %166 - %169 = load i32, ptr %168, align 4 - %170 = add nsw i32 %169, 1 - store i32 %170, ptr %168, align 4 +143: ; preds = %.preheader, %143 + %indvars.iv118 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next119, %143 ] + %144 = load ptr, ptr %0, align 8 + %145 = load i64, ptr %22, align 8 + %146 = mul nsw i64 %145, %indvars.iv118 + %147 = getelementptr i32, ptr %144, i64 %indvars.iv122 + %148 = getelementptr i32, ptr %147, i64 %146 + %149 = load i32, ptr %148, align 4 + %150 = sext i32 %149 to i64 + %151 = load ptr, ptr %8, align 8 + %152 = getelementptr inbounds i32, ptr %151, i64 %150 + %153 = load i32, ptr %152, align 4 + %154 = sext i32 %153 to i64 + %155 = load ptr, ptr %2, align 8 + %156 = getelementptr inbounds i32, ptr %155, i64 %154 + store i32 %142, ptr %156, align 4 + %157 = load ptr, ptr %0, align 8 + %158 = load i64, ptr %22, align 8 + %159 = mul nsw i64 %158, %indvars.iv118 + %160 = getelementptr i32, ptr %157, i64 %indvars.iv122 + %161 = getelementptr i32, ptr %160, i64 %159 + %162 = load i32, ptr %161, align 4 + %163 = sext i32 %162 to i64 + %164 = load ptr, ptr %8, align 8 + %165 = getelementptr inbounds i32, ptr %164, i64 %163 + %166 = load i32, ptr %165, align 4 + %167 = add nsw i32 %166, 1 + store i32 %167, ptr %165, align 4 %indvars.iv.next119 = add nuw nsw i64 %indvars.iv118, 1 %exitcond121.not = icmp eq i64 %indvars.iv.next119, 3 - br i1 %exitcond121.not, label %173, label %146, !llvm.loop !109 + br i1 %exitcond121.not, label %170, label %143, !llvm.loop !109 -171: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i - %172 = landingpad { ptr, i32 } +168: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i + %169 = landingpad { ptr, i32 } cleanup call void @free(ptr noundef nonnull %.sroa.0.0102) #21 br label %.body -173: ; preds = %146 +170: ; preds = %143 %indvars.iv.next123 = add nuw nsw i64 %indvars.iv122, 1 - %174 = load i64, ptr %22, align 8 - %175 = icmp sgt i64 %174, %indvars.iv.next123 - br i1 %175, label %.preheader, label %._crit_edge109, !llvm.loop !110 + %171 = load i64, ptr %22, align 8 + %172 = icmp sgt i64 %171, %indvars.iv.next123 + br i1 %172, label %.preheader, label %._crit_edge109, !llvm.loop !110 -._crit_edge109: ; preds = %173, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit - %176 = load ptr, ptr %8, align 8 - call void @free(ptr noundef %176) #21 +._crit_edge109: ; preds = %170, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit + %173 = load ptr, ptr %8, align 8 + call void @free(ptr noundef %173) #21 ret void -.body: ; preds = %53, %139, %37, %171 - %.pn39 = phi { ptr, i32 } [ %172, %171 ], [ %54, %53 ], [ %38, %37 ], [ %140, %139 ] - %177 = load ptr, ptr %8, align 8 - call void @free(ptr noundef %177) #21 +.body: ; preds = %53, %136, %37, %168 + %.pn39 = phi { ptr, i32 } [ %169, %168 ], [ %54, %53 ], [ %38, %37 ], [ %137, %136 ] + %174 = load ptr, ptr %8, align 8 + call void @free(ptr noundef %174) #21 br label %common.resume } diff --git a/bench/openjdk/optimized/methodData.ll b/bench/openjdk/optimized/methodData.ll index eb582205d0a..f163bdc6a9f 100644 --- a/bench/openjdk/optimized/methodData.ll +++ b/bench/openjdk/optimized/methodData.ll @@ -247,8 +247,6 @@ $_ZTVN16MetaspaceClosure6MSORefI6MethodEE = comdat any @.str.36 = private unnamed_addr constant [20 x i8] c"SpeculativeTrapData\00", align 1 @.str.37 = private unnamed_addr constant [48 x i8] c"unexpected bytecode for var length profile data\00", align 1 @UseTypeSpeculation = external local_unnamed_addr global i8, align 1 -@.str.38 = private unnamed_addr constant [61 x i8] c"guarantee(is_aligned(fs, sizeof(FailedSpeculation*))) failed\00", align 1 -@.str.39 = private unnamed_addr constant [50 x i8] c"FailedSpeculation objects must be pointer aligned\00", align 1 @.str.40 = private unnamed_addr constant [37 x i8] c"guarantee(*cursor != nullptr) failed\00", align 1 @.str.41 = private unnamed_addr constant [48 x i8] c"cursor must point to non-null FailedSpeculation\00", align 1 @SpecTrapLimitExtraEntries = external local_unnamed_addr global i32, align 4 @@ -3781,16 +3779,16 @@ _ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit: ; p call void @llvm.lifetime.end.p0(ptr nonnull %5) br label %26 -26: ; preds = %56, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit - %27 = phi ptr [ %.val, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %.pre, %56 ] - %.024 = phi ptr [ %1, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %57, %56 ] - %.023 = phi ptr [ null, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %.232, %56 ] +26: ; preds = %51, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit + %27 = phi ptr [ %.val, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %.pre, %51 ] + %.024 = phi ptr [ %1, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %52, %51 ] + %.023 = phi ptr [ null, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %.232, %51 ] %28 = icmp eq ptr %27, null br i1 %28, label %29, label %.thread29 29: ; preds = %26 %30 = icmp eq ptr %.023, null - br i1 %30, label %31, label %42 + br i1 %30, label %31, label %37 31: ; preds = %29 %32 = tail call noundef ptr @_Z12AllocateHeapm8MEMFLAGSN17AllocFailStrategy13AllocFailEnumE(i64 noundef %7, i8 noundef zeroext 7, i32 noundef 1) #21 @@ -3803,62 +3801,53 @@ _ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit: ; p store ptr null, ptr %35, align 8 %36 = getelementptr inbounds nuw i8, ptr %32, i64 16 tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %36, ptr readonly align 1 %2, i64 %6, i1 false) - %37 = ptrtoint ptr %32 to i64 - %38 = and i64 %37, 7 - %39 = icmp eq i64 %38, 0 - br i1 %39, label %42, label %40 - -40: ; preds = %34 - %41 = load ptr, ptr @g_assert_poison, align 8 - store i8 88, ptr %41, align 1 - tail call void (ptr, i32, ptr, ptr, ...) @_Z15report_vm_errorPKciS0_S0_z(ptr noundef nonnull @.str.5, i32 noundef 848, ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.39) #22 - unreachable + br label %37 -42: ; preds = %34, %29 +37: ; preds = %34, %29 %.1 = phi ptr [ %32, %34 ], [ %.023, %29 ] - %43 = tail call noundef ptr asm sideeffect "lock cmpxchgq $1,($3)", "={ax},r,{ax},r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull %.1, ptr null, ptr nonnull %.024) #21, !srcloc !23 - %44 = icmp eq ptr %43, null - br i1 %44, label %.thread, label %45 + %38 = tail call noundef ptr asm sideeffect "lock cmpxchgq $1,($3)", "={ax},r,{ax},r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull %.1, ptr null, ptr nonnull %.024) #21, !srcloc !23 + %39 = icmp eq ptr %38, null + br i1 %39, label %.thread, label %40 -45: ; preds = %42 +40: ; preds = %37 %.pr = load ptr, ptr %.024, align 8 %.not = icmp eq ptr %.pr, null - br i1 %.not, label %46, label %.thread29 + br i1 %.not, label %41, label %.thread29 -46: ; preds = %45 - %47 = load ptr, ptr @g_assert_poison, align 8 - store i8 88, ptr %47, align 1 +41: ; preds = %40 + %42 = load ptr, ptr @g_assert_poison, align 8 + store i8 88, ptr %42, align 1 tail call void (ptr, i32, ptr, ptr, ...) @_Z15report_vm_errorPKciS0_S0_z(ptr noundef nonnull @.str.5, i32 noundef 856, ptr noundef nonnull @.str.40, ptr noundef nonnull @.str.41) #22 unreachable -.thread29: ; preds = %26, %45 - %.232 = phi ptr [ %.1, %45 ], [ %.023, %26 ] - %48 = phi ptr [ %.pr, %45 ], [ %27, %26 ] - %49 = load i32, ptr %48, align 8 - %50 = icmp eq i32 %49, %3 - br i1 %50, label %51, label %56 +.thread29: ; preds = %26, %40 + %.232 = phi ptr [ %.1, %40 ], [ %.023, %26 ] + %43 = phi ptr [ %.pr, %40 ], [ %27, %26 ] + %44 = load i32, ptr %43, align 8 + %45 = icmp eq i32 %44, %3 + br i1 %45, label %46, label %51 -51: ; preds = %.thread29 - %52 = getelementptr inbounds nuw i8, ptr %48, i64 16 - %bcmp = tail call i32 @bcmp(ptr %2, ptr nonnull %52, i64 %6) - %53 = icmp eq i32 %bcmp, 0 - br i1 %53, label %54, label %56 +46: ; preds = %.thread29 + %47 = getelementptr inbounds nuw i8, ptr %43, i64 16 + %bcmp = tail call i32 @bcmp(ptr %2, ptr nonnull %47, i64 %6) + %48 = icmp eq i32 %bcmp, 0 + br i1 %48, label %49, label %51 -54: ; preds = %51 +49: ; preds = %46 %.not28 = icmp eq ptr %.232, null - br i1 %.not28, label %.thread, label %55 + br i1 %.not28, label %.thread, label %50 -55: ; preds = %54 +50: ; preds = %49 tail call void @_Z8FreeHeapPv(ptr noundef nonnull %.232) #21 br label %.thread -56: ; preds = %51, %.thread29 - %57 = getelementptr inbounds nuw i8, ptr %48, i64 8 - %.pre = load ptr, ptr %57, align 8 +51: ; preds = %46, %.thread29 + %52 = getelementptr inbounds nuw i8, ptr %43, i64 8 + %.pre = load ptr, ptr %52, align 8 br label %26, !llvm.loop !24 -.thread: ; preds = %31, %42, %54, %55 - %.0 = phi i1 [ false, %55 ], [ false, %54 ], [ false, %31 ], [ true, %42 ] +.thread: ; preds = %31, %37, %49, %50 + %.0 = phi i1 [ false, %50 ], [ false, %49 ], [ false, %31 ], [ true, %37 ] ret i1 %.0 } diff --git a/bench/openjdk/optimized/screencast_pipewire.ll b/bench/openjdk/optimized/screencast_pipewire.ll index 12edb35a81d..e05a25c0549 100644 --- a/bench/openjdk/optimized/screencast_pipewire.ll +++ b/bench/openjdk/optimized/screencast_pipewire.ll @@ -2588,7 +2588,7 @@ define internal void @onStreamParamChanged(ptr noundef %0, i32 noundef %1, ptr n %21 = icmp eq ptr %2, null %22 = icmp ne i32 %1, 4 %or.cond = or i1 %22, %21 - br i1 %or.cond, label %151, label %23 + br i1 %or.cond, label %148, label %23 23: ; preds = %3 call void @llvm.lifetime.start.p0(ptr nonnull %6) @@ -2603,243 +2603,239 @@ define internal void @onStreamParamChanged(ptr noundef %0, i32 noundef %1, ptr n %26 = getelementptr inbounds nuw i8, ptr %6, i64 24 %27 = getelementptr inbounds nuw i8, ptr %6, i64 16 %.not.i.i.i.i = icmp ult i32 %24, -8 - %28 = ptrtoint ptr %2 to i64 - %29 = and i64 %28, 3 - %30 = icmp eq i64 %29, 0 - %or.cond.i = and i1 %30, %.not.i.i.i.i - br i1 %or.cond.i, label %31, label %spa_format_parse.exit.thread - -31: ; preds = %23 - %32 = zext i32 %25 to i64 - %33 = zext i32 %24 to i64 - %34 = add nsw i64 %33, -1 - %35 = or i64 %34, 7 - %36 = add nsw i64 %35, 9 - %.not13.i.i.i.i = icmp ugt i64 %36, %32 + br i1 %.not.i.i.i.i, label %28, label %spa_format_parse.exit.thread + +28: ; preds = %23 + %29 = zext i32 %25 to i64 + %30 = zext i32 %24 to i64 + %31 = add nsw i64 %30, -1 + %32 = or i64 %31, 7 + %33 = add nsw i64 %32, 9 + %.not13.i.i.i.i = icmp ugt i64 %33, %29 br i1 %.not13.i.i.i.i, label %spa_format_parse.exit.thread, label %spa_pod_parser_current.exit.i.i -spa_pod_parser_current.exit.i.i: ; preds = %31 - %37 = getelementptr inbounds nuw i8, ptr %2, i64 4 - %38 = load i32, ptr %37, align 4 - %39 = icmp ne i32 %38, 15 - %40 = icmp ult i32 %24, 8 - %or.cond.i.i = or i1 %40, %39 - br i1 %or.cond.i.i, label %spa_format_parse.exit.thread, label %41 - -41: ; preds = %spa_pod_parser_current.exit.i.i - %42 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %43 = load i32, ptr %42, align 4 - %.not16.i.i = icmp eq i32 %43, 262147 +spa_pod_parser_current.exit.i.i: ; preds = %28 + %34 = getelementptr inbounds nuw i8, ptr %2, i64 4 + %35 = load i32, ptr %34, align 4 + %36 = icmp ne i32 %35, 15 + %37 = icmp ult i32 %24, 8 + %or.cond.i.i = or i1 %37, %36 + br i1 %or.cond.i.i, label %spa_format_parse.exit.thread, label %38 + +38: ; preds = %spa_pod_parser_current.exit.i.i + %39 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %40 = load i32, ptr %39, align 4 + %.not16.i.i = icmp eq i32 %40, 262147 br i1 %.not16.i.i, label %spa_format_parse.exit, label %spa_format_parse.exit.thread -spa_format_parse.exit.thread: ; preds = %spa_pod_parser_current.exit.i.i, %31, %23, %41 +spa_format_parse.exit.thread: ; preds = %spa_pod_parser_current.exit.i.i, %28, %23, %38 call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.end.p0(ptr nonnull %7) - br label %151 + br label %148 -spa_format_parse.exit: ; preds = %41 +spa_format_parse.exit: ; preds = %38 %.val.i.i = load i64, ptr %2, align 4 store i64 %.val.i.i, ptr %7, align 8 - %44 = getelementptr inbounds nuw i8, ptr %7, i64 8 - call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %44, i8 0, i64 16, i1 false) + %41 = getelementptr inbounds nuw i8, ptr %7, i64 8 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %41, i8 0, i64 16, i1 false) store ptr %7, ptr %26, align 8 store i32 %25, ptr %27, align 8 - %45 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %6, i32 noundef 1, ptr noundef nonnull @.str.76, ptr noundef nonnull %8, i32 noundef 2, ptr noundef nonnull @.str.76, ptr noundef nonnull %9, i32 noundef 0) + %42 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %6, i32 noundef 1, ptr noundef nonnull @.str.76, ptr noundef nonnull %8, i32 noundef 2, ptr noundef nonnull @.str.76, ptr noundef nonnull %9, i32 noundef 0) call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.end.p0(ptr nonnull %7) - %46 = icmp slt i32 %45, 0 - br i1 %46, label %151, label %47 - -47: ; preds = %spa_format_parse.exit - %48 = load i32, ptr %8, align 4 - %49 = icmp ne i32 %48, 2 - %50 = load i32, ptr %9, align 4 - %51 = icmp ne i32 %50, 1 - %or.cond3 = select i1 %49, i1 true, i1 %51 - br i1 %or.cond3, label %151, label %52 - -52: ; preds = %47 - %53 = getelementptr inbounds nuw i8, ptr %0, i64 56 + %43 = icmp slt i32 %42, 0 + br i1 %43, label %148, label %44 + +44: ; preds = %spa_format_parse.exit + %45 = load i32, ptr %8, align 4 + %46 = icmp ne i32 %45, 2 + %47 = load i32, ptr %9, align 4 + %48 = icmp ne i32 %47, 1 + %or.cond3 = select i1 %46, i1 true, i1 %48 + br i1 %or.cond3, label %148, label %49 + +49: ; preds = %44 + %50 = getelementptr inbounds nuw i8, ptr %0, i64 56 call void @llvm.lifetime.start.p0(ptr nonnull %4) call void @llvm.lifetime.start.p0(ptr nonnull %5) - %54 = getelementptr inbounds nuw i8, ptr %0, i64 60 - store i32 0, ptr %54, align 4 - %55 = load i32, ptr %37, align 4 - %56 = icmp eq i32 %55, 15 + %51 = getelementptr inbounds nuw i8, ptr %0, i64 60 + store i32 0, ptr %51, align 4 + %52 = load i32, ptr %34, align 4 + %53 = icmp eq i32 %52, 15 %.pre27.i = load i32, ptr %2, align 4 - br i1 %56, label %spa_pod_is_object.exit.i.i, label %spa_pod_find_prop.exit.thread.i + br i1 %53, label %spa_pod_is_object.exit.i.i, label %spa_pod_find_prop.exit.thread.i -spa_pod_is_object.exit.i.i: ; preds = %52 - %57 = icmp ult i32 %.pre27.i, 8 - br i1 %57, label %.thread, label %61 +spa_pod_is_object.exit.i.i: ; preds = %49 + %54 = icmp ult i32 %.pre27.i, 8 + br i1 %54, label %.thread, label %58 .thread: ; preds = %spa_pod_is_object.exit.i.i - %58 = or disjoint i32 %.pre27.i, 8 + %55 = or disjoint i32 %.pre27.i, 8 store ptr %2, ptr %4, align 8 %.sroa.2.0..sroa_idx.i.i30.i = getelementptr inbounds nuw i8, ptr %4, i64 8 - store i32 %58, ptr %.sroa.2.0..sroa_idx.i.i30.i, align 8 + store i32 %55, ptr %.sroa.2.0..sroa_idx.i.i30.i, align 8 %.sroa.3.0..sroa_idx.i.i31.i = getelementptr inbounds nuw i8, ptr %4, i64 12 call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %.sroa.3.0..sroa_idx.i.i31.i, i8 0, i64 20, i1 false) - %59 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %60 = getelementptr inbounds nuw i8, ptr %4, i64 16 - br label %88 + %56 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %57 = getelementptr inbounds nuw i8, ptr %4, i64 16 + br label %85 -61: ; preds = %spa_pod_is_object.exit.i.i - %62 = ptrtoint ptr %42 to i64 - %63 = add i64 %62, 8 - %64 = inttoptr i64 %63 to ptr - %65 = zext i32 %.pre27.i to i64 - %66 = getelementptr i8, ptr %42, i64 %65 - %67 = getelementptr i8, ptr %64, i64 16 - %.not.i25.i.i.i = icmp ugt ptr %67, %66 +58: ; preds = %spa_pod_is_object.exit.i.i + %59 = ptrtoint ptr %39 to i64 + %60 = add i64 %59, 8 + %61 = inttoptr i64 %60 to ptr + %62 = zext i32 %.pre27.i to i64 + %63 = getelementptr i8, ptr %39, i64 %62 + %64 = getelementptr i8, ptr %61, i64 16 + %.not.i25.i.i.i = icmp ugt ptr %64, %63 br i1 %.not.i25.i.i.i, label %spa_pod_find_prop.exit.thread.i, label %.lr.ph.i.i.i -.lr.ph.i.i.i: ; preds = %61, %76 - %.026.i.i.i = phi ptr [ %82, %76 ], [ %64, %61 ] - %68 = getelementptr inbounds nuw i8, ptr %.026.i.i.i, i64 8 - %69 = load i32, ptr %68, align 4 - %70 = zext i32 %69 to i64 - %71 = getelementptr i8, ptr %.026.i.i.i, i64 %70 - %72 = getelementptr i8, ptr %71, i64 16 - %.not22.i.i.i = icmp ugt ptr %72, %66 - br i1 %.not22.i.i.i, label %spa_pod_find_prop.exit.thread.i, label %73 - -73: ; preds = %.lr.ph.i.i.i - %74 = load i32, ptr %.026.i.i.i, align 4 - %75 = icmp eq i32 %74, 131074 - br i1 %75, label %spa_pod_find_prop.exit.i, label %76 - -76: ; preds = %73 - %77 = ptrtoint ptr %.026.i.i.i to i64 - %78 = add nuw nsw i64 %70, 15 - %79 = or i64 %78, 7 - %80 = add i64 %77, 1 - %81 = add i64 %80, %79 - %82 = inttoptr i64 %81 to ptr - %83 = getelementptr i8, ptr %82, i64 16 - %.not.i.i.i.i32 = icmp ugt ptr %83, %66 +.lr.ph.i.i.i: ; preds = %58, %73 + %.026.i.i.i = phi ptr [ %79, %73 ], [ %61, %58 ] + %65 = getelementptr inbounds nuw i8, ptr %.026.i.i.i, i64 8 + %66 = load i32, ptr %65, align 4 + %67 = zext i32 %66 to i64 + %68 = getelementptr i8, ptr %.026.i.i.i, i64 %67 + %69 = getelementptr i8, ptr %68, i64 16 + %.not22.i.i.i = icmp ugt ptr %69, %63 + br i1 %.not22.i.i.i, label %spa_pod_find_prop.exit.thread.i, label %70 + +70: ; preds = %.lr.ph.i.i.i + %71 = load i32, ptr %.026.i.i.i, align 4 + %72 = icmp eq i32 %71, 131074 + br i1 %72, label %spa_pod_find_prop.exit.i, label %73 + +73: ; preds = %70 + %74 = ptrtoint ptr %.026.i.i.i to i64 + %75 = add nuw nsw i64 %67, 15 + %76 = or i64 %75, 7 + %77 = add i64 %74, 1 + %78 = add i64 %77, %76 + %79 = inttoptr i64 %78 to ptr + %80 = getelementptr i8, ptr %79, i64 16 + %.not.i.i.i.i32 = icmp ugt ptr %80, %63 br i1 %.not.i.i.i.i32, label %spa_pod_find_prop.exit.thread.i, label %.lr.ph.i.i.i, !llvm.loop !16 -spa_pod_find_prop.exit.i: ; preds = %73 - store i32 4, ptr %54, align 4 +spa_pod_find_prop.exit.i: ; preds = %70 + store i32 4, ptr %51, align 4 %.pre.i = load i32, ptr %2, align 4 br label %spa_pod_find_prop.exit.thread.i -spa_pod_find_prop.exit.thread.i: ; preds = %76, %.lr.ph.i.i.i, %spa_pod_find_prop.exit.i, %61, %52 - %84 = phi i32 [ %.pre27.i, %52 ], [ %.pre27.i, %61 ], [ %.pre.i, %spa_pod_find_prop.exit.i ], [ %.pre27.i, %.lr.ph.i.i.i ], [ %.pre27.i, %76 ] - %85 = add i32 %84, 8 +spa_pod_find_prop.exit.thread.i: ; preds = %73, %.lr.ph.i.i.i, %spa_pod_find_prop.exit.i, %58, %49 + %81 = phi i32 [ %.pre27.i, %49 ], [ %.pre27.i, %58 ], [ %.pre.i, %spa_pod_find_prop.exit.i ], [ %.pre27.i, %.lr.ph.i.i.i ], [ %.pre27.i, %73 ] + %82 = add i32 %81, 8 store ptr %2, ptr %4, align 8 %.sroa.2.0..sroa_idx.i.i.i24 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store i32 %85, ptr %.sroa.2.0..sroa_idx.i.i.i24, align 8 + store i32 %82, ptr %.sroa.2.0..sroa_idx.i.i.i24, align 8 %.sroa.3.0..sroa_idx.i.i.i25 = getelementptr inbounds nuw i8, ptr %4, i64 12 call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %.sroa.3.0..sroa_idx.i.i.i25, i8 0, i64 20, i1 false) - %86 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %87 = getelementptr inbounds nuw i8, ptr %4, i64 16 - %.not.i.i.i22.i = icmp ult i32 %84, -8 - br i1 %.not.i.i.i22.i, label %88, label %spa_format_video_raw_parse.exit.thread - -88: ; preds = %spa_pod_find_prop.exit.thread.i, %.thread - %89 = phi i32 [ %.pre27.i, %.thread ], [ %84, %spa_pod_find_prop.exit.thread.i ] - %90 = phi i32 [ %58, %.thread ], [ %85, %spa_pod_find_prop.exit.thread.i ] - %91 = phi ptr [ %59, %.thread ], [ %86, %spa_pod_find_prop.exit.thread.i ] - %92 = phi ptr [ %60, %.thread ], [ %87, %spa_pod_find_prop.exit.thread.i ] - %93 = zext i32 %90 to i64 - %94 = zext i32 %89 to i64 - %95 = add nsw i64 %94, -1 - %96 = or i64 %95, 7 - %97 = add nsw i64 %96, 9 - %.not13.i.i.i.i27 = icmp ugt i64 %97, %93 + %83 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %84 = getelementptr inbounds nuw i8, ptr %4, i64 16 + %.not.i.i.i22.i = icmp ult i32 %81, -8 + br i1 %.not.i.i.i22.i, label %85, label %spa_format_video_raw_parse.exit.thread + +85: ; preds = %spa_pod_find_prop.exit.thread.i, %.thread + %86 = phi i32 [ %.pre27.i, %.thread ], [ %81, %spa_pod_find_prop.exit.thread.i ] + %87 = phi i32 [ %55, %.thread ], [ %82, %spa_pod_find_prop.exit.thread.i ] + %88 = phi ptr [ %56, %.thread ], [ %83, %spa_pod_find_prop.exit.thread.i ] + %89 = phi ptr [ %57, %.thread ], [ %84, %spa_pod_find_prop.exit.thread.i ] + %90 = zext i32 %87 to i64 + %91 = zext i32 %86 to i64 + %92 = add nsw i64 %91, -1 + %93 = or i64 %92, 7 + %94 = add nsw i64 %93, 9 + %.not13.i.i.i.i27 = icmp ugt i64 %94, %90 br i1 %.not13.i.i.i.i27, label %spa_format_video_raw_parse.exit.thread, label %spa_pod_parser_current.exit.i.i28 -spa_pod_parser_current.exit.i.i28: ; preds = %88 - %98 = load i32, ptr %37, align 4 - %99 = icmp ne i32 %98, 15 - %100 = icmp ult i32 %89, 8 - %or.cond.i.i29 = or i1 %100, %99 - br i1 %or.cond.i.i29, label %spa_format_video_raw_parse.exit.thread, label %101 +spa_pod_parser_current.exit.i.i28: ; preds = %85 + %95 = load i32, ptr %34, align 4 + %96 = icmp ne i32 %95, 15 + %97 = icmp ult i32 %86, 8 + %or.cond.i.i29 = or i1 %97, %96 + br i1 %or.cond.i.i29, label %spa_format_video_raw_parse.exit.thread, label %98 -101: ; preds = %spa_pod_parser_current.exit.i.i28 - %102 = load i32, ptr %42, align 4 - %.not16.i.i30 = icmp eq i32 %102, 262147 +98: ; preds = %spa_pod_parser_current.exit.i.i28 + %99 = load i32, ptr %39, align 4 + %.not16.i.i30 = icmp eq i32 %99, 262147 br i1 %.not16.i.i30, label %spa_format_video_raw_parse.exit, label %spa_format_video_raw_parse.exit.thread -spa_format_video_raw_parse.exit.thread: ; preds = %spa_pod_find_prop.exit.thread.i, %spa_pod_parser_current.exit.i.i28, %88, %101 +spa_format_video_raw_parse.exit.thread: ; preds = %spa_pod_find_prop.exit.thread.i, %spa_pod_parser_current.exit.i.i28, %85, %98 call void @llvm.lifetime.end.p0(ptr nonnull %4) call void @llvm.lifetime.end.p0(ptr nonnull %5) - br label %151 + br label %148 -spa_format_video_raw_parse.exit: ; preds = %101 +spa_format_video_raw_parse.exit: ; preds = %98 %.val.i.i31 = load i64, ptr %2, align 4 store i64 %.val.i.i31, ptr %5, align 8 - %103 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %104 = getelementptr inbounds nuw i8, ptr %5, i64 8 - call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %104, i8 0, i64 16, i1 false) - store ptr %5, ptr %91, align 8 - store i32 %90, ptr %92, align 8 - %105 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %106 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %107 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %108 = getelementptr inbounds nuw i8, ptr %0, i64 88 - %109 = getelementptr inbounds nuw i8, ptr %0, i64 96 - %110 = getelementptr inbounds nuw i8, ptr %0, i64 100 - %111 = getelementptr inbounds nuw i8, ptr %0, i64 104 - %112 = getelementptr inbounds nuw i8, ptr %0, i64 112 - %113 = getelementptr inbounds nuw i8, ptr %0, i64 116 - %114 = getelementptr inbounds nuw i8, ptr %0, i64 120 - %115 = getelementptr inbounds nuw i8, ptr %0, i64 124 - %116 = getelementptr inbounds nuw i8, ptr %0, i64 128 - %117 = getelementptr inbounds nuw i8, ptr %0, i64 132 - %118 = getelementptr inbounds nuw i8, ptr %0, i64 136 - %119 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %4, i32 noundef 131073, ptr noundef nonnull @.str.77, ptr noundef nonnull %53, i32 noundef 131074, ptr noundef nonnull @.str.78, ptr noundef nonnull %105, i32 noundef 131075, ptr noundef nonnull @.str.79, ptr noundef nonnull %106, i32 noundef 131076, ptr noundef nonnull @.str.80, ptr noundef nonnull %107, i32 noundef 131077, ptr noundef nonnull @.str.80, ptr noundef nonnull %108, i32 noundef 131078, ptr noundef nonnull @.str.81, ptr noundef nonnull %109, i32 noundef 131079, ptr noundef nonnull @.str.77, ptr noundef nonnull %110, i32 noundef 131080, ptr noundef nonnull @.str.80, ptr noundef nonnull %111, i32 noundef 131081, ptr noundef nonnull @.str.77, ptr noundef nonnull %112, i32 noundef 131082, ptr noundef nonnull @.str.77, ptr noundef nonnull %113, i32 noundef 131083, ptr noundef nonnull @.str.77, ptr noundef nonnull %114, i32 noundef 131084, ptr noundef nonnull @.str.77, ptr noundef nonnull %115, i32 noundef 131085, ptr noundef nonnull @.str.77, ptr noundef nonnull %116, i32 noundef 131086, ptr noundef nonnull @.str.77, ptr noundef nonnull %117, i32 noundef 131087, ptr noundef nonnull @.str.77, ptr noundef nonnull %118, i32 noundef 0) - %120 = load ptr, ptr %104, align 8 - store ptr %120, ptr %91, align 8 - %121 = load i32, ptr %103, align 8 - %122 = load i32, ptr %5, align 8 - %123 = add i32 %122, 7 - %124 = or i32 %123, 7 - %125 = add i32 %121, 1 - %126 = add i32 %125, %124 - store i32 %126, ptr %92, align 8 + %100 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %101 = getelementptr inbounds nuw i8, ptr %5, i64 8 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %101, i8 0, i64 16, i1 false) + store ptr %5, ptr %88, align 8 + store i32 %87, ptr %89, align 8 + %102 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %103 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %104 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %105 = getelementptr inbounds nuw i8, ptr %0, i64 88 + %106 = getelementptr inbounds nuw i8, ptr %0, i64 96 + %107 = getelementptr inbounds nuw i8, ptr %0, i64 100 + %108 = getelementptr inbounds nuw i8, ptr %0, i64 104 + %109 = getelementptr inbounds nuw i8, ptr %0, i64 112 + %110 = getelementptr inbounds nuw i8, ptr %0, i64 116 + %111 = getelementptr inbounds nuw i8, ptr %0, i64 120 + %112 = getelementptr inbounds nuw i8, ptr %0, i64 124 + %113 = getelementptr inbounds nuw i8, ptr %0, i64 128 + %114 = getelementptr inbounds nuw i8, ptr %0, i64 132 + %115 = getelementptr inbounds nuw i8, ptr %0, i64 136 + %116 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %4, i32 noundef 131073, ptr noundef nonnull @.str.77, ptr noundef nonnull %50, i32 noundef 131074, ptr noundef nonnull @.str.78, ptr noundef nonnull %102, i32 noundef 131075, ptr noundef nonnull @.str.79, ptr noundef nonnull %103, i32 noundef 131076, ptr noundef nonnull @.str.80, ptr noundef nonnull %104, i32 noundef 131077, ptr noundef nonnull @.str.80, ptr noundef nonnull %105, i32 noundef 131078, ptr noundef nonnull @.str.81, ptr noundef nonnull %106, i32 noundef 131079, ptr noundef nonnull @.str.77, ptr noundef nonnull %107, i32 noundef 131080, ptr noundef nonnull @.str.80, ptr noundef nonnull %108, i32 noundef 131081, ptr noundef nonnull @.str.77, ptr noundef nonnull %109, i32 noundef 131082, ptr noundef nonnull @.str.77, ptr noundef nonnull %110, i32 noundef 131083, ptr noundef nonnull @.str.77, ptr noundef nonnull %111, i32 noundef 131084, ptr noundef nonnull @.str.77, ptr noundef nonnull %112, i32 noundef 131085, ptr noundef nonnull @.str.77, ptr noundef nonnull %113, i32 noundef 131086, ptr noundef nonnull @.str.77, ptr noundef nonnull %114, i32 noundef 131087, ptr noundef nonnull @.str.77, ptr noundef nonnull %115, i32 noundef 0) + %117 = load ptr, ptr %101, align 8 + store ptr %117, ptr %88, align 8 + %118 = load i32, ptr %100, align 8 + %119 = load i32, ptr %5, align 8 + %120 = add i32 %119, 7 + %121 = or i32 %120, 7 + %122 = add i32 %118, 1 + %123 = add i32 %122, %121 + store i32 %123, ptr %89, align 8 call void @llvm.lifetime.end.p0(ptr nonnull %4) call void @llvm.lifetime.end.p0(ptr nonnull %5) - %127 = icmp slt i32 %119, 0 - br i1 %127, label %151, label %128 - -128: ; preds = %spa_format_video_raw_parse.exit - %129 = load ptr, ptr %10, align 8 - %130 = load i32, ptr %129, align 8 - %131 = getelementptr inbounds nuw i8, ptr %129, i64 4 - %132 = load i32, ptr %131, align 4 - %133 = getelementptr inbounds nuw i8, ptr %129, i64 8 - %134 = load i32, ptr %133, align 8 - %135 = getelementptr inbounds nuw i8, ptr %129, i64 12 - %136 = load i32, ptr %135, align 4 - %137 = getelementptr inbounds nuw i8, ptr %129, i64 16 - %138 = load i32, ptr %137, align 8 - %139 = load i32, ptr %53, align 8 - %140 = call fastcc ptr @spa_debug_type_find(ptr noundef nonnull @spa_type_video_format, i32 noundef %139) - %141 = icmp eq ptr %140, null - br i1 %141, label %spa_debug_type_find_name.exit, label %142 - -142: ; preds = %128 - %143 = getelementptr inbounds nuw i8, ptr %140, i64 8 - %144 = load ptr, ptr %143, align 8 + %124 = icmp slt i32 %116, 0 + br i1 %124, label %148, label %125 + +125: ; preds = %spa_format_video_raw_parse.exit + %126 = load ptr, ptr %10, align 8 + %127 = load i32, ptr %126, align 8 + %128 = getelementptr inbounds nuw i8, ptr %126, i64 4 + %129 = load i32, ptr %128, align 4 + %130 = getelementptr inbounds nuw i8, ptr %126, i64 8 + %131 = load i32, ptr %130, align 8 + %132 = getelementptr inbounds nuw i8, ptr %126, i64 12 + %133 = load i32, ptr %132, align 4 + %134 = getelementptr inbounds nuw i8, ptr %126, i64 16 + %135 = load i32, ptr %134, align 8 + %136 = load i32, ptr %50, align 8 + %137 = call fastcc ptr @spa_debug_type_find(ptr noundef nonnull @spa_type_video_format, i32 noundef %136) + %138 = icmp eq ptr %137, null + br i1 %138, label %spa_debug_type_find_name.exit, label %139 + +139: ; preds = %125 + %140 = getelementptr inbounds nuw i8, ptr %137, i64 8 + %141 = load ptr, ptr %140, align 8 br label %spa_debug_type_find_name.exit -spa_debug_type_find_name.exit: ; preds = %128, %142 - %.0.i33 = phi ptr [ %144, %142 ], [ null, %128 ] - %145 = load i32, ptr %106, align 8 - %146 = getelementptr inbounds nuw i8, ptr %0, i64 76 - %147 = load i32, ptr %146, align 4 - call void (ptr, ...) @debug_screencast(ptr noundef nonnull @.str.75, ptr noundef nonnull @__func__.onStreamParamChanged, i32 noundef 223, i32 noundef %130, i32 noundef %132, i32 noundef %134, i32 noundef %136, i32 noundef %138, ptr noundef %.0.i33, i32 noundef %139, i32 noundef %145, i32 noundef %147) - %148 = getelementptr inbounds nuw i8, ptr %0, i64 152 - store i32 1, ptr %148, align 8 - %149 = load ptr, ptr @fp_pw_thread_loop_signal, align 8 - %150 = load ptr, ptr @pw, align 8 - call void %149(ptr noundef %150, i1 noundef zeroext true) #16 - br label %151 - -151: ; preds = %spa_format_video_raw_parse.exit.thread, %spa_format_parse.exit.thread, %spa_format_video_raw_parse.exit, %47, %spa_format_parse.exit, %3, %spa_debug_type_find_name.exit +spa_debug_type_find_name.exit: ; preds = %125, %139 + %.0.i33 = phi ptr [ %141, %139 ], [ null, %125 ] + %142 = load i32, ptr %103, align 8 + %143 = getelementptr inbounds nuw i8, ptr %0, i64 76 + %144 = load i32, ptr %143, align 4 + call void (ptr, ...) @debug_screencast(ptr noundef nonnull @.str.75, ptr noundef nonnull @__func__.onStreamParamChanged, i32 noundef 223, i32 noundef %127, i32 noundef %129, i32 noundef %131, i32 noundef %133, i32 noundef %135, ptr noundef %.0.i33, i32 noundef %136, i32 noundef %142, i32 noundef %144) + %145 = getelementptr inbounds nuw i8, ptr %0, i64 152 + store i32 1, ptr %145, align 8 + %146 = load ptr, ptr @fp_pw_thread_loop_signal, align 8 + %147 = load ptr, ptr @pw, align 8 + call void %146(ptr noundef %147, i1 noundef zeroext true) #16 + br label %148 + +148: ; preds = %spa_format_video_raw_parse.exit.thread, %spa_format_parse.exit.thread, %spa_format_video_raw_parse.exit, %44, %spa_format_parse.exit, %3, %spa_debug_type_find_name.exit ret void } diff --git a/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll b/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll index 9117a5d1502..d6ee6a1fba8 100644 --- a/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll +++ b/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll @@ -123,9 +123,7 @@ target triple = "x86_64-unknown-linux-gnu" @anon.9683d7273f0e2da39fab36790461676f.134 = private unnamed_addr constant [20 x i8] c"SendPingWhilePending", align 1 @anon.9683d7273f0e2da39fab36790461676f.135 = private unnamed_addr constant [24 x i8] c"SendSettingsWhilePending", align 1 @anon.9683d7273f0e2da39fab36790461676f.136 = private unnamed_addr constant [22 x i8] c"PeerDisabledServerPush", align 1 -@anon.9683d7273f0e2da39fab36790461676f.140 = private unnamed_addr constant [8 x i8] zeroinitializer, align 8 @anon.9683d7273f0e2da39fab36790461676f.141 = private unnamed_addr constant [101 x i8] c"/home/dtcxzyw/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arc-swap-1.7.1/src/debt/helping.rs", align 1 -@anon.9683d7273f0e2da39fab36790461676f.142 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.9683d7273f0e2da39fab36790461676f.141, [16 x i8] c"e\00\00\00\00\00\00\00\10\01\00\00\15\00\00\00" }>, align 8 @anon.9683d7273f0e2da39fab36790461676f.143 = private unnamed_addr constant [64 x i8] c"internal error: entered unreachable code: Invalid control value ", align 1 @anon.9683d7273f0e2da39fab36790461676f.144 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @anon.9683d7273f0e2da39fab36790461676f.143, [8 x i8] c"@\00\00\00\00\00\00\00" }>, align 8 @anon.9683d7273f0e2da39fab36790461676f.145 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.9683d7273f0e2da39fab36790461676f.141, [16 x i8] c"e\00\00\00\00\00\00\00+\01\00\00\16\00\00\00" }>, align 8 @@ -6631,211 +6629,185 @@ define hidden void @_ZN8arc_swap4debt7helping5Slots4help17h2d8e69b46d0bf67aE(ptr %6 = alloca [8 x i8], align 8 %7 = alloca [16 x i8], align 8 %8 = alloca [48 x i8], align 8 - %9 = alloca [48 x i8], align 8 + %9 = alloca [8 x i8], align 8 %10 = alloca [8 x i8], align 8 - %11 = alloca [8 x i8], align 8 - %12 = alloca [8 x i8], align 8 - call void @llvm.lifetime.start.p0(ptr nonnull %12) - %13 = load atomic i64, ptr %1 seq_cst, align 8 - store i64 %13, ptr %12, align 8 - %14 = getelementptr inbounds nuw i8, ptr %1, i64 16 - %15 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %.val = load ptr, ptr %15, align 8, !nonnull !3, !align !38 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %17 = getelementptr inbounds nuw i8, ptr %1, i64 32 - %18 = getelementptr inbounds nuw i8, ptr %0, i64 32 + call void @llvm.lifetime.start.p0(ptr nonnull %10) + %11 = load atomic i64, ptr %1 seq_cst, align 8 + store i64 %11, ptr %10, align 8 + %12 = getelementptr inbounds nuw i8, ptr %1, i64 16 + %13 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %.val = load ptr, ptr %13, align 8, !nonnull !3, !align !38 + %14 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %15 = getelementptr inbounds nuw i8, ptr %1, i64 32 + %16 = getelementptr inbounds nuw i8, ptr %0, i64 32 br label %.backedge .backedge: ; preds = %.backedge.backedge, %4 - %19 = phi i64 [ %13, %4 ], [ %.be, %.backedge.backedge ] - %20 = and i64 %19, 3 - switch i64 %20, label %default.unreachable31 [ - i64 0, label %25 + %17 = phi i64 [ %11, %4 ], [ %.be, %.backedge.backedge ] + %18 = and i64 %17, 3 + switch i64 %18, label %default.unreachable31 [ + i64 0, label %23 i64 1, label %.loopexit - i64 2, label %27 + i64 2, label %25 i64 3, label %.loopexit8 ], !prof !277 default.unreachable31: ; preds = %.backedge unreachable -.loopexit8: ; preds = %.backedge, %25 +.loopexit8: ; preds = %.backedge, %23 call void @llvm.lifetime.start.p0(ptr nonnull %8) call void @llvm.lifetime.start.p0(ptr nonnull %7) - store ptr %12, ptr %7, align 8 + store ptr %10, ptr %7, align 8 %.sroa.44.0..sroa_idx = getelementptr inbounds nuw i8, ptr %7, i64 8 store ptr @"_ZN4core3fmt3num55_$LT$impl$u20$core..fmt..UpperHex$u20$for$u20$usize$GT$3fmt17hdee01be989c5eb83E", ptr %.sroa.44.0..sroa_idx, align 8 store ptr @anon.9683d7273f0e2da39fab36790461676f.144, ptr %8, align 8 - %21 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store i64 1, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %8, i64 32 - store ptr null, ptr %22, align 8 - %23 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store ptr %7, ptr %23, align 8 - %24 = getelementptr inbounds nuw i8, ptr %8, i64 24 - store i64 1, ptr %24, align 8 + %19 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store i64 1, ptr %19, align 8 + %20 = getelementptr inbounds nuw i8, ptr %8, i64 32 + store ptr null, ptr %20, align 8 + %21 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store ptr %7, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %8, i64 24 + store i64 1, ptr %22, align 8 call void @_ZN4core9panicking9panic_fmt17h8d16370d7cdeaf7bE(ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %8, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.9683d7273f0e2da39fab36790461676f.145) #21 unreachable -25: ; preds = %.backedge - %26 = icmp eq i64 %19, 0 - br i1 %26, label %.loopexit, label %.loopexit8, !prof !12 +23: ; preds = %.backedge + %24 = icmp eq i64 %17, 0 + br i1 %24, label %.loopexit, label %.loopexit8, !prof !12 -.loopexit: ; preds = %46, %.backedge, %25, %67 - call void @llvm.lifetime.end.p0(ptr nonnull %12) +.loopexit: ; preds = %44, %.backedge, %23, %61 + call void @llvm.lifetime.end.p0(ptr nonnull %10) ret void -27: ; preds = %.backedge - %28 = load atomic i64, ptr %14 seq_cst, align 8 - %.not = icmp eq i64 %28, %2 - br i1 %.not, label %29, label %46 +25: ; preds = %.backedge + %26 = load atomic i64, ptr %12 seq_cst, align 8 + %.not = icmp eq i64 %26, %2 + br i1 %.not, label %27, label %44 -29: ; preds = %27 - call void @llvm.lifetime.start.p0(ptr nonnull %11) +27: ; preds = %25 + call void @llvm.lifetime.start.p0(ptr nonnull %9) call void @llvm.lifetime.start.p0(ptr nonnull %6) - %30 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 - store ptr %30, ptr %6, align 8 - %31 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17h49c62cd36d56b626E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) - %32 = extractvalue { ptr, ptr } %31, 0 - %33 = extractvalue { ptr, ptr } %31, 1 + %28 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 + store ptr %28, ptr %6, align 8 + %29 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17h49c62cd36d56b626E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) + %30 = extractvalue { ptr, ptr } %29, 0 + %31 = extractvalue { ptr, ptr } %29, 1 call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.start.p0(ptr nonnull %5) - store ptr %32, ptr %5, align 8 - store ptr null, ptr %16, align 8 - %.not.i.i = icmp eq ptr %33, null - br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %34 + store ptr %30, ptr %5, align 8 + store ptr null, ptr %14, align 8 + %.not.i.i = icmp eq ptr %31, null + br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %32 -34: ; preds = %29 - %35 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17h6378a83ba566ab00E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) - to label %38 unwind label %36 +32: ; preds = %27 + %33 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17h6378a83ba566ab00E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) + to label %36 unwind label %34 -36: ; preds = %41, %34 - %37 = landingpad { ptr, i32 } +34: ; preds = %39, %32 + %35 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr176drop_in_place$LT$arc_swap..strategy..hybrid..HybridProtection$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$$GT$17hfa2a29718fe8f682E"(ptr noalias noundef align 8 dereferenceable(16) %5) #23 - to label %common.resume unwind label %42 + to label %common.resume unwind label %40 -38: ; preds = %34 - %39 = ptrtoint ptr %35 to i64 - %40 = cmpxchg ptr %33, i64 %39, i64 3 release monotonic, align 8 - %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %40, 1 - br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %41 +36: ; preds = %32 + %37 = ptrtoint ptr %33 to i64 + %38 = cmpxchg ptr %31, i64 %37, i64 3 release monotonic, align 8 + %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %38, 1 + br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %39 -41: ; preds = %38 - invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17he56d8f0fcdf99576E(ptr noundef %35) - to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" unwind label %36 +39: ; preds = %36 + invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17he56d8f0fcdf99576E(ptr noundef %33) + to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" unwind label %34 -42: ; preds = %36 - %43 = landingpad { ptr, i32 } +40: ; preds = %34 + %41 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -common.resume: ; preds = %69, %73, %36 - %common.resume.op = phi { ptr, i32 } [ %37, %36 ], [ %lpad.phi, %73 ], [ %lpad.phi, %69 ] +common.resume: ; preds = %.loopexit9, %65, %34 + %common.resume.op = phi { ptr, i32 } [ %35, %34 ], [ %lpad.loopexit, %65 ], [ %lpad.loopexit, %.loopexit9 ] resume { ptr, i32 } %common.resume.op -"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit": ; preds = %29, %38, %41 - %44 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 +"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit": ; preds = %27, %36, %39 + %42 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 call void @llvm.lifetime.end.p0(ptr nonnull %5) - store ptr %44, ptr %11, align 8 - %45 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17h0697427cf70d9e9bE"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %11) - to label %50 unwind label %.loopexit9 - -46: ; preds = %27 - %47 = load atomic i64, ptr %1 seq_cst, align 8 - %48 = load i64, ptr %12, align 8, !noundef !3 - %49 = icmp eq i64 %47, %48 - br i1 %49, label %.loopexit, label %76 - -50: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" - %51 = ptrtoint ptr %45 to i64 - %52 = load atomic ptr, ptr %17 seq_cst, align 8 - %53 = load atomic ptr, ptr %18 seq_cst, align 8 - store atomic i64 %51, ptr %53 seq_cst, align 8 - %54 = ptrtoint ptr %53 to i64 - %55 = and i64 %54, 3 - store i64 %55, ptr %10, align 8 - %56 = icmp eq i64 %55, 0 - br i1 %56, label %58, label %57, !prof !12 - -57: ; preds = %50 - call void @llvm.lifetime.start.p0(ptr nonnull %9) - store ptr null, ptr %9, align 8 - invoke void @_ZN4core9panicking13assert_failed17h77d57c61d0ad0ecdE(i8 noundef 0, ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %10, ptr noalias noundef readonly align 8 dereferenceable(8) @anon.9683d7273f0e2da39fab36790461676f.140, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %9, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.9683d7273f0e2da39fab36790461676f.142) #21 - to label %68 unwind label %.loopexit.split-lp - -58: ; preds = %50 - %59 = or disjoint i64 %54, 1 - %60 = load i64, ptr %12, align 8, !noundef !3 - %61 = cmpxchg ptr %1, i64 %60, i64 %59 seq_cst seq_cst, align 8 - %.sroa.18.0.in.i = extractvalue { i64, i1 } %61, 1 - br i1 %.sroa.18.0.in.i, label %67, label %62 - -62: ; preds = %58 - %.sroa.01.0.i = extractvalue { i64, i1 } %61, 0 - store i64 %.sroa.01.0.i, ptr %12, align 8 + store ptr %42, ptr %9, align 8 + %43 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17h0697427cf70d9e9bE"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %9) + to label %48 unwind label %.loopexit9 + +44: ; preds = %25 + %45 = load atomic i64, ptr %1 seq_cst, align 8 + %46 = load i64, ptr %10, align 8, !noundef !3 + %47 = icmp eq i64 %45, %46 + br i1 %47, label %.loopexit, label %68 + +48: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" + %49 = ptrtoint ptr %43 to i64 + %50 = load atomic ptr, ptr %15 seq_cst, align 8 + %51 = load atomic ptr, ptr %16 seq_cst, align 8 + store atomic i64 %49, ptr %51 seq_cst, align 8 + %52 = ptrtoint ptr %51 to i64 + %53 = or disjoint i64 %52, 1 + %54 = load i64, ptr %10, align 8, !noundef !3 + %55 = cmpxchg ptr %1, i64 %54, i64 %53 seq_cst seq_cst, align 8 + %.sroa.18.0.in.i = extractvalue { i64, i1 } %55, 1 + br i1 %.sroa.18.0.in.i, label %61, label %56 + +56: ; preds = %48 + %.sroa.01.0.i = extractvalue { i64, i1 } %55, 0 + store i64 %.sroa.01.0.i, ptr %10, align 8 call void @llvm.experimental.noalias.scope.decl(metadata !278) call void @llvm.experimental.noalias.scope.decl(metadata !281) - %63 = load ptr, ptr %11, align 8, !alias.scope !284, !nonnull !3, !noundef !3 - %64 = atomicrmw sub ptr %63, i64 1 release, align 8, !noalias !284 - %65 = icmp eq i64 %64, 1 - br i1 %65, label %66, label %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" + %57 = load ptr, ptr %9, align 8, !alias.scope !284, !nonnull !3, !noundef !3 + %58 = atomicrmw sub ptr %57, i64 1 release, align 8, !noalias !284 + %59 = icmp eq i64 %58, 1 + br i1 %59, label %60, label %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" -66: ; preds = %62 +60: ; preds = %56 fence acquire - call void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17haef3ab0c4601cc40E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %11) + call void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17haef3ab0c4601cc40E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) br label %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" -"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit": ; preds = %62, %66 - call void @llvm.lifetime.end.p0(ptr nonnull %11) - %.pr = load i64, ptr %12, align 8 +"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit": ; preds = %56, %60 + call void @llvm.lifetime.end.p0(ptr nonnull %9) + %.pr = load i64, ptr %10, align 8 br label %.backedge.backedge -.backedge.backedge: ; preds = %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit", %76 - %.be = phi i64 [ %47, %76 ], [ %.pr, %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" ] +.backedge.backedge: ; preds = %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit", %68 + %.be = phi i64 [ %45, %68 ], [ %.pr, %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" ] br label %.backedge -67: ; preds = %58 - store atomic ptr %52, ptr %18 seq_cst, align 8 - call void @llvm.lifetime.end.p0(ptr nonnull %11) +61: ; preds = %48 + store atomic ptr %50, ptr %16 seq_cst, align 8 + call void @llvm.lifetime.end.p0(ptr nonnull %9) br label %.loopexit -68: ; preds = %57 - unreachable - .loopexit9: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" %lpad.loopexit = landingpad { ptr, i32 } cleanup - br label %69 - -.loopexit.split-lp: ; preds = %57 - %lpad.loopexit.split-lp = landingpad { ptr, i32 } - cleanup - br label %69 - -69: ; preds = %.loopexit.split-lp, %.loopexit9 - %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit9 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] call void @llvm.experimental.noalias.scope.decl(metadata !285) call void @llvm.experimental.noalias.scope.decl(metadata !288) - %70 = load ptr, ptr %11, align 8, !alias.scope !291, !nonnull !3, !noundef !3 - %71 = atomicrmw sub ptr %70, i64 1 release, align 8, !noalias !291 - %72 = icmp eq i64 %71, 1 - br i1 %72, label %73, label %common.resume + %62 = load ptr, ptr %9, align 8, !alias.scope !291, !nonnull !3, !noundef !3 + %63 = atomicrmw sub ptr %62, i64 1 release, align 8, !noalias !291 + %64 = icmp eq i64 %63, 1 + br i1 %64, label %65, label %common.resume -73: ; preds = %69 +65: ; preds = %.loopexit9 fence acquire - invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17haef3ab0c4601cc40E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %11) - to label %common.resume unwind label %74 + invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17haef3ab0c4601cc40E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) + to label %common.resume unwind label %66 -74: ; preds = %73 - %75 = landingpad { ptr, i32 } +66: ; preds = %65 + %67 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -76: ; preds = %46 - store i64 %47, ptr %12, align 8 +68: ; preds = %44 + store i64 %45, ptr %10, align 8 br label %.backedge.backedge } @@ -6845,211 +6817,185 @@ define hidden void @_ZN8arc_swap4debt7helping5Slots4help17h87e00bf7e6d26d9fE(ptr %6 = alloca [8 x i8], align 8 %7 = alloca [16 x i8], align 8 %8 = alloca [48 x i8], align 8 - %9 = alloca [48 x i8], align 8 + %9 = alloca [8 x i8], align 8 %10 = alloca [8 x i8], align 8 - %11 = alloca [8 x i8], align 8 - %12 = alloca [8 x i8], align 8 - call void @llvm.lifetime.start.p0(ptr nonnull %12) - %13 = load atomic i64, ptr %1 seq_cst, align 8 - store i64 %13, ptr %12, align 8 - %14 = getelementptr inbounds nuw i8, ptr %1, i64 16 - %15 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %.val = load ptr, ptr %15, align 8, !nonnull !3, !align !38 - %16 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %17 = getelementptr inbounds nuw i8, ptr %1, i64 32 - %18 = getelementptr inbounds nuw i8, ptr %0, i64 32 + call void @llvm.lifetime.start.p0(ptr nonnull %10) + %11 = load atomic i64, ptr %1 seq_cst, align 8 + store i64 %11, ptr %10, align 8 + %12 = getelementptr inbounds nuw i8, ptr %1, i64 16 + %13 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %.val = load ptr, ptr %13, align 8, !nonnull !3, !align !38 + %14 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %15 = getelementptr inbounds nuw i8, ptr %1, i64 32 + %16 = getelementptr inbounds nuw i8, ptr %0, i64 32 br label %.backedge .backedge: ; preds = %.backedge.backedge, %4 - %19 = phi i64 [ %13, %4 ], [ %.be, %.backedge.backedge ] - %20 = and i64 %19, 3 - switch i64 %20, label %default.unreachable31 [ - i64 0, label %25 + %17 = phi i64 [ %11, %4 ], [ %.be, %.backedge.backedge ] + %18 = and i64 %17, 3 + switch i64 %18, label %default.unreachable31 [ + i64 0, label %23 i64 1, label %.loopexit - i64 2, label %27 + i64 2, label %25 i64 3, label %.loopexit8 ], !prof !277 default.unreachable31: ; preds = %.backedge unreachable -.loopexit8: ; preds = %.backedge, %25 +.loopexit8: ; preds = %.backedge, %23 call void @llvm.lifetime.start.p0(ptr nonnull %8) call void @llvm.lifetime.start.p0(ptr nonnull %7) - store ptr %12, ptr %7, align 8 + store ptr %10, ptr %7, align 8 %.sroa.44.0..sroa_idx = getelementptr inbounds nuw i8, ptr %7, i64 8 store ptr @"_ZN4core3fmt3num55_$LT$impl$u20$core..fmt..UpperHex$u20$for$u20$usize$GT$3fmt17hdee01be989c5eb83E", ptr %.sroa.44.0..sroa_idx, align 8 store ptr @anon.9683d7273f0e2da39fab36790461676f.144, ptr %8, align 8 - %21 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store i64 1, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %8, i64 32 - store ptr null, ptr %22, align 8 - %23 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store ptr %7, ptr %23, align 8 - %24 = getelementptr inbounds nuw i8, ptr %8, i64 24 - store i64 1, ptr %24, align 8 + %19 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store i64 1, ptr %19, align 8 + %20 = getelementptr inbounds nuw i8, ptr %8, i64 32 + store ptr null, ptr %20, align 8 + %21 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store ptr %7, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %8, i64 24 + store i64 1, ptr %22, align 8 call void @_ZN4core9panicking9panic_fmt17h8d16370d7cdeaf7bE(ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %8, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.9683d7273f0e2da39fab36790461676f.145) #21 unreachable -25: ; preds = %.backedge - %26 = icmp eq i64 %19, 0 - br i1 %26, label %.loopexit, label %.loopexit8, !prof !12 +23: ; preds = %.backedge + %24 = icmp eq i64 %17, 0 + br i1 %24, label %.loopexit, label %.loopexit8, !prof !12 -.loopexit: ; preds = %46, %.backedge, %25, %67 - call void @llvm.lifetime.end.p0(ptr nonnull %12) +.loopexit: ; preds = %44, %.backedge, %23, %61 + call void @llvm.lifetime.end.p0(ptr nonnull %10) ret void -27: ; preds = %.backedge - %28 = load atomic i64, ptr %14 seq_cst, align 8 - %.not = icmp eq i64 %28, %2 - br i1 %.not, label %29, label %46 +25: ; preds = %.backedge + %26 = load atomic i64, ptr %12 seq_cst, align 8 + %.not = icmp eq i64 %26, %2 + br i1 %.not, label %27, label %44 -29: ; preds = %27 - call void @llvm.lifetime.start.p0(ptr nonnull %11) +27: ; preds = %25 + call void @llvm.lifetime.start.p0(ptr nonnull %9) call void @llvm.lifetime.start.p0(ptr nonnull %6) - %30 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 - store ptr %30, ptr %6, align 8 - %31 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17hb480e4226cf77e95E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) - %32 = extractvalue { ptr, ptr } %31, 0 - %33 = extractvalue { ptr, ptr } %31, 1 + %28 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 + store ptr %28, ptr %6, align 8 + %29 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17hb480e4226cf77e95E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) + %30 = extractvalue { ptr, ptr } %29, 0 + %31 = extractvalue { ptr, ptr } %29, 1 call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.start.p0(ptr nonnull %5) - store ptr %32, ptr %5, align 8 - store ptr null, ptr %16, align 8 - %.not.i.i = icmp eq ptr %33, null - br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %34 + store ptr %30, ptr %5, align 8 + store ptr null, ptr %14, align 8 + %.not.i.i = icmp eq ptr %31, null + br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %32 -34: ; preds = %29 - %35 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17hdf9c7a12f5206704E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) - to label %38 unwind label %36 +32: ; preds = %27 + %33 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17hdf9c7a12f5206704E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) + to label %36 unwind label %34 -36: ; preds = %41, %34 - %37 = landingpad { ptr, i32 } +34: ; preds = %39, %32 + %35 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr146drop_in_place$LT$arc_swap..strategy..hybrid..HybridProtection$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$$GT$17h3693ea827e1d0e74E"(ptr noalias noundef align 8 dereferenceable(16) %5) #23 - to label %common.resume unwind label %42 + to label %common.resume unwind label %40 -38: ; preds = %34 - %39 = ptrtoint ptr %35 to i64 - %40 = cmpxchg ptr %33, i64 %39, i64 3 release monotonic, align 8 - %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %40, 1 - br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %41 +36: ; preds = %32 + %37 = ptrtoint ptr %33 to i64 + %38 = cmpxchg ptr %31, i64 %37, i64 3 release monotonic, align 8 + %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %38, 1 + br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %39 -41: ; preds = %38 - invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17hddec74f9b7fd83fbE(ptr noundef %35) - to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" unwind label %36 +39: ; preds = %36 + invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17hddec74f9b7fd83fbE(ptr noundef %33) + to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" unwind label %34 -42: ; preds = %36 - %43 = landingpad { ptr, i32 } +40: ; preds = %34 + %41 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -common.resume: ; preds = %69, %73, %36 - %common.resume.op = phi { ptr, i32 } [ %37, %36 ], [ %lpad.phi, %73 ], [ %lpad.phi, %69 ] +common.resume: ; preds = %.loopexit9, %65, %34 + %common.resume.op = phi { ptr, i32 } [ %35, %34 ], [ %lpad.loopexit, %65 ], [ %lpad.loopexit, %.loopexit9 ] resume { ptr, i32 } %common.resume.op -"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit": ; preds = %29, %38, %41 - %44 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 +"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit": ; preds = %27, %36, %39 + %42 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 call void @llvm.lifetime.end.p0(ptr nonnull %5) - store ptr %44, ptr %11, align 8 - %45 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17hcb80942698e02222E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %11) - to label %50 unwind label %.loopexit9 - -46: ; preds = %27 - %47 = load atomic i64, ptr %1 seq_cst, align 8 - %48 = load i64, ptr %12, align 8, !noundef !3 - %49 = icmp eq i64 %47, %48 - br i1 %49, label %.loopexit, label %76 - -50: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" - %51 = ptrtoint ptr %45 to i64 - %52 = load atomic ptr, ptr %17 seq_cst, align 8 - %53 = load atomic ptr, ptr %18 seq_cst, align 8 - store atomic i64 %51, ptr %53 seq_cst, align 8 - %54 = ptrtoint ptr %53 to i64 - %55 = and i64 %54, 3 - store i64 %55, ptr %10, align 8 - %56 = icmp eq i64 %55, 0 - br i1 %56, label %58, label %57, !prof !12 - -57: ; preds = %50 - call void @llvm.lifetime.start.p0(ptr nonnull %9) - store ptr null, ptr %9, align 8 - invoke void @_ZN4core9panicking13assert_failed17h77d57c61d0ad0ecdE(i8 noundef 0, ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %10, ptr noalias noundef readonly align 8 dereferenceable(8) @anon.9683d7273f0e2da39fab36790461676f.140, ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %9, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.9683d7273f0e2da39fab36790461676f.142) #21 - to label %68 unwind label %.loopexit.split-lp - -58: ; preds = %50 - %59 = or disjoint i64 %54, 1 - %60 = load i64, ptr %12, align 8, !noundef !3 - %61 = cmpxchg ptr %1, i64 %60, i64 %59 seq_cst seq_cst, align 8 - %.sroa.18.0.in.i = extractvalue { i64, i1 } %61, 1 - br i1 %.sroa.18.0.in.i, label %67, label %62 - -62: ; preds = %58 - %.sroa.01.0.i = extractvalue { i64, i1 } %61, 0 - store i64 %.sroa.01.0.i, ptr %12, align 8 + store ptr %42, ptr %9, align 8 + %43 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17hcb80942698e02222E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %9) + to label %48 unwind label %.loopexit9 + +44: ; preds = %25 + %45 = load atomic i64, ptr %1 seq_cst, align 8 + %46 = load i64, ptr %10, align 8, !noundef !3 + %47 = icmp eq i64 %45, %46 + br i1 %47, label %.loopexit, label %68 + +48: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" + %49 = ptrtoint ptr %43 to i64 + %50 = load atomic ptr, ptr %15 seq_cst, align 8 + %51 = load atomic ptr, ptr %16 seq_cst, align 8 + store atomic i64 %49, ptr %51 seq_cst, align 8 + %52 = ptrtoint ptr %51 to i64 + %53 = or disjoint i64 %52, 1 + %54 = load i64, ptr %10, align 8, !noundef !3 + %55 = cmpxchg ptr %1, i64 %54, i64 %53 seq_cst seq_cst, align 8 + %.sroa.18.0.in.i = extractvalue { i64, i1 } %55, 1 + br i1 %.sroa.18.0.in.i, label %61, label %56 + +56: ; preds = %48 + %.sroa.01.0.i = extractvalue { i64, i1 } %55, 0 + store i64 %.sroa.01.0.i, ptr %10, align 8 call void @llvm.experimental.noalias.scope.decl(metadata !292) call void @llvm.experimental.noalias.scope.decl(metadata !295) - %63 = load ptr, ptr %11, align 8, !alias.scope !298, !nonnull !3, !noundef !3 - %64 = atomicrmw sub ptr %63, i64 1 release, align 8, !noalias !298 - %65 = icmp eq i64 %64, 1 - br i1 %65, label %66, label %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" + %57 = load ptr, ptr %9, align 8, !alias.scope !298, !nonnull !3, !noundef !3 + %58 = atomicrmw sub ptr %57, i64 1 release, align 8, !noalias !298 + %59 = icmp eq i64 %58, 1 + br i1 %59, label %60, label %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" -66: ; preds = %62 +60: ; preds = %56 fence acquire - call void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h21d657e7e498c192E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %11) + call void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h21d657e7e498c192E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) br label %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" -"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit": ; preds = %62, %66 - call void @llvm.lifetime.end.p0(ptr nonnull %11) - %.pr = load i64, ptr %12, align 8 +"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit": ; preds = %56, %60 + call void @llvm.lifetime.end.p0(ptr nonnull %9) + %.pr = load i64, ptr %10, align 8 br label %.backedge.backedge -.backedge.backedge: ; preds = %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit", %76 - %.be = phi i64 [ %47, %76 ], [ %.pr, %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" ] +.backedge.backedge: ; preds = %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit", %68 + %.be = phi i64 [ %45, %68 ], [ %.pr, %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" ] br label %.backedge -67: ; preds = %58 - store atomic ptr %52, ptr %18 seq_cst, align 8 - call void @llvm.lifetime.end.p0(ptr nonnull %11) +61: ; preds = %48 + store atomic ptr %50, ptr %16 seq_cst, align 8 + call void @llvm.lifetime.end.p0(ptr nonnull %9) br label %.loopexit -68: ; preds = %57 - unreachable - .loopexit9: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" %lpad.loopexit = landingpad { ptr, i32 } cleanup - br label %69 - -.loopexit.split-lp: ; preds = %57 - %lpad.loopexit.split-lp = landingpad { ptr, i32 } - cleanup - br label %69 - -69: ; preds = %.loopexit.split-lp, %.loopexit9 - %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit9 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] call void @llvm.experimental.noalias.scope.decl(metadata !299) call void @llvm.experimental.noalias.scope.decl(metadata !302) - %70 = load ptr, ptr %11, align 8, !alias.scope !305, !nonnull !3, !noundef !3 - %71 = atomicrmw sub ptr %70, i64 1 release, align 8, !noalias !305 - %72 = icmp eq i64 %71, 1 - br i1 %72, label %73, label %common.resume + %62 = load ptr, ptr %9, align 8, !alias.scope !305, !nonnull !3, !noundef !3 + %63 = atomicrmw sub ptr %62, i64 1 release, align 8, !noalias !305 + %64 = icmp eq i64 %63, 1 + br i1 %64, label %65, label %common.resume -73: ; preds = %69 +65: ; preds = %.loopexit9 fence acquire - invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h21d657e7e498c192E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %11) - to label %common.resume unwind label %74 + invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h21d657e7e498c192E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) + to label %common.resume unwind label %66 -74: ; preds = %73 - %75 = landingpad { ptr, i32 } +66: ; preds = %65 + %67 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -76: ; preds = %46 - store i64 %47, ptr %12, align 8 +68: ; preds = %44 + store i64 %45, ptr %10, align 8 br label %.backedge.backedge } @@ -8199,9 +8145,6 @@ declare hidden void @_ZN8arc_swap4debt4list9LocalNode4with17h84ac9208a69e613bE(p ; Function Attrs: nonlazybind uwtable declare hidden noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17h0697427cf70d9e9bE"(ptr noalias noundef readonly align 8 dereferenceable(8)) unnamed_addr #0 -; Function Attrs: cold minsize noreturn nonlazybind optsize uwtable -declare void @_ZN4core9panicking13assert_failed17h77d57c61d0ad0ecdE(i8 noundef range(i8 0, 3), ptr noalias noundef readonly align 8 dereferenceable(8), ptr noalias noundef readonly align 8 dereferenceable(8), ptr noalias noundef align 8 captures(none) dereferenceable(48), ptr noalias noundef readonly align 8 dereferenceable(24)) unnamed_addr #7 - ; Function Attrs: nonlazybind uwtable declare noundef zeroext i1 @"_ZN4core3fmt3num55_$LT$impl$u20$core..fmt..UpperHex$u20$for$u20$usize$GT$3fmt17hdee01be989c5eb83E"(ptr noalias noundef readonly align 8 dereferenceable(8), ptr noalias noundef align 8 dereferenceable(24)) unnamed_addr #0 diff --git a/bench/postgres/optimized/jsonfuncs.ll b/bench/postgres/optimized/jsonfuncs.ll index ade1a52bb29..50b41950fa8 100644 --- a/bench/postgres/optimized/jsonfuncs.ll +++ b/bench/postgres/optimized/jsonfuncs.ll @@ -9312,17 +9312,17 @@ define internal fastcc ptr @populate_record(ptr noundef %0, ptr noundef captures 16: ; preds = %11 %17 = tail call i64 @hash_get_num_entries(ptr noundef %15) #14 %18 = icmp eq i64 %17, 0 - br i1 %18, label %157, label %25 + br i1 %18, label %154, label %25 19: ; preds = %11 %20 = icmp eq ptr %15, null - br i1 %20, label %157, label %21 + br i1 %20, label %154, label %21 21: ; preds = %19 %22 = load i32, ptr %15, align 4 %23 = and i32 %22, 268435455 %24 = icmp eq i32 %23, 0 - br i1 %24, label %157, label %25 + br i1 %24, label %154, label %25 25: ; preds = %21, %16, %6 %26 = icmp eq ptr %9, null @@ -9332,7 +9332,7 @@ define internal fastcc ptr @populate_record(ptr noundef %0, ptr noundef captures %28 = getelementptr inbounds nuw i8, ptr %9, i64 8 %29 = load i32, ptr %28, align 8 %.not101 = icmp eq i32 %29, %10 - br i1 %.not101, label %49, label %30 + br i1 %.not101, label %46, label %30 30: ; preds = %27, %25 %31 = sext i32 %10 to i64 @@ -9346,108 +9346,104 @@ define internal fastcc ptr @populate_record(ptr noundef %0, ptr noundef captures %37 = getelementptr inbounds nuw i8, ptr %34, i64 8 store i32 %10, ptr %37, align 8 %38 = getelementptr inbounds nuw i8, ptr %34, i64 16 - %39 = ptrtoint ptr %38 to i64 - %40 = and i64 %39, 7 - %41 = icmp eq i64 %40, 0 - %42 = icmp ult i64 %32, 1025 - %or.cond.i = and i1 %42, %41 - br i1 %or.cond.i, label %43, label %allocate_record_info.exit.sink.split + %39 = icmp ult i64 %32, 1025 + br i1 %39, label %40, label %allocate_record_info.exit.sink.split -43: ; preds = %30 +40: ; preds = %30 %.not.i = icmp eq i32 %10, 0 br i1 %.not.i, label %allocate_record_info.exit, label %.lr.ph.preheader.i -.lr.ph.preheader.i: ; preds = %43 - %44 = add i64 %33, %35 - %45 = add i64 %35, 24 - %umax.i = tail call i64 @llvm.umax.i64(i64 %44, i64 %45) +.lr.ph.preheader.i: ; preds = %40 + %41 = add i64 %33, %35 + %42 = add i64 %35, 24 + %umax.i = tail call i64 @llvm.umax.i64(i64 %41, i64 %42) %reass.sub = sub i64 %umax.i, %35 - %46 = add i64 %reass.sub, -17 - %47 = and i64 %46, -8 - %48 = add i64 %47, 8 + %43 = add i64 %reass.sub, -17 + %44 = and i64 %43, -8 + %45 = add i64 %44, 8 br label %allocate_record_info.exit.sink.split allocate_record_info.exit.sink.split: ; preds = %30, %.lr.ph.preheader.i - %.sink = phi i64 [ %48, %.lr.ph.preheader.i ], [ %32, %30 ] + %.sink = phi i64 [ %45, %.lr.ph.preheader.i ], [ %32, %30 ] tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %38, i8 0, i64 %.sink, i1 false) br label %allocate_record_info.exit -allocate_record_info.exit: ; preds = %allocate_record_info.exit.sink.split, %43 +allocate_record_info.exit: ; preds = %allocate_record_info.exit.sink.split, %40 store ptr %34, ptr %1, align 8 - br label %49 + br label %46 -49: ; preds = %allocate_record_info.exit, %27 +46: ; preds = %allocate_record_info.exit, %27 %.093 = phi ptr [ %34, %allocate_record_info.exit ], [ %9, %27 ] - %50 = load i32, ptr %.093, align 8 - %51 = getelementptr inbounds nuw i8, ptr %0, i64 4 + %47 = load i32, ptr %.093, align 8 + %48 = getelementptr inbounds nuw i8, ptr %0, i64 4 + %49 = load i32, ptr %48, align 4 + %.not102 = icmp eq i32 %47, %49 + br i1 %.not102, label %50, label %55 + +50: ; preds = %46 + %51 = getelementptr inbounds nuw i8, ptr %.093, i64 4 %52 = load i32, ptr %51, align 4 - %.not102 = icmp eq i32 %50, %52 - br i1 %.not102, label %53, label %58 - -53: ; preds = %49 - %54 = getelementptr inbounds nuw i8, ptr %.093, i64 4 - %55 = load i32, ptr %54, align 4 - %56 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %57 = load i32, ptr %56, align 8 - %.not103 = icmp eq i32 %55, %57 - br i1 %.not103, label %._crit_edge118, label %58 - -._crit_edge118: ; preds = %53 + %53 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %54 = load i32, ptr %53, align 8 + %.not103 = icmp eq i32 %52, %54 + br i1 %.not103, label %._crit_edge118, label %55 + +._crit_edge118: ; preds = %50 %.pre = sext i32 %10 to i64 - br label %80 - -58: ; preds = %49, %53 - %59 = sext i32 %10 to i64 - %60 = mul nsw i64 %59, 104 - %61 = add nsw i64 %60, 16 - %62 = ptrtoint ptr %.093 to i64 - %63 = and i64 %62, 7 - %64 = icmp eq i64 %63, 0 - %65 = icmp ult i64 %61, 1025 - %or.cond = select i1 %64, i1 %65, i1 false - br i1 %or.cond, label %66, label %74 - -66: ; preds = %58 - %.not111 = icmp eq i64 %61, 0 + br label %77 + +55: ; preds = %46, %50 + %56 = sext i32 %10 to i64 + %57 = mul nsw i64 %56, 104 + %58 = add nsw i64 %57, 16 + %59 = ptrtoint ptr %.093 to i64 + %60 = and i64 %59, 7 + %61 = icmp eq i64 %60, 0 + %62 = icmp ult i64 %58, 1025 + %or.cond = select i1 %61, i1 %62, i1 false + br i1 %or.cond, label %63, label %71 + +63: ; preds = %55 + %.not111 = icmp eq i64 %58, 0 br i1 %.not111, label %.loopexit105, label %.lr.ph.preheader -.lr.ph.preheader: ; preds = %66 - %67 = add i64 %60, %62 - %68 = add i64 %67, 16 - %69 = add i64 %62, 8 - %umax = tail call i64 @llvm.umax.i64(i64 %68, i64 %69) - %70 = xor i64 %62, -1 - %71 = add i64 %umax, %70 - %72 = and i64 %71, -8 - %73 = add i64 %72, 8 - tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %.093, i8 0, i64 %73, i1 false) +.lr.ph.preheader: ; preds = %63 + %64 = add i64 %57, %59 + %65 = add i64 %64, 16 + %66 = add i64 %59, 8 + %umax = tail call i64 @llvm.umax.i64(i64 %65, i64 %66) + %67 = xor i64 %59, -1 + %68 = add i64 %umax, %67 + %69 = and i64 %68, -8 + %70 = add i64 %69, 8 + tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %.093, i8 0, i64 %70, i1 false) br label %.loopexit105 -74: ; preds = %58 - tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %.093, i8 0, i64 %61, i1 false) +71: ; preds = %55 + tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %.093, i8 0, i64 %58, i1 false) br label %.loopexit105 -.loopexit105: ; preds = %.lr.ph.preheader, %66, %74 - %75 = load i32, ptr %51, align 4 - store i32 %75, ptr %.093, align 8 - %76 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %77 = load i32, ptr %76, align 8 - %78 = getelementptr inbounds nuw i8, ptr %.093, i64 4 - store i32 %77, ptr %78, align 4 - %79 = getelementptr inbounds nuw i8, ptr %.093, i64 8 - store i32 %10, ptr %79, align 8 - br label %80 - -80: ; preds = %._crit_edge118, %.loopexit105 - %.pre-phi = phi i64 [ %.pre, %._crit_edge118 ], [ %59, %.loopexit105 ] - %81 = shl nsw i64 %.pre-phi, 3 - %82 = tail call ptr @palloc(i64 noundef %81) #14 - %83 = tail call ptr @palloc(i64 noundef %.pre-phi) #14 +.loopexit105: ; preds = %.lr.ph.preheader, %63, %71 + %72 = load i32, ptr %48, align 4 + store i32 %72, ptr %.093, align 8 + %73 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %74 = load i32, ptr %73, align 8 + %75 = getelementptr inbounds nuw i8, ptr %.093, i64 4 + store i32 %74, ptr %75, align 4 + %76 = getelementptr inbounds nuw i8, ptr %.093, i64 8 + store i32 %10, ptr %76, align 8 + br label %77 + +77: ; preds = %._crit_edge118, %.loopexit105 + %.pre-phi = phi i64 [ %.pre, %._crit_edge118 ], [ %56, %.loopexit105 ] + %78 = shl nsw i64 %.pre-phi, 3 + %79 = tail call ptr @palloc(i64 noundef %78) #14 + %80 = tail call ptr @palloc(i64 noundef %.pre-phi) #14 br i1 %.not, label %.preheader, label %.loopexit -.preheader: ; preds = %80 - %84 = icmp sgt i32 %10, 0 - br i1 %84, label %.lr.ph108.preheader, label %._crit_edge +.preheader: ; preds = %77 + %81 = icmp sgt i32 %10, 0 + br i1 %81, label %.lr.ph108.preheader, label %._crit_edge .lr.ph108.preheader: ; preds = %.preheader %wide.trip.count = zext nneg i32 %10 to i64 @@ -9455,160 +9451,160 @@ allocate_record_info.exit: ; preds = %allocate_record_inf .lr.ph108: ; preds = %.lr.ph108.preheader, %.lr.ph108 %indvars.iv = phi i64 [ 0, %.lr.ph108.preheader ], [ %indvars.iv.next, %.lr.ph108 ] - %85 = getelementptr inbounds nuw i64, ptr %82, i64 %indvars.iv - store i64 0, ptr %85, align 8 - %86 = getelementptr inbounds nuw i8, ptr %83, i64 %indvars.iv - store i8 1, ptr %86, align 1 + %82 = getelementptr inbounds nuw i64, ptr %79, i64 %indvars.iv + store i64 0, ptr %82, align 8 + %83 = getelementptr inbounds nuw i8, ptr %80, i64 %indvars.iv + store i8 1, ptr %83, align 1 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count br i1 %exitcond.not, label %.lr.ph110, label %.lr.ph108, !llvm.loop !38 -.loopexit: ; preds = %80 +.loopexit: ; preds = %77 call void @llvm.lifetime.start.p0(ptr nonnull %7) %.val = load i32, ptr %2, align 4 - %87 = lshr i32 %.val, 2 - store i32 %87, ptr %7, align 8 - %88 = getelementptr inbounds nuw i8, ptr %7, i64 4 - store i16 -1, ptr %88, align 4 - %89 = getelementptr inbounds nuw i8, ptr %7, i64 6 - store i16 -1, ptr %89, align 2 - %90 = getelementptr inbounds nuw i8, ptr %7, i64 8 - store i16 0, ptr %90, align 8 - %91 = getelementptr inbounds nuw i8, ptr %7, i64 12 - store i32 0, ptr %91, align 4 - %92 = getelementptr inbounds nuw i8, ptr %7, i64 16 - store ptr %2, ptr %92, align 8 - call void @heap_deform_tuple(ptr noundef nonnull %7, ptr noundef nonnull %0, ptr noundef %82, ptr noundef %83) #14 + %84 = lshr i32 %.val, 2 + store i32 %84, ptr %7, align 8 + %85 = getelementptr inbounds nuw i8, ptr %7, i64 4 + store i16 -1, ptr %85, align 4 + %86 = getelementptr inbounds nuw i8, ptr %7, i64 6 + store i16 -1, ptr %86, align 2 + %87 = getelementptr inbounds nuw i8, ptr %7, i64 8 + store i16 0, ptr %87, align 8 + %88 = getelementptr inbounds nuw i8, ptr %7, i64 12 + store i32 0, ptr %88, align 4 + %89 = getelementptr inbounds nuw i8, ptr %7, i64 16 + store ptr %2, ptr %89, align 8 + call void @heap_deform_tuple(ptr noundef nonnull %7, ptr noundef nonnull %0, ptr noundef %79, ptr noundef %80) #14 call void @llvm.lifetime.end.p0(ptr nonnull %7) - %93 = icmp sgt i32 %10, 0 - br i1 %93, label %.lr.ph110, label %._crit_edge + %90 = icmp sgt i32 %10, 0 + br i1 %90, label %.lr.ph110, label %._crit_edge .lr.ph110: ; preds = %.lr.ph108, %.loopexit - %94 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %95 = getelementptr inbounds nuw i8, ptr %8, i64 8 - %96 = getelementptr inbounds nuw i8, ptr %8, i64 20 - %97 = getelementptr inbounds nuw i8, ptr %8, i64 16 - %98 = getelementptr inbounds nuw i8, ptr %.093, i64 16 + %91 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %92 = getelementptr inbounds nuw i8, ptr %8, i64 8 + %93 = getelementptr inbounds nuw i8, ptr %8, i64 20 + %94 = getelementptr inbounds nuw i8, ptr %8, i64 16 + %95 = getelementptr inbounds nuw i8, ptr %.093, i64 16 %wide.trip.count116 = zext nneg i32 %10 to i64 - br label %99 - -99: ; preds = %.lr.ph110, %153 - %indvars.iv113 = phi i64 [ 0, %.lr.ph110 ], [ %indvars.iv.next114, %153 ] - %100 = load i32, ptr %0, align 8 - %101 = sext i32 %100 to i64 - %102 = shl nsw i64 %101, 4 - %103 = getelementptr i8, ptr %0, i64 %102 - %104 = getelementptr i8, ptr %103, i64 24 - %105 = getelementptr inbounds nuw %struct.FormData_pg_attribute, ptr %104, i64 %indvars.iv113 - %106 = getelementptr inbounds nuw i8, ptr %105, i64 4 + br label %96 + +96: ; preds = %.lr.ph110, %150 + %indvars.iv113 = phi i64 [ 0, %.lr.ph110 ], [ %indvars.iv.next114, %150 ] + %97 = load i32, ptr %0, align 8 + %98 = sext i32 %97 to i64 + %99 = shl nsw i64 %98, 4 + %100 = getelementptr i8, ptr %0, i64 %99 + %101 = getelementptr i8, ptr %100, i64 24 + %102 = getelementptr inbounds nuw %struct.FormData_pg_attribute, ptr %101, i64 %indvars.iv113 + %103 = getelementptr inbounds nuw i8, ptr %102, i64 4 call void @llvm.lifetime.start.p0(ptr nonnull %8) call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %8, i8 0, i64 24, i1 false) - %107 = getelementptr inbounds nuw i8, ptr %105, i64 91 - %108 = load i8, ptr %107, align 1, !range !4, !noundef !5 - %109 = trunc nuw i8 %108 to i1 - br i1 %109, label %110, label %112 - -110: ; preds = %99 - %111 = getelementptr inbounds nuw i8, ptr %83, i64 %indvars.iv113 - store i8 1, ptr %111, align 1 - br label %153 - -112: ; preds = %99 - %113 = load i8, ptr %4, align 8, !range !4, !noundef !5 - %114 = trunc nuw i8 %113 to i1 - store i8 %113, ptr %8, align 8 - %115 = load ptr, ptr %94, align 8 - br i1 %114, label %116, label %129 - -116: ; preds = %112 - %117 = call ptr @hash_search(ptr noundef %115, ptr noundef nonnull %106, i32 noundef 0, ptr noundef null) #14 - %118 = icmp ne ptr %117, null - br i1 %118, label %119, label %.thread.i - -.thread.i: ; preds = %116 - store i32 11, ptr %96, align 4 - br label %126 - -119: ; preds = %116 - %120 = getelementptr inbounds nuw i8, ptr %117, i64 72 - %121 = load i32, ptr %120, align 8 - store i32 %121, ptr %96, align 4 - %122 = icmp eq i32 %121, 11 - br i1 %122, label %126, label %123 - -123: ; preds = %119 - %124 = getelementptr inbounds nuw i8, ptr %117, i64 64 - %125 = load ptr, ptr %124, align 8 - br label %126 - -126: ; preds = %123, %119, %.thread.i - %127 = phi ptr [ %125, %123 ], [ null, %119 ], [ null, %.thread.i ] - store ptr %127, ptr %95, align 8 - %.not23.i = icmp ne ptr %127, null - %128 = sext i1 %.not23.i to i32 - store i32 %128, ptr %97, align 8 + %104 = getelementptr inbounds nuw i8, ptr %102, i64 91 + %105 = load i8, ptr %104, align 1, !range !4, !noundef !5 + %106 = trunc nuw i8 %105 to i1 + br i1 %106, label %107, label %109 + +107: ; preds = %96 + %108 = getelementptr inbounds nuw i8, ptr %80, i64 %indvars.iv113 + store i8 1, ptr %108, align 1 + br label %150 + +109: ; preds = %96 + %110 = load i8, ptr %4, align 8, !range !4, !noundef !5 + %111 = trunc nuw i8 %110 to i1 + store i8 %110, ptr %8, align 8 + %112 = load ptr, ptr %91, align 8 + br i1 %111, label %113, label %126 + +113: ; preds = %109 + %114 = call ptr @hash_search(ptr noundef %112, ptr noundef nonnull %103, i32 noundef 0, ptr noundef null) #14 + %115 = icmp ne ptr %114, null + br i1 %115, label %116, label %.thread.i + +.thread.i: ; preds = %113 + store i32 11, ptr %93, align 4 + br label %123 + +116: ; preds = %113 + %117 = getelementptr inbounds nuw i8, ptr %114, i64 72 + %118 = load i32, ptr %117, align 8 + store i32 %118, ptr %93, align 4 + %119 = icmp eq i32 %118, 11 + br i1 %119, label %123, label %120 + +120: ; preds = %116 + %121 = getelementptr inbounds nuw i8, ptr %114, i64 64 + %122 = load ptr, ptr %121, align 8 + br label %123 + +123: ; preds = %120, %116, %.thread.i + %124 = phi ptr [ %122, %120 ], [ null, %116 ], [ null, %.thread.i ] + store ptr %124, ptr %92, align 8 + %.not23.i = icmp ne ptr %124, null + %125 = sext i1 %.not23.i to i32 + store i32 %125, ptr %94, align 8 br label %JsObjectGetField.exit -129: ; preds = %112 - %.not.i104 = icmp eq ptr %115, null - br i1 %.not.i104, label %134, label %130 +126: ; preds = %109 + %.not.i104 = icmp eq ptr %112, null + br i1 %.not.i104, label %131, label %127 -130: ; preds = %129 - %131 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %106) #17 - %132 = trunc i64 %131 to i32 - %133 = call ptr @getKeyJsonValueFromContainer(ptr noundef nonnull %115, ptr noundef nonnull %106, i32 noundef %132, ptr noundef null) #14 - br label %134 +127: ; preds = %126 + %128 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %103) #17 + %129 = trunc i64 %128 to i32 + %130 = call ptr @getKeyJsonValueFromContainer(ptr noundef nonnull %112, ptr noundef nonnull %103, i32 noundef %129, ptr noundef null) #14 + br label %131 -134: ; preds = %130, %129 - %135 = phi ptr [ %133, %130 ], [ null, %129 ] - store ptr %135, ptr %95, align 8 - %136 = icmp ne ptr %135, null +131: ; preds = %127, %126 + %132 = phi ptr [ %130, %127 ], [ null, %126 ] + store ptr %132, ptr %92, align 8 + %133 = icmp ne ptr %132, null br label %JsObjectGetField.exit -JsObjectGetField.exit: ; preds = %126, %134 - %.0.i = phi i1 [ %118, %126 ], [ %136, %134 ] +JsObjectGetField.exit: ; preds = %123, %131 + %.0.i = phi i1 [ %115, %123 ], [ %133, %131 ] %or.cond5 = select i1 %.not, i1 true, i1 %.0.i - br i1 %or.cond5, label %137, label %153 - -137: ; preds = %JsObjectGetField.exit - %138 = getelementptr inbounds nuw %struct.ColumnIOData, ptr %98, i64 %indvars.iv113 - %139 = getelementptr inbounds nuw i8, ptr %105, i64 68 - %140 = load i32, ptr %139, align 4 - %141 = getelementptr inbounds nuw i8, ptr %105, i64 76 - %142 = load i32, ptr %141, align 4 - %143 = getelementptr inbounds nuw i8, ptr %83, i64 %indvars.iv113 - %144 = load i8, ptr %143, align 1, !range !4, !noundef !5 - %145 = trunc nuw i8 %144 to i1 - br i1 %145, label %149, label %146 - -146: ; preds = %137 - %147 = getelementptr inbounds nuw i64, ptr %82, i64 %indvars.iv113 - %148 = load i64, ptr %147, align 8 - br label %149 - -149: ; preds = %137, %146 - %150 = phi i64 [ %148, %146 ], [ 0, %137 ] - %151 = call fastcc i64 @populate_record_field(ptr noundef nonnull %138, i32 noundef %140, i32 noundef %142, ptr noundef nonnull %106, ptr noundef %3, i64 noundef %150, ptr noundef %8, ptr noundef nonnull %143, ptr noundef %5, i1 noundef zeroext false) - %152 = getelementptr inbounds nuw i64, ptr %82, i64 %indvars.iv113 - store i64 %151, ptr %152, align 8 - br label %153 - -153: ; preds = %JsObjectGetField.exit, %149, %110 + br i1 %or.cond5, label %134, label %150 + +134: ; preds = %JsObjectGetField.exit + %135 = getelementptr inbounds nuw %struct.ColumnIOData, ptr %95, i64 %indvars.iv113 + %136 = getelementptr inbounds nuw i8, ptr %102, i64 68 + %137 = load i32, ptr %136, align 4 + %138 = getelementptr inbounds nuw i8, ptr %102, i64 76 + %139 = load i32, ptr %138, align 4 + %140 = getelementptr inbounds nuw i8, ptr %80, i64 %indvars.iv113 + %141 = load i8, ptr %140, align 1, !range !4, !noundef !5 + %142 = trunc nuw i8 %141 to i1 + br i1 %142, label %146, label %143 + +143: ; preds = %134 + %144 = getelementptr inbounds nuw i64, ptr %79, i64 %indvars.iv113 + %145 = load i64, ptr %144, align 8 + br label %146 + +146: ; preds = %134, %143 + %147 = phi i64 [ %145, %143 ], [ 0, %134 ] + %148 = call fastcc i64 @populate_record_field(ptr noundef nonnull %135, i32 noundef %137, i32 noundef %139, ptr noundef nonnull %103, ptr noundef %3, i64 noundef %147, ptr noundef %8, ptr noundef nonnull %140, ptr noundef %5, i1 noundef zeroext false) + %149 = getelementptr inbounds nuw i64, ptr %79, i64 %indvars.iv113 + store i64 %148, ptr %149, align 8 + br label %150 + +150: ; preds = %JsObjectGetField.exit, %146, %107 call void @llvm.lifetime.end.p0(ptr nonnull %8) %indvars.iv.next114 = add nuw nsw i64 %indvars.iv113, 1 %exitcond117.not = icmp eq i64 %indvars.iv.next114, %wide.trip.count116 - br i1 %exitcond117.not, label %._crit_edge, label %99, !llvm.loop !39 - -._crit_edge: ; preds = %153, %.preheader, %.loopexit - %154 = call ptr @heap_form_tuple(ptr noundef nonnull %0, ptr noundef %82, ptr noundef %83) #14 - call void @pfree(ptr noundef %82) #14 - call void @pfree(ptr noundef %83) #14 - %155 = getelementptr inbounds nuw i8, ptr %154, i64 16 - %156 = load ptr, ptr %155, align 8 - br label %157 - -157: ; preds = %16, %19, %21, %._crit_edge - %.0 = phi ptr [ %156, %._crit_edge ], [ %2, %21 ], [ %2, %19 ], [ %2, %16 ] + br i1 %exitcond117.not, label %._crit_edge, label %96, !llvm.loop !39 + +._crit_edge: ; preds = %150, %.preheader, %.loopexit + %151 = call ptr @heap_form_tuple(ptr noundef nonnull %0, ptr noundef %79, ptr noundef %80) #14 + call void @pfree(ptr noundef %79) #14 + call void @pfree(ptr noundef %80) #14 + %152 = getelementptr inbounds nuw i8, ptr %151, i64 16 + %153 = load ptr, ptr %152, align 8 + br label %154 + +154: ; preds = %16, %19, %21, %._crit_edge + %.0 = phi ptr [ %153, %._crit_edge ], [ %2, %21 ], [ %2, %19 ], [ %2, %16 ] ret ptr %.0 } diff --git a/bench/ruby/optimized/compile.ll b/bench/ruby/optimized/compile.ll index 494b035c28e..a4231e0415d 100644 --- a/bench/ruby/optimized/compile.ll +++ b/bench/ruby/optimized/compile.ll @@ -60366,8 +60366,8 @@ define internal fastcc range(i32 0, 2) i32 @compile_massign_lhs(ptr noundef %0, %14 = and i32 %13, 127 switch i32 %14, label %iseq_compile_each.exit285 [ i32 103, label %iseq_compile_each.exit - i32 24, label %305 - i32 29, label %333 + i32 24, label %303 + i32 29, label %331 ] iseq_compile_each.exit: ; preds = %7 @@ -60841,436 +60841,428 @@ ci_flag_set.exit: ; preds = %236, %vm_ci_new_.ex %237 = load ptr, ptr %43, align 8, !tbaa !72 store i64 %.pre-phi, ptr %237, align 8, !tbaa !34 %238 = ptrtoint ptr %.0140 to i64 - %239 = and i64 %238, 7 - %.not56 = icmp eq i64 %239, 0 - br i1 %.not56, label %240, label %nd_line.exit224 - -240: ; preds = %ci_flag_set.exit tail call void @rb_gc_writebarrier(i64 noundef %.pre, i64 noundef %238) #40 - br label %nd_line.exit224 - -nd_line.exit224: ; preds = %ci_flag_set.exit, %240 - %241 = load i64, ptr %4, align 8, !tbaa !169 - %242 = lshr i64 %241, 15 - %243 = trunc i64 %242 to i32 - %244 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %245 = load i32, ptr %244, align 8, !tbaa !259 - br i1 %.not16117, label %246, label %ELEM_INSERT_PREV.exit231 - -246: ; preds = %nd_line.exit224 - %247 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %243, i32 noundef %245, i32 noundef 42, i32 noundef 0, ptr noundef null) - %248 = load ptr, ptr %40, align 8, !tbaa !32 - %249 = getelementptr inbounds nuw i8, ptr %247, i64 16 - store ptr %248, ptr %249, align 8, !tbaa !32 - %250 = getelementptr inbounds nuw i8, ptr %247, i64 8 - store ptr %.0140, ptr %250, align 8, !tbaa !33 - store ptr %247, ptr %40, align 8, !tbaa !32 - %251 = load ptr, ptr %249, align 8, !tbaa !32 - %.not.i226 = icmp eq ptr %251, null - br i1 %.not.i226, label %ELEM_INSERT_PREV.exit, label %252 - -252: ; preds = %246 - %253 = getelementptr inbounds nuw i8, ptr %251, i64 8 - store ptr %247, ptr %253, align 8, !tbaa !33 + %239 = load i64, ptr %4, align 8, !tbaa !169 + %240 = lshr i64 %239, 15 + %241 = trunc i64 %240 to i32 + %242 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %243 = load i32, ptr %242, align 8, !tbaa !259 + br i1 %.not16117, label %244, label %ELEM_INSERT_PREV.exit231 + +244: ; preds = %ci_flag_set.exit + %245 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 42, i32 noundef 0, ptr noundef null) + %246 = load ptr, ptr %40, align 8, !tbaa !32 + %247 = getelementptr inbounds nuw i8, ptr %245, i64 16 + store ptr %246, ptr %247, align 8, !tbaa !32 + %248 = getelementptr inbounds nuw i8, ptr %245, i64 8 + store ptr %.0140, ptr %248, align 8, !tbaa !33 + store ptr %245, ptr %40, align 8, !tbaa !32 + %249 = load ptr, ptr %247, align 8, !tbaa !32 + %.not.i226 = icmp eq ptr %249, null + br i1 %.not.i226, label %ELEM_INSERT_PREV.exit, label %250 + +250: ; preds = %244 + %251 = getelementptr inbounds nuw i8, ptr %249, i64 8 + store ptr %245, ptr %251, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit -ELEM_INSERT_PREV.exit: ; preds = %246, %252 - %254 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %243, i32 noundef %245, i32 noundef 35, i32 noundef 1, i64 noundef 20) - %255 = load ptr, ptr %40, align 8, !tbaa !32 - %256 = getelementptr inbounds nuw i8, ptr %254, i64 16 - store ptr %255, ptr %256, align 8, !tbaa !32 - %257 = getelementptr inbounds nuw i8, ptr %254, i64 8 - store ptr %.0140, ptr %257, align 8, !tbaa !33 - store ptr %254, ptr %40, align 8, !tbaa !32 - %258 = load ptr, ptr %256, align 8, !tbaa !32 - %.not.i227 = icmp eq ptr %258, null - br i1 %.not.i227, label %ELEM_INSERT_PREV.exit228, label %259 - -259: ; preds = %ELEM_INSERT_PREV.exit - %260 = getelementptr inbounds nuw i8, ptr %258, i64 8 - store ptr %254, ptr %260, align 8, !tbaa !33 +ELEM_INSERT_PREV.exit: ; preds = %244, %250 + %252 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 35, i32 noundef 1, i64 noundef 20) + %253 = load ptr, ptr %40, align 8, !tbaa !32 + %254 = getelementptr inbounds nuw i8, ptr %252, i64 16 + store ptr %253, ptr %254, align 8, !tbaa !32 + %255 = getelementptr inbounds nuw i8, ptr %252, i64 8 + store ptr %.0140, ptr %255, align 8, !tbaa !33 + store ptr %252, ptr %40, align 8, !tbaa !32 + %256 = load ptr, ptr %254, align 8, !tbaa !32 + %.not.i227 = icmp eq ptr %256, null + br i1 %.not.i227, label %ELEM_INSERT_PREV.exit228, label %257 + +257: ; preds = %ELEM_INSERT_PREV.exit + %258 = getelementptr inbounds nuw i8, ptr %256, i64 8 + store ptr %252, ptr %258, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit228 -ELEM_INSERT_PREV.exit228: ; preds = %ELEM_INSERT_PREV.exit, %259 - %261 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %243, i32 noundef %245, i32 noundef 42, i32 noundef 0, ptr noundef null) - %262 = load ptr, ptr %40, align 8, !tbaa !32 - %263 = getelementptr inbounds nuw i8, ptr %261, i64 16 - store ptr %262, ptr %263, align 8, !tbaa !32 - %264 = getelementptr inbounds nuw i8, ptr %261, i64 8 - store ptr %.0140, ptr %264, align 8, !tbaa !33 - store ptr %261, ptr %40, align 8, !tbaa !32 - %265 = load ptr, ptr %263, align 8, !tbaa !32 - %.not.i230 = icmp eq ptr %265, null - br i1 %.not.i230, label %ELEM_INSERT_PREV.exit231, label %266 - -266: ; preds = %ELEM_INSERT_PREV.exit228 - %267 = getelementptr inbounds nuw i8, ptr %265, i64 8 - store ptr %261, ptr %267, align 8, !tbaa !33 +ELEM_INSERT_PREV.exit228: ; preds = %ELEM_INSERT_PREV.exit, %257 + %259 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 42, i32 noundef 0, ptr noundef null) + %260 = load ptr, ptr %40, align 8, !tbaa !32 + %261 = getelementptr inbounds nuw i8, ptr %259, i64 16 + store ptr %260, ptr %261, align 8, !tbaa !32 + %262 = getelementptr inbounds nuw i8, ptr %259, i64 8 + store ptr %.0140, ptr %262, align 8, !tbaa !33 + store ptr %259, ptr %40, align 8, !tbaa !32 + %263 = load ptr, ptr %261, align 8, !tbaa !32 + %.not.i230 = icmp eq ptr %263, null + br i1 %.not.i230, label %ELEM_INSERT_PREV.exit231, label %264 + +264: ; preds = %ELEM_INSERT_PREV.exit228 + %265 = getelementptr inbounds nuw i8, ptr %263, i64 8 + store ptr %259, ptr %265, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit231 -ELEM_INSERT_PREV.exit231: ; preds = %266, %ELEM_INSERT_PREV.exit228, %nd_line.exit224 - %268 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %243, i32 noundef %245, i32 noundef 34, i32 noundef 1, i64 noundef 3) - %269 = load ptr, ptr %40, align 8, !tbaa !32 - %270 = getelementptr inbounds nuw i8, ptr %268, i64 16 - store ptr %269, ptr %270, align 8, !tbaa !32 - %271 = getelementptr inbounds nuw i8, ptr %268, i64 8 - store ptr %.0140, ptr %271, align 8, !tbaa !33 - store ptr %268, ptr %40, align 8, !tbaa !32 - %272 = load ptr, ptr %270, align 8, !tbaa !32 - %.not.i232 = icmp eq ptr %272, null - br i1 %.not.i232, label %ELEM_INSERT_PREV.exit233, label %273 - -273: ; preds = %ELEM_INSERT_PREV.exit231 - %274 = getelementptr inbounds nuw i8, ptr %272, i64 8 - store ptr %268, ptr %274, align 8, !tbaa !33 +ELEM_INSERT_PREV.exit231: ; preds = %264, %ELEM_INSERT_PREV.exit228, %ci_flag_set.exit + %266 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 34, i32 noundef 1, i64 noundef 3) + %267 = load ptr, ptr %40, align 8, !tbaa !32 + %268 = getelementptr inbounds nuw i8, ptr %266, i64 16 + store ptr %267, ptr %268, align 8, !tbaa !32 + %269 = getelementptr inbounds nuw i8, ptr %266, i64 8 + store ptr %.0140, ptr %269, align 8, !tbaa !33 + store ptr %266, ptr %40, align 8, !tbaa !32 + %270 = load ptr, ptr %268, align 8, !tbaa !32 + %.not.i232 = icmp eq ptr %270, null + br i1 %.not.i232, label %ELEM_INSERT_PREV.exit233, label %271 + +271: ; preds = %ELEM_INSERT_PREV.exit231 + %272 = getelementptr inbounds nuw i8, ptr %270, i64 8 + store ptr %266, ptr %272, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit233 -ELEM_INSERT_PREV.exit233: ; preds = %273, %ELEM_INSERT_PREV.exit231, %vm_ci_flag.exit.thread, %vm_ci_flag.exit - br i1 %.not162, label %nd_line.exit236, label %292 +ELEM_INSERT_PREV.exit233: ; preds = %271, %ELEM_INSERT_PREV.exit231, %vm_ci_flag.exit.thread, %vm_ci_flag.exit + br i1 %.not162, label %nd_line.exit236, label %290 nd_line.exit236: ; preds = %ELEM_INSERT_PREV.exit233 - %275 = load i64, ptr %4, align 8, !tbaa !169 - %276 = lshr i64 %275, 15 - %277 = trunc i64 %276 to i32 - %278 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %279 = load i32, ptr %278, align 8, !tbaa !259 - %280 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %277, i32 noundef %279, i32 noundef 39, i32 noundef 0, ptr noundef null) - %281 = load ptr, ptr %147, align 8, !tbaa !7 - %282 = getelementptr inbounds nuw i8, ptr %280, i64 16 - store ptr %281, ptr %282, align 8, !tbaa !32 - %283 = getelementptr inbounds nuw i8, ptr %281, i64 8 - store ptr %280, ptr %283, align 8, !tbaa !33 - store ptr %280, ptr %147, align 8, !tbaa !7 + %273 = load i64, ptr %4, align 8, !tbaa !169 + %274 = lshr i64 %273, 15 + %275 = trunc i64 %274 to i32 + %276 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %277 = load i32, ptr %276, align 8, !tbaa !259 + %278 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %275, i32 noundef %277, i32 noundef 39, i32 noundef 0, ptr noundef null) + %279 = load ptr, ptr %147, align 8, !tbaa !7 + %280 = getelementptr inbounds nuw i8, ptr %278, i64 16 + store ptr %279, ptr %280, align 8, !tbaa !32 + %281 = getelementptr inbounds nuw i8, ptr %279, i64 8 + store ptr %278, ptr %281, align 8, !tbaa !33 + store ptr %278, ptr %147, align 8, !tbaa !7 br i1 %89, label %nd_line.exit244.lr.ph, label %nd_line.exit240 nd_line.exit240: ; preds = %nd_line.exit236 - %284 = load i64, ptr %4, align 8, !tbaa !169 - %285 = lshr i64 %284, 15 - %286 = trunc i64 %285 to i32 - %287 = load i32, ptr %278, align 8, !tbaa !259 - %288 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %286, i32 noundef %287, i32 noundef 39, i32 noundef 0, ptr noundef null) - %289 = load ptr, ptr %147, align 8, !tbaa !7 - %290 = getelementptr inbounds nuw i8, ptr %288, i64 16 - store ptr %289, ptr %290, align 8, !tbaa !32 - %291 = getelementptr inbounds nuw i8, ptr %289, i64 8 - store ptr %288, ptr %291, align 8, !tbaa !33 - store ptr %288, ptr %147, align 8, !tbaa !7 - br label %292 + %282 = load i64, ptr %4, align 8, !tbaa !169 + %283 = lshr i64 %282, 15 + %284 = trunc i64 %283 to i32 + %285 = load i32, ptr %276, align 8, !tbaa !259 + %286 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %284, i32 noundef %285, i32 noundef 39, i32 noundef 0, ptr noundef null) + %287 = load ptr, ptr %147, align 8, !tbaa !7 + %288 = getelementptr inbounds nuw i8, ptr %286, i64 16 + store ptr %287, ptr %288, align 8, !tbaa !32 + %289 = getelementptr inbounds nuw i8, ptr %287, i64 8 + store ptr %286, ptr %289, align 8, !tbaa !33 + store ptr %286, ptr %147, align 8, !tbaa !7 + br label %290 -292: ; preds = %nd_line.exit240, %ELEM_INSERT_PREV.exit233 - %293 = icmp ult i32 %.0.i1818, 2147483647 - br i1 %293, label %nd_line.exit244.lr.ph, label %.thread23 +290: ; preds = %nd_line.exit240, %ELEM_INSERT_PREV.exit233 + %291 = icmp ult i32 %.0.i1818, 2147483647 + br i1 %291, label %nd_line.exit244.lr.ph, label %.thread23 -nd_line.exit244.lr.ph: ; preds = %nd_line.exit236, %292 - %294 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %295 = getelementptr inbounds nuw i8, ptr %3, i64 24 +nd_line.exit244.lr.ph: ; preds = %nd_line.exit236, %290 + %292 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %293 = getelementptr inbounds nuw i8, ptr %3, i64 24 br label %nd_line.exit244 nd_line.exit244: ; preds = %nd_line.exit244.lr.ph, %nd_line.exit244 - %.014832 = phi i32 [ 0, %nd_line.exit244.lr.ph ], [ %304, %nd_line.exit244 ] - %296 = load i64, ptr %4, align 8, !tbaa !169 - %297 = lshr i64 %296, 15 - %298 = trunc i64 %297 to i32 - %299 = load i32, ptr %294, align 8, !tbaa !259 - %300 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %298, i32 noundef %299, i32 noundef 39, i32 noundef 0, ptr noundef null) - %301 = load ptr, ptr %295, align 8, !tbaa !7 - %302 = getelementptr inbounds nuw i8, ptr %300, i64 16 - store ptr %301, ptr %302, align 8, !tbaa !32 - %303 = getelementptr inbounds nuw i8, ptr %301, i64 8 - store ptr %300, ptr %303, align 8, !tbaa !33 - store ptr %300, ptr %295, align 8, !tbaa !7 - %304 = add nuw nsw i32 %.014832, 1 + %.014832 = phi i32 [ 0, %nd_line.exit244.lr.ph ], [ %302, %nd_line.exit244 ] + %294 = load i64, ptr %4, align 8, !tbaa !169 + %295 = lshr i64 %294, 15 + %296 = trunc i64 %295 to i32 + %297 = load i32, ptr %292, align 8, !tbaa !259 + %298 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %296, i32 noundef %297, i32 noundef 39, i32 noundef 0, ptr noundef null) + %299 = load ptr, ptr %293, align 8, !tbaa !7 + %300 = getelementptr inbounds nuw i8, ptr %298, i64 16 + store ptr %299, ptr %300, align 8, !tbaa !32 + %301 = getelementptr inbounds nuw i8, ptr %299, i64 8 + store ptr %298, ptr %301, align 8, !tbaa !33 + store ptr %298, ptr %293, align 8, !tbaa !7 + %302 = add nuw nsw i32 %.014832, 1 %exitcond.not = icmp eq i32 %.014832, %.0.i1818 br i1 %exitcond.not, label %.thread23, label %nd_line.exit244, !llvm.loop !1061 -305: ; preds = %7 +303: ; preds = %7 call void @llvm.lifetime.start.p0(ptr nonnull %8) - %306 = getelementptr inbounds nuw i8, ptr %8, i64 24 + %304 = getelementptr inbounds nuw i8, ptr %8, i64 24 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %8, i8 0, i64 24, i1 false) - store ptr %8, ptr %306, align 8, !tbaa !7 - %307 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr %8, ptr %304, align 8, !tbaa !7 + %305 = getelementptr inbounds nuw i8, ptr %8, i64 8 call void @llvm.lifetime.start.p0(ptr nonnull %9) - %308 = getelementptr inbounds nuw i8, ptr %9, i64 24 + %306 = getelementptr inbounds nuw i8, ptr %9, i64 24 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %9, i8 0, i64 24, i1 false) - store ptr %9, ptr %308, align 8, !tbaa !7 - %309 = getelementptr inbounds nuw i8, ptr %9, i64 8 - %310 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %311 = load i32, ptr %310, align 8, !tbaa !935 - %312 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %313 = load i8, ptr %312, align 8, !tbaa !938, !range !65, !noundef !66 - store i8 1, ptr %312, align 8, !tbaa !938 - %314 = add i32 %6, -1 - store i32 %314, ptr %310, align 8, !tbaa !935 - %315 = call fastcc i32 @compile_massign0(ptr noundef %0, ptr noundef %1, ptr noundef %8, ptr noundef %9, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, i32 noundef 1) - %.not156 = icmp eq i32 %315, 0 - br i1 %.not156, label %APPEND_LIST.exit248, label %316 - -316: ; preds = %305 - store i32 %311, ptr %310, align 8, !tbaa !935 - store i8 %313, ptr %312, align 8, !tbaa !938 - %317 = load ptr, ptr %307, align 8, !tbaa !63 - %.not.i246 = icmp eq ptr %317, null - br i1 %.not.i246, label %APPEND_LIST.exit, label %318 - -318: ; preds = %316 - %319 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %320 = load ptr, ptr %319, align 8, !tbaa !7 - %321 = getelementptr inbounds nuw i8, ptr %320, i64 8 - store ptr %317, ptr %321, align 8, !tbaa !33 - %322 = load ptr, ptr %307, align 8, !tbaa !63 - %323 = getelementptr inbounds nuw i8, ptr %322, i64 16 - store ptr %320, ptr %323, align 8, !tbaa !32 - %324 = load ptr, ptr %306, align 8, !tbaa !7 - store ptr %324, ptr %319, align 8, !tbaa !7 + store ptr %9, ptr %306, align 8, !tbaa !7 + %307 = getelementptr inbounds nuw i8, ptr %9, i64 8 + %308 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %309 = load i32, ptr %308, align 8, !tbaa !935 + %310 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %311 = load i8, ptr %310, align 8, !tbaa !938, !range !65, !noundef !66 + store i8 1, ptr %310, align 8, !tbaa !938 + %312 = add i32 %6, -1 + store i32 %312, ptr %308, align 8, !tbaa !935 + %313 = call fastcc i32 @compile_massign0(ptr noundef %0, ptr noundef %1, ptr noundef %8, ptr noundef %9, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, i32 noundef 1) + %.not156 = icmp eq i32 %313, 0 + br i1 %.not156, label %APPEND_LIST.exit248, label %314 + +314: ; preds = %303 + store i32 %309, ptr %308, align 8, !tbaa !935 + store i8 %311, ptr %310, align 8, !tbaa !938 + %315 = load ptr, ptr %305, align 8, !tbaa !63 + %.not.i246 = icmp eq ptr %315, null + br i1 %.not.i246, label %APPEND_LIST.exit, label %316 + +316: ; preds = %314 + %317 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %318 = load ptr, ptr %317, align 8, !tbaa !7 + %319 = getelementptr inbounds nuw i8, ptr %318, i64 8 + store ptr %315, ptr %319, align 8, !tbaa !33 + %320 = load ptr, ptr %305, align 8, !tbaa !63 + %321 = getelementptr inbounds nuw i8, ptr %320, i64 16 + store ptr %318, ptr %321, align 8, !tbaa !32 + %322 = load ptr, ptr %304, align 8, !tbaa !7 + store ptr %322, ptr %317, align 8, !tbaa !7 br label %APPEND_LIST.exit -APPEND_LIST.exit: ; preds = %316, %318 - %325 = load ptr, ptr %309, align 8, !tbaa !63 - %.not.i247 = icmp eq ptr %325, null - br i1 %.not.i247, label %APPEND_LIST.exit248.thread, label %326 +APPEND_LIST.exit: ; preds = %314, %316 + %323 = load ptr, ptr %307, align 8, !tbaa !63 + %.not.i247 = icmp eq ptr %323, null + br i1 %.not.i247, label %APPEND_LIST.exit248.thread, label %324 -326: ; preds = %APPEND_LIST.exit - %327 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %328 = load ptr, ptr %327, align 8, !tbaa !7 - %329 = getelementptr inbounds nuw i8, ptr %328, i64 8 - store ptr %325, ptr %329, align 8, !tbaa !33 - %330 = load ptr, ptr %309, align 8, !tbaa !63 - %331 = getelementptr inbounds nuw i8, ptr %330, i64 16 - store ptr %328, ptr %331, align 8, !tbaa !32 - %332 = load ptr, ptr %308, align 8, !tbaa !7 - store ptr %332, ptr %327, align 8, !tbaa !7 +324: ; preds = %APPEND_LIST.exit + %325 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %326 = load ptr, ptr %325, align 8, !tbaa !7 + %327 = getelementptr inbounds nuw i8, ptr %326, i64 8 + store ptr %323, ptr %327, align 8, !tbaa !33 + %328 = load ptr, ptr %307, align 8, !tbaa !63 + %329 = getelementptr inbounds nuw i8, ptr %328, i64 16 + store ptr %326, ptr %329, align 8, !tbaa !32 + %330 = load ptr, ptr %306, align 8, !tbaa !7 + store ptr %330, ptr %325, align 8, !tbaa !7 br label %APPEND_LIST.exit248.thread -APPEND_LIST.exit248.thread: ; preds = %APPEND_LIST.exit, %326 +APPEND_LIST.exit248.thread: ; preds = %APPEND_LIST.exit, %324 call void @llvm.lifetime.end.p0(ptr nonnull %9) call void @llvm.lifetime.end.p0(ptr nonnull %8) br label %.thread23 -APPEND_LIST.exit248: ; preds = %305 +APPEND_LIST.exit248: ; preds = %303 call void @llvm.lifetime.end.p0(ptr nonnull %9) call void @llvm.lifetime.end.p0(ptr nonnull %8) br label %.thread23 -333: ; preds = %7 - %334 = getelementptr inbounds nuw i8, ptr %4, i64 32 - %335 = load i64, ptr %334, align 8, !tbaa !775 - %.not = icmp eq i64 %335, 0 +331: ; preds = %7 + %332 = getelementptr inbounds nuw i8, ptr %4, i64 32 + %333 = load i64, ptr %332, align 8, !tbaa !775 + %.not = icmp eq i64 %333, 0 br i1 %.not, label %iseq_compile_each.exit250, label %iseq_compile_each.exit285 -iseq_compile_each.exit250: ; preds = %333 - %336 = tail call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %4, i32 noundef 1) - %.not154 = icmp eq i32 %336, 0 - br i1 %.not154, label %.thread23, label %337 +iseq_compile_each.exit250: ; preds = %331 + %334 = tail call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %4, i32 noundef 1) + %.not154 = icmp eq i32 %334, 0 + br i1 %.not154, label %.thread23, label %335 -337: ; preds = %iseq_compile_each.exit250 - %338 = getelementptr i8, ptr %1, i64 24 - %.val171 = load ptr, ptr %338, align 8, !tbaa !7 - br label %339 +335: ; preds = %iseq_compile_each.exit250 + %336 = getelementptr i8, ptr %1, i64 24 + %.val171 = load ptr, ptr %336, align 8, !tbaa !7 + br label %337 -339: ; preds = %340, %337 - %.pn.i251 = phi ptr [ %.val171, %337 ], [ %.0.i253, %340 ] +337: ; preds = %338, %335 + %.pn.i251 = phi ptr [ %.val171, %335 ], [ %.0.i253, %338 ] %.0.in.i252 = getelementptr inbounds nuw i8, ptr %.pn.i251, i64 16 %.0.i253 = load ptr, ptr %.0.in.i252, align 8, !tbaa !32 %.not.i254 = icmp eq ptr %.0.i253, null - br i1 %.not.i254, label %get_prev_insn.exit256.preheader, label %340 + br i1 %.not.i254, label %get_prev_insn.exit256.preheader, label %338 -340: ; preds = %339 - %341 = load i32, ptr %.0.i253, align 8, !tbaa !67 - %342 = and i32 %341, -2 - %switch.i255 = icmp eq i32 %342, 2 - br i1 %switch.i255, label %get_prev_insn.exit256.preheader, label %339 +338: ; preds = %337 + %339 = load i32, ptr %.0.i253, align 8, !tbaa !67 + %340 = and i32 %339, -2 + %switch.i255 = icmp eq i32 %340, 2 + br i1 %switch.i255, label %get_prev_insn.exit256.preheader, label %337 -get_prev_insn.exit256.preheader: ; preds = %339, %340 +get_prev_insn.exit256.preheader: ; preds = %337, %338 br label %get_prev_insn.exit256 -get_prev_insn.exit256: ; preds = %get_prev_insn.exit256.preheader, %343 - %.pn.i257 = phi ptr [ %.0.i259, %343 ], [ %.0.i253, %get_prev_insn.exit256.preheader ] +get_prev_insn.exit256: ; preds = %get_prev_insn.exit256.preheader, %341 + %.pn.i257 = phi ptr [ %.0.i259, %341 ], [ %.0.i253, %get_prev_insn.exit256.preheader ] %.0.in.i258 = getelementptr inbounds nuw i8, ptr %.pn.i257, i64 16 %.0.i259 = load ptr, ptr %.0.in.i258, align 8, !tbaa !32 %.not.i260 = icmp eq ptr %.0.i259, null - br i1 %.not.i260, label %get_prev_insn.exit262, label %343 + br i1 %.not.i260, label %get_prev_insn.exit262, label %341 -343: ; preds = %get_prev_insn.exit256 - %344 = load i32, ptr %.0.i259, align 8, !tbaa !67 - %345 = and i32 %344, -2 - %switch.i261 = icmp eq i32 %345, 2 +341: ; preds = %get_prev_insn.exit256 + %342 = load i32, ptr %.0.i259, align 8, !tbaa !67 + %343 = and i32 %342, -2 + %switch.i261 = icmp eq i32 %343, 2 br i1 %switch.i261, label %get_prev_insn.exit262, label %get_prev_insn.exit256 -get_prev_insn.exit262: ; preds = %get_prev_insn.exit256, %343 - %346 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 8 - %347 = load ptr, ptr %346, align 8, !tbaa !33 - %348 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 16 - %349 = load ptr, ptr %348, align 8, !tbaa !32 - %350 = getelementptr inbounds nuw i8, ptr %349, i64 8 - store ptr %347, ptr %350, align 8, !tbaa !33 - %.not.i263 = icmp eq ptr %347, null - br i1 %.not.i263, label %ELEM_REMOVE.exit264.preheader, label %351 +get_prev_insn.exit262: ; preds = %get_prev_insn.exit256, %341 + %344 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 8 + %345 = load ptr, ptr %344, align 8, !tbaa !33 + %346 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 16 + %347 = load ptr, ptr %346, align 8, !tbaa !32 + %348 = getelementptr inbounds nuw i8, ptr %347, i64 8 + store ptr %345, ptr %348, align 8, !tbaa !33 + %.not.i263 = icmp eq ptr %345, null + br i1 %.not.i263, label %ELEM_REMOVE.exit264.preheader, label %349 -351: ; preds = %get_prev_insn.exit262 - %352 = getelementptr inbounds nuw i8, ptr %347, i64 16 - store ptr %349, ptr %352, align 8, !tbaa !32 +349: ; preds = %get_prev_insn.exit262 + %350 = getelementptr inbounds nuw i8, ptr %345, i64 16 + store ptr %347, ptr %350, align 8, !tbaa !32 br label %ELEM_REMOVE.exit264.preheader -ELEM_REMOVE.exit264.preheader: ; preds = %get_prev_insn.exit262, %351 +ELEM_REMOVE.exit264.preheader: ; preds = %get_prev_insn.exit262, %349 br label %ELEM_REMOVE.exit264 -ELEM_REMOVE.exit264: ; preds = %ELEM_REMOVE.exit264.preheader, %353 - %.pn.i265 = phi ptr [ %.0.i267, %353 ], [ %.val171, %ELEM_REMOVE.exit264.preheader ] +ELEM_REMOVE.exit264: ; preds = %ELEM_REMOVE.exit264.preheader, %351 + %.pn.i265 = phi ptr [ %.0.i267, %351 ], [ %.val171, %ELEM_REMOVE.exit264.preheader ] %.0.in.i266 = getelementptr inbounds nuw i8, ptr %.pn.i265, i64 16 %.0.i267 = load ptr, ptr %.0.in.i266, align 8, !tbaa !32 %.not.i268 = icmp eq ptr %.0.i267, null - br i1 %.not.i268, label %get_prev_insn.exit270, label %353 + br i1 %.not.i268, label %get_prev_insn.exit270, label %351 -353: ; preds = %ELEM_REMOVE.exit264 - %354 = load i32, ptr %.0.i267, align 8, !tbaa !67 - %355 = and i32 %354, -2 - %switch.i269 = icmp eq i32 %355, 2 +351: ; preds = %ELEM_REMOVE.exit264 + %352 = load i32, ptr %.0.i267, align 8, !tbaa !67 + %353 = and i32 %352, -2 + %switch.i269 = icmp eq i32 %353, 2 br i1 %switch.i269, label %get_prev_insn.exit270, label %ELEM_REMOVE.exit264 -get_prev_insn.exit270: ; preds = %ELEM_REMOVE.exit264, %353 - %356 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 8 - %357 = load ptr, ptr %356, align 8, !tbaa !33 - %358 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 16 - %359 = load ptr, ptr %358, align 8, !tbaa !32 - %360 = getelementptr inbounds nuw i8, ptr %359, i64 8 - store ptr %357, ptr %360, align 8, !tbaa !33 - %.not.i271 = icmp eq ptr %357, null - br i1 %.not.i271, label %ELEM_REMOVE.exit272, label %361 +get_prev_insn.exit270: ; preds = %ELEM_REMOVE.exit264, %351 + %354 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 8 + %355 = load ptr, ptr %354, align 8, !tbaa !33 + %356 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 16 + %357 = load ptr, ptr %356, align 8, !tbaa !32 + %358 = getelementptr inbounds nuw i8, ptr %357, i64 8 + store ptr %355, ptr %358, align 8, !tbaa !33 + %.not.i271 = icmp eq ptr %355, null + br i1 %.not.i271, label %ELEM_REMOVE.exit272, label %359 -361: ; preds = %get_prev_insn.exit270 - %362 = getelementptr inbounds nuw i8, ptr %357, i64 16 - store ptr %359, ptr %362, align 8, !tbaa !32 +359: ; preds = %get_prev_insn.exit270 + %360 = getelementptr inbounds nuw i8, ptr %355, i64 16 + store ptr %357, ptr %360, align 8, !tbaa !32 br label %ELEM_REMOVE.exit272 -ELEM_REMOVE.exit272: ; preds = %get_prev_insn.exit270, %361 - %363 = getelementptr inbounds nuw i8, ptr %.val171, i64 8 - %364 = load ptr, ptr %363, align 8, !tbaa !33 - %365 = getelementptr inbounds nuw i8, ptr %.val171, i64 16 - %366 = load ptr, ptr %365, align 8, !tbaa !32 - %367 = getelementptr inbounds nuw i8, ptr %366, i64 8 - store ptr %364, ptr %367, align 8, !tbaa !33 - %.not.i273 = icmp eq ptr %364, null - br i1 %.not.i273, label %ELEM_REMOVE.exit274, label %368 +ELEM_REMOVE.exit272: ; preds = %get_prev_insn.exit270, %359 + %361 = getelementptr inbounds nuw i8, ptr %.val171, i64 8 + %362 = load ptr, ptr %361, align 8, !tbaa !33 + %363 = getelementptr inbounds nuw i8, ptr %.val171, i64 16 + %364 = load ptr, ptr %363, align 8, !tbaa !32 + %365 = getelementptr inbounds nuw i8, ptr %364, i64 8 + store ptr %362, ptr %365, align 8, !tbaa !33 + %.not.i273 = icmp eq ptr %362, null + br i1 %.not.i273, label %ELEM_REMOVE.exit274, label %366 -368: ; preds = %ELEM_REMOVE.exit272 - %369 = getelementptr inbounds nuw i8, ptr %364, i64 16 - store ptr %366, ptr %369, align 8, !tbaa !32 +366: ; preds = %ELEM_REMOVE.exit272 + %367 = getelementptr inbounds nuw i8, ptr %362, i64 16 + store ptr %364, ptr %367, align 8, !tbaa !32 br label %ELEM_REMOVE.exit274 -ELEM_REMOVE.exit274: ; preds = %ELEM_REMOVE.exit272, %368 - %370 = load ptr, ptr %365, align 8, !tbaa !738 - store ptr %370, ptr %338, align 8, !tbaa !7 - %371 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %372 = load ptr, ptr %371, align 8, !tbaa !7 - store ptr %372, ptr %365, align 8, !tbaa !32 - %373 = getelementptr inbounds nuw i8, ptr %372, i64 8 - store ptr %.val171, ptr %373, align 8, !tbaa !33 - store ptr %.val171, ptr %371, align 8, !tbaa !7 +ELEM_REMOVE.exit274: ; preds = %ELEM_REMOVE.exit272, %366 + %368 = load ptr, ptr %363, align 8, !tbaa !738 + store ptr %368, ptr %336, align 8, !tbaa !7 + %369 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %370 = load ptr, ptr %369, align 8, !tbaa !7 + store ptr %370, ptr %363, align 8, !tbaa !32 + %371 = getelementptr inbounds nuw i8, ptr %370, i64 8 + store ptr %.val171, ptr %371, align 8, !tbaa !33 + store ptr %.val171, ptr %369, align 8, !tbaa !7 %.not.i275 = icmp eq ptr %5, null - br i1 %.not.i275, label %374, label %375 + br i1 %.not.i275, label %372, label %373 -374: ; preds = %ELEM_REMOVE.exit274 +372: ; preds = %ELEM_REMOVE.exit274 tail call void (ptr, ...) @rb_bug(ptr noundef nonnull @.str.145) #41 unreachable -375: ; preds = %ELEM_REMOVE.exit274 - %376 = tail call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40) #45 - %.not24.i276 = icmp eq ptr %376, null - br i1 %.not24.i276, label %.thread23, label %377 - -377: ; preds = %375 - store ptr %.val171, ptr %376, align 8, !tbaa !948 - %378 = getelementptr inbounds nuw i8, ptr %376, i64 16 - store ptr %4, ptr %378, align 8, !tbaa !949 - %379 = getelementptr inbounds nuw i8, ptr %5, i64 20 - %380 = load i32, ptr %379, align 4, !tbaa !939 - %381 = add i32 %380, 1 - %382 = getelementptr inbounds nuw i8, ptr %376, i64 24 - store i32 %381, ptr %382, align 8, !tbaa !941 - %383 = getelementptr inbounds nuw i8, ptr %376, i64 28 - store i32 1, ptr %383, align 4, !tbaa !945 - store i32 %381, ptr %379, align 4, !tbaa !939 - %384 = getelementptr inbounds nuw i8, ptr %376, i64 32 - store i32 %6, ptr %384, align 8, !tbaa !944 - %385 = getelementptr inbounds nuw i8, ptr %376, i64 8 - store ptr null, ptr %385, align 8, !tbaa !946 - %386 = load ptr, ptr %5, align 8, !tbaa !940 - %.not25.i277 = icmp eq ptr %386, null - br i1 %.not25.i277, label %387, label %388 - -387: ; preds = %377 - store ptr %376, ptr %5, align 8, !tbaa !940 - br label %392 - -388: ; preds = %377 - %389 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %390 = load ptr, ptr %389, align 8, !tbaa !1059 - %391 = getelementptr inbounds nuw i8, ptr %390, i64 8 - store ptr %376, ptr %391, align 8, !tbaa !946 - br label %392 - -392: ; preds = %387, %388 - %393 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %376, ptr %393, align 8, !tbaa !1059 - %394 = load i64, ptr %4, align 8, !tbaa !169 - %395 = lshr i64 %394, 15 - %396 = trunc i64 %395 to i32 - %397 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %398 = load i32, ptr %397, align 8, !tbaa !259 - %399 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %396, i32 noundef %398, i32 noundef 39, i32 noundef 0, ptr noundef null) - %400 = getelementptr inbounds nuw i8, ptr %3, i64 24 - %401 = load ptr, ptr %400, align 8, !tbaa !7 - %402 = getelementptr inbounds nuw i8, ptr %399, i64 16 - store ptr %401, ptr %402, align 8, !tbaa !32 - %403 = getelementptr inbounds nuw i8, ptr %401, i64 8 - store ptr %399, ptr %403, align 8, !tbaa !33 - store ptr %399, ptr %400, align 8, !tbaa !7 +373: ; preds = %ELEM_REMOVE.exit274 + %374 = tail call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40) #45 + %.not24.i276 = icmp eq ptr %374, null + br i1 %.not24.i276, label %.thread23, label %375 + +375: ; preds = %373 + store ptr %.val171, ptr %374, align 8, !tbaa !948 + %376 = getelementptr inbounds nuw i8, ptr %374, i64 16 + store ptr %4, ptr %376, align 8, !tbaa !949 + %377 = getelementptr inbounds nuw i8, ptr %5, i64 20 + %378 = load i32, ptr %377, align 4, !tbaa !939 + %379 = add i32 %378, 1 + %380 = getelementptr inbounds nuw i8, ptr %374, i64 24 + store i32 %379, ptr %380, align 8, !tbaa !941 + %381 = getelementptr inbounds nuw i8, ptr %374, i64 28 + store i32 1, ptr %381, align 4, !tbaa !945 + store i32 %379, ptr %377, align 4, !tbaa !939 + %382 = getelementptr inbounds nuw i8, ptr %374, i64 32 + store i32 %6, ptr %382, align 8, !tbaa !944 + %383 = getelementptr inbounds nuw i8, ptr %374, i64 8 + store ptr null, ptr %383, align 8, !tbaa !946 + %384 = load ptr, ptr %5, align 8, !tbaa !940 + %.not25.i277 = icmp eq ptr %384, null + br i1 %.not25.i277, label %385, label %386 + +385: ; preds = %375 + store ptr %374, ptr %5, align 8, !tbaa !940 + br label %390 + +386: ; preds = %375 + %387 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %388 = load ptr, ptr %387, align 8, !tbaa !1059 + %389 = getelementptr inbounds nuw i8, ptr %388, i64 8 + store ptr %374, ptr %389, align 8, !tbaa !946 + br label %390 + +390: ; preds = %385, %386 + %391 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %374, ptr %391, align 8, !tbaa !1059 + %392 = load i64, ptr %4, align 8, !tbaa !169 + %393 = lshr i64 %392, 15 + %394 = trunc i64 %393 to i32 + %395 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %396 = load i32, ptr %395, align 8, !tbaa !259 + %397 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %394, i32 noundef %396, i32 noundef 39, i32 noundef 0, ptr noundef null) + %398 = getelementptr inbounds nuw i8, ptr %3, i64 24 + %399 = load ptr, ptr %398, align 8, !tbaa !7 + %400 = getelementptr inbounds nuw i8, ptr %397, i64 16 + store ptr %399, ptr %400, align 8, !tbaa !32 + %401 = getelementptr inbounds nuw i8, ptr %399, i64 8 + store ptr %397, ptr %401, align 8, !tbaa !33 + store ptr %397, ptr %398, align 8, !tbaa !7 br label %.thread23 -iseq_compile_each.exit285: ; preds = %333, %7 +iseq_compile_each.exit285: ; preds = %331, %7 call void @llvm.lifetime.start.p0(ptr nonnull %10) - %404 = getelementptr inbounds nuw i8, ptr %10, i64 24 + %402 = getelementptr inbounds nuw i8, ptr %10, i64 24 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %10, i8 0, i64 24, i1 false) - store ptr %10, ptr %404, align 8, !tbaa !7 - %405 = getelementptr inbounds nuw i8, ptr %10, i64 8 - %406 = call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef nonnull %10, ptr noundef nonnull %4, i32 noundef 1) - %.not164 = icmp eq i32 %406, 0 - br i1 %.not164, label %APPEND_LIST.exit289, label %407 - -407: ; preds = %iseq_compile_each.exit285 - %.val = load ptr, ptr %405, align 8, !tbaa !63 - %408 = getelementptr inbounds nuw i8, ptr %.val, i64 8 - %409 = load ptr, ptr %408, align 8, !tbaa !33 - %410 = getelementptr inbounds nuw i8, ptr %.val, i64 16 - %411 = load ptr, ptr %410, align 8, !tbaa !32 - %412 = getelementptr inbounds nuw i8, ptr %411, i64 8 - store ptr %409, ptr %412, align 8, !tbaa !33 - %.not.i286 = icmp eq ptr %409, null - br i1 %.not.i286, label %ELEM_REMOVE.exit287, label %413 + store ptr %10, ptr %402, align 8, !tbaa !7 + %403 = getelementptr inbounds nuw i8, ptr %10, i64 8 + %404 = call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef nonnull %10, ptr noundef nonnull %4, i32 noundef 1) + %.not164 = icmp eq i32 %404, 0 + br i1 %.not164, label %APPEND_LIST.exit289, label %405 + +405: ; preds = %iseq_compile_each.exit285 + %.val = load ptr, ptr %403, align 8, !tbaa !63 + %406 = getelementptr inbounds nuw i8, ptr %.val, i64 8 + %407 = load ptr, ptr %406, align 8, !tbaa !33 + %408 = getelementptr inbounds nuw i8, ptr %.val, i64 16 + %409 = load ptr, ptr %408, align 8, !tbaa !32 + %410 = getelementptr inbounds nuw i8, ptr %409, i64 8 + store ptr %407, ptr %410, align 8, !tbaa !33 + %.not.i286 = icmp eq ptr %407, null + br i1 %.not.i286, label %ELEM_REMOVE.exit287, label %411 -413: ; preds = %407 - %414 = getelementptr inbounds nuw i8, ptr %409, i64 16 - store ptr %411, ptr %414, align 8, !tbaa !32 +411: ; preds = %405 + %412 = getelementptr inbounds nuw i8, ptr %407, i64 16 + store ptr %409, ptr %412, align 8, !tbaa !32 br label %ELEM_REMOVE.exit287 -ELEM_REMOVE.exit287: ; preds = %407, %413 - %415 = load ptr, ptr %405, align 8, !tbaa !63 - %.not.i288 = icmp eq ptr %415, null - br i1 %.not.i288, label %APPEND_LIST.exit289.thread, label %416 - -416: ; preds = %ELEM_REMOVE.exit287 - %417 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %418 = load ptr, ptr %417, align 8, !tbaa !7 - %419 = getelementptr inbounds nuw i8, ptr %418, i64 8 - store ptr %415, ptr %419, align 8, !tbaa !33 - %420 = load ptr, ptr %405, align 8, !tbaa !63 - %421 = getelementptr inbounds nuw i8, ptr %420, i64 16 - store ptr %418, ptr %421, align 8, !tbaa !32 - %422 = load ptr, ptr %404, align 8, !tbaa !7 - store ptr %422, ptr %417, align 8, !tbaa !7 +ELEM_REMOVE.exit287: ; preds = %405, %411 + %413 = load ptr, ptr %403, align 8, !tbaa !63 + %.not.i288 = icmp eq ptr %413, null + br i1 %.not.i288, label %APPEND_LIST.exit289.thread, label %414 + +414: ; preds = %ELEM_REMOVE.exit287 + %415 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %416 = load ptr, ptr %415, align 8, !tbaa !7 + %417 = getelementptr inbounds nuw i8, ptr %416, i64 8 + store ptr %413, ptr %417, align 8, !tbaa !33 + %418 = load ptr, ptr %403, align 8, !tbaa !63 + %419 = getelementptr inbounds nuw i8, ptr %418, i64 16 + store ptr %416, ptr %419, align 8, !tbaa !32 + %420 = load ptr, ptr %402, align 8, !tbaa !7 + store ptr %420, ptr %415, align 8, !tbaa !7 br label %APPEND_LIST.exit289.thread -APPEND_LIST.exit289.thread: ; preds = %416, %ELEM_REMOVE.exit287 +APPEND_LIST.exit289.thread: ; preds = %414, %ELEM_REMOVE.exit287 call void @llvm.lifetime.end.p0(ptr nonnull %10) br label %.thread23 @@ -61278,8 +61270,8 @@ APPEND_LIST.exit289: ; preds = %iseq_compile_each.e call void @llvm.lifetime.end.p0(ptr nonnull %10) br label %.thread23 -.thread23: ; preds = %nd_line.exit244, %292, %375, %iseq_compile_each.exit250, %127, %101, %iseq_compile_each.exit, %APPEND_LIST.exit248.thread, %392, %APPEND_LIST.exit289.thread, %APPEND_LIST.exit289, %APPEND_LIST.exit248 - %.2 = phi i32 [ 0, %APPEND_LIST.exit289 ], [ 0, %APPEND_LIST.exit248 ], [ 1, %APPEND_LIST.exit289.thread ], [ 1, %392 ], [ 1, %APPEND_LIST.exit248.thread ], [ 0, %iseq_compile_each.exit ], [ 0, %101 ], [ 0, %127 ], [ 0, %iseq_compile_each.exit250 ], [ 0, %375 ], [ 1, %292 ], [ 1, %nd_line.exit244 ] +.thread23: ; preds = %nd_line.exit244, %290, %373, %iseq_compile_each.exit250, %127, %101, %iseq_compile_each.exit, %APPEND_LIST.exit248.thread, %390, %APPEND_LIST.exit289.thread, %APPEND_LIST.exit289, %APPEND_LIST.exit248 + %.2 = phi i32 [ 0, %APPEND_LIST.exit289 ], [ 0, %APPEND_LIST.exit248 ], [ 1, %APPEND_LIST.exit289.thread ], [ 1, %390 ], [ 1, %APPEND_LIST.exit248.thread ], [ 0, %iseq_compile_each.exit ], [ 0, %101 ], [ 0, %127 ], [ 0, %iseq_compile_each.exit250 ], [ 0, %373 ], [ 1, %290 ], [ 1, %nd_line.exit244 ] ret i32 %.2 } diff --git a/bench/ruby/optimized/vm.ll b/bench/ruby/optimized/vm.ll index 2f7e2b2cf51..10f3b6e1393 100644 --- a/bench/ruby/optimized/vm.ll +++ b/bench/ruby/optimized/vm.ll @@ -19549,13 +19549,13 @@ rb_vm_lock_enter.exit: ; preds = %3, %11 26: ; preds = %17 call void @llvm.lifetime.end.p0(ptr nonnull %8) %.not23 = icmp eq ptr %2, null - br i1 %.not23, label %101, label %27 + br i1 %.not23, label %99, label %27 27: ; preds = %26 %28 = getelementptr inbounds nuw i8, ptr %21, i64 8 %29 = load i64, ptr %28, align 8, !tbaa !187 store i64 %29, ptr %2, align 8, !tbaa !7 - br label %101 + br label %99 30: ; preds = %24, %15, %rb_vm_lock_enter.exit call void @llvm.lifetime.end.p0(ptr nonnull %8) @@ -19716,29 +19716,24 @@ negative_cme.exit: ; preds = %72, %75 %96 = ptrtoint ptr %90 to i64 %97 = call i32 @rb_id_table_insert(ptr noundef %.0.i28, i64 noundef %1, i64 noundef %96) #20 %98 = ptrtoint ptr %.1 to i64 - %99 = and i64 %98, 7 - %.not.i.i29 = icmp eq i64 %99, 0 - br i1 %.not.i.i29, label %100, label %cache_callable_method_entry.exit - -100: ; preds = %89 call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %98) #20 br label %cache_callable_method_entry.exit -cache_callable_method_entry.exit: ; preds = %87, %89, %100 +cache_callable_method_entry.exit: ; preds = %87, %89 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br label %101 + br label %99 -101: ; preds = %26, %27, %cache_callable_method_entry.exit +99: ; preds = %26, %27, %cache_callable_method_entry.exit %.0 = phi ptr [ %21, %27 ], [ %21, %26 ], [ %.1, %cache_callable_method_entry.exit ] - %102 = load ptr, ptr @ruby_single_main_ractor, align 8, !tbaa !110 - %.not.i.i30 = icmp eq ptr %102, null - br i1 %.not.i.i30, label %103, label %rb_vm_lock_leave.exit + %100 = load ptr, ptr @ruby_single_main_ractor, align 8, !tbaa !110 + %.not.i.i30 = icmp eq ptr %100, null + br i1 %.not.i.i30, label %101, label %rb_vm_lock_leave.exit -103: ; preds = %101 +101: ; preds = %99 call void @rb_vm_lock_leave_body(ptr noundef nonnull %9) #20 br label %rb_vm_lock_leave.exit -rb_vm_lock_leave.exit: ; preds = %101, %103 +rb_vm_lock_leave.exit: ; preds = %99, %101 call void @llvm.lifetime.end.p0(ptr nonnull %9) ret ptr %.0 } @@ -31222,29 +31217,26 @@ vm_proc_iseq.exit: ; preds = %tailrecurse.i.i %27 = getelementptr inbounds nuw i8, ptr %26, i64 16 %28 = load ptr, ptr %27, align 8, !tbaa !433 store ptr %28, ptr %24, align 8, !tbaa !26 - %29 = ptrtoint ptr %26 to i64 - %30 = icmp eq ptr %26, null - %31 = and i64 %29, 7 - %32 = icmp ne i64 %31, 0 - %33 = or i1 %30, %32 - br i1 %33, label %proc_isolate_env.exit, label %34 + %29 = icmp eq ptr %26, null + br i1 %29, label %proc_isolate_env.exit, label %30 -34: ; preds = %23 - tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %29) #20 +30: ; preds = %23 + %31 = ptrtoint ptr %26 to i64 + tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %31) #20 br label %proc_isolate_env.exit -proc_isolate_env.exit: ; preds = %23, %34 - %35 = getelementptr inbounds nuw i8, ptr %11, i64 32 - %36 = load i8, ptr %35, align 8 - %37 = or i8 %36, 4 - store i8 %37, ptr %35, align 8 +proc_isolate_env.exit: ; preds = %23, %30 + %32 = getelementptr inbounds nuw i8, ptr %11, i64 32 + %33 = load i8, ptr %32, align 8 + %34 = or i8 %33, 4 + store i8 %34, ptr %32, align 8 br label %vm_proc_iseq.exit.thread vm_proc_iseq.exit.thread: ; preds = %tailrecurse.i.i, %tailrecurse.i.i, %proc_isolate_env.exit, %vm_proc_iseq.exit - %38 = inttoptr i64 %0 to ptr - %39 = load i64, ptr %38, align 8, !tbaa !97 - %40 = or i64 %39, 256 - store i64 %40, ptr %38, align 8, !tbaa !97 + %35 = inttoptr i64 %0 to ptr + %36 = load i64, ptr %35, align 8, !tbaa !97 + %37 = or i64 %36, 256 + store i64 %37, ptr %35, align 8, !tbaa !97 ret i64 %0 } @@ -31459,29 +31451,26 @@ rb_ractor_shareable_p.exit.thread: ; preds = %21, %vm_block_self. %38 = getelementptr inbounds nuw i8, ptr %37, i64 16 %39 = load ptr, ptr %38, align 8, !tbaa !433 store ptr %39, ptr %35, align 8, !tbaa !26 - %40 = ptrtoint ptr %37 to i64 - %41 = icmp eq ptr %37, null - %42 = and i64 %40, 7 - %43 = icmp ne i64 %42, 0 - %44 = or i1 %41, %43 - br i1 %44, label %proc_isolate_env.exit, label %45 + %40 = icmp eq ptr %37, null + br i1 %40, label %proc_isolate_env.exit, label %41 -45: ; preds = %34 - tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %40) #20 +41: ; preds = %34 + %42 = ptrtoint ptr %37 to i64 + tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %42) #20 br label %proc_isolate_env.exit -proc_isolate_env.exit: ; preds = %34, %45 - %46 = getelementptr inbounds nuw i8, ptr %11, i64 32 - %47 = load i8, ptr %46, align 8 - %48 = or i8 %47, 4 - store i8 %48, ptr %46, align 8 +proc_isolate_env.exit: ; preds = %34, %41 + %43 = getelementptr inbounds nuw i8, ptr %11, i64 32 + %44 = load i8, ptr %43, align 8 + %45 = or i8 %44, 4 + store i8 %45, ptr %43, align 8 br label %vm_proc_iseq.exit.thread vm_proc_iseq.exit.thread: ; preds = %tailrecurse.i.i, %tailrecurse.i.i, %proc_isolate_env.exit, %vm_proc_iseq.exit - %49 = inttoptr i64 %0 to ptr - %50 = load i64, ptr %49, align 8, !tbaa !97 - %51 = or i64 %50, 256 - store i64 %51, ptr %49, align 8, !tbaa !97 + %46 = inttoptr i64 %0 to ptr + %47 = load i64, ptr %46, align 8, !tbaa !97 + %48 = or i64 %47, 256 + store i64 %48, ptr %46, align 8, !tbaa !97 ret i64 %0 } @@ -38351,30 +38340,23 @@ declare i32 @rb_id_table_delete(ptr noundef, i64 noundef) local_unnamed_addr #3 ; Function Attrs: nounwind sspstrong uwtable define internal fastcc noundef nonnull ptr @vm_ccs_create(i64 noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3) unnamed_addr #2 { - %5 = tail call noalias nonnull dereferenceable(24) ptr @ruby_xmalloc(i64 noundef 24) #65 - store i32 0, ptr %5, align 8, !tbaa !180 - %6 = getelementptr inbounds nuw i8, ptr %5, i64 4 - store i32 0, ptr %6, align 4, !tbaa !162 - %7 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %3, ptr %7, align 8, !tbaa !166 - %8 = load i64, ptr %3, align 8, !tbaa !167 - %9 = or i64 %8, 1048576 - store i64 %9, ptr %3, align 8, !tbaa !167 - %10 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store ptr null, ptr %10, align 8, !tbaa !170 - %11 = ptrtoint ptr %5 to i64 - %12 = tail call i32 @rb_id_table_insert(ptr noundef %1, i64 noundef %2, i64 noundef %11) #20 - %13 = ptrtoint ptr %3 to i64 - %14 = and i64 %13, 7 - %.not = icmp eq i64 %14, 0 - br i1 %.not, label %15, label %rb_obj_written.exit - -15: ; preds = %4 - tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %13) #20 - br label %rb_obj_written.exit - -rb_obj_written.exit: ; preds = %4, %15 - ret ptr %5 +rb_obj_written.exit: + %4 = tail call noalias nonnull dereferenceable(24) ptr @ruby_xmalloc(i64 noundef 24) #65 + store i32 0, ptr %4, align 8, !tbaa !180 + %5 = getelementptr inbounds nuw i8, ptr %4, i64 4 + store i32 0, ptr %5, align 4, !tbaa !162 + %6 = getelementptr inbounds nuw i8, ptr %4, i64 8 + store ptr %3, ptr %6, align 8, !tbaa !166 + %7 = load i64, ptr %3, align 8, !tbaa !167 + %8 = or i64 %7, 1048576 + store i64 %8, ptr %3, align 8, !tbaa !167 + %9 = getelementptr inbounds nuw i8, ptr %4, i64 16 + store ptr null, ptr %9, align 8, !tbaa !170 + %10 = ptrtoint ptr %4 to i64 + %11 = tail call i32 @rb_id_table_insert(ptr noundef %1, i64 noundef %2, i64 noundef %10) #20 + %12 = ptrtoint ptr %3 to i64 + tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %12) #20 + ret ptr %4 } ; Function Attrs: allocsize(0,1) @@ -60608,7 +60590,7 @@ rb_obj_write.exit67: ; preds = %.thread69, %.thread %.val = phi i64 [ %.val.pre, %.loopexit70.loopexit ], [ %30, %RARRAY_LENINT.exit ], [ %30, %rb_obj_write.exit ] %100 = and i64 %.val, 2 %.not58 = icmp eq i64 %100, 0 - br i1 %.not58, label %101, label %121 + br i1 %.not58, label %101, label %118 101: ; preds = %.loopexit70 %102 = getelementptr inbounds nuw i8, ptr %4, i64 16 @@ -60624,29 +60606,26 @@ rb_obj_write.exit67: ; preds = %.thread69, %.thread %111 = or i64 %110, 1 %112 = getelementptr i8, ptr %12, i64 -8 store i64 %111, ptr %112, align 8, !tbaa !7 - %113 = ptrtoint ptr %107 to i64 - %114 = icmp eq ptr %107, null - %115 = and i64 %113, 7 - %116 = icmp ne i64 %115, 0 - %117 = or i1 %114, %116 - br i1 %117, label %rb_obj_written.exit, label %118 - -118: ; preds = %101 - tail call void @rb_gc_writebarrier(i64 noundef %16, i64 noundef %113) #20 + %113 = icmp eq ptr %107, null + br i1 %113, label %rb_obj_written.exit, label %114 + +114: ; preds = %101 + %115 = ptrtoint ptr %107 to i64 + tail call void @rb_gc_writebarrier(i64 noundef %16, i64 noundef %115) #20 br label %rb_obj_written.exit -rb_obj_written.exit: ; preds = %101, %118 - %119 = load i64, ptr %12, align 8, !tbaa !7 - %120 = and i64 %119, -3 - store i64 %120, ptr %12, align 8, !tbaa !7 - br label %123 +rb_obj_written.exit: ; preds = %101, %114 + %116 = load i64, ptr %12, align 8, !tbaa !7 + %117 = and i64 %116, -3 + store i64 %117, ptr %12, align 8, !tbaa !7 + br label %120 -121: ; preds = %.loopexit70 - %122 = getelementptr i8, ptr %12, i64 -8 - store i64 0, ptr %122, align 8, !tbaa !7 - br label %123 +118: ; preds = %.loopexit70 + %119 = getelementptr i8, ptr %12, i64 -8 + store i64 0, ptr %119, align 8, !tbaa !7 + br label %120 -123: ; preds = %121, %rb_obj_written.exit +120: ; preds = %118, %rb_obj_written.exit ret ptr %17 } diff --git a/bench/wolfssl/optimized/sha.ll b/bench/wolfssl/optimized/sha.ll index 056d8a631ea..a93dd973258 100644 --- a/bench/wolfssl/optimized/sha.ll +++ b/bench/wolfssl/optimized/sha.ll @@ -1264,13 +1264,13 @@ define range(i32 -192, 1) i32 @wc_ShaFinal(ptr noundef %0, ptr noundef writeonly %3 = icmp eq ptr %0, null %4 = icmp eq ptr %1, null %or.cond = or i1 %3, %4 - br i1 %or.cond, label %62, label %5 + br i1 %or.cond, label %50, label %5 5: ; preds = %2 %6 = getelementptr inbounds nuw i8, ptr %0, i64 12 %7 = load i32, ptr %0, align 8, !tbaa !10 %8 = icmp ugt i32 %7, 63 - br i1 %8, label %62, label %9 + br i1 %8, label %50, label %9 9: ; preds = %5 %10 = add nuw nsw i32 %7, 1 @@ -1279,145 +1279,118 @@ define range(i32 -192, 1) i32 @wc_ShaFinal(ptr noundef %0, ptr noundef writeonly %12 = getelementptr inbounds nuw i8, ptr %6, i64 %11 store i8 -128, ptr %12, align 1, !tbaa !17 %13 = icmp samesign ugt i32 %7, 55 - br i1 %13, label %14, label %._crit_edge + br i1 %13, label %19, label %._crit_edge ._crit_edge: ; preds = %9 %.pre = ptrtoint ptr %6 to i64 %.pre78 = and i64 %.pre, 3 - br label %29 - -14: ; preds = %9 + %14 = icmp eq i64 %.pre78, 0 + %15 = zext nneg i32 %10 to i64 + %16 = getelementptr inbounds nuw i8, ptr %6, i64 %15 + %17 = sub nuw nsw i32 55, %7 + %18 = zext nneg i32 %17 to i64 + tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %16, i8 0, i64 %18, i1 false) + br i1 %14, label %.lr.ph26.i55.preheader, label %.lr.ph.i50 + +19: ; preds = %9 %.not = icmp eq i32 %7, 63 - br i1 %.not, label %20, label %15 + br i1 %.not, label %.lr.ph26.i.preheader, label %20 -15: ; preds = %14 - %16 = zext nneg i32 %10 to i64 - %17 = getelementptr inbounds nuw i8, ptr %6, i64 %16 - %18 = sub nuw nsw i32 63, %7 - %19 = zext nneg i32 %18 to i64 - tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %17, i8 0, i64 %19, i1 false) - br label %20 +20: ; preds = %19 + %21 = zext nneg i32 %10 to i64 + %22 = getelementptr inbounds nuw i8, ptr %6, i64 %21 + %23 = sub nuw nsw i32 63, %7 + %24 = zext nneg i32 %23 to i64 + tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %22, i8 0, i64 %24, i1 false) + br label %.lr.ph26.i.preheader -20: ; preds = %15, %14 +.lr.ph26.i.preheader: ; preds = %20, %19 store i32 64, ptr %0, align 8, !tbaa !10 - %21 = ptrtoint ptr %6 to i64 - %22 = and i64 %21, 3 - %or.cond.i = icmp eq i64 %22, 0 - br i1 %or.cond.i, label %.lr.ph26.i, label %.lr.ph.i - -.lr.ph26.i: ; preds = %20, %.lr.ph26.i - %indvars.iv30.i = phi i64 [ %indvars.iv.next31.i, %.lr.ph26.i ], [ 0, %20 ] - %23 = getelementptr inbounds nuw i32, ptr %6, i64 %indvars.iv30.i - %24 = load i32, ptr %23, align 4, !tbaa !9 - %25 = tail call noundef i32 @llvm.bswap.i32(i32 %24) - store i32 %25, ptr %23, align 4, !tbaa !9 + br label %.lr.ph26.i + +.lr.ph26.i: ; preds = %.lr.ph26.i.preheader, %.lr.ph26.i + %indvars.iv30.i = phi i64 [ %indvars.iv.next31.i, %.lr.ph26.i ], [ 0, %.lr.ph26.i.preheader ] + %25 = getelementptr inbounds nuw i32, ptr %6, i64 %indvars.iv30.i + %26 = load i32, ptr %25, align 4, !tbaa !9 + %27 = tail call noundef i32 @llvm.bswap.i32(i32 %26) + store i32 %27, ptr %25, align 4, !tbaa !9 %indvars.iv.next31.i = add nuw nsw i64 %indvars.iv30.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next31.i, 16 br i1 %exitcond.not.i, label %ByteReverseWords.exit, label %.lr.ph26.i, !llvm.loop !13 -.lr.ph.i: ; preds = %20, %.lr.ph.i - %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %.lr.ph.i ], [ 0, %20 ] - %26 = getelementptr inbounds nuw i8, ptr %6, i64 %indvars.iv.i - %.0.copyload.i = load i32, ptr %26, align 1 - %27 = tail call noundef i32 @llvm.bswap.i32(i32 %.0.copyload.i) - store i32 %27, ptr %26, align 1 - %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 4 - %28 = icmp samesign ult i64 %indvars.iv.i, 60 - br i1 %28, label %.lr.ph.i, label %ByteReverseWords.exit, !llvm.loop !15 - -ByteReverseWords.exit: ; preds = %.lr.ph.i, %.lr.ph26.i +ByteReverseWords.exit: ; preds = %.lr.ph26.i tail call fastcc void @Transform(ptr noundef %0, ptr noundef %6) store i32 0, ptr %0, align 8, !tbaa !10 - br label %29 - -29: ; preds = %._crit_edge, %ByteReverseWords.exit - %.pre-phi79 = phi i64 [ %.pre78, %._crit_edge ], [ %22, %ByteReverseWords.exit ] - %30 = phi i32 [ %10, %._crit_edge ], [ 0, %ByteReverseWords.exit ] - %31 = zext nneg i32 %30 to i64 - %32 = getelementptr inbounds nuw i8, ptr %6, i64 %31 - %33 = sub nuw nsw i32 56, %30 - %34 = zext nneg i32 %33 to i64 - tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %32, i8 0, i64 %34, i1 false) - %or.cond.i48 = icmp eq i64 %.pre-phi79, 0 - br i1 %or.cond.i48, label %.lr.ph26.i55, label %.lr.ph.i50 - -.lr.ph26.i55: ; preds = %29, %.lr.ph26.i55 - %indvars.iv30.i56 = phi i64 [ %indvars.iv.next31.i57, %.lr.ph26.i55 ], [ 0, %29 ] - %35 = getelementptr inbounds nuw i32, ptr %6, i64 %indvars.iv30.i56 - %36 = load i32, ptr %35, align 4, !tbaa !9 - %37 = tail call noundef i32 @llvm.bswap.i32(i32 %36) - store i32 %37, ptr %35, align 4, !tbaa !9 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(56) %6, i8 0, i64 56, i1 false) + br label %.lr.ph26.i55.preheader + +.lr.ph26.i55.preheader: ; preds = %ByteReverseWords.exit, %._crit_edge + br label %.lr.ph26.i55 + +.lr.ph26.i55: ; preds = %.lr.ph26.i55.preheader, %.lr.ph26.i55 + %indvars.iv30.i56 = phi i64 [ %indvars.iv.next31.i57, %.lr.ph26.i55 ], [ 0, %.lr.ph26.i55.preheader ] + %28 = getelementptr inbounds nuw i32, ptr %6, i64 %indvars.iv30.i56 + %29 = load i32, ptr %28, align 4, !tbaa !9 + %30 = tail call noundef i32 @llvm.bswap.i32(i32 %29) + store i32 %30, ptr %28, align 4, !tbaa !9 %indvars.iv.next31.i57 = add nuw nsw i64 %indvars.iv30.i56, 1 %exitcond.not.i58 = icmp eq i64 %indvars.iv.next31.i57, 16 br i1 %exitcond.not.i58, label %ByteReverseWords.exit59, label %.lr.ph26.i55, !llvm.loop !13 -.lr.ph.i50: ; preds = %29, %.lr.ph.i50 - %indvars.iv.i51 = phi i64 [ %indvars.iv.next.i53, %.lr.ph.i50 ], [ 0, %29 ] - %38 = getelementptr inbounds nuw i8, ptr %6, i64 %indvars.iv.i51 - %.0.copyload.i52 = load i32, ptr %38, align 1 - %39 = tail call noundef i32 @llvm.bswap.i32(i32 %.0.copyload.i52) - store i32 %39, ptr %38, align 1 +.lr.ph.i50: ; preds = %._crit_edge, %.lr.ph.i50 + %indvars.iv.i51 = phi i64 [ %indvars.iv.next.i53, %.lr.ph.i50 ], [ 0, %._crit_edge ] + %31 = getelementptr inbounds nuw i8, ptr %6, i64 %indvars.iv.i51 + %.0.copyload.i52 = load i32, ptr %31, align 1 + %32 = tail call noundef i32 @llvm.bswap.i32(i32 %.0.copyload.i52) + store i32 %32, ptr %31, align 1 %indvars.iv.next.i53 = add nuw nsw i64 %indvars.iv.i51, 4 - %40 = icmp samesign ult i64 %indvars.iv.i51, 60 - br i1 %40, label %.lr.ph.i50, label %ByteReverseWords.exit59, !llvm.loop !15 + %33 = icmp samesign ult i64 %indvars.iv.i51, 60 + br i1 %33, label %.lr.ph.i50, label %ByteReverseWords.exit59, !llvm.loop !15 ByteReverseWords.exit59: ; preds = %.lr.ph.i50, %.lr.ph26.i55 - %41 = getelementptr inbounds nuw i8, ptr %0, i64 4 - %42 = load i32, ptr %41, align 4, !tbaa !11 - %43 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %44 = load i32, ptr %43, align 8, !tbaa !12 - %45 = tail call i32 @llvm.fshl.i32(i32 %44, i32 %42, i32 3) - store i32 %45, ptr %43, align 8, !tbaa !12 - %46 = shl i32 %42, 3 - store i32 %46, ptr %41, align 4, !tbaa !11 - %47 = getelementptr inbounds nuw i8, ptr %0, i64 68 - store i32 %45, ptr %47, align 4 - %48 = getelementptr inbounds nuw i8, ptr %0, i64 72 - store i32 %46, ptr %48, align 8 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 4 + %35 = load i32, ptr %34, align 4, !tbaa !11 + %36 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %37 = load i32, ptr %36, align 8, !tbaa !12 + %38 = tail call i32 @llvm.fshl.i32(i32 %37, i32 %35, i32 3) + store i32 %38, ptr %36, align 8, !tbaa !12 + %39 = shl i32 %35, 3 + store i32 %39, ptr %34, align 4, !tbaa !11 + %40 = getelementptr inbounds nuw i8, ptr %0, i64 68 + store i32 %38, ptr %40, align 4 + %41 = getelementptr inbounds nuw i8, ptr %0, i64 72 + store i32 %39, ptr %41, align 8 tail call fastcc void @Transform(ptr noundef %0, ptr noundef %6) - %49 = getelementptr inbounds nuw i8, ptr %0, i64 76 - %50 = ptrtoint ptr %49 to i64 - %51 = and i64 %50, 3 - %or.cond.i60 = icmp eq i64 %51, 0 - br i1 %or.cond.i60, label %.lr.ph26.i67, label %.lr.ph.i62 + %42 = getelementptr inbounds nuw i8, ptr %0, i64 76 + br label %.lr.ph26.i67 .lr.ph26.i67: ; preds = %ByteReverseWords.exit59, %.lr.ph26.i67 %indvars.iv30.i68 = phi i64 [ %indvars.iv.next31.i69, %.lr.ph26.i67 ], [ 0, %ByteReverseWords.exit59 ] - %52 = getelementptr inbounds nuw i32, ptr %49, i64 %indvars.iv30.i68 - %53 = load i32, ptr %52, align 4, !tbaa !9 - %54 = tail call noundef i32 @llvm.bswap.i32(i32 %53) - store i32 %54, ptr %52, align 4, !tbaa !9 + %43 = getelementptr inbounds nuw i32, ptr %42, i64 %indvars.iv30.i68 + %44 = load i32, ptr %43, align 4, !tbaa !9 + %45 = tail call noundef i32 @llvm.bswap.i32(i32 %44) + store i32 %45, ptr %43, align 4, !tbaa !9 %indvars.iv.next31.i69 = add nuw nsw i64 %indvars.iv30.i68, 1 %exitcond.not.i70 = icmp eq i64 %indvars.iv.next31.i69, 5 br i1 %exitcond.not.i70, label %ByteReverseWords.exit71, label %.lr.ph26.i67, !llvm.loop !13 -.lr.ph.i62: ; preds = %ByteReverseWords.exit59, %.lr.ph.i62 - %indvars.iv.i63 = phi i64 [ %indvars.iv.next.i65, %.lr.ph.i62 ], [ 0, %ByteReverseWords.exit59 ] - %55 = getelementptr inbounds nuw i8, ptr %49, i64 %indvars.iv.i63 - %.0.copyload.i64 = load i32, ptr %55, align 1 - %56 = tail call noundef i32 @llvm.bswap.i32(i32 %.0.copyload.i64) - store i32 %56, ptr %55, align 1 - %indvars.iv.next.i65 = add nuw nsw i64 %indvars.iv.i63, 4 - %57 = icmp samesign ult i64 %indvars.iv.i63, 16 - br i1 %57, label %.lr.ph.i62, label %ByteReverseWords.exit71, !llvm.loop !15 - -ByteReverseWords.exit71: ; preds = %.lr.ph.i62, %.lr.ph26.i67 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %1, ptr noundef nonnull align 4 dereferenceable(20) %49, i64 20, i1 false) - store i32 1732584193, ptr %49, align 4, !tbaa !9 - %58 = getelementptr inbounds nuw i8, ptr %0, i64 80 - store i32 -271733879, ptr %58, align 4, !tbaa !9 - %59 = getelementptr inbounds nuw i8, ptr %0, i64 84 - store i32 -1732584194, ptr %59, align 4, !tbaa !9 - %60 = getelementptr inbounds nuw i8, ptr %0, i64 88 - store i32 271733878, ptr %60, align 4, !tbaa !9 - %61 = getelementptr inbounds nuw i8, ptr %0, i64 92 - store i32 -1009589776, ptr %61, align 4, !tbaa !9 +ByteReverseWords.exit71: ; preds = %.lr.ph26.i67 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %1, ptr noundef nonnull align 4 dereferenceable(20) %42, i64 20, i1 false) + store i32 1732584193, ptr %42, align 4, !tbaa !9 + %46 = getelementptr inbounds nuw i8, ptr %0, i64 80 + store i32 -271733879, ptr %46, align 4, !tbaa !9 + %47 = getelementptr inbounds nuw i8, ptr %0, i64 84 + store i32 -1732584194, ptr %47, align 4, !tbaa !9 + %48 = getelementptr inbounds nuw i8, ptr %0, i64 88 + store i32 271733878, ptr %48, align 4, !tbaa !9 + %49 = getelementptr inbounds nuw i8, ptr %0, i64 92 + store i32 -1009589776, ptr %49, align 4, !tbaa !9 store i32 0, ptr %0, align 8, !tbaa !10 - store i32 0, ptr %41, align 4, !tbaa !11 - store i32 0, ptr %43, align 8, !tbaa !12 - br label %62 + store i32 0, ptr %34, align 4, !tbaa !11 + store i32 0, ptr %36, align 8, !tbaa !12 + br label %50 -62: ; preds = %5, %2, %ByteReverseWords.exit71 +50: ; preds = %5, %2, %ByteReverseWords.exit71 %.0 = phi i32 [ 0, %ByteReverseWords.exit71 ], [ -173, %2 ], [ -192, %5 ] ret i32 %.0 } From 969900155fd77aa3798c7cd86a2ca7df3c669e8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 4 Dec 2025 11:45:19 +0000 Subject: [PATCH 3/3] pre-commit: Remap --- bench/abc/optimized/cuddZddLin.ll | 762 +++++++++--------- bench/lean4/optimized/AndFlatten.ll | 62 +- bench/lean4/optimized/Assumption.ll | 8 +- bench/lean4/optimized/Attach.ll | 76 +- bench/lean4/optimized/AutoBound.ll | 118 +-- bench/lean4/optimized/AuxDeclCache.ll | 124 +-- bench/lean4/optimized/AuxLemma.ll | 158 ++-- bench/lean4/optimized/ByteArray.ll | 82 +- bench/lean4/optimized/CSE.ll | 154 ++-- bench/lean4/optimized/CaseValues.ll | 88 +- bench/lean4/optimized/CheckTactic.ll | 188 ++--- bench/lean4/optimized/Client.ll | 48 +- bench/lean4/optimized/CollectAxioms.ll | 60 +- bench/lean4/optimized/CollectFVars.ll | 68 +- bench/lean4/optimized/ConstFolding.ll | 100 +-- bench/lean4/optimized/Database.ll | 124 +-- bench/lean4/optimized/Delta.ll | 24 +- bench/lean4/optimized/EligibleHeaderDecls.ll | 124 +-- bench/lean4/optimized/ElimDeadVars.ll | 88 +- bench/lean4/optimized/EmbeddedConstraint.ll | 190 ++--- bench/lean4/optimized/Encode.ll | 132 +-- bench/lean4/optimized/ExportAttr.ll | 80 +- bench/lean4/optimized/External.ll | 30 +- bench/lean4/optimized/FVarSubset.ll | 50 +- bench/lean4/optimized/FVarSubst.ll | 70 +- bench/lean4/optimized/FilePath.ll | 18 +- bench/lean4/optimized/FindLevelMVar.ll | 120 +-- bench/lean4/optimized/ForEachExprWhere.ll | 42 +- bench/lean4/optimized/GeneralizeTelescope.ll | 66 +- bench/lean4/optimized/HasConstCache.ll | 194 ++--- bench/lean4/optimized/IndGroupInfo.ll | 110 +-- bench/lean4/optimized/InitShutdown.ll | 60 +- bench/lean4/optimized/InlineCandidate.ll | 16 +- bench/lean4/optimized/InputFileConfig.ll | 168 ++-- bench/lean4/optimized/InternalExceptionId.ll | 178 ++-- bench/lean4/optimized/Links.ll | 176 ++-- bench/lean4/optimized/MVarRenaming.ll | 8 +- bench/lean4/optimized/PlainDateTime.ll | 40 +- bench/lean4/optimized/Position.ll | 22 +- bench/lean4/optimized/PrettyPrinter.ll | 104 +-- bench/lean4/optimized/Propagate.ll | 126 +-- bench/lean4/optimized/ReplaceLevel.ll | 36 +- bench/lean4/optimized/RequestCancellation.ll | 32 +- bench/lean4/optimized/Simp.ll | 84 +- bench/lean4/optimized/TZdb.ll | 120 +-- bench/lean4/optimized/Topological.ll | 68 +- bench/lean4/optimized/TypeName.ll | 132 +-- bench/lean4/optimized/WorkspaceConfig.ll | 114 +-- bench/lean4/optimized/expr.ll | 68 +- bench/lean4/optimized/inductive.ll | 128 +-- bench/lean4/optimized/lcnf.ll | 48 +- bench/lean4/optimized/local_ctx.ll | 32 +- bench/lean4/optimized/sharecommon.ll | 210 ++--- bench/lean4/optimized/tcp.ll | 160 ++-- bench/libigl/optimized/unproject.ll | 6 +- .../optimized/vertex_triangle_adjacency.ll | 568 ++++++------- bench/linux/optimized/af_netlink.ll | 126 +-- bench/linux/optimized/ioam6.ll | 92 +-- bench/linux/optimized/request.ll | 228 +++--- bench/linux/optimized/sta_info.ll | 96 +-- bench/linux/optimized/util.ll | 104 +-- bench/llvm/optimized/Z3CrosscheckVisitor.ll | 40 +- .../optimized/filter_parametrization.ll | 338 ++++---- bench/openjdk/optimized/methodData.ll | 62 +- .../openjdk/optimized/screencast_pipewire.ll | 352 ++++---- .../optimized/acx590v32pn6eo20biyujqd8g.ll | 352 ++++---- bench/postgres/optimized/jsonfuncs.ll | 390 ++++----- bench/ruby/optimized/compile.ll | 628 +++++++-------- bench/ruby/optimized/vm.ll | 84 +- bench/wolfssl/optimized/sha.ll | 90 +-- 70 files changed, 4622 insertions(+), 4622 deletions(-) diff --git a/bench/abc/optimized/cuddZddLin.ll b/bench/abc/optimized/cuddZddLin.ll index 26f8c067f2a..a2c0642925a 100644 --- a/bench/abc/optimized/cuddZddLin.ll +++ b/bench/abc/optimized/cuddZddLin.ll @@ -1064,22 +1064,22 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, br i1 %.not, label %.preheader355, label %.lr.ph385, !llvm.loop !71 .preheader: ; preds = %.loopexit465, %.preheader355 - %.0325.lcssa = phi i32 [ 0, %.preheader355 ], [ %254, %.loopexit465 ] + %.0325.lcssa = phi i32 [ 0, %.preheader355 ], [ %261, %.loopexit465 ] %.1321.lcssa = phi i32 [ %.0320.lcssa, %.preheader355 ], [ %.3323, %.loopexit465 ] br i1 %33, label %.lr.ph425, label %._crit_edge426 .lr.ph425: ; preds = %.preheader - %101 = getelementptr inbounds nuw i8, ptr %0, i64 400 + %108 = getelementptr inbounds nuw i8, ptr %0, i64 400 %wide.trip.count443 = zext nneg i32 %29 to i64 - br label %258 + br label %265 .lr.ph403: ; preds = %.preheader355, %.loopexit465 - %.3316402 = phi ptr [ %103, %.loopexit465 ], [ %.0299.lcssa, %.preheader355 ] + %.3316402 = phi ptr [ %110, %.loopexit465 ], [ %.0299.lcssa, %.preheader355 ] %.1321401 = phi i32 [ %.3323, %.loopexit465 ], [ %.0320.lcssa, %.preheader355 ] - %.0325400 = phi i32 [ %254, %.loopexit465 ], [ 0, %.preheader355 ] - %102 = getelementptr inbounds nuw i8, ptr %.3316402, i64 8 - %103 = load ptr, ptr %102, align 8, !tbaa !48 - %104 = getelementptr inbounds nuw i8, ptr %.3316402, i64 16 + %.0325400 = phi i32 [ %261, %.loopexit465 ], [ 0, %.preheader355 ] + %109 = getelementptr inbounds nuw i8, ptr %.3316402, i64 8 + %110 = load ptr, ptr %109, align 8, !tbaa !48 + %111 = getelementptr inbounds nuw i8, ptr %.3316402, i64 16 %105 = load ptr, ptr %104, align 8, !tbaa !64 %106 = load i32, ptr %105, align 8, !tbaa !65 %107 = icmp eq i32 %106, %23 @@ -1093,11 +1093,11 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, %112 = load ptr, ptr %111, align 8, !tbaa !64 br label %113 -113: ; preds = %.lr.ph403, %109 +113:; preds = %.lr.ph403, %109 %.0312.in = phi ptr [ %110, %109 ], [ @empty, %.lr.ph403 ] %.0311 = phi ptr [ %112, %109 ], [ %105, %.lr.ph403 ] %.0312 = load ptr, ptr %.0312.in, align 8, !tbaa !64 - %114 = getelementptr inbounds nuw i8, ptr %.3316402, i64 24 + %121 = getelementptr inbounds nuw i8, ptr %.3316402, i64 24 %115 = load ptr, ptr %114, align 8, !tbaa !64 %116 = load i32, ptr %115, align 8, !tbaa !65 %117 = icmp eq i32 %116, %23 @@ -1111,297 +1111,297 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, %122 = load ptr, ptr %121, align 8, !tbaa !64 br label %123 -123: ; preds = %113, %119 +123:; preds = %113, %119 %.0310.in = phi ptr [ %120, %119 ], [ @empty, %113 ] %.0309 = phi ptr [ %122, %119 ], [ %115, %113 ] %.0310 = load ptr, ptr %.0310.in, align 8, !tbaa !64 - %124 = load ptr, ptr @empty, align 8, !tbaa !25 - %125 = icmp eq ptr %.0310, %124 - br i1 %125, label %.loopexit466, label %126 - -126: ; preds = %123 - %127 = ptrtoint ptr %.0310 to i64 - %128 = and i64 %127, -2 - %129 = inttoptr i64 %128 to ptr - %130 = getelementptr inbounds nuw i8, ptr %129, i64 32 - %131 = load i64, ptr %130, align 8, !tbaa !70 - %132 = shl i64 %131, 1 - %133 = and i64 %127, 1 - %134 = or disjoint i64 %132, %133 - %135 = trunc i64 %134 to i32 - %136 = mul i32 %135, 12582917 - %137 = ptrtoint ptr %.0311 to i64 - %138 = and i64 %137, -2 - %139 = inttoptr i64 %138 to ptr - %140 = getelementptr inbounds nuw i8, ptr %139, i64 32 - %141 = load i64, ptr %140, align 8, !tbaa !70 - %142 = shl i64 %141, 1 - %143 = and i64 %137, 1 - %144 = or disjoint i64 %142, %143 - %145 = trunc i64 %144 to i32 - %146 = add i32 %136, %145 - %147 = mul i32 %146, 4256249 - %148 = lshr i32 %147, %31 - %149 = sext i32 %148 to i64 - %150 = getelementptr inbounds ptr, ptr %25, i64 %149 - %.1306387 = load ptr, ptr %150, align 8, !tbaa !25 + %131 = load ptr, ptr @empty, align 8, !tbaa !25 + %132 = icmp eq ptr %.0310, %131 + br i1 %132, label %.loopexit466, label %133 + +133: ; preds = %123 + %134 = ptrtoint ptr %.0310 to i64 + %135 = and i64 %134, -2 + %136 = inttoptr i64 %135 to ptr + %137 = getelementptr inbounds nuw i8, ptr %136, i64 32 + %138 = load i64, ptr %137, align 8, !tbaa !70 + %139 = shl i64 %138, 1 + %140 = and i64 %134, 1 + %141 = or disjoint i64 %139, %140 + %142 = trunc i64 %141 to i32 + %143 = mul i32 %142, 12582917 + %144 = ptrtoint ptr %.0311 to i64 + %145 = and i64 %144, -2 + %146 = inttoptr i64 %145 to ptr + %147 = getelementptr inbounds nuw i8, ptr %146, i64 32 + %148 = load i64, ptr %147, align 8, !tbaa !70 + %149 = shl i64 %148, 1 + %150 = and i64 %144, 1 + %151 = or disjoint i64 %149, %150 + %152 = trunc i64 %151 to i32 + %153 = add i32 %143, %152 + %154 = mul i32 %153, 4256249 + %155 = lshr i32 %154, %31 + %156 = sext i32 %155 to i64 + %157 = getelementptr inbounds ptr, ptr %25, i64 %156 + %.1306387 = load ptr, ptr %157, align 8, !tbaa !25 %cond388 = icmp eq ptr %.1306387, null br i1 %cond388, label %._crit_edge392, label %.lr.ph391 -.lr.ph391: ; preds = %126, %161 +.lr.ph391: ; preds = %133, %168 %.1306389 = phi ptr [ %.1306, %161 ], [ %.1306387, %126 ] - %151 = getelementptr inbounds nuw i8, ptr %.1306389, i64 16 - %152 = load ptr, ptr %151, align 8, !tbaa !64 - %153 = icmp eq ptr %152, %.0310 - br i1 %153, label %154, label %161 - -154: ; preds = %.lr.ph391 - %155 = getelementptr inbounds nuw i8, ptr %.1306389, i64 24 - %156 = load ptr, ptr %155, align 8, !tbaa !64 - %157 = icmp eq ptr %156, %.0311 - br i1 %157, label %158, label %161 - -158: ; preds = %154 - %159 = load i32, ptr %.1306389, align 8, !tbaa !65 - %160 = icmp eq i32 %159, %23 - br i1 %160, label %.loopexit466, label %161 - -161: ; preds = %158, %154, %.lr.ph391 - %162 = getelementptr inbounds nuw i8, ptr %.1306389, i64 8 - %.1306 = load ptr, ptr %162, align 8, !tbaa !25 + %158 = getelementptr inbounds nuw i8, ptr %.1306389, i64 16 + %159 = load ptr, ptr %158, align 8, !tbaa !64 + %160 = icmp eq ptr %159, %.0310 + br i1 %160, label %161, label %168 + +161: ; preds = %.lr.ph391 + %162 = getelementptr inbounds nuw i8, ptr %.1306389, i64 24 + %163 = load ptr, ptr %162, align 8, !tbaa !64 + %164 = icmp eq ptr %163, %.0311 + br i1 %164, label %165, label %168 + +165: ; preds = %161 + %166 = load i32, ptr %.1306389, align 8, !tbaa !65 + %167 = icmp eq i32 %166, %23 + br i1 %167, label %.loopexit466, label %168 + +168: ; preds = %165, %161, %.lr.ph391 + %169 = getelementptr inbounds nuw i8, ptr %.1306389, i64 8 + %.1306 = load ptr, ptr %169, align 8, !tbaa !25 %cond = icmp eq ptr %.1306, null br i1 %cond, label %._crit_edge392, label %.lr.ph391, !llvm.loop !72 -._crit_edge392: ; preds = %161, %126 - %163 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 - %164 = icmp eq ptr %163, null - br i1 %164, label %.loopexit, label %165 - -165: ; preds = %._crit_edge392 - store i32 %23, ptr %163, align 8, !tbaa !65 - %166 = getelementptr inbounds nuw i8, ptr %163, i64 4 - store i32 1, ptr %166, align 4, !tbaa !47 - %167 = getelementptr inbounds nuw i8, ptr %163, i64 16 - store ptr %.0310, ptr %167, align 8, !tbaa !64 - %168 = getelementptr inbounds nuw i8, ptr %163, i64 24 - store ptr %.0311, ptr %168, align 8, !tbaa !64 - %169 = add nsw i32 %.1321401, 1 - %170 = load ptr, ptr %150, align 8, !tbaa !25 - %171 = getelementptr inbounds nuw i8, ptr %163, i64 8 - store ptr %170, ptr %171, align 8, !tbaa !48 - store ptr %163, ptr %150, align 8, !tbaa !25 - %172 = getelementptr inbounds nuw i8, ptr %.0310, i64 4 - %173 = load i32, ptr %172, align 4, !tbaa !47 - %174 = add i32 %173, 1 - store i32 %174, ptr %172, align 4, !tbaa !47 +._crit_edge392: ; preds = %168, %133 + %170 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 + %171 = icmp eq ptr %170, null + br i1 %171, label %.loopexit, label %172 + +172: ; preds = %._crit_edge392 + store i32 %23, ptr %170, align 8, !tbaa !65 + %173 = getelementptr inbounds nuw i8, ptr %170, i64 4 + store i32 1, ptr %173, align 4, !tbaa !47 + %174 = getelementptr inbounds nuw i8, ptr %170, i64 16 + store ptr %.0310, ptr %174, align 8, !tbaa !64 + %175 = getelementptr inbounds nuw i8, ptr %170, i64 24 + store ptr %.0311, ptr %175, align 8, !tbaa !64 + %176 = add nsw i32 %.1321401, 1 + %177 = load ptr, ptr %157, align 8, !tbaa !25 + %178 = getelementptr inbounds nuw i8, ptr %170, i64 8 + store ptr %177, ptr %178, align 8, !tbaa !48 + store ptr %170, ptr %157, align 8, !tbaa !25 + %179 = getelementptr inbounds nuw i8, ptr %.0310, i64 4 + %180 = load i32, ptr %179, align 4, !tbaa !47 + %181 = add i32 %180, 1 + store i32 %181, ptr %179, align 4, !tbaa !47 br label %.loopexit466 -.loopexit466: ; preds = %158, %123, %165 +.loopexit466: ; preds = %165, %123, %172 %.1306389.lcssa.sink = phi ptr [ %.0311, %165 ], [ %.0311, %123 ], [ %.1306389, %158 ] - %.2322 = phi i32 [ %169, %165 ], [ %.1321401, %123 ], [ %.1321401, %158 ] - %.0305 = phi ptr [ %163, %165 ], [ %.0311, %123 ], [ %.1306389, %158 ] - %175 = getelementptr inbounds nuw i8, ptr %.1306389.lcssa.sink, i64 4 - %176 = load i32, ptr %175, align 4, !tbaa !47 - %177 = add i32 %176, 1 - store i32 %177, ptr %175, align 4, !tbaa !47 - store ptr %.0305, ptr %104, align 8, !tbaa !64 - %178 = load ptr, ptr @empty, align 8, !tbaa !25 - %179 = icmp eq ptr %.0312, %178 - br i1 %179, label %.loopexit465, label %180 - -180: ; preds = %.loopexit466 - %181 = ptrtoint ptr %.0312 to i64 - %182 = and i64 %181, -2 - %183 = inttoptr i64 %182 to ptr - %184 = getelementptr inbounds nuw i8, ptr %183, i64 32 - %185 = load i64, ptr %184, align 8, !tbaa !70 - %186 = shl i64 %185, 1 - %187 = and i64 %181, 1 - %188 = or disjoint i64 %186, %187 - %189 = trunc i64 %188 to i32 - %190 = mul i32 %189, 12582917 - %191 = ptrtoint ptr %.0309 to i64 - %192 = and i64 %191, -2 - %193 = inttoptr i64 %192 to ptr - %194 = getelementptr inbounds nuw i8, ptr %193, i64 32 - %195 = load i64, ptr %194, align 8, !tbaa !70 - %196 = shl i64 %195, 1 - %197 = and i64 %191, 1 - %198 = or disjoint i64 %196, %197 - %199 = trunc i64 %198 to i32 - %200 = add i32 %190, %199 - %201 = mul i32 %200, 4256249 - %202 = lshr i32 %201, %31 - %203 = sext i32 %202 to i64 - %204 = getelementptr inbounds ptr, ptr %25, i64 %203 - %.1304393 = load ptr, ptr %204, align 8, !tbaa !25 + %.2322 = phi i32 [ %176, %165 ], [ %.1321401, %123 ], [ %.1321401, %158 ] + %.0305 = phi ptr [ %170, %165 ], [ %.0311, %123 ], [ %.1306389, %158 ] + %182 = getelementptr inbounds nuw i8, ptr %.1306389.lcssa.sink, i64 4 + %183 = load i32, ptr %182, align 4, !tbaa !47 + %184 = add i32 %183, 1 + store i32 %184, ptr %182, align 4, !tbaa !47 + store ptr %.0305, ptr %111, align 8, !tbaa !64 + %185 = load ptr, ptr @empty, align 8, !tbaa !25 + %186 = icmp eq ptr %.0312, %185 + br i1 %186, label %.loopexit465, label %187 + +187: ; preds = %.loopexit466 + %188 = ptrtoint ptr %.0312 to i64 + %189 = and i64 %188, -2 + %190 = inttoptr i64 %189 to ptr + %191 = getelementptr inbounds nuw i8, ptr %190, i64 32 + %192 = load i64, ptr %191, align 8, !tbaa !70 + %193 = shl i64 %192, 1 + %194 = and i64 %188, 1 + %195 = or disjoint i64 %193, %194 + %196 = trunc i64 %195 to i32 + %197 = mul i32 %196, 12582917 + %198 = ptrtoint ptr %.0309 to i64 + %199 = and i64 %198, -2 + %200 = inttoptr i64 %199 to ptr + %201 = getelementptr inbounds nuw i8, ptr %200, i64 32 + %202 = load i64, ptr %201, align 8, !tbaa !70 + %203 = shl i64 %202, 1 + %204 = and i64 %198, 1 + %205 = or disjoint i64 %203, %204 + %206 = trunc i64 %205 to i32 + %207 = add i32 %197, %206 + %208 = mul i32 %207, 4256249 + %209 = lshr i32 %208, %31 + %210 = sext i32 %209 to i64 + %211 = getelementptr inbounds ptr, ptr %25, i64 %210 + %.1304393 = load ptr, ptr %211, align 8, !tbaa !25 %cond351394 = icmp eq ptr %.1304393, null br i1 %cond351394, label %._crit_edge398, label %.lr.ph397 -.lr.ph397: ; preds = %180, %215 +.lr.ph397: ; preds = %187, %222 %.1304395 = phi ptr [ %.1304, %215 ], [ %.1304393, %180 ] - %205 = getelementptr inbounds nuw i8, ptr %.1304395, i64 16 - %206 = load ptr, ptr %205, align 8, !tbaa !64 - %207 = icmp eq ptr %206, %.0312 - br i1 %207, label %208, label %215 - -208: ; preds = %.lr.ph397 - %209 = getelementptr inbounds nuw i8, ptr %.1304395, i64 24 - %210 = load ptr, ptr %209, align 8, !tbaa !64 - %211 = icmp eq ptr %210, %.0309 - br i1 %211, label %212, label %215 - -212: ; preds = %208 - %213 = load i32, ptr %.1304395, align 8, !tbaa !65 - %214 = icmp eq i32 %213, %23 - br i1 %214, label %.loopexit465, label %215 - -215: ; preds = %212, %208, %.lr.ph397 - %216 = getelementptr inbounds nuw i8, ptr %.1304395, i64 8 - %.1304 = load ptr, ptr %216, align 8, !tbaa !25 + %212 = getelementptr inbounds nuw i8, ptr %.1304395, i64 16 + %213 = load ptr, ptr %212, align 8, !tbaa !64 + %214 = icmp eq ptr %213, %.0312 + br i1 %214, label %215, label %222 + +215: ; preds = %.lr.ph397 + %216 = getelementptr inbounds nuw i8, ptr %.1304395, i64 24 + %217 = load ptr, ptr %216, align 8, !tbaa !64 + %218 = icmp eq ptr %217, %.0309 + br i1 %218, label %219, label %222 + +219: ; preds = %215 + %220 = load i32, ptr %.1304395, align 8, !tbaa !65 + %221 = icmp eq i32 %220, %23 + br i1 %221, label %.loopexit465, label %222 + +222: ; preds = %219, %215, %.lr.ph397 + %223 = getelementptr inbounds nuw i8, ptr %.1304395, i64 8 + %.1304 = load ptr, ptr %223, align 8, !tbaa !25 %cond351 = icmp eq ptr %.1304, null br i1 %cond351, label %._crit_edge398, label %.lr.ph397, !llvm.loop !73 -._crit_edge398: ; preds = %215, %180 - %217 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 - %218 = icmp eq ptr %217, null - br i1 %218, label %.loopexit, label %219 - -219: ; preds = %._crit_edge398 - store i32 %23, ptr %217, align 8, !tbaa !65 - %220 = getelementptr inbounds nuw i8, ptr %217, i64 4 - store i32 1, ptr %220, align 4, !tbaa !47 - %221 = getelementptr inbounds nuw i8, ptr %217, i64 16 - store ptr %.0312, ptr %221, align 8, !tbaa !64 - %222 = getelementptr inbounds nuw i8, ptr %217, i64 24 - store ptr %.0309, ptr %222, align 8, !tbaa !64 - %223 = add nsw i32 %.2322, 1 - %224 = load ptr, ptr %204, align 8, !tbaa !25 - %225 = getelementptr inbounds nuw i8, ptr %217, i64 8 - store ptr %224, ptr %225, align 8, !tbaa !48 - store ptr %217, ptr %204, align 8, !tbaa !25 - %226 = getelementptr inbounds nuw i8, ptr %.0312, i64 4 - %227 = load i32, ptr %226, align 4, !tbaa !47 - %228 = add i32 %227, 1 - store i32 %228, ptr %226, align 4, !tbaa !47 +._crit_edge398: ; preds = %222, %187 + %224 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 + %225 = icmp eq ptr %224, null + br i1 %225, label %.loopexit, label %226 + +226: ; preds = %._crit_edge398 + store i32 %23, ptr %224, align 8, !tbaa !65 + %227 = getelementptr inbounds nuw i8, ptr %224, i64 4 + store i32 1, ptr %227, align 4, !tbaa !47 + %228 = getelementptr inbounds nuw i8, ptr %224, i64 16 + store ptr %.0312, ptr %228, align 8, !tbaa !64 + %229 = getelementptr inbounds nuw i8, ptr %224, i64 24 + store ptr %.0309, ptr %229, align 8, !tbaa !64 + %230 = add nsw i32 %.2322, 1 + %231 = load ptr, ptr %211, align 8, !tbaa !25 + %232 = getelementptr inbounds nuw i8, ptr %224, i64 8 + store ptr %231, ptr %232, align 8, !tbaa !48 + store ptr %224, ptr %211, align 8, !tbaa !25 + %233 = getelementptr inbounds nuw i8, ptr %.0312, i64 4 + %234 = load i32, ptr %233, align 4, !tbaa !47 + %235 = add i32 %234, 1 + store i32 %235, ptr %233, align 4, !tbaa !47 br label %.loopexit465 -.loopexit465: ; preds = %212, %.loopexit466, %219 +.loopexit465: ; preds = %219, %.loopexit466, %226 %.1304395.lcssa.sink = phi ptr [ %.0309, %219 ], [ %.0309, %.loopexit466 ], [ %.1304395, %212 ] - %.3323 = phi i32 [ %223, %219 ], [ %.2322, %.loopexit466 ], [ %.2322, %212 ] - %.0303 = phi ptr [ %217, %219 ], [ %.0309, %.loopexit466 ], [ %.1304395, %212 ] - %229 = getelementptr inbounds nuw i8, ptr %.1304395.lcssa.sink, i64 4 - %230 = load i32, ptr %229, align 4, !tbaa !47 - %231 = add i32 %230, 1 - store i32 %231, ptr %229, align 4, !tbaa !47 - store ptr %.0303, ptr %114, align 8, !tbaa !64 - %232 = ptrtoint ptr %.0305 to i64 - %233 = and i64 %232, -2 - %234 = inttoptr i64 %233 to ptr - %235 = getelementptr inbounds nuw i8, ptr %234, i64 32 - %236 = load i64, ptr %235, align 8, !tbaa !70 - %237 = shl i64 %236, 1 - %238 = and i64 %232, 1 - %239 = or disjoint i64 %237, %238 - %240 = trunc i64 %239 to i32 - %241 = mul i32 %240, 12582917 - %242 = ptrtoint ptr %.0303 to i64 - %243 = and i64 %242, -2 - %244 = inttoptr i64 %243 to ptr - %245 = getelementptr inbounds nuw i8, ptr %244, i64 32 - %246 = load i64, ptr %245, align 8, !tbaa !70 - %247 = shl i64 %246, 1 - %248 = and i64 %242, 1 - %249 = or disjoint i64 %247, %248 - %250 = trunc i64 %249 to i32 - %251 = add i32 %241, %250 - %252 = mul i32 %251, 4256249 - %253 = lshr i32 %252, %20 - %254 = add nuw nsw i32 %.0325400, 1 - %255 = sext i32 %253 to i64 - %256 = getelementptr inbounds ptr, ptr %14, i64 %255 - %257 = load ptr, ptr %256, align 8, !tbaa !25 - store ptr %257, ptr %102, align 8, !tbaa !48 - store ptr %.3316402, ptr %256, align 8, !tbaa !25 - %.not338 = icmp eq ptr %103, null + %.3323 = phi i32 [ %230, %219 ], [ %.2322, %.loopexit466 ], [ %.2322, %212 ] + %.0303 = phi ptr [ %224, %219 ], [ %.0309, %.loopexit466 ], [ %.1304395, %212 ] + %236 = getelementptr inbounds nuw i8, ptr %.1304395.lcssa.sink, i64 4 + %237 = load i32, ptr %236, align 4, !tbaa !47 + %238 = add i32 %237, 1 + store i32 %238, ptr %236, align 4, !tbaa !47 + store ptr %.0303, ptr %121, align 8, !tbaa !64 + %239 = ptrtoint ptr %.0305 to i64 + %240 = and i64 %239, -2 + %241 = inttoptr i64 %240 to ptr + %242 = getelementptr inbounds nuw i8, ptr %241, i64 32 + %243 = load i64, ptr %242, align 8, !tbaa !70 + %244 = shl i64 %243, 1 + %245 = and i64 %239, 1 + %246 = or disjoint i64 %244, %245 + %247 = trunc i64 %246 to i32 + %248 = mul i32 %247, 12582917 + %249 = ptrtoint ptr %.0303 to i64 + %250 = and i64 %249, -2 + %251 = inttoptr i64 %250 to ptr + %252 = getelementptr inbounds nuw i8, ptr %251, i64 32 + %253 = load i64, ptr %252, align 8, !tbaa !70 + %254 = shl i64 %253, 1 + %255 = and i64 %249, 1 + %256 = or disjoint i64 %254, %255 + %257 = trunc i64 %256 to i32 + %258 = add i32 %248, %257 + %259 = mul i32 %258, 4256249 + %260 = lshr i32 %259, %20 + %261 = add nuw nsw i32 %.0325400, 1 + %262 = sext i32 %260 to i64 + %263 = getelementptr inbounds ptr, ptr %14, i64 %262 + %264 = load ptr, ptr %263, align 8, !tbaa !25 + store ptr %264, ptr %109, align 8, !tbaa !48 + store ptr %.3316402, ptr %263, align 8, !tbaa !25 + %.not338 = icmp eq ptr %110, null br i1 %.not338, label %.preheader, label %.lr.ph403, !llvm.loop !74 -258: ; preds = %.lr.ph425, %._crit_edge419 +265: ; preds = %.lr.ph425, %._crit_edge419 %indvars.iv440 = phi i64 [ 0, %.lr.ph425 ], [ %indvars.iv.next441, %._crit_edge419 ] %.4324423 = phi i32 [ %.1321.lcssa, %.lr.ph425 ], [ %.5.lcssa, %._crit_edge419 ] %.1326422 = phi i32 [ %.0325.lcssa, %.lr.ph425 ], [ %.2327.lcssa, %._crit_edge419 ] - %259 = getelementptr inbounds nuw ptr, ptr %25, i64 %indvars.iv440 - %260 = load ptr, ptr %259, align 8, !tbaa !25 - %.not339412 = icmp eq ptr %260, null + %266 = getelementptr inbounds nuw ptr, ptr %25, i64 %indvars.iv440 + %267 = load ptr, ptr %266, align 8, !tbaa !25 + %.not339412 = icmp eq ptr %267, null br i1 %.not339412, label %._crit_edge419, label %.lr.ph418 -.lr.ph418: ; preds = %258, %381 +.lr.ph418: ; preds = %265, %392 %.0295416 = phi ptr [ %.1296, %381 ], [ null, %258 ] - %.4415 = phi ptr [ %262, %381 ], [ %260, %258 ] + %.4415 = phi ptr [ %269, %381 ], [ %267, %258 ] %.5414 = phi i32 [ %.6, %381 ], [ %.4324423, %258 ] %.2327413 = phi i32 [ %.3328, %381 ], [ %.1326422, %258 ] - %261 = getelementptr inbounds nuw i8, ptr %.4415, i64 8 - %262 = load ptr, ptr %261, align 8, !tbaa !48 - %263 = getelementptr inbounds nuw i8, ptr %.4415, i64 4 - %264 = load i32, ptr %263, align 4, !tbaa !47 - %265 = icmp eq i32 %264, 0 - br i1 %265, label %266, label %283 - -266: ; preds = %.lr.ph418 - %267 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 - %268 = load ptr, ptr %267, align 8, !tbaa !64 - %269 = getelementptr inbounds nuw i8, ptr %268, i64 4 - %270 = load i32, ptr %269, align 4, !tbaa !47 - %271 = add i32 %270, -1 - store i32 %271, ptr %269, align 4, !tbaa !47 - %272 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 - %273 = load ptr, ptr %272, align 8, !tbaa !64 - %274 = getelementptr inbounds nuw i8, ptr %273, i64 4 - %275 = load i32, ptr %274, align 4, !tbaa !47 - %276 = add i32 %275, -1 - store i32 %276, ptr %274, align 4, !tbaa !47 - %277 = load ptr, ptr %101, align 8, !tbaa !46 - store ptr %277, ptr %261, align 8, !tbaa !48 - store ptr %.4415, ptr %101, align 8, !tbaa !46 - %278 = add nsw i32 %.5414, -1 - %279 = icmp eq ptr %.0295416, null - br i1 %279, label %280, label %281 - -280: ; preds = %266 - store ptr %262, ptr %259, align 8, !tbaa !25 - br label %381 - -281: ; preds = %266 - %282 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 - store ptr %262, ptr %282, align 8, !tbaa !48 - br label %381 - -283: ; preds = %.lr.ph418 - %284 = load i32, ptr %.4415, align 8, !tbaa !65 - %285 = icmp eq i32 %284, %10 - br i1 %285, label %286, label %381 - -286: ; preds = %283 - %287 = icmp eq ptr %.0295416, null - br i1 %287, label %288, label %289 - -288: ; preds = %286 - store ptr %262, ptr %259, align 8, !tbaa !25 - br label %291 - -289: ; preds = %286 - %290 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 - store ptr %262, ptr %290, align 8, !tbaa !48 - br label %291 - -291: ; preds = %289, %288 - %292 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 - %293 = load ptr, ptr %292, align 8, !tbaa !64 - %294 = getelementptr inbounds nuw i8, ptr %293, i64 4 - %295 = load i32, ptr %294, align 4, !tbaa !47 - %296 = add i32 %295, -1 - store i32 %296, ptr %294, align 4, !tbaa !47 - %297 = ptrtoint ptr %293 to i64 + %268 = getelementptr inbounds nuw i8, ptr %.4415, i64 8 + %269 = load ptr, ptr %268, align 8, !tbaa !48 + %270 = getelementptr inbounds nuw i8, ptr %.4415, i64 4 + %271 = load i32, ptr %270, align 4, !tbaa !47 + %272 = icmp eq i32 %271, 0 + br i1 %272, label %273, label %290 + +273: ; preds = %.lr.ph418 + %274 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 + %275 = load ptr, ptr %274, align 8, !tbaa !64 + %276 = getelementptr inbounds nuw i8, ptr %275, i64 4 + %277 = load i32, ptr %276, align 4, !tbaa !47 + %278 = add i32 %277, -1 + store i32 %278, ptr %276, align 4, !tbaa !47 + %279 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 + %280 = load ptr, ptr %279, align 8, !tbaa !64 + %281 = getelementptr inbounds nuw i8, ptr %280, i64 4 + %282 = load i32, ptr %281, align 4, !tbaa !47 + %283 = add i32 %282, -1 + store i32 %283, ptr %281, align 4, !tbaa !47 + %284 = load ptr, ptr %108, align 8, !tbaa !46 + store ptr %284, ptr %268, align 8, !tbaa !48 + store ptr %.4415, ptr %108, align 8, !tbaa !46 + %285 = add nsw i32 %.5414, -1 + %286 = icmp eq ptr %.0295416, null + br i1 %286, label %287, label %288 + +287: ; preds = %273 + store ptr %269, ptr %266, align 8, !tbaa !25 + br label %392 + +288: ; preds = %273 + %289 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 + store ptr %269, ptr %289, align 8, !tbaa !48 + br label %392 + +290: ; preds = %.lr.ph418 + %291 = load i32, ptr %.4415, align 8, !tbaa !65 + %292 = icmp eq i32 %291, %10 + br i1 %292, label %293, label %392 + +293: ; preds = %290 + %294 = icmp eq ptr %.0295416, null + br i1 %294, label %295, label %296 + +295: ; preds = %293 + store ptr %269, ptr %266, align 8, !tbaa !25 + br label %298 + +296: ; preds = %293 + %297 = getelementptr inbounds nuw i8, ptr %.0295416, i64 8 + store ptr %269, ptr %297, align 8, !tbaa !48 + br label %298 + +298: ; preds = %296, %295 + %299 = getelementptr inbounds nuw i8, ptr %.4415, i64 16 + %300 = load ptr, ptr %299, align 8, !tbaa !64 + %301 = getelementptr inbounds nuw i8, ptr %300, i64 4 + %302 = load i32, ptr %301, align 4, !tbaa !47 + %303 = add i32 %302, -1 + store i32 %303, ptr %301, align 4, !tbaa !47 + %304 = ptrtoint ptr %300 to i64 %298 = and i64 %297, -2 %299 = inttoptr i64 %298 to ptr %300 = getelementptr inbounds nuw i8, ptr %299, i64 32 @@ -1427,129 +1427,129 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, %cond352407 = icmp eq ptr %.2307406, null br i1 %cond352407, label %._crit_edge411, label %.lr.ph410 -.lr.ph410: ; preds = %291, %333 +.lr.ph410: ; preds = %298, %344 %.2307408 = phi ptr [ %.2307, %333 ], [ %.2307406, %291 ] - %318 = getelementptr inbounds nuw i8, ptr %.2307408, i64 16 - %319 = load ptr, ptr %318, align 8, !tbaa !64 - %320 = icmp eq ptr %319, %293 - br i1 %320, label %321, label %333 - -321: ; preds = %.lr.ph410 - %322 = getelementptr inbounds nuw i8, ptr %.2307408, i64 24 - %323 = load ptr, ptr %322, align 8, !tbaa !64 - %324 = icmp eq ptr %323, %303 - br i1 %324, label %325, label %333 - -325: ; preds = %321 - %326 = load i32, ptr %.2307408, align 8, !tbaa !65 - %327 = icmp eq i32 %326, %23 - br i1 %327, label %328, label %333 - -328: ; preds = %325 - %329 = getelementptr inbounds nuw i8, ptr %.2307408, i64 4 - %330 = load i32, ptr %329, align 4, !tbaa !47 - %331 = add i32 %330, 1 - store i32 %331, ptr %329, align 4, !tbaa !47 - %332 = add nsw i32 %.5414, -1 - br label %352 - -333: ; preds = %325, %321, %.lr.ph410 - %334 = getelementptr inbounds nuw i8, ptr %.2307408, i64 8 - %.2307 = load ptr, ptr %334, align 8, !tbaa !25 + %329 = getelementptr inbounds nuw i8, ptr %.2307408, i64 16 + %330 = load ptr, ptr %329, align 8, !tbaa !64 + %331 = icmp eq ptr %330, %300 + br i1 %331, label %332, label %344 + +332: ; preds = %.lr.ph410 + %333 = getelementptr inbounds nuw i8, ptr %.2307408, i64 24 + %334 = load ptr, ptr %333, align 8, !tbaa !64 + %335 = icmp eq ptr %334, %303 + br i1 %335, label %336, label %344 + +336: ; preds = %332 + %337 = load i32, ptr %.2307408, align 8, !tbaa !65 + %338 = icmp eq i32 %337, %23 + br i1 %338, label %339, label %344 + +339: ; preds = %336 + %340 = getelementptr inbounds nuw i8, ptr %.2307408, i64 4 + %341 = load i32, ptr %340, align 4, !tbaa !47 + %342 = add i32 %341, 1 + store i32 %342, ptr %340, align 4, !tbaa !47 + %343 = add nsw i32 %.5414, -1 + br label %363 + +344: ; preds = %336, %332, %.lr.ph410 + %345 = getelementptr inbounds nuw i8, ptr %.2307408, i64 8 + %.2307 = load ptr, ptr %345, align 8, !tbaa !25 %cond352 = icmp eq ptr %.2307, null br i1 %cond352, label %._crit_edge411, label %.lr.ph410, !llvm.loop !75 -._crit_edge411: ; preds = %333, %291 - %335 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 - %336 = icmp eq ptr %335, null - br i1 %336, label %.loopexit, label %337 - -337: ; preds = %._crit_edge411 - store i32 %23, ptr %335, align 8, !tbaa !65 - %338 = getelementptr inbounds nuw i8, ptr %335, i64 4 - store i32 1, ptr %338, align 4, !tbaa !47 - %339 = getelementptr inbounds nuw i8, ptr %335, i64 16 - store ptr %293, ptr %339, align 8, !tbaa !64 - %340 = load ptr, ptr @empty, align 8, !tbaa !25 - %341 = getelementptr inbounds nuw i8, ptr %335, i64 24 - store ptr %340, ptr %341, align 8, !tbaa !64 - %342 = load ptr, ptr %317, align 8, !tbaa !25 - %343 = getelementptr inbounds nuw i8, ptr %335, i64 8 - store ptr %342, ptr %343, align 8, !tbaa !48 - store ptr %335, ptr %317, align 8, !tbaa !25 - %344 = zext i32 %315 to i64 - %345 = icmp eq i64 %indvars.iv440, %344 - %or.cond = and i1 %287, %345 - %spec.select = select i1 %or.cond, ptr %335, ptr %.0295416 - %346 = load i32, ptr %294, align 4, !tbaa !47 - %347 = add i32 %346, 1 - store i32 %347, ptr %294, align 4, !tbaa !47 - %348 = load ptr, ptr @empty, align 8, !tbaa !25 - %349 = getelementptr inbounds nuw i8, ptr %348, i64 4 - %350 = load i32, ptr %349, align 4, !tbaa !47 - %351 = add i32 %350, 1 - store i32 %351, ptr %349, align 4, !tbaa !47 - br label %352 - -352: ; preds = %328, %337 - %.7 = phi i32 [ %.5414, %337 ], [ %332, %328 ] - %.3308 = phi ptr [ %335, %337 ], [ %.2307408, %328 ] +._crit_edge411: ; preds = %344, %298 + %346 = tail call ptr @cuddDynamicAllocNode(ptr noundef %0) #9 + %347 = icmp eq ptr %346, null + br i1 %347, label %.loopexit, label %348 + +348: ; preds = %._crit_edge411 + store i32 %23, ptr %346, align 8, !tbaa !65 + %349 = getelementptr inbounds nuw i8, ptr %346, i64 4 + store i32 1, ptr %349, align 4, !tbaa !47 + %350 = getelementptr inbounds nuw i8, ptr %346, i64 16 + store ptr %300, ptr %350, align 8, !tbaa !64 + %351 = load ptr, ptr @empty, align 8, !tbaa !25 + %352 = getelementptr inbounds nuw i8, ptr %346, i64 24 + store ptr %351, ptr %352, align 8, !tbaa !64 + %353 = load ptr, ptr %317, align 8, !tbaa !25 + %354 = getelementptr inbounds nuw i8, ptr %346, i64 8 + store ptr %353, ptr %354, align 8, !tbaa !48 + store ptr %346, ptr %317, align 8, !tbaa !25 + %355 = zext i32 %315 to i64 + %356 = icmp eq i64 %indvars.iv440, %355 + %or.cond = and i1 %294, %356 + %spec.select = select i1 %or.cond, ptr %346, ptr %.0295416 + %357 = load i32, ptr %301, align 4, !tbaa !47 + %358 = add i32 %357, 1 + store i32 %358, ptr %301, align 4, !tbaa !47 + %359 = load ptr, ptr @empty, align 8, !tbaa !25 + %360 = getelementptr inbounds nuw i8, ptr %359, i64 4 + %361 = load i32, ptr %360, align 4, !tbaa !47 + %362 = add i32 %361, 1 + store i32 %362, ptr %360, align 4, !tbaa !47 + br label %363 + +363: ; preds = %339, %348 + %.7 = phi i32 [ %.5414, %337 ], [ %343, %328 ] + %.3308 = phi ptr [ %346, %337 ], [ %.2307408, %328 ] %.2297 = phi ptr [ %spec.select, %337 ], [ %.0295416, %328 ] - store ptr %.3308, ptr %292, align 8, !tbaa !64 - %353 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 - %354 = load ptr, ptr %353, align 8, !tbaa !64 - %355 = ptrtoint ptr %.3308 to i64 - %356 = and i64 %355, -2 - %357 = inttoptr i64 %356 to ptr - %358 = getelementptr inbounds nuw i8, ptr %357, i64 32 - %359 = load i64, ptr %358, align 8, !tbaa !70 - %360 = shl i64 %359, 1 - %361 = and i64 %355, 1 - %362 = or disjoint i64 %360, %361 - %363 = trunc i64 %362 to i32 - %364 = mul i32 %363, 12582917 - %365 = ptrtoint ptr %354 to i64 - %366 = and i64 %365, -2 - %367 = inttoptr i64 %366 to ptr - %368 = getelementptr inbounds nuw i8, ptr %367, i64 32 - %369 = load i64, ptr %368, align 8, !tbaa !70 - %370 = shl i64 %369, 1 - %371 = and i64 %365, 1 - %372 = or disjoint i64 %370, %371 - %373 = trunc i64 %372 to i32 - %374 = add i32 %364, %373 - %375 = mul i32 %374, 4256249 - %376 = lshr i32 %375, %20 - %377 = add nsw i32 %.2327413, 1 - %378 = sext i32 %376 to i64 - %379 = getelementptr inbounds ptr, ptr %14, i64 %378 - %380 = load ptr, ptr %379, align 8, !tbaa !25 - store ptr %380, ptr %261, align 8, !tbaa !48 - store ptr %.4415, ptr %379, align 8, !tbaa !25 - br label %381 - -381: ; preds = %283, %352, %280, %281 - %.3328 = phi i32 [ %.2327413, %280 ], [ %.2327413, %281 ], [ %377, %352 ], [ %.2327413, %283 ] - %.6 = phi i32 [ %278, %280 ], [ %278, %281 ], [ %.7, %352 ], [ %.5414, %283 ] + store ptr %.3308, ptr %299, align 8, !tbaa !64 + %364 = getelementptr inbounds nuw i8, ptr %.4415, i64 24 + %365 = load ptr, ptr %364, align 8, !tbaa !64 + %366 = ptrtoint ptr %.3308 to i64 + %367 = and i64 %366, -2 + %368 = inttoptr i64 %367 to ptr + %369 = getelementptr inbounds nuw i8, ptr %368, i64 32 + %370 = load i64, ptr %369, align 8, !tbaa !70 + %371 = shl i64 %370, 1 + %372 = and i64 %366, 1 + %373 = or disjoint i64 %371, %372 + %374 = trunc i64 %373 to i32 + %375 = mul i32 %374, 12582917 + %376 = ptrtoint ptr %365 to i64 + %377 = and i64 %376, -2 + %378 = inttoptr i64 %377 to ptr + %379 = getelementptr inbounds nuw i8, ptr %378, i64 32 + %380 = load i64, ptr %379, align 8, !tbaa !70 + %381 = shl i64 %380, 1 + %382 = and i64 %376, 1 + %383 = or disjoint i64 %381, %382 + %384 = trunc i64 %383 to i32 + %385 = add i32 %375, %384 + %386 = mul i32 %385, 4256249 + %387 = lshr i32 %386, %20 + %388 = add nsw i32 %.2327413, 1 + %389 = sext i32 %387 to i64 + %390 = getelementptr inbounds ptr, ptr %14, i64 %389 + %391 = load ptr, ptr %390, align 8, !tbaa !25 + store ptr %391, ptr %268, align 8, !tbaa !48 + store ptr %.4415, ptr %390, align 8, !tbaa !25 + br label %392 + +392: ; preds = %290, %363, %287, %288 + %.3328 = phi i32 [ %.2327413, %280 ], [ %.2327413, %281 ], [ %388, %352 ], [ %.2327413, %283 ] + %.6 = phi i32 [ %285, %280 ], [ %285, %281 ], [ %.7, %352 ], [ %.5414, %283 ] %.1296 = phi ptr [ null, %280 ], [ %.0295416, %281 ], [ %.2297, %352 ], [ %.4415, %283 ] - %.not339 = icmp eq ptr %262, null + %.not339 = icmp eq ptr %269, null br i1 %.not339, label %._crit_edge419, label %.lr.ph418, !llvm.loop !76 -._crit_edge419: ; preds = %381, %258 +._crit_edge419: ; preds = %392, %265 %.2327.lcssa = phi i32 [ %.1326422, %258 ], [ %.3328, %381 ] %.5.lcssa = phi i32 [ %.4324423, %258 ], [ %.6, %381 ] %indvars.iv.next441 = add nuw nsw i64 %indvars.iv440, 1 %exitcond444.not = icmp eq i64 %indvars.iv.next441, %wide.trip.count443 - br i1 %exitcond444.not, label %._crit_edge426, label %258, !llvm.loop !77 + br i1 %exitcond444.not, label %._crit_edge426, label %265, !llvm.loop !77 ._crit_edge426: ; preds = %._crit_edge419, %.preheader %.1326.lcssa = phi i32 [ %.0325.lcssa, %.preheader ], [ %.2327.lcssa, %._crit_edge419 ] %.4324.lcssa = phi i32 [ %.1321.lcssa, %.preheader ], [ %.5.lcssa, %._crit_edge419 ] - %382 = load ptr, ptr %11, align 8, !tbaa !29 - %383 = getelementptr inbounds %struct.DdSubtable, ptr %382, i64 %8 - %384 = getelementptr inbounds nuw i8, ptr %383, i64 16 - store i32 %.1326.lcssa, ptr %384, align 8, !tbaa !31 - %385 = getelementptr inbounds %struct.DdSubtable, ptr %382, i64 %21 + %393 = load ptr, ptr %11, align 8, !tbaa !29 + %394 = getelementptr inbounds %struct.DdSubtable, ptr %393, i64 %8 + %395 = getelementptr inbounds nuw i8, ptr %394, i64 16 + store i32 %.1326.lcssa, ptr %395, align 8, !tbaa !31 + %396 = getelementptr inbounds %struct.DdSubtable, ptr %393, i64 %21 %386 = getelementptr inbounds nuw i8, ptr %385, i64 16 store i32 %.4324.lcssa, ptr %386, align 8, !tbaa !31 %387 = add i32 %27, %16 @@ -1567,15 +1567,15 @@ define internal fastcc i32 @cuddZddLinearInPlace(ptr noundef %0, i32 noundef %1, %398 = load ptr, ptr %397, align 8, !tbaa !64 %399 = getelementptr inbounds ptr, ptr %394, i64 %21 store ptr %398, ptr %399, align 8, !tbaa !25 - br label %403 + br label %414 .loopexit: ; preds = %._crit_edge398, %._crit_edge392, %._crit_edge411 - %400 = getelementptr inbounds nuw i8, ptr %0, i64 616 - %401 = load ptr, ptr %400, align 8, !tbaa !52 - %402 = tail call i64 @fwrite(ptr nonnull @.str.1, i64 40, i64 1, ptr %401) - br label %403 + %411 = getelementptr inbounds nuw i8, ptr %0, i64 616 + %412 = load ptr, ptr %411, align 8, !tbaa !52 + %413 = tail call i64 @fwrite(ptr nonnull @.str.1, i64 40, i64 1, ptr %412) + br label %414 -403: ; preds = %.loopexit, %._crit_edge426 +414: ; preds = %.loopexit, %._crit_edge426 %.0329 = phi i32 [ 0, %.loopexit ], [ %392, %._crit_edge426 ] ret i32 %.0329 } diff --git a/bench/lean4/optimized/AndFlatten.ll b/bench/lean4/optimized/AndFlatten.ll index 6c5ec41f37d..5555dc308a9 100644 --- a/bench/lean4/optimized/AndFlatten.ll +++ b/bench/lean4/optimized/AndFlatten.ll @@ -13079,61 +13079,61 @@ define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Elab_Tactic_BVDecide_Frontend_No store i32 %15, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit16 -16: ; preds = %10 +19: ; preds = %10 %.not.i = icmp eq i32 %12, 0 - br i1 %.not.i, label %lean_dec.exit16, label %17 + br i1 %.not.i, label %lean_dec.exit16, label %20 -17: ; preds = %16 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %17, %16, %14 - %18 = getelementptr i8, ptr %2, i64 8 - %.val21 = load i64, ptr %18, align 8, !tbaa !12 +lean_dec.exit16: ; preds = %20, %19, %14 + %21 = getelementptr i8, ptr %2, i64 8 + %.val21 = load i64, ptr %21, align 8, !tbaa !12 %19 = load i32, ptr %2, align 8, !tbaa !4 %20 = icmp sgt i32 %19, 1 br i1 %20, label %21, label %23, !prof !11 -21: ; preds = %lean_dec.exit16 - %22 = add nsw i32 %19, -1 - store i32 %22, ptr %2, align 4, !tbaa !4 +27: ; preds = %lean_dec.exit16 + %28 = add nsw i32 %19, -1 + store i32 %28, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit15 -23: ; preds = %lean_dec.exit16 +29: ; preds = %lean_dec.exit16 %.not.i17 = icmp eq i32 %19, 0 - br i1 %.not.i17, label %lean_dec.exit15, label %24 + br i1 %.not.i17, label %lean_dec.exit15, label %30 -24: ; preds = %23 +30: ; preds = %29 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit15 -lean_dec.exit15: ; preds = %24, %23, %21 - %25 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_andFlatteningPass_processGoal___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val21, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) - %26 = ptrtoint ptr %0 to i64 - %27 = and i64 %26, 1 - %.not23 = icmp eq i64 %27, 0 - br i1 %.not23, label %28, label %lean_dec.exit +lean_dec.exit15: ; preds = %30, %29, %21 + %31 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_andFlatteningPass_processGoal___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val21, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) + %32 = ptrtoint ptr %0 to i64 + %33 = and i64 %32, 1 + %.not23 = icmp eq i64 %33, 0 + br i1 %.not23, label %34, label %lean_dec.exit -28: ; preds = %lean_dec.exit15 - %29 = load i32, ptr %0, align 4, !tbaa !4 - %30 = icmp sgt i32 %29, 1 - br i1 %30, label %31, label %33, !prof !11 +34: ; preds = %lean_dec.exit15 + %35 = load i32, ptr %0, align 4, !tbaa !4 + %36 = icmp sgt i32 %35, 1 + br i1 %36, label %37, label %39, !prof !11 -31: ; preds = %28 - %32 = add nsw i32 %29, -1 - store i32 %32, ptr %0, align 4, !tbaa !4 +37: ; preds = %34 + %38 = add nsw i32 %35, -1 + store i32 %38, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -33: ; preds = %28 - %.not.i19 = icmp eq i32 %29, 0 - br i1 %.not.i19, label %lean_dec.exit, label %34 +39: ; preds = %34 + %.not.i19 = icmp eq i32 %35, 0 + br i1 %.not.i19, label %lean_dec.exit, label %40 -34: ; preds = %33 +40: ; preds = %39 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %34, %33, %31, %lean_dec.exit15 - ret ptr %25 +lean_dec.exit: ; preds = %40, %39, %37, %lean_dec.exit15 + ret ptr %31 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Assumption.ll b/bench/lean4/optimized/Assumption.ll index 6e99322bbc9..8ce1f9c6902 100644 --- a/bench/lean4/optimized/Assumption.ll +++ b/bench/lean4/optimized/Assumption.ll @@ -6178,15 +6178,15 @@ define ptr @l_Lean_LocalContext_findDeclRevM_x3f___at_Lean_Meta_findLocalDeclWit store i32 %14, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit -15: ; preds = %7 +18: ; preds = %7 %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit, label %16 + br i1 %.not.i, label %lean_dec.exit, label %19 -16: ; preds = %15 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %16, %15, %13 +lean_dec.exit: ; preds = %19, %18, %13 ret ptr %10 } diff --git a/bench/lean4/optimized/Attach.ll b/bench/lean4/optimized/Attach.ll index 01c8b897ccd..200ff5c5c01 100644 --- a/bench/lean4/optimized/Attach.ll +++ b/bench/lean4/optimized/Attach.ll @@ -214,17 +214,17 @@ define ptr @l_Array_mapMUnsafe_map___at_Vector_pmap___spec__1___rarg___boxed(ptr store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit8 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit8, label %11 + br i1 %.not.i, label %lean_dec.exit8, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %2, i64 8 - %.val11 = load i64, ptr %12, align 8, !tbaa !14 +lean_dec.exit8: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %2, i64 8 + %.val11 = load i64, ptr %15, align 8, !tbaa !14 %13 = load i32, ptr %2, align 8, !tbaa !4 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !9 @@ -234,17 +234,17 @@ lean_dec.exit8: ; preds = %11, %10, %8 store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -17: ; preds = %lean_dec.exit8 +23: ; preds = %lean_dec.exit8 %.not.i9 = icmp eq i32 %13, 0 - br i1 %.not.i9, label %lean_dec.exit, label %18 + br i1 %.not.i9, label %lean_dec.exit, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %18, %17, %15 - %19 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_pmap___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) - ret ptr %19 +lean_dec.exit: ; preds = %24, %23, %15 + %25 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_pmap___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) + ret ptr %25 } ; Function Attrs: nounwind uwtable @@ -832,17 +832,17 @@ define ptr @l_Array_mapMUnsafe_map___at___private_Init_Data_Vector_Attach_0__Vec store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit8 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit8, label %11 + br i1 %.not.i, label %lean_dec.exit8, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %12, align 8, !tbaa !14 +lean_dec.exit8: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %15, align 8, !tbaa !14 %13 = load i32, ptr %2, align 8, !tbaa !4 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !9 @@ -852,17 +852,17 @@ lean_dec.exit8: ; preds = %11, %10, %8 store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -17: ; preds = %lean_dec.exit8 +23: ; preds = %lean_dec.exit8 %.not.i9 = icmp eq i32 %13, 0 - br i1 %.not.i9, label %lean_dec.exit, label %18 + br i1 %.not.i9, label %lean_dec.exit, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %18, %17, %15 - %19 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Init_Data_Vector_Attach_0__Vector_pmapImpl___spec__1___rarg(ptr noundef %0, i64 noundef %.val11, i64 noundef %.val, ptr noundef %3) - ret ptr %19 +lean_dec.exit: ; preds = %24, %23, %15 + %25 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Init_Data_Vector_Attach_0__Vector_pmapImpl___spec__1___rarg(ptr noundef %0, i64 noundef %.val11, i64 noundef %.val, ptr noundef %3) + ret ptr %25 } ; Function Attrs: nounwind uwtable @@ -1105,19 +1105,19 @@ define ptr @l_Array_mapMUnsafe_map___at_Vector_unattach___spec__1___rarg___boxed store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %11, align 8, !tbaa !14 - %12 = load i32, ptr %1, align 8, !tbaa !4 - %13 = icmp sgt i32 %12, 1 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %14, align 8, !tbaa !14 + %15 = load i32, ptr %1, align 8, !tbaa !4 + %13 = icmp sgt i32 %15, 1 br i1 %13, label %14, label %16, !prof !9 14: ; preds = %lean_dec.exit7 @@ -1125,17 +1125,17 @@ lean_dec.exit7: ; preds = %10, %9, %7 store i32 %15, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_unattach___spec__1___rarg(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %14 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Vector_unattach___spec__1___rarg(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/AutoBound.ll b/bench/lean4/optimized/AutoBound.ll index b49d39240e6..5241c6f97ad 100644 --- a/bench/lean4/optimized/AutoBound.ll +++ b/bench/lean4/optimized/AutoBound.ll @@ -778,104 +778,104 @@ lean_inc.exit24: %5 = icmp sgt i32 %.val.i35, 0 br i1 %5, label %6, label %8, !prof !14 -6: ; preds = %lean_inc.exit24 - %7 = add nuw i32 %.val.i35, 1 - store i32 %7, ptr %0, align 4, !tbaa !10 +9: ; preds = %lean_inc.exit24 + %10 = add nuw i32 %.val.i35, 1 + store i32 %10, ptr %0, align 4, !tbaa !10 br label %lean_inc.exit -8: ; preds = %lean_inc.exit24 +11: ; preds = %lean_inc.exit24 %.not.i36 = icmp eq i32 %.val.i35, 0 - br i1 %.not.i36, label %lean_inc.exit, label %9 + br i1 %.not.i36, label %lean_inc.exit, label %12 -9: ; preds = %8 +12: ; preds = %11 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #3 br label %lean_inc.exit -lean_inc.exit: ; preds = %9, %8, %6 +lean_inc.exit: ; preds = %12, %11, %9 tail call void @lean_inc_heartbeat() #3 - %10 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %11 = icmp eq ptr %10, null - br i1 %11, label %12, label %lean_alloc_ctor.exit + %13 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %14 = icmp eq ptr %13, null + br i1 %14, label %15, label %lean_alloc_ctor.exit -12: ; preds = %lean_inc.exit +15: ; preds = %lean_inc.exit tail call void @lean_internal_panic_out_of_memory() #4 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit - %13 = getelementptr inbounds nuw i8, ptr %10, i64 4 - store i32 1, ptr %10, align 4, !tbaa !10 - store i32 196640, ptr %13, align 4 - %14 = getelementptr inbounds nuw i8, ptr %10, i64 8 - store ptr %0, ptr %14, align 8, !tbaa !4 - %15 = getelementptr inbounds nuw i8, ptr %10, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %15, align 8, !tbaa !4 - %16 = getelementptr inbounds nuw i8, ptr %10, i64 24 - store ptr %4, ptr %16, align 8, !tbaa !4 - %17 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %10, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 - %18 = load i32, ptr %10, align 8, !tbaa !10 + %16 = getelementptr inbounds nuw i8, ptr %13, i64 4 + store i32 1, ptr %13, align 4, !tbaa !10 + store i32 196640, ptr %16, align 4 + %17 = getelementptr inbounds nuw i8, ptr %13, i64 8 + store ptr %0, ptr %17, align 8, !tbaa !4 + %18 = getelementptr inbounds nuw i8, ptr %13, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %18, align 8, !tbaa !4 + %19 = getelementptr inbounds nuw i8, ptr %13, i64 24 + store ptr %4, ptr %19, align 8, !tbaa !4 + %20 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %13, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 + %18 = load i32, ptr %13, align 8, !tbaa !10 %19 = icmp sgt i32 %18, 1 br i1 %19, label %20, label %22, !prof !14 20: ; preds = %lean_alloc_ctor.exit %21 = add nsw i32 %18, -1 - store i32 %21, ptr %10, align 4, !tbaa !10 + store i32 %21, ptr %13, align 4, !tbaa !10 br label %lean_dec.exit27 -22: ; preds = %lean_alloc_ctor.exit +28: ; preds = %lean_alloc_ctor.exit %.not.i = icmp eq i32 %18, 0 - br i1 %.not.i, label %lean_dec.exit27, label %23 + br i1 %.not.i, label %lean_dec.exit27, label %29 -23: ; preds = %22 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %10) #3 +29: ; preds = %28 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %13) #3 br label %lean_dec.exit27 -lean_dec.exit27: ; preds = %20, %22, %23 - %24 = ptrtoint ptr %17 to i64 - %25 = and i64 %24, 1 - %.not40 = icmp eq i64 %25, 0 - br i1 %.not40, label %26, label %lean_dec.exit25, !prof !15 - -26: ; preds = %lean_dec.exit27 - %27 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %17) #3 - %28 = load i32, ptr %17, align 4, !tbaa !10 - %29 = icmp sgt i32 %28, 1 - br i1 %29, label %30, label %32, !prof !14 - -30: ; preds = %26 - %31 = add nsw i32 %28, -1 - store i32 %31, ptr %17, align 4, !tbaa !10 +lean_dec.exit27: ; preds = %20, %28, %29 + %30 = ptrtoint ptr %20 to i64 + %31 = and i64 %30, 1 + %.not40 = icmp eq i64 %31, 0 + br i1 %.not40, label %32, label %lean_dec.exit25, !prof !15 + +32: ; preds = %lean_dec.exit27 + %33 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %20) #3 + %34 = load i32, ptr %20, align 4, !tbaa !10 + %35 = icmp sgt i32 %34, 1 + br i1 %35, label %36, label %38, !prof !14 + +36: ; preds = %32 + %37 = add nsw i32 %34, -1 + store i32 %37, ptr %20, align 4, !tbaa !10 br label %lean_dec.exit25 -32: ; preds = %26 - %.not.i28 = icmp eq i32 %28, 0 - br i1 %.not.i28, label %lean_dec.exit25, label %33 +38: ; preds = %32 + %.not.i28 = icmp eq i32 %34, 0 + br i1 %.not.i28, label %lean_dec.exit25, label %39 -33: ; preds = %32 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %17) #3 +39: ; preds = %38 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %20) #3 br label %lean_dec.exit25 -lean_dec.exit25: ; preds = %lean_dec.exit27, %30, %32, %33 - %.0.i48 = phi ptr [ %27, %30 ], [ %27, %32 ], [ %27, %33 ], [ %17, %lean_dec.exit27 ] - %34 = tail call zeroext i8 @l_String_anyAux___at___private_Lean_Elab_AutoBound_0__Lean_Elab_isValidAutoBoundSuffix___spec__1(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef %.0.i48) +lean_dec.exit25: ; preds = %lean_dec.exit27, %36, %38, %39 + %.0.i48 = phi ptr [ %33, %30 ], [ %33, %32 ], [ %33, %33 ], [ %20, %lean_dec.exit27 ] + %40 = tail call zeroext i8 @l_String_anyAux___at___private_Lean_Elab_AutoBound_0__Lean_Elab_isValidAutoBoundSuffix___spec__1(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef %.0.i48) %35 = load i32, ptr %0, align 4, !tbaa !10 %36 = icmp sgt i32 %35, 1 - br i1 %36, label %37, label %39, !prof !14 + br i1 %36, label %37, label %312, !prof !14 -37: ; preds = %lean_dec.exit25 - %38 = add nsw i32 %35, -1 - store i32 %38, ptr %0, align 4, !tbaa !10 +44: ; preds = %lean_dec.exit25 + %45 = add nsw i32 %35, -1 + store i32 %45, ptr %0, align 4, !tbaa !10 br label %lean_dec.exit -39: ; preds = %lean_dec.exit25 +46: ; preds = %lean_dec.exit25 %.not.i32 = icmp eq i32 %35, 0 - br i1 %.not.i32, label %lean_dec.exit, label %40 + br i1 %.not.i32, label %lean_dec.exit, label %47 -40: ; preds = %39 +47: ; preds = %46 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %40, %39, %37 - %. = xor i8 %34, 1 +lean_dec.exit: ; preds = %47, %46, %44 + %. = xor i8 %40, 1 ret i8 %. } diff --git a/bench/lean4/optimized/AuxDeclCache.ll b/bench/lean4/optimized/AuxDeclCache.ll index 9b15440be49..55d2d06dc92 100644 --- a/bench/lean4/optimized/AuxDeclCache.ll +++ b/bench/lean4/optimized/AuxDeclCache.ll @@ -5154,17 +5154,17 @@ define ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_initFn____x store i32 %8, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 - %11 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) - ret ptr %11 +lean_dec.exit: ; preds = %13, %12, %7 + %14 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) + ret ptr %14 } ; Function Attrs: nounwind uwtable @@ -5180,65 +5180,65 @@ define ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_ store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit11 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit11, label %13 + br i1 %.not.i, label %lean_dec.exit11, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %13, %12, %10 - %14 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__7(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) - %15 = ptrtoint ptr %2 to i64 - %16 = and i64 %15, 1 - %.not16 = icmp eq i64 %16, 0 - br i1 %.not16, label %17, label %lean_dec.exit10 - -17: ; preds = %lean_dec.exit11 - %18 = load i32, ptr %2, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 - -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %2, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %16, %15, %13 + %17 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__7(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) + %18 = ptrtoint ptr %2 to i64 + %19 = and i64 %18, 1 + %.not16 = icmp eq i64 %19, 0 + br i1 %.not16, label %20, label %lean_dec.exit10 + +20: ; preds = %lean_dec.exit11 + %21 = load i32, ptr %2, align 4, !tbaa !4 + %22 = icmp sgt i32 %21, 1 + br i1 %112, label %23, label %25, !prof !11 + +23: ; preds = %20 + %24 = add nsw i32 %21, -1 + store i32 %24, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit10 -22: ; preds = %17 - %.not.i12 = icmp eq i32 %18, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %23 +25: ; preds = %20 + %.not.i12 = icmp eq i32 %21, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %26 -23: ; preds = %22 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %23, %22, %20, %lean_dec.exit11 - %24 = ptrtoint ptr %1 to i64 - %25 = and i64 %24, 1 - %.not17 = icmp eq i64 %25, 0 - br i1 %.not17, label %26, label %lean_dec.exit +lean_dec.exit10: ; preds = %26, %25, %23, %lean_dec.exit11 + %27 = ptrtoint ptr %1 to i64 + %28 = and i64 %27, 1 + %.not17 = icmp eq i64 %28, 0 + br i1 %.not17, label %29, label %lean_dec.exit -26: ; preds = %lean_dec.exit10 - %27 = load i32, ptr %1, align 4, !tbaa !4 - %28 = icmp sgt i32 %27, 1 - br i1 %28, label %29, label %31, !prof !11 +29: ; preds = %lean_dec.exit10 + %30 = load i32, ptr %1, align 4, !tbaa !4 + %31 = icmp sgt i32 %30, 1 + br i1 %31, label %212, label %34, !prof !11 -29: ; preds = %26 - %30 = add nsw i32 %27, -1 - store i32 %30, ptr %1, align 4, !tbaa !4 +32: ; preds = %29 + %33 = add nsw i32 %30, -1 + store i32 %33, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -31: ; preds = %26 - %.not.i14 = icmp eq i32 %27, 0 - br i1 %.not.i14, label %lean_dec.exit, label %32 +34: ; preds = %29 + %.not.i14 = icmp eq i32 %30, 0 + br i1 %.not.i14, label %lean_dec.exit, label %35 -32: ; preds = %31 +35: ; preds = %34 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit10 - ret ptr %14 +lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 + ret ptr %17 } ; Function Attrs: nounwind uwtable @@ -5254,37 +5254,37 @@ define ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_initFn___ store i32 %10, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit9 -11: ; preds = %5 +14: ; preds = %5 %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit9, label %12 + br i1 %.not.i, label %lean_dec.exit9, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %12, %11, %9 - %13 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %13, align 8, !tbaa !12 - %14 = load i32, ptr %2, align 8, !tbaa !4 - %15 = icmp sgt i32 %14, 1 +lean_dec.exit9: ; preds = %15, %14, %12 + %16 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %16, align 8, !tbaa !12 + %17 = load i32, ptr %2, align 8, !tbaa !4 + %18 = icmp sgt i32 %17, 1 br i1 %15, label %16, label %18, !prof !11 -16: ; preds = %lean_dec.exit9 +19: ; preds = %lean_dec.exit9 %17 = add nsw i32 %14, -1 - store i32 %17, ptr %2, align 4, !tbaa !4 + store i32 %20, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -18: ; preds = %lean_dec.exit9 +24: ; preds = %lean_dec.exit9 %.not.i10 = icmp eq i32 %14, 0 - br i1 %.not.i10, label %lean_dec.exit, label %19 + br i1 %.not.i10, label %lean_dec.exit, label %112 -19: ; preds = %18 +112: ; preds = %24 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %19, %18, %16 - %20 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__6(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) - ret ptr %20 +lean_dec.exit: ; preds = %25, %24, %22 + %26 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_initFn____x40_Lean_Compiler_LCNF_AuxDeclCache___hyg_3____spec__6(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) + ret ptr %26 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/AuxLemma.ll b/bench/lean4/optimized/AuxLemma.ll index b0b176eed7e..fc9b9d4861d 100644 --- a/bench/lean4/optimized/AuxLemma.ll +++ b/bench/lean4/optimized/AuxLemma.ll @@ -9998,65 +9998,65 @@ define ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Meta_mkAuxLemm store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit11 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit11, label %13 + br i1 %.not.i, label %lean_dec.exit11, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %13, %12, %10 - %14 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Meta_mkAuxLemma___spec__4(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) - %15 = ptrtoint ptr %2 to i64 - %16 = and i64 %15, 1 - %.not16 = icmp eq i64 %16, 0 - br i1 %.not16, label %17, label %lean_dec.exit10 - -17: ; preds = %lean_dec.exit11 - %18 = load i32, ptr %2, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 - -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %2, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %16, %15, %13 + %17 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Meta_mkAuxLemma___spec__4(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) + %18 = ptrtoint ptr %2 to i64 + %19 = and i64 %18, 1 + %.not16 = icmp eq i64 %19, 0 + br i1 %.not16, label %20, label %lean_dec.exit10 + +20: ; preds = %lean_dec.exit11 + %21 = load i32, ptr %2, align 4, !tbaa !4 + %22 = icmp sgt i32 %21, 1 + br i1 %22, label %23, label %25, !prof !11 + +23: ; preds = %20 + %24 = add nsw i32 %21, -1 + store i32 %24, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit10 -22: ; preds = %17 - %.not.i12 = icmp eq i32 %18, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %23 +25: ; preds = %20 + %.not.i12 = icmp eq i32 %21, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %26 -23: ; preds = %22 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %23, %22, %20, %lean_dec.exit11 - %24 = ptrtoint ptr %1 to i64 - %25 = and i64 %24, 1 - %.not17 = icmp eq i64 %25, 0 - br i1 %.not17, label %26, label %lean_dec.exit +lean_dec.exit10: ; preds = %26, %25, %23, %lean_dec.exit11 + %27 = ptrtoint ptr %1 to i64 + %28 = and i64 %27, 1 + %.not17 = icmp eq i64 %28, 0 + br i1 %.not17, label %29, label %lean_dec.exit -26: ; preds = %lean_dec.exit10 - %27 = load i32, ptr %1, align 4, !tbaa !4 - %28 = icmp sgt i32 %27, 1 - br i1 %28, label %29, label %31, !prof !11 +29: ; preds = %lean_dec.exit10 + %30 = load i32, ptr %1, align 4, !tbaa !4 + %31 = icmp sgt i32 %30, 1 + br i1 %31, label %32, label %34, !prof !11 -29: ; preds = %26 - %30 = add nsw i32 %27, -1 - store i32 %30, ptr %1, align 4, !tbaa !4 +32: ; preds = %29 + %33 = add nsw i32 %30, -1 + store i32 %33, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -31: ; preds = %26 - %.not.i14 = icmp eq i32 %27, 0 - br i1 %.not.i14, label %lean_dec.exit, label %32 +34: ; preds = %29 + %.not.i14 = icmp eq i32 %30, 0 + br i1 %.not.i14, label %lean_dec.exit, label %35 -32: ; preds = %31 +35: ; preds = %34 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit10 - ret ptr %14 +lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 + ret ptr %17 } ; Function Attrs: nounwind uwtable @@ -10072,37 +10072,37 @@ define ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Meta_mkAuxLemma___spec_ store i32 %10, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit9 -11: ; preds = %5 +14: ; preds = %5 %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit9, label %12 + br i1 %.not.i, label %lean_dec.exit9, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %12, %11, %9 - %13 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %13, align 8, !tbaa !12 - %14 = load i32, ptr %2, align 8, !tbaa !4 - %15 = icmp sgt i32 %14, 1 +lean_dec.exit9: ; preds = %15, %14, %12 + %16 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %16, align 8, !tbaa !12 + %17 = load i32, ptr %2, align 8, !tbaa !4 + %18 = icmp sgt i32 %17, 1 br i1 %15, label %16, label %18, !prof !11 -16: ; preds = %lean_dec.exit9 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %2, align 4, !tbaa !4 +22: ; preds = %lean_dec.exit9 + %23 = add nsw i32 %14, -1 + store i32 %23, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -18: ; preds = %lean_dec.exit9 +24: ; preds = %lean_dec.exit9 %.not.i10 = icmp eq i32 %14, 0 - br i1 %.not.i10, label %lean_dec.exit, label %19 + br i1 %.not.i10, label %lean_dec.exit, label %25 -19: ; preds = %18 +25: ; preds = %24 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %19, %18, %16 - %20 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Meta_mkAuxLemma___spec__3(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) - ret ptr %20 +lean_dec.exit: ; preds = %25, %24, %22 + %26 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Meta_mkAuxLemma___spec__3(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) + ret ptr %26 } ; Function Attrs: nounwind uwtable @@ -10196,41 +10196,41 @@ define ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Meta_mkAuxLemma___spec__7 store i32 %8, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit6 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit6, label %10 + br i1 %.not.i, label %lean_dec.exit6, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit6 -lean_dec.exit6: ; preds = %10, %9, %7 - %11 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Meta_mkAuxLemma___spec__7(ptr noundef %0, i64 noundef %.val, ptr noundef %2) - %12 = ptrtoint ptr %2 to i64 - %13 = and i64 %12, 1 - %.not9 = icmp eq i64 %13, 0 - br i1 %.not9, label %14, label %lean_dec.exit +lean_dec.exit6: ; preds = %13, %12, %7 + %14 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Meta_mkAuxLemma___spec__7(ptr noundef %0, i64 noundef %.val, ptr noundef %2) + %15 = ptrtoint ptr %2 to i64 + %16 = and i64 %15, 1 + %.not9 = icmp eq i64 %16, 0 + br i1 %.not9, label %17, label %lean_dec.exit -14: ; preds = %lean_dec.exit6 - %15 = load i32, ptr %2, align 4, !tbaa !4 - %16 = icmp sgt i32 %15, 1 - br i1 %16, label %17, label %19, !prof !11 +17: ; preds = %lean_dec.exit6 + %18 = load i32, ptr %2, align 4, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 -17: ; preds = %14 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %2, align 4, !tbaa !4 +20: ; preds = %17 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -19: ; preds = %14 - %.not.i7 = icmp eq i32 %15, 0 - br i1 %.not.i7, label %lean_dec.exit, label %20 +22: ; preds = %17 + %.not.i7 = icmp eq i32 %18, 0 + br i1 %.not.i7, label %lean_dec.exit, label %23 -20: ; preds = %19 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit6 - ret ptr %11 +lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit6 + ret ptr %14 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ByteArray.ll b/bench/lean4/optimized/ByteArray.ll index c792a6f95d6..398f749d654 100644 --- a/bench/lean4/optimized/ByteArray.ll +++ b/bench/lean4/optimized/ByteArray.ll @@ -738,20 +738,20 @@ define nonnull ptr @l_Std_Internal_Parsec_ByteArray_instInputIteratorUInt8Nat___ store i32 %15, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -16: ; preds = %2 - %.not.i = icmp eq i32 %12, 0 - br i1 %.not.i, label %lean_dec.exit, label %17 +19: ; preds = %2 + %.not.i = icmp eq i32 %15, 0 + br i1 %.not.i, label %lean_dec.exit, label %20 -17: ; preds = %16 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = zext i8 %11 to i64 - %19 = shl nuw nsw i64 %18, 1 - %20 = or disjoint i64 %19, 1 - %21 = inttoptr i64 %20 to ptr - ret ptr %21 +lean_dec.exit: ; preds = %20, %19, %14 + %21 = zext i8 %11 to i64 + %22 = shl nuw nsw i64 %21, 1 + %23 = or disjoint i64 %22, 1 + %24 = inttoptr i64 %23 to ptr + ret ptr %24 } ; Function Attrs: nounwind uwtable @@ -2476,61 +2476,61 @@ define noalias noundef nonnull ptr @l_ByteArray_forInUnsafe_loop___at_Std_Intern store i32 %10, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit11 -11: ; preds = %5 +14: ; preds = %5 %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit11, label %12 + br i1 %.not.i, label %lean_dec.exit11, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %12, %11, %9 - %13 = getelementptr i8, ptr %2, i64 8 - %.val16 = load i64, ptr %13, align 8, !tbaa !13 +lean_dec.exit11: ; preds = %15, %14, %9 + %16 = getelementptr i8, ptr %2, i64 8 + %.val16 = load i64, ptr %16, align 8, !tbaa !13 %14 = load i32, ptr %2, align 8, !tbaa !8 %15 = icmp sgt i32 %14, 1 br i1 %15, label %16, label %18, !prof !11 -16: ; preds = %lean_dec.exit11 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %2, align 4, !tbaa !8 +22: ; preds = %lean_dec.exit11 + %23 = add nsw i32 %14, -1 + store i32 %23, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit10 -18: ; preds = %lean_dec.exit11 +24: ; preds = %lean_dec.exit11 %.not.i12 = icmp eq i32 %14, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %19 + br i1 %.not.i12, label %lean_dec.exit10, label %22 -19: ; preds = %18 +25: ; preds = %24 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #6 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %19, %18, %16 - %20 = tail call ptr @l_ByteArray_forInUnsafe_loop___at_Std_Internal_Parsec_ByteArray_skipBytes___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val16, ptr noundef %3, ptr noundef %4) - %21 = ptrtoint ptr %0 to i64 - %22 = and i64 %21, 1 - %.not18 = icmp eq i64 %22, 0 - br i1 %.not18, label %23, label %lean_dec.exit +lean_dec.exit10: ; preds = %22, %24, %22 + %26 = tail call ptr @l_ByteArray_forInUnsafe_loop___at_Std_Internal_Parsec_ByteArray_skipBytes___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val16, ptr noundef %3, ptr noundef %4) + %27 = ptrtoint ptr %0 to i64 + %28 = and i64 %27, 1 + %.not18 = icmp eq i64 %28, 0 + br i1 %.not18, label %29, label %lean_dec.exit -23: ; preds = %lean_dec.exit10 - %24 = load i32, ptr %0, align 4, !tbaa !8 - %25 = icmp sgt i32 %24, 1 - br i1 %25, label %26, label %28, !prof !11 +29: ; preds = %lean_dec.exit10 + %30 = load i32, ptr %0, align 4, !tbaa !8 + %31 = icmp sgt i32 %30, 1 + br i1 %31, label %32, label %34, !prof !11 -26: ; preds = %23 - %27 = add nsw i32 %24, -1 - store i32 %27, ptr %0, align 4, !tbaa !8 +32: ; preds = %29 + %33 = add nsw i32 %30, -1 + store i32 %33, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -28: ; preds = %23 - %.not.i14 = icmp eq i32 %24, 0 - br i1 %.not.i14, label %lean_dec.exit, label %29 +34: ; preds = %29 + %.not.i14 = icmp eq i32 %30, 0 + br i1 %.not.i14, label %lean_dec.exit, label %35 -29: ; preds = %28 +35: ; preds = %34 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %29, %28, %26, %lean_dec.exit10 - ret ptr %20 +lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 + ret ptr %26 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CSE.ll b/bench/lean4/optimized/CSE.ll index 29b4d149f51..195c4001ab0 100644 --- a/bench/lean4/optimized/CSE.ll +++ b/bench/lean4/optimized/CSE.ll @@ -4848,65 +4848,65 @@ define ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_ store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit11 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit11, label %13 + br i1 %.not.i, label %lean_dec.exit11, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %13, %12, %10 - %14 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_CSE_addEntry___spec__3(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) - %15 = ptrtoint ptr %2 to i64 - %16 = and i64 %15, 1 - %.not16 = icmp eq i64 %16, 0 - br i1 %.not16, label %17, label %lean_dec.exit10 +lean_dec.exit11: ; preds = %16, %15, %13 + %17 = tail call ptr @l_Lean_PersistentHashMap_insertAux_traverse___at_Lean_Compiler_LCNF_CSE_addEntry___spec__3(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr poison, ptr noundef %4, ptr noundef %5) + %18 = ptrtoint ptr %2 to i64 + %19 = and i64 %18, 1 + %.not16 = icmp eq i64 %19, 0 + br i1 %.not16, label %20, label %lean_dec.exit10 -17: ; preds = %lean_dec.exit11 - %18 = load i32, ptr %2, align 4, !tbaa !4 - %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 +20: ; preds = %lean_dec.exit11 + %21 = load i32, ptr %2, align 4, !tbaa !4 + %22 = icmp sgt i32 %21, 1 + br i1 %22, label %23, label %25, !prof !11 -20: ; preds = %17 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %2, align 4, !tbaa !4 +23: ; preds = %20 + %24 = add nsw i32 %21, -1 + store i32 %24, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit10 -22: ; preds = %17 - %.not.i12 = icmp eq i32 %18, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %23 +25: ; preds = %20 + %.not.i12 = icmp eq i32 %21, 0 + br i1 %.not.i12, label %lean_dec.exit10, label %26 -23: ; preds = %22 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %23, %22, %20, %lean_dec.exit11 - %24 = ptrtoint ptr %1 to i64 - %25 = and i64 %24, 1 - %.not17 = icmp eq i64 %25, 0 - br i1 %.not17, label %26, label %lean_dec.exit +lean_dec.exit10: ; preds = %26, %25, %23, %lean_dec.exit11 + %27 = ptrtoint ptr %1 to i64 + %28 = and i64 %27, 1 + %.not17 = icmp eq i64 %28, 0 + br i1 %.not17, label %29, label %lean_dec.exit -26: ; preds = %lean_dec.exit10 - %27 = load i32, ptr %1, align 4, !tbaa !4 - %28 = icmp sgt i32 %27, 1 - br i1 %28, label %29, label %31, !prof !11 +29: ; preds = %lean_dec.exit10 + %30 = load i32, ptr %1, align 4, !tbaa !4 + %31 = icmp sgt i32 %30, 1 + br i1 %31, label %32, label %34, !prof !11 -29: ; preds = %26 - %30 = add nsw i32 %27, -1 - store i32 %30, ptr %1, align 4, !tbaa !4 +32: ; preds = %29 + %33 = add nsw i32 %30, -1 + store i32 %33, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -31: ; preds = %26 - %.not.i14 = icmp eq i32 %27, 0 - br i1 %.not.i14, label %lean_dec.exit, label %32 +34: ; preds = %29 + %.not.i14 = icmp eq i32 %30, 0 + br i1 %.not.i14, label %lean_dec.exit, label %35 -32: ; preds = %31 +35: ; preds = %34 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit10 - ret ptr %14 +lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 + ret ptr %17 } ; Function Attrs: nounwind uwtable @@ -4922,37 +4922,37 @@ define ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_CSE_addEn store i32 %10, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit9 -11: ; preds = %5 +14: ; preds = %5 %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit9, label %12 + br i1 %.not.i, label %lean_dec.exit9, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %12, %11, %9 - %13 = getelementptr i8, ptr %2, i64 8 - %.val = load i64, ptr %13, align 8, !tbaa !12 - %14 = load i32, ptr %2, align 8, !tbaa !4 - %15 = icmp sgt i32 %14, 1 +lean_dec.exit9: ; preds = %15, %14, %12 + %16 = getelementptr i8, ptr %2, i64 8 + %.val = load i64, ptr %16, align 8, !tbaa !12 + %17 = load i32, ptr %2, align 8, !tbaa !4 + %18 = icmp sgt i32 %17, 1 br i1 %15, label %16, label %18, !prof !11 -16: ; preds = %lean_dec.exit9 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %2, align 4, !tbaa !4 +22: ; preds = %lean_dec.exit9 + %23 = add nsw i32 %14, -1 + store i32 %23, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -18: ; preds = %lean_dec.exit9 +24: ; preds = %lean_dec.exit9 %.not.i10 = icmp eq i32 %14, 0 - br i1 %.not.i10, label %lean_dec.exit, label %19 + br i1 %.not.i10, label %lean_dec.exit, label %25 -19: ; preds = %18 +25: ; preds = %24 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %19, %18, %16 - %20 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_CSE_addEntry___spec__2(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) - ret ptr %20 +lean_dec.exit: ; preds = %25, %24, %22 + %26 = tail call ptr @l_Lean_PersistentHashMap_insertAux___at_Lean_Compiler_LCNF_CSE_addEntry___spec__2(ptr noundef %0, i64 noundef %.val12, i64 noundef %.val, ptr noundef %3, ptr noundef %4) + ret ptr %26 } ; Function Attrs: nounwind uwtable @@ -35738,41 +35738,41 @@ define ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_Code_cse_go store i32 %8, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit6 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit6, label %10 + br i1 %.not.i, label %lean_dec.exit6, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit6 -lean_dec.exit6: ; preds = %10, %9, %7 - %11 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_Code_cse_go___spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) - %12 = ptrtoint ptr %2 to i64 - %13 = and i64 %12, 1 - %.not9 = icmp eq i64 %13, 0 - br i1 %.not9, label %14, label %lean_dec.exit +lean_dec.exit6: ; preds = %13, %12, %7 + %14 = tail call ptr @l_Lean_PersistentHashMap_findAux___at_Lean_Compiler_LCNF_Code_cse_go___spec__3(ptr noundef %0, i64 noundef %.val, ptr noundef %2) + %15 = ptrtoint ptr %2 to i64 + %16 = and i64 %15, 1 + %.not9 = icmp eq i64 %16, 0 + br i1 %.not9, label %17, label %lean_dec.exit -14: ; preds = %lean_dec.exit6 - %15 = load i32, ptr %2, align 4, !tbaa !4 - %16 = icmp sgt i32 %15, 1 - br i1 %16, label %17, label %19, !prof !11 +17: ; preds = %lean_dec.exit6 + %18 = load i32, ptr %2, align 4, !tbaa !4 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 -17: ; preds = %14 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %2, align 4, !tbaa !4 +20: ; preds = %17 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -19: ; preds = %14 - %.not.i7 = icmp eq i32 %15, 0 - br i1 %.not.i7, label %lean_dec.exit, label %20 +22: ; preds = %17 + %.not.i7 = icmp eq i32 %18, 0 + br i1 %.not.i7, label %lean_dec.exit, label %23 -20: ; preds = %19 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit6 - ret ptr %11 +lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit6 + ret ptr %14 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CaseValues.ll b/bench/lean4/optimized/CaseValues.ll index cfc1f46880b..fcbc3ecff1a 100644 --- a/bench/lean4/optimized/CaseValues.ll +++ b/bench/lean4/optimized/CaseValues.ll @@ -19218,17 +19218,17 @@ define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Meta_caseValues_loop___spec__1__ store i32 %15, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit18 -16: ; preds = %10 +19: ; preds = %10 %.not.i = icmp eq i32 %12, 0 - br i1 %.not.i, label %lean_dec.exit18, label %17 + br i1 %.not.i, label %lean_dec.exit18, label %20 -17: ; preds = %16 +20: ; preds = %19 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #5 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %17, %16, %14 - %18 = getelementptr i8, ptr %3, i64 8 - %.val25 = load i64, ptr %18, align 8, !tbaa !16 +lean_dec.exit18: ; preds = %20, %19, %14 + %21 = getelementptr i8, ptr %3, i64 8 + %.val25 = load i64, ptr %21, align 8, !tbaa !16 %19 = load i32, ptr %3, align 8, !tbaa !4 %20 = icmp sgt i32 %19, 1 br i1 %20, label %21, label %23, !prof !11 @@ -19238,65 +19238,65 @@ lean_dec.exit18: ; preds = %17, %16, %14 store i32 %22, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit17 -23: ; preds = %lean_dec.exit18 +29: ; preds = %lean_dec.exit18 %.not.i19 = icmp eq i32 %19, 0 - br i1 %.not.i19, label %lean_dec.exit17, label %24 + br i1 %.not.i19, label %lean_dec.exit17, label %30 -24: ; preds = %23 +30: ; preds = %29 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #5 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %24, %23, %21 - %25 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Meta_caseValues_loop___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val25, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) - %26 = ptrtoint ptr %1 to i64 - %27 = and i64 %26, 1 - %.not27 = icmp eq i64 %27, 0 - br i1 %.not27, label %28, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %30, %29, %21 + %31 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Meta_caseValues_loop___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val25, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) + %32 = ptrtoint ptr %1 to i64 + %33 = and i64 %32, 1 + %.not27 = icmp eq i64 %33, 0 + br i1 %.not27, label %34, label %lean_dec.exit16 -28: ; preds = %lean_dec.exit17 - %29 = load i32, ptr %1, align 4, !tbaa !4 - %30 = icmp sgt i32 %29, 1 - br i1 %30, label %31, label %33, !prof !11 +34: ; preds = %lean_dec.exit17 + %35 = load i32, ptr %1, align 4, !tbaa !4 + %36 = icmp sgt i32 %35, 1 + br i1 %36, label %37, label %39, !prof !11 -31: ; preds = %28 - %32 = add nsw i32 %29, -1 - store i32 %32, ptr %1, align 4, !tbaa !4 +37: ; preds = %34 + %38 = add nsw i32 %35, -1 + store i32 %38, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit16 -33: ; preds = %28 - %.not.i21 = icmp eq i32 %29, 0 - br i1 %.not.i21, label %lean_dec.exit16, label %34 +39: ; preds = %34 + %.not.i21 = icmp eq i32 %35, 0 + br i1 %.not.i21, label %lean_dec.exit16, label %40 -34: ; preds = %33 +40: ; preds = %39 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %34, %33, %31, %lean_dec.exit17 - %35 = ptrtoint ptr %0 to i64 - %36 = and i64 %35, 1 - %.not28 = icmp eq i64 %36, 0 - br i1 %.not28, label %37, label %lean_dec.exit +lean_dec.exit16: ; preds = %40, %39, %37, %lean_dec.exit17 + %41 = ptrtoint ptr %0 to i64 + %42 = and i64 %41, 1 + %.not28 = icmp eq i64 %42, 0 + br i1 %.not28, label %43, label %lean_dec.exit -37: ; preds = %lean_dec.exit16 - %38 = load i32, ptr %0, align 4, !tbaa !4 - %39 = icmp sgt i32 %38, 1 - br i1 %39, label %40, label %42, !prof !11 +43: ; preds = %lean_dec.exit16 + %44 = load i32, ptr %0, align 4, !tbaa !4 + %45 = icmp sgt i32 %44, 1 + br i1 %45, label %46, label %48, !prof !11 -40: ; preds = %37 - %41 = add nsw i32 %38, -1 - store i32 %41, ptr %0, align 4, !tbaa !4 +46: ; preds = %43 + %47 = add nsw i32 %44, -1 + store i32 %47, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -42: ; preds = %37 - %.not.i23 = icmp eq i32 %38, 0 - br i1 %.not.i23, label %lean_dec.exit, label %43 +48: ; preds = %43 + %.not.i23 = icmp eq i32 %44, 0 + br i1 %.not.i23, label %lean_dec.exit, label %49 -43: ; preds = %42 +49: ; preds = %48 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %43, %42, %40, %lean_dec.exit16 - ret ptr %25 +lean_dec.exit: ; preds = %49, %48, %46, %lean_dec.exit16 + ret ptr %31 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CheckTactic.ll b/bench/lean4/optimized/CheckTactic.ll index a8c8eecc298..03a99bfcad3 100644 --- a/bench/lean4/optimized/CheckTactic.ll +++ b/bench/lean4/optimized/CheckTactic.ll @@ -37534,89 +37534,89 @@ lean_alloc_ctor.exit104: ; preds = %lean_inc.exit75 store i32 2, ptr %102, align 8, !tbaa !8 br i1 %.not116, label %110, label %lean_inc.exit73 -110: ; preds = %lean_alloc_ctor.exit104 +lean_inc_ref.exit107: ; preds = %lean_alloc_ctor.exit104 %.val.i108 = load i32, ptr %39, align 4, !tbaa !8 - %111 = icmp sgt i32 %.val.i108, 0 - br i1 %111, label %112, label %114, !prof !15 + %113 = icmp sgt i32 %.val.i108, 0 + br i1 %113, label %114, label %116, !prof !15 -112: ; preds = %110 - %113 = add nuw i32 %.val.i108, 1 - store i32 %113, ptr %39, align 4, !tbaa !8 +114: ; preds = %110 + %115 = add nuw i32 %.val.i108, 1 + store i32 %115, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit73 -114: ; preds = %110 +116: ; preds = %110 %.not.i109 = icmp eq i32 %.val.i108, 0 - br i1 %.not.i109, label %lean_inc.exit73, label %115 + br i1 %.not.i109, label %lean_inc.exit73, label %117 -115: ; preds = %114 +117: ; preds = %116 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit73 -lean_inc.exit73: ; preds = %115, %114, %112, %lean_alloc_ctor.exit104 - %116 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %109, ptr noundef nonnull %102) #6 - %117 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 +lean_inc.exit73: ; preds = %117, %116, %114, %lean_alloc_ctor.exit104 + %118 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %109, ptr noundef nonnull %102) #6 + %119 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 %.val.i.i = load i32, ptr %102, align 4, !tbaa !8 - %118 = icmp sgt i32 %.val.i.i, 0 - br i1 %118, label %119, label %121, !prof !15 + %121 = icmp sgt i32 %.val.i.i, 0 + br i1 %121, label %122, label %124, !prof !15 -119: ; preds = %lean_inc.exit73 - %120 = add nuw i32 %.val.i.i, 3 - store i32 %120, ptr %102, align 4, !tbaa !8 +122: ; preds = %lean_inc.exit73 + %123 = add nuw i32 %.val.i.i, 3 + store i32 %123, ptr %102, align 4, !tbaa !8 br label %lean_inc_n.exit -121: ; preds = %lean_inc.exit73 +124: ; preds = %lean_inc.exit73 %.not.i.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i.i, label %lean_inc_n.exit, label %122 + br i1 %.not.i.i, label %lean_inc_n.exit, label %125 -122: ; preds = %121 +125: ; preds = %124 tail call void @lean_inc_ref_n_cold(ptr noundef nonnull %102, i32 noundef 3) #6 br label %lean_inc_n.exit -lean_inc_n.exit: ; preds = %119, %121, %122 - br i1 %.not116, label %123, label %lean_inc.exit +lean_inc_n.exit: ; preds = %122, %124, %125 + br i1 %.not116, label %126, label %lean_inc.exit -123: ; preds = %lean_inc_n.exit +126: ; preds = %lean_inc_n.exit %.val.i112 = load i32, ptr %39, align 4, !tbaa !8 - %124 = icmp sgt i32 %.val.i112, 0 - br i1 %124, label %125, label %127, !prof !15 + %127 = icmp sgt i32 %.val.i112, 0 + br i1 %127, label %128, label %130, !prof !15 -125: ; preds = %123 - %126 = add nuw i32 %.val.i112, 1 - store i32 %126, ptr %39, align 4, !tbaa !8 +128: ; preds = %126 + %129 = add nuw i32 %.val.i112, 1 + store i32 %129, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit -127: ; preds = %123 +130: ; preds = %126 %.not.i113 = icmp eq i32 %.val.i112, 0 - br i1 %.not.i113, label %lean_inc.exit, label %128 + br i1 %.not.i113, label %lean_inc.exit, label %131 -128: ; preds = %127 +131: ; preds = %130 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit -lean_inc.exit: ; preds = %128, %127, %125, %lean_inc_n.exit - %129 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %117, ptr noundef nonnull %88, ptr noundef %116, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102) #6 - %130 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTactic___closed__4, align 8, !tbaa !4 - %131 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %130, ptr noundef nonnull %49, ptr noundef %28, ptr noundef nonnull %62, ptr noundef %29, ptr noundef nonnull %75, ptr noundef %129) #6 +lean_inc.exit: ; preds = %131, %130, %128, %lean_inc_n.exit + %132 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %119, ptr noundef nonnull %88, ptr noundef %118, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102, ptr noundef nonnull %102) #6 + %133 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTactic___closed__4, align 8, !tbaa !4 + %134 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %133, ptr noundef nonnull %49, ptr noundef %28, ptr noundef nonnull %62, ptr noundef %29, ptr noundef nonnull %75, ptr noundef %132) #6 tail call void @lean_inc_heartbeat() #6 - %132 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 - %133 = icmp eq ptr %132, null - br i1 %133, label %134, label %lean_alloc_ctor.exit + %135 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 + %136 = icmp eq ptr %135, null + br i1 %136, label %137, label %lean_alloc_ctor.exit -134: ; preds = %lean_inc.exit +137: ; preds = %lean_inc.exit tail call void @lean_internal_panic_out_of_memory() #7 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit, %lean_dec.exit81 - %.sink134 = phi ptr [ %24, %lean_dec.exit81 ], [ %132, %lean_inc.exit ] + %.sink134 = phi ptr [ %24, %lean_dec.exit81 ], [ %135, %lean_inc.exit ] %.sink131 = phi i32 [ 16908312, %lean_dec.exit81 ], [ 131096, %lean_inc.exit ] - %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit81 ], [ %131, %lean_inc.exit ] - %135 = getelementptr inbounds nuw i8, ptr %.sink134, i64 4 + %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit81 ], [ %134, %lean_inc.exit ] + %138 = getelementptr inbounds nuw i8, ptr %.sink134, i64 4 store i32 1, ptr %.sink134, align 4, !tbaa !8 - store i32 %.sink131, ptr %135, align 4 - %136 = getelementptr inbounds nuw i8, ptr %.sink134, i64 8 - store ptr %.sink, ptr %136, align 8, !tbaa !4 - %137 = getelementptr inbounds nuw i8, ptr %.sink134, i64 16 - store ptr %2, ptr %137, align 8, !tbaa !4 + store i32 %.sink131, ptr %138, align 4 + %139 = getelementptr inbounds nuw i8, ptr %.sink134, i64 8 + store ptr %.sink, ptr %139, align 8, !tbaa !4 + %140 = getelementptr inbounds nuw i8, ptr %.sink134, i64 16 + store ptr %2, ptr %140, align 8, !tbaa !4 ret ptr %.sink134 } @@ -37932,89 +37932,89 @@ lean_alloc_ctor.exit90: ; preds = %lean_inc.exit66 store i32 2, ptr %89, align 8, !tbaa !8 br i1 %.not103, label %97, label %lean_inc.exit64 -97: ; preds = %lean_alloc_ctor.exit90 +lean_inc_ref.exit93: ; preds = %lean_alloc_ctor.exit90 %.val.i94 = load i32, ptr %39, align 4, !tbaa !8 - %98 = icmp sgt i32 %.val.i94, 0 - br i1 %98, label %99, label %101, !prof !15 + %100 = icmp sgt i32 %.val.i94, 0 + br i1 %100, label %101, label %103, !prof !15 -99: ; preds = %97 - %100 = add nuw i32 %.val.i94, 1 - store i32 %100, ptr %39, align 4, !tbaa !8 +101: ; preds = %97 + %102 = add nuw i32 %.val.i94, 1 + store i32 %102, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit64 -101: ; preds = %97 +103: ; preds = %97 %.not.i95 = icmp eq i32 %.val.i94, 0 - br i1 %.not.i95, label %lean_inc.exit64, label %102 + br i1 %.not.i95, label %lean_inc.exit64, label %104 -102: ; preds = %101 +104: ; preds = %103 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit64 -lean_inc.exit64: ; preds = %102, %101, %99, %lean_alloc_ctor.exit90 - %103 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %96, ptr noundef nonnull %89) #6 - %104 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 +lean_inc.exit64: ; preds = %104, %103, %101, %lean_alloc_ctor.exit90 + %105 = tail call ptr @l_Lean_Syntax_node1(ptr noundef %39, ptr noundef %96, ptr noundef nonnull %89) #6 + %106 = load ptr, ptr @l_Lean_Elab_CheckTactic_expandCheckSimp___closed__8, align 8, !tbaa !4 %.val.i.i = load i32, ptr %89, align 4, !tbaa !8 - %105 = icmp sgt i32 %.val.i.i, 0 - br i1 %105, label %106, label %108, !prof !15 + %108 = icmp sgt i32 %.val.i.i, 0 + br i1 %108, label %109, label %111, !prof !15 -106: ; preds = %lean_inc.exit64 - %107 = add nuw i32 %.val.i.i, 3 - store i32 %107, ptr %89, align 4, !tbaa !8 +109: ; preds = %lean_inc.exit64 + %110 = add nuw i32 %.val.i.i, 3 + store i32 %110, ptr %89, align 4, !tbaa !8 br label %lean_inc_n.exit -108: ; preds = %lean_inc.exit64 +111: ; preds = %lean_inc.exit64 %.not.i.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i.i, label %lean_inc_n.exit, label %109 + br i1 %.not.i.i, label %lean_inc_n.exit, label %112 -109: ; preds = %108 +112: ; preds = %111 tail call void @lean_inc_ref_n_cold(ptr noundef nonnull %89, i32 noundef 3) #6 br label %lean_inc_n.exit -lean_inc_n.exit: ; preds = %106, %108, %109 - br i1 %.not103, label %110, label %lean_inc.exit +lean_inc_n.exit: ; preds = %109, %111, %112 + br i1 %.not103, label %113, label %lean_inc.exit -110: ; preds = %lean_inc_n.exit +113: ; preds = %lean_inc_n.exit %.val.i98 = load i32, ptr %39, align 4, !tbaa !8 - %111 = icmp sgt i32 %.val.i98, 0 - br i1 %111, label %112, label %114, !prof !15 + %114 = icmp sgt i32 %.val.i98, 0 + br i1 %114, label %115, label %117, !prof !15 -112: ; preds = %110 - %113 = add nuw i32 %.val.i98, 1 - store i32 %113, ptr %39, align 4, !tbaa !8 +115: ; preds = %113 + %116 = add nuw i32 %.val.i98, 1 + store i32 %116, ptr %39, align 4, !tbaa !8 br label %lean_inc.exit -114: ; preds = %110 +117: ; preds = %113 %.not.i99 = icmp eq i32 %.val.i98, 0 - br i1 %.not.i99, label %lean_inc.exit, label %115 + br i1 %.not.i99, label %lean_inc.exit, label %118 -115: ; preds = %114 +118: ; preds = %117 tail call void @lean_inc_ref_cold(ptr noundef nonnull %39) #6 br label %lean_inc.exit -lean_inc.exit: ; preds = %115, %114, %112, %lean_inc_n.exit - %116 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %104, ptr noundef nonnull %75, ptr noundef %103, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89) #6 - %117 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTacticFailure___closed__2, align 8, !tbaa !4 - %118 = tail call ptr @l_Lean_Syntax_node4(ptr noundef %39, ptr noundef %117, ptr noundef nonnull %49, ptr noundef %36, ptr noundef nonnull %62, ptr noundef %116) #6 +lean_inc.exit: ; preds = %118, %117, %115, %lean_inc_n.exit + %119 = tail call ptr @l_Lean_Syntax_node6(ptr noundef %39, ptr noundef %106, ptr noundef nonnull %75, ptr noundef %105, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89, ptr noundef nonnull %89) #6 + %120 = load ptr, ptr @l_Lean_Elab_CheckTactic_elabCheckTacticFailure___closed__2, align 8, !tbaa !4 + %121 = tail call ptr @l_Lean_Syntax_node4(ptr noundef %39, ptr noundef %120, ptr noundef nonnull %49, ptr noundef %36, ptr noundef nonnull %62, ptr noundef %119) #6 tail call void @lean_inc_heartbeat() #6 - %119 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 - %120 = icmp eq ptr %119, null - br i1 %120, label %121, label %lean_alloc_ctor.exit + %122 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #6 + %123 = icmp eq ptr %122, null + br i1 %123, label %124, label %lean_alloc_ctor.exit -121: ; preds = %lean_inc.exit +124: ; preds = %lean_inc.exit tail call void @lean_internal_panic_out_of_memory() #7 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit, %lean_dec.exit71 - %.sink120 = phi ptr [ %25, %lean_dec.exit71 ], [ %119, %lean_inc.exit ] + %.sink120 = phi ptr [ %25, %lean_dec.exit71 ], [ %122, %lean_inc.exit ] %.sink117 = phi i32 [ 16908312, %lean_dec.exit71 ], [ 131096, %lean_inc.exit ] - %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit71 ], [ %118, %lean_inc.exit ] - %122 = getelementptr inbounds nuw i8, ptr %.sink120, i64 4 + %.sink = phi ptr [ inttoptr (i64 3 to ptr), %lean_dec.exit71 ], [ %121, %lean_inc.exit ] + %125 = getelementptr inbounds nuw i8, ptr %.sink120, i64 4 store i32 1, ptr %.sink120, align 4, !tbaa !8 - store i32 %.sink117, ptr %122, align 4 - %123 = getelementptr inbounds nuw i8, ptr %.sink120, i64 8 - store ptr %.sink, ptr %123, align 8, !tbaa !4 - %124 = getelementptr inbounds nuw i8, ptr %.sink120, i64 16 - store ptr %2, ptr %124, align 8, !tbaa !4 + store i32 %.sink117, ptr %125, align 4 + %126 = getelementptr inbounds nuw i8, ptr %.sink120, i64 8 + store ptr %.sink, ptr %126, align 8, !tbaa !4 + %127 = getelementptr inbounds nuw i8, ptr %.sink120, i64 16 + store ptr %2, ptr %127, align 8, !tbaa !4 ret ptr %.sink120 } diff --git a/bench/lean4/optimized/Client.ll b/bench/lean4/optimized/Client.ll index e0772b27073..65fb4d1c702 100644 --- a/bench/lean4/optimized/Client.ll +++ b/bench/lean4/optimized/Client.ll @@ -1541,17 +1541,17 @@ define ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_L store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %11, align 8, !tbaa !12 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %14, align 8, !tbaa !12 %12 = load i32, ptr %1, align 8, !tbaa !8 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !11 @@ -1561,17 +1561,17 @@ lean_dec.exit7: ; preds = %10, %9, %7 store i32 %15, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_toJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_258____spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %14 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_toJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_258____spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable @@ -2454,17 +2454,17 @@ define ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_L store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %11, align 8, !tbaa !12 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %14, align 8, !tbaa !12 %12 = load i32, ptr %1, align 8, !tbaa !8 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !11 @@ -2474,17 +2474,17 @@ lean_dec.exit7: ; preds = %10, %9, %7 store i32 %15, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_fromJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_296____spec__3(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %14 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_Client_0__Lean_Lsp_fromJsonRegistrationParams____x40_Lean_Data_Lsp_Client___hyg_296____spec__3(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CollectAxioms.ll b/bench/lean4/optimized/CollectAxioms.ll index b08676a8a4b..2872e79faee 100644 --- a/bench/lean4/optimized/CollectAxioms.ll +++ b/bench/lean4/optimized/CollectAxioms.ll @@ -6012,17 +6012,17 @@ define noalias nonnull ptr @l_Array_foldlMUnsafe_fold___at_Lean_CollectAxioms_co store i32 %11, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit12 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit12, label %13 + br i1 %.not.i, label %lean_dec.exit12, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %13, %12, %10 - %14 = getelementptr i8, ptr %2, i64 8 - %.val17 = load i64, ptr %14, align 8, !tbaa !12 +lean_dec.exit12: ; preds = %16, %15, %10 + %17 = getelementptr i8, ptr %2, i64 8 + %.val17 = load i64, ptr %17, align 8, !tbaa !12 %15 = load i32, ptr %2, align 8, !tbaa !4 %16 = icmp sgt i32 %15, 1 br i1 %16, label %17, label %19, !prof !9 @@ -6032,41 +6032,41 @@ lean_dec.exit12: ; preds = %13, %12, %10 store i32 %18, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit11 -19: ; preds = %lean_dec.exit12 +25: ; preds = %lean_dec.exit12 %.not.i13 = icmp eq i32 %15, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %20 + br i1 %.not.i13, label %lean_dec.exit11, label %26 -20: ; preds = %19 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %20, %19, %17 - %21 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_CollectAxioms_collect___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val17, ptr noundef %3, ptr noundef %4, ptr noundef %5) - %22 = ptrtoint ptr %0 to i64 - %23 = and i64 %22, 1 - %.not19 = icmp eq i64 %23, 0 - br i1 %.not19, label %24, label %lean_dec.exit - -24: ; preds = %lean_dec.exit11 - %25 = load i32, ptr %0, align 4, !tbaa !4 - %26 = icmp sgt i32 %25, 1 - br i1 %26, label %27, label %29, !prof !9 - -27: ; preds = %24 - %28 = add nsw i32 %25, -1 - store i32 %28, ptr %0, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %26, %25, %17 + %27 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_CollectAxioms_collect___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val17, ptr noundef %3, ptr noundef %4, ptr noundef %5) + %28 = ptrtoint ptr %0 to i64 + %29 = and i64 %28, 1 + %.not19 = icmp eq i64 %29, 0 + br i1 %.not19, label %30, label %lean_dec.exit + +30: ; preds = %lean_dec.exit11 + %31 = load i32, ptr %0, align 4, !tbaa !4 + %32 = icmp sgt i32 %31, 1 + br i1 %32, label %33, label %35, !prof !9 + +33: ; preds = %30 + %34 = add nsw i32 %31, -1 + store i32 %34, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -29: ; preds = %24 - %.not.i15 = icmp eq i32 %25, 0 - br i1 %.not.i15, label %lean_dec.exit, label %30 +35: ; preds = %30 + %.not.i15 = icmp eq i32 %31, 0 + br i1 %.not.i15, label %lean_dec.exit, label %36 -30: ; preds = %29 +36: ; preds = %35 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 - ret ptr %21 +lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 + ret ptr %27 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/CollectFVars.ll b/bench/lean4/optimized/CollectFVars.ll index e81b4aa9e06..bd0d7554343 100644 --- a/bench/lean4/optimized/CollectFVars.ll +++ b/bench/lean4/optimized/CollectFVars.ll @@ -10866,61 +10866,61 @@ define ptr @l_Array_foldrMUnsafe_fold___at_Lean_Meta_removeUnused___spec__2___bo store i32 %14, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit15 -15: ; preds = %9 +18: ; preds = %9 %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit15, label %16 + br i1 %.not.i, label %lean_dec.exit15, label %19 -16: ; preds = %15 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit15 -lean_dec.exit15: ; preds = %16, %15, %13 - %17 = getelementptr i8, ptr %2, i64 8 - %.val20 = load i64, ptr %17, align 8, !tbaa !12 +lean_dec.exit15: ; preds = %19, %18, %13 + %20 = getelementptr i8, ptr %2, i64 8 + %.val20 = load i64, ptr %20, align 8, !tbaa !12 %18 = load i32, ptr %2, align 8, !tbaa !4 %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 + br i1 %19, label %26, label %22, !prof !11 -20: ; preds = %lean_dec.exit15 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %2, align 4, !tbaa !4 +26: ; preds = %lean_dec.exit15 + %27 = add nsw i32 %18, -1 + store i32 %27, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit14 -22: ; preds = %lean_dec.exit15 +28: ; preds = %lean_dec.exit15 %.not.i16 = icmp eq i32 %18, 0 - br i1 %.not.i16, label %lean_dec.exit14, label %23 + br i1 %.not.i16, label %lean_dec.exit14, label %29 -23: ; preds = %22 +29: ; preds = %28 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit14 -lean_dec.exit14: ; preds = %23, %22, %20 - %24 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_Meta_removeUnused___spec__2(ptr noundef %0, i64 noundef %.val, i64 noundef %.val20, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) - %25 = ptrtoint ptr %0 to i64 - %26 = and i64 %25, 1 - %.not22 = icmp eq i64 %26, 0 - br i1 %.not22, label %27, label %lean_dec.exit - -27: ; preds = %lean_dec.exit14 - %28 = load i32, ptr %0, align 4, !tbaa !4 - %29 = icmp sgt i32 %28, 1 - br i1 %29, label %30, label %32, !prof !11 - -30: ; preds = %27 - %31 = add nsw i32 %28, -1 - store i32 %31, ptr %0, align 4, !tbaa !4 +lean_dec.exit14: ; preds = %29, %28, %26 + %30 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_Meta_removeUnused___spec__2(ptr noundef %0, i64 noundef %.val, i64 noundef %.val20, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) + %31 = ptrtoint ptr %0 to i64 + %32 = and i64 %31, 1 + %.not22 = icmp eq i64 %32, 0 + br i1 %.not22, label %33, label %lean_dec.exit + +33: ; preds = %lean_dec.exit14 + %34 = load i32, ptr %0, align 4, !tbaa !4 + %35 = icmp sgt i32 %34, 1 + br i1 %35, label %36, label %38, !prof !11 + +36: ; preds = %33 + %37 = add nsw i32 %34, -1 + store i32 %37, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -32: ; preds = %27 - %.not.i18 = icmp eq i32 %28, 0 - br i1 %.not.i18, label %lean_dec.exit, label %33 +38: ; preds = %33 + %.not.i18 = icmp eq i32 %34, 0 + br i1 %.not.i18, label %lean_dec.exit, label %39 -33: ; preds = %32 +39: ; preds = %38 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %33, %32, %30, %lean_dec.exit14 - ret ptr %24 +lean_dec.exit: ; preds = %39, %38, %36, %lean_dec.exit14 + ret ptr %30 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ConstFolding.ll b/bench/lean4/optimized/ConstFolding.ll index d13eeb13bed..afdaa810b96 100644 --- a/bench/lean4/optimized/ConstFolding.ll +++ b/bench/lean4/optimized/ConstFolding.ll @@ -330,44 +330,44 @@ define nonnull ptr @l_Lean_Compiler_isOfNat___lambda__1___boxed(ptr noundef %0, store i32 %9, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit5 -10: ; preds = %2 +13: ; preds = %2 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit5, label %11 + br i1 %.not.i, label %lean_dec.exit5, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit5 -lean_dec.exit5: ; preds = %11, %10, %8 - %12 = ptrtoint ptr %0 to i64 - %13 = and i64 %12, 1 - %.not8 = icmp eq i64 %13, 0 - br i1 %.not8, label %14, label %lean_dec.exit +lean_dec.exit5: ; preds = %14, %13, %8 + %15 = ptrtoint ptr %0 to i64 + %16 = and i64 %15, 1 + %.not8 = icmp eq i64 %16, 0 + br i1 %.not8, label %17, label %lean_dec.exit -14: ; preds = %lean_dec.exit5 - %15 = load i32, ptr %0, align 4, !tbaa !8 - %16 = icmp sgt i32 %15, 1 - br i1 %16, label %17, label %19, !prof !11 +17: ; preds = %lean_dec.exit5 + %18 = load i32, ptr %0, align 4, !tbaa !8 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 -17: ; preds = %14 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %0, align 4, !tbaa !8 +20: ; preds = %17 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -19: ; preds = %14 - %.not.i6 = icmp eq i32 %15, 0 - br i1 %.not.i6, label %lean_dec.exit, label %20 +22: ; preds = %17 + %.not.i6 = icmp eq i32 %18, 0 + br i1 %.not.i6, label %lean_dec.exit, label %23 -20: ; preds = %19 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit5 - %21 = zext i8 %5 to i64 - %22 = shl nuw nsw i64 %21, 1 - %23 = or disjoint i64 %22, 1 - %24 = inttoptr i64 %23 to ptr - ret ptr %24 +lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit5 + %24 = zext i8 %5 to i64 + %25 = shl nuw nsw i64 %24, 1 + %26 = or disjoint i64 %25, 1 + %27 = inttoptr i64 %26 to ptr + ret ptr %27 } declare zeroext i8 @l_List_any___rarg(ptr noundef, ptr noundef) local_unnamed_addr #1 @@ -454,44 +454,44 @@ define nonnull ptr @l_Lean_Compiler_isToNat___lambda__1___boxed(ptr noundef %0, store i32 %9, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit5 -10: ; preds = %2 +13: ; preds = %2 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit5, label %11 + br i1 %.not.i, label %lean_dec.exit5, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit5 -lean_dec.exit5: ; preds = %11, %10, %8 - %12 = ptrtoint ptr %0 to i64 - %13 = and i64 %12, 1 - %.not8 = icmp eq i64 %13, 0 - br i1 %.not8, label %14, label %lean_dec.exit +lean_dec.exit5: ; preds = %14, %13, %8 + %15 = ptrtoint ptr %0 to i64 + %16 = and i64 %15, 1 + %.not8 = icmp eq i64 %16, 0 + br i1 %.not8, label %17, label %lean_dec.exit -14: ; preds = %lean_dec.exit5 - %15 = load i32, ptr %0, align 4, !tbaa !8 - %16 = icmp sgt i32 %15, 1 - br i1 %16, label %17, label %19, !prof !11 +17: ; preds = %lean_dec.exit5 + %18 = load i32, ptr %0, align 4, !tbaa !8 + %19 = icmp sgt i32 %18, 1 + br i1 %19, label %20, label %22, !prof !11 -17: ; preds = %14 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %0, align 4, !tbaa !8 +20: ; preds = %17 + %21 = add nsw i32 %18, -1 + store i32 %21, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -19: ; preds = %14 - %.not.i6 = icmp eq i32 %15, 0 - br i1 %.not.i6, label %lean_dec.exit, label %20 +22: ; preds = %17 + %.not.i6 = icmp eq i32 %18, 0 + br i1 %.not.i6, label %lean_dec.exit, label %23 -20: ; preds = %19 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %20, %19, %17, %lean_dec.exit5 - %21 = zext i8 %5 to i64 - %22 = shl nuw nsw i64 %21, 1 - %23 = or disjoint i64 %22, 1 - %24 = inttoptr i64 %23 to ptr - ret ptr %24 +lean_dec.exit: ; preds = %23, %22, %20, %lean_dec.exit5 + %24 = zext i8 %5 to i64 + %25 = shl nuw nsw i64 %24, 1 + %26 = or disjoint i64 %25, 1 + %27 = inttoptr i64 %26 to ptr + ret ptr %27 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Database.ll b/bench/lean4/optimized/Database.ll index e85efc3a699..57e35d6e64f 100644 --- a/bench/lean4/optimized/Database.ll +++ b/bench/lean4/optimized/Database.ll @@ -2116,17 +2116,17 @@ define ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_defaultGetZoneRu store i32 %14, ptr %5, align 4, !tbaa !4 br label %lean_dec.exit19 -15: ; preds = %9 +18: ; preds = %9 %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit19, label %16 + br i1 %.not.i, label %lean_dec.exit19, label %19 -16: ; preds = %15 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %5) #4 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %16, %15, %13 - %17 = getelementptr i8, ptr %6, i64 8 - %.val28 = load i64, ptr %17, align 8, !tbaa !13 +lean_dec.exit19: ; preds = %19, %18, %13 + %20 = getelementptr i8, ptr %6, i64 8 + %.val28 = load i64, ptr %20, align 8, !tbaa !13 %18 = load i32, ptr %6, align 8, !tbaa !4 %19 = icmp sgt i32 %18, 1 br i1 %19, label %20, label %22, !prof !9 @@ -2136,89 +2136,89 @@ lean_dec.exit19: ; preds = %16, %15, %13 store i32 %21, ptr %6, align 4, !tbaa !4 br label %lean_dec.exit18 -22: ; preds = %lean_dec.exit19 +28: ; preds = %lean_dec.exit19 %.not.i20 = icmp eq i32 %18, 0 - br i1 %.not.i20, label %lean_dec.exit18, label %23 + br i1 %.not.i20, label %lean_dec.exit18, label %29 -23: ; preds = %22 +29: ; preds = %28 tail call void @lean_dec_ref_cold(ptr noundef nonnull %6) #4 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %23, %22, %20 - %24 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_defaultGetZoneRules___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) - %25 = ptrtoint ptr %4 to i64 - %26 = and i64 %25, 1 - %.not30 = icmp eq i64 %26, 0 - br i1 %.not30, label %27, label %lean_dec.exit17 - -27: ; preds = %lean_dec.exit18 - %28 = load i32, ptr %4, align 4, !tbaa !4 - %29 = icmp sgt i32 %28, 1 - br i1 %29, label %30, label %32, !prof !9 - -30: ; preds = %27 - %31 = add nsw i32 %28, -1 - store i32 %31, ptr %4, align 4, !tbaa !4 +lean_dec.exit18: ; preds = %29, %28, %20 + %30 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_defaultGetZoneRules___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) + %31 = ptrtoint ptr %4 to i64 + %32 = and i64 %31, 1 + %.not30 = icmp eq i64 %32, 0 + br i1 %.not30, label %33, label %lean_dec.exit17 + +33: ; preds = %lean_dec.exit18 + %34 = load i32, ptr %4, align 4, !tbaa !4 + %35 = icmp sgt i32 %34, 1 + br i1 %35, label %36, label %38, !prof !9 + +36: ; preds = %33 + %37 = add nsw i32 %34, -1 + store i32 %37, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit17 -32: ; preds = %27 - %.not.i22 = icmp eq i32 %28, 0 - br i1 %.not.i22, label %lean_dec.exit17, label %33 +38: ; preds = %33 + %.not.i22 = icmp eq i32 %34, 0 + br i1 %.not.i22, label %lean_dec.exit17, label %39 -33: ; preds = %32 +39: ; preds = %38 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %33, %32, %30, %lean_dec.exit18 - %34 = ptrtoint ptr %2 to i64 - %35 = and i64 %34, 1 - %.not31 = icmp eq i64 %35, 0 - br i1 %.not31, label %36, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %39, %38, %36, %lean_dec.exit18 + %40 = ptrtoint ptr %2 to i64 + %41 = and i64 %40, 1 + %.not31 = icmp eq i64 %41, 0 + br i1 %.not31, label %42, label %lean_dec.exit16 -36: ; preds = %lean_dec.exit17 - %37 = load i32, ptr %2, align 4, !tbaa !4 - %38 = icmp sgt i32 %37, 1 - br i1 %38, label %39, label %41, !prof !9 +42: ; preds = %lean_dec.exit17 + %43 = load i32, ptr %2, align 4, !tbaa !4 + %44 = icmp sgt i32 %43, 1 + br i1 %44, label %45, label %47, !prof !9 -39: ; preds = %36 - %40 = add nsw i32 %37, -1 - store i32 %40, ptr %2, align 4, !tbaa !4 +45: ; preds = %42 + %46 = add nsw i32 %43, -1 + store i32 %46, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit16 -41: ; preds = %36 - %.not.i24 = icmp eq i32 %37, 0 - br i1 %.not.i24, label %lean_dec.exit16, label %42 +47: ; preds = %42 + %.not.i24 = icmp eq i32 %43, 0 + br i1 %.not.i24, label %lean_dec.exit16, label %48 -42: ; preds = %41 +48: ; preds = %47 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %42, %41, %39, %lean_dec.exit17 - %43 = ptrtoint ptr %1 to i64 - %44 = and i64 %43, 1 - %.not32 = icmp eq i64 %44, 0 - br i1 %.not32, label %45, label %lean_dec.exit +lean_dec.exit16: ; preds = %48, %47, %45, %lean_dec.exit17 + %49 = ptrtoint ptr %1 to i64 + %50 = and i64 %49, 1 + %.not32 = icmp eq i64 %50, 0 + br i1 %.not32, label %51, label %lean_dec.exit -45: ; preds = %lean_dec.exit16 - %46 = load i32, ptr %1, align 4, !tbaa !4 - %47 = icmp sgt i32 %46, 1 - br i1 %47, label %48, label %50, !prof !9 +51: ; preds = %lean_dec.exit16 + %52 = load i32, ptr %1, align 4, !tbaa !4 + %53 = icmp sgt i32 %52, 1 + br i1 %53, label %54, label %56, !prof !9 -48: ; preds = %45 - %49 = add nsw i32 %46, -1 - store i32 %49, ptr %1, align 4, !tbaa !4 +54: ; preds = %51 + %55 = add nsw i32 %52, -1 + store i32 %55, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -50: ; preds = %45 - %.not.i26 = icmp eq i32 %46, 0 - br i1 %.not.i26, label %lean_dec.exit, label %51 +56: ; preds = %51 + %.not.i26 = icmp eq i32 %52, 0 + br i1 %.not.i26, label %lean_dec.exit, label %57 -51: ; preds = %50 +57: ; preds = %56 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %51, %50, %48, %lean_dec.exit16 - ret ptr %24 +lean_dec.exit: ; preds = %57, %56, %54, %lean_dec.exit16 + ret ptr %30 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Delta.ll b/bench/lean4/optimized/Delta.ll index 66fcdf0fc04..68b1a04162c 100644 --- a/bench/lean4/optimized/Delta.ll +++ b/bench/lean4/optimized/Delta.ll @@ -1573,17 +1573,17 @@ define ptr @l_Lean_Elab_Tactic_Conv_evalDelta___lambda__1___boxed(ptr noundef %0 store i32 %17, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit16 -18: ; preds = %12 +21: ; preds = %12 %.not.i = icmp eq i32 %14, 0 - br i1 %.not.i, label %lean_dec.exit16, label %19 + br i1 %.not.i, label %lean_dec.exit16, label %22 -19: ; preds = %18 +22: ; preds = %21 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %19, %18, %16 - %20 = getelementptr i8, ptr %1, i64 8 - %.val19 = load i64, ptr %20, align 8, !tbaa !14 +lean_dec.exit16: ; preds = %22, %21, %16 + %23 = getelementptr i8, ptr %1, i64 8 + %.val19 = load i64, ptr %23, align 8, !tbaa !14 %21 = load i32, ptr %1, align 8, !tbaa !4 %22 = icmp sgt i32 %21, 1 br i1 %22, label %23, label %25, !prof !9 @@ -1593,17 +1593,17 @@ lean_dec.exit16: ; preds = %19, %18, %16 store i32 %24, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -25: ; preds = %lean_dec.exit16 +31: ; preds = %lean_dec.exit16 %.not.i17 = icmp eq i32 %21, 0 - br i1 %.not.i17, label %lean_dec.exit, label %26 + br i1 %.not.i17, label %lean_dec.exit, label %32 -26: ; preds = %25 +32: ; preds = %31 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %26, %25, %23 - %27 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDelta___lambda__1(i64 noundef %.val, i64 noundef %.val19, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11) - ret ptr %27 +lean_dec.exit: ; preds = %32, %31, %23 + %33 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDelta___lambda__1(i64 noundef %.val, i64 noundef %.val19, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11) + ret ptr %33 } declare ptr @l_Lean_Elab_Tactic_withMainContext___rarg(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1 diff --git a/bench/lean4/optimized/EligibleHeaderDecls.ll b/bench/lean4/optimized/EligibleHeaderDecls.ll index 258a6fe6a11..16d8b113815 100644 --- a/bench/lean4/optimized/EligibleHeaderDecls.ll +++ b/bench/lean4/optimized/EligibleHeaderDecls.ll @@ -3083,61 +3083,61 @@ define noalias nonnull ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completio store i32 %11, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit12 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit12, label %13 + br i1 %.not.i, label %lean_dec.exit12, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %13, %12, %10 - %14 = getelementptr i8, ptr %3, i64 8 - %.val17 = load i64, ptr %14, align 8, !tbaa !12 +lean_dec.exit12: ; preds = %16, %15, %10 + %17 = getelementptr i8, ptr %3, i64 8 + %.val17 = load i64, ptr %17, align 8, !tbaa !12 %15 = load i32, ptr %3, align 8, !tbaa !4 %16 = icmp sgt i32 %15, 1 br i1 %16, label %17, label %19, !prof !11 -17: ; preds = %lean_dec.exit12 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %3, align 4, !tbaa !4 +23: ; preds = %lean_dec.exit12 + %24 = add nsw i32 %15, -1 + store i32 %24, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit11 -19: ; preds = %lean_dec.exit12 +25: ; preds = %lean_dec.exit12 %.not.i13 = icmp eq i32 %15, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %20 + br i1 %.not.i13, label %lean_dec.exit11, label %26 -20: ; preds = %19 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %20, %19, %17 - %21 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_getEligibleHeaderDecls___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) - %22 = ptrtoint ptr %1 to i64 - %23 = and i64 %22, 1 - %.not19 = icmp eq i64 %23, 0 - br i1 %.not19, label %24, label %lean_dec.exit +lean_dec.exit11: ; preds = %26, %25, %23 + %27 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_getEligibleHeaderDecls___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) + %28 = ptrtoint ptr %1 to i64 + %29 = and i64 %28, 1 + %.not19 = icmp eq i64 %29, 0 + br i1 %.not19, label %30, label %lean_dec.exit -24: ; preds = %lean_dec.exit11 - %25 = load i32, ptr %1, align 4, !tbaa !4 - %26 = icmp sgt i32 %25, 1 - br i1 %26, label %27, label %29, !prof !11 +30: ; preds = %lean_dec.exit11 + %31 = load i32, ptr %1, align 4, !tbaa !4 + %32 = icmp sgt i32 %31, 1 + br i1 %32, label %33, label %35, !prof !11 -27: ; preds = %24 - %28 = add nsw i32 %25, -1 - store i32 %28, ptr %1, align 4, !tbaa !4 +33: ; preds = %30 + %34 = add nsw i32 %31, -1 + store i32 %34, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -29: ; preds = %24 - %.not.i15 = icmp eq i32 %25, 0 - br i1 %.not.i15, label %lean_dec.exit, label %30 +35: ; preds = %30 + %.not.i15 = icmp eq i32 %31, 0 + br i1 %.not.i15, label %lean_dec.exit, label %36 -30: ; preds = %29 +36: ; preds = %35 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 - ret ptr %21 +lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 + ret ptr %27 } ; Function Attrs: nounwind uwtable @@ -4017,38 +4017,38 @@ define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDec store i32 %11, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit10 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit10, label %13 + br i1 %.not.i, label %lean_dec.exit10, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %13, %12, %10 - %14 = getelementptr i8, ptr %4, i64 8 - %.val = load i64, ptr %14, align 8, !tbaa !12 +lean_dec.exit10: ; preds = %16, %15, %10 + %17 = getelementptr i8, ptr %4, i64 8 + %.val = load i64, ptr %17, align 8, !tbaa !12 %15 = load i32, ptr %4, align 8, !tbaa !4 %16 = icmp sgt i32 %15, 1 br i1 %16, label %17, label %19, !prof !11 -17: ; preds = %lean_dec.exit10 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %4, align 4, !tbaa !4 +23: ; preds = %lean_dec.exit10 + %24 = add nsw i32 %15, -1 + store i32 %24, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit -19: ; preds = %lean_dec.exit10 +25: ; preds = %lean_dec.exit10 %.not.i11 = icmp eq i32 %15, 0 - br i1 %.not.i11, label %lean_dec.exit, label %20 + br i1 %.not.i11, label %lean_dec.exit, label %26 -20: ; preds = %19 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %20, %19, %17 - %21 = add i64 %.val13, 1 - %22 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %21, i64 noundef %.val, ptr noundef %5) - ret ptr %22 +lean_dec.exit: ; preds = %26, %25, %23 + %27 = add i64 %.val13, 1 + %28 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %27, i64 noundef %.val, ptr noundef %5) + ret ptr %28 } ; Function Attrs: nounwind uwtable @@ -4088,37 +4088,37 @@ define ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDec store i32 %11, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit10 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit10, label %13 + br i1 %.not.i, label %lean_dec.exit10, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %13, %12, %10 - %14 = getelementptr i8, ptr %4, i64 8 - %.val = load i64, ptr %14, align 8, !tbaa !12 +lean_dec.exit10: ; preds = %16, %15, %10 + %17 = getelementptr i8, ptr %4, i64 8 + %.val = load i64, ptr %17, align 8, !tbaa !12 %15 = load i32, ptr %4, align 8, !tbaa !4 %16 = icmp sgt i32 %15, 1 br i1 %16, label %17, label %19, !prof !11 -17: ; preds = %lean_dec.exit10 - %18 = add nsw i32 %15, -1 - store i32 %18, ptr %4, align 4, !tbaa !4 +23: ; preds = %lean_dec.exit10 + %24 = add nsw i32 %15, -1 + store i32 %24, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit -19: ; preds = %lean_dec.exit10 +25: ; preds = %lean_dec.exit10 %.not.i11 = icmp eq i32 %15, 0 - br i1 %.not.i11, label %lean_dec.exit, label %20 + br i1 %.not.i11, label %lean_dec.exit, label %26 -20: ; preds = %19 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %20, %19, %17 - %21 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %0, ptr noundef %1, ptr noundef %2, i64 noundef %.val13, i64 noundef %.val, ptr noundef %5) - ret ptr %21 +lean_dec.exit: ; preds = %26, %25, %23 + %27 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lean_Server_Completion_forEligibleDeclsM___spec__4___rarg(ptr noundef %0, ptr noundef %1, ptr noundef %2, i64 noundef %.val13, i64 noundef %.val, ptr noundef %5) + ret ptr %27 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ElimDeadVars.ll b/bench/lean4/optimized/ElimDeadVars.ll index cdc2229d03d..607ea73ef69 100644 --- a/bench/lean4/optimized/ElimDeadVars.ll +++ b/bench/lean4/optimized/ElimDeadVars.ll @@ -954,7 +954,7 @@ lean_obj_tag.exit: ; preds = %lean_dec.exit55 %.val.i66 = load i32, ptr %34, align 4 %.mask = and i32 %.val.i66, -16777216 %35 = icmp eq i32 %.mask, 167772160 - br i1 %35, label %38, label %109 + br i1 %35, label %38, label %112 lean_obj_tag.exit.thread: ; preds = %lean_dec.exit55 %36 = and i64 %15, 8589934590 @@ -1146,29 +1146,29 @@ lean_alloc_ctor.exit: ; preds = %lean_dec.exit store i32 2, ptr %101, align 8, !tbaa !8 br label %l_Lean_IR_reshapeWithoutDead.exit -109: ; preds = %lean_obj_tag.exit +112: ; preds = %lean_obj_tag.exit %.val.i.i85 = load i32, ptr %14, align 4, !tbaa !8 - %110 = icmp sgt i32 %.val.i.i85, 0 - br i1 %110, label %111, label %113, !prof !13 + %113 = icmp sgt i32 %.val.i.i85, 0 + br i1 %113, label %114, label %116, !prof !13 -111: ; preds = %109 - %112 = add nuw i32 %.val.i.i85, 1 - store i32 %112, ptr %14, align 4, !tbaa !8 +114: ; preds = %112 + %115 = add nuw i32 %.val.i.i85, 1 + store i32 %115, ptr %14, align 4, !tbaa !8 br label %l_Lean_IR_reshapeWithoutDead.exit -113: ; preds = %109 +116: ; preds = %112 %.not.i.i86 = icmp eq i32 %.val.i.i85, 0 - br i1 %.not.i.i86, label %l_Lean_IR_reshapeWithoutDead.exit, label %114 + br i1 %.not.i.i86, label %l_Lean_IR_reshapeWithoutDead.exit, label %117 -114: ; preds = %113 +117: ; preds = %116 tail call void @lean_inc_ref_cold(ptr noundef nonnull %14) #3 br label %l_Lean_IR_reshapeWithoutDead.exit -l_Lean_IR_reshapeWithoutDead.exit: ; preds = %114, %113, %111, %lean_obj_tag.exit.thread, %lean_alloc_ctor.exit, %50, %49, %47, %40 +l_Lean_IR_reshapeWithoutDead.exit: ; preds = %117, %116, %114, %lean_obj_tag.exit.thread, %lean_alloc_ctor.exit, %50, %49, %47, %40 %.sink100 = phi ptr [ %14, %40 ], [ %14, %47 ], [ %14, %49 ], [ %14, %50 ], [ %101, %lean_alloc_ctor.exit ], [ %14, %lean_obj_tag.exit.thread ], [ %14, %111 ], [ %14, %113 ], [ %14, %114 ] - %115 = tail call ptr @l_Lean_IR_FnBody_freeIndices(ptr noundef %.sink100) #3 - %116 = tail call ptr @l_Lean_IR_reshapeWithoutDead_reshape(ptr noundef %33, ptr noundef %.sink100, ptr noundef %115) - ret ptr %116 + %118 = tail call ptr @l_Lean_IR_FnBody_freeIndices(ptr noundef %.sink100) #3 + %119 = tail call ptr @l_Lean_IR_reshapeWithoutDead_reshape(ptr noundef %33, ptr noundef %.sink100, ptr noundef %118) + ret ptr %119 } ; Function Attrs: nounwind uwtable @@ -1620,37 +1620,37 @@ define ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__1___boxe store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %11, align 8, !tbaa !11 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %14, align 8, !tbaa !11 %12 = load i32, ptr %1, align 8, !tbaa !8 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !13 -14: ; preds = %lean_dec.exit7 - %15 = add nsw i32 %12, -1 - store i32 %15, ptr %1, align 4, !tbaa !8 +20: ; preds = %lean_dec.exit7 + %21 = add nsw i32 %12, -1 + store i32 %21, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable @@ -1666,37 +1666,37 @@ define ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__2___boxe store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %11, align 8, !tbaa !11 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %14, align 8, !tbaa !11 %12 = load i32, ptr %1, align 8, !tbaa !8 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !13 -14: ; preds = %lean_dec.exit7 - %15 = add nsw i32 %12, -1 - store i32 %15, ptr %1, align 4, !tbaa !8 +20: ; preds = %lean_dec.exit7 + %21 = add nsw i32 %12, -1 + store i32 %21, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__2(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_IR_FnBody_elimDead___spec__2(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/EmbeddedConstraint.ll b/bench/lean4/optimized/EmbeddedConstraint.ll index 568d69aff98..86fd2c85611 100644 --- a/bench/lean4/optimized/EmbeddedConstraint.ll +++ b/bench/lean4/optimized/EmbeddedConstraint.ll @@ -10555,157 +10555,157 @@ define ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Elab_Tactic_BVDecide_Frontend store i32 %18, ptr %3, align 4, !tbaa !8 br label %lean_dec.exit27 -19: ; preds = %13 +22: ; preds = %13 %.not.i = icmp eq i32 %15, 0 - br i1 %.not.i, label %lean_dec.exit27, label %20 + br i1 %.not.i, label %lean_dec.exit27, label %23 -20: ; preds = %19 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit27 -lean_dec.exit27: ; preds = %20, %19, %17 - %21 = getelementptr i8, ptr %4, i64 8 - %.val40 = load i64, ptr %21, align 8, !tbaa !12 +lean_dec.exit27: ; preds = %23, %22, %17 + %24 = getelementptr i8, ptr %4, i64 8 + %.val40 = load i64, ptr %24, align 8, !tbaa !12 %22 = load i32, ptr %4, align 8, !tbaa !8 %23 = icmp sgt i32 %22, 1 br i1 %23, label %24, label %26, !prof !11 -24: ; preds = %lean_dec.exit27 - %25 = add nsw i32 %22, -1 - store i32 %25, ptr %4, align 4, !tbaa !8 +30: ; preds = %lean_dec.exit27 + %31 = add nsw i32 %22, -1 + store i32 %31, ptr %4, align 4, !tbaa !8 br label %lean_dec.exit26 -26: ; preds = %lean_dec.exit27 +32: ; preds = %lean_dec.exit27 %.not.i28 = icmp eq i32 %22, 0 - br i1 %.not.i28, label %lean_dec.exit26, label %27 + br i1 %.not.i28, label %lean_dec.exit26, label %33 -27: ; preds = %26 +33: ; preds = %32 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit26 -lean_dec.exit26: ; preds = %27, %26, %24 - %28 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_embeddedConstraintPass___elambda__1___spec__1(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val40, ptr noundef %5, ptr poison, ptr poison, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) - %29 = ptrtoint ptr %7 to i64 - %30 = and i64 %29, 1 - %.not42 = icmp eq i64 %30, 0 - br i1 %.not42, label %31, label %lean_dec.exit25 +lean_dec.exit26: ; preds = %33, %32, %30 + %34 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Elab_Tactic_BVDecide_Frontend_Normalize_embeddedConstraintPass___elambda__1___spec__1(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val40, ptr noundef %5, ptr poison, ptr poison, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) + %35 = ptrtoint ptr %7 to i64 + %36 = and i64 %35, 1 + %.not42 = icmp eq i64 %36, 0 + br i1 %.not42, label %37, label %lean_dec.exit25 -31: ; preds = %lean_dec.exit26 - %32 = load i32, ptr %7, align 4, !tbaa !8 - %33 = icmp sgt i32 %32, 1 - br i1 %33, label %34, label %36, !prof !11 +37: ; preds = %lean_dec.exit26 + %38 = load i32, ptr %7, align 4, !tbaa !8 + %39 = icmp sgt i32 %38, 1 + br i1 %39, label %40, label %42, !prof !11 -34: ; preds = %31 - %35 = add nsw i32 %32, -1 - store i32 %35, ptr %7, align 4, !tbaa !8 +40: ; preds = %37 + %41 = add nsw i32 %38, -1 + store i32 %41, ptr %7, align 4, !tbaa !8 br label %lean_dec.exit25 -36: ; preds = %31 - %.not.i30 = icmp eq i32 %32, 0 - br i1 %.not.i30, label %lean_dec.exit25, label %37 +42: ; preds = %37 + %.not.i30 = icmp eq i32 %38, 0 + br i1 %.not.i30, label %lean_dec.exit25, label %43 -37: ; preds = %36 +43: ; preds = %42 tail call void @lean_dec_ref_cold(ptr noundef nonnull %7) #4 br label %lean_dec.exit25 -lean_dec.exit25: ; preds = %37, %36, %34, %lean_dec.exit26 - %38 = ptrtoint ptr %6 to i64 - %39 = and i64 %38, 1 - %.not43 = icmp eq i64 %39, 0 - br i1 %.not43, label %40, label %lean_dec.exit24 +lean_dec.exit25: ; preds = %43, %42, %40, %lean_dec.exit26 + %44 = ptrtoint ptr %6 to i64 + %45 = and i64 %44, 1 + %.not43 = icmp eq i64 %45, 0 + br i1 %.not43, label %46, label %lean_dec.exit24 -40: ; preds = %lean_dec.exit25 - %41 = load i32, ptr %6, align 4, !tbaa !8 - %42 = icmp sgt i32 %41, 1 - br i1 %42, label %43, label %45, !prof !11 +46: ; preds = %lean_dec.exit25 + %47 = load i32, ptr %6, align 4, !tbaa !8 + %48 = icmp sgt i32 %47, 1 + br i1 %48, label %49, label %51, !prof !11 -43: ; preds = %40 - %44 = add nsw i32 %41, -1 - store i32 %44, ptr %6, align 4, !tbaa !8 +49: ; preds = %46 + %50 = add nsw i32 %47, -1 + store i32 %50, ptr %6, align 4, !tbaa !8 br label %lean_dec.exit24 -45: ; preds = %40 - %.not.i32 = icmp eq i32 %41, 0 - br i1 %.not.i32, label %lean_dec.exit24, label %46 +51: ; preds = %46 + %.not.i32 = icmp eq i32 %47, 0 + br i1 %.not.i32, label %lean_dec.exit24, label %52 -46: ; preds = %45 +52: ; preds = %51 tail call void @lean_dec_ref_cold(ptr noundef nonnull %6) #4 br label %lean_dec.exit24 -lean_dec.exit24: ; preds = %46, %45, %43, %lean_dec.exit25 - %47 = ptrtoint ptr %2 to i64 - %48 = and i64 %47, 1 - %.not44 = icmp eq i64 %48, 0 - br i1 %.not44, label %49, label %lean_dec.exit23 +lean_dec.exit24: ; preds = %52, %51, %49, %lean_dec.exit25 + %53 = ptrtoint ptr %2 to i64 + %54 = and i64 %53, 1 + %.not44 = icmp eq i64 %54, 0 + br i1 %.not44, label %55, label %lean_dec.exit23 -49: ; preds = %lean_dec.exit24 - %50 = load i32, ptr %2, align 4, !tbaa !8 - %51 = icmp sgt i32 %50, 1 - br i1 %51, label %52, label %54, !prof !11 +55: ; preds = %lean_dec.exit24 + %56 = load i32, ptr %2, align 4, !tbaa !8 + %57 = icmp sgt i32 %56, 1 + br i1 %57, label %58, label %60, !prof !11 -52: ; preds = %49 - %53 = add nsw i32 %50, -1 - store i32 %53, ptr %2, align 4, !tbaa !8 +58: ; preds = %55 + %59 = add nsw i32 %56, -1 + store i32 %59, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit23 -54: ; preds = %49 - %.not.i34 = icmp eq i32 %50, 0 - br i1 %.not.i34, label %lean_dec.exit23, label %55 +60: ; preds = %55 + %.not.i34 = icmp eq i32 %56, 0 + br i1 %.not.i34, label %lean_dec.exit23, label %61 -55: ; preds = %54 +61: ; preds = %60 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit23 -lean_dec.exit23: ; preds = %55, %54, %52, %lean_dec.exit24 - %56 = ptrtoint ptr %1 to i64 - %57 = and i64 %56, 1 - %.not45 = icmp eq i64 %57, 0 - br i1 %.not45, label %58, label %lean_dec.exit22 +lean_dec.exit23: ; preds = %61, %60, %58, %lean_dec.exit24 + %62 = ptrtoint ptr %1 to i64 + %63 = and i64 %62, 1 + %.not45 = icmp eq i64 %63, 0 + br i1 %.not45, label %64, label %lean_dec.exit22 -58: ; preds = %lean_dec.exit23 - %59 = load i32, ptr %1, align 4, !tbaa !8 - %60 = icmp sgt i32 %59, 1 - br i1 %60, label %61, label %63, !prof !11 +64: ; preds = %lean_dec.exit23 + %65 = load i32, ptr %1, align 4, !tbaa !8 + %66 = icmp sgt i32 %65, 1 + br i1 %66, label %67, label %69, !prof !11 -61: ; preds = %58 - %62 = add nsw i32 %59, -1 - store i32 %62, ptr %1, align 4, !tbaa !8 +67: ; preds = %64 + %68 = add nsw i32 %65, -1 + store i32 %68, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit22 -63: ; preds = %58 - %.not.i36 = icmp eq i32 %59, 0 - br i1 %.not.i36, label %lean_dec.exit22, label %64 +69: ; preds = %64 + %.not.i36 = icmp eq i32 %65, 0 + br i1 %.not.i36, label %lean_dec.exit22, label %70 -64: ; preds = %63 +70: ; preds = %69 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit22 -lean_dec.exit22: ; preds = %64, %63, %61, %lean_dec.exit23 - %65 = ptrtoint ptr %0 to i64 - %66 = and i64 %65, 1 - %.not46 = icmp eq i64 %66, 0 - br i1 %.not46, label %67, label %lean_dec.exit +lean_dec.exit22: ; preds = %70, %69, %67, %lean_dec.exit23 + %71 = ptrtoint ptr %0 to i64 + %72 = and i64 %71, 1 + %.not46 = icmp eq i64 %72, 0 + br i1 %.not46, label %73, label %lean_dec.exit -67: ; preds = %lean_dec.exit22 - %68 = load i32, ptr %0, align 4, !tbaa !8 - %69 = icmp sgt i32 %68, 1 - br i1 %69, label %70, label %72, !prof !11 +73: ; preds = %lean_dec.exit22 + %74 = load i32, ptr %0, align 4, !tbaa !8 + %75 = icmp sgt i32 %74, 1 + br i1 %75, label %76, label %78, !prof !11 -70: ; preds = %67 - %71 = add nsw i32 %68, -1 - store i32 %71, ptr %0, align 4, !tbaa !8 +76: ; preds = %73 + %77 = add nsw i32 %74, -1 + store i32 %77, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -72: ; preds = %67 - %.not.i38 = icmp eq i32 %68, 0 - br i1 %.not.i38, label %lean_dec.exit, label %73 +78: ; preds = %73 + %.not.i38 = icmp eq i32 %74, 0 + br i1 %.not.i38, label %lean_dec.exit, label %79 -73: ; preds = %72 +79: ; preds = %78 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %73, %72, %70, %lean_dec.exit22 - ret ptr %28 +lean_dec.exit: ; preds = %79, %78, %76, %lean_dec.exit22 + ret ptr %34 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Encode.ll b/bench/lean4/optimized/Encode.ll index 931ba340120..5c8c491a7b2 100644 --- a/bench/lean4/optimized/Encode.ll +++ b/bench/lean4/optimized/Encode.ll @@ -206,40 +206,40 @@ define noalias nonnull ptr @l_Lake_instToTomlFloat___boxed(ptr noundef %0) local %.val = load double, ptr %2, align 8, !tbaa !12 %3 = load i32, ptr %0, align 8, !tbaa !4 %4 = icmp sgt i32 %3, 1 - br i1 %4, label %5, label %7, !prof !11 + br i1 %4, label %5, label %10, !prof !11 5: ; preds = %1 %6 = add nsw i32 %3, -1 store i32 %6, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -7: ; preds = %1 +10: ; preds = %1 %.not.i = icmp eq i32 %3, 0 - br i1 %.not.i, label %lean_dec.exit, label %8 + br i1 %.not.i, label %lean_dec.exit, label %11 -8: ; preds = %7 +11: ; preds = %10 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %8, %7, %5 +lean_dec.exit: ; preds = %11, %10, %5 tail call void @lean_inc_heartbeat() #4 - %9 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 - %10 = icmp eq ptr %9, null - br i1 %10, label %11, label %l_Lake_instToTomlFloat.exit + %12 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 + %13 = icmp eq ptr %12, null + br i1 %13, label %14, label %l_Lake_instToTomlFloat.exit -11: ; preds = %lean_dec.exit +14: ; preds = %lean_dec.exit tail call void @lean_internal_panic_out_of_memory() #5 unreachable l_Lake_instToTomlFloat.exit: ; preds = %lean_dec.exit - %12 = getelementptr inbounds nuw i8, ptr %9, i64 4 - store i32 1, ptr %9, align 4, !tbaa !4 - store i32 33619992, ptr %12, align 4 - %13 = getelementptr inbounds nuw i8, ptr %9, i64 8 - store ptr inttoptr (i64 1 to ptr), ptr %13, align 8, !tbaa !9 - %14 = getelementptr inbounds nuw i8, ptr %9, i64 16 - store double %.val, ptr %14, align 8, !tbaa !12 - ret ptr %9 + %15 = getelementptr inbounds nuw i8, ptr %12, i64 4 + store i32 1, ptr %12, align 4, !tbaa !4 + store i32 33619992, ptr %15, align 4 + %16 = getelementptr inbounds nuw i8, ptr %12, i64 8 + store ptr inttoptr (i64 1 to ptr), ptr %16, align 8, !tbaa !9 + %17 = getelementptr inbounds nuw i8, ptr %12, i64 16 + store double %.val, ptr %17, align 8, !tbaa !12 + ret ptr %12 } ; Function Attrs: nounwind uwtable @@ -523,37 +523,37 @@ define ptr @l_Array_mapMUnsafe_map___at_Lake_instToTomlArray___spec__1___rarg___ store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit8 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit8, label %11 + br i1 %.not.i, label %lean_dec.exit8, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %2, i64 8 - %.val11 = load i64, ptr %12, align 8, !tbaa !14 - %13 = load i32, ptr %2, align 8, !tbaa !4 - %14 = icmp sgt i32 %13, 1 +lean_dec.exit8: ; preds = %14, %13, %11 + %15 = getelementptr i8, ptr %2, i64 8 + %.val11 = load i64, ptr %15, align 8, !tbaa !14 + %16 = load i32, ptr %2, align 8, !tbaa !4 + %17 = icmp sgt i32 %16, 1 br i1 %14, label %15, label %17, !prof !11 -15: ; preds = %lean_dec.exit8 +18: ; preds = %lean_dec.exit8 %16 = add nsw i32 %13, -1 store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit -17: ; preds = %lean_dec.exit8 +23: ; preds = %lean_dec.exit8 %.not.i9 = icmp eq i32 %13, 0 - br i1 %.not.i9, label %lean_dec.exit, label %18 + br i1 %.not.i9, label %lean_dec.exit, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %18, %17, %15 - %19 = tail call ptr @l_Array_mapMUnsafe_map___at_Lake_instToTomlArray___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) - ret ptr %19 +lean_dec.exit: ; preds = %24, %23, %18 + %25 = tail call ptr @l_Array_mapMUnsafe_map___at_Lake_instToTomlArray___spec__1___rarg(ptr noundef %0, i64 noundef %.val, i64 noundef %.val11, ptr noundef %3) + ret ptr %25 } ; Function Attrs: nounwind uwtable @@ -1021,61 +1021,61 @@ define ptr @l_Array_foldlMUnsafe_fold___at_Lake_Toml_encodeArray_x3f___spec__1__ store i32 %10, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit11 -11: ; preds = %5 - %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit11, label %12 +14: ; preds = %5 + %.not.i = icmp eq i32 %10, 0 + br i1 %.not.i, label %lean_dec.exit11, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %12, %11, %9 - %13 = getelementptr i8, ptr %3, i64 8 - %.val = load i64, ptr %13, align 8, !tbaa !14 - %14 = load i32, ptr %3, align 8, !tbaa !4 - %15 = icmp sgt i32 %14, 1 +lean_dec.exit11: ; preds = %15, %14, %12 + %16 = getelementptr i8, ptr %3, i64 8 + %.val = load i64, ptr %16, align 8, !tbaa !14 + %17 = load i32, ptr %3, align 8, !tbaa !4 + %15 = icmp sgt i32 %17, 1 br i1 %15, label %16, label %18, !prof !11 -16: ; preds = %lean_dec.exit11 - %17 = add nsw i32 %14, -1 - store i32 %17, ptr %3, align 4, !tbaa !4 +22: ; preds = %lean_dec.exit11 + %23 = add nsw i32 %14, -1 + store i32 %23, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit10 -18: ; preds = %lean_dec.exit11 +24: ; preds = %lean_dec.exit11 %.not.i12 = icmp eq i32 %14, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %19 + br i1 %.not.i12, label %lean_dec.exit10, label %25 -19: ; preds = %18 +25: ; preds = %24 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %19, %18, %16 - %20 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lake_Toml_encodeArray_x3f___spec__1___rarg(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val, ptr noundef %4) - %21 = ptrtoint ptr %1 to i64 - %22 = and i64 %21, 1 - %.not18 = icmp eq i64 %22, 0 - br i1 %.not18, label %23, label %lean_dec.exit +lean_dec.exit10: ; preds = %25, %24, %22 + %26 = tail call ptr @l_Array_foldlMUnsafe_fold___at_Lake_Toml_encodeArray_x3f___spec__1___rarg(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val, ptr noundef %4) + %27 = ptrtoint ptr %1 to i64 + %28 = and i64 %27, 1 + %.not18 = icmp eq i64 %28, 0 + br i1 %.not18, label %29, label %lean_dec.exit -23: ; preds = %lean_dec.exit10 - %24 = load i32, ptr %1, align 4, !tbaa !4 - %25 = icmp sgt i32 %24, 1 - br i1 %25, label %26, label %28, !prof !11 +29: ; preds = %lean_dec.exit10 + %30 = load i32, ptr %1, align 4, !tbaa !4 + %31 = icmp sgt i32 %30, 1 + br i1 %31, label %32, label %34, !prof !11 -26: ; preds = %23 - %27 = add nsw i32 %24, -1 - store i32 %27, ptr %1, align 4, !tbaa !4 +32: ; preds = %29 + %33 = add nsw i32 %30, -1 + store i32 %33, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -28: ; preds = %23 - %.not.i14 = icmp eq i32 %24, 0 - br i1 %.not.i14, label %lean_dec.exit, label %29 +34: ; preds = %29 + %.not.i14 = icmp eq i32 %30, 0 + br i1 %.not.i14, label %lean_dec.exit, label %35 -29: ; preds = %28 +35: ; preds = %34 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %29, %28, %26, %lean_dec.exit10 - ret ptr %20 +lean_dec.exit: ; preds = %35, %34, %32, %lean_dec.exit10 + ret ptr %26 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ExportAttr.ll b/bench/lean4/optimized/ExportAttr.ll index db26197564e..75b4d9d78d1 100644 --- a/bench/lean4/optimized/ExportAttr.ll +++ b/bench/lean4/optimized/ExportAttr.ll @@ -350,70 +350,70 @@ lean_inc.exit: ; preds = %13, %26 store i32 %44, ptr %0, align 4, !tbaa !5 br label %lean_inc.exit80 -45: ; preds = %lean_inc.exit +48: ; preds = %lean_inc.exit %.not.i99 = icmp eq i32 %.val.i98, 0 - br i1 %.not.i99, label %lean_inc.exit80, label %46 + br i1 %.not.i99, label %lean_inc.exit80, label %49 -46: ; preds = %45 +49: ; preds = %48 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #3 br label %lean_inc.exit80 -lean_inc.exit80: ; preds = %46, %45, %43 +lean_inc.exit80: ; preds = %49, %48, %43 tail call void @lean_inc_heartbeat() #3 - %47 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %48 = icmp eq ptr %47, null - br i1 %48, label %49, label %lean_alloc_ctor.exit + %50 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %51 = icmp eq ptr %50, null + br i1 %51, label %52, label %lean_alloc_ctor.exit -49: ; preds = %lean_inc.exit80 +52: ; preds = %lean_inc.exit80 tail call void @lean_internal_panic_out_of_memory() #4 unreachable lean_alloc_ctor.exit: ; preds = %lean_inc.exit80 - %50 = getelementptr inbounds nuw i8, ptr %47, i64 4 - store i32 1, ptr %47, align 4, !tbaa !5 - store i32 196640, ptr %50, align 4 - %51 = getelementptr inbounds nuw i8, ptr %47, i64 8 - store ptr %0, ptr %51, align 8, !tbaa !13 - %52 = getelementptr inbounds nuw i8, ptr %47, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %52, align 8, !tbaa !13 - %53 = getelementptr inbounds nuw i8, ptr %47, i64 24 - store ptr %41, ptr %53, align 8, !tbaa !13 - %54 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %47, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 - %55 = load i32, ptr %47, align 8, !tbaa !5 + %53 = getelementptr inbounds nuw i8, ptr %50, i64 4 + store i32 1, ptr %50, align 4, !tbaa !5 + store i32 196640, ptr %53, align 4 + %54 = getelementptr inbounds nuw i8, ptr %50, i64 8 + store ptr %0, ptr %54, align 8, !tbaa !13 + %55 = getelementptr inbounds nuw i8, ptr %50, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %55, align 8, !tbaa !13 + %56 = getelementptr inbounds nuw i8, ptr %50, i64 24 + store ptr %41, ptr %56, align 8, !tbaa !13 + %57 = tail call ptr @l_Substring_nextn(ptr noundef nonnull %50, ptr noundef nonnull inttoptr (i64 3 to ptr), ptr noundef nonnull inttoptr (i64 1 to ptr)) #3 + %55 = load i32, ptr %50, align 8, !tbaa !5 %56 = icmp sgt i32 %55, 1 br i1 %56, label %57, label %59, !prof !10 57: ; preds = %lean_alloc_ctor.exit %58 = add nsw i32 %55, -1 - store i32 %58, ptr %47, align 4, !tbaa !5 + store i32 %58, ptr %50, align 4, !tbaa !5 br label %lean_dec.exit74 -59: ; preds = %lean_alloc_ctor.exit +65: ; preds = %lean_alloc_ctor.exit %.not.i89 = icmp eq i32 %55, 0 - br i1 %.not.i89, label %lean_dec.exit74, label %60 + br i1 %.not.i89, label %lean_dec.exit74, label %66 -60: ; preds = %59 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %47) #3 +66: ; preds = %65 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %50) #3 br label %lean_dec.exit74 -lean_dec.exit74: ; preds = %57, %59, %60 - %61 = ptrtoint ptr %54 to i64 - %62 = and i64 %61, 1 - %.not106 = icmp eq i64 %62, 0 +lean_dec.exit74: ; preds = %57, %65, %66 + %67 = ptrtoint ptr %57 to i64 + %68 = and i64 %67, 1 + %.not106 = icmp eq i64 %68, 0 br i1 %.not106, label %63, label %lean_dec.exit72, !prof !4 -63: ; preds = %lean_dec.exit74 +75: ; preds = %lean_dec.exit74 %64 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %54) #3 - %65 = load i32, ptr %54, align 4, !tbaa !5 + %65 = load i32, ptr %57, align 4, !tbaa !5 %66 = icmp sgt i32 %65, 1 br i1 %66, label %67, label %69, !prof !10 -67: ; preds = %63 +76: ; preds = %75 %68 = add nsw i32 %65, -1 store i32 %68, ptr %54, align 4, !tbaa !5 br label %lean_dec.exit72 -69: ; preds = %63 +lean_dec.exit72: ; preds = %75 %.not.i91 = icmp eq i32 %65, 0 br i1 %.not.i91, label %lean_dec.exit72, label %70 @@ -421,27 +421,27 @@ lean_dec.exit74: ; preds = %57, %59, %60 tail call void @lean_dec_ref_cold(ptr noundef nonnull %54) #3 br label %lean_dec.exit72 -lean_dec.exit72: ; preds = %lean_dec.exit74, %67, %69, %70 +78: ; preds = %lean_dec.exit74, %67, %69, %70 %.0.i122 = phi ptr [ %64, %67 ], [ %64, %69 ], [ %64, %70 ], [ %54, %lean_dec.exit74 ] %71 = tail call zeroext i8 @l_String_anyAux___at___private_Lean_Compiler_ExportAttr_0__Lean_isValidCppId___spec__1(ptr noundef nonnull %0, ptr noundef nonnull %41, ptr noundef %.0.i122) %72 = load i32, ptr %0, align 4, !tbaa !5 %73 = icmp sgt i32 %72, 1 br i1 %73, label %74, label %76, !prof !10 -74: ; preds = %lean_dec.exit72 - %75 = add nsw i32 %72, -1 - store i32 %75, ptr %0, align 4, !tbaa !5 +81: ; preds = %78 + %82 = add nsw i32 %72, -1 + store i32 %82, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -76: ; preds = %lean_dec.exit72 +83: ; preds = %78 %.not.i95 = icmp eq i32 %72, 0 - br i1 %.not.i95, label %lean_dec.exit, label %77 + br i1 %.not.i95, label %lean_dec.exit, label %84 -77: ; preds = %76 +84: ; preds = %83 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %77, %76, %74 +lean_dec.exit: ; preds = %84, %83, %81 %. = xor i8 %71, 1 br label %lean_dec.exit79 diff --git a/bench/lean4/optimized/External.ll b/bench/lean4/optimized/External.ll index 45191b3d4fc..b680ba398fc 100644 --- a/bench/lean4/optimized/External.ll +++ b/bench/lean4/optimized/External.ll @@ -6685,37 +6685,37 @@ define ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Tactic_BVDecide_External_Model store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %11, align 8, !tbaa !12 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %14, align 8, !tbaa !12 %12 = load i32, ptr %1, align 8, !tbaa !8 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !11 -14: ; preds = %lean_dec.exit7 - %15 = add nsw i32 %12, -1 - store i32 %15, ptr %1, align 4, !tbaa !8 +20: ; preds = %lean_dec.exit7 + %21 = add nsw i32 %12, -1 + store i32 %21, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Tactic_BVDecide_External_ModelParser_parsePartialAssignment___spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Tactic_BVDecide_External_ModelParser_parsePartialAssignment___spec__2(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/FVarSubset.ll b/bench/lean4/optimized/FVarSubset.ll index 0fe94641adc..a500638e77d 100644 --- a/bench/lean4/optimized/FVarSubset.ll +++ b/bench/lean4/optimized/FVarSubset.ll @@ -328,51 +328,51 @@ lean_alloc_closure.exit: ; preds = %28 store i32 %43, ptr %31, align 4, !tbaa !8 br label %lean_dec.exit19 -44: ; preds = %lean_alloc_closure.exit +47: ; preds = %lean_alloc_closure.exit %.not.i24 = icmp eq i32 %40, 0 - br i1 %.not.i24, label %lean_dec.exit19, label %45 + br i1 %.not.i24, label %lean_dec.exit19, label %48 -45: ; preds = %44 +48: ; preds = %47 tail call void @lean_dec_ref_cold(ptr noundef nonnull %31) #3 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %45, %44, %42 - %46 = ptrtoint ptr %39 to i64 - %47 = and i64 %46, 1 - %.not.i28 = icmp eq i64 %47, 0 +lean_dec.exit19: ; preds = %48, %47, %42 + %49 = ptrtoint ptr %39 to i64 + %50 = and i64 %49, 1 + %.not.i28 = icmp eq i64 %50, 0 br i1 %.not.i28, label %lean_obj_tag.exit.thread, label %lean_obj_tag.exit lean_obj_tag.exit: ; preds = %lean_dec.exit19 - %48 = and i64 %46, 8589934590 - %49 = icmp eq i64 %48, 0 - %spec.select = zext i1 %49 to i8 + %51 = and i64 %49, 8589934590 + %52 = icmp eq i64 %51, 0 + %spec.select = zext i1 %52 to i8 br label %lean_dec.exit21 lean_obj_tag.exit.thread: ; preds = %lean_dec.exit19 - %50 = getelementptr i8, ptr %39, i64 4 - %.val.i = load i32, ptr %50, align 4 - %51 = icmp ult i32 %.val.i, 16777216 - br i1 %51, label %lean_dec.exit21, label %.thread + %53 = getelementptr i8, ptr %39, i64 4 + %.val.i = load i32, ptr %53, align 4 + %54 = icmp ult i32 %.val.i, 16777216 + br i1 %54, label %lean_dec.exit21, label %.thread .thread: ; preds = %lean_obj_tag.exit.thread - %52 = load i32, ptr %39, align 4, !tbaa !8 - %53 = icmp sgt i32 %52, 1 - br i1 %53, label %54, label %56, !prof !11 + %55 = load i32, ptr %39, align 4, !tbaa !8 + %56 = icmp sgt i32 %55, 1 + br i1 %56, label %57, label %59, !prof !11 -54: ; preds = %.thread - %55 = add nsw i32 %52, -1 - store i32 %55, ptr %39, align 4, !tbaa !8 +57: ; preds = %.thread + %58 = add nsw i32 %55, -1 + store i32 %58, ptr %39, align 4, !tbaa !8 br label %lean_dec.exit21 -56: ; preds = %.thread - %.not.i26 = icmp eq i32 %52, 0 - br i1 %.not.i26, label %lean_dec.exit21, label %57 +59: ; preds = %.thread + %.not.i26 = icmp eq i32 %55, 0 + br i1 %.not.i26, label %lean_dec.exit21, label %60 -57: ; preds = %56 +60: ; preds = %59 tail call void @lean_dec_ref_cold(ptr noundef nonnull %39) #3 br label %lean_dec.exit21 -lean_dec.exit21: ; preds = %lean_obj_tag.exit, %54, %56, %57, %lean_obj_tag.exit.thread, %18, %24, %26, %27, %5, %11, %13, %14 +lean_dec.exit21: ; preds = %lean_obj_tag.exit, %57, %59, %60, %lean_obj_tag.exit.thread, %18, %24, %26, %27, %5, %11, %13, %14 %.0 = phi i8 [ 1, %14 ], [ 1, %13 ], [ 1, %11 ], [ 1, %5 ], [ 0, %27 ], [ 0, %26 ], [ 0, %24 ], [ 0, %18 ], [ 1, %lean_obj_tag.exit.thread ], [ 0, %57 ], [ 0, %56 ], [ 0, %54 ], [ %spec.select, %lean_obj_tag.exit ] ret i8 %.0 } diff --git a/bench/lean4/optimized/FVarSubst.ll b/bench/lean4/optimized/FVarSubst.ll index 78fc517347c..b743d72aa72 100644 --- a/bench/lean4/optimized/FVarSubst.ll +++ b/bench/lean4/optimized/FVarSubst.ll @@ -1451,7 +1451,7 @@ lean_dec.exit: ; preds = %lean_obj_tag.exit, define ptr @l_Lean_Meta_FVarSubst_apply(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 { %3 = tail call zeroext i8 @l_Lean_AssocList_isEmpty___rarg(ptr noundef %0) #3 %4 = icmp eq i8 %3, 0 - br i1 %4, label %5, label %42 + br i1 %4, label %5, label %45 5: ; preds = %2 %6 = tail call zeroext i8 @l_Lean_Expr_hasFVar(ptr noundef %1) #3 @@ -1538,63 +1538,63 @@ lean_alloc_closure.exit: ; preds = %26 store i32 %39, ptr %27, align 4, !tbaa !4 br label %lean_inc.exit18 -40: ; preds = %lean_alloc_closure.exit +43: ; preds = %lean_alloc_closure.exit %.not.i19 = icmp eq i32 %36, 0 - br i1 %.not.i19, label %lean_inc.exit18, label %41 + br i1 %.not.i19, label %lean_inc.exit18, label %44 -41: ; preds = %40 +44: ; preds = %43 tail call void @lean_dec_ref_cold(ptr noundef nonnull %27) #3 br label %lean_inc.exit18 -42: ; preds = %2 - %43 = ptrtoint ptr %0 to i64 - %44 = and i64 %43, 1 - %.not = icmp eq i64 %44, 0 - br i1 %.not, label %45, label %lean_dec.exit - -45: ; preds = %42 - %46 = load i32, ptr %0, align 4, !tbaa !4 - %47 = icmp sgt i32 %46, 1 - br i1 %47, label %48, label %50, !prof !9 +45: ; preds = %2 + %46 = ptrtoint ptr %0 to i64 + %47 = and i64 %46, 1 + %.not = icmp eq i64 %47, 0 + br i1 %.not, label %48, label %lean_dec.exit 48: ; preds = %45 - %49 = add nsw i32 %46, -1 - store i32 %49, ptr %0, align 4, !tbaa !4 + %49 = load i32, ptr %0, align 4, !tbaa !4 + %50 = icmp sgt i32 %49, 1 + br i1 %50, label %51, label %53, !prof !9 + +51: ; preds = %48 + %52 = add nsw i32 %49, -1 + store i32 %52, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -50: ; preds = %45 - %.not.i21 = icmp eq i32 %46, 0 - br i1 %.not.i21, label %lean_dec.exit, label %51 +53: ; preds = %48 + %.not.i21 = icmp eq i32 %49, 0 + br i1 %.not.i21, label %lean_dec.exit, label %54 -51: ; preds = %50 +54: ; preds = %53 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %51, %50, %48, %42 - %52 = ptrtoint ptr %1 to i64 - %53 = and i64 %52, 1 - %.not27 = icmp eq i64 %53, 0 - br i1 %.not27, label %54, label %lean_inc.exit18 +lean_dec.exit: ; preds = %54, %53, %51, %45 + %55 = ptrtoint ptr %1 to i64 + %56 = and i64 %55, 1 + %.not27 = icmp eq i64 %56, 0 + br i1 %.not27, label %57, label %lean_inc.exit18 -54: ; preds = %lean_dec.exit +57: ; preds = %lean_dec.exit %.val.i24 = load i32, ptr %1, align 4, !tbaa !4 - %55 = icmp sgt i32 %.val.i24, 0 - br i1 %55, label %56, label %58, !prof !9 + %58 = icmp sgt i32 %.val.i24, 0 + br i1 %58, label %59, label %61, !prof !9 -56: ; preds = %54 - %57 = add nuw i32 %.val.i24, 1 - store i32 %57, ptr %1, align 4, !tbaa !4 +59: ; preds = %57 + %60 = add nuw i32 %.val.i24, 1 + store i32 %60, ptr %1, align 4, !tbaa !4 br label %lean_inc.exit18 -58: ; preds = %54 +61: ; preds = %57 %.not.i25 = icmp eq i32 %.val.i24, 0 - br i1 %.not.i25, label %lean_inc.exit18, label %59 + br i1 %.not.i25, label %lean_inc.exit18, label %62 -59: ; preds = %58 +62: ; preds = %61 tail call void @lean_inc_ref_cold(ptr noundef nonnull %1) #3 br label %lean_inc.exit18 -lean_inc.exit18: ; preds = %lean_dec.exit, %56, %58, %59, %38, %40, %41, %lean_dec.exit17, %22, %24, %25 +lean_inc.exit18: ; preds = %lean_dec.exit, %59, %61, %62, %38, %43, %44, %lean_dec.exit17, %22, %24, %25 %.1 = phi ptr [ %1, %25 ], [ %1, %24 ], [ %1, %22 ], [ %1, %lean_dec.exit17 ], [ %35, %41 ], [ %35, %40 ], [ %35, %38 ], [ %1, %59 ], [ %1, %58 ], [ %1, %56 ], [ %1, %lean_dec.exit ] ret ptr %.1 } diff --git a/bench/lean4/optimized/FilePath.ll b/bench/lean4/optimized/FilePath.ll index 507be5834c8..b5424a96454 100644 --- a/bench/lean4/optimized/FilePath.ll +++ b/bench/lean4/optimized/FilePath.ll @@ -776,20 +776,20 @@ lean_inc.exit: store i32 %10, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -11: ; preds = %lean_inc.exit +14: ; preds = %lean_inc.exit %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit, label %12 + br i1 %.not.i, label %lean_dec.exit, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %12, %11, %9 - %13 = load ptr, ptr @l_Lake_joinRelative___closed__3, align 8, !tbaa !13 - %14 = tail call ptr @l_String_stripSuffix(ptr noundef %6, ptr noundef %13) #3 - %15 = tail call ptr @l_System_FilePath_components(ptr noundef %14) #3 - %16 = tail call ptr @l_List_foldl___at_Lake_modOfFilePath___spec__1(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %15) - ret ptr %16 +lean_dec.exit: ; preds = %15, %14, %9 + %16 = load ptr, ptr @l_Lake_joinRelative___closed__3, align 8, !tbaa !13 + %17 = tail call ptr @l_String_stripSuffix(ptr noundef %6, ptr noundef %16) #3 + %18 = tail call ptr @l_System_FilePath_components(ptr noundef %17) #3 + %19 = tail call ptr @l_List_foldl___at_Lake_modOfFilePath___spec__1(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %18) + ret ptr %19 } declare ptr @l_System_FilePath_normalize(ptr noundef) local_unnamed_addr #1 diff --git a/bench/lean4/optimized/FindLevelMVar.ll b/bench/lean4/optimized/FindLevelMVar.ll index 3d4f983ef25..814e2d204d9 100644 --- a/bench/lean4/optimized/FindLevelMVar.ll +++ b/bench/lean4/optimized/FindLevelMVar.ll @@ -2255,17 +2255,17 @@ define ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__2___b store i32 %11, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit12 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit12, label %13 + br i1 %.not.i, label %lean_dec.exit12, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %13, %12, %10 - %14 = getelementptr i8, ptr %3, i64 8 - %.val17 = load i64, ptr %14, align 8, !tbaa !14 +lean_dec.exit12: ; preds = %16, %15, %10 + %17 = getelementptr i8, ptr %3, i64 8 + %.val17 = load i64, ptr %17, align 8, !tbaa !14 %15 = load i32, ptr %3, align 8, !tbaa !4 %16 = icmp sgt i32 %15, 1 br i1 %16, label %17, label %19, !prof !9 @@ -2275,41 +2275,41 @@ lean_dec.exit12: ; preds = %13, %12, %10 store i32 %18, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit11 -19: ; preds = %lean_dec.exit12 +25: ; preds = %lean_dec.exit12 %.not.i13 = icmp eq i32 %15, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %20 + br i1 %.not.i13, label %lean_dec.exit11, label %26 -20: ; preds = %19 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %20, %19, %17 - %21 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) - %22 = ptrtoint ptr %1 to i64 - %23 = and i64 %22, 1 - %.not19 = icmp eq i64 %23, 0 - br i1 %.not19, label %24, label %lean_dec.exit - -24: ; preds = %lean_dec.exit11 - %25 = load i32, ptr %1, align 4, !tbaa !4 - %26 = icmp sgt i32 %25, 1 - br i1 %26, label %27, label %29, !prof !9 - -27: ; preds = %24 - %28 = add nsw i32 %25, -1 - store i32 %28, ptr %1, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %26, %25, %17 + %27 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__2(ptr noundef %0, ptr noundef %1, i64 noundef %.val, i64 noundef %.val17, ptr noundef %4, ptr noundef %5) + %28 = ptrtoint ptr %1 to i64 + %29 = and i64 %28, 1 + %.not19 = icmp eq i64 %29, 0 + br i1 %.not19, label %30, label %lean_dec.exit + +30: ; preds = %lean_dec.exit11 + %31 = load i32, ptr %1, align 4, !tbaa !4 + %32 = icmp sgt i32 %31, 1 + br i1 %32, label %33, label %35, !prof !9 + +33: ; preds = %30 + %34 = add nsw i32 %31, -1 + store i32 %34, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -29: ; preds = %24 - %.not.i15 = icmp eq i32 %25, 0 - br i1 %.not.i15, label %lean_dec.exit, label %30 +35: ; preds = %30 + %.not.i15 = icmp eq i32 %31, 0 + br i1 %.not.i15, label %lean_dec.exit, label %36 -30: ; preds = %29 +36: ; preds = %35 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 - ret ptr %21 +lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 + ret ptr %27 } ; Function Attrs: nounwind uwtable @@ -2325,17 +2325,17 @@ define ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__3___b store i32 %11, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit12 -12: ; preds = %6 +15: ; preds = %6 %.not.i = icmp eq i32 %8, 0 - br i1 %.not.i, label %lean_dec.exit12, label %13 + br i1 %.not.i, label %lean_dec.exit12, label %16 -13: ; preds = %12 +16: ; preds = %15 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %13, %12, %10 - %14 = getelementptr i8, ptr %3, i64 8 - %.val = load i64, ptr %14, align 8, !tbaa !14 +lean_dec.exit12: ; preds = %16, %15, %10 + %17 = getelementptr i8, ptr %3, i64 8 + %.val = load i64, ptr %17, align 8, !tbaa !14 %15 = load i32, ptr %3, align 8, !tbaa !4 %16 = icmp sgt i32 %15, 1 br i1 %16, label %17, label %19, !prof !9 @@ -2345,41 +2345,41 @@ lean_dec.exit12: ; preds = %13, %12, %10 store i32 %18, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit11 -19: ; preds = %lean_dec.exit12 +25: ; preds = %lean_dec.exit12 %.not.i13 = icmp eq i32 %15, 0 - br i1 %.not.i13, label %lean_dec.exit11, label %20 + br i1 %.not.i13, label %lean_dec.exit11, label %26 -20: ; preds = %19 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #3 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %20, %19, %17 - %21 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__3(ptr noundef %0, ptr noundef %1, i64 noundef %.val17, i64 noundef %.val, ptr noundef %4, ptr noundef %5) - %22 = ptrtoint ptr %1 to i64 - %23 = and i64 %22, 1 - %.not19 = icmp eq i64 %23, 0 - br i1 %.not19, label %24, label %lean_dec.exit - -24: ; preds = %lean_dec.exit11 - %25 = load i32, ptr %1, align 4, !tbaa !4 - %26 = icmp sgt i32 %25, 1 - br i1 %26, label %27, label %29, !prof !9 - -27: ; preds = %24 - %28 = add nsw i32 %25, -1 - store i32 %28, ptr %1, align 4, !tbaa !4 +lean_dec.exit11: ; preds = %26, %25, %17 + %27 = tail call ptr @l_Array_foldrMUnsafe_fold___at_Lean_FindLevelMVar_main___spec__3(ptr noundef %0, ptr noundef %1, i64 noundef %.val17, i64 noundef %.val, ptr noundef %4, ptr noundef %5) + %28 = ptrtoint ptr %1 to i64 + %29 = and i64 %28, 1 + %.not19 = icmp eq i64 %29, 0 + br i1 %.not19, label %30, label %lean_dec.exit + +30: ; preds = %lean_dec.exit11 + %31 = load i32, ptr %1, align 4, !tbaa !4 + %32 = icmp sgt i32 %31, 1 + br i1 %32, label %33, label %35, !prof !9 + +33: ; preds = %30 + %34 = add nsw i32 %31, -1 + store i32 %34, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -29: ; preds = %24 - %.not.i15 = icmp eq i32 %25, 0 - br i1 %.not.i15, label %lean_dec.exit, label %30 +35: ; preds = %30 + %.not.i15 = icmp eq i32 %31, 0 + br i1 %.not.i15, label %lean_dec.exit, label %36 -30: ; preds = %29 +36: ; preds = %35 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %30, %29, %27, %lean_dec.exit11 - ret ptr %21 +lean_dec.exit: ; preds = %36, %35, %33, %lean_dec.exit11 + ret ptr %27 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ForEachExprWhere.ll b/bench/lean4/optimized/ForEachExprWhere.ll index a384e3c76bd..a68a80c580a 100644 --- a/bench/lean4/optimized/ForEachExprWhere.ll +++ b/bench/lean4/optimized/ForEachExprWhere.ll @@ -684,17 +684,17 @@ define noalias noundef nonnull ptr @l_Lean_ForEachExprWhere_visited___rarg___lam store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 - %11 = tail call ptr @l_Lean_ForEachExprWhere_visited___rarg___lambda__1(i64 noundef %.val, ptr noundef %1, ptr noundef %2) - ret ptr %11 +lean_dec.exit: ; preds = %13, %12, %7 + %14 = tail call ptr @l_Lean_ForEachExprWhere_visited___rarg___lambda__1(i64 noundef %.val, ptr noundef %1, ptr noundef %2) + ret ptr %14 } declare ptr @l_ST_Prim_Ref_modifyGetUnsafe___rarg___boxed(ptr noundef, ptr noundef, ptr noundef) #1 @@ -3585,37 +3585,37 @@ define noalias noundef nonnull ptr @l_Lean_ForEachExprWhere_checked___rarg___lam store i32 %9, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit8 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit8, label %11 + br i1 %.not.i, label %lean_dec.exit8, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit8 -lean_dec.exit8: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %12, align 8, !tbaa !13 +lean_dec.exit8: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %15, align 8, !tbaa !13 %13 = load i32, ptr %1, align 8, !tbaa !4 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !11 -15: ; preds = %lean_dec.exit8 - %16 = add nsw i32 %13, -1 - store i32 %16, ptr %1, align 4, !tbaa !4 +21: ; preds = %lean_dec.exit8 + %22 = add nsw i32 %13, -1 + store i32 %22, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -17: ; preds = %lean_dec.exit8 +23: ; preds = %lean_dec.exit8 %.not.i9 = icmp eq i32 %13, 0 - br i1 %.not.i9, label %lean_dec.exit, label %18 + br i1 %.not.i9, label %lean_dec.exit, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %18, %17, %15 - %19 = tail call ptr @l_Lean_ForEachExprWhere_checked___rarg___lambda__1(i64 noundef %.val11, i64 noundef %.val, ptr noundef %2, ptr noundef %3) - ret ptr %19 +lean_dec.exit: ; preds = %24, %23, %21 + %25 = tail call ptr @l_Lean_ForEachExprWhere_checked___rarg___lambda__1(i64 noundef %.val11, i64 noundef %.val, ptr noundef %2, ptr noundef %3) + ret ptr %112 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/GeneralizeTelescope.ll b/bench/lean4/optimized/GeneralizeTelescope.ll index df344d6cd0e..dd40718305b 100644 --- a/bench/lean4/optimized/GeneralizeTelescope.ll +++ b/bench/lean4/optimized/GeneralizeTelescope.ll @@ -5592,40 +5592,40 @@ define ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_GeneralizeTelescope_generalize 7: ; preds = %3 %8 = add nsw i32 %5, -1 - store i32 %8, ptr %0, align 4, !tbaa !9 + store i32 %8, ptr %0, align 4, !tbaa !12 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %11, align 8, !tbaa !4 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %14, align 8, !tbaa !4 %12 = load i32, ptr %1, align 8, !tbaa !9 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !12 -14: ; preds = %lean_dec.exit7 - %15 = add nsw i32 %12, -1 - store i32 %15, ptr %1, align 4, !tbaa !9 +20: ; preds = %lean_dec.exit7 + %21 = add nsw i32 %12, -1 + store i32 %21, ptr %1, align 4, !tbaa !9 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_GeneralizeTelescope_generalizeTelescopeAux___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_GeneralizeTelescope_generalizeTelescopeAux___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable @@ -6873,26 +6873,26 @@ define ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_generalizeTelescope___spec__1_ %.val15 = load i64, ptr %9, align 8, !tbaa !4 %10 = load i32, ptr %0, align 8, !tbaa !9 %11 = icmp sgt i32 %10, 1 - br i1 %11, label %12, label %14, !prof !12 + br i1 %11, label %12, label %20, !prof !12 12: ; preds = %8 %13 = add nsw i32 %10, -1 - store i32 %13, ptr %0, align 4, !tbaa !9 + store i32 %13, ptr %0, align 4, !tbaa !12 br label %lean_dec.exit12 -14: ; preds = %8 - %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit12, label %15 +17: ; preds = %8 + %.not.i = icmp eq i32 %13, 0 + br i1 %.not.i, label %lean_dec.exit12, label %18 -15: ; preds = %14 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %15, %14, %12 - %16 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %16, align 8, !tbaa !4 +lean_dec.exit12: ; preds = %18, %17, %12 + %19 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %19, align 8, !tbaa !4 %17 = load i32, ptr %1, align 8, !tbaa !9 - %18 = icmp sgt i32 %17, 1 + %18 = icmp sgt i32 %23, 1 br i1 %18, label %19, label %21, !prof !12 19: ; preds = %lean_dec.exit12 @@ -6900,17 +6900,17 @@ lean_dec.exit12: ; preds = %15, %14, %12 store i32 %20, ptr %1, align 4, !tbaa !9 br label %lean_dec.exit -21: ; preds = %lean_dec.exit12 - %.not.i13 = icmp eq i32 %17, 0 - br i1 %.not.i13, label %lean_dec.exit, label %22 +27: ; preds = %lean_dec.exit12 + %.not.i13 = icmp eq i32 %23, 0 + br i1 %.not.i13, label %lean_dec.exit, label %28 -22: ; preds = %21 +28: ; preds = %27 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %22, %21, %19 - %23 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_generalizeTelescope___spec__1(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) - ret ptr %23 +lean_dec.exit: ; preds = %28, %27, %112 + %29 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Meta_generalizeTelescope___spec__1(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) + ret ptr %29 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/HasConstCache.ll b/bench/lean4/optimized/HasConstCache.ll index e0462eddb6b..1ccebf3001b 100644 --- a/bench/lean4/optimized/HasConstCache.ll +++ b/bench/lean4/optimized/HasConstCache.ll @@ -5009,17 +5009,17 @@ define noundef nonnull ptr @l_Array_anyMUnsafe_any___at_Lean_HasConstCache_conta store i32 %9, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit13 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit13, label %11 + br i1 %.not.i, label %lean_dec.exit13, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit13 -lean_dec.exit13: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %3, i64 8 - %.val20 = load i64, ptr %12, align 8, !tbaa !11 +lean_dec.exit13: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %3, i64 8 + %.val20 = load i64, ptr %15, align 8, !tbaa !11 %13 = load i32, ptr %3, align 8, !tbaa !8 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !13 @@ -5029,134 +5029,134 @@ lean_dec.exit13: ; preds = %11, %10, %8 store i32 %16, ptr %3, align 4, !tbaa !8 br label %lean_dec.exit12 -17: ; preds = %lean_dec.exit13 +23: ; preds = %lean_dec.exit13 %.not.i14 = icmp eq i32 %13, 0 - br i1 %.not.i14, label %lean_dec.exit12, label %18 + br i1 %.not.i14, label %lean_dec.exit12, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %18, %17, %15 +lean_dec.exit12: ; preds = %24, %23, %15 %.not25.i = icmp eq i64 %.val, %.val20 br i1 %.not25.i, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit12 - %19 = getelementptr inbounds nuw i8, ptr %1, i64 24 - br label %22 - -20: ; preds = %lean_dec.exit.i - %21 = add i64 %.01526.i, 1 - %.not.i21 = icmp eq i64 %21, %.val20 - br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit, label %22 - -22: ; preds = %20, %.lr.ph.i - %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %21, %20 ] - %23 = getelementptr inbounds nuw ptr, ptr %19, i64 %.01526.i - %24 = load ptr, ptr %23, align 8, !tbaa !4 - %25 = ptrtoint ptr %24 to i64 - %26 = and i64 %25, 1 - %.not.i20.i = icmp eq i64 %26, 0 - br i1 %.not.i20.i, label %27, label %lean_array_uget.exit.i - -27: ; preds = %22 - %.val.i.i.i = load i32, ptr %24, align 4, !tbaa !8 - %28 = icmp sgt i32 %.val.i.i.i, 0 - br i1 %28, label %29, label %31, !prof !13 - -29: ; preds = %27 - %30 = add nuw i32 %.val.i.i.i, 1 - store i32 %30, ptr %24, align 4, !tbaa !8 - br label %34 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 24 + br label %28 + +26: ; preds = %lean_dec.exit.i + %27 = add i64 %.01526.i, 1 + %.not.i21 = icmp eq i64 %27, %.val20 + br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit, label %28 + +28: ; preds = %26, %.lr.ph.i + %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %27, %20 ] + %29 = getelementptr inbounds nuw ptr, ptr %25, i64 %.01526.i + %30 = load ptr, ptr %29, align 8, !tbaa !4 + %31 = ptrtoint ptr %30 to i64 + %32 = and i64 %31, 1 + %.not.i20.i = icmp eq i64 %32, 0 + br i1 %.not.i20.i, label %33, label %lean_array_uget.exit.i + +33: ; preds = %28 + %.val.i.i.i = load i32, ptr %30, align 4, !tbaa !8 + %34 = icmp sgt i32 %.val.i.i.i, 0 + br i1 %34, label %35, label %37, !prof !13 -31: ; preds = %27 +35: ; preds = %33 + %36 = add nuw i32 %.val.i.i.i, 1 + store i32 %36, ptr %30, align 4, !tbaa !8 + br label %40 + +37: ; preds = %33 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %34, label %32 + br i1 %.not.i.i.i, label %40, label %38 -32: ; preds = %31 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %24) #4 - br label %34 +38: ; preds = %37 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %30) #4 + br label %40 -lean_array_uget.exit.i: ; preds = %22 - %33 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %24) #4 +lean_array_uget.exit.i: ; preds = %28 + %39 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %30) #4 br label %lean_dec.exit.i -34: ; preds = %32, %31, %29 - %35 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %24) #4 - %36 = load i32, ptr %24, align 4, !tbaa !8 - %37 = icmp sgt i32 %36, 1 - br i1 %37, label %38, label %40, !prof !13 +40: ; preds = %38, %37, %35 + %41 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %30) #4 + %42 = load i32, ptr %30, align 4, !tbaa !8 + %43 = icmp sgt i32 %42, 1 + br i1 %43, label %44, label %46, !prof !13 -38: ; preds = %34 - %39 = add nsw i32 %36, -1 - store i32 %39, ptr %24, align 4, !tbaa !8 +44: ; preds = %40 + %45 = add nsw i32 %42, -1 + store i32 %45, ptr %30, align 4, !tbaa !8 br label %lean_dec.exit.i -40: ; preds = %34 - %.not.i.i = icmp eq i32 %36, 0 - br i1 %.not.i.i, label %lean_dec.exit.i, label %41 +46: ; preds = %40 + %.not.i.i = icmp eq i32 %42, 0 + br i1 %.not.i.i, label %lean_dec.exit.i, label %47 -41: ; preds = %40 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %24) #4 +47: ; preds = %46 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %30) #4 br label %lean_dec.exit.i -lean_dec.exit.i: ; preds = %41, %40, %38, %lean_array_uget.exit.i - %42 = phi i8 [ %33, %lean_array_uget.exit.i ], [ %35, %38 ], [ %35, %40 ], [ %35, %41 ] - %43 = icmp eq i8 %42, 0 - br i1 %43, label %20, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit +lean_dec.exit.i: ; preds = %47, %46, %44, %lean_array_uget.exit.i + %48 = phi i8 [ %39, %lean_array_uget.exit.i ], [ %41, %38 ], [ %41, %40 ], [ %41, %41 ] + %49 = icmp eq i8 %48, 0 + br i1 %49, label %26, label %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit -l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit: ; preds = %20, %lean_dec.exit.i, %lean_dec.exit12 +l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit: ; preds = %26, %lean_dec.exit.i, %lean_dec.exit12 %.2.ph.i = phi i64 [ 1, %lean_dec.exit12 ], [ 1, %20 ], [ 3, %lean_dec.exit.i ] - %44 = ptrtoint ptr %1 to i64 - %45 = and i64 %44, 1 - %.not23 = icmp eq i64 %45, 0 - br i1 %.not23, label %46, label %lean_dec.exit11 - -46: ; preds = %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit - %47 = load i32, ptr %1, align 4, !tbaa !8 - %48 = icmp sgt i32 %47, 1 - br i1 %48, label %49, label %51, !prof !13 - -49: ; preds = %46 - %50 = add nsw i32 %47, -1 - store i32 %50, ptr %1, align 4, !tbaa !8 + %50 = ptrtoint ptr %1 to i64 + %51 = and i64 %50, 1 + %.not23 = icmp eq i64 %51, 0 + br i1 %.not23, label %52, label %lean_dec.exit11 + +52: ; preds = %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit + %53 = load i32, ptr %1, align 4, !tbaa !8 + %54 = icmp sgt i32 %53, 1 + br i1 %54, label %55, label %57, !prof !13 + +55: ; preds = %52 + %56 = add nsw i32 %53, -1 + store i32 %56, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit11 -51: ; preds = %46 - %.not.i16 = icmp eq i32 %47, 0 - br i1 %.not.i16, label %lean_dec.exit11, label %52 +57: ; preds = %52 + %.not.i16 = icmp eq i32 %53, 0 + br i1 %.not.i16, label %lean_dec.exit11, label %58 -52: ; preds = %51 +58: ; preds = %57 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %52, %51, %49, %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit - %53 = ptrtoint ptr %0 to i64 - %54 = and i64 %53, 1 - %.not24 = icmp eq i64 %54, 0 - br i1 %.not24, label %55, label %lean_dec.exit +lean_dec.exit11: ; preds = %58, %57, %55, %l_Array_anyMUnsafe_any___at_Lean_HasConstCache_containsUnsafe___spec__2.exit + %59 = ptrtoint ptr %0 to i64 + %60 = and i64 %59, 1 + %.not24 = icmp eq i64 %60, 0 + br i1 %.not24, label %61, label %lean_dec.exit -55: ; preds = %lean_dec.exit11 - %56 = load i32, ptr %0, align 4, !tbaa !8 - %57 = icmp sgt i32 %56, 1 - br i1 %57, label %58, label %60, !prof !13 +61: ; preds = %lean_dec.exit11 + %62 = load i32, ptr %0, align 4, !tbaa !8 + %63 = icmp sgt i32 %62, 1 + br i1 %63, label %64, label %66, !prof !13 -58: ; preds = %55 - %59 = add nsw i32 %56, -1 - store i32 %59, ptr %0, align 4, !tbaa !8 +64: ; preds = %61 + %65 = add nsw i32 %62, -1 + store i32 %65, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -60: ; preds = %55 - %.not.i18 = icmp eq i32 %56, 0 - br i1 %.not.i18, label %lean_dec.exit, label %61 +66: ; preds = %61 + %.not.i18 = icmp eq i32 %62, 0 + br i1 %.not.i18, label %lean_dec.exit, label %67 -61: ; preds = %60 +67: ; preds = %66 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %61, %60, %58, %lean_dec.exit11 - %62 = inttoptr i64 %.2.ph.i to ptr - ret ptr %62 +lean_dec.exit: ; preds = %67, %66, %64, %lean_dec.exit11 + %68 = inttoptr i64 %.2.ph.i to ptr + ret ptr %68 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/IndGroupInfo.ll b/bench/lean4/optimized/IndGroupInfo.ll index 1bf6978d8d2..aa08291790d 100644 --- a/bench/lean4/optimized/IndGroupInfo.ll +++ b/bench/lean4/optimized/IndGroupInfo.ll @@ -5424,61 +5424,61 @@ define ptr @l_Array_anyMUnsafe_any___at_Lean_Elab_Structural_IndGroupInst_isDefE store i32 %13, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit14 -14: ; preds = %8 +17: ; preds = %8 %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit14, label %15 + br i1 %.not.i, label %lean_dec.exit14, label %18 -15: ; preds = %14 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit14 -lean_dec.exit14: ; preds = %15, %14, %12 - %16 = getelementptr i8, ptr %2, i64 8 - %.val19 = load i64, ptr %16, align 8, !tbaa !13 +lean_dec.exit14: ; preds = %18, %17, %15 + %19 = getelementptr i8, ptr %2, i64 8 + %.val19 = load i64, ptr %19, align 8, !tbaa !13 %17 = load i32, ptr %2, align 8, !tbaa !5 %18 = icmp sgt i32 %17, 1 br i1 %18, label %19, label %21, !prof !10 -19: ; preds = %lean_dec.exit14 - %20 = add nsw i32 %17, -1 - store i32 %20, ptr %2, align 4, !tbaa !5 +25: ; preds = %lean_dec.exit14 + %26 = add nsw i32 %17, -1 + store i32 %26, ptr %2, align 4, !tbaa !5 br label %lean_dec.exit13 -21: ; preds = %lean_dec.exit14 +27: ; preds = %lean_dec.exit14 %.not.i15 = icmp eq i32 %17, 0 - br i1 %.not.i15, label %lean_dec.exit13, label %22 + br i1 %.not.i15, label %lean_dec.exit13, label %28 -22: ; preds = %21 +28: ; preds = %27 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit13 -lean_dec.exit13: ; preds = %22, %21, %19 - %23 = tail call ptr @l_Array_anyMUnsafe_any___at_Lean_Elab_Structural_IndGroupInst_isDefEq___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val19, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) - %24 = ptrtoint ptr %0 to i64 - %25 = and i64 %24, 1 - %.not21 = icmp eq i64 %25, 0 - br i1 %.not21, label %26, label %lean_dec.exit +lean_dec.exit13: ; preds = %28, %27, %25 + %29 = tail call ptr @l_Array_anyMUnsafe_any___at_Lean_Elab_Structural_IndGroupInst_isDefEq___spec__1(ptr noundef %0, i64 noundef %.val, i64 noundef %.val19, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) + %30 = ptrtoint ptr %0 to i64 + %31 = and i64 %30, 1 + %.not21 = icmp eq i64 %31, 0 + br i1 %.not21, label %32, label %lean_dec.exit -26: ; preds = %lean_dec.exit13 - %27 = load i32, ptr %0, align 4, !tbaa !5 - %28 = icmp sgt i32 %27, 1 - br i1 %28, label %29, label %31, !prof !10 +32: ; preds = %lean_dec.exit13 + %33 = load i32, ptr %0, align 4, !tbaa !5 + %34 = icmp sgt i32 %33, 1 + br i1 %34, label %35, label %37, !prof !10 -29: ; preds = %26 - %30 = add nsw i32 %27, -1 - store i32 %30, ptr %0, align 4, !tbaa !5 +35: ; preds = %32 + %36 = add nsw i32 %33, -1 + store i32 %36, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -31: ; preds = %26 - %.not.i17 = icmp eq i32 %27, 0 - br i1 %.not.i17, label %lean_dec.exit, label %32 +37: ; preds = %32 + %.not.i17 = icmp eq i32 %33, 0 + br i1 %.not.i17, label %lean_dec.exit, label %38 -32: ; preds = %31 +38: ; preds = %37 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %32, %31, %29, %lean_dec.exit13 - ret ptr %23 +lean_dec.exit: ; preds = %38, %37, %35, %lean_dec.exit13 + ret ptr %29 } ; Function Attrs: nounwind uwtable @@ -5795,20 +5795,20 @@ define nonnull ptr @l_Lean_Elab_Structural_IndGroupInst_isDefEq___lambda__4___bo store i32 %10, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -11: ; preds = %1 +14: ; preds = %1 %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit, label %12 + br i1 %.not.i, label %lean_dec.exit, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %12, %11, %9 - %13 = zext i8 %6 to i64 - %14 = shl nuw nsw i64 %13, 1 - %15 = or disjoint i64 %14, 1 - %16 = inttoptr i64 %15 to ptr - ret ptr %16 +lean_dec.exit: ; preds = %15, %14, %9 + %16 = zext i8 %6 to i64 + %17 = shl nuw nsw i64 %16, 1 + %18 = or disjoint i64 %17, 1 + %19 = inttoptr i64 %18 to ptr + ret ptr %19 } ; Function Attrs: nounwind uwtable @@ -9586,37 +9586,37 @@ define ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Structural_IndGroupInst_nested store i32 %13, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit12 -14: ; preds = %8 +17: ; preds = %8 %.not.i = icmp eq i32 %10, 0 - br i1 %.not.i, label %lean_dec.exit12, label %15 + br i1 %.not.i, label %lean_dec.exit12, label %18 -15: ; preds = %14 +18: ; preds = %17 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %15, %14, %12 - %16 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %16, align 8, !tbaa !13 +lean_dec.exit12: ; preds = %18, %17, %15 + %19 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %19, align 8, !tbaa !13 %17 = load i32, ptr %1, align 8, !tbaa !5 %18 = icmp sgt i32 %17, 1 br i1 %18, label %19, label %21, !prof !10 -19: ; preds = %lean_dec.exit12 - %20 = add nsw i32 %17, -1 - store i32 %20, ptr %1, align 4, !tbaa !5 +25: ; preds = %lean_dec.exit12 + %26 = add nsw i32 %17, -1 + store i32 %26, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit -21: ; preds = %lean_dec.exit12 +27: ; preds = %lean_dec.exit12 %.not.i13 = icmp eq i32 %17, 0 - br i1 %.not.i13, label %lean_dec.exit, label %22 + br i1 %.not.i13, label %lean_dec.exit, label %28 -22: ; preds = %21 +28: ; preds = %27 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %22, %21, %19 - %23 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Structural_IndGroupInst_nestedTypeFormers___spec__5(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) - ret ptr %23 +lean_dec.exit: ; preds = %28, %27, %25 + %29 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Elab_Structural_IndGroupInst_nestedTypeFormers___spec__5(i64 noundef %.val15, i64 noundef %.val, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) + ret ptr %29 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/InitShutdown.ll b/bench/lean4/optimized/InitShutdown.ll index e8b5d8cd04d..b62090bc4d2 100644 --- a/bench/lean4/optimized/InitShutdown.ll +++ b/bench/lean4/optimized/InitShutdown.ll @@ -3296,37 +3296,37 @@ define ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_InitShutdown_0__ store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %11, align 8, !tbaa !12 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %14, align 8, !tbaa !12 %12 = load i32, ptr %1, align 8, !tbaa !4 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !11 -14: ; preds = %lean_dec.exit7 - %15 = add nsw i32 %12, -1 - store i32 %15, ptr %1, align 4, !tbaa !4 +20: ; preds = %lean_dec.exit7 + %21 = add nsw i32 %12, -1 + store i32 %21, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_InitShutdown_0__Lean_Lsp_toJsonInitializeParams____x40_Lean_Data_Lsp_InitShutdown___hyg_523____spec__5(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_Data_Lsp_InitShutdown_0__Lean_Lsp_toJsonInitializeParams____x40_Lean_Data_Lsp_InitShutdown___hyg_523____spec__5(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable @@ -11728,37 +11728,37 @@ define ptr @l_Array_mapMUnsafe_map___at_Lean_Lsp_instFromJsonInitializeParams___ store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val = load i64, ptr %11, align 8, !tbaa !12 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val = load i64, ptr %14, align 8, !tbaa !12 %12 = load i32, ptr %1, align 8, !tbaa !4 %13 = icmp sgt i32 %12, 1 br i1 %13, label %14, label %16, !prof !11 -14: ; preds = %lean_dec.exit7 - %15 = add nsw i32 %12, -1 - store i32 %15, ptr %1, align 4, !tbaa !4 +20: ; preds = %lean_dec.exit7 + %21 = add nsw i32 %12, -1 + store i32 %21, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Lsp_instFromJsonInitializeParams___spec__8(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at_Lean_Lsp_instFromJsonInitializeParams___spec__8(i64 noundef %.val10, i64 noundef %.val, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/InlineCandidate.ll b/bench/lean4/optimized/InlineCandidate.ll index 72a53694bc6..68486ab152a 100644 --- a/bench/lean4/optimized/InlineCandidate.ll +++ b/bench/lean4/optimized/InlineCandidate.ll @@ -71,19 +71,19 @@ define nonnull ptr @l_Lean_Compiler_LCNF_Simp_InlineCandidateInfo_arity___boxed( store i32 %8, ptr %0, align 4, !tbaa !10 br label %lean_dec.exit -9: ; preds = %1 +12: ; preds = %1 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 - %11 = shl i64 %.val.i, 1 - %12 = or disjoint i64 %11, 1 - %13 = inttoptr i64 %12 to ptr - ret ptr %13 +lean_dec.exit: ; preds = %13, %12, %7 + %14 = shl i64 %.val.i, 1 + %15 = or disjoint i64 %14, 1 + %16 = inttoptr i64 %15 to ptr + ret ptr %16 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/InputFileConfig.ll b/bench/lean4/optimized/InputFileConfig.ll index 8d095d60967..813976d602a 100644 --- a/bench/lean4/optimized/InputFileConfig.ll +++ b/bench/lean4/optimized/InputFileConfig.ll @@ -1458,128 +1458,128 @@ define ptr @l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta__ store i32 %9, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit10 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit10, label %11 + br i1 %.not.i, label %lean_dec.exit10, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #7 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %2, i64 8 - %.val15 = load i64, ptr %12, align 8, !tbaa !13 +lean_dec.exit10: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %2, i64 8 + %.val15 = load i64, ptr %15, align 8, !tbaa !13 %13 = load i32, ptr %2, align 8, !tbaa !8 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !12 -15: ; preds = %lean_dec.exit10 - %16 = add nsw i32 %13, -1 - store i32 %16, ptr %2, align 4, !tbaa !8 +21: ; preds = %lean_dec.exit10 + %22 = add nsw i32 %13, -1 + store i32 %22, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit9 -17: ; preds = %lean_dec.exit10 +23: ; preds = %lean_dec.exit10 %.not.i11 = icmp eq i32 %13, 0 - br i1 %.not.i11, label %lean_dec.exit9, label %18 + br i1 %.not.i11, label %lean_dec.exit9, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #7 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %18, %17, %15 +lean_dec.exit9: ; preds = %24, %23, %21 %.not28.i = icmp eq i64 %.val, %.val15 br i1 %.not28.i, label %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit9 - %19 = getelementptr inbounds nuw i8, ptr %0, i64 24 - br label %20 - -20: ; preds = %41, %.lr.ph.i - %.01730.i = phi i64 [ %.val, %.lr.ph.i ], [ %43, %41 ] - %.01929.i = phi ptr [ %3, %.lr.ph.i ], [ %42, %41 ] - %21 = getelementptr inbounds nuw ptr, ptr %19, i64 %.01730.i - %22 = load ptr, ptr %21, align 8, !tbaa !4 - %23 = ptrtoint ptr %22 to i64 - %24 = and i64 %23, 1 - %.not.i.i = icmp eq i64 %24, 0 - br i1 %.not.i.i, label %25, label %lean_array_uget.exit.i + %25 = getelementptr inbounds nuw i8, ptr %0, i64 24 + br label %26 + +26: ; preds = %47, %.lr.ph.i + %.01730.i = phi i64 [ %.val, %.lr.ph.i ], [ %49, %41 ] + %.01929.i = phi ptr [ %3, %.lr.ph.i ], [ %48, %41 ] + %27 = getelementptr inbounds nuw ptr, ptr %25, i64 %.01730.i + %28 = load ptr, ptr %27, align 8, !tbaa !4 + %29 = ptrtoint ptr %28 to i64 + %30 = and i64 %29, 1 + %.not.i.i = icmp eq i64 %30, 0 + br i1 %.not.i.i, label %31, label %lean_array_uget.exit.i -25: ; preds = %20 - %.val.i.i.i = load i32, ptr %22, align 4, !tbaa !8 - %26 = icmp sgt i32 %.val.i.i.i, 0 - br i1 %26, label %27, label %29, !prof !12 +31: ; preds = %26 + %.val.i.i.i = load i32, ptr %28, align 4, !tbaa !8 + %32 = icmp sgt i32 %.val.i.i.i, 0 + br i1 %32, label %33, label %35, !prof !12 -27: ; preds = %25 - %28 = add nuw i32 %.val.i.i.i, 1 - store i32 %28, ptr %22, align 4, !tbaa !8 +33: ; preds = %31 + %34 = add nuw i32 %.val.i.i.i, 1 + store i32 %34, ptr %28, align 4, !tbaa !8 br label %lean_array_uget.exit.i -29: ; preds = %25 +35: ; preds = %31 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %30 + br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %36 -30: ; preds = %29 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %22) #7 +36: ; preds = %35 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %28) #7 br label %lean_array_uget.exit.i -lean_array_uget.exit.i: ; preds = %30, %29, %27, %20 - %31 = getelementptr inbounds nuw i8, ptr %22, i64 8 - %32 = load ptr, ptr %31, align 8, !tbaa !4 - %33 = ptrtoint ptr %32 to i64 - %34 = and i64 %33, 1 - %.not27.i = icmp eq i64 %34, 0 - br i1 %.not27.i, label %35, label %41 - -35: ; preds = %lean_array_uget.exit.i - %.val.i.i = load i32, ptr %32, align 4, !tbaa !8 - %36 = icmp sgt i32 %.val.i.i, 0 - br i1 %36, label %37, label %39, !prof !12 +lean_array_uget.exit.i: ; preds = %36, %35, %33, %26 + %37 = getelementptr inbounds nuw i8, ptr %28, i64 8 + %38 = load ptr, ptr %37, align 8, !tbaa !4 + %39 = ptrtoint ptr %38 to i64 + %40 = and i64 %39, 1 + %.not27.i = icmp eq i64 %40, 0 + br i1 %.not27.i, label %41, label %47 + +41: ; preds = %lean_array_uget.exit.i + %.val.i.i = load i32, ptr %38, align 4, !tbaa !8 + %42 = icmp sgt i32 %.val.i.i, 0 + br i1 %42, label %43, label %45, !prof !12 -37: ; preds = %35 - %38 = add nuw i32 %.val.i.i, 1 - store i32 %38, ptr %32, align 4, !tbaa !8 - br label %41 +43: ; preds = %41 + %44 = add nuw i32 %.val.i.i, 1 + store i32 %44, ptr %38, align 4, !tbaa !8 + br label %47 -39: ; preds = %35 +45: ; preds = %41 %.not.i21.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i21.i, label %41, label %40 + br i1 %.not.i21.i, label %47, label %46 -40: ; preds = %39 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %32) #7 - br label %41 - -41: ; preds = %40, %39, %37, %lean_array_uget.exit.i - %42 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %32, ptr noundef nonnull %22) #7 - %43 = add i64 %.01730.i, 1 - %.not.i16 = icmp eq i64 %43, %.val15 - br i1 %.not.i16, label %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit, label %20 - -l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit: ; preds = %41, %lean_dec.exit9 - %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %42, %41 ] - %44 = ptrtoint ptr %0 to i64 - %45 = and i64 %44, 1 - %.not18 = icmp eq i64 %45, 0 - br i1 %.not18, label %46, label %lean_dec.exit - -46: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit - %47 = load i32, ptr %0, align 4, !tbaa !8 - %48 = icmp sgt i32 %47, 1 - br i1 %48, label %49, label %51, !prof !12 - -49: ; preds = %46 - %50 = add nsw i32 %47, -1 - store i32 %50, ptr %0, align 4, !tbaa !8 +46: ; preds = %45 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %38) #7 + br label %47 + +47: ; preds = %46, %45, %43, %lean_array_uget.exit.i + %48 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %38, ptr noundef nonnull %28) #7 + %49 = add i64 %.01730.i, 1 + %.not.i16 = icmp eq i64 %49, %.val15 + br i1 %.not.i16, label %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit, label %26 + +l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit: ; preds = %47, %lean_dec.exit9 + %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %48, %41 ] + %50 = ptrtoint ptr %0 to i64 + %51 = and i64 %50, 1 + %.not18 = icmp eq i64 %51, 0 + br i1 %.not18, label %52, label %lean_dec.exit + +52: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit + %53 = load i32, ptr %0, align 4, !tbaa !8 + %54 = icmp sgt i32 %53, 1 + br i1 %54, label %55, label %57, !prof !12 + +55: ; preds = %52 + %56 = add nsw i32 %53, -1 + store i32 %56, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -51: ; preds = %46 - %.not.i13 = icmp eq i32 %47, 0 - br i1 %.not.i13, label %lean_dec.exit, label %52 +57: ; preds = %52 + %.not.i13 = icmp eq i32 %53, 0 + br i1 %.not.i13, label %lean_dec.exit, label %58 -52: ; preds = %51 +58: ; preds = %57 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #7 br label %lean_dec.exit -lean_dec.exit: ; preds = %52, %51, %49, %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit +lean_dec.exit: ; preds = %58, %57, %55, %l_Array_foldlMUnsafe_fold___at_Lake_InputFileConfig_instConfigMeta___spec__1.exit ret ptr %.019.lcssa.i } diff --git a/bench/lean4/optimized/InternalExceptionId.ll b/bench/lean4/optimized/InternalExceptionId.ll index 5d64fc18df6..547265d81d3 100644 --- a/bench/lean4/optimized/InternalExceptionId.ll +++ b/bench/lean4/optimized/InternalExceptionId.ll @@ -1050,54 +1050,54 @@ define noundef nonnull ptr @l_Array_anyMUnsafe_any___at_Lean_registerInternalExc store i32 %9, ptr %2, align 4, !tbaa !5 br label %lean_dec.exit13 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit13, label %11 + br i1 %.not.i, label %lean_dec.exit13, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit13 -lean_dec.exit13: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %3, i64 8 - %.val20 = load i64, ptr %12, align 8, !tbaa !13 +lean_dec.exit13: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %3, i64 8 + %.val20 = load i64, ptr %15, align 8, !tbaa !13 %13 = load i32, ptr %3, align 8, !tbaa !5 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !10 -15: ; preds = %lean_dec.exit13 - %16 = add nsw i32 %13, -1 - store i32 %16, ptr %3, align 4, !tbaa !5 +21: ; preds = %lean_dec.exit13 + %22 = add nsw i32 %13, -1 + store i32 %22, ptr %3, align 4, !tbaa !5 br label %lean_dec.exit12 -17: ; preds = %lean_dec.exit13 +23: ; preds = %lean_dec.exit13 %.not.i14 = icmp eq i32 %13, 0 - br i1 %.not.i14, label %lean_dec.exit12, label %18 + br i1 %.not.i14, label %lean_dec.exit12, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit12 -lean_dec.exit12: ; preds = %18, %17, %15 +lean_dec.exit12: ; preds = %24, %23, %21 %.not25.i = icmp eq i64 %.val, %.val20 br i1 %.not25.i, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit12 - %19 = getelementptr inbounds nuw i8, ptr %1, i64 24 - br label %22 - -20: ; preds = %lean_dec.exit.i - %21 = add i64 %.01526.i, 1 - %.not.i21 = icmp eq i64 %21, %.val20 - br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit, label %22 - -22: ; preds = %20, %.lr.ph.i - %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %21, %20 ] - %23 = getelementptr inbounds nuw ptr, ptr %19, i64 %.01526.i - %24 = load ptr, ptr %23, align 8, !tbaa !11 - %25 = ptrtoint ptr %24 to i64 - %26 = and i64 %25, 1 - %.not.i20.i = icmp eq i64 %26, 0 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 24 + br label %28 + +26: ; preds = %lean_dec.exit.i + %27 = add i64 %.01526.i, 1 + %.not.i21 = icmp eq i64 %27, %.val20 + br i1 %.not.i21, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit, label %28 + +28: ; preds = %26, %.lr.ph.i + %.01526.i = phi i64 [ %.val, %.lr.ph.i ], [ %27, %20 ] + %29 = getelementptr inbounds nuw ptr, ptr %25, i64 %.01526.i + %30 = load ptr, ptr %29, align 8, !tbaa !11 + %31 = ptrtoint ptr %30 to i64 + %32 = and i64 %31, 1 + %.not.i20.i = icmp eq i64 %32, 0 br i1 %.not.i20.i, label %27, label %lean_array_uget.exit.i 27: ; preds = %22 @@ -1110,94 +1110,94 @@ lean_dec.exit12: ; preds = %18, %17, %15 store i32 %30, ptr %24, align 4, !tbaa !5 br label %34 -31: ; preds = %27 +33: ; preds = %27 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %34, label %32 + br i1 %.not.i.i.i, label %40, label %38 -32: ; preds = %31 - tail call void @lean_inc_ref_cold(ptr noundef nonnull %24) #4 - br label %34 +38: ; preds = %31 + tail call void @lean_inc_ref_cold(ptr noundef nonnull %30) #4 + br label %40 -lean_array_uget.exit.i: ; preds = %22 - %33 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %24) #4 +lean_array_uget.exit.i: ; preds = %28 + %39 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef %30) #4 br label %lean_dec.exit.i -34: ; preds = %32, %31, %29 - %35 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %24) #4 - %36 = load i32, ptr %24, align 4, !tbaa !5 - %37 = icmp sgt i32 %36, 1 - br i1 %37, label %38, label %40, !prof !10 +40: ; preds = %38, %31, %29 + %41 = tail call zeroext i8 @lean_name_eq(ptr noundef %0, ptr noundef nonnull %30) #4 + %42 = load i32, ptr %30, align 4, !tbaa !5 + %43 = icmp sgt i32 %42, 1 + br i1 %43, label %44, label %46, !prof !10 -38: ; preds = %34 - %39 = add nsw i32 %36, -1 - store i32 %39, ptr %24, align 4, !tbaa !5 +44: ; preds = %40 + %45 = add nsw i32 %42, -1 + store i32 %45, ptr %30, align 4, !tbaa !5 br label %lean_dec.exit.i -40: ; preds = %34 - %.not.i.i = icmp eq i32 %36, 0 - br i1 %.not.i.i, label %lean_dec.exit.i, label %41 +46: ; preds = %40 + %.not.i.i = icmp eq i32 %42, 0 + br i1 %.not.i.i, label %lean_dec.exit.i, label %47 -41: ; preds = %40 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %24) #4 +47: ; preds = %46 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %30) #4 br label %lean_dec.exit.i -lean_dec.exit.i: ; preds = %41, %40, %38, %lean_array_uget.exit.i - %42 = phi i8 [ %33, %lean_array_uget.exit.i ], [ %35, %38 ], [ %35, %40 ], [ %35, %41 ] - %43 = icmp eq i8 %42, 0 - br i1 %43, label %20, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit +lean_dec.exit.i: ; preds = %47, %46, %44, %lean_array_uget.exit.i + %48 = phi i8 [ %39, %lean_array_uget.exit.i ], [ %41, %38 ], [ %41, %40 ], [ %41, %41 ] + %49 = icmp eq i8 %48, 0 + br i1 %49, label %26, label %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit -l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit: ; preds = %20, %lean_dec.exit.i, %lean_dec.exit12 +l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit: ; preds = %26, %lean_dec.exit.i, %lean_dec.exit12 %.2.ph.i = phi i64 [ 1, %lean_dec.exit12 ], [ 1, %20 ], [ 3, %lean_dec.exit.i ] - %44 = ptrtoint ptr %1 to i64 - %45 = and i64 %44, 1 - %.not23 = icmp eq i64 %45, 0 - br i1 %.not23, label %46, label %lean_dec.exit11 - -46: ; preds = %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit - %47 = load i32, ptr %1, align 4, !tbaa !5 - %48 = icmp sgt i32 %47, 1 - br i1 %48, label %49, label %51, !prof !10 - -49: ; preds = %46 - %50 = add nsw i32 %47, -1 - store i32 %50, ptr %1, align 4, !tbaa !5 + %50 = ptrtoint ptr %1 to i64 + %51 = and i64 %50, 1 + %.not23 = icmp eq i64 %51, 0 + br i1 %.not23, label %52, label %lean_dec.exit11 + +52: ; preds = %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit + %53 = load i32, ptr %1, align 4, !tbaa !5 + %54 = icmp sgt i32 %53, 1 + br i1 %54, label %55, label %57, !prof !10 + +55: ; preds = %52 + %56 = add nsw i32 %53, -1 + store i32 %56, ptr %1, align 4, !tbaa !5 br label %lean_dec.exit11 -51: ; preds = %46 - %.not.i16 = icmp eq i32 %47, 0 - br i1 %.not.i16, label %lean_dec.exit11, label %52 +57: ; preds = %52 + %.not.i16 = icmp eq i32 %53, 0 + br i1 %.not.i16, label %lean_dec.exit11, label %58 -52: ; preds = %51 +58: ; preds = %57 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %52, %51, %49, %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit - %53 = ptrtoint ptr %0 to i64 - %54 = and i64 %53, 1 - %.not24 = icmp eq i64 %54, 0 - br i1 %.not24, label %55, label %lean_dec.exit +lean_dec.exit11: ; preds = %58, %57, %55, %l_Array_anyMUnsafe_any___at_Lean_registerInternalExceptionId___spec__2.exit + %59 = ptrtoint ptr %0 to i64 + %60 = and i64 %59, 1 + %.not24 = icmp eq i64 %60, 0 + br i1 %.not24, label %61, label %lean_dec.exit -55: ; preds = %lean_dec.exit11 - %56 = load i32, ptr %0, align 4, !tbaa !5 - %57 = icmp sgt i32 %56, 1 - br i1 %57, label %58, label %60, !prof !10 +61: ; preds = %lean_dec.exit11 + %62 = load i32, ptr %0, align 4, !tbaa !5 + %63 = icmp sgt i32 %62, 1 + br i1 %63, label %64, label %66, !prof !10 -58: ; preds = %55 - %59 = add nsw i32 %56, -1 - store i32 %59, ptr %0, align 4, !tbaa !5 +64: ; preds = %61 + %65 = add nsw i32 %62, -1 + store i32 %65, ptr %0, align 4, !tbaa !5 br label %lean_dec.exit -60: ; preds = %55 - %.not.i18 = icmp eq i32 %56, 0 - br i1 %.not.i18, label %lean_dec.exit, label %61 +66: ; preds = %61 + %.not.i18 = icmp eq i32 %62, 0 + br i1 %.not.i18, label %lean_dec.exit, label %67 -61: ; preds = %60 +67: ; preds = %66 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %61, %60, %58, %lean_dec.exit11 - %62 = inttoptr i64 %.2.ph.i to ptr - ret ptr %62 +lean_dec.exit: ; preds = %67, %66, %64, %lean_dec.exit11 + %68 = inttoptr i64 %.2.ph.i to ptr + ret ptr %68 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Links.ll b/bench/lean4/optimized/Links.ll index e78cba431ec..03f73e20103 100644 --- a/bench/lean4/optimized/Links.ll +++ b/bench/lean4/optimized/Links.ll @@ -88,159 +88,159 @@ lean_inc.exit: %6 = icmp sgt i32 %.val.i47, 0 br i1 %6, label %7, label %9, !prof !11 -7: ; preds = %lean_inc.exit - %8 = add nuw i32 %.val.i47, 1 - store i32 %8, ptr %0, align 4, !tbaa !8 +10: ; preds = %lean_inc.exit + %11 = add nuw i32 %.val.i47, 1 + store i32 %11, ptr %0, align 4, !tbaa !8 br label %lean_inc.exit41 -9: ; preds = %lean_inc.exit +12: ; preds = %lean_inc.exit %.not.i48 = icmp eq i32 %.val.i47, 0 - br i1 %.not.i48, label %lean_inc.exit41, label %10 + br i1 %.not.i48, label %lean_inc.exit41, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #4 br label %lean_inc.exit41 -lean_inc.exit41: ; preds = %10, %9, %7 +lean_inc.exit41: ; preds = %13, %12, %10 tail call void @lean_inc_heartbeat() #4 - %11 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 - %12 = icmp eq ptr %11, null - br i1 %12, label %13, label %lean_nat_sub.exit + %14 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 + %15 = icmp eq ptr %14, null + br i1 %15, label %16, label %lean_nat_sub.exit -13: ; preds = %lean_inc.exit41 +16: ; preds = %lean_inc.exit41 tail call void @lean_internal_panic_out_of_memory() #5 unreachable lean_nat_sub.exit: ; preds = %lean_inc.exit41 - %14 = getelementptr inbounds nuw i8, ptr %11, i64 4 - store i32 1, ptr %11, align 4, !tbaa !8 - store i32 196640, ptr %14, align 4 - %15 = getelementptr inbounds nuw i8, ptr %11, i64 8 - store ptr %0, ptr %15, align 8, !tbaa !12 - %16 = getelementptr inbounds nuw i8, ptr %11, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %16, align 8, !tbaa !12 - %17 = getelementptr inbounds nuw i8, ptr %11, i64 24 - store ptr %5, ptr %17, align 8, !tbaa !12 - %18 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__2, align 8, !tbaa !12 - %19 = tail call ptr @l_Substring_prevn(ptr noundef nonnull %11, ptr noundef %18, ptr noundef nonnull %5) #4 - %20 = load i32, ptr %11, align 8, !tbaa !8 + %17 = getelementptr inbounds nuw i8, ptr %14, i64 4 + store i32 1, ptr %14, align 4, !tbaa !8 + store i32 196640, ptr %17, align 4 + %18 = getelementptr inbounds nuw i8, ptr %14, i64 8 + store ptr %0, ptr %18, align 8, !tbaa !12 + %19 = getelementptr inbounds nuw i8, ptr %14, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %19, align 8, !tbaa !12 + %20 = getelementptr inbounds nuw i8, ptr %14, i64 24 + store ptr %5, ptr %110, align 8, !tbaa !12 + %21 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__2, align 8, !tbaa !12 + %22 = tail call ptr @l_Substring_prevn(ptr noundef nonnull %14, ptr noundef %21, ptr noundef nonnull %5) #4 + %20 = load i32, ptr %14, align 8, !tbaa !8 %21 = icmp sgt i32 %20, 1 br i1 %21, label %22, label %24, !prof !11 -22: ; preds = %lean_nat_sub.exit - %23 = add nsw i32 %20, -1 - store i32 %23, ptr %11, align 4, !tbaa !8 +28: ; preds = %lean_nat_sub.exit + %29 = add nsw i32 %20, -1 + store i32 %29, ptr %14, align 4, !tbaa !8 br label %lean_dec.exit -24: ; preds = %lean_nat_sub.exit +30: ; preds = %lean_nat_sub.exit %.not.i44 = icmp eq i32 %20, 0 - br i1 %.not.i44, label %lean_dec.exit, label %25 + br i1 %.not.i44, label %lean_dec.exit, label %31 -25: ; preds = %24 - tail call void @lean_dec_ref_cold(ptr noundef nonnull %11) #4 +31: ; preds = %30 + tail call void @lean_dec_ref_cold(ptr noundef nonnull %14) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %22, %24, %25 - %26 = ptrtoint ptr %19 to i64 - %27 = and i64 %26, 1 - %.not58 = icmp eq i64 %27, 0 - br i1 %.not58, label %28, label %lean_dec.exit43, !prof !14 +lean_dec.exit: ; preds = %28, %30, %31 + %32 = ptrtoint ptr %22 to i64 + %33 = and i64 %32, 1 + %.not58 = icmp eq i64 %33, 0 + br i1 %.not58, label %40, label %lean_dec.exit43, !prof !14 -28: ; preds = %lean_dec.exit +40: ; preds = %lean_dec.exit %29 = tail call ptr @lean_nat_big_add(ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %19) #4 %30 = load i32, ptr %19, align 4, !tbaa !8 %31 = icmp sgt i32 %30, 1 br i1 %31, label %32, label %34, !prof !11 -32: ; preds = %28 +41: ; preds = %40 %33 = add nsw i32 %30, -1 store i32 %33, ptr %19, align 4, !tbaa !8 br label %lean_dec.exit43 -34: ; preds = %28 +lean_dec.exit43: ; preds = %40 %.not.i = icmp eq i32 %30, 0 - br i1 %.not.i, label %lean_dec.exit43, label %35 + br i1 %.not.i, label %42, label %35 35: ; preds = %34 tail call void @lean_dec_ref_cold(ptr noundef nonnull %19) #4 br label %lean_dec.exit43 -lean_dec.exit43: ; preds = %32, %34, %35, %lean_dec.exit +42: ; preds = %32, %34, %35, %lean_dec.exit %.0.i68 = phi ptr [ %29, %35 ], [ %29, %34 ], [ %29, %32 ], [ %19, %lean_dec.exit ] %.val.i51 = load i32, ptr %0, align 4, !tbaa !8 - %36 = icmp sgt i32 %.val.i51, 0 - br i1 %36, label %37, label %39, !prof !11 + %43 = icmp sgt i32 %.val.i51, 0 + br i1 %43, label %44, label %46, !prof !11 -37: ; preds = %lean_dec.exit43 - %38 = add nuw i32 %.val.i51, 1 - store i32 %38, ptr %0, align 4, !tbaa !8 +44: ; preds = %42 + %45 = add nuw i32 %.val.i51, 1 + store i32 %45, ptr %0, align 4, !tbaa !8 br label %lean_inc.exit42 -39: ; preds = %lean_dec.exit43 +46: ; preds = %42 %.not.i52 = icmp eq i32 %.val.i51, 0 - br i1 %.not.i52, label %lean_inc.exit42, label %40 + br i1 %.not.i52, label %lean_inc.exit42, label %47 -40: ; preds = %39 +47: ; preds = %46 tail call void @lean_inc_ref_cold(ptr noundef nonnull %0) #4 br label %lean_inc.exit42 -lean_inc.exit42: ; preds = %40, %39, %37 +lean_inc.exit42: ; preds = %47, %46, %44 tail call void @lean_inc_heartbeat() #4 - %41 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 - %42 = icmp eq ptr %41, null - br i1 %42, label %43, label %lean_alloc_ctor.exit54 + %48 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #4 + %49 = icmp eq ptr %48, null + br i1 %49, label %50, label %lean_alloc_ctor.exit54 -43: ; preds = %lean_inc.exit42 +50: ; preds = %lean_inc.exit42 tail call void @lean_internal_panic_out_of_memory() #5 unreachable lean_alloc_ctor.exit54: ; preds = %lean_inc.exit42 - %44 = getelementptr inbounds nuw i8, ptr %41, i64 4 - store i32 1, ptr %41, align 4, !tbaa !8 - store i32 196640, ptr %44, align 4 - %45 = getelementptr inbounds nuw i8, ptr %41, i64 8 - store ptr %0, ptr %45, align 8, !tbaa !12 - %46 = getelementptr inbounds nuw i8, ptr %41, i64 16 - store ptr %.0.i68, ptr %46, align 8, !tbaa !12 - %47 = getelementptr inbounds nuw i8, ptr %41, i64 24 - store ptr %5, ptr %47, align 8, !tbaa !12 - %48 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__4, align 8, !tbaa !12 - %49 = tail call zeroext i8 @l_Substring_beq(ptr noundef nonnull %41, ptr noundef %48) #4 - %50 = icmp eq i8 %49, 0 - br i1 %50, label %51, label %57 - -51: ; preds = %lean_alloc_ctor.exit54 - %52 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__1, align 8, !tbaa !12 - %53 = tail call ptr @lean_string_append(ptr noundef nonnull %0, ptr noundef %52) #4 + %51 = getelementptr inbounds nuw i8, ptr %48, i64 4 + store i32 1, ptr %48, align 4, !tbaa !8 + store i32 196640, ptr %51, align 4 + %52 = getelementptr inbounds nuw i8, ptr %48, i64 8 + store ptr %0, ptr %52, align 8, !tbaa !12 + %53 = getelementptr inbounds nuw i8, ptr %48, i64 16 + store ptr %.0.i68, ptr %53, align 8, !tbaa !12 + %54 = getelementptr inbounds nuw i8, ptr %48, i64 24 + store ptr %5, ptr %54, align 8, !tbaa !12 + %55 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__4, align 8, !tbaa !12 + %56 = tail call zeroext i8 @l_Substring_beq(ptr noundef nonnull %48, ptr noundef %55) #4 + %57 = icmp eq i8 %56, 0 + br i1 %57, label %58, label %64 + +58: ; preds = %lean_alloc_ctor.exit54 + %59 = load ptr, ptr @l_Lean_manualRoot___lambda__1___closed__1, align 8, !tbaa !12 + %60 = tail call ptr @lean_string_append(ptr noundef nonnull %0, ptr noundef %59) #4 tail call void @lean_inc_heartbeat() #4 - %54 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 - %55 = icmp eq ptr %54, null - br i1 %55, label %56, label %lean_alloc_ctor.exit55 + %61 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 + %62 = icmp eq ptr %61, null + br i1 %62, label %63, label %lean_alloc_ctor.exit55 -56: ; preds = %51 +63: ; preds = %58 tail call void @lean_internal_panic_out_of_memory() #5 unreachable -57: ; preds = %lean_alloc_ctor.exit54 +64: ; preds = %lean_alloc_ctor.exit54 tail call void @lean_inc_heartbeat() #4 - %58 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 - %59 = icmp eq ptr %58, null - br i1 %59, label %60, label %lean_alloc_ctor.exit55 + %65 = tail call noalias ptr @mi_malloc_small(i64 noundef 24) #4 + %66 = icmp eq ptr %65, null + br i1 %66, label %67, label %lean_alloc_ctor.exit55 -60: ; preds = %57 +67: ; preds = %64 tail call void @lean_internal_panic_out_of_memory() #5 unreachable -lean_alloc_ctor.exit55: ; preds = %57, %51 - %.sink75 = phi ptr [ %54, %51 ], [ %58, %57 ] - %.sink = phi ptr [ %53, %51 ], [ %0, %57 ] - %61 = getelementptr inbounds nuw i8, ptr %.sink75, i64 4 +lean_alloc_ctor.exit55: ; preds = %64, %58 + %.sink75 = phi ptr [ %61, %51 ], [ %65, %57 ] + %.sink = phi ptr [ %60, %51 ], [ %0, %57 ] + %68 = getelementptr inbounds nuw i8, ptr %.sink75, i64 4 store i32 1, ptr %.sink75, align 4, !tbaa !8 - store i32 131096, ptr %61, align 4 - %62 = getelementptr inbounds nuw i8, ptr %.sink75, i64 8 - store ptr %.sink, ptr %62, align 8, !tbaa !12 - %63 = getelementptr inbounds nuw i8, ptr %.sink75, i64 16 - store ptr %1, ptr %63, align 8, !tbaa !12 + store i32 131096, ptr %68, align 4 + %69 = getelementptr inbounds nuw i8, ptr %.sink75, i64 8 + store ptr %.sink, ptr %69, align 8, !tbaa !12 + %70 = getelementptr inbounds nuw i8, ptr %.sink75, i64 16 + store ptr %1, ptr %70, align 8, !tbaa !12 ret ptr %.sink75 } diff --git a/bench/lean4/optimized/MVarRenaming.ll b/bench/lean4/optimized/MVarRenaming.ll index 063780e3b4e..24aa3f45eb7 100644 --- a/bench/lean4/optimized/MVarRenaming.ll +++ b/bench/lean4/optimized/MVarRenaming.ll @@ -868,15 +868,15 @@ lean_alloc_closure.exit: ; preds = %40 store i32 %53, ptr %41, align 4, !tbaa !4 br label %lean_inc.exit15 -54: ; preds = %lean_alloc_closure.exit +57: ; preds = %lean_alloc_closure.exit %.not.i16 = icmp eq i32 %50, 0 - br i1 %.not.i16, label %lean_inc.exit15, label %55 + br i1 %.not.i16, label %lean_inc.exit15, label %58 -55: ; preds = %54 +58: ; preds = %57 tail call void @lean_dec_ref_cold(ptr noundef nonnull %41) #4 br label %lean_inc.exit15 -lean_inc.exit15: ; preds = %52, %54, %55, %31, %36, %38, %39, %lean_dec.exit14, %19, %21, %22 +lean_inc.exit15: ; preds = %52, %57, %58, %31, %36, %38, %39, %lean_dec.exit14, %19, %21, %22 %.0 = phi ptr [ %1, %22 ], [ %1, %21 ], [ %1, %19 ], [ %1, %lean_dec.exit14 ], [ %1, %39 ], [ %1, %38 ], [ %1, %36 ], [ %1, %31 ], [ %49, %55 ], [ %49, %54 ], [ %49, %52 ] ret ptr %.0 } diff --git a/bench/lean4/optimized/PlainDateTime.ll b/bench/lean4/optimized/PlainDateTime.ll index bf7b4e1ed67..c1d130c0c47 100644 --- a/bench/lean4/optimized/PlainDateTime.ll +++ b/bench/lean4/optimized/PlainDateTime.ll @@ -31697,23 +31697,23 @@ define nonnull ptr @l_Std_Time_PlainDateTime_era___boxed(ptr noundef %0) local_u 9: ; preds = %1 %10 = add nsw i32 %7, -1 - store i32 %10, ptr %0, align 4, !tbaa !9 + store i32 %10, ptr %0, align 4, !tbaa !12 br label %lean_dec.exit -11: ; preds = %1 +14: ; preds = %1 %.not.i = icmp eq i32 %7, 0 - br i1 %.not.i, label %lean_dec.exit, label %12 + br i1 %.not.i, label %lean_dec.exit, label %15 -12: ; preds = %11 +15: ; preds = %14 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %12, %11, %9 - %13 = zext i8 %6 to i64 - %14 = shl nuw nsw i64 %13, 1 - %15 = or disjoint i64 %14, 1 - %16 = inttoptr i64 %15 to ptr - ret ptr %16 +lean_dec.exit: ; preds = %15, %14, %12 + %16 = zext i8 %6 to i64 + %17 = shl nuw nsw i64 %16, 1 + %18 = or disjoint i64 %17, 1 + %19 = inttoptr i64 %18 to ptr + ret ptr %19 } ; Function Attrs: nounwind uwtable @@ -32061,18 +32061,18 @@ define ptr @l_Std_Time_PlainDateTime_weekOfMonth___boxed(ptr noundef %0) local_u 7: ; preds = %1 %8 = add nsw i32 %5, -1 - store i32 %8, ptr %0, align 4, !tbaa !9 + store i32 %8, ptr %0, align 4, !tbaa !12 br label %lean_dec.exit -9: ; preds = %1 +12: ; preds = %1 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 +lean_dec.exit: ; preds = %13, %12, %7 ret ptr %4 } @@ -32587,18 +32587,18 @@ define ptr @l_Std_Time_PlainDateTime_quarter___boxed(ptr noundef %0) local_unnam 7: ; preds = %1 %8 = add nsw i32 %5, -1 - store i32 %8, ptr %0, align 4, !tbaa !9 + store i32 %8, ptr %0, align 4, !tbaa !12 br label %lean_dec.exit -9: ; preds = %1 +12: ; preds = %1 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 +lean_dec.exit: ; preds = %13, %12, %7 ret ptr %4 } diff --git a/bench/lean4/optimized/Position.ll b/bench/lean4/optimized/Position.ll index 2c5ea20c6fe..1f899406a5b 100644 --- a/bench/lean4/optimized/Position.ll +++ b/bench/lean4/optimized/Position.ll @@ -2717,24 +2717,24 @@ define nonnull ptr @l_Lean_FileMap_getLastLine___boxed(ptr noundef %0) local_unn 7: ; preds = %1 %8 = add nsw i32 %5, -1 - store i32 %8, ptr %0, align 4, !tbaa !9 + store i32 %8, ptr %0, align 4, !tbaa !12 br label %lean_dec.exit -9: ; preds = %1 +12: ; preds = %1 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 - %11 = and i64 %.val.i, 9223372036854775807 - %12 = icmp eq i64 %11, 0 - %13 = shl i64 %.val.i, 1 - %14 = add i64 %13, -1 - %15 = inttoptr i64 %14 to ptr - %.1.i.i = select i1 %12, ptr inttoptr (i64 1 to ptr), ptr %15 +lean_dec.exit: ; preds = %13, %12, %7 + %14 = and i64 %.val.i, 9223372036854775807 + %15 = icmp eq i64 %14, 0 + %16 = shl i64 %.val.i, 1 + %17 = add i64 %16, -1 + %18 = inttoptr i64 %17 to ptr + %.1.i.i = select i1 %15, ptr inttoptr (i64 1 to ptr), ptr %18 ret ptr %.1.i.i } diff --git a/bench/lean4/optimized/PrettyPrinter.ll b/bench/lean4/optimized/PrettyPrinter.ll index c66f4ba8ffc..6f14e441ec3 100644 --- a/bench/lean4/optimized/PrettyPrinter.ll +++ b/bench/lean4/optimized/PrettyPrinter.ll @@ -23625,37 +23625,37 @@ define ptr @l_Array_mapMUnsafe_map___at___private_Lean_PrettyPrinter_0__Lean_Pre store i32 %8, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit7 -9: ; preds = %3 +12: ; preds = %3 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit7, label %10 + br i1 %.not.i, label %lean_dec.exit7, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #6 br label %lean_dec.exit7 -lean_dec.exit7: ; preds = %10, %9, %7 - %11 = getelementptr i8, ptr %1, i64 8 - %.val10 = load i64, ptr %11, align 8, !tbaa !13 - %12 = load i32, ptr %1, align 8, !tbaa !4 - %13 = icmp sgt i32 %12, 1 +lean_dec.exit7: ; preds = %13, %12, %7 + %14 = getelementptr i8, ptr %1, i64 8 + %.val10 = load i64, ptr %14, align 8, !tbaa !13 + %15 = load i32, ptr %1, align 8, !tbaa !4 + %13 = icmp sgt i32 %15, 1 br i1 %13, label %14, label %16, !prof !11 -14: ; preds = %lean_dec.exit7 - %15 = add nsw i32 %12, -1 - store i32 %15, ptr %1, align 4, !tbaa !4 +20: ; preds = %lean_dec.exit7 + %21 = add nsw i32 %12, -1 + store i32 %21, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -16: ; preds = %lean_dec.exit7 +22: ; preds = %lean_dec.exit7 %.not.i8 = icmp eq i32 %12, 0 - br i1 %.not.i8, label %lean_dec.exit, label %17 + br i1 %.not.i8, label %lean_dec.exit, label %23 -17: ; preds = %16 +23: ; preds = %22 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %17, %16, %14 - %18 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_PrettyPrinter_0__Lean_PrettyPrinter_noContext___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) - ret ptr %18 +lean_dec.exit: ; preds = %23, %22, %20 + %24 = tail call ptr @l_Array_mapMUnsafe_map___at___private_Lean_PrettyPrinter_0__Lean_PrettyPrinter_noContext___spec__1(i64 noundef %.val, i64 noundef %.val10, ptr noundef %2) + ret ptr %24 } ; Function Attrs: nounwind uwtable @@ -26990,65 +26990,65 @@ define nonnull ptr @l_Array_anyMUnsafe_any___at_Lean_MessageData_ofLazyM___spec_ store i32 %9, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit11 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit11, label %11 + br i1 %.not.i, label %lean_dec.exit11, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #6 br label %lean_dec.exit11 -lean_dec.exit11: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %3, i64 8 - %.val = load i64, ptr %12, align 8, !tbaa !13 +lean_dec.exit11: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %3, i64 8 + %.val = load i64, ptr %15, align 8, !tbaa !13 %13 = load i32, ptr %3, align 8, !tbaa !4 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !11 -15: ; preds = %lean_dec.exit11 - %16 = add nsw i32 %13, -1 - store i32 %16, ptr %3, align 4, !tbaa !4 +21: ; preds = %lean_dec.exit11 + %22 = add nsw i32 %13, -1 + store i32 %22, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit10 -17: ; preds = %lean_dec.exit11 +23: ; preds = %lean_dec.exit11 %.not.i12 = icmp eq i32 %13, 0 - br i1 %.not.i12, label %lean_dec.exit10, label %18 + br i1 %.not.i12, label %lean_dec.exit10, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #6 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %18, %17, %15 - %19 = tail call zeroext i8 @l_Array_anyMUnsafe_any___at_Lean_MessageData_ofLazyM___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val) - %20 = ptrtoint ptr %1 to i64 - %21 = and i64 %20, 1 - %.not18 = icmp eq i64 %21, 0 - br i1 %.not18, label %22, label %lean_dec.exit +lean_dec.exit10: ; preds = %24, %23, %21 + %25 = tail call zeroext i8 @l_Array_anyMUnsafe_any___at_Lean_MessageData_ofLazyM___spec__1(ptr noundef %0, ptr noundef %1, i64 noundef %.val16, i64 noundef %.val) + %26 = ptrtoint ptr %1 to i64 + %27 = and i64 %26, 1 + %.not18 = icmp eq i64 %27, 0 + br i1 %.not18, label %28, label %lean_dec.exit -22: ; preds = %lean_dec.exit10 - %23 = load i32, ptr %1, align 4, !tbaa !4 - %24 = icmp sgt i32 %23, 1 - br i1 %24, label %25, label %27, !prof !11 +28: ; preds = %lean_dec.exit10 + %29 = load i32, ptr %1, align 4, !tbaa !4 + %30 = icmp sgt i32 %29, 1 + br i1 %30, label %31, label %33, !prof !11 -25: ; preds = %22 - %26 = add nsw i32 %23, -1 - store i32 %26, ptr %1, align 4, !tbaa !4 +31: ; preds = %28 + %32 = add nsw i32 %29, -1 + store i32 %32, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -27: ; preds = %22 - %.not.i14 = icmp eq i32 %23, 0 - br i1 %.not.i14, label %lean_dec.exit, label %28 +33: ; preds = %28 + %.not.i14 = icmp eq i32 %29, 0 + br i1 %.not.i14, label %lean_dec.exit, label %34 -28: ; preds = %27 +34: ; preds = %33 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #6 br label %lean_dec.exit -lean_dec.exit: ; preds = %28, %27, %25, %lean_dec.exit10 - %29 = shl nuw nsw i8 %19, 1 - %30 = or disjoint i8 %29, 1 - %31 = zext nneg i8 %30 to i64 - %32 = inttoptr i64 %31 to ptr - ret ptr %32 +lean_dec.exit: ; preds = %34, %33, %31, %lean_dec.exit10 + %35 = shl nuw nsw i8 %112, 1 + %36 = or disjoint i8 %35, 1 + %37 = zext nneg i8 %36 to i64 + %38 = inttoptr i64 %37 to ptr + ret ptr %38 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Propagate.ll b/bench/lean4/optimized/Propagate.ll index ce3d4a5ee57..13a236309ed 100644 --- a/bench/lean4/optimized/Propagate.ll +++ b/bench/lean4/optimized/Propagate.ll @@ -62061,109 +62061,109 @@ define ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Meta_Grind_propagateEqDown___ store i32 %21, ptr %4, align 4, !tbaa !4 br label %lean_dec.exit26 -22: ; preds = %16 +25: ; preds = %16 %.not.i = icmp eq i32 %18, 0 - br i1 %.not.i, label %lean_dec.exit26, label %23 + br i1 %.not.i, label %lean_dec.exit26, label %26 -23: ; preds = %22 +26: ; preds = %25 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit26 -lean_dec.exit26: ; preds = %23, %22, %20 - %24 = getelementptr i8, ptr %5, i64 8 - %.val35 = load i64, ptr %24, align 8, !tbaa !16 +lean_dec.exit26: ; preds = %26, %25, %20 + %27 = getelementptr i8, ptr %5, i64 8 + %.val35 = load i64, ptr %27, align 8, !tbaa !16 %25 = load i32, ptr %5, align 8, !tbaa !4 %26 = icmp sgt i32 %25, 1 br i1 %26, label %27, label %29, !prof !9 -27: ; preds = %lean_dec.exit26 - %28 = add nsw i32 %25, -1 - store i32 %28, ptr %5, align 4, !tbaa !4 +33: ; preds = %lean_dec.exit26 + %34 = add nsw i32 %25, -1 + store i32 %34, ptr %5, align 4, !tbaa !4 br label %lean_dec.exit25 -29: ; preds = %lean_dec.exit26 +35: ; preds = %lean_dec.exit26 %.not.i27 = icmp eq i32 %25, 0 - br i1 %.not.i27, label %lean_dec.exit25, label %30 + br i1 %.not.i27, label %lean_dec.exit25, label %36 -30: ; preds = %29 +36: ; preds = %35 tail call void @lean_dec_ref_cold(ptr noundef nonnull %5) #4 br label %lean_dec.exit25 -lean_dec.exit25: ; preds = %30, %29, %27 - %31 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Meta_Grind_propagateEqDown___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, i64 noundef %.val, i64 noundef %.val35, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) - %32 = ptrtoint ptr %3 to i64 - %33 = and i64 %32, 1 - %.not37 = icmp eq i64 %33, 0 - br i1 %.not37, label %34, label %lean_dec.exit24 +lean_dec.exit25: ; preds = %36, %35, %33 + %37 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Lean_Meta_Grind_propagateEqDown___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, i64 noundef %.val, i64 noundef %.val35, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) + %38 = ptrtoint ptr %3 to i64 + %39 = and i64 %38, 1 + %.not37 = icmp eq i64 %39, 0 + br i1 %.not37, label %40, label %lean_dec.exit24 -34: ; preds = %lean_dec.exit25 - %35 = load i32, ptr %3, align 4, !tbaa !4 - %36 = icmp sgt i32 %35, 1 - br i1 %36, label %37, label %39, !prof !9 +40: ; preds = %lean_dec.exit25 + %41 = load i32, ptr %3, align 4, !tbaa !4 + %42 = icmp sgt i32 %41, 1 + br i1 %42, label %43, label %45, !prof !9 -37: ; preds = %34 - %38 = add nsw i32 %35, -1 - store i32 %38, ptr %3, align 4, !tbaa !4 +43: ; preds = %40 + %44 = add nsw i32 %41, -1 + store i32 %44, ptr %3, align 4, !tbaa !4 br label %lean_dec.exit24 -39: ; preds = %34 - %.not.i29 = icmp eq i32 %35, 0 - br i1 %.not.i29, label %lean_dec.exit24, label %40 +45: ; preds = %40 + %.not.i29 = icmp eq i32 %41, 0 + br i1 %.not.i29, label %lean_dec.exit24, label %46 -40: ; preds = %39 +46: ; preds = %45 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit24 -lean_dec.exit24: ; preds = %40, %39, %37, %lean_dec.exit25 - %41 = ptrtoint ptr %2 to i64 - %42 = and i64 %41, 1 - %.not38 = icmp eq i64 %42, 0 - br i1 %.not38, label %43, label %lean_dec.exit23 +lean_dec.exit24: ; preds = %46, %45, %43, %lean_dec.exit25 + %47 = ptrtoint ptr %2 to i64 + %48 = and i64 %47, 1 + %.not38 = icmp eq i64 %48, 0 + br i1 %.not38, label %49, label %lean_dec.exit23 -43: ; preds = %lean_dec.exit24 - %44 = load i32, ptr %2, align 4, !tbaa !4 - %45 = icmp sgt i32 %44, 1 - br i1 %45, label %46, label %48, !prof !9 +49: ; preds = %lean_dec.exit24 + %50 = load i32, ptr %2, align 4, !tbaa !4 + %51 = icmp sgt i32 %50, 1 + br i1 %51, label %52, label %54, !prof !9 -46: ; preds = %43 - %47 = add nsw i32 %44, -1 - store i32 %47, ptr %2, align 4, !tbaa !4 +52: ; preds = %49 + %53 = add nsw i32 %50, -1 + store i32 %53, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit23 -48: ; preds = %43 - %.not.i31 = icmp eq i32 %44, 0 - br i1 %.not.i31, label %lean_dec.exit23, label %49 +54: ; preds = %49 + %.not.i31 = icmp eq i32 %50, 0 + br i1 %.not.i31, label %lean_dec.exit23, label %55 -49: ; preds = %48 +55: ; preds = %54 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit23 -lean_dec.exit23: ; preds = %49, %48, %46, %lean_dec.exit24 - %50 = ptrtoint ptr %1 to i64 - %51 = and i64 %50, 1 - %.not39 = icmp eq i64 %51, 0 - br i1 %.not39, label %52, label %lean_dec.exit +lean_dec.exit23: ; preds = %55, %54, %52, %lean_dec.exit24 + %56 = ptrtoint ptr %1 to i64 + %57 = and i64 %56, 1 + %.not39 = icmp eq i64 %57, 0 + br i1 %.not39, label %58, label %lean_dec.exit -52: ; preds = %lean_dec.exit23 - %53 = load i32, ptr %1, align 4, !tbaa !4 - %54 = icmp sgt i32 %53, 1 - br i1 %54, label %55, label %57, !prof !9 +58: ; preds = %lean_dec.exit23 + %59 = load i32, ptr %1, align 4, !tbaa !4 + %60 = icmp sgt i32 %59, 1 + br i1 %60, label %61, label %63, !prof !9 -55: ; preds = %52 - %56 = add nsw i32 %53, -1 - store i32 %56, ptr %1, align 4, !tbaa !4 +61: ; preds = %58 + %62 = add nsw i32 %59, -1 + store i32 %62, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -57: ; preds = %52 - %.not.i33 = icmp eq i32 %53, 0 - br i1 %.not.i33, label %lean_dec.exit, label %58 +63: ; preds = %58 + %.not.i33 = icmp eq i32 %59, 0 + br i1 %.not.i33, label %lean_dec.exit, label %64 -58: ; preds = %57 +64: ; preds = %63 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %58, %57, %55, %lean_dec.exit23 - ret ptr %31 +lean_dec.exit: ; preds = %64, %63, %61, %lean_dec.exit23 + ret ptr %37 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/ReplaceLevel.ll b/bench/lean4/optimized/ReplaceLevel.ll index 708c3334f9d..135ea05b531 100644 --- a/bench/lean4/optimized/ReplaceLevel.ll +++ b/bench/lean4/optimized/ReplaceLevel.ll @@ -711,17 +711,17 @@ define noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_cache___boxed(ptr nound store i32 %9, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit, label %11 + br i1 %.not.i, label %lean_dec.exit, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %11, %10, %8 - %12 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_cache(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr noundef %3) - ret ptr %12 +lean_dec.exit: ; preds = %14, %13, %8 + %15 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_cache(i64 noundef %.val, ptr noundef %1, ptr noundef %2, ptr noundef %3) + ret ptr %15 } ; Function Attrs: nounwind uwtable @@ -4441,17 +4441,17 @@ define noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit___ store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit, label %11 + br i1 %.not.i, label %lean_dec.exit, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %11, %10, %8 - %12 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) - ret ptr %12 +lean_dec.exit: ; preds = %14, %13, %8 + %15 = tail call ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) + ret ptr %15 } ; Function Attrs: nounwind uwtable @@ -4473,17 +4473,17 @@ define noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM___boxed( store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit, label %11 + br i1 %.not.i, label %lean_dec.exit, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %11, %10, %8 - %12 = tail call noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) - ret ptr %12 +lean_dec.exit: ; preds = %14, %13, %8 + %15 = tail call noalias nonnull ptr @l_Lean_Expr_ReplaceLevelImpl_replaceUnsafeM_visit(ptr noundef %0, i64 noundef %.val, ptr noundef %2, ptr noundef %3) + ret ptr %15 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/RequestCancellation.ll b/bench/lean4/optimized/RequestCancellation.ll index e83b1ab7986..e319b03c1b7 100644 --- a/bench/lean4/optimized/RequestCancellation.ll +++ b/bench/lean4/optimized/RequestCancellation.ll @@ -1422,15 +1422,15 @@ define ptr @l_Lean_Server_RequestCancellationToken_requestCancellationTask___box store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -9: ; preds = %1 +12: ; preds = %1 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 +lean_dec.exit: ; preds = %13, %12, %7 ret ptr %4 } @@ -1456,15 +1456,15 @@ define ptr @l_Lean_Server_RequestCancellationToken_editCancellationTask___boxed( store i32 %8, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -9: ; preds = %1 +12: ; preds = %1 %.not.i = icmp eq i32 %5, 0 - br i1 %.not.i, label %lean_dec.exit, label %10 + br i1 %.not.i, label %lean_dec.exit, label %13 -10: ; preds = %9 +13: ; preds = %12 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %10, %9, %7 +lean_dec.exit: ; preds = %13, %12, %7 ret ptr %4 } @@ -1567,15 +1567,15 @@ define ptr @l_Lean_Server_RequestCancellationToken_wasCancelledByCancelRequest__ store i32 %9, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -10: ; preds = %2 +13: ; preds = %2 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit, label %11 + br i1 %.not.i, label %lean_dec.exit, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %11, %10, %8 +lean_dec.exit: ; preds = %14, %13, %8 ret ptr %5 } @@ -1601,15 +1601,15 @@ define ptr @l_Lean_Server_RequestCancellationToken_wasCancelledByEdit___boxed(pt store i32 %9, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -10: ; preds = %2 +13: ; preds = %2 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit, label %11 + br i1 %.not.i, label %lean_dec.exit, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %11, %10, %8 +lean_dec.exit: ; preds = %14, %13, %8 ret ptr %5 } diff --git a/bench/lean4/optimized/Simp.ll b/bench/lean4/optimized/Simp.ll index 7f55c8d051a..ed452f92713 100644 --- a/bench/lean4/optimized/Simp.ll +++ b/bench/lean4/optimized/Simp.ll @@ -8728,7 +8728,7 @@ define ptr @l_Lean_Elab_Tactic_Conv_evalSimpTrace___lambda__2(ptr noundef %0, pt %19 = ptrtoint ptr %16 to i64 %20 = and i64 %19, 1 %.not168 = icmp eq i64 %20, 0 - br i1 %18, label %21, label %283 + br i1 %18, label %21, label %286 21: ; preds = %15 br i1 %.not168, label %22, label %lean_inc.exit82.thread @@ -9419,41 +9419,41 @@ lean_alloc_ctor.exit: ; preds = %lean_dec.exit84 store i32 %280, ptr %271, align 4, !tbaa !8 br label %lean_dec.exit83 -281: ; preds = %lean_alloc_ctor.exit +284: ; preds = %lean_alloc_ctor.exit %.not.i157 = icmp eq i32 %277, 0 - br i1 %.not.i157, label %lean_dec.exit83, label %282 + br i1 %.not.i157, label %lean_dec.exit83, label %285 -282: ; preds = %281 +285: ; preds = %284 tail call void @lean_dec_ref_cold(ptr noundef nonnull %271) #5 br label %lean_dec.exit83 -283: ; preds = %15 - br i1 %.not168, label %284, label %lean_dec.exit +286: ; preds = %15 + br i1 %.not168, label %287, label %lean_dec.exit -284: ; preds = %283 - %285 = load i32, ptr %16, align 4, !tbaa !8 - %286 = icmp sgt i32 %285, 1 - br i1 %286, label %287, label %289, !prof !11 +287: ; preds = %286 + %288 = load i32, ptr %16, align 4, !tbaa !8 + %289 = icmp sgt i32 %288, 1 + br i1 %289, label %290, label %292, !prof !11 -287: ; preds = %284 - %288 = add nsw i32 %285, -1 - store i32 %288, ptr %16, align 4, !tbaa !8 +290: ; preds = %287 + %291 = add nsw i32 %288, -1 + store i32 %291, ptr %16, align 4, !tbaa !8 br label %lean_dec.exit -289: ; preds = %284 - %.not.i159 = icmp eq i32 %285, 0 - br i1 %.not.i159, label %lean_dec.exit, label %290 +292: ; preds = %287 + %.not.i159 = icmp eq i32 %288, 0 + br i1 %.not.i159, label %lean_dec.exit, label %293 -290: ; preds = %289 +293: ; preds = %292 tail call void @lean_dec_ref_cold(ptr noundef nonnull %16) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %290, %289, %287, %283 - %291 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalSimpTrace___lambda__1(ptr noundef %1, ptr noundef %2, ptr noundef %5, ptr noundef %3, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14) +lean_dec.exit: ; preds = %293, %292, %290, %286 + %294 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalSimpTrace___lambda__1(ptr noundef %1, ptr noundef %2, ptr noundef %5, ptr noundef %3, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14) br label %lean_dec.exit83 -lean_dec.exit83: ; preds = %279, %281, %282, %lean_dec.exit98, %lean_dec.exit86, %lean_dec.exit - %.2 = phi ptr [ %291, %lean_dec.exit ], [ %130, %lean_dec.exit98 ], [ %251, %lean_dec.exit86 ], [ %276, %282 ], [ %276, %281 ], [ %276, %279 ] +lean_dec.exit83: ; preds = %279, %284, %285, %lean_dec.exit98, %lean_dec.exit86, %lean_dec.exit + %.2 = phi ptr [ %294, %lean_dec.exit ], [ %130, %lean_dec.exit98 ], [ %251, %lean_dec.exit86 ], [ %276, %282 ], [ %276, %281 ], [ %276, %279 ] ret ptr %.2 } @@ -18157,7 +18157,7 @@ define ptr @l_Lean_Elab_Tactic_Conv_evalDSimpTrace___lambda__2(ptr noundef %0, p %18 = ptrtoint ptr %15 to i64 %19 = and i64 %18, 1 %.not166 = icmp eq i64 %19, 0 - br i1 %17, label %20, label %282 + br i1 %17, label %20, label %285 20: ; preds = %14 br i1 %.not166, label %21, label %lean_inc.exit80.thread @@ -18848,41 +18848,41 @@ lean_alloc_ctor.exit: ; preds = %lean_dec.exit82 store i32 %279, ptr %270, align 4, !tbaa !8 br label %lean_dec.exit81 -280: ; preds = %lean_alloc_ctor.exit +283: ; preds = %lean_alloc_ctor.exit %.not.i155 = icmp eq i32 %276, 0 - br i1 %.not.i155, label %lean_dec.exit81, label %281 + br i1 %.not.i155, label %lean_dec.exit81, label %284 -281: ; preds = %280 +284: ; preds = %283 tail call void @lean_dec_ref_cold(ptr noundef nonnull %270) #5 br label %lean_dec.exit81 -282: ; preds = %14 - br i1 %.not166, label %283, label %lean_dec.exit +285: ; preds = %14 + br i1 %.not166, label %286, label %lean_dec.exit -283: ; preds = %282 - %284 = load i32, ptr %15, align 4, !tbaa !8 - %285 = icmp sgt i32 %284, 1 - br i1 %285, label %286, label %288, !prof !11 +286: ; preds = %285 + %287 = load i32, ptr %15, align 4, !tbaa !8 + %288 = icmp sgt i32 %287, 1 + br i1 %288, label %289, label %291, !prof !11 -286: ; preds = %283 - %287 = add nsw i32 %284, -1 - store i32 %287, ptr %15, align 4, !tbaa !8 +289: ; preds = %286 + %290 = add nsw i32 %287, -1 + store i32 %290, ptr %15, align 4, !tbaa !8 br label %lean_dec.exit -288: ; preds = %283 - %.not.i157 = icmp eq i32 %284, 0 - br i1 %.not.i157, label %lean_dec.exit, label %289 +291: ; preds = %286 + %.not.i157 = icmp eq i32 %287, 0 + br i1 %.not.i157, label %lean_dec.exit, label %292 -289: ; preds = %288 +292: ; preds = %291 tail call void @lean_dec_ref_cold(ptr noundef nonnull %15) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %289, %288, %286, %282 - %290 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDSimpTrace___lambda__1(ptr noundef %1, ptr noundef %4, ptr noundef %2, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) +lean_dec.exit: ; preds = %292, %291, %289, %285 + %293 = tail call ptr @l_Lean_Elab_Tactic_Conv_evalDSimpTrace___lambda__1(ptr noundef %1, ptr noundef %4, ptr noundef %2, ptr nonnull poison, ptr noundef nonnull inttoptr (i64 1 to ptr), ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) br label %lean_dec.exit81 -lean_dec.exit81: ; preds = %278, %280, %281, %lean_dec.exit96, %lean_dec.exit84, %lean_dec.exit - %.2 = phi ptr [ %290, %lean_dec.exit ], [ %129, %lean_dec.exit96 ], [ %250, %lean_dec.exit84 ], [ %275, %281 ], [ %275, %280 ], [ %275, %278 ] +lean_dec.exit81: ; preds = %278, %283, %284, %lean_dec.exit96, %lean_dec.exit84, %lean_dec.exit + %.2 = phi ptr [ %293, %lean_dec.exit ], [ %129, %lean_dec.exit96 ], [ %250, %lean_dec.exit84 ], [ %275, %281 ], [ %275, %280 ], [ %275, %278 ] ret ptr %.2 } diff --git a/bench/lean4/optimized/TZdb.ll b/bench/lean4/optimized/TZdb.ll index aba1aca56a2..440da13d0ee 100644 --- a/bench/lean4/optimized/TZdb.ll +++ b/bench/lean4/optimized/TZdb.ll @@ -4029,17 +4029,17 @@ define ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_TZdb_inst___spec store i32 %14, ptr %5, align 4, !tbaa !8 br label %lean_dec.exit19 -15: ; preds = %9 +18: ; preds = %9 %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit19, label %16 + br i1 %.not.i, label %lean_dec.exit19, label %19 -16: ; preds = %15 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %5) #3 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %16, %15, %13 - %17 = getelementptr i8, ptr %6, i64 8 - %.val28 = load i64, ptr %17, align 8, !tbaa !12 +lean_dec.exit19: ; preds = %19, %18, %13 + %20 = getelementptr i8, ptr %6, i64 8 + %.val28 = load i64, ptr %20, align 8, !tbaa !12 %18 = load i32, ptr %6, align 8, !tbaa !8 %19 = icmp sgt i32 %18, 1 br i1 %19, label %20, label %22, !prof !11 @@ -4049,89 +4049,89 @@ lean_dec.exit19: ; preds = %16, %15, %13 store i32 %21, ptr %6, align 4, !tbaa !8 br label %lean_dec.exit18 -22: ; preds = %lean_dec.exit19 +28: ; preds = %lean_dec.exit19 %.not.i20 = icmp eq i32 %18, 0 - br i1 %.not.i20, label %lean_dec.exit18, label %23 + br i1 %.not.i20, label %lean_dec.exit18, label %29 -23: ; preds = %22 +29: ; preds = %28 tail call void @lean_dec_ref_cold(ptr noundef nonnull %6) #3 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %23, %22, %20 - %24 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_TZdb_inst___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) - %25 = ptrtoint ptr %4 to i64 - %26 = and i64 %25, 1 - %.not30 = icmp eq i64 %26, 0 - br i1 %.not30, label %27, label %lean_dec.exit17 +lean_dec.exit18: ; preds = %29, %28, %20 + %30 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at_Std_Time_Database_TZdb_inst___spec__1(ptr noundef %0, ptr poison, ptr poison, ptr noundef %3, ptr noundef %4, i64 noundef %.val, i64 noundef %.val28, ptr noundef %7, ptr noundef %8) + %31 = ptrtoint ptr %4 to i64 + %32 = and i64 %31, 1 + %.not30 = icmp eq i64 %32, 0 + br i1 %.not30, label %33, label %lean_dec.exit17 -27: ; preds = %lean_dec.exit18 - %28 = load i32, ptr %4, align 4, !tbaa !8 - %29 = icmp sgt i32 %28, 1 - br i1 %29, label %30, label %32, !prof !11 +33: ; preds = %lean_dec.exit18 + %34 = load i32, ptr %4, align 4, !tbaa !8 + %35 = icmp sgt i32 %34, 1 + br i1 %35, label %36, label %38, !prof !11 -30: ; preds = %27 - %31 = add nsw i32 %28, -1 - store i32 %31, ptr %4, align 4, !tbaa !8 +36: ; preds = %33 + %37 = add nsw i32 %34, -1 + store i32 %37, ptr %4, align 4, !tbaa !8 br label %lean_dec.exit17 -32: ; preds = %27 - %.not.i22 = icmp eq i32 %28, 0 - br i1 %.not.i22, label %lean_dec.exit17, label %33 +38: ; preds = %33 + %.not.i22 = icmp eq i32 %34, 0 + br i1 %.not.i22, label %lean_dec.exit17, label %39 -33: ; preds = %32 +39: ; preds = %38 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #3 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %33, %32, %30, %lean_dec.exit18 - %34 = ptrtoint ptr %2 to i64 - %35 = and i64 %34, 1 - %.not31 = icmp eq i64 %35, 0 - br i1 %.not31, label %36, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %39, %38, %36, %lean_dec.exit18 + %40 = ptrtoint ptr %2 to i64 + %41 = and i64 %40, 1 + %.not31 = icmp eq i64 %41, 0 + br i1 %.not31, label %42, label %lean_dec.exit16 -36: ; preds = %lean_dec.exit17 - %37 = load i32, ptr %2, align 4, !tbaa !8 - %38 = icmp sgt i32 %37, 1 - br i1 %38, label %39, label %41, !prof !11 +42: ; preds = %lean_dec.exit17 + %43 = load i32, ptr %2, align 4, !tbaa !8 + %44 = icmp sgt i32 %43, 1 + br i1 %44, label %45, label %47, !prof !11 -39: ; preds = %36 - %40 = add nsw i32 %37, -1 - store i32 %40, ptr %2, align 4, !tbaa !8 +45: ; preds = %42 + %46 = add nsw i32 %43, -1 + store i32 %46, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit16 -41: ; preds = %36 - %.not.i24 = icmp eq i32 %37, 0 - br i1 %.not.i24, label %lean_dec.exit16, label %42 +47: ; preds = %42 + %.not.i24 = icmp eq i32 %43, 0 + br i1 %.not.i24, label %lean_dec.exit16, label %48 -42: ; preds = %41 +48: ; preds = %47 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #3 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %42, %41, %39, %lean_dec.exit17 - %43 = ptrtoint ptr %1 to i64 - %44 = and i64 %43, 1 - %.not32 = icmp eq i64 %44, 0 - br i1 %.not32, label %45, label %lean_dec.exit +lean_dec.exit16: ; preds = %48, %47, %45, %lean_dec.exit17 + %49 = ptrtoint ptr %1 to i64 + %50 = and i64 %49, 1 + %.not32 = icmp eq i64 %50, 0 + br i1 %.not32, label %51, label %lean_dec.exit -45: ; preds = %lean_dec.exit16 - %46 = load i32, ptr %1, align 4, !tbaa !8 - %47 = icmp sgt i32 %46, 1 - br i1 %47, label %48, label %50, !prof !11 +51: ; preds = %lean_dec.exit16 + %52 = load i32, ptr %1, align 4, !tbaa !8 + %53 = icmp sgt i32 %52, 1 + br i1 %53, label %54, label %56, !prof !11 -48: ; preds = %45 - %49 = add nsw i32 %46, -1 - store i32 %49, ptr %1, align 4, !tbaa !8 +54: ; preds = %51 + %55 = add nsw i32 %52, -1 + store i32 %55, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit -50: ; preds = %45 - %.not.i26 = icmp eq i32 %46, 0 - br i1 %.not.i26, label %lean_dec.exit, label %51 +56: ; preds = %51 + %.not.i26 = icmp eq i32 %52, 0 + br i1 %.not.i26, label %lean_dec.exit, label %57 -51: ; preds = %50 +57: ; preds = %56 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #3 br label %lean_dec.exit -lean_dec.exit: ; preds = %51, %50, %48, %lean_dec.exit16 - ret ptr %24 +lean_dec.exit: ; preds = %57, %56, %54, %lean_dec.exit16 + ret ptr %30 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/Topological.ll b/bench/lean4/optimized/Topological.ll index 50fd72f44fb..e880a8551d9 100644 --- a/bench/lean4/optimized/Topological.ll +++ b/bench/lean4/optimized/Topological.ll @@ -989,28 +989,28 @@ lean_alloc_closure.exit: ; preds = %6 store ptr %0, ptr %18, align 8, !tbaa !10 store i32 2, ptr %7, align 8, !tbaa !4 tail call void @lean_inc_heartbeat() #3 - %19 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %20 = icmp eq ptr %19, null - br i1 %20, label %21, label %l_Lake_recFetch___rarg.exit + %22 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %23 = icmp eq ptr %22, null + br i1 %23, label %24, label %l_Lake_recFetch___rarg.exit -21: ; preds = %lean_alloc_closure.exit +24: ; preds = %lean_alloc_closure.exit tail call void @lean_internal_panic_out_of_memory() #4 unreachable l_Lake_recFetch___rarg.exit: ; preds = %lean_alloc_closure.exit - %22 = getelementptr inbounds nuw i8, ptr %19, i64 4 - store i32 1, ptr %19, align 4, !tbaa !4 - store i32 -184549344, ptr %22, align 4 - %23 = getelementptr inbounds nuw i8, ptr %19, i64 8 - store ptr @l_Lake_recFetch___rarg, ptr %23, align 8, !tbaa !10 - %24 = getelementptr inbounds nuw i8, ptr %19, i64 16 - store i16 2, ptr %24, align 8, !tbaa !12 - %25 = getelementptr inbounds nuw i8, ptr %19, i64 18 - store i16 1, ptr %25, align 2, !tbaa !12 - %26 = getelementptr inbounds nuw i8, ptr %19, i64 24 - store ptr %7, ptr %26, align 8, !tbaa !10 - %27 = tail call ptr @lean_apply_2(ptr noundef nonnull %7, ptr noundef %5, ptr noundef nonnull %19) #3 - ret ptr %27 + %25 = getelementptr inbounds nuw i8, ptr %22, i64 4 + store i32 1, ptr %22, align 4, !tbaa !4 + store i32 -184549344, ptr %25, align 4 + %26 = getelementptr inbounds nuw i8, ptr %22, i64 8 + store ptr @l_Lake_recFetch___rarg, ptr %26, align 8, !tbaa !10 + %27 = getelementptr inbounds nuw i8, ptr %22, i64 16 + store i16 2, ptr %27, align 8, !tbaa !12 + %28 = getelementptr inbounds nuw i8, ptr %22, i64 18 + store i16 1, ptr %28, align 2, !tbaa !12 + %29 = getelementptr inbounds nuw i8, ptr %22, i64 24 + store ptr %7, ptr %29, align 8, !tbaa !10 + %30 = tail call ptr @lean_apply_2(ptr noundef nonnull %7, ptr noundef %5, ptr noundef nonnull %22) #3 + ret ptr %30 } ; Function Attrs: nounwind uwtable @@ -2054,28 +2054,28 @@ lean_alloc_closure.exit: ; preds = %7 store ptr %0, ptr %20, align 8, !tbaa !10 store i32 2, ptr %8, align 8, !tbaa !4 tail call void @lean_inc_heartbeat() #3 - %21 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 - %22 = icmp eq ptr %21, null - br i1 %22, label %23, label %l_Lake_recFetch___rarg.exit + %24 = tail call noalias ptr @mi_malloc_small(i64 noundef 32) #3 + %25 = icmp eq ptr %24, null + br i1 %25, label %26, label %l_Lake_recFetch___rarg.exit -23: ; preds = %lean_alloc_closure.exit +26: ; preds = %lean_alloc_closure.exit tail call void @lean_internal_panic_out_of_memory() #4 unreachable l_Lake_recFetch___rarg.exit: ; preds = %lean_alloc_closure.exit - %24 = getelementptr inbounds nuw i8, ptr %21, i64 4 - store i32 1, ptr %21, align 4, !tbaa !4 - store i32 -184549344, ptr %24, align 4 - %25 = getelementptr inbounds nuw i8, ptr %21, i64 8 - store ptr @l_Lake_recFetch___rarg, ptr %25, align 8, !tbaa !10 - %26 = getelementptr inbounds nuw i8, ptr %21, i64 16 - store i16 2, ptr %26, align 8, !tbaa !12 - %27 = getelementptr inbounds nuw i8, ptr %21, i64 18 - store i16 1, ptr %27, align 2, !tbaa !12 - %28 = getelementptr inbounds nuw i8, ptr %21, i64 24 - store ptr %8, ptr %28, align 8, !tbaa !10 - %29 = tail call ptr @lean_apply_2(ptr noundef nonnull %8, ptr noundef %6, ptr noundef nonnull %21) #3 - ret ptr %29 + %27 = getelementptr inbounds nuw i8, ptr %24, i64 4 + store i32 1, ptr %24, align 4, !tbaa !4 + store i32 -184549344, ptr %27, align 4 + %28 = getelementptr inbounds nuw i8, ptr %24, i64 8 + store ptr @l_Lake_recFetch___rarg, ptr %28, align 8, !tbaa !10 + %29 = getelementptr inbounds nuw i8, ptr %24, i64 16 + store i16 2, ptr %29, align 8, !tbaa !12 + %30 = getelementptr inbounds nuw i8, ptr %24, i64 18 + store i16 1, ptr %30, align 2, !tbaa !12 + %31 = getelementptr inbounds nuw i8, ptr %24, i64 24 + store ptr %8, ptr %31, align 8, !tbaa !10 + %32 = tail call ptr @lean_apply_2(ptr noundef nonnull %8, ptr noundef %6, ptr noundef nonnull %24) #3 + ret ptr %32 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/TypeName.ll b/bench/lean4/optimized/TypeName.ll index 5a6f9205bd9..8637a84afac 100644 --- a/bench/lean4/optimized/TypeName.ll +++ b/bench/lean4/optimized/TypeName.ll @@ -14229,109 +14229,109 @@ define ptr @l_Array_forIn_x27Unsafe_loop___at___private_Lean_Elab_Deriving_TypeN store i32 %14, ptr %3, align 4, !tbaa !8 br label %lean_dec.exit19 -15: ; preds = %9 +18: ; preds = %9 %.not.i = icmp eq i32 %11, 0 - br i1 %.not.i, label %lean_dec.exit19, label %16 + br i1 %.not.i, label %lean_dec.exit19, label %19 -16: ; preds = %15 +19: ; preds = %18 tail call void @lean_dec_ref_cold(ptr noundef nonnull %3) #4 br label %lean_dec.exit19 -lean_dec.exit19: ; preds = %16, %15, %13 - %17 = getelementptr i8, ptr %4, i64 8 - %.val28 = load i64, ptr %17, align 8, !tbaa !15 +lean_dec.exit19: ; preds = %19, %18, %13 + %20 = getelementptr i8, ptr %4, i64 8 + %.val28 = load i64, ptr %20, align 8, !tbaa !15 %18 = load i32, ptr %4, align 8, !tbaa !8 %19 = icmp sgt i32 %18, 1 - br i1 %19, label %20, label %22, !prof !11 + br i1 %19, label %26, label %22, !prof !11 -20: ; preds = %lean_dec.exit19 - %21 = add nsw i32 %18, -1 - store i32 %21, ptr %4, align 4, !tbaa !8 +26: ; preds = %lean_dec.exit19 + %27 = add nsw i32 %18, -1 + store i32 %27, ptr %4, align 4, !tbaa !8 br label %lean_dec.exit18 -22: ; preds = %lean_dec.exit19 +28: ; preds = %lean_dec.exit19 %.not.i20 = icmp eq i32 %18, 0 - br i1 %.not.i20, label %lean_dec.exit18, label %23 + br i1 %.not.i20, label %lean_dec.exit18, label %29 -23: ; preds = %22 +29: ; preds = %28 tail call void @lean_dec_ref_cold(ptr noundef nonnull %4) #4 br label %lean_dec.exit18 -lean_dec.exit18: ; preds = %23, %22, %20 - %24 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at___private_Lean_Elab_Deriving_TypeName_0__Lean_Elab_deriveTypeNameInstance___spec__3(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val28, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) - %25 = ptrtoint ptr %2 to i64 - %26 = and i64 %25, 1 - %.not30 = icmp eq i64 %26, 0 - br i1 %.not30, label %27, label %lean_dec.exit17 - -27: ; preds = %lean_dec.exit18 - %28 = load i32, ptr %2, align 4, !tbaa !8 - %29 = icmp sgt i32 %28, 1 - br i1 %29, label %30, label %32, !prof !11 - -30: ; preds = %27 - %31 = add nsw i32 %28, -1 - store i32 %31, ptr %2, align 4, !tbaa !8 +lean_dec.exit18: ; preds = %29, %28, %26 + %30 = tail call ptr @l_Array_forIn_x27Unsafe_loop___at___private_Lean_Elab_Deriving_TypeName_0__Lean_Elab_deriveTypeNameInstance___spec__3(ptr poison, ptr poison, ptr noundef %2, i64 noundef %.val, i64 noundef %.val28, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) + %31 = ptrtoint ptr %2 to i64 + %32 = and i64 %31, 1 + %.not30 = icmp eq i64 %32, 0 + br i1 %.not30, label %33, label %lean_dec.exit17 + +33: ; preds = %lean_dec.exit18 + %34 = load i32, ptr %2, align 4, !tbaa !8 + %35 = icmp sgt i32 %34, 1 + br i1 %35, label %36, label %38, !prof !11 + +36: ; preds = %33 + %37 = add nsw i32 %34, -1 + store i32 %37, ptr %2, align 4, !tbaa !8 br label %lean_dec.exit17 -32: ; preds = %27 - %.not.i22 = icmp eq i32 %28, 0 - br i1 %.not.i22, label %lean_dec.exit17, label %33 +38: ; preds = %33 + %.not.i22 = icmp eq i32 %34, 0 + br i1 %.not.i22, label %lean_dec.exit17, label %39 -33: ; preds = %32 +39: ; preds = %38 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #4 br label %lean_dec.exit17 -lean_dec.exit17: ; preds = %33, %32, %30, %lean_dec.exit18 - %34 = ptrtoint ptr %1 to i64 - %35 = and i64 %34, 1 - %.not31 = icmp eq i64 %35, 0 - br i1 %.not31, label %36, label %lean_dec.exit16 +lean_dec.exit17: ; preds = %39, %38, %36, %lean_dec.exit18 + %40 = ptrtoint ptr %1 to i64 + %41 = and i64 %40, 1 + %.not31 = icmp eq i64 %41, 0 + br i1 %.not31, label %42, label %lean_dec.exit16 -36: ; preds = %lean_dec.exit17 - %37 = load i32, ptr %1, align 4, !tbaa !8 - %38 = icmp sgt i32 %37, 1 - br i1 %38, label %39, label %41, !prof !11 +42: ; preds = %lean_dec.exit17 + %43 = load i32, ptr %1, align 4, !tbaa !8 + %44 = icmp sgt i32 %43, 1 + br i1 %44, label %45, label %47, !prof !11 -39: ; preds = %36 - %40 = add nsw i32 %37, -1 - store i32 %40, ptr %1, align 4, !tbaa !8 +45: ; preds = %42 + %46 = add nsw i32 %43, -1 + store i32 %46, ptr %1, align 4, !tbaa !8 br label %lean_dec.exit16 -41: ; preds = %36 - %.not.i24 = icmp eq i32 %37, 0 - br i1 %.not.i24, label %lean_dec.exit16, label %42 +47: ; preds = %42 + %.not.i24 = icmp eq i32 %43, 0 + br i1 %.not.i24, label %lean_dec.exit16, label %48 -42: ; preds = %41 +48: ; preds = %47 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #4 br label %lean_dec.exit16 -lean_dec.exit16: ; preds = %42, %41, %39, %lean_dec.exit17 - %43 = ptrtoint ptr %0 to i64 - %44 = and i64 %43, 1 - %.not32 = icmp eq i64 %44, 0 - br i1 %.not32, label %45, label %lean_dec.exit +lean_dec.exit16: ; preds = %48, %47, %45, %lean_dec.exit17 + %49 = ptrtoint ptr %0 to i64 + %50 = and i64 %49, 1 + %.not32 = icmp eq i64 %50, 0 + br i1 %.not32, label %51, label %lean_dec.exit -45: ; preds = %lean_dec.exit16 - %46 = load i32, ptr %0, align 4, !tbaa !8 - %47 = icmp sgt i32 %46, 1 - br i1 %47, label %48, label %50, !prof !11 +51: ; preds = %lean_dec.exit16 + %52 = load i32, ptr %0, align 4, !tbaa !8 + %53 = icmp sgt i32 %52, 1 + br i1 %53, label %54, label %56, !prof !11 -48: ; preds = %45 - %49 = add nsw i32 %46, -1 - store i32 %49, ptr %0, align 4, !tbaa !8 +54: ; preds = %51 + %55 = add nsw i32 %52, -1 + store i32 %55, ptr %0, align 4, !tbaa !8 br label %lean_dec.exit -50: ; preds = %45 - %.not.i26 = icmp eq i32 %46, 0 - br i1 %.not.i26, label %lean_dec.exit, label %51 +56: ; preds = %51 + %.not.i26 = icmp eq i32 %52, 0 + br i1 %.not.i26, label %lean_dec.exit, label %57 -51: ; preds = %50 +57: ; preds = %56 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #4 br label %lean_dec.exit -lean_dec.exit: ; preds = %51, %50, %48, %lean_dec.exit16 - ret ptr %24 +lean_dec.exit: ; preds = %57, %56, %54, %lean_dec.exit16 + ret ptr %30 } ; Function Attrs: nounwind uwtable diff --git a/bench/lean4/optimized/WorkspaceConfig.ll b/bench/lean4/optimized/WorkspaceConfig.ll index 0cb62691ef6..c514fdf8b7b 100644 --- a/bench/lean4/optimized/WorkspaceConfig.ll +++ b/bench/lean4/optimized/WorkspaceConfig.ll @@ -590,17 +590,17 @@ define ptr @l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta__ store i32 %9, ptr %1, align 4, !tbaa !4 br label %lean_dec.exit10 -10: ; preds = %4 +13: ; preds = %4 %.not.i = icmp eq i32 %6, 0 - br i1 %.not.i, label %lean_dec.exit10, label %11 + br i1 %.not.i, label %lean_dec.exit10, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_dec_ref_cold(ptr noundef nonnull %1) #5 br label %lean_dec.exit10 -lean_dec.exit10: ; preds = %11, %10, %8 - %12 = getelementptr i8, ptr %2, i64 8 - %.val15 = load i64, ptr %12, align 8, !tbaa !11 +lean_dec.exit10: ; preds = %14, %13, %8 + %15 = getelementptr i8, ptr %2, i64 8 + %.val15 = load i64, ptr %15, align 8, !tbaa !11 %13 = load i32, ptr %2, align 8, !tbaa !4 %14 = icmp sgt i32 %13, 1 br i1 %14, label %15, label %17, !prof !13 @@ -610,20 +610,20 @@ lean_dec.exit10: ; preds = %11, %10, %8 store i32 %16, ptr %2, align 4, !tbaa !4 br label %lean_dec.exit9 -17: ; preds = %lean_dec.exit10 +23: ; preds = %lean_dec.exit10 %.not.i11 = icmp eq i32 %13, 0 - br i1 %.not.i11, label %lean_dec.exit9, label %18 + br i1 %.not.i11, label %lean_dec.exit9, label %24 -18: ; preds = %17 +24: ; preds = %23 tail call void @lean_dec_ref_cold(ptr noundef nonnull %2) #5 br label %lean_dec.exit9 -lean_dec.exit9: ; preds = %18, %17, %15 +lean_dec.exit9: ; preds = %24, %23, %15 %.not28.i = icmp eq i64 %.val, %.val15 br i1 %.not28.i, label %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit, label %.lr.ph.i .lr.ph.i: ; preds = %lean_dec.exit9 - %19 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %25 = getelementptr inbounds nuw i8, ptr %0, i64 24 br label %20 20: ; preds = %40, %.lr.ph.i @@ -641,77 +641,77 @@ lean_dec.exit9: ; preds = %18, %17, %15 %26 = icmp sgt i32 %.val.i.i.i, 0 br i1 %26, label %27, label %29, !prof !13 -27: ; preds = %25 +26: ; preds = %25 %28 = add nuw i32 %.val.i.i.i, 1 store i32 %28, ptr %22, align 4, !tbaa !4 br label %lean_array_uget.exit.i -29: ; preds = %25 +35: ; preds = %25 %.not.i.i.i = icmp eq i32 %.val.i.i.i, 0 - br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %30 + br i1 %.not.i.i.i, label %lean_array_uget.exit.i, label %36 -30: ; preds = %29 +36: ; preds = %35 tail call void @lean_inc_ref_cold(ptr noundef nonnull %22) #5 br label %lean_array_uget.exit.i -lean_array_uget.exit.i: ; preds = %30, %29, %27, %20 - %31 = getelementptr i8, ptr %22, i64 8 - %.val.i = load ptr, ptr %31, align 8, !tbaa !9 - %32 = ptrtoint ptr %.val.i to i64 - %33 = and i64 %32, 1 - %.not27.i = icmp eq i64 %33, 0 - br i1 %.not27.i, label %34, label %40 +lean_array_uget.exit.i: ; preds = %36, %35, %26, %20 + %37 = getelementptr i8, ptr %22, i64 8 + %.val.i = load ptr, ptr %37, align 8, !tbaa !9 + %38 = ptrtoint ptr %.val.i to i64 + %39 = and i64 %38, 1 + %.not27.i = icmp eq i64 %39, 0 + br i1 %.not27.i, label %40, label %46 -34: ; preds = %lean_array_uget.exit.i +40: ; preds = %lean_array_uget.exit.i %.val.i.i = load i32, ptr %.val.i, align 4, !tbaa !4 - %35 = icmp sgt i32 %.val.i.i, 0 - br i1 %35, label %36, label %38, !prof !13 + %41 = icmp sgt i32 %.val.i.i, 0 + br i1 %41, label %42, label %44, !prof !13 -36: ; preds = %34 - %37 = add nuw i32 %.val.i.i, 1 - store i32 %37, ptr %.val.i, align 4, !tbaa !4 - br label %40 +42: ; preds = %40 + %43 = add nuw i32 %.val.i.i, 1 + store i32 %43, ptr %.val.i, align 4, !tbaa !4 + br label %46 -38: ; preds = %34 +44: ; preds = %40 %.not.i21.i = icmp eq i32 %.val.i.i, 0 - br i1 %.not.i21.i, label %40, label %39 + br i1 %.not.i21.i, label %46, label %45 -39: ; preds = %38 +45: ; preds = %44 tail call void @lean_inc_ref_cold(ptr noundef nonnull %.val.i) #5 - br label %40 + br label %46 -40: ; preds = %39, %38, %36, %lean_array_uget.exit.i - %41 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %.val.i, ptr noundef nonnull %22) #5 - %42 = add i64 %.01730.i, 1 - %.not.i16 = icmp eq i64 %42, %.val15 +46: ; preds = %45, %44, %42, %lean_array_uget.exit.i + %47 = tail call ptr @l_Lean_RBNode_insert___at_Lean_NameMap_insert___spec__1___rarg(ptr noundef %.01929.i, ptr noundef %.val.i, ptr noundef nonnull %22) #5 + %48 = add i64 %.01730.i, 1 + %.not.i16 = icmp eq i64 %48, %.val15 br i1 %.not.i16, label %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit, label %20 -l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit: ; preds = %40, %lean_dec.exit9 - %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %41, %40 ] - %43 = ptrtoint ptr %0 to i64 - %44 = and i64 %43, 1 - %.not18 = icmp eq i64 %44, 0 - br i1 %.not18, label %45, label %lean_dec.exit - -45: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit - %46 = load i32, ptr %0, align 4, !tbaa !4 - %47 = icmp sgt i32 %46, 1 - br i1 %47, label %48, label %50, !prof !13 - -48: ; preds = %45 - %49 = add nsw i32 %46, -1 - store i32 %49, ptr %0, align 4, !tbaa !4 +l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit: ; preds = %46, %lean_dec.exit9 + %.019.lcssa.i = phi ptr [ %3, %lean_dec.exit9 ], [ %47, %40 ] + %49 = ptrtoint ptr %0 to i64 + %50 = and i64 %49, 1 + %.not18 = icmp eq i64 %50, 0 + br i1 %.not18, label %51, label %lean_dec.exit + +51: ; preds = %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit + %52 = load i32, ptr %0, align 4, !tbaa !4 + %53 = icmp sgt i32 %52, 1 + br i1 %53, label %54, label %56, !prof !13 + +54: ; preds = %51 + %55 = add nsw i32 %52, -1 + store i32 %55, ptr %0, align 4, !tbaa !4 br label %lean_dec.exit -50: ; preds = %45 - %.not.i13 = icmp eq i32 %46, 0 - br i1 %.not.i13, label %lean_dec.exit, label %51 +56: ; preds = %51 + %.not.i13 = icmp eq i32 %52, 0 + br i1 %.not.i13, label %lean_dec.exit, label %57 -51: ; preds = %50 +57: ; preds = %56 tail call void @lean_dec_ref_cold(ptr noundef nonnull %0) #5 br label %lean_dec.exit -lean_dec.exit: ; preds = %51, %50, %48, %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit +lean_dec.exit: ; preds = %57, %56, %54, %l_Array_foldlMUnsafe_fold___at_Lake_WorkspaceConfig_instConfigMeta___spec__1.exit ret ptr %.019.lcssa.i } diff --git a/bench/lean4/optimized/expr.ll b/bench/lean4/optimized/expr.ll index 60e3218c4bb..630b8b0d585 100644 --- a/bench/lean4/optimized/expr.ll +++ b/bench/lean4/optimized/expr.ll @@ -3283,72 +3283,72 @@ define hidden void @_ZN4lean14update_bindingERKNS_4exprES2_S2_(ptr dead_on_unwin %12 = load ptr, ptr %11, align 8, !tbaa !10 %13 = load ptr, ptr %3, align 8, !tbaa !10 %14 = icmp eq ptr %12, %13 - br i1 %14, label %29, label %15 + br i1 %14, label %32, label %15 15: ; preds = %10, %4 %16 = getelementptr i8, ptr %5, i64 4 %.val.i.i.i = load i32, ptr %16, align 4 %17 = getelementptr inbounds nuw i8, ptr %5, i64 8 %.val.i.i.i.i = load i32, ptr %5, align 4, !tbaa !21 - %18 = icmp sgt i32 %.val.i.i.i.i, 0 - br i1 %18, label %19, label %21, !prof !24 + %21 = icmp sgt i32 %.val.i.i.i.i, 0 + br i1 %21, label %22, label %24, !prof !24 -19: ; preds = %15 - %20 = add nuw nsw i32 %.val.i.i.i.i, 1 - store i32 %20, ptr %5, align 4, !tbaa !21 +22: ; preds = %15 + %23 = add nuw nsw i32 %.val.i.i.i.i, 1 + store i32 %23, ptr %5, align 4, !tbaa !21 br label %_ZN4lean12binding_infoERKNS_4exprE.exit -21: ; preds = %15 +24: ; preds = %15 %.not.i.i.i.i = icmp eq i32 %.val.i.i.i.i, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean12binding_infoERKNS_4exprE.exit, label %22 + br i1 %.not.i.i.i.i, label %_ZN4lean12binding_infoERKNS_4exprE.exit, label %25 -22: ; preds = %21 +25: ; preds = %24 tail call void @lean_inc_ref_cold(ptr noundef nonnull %5) %.pre.i.i = load ptr, ptr %1, align 8, !tbaa !10 br label %_ZN4lean12binding_infoERKNS_4exprE.exit -_ZN4lean12binding_infoERKNS_4exprE.exit: ; preds = %19, %21, %22 - %23 = phi ptr [ %5, %19 ], [ %5, %21 ], [ %.pre.i.i, %22 ] - %24 = tail call zeroext i8 @lean_expr_binder_info(ptr noundef %23) - %25 = zext i8 %24 to i32 +_ZN4lean12binding_infoERKNS_4exprE.exit: ; preds = %22, %24, %25 + %26 = phi ptr [ %5, %19 ], [ %5, %21 ], [ %.pre.i.i, %22 ] + %27 = tail call zeroext i8 @lean_expr_binder_info(ptr noundef %26) + %28 = zext i8 %27 to i32 %.mask = and i32 %.val.i.i.i, -16777216 - %26 = icmp eq i32 %.mask, 117440512 - br i1 %26, label %27, label %28 + %29 = icmp eq i32 %.mask, 117440512 + br i1 %29, label %30, label %31 -27: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit - tail call void @_ZN4lean5mk_piERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %25) +30: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit + tail call void @_ZN4lean5mk_piERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %28) br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -28: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit - tail call void @_ZN4lean9mk_lambdaERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %25) +31: ; preds = %_ZN4lean12binding_infoERKNS_4exprE.exit + tail call void @_ZN4lean9mk_lambdaERKNS_4nameERKNS_4exprES5_NS_11binder_infoE(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %28) br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -29: ; preds = %10 +32: ; preds = %10 store ptr %5, ptr %0, align 8, !tbaa !10 - %30 = ptrtoint ptr %5 to i64 - %31 = and i64 %30, 1 - %.not.i.i.i10 = icmp eq i64 %31, 0 - br i1 %.not.i.i.i10, label %32, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit + %33 = ptrtoint ptr %5 to i64 + %34 = and i64 %33, 1 + %.not.i.i.i10 = icmp eq i64 %34, 0 + br i1 %.not.i.i.i10, label %35, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -32: ; preds = %29 +35: ; preds = %32 %.val.i.i.i.i11 = load i32, ptr %5, align 4, !tbaa !21 - %33 = icmp sgt i32 %.val.i.i.i.i11, 0 - br i1 %33, label %34, label %36, !prof !24 + %36 = icmp sgt i32 %.val.i.i.i.i11, 0 + br i1 %36, label %37, label %39, !prof !24 -34: ; preds = %32 - %35 = add nuw nsw i32 %.val.i.i.i.i11, 1 - store i32 %35, ptr %5, align 4, !tbaa !21 +37: ; preds = %35 + %38 = add nuw nsw i32 %.val.i.i.i.i11, 1 + store i32 %38, ptr %5, align 4, !tbaa !21 br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -36: ; preds = %32 +39: ; preds = %35 %.not.i.i.i.i12 = icmp eq i32 %.val.i.i.i.i11, 0 - br i1 %.not.i.i.i.i12, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit, label %37 + br i1 %.not.i.i.i.i12, label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit, label %40 -37: ; preds = %36 +40: ; preds = %39 tail call void @lean_inc_ref_cold(ptr noundef nonnull %5) br label %_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit -_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit: ; preds = %37, %36, %34, %29, %28, %27 +_ZN4lean10mk_bindingENS_9expr_kindERKNS_4nameERKNS_4exprES6_NS_11binder_infoE.exit: ; preds = %40, %39, %37, %32, %31, %30 ret void } diff --git a/bench/lean4/optimized/inductive.ll b/bench/lean4/optimized/inductive.ll index 54eeacbb58b..e1146681b1a 100644 --- a/bench/lean4/optimized/inductive.ll +++ b/bench/lean4/optimized/inductive.ll @@ -789,22 +789,22 @@ define hidden noundef zeroext i1 @_ZN4lean12is_inductiveERKNS_11environmentERKNS store i32 %14, ptr %8, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -15: ; preds = %6 +18: ; preds = %6 %.not.i.i.i.i = icmp eq i32 %11, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %16 + br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %19 -16: ; preds = %15 +19: ; preds = %18 invoke void @lean_dec_ref_cold(ptr noundef nonnull %8) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %17 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %20 -17: ; preds = %16 - %18 = landingpad { ptr, i32 } +20: ; preds = %19 + %21 = landingpad { ptr, i32 } catch ptr null - %19 = extractvalue { ptr, i32 } %18, 0 - call void @__clang_call_terminate(ptr %19) #15 + %22 = extractvalue { ptr, i32 } %21, 0 + call void @__clang_call_terminate(ptr %22) #15 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %15, %16 +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %18, %19 %spec.select = phi i1 [ %10, %13 ], [ %10, %15 ], [ %10, %16 ], [ false, %2 ] call void @llvm.lifetime.end.p0(ptr nonnull %3) ret i1 %spec.select @@ -880,22 +880,22 @@ define hidden noundef zeroext i1 @_ZN4lean14is_constructorERKNS_11environmentERK store i32 %14, ptr %8, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -15: ; preds = %6 +18: ; preds = %6 %.not.i.i.i.i = icmp eq i32 %11, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %16 + br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %19 -16: ; preds = %15 +19: ; preds = %18 invoke void @lean_dec_ref_cold(ptr noundef nonnull %8) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %17 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %20 -17: ; preds = %16 - %18 = landingpad { ptr, i32 } +20: ; preds = %19 + %21 = landingpad { ptr, i32 } catch ptr null - %19 = extractvalue { ptr, i32 } %18, 0 - call void @__clang_call_terminate(ptr %19) #15 + %22 = extractvalue { ptr, i32 } %21, 0 + call void @__clang_call_terminate(ptr %22) #15 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %15, %16 +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %18, %19 %spec.select = phi i1 [ %10, %13 ], [ %10, %15 ], [ %10, %16 ], [ false, %2 ] call void @llvm.lifetime.end.p0(ptr nonnull %3) ret i1 %spec.select @@ -926,22 +926,22 @@ define hidden noundef zeroext i1 @_ZN4lean11is_recursorERKNS_11environmentERKNS_ store i32 %14, ptr %8, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -15: ; preds = %6 +18: ; preds = %6 %.not.i.i.i.i = icmp eq i32 %11, 0 - br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %16 + br i1 %.not.i.i.i.i, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %19 -16: ; preds = %15 +19: ; preds = %18 invoke void @lean_dec_ref_cold(ptr noundef nonnull %8) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %17 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %20 -17: ; preds = %16 - %18 = landingpad { ptr, i32 } +20: ; preds = %19 + %21 = landingpad { ptr, i32 } catch ptr null - %19 = extractvalue { ptr, i32 } %18, 0 - call void @__clang_call_terminate(ptr %19) #15 + %22 = extractvalue { ptr, i32 } %21, 0 + call void @__clang_call_terminate(ptr %22) #15 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %15, %16 +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %2, %13, %18, %19 %spec.select = phi i1 [ %10, %13 ], [ %10, %15 ], [ %10, %16 ], [ false, %2 ] call void @llvm.lifetime.end.p0(ptr nonnull %3) ret i1 %spec.select @@ -956,7 +956,7 @@ define hidden void @_ZN4lean18is_constructor_appERKNS_11environmentERKNS_4exprE( %.val.i.i.i.i.i = load i32, ptr %7, align 4 %.mask.i.i = and i32 %.val.i.i.i.i.i, -16777216 %8 = icmp eq i32 %.mask.i.i, 67108864 - br i1 %8, label %9, label %40 + br i1 %8, label %9, label %43 9: ; preds = %3 %10 = getelementptr inbounds nuw i8, ptr %6, i64 8 @@ -968,7 +968,7 @@ define hidden void @_ZN4lean18is_constructor_appERKNS_11environmentERKNS_4exprE( _ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread: ; preds = %9 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br label %40 + br label %43 13: ; preds = %9 %14 = getelementptr inbounds nuw i8, ptr %4, i64 8 @@ -985,62 +985,62 @@ _ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread: ; preds = % %21 = add nsw i32 %18, -1 store i32 %21, ptr %15, align 4, !tbaa !8 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br i1 %17, label %27, label %40 + br i1 %17, label %30, label %43 -22: ; preds = %13 - %.not.i.i.i.i.i = icmp eq i32 %18, 0 - br i1 %.not.i.i.i.i.i, label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, label %23 +25: ; preds = %13 + %.not.i.i.i.i.i = icmp eq i32 %21, 0 + br i1 %.not.i.i.i.i.i, label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, label %26 -23: ; preds = %22 +26: ; preds = %25 invoke void @lean_dec_ref_cold(ptr noundef nonnull %15) - to label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit unwind label %24 + to label %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit unwind label %27 -24: ; preds = %23 - %25 = landingpad { ptr, i32 } +27: ; preds = %26 + %28 = landingpad { ptr, i32 } catch ptr null - %26 = extractvalue { ptr, i32 } %25, 0 - call void @__clang_call_terminate(ptr %26) #15 + %29 = extractvalue { ptr, i32 } %28, 0 + call void @__clang_call_terminate(ptr %29) #15 unreachable -_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit: ; preds = %22, %23 +_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit: ; preds = %25, %26 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br i1 %17, label %27, label %40 + br i1 %17, label %30, label %43 -27: ; preds = %20, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit - %28 = load ptr, ptr %5, align 8, !tbaa !3 - %29 = getelementptr inbounds nuw i8, ptr %28, i64 8 +30: ; preds = %20, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit + %31 = load ptr, ptr %5, align 8, !tbaa !3 + %32 = getelementptr inbounds nuw i8, ptr %31, i64 8 store i8 1, ptr %0, align 8, !tbaa !20 - %30 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %31 = load ptr, ptr %29, align 8, !tbaa !3 - store ptr %31, ptr %30, align 8, !tbaa !3 - %32 = ptrtoint ptr %31 to i64 - %33 = and i64 %32, 1 - %.not.i.i.i.i6 = icmp eq i64 %33, 0 - br i1 %.not.i.i.i.i6, label %34, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit + %33 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %34 = load ptr, ptr %32, align 8, !tbaa !3 + store ptr %34, ptr %33, align 8, !tbaa !3 + %35 = ptrtoint ptr %34 to i64 + %36 = and i64 %35, 1 + %.not.i.i.i.i6 = icmp eq i64 %36, 0 + br i1 %.not.i.i.i.i6, label %37, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -34: ; preds = %27 - %.val.i.i.i.i.i7 = load i32, ptr %31, align 4, !tbaa !8 - %35 = icmp sgt i32 %.val.i.i.i.i.i7, 0 - br i1 %35, label %36, label %38, !prof !11 +37: ; preds = %30 + %.val.i.i.i.i.i7 = load i32, ptr %34, align 4, !tbaa !8 + %38 = icmp sgt i32 %.val.i.i.i.i.i7, 0 + br i1 %38, label %39, label %41, !prof !11 -36: ; preds = %34 - %37 = add nuw nsw i32 %.val.i.i.i.i.i7, 1 - store i32 %37, ptr %31, align 4, !tbaa !8 +39: ; preds = %37 + %40 = add nuw nsw i32 %.val.i.i.i.i.i7, 1 + store i32 %40, ptr %34, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -38: ; preds = %34 +41: ; preds = %37 %.not.i.i.i.i.i8 = icmp eq i32 %.val.i.i.i.i.i7, 0 - br i1 %.not.i.i.i.i.i8, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit, label %39 + br i1 %.not.i.i.i.i.i8, label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit, label %42 -39: ; preds = %38 - call void @lean_inc_ref_cold(ptr noundef nonnull %31) +42: ; preds = %41 + call void @lean_inc_ref_cold(ptr noundef nonnull %34) br label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -40: ; preds = %20, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, %3 +43: ; preds = %20, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit.thread, %_ZN4lean14is_constructorERKNS_11environmentERKNS_4nameE.exit, %3 store i8 0, ptr %0, align 8, !tbaa !20 br label %_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit -_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit: ; preds = %39, %38, %36, %27, %40 +_ZN4lean8optionalINS_4nameEEC2ERKS1_.exit: ; preds = %42, %41, %39, %30, %43 ret void } diff --git a/bench/lean4/optimized/lcnf.ll b/bench/lean4/optimized/lcnf.ll index 60b5fbaac17..b52b7dad1bf 100644 --- a/bench/lean4/optimized/lcnf.ll +++ b/bench/lean4/optimized/lcnf.ll @@ -15115,25 +15115,25 @@ _ZNK4lean16elab_environment4findERKNS_4nameE.exit: ; preds = %5, %12, %14, %15 store i32 %31, ptr %25, align 4, !tbaa !8 br label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit -32: ; preds = %23 +35: ; preds = %23 %.not.i.i.i.i4 = icmp eq i32 %28, 0 - br i1 %.not.i.i.i.i4, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %33 + br i1 %.not.i.i.i.i4, label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit, label %36 -33: ; preds = %32 +36: ; preds = %35 invoke void @lean_dec_ref_cold(ptr noundef nonnull %25) - to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %34 + to label %_ZN4lean8optionalINS_13constant_infoEED2Ev.exit unwind label %37 -34: ; preds = %33 - %35 = landingpad { ptr, i32 } +37: ; preds = %36 + %38 = landingpad { ptr, i32 } catch ptr null - %36 = extractvalue { ptr, i32 } %35, 0 - call void @__clang_call_terminate(ptr %36) #16 + %39 = extractvalue { ptr, i32 } %38, 0 + call void @__clang_call_terminate(ptr %39) #16 unreachable -_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %_ZNK4lean16elab_environment4findERKNS_4nameE.exit, %30, %32, %33 - %37 = phi i1 [ %27, %30 ], [ %27, %32 ], [ %27, %33 ], [ false, %_ZNK4lean16elab_environment4findERKNS_4nameE.exit ] +_ZN4lean8optionalINS_13constant_infoEED2Ev.exit: ; preds = %_ZNK4lean16elab_environment4findERKNS_4nameE.exit, %30, %35, %36 + %40 = phi i1 [ %27, %30 ], [ %27, %32 ], [ %27, %33 ], [ false, %_ZNK4lean16elab_environment4findERKNS_4nameE.exit ] call void @llvm.lifetime.end.p0(ptr nonnull %4) - ret i1 %37 + ret i1 %40 } ; Function Attrs: mustprogress uwtable @@ -16857,27 +16857,27 @@ define linkonce_odr hidden noundef i32 @_ZN4lean10to_lcnf_fn23get_constructor_nf store i32 %30, ptr %22, align 4, !tbaa !8 br label %_ZN4lean10object_refD2Ev.exit -31: ; preds = %21 +34: ; preds = %21 %.not.i.i.i3 = icmp eq i32 %27, 0 - br i1 %.not.i.i.i3, label %_ZN4lean10object_refD2Ev.exit, label %32 + br i1 %.not.i.i.i3, label %_ZN4lean10object_refD2Ev.exit, label %35 -32: ; preds = %31 +35: ; preds = %34 invoke void @lean_dec_ref_cold(ptr noundef nonnull %22) - to label %_ZN4lean10object_refD2Ev.exit unwind label %33 + to label %_ZN4lean10object_refD2Ev.exit unwind label %36 -33: ; preds = %32 - %34 = landingpad { ptr, i32 } +36: ; preds = %35 + %37 = landingpad { ptr, i32 } catch ptr null - %35 = extractvalue { ptr, i32 } %34, 0 - call void @__clang_call_terminate(ptr %35) #16 + %38 = extractvalue { ptr, i32 } %37, 0 + call void @__clang_call_terminate(ptr %38) #16 unreachable -_ZN4lean10object_refD2Ev.exit: ; preds = %29, %31, %32 - %36 = ptrtoint ptr %26 to i64 - %37 = lshr i64 %36, 1 - %38 = trunc i64 %37 to i32 +_ZN4lean10object_refD2Ev.exit: ; preds = %29, %34, %35 + %39 = ptrtoint ptr %26 to i64 + %40 = lshr i64 %39, 1 + %41 = trunc i64 %40 to i32 call void @llvm.lifetime.end.p0(ptr nonnull %4) - ret i32 %38 + ret i32 %41 } declare void @_ZN4lean15instantiate_revERKNS_4exprEjPS1_(ptr dead_on_unwind writable sret(%"class.lean::expr") align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef) local_unnamed_addr #1 diff --git a/bench/lean4/optimized/local_ctx.ll b/bench/lean4/optimized/local_ctx.ll index cf75a1fe581..d081abd3c22 100644 --- a/bench/lean4/optimized/local_ctx.ll +++ b/bench/lean4/optimized/local_ctx.ll @@ -394,30 +394,30 @@ define hidden void @_ZN4lean10local_declC2ERKS0_RKNS_4exprE(ptr noundef nonnull %7 = icmp sgt i32 %.val.i.i.i.i, 0 br i1 %7, label %8, label %10, !prof !13 -8: ; preds = %3 - %9 = add nuw nsw i32 %.val.i.i.i.i, 1 - store i32 %9, ptr %4, align 4, !tbaa !10 +11: ; preds = %3 + %12 = add nuw nsw i32 %.val.i.i.i.i, 1 + store i32 %12, ptr %4, align 4, !tbaa !10 br label %_ZNK4lean10local_decl8get_infoEv.exit -10: ; preds = %3 +13: ; preds = %3 %.not.i.i.i.i = icmp eq i32 %.val.i.i.i.i, 0 - br i1 %.not.i.i.i.i, label %_ZNK4lean10local_decl8get_infoEv.exit, label %11 + br i1 %.not.i.i.i.i, label %_ZNK4lean10local_decl8get_infoEv.exit, label %14 -11: ; preds = %10 +14: ; preds = %13 tail call void @lean_inc_ref_cold(ptr noundef nonnull %4) %.pre.i.i = load ptr, ptr %1, align 8, !tbaa !8 br label %_ZNK4lean10local_decl8get_infoEv.exit -_ZNK4lean10local_decl8get_infoEv.exit: ; preds = %8, %10, %11 - %12 = phi ptr [ %4, %8 ], [ %4, %10 ], [ %.pre.i.i, %11 ] - %13 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %14 = getelementptr inbounds nuw i8, ptr %4, i64 16 - %15 = ptrtoint ptr %6 to i64 - %16 = lshr i64 %15, 1 - %17 = trunc i64 %16 to i32 - %18 = tail call zeroext i8 @lean_local_decl_binder_info(ptr noundef %12) - %19 = zext i8 %18 to i32 - tail call void @_ZN4lean10local_declC2EjRKNS_4nameES3_RKNS_4exprENS_11binder_infoE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %17, ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %19) +_ZNK4lean10local_decl8get_infoEv.exit: ; preds = %11, %13, %14 + %15 = phi ptr [ %4, %8 ], [ %4, %10 ], [ %.pre.i.i, %11 ] + %16 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %17 = getelementptr inbounds nuw i8, ptr %4, i64 16 + %18 = ptrtoint ptr %6 to i64 + %19 = lshr i64 %18, 1 + %20 = trunc i64 %19 to i32 + %21 = tail call zeroext i8 @lean_local_decl_binder_info(ptr noundef %15) + %22 = zext i8 %21 to i32 + tail call void @_ZN4lean10local_declC2EjRKNS_4nameES3_RKNS_4exprENS_11binder_infoE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %20, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %22) ret void } diff --git a/bench/lean4/optimized/sharecommon.ll b/bench/lean4/optimized/sharecommon.ll index 0c28058590e..b6f5fe36b6e 100644 --- a/bench/lean4/optimized/sharecommon.ll +++ b/bench/lean4/optimized/sharecommon.ll @@ -2542,7 +2542,7 @@ _ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__ 72: ; preds = %34 %73 = tail call noundef ptr @_ZN4lean17sharecommon_state8map_findEP11lean_object(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull %1) %.not.not = icmp eq ptr %73, inttoptr (i64 1 to ptr) - br i1 %.not.not, label %111, label %74 + br i1 %.not.not, label %114, label %74 74: ; preds = %72 %75 = getelementptr inbounds nuw i8, ptr %73, i64 8 @@ -2556,143 +2556,143 @@ _ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__ store i32 %80, ptr %73, align 4, !tbaa !13 br label %_ZL8lean_decP11lean_object.exit -81: ; preds = %74 +84: ; preds = %74 %.not.i.i = icmp eq i32 %77, 0 - br i1 %.not.i.i, label %_ZL8lean_decP11lean_object.exit, label %82 + br i1 %.not.i.i, label %_ZL8lean_decP11lean_object.exit, label %85 -82: ; preds = %81 +85: ; preds = %84 tail call void @lean_dec_ref_cold(ptr noundef nonnull %73) br label %_ZL8lean_decP11lean_object.exit -_ZL8lean_decP11lean_object.exit: ; preds = %79, %81, %82 - %83 = getelementptr inbounds nuw i8, ptr %0, i64 48 - %84 = getelementptr inbounds nuw i8, ptr %0, i64 56 - %85 = load ptr, ptr %84, align 8, !tbaa !73 - %86 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %87 = load ptr, ptr %86, align 8, !tbaa !21 - %.not.i15 = icmp eq ptr %85, %87 - br i1 %.not.i15, label %91, label %88 - -88: ; preds = %_ZL8lean_decP11lean_object.exit - store ptr %76, ptr %85, align 8, !tbaa !3 - %89 = load ptr, ptr %84, align 8, !tbaa !73 - %90 = getelementptr inbounds nuw i8, ptr %89, i64 8 - store ptr %90, ptr %84, align 8, !tbaa !73 - br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit +_ZL8lean_decP11lean_object.exit: ; preds = %79, %84, %85 + %86 = getelementptr inbounds nuw i8, ptr %0, i64 48 + %87 = getelementptr inbounds nuw i8, ptr %0, i64 56 + %88 = load ptr, ptr %87, align 8, !tbaa !73 + %89 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %90 = load ptr, ptr %89, align 8, !tbaa !21 + %.not.i15 = icmp eq ptr %88, %90 + br i1 %.not.i15, label %94, label %91 91: ; preds = %_ZL8lean_decP11lean_object.exit - %92 = load ptr, ptr %83, align 8, !tbaa !18 - %93 = ptrtoint ptr %85 to i64 - %94 = ptrtoint ptr %92 to i64 - %95 = sub i64 %93, %94 - %96 = icmp eq i64 %95, 9223372036854775800 - br i1 %96, label %97, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 + store ptr %76, ptr %88, align 8, !tbaa !3 + %92 = load ptr, ptr %87, align 8, !tbaa !73 + %93 = getelementptr inbounds nuw i8, ptr %92, i64 8 + store ptr %93, ptr %87, align 8, !tbaa !73 + br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -97: ; preds = %91 +94: ; preds = %_ZL8lean_decP11lean_object.exit + %95 = load ptr, ptr %86, align 8, !tbaa !18 + %96 = ptrtoint ptr %88 to i64 + %97 = ptrtoint ptr %95 to i64 + %98 = sub i64 %96, %97 + %99 = icmp eq i64 %98, 9223372036854775800 + br i1 %99, label %100, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 + +100: ; preds = %94 tail call void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str) #23 unreachable -_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16: ; preds = %91 - %98 = ashr exact i64 %95, 3 - %.sroa.speculated.i.i.i17 = tail call i64 @llvm.umax.i64(i64 %98, i64 1) - %99 = add nsw i64 %.sroa.speculated.i.i.i17, %98 - %100 = icmp ult i64 %99, %98 - %101 = tail call i64 @llvm.umin.i64(i64 %99, i64 1152921504606846975) - %102 = select i1 %100, i64 1152921504606846975, i64 %101 - %.not.i.i.i18 = icmp ne i64 %102, 0 +_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16: ; preds = %94 + %101 = ashr exact i64 %98, 3 + %.sroa.speculated.i.i.i17 = tail call i64 @llvm.umax.i64(i64 %101, i64 1) + %102 = add nsw i64 %.sroa.speculated.i.i.i17, %101 + %103 = icmp ult i64 %102, %101 + %104 = tail call i64 @llvm.umin.i64(i64 %102, i64 1152921504606846975) + %105 = select i1 %103, i64 1152921504606846975, i64 %104 + %.not.i.i.i18 = icmp ne i64 %105, 0 tail call void @llvm.assume(i1 %.not.i.i.i18) - %103 = shl nuw nsw i64 %102, 3 - %104 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %103) #24 - %105 = getelementptr inbounds i8, ptr %104, i64 %95 - store ptr %76, ptr %105, align 8, !tbaa !3 - %106 = icmp sgt i64 %95, 0 - br i1 %106, label %107, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 - -107: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %104, ptr align 8 %92, i64 %95, i1 false) + %106 = shl nuw nsw i64 %105, 3 + %107 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %106) #24 + %108 = getelementptr inbounds i8, ptr %107, i64 %98 + store ptr %76, ptr %108, align 8, !tbaa !3 + %109 = icmp sgt i64 %98, 0 + br i1 %109, label %110, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 + +110: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %107, ptr align 8 %95, i64 %98, i1 false) br label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 -_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19: ; preds = %107, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 - %108 = getelementptr inbounds nuw i8, ptr %105, i64 8 - %.not.i17.i.i20 = icmp eq ptr %92, null - br i1 %.not.i17.i.i20, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, label %109 +_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19: ; preds = %110, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i16 + %111 = getelementptr inbounds nuw i8, ptr %108, i64 8 + %.not.i17.i.i20 = icmp eq ptr %95, null + br i1 %.not.i17.i.i20, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, label %112 -109: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 - tail call void @_ZdlPvm(ptr noundef nonnull %92, i64 noundef %95) #20 +112: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 + tail call void @_ZdlPvm(ptr noundef nonnull %95, i64 noundef %98) #20 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21 -_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21: ; preds = %109, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 - store ptr %104, ptr %83, align 8, !tbaa !18 - store ptr %108, ptr %84, align 8, !tbaa !73 - %110 = getelementptr inbounds nuw ptr, ptr %104, i64 %102 - store ptr %110, ptr %86, align 8, !tbaa !21 +_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21: ; preds = %112, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i19 + store ptr %107, ptr %86, align 8, !tbaa !18 + store ptr %111, ptr %87, align 8, !tbaa !73 + %113 = getelementptr inbounds nuw ptr, ptr %107, i64 %105 + store ptr %113, ptr %89, align 8, !tbaa !21 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -111: ; preds = %72 - %112 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %113 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %114 = load ptr, ptr %113, align 8, !tbaa !73 - %115 = getelementptr inbounds nuw i8, ptr %0, i64 88 - %116 = load ptr, ptr %115, align 8, !tbaa !21 - %.not.i23 = icmp eq ptr %114, %116 - br i1 %.not.i23, label %120, label %117 - -117: ; preds = %111 - store ptr %1, ptr %114, align 8, !tbaa !3 - %118 = load ptr, ptr %113, align 8, !tbaa !73 - %119 = getelementptr inbounds nuw i8, ptr %118, i64 8 - store ptr %119, ptr %113, align 8, !tbaa !73 +114: ; preds = %72 + %115 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %116 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %117 = load ptr, ptr %116, align 8, !tbaa !73 + %118 = getelementptr inbounds nuw i8, ptr %0, i64 88 + %119 = load ptr, ptr %118, align 8, !tbaa !21 + %.not.i23 = icmp eq ptr %117, %119 + br i1 %.not.i23, label %123, label %120 + +120: ; preds = %114 + store ptr %1, ptr %117, align 8, !tbaa !3 + %121 = load ptr, ptr %116, align 8, !tbaa !73 + %122 = getelementptr inbounds nuw i8, ptr %121, i64 8 + store ptr %122, ptr %116, align 8, !tbaa !73 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -120: ; preds = %111 - %121 = load ptr, ptr %112, align 8, !tbaa !18 - %122 = ptrtoint ptr %114 to i64 - %123 = ptrtoint ptr %121 to i64 - %124 = sub i64 %122, %123 - %125 = icmp eq i64 %124, 9223372036854775800 - br i1 %125, label %126, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 +123: ; preds = %114 + %124 = load ptr, ptr %115, align 8, !tbaa !18 + %125 = ptrtoint ptr %117 to i64 + %126 = ptrtoint ptr %124 to i64 + %127 = sub i64 %125, %126 + %128 = icmp eq i64 %127, 9223372036854775800 + br i1 %128, label %129, label %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 -126: ; preds = %120 +129: ; preds = %123 tail call void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str) #23 unreachable -_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24: ; preds = %120 - %127 = ashr exact i64 %124, 3 - %.sroa.speculated.i.i.i25 = tail call i64 @llvm.umax.i64(i64 %127, i64 1) - %128 = add nsw i64 %.sroa.speculated.i.i.i25, %127 - %129 = icmp ult i64 %128, %127 - %130 = tail call i64 @llvm.umin.i64(i64 %128, i64 1152921504606846975) - %131 = select i1 %129, i64 1152921504606846975, i64 %130 - %.not.i.i.i26 = icmp ne i64 %131, 0 +_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24: ; preds = %123 + %130 = ashr exact i64 %127, 3 + %.sroa.speculated.i.i.i25 = tail call i64 @llvm.umax.i64(i64 %130, i64 1) + %131 = add nsw i64 %.sroa.speculated.i.i.i25, %130 + %132 = icmp ult i64 %131, %130 + %133 = tail call i64 @llvm.umin.i64(i64 %131, i64 1152921504606846975) + %134 = select i1 %132, i64 1152921504606846975, i64 %133 + %.not.i.i.i26 = icmp ne i64 %134, 0 tail call void @llvm.assume(i1 %.not.i.i.i26) - %132 = shl nuw nsw i64 %131, 3 - %133 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %132) #24 - %134 = getelementptr inbounds i8, ptr %133, i64 %124 - store ptr %1, ptr %134, align 8, !tbaa !3 - %135 = icmp sgt i64 %124, 0 - br i1 %135, label %136, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 - -136: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %133, ptr align 8 %121, i64 %124, i1 false) + %135 = shl nuw nsw i64 %134, 3 + %136 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %135) #24 + %137 = getelementptr inbounds i8, ptr %136, i64 %127 + store ptr %1, ptr %137, align 8, !tbaa !3 + %138 = icmp sgt i64 %127, 0 + br i1 %138, label %139, label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 + +139: ; preds = %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %136, ptr align 8 %124, i64 %127, i1 false) br label %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 -_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27: ; preds = %136, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 - %137 = getelementptr inbounds nuw i8, ptr %134, i64 8 - %.not.i17.i.i28 = icmp eq ptr %121, null - br i1 %.not.i17.i.i28, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, label %138 +_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27: ; preds = %139, %_ZNKSt6vectorIP11lean_objectSaIS1_EE12_M_check_lenEmPKc.exit.i.i24 + %140 = getelementptr inbounds nuw i8, ptr %137, i64 8 + %.not.i17.i.i28 = icmp eq ptr %124, null + br i1 %.not.i17.i.i28, label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, label %141 -138: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 - tail call void @_ZdlPvm(ptr noundef nonnull %121, i64 noundef %124) #20 +141: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 + tail call void @_ZdlPvm(ptr noundef nonnull %124, i64 noundef %127) #20 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29 -_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29: ; preds = %138, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 - store ptr %133, ptr %112, align 8, !tbaa !18 - store ptr %137, ptr %113, align 8, !tbaa !73 - %139 = getelementptr inbounds nuw ptr, ptr %133, i64 %131 - store ptr %139, ptr %115, align 8, !tbaa !21 +_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29: ; preds = %141, %_ZNSt6vectorIP11lean_objectSaIS1_EE11_S_relocateEPS1_S4_S4_RS2_.exit16.i.i27 + store ptr %136, ptr %115, align 8, !tbaa !18 + store ptr %140, ptr %116, align 8, !tbaa !73 + %142 = getelementptr inbounds nuw ptr, ptr %136, i64 %134 + store ptr %142, ptr %118, align 8, !tbaa !21 br label %_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit -_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, %117, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, %88, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i13, %49, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i, %11 +_ZNSt6vectorIP11lean_objectSaIS1_EE9push_backERKS1_.exit: ; preds = %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29, %120, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21, %91, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i13, %49, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i, %11 %.0 = phi i1 [ true, %11 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i ], [ true, %49 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i13 ], [ true, %88 ], [ true, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i21 ], [ false, %117 ], [ false, %_ZNSt6vectorIP11lean_objectSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.exit.i29 ] ret i1 %.0 } diff --git a/bench/lean4/optimized/tcp.ll b/bench/lean4/optimized/tcp.ll index 39839311799..277e84fe128 100644 --- a/bench/lean4/optimized/tcp.ll +++ b/bench/lean4/optimized/tcp.ll @@ -270,144 +270,144 @@ define noalias noundef nonnull ptr @lean_uv_tcp_connect(ptr noundef %0, ptr noun %10 = icmp sgt i32 %.val.i, 0 br i1 %10, label %11, label %13, !prof !9 -11: ; preds = %3 - %12 = add nuw nsw i32 %.val.i, 1 - store i32 %12, ptr %0, align 4, !tbaa !40 +14: ; preds = %3 + %15 = add nuw nsw i32 %.val.i, 1 + store i32 %15, ptr %0, align 4, !tbaa !40 br label %_ZL8lean_incP11lean_object.exit -13: ; preds = %3 +16: ; preds = %3 %.not.i29 = icmp eq i32 %.val.i, 0 - br i1 %.not.i29, label %_ZL8lean_incP11lean_object.exit, label %14 + br i1 %.not.i29, label %_ZL8lean_incP11lean_object.exit, label %17 -14: ; preds = %13 +17: ; preds = %16 call void @lean_inc_ref_cold(ptr noundef nonnull %0) br label %_ZL8lean_incP11lean_object.exit -_ZL8lean_incP11lean_object.exit: ; preds = %14, %13, %11 - %15 = ptrtoint ptr %6 to i64 - %16 = and i64 %15, 1 - %.not35 = icmp eq i64 %16, 0 - br i1 %.not35, label %17, label %_ZL8lean_incP11lean_object.exit22 +_ZL8lean_incP11lean_object.exit: ; preds = %17, %16, %14 + %18 = ptrtoint ptr %6 to i64 + %19 = and i64 %18, 1 + %.not35 = icmp eq i64 %19, 0 + br i1 %.not35, label %20, label %_ZL8lean_incP11lean_object.exit22 -17: ; preds = %_ZL8lean_incP11lean_object.exit +20: ; preds = %_ZL8lean_incP11lean_object.exit %.val.i30 = load i32, ptr %6, align 4, !tbaa !40 - %18 = icmp sgt i32 %.val.i30, 0 - br i1 %18, label %19, label %21, !prof !9 + %21 = icmp sgt i32 %.val.i30, 0 + br i1 %21, label %22, label %24, !prof !9 -19: ; preds = %17 - %20 = add nuw nsw i32 %.val.i30, 1 - store i32 %20, ptr %6, align 4, !tbaa !40 +22: ; preds = %20 + %23 = add nuw nsw i32 %.val.i30, 1 + store i32 %23, ptr %6, align 4, !tbaa !40 br label %_ZL8lean_incP11lean_object.exit22 -21: ; preds = %17 +24: ; preds = %20 %.not.i31 = icmp eq i32 %.val.i30, 0 - br i1 %.not.i31, label %_ZL8lean_incP11lean_object.exit22, label %22 + br i1 %.not.i31, label %_ZL8lean_incP11lean_object.exit22, label %25 -22: ; preds = %21 +25: ; preds = %24 call void @lean_inc_ref_cold(ptr noundef nonnull %6) br label %_ZL8lean_incP11lean_object.exit22 -_ZL8lean_incP11lean_object.exit22: ; preds = %22, %21, %19, %_ZL8lean_incP11lean_object.exit +_ZL8lean_incP11lean_object.exit22: ; preds = %25, %24, %22, %_ZL8lean_incP11lean_object.exit call void @_ZN4lean15event_loop_lockEPNS_12event_loop_tE(ptr noundef nonnull @_ZN4lean9global_evE) - %23 = load ptr, ptr %.val, align 8, !tbaa !22 - %24 = call i32 @uv_tcp_connect(ptr noundef nonnull %7, ptr noundef %23, ptr noundef nonnull %4, ptr noundef nonnull @"_ZZ19lean_uv_tcp_connectEN3$_08__invokeEP12uv_connect_si") + %26 = load ptr, ptr %.val, align 8, !tbaa !22 + %27 = call i32 @uv_tcp_connect(ptr noundef nonnull %7, ptr noundef %26, ptr noundef nonnull %4, ptr noundef nonnull @"_ZZ19lean_uv_tcp_connectEN3$_08__invokeEP12uv_connect_si") call void @_ZN4lean17event_loop_unlockEPNS_12event_loop_tE(ptr noundef nonnull @_ZN4lean9global_evE) - %25 = icmp slt i32 %24, 0 - br i1 %25, label %26, label %52 + %28 = icmp slt i32 %27, 0 + br i1 %28, label %29, label %56 -26: ; preds = %_ZL8lean_incP11lean_object.exit22 - br i1 %.not35, label %27, label %_ZL8lean_decP11lean_object.exit23 +29: ; preds = %_ZL8lean_incP11lean_object.exit22 + br i1 %.not35, label %30, label %_ZL8lean_decP11lean_object.exit23 -27: ; preds = %26 - %28 = load i32, ptr %6, align 4, !tbaa !40 - %29 = icmp sgt i32 %28, 1 - br i1 %29, label %30, label %32, !prof !9 +30: ; preds = %29 + %31 = load i32, ptr %6, align 4, !tbaa !40 + %32 = icmp sgt i32 %31, 1 + br i1 %32, label %33, label %35, !prof !9 -30: ; preds = %27 - %31 = add nsw i32 %28, -1 - store i32 %31, ptr %6, align 4, !tbaa !40 - br label %34 +33: ; preds = %30 + %34 = add nsw i32 %31, -1 + store i32 %34, ptr %6, align 4, !tbaa !40 + br label %37 -32: ; preds = %27 - %.not.i27 = icmp eq i32 %28, 0 - br i1 %.not.i27, label %_ZL8lean_decP11lean_object.exit23, label %33 +35: ; preds = %30 + %.not.i27 = icmp eq i32 %31, 0 + br i1 %.not.i27, label %_ZL8lean_decP11lean_object.exit23, label %36 -33: ; preds = %32 +36: ; preds = %35 call void @lean_dec_ref_cold(ptr noundef nonnull %6) %.pr = load i32, ptr %6, align 4, !tbaa !40 - br label %34 + br label %37 -34: ; preds = %33, %30 - %35 = phi i32 [ %.pr, %33 ], [ %31, %30 ] - %36 = icmp sgt i32 %35, 1 - br i1 %36, label %37, label %39, !prof !52 +37: ; preds = %36, %33 + %38 = phi i32 [ %.pr, %33 ], [ %34, %30 ] + %39 = icmp sgt i32 %38, 1 + br i1 %39, label %40, label %42, !prof !52 -37: ; preds = %34 - %38 = add nsw i32 %35, -1 - store i32 %38, ptr %6, align 4, !tbaa !40 +40: ; preds = %37 + %41 = add nsw i32 %38, -1 + store i32 %41, ptr %6, align 4, !tbaa !40 br label %_ZL8lean_decP11lean_object.exit23 -39: ; preds = %34 - %.not.i25 = icmp eq i32 %35, 0 - br i1 %.not.i25, label %_ZL8lean_decP11lean_object.exit23, label %40 +42: ; preds = %37 + %.not.i25 = icmp eq i32 %38, 0 + br i1 %.not.i25, label %_ZL8lean_decP11lean_object.exit23, label %43 -40: ; preds = %39 +43: ; preds = %42 call void @lean_dec_ref_cold(ptr noundef nonnull %6) br label %_ZL8lean_decP11lean_object.exit23 -_ZL8lean_decP11lean_object.exit23: ; preds = %26, %37, %39, %40, %32 +_ZL8lean_decP11lean_object.exit23: ; preds = %26, %37, %42, %40, %32 %41 = load i32, ptr %0, align 4, !tbaa !40 %42 = icmp sgt i32 %41, 1 br i1 %42, label %43, label %45, !prof !9 -43: ; preds = %_ZL8lean_decP11lean_object.exit23 - %44 = add nsw i32 %41, -1 - store i32 %44, ptr %0, align 4, !tbaa !40 +47: ; preds = %_ZL8lean_decP11lean_object.exit23 + %48 = add nsw i32 %41, -1 + store i32 %48, ptr %0, align 4, !tbaa !40 br label %_ZL8lean_decP11lean_object.exit24 -45: ; preds = %_ZL8lean_decP11lean_object.exit23 +49: ; preds = %_ZL8lean_decP11lean_object.exit23 %.not.i = icmp eq i32 %41, 0 - br i1 %.not.i, label %_ZL8lean_decP11lean_object.exit24, label %46 + br i1 %.not.i, label %_ZL8lean_decP11lean_object.exit24, label %50 -46: ; preds = %45 +50: ; preds = %49 call void @lean_dec_ref_cold(ptr noundef nonnull %0) br label %_ZL8lean_decP11lean_object.exit24 -_ZL8lean_decP11lean_object.exit24: ; preds = %46, %45, %43 - %47 = load ptr, ptr %7, align 8, !tbaa !48 - call void @free(ptr noundef %47) #15 +_ZL8lean_decP11lean_object.exit24: ; preds = %50, %49, %43 + %51 = load ptr, ptr %7, align 8, !tbaa !48 + call void @free(ptr noundef %51) #15 call void @free(ptr noundef nonnull %7) #15 - %48 = call ptr @lean_decode_uv_error(i32 noundef %24, ptr noundef null) + %52 = call ptr @lean_decode_uv_error(i32 noundef %27, ptr noundef null) call void @lean_inc_heartbeat() - %49 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 - %50 = icmp eq ptr %49, null - br i1 %50, label %51, label %_ZL23lean_io_result_mk_errorP11lean_object.exit + %53 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 + %54 = icmp eq ptr %53, null + br i1 %54, label %55, label %_ZL23lean_io_result_mk_errorP11lean_object.exit -51: ; preds = %_ZL8lean_decP11lean_object.exit24 +55: ; preds = %_ZL8lean_decP11lean_object.exit24 call void @lean_internal_panic_out_of_memory() #16 unreachable -52: ; preds = %_ZL8lean_incP11lean_object.exit22 +56: ; preds = %_ZL8lean_incP11lean_object.exit22 call void @lean_inc_heartbeat() - %53 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 - %54 = icmp eq ptr %53, null - br i1 %54, label %55, label %_ZL23lean_io_result_mk_errorP11lean_object.exit + %57 = call noalias ptr @mi_malloc_small(i64 noundef 24) #15 + %58 = icmp eq ptr %57, null + br i1 %58, label %59, label %_ZL23lean_io_result_mk_errorP11lean_object.exit -55: ; preds = %52 +59: ; preds = %56 call void @lean_internal_panic_out_of_memory() #16 unreachable -_ZL23lean_io_result_mk_errorP11lean_object.exit: ; preds = %52, %_ZL8lean_decP11lean_object.exit24 - %.sink50 = phi ptr [ %49, %_ZL8lean_decP11lean_object.exit24 ], [ %53, %52 ] +_ZL23lean_io_result_mk_errorP11lean_object.exit: ; preds = %56, %_ZL8lean_decP11lean_object.exit24 + %.sink50 = phi ptr [ %53, %_ZL8lean_decP11lean_object.exit24 ], [ %57, %52 ] %.sink47 = phi i32 [ 16908312, %_ZL8lean_decP11lean_object.exit24 ], [ 131096, %52 ] - %.sink = phi ptr [ %48, %_ZL8lean_decP11lean_object.exit24 ], [ %6, %52 ] - %56 = getelementptr inbounds nuw i8, ptr %.sink50, i64 4 + %.sink = phi ptr [ %52, %_ZL8lean_decP11lean_object.exit24 ], [ %6, %52 ] + %60 = getelementptr inbounds nuw i8, ptr %.sink50, i64 4 store i32 1, ptr %.sink50, align 4, !tbaa !40 - store i32 %.sink47, ptr %56, align 4 - %57 = getelementptr inbounds nuw i8, ptr %.sink50, i64 8 - store ptr %.sink, ptr %57, align 8, !tbaa !34 - %58 = getelementptr inbounds nuw i8, ptr %.sink50, i64 16 - store ptr inttoptr (i64 1 to ptr), ptr %58, align 8, !tbaa !34 + store i32 %.sink47, ptr %60, align 4 + %61 = getelementptr inbounds nuw i8, ptr %.sink50, i64 8 + store ptr %.sink, ptr %61, align 8, !tbaa !34 + %62 = getelementptr inbounds nuw i8, ptr %.sink50, i64 16 + store ptr inttoptr (i64 1 to ptr), ptr %62, align 8, !tbaa !34 call void @llvm.lifetime.end.p0(ptr nonnull %4) ret ptr %.sink50 } diff --git a/bench/libigl/optimized/unproject.ll b/bench/libigl/optimized/unproject.ll index be673ed981d..e4f675f0dd4 100644 --- a/bench/libigl/optimized/unproject.ll +++ b/bench/libigl/optimized/unproject.ll @@ -198,12 +198,12 @@ define weak_odr dso_local void @_ZN3igl9unprojectIdEEN5Eigen6MatrixIT_Li3ELi1ELi %35 = load <2 x double>, ptr %34, align 16, !tbaa !14 %36 = fmul <2 x double> %33, %35 %.sroa.0.i.i.sroa.0.8.vec.extract = extractelement <2 x double> %26, i64 1 - %37 = bitcast double %.sroa.0.i.i.sroa.0.8.vec.extract to <1 x double> - %38 = shufflevector <1 x double> %37, <1 x double> poison, <2 x i32> zeroinitializer + %42 = bitcast double %.sroa.0.i.i.sroa.0.8.vec.extract to <1 x double> + %43 = shufflevector <1 x double> %42, <1 x double> poison, <2 x i32> zeroinitializer %39 = getelementptr inbounds nuw i8, ptr %6, i64 48 %40 = load <2 x double>, ptr %39, align 16, !tbaa !14 %41 = fmul <2 x double> %38, %40 - %42 = fadd <2 x double> %36, %41 + %47 = fadd <2 x double> %36, %41 %43 = shufflevector <2 x double> %28, <2 x double> poison, <2 x i32> zeroinitializer %44 = getelementptr inbounds nuw i8, ptr %6, i64 80 %45 = load <2 x double>, ptr %44, align 16, !tbaa !14 diff --git a/bench/libigl/optimized/vertex_triangle_adjacency.ll b/bench/libigl/optimized/vertex_triangle_adjacency.ll index 9140b8a2a17..19a164ed71a 100644 --- a/bench/libigl/optimized/vertex_triangle_adjacency.ll +++ b/bench/libigl/optimized/vertex_triangle_adjacency.ll @@ -2882,7 +2882,7 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc ._crit_edge: ; preds = %23, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18scalar_constant_opIiEES1_EEEERKNS_9EigenBaseIT_EE.exit invoke void @_ZN3igl6cumsumIN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEES3_EEvRKNS1_10MatrixBaseIT_EEiRNS1_15PlainObjectBaseIT0_EE(ptr noundef nonnull align 1 dereferenceable(1) %5, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(16) %3) - to label %32 unwind label %122 + to label %32 unwind label %125 23: ; preds = %24 %indvars.iv.next78 = add nuw nsw i64 %indvars.iv77, 1 @@ -2907,13 +2907,13 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc %33 = add nsw i32 %1, 1 %34 = sext i32 %33 to i64 %or.cond = icmp sgt i32 %1, -1 - br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i + br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %42 _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 %35 = shl nuw nsw i64 %34, 2 %36 = call noalias ptr @malloc(i64 noundef %35) #19 %37 = icmp eq ptr %36, null - br i1 %37, label %38, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i + br i1 %37, label %38, label %42 38: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i %39 = call ptr @__cxa_allocate_exception(i64 8) #18 @@ -2929,15 +2929,15 @@ _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 cleanup br label %.body -_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 +42: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 %.sroa.0.0 = phi ptr [ null, %32 ], [ %36, %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i ] store i32 0, ptr %.sroa.0.0, align 4, !tbaa !19, !noalias !111 - %42 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %43 = load i64, ptr %42, align 8, !tbaa !106 - %44 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 - %45 = load ptr, ptr %3, align 8, !tbaa !108 - %46 = ptrtoint ptr %44 to i64 - %47 = lshr exact i64 %46, 2 + %43 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %44 = load i64, ptr %43, align 8, !tbaa !106 + %45 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 + %46 = load ptr, ptr %3, align 8, !tbaa !108 + %47 = ptrtoint ptr %45 to i64 + %47 = lshr exact i64 %47, 2 %48 = sub nsw i64 0, %47 %49 = and i64 %48, 3 %50 = call i64 @llvm.smin.i64(i64 %49, i64 %43) @@ -2949,206 +2949,206 @@ _ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i. br i1 %55, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %59, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] - %56 = getelementptr inbounds nuw i32, ptr %44, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %57 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %58 = load i32, ptr %57, align 4, !tbaa !19 - store i32 %58, ptr %56, align 4, !tbaa !19 - %59 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %59, %50 + %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %62, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] + %59 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %60 = getelementptr inbounds nuw i32, ptr %46, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %61 = load i32, ptr %60, align 4, !tbaa !19 + store i32 %61, ptr %59, align 4, !tbaa !19 + %62 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %62, %50 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 _ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - %60 = icmp sgt i64 %51, 3 - br i1 %60, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i + %63 = icmp sgt i64 %51, 3 + br i1 %63, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ._crit_edge.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i - %61 = icmp slt i64 %54, %43 - br i1 %61, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %64 = icmp slt i64 %54, %44 + br i1 %64, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit .lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i - %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %65, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %54, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] - %62 = getelementptr inbounds i32, ptr %44, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %63 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %64 = load i32, ptr %63, align 4, !tbaa !19 - store i32 %64, ptr %62, align 4, !tbaa !19 - %65 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %65, %43 + %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %68, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %54, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] + %65 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %66 = getelementptr inbounds i32, ptr %46, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %67 = load i32, ptr %66, align 4, !tbaa !19 + store i32 %67, ptr %65, align 4, !tbaa !19 + %68 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %68, %44 br i1 %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 .lr.ph.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i - %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %69, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %50, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] - %66 = getelementptr inbounds i32, ptr %44, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %67 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %68 = load <2 x i64>, ptr %67, align 1, !tbaa !115 - store <2 x i64> %68, ptr %66, align 16, !tbaa !115 - %69 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 - %70 = icmp slt i64 %69, %54 - br i1 %70, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 + %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %72, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %50, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] + %69 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %70 = getelementptr inbounds i32, ptr %46, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %71 = load <2 x i64>, ptr %70, align 1, !tbaa !115 + store <2 x i64> %71, ptr %69, align 16, !tbaa !115 + %72 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 + %73 = icmp slt i64 %72, %54 + br i1 %73, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 _ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i - %.not.i.i.i.i.i.i.i.i = icmp eq i64 %43, %34 - br i1 %.not.i.i.i.i.i.i.i.i, label %71, label %thread-pre-split.i.i.i.i.i.i.i + %.not.i.i.i.i.i.i.i.i = icmp eq i64 %44, %34 + br i1 %.not.i.i.i.i.i.i.i.i, label %74, label %thread-pre-split.i.i.i.i.i.i.i thread-pre-split.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %34, i64 noundef 1) - to label %.noexc unwind label %124 + to label %.noexc unwind label %127 .noexc: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %.pr.i.i.i.i.i.i.i = load i64, ptr %42, align 8, !tbaa !106 + %.pr.i.i.i.i.i.i.i = load i64, ptr %43, align 8, !tbaa !106 %.pre = load ptr, ptr %3, align 8, !tbaa !108 - br label %71 + br label %74 -71: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit - %72 = phi ptr [ %.pre, %.noexc ], [ %45, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %73 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %74 = sdiv i64 %73, 4 - %75 = shl nsw i64 %74, 2 - %76 = icmp sgt i64 %73, 3 - br i1 %76, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i +74: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %75 = phi ptr [ %.pre, %.noexc ], [ %46, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %76 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %77 = sdiv i64 %76, 4 + %78 = shl nsw i64 %77, 2 + %79 = icmp sgt i64 %76, 3 + br i1 %79, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i -._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %71 - %77 = icmp slt i64 %75, %73 - br i1 %77, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit +._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %74 + %80 = icmp slt i64 %78, %76 + br i1 %80, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit .lr.ph.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %81, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %75, %._crit_edge.i.i.i.i.i.i.i.i ] - %78 = getelementptr inbounds i32, ptr %72, i64 %.05.i.i.i.i.i.i.i.i.i - %79 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i - %80 = load i32, ptr %79, align 4, !tbaa !19 - store i32 %80, ptr %78, align 4, !tbaa !19 - %81 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %81, %73 + %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %84, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %78, %._crit_edge.i.i.i.i.i.i.i.i ] + %81 = getelementptr inbounds i32, ptr %75, i64 %.05.i.i.i.i.i.i.i.i.i + %82 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i + %83 = load i32, ptr %82, align 4, !tbaa !19 + store i32 %83, ptr %81, align 4, !tbaa !19 + %84 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %84, %76 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i: ; preds = %71, %.lr.ph.i.i.i.i.i.i.i.i - %.011.i.i.i.i.i.i.i.i = phi i64 [ %85, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %71 ] - %82 = getelementptr inbounds nuw i32, ptr %72, i64 %.011.i.i.i.i.i.i.i.i - %83 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i - %84 = load <2 x i64>, ptr %83, align 16, !tbaa !115 - store <2 x i64> %84, ptr %82, align 16, !tbaa !115 - %85 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 - %86 = icmp slt i64 %85, %75 - br i1 %86, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i: ; preds = %74, %.lr.ph.i.i.i.i.i.i.i.i + %.011.i.i.i.i.i.i.i.i = phi i64 [ %88, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %71 ] + %85 = getelementptr inbounds nuw i32, ptr %75, i64 %.011.i.i.i.i.i.i.i.i + %86 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i + %87 = load <2 x i64>, ptr %86, align 16, !tbaa !115 + store <2 x i64> %87, ptr %85, align 16, !tbaa !115 + %88 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 + %89 = icmp slt i64 %88, %78 + br i1 %89, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i call void @free(ptr noundef nonnull %.sroa.0.0) #18 - %87 = load ptr, ptr %3, align 8, !tbaa !108 - %88 = load i64, ptr %42, align 8, !tbaa !106 - %89 = load i64, ptr %8, align 8, !tbaa !106 - %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %89, %88 - br i1 %.not.i.i.i.i.i.i.i.i43, label %90, label %thread-pre-split.i.i.i.i.i.i.i44 + %90 = load ptr, ptr %3, align 8, !tbaa !108 + %91 = load i64, ptr %43, align 8, !tbaa !106 + %92 = load i64, ptr %8, align 8, !tbaa !106 + %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %92, %91 + br i1 %.not.i.i.i.i.i.i.i.i43, label %93, label %thread-pre-split.i.i.i.i.i.i.i44 thread-pre-split.i.i.i.i.i.i.i44: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %88, i64 noundef 1) - to label %.noexc52 unwind label %122 + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %91, i64 noundef 1) + to label %.noexc52 unwind label %125 .noexc52: ; preds = %thread-pre-split.i.i.i.i.i.i.i44 %.pr.i.i.i.i.i.i.i45 = load i64, ptr %8, align 8, !tbaa !106 - br label %90 + br label %93 -90: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - %91 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %88, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] - %92 = load ptr, ptr %5, align 8, !tbaa !108 - %93 = sdiv i64 %91, 4 - %94 = shl nsw i64 %93, 2 - %95 = icmp sgt i64 %91, 3 - br i1 %95, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 +93: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit + %94 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %91, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] + %95 = load ptr, ptr %5, align 8, !tbaa !108 + %96 = sdiv i64 %94, 4 + %97 = shl nsw i64 %96, 2 + %98 = icmp sgt i64 %94, 3 + br i1 %98, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 -._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %90 - %96 = icmp slt i64 %94, %91 - br i1 %96, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit +._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %93 + %99 = icmp slt i64 %97, %94 + br i1 %99, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit .lr.ph.i.i.i.i.i.i.i.i.i47: ; preds = %._crit_edge.i.i.i.i.i.i.i.i46, %.lr.ph.i.i.i.i.i.i.i.i.i47 - %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %100, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %94, %._crit_edge.i.i.i.i.i.i.i.i46 ] - %97 = getelementptr inbounds i32, ptr %92, i64 %.05.i.i.i.i.i.i.i.i.i48 - %98 = getelementptr inbounds i32, ptr %87, i64 %.05.i.i.i.i.i.i.i.i.i48 - %99 = load i32, ptr %98, align 4, !tbaa !19 - store i32 %99, ptr %97, align 4, !tbaa !19 - %100 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %100, %91 + %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %103, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %97, %._crit_edge.i.i.i.i.i.i.i.i46 ] + %100 = getelementptr inbounds i32, ptr %95, i64 %.05.i.i.i.i.i.i.i.i.i48 + %101 = getelementptr inbounds i32, ptr %90, i64 %.05.i.i.i.i.i.i.i.i.i48 + %102 = load i32, ptr %101, align 4, !tbaa !19 + store i32 %102, ptr %100, align 4, !tbaa !19 + %103 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %103, %94 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i49, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i47, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %90, %.lr.ph.i.i.i.i.i.i.i.i50 - %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %104, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %90 ] - %101 = getelementptr inbounds nuw i32, ptr %92, i64 %.011.i.i.i.i.i.i.i.i51 - %102 = getelementptr inbounds nuw i32, ptr %87, i64 %.011.i.i.i.i.i.i.i.i51 - %103 = load <2 x i64>, ptr %102, align 16, !tbaa !115 - store <2 x i64> %103, ptr %101, align 16, !tbaa !115 - %104 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 - %105 = icmp slt i64 %104, %94 - br i1 %105, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %93, %.lr.ph.i.i.i.i.i.i.i.i50 + %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %107, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %90 ] + %104 = getelementptr inbounds nuw i32, ptr %95, i64 %.011.i.i.i.i.i.i.i.i51 + %105 = getelementptr inbounds nuw i32, ptr %90, i64 %.011.i.i.i.i.i.i.i.i51 + %106 = load <2 x i64>, ptr %105, align 16, !tbaa !115 + store <2 x i64> %106, ptr %104, align 16, !tbaa !115 + %107 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 + %108 = icmp slt i64 %107, %97 + br i1 %108, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i47, %._crit_edge.i.i.i.i.i.i.i.i46 call void @llvm.lifetime.start.p0(ptr nonnull %6) - %106 = load i64, ptr %17, align 8, !tbaa !80 - %107 = mul nsw i64 %106, 3 + %109 = load i64, ptr %17, align 8, !tbaa !80 + %110 = mul nsw i64 %109, 3 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, i8 0, i64 16, i1 false) - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %107, i64 noundef 1) + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %110, i64 noundef 1) to label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit unwind label %.body53 .body53: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %108 = landingpad { ptr, i32 } + %111 = landingpad { ptr, i32 } cleanup - %109 = load ptr, ptr %6, align 8, !tbaa !108 - call void @free(ptr noundef %109) #18 + %112 = load ptr, ptr %6, align 8, !tbaa !108 + call void @free(ptr noundef %112) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) br label %.body _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %110 = load ptr, ptr %2, align 8, !tbaa !119 - %111 = load ptr, ptr %6, align 8, !tbaa !119 - store ptr %111, ptr %2, align 8, !tbaa !119 - store ptr %110, ptr %6, align 8, !tbaa !119 - %112 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %113 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %114 = load i64, ptr %112, align 8, !tbaa !12 - %115 = load i64, ptr %113, align 8, !tbaa !12 - store i64 %115, ptr %112, align 8, !tbaa !12 - store i64 %114, ptr %113, align 8, !tbaa !12 - call void @free(ptr noundef %110) #18 + %113 = load ptr, ptr %2, align 8, !tbaa !119 + %114 = load ptr, ptr %6, align 8, !tbaa !119 + store ptr %114, ptr %2, align 8, !tbaa !119 + store ptr %113, ptr %6, align 8, !tbaa !119 + %115 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %116 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %117 = load i64, ptr %115, align 8, !tbaa !12 + %118 = load i64, ptr %116, align 8, !tbaa !12 + store i64 %118, ptr %115, align 8, !tbaa !12 + store i64 %117, ptr %116, align 8, !tbaa !12 + call void @free(ptr noundef %113) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) - %116 = load i64, ptr %17, align 8, !tbaa !80 - %117 = icmp sgt i64 %116, 0 + %119 = load i64, ptr %17, align 8, !tbaa !80 + %120 = icmp sgt i64 %119, 0 %.pre93 = load ptr, ptr %5, align 8, !tbaa !108 - br i1 %117, label %.preheader.lr.ph, label %._crit_edge75 + br i1 %120, label %.preheader.lr.ph, label %._crit_edge75 .preheader.lr.ph: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit - %118 = load ptr, ptr %0, align 8, !tbaa !83 - %119 = load ptr, ptr %2, align 8, !tbaa !108 + %121 = load ptr, ptr %0, align 8, !tbaa !83 + %122 = load ptr, ptr %2, align 8, !tbaa !108 br label %.preheader -.preheader: ; preds = %.preheader.lr.ph, %126 +.preheader: ; preds = %.preheader.lr.ph, %129 %indvars.iv89 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next90, %126 ] - %120 = getelementptr i32, ptr %118, i64 %indvars.iv89 - %121 = trunc nuw nsw i64 %indvars.iv89 to i32 - br label %127 + %123 = getelementptr i32, ptr %121, i64 %indvars.iv89 + %124 = trunc nuw nsw i64 %indvars.iv89 to i32 + br label %130 -._crit_edge75: ; preds = %126, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit +._crit_edge75: ; preds = %129, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit call void @free(ptr noundef %.pre93) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) ret void -122: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge - %123 = landingpad { ptr, i32 } +125: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge + %126 = landingpad { ptr, i32 } cleanup br label %.body -124: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %125 = landingpad { ptr, i32 } +127: ; preds = %thread-pre-split.i.i.i.i.i.i.i + %128 = landingpad { ptr, i32 } cleanup call void @free(ptr noundef nonnull %.sroa.0.0) #18 br label %.body -126: ; preds = %127 +129: ; preds = %130 %indvars.iv.next90 = add nuw nsw i64 %indvars.iv89, 1 - %exitcond92.not = icmp eq i64 %indvars.iv.next90, %116 + %exitcond92.not = icmp eq i64 %indvars.iv.next90, %119 br i1 %exitcond92.not, label %._crit_edge75, label %.preheader, !llvm.loop !120 -127: ; preds = %.preheader, %127 +130: ; preds = %.preheader, %130 %indvars.iv85 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next86, %127 ] - %128 = mul nuw nsw i64 %116, %indvars.iv85 - %129 = getelementptr i32, ptr %120, i64 %128 + %131 = mul nuw nsw i64 %119, %indvars.iv85 + %132 = getelementptr i32, ptr %123, i64 %131 %130 = load i32, ptr %129, align 4, !tbaa !19 %131 = sext i32 %130 to i64 %132 = getelementptr inbounds i32, ptr %.pre93, i64 %131 @@ -3164,12 +3164,12 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %_ZN5E store i32 %140, ptr %138, align 4, !tbaa !19 %indvars.iv.next86 = add nuw nsw i64 %indvars.iv85, 1 %exitcond88.not = icmp eq i64 %indvars.iv.next86, 3 - br i1 %exitcond88.not, label %126, label %127, !llvm.loop !121 + br i1 %exitcond88.not, label %129, label %130, !llvm.loop !121 -.body: ; preds = %124, %40, %.body53, %122 - %.pn41 = phi { ptr, i32 } [ %108, %.body53 ], [ %123, %122 ], [ %125, %124 ], [ %41, %40 ] - %141 = load ptr, ptr %5, align 8, !tbaa !108 - call void @free(ptr noundef %141) #18 +.body: ; preds = %127, %40, %.body53, %125 + %.pn41 = phi { ptr, i32 } [ %111, %.body53 ], [ %126, %122 ], [ %128, %124 ], [ %41, %40 ] + %144 = load ptr, ptr %5, align 8, !tbaa !108 + call void @free(ptr noundef %144) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) br label %common.resume } @@ -3240,7 +3240,7 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc ._crit_edge: ; preds = %23, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18scalar_constant_opIiEES1_EEEERKNS_9EigenBaseIT_EE.exit invoke void @_ZN3igl6cumsumIN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEES3_EEvRKNS1_10MatrixBaseIT_EEiRNS1_15PlainObjectBaseIT0_EE(ptr noundef nonnull align 1 dereferenceable(1) %5, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(16) %3) - to label %32 unwind label %122 + to label %32 unwind label %125 23: ; preds = %24 %indvars.iv.next78 = add nuw nsw i64 %indvars.iv77, 1 @@ -3265,13 +3265,13 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc %33 = add nsw i32 %1, 1 %34 = sext i32 %33 to i64 %or.cond = icmp sgt i32 %1, -1 - br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i + br i1 %or.cond, label %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, label %42 _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 %35 = shl nuw nsw i64 %34, 2 %36 = call noalias ptr @malloc(i64 noundef %35) #19 %37 = icmp eq ptr %36, null - br i1 %37, label %38, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i + br i1 %37, label %38, label %42 38: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i %39 = call ptr @__cxa_allocate_exception(i64 8) #18 @@ -3287,15 +3287,15 @@ _ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i: ; preds = %32 cleanup br label %.body -_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 +42: ; preds = %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i, %32 %.sroa.0.0 = phi ptr [ null, %32 ], [ %36, %_ZN5Eigen8internal23check_size_for_overflowIiEEvm.exit.i.i.i.i.i ] store i32 0, ptr %.sroa.0.0, align 4, !tbaa !19, !noalias !124 - %42 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %43 = load i64, ptr %42, align 8, !tbaa !106 - %44 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 - %45 = load ptr, ptr %3, align 8, !tbaa !108 - %46 = ptrtoint ptr %44 to i64 - %47 = lshr exact i64 %46, 2 + %43 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %44 = load i64, ptr %43, align 8, !tbaa !106 + %45 = getelementptr inbounds nuw i8, ptr %.sroa.0.0, i64 4 + %46 = load ptr, ptr %3, align 8, !tbaa !108 + %47 = ptrtoint ptr %45 to i64 + %47 = lshr exact i64 %47, 2 %48 = sub nsw i64 0, %47 %49 = and i64 %48, 3 %50 = call i64 @llvm.smin.i64(i64 %49, i64 %43) @@ -3307,206 +3307,206 @@ _ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i. br i1 %55, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %59, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] - %56 = getelementptr inbounds nuw i32, ptr %44, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %57 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %58 = load i32, ptr %57, align 4, !tbaa !19 - store i32 %58, ptr %56, align 4, !tbaa !19 - %59 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %59, %50 + %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %62, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] + %59 = getelementptr inbounds nuw i32, ptr %45, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %60 = getelementptr inbounds nuw i32, ptr %46, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %61 = load i32, ptr %60, align 4, !tbaa !19 + store i32 %61, ptr %59, align 4, !tbaa !19 + %62 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %62, %50 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 _ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - %60 = icmp sgt i64 %51, 3 - br i1 %60, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i + %63 = icmp sgt i64 %51, 3 + br i1 %63, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ._crit_edge.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i - %61 = icmp slt i64 %54, %43 - br i1 %61, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %64 = icmp slt i64 %54, %44 + br i1 %64, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit .lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i - %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %65, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %54, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] - %62 = getelementptr inbounds i32, ptr %44, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %63 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %64 = load i32, ptr %63, align 4, !tbaa !19 - store i32 %64, ptr %62, align 4, !tbaa !19 - %65 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %65, %43 + %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %68, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %54, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] + %65 = getelementptr inbounds i32, ptr %45, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %66 = getelementptr inbounds i32, ptr %46, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %67 = load i32, ptr %66, align 4, !tbaa !19 + store i32 %67, ptr %65, align 4, !tbaa !19 + %68 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %68, %44 br i1 %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !114 .lr.ph.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i - %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %69, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %50, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] - %66 = getelementptr inbounds i32, ptr %44, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %67 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %68 = load <2 x i64>, ptr %67, align 1, !tbaa !115 - store <2 x i64> %68, ptr %66, align 16, !tbaa !115 - %69 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 - %70 = icmp slt i64 %69, %54 - br i1 %70, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 + %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %72, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %50, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] + %69 = getelementptr inbounds i32, ptr %45, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %70 = getelementptr inbounds i32, ptr %46, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %71 = load <2 x i64>, ptr %70, align 1, !tbaa !115 + store <2 x i64> %71, ptr %69, align 16, !tbaa !115 + %72 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 + %73 = icmp slt i64 %72, %54 + br i1 %73, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !116 _ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i - %.not.i.i.i.i.i.i.i.i = icmp eq i64 %43, %34 - br i1 %.not.i.i.i.i.i.i.i.i, label %71, label %thread-pre-split.i.i.i.i.i.i.i + %.not.i.i.i.i.i.i.i.i = icmp eq i64 %44, %34 + br i1 %.not.i.i.i.i.i.i.i.i, label %74, label %thread-pre-split.i.i.i.i.i.i.i thread-pre-split.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %34, i64 noundef 1) - to label %.noexc unwind label %124 + to label %.noexc unwind label %127 .noexc: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %.pr.i.i.i.i.i.i.i = load i64, ptr %42, align 8, !tbaa !106 + %.pr.i.i.i.i.i.i.i = load i64, ptr %43, align 8, !tbaa !106 %.pre = load ptr, ptr %3, align 8, !tbaa !108 - br label %71 + br label %74 -71: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit - %72 = phi ptr [ %.pre, %.noexc ], [ %45, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %73 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] - %74 = sdiv i64 %73, 4 - %75 = shl nsw i64 %74, 2 - %76 = icmp sgt i64 %73, 3 - br i1 %76, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i +74: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %75 = phi ptr [ %.pre, %.noexc ], [ %46, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %76 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %34, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] + %77 = sdiv i64 %76, 4 + %78 = shl nsw i64 %77, 2 + %79 = icmp sgt i64 %76, 3 + br i1 %79, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i -._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %71 - %77 = icmp slt i64 %75, %73 - br i1 %77, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit +._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %74 + %80 = icmp slt i64 %78, %76 + br i1 %80, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit .lr.ph.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %81, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %75, %._crit_edge.i.i.i.i.i.i.i.i ] - %78 = getelementptr inbounds i32, ptr %72, i64 %.05.i.i.i.i.i.i.i.i.i - %79 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i - %80 = load i32, ptr %79, align 4, !tbaa !19 - store i32 %80, ptr %78, align 4, !tbaa !19 - %81 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %81, %73 + %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %84, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %78, %._crit_edge.i.i.i.i.i.i.i.i ] + %81 = getelementptr inbounds i32, ptr %75, i64 %.05.i.i.i.i.i.i.i.i.i + %82 = getelementptr inbounds i32, ptr %.sroa.0.0, i64 %.05.i.i.i.i.i.i.i.i.i + %83 = load i32, ptr %82, align 4, !tbaa !19 + store i32 %83, ptr %81, align 4, !tbaa !19 + %84 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %84, %76 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i: ; preds = %71, %.lr.ph.i.i.i.i.i.i.i.i - %.011.i.i.i.i.i.i.i.i = phi i64 [ %85, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %71 ] - %82 = getelementptr inbounds nuw i32, ptr %72, i64 %.011.i.i.i.i.i.i.i.i - %83 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i - %84 = load <2 x i64>, ptr %83, align 16, !tbaa !115 - store <2 x i64> %84, ptr %82, align 16, !tbaa !115 - %85 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 - %86 = icmp slt i64 %85, %75 - br i1 %86, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i: ; preds = %74, %.lr.ph.i.i.i.i.i.i.i.i + %.011.i.i.i.i.i.i.i.i = phi i64 [ %88, %.lr.ph.i.i.i.i.i.i.i.i ], [ 0, %71 ] + %85 = getelementptr inbounds nuw i32, ptr %75, i64 %.011.i.i.i.i.i.i.i.i + %86 = getelementptr inbounds nuw i32, ptr %.sroa.0.0, i64 %.011.i.i.i.i.i.i.i.i + %87 = load <2 x i64>, ptr %86, align 16, !tbaa !115 + store <2 x i64> %87, ptr %85, align 16, !tbaa !115 + %88 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i, 4 + %89 = icmp slt i64 %88, %78 + br i1 %89, label %.lr.ph.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i, !llvm.loop !118 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i call void @free(ptr noundef nonnull %.sroa.0.0) #18 - %87 = load ptr, ptr %3, align 8, !tbaa !108 - %88 = load i64, ptr %42, align 8, !tbaa !106 - %89 = load i64, ptr %8, align 8, !tbaa !106 - %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %89, %88 - br i1 %.not.i.i.i.i.i.i.i.i43, label %90, label %thread-pre-split.i.i.i.i.i.i.i44 + %90 = load ptr, ptr %3, align 8, !tbaa !108 + %91 = load i64, ptr %43, align 8, !tbaa !106 + %92 = load i64, ptr %8, align 8, !tbaa !106 + %.not.i.i.i.i.i.i.i.i43 = icmp eq i64 %92, %91 + br i1 %.not.i.i.i.i.i.i.i.i43, label %93, label %thread-pre-split.i.i.i.i.i.i.i44 thread-pre-split.i.i.i.i.i.i.i44: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %88, i64 noundef 1) - to label %.noexc52 unwind label %122 + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %91, i64 noundef 1) + to label %.noexc52 unwind label %125 .noexc52: ; preds = %thread-pre-split.i.i.i.i.i.i.i44 %.pr.i.i.i.i.i.i.i45 = load i64, ptr %8, align 8, !tbaa !106 - br label %90 + br label %93 -90: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - %91 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %88, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] - %92 = load ptr, ptr %5, align 8, !tbaa !108 - %93 = sdiv i64 %91, 4 - %94 = shl nsw i64 %93, 2 - %95 = icmp sgt i64 %91, 3 - br i1 %95, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 +93: ; preds = %.noexc52, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit + %94 = phi i64 [ %.pr.i.i.i.i.i.i.i45, %.noexc52 ], [ %91, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] + %95 = load ptr, ptr %5, align 8, !tbaa !108 + %96 = sdiv i64 %94, 4 + %97 = shl nsw i64 %96, 2 + %98 = icmp sgt i64 %94, 3 + br i1 %98, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46 -._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %90 - %96 = icmp slt i64 %94, %91 - br i1 %96, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit +._crit_edge.i.i.i.i.i.i.i.i46: ; preds = %.lr.ph.i.i.i.i.i.i.i.i50, %93 + %99 = icmp slt i64 %97, %94 + br i1 %99, label %.lr.ph.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit .lr.ph.i.i.i.i.i.i.i.i.i47: ; preds = %._crit_edge.i.i.i.i.i.i.i.i46, %.lr.ph.i.i.i.i.i.i.i.i.i47 - %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %100, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %94, %._crit_edge.i.i.i.i.i.i.i.i46 ] - %97 = getelementptr inbounds i32, ptr %92, i64 %.05.i.i.i.i.i.i.i.i.i48 - %98 = getelementptr inbounds i32, ptr %87, i64 %.05.i.i.i.i.i.i.i.i.i48 - %99 = load i32, ptr %98, align 4, !tbaa !19 - store i32 %99, ptr %97, align 4, !tbaa !19 - %100 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %100, %91 + %.05.i.i.i.i.i.i.i.i.i48 = phi i64 [ %103, %.lr.ph.i.i.i.i.i.i.i.i.i47 ], [ %97, %._crit_edge.i.i.i.i.i.i.i.i46 ] + %100 = getelementptr inbounds i32, ptr %95, i64 %.05.i.i.i.i.i.i.i.i.i48 + %101 = getelementptr inbounds i32, ptr %90, i64 %.05.i.i.i.i.i.i.i.i.i48 + %102 = load i32, ptr %101, align 4, !tbaa !19 + store i32 %102, ptr %100, align 4, !tbaa !19 + %103 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i48, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i49 = icmp eq i64 %103, %94 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i49, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i47, !llvm.loop !117 -.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %90, %.lr.ph.i.i.i.i.i.i.i.i50 - %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %104, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %90 ] - %101 = getelementptr inbounds nuw i32, ptr %92, i64 %.011.i.i.i.i.i.i.i.i51 - %102 = getelementptr inbounds nuw i32, ptr %87, i64 %.011.i.i.i.i.i.i.i.i51 - %103 = load <2 x i64>, ptr %102, align 16, !tbaa !115 - store <2 x i64> %103, ptr %101, align 16, !tbaa !115 - %104 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 - %105 = icmp slt i64 %104, %94 - br i1 %105, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 +.lr.ph.i.i.i.i.i.i.i.i50: ; preds = %93, %.lr.ph.i.i.i.i.i.i.i.i50 + %.011.i.i.i.i.i.i.i.i51 = phi i64 [ %107, %.lr.ph.i.i.i.i.i.i.i.i50 ], [ 0, %90 ] + %104 = getelementptr inbounds nuw i32, ptr %95, i64 %.011.i.i.i.i.i.i.i.i51 + %105 = getelementptr inbounds nuw i32, ptr %90, i64 %.011.i.i.i.i.i.i.i.i51 + %106 = load <2 x i64>, ptr %105, align 16, !tbaa !115 + store <2 x i64> %106, ptr %104, align 16, !tbaa !115 + %107 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i51, 4 + %108 = icmp slt i64 %107, %97 + br i1 %108, label %.lr.ph.i.i.i.i.i.i.i.i50, label %._crit_edge.i.i.i.i.i.i.i.i46, !llvm.loop !118 _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i47, %._crit_edge.i.i.i.i.i.i.i.i46 call void @llvm.lifetime.start.p0(ptr nonnull %6) - %106 = load i64, ptr %17, align 8, !tbaa !13 - %107 = mul nsw i64 %106, 3 + %109 = load i64, ptr %17, align 8, !tbaa !13 + %110 = mul nsw i64 %109, 3 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, i8 0, i64 16, i1 false) - invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %107, i64 noundef 1) + invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %110, i64 noundef 1) to label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit unwind label %.body53 .body53: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %108 = landingpad { ptr, i32 } + %111 = landingpad { ptr, i32 } cleanup - %109 = load ptr, ptr %6, align 8, !tbaa !108 - call void @free(ptr noundef %109) #18 + %112 = load ptr, ptr %6, align 8, !tbaa !108 + call void @free(ptr noundef %112) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) br label %.body _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %110 = load ptr, ptr %2, align 8, !tbaa !119 - %111 = load ptr, ptr %6, align 8, !tbaa !119 - store ptr %111, ptr %2, align 8, !tbaa !119 - store ptr %110, ptr %6, align 8, !tbaa !119 - %112 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %113 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %114 = load i64, ptr %112, align 8, !tbaa !12 - %115 = load i64, ptr %113, align 8, !tbaa !12 - store i64 %115, ptr %112, align 8, !tbaa !12 - store i64 %114, ptr %113, align 8, !tbaa !12 - call void @free(ptr noundef %110) #18 + %113 = load ptr, ptr %2, align 8, !tbaa !119 + %114 = load ptr, ptr %6, align 8, !tbaa !119 + store ptr %114, ptr %2, align 8, !tbaa !119 + store ptr %113, ptr %6, align 8, !tbaa !119 + %115 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %116 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %117 = load i64, ptr %115, align 8, !tbaa !12 + %118 = load i64, ptr %116, align 8, !tbaa !12 + store i64 %118, ptr %115, align 8, !tbaa !12 + store i64 %117, ptr %116, align 8, !tbaa !12 + call void @free(ptr noundef %113) #18 call void @llvm.lifetime.end.p0(ptr nonnull %6) - %116 = load i64, ptr %17, align 8, !tbaa !13 - %117 = icmp sgt i64 %116, 0 + %119 = load i64, ptr %17, align 8, !tbaa !13 + %120 = icmp sgt i64 %119, 0 %.pre93 = load ptr, ptr %5, align 8, !tbaa !108 - br i1 %117, label %.preheader.lr.ph, label %._crit_edge75 + br i1 %120, label %.preheader.lr.ph, label %._crit_edge75 .preheader.lr.ph: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit - %118 = load ptr, ptr %0, align 8, !tbaa !16 - %119 = load ptr, ptr %2, align 8, !tbaa !108 + %121 = load ptr, ptr %0, align 8, !tbaa !16 + %122 = load ptr, ptr %2, align 8, !tbaa !108 br label %.preheader -.preheader: ; preds = %.preheader.lr.ph, %126 +.preheader: ; preds = %.preheader.lr.ph, %129 %indvars.iv89 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next90, %126 ] - %120 = getelementptr i32, ptr %118, i64 %indvars.iv89 - %121 = trunc nuw nsw i64 %indvars.iv89 to i32 - br label %127 + %123 = getelementptr i32, ptr %121, i64 %indvars.iv89 + %124 = trunc nuw nsw i64 %indvars.iv89 to i32 + br label %130 -._crit_edge75: ; preds = %126, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit +._crit_edge75: ; preds = %129, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit call void @free(ptr noundef %.pre93) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) ret void -122: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge - %123 = landingpad { ptr, i32 } +125: ; preds = %thread-pre-split.i.i.i.i.i.i.i44, %._crit_edge + %126 = landingpad { ptr, i32 } cleanup br label %.body -124: ; preds = %thread-pre-split.i.i.i.i.i.i.i - %125 = landingpad { ptr, i32 } +127: ; preds = %thread-pre-split.i.i.i.i.i.i.i + %128 = landingpad { ptr, i32 } cleanup call void @free(ptr noundef nonnull %.sroa.0.0) #18 br label %.body -126: ; preds = %127 +129: ; preds = %130 %indvars.iv.next90 = add nuw nsw i64 %indvars.iv89, 1 - %exitcond92.not = icmp eq i64 %indvars.iv.next90, %116 + %exitcond92.not = icmp eq i64 %indvars.iv.next90, %119 br i1 %exitcond92.not, label %._crit_edge75, label %.preheader, !llvm.loop !127 -127: ; preds = %.preheader, %127 +130: ; preds = %.preheader, %130 %indvars.iv85 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next86, %127 ] - %128 = mul nuw nsw i64 %116, %indvars.iv85 - %129 = getelementptr i32, ptr %120, i64 %128 + %131 = mul nuw nsw i64 %119, %indvars.iv85 + %132 = getelementptr i32, ptr %123, i64 %131 %130 = load i32, ptr %129, align 4, !tbaa !19 %131 = sext i32 %130 to i64 %132 = getelementptr inbounds i32, ptr %.pre93, i64 %131 @@ -3522,12 +3522,12 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %_ZN5E store i32 %140, ptr %138, align 4, !tbaa !19 %indvars.iv.next86 = add nuw nsw i64 %indvars.iv85, 1 %exitcond88.not = icmp eq i64 %indvars.iv.next86, 3 - br i1 %exitcond88.not, label %126, label %127, !llvm.loop !128 + br i1 %exitcond88.not, label %129, label %130, !llvm.loop !128 -.body: ; preds = %124, %40, %.body53, %122 - %.pn41 = phi { ptr, i32 } [ %108, %.body53 ], [ %123, %122 ], [ %125, %124 ], [ %41, %40 ] - %141 = load ptr, ptr %5, align 8, !tbaa !108 - call void @free(ptr noundef %141) #18 +.body: ; preds = %127, %40, %.body53, %125 + %.pn41 = phi { ptr, i32 } [ %111, %.body53 ], [ %126, %122 ], [ %128, %124 ], [ %41, %40 ] + %144 = load ptr, ptr %5, align 8, !tbaa !108 + call void @free(ptr noundef %144) #18 call void @llvm.lifetime.end.p0(ptr nonnull %5) br label %common.resume } diff --git a/bench/linux/optimized/af_netlink.ll b/bench/linux/optimized/af_netlink.ll index f7f926343a4..3c0840d7668 100644 --- a/bench/linux/optimized/af_netlink.ll +++ b/bench/linux/optimized/af_netlink.ll @@ -2653,7 +2653,7 @@ define internal fastcc range(i32 -16, -17) i32 @netlink_insert(ptr noundef %0, i 129: ; preds = %128, %125 call void @__rcu_read_unlock() #23 %130 = call ptr @rhashtable_insert_slow(ptr noundef %18, ptr noundef nonnull %5, ptr noundef nonnull %34) #23 - br label %220 + br label %224 131: ; preds = %.loopexit8 %132 = load ptr, ptr %94, align 8 @@ -2731,16 +2731,16 @@ define internal fastcc range(i32 -16, -17) i32 @netlink_insert(ptr noundef %0, i call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !76 store volatile ptr %34, ptr %94, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !77 - %182 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 - %183 = icmp ult i8 %182, 2 - call void @llvm.assume(i1 %183) - %184 = icmp eq i8 %182, 0 - br i1 %184, label %188, label %185, !prof !9 - -185: ; preds = %180 - %186 = call i64 @llvm.read_register.i64(metadata !0) - %187 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %186) #23, !srcloc !78 - call void @llvm.write_register.i64(metadata !0, i64 %187) + %186 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 + %187 = icmp ult i8 %186, 2 + call void @llvm.assume(i1 %187) + %188 = icmp eq i8 %186, 0 + br i1 %188, label %188, label %189, !prof !9 + +189: ; preds = %180 + %190 = call i64 @llvm.read_register.i64(metadata !0) + %191 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %190) #23, !srcloc !78 + call void @llvm.write_register.i64(metadata !0, i64 %191) br label %188 188: ; preds = %185, %180 @@ -2773,88 +2773,88 @@ define internal fastcc range(i32 -16, -17) i32 @netlink_insert(ptr noundef %0, i %206 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %205, ptr noundef nonnull %204) #23 br label %207 -207: ; preds = %219, %216, %203, %198, %192, %93 - %208 = phi ptr [ inttoptr (i64 -12 to ptr), %93 ], [ null, %203 ], [ null, %198 ], [ null, %192 ], [ %209, %216 ], [ %209, %219 ] +195: ; preds = %219, %216, %203, %198, %192, %93 + %208 = phi ptr [ inttoptr (i64 -12 to ptr), %93 ], [ null, %203 ], [ null, %198 ], [ null, %192 ], [ %213, %216 ], [ %209, %219 ] call void @__rcu_read_unlock() #23 - br label %220 + br label %224 .loopexit: ; preds = %156, %165 - %209 = phi ptr [ inttoptr (i64 -7 to ptr), %165 ], [ %152, %156 ] + %213 = phi ptr [ inttoptr (i64 -7 to ptr), %165 ], [ %152, %156 ] call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !70 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; andb ${1:b},$0", "=*m,iq,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %94, i32 -2, ptr nonnull elementtype(i8) %94) #23, !srcloc !71 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !72 - %210 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 - %211 = icmp ult i8 %210, 2 - call void @llvm.assume(i1 %211) - %212 = icmp eq i8 %210, 0 - br i1 %212, label %216, label %213, !prof !9 - -213: ; preds = %.loopexit - %214 = call i64 @llvm.read_register.i64(metadata !0) - %215 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %214) #23, !srcloc !73 - call void @llvm.write_register.i64(metadata !0, i64 %215) - br label %216 - -216: ; preds = %213, %.loopexit - %217 = and i64 %97, 512 - %218 = icmp eq i64 %217, 0 - br i1 %218, label %207, label %219 - -219: ; preds = %216 + %214 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #23, !srcloc !19 + %215 = icmp ult i8 %214, 2 + call void @llvm.assume(i1 %215) + %216 = icmp eq i8 %214, 0 + br i1 %216, label %220, label %217, !prof !9 + +217: ; preds = %.loopexit + %218 = call i64 @llvm.read_register.i64(metadata !0) + %219 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %218) #23, !srcloc !73 + call void @llvm.write_register.i64(metadata !0, i64 %219) + br label %220 + +220: ; preds = %217, %.loopexit + %221 = and i64 %97, 512 + %222 = icmp eq i64 %221, 0 + br i1 %222, label %207, label %223 + +223: ; preds = %220 call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !74 br label %207 -220: ; preds = %207, %129 - %221 = phi ptr [ %130, %129 ], [ %208, %207 ] - %222 = icmp ugt ptr %221, inttoptr (i64 -4096 to ptr) - %223 = ptrtoint ptr %221 to i64 - %224 = trunc i64 %223 to i32 - %225 = icmp eq ptr %221, null - %226 = select i1 %225, i32 0, i32 -17 - %227 = select i1 %222, i32 %224, i32 %226 +224: ; preds = %207, %129 + %225 = phi ptr [ %130, %129 ], [ %208, %207 ] + %226 = icmp ugt ptr %225, inttoptr (i64 -4096 to ptr) + %227 = ptrtoint ptr %225 to i64 + %228 = trunc i64 %227 to i32 + %229 = icmp eq ptr %225, null + %230 = select i1 %229, i32 0, i32 -17 + %231 = select i1 %226, i32 %228, i32 %230 call void @llvm.lifetime.end.p0(ptr nonnull %5) - switch i32 %227, label %.thread5.fold.split [ - i32 0, label %236 + switch i32 %231, label %.thread5.fold.split [ + i32 0, label %240 i32 -16, label %.thread5 - i32 -17, label %228 + i32 -17, label %232 ], !prof !79 -228: ; preds = %220 +232: ; preds = %224 br label %.thread5 -.thread5.fold.split: ; preds = %220 +.thread5.fold.split: ; preds = %224 br label %.thread5 -.thread5: ; preds = %220, %.thread5.fold.split, %228 - %229 = phi i32 [ -98, %228 ], [ -75, %220 ], [ %227, %.thread5.fold.split ] - %230 = call i32 asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; xaddl $0, $1\0A", "=r,=*m,0,*m,~{memory},~{cc},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %19, i32 -1, ptr nonnull elementtype(i32) %19) #23, !srcloc !30 - %231 = icmp eq i32 %230, 1 - br i1 %231, label %235, label %232 +.thread5: ; preds = %224, %.thread5.fold.split, %232 + %233 = phi i32 [ -98, %228 ], [ -75, %220 ], [ %231, %.thread5.fold.split ] + %234 = call i32 asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; xaddl $0, $1\0A", "=r,=*m,0,*m,~{memory},~{cc},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) %19, i32 -1, ptr nonnull elementtype(i32) %19) #23, !srcloc !30 + %235 = icmp eq i32 %234, 1 + br i1 %235, label %239, label %236 -232: ; preds = %.thread5 - %233 = icmp sgt i32 %230, 0 - br i1 %233, label %.thread7, label %234, !prof !9 +236: ; preds = %.thread5 + %237 = icmp sgt i32 %234, 0 + br i1 %237, label %.thread7, label %238, !prof !9 -234: ; preds = %232 +238: ; preds = %236 call void @refcount_warn_saturate(ptr noundef nonnull %19, i32 noundef 3) #23 br label %.thread7 -235: ; preds = %.thread5 +239: ; preds = %.thread5 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !31 call void @sk_free(ptr noundef %0) #23 br label %.thread7 -236: ; preds = %220 +240: ; preds = %224 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #23, !srcloc !80 - %237 = icmp ne i32 %1, 0 - %238 = zext i1 %237 to i8 - store volatile i8 %238, ptr %13, align 8 + %241 = icmp ne i32 %1, 0 + %242 = zext i1 %241 to i8 + store volatile i8 %242, ptr %13, align 8 br label %.thread7 -.thread7: ; preds = %232, %234, %236, %235, %2 - %239 = phi i32 [ %12, %2 ], [ 0, %236 ], [ %229, %235 ], [ %229, %234 ], [ %229, %232 ] +.thread7: ; preds = %236, %238, %240, %239, %2 + %243 = phi i32 [ %12, %2 ], [ 0, %236 ], [ %233, %235 ], [ %233, %234 ], [ %233, %232 ] call void @release_sock(ptr noundef %0) #23 - ret i32 %239 + ret i32 %243 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/ioam6.ll b/bench/linux/optimized/ioam6.ll index 3ccc558c0eb..8d626577fdd 100644 --- a/bench/linux/optimized/ioam6.ll +++ b/bench/linux/optimized/ioam6.ll @@ -2088,7 +2088,7 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no 106: ; preds = %105, %102 call void @__rcu_read_unlock() #16 %107 = call ptr @rhashtable_insert_slow(ptr noundef %0, ptr noundef %19, ptr noundef nonnull %1) #16 - br label %227 + br label %231 108: ; preds = %.loopexit %109 = load ptr, ptr %71, align 8 @@ -2170,7 +2170,7 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no %.pre-phi27 = phi i64 [ %.pre26, %.split11.us.loopexit17 ], [ %131, %137 ] %.us-phi12 = phi ptr [ %150, %.split11.us.loopexit17 ], [ %138, %137 ] %158 = getelementptr i8, ptr %.us-phi12, i64 %.pre-phi27 - br label %215 + br label %219 159: ; preds = %.split.split %160 = add i32 %151, -1 @@ -2191,7 +2191,7 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no %169 = getelementptr inbounds nuw i8, ptr %0, i64 12 %170 = load i32, ptr %169, align 4 %171 = icmp ult i32 %168, %170 - br i1 %171, label %172, label %215, !prof !6 + br i1 %171, label %172, label %219, !prof !6 172: ; preds = %166 %173 = load volatile i32, ptr %167, align 4 @@ -2218,16 +2218,16 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !46 store volatile ptr %1, ptr %71, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !47 - %188 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 - %189 = icmp ult i8 %188, 2 - call void @llvm.assume(i1 %189) - %190 = icmp eq i8 %188, 0 - br i1 %190, label %194, label %191, !prof !6 - -191: ; preds = %181 - %192 = call i64 @llvm.read_register.i64(metadata !0) - %193 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %192) #16, !srcloc !48 - call void @llvm.write_register.i64(metadata !0, i64 %193) + %192 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 + %193 = icmp ult i8 %192, 2 + call void @llvm.assume(i1 %193) + %194 = icmp eq i8 %192, 0 + br i1 %194, label %194, label %195, !prof !6 + +195: ; preds = %181 + %196 = call i64 @llvm.read_register.i64(metadata !0) + %197 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %196) #16, !srcloc !48 + call void @llvm.write_register.i64(metadata !0, i64 %197) br label %194 194: ; preds = %191, %181 @@ -2249,58 +2249,58 @@ define internal fastcc i32 @rhashtable_lookup_insert_fast(ptr noundef %0, ptr no 204: ; preds = %198 %205 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %206 = load i32, ptr %205, align 8 + %203 = load i32, ptr %205, align 8 %207 = add i32 %206, -1 %208 = icmp ult i32 %207, %200 br i1 %208, label %213, label %209 -209: ; preds = %204 +209:; preds = %204 %210 = getelementptr inbounds nuw i8, ptr %0, i64 64 %211 = load ptr, ptr @system_wq, align 8 %212 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %211, ptr noundef nonnull %210) #16 br label %213 -213: ; preds = %226, %223, %209, %204, %198, %70 +213:; preds = %226, %223, %209, %204, %198, %70 %214 = phi ptr [ inttoptr (i64 -12 to ptr), %70 ], [ null, %209 ], [ null, %204 ], [ null, %198 ], [ %216, %223 ], [ %216, %226 ] call void @__rcu_read_unlock() #16 - br label %227 + br label %231 -215: ; preds = %.split11.us, %166 - %216 = phi ptr [ inttoptr (i64 -7 to ptr), %166 ], [ %158, %.split11.us ] +219: ; preds = %.split11.us, %166 + %220 = phi ptr [ inttoptr (i64 -7 to ptr), %166 ], [ %158, %.split11.us ] call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !39 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; andb ${1:b},$0", "=*m,iq,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %71, i32 -2, ptr nonnull elementtype(i8) %71) #16, !srcloc !40 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !41 - %217 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 - %218 = icmp ult i8 %217, 2 - call void @llvm.assume(i1 %218) - %219 = icmp eq i8 %217, 0 - br i1 %219, label %223, label %220, !prof !6 - -220: ; preds = %215 - %221 = call i64 @llvm.read_register.i64(metadata !0) - %222 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %221) #16, !srcloc !42 - call void @llvm.write_register.i64(metadata !0, i64 %222) - br label %223 - -223: ; preds = %220, %215 - %224 = and i64 %74, 512 - %225 = icmp eq i64 %224, 0 - br i1 %225, label %213, label %226 - -226: ; preds = %223 + %221 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #16, !srcloc !32 + %222 = icmp ult i8 %221, 2 + call void @llvm.assume(i1 %222) + %223 = icmp eq i8 %221, 0 + br i1 %223, label %227, label %224, !prof !6 + +224: ; preds = %219 + %225 = call i64 @llvm.read_register.i64(metadata !0) + %226 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %225) #16, !srcloc !42 + call void @llvm.write_register.i64(metadata !0, i64 %226) + br label %227 + +227: ; preds = %224, %219 + %228 = and i64 %74, 512 + %229 = icmp eq i64 %228, 0 + br i1 %229, label %213, label %230 + +230: ; preds = %227 call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #16, !srcloc !43 br label %213 -227: ; preds = %213, %106 - %228 = phi ptr [ %107, %106 ], [ %214, %213 ] +231: ; preds = %213, %106 + %232 = phi ptr [ %107, %106 ], [ %214, %213 ] call void @llvm.lifetime.end.p0(ptr nonnull %5) - %229 = icmp ugt ptr %228, inttoptr (i64 -4096 to ptr) - %230 = ptrtoint ptr %228 to i64 - %231 = trunc i64 %230 to i32 - %232 = icmp eq ptr %228, null - %233 = select i1 %232, i32 0, i32 -17 - %234 = select i1 %229, i32 %231, i32 %233 - ret i32 %234 + %233 = icmp ugt ptr %232, inttoptr (i64 -4096 to ptr) + %234 = ptrtoint ptr %232 to i64 + %235 = trunc i64 %234 to i32 + %236 = icmp eq ptr %232, null + %237 = select i1 %236, i32 0, i32 -17 + %238 = select i1 %233, i32 %235, i32 %237 + ret i32 %238 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/request.ll b/bench/linux/optimized/request.ll index 78304e3f1fc..80293f9ae10 100644 --- a/bench/linux/optimized/request.ll +++ b/bench/linux/optimized/request.ll @@ -335,7 +335,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address 12: ; preds = %8, %3 tail call void @kfree(ptr noundef %1) #11 - br label %273 + br label %277 13: ; preds = %8 %14 = getelementptr inbounds nuw i8, ptr %0, i64 24 @@ -347,7 +347,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address 18: ; preds = %13 tail call void @kfree(ptr noundef nonnull %1) #11 - br label %273 + br label %277 19: ; preds = %13 %20 = getelementptr inbounds nuw i8, ptr %15, i64 712 @@ -360,7 +360,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %25 = load ptr, ptr %24, align 8 %26 = tail call ptr @handshake_pernet(ptr noundef %25) #11 %27 = icmp eq ptr %26, null - br i1 %27, label %249, label %28 + br i1 %27, label %253, label %28 28: ; preds = %19 %29 = getelementptr inbounds nuw i8, ptr %26, i64 4 @@ -368,7 +368,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %31 = getelementptr inbounds nuw i8, ptr %26, i64 8 %32 = load i32, ptr %31, align 8 %33 = icmp slt i32 %30, %32 - br i1 %33, label %34, label %249 + br i1 %33, label %34, label %253 34: ; preds = %28 tail call void @_raw_spin_lock(ptr noundef nonnull %26) #11 @@ -376,7 +376,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %36 = load volatile i64, ptr %35, align 8 %37 = and i64 %36, 1 %38 = icmp eq i64 %37, 0 - br i1 %38, label %39, label %247 + br i1 %38, label %39, label %251 39: ; preds = %34 %40 = getelementptr inbounds nuw i8, ptr %1, i64 16 @@ -538,7 +538,7 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address 135: ; preds = %134, %131 call void @__rcu_read_unlock() #11 %136 = call ptr @rhashtable_insert_slow(ptr noundef nonnull @handshake_rhashtbl, ptr noundef %51, ptr noundef nonnull %40) #11 - br label %225 + br label %229 137: ; preds = %.loopexit8 %138 = load ptr, ptr %100, align 8 @@ -619,16 +619,16 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !39 store volatile ptr %40, ptr %100, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !40 - %189 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 - %190 = icmp ult i8 %189, 2 - call void @llvm.assume(i1 %190) - %191 = icmp eq i8 %189, 0 - br i1 %191, label %195, label %192, !prof !6 - -192: ; preds = %187 - %193 = call i64 @llvm.read_register.i64(metadata !0) - %194 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %193) #11, !srcloc !41 - call void @llvm.write_register.i64(metadata !0, i64 %194) + %193 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 + %194 = icmp ult i8 %193, 2 + call void @llvm.assume(i1 %194) + %195 = icmp eq i8 %193, 0 + br i1 %195, label %195, label %196, !prof !6 + +196: ; preds = %187 + %197 = call i64 @llvm.read_register.i64(metadata !0) + %198 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %197) #11, !srcloc !41 + call void @llvm.write_register.i64(metadata !0, i64 %198) br label %195 195: ; preds = %192, %187 @@ -652,132 +652,132 @@ define dso_local i32 @handshake_req_submit(ptr noundef readonly captures(address %208 = select i1 %204, i1 %207, i1 false br i1 %208, label %209, label %212 -209: ; preds = %199 +209:; preds = %199 %210 = load ptr, ptr @system_wq, align 8 %211 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %210, ptr noundef nonnull getelementptr inbounds nuw (i8, ptr @handshake_rhashtbl, i64 64)) #11 br label %212 -212: ; preds = %224, %221, %209, %199, %99 +212:; preds = %224, %221, %209, %199, %99 %213 = phi ptr [ inttoptr (i64 -12 to ptr), %99 ], [ null, %209 ], [ null, %199 ], [ %214, %221 ], [ %214, %224 ] call void @__rcu_read_unlock() #11 - br label %225 + br label %229 .loopexit: ; preds = %.split, %175 - %214 = phi ptr [ inttoptr (i64 -7 to ptr), %175 ], [ %166, %.split ] + %218 = phi ptr [ inttoptr (i64 -7 to ptr), %175 ], [ %166, %.split ] call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !31 call void asm sideeffect ".pushsection .smp_locks,\22a\22\0A.balign 4\0A.long 671f - .\0A.popsection\0A671:\0A\09lock; andb ${1:b},$0", "=*m,iq,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i8) %100, i32 -2, ptr nonnull elementtype(i8) %100) #11, !srcloc !32 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !33 - %215 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 - %216 = icmp ult i8 %215, 2 - call void @llvm.assume(i1 %216) - %217 = icmp eq i8 %215, 0 - br i1 %217, label %221, label %218, !prof !6 - -218: ; preds = %.loopexit - %219 = call i64 @llvm.read_register.i64(metadata !0) - %220 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %219) #11, !srcloc !34 - call void @llvm.write_register.i64(metadata !0, i64 %220) - br label %221 - -221: ; preds = %218, %.loopexit - %222 = and i64 %103, 512 - %223 = icmp eq i64 %222, 0 - br i1 %223, label %212, label %224 - -224: ; preds = %221 + %219 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 + %220 = icmp ult i8 %219, 2 + call void @llvm.assume(i1 %220) + %221 = icmp eq i8 %219, 0 + br i1 %221, label %225, label %222, !prof !6 + +222: ; preds = %.loopexit + %223 = call i64 @llvm.read_register.i64(metadata !0) + %224 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %223) #11, !srcloc !34 + call void @llvm.write_register.i64(metadata !0, i64 %224) + br label %225 + +225: ; preds = %222, %.loopexit + %226 = and i64 %103, 512 + %227 = icmp eq i64 %226, 0 + br i1 %227, label %212, label %228 + +228: ; preds = %225 call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !35 br label %212 -225: ; preds = %212, %135 - %226 = phi ptr [ %136, %135 ], [ %213, %212 ] - %227 = icmp ugt ptr %226, inttoptr (i64 -4096 to ptr) - %228 = ptrtoint ptr %226 to i64 - %229 = icmp eq ptr %226, null - %230 = and i64 %228, 4294967295 - %231 = icmp eq i64 %230, 0 - %232 = select i1 %227, i1 %231, i1 %229 - br i1 %232, label %233, label %247 - -233: ; preds = %225 - %234 = call fastcc zeroext i1 @__add_pending_locked(ptr noundef nonnull %26, ptr noundef nonnull %1) - br i1 %234, label %235, label %247 - -235: ; preds = %233 +229: ; preds = %212, %135 + %230 = phi ptr [ %136, %135 ], [ %213, %212 ] + %231 = icmp ugt ptr %230, inttoptr (i64 -4096 to ptr) + %232 = ptrtoint ptr %230 to i64 + %233 = icmp eq ptr %230, null + %234 = and i64 %232, 4294967295 + %235 = icmp eq i64 %234, 0 + %236 = select i1 %231, i1 %235, i1 %233 + br i1 %236, label %237, label %251 + +237: ; preds = %229 + %238 = call fastcc zeroext i1 @__add_pending_locked(ptr noundef nonnull %26, ptr noundef nonnull %1) + br i1 %238, label %239, label %251 + +239: ; preds = %237 call void @_raw_spin_unlock(ptr noundef nonnull %26) #11 - %236 = getelementptr inbounds nuw i8, ptr %1, i64 32 - %237 = load ptr, ptr %236, align 8 - %238 = call i32 @handshake_genl_notify(ptr noundef %25, ptr noundef %237, i32 noundef %2) #11 - %239 = icmp eq i32 %238, 0 - br i1 %239, label %243, label %240 - -240: ; preds = %235 - %241 = load ptr, ptr %16, align 8 - call fastcc void @trace_handshake_notify_err(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %241, i32 noundef %238) - %242 = call fastcc zeroext i1 @remove_pending(ptr noundef nonnull %26, ptr noundef nonnull %1) - br i1 %242, label %249, label %243 - -243: ; preds = %240, %235 - %244 = load ptr, ptr %16, align 8 - %245 = getelementptr inbounds nuw i8, ptr %244, i64 128 - call fastcc void @refcount_inc(ptr noundef nonnull %245) - %246 = load ptr, ptr %16, align 8 - call fastcc void @trace_handshake_submit(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %246) - br label %273 - -247: ; preds = %233, %225, %34 - %248 = phi i32 [ -16, %233 ], [ -16, %225 ], [ -95, %34 ] + %240 = getelementptr inbounds nuw i8, ptr %1, i64 32 + %241 = load ptr, ptr %240, align 8 + %242 = call i32 @handshake_genl_notify(ptr noundef %25, ptr noundef %241, i32 noundef %2) #11 + %243 = icmp eq i32 %242, 0 + br i1 %243, label %247, label %244 + +244: ; preds = %239 + %245 = load ptr, ptr %16, align 8 + call fastcc void @trace_handshake_notify_err(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %245, i32 noundef %242) + %246 = call fastcc zeroext i1 @remove_pending(ptr noundef nonnull %26, ptr noundef nonnull %1) + br i1 %246, label %253, label %247 + +247: ; preds = %244, %239 + %248 = load ptr, ptr %16, align 8 + %249 = getelementptr inbounds nuw i8, ptr %248, i64 128 + call fastcc void @refcount_inc(ptr noundef nonnull %249) + %250 = load ptr, ptr %16, align 8 + call fastcc void @trace_handshake_submit(ptr noundef %25, ptr noundef nonnull %1, ptr noundef %250) + br label %277 + +251: ; preds = %237, %229, %34 + %252 = phi i32 [ -16, %233 ], [ -16, %225 ], [ -95, %34 ] call void @_raw_spin_unlock(ptr noundef nonnull %26) #11 - br label %249 + br label %253 -249: ; preds = %247, %240, %28, %19 - %250 = phi i32 [ -11, %28 ], [ %248, %247 ], [ %238, %240 ], [ -95, %19 ] - %251 = load ptr, ptr %16, align 8 +253: ; preds = %251, %244, %28, %19 + %254 = phi i32 [ -11, %28 ], [ %252, %247 ], [ %242, %240 ], [ -95, %19 ] + %255 = load ptr, ptr %16, align 8 callbr void asm sideeffect "1:jmp ${2:l} # objtool NOPs this \0A\09.pushsection __jump_table, \22aw\22 \0A\09 .balign 8 \0A\09.long 1b - . \0A\09.long ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsection \0A\09", "i,i,!i,~{dirflag},~{fpsr},~{flags}"(ptr nonnull getelementptr inbounds nuw (i8, ptr @__tracepoint_handshake_submit_err, i64 8), i32 2) #11 to label %272 [label %252], !srcloc !42 -252: ; preds = %249 - %253 = call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #11, !srcloc !43 - %254 = zext i32 %253 to i64 - %255 = call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %254) #11, !srcloc !44 - %256 = icmp ult i8 %255, 2 - call void @llvm.assume(i1 %256) - %257 = icmp eq i8 %255, 0 - br i1 %257, label %272, label %258 +256: ; preds = %253 + %257 = call i32 asm sideeffect "movl %gs:$1, $0", "=r,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 12)) #11, !srcloc !43 + %258 = zext i32 %257 to i64 + %259 = call i8 asm sideeffect " btq $2,$1\0A\09/* output condition code c*/\0A", "={@ccc},*m,Ir,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i64) @__cpu_online_mask, i64 %258) #11, !srcloc !44 + %260 = icmp ult i8 %259, 2 + call void @llvm.assume(i1 %260) + %261 = icmp eq i8 %259, 0 + br i1 %261, label %276, label %262 -258: ; preds = %252 +262: ; preds = %256 call void asm "incl %gs:$0", "=*m,*m,~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !19 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !45 - %259 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @__tracepoint_handshake_submit_err, i64 72), align 8 - %260 = icmp eq ptr %259, null - br i1 %260, label %265, label %261 + %263 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @__tracepoint_handshake_submit_err, i64 72), align 8 + %264 = icmp eq ptr %263, null + br i1 %264, label %269, label %265 -261: ; preds = %258 - %262 = getelementptr inbounds nuw i8, ptr %259, i64 8 - %263 = load ptr, ptr %262, align 8 - %264 = call i32 @__SCT__tp_func_handshake_submit_err(ptr noundef %263, ptr noundef %25, ptr noundef nonnull %1, ptr noundef %251, i32 noundef %250) #11 - br label %265 +265: ; preds = %262 + %266 = getelementptr inbounds nuw i8, ptr %263, i64 8 + %267 = load ptr, ptr %266, align 8 + %268 = call i32 @__SCT__tp_func_handshake_submit_err(ptr noundef %267, ptr noundef %25, ptr noundef nonnull %1, ptr noundef %255, i32 noundef %254) #11 + br label %269 -265: ; preds = %261, %258 +269: ; preds = %265, %262 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !46 - %266 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 - %267 = icmp ult i8 %266, 2 - call void @llvm.assume(i1 %267) - %268 = icmp eq i8 %266, 0 - br i1 %268, label %272, label %269, !prof !6 - -269: ; preds = %265 - %270 = call i64 @llvm.read_register.i64(metadata !0) - %271 = call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %270) #11, !srcloc !47 - call void @llvm.write_register.i64(metadata !0, i64 %271) - br label %272 - -272: ; preds = %269, %265, %252, %249 + %270 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #11, !srcloc !24 + %271 = icmp ult i8 %270, 2 + call void @llvm.assume(i1 %271) + %272 = icmp eq i8 %270, 0 + br i1 %272, label %276, label %273, !prof !6 + +273: ; preds = %269 + %274 = call i64 @llvm.read_register.i64(metadata !0) + %275 = call i64 asm sideeffect "call __SCT__preempt_schedule_notrace", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %274) #11, !srcloc !47 + call void @llvm.write_register.i64(metadata !0, i64 %275) + br label %276 + +276: ; preds = %273, %269, %256, %253 call fastcc void @handshake_req_destroy(ptr noundef nonnull %1) - br label %273 + br label %277 -273: ; preds = %272, %243, %18, %12 - %274 = phi i32 [ %250, %272 ], [ 0, %243 ], [ -22, %18 ], [ -22, %12 ] - ret i32 %274 +277: ; preds = %276, %247, %18, %12 + %278 = phi i32 [ %254, %272 ], [ 0, %243 ], [ -22, %18 ], [ -22, %12 ] + ret i32 %278 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/sta_info.ll b/bench/linux/optimized/sta_info.ll index f05f082f600..e58618d9422 100644 --- a/bench/linux/optimized/sta_info.ll +++ b/bench/linux/optimized/sta_info.ll @@ -8135,7 +8135,7 @@ define internal fastcc i32 @rhltable_insert(ptr noundef %0, ptr noundef %1, ptr 98: ; preds = %97, %94 call void @__rcu_read_unlock() #18 %99 = call ptr @rhashtable_insert_slow(ptr noundef %0, ptr noundef %14, ptr noundef %1) #18 - br label %243 + br label %247 100: ; preds = %.loopexit %101 = load ptr, ptr %63, align 8 @@ -8302,7 +8302,7 @@ define internal fastcc i32 @rhltable_insert(ptr noundef %0, ptr noundef %1, ptr %196 = getelementptr inbounds nuw i8, ptr %0, i64 12 %197 = load i32, ptr %196, align 4 %198 = icmp ult i32 %195, %197 - br i1 %198, label %199, label %242, !prof !9 + br i1 %198, label %199, label %246, !prof !9 199: ; preds = %193 %200 = load volatile i32, ptr %194, align 4 @@ -8331,63 +8331,63 @@ define internal fastcc i32 @rhltable_insert(ptr noundef %0, ptr noundef %1, ptr call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #18, !srcloc !288 store volatile ptr %1, ptr %63, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #18, !srcloc !289 - %216 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #18, !srcloc !71 - %217 = icmp ult i8 %216, 2 - call void @llvm.assume(i1 %217) - %218 = icmp eq i8 %216, 0 - br i1 %218, label %222, label %219, !prof !9 - -219: ; preds = %208 - %220 = call i64 @llvm.read_register.i64(metadata !0) - %221 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %220) #18, !srcloc !290 - call void @llvm.write_register.i64(metadata !0, i64 %221) - br label %222 - -222: ; preds = %219, %208 - %223 = and i64 %66, 512 - %224 = icmp eq i64 %223, 0 - br i1 %224, label %226, label %225 - -225: ; preds = %222 - call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #18, !srcloc !287 + %220 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #18, !srcloc !71 + %221 = icmp ult i8 %220, 2 + call void @llvm.assume(i1 %221) + %222 = icmp eq i8 %220, 0 + br i1 %222, label %226, label %223, !prof !9 + +223: ; preds = %208 + %224 = call i64 @llvm.read_register.i64(metadata !0) + %225 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %224) #18, !srcloc !290 + call void @llvm.write_register.i64(metadata !0, i64 %225) br label %226 -226: ; preds = %225, %222 - %227 = load volatile i32, ptr %194, align 4 - %228 = load i32, ptr %22, align 64 - %229 = lshr i32 %228, 2 - %230 = mul nuw i32 %229, 3 - %231 = icmp ugt i32 %227, %230 - br i1 %231, label %232, label %.thread +226: ; preds = %223, %208 + %227 = and i64 %66, 512 + %228 = icmp eq i64 %227, 0 + br i1 %228, label %230, label %229 -232: ; preds = %226 - %233 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %234 = load i32, ptr %233, align 8 - %235 = add i32 %234, -1 - %236 = icmp ult i32 %235, %228 - br i1 %236, label %.thread, label %237 - -237: ; preds = %232 - %238 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %239 = load ptr, ptr @system_wq, align 8 - %240 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %239, ptr noundef nonnull %238) #18 +229: ; preds = %226 + call void asm sideeffect "sti", "~{memory},~{dirflag},~{fpsr},~{flags}"() #18, !srcloc !287 + br label %230 + +230: ; preds = %229, %226 + %231 = load volatile i32, ptr %194, align 4 + %232 = load i32, ptr %22, align 64 + %233 = lshr i32 %232, 2 + %234 = mul nuw i32 %233, 3 + %235 = icmp ugt i32 %231, %234 + br i1 %235, label %236, label %.thread + +236: ; preds = %230 + %237 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %238 = load i32, ptr %237, align 8 + %239 = add i32 %238, -1 + %240 = icmp ult i32 %239, %232 + br i1 %240, label %.thread, label %241 + +241: ; preds = %236 + %242 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %243 = load ptr, ptr @system_wq, align 8 + %244 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %243, ptr noundef nonnull %242) #18 br label %.thread -.thread: ; preds = %185, %184, %176, %175, %242, %237, %232, %226, %62 - %241 = phi ptr [ inttoptr (i64 -7 to ptr), %242 ], [ inttoptr (i64 -12 to ptr), %62 ], [ null, %237 ], [ null, %232 ], [ null, %226 ], [ null, %175 ], [ null, %176 ], [ null, %184 ], [ null, %185 ] +.thread: ; preds = %185, %184, %176, %175, %246, %241, %236, %230, %62 + %245 = phi ptr [ inttoptr (i64 -7 to ptr), %242 ], [ inttoptr (i64 -12 to ptr), %62 ], [ null, %237 ], [ null, %232 ], [ null, %226 ], [ null, %175 ], [ null, %176 ], [ null, %184 ], [ null, %185 ] call void @__rcu_read_unlock() #18 - br label %243 + br label %247 -242: ; preds = %193 +246: ; preds = %193 call fastcc void @rht_unlock(ptr noundef nonnull %63, i64 noundef %66) br label %.thread -243: ; preds = %.thread, %98 - %244 = phi ptr [ %99, %98 ], [ %241, %.thread ] +247: ; preds = %.thread, %98 + %248 = phi ptr [ %99, %98 ], [ %245, %.thread ] call void @llvm.lifetime.end.p0(ptr nonnull %5) - %245 = ptrtoint ptr %244 to i64 - %246 = trunc i64 %245 to i32 - ret i32 %246 + %249 = ptrtoint ptr %248 to i64 + %250 = trunc i64 %249 to i32 + ret i32 %250 } ; Function Attrs: null_pointer_is_valid diff --git a/bench/linux/optimized/util.ll b/bench/linux/optimized/util.ll index a47d50dd857..1388b179753 100644 --- a/bench/linux/optimized/util.ll +++ b/bench/linux/optimized/util.ll @@ -145,7 +145,7 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) %7 = tail call i32 @llvm.smin.i32(i32 %6, i32 %2) %8 = load i32, ptr %0, align 8 %9 = icmp slt i32 %8, %7 - br i1 %9, label %10, label %238 + br i1 %9, label %10, label %242 10: ; preds = %3 tail call void @idr_preload(i32 noundef 3264) #15 @@ -383,7 +383,7 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) 153: ; preds = %152, %149 call void @__rcu_read_unlock() #15 %154 = call ptr @rhashtable_insert_slow(ptr noundef nonnull %71, ptr noundef null, ptr noundef nonnull %72) #15 - br label %219 + br label %223 155: ; preds = %.loopexit %156 = load ptr, ptr %118, align 8 @@ -418,7 +418,7 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) %178 = getelementptr inbounds nuw i8, ptr %0, i64 92 %179 = load i32, ptr %178, align 4 %180 = icmp ult i32 %177, %179 - br i1 %180, label %181, label %218, !prof !10 + br i1 %180, label %181, label %222, !prof !10 181: ; preds = %175 %182 = load volatile i32, ptr %176, align 4 @@ -439,16 +439,16 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #15, !srcloc !35 store volatile ptr %72, ptr %118, align 8 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #15, !srcloc !36 - %191 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #15, !srcloc !9 - %192 = icmp ult i8 %191, 2 - call void @llvm.assume(i1 %192) - %193 = icmp eq i8 %191, 0 - br i1 %193, label %197, label %194, !prof !10 - -194: ; preds = %190 - %195 = call i64 @llvm.read_register.i64(metadata !0) - %196 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %195) #15, !srcloc !37 - call void @llvm.write_register.i64(metadata !0, i64 %196) + %195 = call i8 asm sideeffect "decl %gs:$0\0A\09/* output condition code e*/\0A", "=*m,={@cce},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8), ptr nonnull elementtype(i32) getelementptr inbounds nuw (i8, ptr @pcpu_hot, i64 8)) #15, !srcloc !9 + %196 = icmp ult i8 %195, 2 + call void @llvm.assume(i1 %196) + %197 = icmp eq i8 %195, 0 + br i1 %197, label %197, label %198, !prof !10 + +198: ; preds = %190 + %199 = call i64 @llvm.read_register.i64(metadata !0) + %200 = call i64 asm sideeffect "call __SCT__preempt_schedule", "={rsp},{rsp},~{dirflag},~{fpsr},~{flags}"(i64 %199) #15, !srcloc !37 + call void @llvm.write_register.i64(metadata !0, i64 %200) br label %197 197: ; preds = %194, %190 @@ -470,65 +470,65 @@ define dso_local i32 @ipc_addid(ptr noundef %0, ptr noundef %1, i32 noundef %2) 207: ; preds = %201 %208 = getelementptr inbounds nuw i8, ptr %0, i64 104 - %209 = load i32, ptr %208, align 8 + %206 = load i32, ptr %208, align 8 %210 = add i32 %209, -1 %211 = icmp ult i32 %210, %203 br i1 %211, label %216, label %212 -212: ; preds = %207 +212:; preds = %207 %213 = getelementptr inbounds nuw i8, ptr %0, i64 144 %214 = load ptr, ptr @system_wq, align 8 %215 = call zeroext i1 @queue_work_on(i32 noundef 64, ptr noundef %214, ptr noundef nonnull %213) #15 br label %216 -216: ; preds = %218, %212, %207, %201, %117 +216:; preds = %222, %212, %207, %201, %117 %217 = phi ptr [ inttoptr (i64 -7 to ptr), %218 ], [ inttoptr (i64 -12 to ptr), %117 ], [ null, %212 ], [ null, %207 ], [ null, %201 ] call void @__rcu_read_unlock() #15 - br label %219 + br label %223 -218: ; preds = %175 +222: ; preds = %175 call fastcc void @rht_unlock(ptr noundef nonnull %118, i64 noundef %121) br label %216 -219: ; preds = %216, %153 - %220 = phi ptr [ %154, %153 ], [ %217, %216 ] - %221 = icmp ugt ptr %220, inttoptr (i64 -4096 to ptr) - %222 = ptrtoint ptr %220 to i64 - %223 = trunc i64 %222 to i32 - %224 = icmp eq ptr %220, null - %225 = select i1 %224, i32 0, i32 -17 - %226 = select i1 %221, i32 %223, i32 %225 - %227 = icmp slt i32 %226, 0 - br i1 %227, label %228, label %.thread6 - -228: ; preds = %219 - %229 = zext nneg i32 %32 to i64 - %230 = call ptr @idr_remove(ptr noundef nonnull %31, i64 noundef %229) #15 +223: ; preds = %216, %153 + %224 = phi ptr [ %154, %153 ], [ %217, %216 ] + %225 = icmp ugt ptr %224, inttoptr (i64 -4096 to ptr) + %226 = ptrtoint ptr %224 to i64 + %227 = trunc i64 %226 to i32 + %228 = icmp eq ptr %224, null + %229 = select i1 %228, i32 0, i32 -17 + %230 = select i1 %225, i32 %227, i32 %229 + %231 = icmp slt i32 %230, 0 + br i1 %231, label %232, label %.thread6 + +232: ; preds = %223 + %233 = zext nneg i32 %32 to i64 + %234 = call ptr @idr_remove(ptr noundef nonnull %31, i64 noundef %233) #15 br label %.thread -.thread: ; preds = %65, %228 - %231 = phi i32 [ %32, %65 ], [ %226, %228 ] +.thread: ; preds = %65, %232 + %235 = phi i32 [ %32, %65 ], [ %230, %228 ] store i8 1, ptr %23, align 4 call void @_raw_spin_unlock(ptr noundef %1) #15 call void @__rcu_read_unlock() #15 - br label %238 - -.thread6: ; preds = %219, %66 - %232 = load i32, ptr %0, align 8 - %233 = add i32 %232, 1 - store i32 %233, ptr %0, align 8 - %234 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %235 = load i32, ptr %234, align 8 - %236 = icmp sgt i32 %32, %235 - br i1 %236, label %237, label %238 - -237: ; preds = %.thread6 - store i32 %32, ptr %234, align 8 - br label %238 - -238: ; preds = %237, %.thread6, %.thread, %3 - %239 = phi i32 [ %231, %.thread ], [ -28, %3 ], [ %32, %237 ], [ %32, %.thread6 ] - ret i32 %239 + br label %242 + +.thread6: ; preds = %223, %66 + %236 = load i32, ptr %0, align 8 + %237 = add i32 %236, 1 + store i32 %237, ptr %0, align 8 + %238 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %239 = load i32, ptr %238, align 8 + %240 = icmp sgt i32 %32, %239 + br i1 %240, label %241, label %242 + +241: ; preds = %.thread6 + store i32 %32, ptr %238, align 8 + br label %242 + +242: ; preds = %241, %.thread6, %.thread, %3 + %243 = phi i32 [ %235, %.thread ], [ -28, %3 ], [ %32, %237 ], [ %32, %.thread6 ] + ret i32 %243 } ; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) diff --git a/bench/llvm/optimized/Z3CrosscheckVisitor.ll b/bench/llvm/optimized/Z3CrosscheckVisitor.ll index 1617d1f5329..3db9fe27c47 100644 --- a/bench/llvm/optimized/Z3CrosscheckVisitor.ll +++ b/bench/llvm/optimized/Z3CrosscheckVisitor.ll @@ -167,29 +167,29 @@ _ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento7SymExprENS3_8Range %3 = getelementptr inbounds nuw i8, ptr %0, i64 8 store ptr null, ptr %3, align 8, !tbaa !3 store ptr getelementptr inbounds nuw inrange(-16, 48) (i8, ptr @_ZTVN5clang4ento19Z3CrosscheckVisitorE, i64 16), ptr %0, align 8, !tbaa !8 - %4 = getelementptr inbounds nuw i8, ptr %0, i64 16 - %5 = tail call noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #19 - %6 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %7 = getelementptr inbounds nuw i8, ptr %5, i64 32 - tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %5, i8 0, i64 64, i1 false) - store ptr %7, ptr %6, align 8, !tbaa !10 - %8 = getelementptr inbounds nuw i8, ptr %5, i64 28 - store i32 4, ptr %8, align 4, !tbaa !13 - %9 = getelementptr inbounds nuw i8, ptr %5, i64 64 - %10 = getelementptr inbounds nuw i8, ptr %5, i64 80 - store ptr %10, ptr %9, align 8, !tbaa !10 - %11 = getelementptr inbounds nuw i8, ptr %5, i64 72 - %12 = getelementptr inbounds nuw i8, ptr %5, i64 88 - tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, i8 0, i64 16, i1 false) - store i64 1, ptr %12, align 8, !tbaa !14 - store ptr null, ptr %4, align 8, !tbaa !27, !alias.scope !30 + %5 = getelementptr inbounds nuw i8, ptr %0, i64 16 + %6 = tail call noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #19 + %7 = getelementptr inbounds nuw i8, ptr %6, i64 16 + %8 = getelementptr inbounds nuw i8, ptr %6, i64 32 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %6, i8 0, i64 64, i1 false) + store ptr %8, ptr %7, align 8, !tbaa !10 + %9 = getelementptr inbounds nuw i8, ptr %6, i64 28 + store i32 4, ptr %9, align 4, !tbaa !13 + %10 = getelementptr inbounds nuw i8, ptr %6, i64 64 + %11 = getelementptr inbounds nuw i8, ptr %6, i64 80 + store ptr %11, ptr %10, align 8, !tbaa !10 + %12 = getelementptr inbounds nuw i8, ptr %6, i64 72 + %13 = getelementptr inbounds nuw i8, ptr %6, i64 88 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %12, i8 0, i64 16, i1 false) + store i64 1, ptr %13, align 8, !tbaa !14 + store ptr null, ptr %6, align 8, !tbaa !27, !alias.scope !30 tail call void @_ZN4llvm20BumpPtrAllocatorImplINS_15MallocAllocatorELm4096ELm4096ELm128EED2Ev(ptr noundef nonnull align 8 dereferenceable(96) %5) #20 tail call void @_ZdlPvm(ptr noundef nonnull %5, i64 noundef 96) #21 tail call void @_ZN4llvm17deallocate_bufferEPvmm(ptr noundef null, i64 noundef 0, i64 noundef 8) #20 - %13 = getelementptr inbounds nuw i8, ptr %0, i64 24 - store ptr %1, ptr %13, align 8, !tbaa !33 - %14 = getelementptr inbounds nuw i8, ptr %0, i64 32 - store ptr %2, ptr %14, align 8, !tbaa !35 + %18 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store ptr %1, ptr %18, align 8, !tbaa !33 + %19 = getelementptr inbounds nuw i8, ptr %0, i64 32 + store ptr %2, ptr %19, align 8, !tbaa !35 ret void } diff --git a/bench/meshlab/optimized/filter_parametrization.ll b/bench/meshlab/optimized/filter_parametrization.ll index ac3ad365b38..c133fa52f97 100644 --- a/bench/meshlab/optimized/filter_parametrization.ll +++ b/bench/meshlab/optimized/filter_parametrization.ll @@ -7341,13 +7341,13 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc %45 = add nsw i32 %1, 1 %46 = sext i32 %45 to i64 %or.cond = icmp sgt i32 %1, -1 - br i1 %or.cond, label %47, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i + br i1 %or.cond, label %47, label %55 47: ; preds = %43 %48 = shl nuw nsw i64 %46, 2 %49 = call noalias ptr @malloc(i64 noundef %48) #43 %50 = icmp eq ptr %49, null - br i1 %50, label %51, label %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i + br i1 %50, label %51, label %55 51: ; preds = %47 %52 = call ptr @__cxa_allocate_exception(i64 8) #21 @@ -7363,15 +7363,15 @@ _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2INS_14CwiseNullaryOpINS_8internal18sc cleanup br label %.body -_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %43, %47 +55: ; preds = %43, %47 %.sroa.0.0102 = phi ptr [ null, %43 ], [ %49, %47 ] store i32 0, ptr %.sroa.0.0102, align 4, !noalias !102 - %55 = getelementptr inbounds nuw i8, ptr %3, i64 8 - %56 = load i64, ptr %55, align 8 - %57 = getelementptr inbounds nuw i8, ptr %.sroa.0.0102, i64 4 - %58 = load ptr, ptr %3, align 8 - %59 = ptrtoint ptr %57 to i64 - %60 = lshr exact i64 %59, 2 + %56 = getelementptr inbounds nuw i8, ptr %3, i64 8 + %57 = load i64, ptr %56, align 8 + %58 = getelementptr inbounds nuw i8, ptr %.sroa.0.0102, i64 4 + %59 = load ptr, ptr %3, align 8 + %60 = ptrtoint ptr %58 to i64 + %60 = lshr exact i64 %60, 2 %61 = sub nsw i64 0, %60 %62 = and i64 %61, 3 %63 = call i64 @llvm.smin.i64(i64 %62, i64 %56) @@ -7383,57 +7383,57 @@ _ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i. br i1 %68, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %72, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] - %69 = getelementptr inbounds nuw i32, ptr %57, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %70 = getelementptr inbounds nuw i32, ptr %58, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i - %71 = load i32, ptr %70, align 4 - store i32 %71, ptr %69, align 4 - %72 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %72, %63 + %.05.i.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %75, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i ], [ 0, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i ] + %72 = getelementptr inbounds nuw i32, ptr %58, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %73 = getelementptr inbounds nuw i32, ptr %59, i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i + %74 = load i32, ptr %73, align 4 + store i32 %74, ptr %72, align 4 + %75 = add nuw nsw i64 %.05.i.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %75, %63 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !105 _ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal13first_alignedILi16EilEET1_PKT0_S2_.exit.i.i.i.i.i.i.i.i.i.i.i - %73 = icmp sgt i64 %64, 3 - br i1 %73, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i + %76 = icmp sgt i64 %64, 3 + br i1 %76, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i - %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %77, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %63, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] - %74 = getelementptr inbounds i32, ptr %57, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %75 = getelementptr inbounds i32, ptr %58, i64 %.021.i.i.i.i.i.i.i.i.i.i.i - %76 = load <2 x i64>, ptr %75, align 1 - store <2 x i64> %76, ptr %74, align 16 - %77 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 - %78 = icmp slt i64 %77, %67 - br i1 %78, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !106 + %.021.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %80, %.lr.ph.i.i.i.i.i.i.i.i.i.i.i ], [ %63, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i ] + %77 = getelementptr inbounds i32, ptr %58, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %78 = getelementptr inbounds i32, ptr %59, i64 %.021.i.i.i.i.i.i.i.i.i.i.i + %79 = load <2 x i64>, ptr %78, align 1 + store <2 x i64> %79, ptr %77, align 16 + %80 = add nsw i64 %.021.i.i.i.i.i.i.i.i.i.i.i, 4 + %81 = icmp slt i64 %80, %67 + br i1 %81, label %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !106 ._crit_edge.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i.i.i, %_ZN5Eigen8internal31unaligned_dense_assignment_loopILb0EE3runINS0_31generic_dense_assignment_kernelINS0_9evaluatorINS_5BlockINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELin1ELi1ELb0EEEEENS5_IS8_EENS0_9assign_opIiiEELi0EEEEEvRT_ll.exit.i.i.i.i.i.i.i.i.i.i.i - %79 = icmp slt i64 %67, %56 - br i1 %79, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit + %82 = icmp slt i64 %67, %57 + br i1 %82, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit .lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i.i.i.i, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i - %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %83, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %67, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] - %80 = getelementptr inbounds i32, ptr %57, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %81 = getelementptr inbounds i32, ptr %58, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i - %82 = load i32, ptr %81, align 4 - store i32 %82, ptr %80, align 4 - %83 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %83, %56 + %.05.i18.i.i.i.i.i.i.i.i.i.i.i = phi i64 [ %86, %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i ], [ %67, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i ] + %83 = getelementptr inbounds i32, ptr %58, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %84 = getelementptr inbounds i32, ptr %59, i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i + %85 = load i32, ptr %84, align 4 + store i32 %85, ptr %83, align 4 + %86 = add nsw i64 %.05.i18.i.i.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i = icmp eq i64 %86, %57 br i1 %exitcond.not.i19.i.i.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, !llvm.loop !105 _ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i17.i.i.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i.i.i.i - %.not.i.i.i.i.i.i.i.i = icmp eq i64 %56, %46 + %.not.i.i.i.i.i.i.i.i = icmp eq i64 %57, %46 br i1 %.not.i.i.i.i.i.i.i.i, label %84, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i: ; preds = %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit invoke void @_ZN5Eigen12DenseStorageIiLin1ELin1ELi1ELi0EE6resizeElll(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %46, i64 noundef %46, i64 noundef 1) - to label %.noexc unwind label %168 + to label %.noexc unwind label %171 .noexc: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i - %.pr.i.i.i.i.i.i.i = load i64, ptr %55, align 8 + %.pr.i.i.i.i.i.i.i = load i64, ptr %56, align 8 %.pre = load ptr, ptr %3, align 8 br label %84 -84: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit +._crit_edge.i.i.i.i.i.i.i.i: ; preds = %.noexc, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit %85 = phi ptr [ %.pre, %.noexc ], [ %58, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] %86 = phi i64 [ %.pr.i.i.i.i.i.i.i, %.noexc ], [ %46, %_ZN5Eigen16CommaInitializerINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEcmIS2_EERS3_RKNS_9DenseBaseIT_EE.exit ] %87 = sdiv i64 %86, 4 @@ -7456,184 +7456,184 @@ _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit. br i1 %95, label %.lr.ph.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit .lr.ph.i.i.i.i.i.i.i.i.i: ; preds = %._crit_edge.i.i.i.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i.i - %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %99, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %88, %._crit_edge.i.i.i.i.i.i.i.i ] - %96 = getelementptr inbounds i32, ptr %85, i64 %.05.i.i.i.i.i.i.i.i.i - %97 = getelementptr inbounds i32, ptr %.sroa.0.0102, i64 %.05.i.i.i.i.i.i.i.i.i - %98 = load i32, ptr %97, align 4 - store i32 %98, ptr %96, align 4 - %99 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %99, %86 + %.05.i.i.i.i.i.i.i.i.i = phi i64 [ %102, %.lr.ph.i.i.i.i.i.i.i.i.i ], [ %88, %._crit_edge.i.i.i.i.i.i.i.i ] + %99 = getelementptr inbounds i32, ptr %85, i64 %.05.i.i.i.i.i.i.i.i.i + %100 = getelementptr inbounds i32, ptr %.sroa.0.0102, i64 %.05.i.i.i.i.i.i.i.i.i + %101 = load i32, ptr %100, align 4 + store i32 %101, ptr %99, align 4 + %102 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i = icmp eq i64 %102, %86 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i, !llvm.loop !108 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i, %._crit_edge.i.i.i.i.i.i.i.i call void @free(ptr noundef nonnull %.sroa.0.0102) #21 - %100 = load ptr, ptr %3, align 8 - %101 = load i64, ptr %55, align 8 - %102 = load i64, ptr %10, align 8 - %.not.i.i.i.i.i.i.i.i41 = icmp eq i64 %102, %101 + %103 = load ptr, ptr %3, align 8 + %104 = load i64, ptr %56, align 8 + %105 = load i64, ptr %10, align 8 + %.not.i.i.i.i.i.i.i.i41 = icmp eq i64 %105, %104 %.pre125 = load ptr, ptr %8, align 8 - br i1 %.not.i.i.i.i.i.i.i.i41, label %111, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 + br i1 %.not.i.i.i.i.i.i.i.i41, label %114, label %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 _ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit call void @free(ptr noundef %.pre125) #21 - %103 = icmp sgt i64 %101, 0 - br i1 %103, label %104, label %.noexc50 + %106 = icmp sgt i64 %104, 0 + br i1 %106, label %107, label %.noexc50 -104: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 - %105 = icmp samesign ugt i64 %101, 4611686018427387903 - br i1 %105, label %.invoke, label %106 +107: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 + %108 = icmp samesign ugt i64 %104, 4611686018427387903 + br i1 %108, label %.invoke, label %109 -106: ; preds = %104 - %107 = shl nuw i64 %101, 2 - %108 = call noalias ptr @malloc(i64 noundef %107) #43 - %109 = icmp eq ptr %108, null - br i1 %109, label %.invoke, label %.noexc50 +109: ; preds = %107 + %110 = shl nuw i64 %104, 2 + %111 = call noalias ptr @malloc(i64 noundef %110) #43 + %112 = icmp eq ptr %111, null + br i1 %112, label %.invoke, label %.noexc50 -.invoke: ; preds = %106, %104 - %110 = call ptr @__cxa_allocate_exception(i64 8) #21 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %110, align 8 - invoke void @__cxa_throw(ptr nonnull %110, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 +.invoke: ; preds = %109, %107 + %113 = call ptr @__cxa_allocate_exception(i64 8) #21 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %113, align 8 + invoke void @__cxa_throw(ptr nonnull %113, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 to label %.cont unwind label %37 .cont: ; preds = %.invoke unreachable -.noexc50: ; preds = %106, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 - %.sink.i69 = phi ptr [ %108, %106 ], [ null, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 ] +.noexc50: ; preds = %109, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 + %.sink.i69 = phi ptr [ %111, %106 ], [ null, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i42 ] store ptr %.sink.i69, ptr %8, align 8 - store i64 %101, ptr %10, align 8 - br label %111 + store i64 %104, ptr %10, align 8 + br label %114 -111: ; preds = %.noexc50, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit - %112 = phi ptr [ %.sink.i69, %.noexc50 ], [ %.pre125, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] - %113 = sdiv i64 %101, 4 - %114 = shl nsw i64 %113, 2 - %115 = icmp sgt i64 %101, 3 - br i1 %115, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44 - -.lr.ph.i.i.i.i.i.i.i.i48: ; preds = %111, %.lr.ph.i.i.i.i.i.i.i.i48 - %.011.i.i.i.i.i.i.i.i49 = phi i64 [ %119, %.lr.ph.i.i.i.i.i.i.i.i48 ], [ 0, %111 ] - %116 = getelementptr inbounds nuw i32, ptr %112, i64 %.011.i.i.i.i.i.i.i.i49 - %117 = getelementptr inbounds nuw i32, ptr %100, i64 %.011.i.i.i.i.i.i.i.i49 - %118 = load <2 x i64>, ptr %117, align 16 - store <2 x i64> %118, ptr %116, align 16 - %119 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i49, 4 - %120 = icmp slt i64 %119, %114 - br i1 %120, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44, !llvm.loop !107 - -._crit_edge.i.i.i.i.i.i.i.i44: ; preds = %.lr.ph.i.i.i.i.i.i.i.i48, %111 - %121 = icmp slt i64 %114, %101 - br i1 %121, label %.lr.ph.i.i.i.i.i.i.i.i.i45, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit +114: ; preds = %.noexc50, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit + %115 = phi ptr [ %.sink.i69, %.noexc50 ], [ %.pre125, %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEaSERKS3_.exit ] + %116 = sdiv i64 %104, 4 + %117 = shl nsw i64 %116, 2 + %118 = icmp sgt i64 %104, 3 + br i1 %118, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44 + +.lr.ph.i.i.i.i.i.i.i.i48: ; preds = %114, %.lr.ph.i.i.i.i.i.i.i.i48 + %.011.i.i.i.i.i.i.i.i49 = phi i64 [ %122, %.lr.ph.i.i.i.i.i.i.i.i48 ], [ 0, %111 ] + %119 = getelementptr inbounds nuw i32, ptr %115, i64 %.011.i.i.i.i.i.i.i.i49 + %120 = getelementptr inbounds nuw i32, ptr %103, i64 %.011.i.i.i.i.i.i.i.i49 + %121 = load <2 x i64>, ptr %120, align 16 + store <2 x i64> %121, ptr %119, align 16 + %122 = add nuw nsw i64 %.011.i.i.i.i.i.i.i.i49, 4 + %123 = icmp slt i64 %122, %117 + br i1 %123, label %.lr.ph.i.i.i.i.i.i.i.i48, label %._crit_edge.i.i.i.i.i.i.i.i44, !llvm.loop !107 + +._crit_edge.i.i.i.i.i.i.i.i44: ; preds = %.lr.ph.i.i.i.i.i.i.i.i48, %114 + %124 = icmp slt i64 %117, %104 + br i1 %124, label %.lr.ph.i.i.i.i.i.i.i.i.i45, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit .lr.ph.i.i.i.i.i.i.i.i.i45: ; preds = %._crit_edge.i.i.i.i.i.i.i.i44, %.lr.ph.i.i.i.i.i.i.i.i.i45 - %.05.i.i.i.i.i.i.i.i.i46 = phi i64 [ %125, %.lr.ph.i.i.i.i.i.i.i.i.i45 ], [ %114, %._crit_edge.i.i.i.i.i.i.i.i44 ] - %122 = getelementptr inbounds i32, ptr %112, i64 %.05.i.i.i.i.i.i.i.i.i46 - %123 = getelementptr inbounds i32, ptr %100, i64 %.05.i.i.i.i.i.i.i.i.i46 - %124 = load i32, ptr %123, align 4 - store i32 %124, ptr %122, align 4 - %125 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i46, 1 - %exitcond.not.i.i.i.i.i.i.i.i.i47 = icmp eq i64 %125, %101 + %.05.i.i.i.i.i.i.i.i.i46 = phi i64 [ %128, %.lr.ph.i.i.i.i.i.i.i.i.i45 ], [ %117, %._crit_edge.i.i.i.i.i.i.i.i44 ] + %125 = getelementptr inbounds i32, ptr %115, i64 %.05.i.i.i.i.i.i.i.i.i46 + %126 = getelementptr inbounds i32, ptr %103, i64 %.05.i.i.i.i.i.i.i.i.i46 + %127 = load i32, ptr %126, align 4 + store i32 %127, ptr %125, align 4 + %128 = add nsw i64 %.05.i.i.i.i.i.i.i.i.i46, 1 + %exitcond.not.i.i.i.i.i.i.i.i.i47 = icmp eq i64 %128, %104 br i1 %exitcond.not.i.i.i.i.i.i.i.i.i47, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit, label %.lr.ph.i.i.i.i.i.i.i.i.i45, !llvm.loop !108 _ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit: ; preds = %.lr.ph.i.i.i.i.i.i.i.i.i45, %._crit_edge.i.i.i.i.i.i.i.i44 - %126 = load i64, ptr %22, align 8 - %127 = mul nsw i64 %126, 3 - %128 = icmp sgt i64 %126, 0 - br i1 %128, label %129, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit + %129 = load i64, ptr %22, align 8 + %130 = mul nsw i64 %129, 3 + %131 = icmp sgt i64 %129, 0 + br i1 %131, label %132, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit -129: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %130 = icmp samesign ugt i64 %127, 4611686018427387903 - br i1 %130, label %.invoke141, label %131 +132: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit + %133 = icmp samesign ugt i64 %130, 4611686018427387903 + br i1 %133, label %.invoke141, label %134 -131: ; preds = %129 - %132 = mul i64 %126, 12 - %133 = call noalias ptr @malloc(i64 noundef %132) #43 - %134 = icmp eq ptr %133, null - br i1 %134, label %.invoke141, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit +134: ; preds = %132 + %135 = mul i64 %129, 12 + %136 = call noalias ptr @malloc(i64 noundef %135) #43 + %137 = icmp eq ptr %136, null + br i1 %137, label %.invoke141, label %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit -.invoke141: ; preds = %131, %129 - %135 = call ptr @__cxa_allocate_exception(i64 8) #21 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %135, align 8 - invoke void @__cxa_throw(ptr nonnull %135, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 - to label %.cont142 unwind label %136 +.invoke141: ; preds = %134, %132 + %138 = call ptr @__cxa_allocate_exception(i64 8) #21 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %138, align 8 + invoke void @__cxa_throw(ptr nonnull %138, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #42 + to label %.cont142 unwind label %139 .cont142: ; preds = %.invoke141 unreachable -136: ; preds = %.invoke141 - %137 = landingpad { ptr, i32 } +139: ; preds = %.invoke141 + %140 = landingpad { ptr, i32 } cleanup br label %.body -_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %131, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit - %.sroa.0.0 = phi ptr [ null, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit ], [ %133, %131 ] - %138 = load ptr, ptr %2, align 8 +_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit: ; preds = %134, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit + %.sroa.0.0 = phi ptr [ null, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEaSIS1_EERS1_RKNS_9DenseBaseIT_EE.exit ], [ %136, %131 ] + %141 = load ptr, ptr %2, align 8 store ptr %.sroa.0.0, ptr %2, align 8 - %139 = getelementptr inbounds nuw i8, ptr %2, i64 8 - store i64 %127, ptr %139, align 8 - call void @free(ptr noundef %138) #21 - %140 = load i64, ptr %22, align 8 - %141 = icmp sgt i64 %140, 0 - br i1 %141, label %.preheader, label %._crit_edge109 - -.preheader: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit, %170 + %142 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %130, ptr %142, align 8 + call void @free(ptr noundef %141) #21 + %143 = load i64, ptr %22, align 8 + %144 = icmp sgt i64 %143, 0 + br i1 %144, label %.preheader, label %._crit_edge109 + +.preheader: ; preds = %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit, %173 %indvars.iv122 = phi i64 [ %indvars.iv.next123, %170 ], [ 0, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit ] - %142 = trunc nuw nsw i64 %indvars.iv122 to i32 - br label %143 + %145 = trunc nuw nsw i64 %indvars.iv122 to i32 + br label %146 -143: ; preds = %.preheader, %143 +146: ; preds = %.preheader, %146 %indvars.iv118 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next119, %143 ] - %144 = load ptr, ptr %0, align 8 - %145 = load i64, ptr %22, align 8 - %146 = mul nsw i64 %145, %indvars.iv118 - %147 = getelementptr i32, ptr %144, i64 %indvars.iv122 - %148 = getelementptr i32, ptr %147, i64 %146 - %149 = load i32, ptr %148, align 4 - %150 = sext i32 %149 to i64 - %151 = load ptr, ptr %8, align 8 - %152 = getelementptr inbounds i32, ptr %151, i64 %150 - %153 = load i32, ptr %152, align 4 - %154 = sext i32 %153 to i64 - %155 = load ptr, ptr %2, align 8 - %156 = getelementptr inbounds i32, ptr %155, i64 %154 - store i32 %142, ptr %156, align 4 - %157 = load ptr, ptr %0, align 8 - %158 = load i64, ptr %22, align 8 - %159 = mul nsw i64 %158, %indvars.iv118 - %160 = getelementptr i32, ptr %157, i64 %indvars.iv122 - %161 = getelementptr i32, ptr %160, i64 %159 - %162 = load i32, ptr %161, align 4 - %163 = sext i32 %162 to i64 - %164 = load ptr, ptr %8, align 8 - %165 = getelementptr inbounds i32, ptr %164, i64 %163 - %166 = load i32, ptr %165, align 4 - %167 = add nsw i32 %166, 1 - store i32 %167, ptr %165, align 4 + %147 = load ptr, ptr %0, align 8 + %148 = load i64, ptr %22, align 8 + %149 = mul nsw i64 %148, %indvars.iv118 + %150 = getelementptr i32, ptr %147, i64 %indvars.iv122 + %151 = getelementptr i32, ptr %150, i64 %149 + %152 = load i32, ptr %151, align 4 + %153 = sext i32 %152 to i64 + %154 = load ptr, ptr %8, align 8 + %155 = getelementptr inbounds i32, ptr %154, i64 %153 + %156 = load i32, ptr %155, align 4 + %157 = sext i32 %156 to i64 + %158 = load ptr, ptr %2, align 8 + %159 = getelementptr inbounds i32, ptr %158, i64 %157 + store i32 %145, ptr %159, align 4 + %160 = load ptr, ptr %0, align 8 + %161 = load i64, ptr %22, align 8 + %162 = mul nsw i64 %161, %indvars.iv118 + %163 = getelementptr i32, ptr %160, i64 %indvars.iv122 + %164 = getelementptr i32, ptr %163, i64 %162 + %165 = load i32, ptr %164, align 4 + %166 = sext i32 %165 to i64 + %167 = load ptr, ptr %8, align 8 + %168 = getelementptr inbounds i32, ptr %167, i64 %166 + %169 = load i32, ptr %168, align 4 + %170 = add nsw i32 %169, 1 + store i32 %170, ptr %168, align 4 %indvars.iv.next119 = add nuw nsw i64 %indvars.iv118, 1 %exitcond121.not = icmp eq i64 %indvars.iv.next119, 3 - br i1 %exitcond121.not, label %170, label %143, !llvm.loop !109 + br i1 %exitcond121.not, label %173, label %146, !llvm.loop !109 -168: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i - %169 = landingpad { ptr, i32 } +171: ; preds = %_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEll.exit.i.i.i.i.i.i.i.i + %172 = landingpad { ptr, i32 } cleanup call void @free(ptr noundef nonnull %.sroa.0.0102) #21 br label %.body -170: ; preds = %143 +173: ; preds = %146 %indvars.iv.next123 = add nuw nsw i64 %indvars.iv122, 1 - %171 = load i64, ptr %22, align 8 - %172 = icmp sgt i64 %171, %indvars.iv.next123 - br i1 %172, label %.preheader, label %._crit_edge109, !llvm.loop !110 + %174 = load i64, ptr %22, align 8 + %175 = icmp sgt i64 %174, %indvars.iv.next123 + br i1 %175, label %.preheader, label %._crit_edge109, !llvm.loop !110 -._crit_edge109: ; preds = %170, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit - %173 = load ptr, ptr %8, align 8 - call void @free(ptr noundef %173) #21 +._crit_edge109: ; preds = %173, %_ZN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEC2IliEERKT_RKT0_.exit + %176 = load ptr, ptr %8, align 8 + call void @free(ptr noundef %176) #21 ret void -.body: ; preds = %53, %136, %37, %168 - %.pn39 = phi { ptr, i32 } [ %169, %168 ], [ %54, %53 ], [ %38, %37 ], [ %137, %136 ] - %174 = load ptr, ptr %8, align 8 - call void @free(ptr noundef %174) #21 +.body: ; preds = %53, %139, %37, %171 + %.pn39 = phi { ptr, i32 } [ %172, %168 ], [ %54, %53 ], [ %38, %37 ], [ %140, %136 ] + %177 = load ptr, ptr %8, align 8 + call void @free(ptr noundef %177) #21 br label %common.resume } diff --git a/bench/openjdk/optimized/methodData.ll b/bench/openjdk/optimized/methodData.ll index f163bdc6a9f..23dacf1de4f 100644 --- a/bench/openjdk/optimized/methodData.ll +++ b/bench/openjdk/optimized/methodData.ll @@ -3779,16 +3779,16 @@ _ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit: ; p call void @llvm.lifetime.end.p0(ptr nonnull %5) br label %26 -26: ; preds = %51, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit +26: ; preds = %56, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit %27 = phi ptr [ %.val, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %.pre, %51 ] - %.024 = phi ptr [ %1, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %52, %51 ] + %.024 = phi ptr [ %1, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %57, %51 ] %.023 = phi ptr [ null, %_ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit ], [ %.232, %51 ] %28 = icmp eq ptr %27, null br i1 %28, label %29, label %.thread29 29: ; preds = %26 %30 = icmp eq ptr %.023, null - br i1 %30, label %31, label %37 + br i1 %30, label %31, label %42 31: ; preds = %29 %32 = tail call noundef ptr @_Z12AllocateHeapm8MEMFLAGSN17AllocFailStrategy13AllocFailEnumE(i64 noundef %7, i8 noundef zeroext 7, i32 noundef 1) #21 @@ -3803,50 +3803,50 @@ _ZL35guarantee_failed_speculations_aliveP7nmethodPP17FailedSpeculation.exit: ; p tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %36, ptr readonly align 1 %2, i64 %6, i1 false) br label %37 -37: ; preds = %34, %29 +42: ; preds = %34, %29 %.1 = phi ptr [ %32, %34 ], [ %.023, %29 ] - %38 = tail call noundef ptr asm sideeffect "lock cmpxchgq $1,($3)", "={ax},r,{ax},r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull %.1, ptr null, ptr nonnull %.024) #21, !srcloc !23 - %39 = icmp eq ptr %38, null - br i1 %39, label %.thread, label %40 + %43 = tail call noundef ptr asm sideeffect "lock cmpxchgq $1,($3)", "={ax},r,{ax},r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr nonnull %.1, ptr null, ptr nonnull %.024) #21, !srcloc !23 + %44 = icmp eq ptr %43, null + br i1 %44, label %.thread, label %45 -40: ; preds = %37 +45: ; preds = %42 %.pr = load ptr, ptr %.024, align 8 %.not = icmp eq ptr %.pr, null - br i1 %.not, label %41, label %.thread29 + br i1 %.not, label %46, label %.thread29 -41: ; preds = %40 - %42 = load ptr, ptr @g_assert_poison, align 8 - store i8 88, ptr %42, align 1 +46: ; preds = %45 + %47 = load ptr, ptr @g_assert_poison, align 8 + store i8 88, ptr %47, align 1 tail call void (ptr, i32, ptr, ptr, ...) @_Z15report_vm_errorPKciS0_S0_z(ptr noundef nonnull @.str.5, i32 noundef 856, ptr noundef nonnull @.str.40, ptr noundef nonnull @.str.41) #22 unreachable -.thread29: ; preds = %26, %40 +.thread29: ; preds = %26, %45 %.232 = phi ptr [ %.1, %40 ], [ %.023, %26 ] - %43 = phi ptr [ %.pr, %40 ], [ %27, %26 ] - %44 = load i32, ptr %43, align 8 - %45 = icmp eq i32 %44, %3 - br i1 %45, label %46, label %51 - -46: ; preds = %.thread29 - %47 = getelementptr inbounds nuw i8, ptr %43, i64 16 - %bcmp = tail call i32 @bcmp(ptr %2, ptr nonnull %47, i64 %6) - %48 = icmp eq i32 %bcmp, 0 - br i1 %48, label %49, label %51 - -49: ; preds = %46 + %48 = phi ptr [ %.pr, %40 ], [ %27, %26 ] + %49 = load i32, ptr %48, align 8 + %50 = icmp eq i32 %49, %3 + br i1 %50, label %51, label %56 + +51: ; preds = %.thread29 + %52 = getelementptr inbounds nuw i8, ptr %48, i64 16 + %bcmp = tail call i32 @bcmp(ptr %2, ptr nonnull %52, i64 %6) + %53 = icmp eq i32 %bcmp, 0 + br i1 %53, label %54, label %56 + +54: ; preds = %51 %.not28 = icmp eq ptr %.232, null - br i1 %.not28, label %.thread, label %50 + br i1 %.not28, label %.thread, label %55 -50: ; preds = %49 +55: ; preds = %54 tail call void @_Z8FreeHeapPv(ptr noundef nonnull %.232) #21 br label %.thread -51: ; preds = %46, %.thread29 - %52 = getelementptr inbounds nuw i8, ptr %43, i64 8 - %.pre = load ptr, ptr %52, align 8 +56: ; preds = %51, %.thread29 + %57 = getelementptr inbounds nuw i8, ptr %48, i64 8 + %.pre = load ptr, ptr %57, align 8 br label %26, !llvm.loop !24 -.thread: ; preds = %31, %37, %49, %50 +.thread: ; preds = %31, %42, %54, %55 %.0 = phi i1 [ false, %50 ], [ false, %49 ], [ false, %31 ], [ true, %37 ] ret i1 %.0 } diff --git a/bench/openjdk/optimized/screencast_pipewire.ll b/bench/openjdk/optimized/screencast_pipewire.ll index e05a25c0549..e6ef5743c38 100644 --- a/bench/openjdk/optimized/screencast_pipewire.ll +++ b/bench/openjdk/optimized/screencast_pipewire.ll @@ -2588,7 +2588,7 @@ define internal void @onStreamParamChanged(ptr noundef %0, i32 noundef %1, ptr n %21 = icmp eq ptr %2, null %22 = icmp ne i32 %1, 4 %or.cond = or i1 %22, %21 - br i1 %or.cond, label %148, label %23 + br i1 %or.cond, label %151, label %23 23: ; preds = %3 call void @llvm.lifetime.start.p0(ptr nonnull %6) @@ -2605,7 +2605,7 @@ define internal void @onStreamParamChanged(ptr noundef %0, i32 noundef %1, ptr n %.not.i.i.i.i = icmp ult i32 %24, -8 br i1 %.not.i.i.i.i, label %28, label %spa_format_parse.exit.thread -28: ; preds = %23 +28:; preds = %23 %29 = zext i32 %25 to i64 %30 = zext i32 %24 to i64 %31 = add nsw i64 %30, -1 @@ -2615,227 +2615,227 @@ define internal void @onStreamParamChanged(ptr noundef %0, i32 noundef %1, ptr n br i1 %.not13.i.i.i.i, label %spa_format_parse.exit.thread, label %spa_pod_parser_current.exit.i.i spa_pod_parser_current.exit.i.i: ; preds = %28 - %34 = getelementptr inbounds nuw i8, ptr %2, i64 4 - %35 = load i32, ptr %34, align 4 - %36 = icmp ne i32 %35, 15 - %37 = icmp ult i32 %24, 8 - %or.cond.i.i = or i1 %37, %36 - br i1 %or.cond.i.i, label %spa_format_parse.exit.thread, label %38 - -38: ; preds = %spa_pod_parser_current.exit.i.i - %39 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %40 = load i32, ptr %39, align 4 - %.not16.i.i = icmp eq i32 %40, 262147 + %37 = getelementptr inbounds nuw i8, ptr %2, i64 4 + %38 = load i32, ptr %37, align 4 + %39 = icmp ne i32 %38, 15 + %40 = icmp ult i32 %24, 8 + %or.cond.i.i = or i1 %40, %39 + br i1 %or.cond.i.i, label %spa_format_parse.exit.thread, label %41 + +41: ; preds = %spa_pod_parser_current.exit.i.i + %42 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %43 = load i32, ptr %42, align 4 + %.not16.i.i = icmp eq i32 %43, 262147 br i1 %.not16.i.i, label %spa_format_parse.exit, label %spa_format_parse.exit.thread -spa_format_parse.exit.thread: ; preds = %spa_pod_parser_current.exit.i.i, %28, %23, %38 +spa_format_parse.exit.thread: ; preds = %spa_pod_parser_current.exit.i.i, %28, %23, %41 call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.end.p0(ptr nonnull %7) - br label %148 + br label %151 -spa_format_parse.exit: ; preds = %38 +spa_format_parse.exit: ; preds = %41 %.val.i.i = load i64, ptr %2, align 4 store i64 %.val.i.i, ptr %7, align 8 - %41 = getelementptr inbounds nuw i8, ptr %7, i64 8 - call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %41, i8 0, i64 16, i1 false) + %44 = getelementptr inbounds nuw i8, ptr %7, i64 8 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %44, i8 0, i64 16, i1 false) store ptr %7, ptr %26, align 8 store i32 %25, ptr %27, align 8 - %42 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %6, i32 noundef 1, ptr noundef nonnull @.str.76, ptr noundef nonnull %8, i32 noundef 2, ptr noundef nonnull @.str.76, ptr noundef nonnull %9, i32 noundef 0) + %45 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %6, i32 noundef 1, ptr noundef nonnull @.str.76, ptr noundef nonnull %8, i32 noundef 2, ptr noundef nonnull @.str.76, ptr noundef nonnull %9, i32 noundef 0) call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.end.p0(ptr nonnull %7) - %43 = icmp slt i32 %42, 0 - br i1 %43, label %148, label %44 - -44: ; preds = %spa_format_parse.exit - %45 = load i32, ptr %8, align 4 - %46 = icmp ne i32 %45, 2 - %47 = load i32, ptr %9, align 4 - %48 = icmp ne i32 %47, 1 - %or.cond3 = select i1 %46, i1 true, i1 %48 - br i1 %or.cond3, label %148, label %49 - -49: ; preds = %44 - %50 = getelementptr inbounds nuw i8, ptr %0, i64 56 + %46 = icmp slt i32 %45, 0 + br i1 %46, label %151, label %47 + +47: ; preds = %spa_format_parse.exit + %48 = load i32, ptr %8, align 4 + %49 = icmp ne i32 %48, 2 + %50 = load i32, ptr %9, align 4 + %51 = icmp ne i32 %50, 1 + %or.cond3 = select i1 %49, i1 true, i1 %51 + br i1 %or.cond3, label %151, label %52 + +52: ; preds = %47 + %53 = getelementptr inbounds nuw i8, ptr %0, i64 56 call void @llvm.lifetime.start.p0(ptr nonnull %4) call void @llvm.lifetime.start.p0(ptr nonnull %5) - %51 = getelementptr inbounds nuw i8, ptr %0, i64 60 - store i32 0, ptr %51, align 4 - %52 = load i32, ptr %34, align 4 - %53 = icmp eq i32 %52, 15 + %54 = getelementptr inbounds nuw i8, ptr %0, i64 60 + store i32 0, ptr %54, align 4 + %55 = load i32, ptr %37, align 4 + %56 = icmp eq i32 %55, 15 %.pre27.i = load i32, ptr %2, align 4 - br i1 %53, label %spa_pod_is_object.exit.i.i, label %spa_pod_find_prop.exit.thread.i + br i1 %56, label %spa_pod_is_object.exit.i.i, label %spa_pod_find_prop.exit.thread.i -spa_pod_is_object.exit.i.i: ; preds = %49 - %54 = icmp ult i32 %.pre27.i, 8 - br i1 %54, label %.thread, label %58 +spa_pod_is_object.exit.i.i: ; preds = %52 + %57 = icmp ult i32 %.pre27.i, 8 + br i1 %57, label %.thread, label %61 .thread: ; preds = %spa_pod_is_object.exit.i.i - %55 = or disjoint i32 %.pre27.i, 8 + %58 = or disjoint i32 %.pre27.i, 8 store ptr %2, ptr %4, align 8 %.sroa.2.0..sroa_idx.i.i30.i = getelementptr inbounds nuw i8, ptr %4, i64 8 - store i32 %55, ptr %.sroa.2.0..sroa_idx.i.i30.i, align 8 + store i32 %58, ptr %.sroa.2.0..sroa_idx.i.i30.i, align 8 %.sroa.3.0..sroa_idx.i.i31.i = getelementptr inbounds nuw i8, ptr %4, i64 12 call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %.sroa.3.0..sroa_idx.i.i31.i, i8 0, i64 20, i1 false) - %56 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %57 = getelementptr inbounds nuw i8, ptr %4, i64 16 - br label %85 + %59 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %60 = getelementptr inbounds nuw i8, ptr %4, i64 16 + br label %88 -58: ; preds = %spa_pod_is_object.exit.i.i - %59 = ptrtoint ptr %39 to i64 - %60 = add i64 %59, 8 - %61 = inttoptr i64 %60 to ptr - %62 = zext i32 %.pre27.i to i64 - %63 = getelementptr i8, ptr %39, i64 %62 - %64 = getelementptr i8, ptr %61, i64 16 - %.not.i25.i.i.i = icmp ugt ptr %64, %63 +61: ; preds = %spa_pod_is_object.exit.i.i + %62 = ptrtoint ptr %42 to i64 + %63 = add i64 %62, 8 + %64 = inttoptr i64 %63 to ptr + %65 = zext i32 %.pre27.i to i64 + %66 = getelementptr i8, ptr %42, i64 %65 + %67 = getelementptr i8, ptr %64, i64 16 + %.not.i25.i.i.i = icmp ugt ptr %67, %66 br i1 %.not.i25.i.i.i, label %spa_pod_find_prop.exit.thread.i, label %.lr.ph.i.i.i -.lr.ph.i.i.i: ; preds = %58, %73 - %.026.i.i.i = phi ptr [ %79, %73 ], [ %61, %58 ] - %65 = getelementptr inbounds nuw i8, ptr %.026.i.i.i, i64 8 - %66 = load i32, ptr %65, align 4 - %67 = zext i32 %66 to i64 - %68 = getelementptr i8, ptr %.026.i.i.i, i64 %67 - %69 = getelementptr i8, ptr %68, i64 16 - %.not22.i.i.i = icmp ugt ptr %69, %63 - br i1 %.not22.i.i.i, label %spa_pod_find_prop.exit.thread.i, label %70 - -70: ; preds = %.lr.ph.i.i.i - %71 = load i32, ptr %.026.i.i.i, align 4 - %72 = icmp eq i32 %71, 131074 - br i1 %72, label %spa_pod_find_prop.exit.i, label %73 - -73: ; preds = %70 - %74 = ptrtoint ptr %.026.i.i.i to i64 - %75 = add nuw nsw i64 %67, 15 - %76 = or i64 %75, 7 - %77 = add i64 %74, 1 - %78 = add i64 %77, %76 - %79 = inttoptr i64 %78 to ptr - %80 = getelementptr i8, ptr %79, i64 16 - %.not.i.i.i.i32 = icmp ugt ptr %80, %63 +.lr.ph.i.i.i: ; preds = %61, %76 + %.026.i.i.i = phi ptr [ %82, %73 ], [ %64, %58 ] + %68 = getelementptr inbounds nuw i8, ptr %.026.i.i.i, i64 8 + %69 = load i32, ptr %68, align 4 + %70 = zext i32 %69 to i64 + %71 = getelementptr i8, ptr %.026.i.i.i, i64 %70 + %72 = getelementptr i8, ptr %71, i64 16 + %.not22.i.i.i = icmp ugt ptr %72, %66 + br i1 %.not22.i.i.i, label %spa_pod_find_prop.exit.thread.i, label %73 + +73: ; preds = %.lr.ph.i.i.i + %74 = load i32, ptr %.026.i.i.i, align 4 + %75 = icmp eq i32 %74, 131074 + br i1 %75, label %spa_pod_find_prop.exit.i, label %76 + +76: ; preds = %73 + %77 = ptrtoint ptr %.026.i.i.i to i64 + %78 = add nuw nsw i64 %70, 15 + %79 = or i64 %78, 7 + %80 = add i64 %77, 1 + %81 = add i64 %80, %79 + %82 = inttoptr i64 %81 to ptr + %83 = getelementptr i8, ptr %82, i64 16 + %.not.i.i.i.i32 = icmp ugt ptr %83, %66 br i1 %.not.i.i.i.i32, label %spa_pod_find_prop.exit.thread.i, label %.lr.ph.i.i.i, !llvm.loop !16 -spa_pod_find_prop.exit.i: ; preds = %70 - store i32 4, ptr %51, align 4 +spa_pod_find_prop.exit.i: ; preds = %73 + store i32 4, ptr %54, align 4 %.pre.i = load i32, ptr %2, align 4 br label %spa_pod_find_prop.exit.thread.i -spa_pod_find_prop.exit.thread.i: ; preds = %73, %.lr.ph.i.i.i, %spa_pod_find_prop.exit.i, %58, %49 - %81 = phi i32 [ %.pre27.i, %49 ], [ %.pre27.i, %58 ], [ %.pre.i, %spa_pod_find_prop.exit.i ], [ %.pre27.i, %.lr.ph.i.i.i ], [ %.pre27.i, %73 ] - %82 = add i32 %81, 8 +spa_pod_find_prop.exit.thread.i: ; preds = %76, %.lr.ph.i.i.i, %spa_pod_find_prop.exit.i, %61, %52 + %84 = phi i32 [ %.pre27.i, %49 ], [ %.pre27.i, %58 ], [ %.pre.i, %spa_pod_find_prop.exit.i ], [ %.pre27.i, %.lr.ph.i.i.i ], [ %.pre27.i, %73 ] + %85 = add i32 %84, 8 store ptr %2, ptr %4, align 8 %.sroa.2.0..sroa_idx.i.i.i24 = getelementptr inbounds nuw i8, ptr %4, i64 8 - store i32 %82, ptr %.sroa.2.0..sroa_idx.i.i.i24, align 8 + store i32 %85, ptr %.sroa.2.0..sroa_idx.i.i.i24, align 8 %.sroa.3.0..sroa_idx.i.i.i25 = getelementptr inbounds nuw i8, ptr %4, i64 12 call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %.sroa.3.0..sroa_idx.i.i.i25, i8 0, i64 20, i1 false) - %83 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %84 = getelementptr inbounds nuw i8, ptr %4, i64 16 - %.not.i.i.i22.i = icmp ult i32 %81, -8 - br i1 %.not.i.i.i22.i, label %85, label %spa_format_video_raw_parse.exit.thread - -85: ; preds = %spa_pod_find_prop.exit.thread.i, %.thread - %86 = phi i32 [ %.pre27.i, %.thread ], [ %81, %spa_pod_find_prop.exit.thread.i ] - %87 = phi i32 [ %55, %.thread ], [ %82, %spa_pod_find_prop.exit.thread.i ] - %88 = phi ptr [ %56, %.thread ], [ %83, %spa_pod_find_prop.exit.thread.i ] - %89 = phi ptr [ %57, %.thread ], [ %84, %spa_pod_find_prop.exit.thread.i ] - %90 = zext i32 %87 to i64 - %91 = zext i32 %86 to i64 - %92 = add nsw i64 %91, -1 - %93 = or i64 %92, 7 - %94 = add nsw i64 %93, 9 - %.not13.i.i.i.i27 = icmp ugt i64 %94, %90 + %86 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %87 = getelementptr inbounds nuw i8, ptr %4, i64 16 + %.not.i.i.i22.i = icmp ult i32 %84, -8 + br i1 %.not.i.i.i22.i, label %88, label %spa_format_video_raw_parse.exit.thread + +88: ; preds = %spa_pod_find_prop.exit.thread.i, %.thread + %89 = phi i32 [ %.pre27.i, %.thread ], [ %84, %spa_pod_find_prop.exit.thread.i ] + %90 = phi i32 [ %58, %.thread ], [ %85, %spa_pod_find_prop.exit.thread.i ] + %91 = phi ptr [ %59, %.thread ], [ %86, %spa_pod_find_prop.exit.thread.i ] + %92 = phi ptr [ %60, %.thread ], [ %87, %spa_pod_find_prop.exit.thread.i ] + %93 = zext i32 %90 to i64 + %94 = zext i32 %89 to i64 + %95 = add nsw i64 %94, -1 + %96 = or i64 %95, 7 + %97 = add nsw i64 %96, 9 + %.not13.i.i.i.i27 = icmp ugt i64 %97, %93 br i1 %.not13.i.i.i.i27, label %spa_format_video_raw_parse.exit.thread, label %spa_pod_parser_current.exit.i.i28 -spa_pod_parser_current.exit.i.i28: ; preds = %85 - %95 = load i32, ptr %34, align 4 - %96 = icmp ne i32 %95, 15 - %97 = icmp ult i32 %86, 8 - %or.cond.i.i29 = or i1 %97, %96 - br i1 %or.cond.i.i29, label %spa_format_video_raw_parse.exit.thread, label %98 +spa_pod_parser_current.exit.i.i28: ; preds = %88 + %98 = load i32, ptr %37, align 4 + %99 = icmp ne i32 %98, 15 + %100 = icmp ult i32 %89, 8 + %or.cond.i.i29 = or i1 %100, %99 + br i1 %or.cond.i.i29, label %spa_format_video_raw_parse.exit.thread, label %101 -98: ; preds = %spa_pod_parser_current.exit.i.i28 - %99 = load i32, ptr %39, align 4 - %.not16.i.i30 = icmp eq i32 %99, 262147 +101: ; preds = %spa_pod_parser_current.exit.i.i28 + %102 = load i32, ptr %42, align 4 + %.not16.i.i30 = icmp eq i32 %102, 262147 br i1 %.not16.i.i30, label %spa_format_video_raw_parse.exit, label %spa_format_video_raw_parse.exit.thread -spa_format_video_raw_parse.exit.thread: ; preds = %spa_pod_find_prop.exit.thread.i, %spa_pod_parser_current.exit.i.i28, %85, %98 +spa_format_video_raw_parse.exit.thread: ; preds = %spa_pod_find_prop.exit.thread.i, %spa_pod_parser_current.exit.i.i28, %88, %101 call void @llvm.lifetime.end.p0(ptr nonnull %4) call void @llvm.lifetime.end.p0(ptr nonnull %5) - br label %148 + br label %151 -spa_format_video_raw_parse.exit: ; preds = %98 +spa_format_video_raw_parse.exit: ; preds = %101 %.val.i.i31 = load i64, ptr %2, align 4 store i64 %.val.i.i31, ptr %5, align 8 - %100 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %101 = getelementptr inbounds nuw i8, ptr %5, i64 8 - call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %101, i8 0, i64 16, i1 false) - store ptr %5, ptr %88, align 8 - store i32 %87, ptr %89, align 8 - %102 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %103 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %104 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %105 = getelementptr inbounds nuw i8, ptr %0, i64 88 - %106 = getelementptr inbounds nuw i8, ptr %0, i64 96 - %107 = getelementptr inbounds nuw i8, ptr %0, i64 100 - %108 = getelementptr inbounds nuw i8, ptr %0, i64 104 - %109 = getelementptr inbounds nuw i8, ptr %0, i64 112 - %110 = getelementptr inbounds nuw i8, ptr %0, i64 116 - %111 = getelementptr inbounds nuw i8, ptr %0, i64 120 - %112 = getelementptr inbounds nuw i8, ptr %0, i64 124 - %113 = getelementptr inbounds nuw i8, ptr %0, i64 128 - %114 = getelementptr inbounds nuw i8, ptr %0, i64 132 - %115 = getelementptr inbounds nuw i8, ptr %0, i64 136 - %116 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %4, i32 noundef 131073, ptr noundef nonnull @.str.77, ptr noundef nonnull %50, i32 noundef 131074, ptr noundef nonnull @.str.78, ptr noundef nonnull %102, i32 noundef 131075, ptr noundef nonnull @.str.79, ptr noundef nonnull %103, i32 noundef 131076, ptr noundef nonnull @.str.80, ptr noundef nonnull %104, i32 noundef 131077, ptr noundef nonnull @.str.80, ptr noundef nonnull %105, i32 noundef 131078, ptr noundef nonnull @.str.81, ptr noundef nonnull %106, i32 noundef 131079, ptr noundef nonnull @.str.77, ptr noundef nonnull %107, i32 noundef 131080, ptr noundef nonnull @.str.80, ptr noundef nonnull %108, i32 noundef 131081, ptr noundef nonnull @.str.77, ptr noundef nonnull %109, i32 noundef 131082, ptr noundef nonnull @.str.77, ptr noundef nonnull %110, i32 noundef 131083, ptr noundef nonnull @.str.77, ptr noundef nonnull %111, i32 noundef 131084, ptr noundef nonnull @.str.77, ptr noundef nonnull %112, i32 noundef 131085, ptr noundef nonnull @.str.77, ptr noundef nonnull %113, i32 noundef 131086, ptr noundef nonnull @.str.77, ptr noundef nonnull %114, i32 noundef 131087, ptr noundef nonnull @.str.77, ptr noundef nonnull %115, i32 noundef 0) - %117 = load ptr, ptr %101, align 8 - store ptr %117, ptr %88, align 8 - %118 = load i32, ptr %100, align 8 - %119 = load i32, ptr %5, align 8 - %120 = add i32 %119, 7 - %121 = or i32 %120, 7 - %122 = add i32 %118, 1 - %123 = add i32 %122, %121 - store i32 %123, ptr %89, align 8 + %103 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %104 = getelementptr inbounds nuw i8, ptr %5, i64 8 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %104, i8 0, i64 16, i1 false) + store ptr %5, ptr %91, align 8 + store i32 %90, ptr %92, align 8 + %105 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %106 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %107 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %108 = getelementptr inbounds nuw i8, ptr %0, i64 88 + %109 = getelementptr inbounds nuw i8, ptr %0, i64 96 + %110 = getelementptr inbounds nuw i8, ptr %0, i64 100 + %111 = getelementptr inbounds nuw i8, ptr %0, i64 104 + %112 = getelementptr inbounds nuw i8, ptr %0, i64 112 + %113 = getelementptr inbounds nuw i8, ptr %0, i64 116 + %114 = getelementptr inbounds nuw i8, ptr %0, i64 120 + %115 = getelementptr inbounds nuw i8, ptr %0, i64 124 + %116 = getelementptr inbounds nuw i8, ptr %0, i64 128 + %117 = getelementptr inbounds nuw i8, ptr %0, i64 132 + %118 = getelementptr inbounds nuw i8, ptr %0, i64 136 + %119 = call i32 (ptr, ...) @spa_pod_parser_get(ptr noundef %4, i32 noundef 131073, ptr noundef nonnull @.str.77, ptr noundef nonnull %53, i32 noundef 131074, ptr noundef nonnull @.str.78, ptr noundef nonnull %105, i32 noundef 131075, ptr noundef nonnull @.str.79, ptr noundef nonnull %106, i32 noundef 131076, ptr noundef nonnull @.str.80, ptr noundef nonnull %107, i32 noundef 131077, ptr noundef nonnull @.str.80, ptr noundef nonnull %108, i32 noundef 131078, ptr noundef nonnull @.str.81, ptr noundef nonnull %109, i32 noundef 131079, ptr noundef nonnull @.str.77, ptr noundef nonnull %110, i32 noundef 131080, ptr noundef nonnull @.str.80, ptr noundef nonnull %111, i32 noundef 131081, ptr noundef nonnull @.str.77, ptr noundef nonnull %112, i32 noundef 131082, ptr noundef nonnull @.str.77, ptr noundef nonnull %113, i32 noundef 131083, ptr noundef nonnull @.str.77, ptr noundef nonnull %114, i32 noundef 131084, ptr noundef nonnull @.str.77, ptr noundef nonnull %115, i32 noundef 131085, ptr noundef nonnull @.str.77, ptr noundef nonnull %116, i32 noundef 131086, ptr noundef nonnull @.str.77, ptr noundef nonnull %117, i32 noundef 131087, ptr noundef nonnull @.str.77, ptr noundef nonnull %118, i32 noundef 0) + %120 = load ptr, ptr %104, align 8 + store ptr %120, ptr %91, align 8 + %121 = load i32, ptr %103, align 8 + %122 = load i32, ptr %5, align 8 + %123 = add i32 %122, 7 + %124 = or i32 %123, 7 + %125 = add i32 %121, 1 + %126 = add i32 %125, %124 + store i32 %126, ptr %92, align 8 call void @llvm.lifetime.end.p0(ptr nonnull %4) call void @llvm.lifetime.end.p0(ptr nonnull %5) - %124 = icmp slt i32 %116, 0 - br i1 %124, label %148, label %125 - -125: ; preds = %spa_format_video_raw_parse.exit - %126 = load ptr, ptr %10, align 8 - %127 = load i32, ptr %126, align 8 - %128 = getelementptr inbounds nuw i8, ptr %126, i64 4 - %129 = load i32, ptr %128, align 4 - %130 = getelementptr inbounds nuw i8, ptr %126, i64 8 - %131 = load i32, ptr %130, align 8 - %132 = getelementptr inbounds nuw i8, ptr %126, i64 12 - %133 = load i32, ptr %132, align 4 - %134 = getelementptr inbounds nuw i8, ptr %126, i64 16 - %135 = load i32, ptr %134, align 8 - %136 = load i32, ptr %50, align 8 - %137 = call fastcc ptr @spa_debug_type_find(ptr noundef nonnull @spa_type_video_format, i32 noundef %136) - %138 = icmp eq ptr %137, null - br i1 %138, label %spa_debug_type_find_name.exit, label %139 - -139: ; preds = %125 - %140 = getelementptr inbounds nuw i8, ptr %137, i64 8 - %141 = load ptr, ptr %140, align 8 + %127 = icmp slt i32 %119, 0 + br i1 %127, label %151, label %128 + +128: ; preds = %spa_format_video_raw_parse.exit + %129 = load ptr, ptr %10, align 8 + %130 = load i32, ptr %129, align 8 + %131 = getelementptr inbounds nuw i8, ptr %129, i64 4 + %132 = load i32, ptr %131, align 4 + %133 = getelementptr inbounds nuw i8, ptr %129, i64 8 + %134 = load i32, ptr %133, align 8 + %135 = getelementptr inbounds nuw i8, ptr %129, i64 12 + %136 = load i32, ptr %135, align 4 + %137 = getelementptr inbounds nuw i8, ptr %129, i64 16 + %138 = load i32, ptr %137, align 8 + %139 = load i32, ptr %53, align 8 + %140 = call fastcc ptr @spa_debug_type_find(ptr noundef nonnull @spa_type_video_format, i32 noundef %139) + %141 = icmp eq ptr %140, null + br i1 %141, label %spa_debug_type_find_name.exit, label %142 + +142: ; preds = %128 + %143 = getelementptr inbounds nuw i8, ptr %140, i64 8 + %144 = load ptr, ptr %143, align 8 br label %spa_debug_type_find_name.exit -spa_debug_type_find_name.exit: ; preds = %125, %139 - %.0.i33 = phi ptr [ %141, %139 ], [ null, %125 ] - %142 = load i32, ptr %103, align 8 - %143 = getelementptr inbounds nuw i8, ptr %0, i64 76 - %144 = load i32, ptr %143, align 4 - call void (ptr, ...) @debug_screencast(ptr noundef nonnull @.str.75, ptr noundef nonnull @__func__.onStreamParamChanged, i32 noundef 223, i32 noundef %127, i32 noundef %129, i32 noundef %131, i32 noundef %133, i32 noundef %135, ptr noundef %.0.i33, i32 noundef %136, i32 noundef %142, i32 noundef %144) - %145 = getelementptr inbounds nuw i8, ptr %0, i64 152 - store i32 1, ptr %145, align 8 - %146 = load ptr, ptr @fp_pw_thread_loop_signal, align 8 - %147 = load ptr, ptr @pw, align 8 - call void %146(ptr noundef %147, i1 noundef zeroext true) #16 - br label %148 - -148: ; preds = %spa_format_video_raw_parse.exit.thread, %spa_format_parse.exit.thread, %spa_format_video_raw_parse.exit, %44, %spa_format_parse.exit, %3, %spa_debug_type_find_name.exit +spa_debug_type_find_name.exit: ; preds = %128, %142 + %.0.i33 = phi ptr [ %144, %139 ], [ null, %125 ] + %145 = load i32, ptr %106, align 8 + %146 = getelementptr inbounds nuw i8, ptr %0, i64 76 + %147 = load i32, ptr %146, align 4 + call void (ptr, ...) @debug_screencast(ptr noundef nonnull @.str.75, ptr noundef nonnull @__func__.onStreamParamChanged, i32 noundef 223, i32 noundef %130, i32 noundef %132, i32 noundef %134, i32 noundef %136, i32 noundef %138, ptr noundef %.0.i33, i32 noundef %139, i32 noundef %145, i32 noundef %147) + %148 = getelementptr inbounds nuw i8, ptr %0, i64 152 + store i32 1, ptr %148, align 8 + %149 = load ptr, ptr @fp_pw_thread_loop_signal, align 8 + %150 = load ptr, ptr @pw, align 8 + call void %146(ptr noundef %150, i1 noundef zeroext true) #16 + br label %151 + +151: ; preds = %spa_format_video_raw_parse.exit.thread, %spa_format_parse.exit.thread, %spa_format_video_raw_parse.exit, %47, %spa_format_parse.exit, %3, %spa_debug_type_find_name.exit ret void } diff --git a/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll b/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll index d6ee6a1fba8..3011fbbe614 100644 --- a/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll +++ b/bench/pingora-rs/optimized/acx590v32pn6eo20biyujqd8g.ll @@ -6637,151 +6637,151 @@ define hidden void @_ZN8arc_swap4debt7helping5Slots4help17h2d8e69b46d0bf67aE(ptr %12 = getelementptr inbounds nuw i8, ptr %1, i64 16 %13 = getelementptr inbounds nuw i8, ptr %3, i64 8 %.val = load ptr, ptr %13, align 8, !nonnull !3, !align !38 - %14 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 %15 = getelementptr inbounds nuw i8, ptr %1, i64 32 %16 = getelementptr inbounds nuw i8, ptr %0, i64 32 br label %.backedge .backedge: ; preds = %.backedge.backedge, %4 - %17 = phi i64 [ %11, %4 ], [ %.be, %.backedge.backedge ] - %18 = and i64 %17, 3 - switch i64 %18, label %default.unreachable31 [ - i64 0, label %23 + %19 = phi i64 [ %11, %4 ], [ %.be, %.backedge.backedge ] + %20 = and i64 %19, 3 + switch i64 %20, label %default.unreachable31 [ + i64 0, label %25 i64 1, label %.loopexit - i64 2, label %25 + i64 2, label %27 i64 3, label %.loopexit8 ], !prof !277 default.unreachable31: ; preds = %.backedge unreachable -.loopexit8: ; preds = %.backedge, %23 +.loopexit8: ; preds = %.backedge, %25 call void @llvm.lifetime.start.p0(ptr nonnull %8) call void @llvm.lifetime.start.p0(ptr nonnull %7) store ptr %10, ptr %7, align 8 %.sroa.44.0..sroa_idx = getelementptr inbounds nuw i8, ptr %7, i64 8 store ptr @"_ZN4core3fmt3num55_$LT$impl$u20$core..fmt..UpperHex$u20$for$u20$usize$GT$3fmt17hdee01be989c5eb83E", ptr %.sroa.44.0..sroa_idx, align 8 store ptr @anon.9683d7273f0e2da39fab36790461676f.144, ptr %8, align 8 - %19 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store i64 1, ptr %19, align 8 - %20 = getelementptr inbounds nuw i8, ptr %8, i64 32 - store ptr null, ptr %20, align 8 - %21 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store ptr %7, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %8, i64 24 - store i64 1, ptr %22, align 8 + %21 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store i64 1, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %8, i64 32 + store ptr null, ptr %22, align 8 + %23 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store ptr %7, ptr %23, align 8 + %24 = getelementptr inbounds nuw i8, ptr %8, i64 24 + store i64 1, ptr %24, align 8 call void @_ZN4core9panicking9panic_fmt17h8d16370d7cdeaf7bE(ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %8, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.9683d7273f0e2da39fab36790461676f.145) #21 unreachable -23: ; preds = %.backedge - %24 = icmp eq i64 %17, 0 - br i1 %24, label %.loopexit, label %.loopexit8, !prof !12 +25: ; preds = %.backedge + %26 = icmp eq i64 %19, 0 + br i1 %26, label %.loopexit, label %.loopexit8, !prof !12 -.loopexit: ; preds = %44, %.backedge, %23, %61 +.loopexit: ; preds = %46, %.backedge, %25, %67 call void @llvm.lifetime.end.p0(ptr nonnull %10) ret void -25: ; preds = %.backedge - %26 = load atomic i64, ptr %12 seq_cst, align 8 - %.not = icmp eq i64 %26, %2 - br i1 %.not, label %27, label %44 +27: ; preds = %.backedge + %28 = load atomic i64, ptr %12 seq_cst, align 8 + %.not = icmp eq i64 %28, %2 + br i1 %.not, label %29, label %46 -27: ; preds = %25 +29: ; preds = %27 call void @llvm.lifetime.start.p0(ptr nonnull %9) call void @llvm.lifetime.start.p0(ptr nonnull %6) - %28 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 - store ptr %28, ptr %6, align 8 - %29 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17h49c62cd36d56b626E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) - %30 = extractvalue { ptr, ptr } %29, 0 - %31 = extractvalue { ptr, ptr } %29, 1 + %30 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 + store ptr %30, ptr %6, align 8 + %31 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17h49c62cd36d56b626E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) + %32 = extractvalue { ptr, ptr } %31, 0 + %33 = extractvalue { ptr, ptr } %31, 1 call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.start.p0(ptr nonnull %5) - store ptr %30, ptr %5, align 8 + store ptr %32, ptr %5, align 8 store ptr null, ptr %14, align 8 - %.not.i.i = icmp eq ptr %31, null - br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %32 + %.not.i.i = icmp eq ptr %33, null + br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %34 -32: ; preds = %27 - %33 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17h6378a83ba566ab00E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) - to label %36 unwind label %34 +34: ; preds = %29 + %35 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17h6378a83ba566ab00E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) + to label %36 unwind label %36 -34: ; preds = %39, %32 - %35 = landingpad { ptr, i32 } +36: ; preds = %41, %34 + %37 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr176drop_in_place$LT$arc_swap..strategy..hybrid..HybridProtection$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$$GT$17hfa2a29718fe8f682E"(ptr noalias noundef align 8 dereferenceable(16) %5) #23 - to label %common.resume unwind label %40 + to label %common.resume unwind label %42 -36: ; preds = %32 - %37 = ptrtoint ptr %33 to i64 - %38 = cmpxchg ptr %31, i64 %37, i64 3 release monotonic, align 8 - %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %38, 1 - br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %39 +38: ; preds = %34 + %39 = ptrtoint ptr %35 to i64 + %40 = cmpxchg ptr %33, i64 %39, i64 3 release monotonic, align 8 + %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %40, 1 + br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit", label %41 -39: ; preds = %36 - invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17he56d8f0fcdf99576E(ptr noundef %33) - to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" unwind label %34 +41: ; preds = %38 + invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17he56d8f0fcdf99576E(ptr noundef %35) + to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" unwind label %36 -40: ; preds = %34 - %41 = landingpad { ptr, i32 } +42: ; preds = %36 + %43 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -common.resume: ; preds = %.loopexit9, %65, %34 - %common.resume.op = phi { ptr, i32 } [ %35, %34 ], [ %lpad.loopexit, %65 ], [ %lpad.loopexit, %.loopexit9 ] +common.resume: ; preds = %.loopexit9, %73, %36 + %common.resume.op = phi { ptr, i32 } [ %37, %34 ], [ %lpad.loopexit, %65 ], [ %lpad.loopexit, %.loopexit9 ] resume { ptr, i32 } %common.resume.op -"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit": ; preds = %27, %36, %39 - %42 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 +"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit": ; preds = %29, %38, %41 + %44 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 call void @llvm.lifetime.end.p0(ptr nonnull %5) - store ptr %42, ptr %9, align 8 - %43 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17h0697427cf70d9e9bE"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %9) + store ptr %44, ptr %9, align 8 + %45 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17h0697427cf70d9e9bE"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %9) to label %48 unwind label %.loopexit9 -44: ; preds = %25 - %45 = load atomic i64, ptr %1 seq_cst, align 8 - %46 = load i64, ptr %10, align 8, !noundef !3 - %47 = icmp eq i64 %45, %46 - br i1 %47, label %.loopexit, label %68 - -48: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" - %49 = ptrtoint ptr %43 to i64 - %50 = load atomic ptr, ptr %15 seq_cst, align 8 - %51 = load atomic ptr, ptr %16 seq_cst, align 8 - store atomic i64 %49, ptr %51 seq_cst, align 8 - %52 = ptrtoint ptr %51 to i64 - %53 = or disjoint i64 %52, 1 +46: ; preds = %27 + %47 = load atomic i64, ptr %1 seq_cst, align 8 + %48 = load i64, ptr %10, align 8, !noundef !3 + %49 = icmp eq i64 %47, %48 + br i1 %49, label %.loopexit, label %76 + +50: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17hf7bd4b393d731f3aE.exit" + %51 = ptrtoint ptr %45 to i64 + %52 = load atomic ptr, ptr %15 seq_cst, align 8 + %53 = load atomic ptr, ptr %16 seq_cst, align 8 + store atomic i64 %51, ptr %53 seq_cst, align 8 + %54 = ptrtoint ptr %53 to i64 + %53 = or disjoint i64 %54, 1 %54 = load i64, ptr %10, align 8, !noundef !3 %55 = cmpxchg ptr %1, i64 %54, i64 %53 seq_cst seq_cst, align 8 %.sroa.18.0.in.i = extractvalue { i64, i1 } %55, 1 br i1 %.sroa.18.0.in.i, label %61, label %56 -56: ; preds = %48 +56: ; preds = %48 %.sroa.01.0.i = extractvalue { i64, i1 } %55, 0 store i64 %.sroa.01.0.i, ptr %10, align 8 call void @llvm.experimental.noalias.scope.decl(metadata !278) call void @llvm.experimental.noalias.scope.decl(metadata !281) - %57 = load ptr, ptr %9, align 8, !alias.scope !284, !nonnull !3, !noundef !3 - %58 = atomicrmw sub ptr %57, i64 1 release, align 8, !noalias !284 - %59 = icmp eq i64 %58, 1 - br i1 %59, label %60, label %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" + %63 = load ptr, ptr %9, align 8, !alias.scope !284, !nonnull !3, !noundef !3 + %64 = atomicrmw sub ptr %63, i64 1 release, align 8, !noalias !284 + %65 = icmp eq i64 %64, 1 + br i1 %65, label %66, label %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" -60: ; preds = %56 +66: ; preds = %56 fence acquire call void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17haef3ab0c4601cc40E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) br label %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" -"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit": ; preds = %56, %60 +"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit": ; preds = %56, %66 call void @llvm.lifetime.end.p0(ptr nonnull %9) %.pr = load i64, ptr %10, align 8 br label %.backedge.backedge -.backedge.backedge: ; preds = %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit", %68 - %.be = phi i64 [ %45, %68 ], [ %.pr, %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" ] +.backedge.backedge: ; preds = %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit", %76 + %.be = phi i64 [ %47, %68 ], [ %.pr, %"_ZN4core3ptr124drop_in_place$LT$alloc..sync..Arc$LT$alloc..collections..btree..set..BTreeSet$LT$pingora_load_balancing..Backend$GT$$GT$$GT$17h420a8e38ce4e3b45E.exit" ] br label %.backedge -61: ; preds = %48 - store atomic ptr %50, ptr %16 seq_cst, align 8 +67: ; preds = %48 + store atomic ptr %52, ptr %16 seq_cst, align 8 call void @llvm.lifetime.end.p0(ptr nonnull %9) br label %.loopexit @@ -6790,24 +6790,24 @@ common.resume: ; preds = %.loopexit9, %65, %3 cleanup call void @llvm.experimental.noalias.scope.decl(metadata !285) call void @llvm.experimental.noalias.scope.decl(metadata !288) - %62 = load ptr, ptr %9, align 8, !alias.scope !291, !nonnull !3, !noundef !3 - %63 = atomicrmw sub ptr %62, i64 1 release, align 8, !noalias !291 - %64 = icmp eq i64 %63, 1 - br i1 %64, label %65, label %common.resume + %70 = load ptr, ptr %9, align 8, !alias.scope !291, !nonnull !3, !noundef !3 + %71 = atomicrmw sub ptr %70, i64 1 release, align 8, !noalias !291 + %72 = icmp eq i64 %71, 1 + br i1 %72, label %73, label %common.resume -65: ; preds = %.loopexit9 +73: ; preds = %.loopexit9 fence acquire invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17haef3ab0c4601cc40E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) - to label %common.resume unwind label %66 + to label %common.resume unwind label %74 -66: ; preds = %65 - %67 = landingpad { ptr, i32 } +74: ; preds = %73 + %75 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -68: ; preds = %44 - store i64 %45, ptr %10, align 8 +76: ; preds = %46 + store i64 %47, ptr %10, align 8 br label %.backedge.backedge } @@ -6825,151 +6825,151 @@ define hidden void @_ZN8arc_swap4debt7helping5Slots4help17h87e00bf7e6d26d9fE(ptr %12 = getelementptr inbounds nuw i8, ptr %1, i64 16 %13 = getelementptr inbounds nuw i8, ptr %3, i64 8 %.val = load ptr, ptr %13, align 8, !nonnull !3, !align !38 - %14 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %15 = getelementptr inbounds nuw i8, ptr %5, i64 8 %15 = getelementptr inbounds nuw i8, ptr %1, i64 32 %16 = getelementptr inbounds nuw i8, ptr %0, i64 32 br label %.backedge .backedge: ; preds = %.backedge.backedge, %4 - %17 = phi i64 [ %11, %4 ], [ %.be, %.backedge.backedge ] - %18 = and i64 %17, 3 - switch i64 %18, label %default.unreachable31 [ - i64 0, label %23 + %19 = phi i64 [ %11, %4 ], [ %.be, %.backedge.backedge ] + %20 = and i64 %19, 3 + switch i64 %20, label %default.unreachable31 [ + i64 0, label %25 i64 1, label %.loopexit - i64 2, label %25 + i64 2, label %27 i64 3, label %.loopexit8 ], !prof !277 default.unreachable31: ; preds = %.backedge unreachable -.loopexit8: ; preds = %.backedge, %23 +.loopexit8: ; preds = %.backedge, %25 call void @llvm.lifetime.start.p0(ptr nonnull %8) call void @llvm.lifetime.start.p0(ptr nonnull %7) store ptr %10, ptr %7, align 8 %.sroa.44.0..sroa_idx = getelementptr inbounds nuw i8, ptr %7, i64 8 store ptr @"_ZN4core3fmt3num55_$LT$impl$u20$core..fmt..UpperHex$u20$for$u20$usize$GT$3fmt17hdee01be989c5eb83E", ptr %.sroa.44.0..sroa_idx, align 8 store ptr @anon.9683d7273f0e2da39fab36790461676f.144, ptr %8, align 8 - %19 = getelementptr inbounds nuw i8, ptr %8, i64 8 - store i64 1, ptr %19, align 8 - %20 = getelementptr inbounds nuw i8, ptr %8, i64 32 - store ptr null, ptr %20, align 8 - %21 = getelementptr inbounds nuw i8, ptr %8, i64 16 - store ptr %7, ptr %21, align 8 - %22 = getelementptr inbounds nuw i8, ptr %8, i64 24 - store i64 1, ptr %22, align 8 + %21 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store i64 1, ptr %21, align 8 + %22 = getelementptr inbounds nuw i8, ptr %8, i64 32 + store ptr null, ptr %22, align 8 + %23 = getelementptr inbounds nuw i8, ptr %8, i64 16 + store ptr %7, ptr %23, align 8 + %24 = getelementptr inbounds nuw i8, ptr %8, i64 24 + store i64 1, ptr %24, align 8 call void @_ZN4core9panicking9panic_fmt17h8d16370d7cdeaf7bE(ptr noalias noundef nonnull align 8 captures(none) dereferenceable(48) %8, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.9683d7273f0e2da39fab36790461676f.145) #21 unreachable -23: ; preds = %.backedge - %24 = icmp eq i64 %17, 0 - br i1 %24, label %.loopexit, label %.loopexit8, !prof !12 +25: ; preds = %.backedge + %26 = icmp eq i64 %19, 0 + br i1 %26, label %.loopexit, label %.loopexit8, !prof !12 -.loopexit: ; preds = %44, %.backedge, %23, %61 +.loopexit: ; preds = %46, %.backedge, %25, %67 call void @llvm.lifetime.end.p0(ptr nonnull %10) ret void -25: ; preds = %.backedge - %26 = load atomic i64, ptr %12 seq_cst, align 8 - %.not = icmp eq i64 %26, %2 - br i1 %.not, label %27, label %44 +27: ; preds = %.backedge + %28 = load atomic i64, ptr %12 seq_cst, align 8 + %.not = icmp eq i64 %28, %2 + br i1 %.not, label %29, label %46 -27: ; preds = %25 +29: ; preds = %27 call void @llvm.lifetime.start.p0(ptr nonnull %9) call void @llvm.lifetime.start.p0(ptr nonnull %6) - %28 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 - store ptr %28, ptr %6, align 8 - %29 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17hb480e4226cf77e95E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) - %30 = extractvalue { ptr, ptr } %29, 0 - %31 = extractvalue { ptr, ptr } %29, 1 + %30 = load ptr, ptr %.val, align 8, !nonnull !3, !align !38, !noundef !3 + store ptr %30, ptr %6, align 8 + %31 = call { ptr, ptr } @_ZN8arc_swap4debt4list9LocalNode4with17hb480e4226cf77e95E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %6) + %32 = extractvalue { ptr, ptr } %31, 0 + %33 = extractvalue { ptr, ptr } %31, 1 call void @llvm.lifetime.end.p0(ptr nonnull %6) call void @llvm.lifetime.start.p0(ptr nonnull %5) - store ptr %30, ptr %5, align 8 + store ptr %32, ptr %5, align 8 store ptr null, ptr %14, align 8 - %.not.i.i = icmp eq ptr %31, null - br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %32 + %.not.i.i = icmp eq ptr %33, null + br i1 %.not.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %34 -32: ; preds = %27 - %33 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17hdf9c7a12f5206704E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) - to label %36 unwind label %34 +34: ; preds = %29 + %35 = invoke noundef ptr @_ZN8arc_swap7ref_cnt6RefCnt3inc17hdf9c7a12f5206704E(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %5) + to label %36 unwind label %36 -34: ; preds = %39, %32 - %35 = landingpad { ptr, i32 } +36: ; preds = %41, %34 + %37 = landingpad { ptr, i32 } cleanup invoke fastcc void @"_ZN4core3ptr146drop_in_place$LT$arc_swap..strategy..hybrid..HybridProtection$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$$GT$17h3693ea827e1d0e74E"(ptr noalias noundef align 8 dereferenceable(16) %5) #23 - to label %common.resume unwind label %40 + to label %common.resume unwind label %42 -36: ; preds = %32 - %37 = ptrtoint ptr %33 to i64 - %38 = cmpxchg ptr %31, i64 %37, i64 3 release monotonic, align 8 - %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %38, 1 - br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %39 +38: ; preds = %34 + %39 = ptrtoint ptr %35 to i64 + %40 = cmpxchg ptr %33, i64 %39, i64 3 release monotonic, align 8 + %.sroa.18.0.in.i.i.i = extractvalue { i64, i1 } %40, 1 + br i1 %.sroa.18.0.in.i.i.i, label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit", label %41 -39: ; preds = %36 - invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17hddec74f9b7fd83fbE(ptr noundef %33) - to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" unwind label %34 +41: ; preds = %38 + invoke void @_ZN8arc_swap7ref_cnt6RefCnt3dec17hddec74f9b7fd83fbE(ptr noundef %35) + to label %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" unwind label %36 -40: ; preds = %34 - %41 = landingpad { ptr, i32 } +42: ; preds = %36 + %43 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -common.resume: ; preds = %.loopexit9, %65, %34 - %common.resume.op = phi { ptr, i32 } [ %35, %34 ], [ %lpad.loopexit, %65 ], [ %lpad.loopexit, %.loopexit9 ] +common.resume: ; preds = %.loopexit9, %73, %36 + %common.resume.op = phi { ptr, i32 } [ %37, %34 ], [ %lpad.loopexit, %65 ], [ %lpad.loopexit, %.loopexit9 ] resume { ptr, i32 } %common.resume.op -"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit": ; preds = %27, %36, %39 - %42 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 +"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit": ; preds = %29, %38, %41 + %44 = load ptr, ptr %5, align 8, !nonnull !3, !noundef !3 call void @llvm.lifetime.end.p0(ptr nonnull %5) - store ptr %42, ptr %9, align 8 - %43 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17hcb80942698e02222E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %9) + store ptr %44, ptr %9, align 8 + %45 = invoke noundef ptr @"_ZN71_$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$arc_swap..ref_cnt..RefCnt$GT$6as_ptr17hcb80942698e02222E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %9) to label %48 unwind label %.loopexit9 -44: ; preds = %25 - %45 = load atomic i64, ptr %1 seq_cst, align 8 - %46 = load i64, ptr %10, align 8, !noundef !3 - %47 = icmp eq i64 %45, %46 - br i1 %47, label %.loopexit, label %68 - -48: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" - %49 = ptrtoint ptr %43 to i64 - %50 = load atomic ptr, ptr %15 seq_cst, align 8 - %51 = load atomic ptr, ptr %16 seq_cst, align 8 - store atomic i64 %49, ptr %51 seq_cst, align 8 - %52 = ptrtoint ptr %51 to i64 - %53 = or disjoint i64 %52, 1 +46: ; preds = %27 + %47 = load atomic i64, ptr %1 seq_cst, align 8 + %48 = load i64, ptr %10, align 8, !noundef !3 + %49 = icmp eq i64 %47, %48 + br i1 %49, label %.loopexit, label %76 + +50: ; preds = %"_ZN124_$LT$arc_swap..strategy..hybrid..HybridStrategy$LT$Cfg$GT$$u20$as$u20$arc_swap..strategy..sealed..InnerStrategy$LT$T$GT$$GT$16wait_for_readers28_$u7b$$u7b$closure$u7d$$u7d$17h720e2579c38d4928E.exit" + %51 = ptrtoint ptr %45 to i64 + %52 = load atomic ptr, ptr %15 seq_cst, align 8 + %53 = load atomic ptr, ptr %16 seq_cst, align 8 + store atomic i64 %51, ptr %53 seq_cst, align 8 + %54 = ptrtoint ptr %53 to i64 + %53 = or disjoint i64 %54, 1 %54 = load i64, ptr %10, align 8, !noundef !3 %55 = cmpxchg ptr %1, i64 %54, i64 %53 seq_cst seq_cst, align 8 %.sroa.18.0.in.i = extractvalue { i64, i1 } %55, 1 br i1 %.sroa.18.0.in.i, label %61, label %56 -56: ; preds = %48 +56: ; preds = %48 %.sroa.01.0.i = extractvalue { i64, i1 } %55, 0 store i64 %.sroa.01.0.i, ptr %10, align 8 call void @llvm.experimental.noalias.scope.decl(metadata !292) call void @llvm.experimental.noalias.scope.decl(metadata !295) - %57 = load ptr, ptr %9, align 8, !alias.scope !298, !nonnull !3, !noundef !3 - %58 = atomicrmw sub ptr %57, i64 1 release, align 8, !noalias !298 - %59 = icmp eq i64 %58, 1 - br i1 %59, label %60, label %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" + %63 = load ptr, ptr %9, align 8, !alias.scope !298, !nonnull !3, !noundef !3 + %64 = atomicrmw sub ptr %63, i64 1 release, align 8, !noalias !298 + %65 = icmp eq i64 %64, 1 + br i1 %65, label %66, label %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" -60: ; preds = %56 +66: ; preds = %56 fence acquire call void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h21d657e7e498c192E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) br label %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" -"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit": ; preds = %56, %60 +"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit": ; preds = %56, %66 call void @llvm.lifetime.end.p0(ptr nonnull %9) %.pr = load i64, ptr %10, align 8 br label %.backedge.backedge -.backedge.backedge: ; preds = %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit", %68 - %.be = phi i64 [ %45, %68 ], [ %.pr, %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" ] +.backedge.backedge: ; preds = %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit", %76 + %.be = phi i64 [ %47, %68 ], [ %.pr, %"_ZN4core3ptr94drop_in_place$LT$alloc..sync..Arc$LT$pingora_load_balancing..health_check..HealthInner$GT$$GT$17hec6ba6d498df6c8cE.exit" ] br label %.backedge -61: ; preds = %48 - store atomic ptr %50, ptr %16 seq_cst, align 8 +67: ; preds = %48 + store atomic ptr %52, ptr %16 seq_cst, align 8 call void @llvm.lifetime.end.p0(ptr nonnull %9) br label %.loopexit @@ -6978,24 +6978,24 @@ common.resume: ; preds = %.loopexit9, %65, %3 cleanup call void @llvm.experimental.noalias.scope.decl(metadata !299) call void @llvm.experimental.noalias.scope.decl(metadata !302) - %62 = load ptr, ptr %9, align 8, !alias.scope !305, !nonnull !3, !noundef !3 - %63 = atomicrmw sub ptr %62, i64 1 release, align 8, !noalias !305 - %64 = icmp eq i64 %63, 1 - br i1 %64, label %65, label %common.resume + %70 = load ptr, ptr %9, align 8, !alias.scope !305, !nonnull !3, !noundef !3 + %71 = atomicrmw sub ptr %70, i64 1 release, align 8, !noalias !305 + %72 = icmp eq i64 %71, 1 + br i1 %72, label %73, label %common.resume -65: ; preds = %.loopexit9 +73: ; preds = %.loopexit9 fence acquire invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h21d657e7e498c192E"(ptr noalias noundef nonnull align 8 dereferenceable(8) %9) - to label %common.resume unwind label %66 + to label %common.resume unwind label %74 -66: ; preds = %65 - %67 = landingpad { ptr, i32 } +74: ; preds = %73 + %75 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hccd47ddd364deb23E() #22 unreachable -68: ; preds = %44 - store i64 %45, ptr %10, align 8 +76: ; preds = %46 + store i64 %47, ptr %10, align 8 br label %.backedge.backedge } diff --git a/bench/postgres/optimized/jsonfuncs.ll b/bench/postgres/optimized/jsonfuncs.ll index 50b41950fa8..f9a0796d771 100644 --- a/bench/postgres/optimized/jsonfuncs.ll +++ b/bench/postgres/optimized/jsonfuncs.ll @@ -9312,17 +9312,17 @@ define internal fastcc ptr @populate_record(ptr noundef %0, ptr noundef captures 16: ; preds = %11 %17 = tail call i64 @hash_get_num_entries(ptr noundef %15) #14 %18 = icmp eq i64 %17, 0 - br i1 %18, label %154, label %25 + br i1 %18, label %157, label %25 19: ; preds = %11 %20 = icmp eq ptr %15, null - br i1 %20, label %154, label %21 + br i1 %20, label %157, label %21 21: ; preds = %19 %22 = load i32, ptr %15, align 4 %23 = and i32 %22, 268435455 %24 = icmp eq i32 %23, 0 - br i1 %24, label %154, label %25 + br i1 %24, label %157, label %25 25: ; preds = %21, %16, %6 %26 = icmp eq ptr %9, null @@ -9332,7 +9332,7 @@ define internal fastcc ptr @populate_record(ptr noundef %0, ptr noundef captures %28 = getelementptr inbounds nuw i8, ptr %9, i64 8 %29 = load i32, ptr %28, align 8 %.not101 = icmp eq i32 %29, %10 - br i1 %.not101, label %46, label %30 + br i1 %.not101, label %49, label %30 30: ; preds = %27, %25 %31 = sext i32 %10 to i64 @@ -9349,33 +9349,33 @@ define internal fastcc ptr @populate_record(ptr noundef %0, ptr noundef captures %39 = icmp ult i64 %32, 1025 br i1 %39, label %40, label %allocate_record_info.exit.sink.split -40: ; preds = %30 +43: ; preds = %30 %.not.i = icmp eq i32 %10, 0 br i1 %.not.i, label %allocate_record_info.exit, label %.lr.ph.preheader.i -.lr.ph.preheader.i: ; preds = %40 - %41 = add i64 %33, %35 - %42 = add i64 %35, 24 - %umax.i = tail call i64 @llvm.umax.i64(i64 %41, i64 %42) +.lr.ph.preheader.i: ; preds = %43 + %44 = add i64 %33, %35 + %45 = add i64 %35, 24 + %umax.i = tail call i64 @llvm.umax.i64(i64 %44, i64 %45) %reass.sub = sub i64 %umax.i, %35 - %43 = add i64 %reass.sub, -17 - %44 = and i64 %43, -8 - %45 = add i64 %44, 8 + %46 = add i64 %reass.sub, -17 + %47 = and i64 %46, -8 + %48 = add i64 %47, 8 br label %allocate_record_info.exit.sink.split allocate_record_info.exit.sink.split: ; preds = %30, %.lr.ph.preheader.i - %.sink = phi i64 [ %45, %.lr.ph.preheader.i ], [ %32, %30 ] + %.sink = phi i64 [ %48, %.lr.ph.preheader.i ], [ %32, %30 ] tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %38, i8 0, i64 %.sink, i1 false) br label %allocate_record_info.exit -allocate_record_info.exit: ; preds = %allocate_record_info.exit.sink.split, %40 +allocate_record_info.exit: ; preds = %allocate_record_info.exit.sink.split, %43 store ptr %34, ptr %1, align 8 - br label %46 + br label %49 -46: ; preds = %allocate_record_info.exit, %27 +49: ; preds = %allocate_record_info.exit, %27 %.093 = phi ptr [ %34, %allocate_record_info.exit ], [ %9, %27 ] - %47 = load i32, ptr %.093, align 8 - %48 = getelementptr inbounds nuw i8, ptr %0, i64 4 + %50 = load i32, ptr %.093, align 8 + %51 = getelementptr inbounds nuw i8, ptr %0, i64 4 %49 = load i32, ptr %48, align 4 %.not102 = icmp eq i32 %47, %49 br i1 %.not102, label %50, label %55 @@ -9388,62 +9388,62 @@ allocate_record_info.exit: ; preds = %allocate_record_inf %.not103 = icmp eq i32 %52, %54 br i1 %.not103, label %._crit_edge118, label %55 -._crit_edge118: ; preds = %50 +._crit_edge118:; preds = %50 %.pre = sext i32 %10 to i64 - br label %77 - -55: ; preds = %46, %50 - %56 = sext i32 %10 to i64 - %57 = mul nsw i64 %56, 104 - %58 = add nsw i64 %57, 16 - %59 = ptrtoint ptr %.093 to i64 - %60 = and i64 %59, 7 - %61 = icmp eq i64 %60, 0 - %62 = icmp ult i64 %58, 1025 - %or.cond = select i1 %61, i1 %62, i1 false - br i1 %or.cond, label %63, label %71 - -63: ; preds = %55 - %.not111 = icmp eq i64 %58, 0 + br label %80 + +58: ; preds = %49, %50 + %59 = sext i32 %10 to i64 + %60 = mul nsw i64 %59, 104 + %61 = add nsw i64 %60, 16 + %62 = ptrtoint ptr %.093 to i64 + %63 = and i64 %62, 7 + %64 = icmp eq i64 %63, 0 + %65 = icmp ult i64 %61, 1025 + %or.cond = select i1 %64, i1 %65, i1 false + br i1 %or.cond, label %66, label %74 + +66: ; preds = %58 + %.not111 = icmp eq i64 %61, 0 br i1 %.not111, label %.loopexit105, label %.lr.ph.preheader -.lr.ph.preheader: ; preds = %63 - %64 = add i64 %57, %59 - %65 = add i64 %64, 16 - %66 = add i64 %59, 8 - %umax = tail call i64 @llvm.umax.i64(i64 %65, i64 %66) - %67 = xor i64 %59, -1 - %68 = add i64 %umax, %67 - %69 = and i64 %68, -8 - %70 = add i64 %69, 8 - tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %.093, i8 0, i64 %70, i1 false) +.lr.ph.preheader: ; preds = %66 + %67 = add i64 %60, %62 + %68 = add i64 %67, 16 + %69 = add i64 %62, 8 + %umax = tail call i64 @llvm.umax.i64(i64 %68, i64 %69) + %70 = xor i64 %62, -1 + %71 = add i64 %umax, %70 + %72 = and i64 %71, -8 + %73 = add i64 %72, 8 + tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %.093, i8 0, i64 %73, i1 false) br label %.loopexit105 -71: ; preds = %55 - tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %.093, i8 0, i64 %58, i1 false) +74: ; preds = %58 + tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %.093, i8 0, i64 %61, i1 false) br label %.loopexit105 -.loopexit105: ; preds = %.lr.ph.preheader, %63, %71 - %72 = load i32, ptr %48, align 4 - store i32 %72, ptr %.093, align 8 - %73 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %74 = load i32, ptr %73, align 8 - %75 = getelementptr inbounds nuw i8, ptr %.093, i64 4 - store i32 %74, ptr %75, align 4 - %76 = getelementptr inbounds nuw i8, ptr %.093, i64 8 - store i32 %10, ptr %76, align 8 - br label %77 - -77: ; preds = %._crit_edge118, %.loopexit105 - %.pre-phi = phi i64 [ %.pre, %._crit_edge118 ], [ %56, %.loopexit105 ] - %78 = shl nsw i64 %.pre-phi, 3 - %79 = tail call ptr @palloc(i64 noundef %78) #14 - %80 = tail call ptr @palloc(i64 noundef %.pre-phi) #14 +.loopexit105: ; preds = %.lr.ph.preheader, %66, %74 + %75 = load i32, ptr %51, align 4 + store i32 %75, ptr %.093, align 8 + %76 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %77 = load i32, ptr %76, align 8 + %78 = getelementptr inbounds nuw i8, ptr %.093, i64 4 + store i32 %77, ptr %78, align 4 + %79 = getelementptr inbounds nuw i8, ptr %.093, i64 8 + store i32 %10, ptr %79, align 8 + br label %80 + +80: ; preds = %._crit_edge118, %.loopexit105 + %.pre-phi = phi i64 [ %.pre, %._crit_edge118 ], [ %59, %.loopexit105 ] + %81 = shl nsw i64 %.pre-phi, 3 + %82 = tail call ptr @palloc(i64 noundef %81) #14 + %83 = tail call ptr @palloc(i64 noundef %.pre-phi) #14 br i1 %.not, label %.preheader, label %.loopexit -.preheader: ; preds = %77 - %81 = icmp sgt i32 %10, 0 - br i1 %81, label %.lr.ph108.preheader, label %._crit_edge +.preheader: ; preds = %80 + %84 = icmp sgt i32 %10, 0 + br i1 %84, label %.lr.ph108.preheader, label %._crit_edge .lr.ph108.preheader: ; preds = %.preheader %wide.trip.count = zext nneg i32 %10 to i64 @@ -9451,160 +9451,160 @@ allocate_record_info.exit: ; preds = %allocate_record_inf .lr.ph108: ; preds = %.lr.ph108.preheader, %.lr.ph108 %indvars.iv = phi i64 [ 0, %.lr.ph108.preheader ], [ %indvars.iv.next, %.lr.ph108 ] - %82 = getelementptr inbounds nuw i64, ptr %79, i64 %indvars.iv - store i64 0, ptr %82, align 8 - %83 = getelementptr inbounds nuw i8, ptr %80, i64 %indvars.iv - store i8 1, ptr %83, align 1 + %85 = getelementptr inbounds nuw i64, ptr %82, i64 %indvars.iv + store i64 0, ptr %85, align 8 + %86 = getelementptr inbounds nuw i8, ptr %83, i64 %indvars.iv + store i8 1, ptr %86, align 1 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count br i1 %exitcond.not, label %.lr.ph110, label %.lr.ph108, !llvm.loop !38 -.loopexit: ; preds = %77 +.loopexit: ; preds = %80 call void @llvm.lifetime.start.p0(ptr nonnull %7) %.val = load i32, ptr %2, align 4 - %84 = lshr i32 %.val, 2 - store i32 %84, ptr %7, align 8 - %85 = getelementptr inbounds nuw i8, ptr %7, i64 4 - store i16 -1, ptr %85, align 4 - %86 = getelementptr inbounds nuw i8, ptr %7, i64 6 - store i16 -1, ptr %86, align 2 - %87 = getelementptr inbounds nuw i8, ptr %7, i64 8 - store i16 0, ptr %87, align 8 - %88 = getelementptr inbounds nuw i8, ptr %7, i64 12 - store i32 0, ptr %88, align 4 - %89 = getelementptr inbounds nuw i8, ptr %7, i64 16 - store ptr %2, ptr %89, align 8 - call void @heap_deform_tuple(ptr noundef nonnull %7, ptr noundef nonnull %0, ptr noundef %79, ptr noundef %80) #14 + %87 = lshr i32 %.val, 2 + store i32 %87, ptr %7, align 8 + %88 = getelementptr inbounds nuw i8, ptr %7, i64 4 + store i16 -1, ptr %88, align 4 + %89 = getelementptr inbounds nuw i8, ptr %7, i64 6 + store i16 -1, ptr %89, align 2 + %90 = getelementptr inbounds nuw i8, ptr %7, i64 8 + store i16 0, ptr %90, align 8 + %91 = getelementptr inbounds nuw i8, ptr %7, i64 12 + store i32 0, ptr %91, align 4 + %92 = getelementptr inbounds nuw i8, ptr %7, i64 16 + store ptr %2, ptr %92, align 8 + call void @heap_deform_tuple(ptr noundef nonnull %7, ptr noundef nonnull %0, ptr noundef %82, ptr noundef %83) #14 call void @llvm.lifetime.end.p0(ptr nonnull %7) - %90 = icmp sgt i32 %10, 0 - br i1 %90, label %.lr.ph110, label %._crit_edge + %93 = icmp sgt i32 %10, 0 + br i1 %93, label %.lr.ph110, label %._crit_edge .lr.ph110: ; preds = %.lr.ph108, %.loopexit - %91 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %92 = getelementptr inbounds nuw i8, ptr %8, i64 8 - %93 = getelementptr inbounds nuw i8, ptr %8, i64 20 - %94 = getelementptr inbounds nuw i8, ptr %8, i64 16 - %95 = getelementptr inbounds nuw i8, ptr %.093, i64 16 + %94 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %95 = getelementptr inbounds nuw i8, ptr %8, i64 8 + %96 = getelementptr inbounds nuw i8, ptr %8, i64 20 + %97 = getelementptr inbounds nuw i8, ptr %8, i64 16 + %98 = getelementptr inbounds nuw i8, ptr %.093, i64 16 %wide.trip.count116 = zext nneg i32 %10 to i64 - br label %96 + br label %99 -96: ; preds = %.lr.ph110, %150 +99: ; preds = %.lr.ph110, %153 %indvars.iv113 = phi i64 [ 0, %.lr.ph110 ], [ %indvars.iv.next114, %150 ] - %97 = load i32, ptr %0, align 8 - %98 = sext i32 %97 to i64 - %99 = shl nsw i64 %98, 4 - %100 = getelementptr i8, ptr %0, i64 %99 - %101 = getelementptr i8, ptr %100, i64 24 - %102 = getelementptr inbounds nuw %struct.FormData_pg_attribute, ptr %101, i64 %indvars.iv113 - %103 = getelementptr inbounds nuw i8, ptr %102, i64 4 + %100 = load i32, ptr %0, align 8 + %101 = sext i32 %100 to i64 + %102 = shl nsw i64 %101, 4 + %103 = getelementptr i8, ptr %0, i64 %102 + %104 = getelementptr i8, ptr %103, i64 24 + %105 = getelementptr inbounds nuw %struct.FormData_pg_attribute, ptr %104, i64 %indvars.iv113 + %106 = getelementptr inbounds nuw i8, ptr %105, i64 4 call void @llvm.lifetime.start.p0(ptr nonnull %8) call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %8, i8 0, i64 24, i1 false) - %104 = getelementptr inbounds nuw i8, ptr %102, i64 91 - %105 = load i8, ptr %104, align 1, !range !4, !noundef !5 - %106 = trunc nuw i8 %105 to i1 - br i1 %106, label %107, label %109 - -107: ; preds = %96 - %108 = getelementptr inbounds nuw i8, ptr %80, i64 %indvars.iv113 - store i8 1, ptr %108, align 1 - br label %150 - -109: ; preds = %96 - %110 = load i8, ptr %4, align 8, !range !4, !noundef !5 - %111 = trunc nuw i8 %110 to i1 - store i8 %110, ptr %8, align 8 - %112 = load ptr, ptr %91, align 8 - br i1 %111, label %113, label %126 - -113: ; preds = %109 - %114 = call ptr @hash_search(ptr noundef %112, ptr noundef nonnull %103, i32 noundef 0, ptr noundef null) #14 - %115 = icmp ne ptr %114, null - br i1 %115, label %116, label %.thread.i - -.thread.i: ; preds = %113 - store i32 11, ptr %93, align 4 - br label %123 - -116: ; preds = %113 - %117 = getelementptr inbounds nuw i8, ptr %114, i64 72 - %118 = load i32, ptr %117, align 8 - store i32 %118, ptr %93, align 4 - %119 = icmp eq i32 %118, 11 - br i1 %119, label %123, label %120 - -120: ; preds = %116 - %121 = getelementptr inbounds nuw i8, ptr %114, i64 64 - %122 = load ptr, ptr %121, align 8 - br label %123 - -123: ; preds = %120, %116, %.thread.i - %124 = phi ptr [ %122, %120 ], [ null, %116 ], [ null, %.thread.i ] - store ptr %124, ptr %92, align 8 - %.not23.i = icmp ne ptr %124, null - %125 = sext i1 %.not23.i to i32 - store i32 %125, ptr %94, align 8 + %107 = getelementptr inbounds nuw i8, ptr %105, i64 91 + %108 = load i8, ptr %107, align 1, !range !4, !noundef !5 + %109 = trunc nuw i8 %108 to i1 + br i1 %109, label %110, label %112 + +110: ; preds = %99 + %111 = getelementptr inbounds nuw i8, ptr %83, i64 %indvars.iv113 + store i8 1, ptr %111, align 1 + br label %153 + +112: ; preds = %99 + %113 = load i8, ptr %4, align 8, !range !4, !noundef !5 + %114 = trunc nuw i8 %113 to i1 + store i8 %113, ptr %8, align 8 + %115 = load ptr, ptr %94, align 8 + br i1 %114, label %116, label %129 + +116: ; preds = %112 + %117 = call ptr @hash_search(ptr noundef %115, ptr noundef nonnull %106, i32 noundef 0, ptr noundef null) #14 + %118 = icmp ne ptr %117, null + br i1 %118, label %119, label %.thread.i + +.thread.i: ; preds = %116 + store i32 11, ptr %96, align 4 + br label %126 + +119: ; preds = %116 + %120 = getelementptr inbounds nuw i8, ptr %117, i64 72 + %121 = load i32, ptr %120, align 8 + store i32 %121, ptr %96, align 4 + %122 = icmp eq i32 %121, 11 + br i1 %122, label %126, label %123 + +123: ; preds = %119 + %124 = getelementptr inbounds nuw i8, ptr %117, i64 64 + %125 = load ptr, ptr %124, align 8 + br label %126 + +126: ; preds = %123, %119, %.thread.i + %127 = phi ptr [ %125, %120 ], [ null, %116 ], [ null, %.thread.i ] + store ptr %127, ptr %95, align 8 + %.not23.i = icmp ne ptr %127, null + %128 = sext i1 %.not23.i to i32 + store i32 %128, ptr %97, align 8 br label %JsObjectGetField.exit -126: ; preds = %109 - %.not.i104 = icmp eq ptr %112, null - br i1 %.not.i104, label %131, label %127 +129: ; preds = %112 + %.not.i104 = icmp eq ptr %115, null + br i1 %.not.i104, label %134, label %130 -127: ; preds = %126 - %128 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %103) #17 - %129 = trunc i64 %128 to i32 - %130 = call ptr @getKeyJsonValueFromContainer(ptr noundef nonnull %112, ptr noundef nonnull %103, i32 noundef %129, ptr noundef null) #14 - br label %131 +130: ; preds = %129 + %131 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %106) #17 + %132 = trunc i64 %131 to i32 + %133 = call ptr @getKeyJsonValueFromContainer(ptr noundef nonnull %115, ptr noundef nonnull %106, i32 noundef %132, ptr noundef null) #14 + br label %134 -131: ; preds = %127, %126 - %132 = phi ptr [ %130, %127 ], [ null, %126 ] - store ptr %132, ptr %92, align 8 - %133 = icmp ne ptr %132, null +134: ; preds = %130, %129 + %135 = phi ptr [ %133, %127 ], [ null, %126 ] + store ptr %135, ptr %95, align 8 + %136 = icmp ne ptr %135, null br label %JsObjectGetField.exit -JsObjectGetField.exit: ; preds = %123, %131 - %.0.i = phi i1 [ %115, %123 ], [ %133, %131 ] +JsObjectGetField.exit: ; preds = %126, %134 + %.0.i = phi i1 [ %118, %123 ], [ %136, %131 ] %or.cond5 = select i1 %.not, i1 true, i1 %.0.i - br i1 %or.cond5, label %134, label %150 - -134: ; preds = %JsObjectGetField.exit - %135 = getelementptr inbounds nuw %struct.ColumnIOData, ptr %95, i64 %indvars.iv113 - %136 = getelementptr inbounds nuw i8, ptr %102, i64 68 - %137 = load i32, ptr %136, align 4 - %138 = getelementptr inbounds nuw i8, ptr %102, i64 76 - %139 = load i32, ptr %138, align 4 - %140 = getelementptr inbounds nuw i8, ptr %80, i64 %indvars.iv113 - %141 = load i8, ptr %140, align 1, !range !4, !noundef !5 - %142 = trunc nuw i8 %141 to i1 - br i1 %142, label %146, label %143 - -143: ; preds = %134 - %144 = getelementptr inbounds nuw i64, ptr %79, i64 %indvars.iv113 - %145 = load i64, ptr %144, align 8 - br label %146 - -146: ; preds = %134, %143 - %147 = phi i64 [ %145, %143 ], [ 0, %134 ] - %148 = call fastcc i64 @populate_record_field(ptr noundef nonnull %135, i32 noundef %137, i32 noundef %139, ptr noundef nonnull %103, ptr noundef %3, i64 noundef %147, ptr noundef %8, ptr noundef nonnull %140, ptr noundef %5, i1 noundef zeroext false) - %149 = getelementptr inbounds nuw i64, ptr %79, i64 %indvars.iv113 - store i64 %148, ptr %149, align 8 - br label %150 - -150: ; preds = %JsObjectGetField.exit, %146, %107 + br i1 %or.cond5, label %137, label %153 + +137: ; preds = %JsObjectGetField.exit + %138 = getelementptr inbounds nuw %struct.ColumnIOData, ptr %98, i64 %indvars.iv113 + %139 = getelementptr inbounds nuw i8, ptr %105, i64 68 + %140 = load i32, ptr %139, align 4 + %141 = getelementptr inbounds nuw i8, ptr %105, i64 76 + %142 = load i32, ptr %141, align 4 + %143 = getelementptr inbounds nuw i8, ptr %83, i64 %indvars.iv113 + %144 = load i8, ptr %143, align 1, !range !4, !noundef !5 + %145 = trunc nuw i8 %144 to i1 + br i1 %145, label %149, label %146 + +146: ; preds = %137 + %147 = getelementptr inbounds nuw i64, ptr %82, i64 %indvars.iv113 + %148 = load i64, ptr %147, align 8 + br label %149 + +149: ; preds = %137, %146 + %150 = phi i64 [ %148, %143 ], [ 0, %134 ] + %151 = call fastcc i64 @populate_record_field(ptr noundef nonnull %138, i32 noundef %140, i32 noundef %142, ptr noundef nonnull %106, ptr noundef %3, i64 noundef %150, ptr noundef %8, ptr noundef nonnull %143, ptr noundef %5, i1 noundef zeroext false) + %152 = getelementptr inbounds nuw i64, ptr %82, i64 %indvars.iv113 + store i64 %151, ptr %152, align 8 + br label %153 + +153: ; preds = %JsObjectGetField.exit, %149, %110 call void @llvm.lifetime.end.p0(ptr nonnull %8) %indvars.iv.next114 = add nuw nsw i64 %indvars.iv113, 1 %exitcond117.not = icmp eq i64 %indvars.iv.next114, %wide.trip.count116 - br i1 %exitcond117.not, label %._crit_edge, label %96, !llvm.loop !39 - -._crit_edge: ; preds = %150, %.preheader, %.loopexit - %151 = call ptr @heap_form_tuple(ptr noundef nonnull %0, ptr noundef %79, ptr noundef %80) #14 - call void @pfree(ptr noundef %79) #14 - call void @pfree(ptr noundef %80) #14 - %152 = getelementptr inbounds nuw i8, ptr %151, i64 16 - %153 = load ptr, ptr %152, align 8 - br label %154 - -154: ; preds = %16, %19, %21, %._crit_edge - %.0 = phi ptr [ %153, %._crit_edge ], [ %2, %21 ], [ %2, %19 ], [ %2, %16 ] + br i1 %exitcond117.not, label %._crit_edge, label %99, !llvm.loop !39 + +._crit_edge: ; preds = %153, %.preheader, %.loopexit + %154 = call ptr @heap_form_tuple(ptr noundef nonnull %0, ptr noundef %82, ptr noundef %83) #14 + call void @pfree(ptr noundef %82) #14 + call void @pfree(ptr noundef %83) #14 + %155 = getelementptr inbounds nuw i8, ptr %154, i64 16 + %156 = load ptr, ptr %155, align 8 + br label %157 + +157: ; preds = %16, %19, %21, %._crit_edge + %.0 = phi ptr [ %156, %._crit_edge ], [ %2, %21 ], [ %2, %19 ], [ %2, %16 ] ret ptr %.0 } diff --git a/bench/ruby/optimized/compile.ll b/bench/ruby/optimized/compile.ll index a4231e0415d..20c1059f3a1 100644 --- a/bench/ruby/optimized/compile.ll +++ b/bench/ruby/optimized/compile.ll @@ -60366,8 +60366,8 @@ define internal fastcc range(i32 0, 2) i32 @compile_massign_lhs(ptr noundef %0, %14 = and i32 %13, 127 switch i32 %14, label %iseq_compile_each.exit285 [ i32 103, label %iseq_compile_each.exit - i32 24, label %303 - i32 29, label %331 + i32 24, label %305 + i32 29, label %333 ] iseq_compile_each.exit: ; preds = %7 @@ -60849,7 +60849,7 @@ ci_flag_set.exit: ; preds = %236, %vm_ci_new_.ex %243 = load i32, ptr %242, align 8, !tbaa !259 br i1 %.not16117, label %244, label %ELEM_INSERT_PREV.exit231 -244: ; preds = %ci_flag_set.exit +244:; preds = %ci_flag_set.exit %245 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 42, i32 noundef 0, ptr noundef null) %246 = load ptr, ptr %40, align 8, !tbaa !32 %247 = getelementptr inbounds nuw i8, ptr %245, i64 16 @@ -60861,408 +60861,408 @@ ci_flag_set.exit: ; preds = %236, %vm_ci_new_.ex %.not.i226 = icmp eq ptr %249, null br i1 %.not.i226, label %ELEM_INSERT_PREV.exit, label %250 -250: ; preds = %244 +250:; preds = %244 %251 = getelementptr inbounds nuw i8, ptr %249, i64 8 store ptr %245, ptr %251, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit ELEM_INSERT_PREV.exit: ; preds = %244, %250 - %252 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 35, i32 noundef 1, i64 noundef 20) - %253 = load ptr, ptr %40, align 8, !tbaa !32 - %254 = getelementptr inbounds nuw i8, ptr %252, i64 16 - store ptr %253, ptr %254, align 8, !tbaa !32 - %255 = getelementptr inbounds nuw i8, ptr %252, i64 8 - store ptr %.0140, ptr %255, align 8, !tbaa !33 - store ptr %252, ptr %40, align 8, !tbaa !32 - %256 = load ptr, ptr %254, align 8, !tbaa !32 - %.not.i227 = icmp eq ptr %256, null - br i1 %.not.i227, label %ELEM_INSERT_PREV.exit228, label %257 - -257: ; preds = %ELEM_INSERT_PREV.exit - %258 = getelementptr inbounds nuw i8, ptr %256, i64 8 - store ptr %252, ptr %258, align 8, !tbaa !33 + %254 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 35, i32 noundef 1, i64 noundef 20) + %255 = load ptr, ptr %40, align 8, !tbaa !32 + %256 = getelementptr inbounds nuw i8, ptr %254, i64 16 + store ptr %255, ptr %256, align 8, !tbaa !32 + %257 = getelementptr inbounds nuw i8, ptr %254, i64 8 + store ptr %.0140, ptr %257, align 8, !tbaa !33 + store ptr %254, ptr %40, align 8, !tbaa !32 + %258 = load ptr, ptr %256, align 8, !tbaa !32 + %.not.i227 = icmp eq ptr %258, null + br i1 %.not.i227, label %ELEM_INSERT_PREV.exit228, label %259 + +259: ; preds = %ELEM_INSERT_PREV.exit + %260 = getelementptr inbounds nuw i8, ptr %258, i64 8 + store ptr %254, ptr %260, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit228 -ELEM_INSERT_PREV.exit228: ; preds = %ELEM_INSERT_PREV.exit, %257 - %259 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 42, i32 noundef 0, ptr noundef null) - %260 = load ptr, ptr %40, align 8, !tbaa !32 - %261 = getelementptr inbounds nuw i8, ptr %259, i64 16 - store ptr %260, ptr %261, align 8, !tbaa !32 - %262 = getelementptr inbounds nuw i8, ptr %259, i64 8 - store ptr %.0140, ptr %262, align 8, !tbaa !33 - store ptr %259, ptr %40, align 8, !tbaa !32 - %263 = load ptr, ptr %261, align 8, !tbaa !32 - %.not.i230 = icmp eq ptr %263, null - br i1 %.not.i230, label %ELEM_INSERT_PREV.exit231, label %264 - -264: ; preds = %ELEM_INSERT_PREV.exit228 - %265 = getelementptr inbounds nuw i8, ptr %263, i64 8 - store ptr %259, ptr %265, align 8, !tbaa !33 +ELEM_INSERT_PREV.exit228: ; preds = %ELEM_INSERT_PREV.exit, %259 + %261 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 42, i32 noundef 0, ptr noundef null) + %262 = load ptr, ptr %40, align 8, !tbaa !32 + %263 = getelementptr inbounds nuw i8, ptr %261, i64 16 + store ptr %262, ptr %263, align 8, !tbaa !32 + %264 = getelementptr inbounds nuw i8, ptr %261, i64 8 + store ptr %.0140, ptr %264, align 8, !tbaa !33 + store ptr %261, ptr %40, align 8, !tbaa !32 + %265 = load ptr, ptr %263, align 8, !tbaa !32 + %.not.i230 = icmp eq ptr %265, null + br i1 %.not.i230, label %ELEM_INSERT_PREV.exit231, label %266 + +266: ; preds = %ELEM_INSERT_PREV.exit228 + %267 = getelementptr inbounds nuw i8, ptr %265, i64 8 + store ptr %261, ptr %267, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit231 -ELEM_INSERT_PREV.exit231: ; preds = %264, %ELEM_INSERT_PREV.exit228, %ci_flag_set.exit - %266 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 34, i32 noundef 1, i64 noundef 3) - %267 = load ptr, ptr %40, align 8, !tbaa !32 - %268 = getelementptr inbounds nuw i8, ptr %266, i64 16 - store ptr %267, ptr %268, align 8, !tbaa !32 - %269 = getelementptr inbounds nuw i8, ptr %266, i64 8 - store ptr %.0140, ptr %269, align 8, !tbaa !33 - store ptr %266, ptr %40, align 8, !tbaa !32 - %270 = load ptr, ptr %268, align 8, !tbaa !32 - %.not.i232 = icmp eq ptr %270, null - br i1 %.not.i232, label %ELEM_INSERT_PREV.exit233, label %271 - -271: ; preds = %ELEM_INSERT_PREV.exit231 - %272 = getelementptr inbounds nuw i8, ptr %270, i64 8 - store ptr %266, ptr %272, align 8, !tbaa !33 +ELEM_INSERT_PREV.exit231: ; preds = %266, %ELEM_INSERT_PREV.exit228, %ci_flag_set.exit + %268 = tail call ptr (ptr, i32, i32, i32, i32, ...) @new_insn_body(ptr noundef %0, i32 noundef %241, i32 noundef %243, i32 noundef 34, i32 noundef 1, i64 noundef 3) + %269 = load ptr, ptr %40, align 8, !tbaa !32 + %270 = getelementptr inbounds nuw i8, ptr %268, i64 16 + store ptr %269, ptr %270, align 8, !tbaa !32 + %271 = getelementptr inbounds nuw i8, ptr %268, i64 8 + store ptr %.0140, ptr %271, align 8, !tbaa !33 + store ptr %268, ptr %40, align 8, !tbaa !32 + %272 = load ptr, ptr %270, align 8, !tbaa !32 + %.not.i232 = icmp eq ptr %272, null + br i1 %.not.i232, label %ELEM_INSERT_PREV.exit233, label %273 + +273: ; preds = %ELEM_INSERT_PREV.exit231 + %274 = getelementptr inbounds nuw i8, ptr %272, i64 8 + store ptr %268, ptr %274, align 8, !tbaa !33 br label %ELEM_INSERT_PREV.exit233 -ELEM_INSERT_PREV.exit233: ; preds = %271, %ELEM_INSERT_PREV.exit231, %vm_ci_flag.exit.thread, %vm_ci_flag.exit - br i1 %.not162, label %nd_line.exit236, label %290 +ELEM_INSERT_PREV.exit233: ; preds = %273, %ELEM_INSERT_PREV.exit231, %vm_ci_flag.exit.thread, %vm_ci_flag.exit + br i1 %.not162, label %nd_line.exit236, label %292 nd_line.exit236: ; preds = %ELEM_INSERT_PREV.exit233 - %273 = load i64, ptr %4, align 8, !tbaa !169 - %274 = lshr i64 %273, 15 - %275 = trunc i64 %274 to i32 - %276 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %277 = load i32, ptr %276, align 8, !tbaa !259 - %278 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %275, i32 noundef %277, i32 noundef 39, i32 noundef 0, ptr noundef null) - %279 = load ptr, ptr %147, align 8, !tbaa !7 - %280 = getelementptr inbounds nuw i8, ptr %278, i64 16 - store ptr %279, ptr %280, align 8, !tbaa !32 - %281 = getelementptr inbounds nuw i8, ptr %279, i64 8 - store ptr %278, ptr %281, align 8, !tbaa !33 - store ptr %278, ptr %147, align 8, !tbaa !7 + %275 = load i64, ptr %4, align 8, !tbaa !169 + %276 = lshr i64 %275, 15 + %277 = trunc i64 %276 to i32 + %278 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %279 = load i32, ptr %278, align 8, !tbaa !259 + %280 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %277, i32 noundef %279, i32 noundef 39, i32 noundef 0, ptr noundef null) + %281 = load ptr, ptr %147, align 8, !tbaa !7 + %282 = getelementptr inbounds nuw i8, ptr %280, i64 16 + store ptr %281, ptr %282, align 8, !tbaa !32 + %283 = getelementptr inbounds nuw i8, ptr %281, i64 8 + store ptr %280, ptr %283, align 8, !tbaa !33 + store ptr %280, ptr %147, align 8, !tbaa !7 br i1 %89, label %nd_line.exit244.lr.ph, label %nd_line.exit240 nd_line.exit240: ; preds = %nd_line.exit236 - %282 = load i64, ptr %4, align 8, !tbaa !169 - %283 = lshr i64 %282, 15 - %284 = trunc i64 %283 to i32 - %285 = load i32, ptr %276, align 8, !tbaa !259 - %286 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %284, i32 noundef %285, i32 noundef 39, i32 noundef 0, ptr noundef null) - %287 = load ptr, ptr %147, align 8, !tbaa !7 - %288 = getelementptr inbounds nuw i8, ptr %286, i64 16 - store ptr %287, ptr %288, align 8, !tbaa !32 - %289 = getelementptr inbounds nuw i8, ptr %287, i64 8 - store ptr %286, ptr %289, align 8, !tbaa !33 - store ptr %286, ptr %147, align 8, !tbaa !7 - br label %290 + %284 = load i64, ptr %4, align 8, !tbaa !169 + %285 = lshr i64 %284, 15 + %286 = trunc i64 %285 to i32 + %287 = load i32, ptr %278, align 8, !tbaa !259 + %288 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %286, i32 noundef %287, i32 noundef 39, i32 noundef 0, ptr noundef null) + %289 = load ptr, ptr %147, align 8, !tbaa !7 + %290 = getelementptr inbounds nuw i8, ptr %288, i64 16 + store ptr %289, ptr %290, align 8, !tbaa !32 + %291 = getelementptr inbounds nuw i8, ptr %289, i64 8 + store ptr %288, ptr %291, align 8, !tbaa !33 + store ptr %288, ptr %147, align 8, !tbaa !7 + br label %292 -290: ; preds = %nd_line.exit240, %ELEM_INSERT_PREV.exit233 - %291 = icmp ult i32 %.0.i1818, 2147483647 - br i1 %291, label %nd_line.exit244.lr.ph, label %.thread23 +292: ; preds = %nd_line.exit240, %ELEM_INSERT_PREV.exit233 + %293 = icmp ult i32 %.0.i1818, 2147483647 + br i1 %293, label %nd_line.exit244.lr.ph, label %.thread23 -nd_line.exit244.lr.ph: ; preds = %nd_line.exit236, %290 - %292 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %293 = getelementptr inbounds nuw i8, ptr %3, i64 24 +nd_line.exit244.lr.ph: ; preds = %nd_line.exit236, %292 + %294 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %295 = getelementptr inbounds nuw i8, ptr %3, i64 24 br label %nd_line.exit244 nd_line.exit244: ; preds = %nd_line.exit244.lr.ph, %nd_line.exit244 - %.014832 = phi i32 [ 0, %nd_line.exit244.lr.ph ], [ %302, %nd_line.exit244 ] - %294 = load i64, ptr %4, align 8, !tbaa !169 - %295 = lshr i64 %294, 15 - %296 = trunc i64 %295 to i32 - %297 = load i32, ptr %292, align 8, !tbaa !259 - %298 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %296, i32 noundef %297, i32 noundef 39, i32 noundef 0, ptr noundef null) - %299 = load ptr, ptr %293, align 8, !tbaa !7 - %300 = getelementptr inbounds nuw i8, ptr %298, i64 16 - store ptr %299, ptr %300, align 8, !tbaa !32 - %301 = getelementptr inbounds nuw i8, ptr %299, i64 8 - store ptr %298, ptr %301, align 8, !tbaa !33 - store ptr %298, ptr %293, align 8, !tbaa !7 - %302 = add nuw nsw i32 %.014832, 1 + %.014832 = phi i32 [ 0, %nd_line.exit244.lr.ph ], [ %304, %nd_line.exit244 ] + %296 = load i64, ptr %4, align 8, !tbaa !169 + %297 = lshr i64 %296, 15 + %298 = trunc i64 %297 to i32 + %299 = load i32, ptr %294, align 8, !tbaa !259 + %300 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %298, i32 noundef %299, i32 noundef 39, i32 noundef 0, ptr noundef null) + %301 = load ptr, ptr %295, align 8, !tbaa !7 + %302 = getelementptr inbounds nuw i8, ptr %300, i64 16 + store ptr %301, ptr %302, align 8, !tbaa !32 + %303 = getelementptr inbounds nuw i8, ptr %301, i64 8 + store ptr %300, ptr %303, align 8, !tbaa !33 + store ptr %300, ptr %295, align 8, !tbaa !7 + %304 = add nuw nsw i32 %.014832, 1 %exitcond.not = icmp eq i32 %.014832, %.0.i1818 br i1 %exitcond.not, label %.thread23, label %nd_line.exit244, !llvm.loop !1061 -303: ; preds = %7 +305: ; preds = %7 call void @llvm.lifetime.start.p0(ptr nonnull %8) - %304 = getelementptr inbounds nuw i8, ptr %8, i64 24 + %306 = getelementptr inbounds nuw i8, ptr %8, i64 24 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %8, i8 0, i64 24, i1 false) - store ptr %8, ptr %304, align 8, !tbaa !7 - %305 = getelementptr inbounds nuw i8, ptr %8, i64 8 + store ptr %8, ptr %306, align 8, !tbaa !7 + %307 = getelementptr inbounds nuw i8, ptr %8, i64 8 call void @llvm.lifetime.start.p0(ptr nonnull %9) - %306 = getelementptr inbounds nuw i8, ptr %9, i64 24 + %308 = getelementptr inbounds nuw i8, ptr %9, i64 24 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %9, i8 0, i64 24, i1 false) - store ptr %9, ptr %306, align 8, !tbaa !7 - %307 = getelementptr inbounds nuw i8, ptr %9, i64 8 - %308 = getelementptr inbounds nuw i8, ptr %5, i64 16 - %309 = load i32, ptr %308, align 8, !tbaa !935 - %310 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %311 = load i8, ptr %310, align 8, !tbaa !938, !range !65, !noundef !66 - store i8 1, ptr %310, align 8, !tbaa !938 - %312 = add i32 %6, -1 - store i32 %312, ptr %308, align 8, !tbaa !935 - %313 = call fastcc i32 @compile_massign0(ptr noundef %0, ptr noundef %1, ptr noundef %8, ptr noundef %9, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, i32 noundef 1) - %.not156 = icmp eq i32 %313, 0 - br i1 %.not156, label %APPEND_LIST.exit248, label %314 - -314: ; preds = %303 - store i32 %309, ptr %308, align 8, !tbaa !935 - store i8 %311, ptr %310, align 8, !tbaa !938 - %315 = load ptr, ptr %305, align 8, !tbaa !63 - %.not.i246 = icmp eq ptr %315, null - br i1 %.not.i246, label %APPEND_LIST.exit, label %316 - -316: ; preds = %314 - %317 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %318 = load ptr, ptr %317, align 8, !tbaa !7 - %319 = getelementptr inbounds nuw i8, ptr %318, i64 8 - store ptr %315, ptr %319, align 8, !tbaa !33 - %320 = load ptr, ptr %305, align 8, !tbaa !63 - %321 = getelementptr inbounds nuw i8, ptr %320, i64 16 - store ptr %318, ptr %321, align 8, !tbaa !32 - %322 = load ptr, ptr %304, align 8, !tbaa !7 - store ptr %322, ptr %317, align 8, !tbaa !7 + store ptr %9, ptr %308, align 8, !tbaa !7 + %309 = getelementptr inbounds nuw i8, ptr %9, i64 8 + %310 = getelementptr inbounds nuw i8, ptr %5, i64 16 + %311 = load i32, ptr %310, align 8, !tbaa !935 + %312 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %313 = load i8, ptr %312, align 8, !tbaa !938, !range !65, !noundef !66 + store i8 1, ptr %312, align 8, !tbaa !938 + %314 = add i32 %6, -1 + store i32 %314, ptr %310, align 8, !tbaa !935 + %315 = call fastcc i32 @compile_massign0(ptr noundef %0, ptr noundef %1, ptr noundef %8, ptr noundef %9, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, i32 noundef 1) + %.not156 = icmp eq i32 %315, 0 + br i1 %.not156, label %APPEND_LIST.exit248, label %316 + +316: ; preds = %305 + store i32 %311, ptr %310, align 8, !tbaa !935 + store i8 %313, ptr %312, align 8, !tbaa !938 + %317 = load ptr, ptr %307, align 8, !tbaa !63 + %.not.i246 = icmp eq ptr %317, null + br i1 %.not.i246, label %APPEND_LIST.exit, label %318 + +318: ; preds = %316 + %319 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %320 = load ptr, ptr %319, align 8, !tbaa !7 + %321 = getelementptr inbounds nuw i8, ptr %320, i64 8 + store ptr %317, ptr %321, align 8, !tbaa !33 + %322 = load ptr, ptr %307, align 8, !tbaa !63 + %323 = getelementptr inbounds nuw i8, ptr %322, i64 16 + store ptr %320, ptr %323, align 8, !tbaa !32 + %324 = load ptr, ptr %306, align 8, !tbaa !7 + store ptr %324, ptr %319, align 8, !tbaa !7 br label %APPEND_LIST.exit -APPEND_LIST.exit: ; preds = %314, %316 - %323 = load ptr, ptr %307, align 8, !tbaa !63 - %.not.i247 = icmp eq ptr %323, null - br i1 %.not.i247, label %APPEND_LIST.exit248.thread, label %324 +APPEND_LIST.exit: ; preds = %316, %318 + %325 = load ptr, ptr %309, align 8, !tbaa !63 + %.not.i247 = icmp eq ptr %325, null + br i1 %.not.i247, label %APPEND_LIST.exit248.thread, label %326 -324: ; preds = %APPEND_LIST.exit - %325 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %326 = load ptr, ptr %325, align 8, !tbaa !7 - %327 = getelementptr inbounds nuw i8, ptr %326, i64 8 - store ptr %323, ptr %327, align 8, !tbaa !33 - %328 = load ptr, ptr %307, align 8, !tbaa !63 - %329 = getelementptr inbounds nuw i8, ptr %328, i64 16 - store ptr %326, ptr %329, align 8, !tbaa !32 - %330 = load ptr, ptr %306, align 8, !tbaa !7 - store ptr %330, ptr %325, align 8, !tbaa !7 +326: ; preds = %APPEND_LIST.exit + %327 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %328 = load ptr, ptr %327, align 8, !tbaa !7 + %329 = getelementptr inbounds nuw i8, ptr %328, i64 8 + store ptr %325, ptr %329, align 8, !tbaa !33 + %330 = load ptr, ptr %309, align 8, !tbaa !63 + %331 = getelementptr inbounds nuw i8, ptr %330, i64 16 + store ptr %328, ptr %331, align 8, !tbaa !32 + %332 = load ptr, ptr %308, align 8, !tbaa !7 + store ptr %332, ptr %327, align 8, !tbaa !7 br label %APPEND_LIST.exit248.thread -APPEND_LIST.exit248.thread: ; preds = %APPEND_LIST.exit, %324 +APPEND_LIST.exit248.thread: ; preds = %APPEND_LIST.exit, %326 call void @llvm.lifetime.end.p0(ptr nonnull %9) call void @llvm.lifetime.end.p0(ptr nonnull %8) br label %.thread23 -APPEND_LIST.exit248: ; preds = %303 +APPEND_LIST.exit248: ; preds = %305 call void @llvm.lifetime.end.p0(ptr nonnull %9) call void @llvm.lifetime.end.p0(ptr nonnull %8) br label %.thread23 -331: ; preds = %7 - %332 = getelementptr inbounds nuw i8, ptr %4, i64 32 - %333 = load i64, ptr %332, align 8, !tbaa !775 - %.not = icmp eq i64 %333, 0 +333: ; preds = %7 + %334 = getelementptr inbounds nuw i8, ptr %4, i64 32 + %335 = load i64, ptr %334, align 8, !tbaa !775 + %.not = icmp eq i64 %335, 0 br i1 %.not, label %iseq_compile_each.exit250, label %iseq_compile_each.exit285 -iseq_compile_each.exit250: ; preds = %331 - %334 = tail call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %4, i32 noundef 1) - %.not154 = icmp eq i32 %334, 0 - br i1 %.not154, label %.thread23, label %335 +iseq_compile_each.exit250: ; preds = %333 + %336 = tail call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %4, i32 noundef 1) + %.not154 = icmp eq i32 %336, 0 + br i1 %.not154, label %.thread23, label %337 -335: ; preds = %iseq_compile_each.exit250 - %336 = getelementptr i8, ptr %1, i64 24 - %.val171 = load ptr, ptr %336, align 8, !tbaa !7 - br label %337 +337: ; preds = %iseq_compile_each.exit250 + %338 = getelementptr i8, ptr %1, i64 24 + %.val171 = load ptr, ptr %338, align 8, !tbaa !7 + br label %339 -337: ; preds = %338, %335 +339: ; preds = %340, %337 %.pn.i251 = phi ptr [ %.val171, %335 ], [ %.0.i253, %338 ] %.0.in.i252 = getelementptr inbounds nuw i8, ptr %.pn.i251, i64 16 %.0.i253 = load ptr, ptr %.0.in.i252, align 8, !tbaa !32 %.not.i254 = icmp eq ptr %.0.i253, null - br i1 %.not.i254, label %get_prev_insn.exit256.preheader, label %338 + br i1 %.not.i254, label %get_prev_insn.exit256.preheader, label %340 -338: ; preds = %337 - %339 = load i32, ptr %.0.i253, align 8, !tbaa !67 - %340 = and i32 %339, -2 - %switch.i255 = icmp eq i32 %340, 2 - br i1 %switch.i255, label %get_prev_insn.exit256.preheader, label %337 +340: ; preds = %339 + %341 = load i32, ptr %.0.i253, align 8, !tbaa !67 + %342 = and i32 %341, -2 + %switch.i255 = icmp eq i32 %342, 2 + br i1 %switch.i255, label %get_prev_insn.exit256.preheader, label %339 -get_prev_insn.exit256.preheader: ; preds = %337, %338 +get_prev_insn.exit256.preheader: ; preds = %339, %340 br label %get_prev_insn.exit256 -get_prev_insn.exit256: ; preds = %get_prev_insn.exit256.preheader, %341 +get_prev_insn.exit256: ; preds = %get_prev_insn.exit256.preheader, %343 %.pn.i257 = phi ptr [ %.0.i259, %341 ], [ %.0.i253, %get_prev_insn.exit256.preheader ] %.0.in.i258 = getelementptr inbounds nuw i8, ptr %.pn.i257, i64 16 %.0.i259 = load ptr, ptr %.0.in.i258, align 8, !tbaa !32 %.not.i260 = icmp eq ptr %.0.i259, null - br i1 %.not.i260, label %get_prev_insn.exit262, label %341 + br i1 %.not.i260, label %get_prev_insn.exit262, label %343 -341: ; preds = %get_prev_insn.exit256 - %342 = load i32, ptr %.0.i259, align 8, !tbaa !67 - %343 = and i32 %342, -2 - %switch.i261 = icmp eq i32 %343, 2 +343: ; preds = %get_prev_insn.exit256 + %344 = load i32, ptr %.0.i259, align 8, !tbaa !67 + %345 = and i32 %344, -2 + %switch.i261 = icmp eq i32 %345, 2 br i1 %switch.i261, label %get_prev_insn.exit262, label %get_prev_insn.exit256 -get_prev_insn.exit262: ; preds = %get_prev_insn.exit256, %341 - %344 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 8 - %345 = load ptr, ptr %344, align 8, !tbaa !33 - %346 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 16 - %347 = load ptr, ptr %346, align 8, !tbaa !32 - %348 = getelementptr inbounds nuw i8, ptr %347, i64 8 - store ptr %345, ptr %348, align 8, !tbaa !33 - %.not.i263 = icmp eq ptr %345, null - br i1 %.not.i263, label %ELEM_REMOVE.exit264.preheader, label %349 +get_prev_insn.exit262: ; preds = %get_prev_insn.exit256, %343 + %346 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 8 + %347 = load ptr, ptr %346, align 8, !tbaa !33 + %348 = getelementptr inbounds nuw i8, ptr %.0.i259, i64 16 + %349 = load ptr, ptr %348, align 8, !tbaa !32 + %350 = getelementptr inbounds nuw i8, ptr %349, i64 8 + store ptr %347, ptr %350, align 8, !tbaa !33 + %.not.i263 = icmp eq ptr %347, null + br i1 %.not.i263, label %ELEM_REMOVE.exit264.preheader, label %351 -349: ; preds = %get_prev_insn.exit262 - %350 = getelementptr inbounds nuw i8, ptr %345, i64 16 - store ptr %347, ptr %350, align 8, !tbaa !32 +351: ; preds = %get_prev_insn.exit262 + %352 = getelementptr inbounds nuw i8, ptr %347, i64 16 + store ptr %349, ptr %352, align 8, !tbaa !32 br label %ELEM_REMOVE.exit264.preheader -ELEM_REMOVE.exit264.preheader: ; preds = %get_prev_insn.exit262, %349 +ELEM_REMOVE.exit264.preheader: ; preds = %get_prev_insn.exit262, %351 br label %ELEM_REMOVE.exit264 -ELEM_REMOVE.exit264: ; preds = %ELEM_REMOVE.exit264.preheader, %351 +ELEM_REMOVE.exit264: ; preds = %ELEM_REMOVE.exit264.preheader, %353 %.pn.i265 = phi ptr [ %.0.i267, %351 ], [ %.val171, %ELEM_REMOVE.exit264.preheader ] %.0.in.i266 = getelementptr inbounds nuw i8, ptr %.pn.i265, i64 16 %.0.i267 = load ptr, ptr %.0.in.i266, align 8, !tbaa !32 %.not.i268 = icmp eq ptr %.0.i267, null - br i1 %.not.i268, label %get_prev_insn.exit270, label %351 + br i1 %.not.i268, label %get_prev_insn.exit270, label %353 -351: ; preds = %ELEM_REMOVE.exit264 - %352 = load i32, ptr %.0.i267, align 8, !tbaa !67 - %353 = and i32 %352, -2 - %switch.i269 = icmp eq i32 %353, 2 +353: ; preds = %ELEM_REMOVE.exit264 + %354 = load i32, ptr %.0.i267, align 8, !tbaa !67 + %355 = and i32 %354, -2 + %switch.i269 = icmp eq i32 %355, 2 br i1 %switch.i269, label %get_prev_insn.exit270, label %ELEM_REMOVE.exit264 -get_prev_insn.exit270: ; preds = %ELEM_REMOVE.exit264, %351 - %354 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 8 - %355 = load ptr, ptr %354, align 8, !tbaa !33 - %356 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 16 - %357 = load ptr, ptr %356, align 8, !tbaa !32 - %358 = getelementptr inbounds nuw i8, ptr %357, i64 8 - store ptr %355, ptr %358, align 8, !tbaa !33 - %.not.i271 = icmp eq ptr %355, null - br i1 %.not.i271, label %ELEM_REMOVE.exit272, label %359 +get_prev_insn.exit270: ; preds = %ELEM_REMOVE.exit264, %353 + %356 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 8 + %357 = load ptr, ptr %356, align 8, !tbaa !33 + %358 = getelementptr inbounds nuw i8, ptr %.0.i267, i64 16 + %359 = load ptr, ptr %358, align 8, !tbaa !32 + %360 = getelementptr inbounds nuw i8, ptr %359, i64 8 + store ptr %357, ptr %360, align 8, !tbaa !33 + %.not.i271 = icmp eq ptr %357, null + br i1 %.not.i271, label %ELEM_REMOVE.exit272, label %361 -359: ; preds = %get_prev_insn.exit270 - %360 = getelementptr inbounds nuw i8, ptr %355, i64 16 - store ptr %357, ptr %360, align 8, !tbaa !32 +361: ; preds = %get_prev_insn.exit270 + %362 = getelementptr inbounds nuw i8, ptr %357, i64 16 + store ptr %359, ptr %362, align 8, !tbaa !32 br label %ELEM_REMOVE.exit272 -ELEM_REMOVE.exit272: ; preds = %get_prev_insn.exit270, %359 - %361 = getelementptr inbounds nuw i8, ptr %.val171, i64 8 - %362 = load ptr, ptr %361, align 8, !tbaa !33 - %363 = getelementptr inbounds nuw i8, ptr %.val171, i64 16 - %364 = load ptr, ptr %363, align 8, !tbaa !32 - %365 = getelementptr inbounds nuw i8, ptr %364, i64 8 - store ptr %362, ptr %365, align 8, !tbaa !33 - %.not.i273 = icmp eq ptr %362, null - br i1 %.not.i273, label %ELEM_REMOVE.exit274, label %366 +ELEM_REMOVE.exit272: ; preds = %get_prev_insn.exit270, %361 + %363 = getelementptr inbounds nuw i8, ptr %.val171, i64 8 + %364 = load ptr, ptr %363, align 8, !tbaa !33 + %365 = getelementptr inbounds nuw i8, ptr %.val171, i64 16 + %366 = load ptr, ptr %365, align 8, !tbaa !32 + %367 = getelementptr inbounds nuw i8, ptr %366, i64 8 + store ptr %364, ptr %367, align 8, !tbaa !33 + %.not.i273 = icmp eq ptr %364, null + br i1 %.not.i273, label %ELEM_REMOVE.exit274, label %368 -366: ; preds = %ELEM_REMOVE.exit272 - %367 = getelementptr inbounds nuw i8, ptr %362, i64 16 - store ptr %364, ptr %367, align 8, !tbaa !32 +368: ; preds = %ELEM_REMOVE.exit272 + %369 = getelementptr inbounds nuw i8, ptr %364, i64 16 + store ptr %366, ptr %369, align 8, !tbaa !32 br label %ELEM_REMOVE.exit274 -ELEM_REMOVE.exit274: ; preds = %ELEM_REMOVE.exit272, %366 - %368 = load ptr, ptr %363, align 8, !tbaa !738 - store ptr %368, ptr %336, align 8, !tbaa !7 - %369 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %370 = load ptr, ptr %369, align 8, !tbaa !7 - store ptr %370, ptr %363, align 8, !tbaa !32 - %371 = getelementptr inbounds nuw i8, ptr %370, i64 8 - store ptr %.val171, ptr %371, align 8, !tbaa !33 - store ptr %.val171, ptr %369, align 8, !tbaa !7 +ELEM_REMOVE.exit274: ; preds = %ELEM_REMOVE.exit272, %368 + %370 = load ptr, ptr %365, align 8, !tbaa !738 + store ptr %370, ptr %338, align 8, !tbaa !7 + %371 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %372 = load ptr, ptr %371, align 8, !tbaa !7 + store ptr %372, ptr %365, align 8, !tbaa !32 + %373 = getelementptr inbounds nuw i8, ptr %372, i64 8 + store ptr %.val171, ptr %373, align 8, !tbaa !33 + store ptr %.val171, ptr %371, align 8, !tbaa !7 %.not.i275 = icmp eq ptr %5, null - br i1 %.not.i275, label %372, label %373 + br i1 %.not.i275, label %374, label %375 -372: ; preds = %ELEM_REMOVE.exit274 +374: ; preds = %ELEM_REMOVE.exit274 tail call void (ptr, ...) @rb_bug(ptr noundef nonnull @.str.145) #41 unreachable -373: ; preds = %ELEM_REMOVE.exit274 - %374 = tail call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40) #45 - %.not24.i276 = icmp eq ptr %374, null - br i1 %.not24.i276, label %.thread23, label %375 - -375: ; preds = %373 - store ptr %.val171, ptr %374, align 8, !tbaa !948 - %376 = getelementptr inbounds nuw i8, ptr %374, i64 16 - store ptr %4, ptr %376, align 8, !tbaa !949 - %377 = getelementptr inbounds nuw i8, ptr %5, i64 20 - %378 = load i32, ptr %377, align 4, !tbaa !939 - %379 = add i32 %378, 1 - %380 = getelementptr inbounds nuw i8, ptr %374, i64 24 - store i32 %379, ptr %380, align 8, !tbaa !941 - %381 = getelementptr inbounds nuw i8, ptr %374, i64 28 - store i32 1, ptr %381, align 4, !tbaa !945 - store i32 %379, ptr %377, align 4, !tbaa !939 - %382 = getelementptr inbounds nuw i8, ptr %374, i64 32 - store i32 %6, ptr %382, align 8, !tbaa !944 - %383 = getelementptr inbounds nuw i8, ptr %374, i64 8 - store ptr null, ptr %383, align 8, !tbaa !946 - %384 = load ptr, ptr %5, align 8, !tbaa !940 - %.not25.i277 = icmp eq ptr %384, null - br i1 %.not25.i277, label %385, label %386 - -385: ; preds = %375 - store ptr %374, ptr %5, align 8, !tbaa !940 - br label %390 - -386: ; preds = %375 - %387 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %388 = load ptr, ptr %387, align 8, !tbaa !1059 - %389 = getelementptr inbounds nuw i8, ptr %388, i64 8 - store ptr %374, ptr %389, align 8, !tbaa !946 - br label %390 - -390: ; preds = %385, %386 - %391 = getelementptr inbounds nuw i8, ptr %5, i64 8 - store ptr %374, ptr %391, align 8, !tbaa !1059 - %392 = load i64, ptr %4, align 8, !tbaa !169 - %393 = lshr i64 %392, 15 - %394 = trunc i64 %393 to i32 - %395 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %396 = load i32, ptr %395, align 8, !tbaa !259 - %397 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %394, i32 noundef %396, i32 noundef 39, i32 noundef 0, ptr noundef null) - %398 = getelementptr inbounds nuw i8, ptr %3, i64 24 - %399 = load ptr, ptr %398, align 8, !tbaa !7 - %400 = getelementptr inbounds nuw i8, ptr %397, i64 16 - store ptr %399, ptr %400, align 8, !tbaa !32 - %401 = getelementptr inbounds nuw i8, ptr %399, i64 8 - store ptr %397, ptr %401, align 8, !tbaa !33 - store ptr %397, ptr %398, align 8, !tbaa !7 +375: ; preds = %ELEM_REMOVE.exit274 + %376 = tail call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40) #45 + %.not24.i276 = icmp eq ptr %376, null + br i1 %.not24.i276, label %.thread23, label %377 + +377: ; preds = %375 + store ptr %.val171, ptr %376, align 8, !tbaa !948 + %378 = getelementptr inbounds nuw i8, ptr %376, i64 16 + store ptr %4, ptr %378, align 8, !tbaa !949 + %379 = getelementptr inbounds nuw i8, ptr %5, i64 20 + %380 = load i32, ptr %379, align 4, !tbaa !939 + %381 = add i32 %380, 1 + %382 = getelementptr inbounds nuw i8, ptr %376, i64 24 + store i32 %381, ptr %382, align 8, !tbaa !941 + %383 = getelementptr inbounds nuw i8, ptr %376, i64 28 + store i32 1, ptr %383, align 4, !tbaa !945 + store i32 %381, ptr %379, align 4, !tbaa !939 + %384 = getelementptr inbounds nuw i8, ptr %376, i64 32 + store i32 %6, ptr %384, align 8, !tbaa !944 + %385 = getelementptr inbounds nuw i8, ptr %376, i64 8 + store ptr null, ptr %385, align 8, !tbaa !946 + %386 = load ptr, ptr %5, align 8, !tbaa !940 + %.not25.i277 = icmp eq ptr %386, null + br i1 %.not25.i277, label %387, label %388 + +387: ; preds = %377 + store ptr %376, ptr %5, align 8, !tbaa !940 + br label %392 + +388: ; preds = %377 + %389 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %390 = load ptr, ptr %389, align 8, !tbaa !1059 + %391 = getelementptr inbounds nuw i8, ptr %390, i64 8 + store ptr %376, ptr %391, align 8, !tbaa !946 + br label %392 + +392: ; preds = %387, %388 + %393 = getelementptr inbounds nuw i8, ptr %5, i64 8 + store ptr %376, ptr %393, align 8, !tbaa !1059 + %394 = load i64, ptr %4, align 8, !tbaa !169 + %395 = lshr i64 %394, 15 + %396 = trunc i64 %395 to i32 + %397 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %398 = load i32, ptr %397, align 8, !tbaa !259 + %399 = tail call fastcc noundef ptr @new_insn_core(ptr noundef %0, i32 noundef %396, i32 noundef %398, i32 noundef 39, i32 noundef 0, ptr noundef null) + %400 = getelementptr inbounds nuw i8, ptr %3, i64 24 + %401 = load ptr, ptr %400, align 8, !tbaa !7 + %402 = getelementptr inbounds nuw i8, ptr %399, i64 16 + store ptr %401, ptr %402, align 8, !tbaa !32 + %403 = getelementptr inbounds nuw i8, ptr %401, i64 8 + store ptr %399, ptr %403, align 8, !tbaa !33 + store ptr %399, ptr %400, align 8, !tbaa !7 br label %.thread23 -iseq_compile_each.exit285: ; preds = %331, %7 +iseq_compile_each.exit285: ; preds = %333, %7 call void @llvm.lifetime.start.p0(ptr nonnull %10) - %402 = getelementptr inbounds nuw i8, ptr %10, i64 24 + %404 = getelementptr inbounds nuw i8, ptr %10, i64 24 call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %10, i8 0, i64 24, i1 false) - store ptr %10, ptr %402, align 8, !tbaa !7 - %403 = getelementptr inbounds nuw i8, ptr %10, i64 8 - %404 = call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef nonnull %10, ptr noundef nonnull %4, i32 noundef 1) - %.not164 = icmp eq i32 %404, 0 - br i1 %.not164, label %APPEND_LIST.exit289, label %405 - -405: ; preds = %iseq_compile_each.exit285 - %.val = load ptr, ptr %403, align 8, !tbaa !63 - %406 = getelementptr inbounds nuw i8, ptr %.val, i64 8 - %407 = load ptr, ptr %406, align 8, !tbaa !33 - %408 = getelementptr inbounds nuw i8, ptr %.val, i64 16 - %409 = load ptr, ptr %408, align 8, !tbaa !32 - %410 = getelementptr inbounds nuw i8, ptr %409, i64 8 - store ptr %407, ptr %410, align 8, !tbaa !33 - %.not.i286 = icmp eq ptr %407, null - br i1 %.not.i286, label %ELEM_REMOVE.exit287, label %411 + store ptr %10, ptr %404, align 8, !tbaa !7 + %405 = getelementptr inbounds nuw i8, ptr %10, i64 8 + %406 = call fastcc i32 @iseq_compile_each0(ptr noundef %0, ptr noundef nonnull %10, ptr noundef nonnull %4, i32 noundef 1) + %.not164 = icmp eq i32 %406, 0 + br i1 %.not164, label %APPEND_LIST.exit289, label %407 + +407: ; preds = %iseq_compile_each.exit285 + %.val = load ptr, ptr %405, align 8, !tbaa !63 + %408 = getelementptr inbounds nuw i8, ptr %.val, i64 8 + %409 = load ptr, ptr %408, align 8, !tbaa !33 + %410 = getelementptr inbounds nuw i8, ptr %.val, i64 16 + %411 = load ptr, ptr %410, align 8, !tbaa !32 + %412 = getelementptr inbounds nuw i8, ptr %411, i64 8 + store ptr %409, ptr %412, align 8, !tbaa !33 + %.not.i286 = icmp eq ptr %409, null + br i1 %.not.i286, label %ELEM_REMOVE.exit287, label %413 -411: ; preds = %405 - %412 = getelementptr inbounds nuw i8, ptr %407, i64 16 - store ptr %409, ptr %412, align 8, !tbaa !32 +413: ; preds = %407 + %414 = getelementptr inbounds nuw i8, ptr %409, i64 16 + store ptr %411, ptr %414, align 8, !tbaa !32 br label %ELEM_REMOVE.exit287 -ELEM_REMOVE.exit287: ; preds = %405, %411 - %413 = load ptr, ptr %403, align 8, !tbaa !63 - %.not.i288 = icmp eq ptr %413, null - br i1 %.not.i288, label %APPEND_LIST.exit289.thread, label %414 - -414: ; preds = %ELEM_REMOVE.exit287 - %415 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %416 = load ptr, ptr %415, align 8, !tbaa !7 - %417 = getelementptr inbounds nuw i8, ptr %416, i64 8 - store ptr %413, ptr %417, align 8, !tbaa !33 - %418 = load ptr, ptr %403, align 8, !tbaa !63 - %419 = getelementptr inbounds nuw i8, ptr %418, i64 16 - store ptr %416, ptr %419, align 8, !tbaa !32 - %420 = load ptr, ptr %402, align 8, !tbaa !7 - store ptr %420, ptr %415, align 8, !tbaa !7 +ELEM_REMOVE.exit287: ; preds = %407, %413 + %415 = load ptr, ptr %405, align 8, !tbaa !63 + %.not.i288 = icmp eq ptr %415, null + br i1 %.not.i288, label %APPEND_LIST.exit289.thread, label %416 + +416: ; preds = %ELEM_REMOVE.exit287 + %417 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %418 = load ptr, ptr %417, align 8, !tbaa !7 + %419 = getelementptr inbounds nuw i8, ptr %418, i64 8 + store ptr %415, ptr %419, align 8, !tbaa !33 + %420 = load ptr, ptr %405, align 8, !tbaa !63 + %421 = getelementptr inbounds nuw i8, ptr %420, i64 16 + store ptr %418, ptr %421, align 8, !tbaa !32 + %422 = load ptr, ptr %404, align 8, !tbaa !7 + store ptr %422, ptr %417, align 8, !tbaa !7 br label %APPEND_LIST.exit289.thread -APPEND_LIST.exit289.thread: ; preds = %414, %ELEM_REMOVE.exit287 +APPEND_LIST.exit289.thread: ; preds = %416, %ELEM_REMOVE.exit287 call void @llvm.lifetime.end.p0(ptr nonnull %10) br label %.thread23 @@ -61270,7 +61270,7 @@ APPEND_LIST.exit289: ; preds = %iseq_compile_each.e call void @llvm.lifetime.end.p0(ptr nonnull %10) br label %.thread23 -.thread23: ; preds = %nd_line.exit244, %290, %373, %iseq_compile_each.exit250, %127, %101, %iseq_compile_each.exit, %APPEND_LIST.exit248.thread, %390, %APPEND_LIST.exit289.thread, %APPEND_LIST.exit289, %APPEND_LIST.exit248 +.thread23: ; preds = %nd_line.exit244, %292, %375, %iseq_compile_each.exit250, %127, %101, %iseq_compile_each.exit, %APPEND_LIST.exit248.thread, %392, %APPEND_LIST.exit289.thread, %APPEND_LIST.exit289, %APPEND_LIST.exit248 %.2 = phi i32 [ 0, %APPEND_LIST.exit289 ], [ 0, %APPEND_LIST.exit248 ], [ 1, %APPEND_LIST.exit289.thread ], [ 1, %390 ], [ 1, %APPEND_LIST.exit248.thread ], [ 0, %iseq_compile_each.exit ], [ 0, %101 ], [ 0, %127 ], [ 0, %iseq_compile_each.exit250 ], [ 0, %373 ], [ 1, %290 ], [ 1, %nd_line.exit244 ] ret i32 %.2 } diff --git a/bench/ruby/optimized/vm.ll b/bench/ruby/optimized/vm.ll index 10f3b6e1393..b6962ee11bc 100644 --- a/bench/ruby/optimized/vm.ll +++ b/bench/ruby/optimized/vm.ll @@ -19549,13 +19549,13 @@ rb_vm_lock_enter.exit: ; preds = %3, %11 26: ; preds = %17 call void @llvm.lifetime.end.p0(ptr nonnull %8) %.not23 = icmp eq ptr %2, null - br i1 %.not23, label %99, label %27 + br i1 %.not23, label %101, label %27 27: ; preds = %26 %28 = getelementptr inbounds nuw i8, ptr %21, i64 8 %29 = load i64, ptr %28, align 8, !tbaa !187 store i64 %29, ptr %2, align 8, !tbaa !7 - br label %99 + br label %101 30: ; preds = %24, %15, %rb_vm_lock_enter.exit call void @llvm.lifetime.end.p0(ptr nonnull %8) @@ -19721,19 +19721,19 @@ negative_cme.exit: ; preds = %72, %75 cache_callable_method_entry.exit: ; preds = %87, %89 call void @llvm.lifetime.end.p0(ptr nonnull %4) - br label %99 + br label %101 -99: ; preds = %26, %27, %cache_callable_method_entry.exit +101: ; preds = %26, %27, %cache_callable_method_entry.exit %.0 = phi ptr [ %21, %27 ], [ %21, %26 ], [ %.1, %cache_callable_method_entry.exit ] - %100 = load ptr, ptr @ruby_single_main_ractor, align 8, !tbaa !110 - %.not.i.i30 = icmp eq ptr %100, null - br i1 %.not.i.i30, label %101, label %rb_vm_lock_leave.exit + %102 = load ptr, ptr @ruby_single_main_ractor, align 8, !tbaa !110 + %.not.i.i30 = icmp eq ptr %102, null + br i1 %.not.i.i30, label %103, label %rb_vm_lock_leave.exit -101: ; preds = %99 +103: ; preds = %101 call void @rb_vm_lock_leave_body(ptr noundef nonnull %9) #20 br label %rb_vm_lock_leave.exit -rb_vm_lock_leave.exit: ; preds = %99, %101 +rb_vm_lock_leave.exit: ; preds = %101, %103 call void @llvm.lifetime.end.p0(ptr nonnull %9) ret ptr %.0 } @@ -31220,23 +31220,23 @@ vm_proc_iseq.exit: ; preds = %tailrecurse.i.i %29 = icmp eq ptr %26, null br i1 %29, label %proc_isolate_env.exit, label %30 -30: ; preds = %23 +34: ; preds = %23 %31 = ptrtoint ptr %26 to i64 tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %31) #20 br label %proc_isolate_env.exit -proc_isolate_env.exit: ; preds = %23, %30 - %32 = getelementptr inbounds nuw i8, ptr %11, i64 32 - %33 = load i8, ptr %32, align 8 - %34 = or i8 %33, 4 - store i8 %34, ptr %32, align 8 +proc_isolate_env.exit: ; preds = %23, %34 + %35 = getelementptr inbounds nuw i8, ptr %11, i64 32 + %36 = load i8, ptr %35, align 8 + %37 = or i8 %36, 4 + store i8 %37, ptr %35, align 8 br label %vm_proc_iseq.exit.thread vm_proc_iseq.exit.thread: ; preds = %tailrecurse.i.i, %tailrecurse.i.i, %proc_isolate_env.exit, %vm_proc_iseq.exit - %35 = inttoptr i64 %0 to ptr - %36 = load i64, ptr %35, align 8, !tbaa !97 - %37 = or i64 %36, 256 - store i64 %37, ptr %35, align 8, !tbaa !97 + %38 = inttoptr i64 %0 to ptr + %39 = load i64, ptr %38, align 8, !tbaa !97 + %40 = or i64 %39, 256 + store i64 %40, ptr %38, align 8, !tbaa !97 ret i64 %0 } @@ -31452,25 +31452,25 @@ rb_ractor_shareable_p.exit.thread: ; preds = %21, %vm_block_self. %39 = load ptr, ptr %38, align 8, !tbaa !433 store ptr %39, ptr %35, align 8, !tbaa !26 %40 = icmp eq ptr %37, null - br i1 %40, label %proc_isolate_env.exit, label %41 + br i1 %40, label %proc_isolate_env.exit, label %45 -41: ; preds = %34 - %42 = ptrtoint ptr %37 to i64 +45: ; preds = %34 + %42 = ptrtoint ptr %40 to i64 tail call void @rb_gc_writebarrier(i64 noundef %0, i64 noundef %42) #20 br label %proc_isolate_env.exit -proc_isolate_env.exit: ; preds = %34, %41 - %43 = getelementptr inbounds nuw i8, ptr %11, i64 32 - %44 = load i8, ptr %43, align 8 - %45 = or i8 %44, 4 - store i8 %45, ptr %43, align 8 +proc_isolate_env.exit: ; preds = %34, %45 + %46 = getelementptr inbounds nuw i8, ptr %11, i64 32 + %47 = load i8, ptr %46, align 8 + %48 = or i8 %47, 4 + store i8 %48, ptr %46, align 8 br label %vm_proc_iseq.exit.thread vm_proc_iseq.exit.thread: ; preds = %tailrecurse.i.i, %tailrecurse.i.i, %proc_isolate_env.exit, %vm_proc_iseq.exit - %46 = inttoptr i64 %0 to ptr - %47 = load i64, ptr %46, align 8, !tbaa !97 - %48 = or i64 %47, 256 - store i64 %48, ptr %46, align 8, !tbaa !97 + %49 = inttoptr i64 %0 to ptr + %50 = load i64, ptr %49, align 8, !tbaa !97 + %51 = or i64 %50, 256 + store i64 %51, ptr %49, align 8, !tbaa !97 ret i64 %0 } @@ -60590,7 +60590,7 @@ rb_obj_write.exit67: ; preds = %.thread69, %.thread %.val = phi i64 [ %.val.pre, %.loopexit70.loopexit ], [ %30, %RARRAY_LENINT.exit ], [ %30, %rb_obj_write.exit ] %100 = and i64 %.val, 2 %.not58 = icmp eq i64 %100, 0 - br i1 %.not58, label %101, label %118 + br i1 %.not58, label %101, label %121 101: ; preds = %.loopexit70 %102 = getelementptr inbounds nuw i8, ptr %4, i64 16 @@ -60609,23 +60609,23 @@ rb_obj_write.exit67: ; preds = %.thread69, %.thread %113 = icmp eq ptr %107, null br i1 %113, label %rb_obj_written.exit, label %114 -114: ; preds = %101 +114:; preds = %101 %115 = ptrtoint ptr %107 to i64 tail call void @rb_gc_writebarrier(i64 noundef %16, i64 noundef %115) #20 br label %rb_obj_written.exit rb_obj_written.exit: ; preds = %101, %114 - %116 = load i64, ptr %12, align 8, !tbaa !7 - %117 = and i64 %116, -3 - store i64 %117, ptr %12, align 8, !tbaa !7 - br label %120 + %119 = load i64, ptr %12, align 8, !tbaa !7 + %120 = and i64 %119, -3 + store i64 %120, ptr %12, align 8, !tbaa !7 + br label %123 -118: ; preds = %.loopexit70 - %119 = getelementptr i8, ptr %12, i64 -8 - store i64 0, ptr %119, align 8, !tbaa !7 - br label %120 +121: ; preds = %.loopexit70 + %122 = getelementptr i8, ptr %12, i64 -8 + store i64 0, ptr %122, align 8, !tbaa !7 + br label %123 -120: ; preds = %118, %rb_obj_written.exit +123: ; preds = %121, %rb_obj_written.exit ret ptr %17 } diff --git a/bench/wolfssl/optimized/sha.ll b/bench/wolfssl/optimized/sha.ll index a93dd973258..e1850d96dd6 100644 --- a/bench/wolfssl/optimized/sha.ll +++ b/bench/wolfssl/optimized/sha.ll @@ -1264,13 +1264,13 @@ define range(i32 -192, 1) i32 @wc_ShaFinal(ptr noundef %0, ptr noundef writeonly %3 = icmp eq ptr %0, null %4 = icmp eq ptr %1, null %or.cond = or i1 %3, %4 - br i1 %or.cond, label %50, label %5 + br i1 %or.cond, label %62, label %5 5: ; preds = %2 %6 = getelementptr inbounds nuw i8, ptr %0, i64 12 %7 = load i32, ptr %0, align 8, !tbaa !10 %8 = icmp ugt i32 %7, 63 - br i1 %8, label %50, label %9 + br i1 %8, label %62, label %9 9: ; preds = %5 %10 = add nuw nsw i32 %7, 1 @@ -1294,21 +1294,21 @@ define range(i32 -192, 1) i32 @wc_ShaFinal(ptr noundef %0, ptr noundef writeonly 19: ; preds = %9 %.not = icmp eq i32 %7, 63 - br i1 %.not, label %.lr.ph26.i.preheader, label %20 + br i1 %.not, label %20, label %15 -20: ; preds = %19 - %21 = zext nneg i32 %10 to i64 - %22 = getelementptr inbounds nuw i8, ptr %6, i64 %21 - %23 = sub nuw nsw i32 63, %7 - %24 = zext nneg i32 %23 to i64 - tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %22, i8 0, i64 %24, i1 false) - br label %.lr.ph26.i.preheader +15: ; preds = %19 + %16 = zext nneg i32 %10 to i64 + %17 = getelementptr inbounds nuw i8, ptr %6, i64 %16 + %18 = sub nuw nsw i32 63, %7 + %19 = zext nneg i32 %18 to i64 + tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %17, i8 0, i64 %19, i1 false) + br label %20 -.lr.ph26.i.preheader: ; preds = %20, %19 +20: ; preds = %15, %19 store i32 64, ptr %0, align 8, !tbaa !10 br label %.lr.ph26.i -.lr.ph26.i: ; preds = %.lr.ph26.i.preheader, %.lr.ph26.i +.lr.ph26.i:; preds = %20, %.lr.ph26.i %indvars.iv30.i = phi i64 [ %indvars.iv.next31.i, %.lr.ph26.i ], [ 0, %.lr.ph26.i.preheader ] %25 = getelementptr inbounds nuw i32, ptr %6, i64 %indvars.iv30.i %26 = load i32, ptr %25, align 4, !tbaa !9 @@ -1318,16 +1318,16 @@ define range(i32 -192, 1) i32 @wc_ShaFinal(ptr noundef %0, ptr noundef writeonly %exitcond.not.i = icmp eq i64 %indvars.iv.next31.i, 16 br i1 %exitcond.not.i, label %ByteReverseWords.exit, label %.lr.ph26.i, !llvm.loop !13 -ByteReverseWords.exit: ; preds = %.lr.ph26.i +.lr.ph.i: ; preds = %.lr.ph26.i tail call fastcc void @Transform(ptr noundef %0, ptr noundef %6) store i32 0, ptr %0, align 8, !tbaa !10 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(56) %6, i8 0, i64 56, i1 false) br label %.lr.ph26.i55.preheader -.lr.ph26.i55.preheader: ; preds = %ByteReverseWords.exit, %._crit_edge +.lr.ph26.i55.preheader: ; preds = %ByteReverseWords.exit, %._crit_edge br label %.lr.ph26.i55 -.lr.ph26.i55: ; preds = %.lr.ph26.i55.preheader, %.lr.ph26.i55 +.lr.ph26.i55:; preds = %.lr.ph26.i55.preheader, %.lr.ph26.i55 %indvars.iv30.i56 = phi i64 [ %indvars.iv.next31.i57, %.lr.ph26.i55 ], [ 0, %.lr.ph26.i55.preheader ] %28 = getelementptr inbounds nuw i32, ptr %6, i64 %indvars.iv30.i56 %29 = load i32, ptr %28, align 4, !tbaa !9 @@ -1339,44 +1339,44 @@ ByteReverseWords.exit: ; preds = %.lr.ph26.i .lr.ph.i50: ; preds = %._crit_edge, %.lr.ph.i50 %indvars.iv.i51 = phi i64 [ %indvars.iv.next.i53, %.lr.ph.i50 ], [ 0, %._crit_edge ] - %31 = getelementptr inbounds nuw i8, ptr %6, i64 %indvars.iv.i51 - %.0.copyload.i52 = load i32, ptr %31, align 1 - %32 = tail call noundef i32 @llvm.bswap.i32(i32 %.0.copyload.i52) - store i32 %32, ptr %31, align 1 + %38 = getelementptr inbounds nuw i8, ptr %6, i64 %indvars.iv.i51 + %.0.copyload.i52 = load i32, ptr %38, align 1 + %39 = tail call noundef i32 @llvm.bswap.i32(i32 %.0.copyload.i52) + store i32 %39, ptr %38, align 1 %indvars.iv.next.i53 = add nuw nsw i64 %indvars.iv.i51, 4 - %33 = icmp samesign ult i64 %indvars.iv.i51, 60 - br i1 %33, label %.lr.ph.i50, label %ByteReverseWords.exit59, !llvm.loop !15 + %40 = icmp samesign ult i64 %indvars.iv.i51, 60 + br i1 %40, label %.lr.ph.i50, label %ByteReverseWords.exit59, !llvm.loop !15 ByteReverseWords.exit59: ; preds = %.lr.ph.i50, %.lr.ph26.i55 - %34 = getelementptr inbounds nuw i8, ptr %0, i64 4 - %35 = load i32, ptr %34, align 4, !tbaa !11 - %36 = getelementptr inbounds nuw i8, ptr %0, i64 8 - %37 = load i32, ptr %36, align 8, !tbaa !12 - %38 = tail call i32 @llvm.fshl.i32(i32 %37, i32 %35, i32 3) - store i32 %38, ptr %36, align 8, !tbaa !12 - %39 = shl i32 %35, 3 - store i32 %39, ptr %34, align 4, !tbaa !11 - %40 = getelementptr inbounds nuw i8, ptr %0, i64 68 - store i32 %38, ptr %40, align 4 - %41 = getelementptr inbounds nuw i8, ptr %0, i64 72 - store i32 %39, ptr %41, align 8 + %41 = getelementptr inbounds nuw i8, ptr %0, i64 4 + %42 = load i32, ptr %41, align 4, !tbaa !11 + %43 = getelementptr inbounds nuw i8, ptr %0, i64 8 + %44 = load i32, ptr %43, align 8, !tbaa !12 + %45 = tail call i32 @llvm.fshl.i32(i32 %44, i32 %42, i32 3) + store i32 %45, ptr %43, align 8, !tbaa !12 + %46 = shl i32 %42, 3 + store i32 %46, ptr %41, align 4, !tbaa !11 + %47 = getelementptr inbounds nuw i8, ptr %0, i64 68 + store i32 %45, ptr %47, align 4 + %48 = getelementptr inbounds nuw i8, ptr %0, i64 72 + store i32 %46, ptr %48, align 8 tail call fastcc void @Transform(ptr noundef %0, ptr noundef %6) - %42 = getelementptr inbounds nuw i8, ptr %0, i64 76 + %49 = getelementptr inbounds nuw i8, ptr %0, i64 76 br label %.lr.ph26.i67 .lr.ph26.i67: ; preds = %ByteReverseWords.exit59, %.lr.ph26.i67 %indvars.iv30.i68 = phi i64 [ %indvars.iv.next31.i69, %.lr.ph26.i67 ], [ 0, %ByteReverseWords.exit59 ] - %43 = getelementptr inbounds nuw i32, ptr %42, i64 %indvars.iv30.i68 - %44 = load i32, ptr %43, align 4, !tbaa !9 - %45 = tail call noundef i32 @llvm.bswap.i32(i32 %44) - store i32 %45, ptr %43, align 4, !tbaa !9 + %52 = getelementptr inbounds nuw i32, ptr %49, i64 %indvars.iv30.i68 + %53 = load i32, ptr %52, align 4, !tbaa !9 + %54 = tail call noundef i32 @llvm.bswap.i32(i32 %53) + store i32 %54, ptr %52, align 4, !tbaa !9 %indvars.iv.next31.i69 = add nuw nsw i64 %indvars.iv30.i68, 1 %exitcond.not.i70 = icmp eq i64 %indvars.iv.next31.i69, 5 br i1 %exitcond.not.i70, label %ByteReverseWords.exit71, label %.lr.ph26.i67, !llvm.loop !13 -ByteReverseWords.exit71: ; preds = %.lr.ph26.i67 - tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %1, ptr noundef nonnull align 4 dereferenceable(20) %42, i64 20, i1 false) - store i32 1732584193, ptr %42, align 4, !tbaa !9 +.lr.ph.i62: ; preds = %.lr.ph26.i67 + tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %1, ptr noundef nonnull align 4 dereferenceable(20) %42, i64 15, i1 false) + store i32 1732584193, ptr %49, align 4, !tbaa !9 %46 = getelementptr inbounds nuw i8, ptr %0, i64 80 store i32 -271733879, ptr %46, align 4, !tbaa !9 %47 = getelementptr inbounds nuw i8, ptr %0, i64 84 @@ -1386,11 +1386,11 @@ ByteReverseWords.exit71: ; preds = %.lr.ph26.i67 %49 = getelementptr inbounds nuw i8, ptr %0, i64 92 store i32 -1009589776, ptr %49, align 4, !tbaa !9 store i32 0, ptr %0, align 8, !tbaa !10 - store i32 0, ptr %34, align 4, !tbaa !11 - store i32 0, ptr %36, align 8, !tbaa !12 - br label %50 + store i32 0, ptr %41, align 4, !tbaa !11 + store i32 0, ptr %43, align 8, !tbaa !12 + br label %62 -50: ; preds = %5, %2, %ByteReverseWords.exit71 +62: ; preds = %5, %2, %ByteReverseWords.exit71 %.0 = phi i32 [ 0, %ByteReverseWords.exit71 ], [ -173, %2 ], [ -192, %5 ] ret i32 %.0 }