From fccd729e322805db05b287cd9983fe990056c7ed Mon Sep 17 00:00:00 2001 From: dtcxzyw <15650457+dtcxzyw@users.noreply.github.com> Date: Mon, 21 Apr 2025 18:17:30 +0800 Subject: [PATCH 1/3] pre-commit: PR136558 --- scripts/setup_pre_commit_patch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_pre_commit_patch.sh b/scripts/setup_pre_commit_patch.sh index c5409e09ef4..aa949678ba9 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/136558 export COMPTIME_MODE=0 # Please rebase manually From abb2197f98fff7371324a0ccf88ab8ac22c7cdc8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Apr 2025 10:38:13 +0000 Subject: [PATCH 2/3] pre-commit: Update --- bench/abc/optimized/extraUtilMisc.ll | 490 ++++----- .../optimized/damerau_levenshtein_distance.ll | 330 +++--- .../optimized/block_jacobi_preconditioner.ll | 3 +- .../optimized/505489it2i89bi1c.ll | 90 +- bench/cpython/optimized/unicodeobject.ll | 18 +- bench/darktable/optimized/Cr2Decompressor.ll | 130 +-- .../optimized/PanasonicV4Decompressor.ll | 235 +++-- bench/duckdb/optimized/format.ll | 19 +- .../optimized/hb-subset-instancer-iup.ll | 118 +-- bench/icu/optimized/alphaindex.ll | 311 +++--- bench/icu/optimized/collationsets.ll | 334 +++--- bench/icu/optimized/dtptngen.ll | 401 ++++---- bench/icu/optimized/filteredbrk.ll | 28 +- bench/icu/optimized/formattedval_sbimpl.ll | 6 +- bench/icu/optimized/number_longnames.ll | 215 ++-- bench/icu/optimized/numfmt.ll | 24 +- bench/icu/optimized/numparse_impl.ll | 3 +- bench/icu/optimized/plurfmt.ll | 384 +++---- bench/icu/optimized/rbnf.ll | 193 ++-- bench/icu/optimized/rbt_rule.ll | 134 +-- bench/icu/optimized/reslist.ll | 783 +++++++------- bench/icu/optimized/selfmt.ll | 164 +-- bench/icu/optimized/smpdtfmt.ll | 21 +- bench/icu/optimized/sprintf.ll | 153 ++- bench/icu/optimized/timezone.ll | 54 +- bench/icu/optimized/tridpars.ll | 180 ++-- bench/icu/optimized/tzfmt.ll | 111 +- bench/icu/optimized/ucharstriebuilder.ll | 45 +- bench/icu/optimized/uniset.ll | 25 +- bench/icu/optimized/unistr.ll | 174 ++-- bench/icu/optimized/unistr_case.ll | 76 +- bench/icu/optimized/units_router.ll | 80 +- bench/icu/optimized/uspoof_conf.ll | 36 +- bench/libpng/optimized/pngrutil.ll | 194 ++-- bench/libquic/optimized/url_parse.ll | 296 +++--- bench/llvm/optimized/BTFParser.ll | 97 +- bench/llvm/optimized/MachOObjectFile.ll | 315 +++--- .../optimized/cube_style_precomputation.ll | 972 +++++++++--------- bench/openblas/optimized/dorbdb1.ll | 337 +++--- bench/openblas/optimized/dorbdb2.ll | 435 ++++---- bench/opencv/optimized/stringutils.ll | 4 +- bench/openjdk/optimized/DrawLine.ll | 182 ++-- bench/openjdk/optimized/DrawPath.ll | 178 ++-- bench/openjdk/optimized/genArguments.ll | 170 +-- bench/openusd/optimized/mvref_common.ll | 205 ++-- .../optimized/DetourLocalBoundary.ll | 233 +++-- .../optimized/DetourPathCorridor.ll | 301 +++--- bench/spike/optimized/vfwadd_vf.ll | 27 +- bench/spike/optimized/vloxei16_v.ll | 24 +- bench/sundials/optimized/arkode_interp.ll | 666 ++++++------ .../optimized/468j8mrahlfb4zd02cozu1ma6.ll | 776 +++++++------- 51 files changed, 5480 insertions(+), 5300 deletions(-) diff --git a/bench/abc/optimized/extraUtilMisc.ll b/bench/abc/optimized/extraUtilMisc.ll index f8b3cd5feac..f2a2bb81317 100644 --- a/bench/abc/optimized/extraUtilMisc.ll +++ b/bench/abc/optimized/extraUtilMisc.ll @@ -4374,22 +4374,22 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a %23 = add nuw nsw i64 %22, %21 %24 = trunc i64 %23 to i32 %25 = icmp samesign ult i32 %24, 32 - br i1 %25, label %.preheader.i, label %91 + br i1 %25, label %.preheader.i, label %92 -26: ; preds = %89 +26: ; preds = %90 %27 = add nuw nsw i32 %.01521.i, 1 %exitcond.not.i = icmp eq i32 %27, 10 br i1 %exitcond.not.i, label %Extra_Truth6MinimumRoundMany.exit, label %.preheader.i, !llvm.loop !98 .preheader.i: ; preds = %1, %26 %.01521.i = phi i32 [ %27, %26 ], [ 0, %1 ] - %.01620.i = phi i64 [ %88, %26 ], [ %0, %1 ] + %.01620.i = phi i64 [ %89, %26 ], [ %0, %1 ] br label %28 28: ; preds = %28, %.preheader.i %29 = phi i64 [ -4294967296, %.preheader.i ], [ %31, %28 ] %indvars.iv.i = phi i64 [ 4, %.preheader.i ], [ %indvars.iv.next.i, %28 ] - %.219.i = phi i64 [ %.01620.i, %.preheader.i ], [ %88, %28 ] + %.219.i = phi i64 [ %.01620.i, %.preheader.i ], [ %89, %28 ] %30 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i %31 = load i64, ptr %30, align 8, !tbaa !93 %32 = xor i64 %31, -1 @@ -4449,277 +4449,281 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a %86 = lshr i64 %85, %36 %87 = or i64 %84, %86 %88 = tail call noundef i64 @llvm.umin.i64(i64 %82, i64 %87) + %89 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i, i64 %88) %indvars.iv.next.i = add nsw i64 %indvars.iv.i, -1 %.not.i = icmp eq i64 %indvars.iv.i, 0 - br i1 %.not.i, label %89, label %28, !llvm.loop !99 + br i1 %.not.i, label %90, label %28, !llvm.loop !99 -89: ; preds = %28 - %90 = icmp eq i64 %.01620.i, %88 - br i1 %90, label %Extra_Truth6MinimumRoundMany.exit, label %26 +90: ; preds = %28 + %91 = icmp eq i64 %.01620.i, %89 + br i1 %91, label %Extra_Truth6MinimumRoundMany.exit, label %26 -91: ; preds = %1 +92: ; preds = %1 %.not = icmp eq i32 %24, 32 - br i1 %.not, label %.preheader.i21, label %92 + br i1 %.not, label %.preheader.i21, label %93 -92: ; preds = %91 - %93 = xor i64 %0, -1 +93: ; preds = %92 + %94 = xor i64 %0, -1 br label %.preheader.i11 -94: ; preds = %157 - %95 = add nuw nsw i32 %.01521.i12, 1 - %exitcond.not.i18 = icmp eq i32 %95, 10 +95: ; preds = %159 + %96 = add nuw nsw i32 %.01521.i12, 1 + %exitcond.not.i18 = icmp eq i32 %96, 10 br i1 %exitcond.not.i18, label %Extra_Truth6MinimumRoundMany.exit, label %.preheader.i11, !llvm.loop !98 -.preheader.i11: ; preds = %94, %92 - %.01521.i12 = phi i32 [ 0, %92 ], [ %95, %94 ] - %.01620.i13 = phi i64 [ %93, %92 ], [ %156, %94 ] - br label %96 - -96: ; preds = %96, %.preheader.i11 - %97 = phi i64 [ -4294967296, %.preheader.i11 ], [ %99, %96 ] - %indvars.iv.i14 = phi i64 [ 4, %.preheader.i11 ], [ %indvars.iv.next.i16, %96 ] - %.219.i15 = phi i64 [ %.01620.i13, %.preheader.i11 ], [ %156, %96 ] - %98 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i14 - %99 = load i64, ptr %98, align 8, !tbaa !93 - %100 = xor i64 %99, -1 - %101 = and i64 %.219.i15, %100 - %102 = trunc nuw nsw i64 %indvars.iv.i14 to i32 - %103 = shl nuw i32 1, %102 - %104 = zext i32 %103 to i64 - %105 = shl i64 %101, %104 - %106 = and i64 %99, %.219.i15 - %107 = lshr i64 %106, %104 - %108 = or i64 %105, %107 - %109 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i15, i64 %108) - %110 = xor i64 %97, -1 - %111 = and i64 %.219.i15, %110 - %112 = shl nuw i32 2, %102 - %113 = zext i32 %112 to i64 - %114 = shl i64 %111, %113 - %115 = and i64 %.219.i15, %97 - %116 = lshr i64 %115, %113 - %117 = or i64 %114, %116 - %118 = tail call noundef i64 @llvm.umin.i64(i64 %109, i64 %117) - %119 = and i64 %117, %100 - %120 = shl i64 %119, %104 - %121 = and i64 %117, %99 - %122 = lshr i64 %121, %104 - %123 = or i64 %120, %122 - %124 = tail call noundef i64 @llvm.umin.i64(i64 %118, i64 %123) - %125 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i14 - %126 = load i64, ptr %125, align 8, !tbaa !93 - %127 = and i64 %126, %.219.i15 - %128 = getelementptr inbounds nuw i8, ptr %125, i64 8 - %129 = load i64, ptr %128, align 8, !tbaa !93 - %130 = and i64 %129, %.219.i15 - %131 = shl i64 %130, %104 - %132 = or i64 %131, %127 - %133 = getelementptr inbounds nuw i8, ptr %125, i64 16 - %134 = load i64, ptr %133, align 8, !tbaa !93 - %135 = and i64 %134, %.219.i15 - %136 = lshr i64 %135, %104 - %137 = or i64 %132, %136 - %138 = tail call noundef i64 @llvm.umin.i64(i64 %124, i64 %137) - %139 = and i64 %137, %100 - %140 = shl i64 %139, %104 - %141 = and i64 %137, %99 - %142 = lshr i64 %141, %104 - %143 = or i64 %140, %142 - %144 = tail call noundef i64 @llvm.umin.i64(i64 %138, i64 %143) - %145 = and i64 %137, %110 - %146 = shl i64 %145, %113 - %147 = and i64 %137, %97 - %148 = lshr i64 %147, %113 - %149 = or i64 %146, %148 - %150 = tail call noundef i64 @llvm.umin.i64(i64 %144, i64 %149) - %151 = and i64 %149, %100 - %152 = shl i64 %151, %104 - %153 = and i64 %149, %99 - %154 = lshr i64 %153, %104 - %155 = or i64 %152, %154 - %156 = tail call noundef i64 @llvm.umin.i64(i64 %150, i64 %155) +.preheader.i11: ; preds = %95, %93 + %.01521.i12 = phi i32 [ 0, %93 ], [ %96, %95 ] + %.01620.i13 = phi i64 [ %94, %93 ], [ %158, %95 ] + br label %97 + +97: ; preds = %97, %.preheader.i11 + %98 = phi i64 [ -4294967296, %.preheader.i11 ], [ %100, %97 ] + %indvars.iv.i14 = phi i64 [ 4, %.preheader.i11 ], [ %indvars.iv.next.i16, %97 ] + %.219.i15 = phi i64 [ %.01620.i13, %.preheader.i11 ], [ %158, %97 ] + %99 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i14 + %100 = load i64, ptr %99, align 8, !tbaa !93 + %101 = xor i64 %100, -1 + %102 = and i64 %.219.i15, %101 + %103 = trunc nuw nsw i64 %indvars.iv.i14 to i32 + %104 = shl nuw i32 1, %103 + %105 = zext i32 %104 to i64 + %106 = shl i64 %102, %105 + %107 = and i64 %100, %.219.i15 + %108 = lshr i64 %107, %105 + %109 = or i64 %106, %108 + %110 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i15, i64 %109) + %111 = xor i64 %98, -1 + %112 = and i64 %.219.i15, %111 + %113 = shl nuw i32 2, %103 + %114 = zext i32 %113 to i64 + %115 = shl i64 %112, %114 + %116 = and i64 %.219.i15, %98 + %117 = lshr i64 %116, %114 + %118 = or i64 %115, %117 + %119 = tail call noundef i64 @llvm.umin.i64(i64 %110, i64 %118) + %120 = and i64 %118, %101 + %121 = shl i64 %120, %105 + %122 = and i64 %118, %100 + %123 = lshr i64 %122, %105 + %124 = or i64 %121, %123 + %125 = tail call noundef i64 @llvm.umin.i64(i64 %119, i64 %124) + %126 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i14 + %127 = load i64, ptr %126, align 8, !tbaa !93 + %128 = and i64 %127, %.219.i15 + %129 = getelementptr inbounds nuw i8, ptr %126, i64 8 + %130 = load i64, ptr %129, align 8, !tbaa !93 + %131 = and i64 %130, %.219.i15 + %132 = shl i64 %131, %105 + %133 = or i64 %132, %128 + %134 = getelementptr inbounds nuw i8, ptr %126, i64 16 + %135 = load i64, ptr %134, align 8, !tbaa !93 + %136 = and i64 %135, %.219.i15 + %137 = lshr i64 %136, %105 + %138 = or i64 %133, %137 + %139 = tail call noundef i64 @llvm.umin.i64(i64 %125, i64 %138) + %140 = and i64 %138, %101 + %141 = shl i64 %140, %105 + %142 = and i64 %138, %100 + %143 = lshr i64 %142, %105 + %144 = or i64 %141, %143 + %145 = tail call noundef i64 @llvm.umin.i64(i64 %139, i64 %144) + %146 = and i64 %138, %111 + %147 = shl i64 %146, %114 + %148 = and i64 %138, %98 + %149 = lshr i64 %148, %114 + %150 = or i64 %147, %149 + %151 = tail call noundef i64 @llvm.umin.i64(i64 %145, i64 %150) + %152 = and i64 %150, %101 + %153 = shl i64 %152, %105 + %154 = and i64 %150, %100 + %155 = lshr i64 %154, %105 + %156 = or i64 %153, %155 + %157 = tail call noundef i64 @llvm.umin.i64(i64 %151, i64 %156) + %158 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i15, i64 %157) %indvars.iv.next.i16 = add nsw i64 %indvars.iv.i14, -1 %.not.i17 = icmp eq i64 %indvars.iv.i14, 0 - br i1 %.not.i17, label %157, label %96, !llvm.loop !99 + br i1 %.not.i17, label %159, label %97, !llvm.loop !99 -157: ; preds = %96 - %158 = icmp eq i64 %.01620.i13, %156 - br i1 %158, label %Extra_Truth6MinimumRoundMany.exit, label %94 +159: ; preds = %97 + %160 = icmp eq i64 %.01620.i13, %158 + br i1 %160, label %Extra_Truth6MinimumRoundMany.exit, label %95 -159: ; preds = %222 - %160 = add nuw nsw i32 %.01521.i22, 1 - %exitcond.not.i28 = icmp eq i32 %160, 10 +161: ; preds = %225 + %162 = add nuw nsw i32 %.01521.i22, 1 + %exitcond.not.i28 = icmp eq i32 %162, 10 br i1 %exitcond.not.i28, label %Extra_Truth6MinimumRoundMany.exit30, label %.preheader.i21, !llvm.loop !98 -.preheader.i21: ; preds = %91, %159 - %.01521.i22 = phi i32 [ %160, %159 ], [ 0, %91 ] - %.01620.i23 = phi i64 [ %221, %159 ], [ %0, %91 ] - br label %161 - -161: ; preds = %161, %.preheader.i21 - %162 = phi i64 [ -4294967296, %.preheader.i21 ], [ %164, %161 ] - %indvars.iv.i24 = phi i64 [ 4, %.preheader.i21 ], [ %indvars.iv.next.i26, %161 ] - %.219.i25 = phi i64 [ %.01620.i23, %.preheader.i21 ], [ %221, %161 ] - %163 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i24 - %164 = load i64, ptr %163, align 8, !tbaa !93 - %165 = xor i64 %164, -1 - %166 = and i64 %.219.i25, %165 - %167 = trunc nuw nsw i64 %indvars.iv.i24 to i32 - %168 = shl nuw i32 1, %167 - %169 = zext i32 %168 to i64 - %170 = shl i64 %166, %169 - %171 = and i64 %164, %.219.i25 - %172 = lshr i64 %171, %169 - %173 = or i64 %170, %172 - %174 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i25, i64 %173) - %175 = xor i64 %162, -1 - %176 = and i64 %.219.i25, %175 - %177 = shl nuw i32 2, %167 - %178 = zext i32 %177 to i64 - %179 = shl i64 %176, %178 - %180 = and i64 %.219.i25, %162 - %181 = lshr i64 %180, %178 - %182 = or i64 %179, %181 - %183 = tail call noundef i64 @llvm.umin.i64(i64 %174, i64 %182) - %184 = and i64 %182, %165 - %185 = shl i64 %184, %169 - %186 = and i64 %182, %164 - %187 = lshr i64 %186, %169 - %188 = or i64 %185, %187 - %189 = tail call noundef i64 @llvm.umin.i64(i64 %183, i64 %188) - %190 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i24 - %191 = load i64, ptr %190, align 8, !tbaa !93 - %192 = and i64 %191, %.219.i25 - %193 = getelementptr inbounds nuw i8, ptr %190, i64 8 - %194 = load i64, ptr %193, align 8, !tbaa !93 - %195 = and i64 %194, %.219.i25 - %196 = shl i64 %195, %169 - %197 = or i64 %196, %192 - %198 = getelementptr inbounds nuw i8, ptr %190, i64 16 - %199 = load i64, ptr %198, align 8, !tbaa !93 - %200 = and i64 %199, %.219.i25 - %201 = lshr i64 %200, %169 - %202 = or i64 %197, %201 - %203 = tail call noundef i64 @llvm.umin.i64(i64 %189, i64 %202) - %204 = and i64 %202, %165 - %205 = shl i64 %204, %169 - %206 = and i64 %202, %164 - %207 = lshr i64 %206, %169 - %208 = or i64 %205, %207 - %209 = tail call noundef i64 @llvm.umin.i64(i64 %203, i64 %208) - %210 = and i64 %202, %175 - %211 = shl i64 %210, %178 - %212 = and i64 %202, %162 - %213 = lshr i64 %212, %178 - %214 = or i64 %211, %213 - %215 = tail call noundef i64 @llvm.umin.i64(i64 %209, i64 %214) - %216 = and i64 %214, %165 - %217 = shl i64 %216, %169 - %218 = and i64 %214, %164 - %219 = lshr i64 %218, %169 - %220 = or i64 %217, %219 - %221 = tail call noundef i64 @llvm.umin.i64(i64 %215, i64 %220) +.preheader.i21: ; preds = %92, %161 + %.01521.i22 = phi i32 [ %162, %161 ], [ 0, %92 ] + %.01620.i23 = phi i64 [ %224, %161 ], [ %0, %92 ] + br label %163 + +163: ; preds = %163, %.preheader.i21 + %164 = phi i64 [ -4294967296, %.preheader.i21 ], [ %166, %163 ] + %indvars.iv.i24 = phi i64 [ 4, %.preheader.i21 ], [ %indvars.iv.next.i26, %163 ] + %.219.i25 = phi i64 [ %.01620.i23, %.preheader.i21 ], [ %224, %163 ] + %165 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i24 + %166 = load i64, ptr %165, align 8, !tbaa !93 + %167 = xor i64 %166, -1 + %168 = and i64 %.219.i25, %167 + %169 = trunc nuw nsw i64 %indvars.iv.i24 to i32 + %170 = shl nuw i32 1, %169 + %171 = zext i32 %170 to i64 + %172 = shl i64 %168, %171 + %173 = and i64 %166, %.219.i25 + %174 = lshr i64 %173, %171 + %175 = or i64 %172, %174 + %176 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i25, i64 %175) + %177 = xor i64 %164, -1 + %178 = and i64 %.219.i25, %177 + %179 = shl nuw i32 2, %169 + %180 = zext i32 %179 to i64 + %181 = shl i64 %178, %180 + %182 = and i64 %.219.i25, %164 + %183 = lshr i64 %182, %180 + %184 = or i64 %181, %183 + %185 = tail call noundef i64 @llvm.umin.i64(i64 %176, i64 %184) + %186 = and i64 %184, %167 + %187 = shl i64 %186, %171 + %188 = and i64 %184, %166 + %189 = lshr i64 %188, %171 + %190 = or i64 %187, %189 + %191 = tail call noundef i64 @llvm.umin.i64(i64 %185, i64 %190) + %192 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i24 + %193 = load i64, ptr %192, align 8, !tbaa !93 + %194 = and i64 %193, %.219.i25 + %195 = getelementptr inbounds nuw i8, ptr %192, i64 8 + %196 = load i64, ptr %195, align 8, !tbaa !93 + %197 = and i64 %196, %.219.i25 + %198 = shl i64 %197, %171 + %199 = or i64 %198, %194 + %200 = getelementptr inbounds nuw i8, ptr %192, i64 16 + %201 = load i64, ptr %200, align 8, !tbaa !93 + %202 = and i64 %201, %.219.i25 + %203 = lshr i64 %202, %171 + %204 = or i64 %199, %203 + %205 = tail call noundef i64 @llvm.umin.i64(i64 %191, i64 %204) + %206 = and i64 %204, %167 + %207 = shl i64 %206, %171 + %208 = and i64 %204, %166 + %209 = lshr i64 %208, %171 + %210 = or i64 %207, %209 + %211 = tail call noundef i64 @llvm.umin.i64(i64 %205, i64 %210) + %212 = and i64 %204, %177 + %213 = shl i64 %212, %180 + %214 = and i64 %204, %164 + %215 = lshr i64 %214, %180 + %216 = or i64 %213, %215 + %217 = tail call noundef i64 @llvm.umin.i64(i64 %211, i64 %216) + %218 = and i64 %216, %167 + %219 = shl i64 %218, %171 + %220 = and i64 %216, %166 + %221 = lshr i64 %220, %171 + %222 = or i64 %219, %221 + %223 = tail call noundef i64 @llvm.umin.i64(i64 %217, i64 %222) + %224 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i25, i64 %223) %indvars.iv.next.i26 = add nsw i64 %indvars.iv.i24, -1 %.not.i27 = icmp eq i64 %indvars.iv.i24, 0 - br i1 %.not.i27, label %222, label %161, !llvm.loop !99 + br i1 %.not.i27, label %225, label %163, !llvm.loop !99 -222: ; preds = %161 - %223 = icmp eq i64 %.01620.i23, %221 - br i1 %223, label %Extra_Truth6MinimumRoundMany.exit30, label %159 +225: ; preds = %163 + %226 = icmp eq i64 %.01620.i23, %224 + br i1 %226, label %Extra_Truth6MinimumRoundMany.exit30, label %161 -Extra_Truth6MinimumRoundMany.exit30: ; preds = %159, %222 - %.lcssa.lcssa.i29 = phi i64 [ %.01620.i23, %222 ], [ %221, %159 ] - %224 = xor i64 %0, -1 +Extra_Truth6MinimumRoundMany.exit30: ; preds = %161, %225 + %.lcssa.lcssa.i29 = phi i64 [ %.01620.i23, %225 ], [ %224, %161 ] + %227 = xor i64 %0, -1 br label %.preheader.i31 -225: ; preds = %288 - %226 = add nuw nsw i32 %.01521.i32, 1 - %exitcond.not.i38 = icmp eq i32 %226, 10 +228: ; preds = %292 + %229 = add nuw nsw i32 %.01521.i32, 1 + %exitcond.not.i38 = icmp eq i32 %229, 10 br i1 %exitcond.not.i38, label %Extra_Truth6MinimumRoundMany.exit40, label %.preheader.i31, !llvm.loop !98 -.preheader.i31: ; preds = %225, %Extra_Truth6MinimumRoundMany.exit30 - %.01521.i32 = phi i32 [ 0, %Extra_Truth6MinimumRoundMany.exit30 ], [ %226, %225 ] - %.01620.i33 = phi i64 [ %224, %Extra_Truth6MinimumRoundMany.exit30 ], [ %287, %225 ] - br label %227 - -227: ; preds = %227, %.preheader.i31 - %228 = phi i64 [ -4294967296, %.preheader.i31 ], [ %230, %227 ] - %indvars.iv.i34 = phi i64 [ 4, %.preheader.i31 ], [ %indvars.iv.next.i36, %227 ] - %.219.i35 = phi i64 [ %.01620.i33, %.preheader.i31 ], [ %287, %227 ] - %229 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i34 - %230 = load i64, ptr %229, align 8, !tbaa !93 - %231 = xor i64 %230, -1 - %232 = and i64 %.219.i35, %231 - %233 = trunc nuw nsw i64 %indvars.iv.i34 to i32 - %234 = shl nuw i32 1, %233 - %235 = zext i32 %234 to i64 - %236 = shl i64 %232, %235 - %237 = and i64 %230, %.219.i35 - %238 = lshr i64 %237, %235 - %239 = or i64 %236, %238 - %240 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i35, i64 %239) - %241 = xor i64 %228, -1 - %242 = and i64 %.219.i35, %241 - %243 = shl nuw i32 2, %233 - %244 = zext i32 %243 to i64 - %245 = shl i64 %242, %244 - %246 = and i64 %.219.i35, %228 - %247 = lshr i64 %246, %244 - %248 = or i64 %245, %247 - %249 = tail call noundef i64 @llvm.umin.i64(i64 %240, i64 %248) - %250 = and i64 %248, %231 - %251 = shl i64 %250, %235 - %252 = and i64 %248, %230 - %253 = lshr i64 %252, %235 - %254 = or i64 %251, %253 - %255 = tail call noundef i64 @llvm.umin.i64(i64 %249, i64 %254) - %256 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i34 - %257 = load i64, ptr %256, align 8, !tbaa !93 - %258 = and i64 %257, %.219.i35 - %259 = getelementptr inbounds nuw i8, ptr %256, i64 8 +.preheader.i31: ; preds = %228, %Extra_Truth6MinimumRoundMany.exit30 + %.01521.i32 = phi i32 [ 0, %Extra_Truth6MinimumRoundMany.exit30 ], [ %229, %228 ] + %.01620.i33 = phi i64 [ %227, %Extra_Truth6MinimumRoundMany.exit30 ], [ %291, %228 ] + br label %230 + +230: ; preds = %230, %.preheader.i31 + %231 = phi i64 [ -4294967296, %.preheader.i31 ], [ %233, %230 ] + %indvars.iv.i34 = phi i64 [ 4, %.preheader.i31 ], [ %indvars.iv.next.i36, %230 ] + %.219.i35 = phi i64 [ %.01620.i33, %.preheader.i31 ], [ %291, %230 ] + %232 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i34 + %233 = load i64, ptr %232, align 8, !tbaa !93 + %234 = xor i64 %233, -1 + %235 = and i64 %.219.i35, %234 + %236 = trunc nuw nsw i64 %indvars.iv.i34 to i32 + %237 = shl nuw i32 1, %236 + %238 = zext i32 %237 to i64 + %239 = shl i64 %235, %238 + %240 = and i64 %233, %.219.i35 + %241 = lshr i64 %240, %238 + %242 = or i64 %239, %241 + %243 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i35, i64 %242) + %244 = xor i64 %231, -1 + %245 = and i64 %.219.i35, %244 + %246 = shl nuw i32 2, %236 + %247 = zext i32 %246 to i64 + %248 = shl i64 %245, %247 + %249 = and i64 %.219.i35, %231 + %250 = lshr i64 %249, %247 + %251 = or i64 %248, %250 + %252 = tail call noundef i64 @llvm.umin.i64(i64 %243, i64 %251) + %253 = and i64 %251, %234 + %254 = shl i64 %253, %238 + %255 = and i64 %251, %233 + %256 = lshr i64 %255, %238 + %257 = or i64 %254, %256 + %258 = tail call noundef i64 @llvm.umin.i64(i64 %252, i64 %257) + %259 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i34 %260 = load i64, ptr %259, align 8, !tbaa !93 %261 = and i64 %260, %.219.i35 - %262 = shl i64 %261, %235 - %263 = or i64 %262, %258 - %264 = getelementptr inbounds nuw i8, ptr %256, i64 16 - %265 = load i64, ptr %264, align 8, !tbaa !93 - %266 = and i64 %265, %.219.i35 - %267 = lshr i64 %266, %235 - %268 = or i64 %263, %267 - %269 = tail call noundef i64 @llvm.umin.i64(i64 %255, i64 %268) - %270 = and i64 %268, %231 - %271 = shl i64 %270, %235 - %272 = and i64 %268, %230 - %273 = lshr i64 %272, %235 - %274 = or i64 %271, %273 - %275 = tail call noundef i64 @llvm.umin.i64(i64 %269, i64 %274) - %276 = and i64 %268, %241 - %277 = shl i64 %276, %244 - %278 = and i64 %268, %228 - %279 = lshr i64 %278, %244 - %280 = or i64 %277, %279 - %281 = tail call noundef i64 @llvm.umin.i64(i64 %275, i64 %280) - %282 = and i64 %280, %231 - %283 = shl i64 %282, %235 - %284 = and i64 %280, %230 - %285 = lshr i64 %284, %235 - %286 = or i64 %283, %285 - %287 = tail call noundef i64 @llvm.umin.i64(i64 %281, i64 %286) + %262 = getelementptr inbounds nuw i8, ptr %259, i64 8 + %263 = load i64, ptr %262, align 8, !tbaa !93 + %264 = and i64 %263, %.219.i35 + %265 = shl i64 %264, %238 + %266 = or i64 %265, %261 + %267 = getelementptr inbounds nuw i8, ptr %259, i64 16 + %268 = load i64, ptr %267, align 8, !tbaa !93 + %269 = and i64 %268, %.219.i35 + %270 = lshr i64 %269, %238 + %271 = or i64 %266, %270 + %272 = tail call noundef i64 @llvm.umin.i64(i64 %258, i64 %271) + %273 = and i64 %271, %234 + %274 = shl i64 %273, %238 + %275 = and i64 %271, %233 + %276 = lshr i64 %275, %238 + %277 = or i64 %274, %276 + %278 = tail call noundef i64 @llvm.umin.i64(i64 %272, i64 %277) + %279 = and i64 %271, %244 + %280 = shl i64 %279, %247 + %281 = and i64 %271, %231 + %282 = lshr i64 %281, %247 + %283 = or i64 %280, %282 + %284 = tail call noundef i64 @llvm.umin.i64(i64 %278, i64 %283) + %285 = and i64 %283, %234 + %286 = shl i64 %285, %238 + %287 = and i64 %283, %233 + %288 = lshr i64 %287, %238 + %289 = or i64 %286, %288 + %290 = tail call noundef i64 @llvm.umin.i64(i64 %284, i64 %289) + %291 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i35, i64 %290) %indvars.iv.next.i36 = add nsw i64 %indvars.iv.i34, -1 %.not.i37 = icmp eq i64 %indvars.iv.i34, 0 - br i1 %.not.i37, label %288, label %227, !llvm.loop !99 + br i1 %.not.i37, label %292, label %230, !llvm.loop !99 -288: ; preds = %227 - %289 = icmp eq i64 %.01620.i33, %287 - br i1 %289, label %Extra_Truth6MinimumRoundMany.exit40, label %225 +292: ; preds = %230 + %293 = icmp eq i64 %.01620.i33, %291 + br i1 %293, label %Extra_Truth6MinimumRoundMany.exit40, label %228 -Extra_Truth6MinimumRoundMany.exit40: ; preds = %225, %288 - %.lcssa.lcssa.i39 = phi i64 [ %.01620.i33, %288 ], [ %287, %225 ] - %290 = tail call noundef i64 @llvm.umin.i64(i64 %.lcssa.lcssa.i29, i64 %.lcssa.lcssa.i39) +Extra_Truth6MinimumRoundMany.exit40: ; preds = %228, %292 + %.lcssa.lcssa.i39 = phi i64 [ %.01620.i33, %292 ], [ %291, %228 ] + %294 = tail call noundef i64 @llvm.umin.i64(i64 %.lcssa.lcssa.i29, i64 %.lcssa.lcssa.i39) br label %Extra_Truth6MinimumRoundMany.exit -Extra_Truth6MinimumRoundMany.exit: ; preds = %157, %94, %89, %26, %Extra_Truth6MinimumRoundMany.exit40 - %.0 = phi i64 [ %290, %Extra_Truth6MinimumRoundMany.exit40 ], [ %88, %26 ], [ %.01620.i, %89 ], [ %156, %94 ], [ %.01620.i13, %157 ] +Extra_Truth6MinimumRoundMany.exit: ; preds = %159, %95, %90, %26, %Extra_Truth6MinimumRoundMany.exit40 + %.0 = phi i64 [ %294, %Extra_Truth6MinimumRoundMany.exit40 ], [ %89, %26 ], [ %.01620.i, %90 ], [ %158, %95 ], [ %.01620.i13, %159 ] ret i64 %.0 } diff --git a/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll b/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll index e01d7fd9633..142b8459b2d 100644 --- a/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll +++ b/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll @@ -28,221 +28,223 @@ define dso_local noundef zeroext i8 @_ZN4absl16strings_internal32CappedDamerauLe %14 = icmp ult i64 %13, %.sroa.0.0 %15 = icmp ugt i64 %.sroa.0.0, 100 %or.cond89 = or i1 %15, %14 - br i1 %or.cond89, label %115, label %16 + br i1 %or.cond89, label %117, label %16 16: ; preds = %11 %17 = icmp eq i64 %.sroa.080.0, 0 - br i1 %17, label %18, label %.lr.ph.i.preheader + br i1 %17, label %18, label %20 18: ; preds = %16 %19 = trunc nuw nsw i64 %.sroa.0.0 to i8 - br label %115 + br label %117 -.lr.ph.i.preheader: ; preds = %16 +20: ; preds = %16 + %.neg = sub i64 %.sroa.080.0, %.sroa.0.0 + %.neg63 = trunc i64 %.neg to i8 + %21 = add i8 %.sroa.speculated, %.neg63 call void @llvm.lifetime.start.p0(i64 10404, ptr nonnull %6) #3 - %20 = getelementptr inbounds nuw i8, ptr %6, i64 %12 - br label %.lr.ph.i - -.lr.ph.i: ; preds = %.lr.ph.i.preheader, %.lr.ph.i - %.08.i = phi i8 [ %21, %.lr.ph.i ], [ 0, %.lr.ph.i.preheader ] - %.057.i = phi ptr [ %22, %.lr.ph.i ], [ %6, %.lr.ph.i.preheader ] + %22 = getelementptr inbounds nuw i8, ptr %6, i64 %12 + %23 = getelementptr inbounds nuw i8, ptr %22, i64 1 + %.not6.i = icmp eq ptr %6, %23 + br i1 %.not6.i, label %.lr.ph96, label %.lr.ph.i + +.lr.ph.i: ; preds = %20, %.lr.ph.i + %.08.i = phi i8 [ %24, %.lr.ph.i ], [ 0, %20 ] + %.057.i = phi ptr [ %25, %.lr.ph.i ], [ %6, %20 ] store i8 %.08.i, ptr %.057.i, align 1, !tbaa !4 - %21 = add nuw nsw i8 %.08.i, 1 - %22 = getelementptr inbounds nuw i8, ptr %.057.i, i64 1 - %.not.i = icmp eq ptr %.057.i, %20 + %24 = add nuw nsw i8 %.08.i, 1 + %25 = getelementptr inbounds nuw i8, ptr %.057.i, i64 1 + %.not.i = icmp eq ptr %.057.i, %22 br i1 %.not.i, label %.lr.ph96, label %.lr.ph.i, !llvm.loop !7 -.lr.ph96: ; preds = %.lr.ph.i - %23 = zext nneg i8 %8 to i64 - %24 = getelementptr inbounds nuw [102 x i8], ptr %6, i64 0, i64 %23 - store i8 %8, ptr %24, align 1, !tbaa !4 - %.neg = sub i64 %.sroa.080.0, %.sroa.0.0 - %.neg63 = trunc i64 %.neg to i8 - %25 = add i8 %.sroa.speculated, %.neg63 - %26 = zext i8 %25 to i64 +.lr.ph96: ; preds = %.lr.ph.i, %20 + %26 = zext nneg i8 %8 to i64 + %27 = getelementptr inbounds nuw [102 x i8], ptr %6, i64 0, i64 %26 + store i8 %8, ptr %27, align 1, !tbaa !4 + %28 = zext i8 %21 to i64 %.ptr91 = getelementptr inbounds nuw i8, ptr %7, i64 1 - %27 = getelementptr inbounds nuw i8, ptr %7, i64 2 - %28 = getelementptr inbounds nuw i8, ptr %7, i64 3 - %29 = getelementptr inbounds nuw i8, ptr %7, i64 4 - br label %33 + %29 = getelementptr inbounds nuw i8, ptr %7, i64 2 + %30 = getelementptr inbounds nuw i8, ptr %7, i64 3 + %31 = getelementptr inbounds nuw i8, ptr %7, i64 4 + br label %35 ._crit_edge97: ; preds = %._crit_edge - %30 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.sroa.080.0 - %31 = getelementptr inbounds nuw [102 x i8], ptr %30, i64 0, i64 %.sroa.0.0 - %32 = load i8, ptr %31, align 1, !tbaa !4 + %32 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.sroa.080.0 + %33 = getelementptr inbounds nuw [102 x i8], ptr %32, i64 0, i64 %.sroa.0.0 + %34 = load i8, ptr %33, align 1, !tbaa !4 call void @llvm.lifetime.end.p0(i64 10404, ptr nonnull %6) #3 - br label %115 - -33: ; preds = %.lr.ph96, %._crit_edge - %.05795 = phi i64 [ 1, %.lr.ph96 ], [ %79, %._crit_edge ] - %34 = icmp ugt i64 %.05795, %26 - %35 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 - br i1 %34, label %36, label %40 - -36: ; preds = %33 - %37 = sub nuw i64 %.05795, %26 - %38 = add i64 %37, -1 - %39 = getelementptr inbounds nuw [102 x i8], ptr %35, i64 0, i64 %38 - store i8 %8, ptr %39, align 1, !tbaa !4 - br label %42 - -40: ; preds = %33 - %41 = trunc nuw i64 %.05795 to i8 - store i8 %41, ptr %35, align 1, !tbaa !4 - br label %42 - -42: ; preds = %40, %36 - %.058 = phi i64 [ %37, %36 ], [ 1, %40 ] - %43 = add i64 %.05795, %12 - %44 = icmp ugt i64 %43, %.sroa.0.0 - br i1 %44, label %49, label %45 - -45: ; preds = %42 - %46 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 - %47 = add i64 %43, 1 - %48 = getelementptr inbounds nuw [102 x i8], ptr %46, i64 0, i64 %47 - store i8 %8, ptr %48, align 1, !tbaa !4 - br label %49 - -49: ; preds = %42, %45 - %.059 = phi i64 [ %43, %45 ], [ %.sroa.0.0, %42 ] + br label %117 + +35: ; preds = %.lr.ph96, %._crit_edge + %.05795 = phi i64 [ 1, %.lr.ph96 ], [ %81, %._crit_edge ] + %36 = icmp ugt i64 %.05795, %28 + %37 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 + br i1 %36, label %38, label %42 + +38: ; preds = %35 + %39 = sub nuw i64 %.05795, %28 + %40 = add i64 %39, -1 + %41 = getelementptr inbounds nuw [102 x i8], ptr %37, i64 0, i64 %40 + store i8 %8, ptr %41, align 1, !tbaa !4 + br label %44 + +42: ; preds = %35 + %43 = trunc nuw i64 %.05795 to i8 + store i8 %43, ptr %37, align 1, !tbaa !4 + br label %44 + +44: ; preds = %42, %38 + %.058 = phi i64 [ %39, %38 ], [ 1, %42 ] + %45 = add i64 %.05795, %12 + %46 = icmp ugt i64 %45, %.sroa.0.0 + br i1 %46, label %51, label %47 + +47: ; preds = %44 + %48 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 + %49 = add i64 %45, 1 + %50 = getelementptr inbounds nuw [102 x i8], ptr %48, i64 0, i64 %49 + store i8 %8, ptr %50, align 1, !tbaa !4 + br label %51 + +51: ; preds = %44, %47 + %.059 = phi i64 [ %45, %47 ], [ %.sroa.0.0, %44 ] %.not6492 = icmp ugt i64 %.058, %.059 br i1 %.not6492, label %._crit_edge, label %.lr.ph -.lr.ph: ; preds = %49 - %50 = add i64 %.05795, -1 - %51 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %50 - %52 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 - %53 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %50 - %54 = icmp ugt i64 %.05795, 1 - %55 = add i64 %.05795, -2 - %56 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %55 - %57 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %55 - %.pre99 = load i8, ptr %53, align 1, !tbaa !4 - br i1 %54, label %.lr.ph.split, label %.lr.ph.split.us +.lr.ph: ; preds = %51 + %52 = add i64 %.05795, -1 + %53 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %52 + %54 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 + %55 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %52 + %56 = icmp ugt i64 %.05795, 1 + %57 = add i64 %.05795, -2 + %58 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %57 + %59 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %57 + %.pre99 = load i8, ptr %55, align 1, !tbaa !4 + br i1 %56, label %.lr.ph.split, label %.lr.ph.split.us .lr.ph.split.us: ; preds = %.lr.ph, %_ZSt3minIhET_St16initializer_listIS0_E.exit.us - %.06093.us = phi i64 [ %78, %_ZSt3minIhET_St16initializer_listIS0_E.exit.us ], [ %.058, %.lr.ph ] - %58 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %.06093.us - %59 = load i8, ptr %58, align 1, !tbaa !4 - %60 = add i8 %59, 1 - %61 = add i64 %.06093.us, -1 - %62 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %61 - %63 = load i8, ptr %62, align 1, !tbaa !4 - %64 = add i8 %63, 1 - %65 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %61 - %66 = load i8, ptr %65, align 1, !tbaa !4 - %67 = icmp ne i8 %.pre99, %66 - %68 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %61 - %69 = load i8, ptr %68, align 1, !tbaa !4 - %70 = zext i1 %67 to i8 - %71 = add i8 %69, %70 + %.06093.us = phi i64 [ %80, %_ZSt3minIhET_St16initializer_listIS0_E.exit.us ], [ %.058, %.lr.ph ] + %60 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %.06093.us + %61 = load i8, ptr %60, align 1, !tbaa !4 + %62 = add i8 %61, 1 + %63 = add i64 %.06093.us, -1 + %64 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %63 + %65 = load i8, ptr %64, align 1, !tbaa !4 + %66 = add i8 %65, 1 + %67 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %63 + %68 = load i8, ptr %67, align 1, !tbaa !4 + %69 = icmp ne i8 %.pre99, %68 + %70 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %63 + %71 = load i8, ptr %70, align 1, !tbaa !4 + %72 = zext i1 %69 to i8 + %73 = add i8 %71, %72 call void @llvm.lifetime.start.p0(i64 5, ptr nonnull %7) #3 store i8 %8, ptr %7, align 1, !tbaa !4 - store i8 %60, ptr %.ptr91, align 1, !tbaa !4 - store i8 %64, ptr %27, align 1, !tbaa !4 - store i8 %71, ptr %28, align 1, !tbaa !4 - store i8 %8, ptr %29, align 1, !tbaa !4 + store i8 %62, ptr %.ptr91, align 1, !tbaa !4 + store i8 %66, ptr %29, align 1, !tbaa !4 + store i8 %73, ptr %30, align 1, !tbaa !4 + store i8 %8, ptr %31, align 1, !tbaa !4 br label %.lr.ph.i.i.us .lr.ph.i.i.us: ; preds = %.lr.ph.i.i.us, %.lr.ph.split.us - %72 = phi i8 [ %75, %.lr.ph.i.i.us ], [ %8, %.lr.ph.split.us ] + %74 = phi i8 [ %77, %.lr.ph.i.i.us ], [ %8, %.lr.ph.split.us ] %.idx.us = phi i64 [ %.add.us, %.lr.ph.i.i.us ], [ 1, %.lr.ph.split.us ] %.018.i.i.us = phi ptr [ %spec.select.i.i.us, %.lr.ph.i.i.us ], [ %7, %.lr.ph.split.us ] %.ptr.us = getelementptr inbounds nuw i8, ptr %7, i64 %.idx.us - %73 = load i8, ptr %.ptr.us, align 1, !tbaa !4 - %74 = icmp ult i8 %73, %72 - %75 = call i8 @llvm.umin.i8(i8 %73, i8 %72) - %spec.select.i.i.us = select i1 %74, ptr %.ptr.us, ptr %.018.i.i.us + %75 = load i8, ptr %.ptr.us, align 1, !tbaa !4 + %76 = icmp ult i8 %75, %74 + %77 = call i8 @llvm.umin.i8(i8 %75, i8 %74) + %spec.select.i.i.us = select i1 %76, ptr %.ptr.us, ptr %.018.i.i.us %.add.us = add nuw nsw i64 %.idx.us, 1 %.not.i.i.us = icmp eq i64 %.add.us, 5 br i1 %.not.i.i.us, label %_ZSt3minIhET_St16initializer_listIS0_E.exit.us, label %.lr.ph.i.i.us, !llvm.loop !9 _ZSt3minIhET_St16initializer_listIS0_E.exit.us: ; preds = %.lr.ph.i.i.us - %76 = load i8, ptr %spec.select.i.i.us, align 1, !tbaa !4 - %77 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %.06093.us - store i8 %76, ptr %77, align 1, !tbaa !4 + %78 = load i8, ptr %spec.select.i.i.us, align 1, !tbaa !4 + %79 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %.06093.us + store i8 %78, ptr %79, align 1, !tbaa !4 call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %7) #3 - %78 = add i64 %.06093.us, 1 - %.not64.us = icmp ugt i64 %78, %.059 + %80 = add i64 %.06093.us, 1 + %.not64.us = icmp ugt i64 %80, %.059 br i1 %.not64.us, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !10 -._crit_edge: ; preds = %_ZSt3minIhET_St16initializer_listIS0_E.exit.us, %_ZSt3minIhET_St16initializer_listIS0_E.exit, %49 - %79 = add nuw i64 %.05795, 1 - %.not.not = icmp ult i64 %.05795, %.sroa.080.0 - br i1 %.not.not, label %33, label %._crit_edge97, !llvm.loop !11 +._crit_edge: ; preds = %_ZSt3minIhET_St16initializer_listIS0_E.exit.us, %_ZSt3minIhET_St16initializer_listIS0_E.exit, %51 + %81 = add i64 %.05795, 1 + %.not = icmp ugt i64 %81, %.sroa.080.0 + br i1 %.not, label %._crit_edge97, label %35, !llvm.loop !11 .lr.ph.split: ; preds = %.lr.ph, %_ZSt3minIhET_St16initializer_listIS0_E.exit - %.06093 = phi i64 [ %114, %_ZSt3minIhET_St16initializer_listIS0_E.exit ], [ %.058, %.lr.ph ] - %80 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %.06093 - %81 = load i8, ptr %80, align 1, !tbaa !4 - %82 = add i8 %81, 1 - %83 = add i64 %.06093, -1 - %84 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %83 - %85 = load i8, ptr %84, align 1, !tbaa !4 - %86 = add i8 %85, 1 - %87 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %83 - %88 = load i8, ptr %87, align 1, !tbaa !4 - %89 = icmp ne i8 %.pre99, %88 - %90 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %83 - %91 = load i8, ptr %90, align 1, !tbaa !4 - %92 = zext i1 %89 to i8 - %93 = add i8 %91, %92 - %94 = icmp ugt i64 %.06093, 1 - br i1 %94, label %95, label %107 - -95: ; preds = %.lr.ph.split - %96 = add i64 %.06093, -2 - %97 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %96 - %98 = load i8, ptr %97, align 1, !tbaa !4 - %99 = icmp eq i8 %.pre99, %98 - br i1 %99, label %100, label %107 - -100: ; preds = %95 - %101 = load i8, ptr %56, align 1, !tbaa !4 - %102 = icmp eq i8 %101, %88 - br i1 %102, label %103, label %107 - -103: ; preds = %100 - %104 = getelementptr inbounds nuw [102 x i8], ptr %57, i64 0, i64 %96 - %105 = load i8, ptr %104, align 1, !tbaa !4 - %106 = add i8 %105, 1 - br label %107 - -107: ; preds = %103, %100, %95, %.lr.ph.split - %.056 = phi i8 [ %106, %103 ], [ %8, %100 ], [ %8, %95 ], [ %8, %.lr.ph.split ] + %.06093 = phi i64 [ %116, %_ZSt3minIhET_St16initializer_listIS0_E.exit ], [ %.058, %.lr.ph ] + %82 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %.06093 + %83 = load i8, ptr %82, align 1, !tbaa !4 + %84 = add i8 %83, 1 + %85 = add i64 %.06093, -1 + %86 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %85 + %87 = load i8, ptr %86, align 1, !tbaa !4 + %88 = add i8 %87, 1 + %89 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %85 + %90 = load i8, ptr %89, align 1, !tbaa !4 + %91 = icmp ne i8 %.pre99, %90 + %92 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %85 + %93 = load i8, ptr %92, align 1, !tbaa !4 + %94 = zext i1 %91 to i8 + %95 = add i8 %93, %94 + %96 = icmp ugt i64 %.06093, 1 + br i1 %96, label %97, label %109 + +97: ; preds = %.lr.ph.split + %98 = add i64 %.06093, -2 + %99 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %98 + %100 = load i8, ptr %99, align 1, !tbaa !4 + %101 = icmp eq i8 %.pre99, %100 + br i1 %101, label %102, label %109 + +102: ; preds = %97 + %103 = load i8, ptr %58, align 1, !tbaa !4 + %104 = icmp eq i8 %103, %90 + br i1 %104, label %105, label %109 + +105: ; preds = %102 + %106 = getelementptr inbounds nuw [102 x i8], ptr %59, i64 0, i64 %98 + %107 = load i8, ptr %106, align 1, !tbaa !4 + %108 = add i8 %107, 1 + br label %109 + +109: ; preds = %105, %102, %97, %.lr.ph.split + %.056 = phi i8 [ %108, %105 ], [ %8, %102 ], [ %8, %97 ], [ %8, %.lr.ph.split ] call void @llvm.lifetime.start.p0(i64 5, ptr nonnull %7) #3 store i8 %8, ptr %7, align 1, !tbaa !4 - store i8 %82, ptr %.ptr91, align 1, !tbaa !4 - store i8 %86, ptr %27, align 1, !tbaa !4 - store i8 %93, ptr %28, align 1, !tbaa !4 - store i8 %.056, ptr %29, align 1, !tbaa !4 + store i8 %84, ptr %.ptr91, align 1, !tbaa !4 + store i8 %88, ptr %29, align 1, !tbaa !4 + store i8 %95, ptr %30, align 1, !tbaa !4 + store i8 %.056, ptr %31, align 1, !tbaa !4 br label %.lr.ph.i.i -.lr.ph.i.i: ; preds = %.lr.ph.i.i, %107 - %108 = phi i8 [ %111, %.lr.ph.i.i ], [ %8, %107 ] - %.idx = phi i64 [ %.add, %.lr.ph.i.i ], [ 1, %107 ] - %.018.i.i = phi ptr [ %spec.select.i.i, %.lr.ph.i.i ], [ %7, %107 ] +.lr.ph.i.i: ; preds = %.lr.ph.i.i, %109 + %110 = phi i8 [ %113, %.lr.ph.i.i ], [ %8, %109 ] + %.idx = phi i64 [ %.add, %.lr.ph.i.i ], [ 1, %109 ] + %.018.i.i = phi ptr [ %spec.select.i.i, %.lr.ph.i.i ], [ %7, %109 ] %.ptr = getelementptr inbounds nuw i8, ptr %7, i64 %.idx - %109 = load i8, ptr %.ptr, align 1, !tbaa !4 - %110 = icmp ult i8 %109, %108 - %111 = call i8 @llvm.umin.i8(i8 %109, i8 %108) - %spec.select.i.i = select i1 %110, ptr %.ptr, ptr %.018.i.i + %111 = load i8, ptr %.ptr, align 1, !tbaa !4 + %112 = icmp ult i8 %111, %110 + %113 = call i8 @llvm.umin.i8(i8 %111, i8 %110) + %spec.select.i.i = select i1 %112, ptr %.ptr, ptr %.018.i.i %.add = add nuw nsw i64 %.idx, 1 %.not.i.i = icmp eq i64 %.add, 5 br i1 %.not.i.i, label %_ZSt3minIhET_St16initializer_listIS0_E.exit, label %.lr.ph.i.i, !llvm.loop !9 _ZSt3minIhET_St16initializer_listIS0_E.exit: ; preds = %.lr.ph.i.i - %112 = load i8, ptr %spec.select.i.i, align 1, !tbaa !4 - %113 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %.06093 - store i8 %112, ptr %113, align 1, !tbaa !4 + %114 = load i8, ptr %spec.select.i.i, align 1, !tbaa !4 + %115 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %.06093 + store i8 %114, ptr %115, align 1, !tbaa !4 call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %7) #3 - %114 = add i64 %.06093, 1 - %.not64 = icmp ugt i64 %114, %.059 + %116 = add i64 %.06093, 1 + %.not64 = icmp ugt i64 %116, %.059 br i1 %.not64, label %._crit_edge, label %.lr.ph.split, !llvm.loop !10 -115: ; preds = %11, %._crit_edge97, %18 - %.0 = phi i8 [ %19, %18 ], [ %32, %._crit_edge97 ], [ %8, %11 ] +117: ; preds = %11, %._crit_edge97, %18 + %.0 = phi i8 [ %19, %18 ], [ %34, %._crit_edge97 ], [ %8, %11 ] ret i8 %.0 } diff --git a/bench/ceres/optimized/block_jacobi_preconditioner.ll b/bench/ceres/optimized/block_jacobi_preconditioner.ll index 19f07ac3fe0..890a5621e65 100644 --- a/bench/ceres/optimized/block_jacobi_preconditioner.ll +++ b/bench/ceres/optimized/block_jacobi_preconditioner.ll @@ -16066,8 +16066,9 @@ _ZN5Eigen8internal23check_size_for_overflowIdEEvm.exit: ; preds = %_ZN5Eigen8int %120 = mul nsw i64 %.sroa.speculated130.us, %77 %121 = getelementptr inbounds double, ptr %67, i64 %120 %122 = sub nsw i64 %0, %.sroa.speculated130.us + %.sroa.speculated.us = call i64 @llvm.smax.i64(i64 %122, i64 0) %123 = load double, ptr %9, align 8, !tbaa !139 - invoke void @_ZN5Eigen8internal11gebp_kernelIddlNS0_16blas_data_mapperIdlLi0ELi0ELi1EEELi4ELi4ELb0ELb0EEclERKS3_PKdS8_llldllll(ptr noundef nonnull align 1 dereferenceable(1) %19, ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef nonnull %47, ptr noundef nonnull %121, i64 noundef %82, i64 noundef %77, i64 noundef %122, double noundef %123, i64 noundef -1, i64 noundef -1, i64 noundef 0, i64 noundef 0) + invoke void @_ZN5Eigen8internal11gebp_kernelIddlNS0_16blas_data_mapperIdlLi0ELi0ELi1EEELi4ELi4ELb0ELb0EEclERKS3_PKdS8_llldllll(ptr noundef nonnull align 1 dereferenceable(1) %19, ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef nonnull %47, ptr noundef nonnull %121, i64 noundef %82, i64 noundef %77, i64 noundef %.sroa.speculated.us, double noundef %123, i64 noundef -1, i64 noundef -1, i64 noundef 0, i64 noundef 0) to label %124 unwind label %.split185.us 124: ; preds = %.loopexit.us diff --git a/bench/coreutils-rs/optimized/505489it2i89bi1c.ll b/bench/coreutils-rs/optimized/505489it2i89bi1c.ll index 5f5efa16ff9..78d5376747c 100644 --- a/bench/coreutils-rs/optimized/505489it2i89bi1c.ll +++ b/bench/coreutils-rs/optimized/505489it2i89bi1c.ll @@ -13,6 +13,7 @@ target triple = "x86_64-unknown-linux-gnu" @anon.da842841755b59d00e4ceb51b0ca2ba9.18.llvm.3769632144542507335 = hidden unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.da842841755b59d00e4ceb51b0ca2ba9.17.llvm.3769632144542507335, [16 x i8] c"\19\00\00\00\00\00\00\00+\00\00\00\0F\00\00\00" }>, align 8 @anon.da842841755b59d00e4ceb51b0ca2ba9.19.llvm.3769632144542507335 = hidden unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.da842841755b59d00e4ceb51b0ca2ba9.17.llvm.3769632144542507335, [16 x i8] c"\19\00\00\00\00\00\00\00+\00\00\00\17\00\00\00" }>, align 8 @anon.da842841755b59d00e4ceb51b0ca2ba9.20.llvm.3769632144542507335 = hidden unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.da842841755b59d00e4ceb51b0ca2ba9.17.llvm.3769632144542507335, [16 x i8] c"\19\00\00\00\00\00\00\005\00\00\00\15\00\00\00" }>, align 8 +@anon.da842841755b59d00e4ceb51b0ca2ba9.24 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.da842841755b59d00e4ceb51b0ca2ba9.17.llvm.3769632144542507335, [16 x i8] c"\19\00\00\00\00\00\00\00C\00\00\00#\00\00\00" }>, align 8 @anon.da842841755b59d00e4ceb51b0ca2ba9.25 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.da842841755b59d00e4ceb51b0ca2ba9.17.llvm.3769632144542507335, [16 x i8] c"\19\00\00\00\00\00\00\00T\00\00\00\22\00\00\00" }>, align 8 @anon.da842841755b59d00e4ceb51b0ca2ba9.26 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.da842841755b59d00e4ceb51b0ca2ba9.17.llvm.3769632144542507335, [16 x i8] c"\19\00\00\00\00\00\00\00L\00\00\00P\00\00\00" }>, align 8 @anon.da842841755b59d00e4ceb51b0ca2ba9.27 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @anon.da842841755b59d00e4ceb51b0ca2ba9.17.llvm.3769632144542507335, [16 x i8] c"\19\00\00\00\00\00\00\00?\00\00\00-\00\00\00" }>, align 8 @@ -745,7 +746,7 @@ define hidden { i64, i8 } @_ZN5uu_wc4utf810Incomplete20try_complete_offsets17h99 %6 = load i8, ptr %5, align 1, !noundef !16 %7 = zext i8 %6 to i64 %8 = icmp ugt i8 %6, 4 - br i1 %8, label %13, label %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" + br i1 %8, label %15, label %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" "_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit": ; preds = %3 %9 = sub nuw nsw i64 4, %7 @@ -753,57 +754,65 @@ define hidden { i64, i8 } @_ZN5uu_wc4utf810Incomplete20try_complete_offsets17h99 %.0.sroa.speculated.i = tail call noundef i64 @llvm.umin.i64(i64 %9, i64 %2) tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %10, ptr nonnull readonly align 1 %1, i64 %.0.sroa.speculated.i, i1 false), !alias.scope !101, !noalias !105 %11 = add nuw nsw i64 %.0.sroa.speculated.i, %7 + %12 = icmp samesign ugt i64 %11, 4 + br i1 %12, label %13, label %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" + +13: ; preds = %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" + tail call void @_ZN4core5slice5index24slice_end_index_len_fail17h334e37603831ab29E(i64 noundef %11, i64 noundef 4, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.da842841755b59d00e4ceb51b0ca2ba9.24) #20, !noalias !107 + unreachable + +"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit": ; preds = %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) call void @_ZN4core3str8converts9from_utf817hca39c4a07e0467cbE(ptr noalias noundef nonnull sret({ i64, [2 x i64] }) align 8 captures(none) dereferenceable(24) %4, ptr noalias noundef nonnull readonly align 1 %0, i64 noundef %11) - %12 = load i64, ptr %4, align 8, !range !107, !noundef !16 - %trunc = trunc nuw i64 %12 to i1 - br i1 %trunc, label %14, label %16 + %14 = load i64, ptr %4, align 8, !range !110, !noundef !16 + %trunc = trunc nuw i64 %14 to i1 + br i1 %trunc, label %16, label %18 -13: ; preds = %3 +15: ; preds = %3 tail call void @_ZN4core5slice5index26slice_start_index_len_fail17h6f35008186d11abeE(i64 noundef %7, i64 noundef 4, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.da842841755b59d00e4ceb51b0ca2ba9.27) #20 unreachable -14: ; preds = %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" - %15 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %.sroa.01.0.copyload = load i64, ptr %15, align 8 +16: ; preds = %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" + %17 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %.sroa.01.0.copyload = load i64, ptr %17, align 8 %.not = icmp eq i64 %.sroa.01.0.copyload, 0 - br i1 %.not, label %19, label %20 + br i1 %.not, label %21, label %22 -16: ; preds = %19, %22, %20, %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" - %storemerge.in26 = phi i64 [ %11, %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" ], [ %11, %19 ], [ %23, %22 ], [ %.sroa.01.0.copyload, %20 ] - %.sroa.5.0 = phi i8 [ 0, %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" ], [ 2, %19 ], [ 1, %22 ], [ 0, %20 ] - %.sroa.0.0 = phi i64 [ %.0.sroa.speculated.i, %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" ], [ %.0.sroa.speculated.i, %19 ], [ %24, %22 ], [ %21, %20 ] +18: ; preds = %21, %24, %22, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" + %storemerge.in26 = phi i64 [ %11, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ %11, %21 ], [ %25, %24 ], [ %.sroa.01.0.copyload, %22 ] + %.sroa.5.0 = phi i8 [ 0, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ 2, %21 ], [ 1, %24 ], [ 0, %22 ] + %.sroa.0.0 = phi i64 [ %.0.sroa.speculated.i, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ %.0.sroa.speculated.i, %21 ], [ %26, %24 ], [ %23, %22 ] %storemerge = trunc i64 %storemerge.in26 to i8 store i8 %storemerge, ptr %5, align 1 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) - %17 = insertvalue { i64, i8 } poison, i64 %.sroa.0.0, 0 - %18 = insertvalue { i64, i8 } %17, i8 %.sroa.5.0, 1 - ret { i64, i8 } %18 + %19 = insertvalue { i64, i8 } poison, i64 %.sroa.0.0, 0 + %20 = insertvalue { i64, i8 } %19, i8 %.sroa.5.0, 1 + ret { i64, i8 } %20 -19: ; preds = %14 +21: ; preds = %16 %.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %4, i64 16 %.sroa.4.0.copyload = load i8, ptr %.sroa.4.0..sroa_idx, align 8 %trunc21 = trunc i8 %.sroa.4.0.copyload to i1 - br i1 %trunc21, label %22, label %16 + br i1 %trunc21, label %24, label %18 -20: ; preds = %14 - %21 = sub i64 %.sroa.01.0.copyload, %7 +22: ; preds = %16 + %23 = sub i64 %.sroa.01.0.copyload, %7 %.not32 = icmp ult i64 %.sroa.01.0.copyload, %7 - br i1 %.not32, label %26, label %16 + br i1 %.not32, label %28, label %18 -22: ; preds = %19 +24: ; preds = %21 %.sroa.52.0..sroa_idx = getelementptr inbounds nuw i8, ptr %4, i64 17 %.sroa.52.0.copyload = load i8, ptr %.sroa.52.0..sroa_idx, align 1 - %23 = zext i8 %.sroa.52.0.copyload to i64 - %24 = sub nsw i64 %23, %7 + %25 = zext i8 %.sroa.52.0.copyload to i64 + %26 = sub nsw i64 %25, %7 %.not33 = icmp ult i8 %.sroa.52.0.copyload, %6 - br i1 %.not33, label %25, label %16 + br i1 %.not33, label %27, label %18 -25: ; preds = %22 +27: ; preds = %24 tail call void @_ZN4core6option13unwrap_failed17hcb3a256a9f1ca882E(ptr noalias noundef readonly align 8 dereferenceable(24) @anon.da842841755b59d00e4ceb51b0ca2ba9.25) #20 unreachable -26: ; preds = %20 +28: ; preds = %22 tail call void @_ZN4core6option13unwrap_failed17hcb3a256a9f1ca882E(ptr noalias noundef readonly align 8 dereferenceable(24) @anon.da842841755b59d00e4ceb51b0ca2ba9.26) #20 unreachable } @@ -856,19 +865,19 @@ define void @"_ZN76_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith %.sroa.64.0.copyload = load i64, ptr %.sroa.64.0..sroa_idx, align 8 %.sroa.75.0..sroa_idx = getelementptr inbounds nuw i8, ptr %0, i64 32 %.sroa.75.0.copyload = load i64, ptr %.sroa.75.0..sroa_idx, align 8 - %3 = load i64, ptr %1, align 8, !alias.scope !108, !noalias !111, !noundef !16 + %3 = load i64, ptr %1, align 8, !alias.scope !111, !noalias !114, !noundef !16 %4 = add i64 %3, %.sroa.01.0.copyload %5 = getelementptr inbounds nuw i8, ptr %1, i64 8 - %6 = load i64, ptr %5, align 8, !alias.scope !108, !noalias !111, !noundef !16 + %6 = load i64, ptr %5, align 8, !alias.scope !111, !noalias !114, !noundef !16 %7 = add i64 %6, %.sroa.42.0.copyload %8 = getelementptr inbounds nuw i8, ptr %1, i64 16 - %9 = load i64, ptr %8, align 8, !alias.scope !108, !noalias !111, !noundef !16 + %9 = load i64, ptr %8, align 8, !alias.scope !111, !noalias !114, !noundef !16 %10 = add i64 %9, %.sroa.53.0.copyload %11 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %12 = load i64, ptr %11, align 8, !alias.scope !108, !noalias !111, !noundef !16 + %12 = load i64, ptr %11, align 8, !alias.scope !111, !noalias !114, !noundef !16 %13 = add i64 %12, %.sroa.64.0.copyload %14 = getelementptr inbounds nuw i8, ptr %1, i64 32 - %15 = load i64, ptr %14, align 8, !alias.scope !108, !noalias !111, !noundef !16 + %15 = load i64, ptr %14, align 8, !alias.scope !111, !noalias !114, !noundef !16 %.0.sroa.speculated.i.i = tail call noundef i64 @llvm.umax.i64(i64 %.sroa.75.0.copyload, i64 %15) store i64 %4, ptr %0, align 8 store i64 %7, ptr %.sroa.42.0..sroa_idx, align 8 @@ -1118,10 +1127,13 @@ attributes #23 = { cold noreturn nounwind } !104 = distinct !{!104, !103, !"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE: argument 1"} !105 = !{!106} !106 = distinct !{!106, !103, !"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE: argument 2"} -!107 = !{i64 0, i64 2} -!108 = !{!109} -!109 = distinct !{!109, !110, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E: argument 2"} -!110 = distinct !{!110, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E"} -!111 = !{!112, !113} -!112 = distinct !{!112, !110, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E: argument 0"} -!113 = distinct !{!113, !110, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E: argument 1"} +!107 = !{!108} +!108 = distinct !{!108, !109, !"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335: argument 0"} +!109 = distinct !{!109, !"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335"} +!110 = !{i64 0, i64 2} +!111 = !{!112} +!112 = distinct !{!112, !113, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E: argument 2"} +!113 = distinct !{!113, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E"} +!114 = !{!115, !116} +!115 = distinct !{!115, !113, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E: argument 0"} +!116 = distinct !{!116, !113, !"_ZN70_$LT$uu_wc..word_count..WordCount$u20$as$u20$core..ops..arith..Add$GT$3add17h2230c0a7f906b241E: argument 1"} diff --git a/bench/cpython/optimized/unicodeobject.ll b/bench/cpython/optimized/unicodeobject.ll index b433f30b135..8151196ee22 100644 --- a/bench/cpython/optimized/unicodeobject.ll +++ b/bench/cpython/optimized/unicodeobject.ll @@ -26026,17 +26026,19 @@ GroupGenerator_next.exit.thread: ; preds = %20, %GroupGenerator %spec.select120 = tail call i64 @llvm.smax.i64(i64 %44, i64 1) %45 = sub i64 %spec.select120, %.0100 %46 = tail call i64 @llvm.smax.i64(i64 %45, i64 0) - %47 = tail call i64 @llvm.smax.i64(i64 %.0100, i64 0) - %48 = select i1 %.not116, i64 0, i64 %.val - %49 = add i64 %48, %.0105 - %50 = add i64 %49, %46 - %51 = add i64 %50, %47 - %52 = select i1 %.not116, ptr null, ptr %7 - call fastcc void @InsertThousandsGrouping_fill(ptr noundef %0, ptr noundef %10, ptr noundef %2, ptr noundef %11, i64 noundef %47, i64 noundef %46, ptr noundef %52, i64 noundef %.val, ptr noundef %8) + %47 = icmp slt i64 %.0100, 0 + %48 = tail call i64 @llvm.smin.i64(i64 %.0100, i64 %spec.select120) + %49 = select i1 %47, i64 0, i64 %48 + %50 = select i1 %.not116, i64 0, i64 %.val + %51 = add i64 %50, %.0105 + %52 = add i64 %51, %46 + %53 = add i64 %52, %49 + %54 = select i1 %.not116, ptr null, ptr %7 + call fastcc void @InsertThousandsGrouping_fill(ptr noundef %0, ptr noundef %10, ptr noundef %2, ptr noundef %11, i64 noundef %49, i64 noundef %46, ptr noundef %54, i64 noundef %.val, ptr noundef %8) br label %.loopexit .loopexit: ; preds = %26, %GroupGenerator_next.exit.thread - %.2 = phi i64 [ %51, %GroupGenerator_next.exit.thread ], [ %37, %26 ] + %.2 = phi i64 [ %53, %GroupGenerator_next.exit.thread ], [ %37, %26 ] call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #41 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #41 ret i64 %.2 diff --git a/bench/darktable/optimized/Cr2Decompressor.ll b/bench/darktable/optimized/Cr2Decompressor.ll index 66d5a592ac6..866214988b3 100644 --- a/bench/darktable/optimized/Cr2Decompressor.ll +++ b/bench/darktable/optimized/Cr2Decompressor.ll @@ -551,7 +551,7 @@ define weak_odr hidden void @_ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDec 40: ; preds = %_ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread183, %48, %38 %41 = landingpad { ptr, i32 } cleanup - br label %216 + br label %218 42: ; preds = %8 %43 = getelementptr inbounds nuw i8, ptr %35, i64 584 @@ -650,7 +650,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 83: ; preds = %.invoke, %._crit_edge240 %84 = landingpad { ptr, i32 } cleanup - br label %216 + br label %218 85: ; preds = %80 store i32 %82, ptr %22, align 4, !tbaa !125 @@ -731,7 +731,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 119: ; preds = %117 %120 = landingpad { ptr, i32 } cleanup - br label %216 + br label %218 121: ; preds = %109 %122 = load ptr, ptr %28, align 8, !tbaa !53 @@ -778,7 +778,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 140: ; preds = %138 %141 = landingpad { ptr, i32 } cleanup - br label %216 + br label %218 142: ; preds = %167 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #20 @@ -820,7 +820,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z %166 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #20 - br label %216 + br label %218 167: ; preds = %158 store i32 %162, ptr %159, align 4, !tbaa !13 @@ -896,99 +896,101 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 189: ; preds = %.invoke267 %190 = landingpad { ptr, i32 } cleanup - br label %216 + br label %218 _ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exit.thread: ; preds = %.critedge.i, %180, %.lr.ph219 %191 = add nsw i32 %.0.i.i.i5.i, %.sroa.17106.sroa.0.0213 - %.not.i62.not = icmp sgt i32 %191, %150 - br i1 %.not.i62.not, label %192, label %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit - -192: ; preds = %_ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exit.thread - %193 = icmp slt i32 %.sroa.17106.sroa.0.0213, %150 - %194 = icmp slt i32 %.sroa.17106.sroa.8.0214, %153 - %195 = and i1 %193, %194 - br i1 %195, label %.invoke267, label %.loopexit - -.invoke267: ; preds = %.critedge.i, %192 - %196 = phi ptr [ @.str.14, %192 ], [ @.str.13, %.critedge.i ] - invoke void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_19RawDecoderExceptionEEEvPKcz(ptr noundef nonnull %196, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDecoderINS_15BaselineCodeTagENS_23PrefixCodeLookupDecoderIS2_EEEEEC2ENS_8RawImageESt5tupleIJiiiEENS_8iPoint2DENS_14Cr2SliceWidthsESt6vectorINS6_18PerComponentRecipeESaISD_EENS_10Array1DRefIKhEE) #14 + %192 = add nsw i32 %.sroa.speculated.i, %.sroa.17106.sroa.8.0214 + %.not.i62 = icmp sle i32 %191, %150 + %193 = icmp sle i32 %192, %153 + %194 = select i1 %.not.i62, i1 %193, i1 false + br i1 %194, label %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit, label %195 + +195: ; preds = %_ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exit.thread + %196 = icmp slt i32 %.sroa.17106.sroa.0.0213, %150 + %197 = icmp slt i32 %.sroa.17106.sroa.8.0214, %153 + %198 = and i1 %196, %197 + br i1 %198, label %.invoke267, label %.loopexit + +.invoke267: ; preds = %.critedge.i, %195 + %199 = phi ptr [ @.str.14, %195 ], [ @.str.13, %.critedge.i ] + invoke void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_19RawDecoderExceptionEEEvPKcz(ptr noundef nonnull %199, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDecoderINS_15BaselineCodeTagENS_23PrefixCodeLookupDecoderIS2_EEEEEC2ENS_8RawImageESt5tupleIJiiiEENS_8iPoint2DENS_14Cr2SliceWidthsESt6vectorINS6_18PerComponentRecipeESaISD_EENS_10Array1DRefIKhEE) #14 to label %.cont268 unwind label %189 .cont268: ; preds = %.invoke267 unreachable _ZN8rawspeed21Cr2OutputTileIteratorppEv.exit: ; preds = %_ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exit.thread - %197 = add nsw i32 %.sroa.speculated.i, %.sroa.17106.sroa.8.0214 %.sroa.073.sroa.8.0.insert.ext86 = zext i32 %.sroa.17106.sroa.8.0214 to i64 %.sroa.073.sroa.8.0.insert.shift87 = shl nuw i64 %.sroa.073.sroa.8.0.insert.ext86, 32 %.sroa.073.sroa.0.0.insert.ext79 = zext i32 %.sroa.17106.sroa.0.0213 to i64 %.sroa.073.sroa.0.0.insert.insert81 = or disjoint i64 %.sroa.073.sroa.8.0.insert.shift87, %.sroa.073.sroa.0.0.insert.ext79 - %198 = add nsw i32 %.sroa.speculated.i, %.sroa.22.0212 - %199 = icmp sgt i32 %198, -1 - tail call void @llvm.assume(i1 %199) - %200 = icmp sle i32 %198, %146 - tail call void @llvm.assume(i1 %200) - %201 = icmp eq i32 %198, %146 - %spec.select = select i1 %201, i32 %174, i32 %.sroa.13.0211 - %spec.select194 = select i1 %201, i32 0, i32 %198 - %202 = icmp eq i32 %197, %153 - %203 = select i1 %202, i32 %.0.i.i.i5.i, i32 0 - %.sroa.17106.sroa.0.1 = add nsw i32 %203, %.sroa.17106.sroa.0.0213 - %.sroa.17106.sroa.8.1 = select i1 %202, i32 0, i32 %197 - %204 = icmp eq i32 %spec.select, %170 - %205 = icmp eq i32 %spec.select194, 0 - %206 = and i1 %204, %205 - br i1 %206, label %.loopexit.thread, label %.lr.ph219 - -.loopexit: ; preds = %192 + %200 = add nsw i32 %.sroa.speculated.i, %.sroa.22.0212 + %201 = icmp sgt i32 %200, -1 + tail call void @llvm.assume(i1 %201) + %202 = icmp sle i32 %200, %146 + tail call void @llvm.assume(i1 %202) + %203 = icmp eq i32 %200, %146 + %spec.select = select i1 %203, i32 %174, i32 %.sroa.13.0211 + %spec.select194 = select i1 %203, i32 0, i32 %200 + %204 = icmp eq i32 %192, %153 + %205 = select i1 %204, i32 %.0.i.i.i5.i, i32 0 + %.sroa.17106.sroa.0.1 = add nsw i32 %205, %.sroa.17106.sroa.0.0213 + %.sroa.17106.sroa.8.1 = select i1 %204, i32 0, i32 %192 + %206 = icmp eq i32 %spec.select, %170 + %207 = icmp eq i32 %spec.select194, 0 + %208 = and i1 %206, %207 + br i1 %208, label %.loopexit.thread, label %.lr.ph219 + +.loopexit: ; preds = %195 br i1 %.sroa.14.0217, label %.loopexit.thread, label %.invoke269 -207: ; preds = %.invoke269 - %208 = landingpad { ptr, i32 } +209: ; preds = %.invoke269 + %210 = landingpad { ptr, i32 } cleanup - br label %216 + br label %218 .loopexit.thread: ; preds = %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit, %.loopexit %.sroa.8.0201248 = phi i64 [ %.sroa.8.0216, %.loopexit ], [ %.sroa.3.8.insert.insert.i, %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit ] %.sroa.0126.0204247 = phi i64 [ %.sroa.0126.0215, %.loopexit ], [ %.sroa.073.sroa.0.0.insert.insert81, %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit ] - %209 = add i64 %.sroa.8.0201248, %.sroa.0126.0204247 + %211 = add i64 %.sroa.8.0201248, %.sroa.0126.0204247 %.sroa.0126.4.extract.shift130 = lshr i64 %.sroa.0126.0204247, 32 %.sroa.0126.4.extract.trunc131 = trunc nuw i64 %.sroa.0126.4.extract.shift130 to i32 %.sroa.8.12.extract.shift137 = lshr i64 %.sroa.8.0201248, 32 %.sroa.8.12.extract.trunc138 = trunc nuw i64 %.sroa.8.12.extract.shift137 to i32 - %210 = add nsw i32 %.sroa.8.12.extract.trunc138, %.sroa.0126.4.extract.trunc131 - %.sroa.0.0.extract.trunc = trunc i64 %209 to i32 - %211 = icmp eq i32 %150, %.sroa.0.0.extract.trunc - %212 = icmp eq i32 %210, %153 - %213 = select i1 %211, i1 %212, i1 false - br i1 %213, label %215, label %.invoke269 + %212 = add nsw i32 %.sroa.8.12.extract.trunc138, %.sroa.0126.4.extract.trunc131 + %.sroa.0.0.extract.trunc = trunc i64 %211 to i32 + %213 = icmp eq i32 %150, %.sroa.0.0.extract.trunc + %214 = icmp eq i32 %212, %153 + %215 = select i1 %213, i1 %214, i1 false + br i1 %215, label %217, label %.invoke269 .invoke269: ; preds = %.loopexit, %169, %.loopexit.thread - %214 = phi ptr [ @.str.16, %.loopexit.thread ], [ @.str.15, %169 ], [ @.str.15, %.loopexit ] - invoke void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_19RawDecoderExceptionEEEvPKcz(ptr noundef nonnull %214, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDecoderINS_15BaselineCodeTagENS_23PrefixCodeLookupDecoderIS2_EEEEEC2ENS_8RawImageESt5tupleIJiiiEENS_8iPoint2DENS_14Cr2SliceWidthsESt6vectorINS6_18PerComponentRecipeESaISD_EENS_10Array1DRefIKhEE) #14 - to label %.cont270 unwind label %207 + %216 = phi ptr [ @.str.16, %.loopexit.thread ], [ @.str.15, %169 ], [ @.str.15, %.loopexit ] + invoke void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_19RawDecoderExceptionEEEvPKcz(ptr noundef nonnull %216, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDecoderINS_15BaselineCodeTagENS_23PrefixCodeLookupDecoderIS2_EEEEEC2ENS_8RawImageESt5tupleIJiiiEENS_8iPoint2DENS_14Cr2SliceWidthsESt6vectorINS6_18PerComponentRecipeESaISD_EENS_10Array1DRefIKhEE) #14 + to label %.cont270 unwind label %209 .cont270: ; preds = %.invoke269 unreachable -215: ; preds = %.loopexit.thread +217: ; preds = %.loopexit.thread ret void -216: ; preds = %207, %189, %83, %119, %140, %165, %40 - %.pn56 = phi { ptr, i32 } [ %41, %40 ], [ %84, %83 ], [ %120, %119 ], [ %141, %140 ], [ %166, %165 ], [ %208, %207 ], [ %190, %189 ] - %217 = load ptr, ptr %26, align 8, !tbaa !50 - %.not.i.i.i = icmp eq ptr %217, null - br i1 %.not.i.i.i, label %_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit, label %218 - -218: ; preds = %216 - %219 = load ptr, ptr %31, align 8, !tbaa !54 - %220 = ptrtoint ptr %219 to i64 - %221 = ptrtoint ptr %217 to i64 - %222 = sub i64 %220, %221 - tail call void @_ZdlPvm(ptr noundef nonnull %217, i64 noundef %222) #21 +218: ; preds = %209, %189, %83, %119, %140, %165, %40 + %.pn56 = phi { ptr, i32 } [ %41, %40 ], [ %84, %83 ], [ %120, %119 ], [ %141, %140 ], [ %166, %165 ], [ %210, %209 ], [ %190, %189 ] + %219 = load ptr, ptr %26, align 8, !tbaa !50 + %.not.i.i.i = icmp eq ptr %219, null + br i1 %.not.i.i.i, label %_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit, label %220 + +220: ; preds = %218 + %221 = load ptr, ptr %31, align 8, !tbaa !54 + %222 = ptrtoint ptr %221 to i64 + %223 = ptrtoint ptr %219 to i64 + %224 = sub i64 %222, %223 + tail call void @_ZdlPvm(ptr noundef nonnull %219, i64 noundef %224) #21 br label %_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit -_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit: ; preds = %216, %218 +_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit: ; preds = %218, %220 tail call void @_ZN8rawspeed8RawImageD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %0) #20 resume { ptr, i32 } %.pn56 } diff --git a/bench/darktable/optimized/PanasonicV4Decompressor.ll b/bench/darktable/optimized/PanasonicV4Decompressor.ll index fe2369220b4..d72f0e1c845 100644 --- a/bench/darktable/optimized/PanasonicV4Decompressor.ll +++ b/bench/darktable/optimized/PanasonicV4Decompressor.ll @@ -346,11 +346,11 @@ define hidden void @_ZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEv %31 = sub i64 %29, %30 %32 = sdiv exact i64 %31, 40 %33 = icmp ult i64 %32, %15 - %34 = getelementptr inbounds nuw i8, ptr %0, i64 56 - %35 = load ptr, ptr %34, align 8, !tbaa !115 br i1 %33, label %_ZNSt12_Vector_baseIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_M_allocateEm.exit.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit _ZNSt12_Vector_baseIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_M_allocateEm.exit.i: ; preds = %1 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 56 + %35 = load ptr, ptr %34, align 8, !tbaa !115 %36 = ptrtoint ptr %35 to i64 %37 = sub i64 %36, %30 %38 = mul nuw nsw i64 %15, 40 @@ -384,155 +384,164 @@ _ZNSt12_Vector_baseIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE13_M_deall br label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit _ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit: ; preds = %1, %_ZNSt12_Vector_baseIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE13_M_deallocateEPS2_m.exit.i - %.pre.i = phi ptr [ %43, %_ZNSt12_Vector_baseIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE13_M_deallocateEPS2_m.exit.i ], [ %35, %1 ] %45 = getelementptr inbounds nuw i8, ptr %0, i64 28 %46 = getelementptr inbounds nuw i8, ptr %0, i64 56 br label %47 47: ; preds = %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit - %.0 = phi i32 [ 0, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %69, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] - %48 = phi ptr [ %.pre.i, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %96, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] - %.017.i = phi i64 [ %15, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %97, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] - %49 = load i32, ptr %6, align 8, !tbaa !19, !noalias !122 - %50 = load i32, ptr %8, align 8, !tbaa !23, !noalias !122 - %51 = icmp samesign uge i32 %49, %50 + %.0 = phi i32 [ 0, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %71, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] + %.018.i = phi i64 [ %15, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %100, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] + %48 = load i32, ptr %6, align 8, !tbaa !19, !noalias !122 + %49 = load i32, ptr %8, align 8, !tbaa !23, !noalias !122 + %50 = icmp samesign uge i32 %48, %49 + tail call void @llvm.assume(i1 %50) + %51 = icmp sgt i32 %48, -1 tail call void @llvm.assume(i1 %51) %52 = icmp sgt i32 %49, -1 tail call void @llvm.assume(i1 %52) - %53 = icmp sgt i32 %50, -1 - tail call void @llvm.assume(i1 %53) - %54 = sub nsw i32 %49, %50 - %55 = icmp ne i32 %49, %50 - tail call void @llvm.assume(i1 %55) - %.sroa.speculated.i.i = tail call i32 @llvm.umin.i32(i32 %54, i32 16384) - %56 = and i32 %.sroa.speculated.i.i, 15 - %57 = icmp eq i32 %56, 0 - tail call void @llvm.assume(i1 %57) - %58 = zext nneg i32 %50 to i64 - %59 = zext nneg i32 %.sroa.speculated.i.i to i64 - %60 = lshr exact i32 %.sroa.speculated.i.i, 4 - %61 = mul nuw nsw i32 %60, 14 - %62 = load ptr, ptr %5, align 8, !tbaa !15, !noalias !125, !nonnull !110, !noundef !110 - %63 = add nuw nsw i32 %.sroa.speculated.i.i, %50 - %64 = icmp samesign ule i32 %63, %49 - tail call void @llvm.assume(i1 %64) - %65 = getelementptr inbounds nuw i8, ptr %62, i64 %58 - %66 = load i16, ptr %45, align 4, !tbaa !20, !noalias !125 - %.sroa.4.8.insert.ext.i.i.i.i.i = zext i16 %66 to i64 + %53 = sub nsw i32 %48, %49 + %54 = icmp ne i32 %48, %49 + tail call void @llvm.assume(i1 %54) + %.sroa.speculated.i.i = tail call i32 @llvm.umin.i32(i32 %53, i32 16384) + %55 = and i32 %.sroa.speculated.i.i, 15 + %56 = icmp eq i32 %55, 0 + tail call void @llvm.assume(i1 %56) + %57 = zext nneg i32 %49 to i64 + %58 = zext nneg i32 %.sroa.speculated.i.i to i64 + %59 = add nuw nsw i64 %58, %57 + %60 = zext nneg i32 %48 to i64 + %.not.i.i.i.i.i.i = icmp samesign ugt i64 %59, %60 + br i1 %.not.i.i.i.i.i.i, label %61, label %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" + +61: ; preds = %47 + tail call void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_11IOExceptionEEEvPKcz(ptr noundef nonnull @.str.4, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK8rawspeed6Buffer10getSubViewEjj) #14, !noalias !125 + unreachable + +"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i": ; preds = %47 + %62 = lshr exact i32 %.sroa.speculated.i.i, 4 + %63 = mul nuw nsw i32 %62, 14 + %64 = load ptr, ptr %5, align 8, !tbaa !15, !noalias !125, !nonnull !110, !noundef !110 + %65 = add nuw nsw i32 %.sroa.speculated.i.i, %49 + %66 = icmp samesign ule i32 %65, %48 + tail call void @llvm.assume(i1 %66) + %67 = getelementptr inbounds nuw i8, ptr %64, i64 %57 + %68 = load i16, ptr %45, align 4, !tbaa !20, !noalias !125 + %.sroa.4.8.insert.ext.i.i.i.i.i = zext i16 %68 to i64 %.sroa.4.8.insert.shift.i.i.i.i.i = shl nuw nsw i64 %.sroa.4.8.insert.ext.i.i.i.i.i, 32 - %.sroa.2.8.insert.insert.i.i.i.i.i = or disjoint i64 %.sroa.4.8.insert.shift.i.i.i.i.i, %59 - store i32 %63, ptr %8, align 8, !tbaa !23, !noalias !132 - %67 = urem i32 %.0, %4 - %68 = udiv i32 %.0, %4 - %.sroa.2.0.insert.ext.i.i.i = zext i32 %68 to i64 + %.sroa.2.8.insert.insert.i.i.i.i.i = or disjoint i64 %.sroa.4.8.insert.shift.i.i.i.i.i, %58 + store i32 %65, ptr %8, align 8, !tbaa !23, !noalias !132 + %69 = urem i32 %.0, %4 + %70 = udiv i32 %.0, %4 + %.sroa.2.0.insert.ext.i.i.i = zext i32 %70 to i64 %.sroa.2.0.insert.shift.i.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i.i.i, 32 - %.sroa.0.0.insert.ext.i.i.i = zext i32 %67 to i64 + %.sroa.0.0.insert.ext.i.i.i = zext i32 %69 to i64 %.sroa.0.0.insert.insert.i.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i.i.i, %.sroa.0.0.insert.ext.i.i.i - %69 = add i32 %61, %.0 - %70 = urem i32 %69, %4 - %71 = udiv i32 %69, %4 - %.sroa.2.0.insert.ext.i12.i.i = zext i32 %71 to i64 + %71 = add i32 %63, %.0 + %72 = urem i32 %71, %4 + %73 = udiv i32 %71, %4 + %.sroa.2.0.insert.ext.i12.i.i = zext i32 %73 to i64 %.sroa.2.0.insert.shift.i13.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i12.i.i, 32 - %.sroa.0.0.insert.ext.i14.i.i = zext i32 %70 to i64 + %.sroa.0.0.insert.ext.i14.i.i = zext i32 %72 to i64 %.sroa.0.0.insert.insert.i15.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i13.i.i, %.sroa.0.0.insert.ext.i14.i.i - %72 = load ptr, ptr %26, align 8, !tbaa !112 - %.not.i.i.i.i6 = icmp eq ptr %48, %72 - br i1 %.not.i.i.i.i6, label %76, label %73 + %74 = load ptr, ptr %46, align 8, !tbaa !115 + %75 = load ptr, ptr %26, align 8, !tbaa !112 + %.not.i.i.i.i6 = icmp eq ptr %74, %75 + br i1 %.not.i.i.i.i6, label %79, label %76 -73: ; preds = %47 - store ptr %65, ptr %48, align 8 - %.sroa.5.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %48, i64 8 +76: ; preds = %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" + store ptr %67, ptr %74, align 8 + %.sroa.5.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 8 store i64 %.sroa.2.8.insert.insert.i.i.i.i.i, ptr %.sroa.5.0..sroa_idx.i, align 8 - %.sroa.6.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %48, i64 16 + %.sroa.6.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 16 store i32 0, ptr %.sroa.6.0..sroa_idx.i, align 8 - %.sroa.711.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %48, i64 24 - store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.711.0..sroa_idx.i, align 8 - %.sroa.8.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %48, i64 32 + %.sroa.712.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 24 + store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.712.0..sroa_idx.i, align 8 + %.sroa.8.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 32 store i64 %.sroa.0.0.insert.insert.i15.i.i, ptr %.sroa.8.0..sroa_idx.i, align 8 - %74 = load ptr, ptr %46, align 8, !tbaa !115 - %75 = getelementptr inbounds nuw i8, ptr %74, i64 40 - store ptr %75, ptr %46, align 8, !tbaa !115 + %77 = load ptr, ptr %46, align 8, !tbaa !115 + %78 = getelementptr inbounds nuw i8, ptr %77, i64 40 + store ptr %78, ptr %46, align 8, !tbaa !115 br label %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i -76: ; preds = %47 - %77 = load ptr, ptr %25, align 8, !tbaa !111 - %78 = ptrtoint ptr %48 to i64 - %79 = ptrtoint ptr %77 to i64 - %80 = sub i64 %78, %79 - %81 = icmp eq i64 %80, 9223372036854775800 - br i1 %81, label %82, label %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i +79: ; preds = %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" + %80 = load ptr, ptr %25, align 8, !tbaa !111 + %81 = ptrtoint ptr %74 to i64 + %82 = ptrtoint ptr %80 to i64 + %83 = sub i64 %81, %82 + %84 = icmp eq i64 %83, 9223372036854775800 + br i1 %84, label %85, label %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i -82: ; preds = %76 +85: ; preds = %79 tail call void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str.8) #25 unreachable -_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i: ; preds = %76 - %83 = sdiv exact i64 %80, 40 - %.sroa.speculated.i.i.i.i.i.i = tail call i64 @llvm.umax.i64(i64 %83, i64 1) - %84 = add nsw i64 %.sroa.speculated.i.i.i.i.i.i, %83 - %85 = icmp ult i64 %84, %83 - %86 = tail call i64 @llvm.umin.i64(i64 %84, i64 230584300921369395) - %87 = select i1 %85, i64 230584300921369395, i64 %86 - %.not.i.i.i.i.i.i = icmp ne i64 %87, 0 - tail call void @llvm.assume(i1 %.not.i.i.i.i.i.i) - %88 = mul nuw nsw i64 %87, 40 - %89 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %88) #26 - %90 = getelementptr inbounds nuw i8, ptr %89, i64 %80 - store ptr %65, ptr %90, align 8 - %.sroa.5.0..sroa_idx5.i = getelementptr inbounds nuw i8, ptr %90, i64 8 - store i64 %.sroa.2.8.insert.insert.i.i.i.i.i, ptr %.sroa.5.0..sroa_idx5.i, align 8 - %.sroa.6.0..sroa_idx7.i = getelementptr inbounds nuw i8, ptr %90, i64 16 - store i32 0, ptr %.sroa.6.0..sroa_idx7.i, align 8 - %.sroa.711.0..sroa_idx12.i = getelementptr inbounds nuw i8, ptr %90, i64 24 - store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.711.0..sroa_idx12.i, align 8 - %.sroa.8.0..sroa_idx14.i = getelementptr inbounds nuw i8, ptr %90, i64 32 - store i64 %.sroa.0.0.insert.insert.i15.i.i, ptr %.sroa.8.0..sroa_idx14.i, align 8 - %.not10.i.i.i.i.i.i.i.i = icmp eq ptr %77, %48 +_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i: ; preds = %79 + %86 = sdiv exact i64 %83, 40 + %.sroa.speculated.i.i.i.i.i.i = tail call i64 @llvm.umax.i64(i64 %86, i64 1) + %87 = add nsw i64 %.sroa.speculated.i.i.i.i.i.i, %86 + %88 = icmp ult i64 %87, %86 + %89 = tail call i64 @llvm.umin.i64(i64 %87, i64 230584300921369395) + %90 = select i1 %88, i64 230584300921369395, i64 %89 + %.not.i.i.i.i.i3.i = icmp ne i64 %90, 0 + tail call void @llvm.assume(i1 %.not.i.i.i.i.i3.i) + %91 = mul nuw nsw i64 %90, 40 + %92 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %91) #26 + %93 = getelementptr inbounds nuw i8, ptr %92, i64 %83 + store ptr %67, ptr %93, align 8 + %.sroa.5.0..sroa_idx6.i = getelementptr inbounds nuw i8, ptr %93, i64 8 + store i64 %.sroa.2.8.insert.insert.i.i.i.i.i, ptr %.sroa.5.0..sroa_idx6.i, align 8 + %.sroa.6.0..sroa_idx8.i = getelementptr inbounds nuw i8, ptr %93, i64 16 + store i32 0, ptr %.sroa.6.0..sroa_idx8.i, align 8 + %.sroa.712.0..sroa_idx13.i = getelementptr inbounds nuw i8, ptr %93, i64 24 + store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.712.0..sroa_idx13.i, align 8 + %.sroa.8.0..sroa_idx15.i = getelementptr inbounds nuw i8, ptr %93, i64 32 + store i64 %.sroa.0.0.insert.insert.i15.i.i, ptr %.sroa.8.0..sroa_idx15.i, align 8 + %.not10.i.i.i.i.i.i.i.i = icmp eq ptr %80, %74 br i1 %.not10.i.i.i.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i: ; preds = %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i - %.012.i.i.i.i.i.i.i.i = phi ptr [ %92, %.lr.ph.i.i.i.i.i.i.i.i ], [ %89, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] - %.0911.i.i.i.i.i.i.i.i = phi ptr [ %91, %.lr.ph.i.i.i.i.i.i.i.i ], [ %77, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] + %.012.i.i.i.i.i.i.i.i = phi ptr [ %95, %.lr.ph.i.i.i.i.i.i.i.i ], [ %92, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] + %.0911.i.i.i.i.i.i.i.i = phi ptr [ %94, %.lr.ph.i.i.i.i.i.i.i.i ], [ %80, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %.012.i.i.i.i.i.i.i.i, ptr noundef nonnull align 8 dereferenceable(40) %.0911.i.i.i.i.i.i.i.i, i64 40, i1 false), !alias.scope !133 - %91 = getelementptr inbounds nuw i8, ptr %.0911.i.i.i.i.i.i.i.i, i64 40 - %92 = getelementptr inbounds nuw i8, ptr %.012.i.i.i.i.i.i.i.i, i64 40 - %.not.i.i.i.i.i.i.i.i = icmp eq ptr %91, %48 + %94 = getelementptr inbounds nuw i8, ptr %.0911.i.i.i.i.i.i.i.i, i64 40 + %95 = getelementptr inbounds nuw i8, ptr %.012.i.i.i.i.i.i.i.i, i64 40 + %.not.i.i.i.i.i.i.i.i = icmp eq ptr %94, %74 br i1 %.not.i.i.i.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i, !llvm.loop !120 _ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i - %.0.lcssa.i.i.i.i.i.i.i.i = phi ptr [ %89, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ], [ %92, %.lr.ph.i.i.i.i.i.i.i.i ] - %93 = getelementptr inbounds nuw i8, ptr %.0.lcssa.i.i.i.i.i.i.i.i, i64 40 - %.not.i23.i.i.i.i.i = icmp eq ptr %77, null - br i1 %.not.i23.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, label %94 + %.0.lcssa.i.i.i.i.i.i.i.i = phi ptr [ %92, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ], [ %95, %.lr.ph.i.i.i.i.i.i.i.i ] + %96 = getelementptr inbounds nuw i8, ptr %.0.lcssa.i.i.i.i.i.i.i.i, i64 40 + %.not.i23.i.i.i.i.i = icmp eq ptr %80, null + br i1 %.not.i23.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, label %97 -94: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i - tail call void @_ZdlPvm(ptr noundef nonnull %77, i64 noundef %80) #23 +97: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i + tail call void @_ZdlPvm(ptr noundef nonnull %80, i64 noundef %83) #23 br label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i -_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i: ; preds = %94, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i - store ptr %89, ptr %25, align 8, !tbaa !111 - store ptr %93, ptr %46, align 8, !tbaa !115 - %95 = getelementptr inbounds nuw %"struct.rawspeed::PanasonicV4Decompressor::Block", ptr %89, i64 %87 - store ptr %95, ptr %26, align 8, !tbaa !112 +_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i: ; preds = %97, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i + store ptr %92, ptr %25, align 8, !tbaa !111 + store ptr %96, ptr %46, align 8, !tbaa !115 + %98 = getelementptr inbounds nuw %"struct.rawspeed::PanasonicV4Decompressor::Block", ptr %92, i64 %90 + store ptr %98, ptr %26, align 8, !tbaa !112 br label %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i -_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, %73 - %96 = phi ptr [ %75, %73 ], [ %93, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i ] - %97 = add nsw i64 %.017.i, -1 - %.not.i7 = icmp eq i64 %97, 0 +_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, %76 + %99 = phi ptr [ %.0.lcssa.i.i.i.i.i.i.i.i, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i ], [ %77, %76 ] + %100 = add nsw i64 %.018.i, -1 + %.not.i7 = icmp eq i64 %100, 0 br i1 %.not.i7, label %"_ZSt10generate_nISt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS4_EEEmZNS3_19chopInputIntoBlocksEvE3$_0ET_S9_T0_T1_.exit", label %47, !llvm.loop !137 "_ZSt10generate_nISt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS4_EEEmZNS3_19chopInputIntoBlocksEvE3$_0ET_S9_T0_T1_.exit": ; preds = %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i - %98 = load ptr, ptr %0, align 8, !tbaa !6 - %99 = getelementptr inbounds nuw i8, ptr %98, i64 40 - %100 = getelementptr inbounds i8, ptr %96, i64 -8 - %101 = load i64, ptr %99, align 8 - store i64 %101, ptr %100, align 8 - %102 = load ptr, ptr %46, align 8, !tbaa !138 - %103 = getelementptr inbounds i8, ptr %102, i64 -4 - %104 = load i32, ptr %103, align 4, !tbaa !139 - %105 = add nsw i32 %104, -1 - store i32 %105, ptr %103, align 4, !tbaa !139 + %101 = load ptr, ptr %0, align 8, !tbaa !6 + %102 = getelementptr inbounds nuw i8, ptr %101, i64 40 + %103 = getelementptr inbounds nuw i8, ptr %99, i64 32 + %104 = load i64, ptr %102, align 8 + store i64 %104, ptr %103, align 8 + %105 = load ptr, ptr %46, align 8, !tbaa !138 + %106 = getelementptr inbounds i8, ptr %105, i64 -4 + %107 = load i32, ptr %106, align 4, !tbaa !139 + %108 = add nsw i32 %107, -1 + store i32 %108, ptr %106, align 4, !tbaa !139 ret void } diff --git a/bench/duckdb/optimized/format.ll b/bench/duckdb/optimized/format.ll index 6d7fbe55455..6a0d576d9b3 100644 --- a/bench/duckdb/optimized/format.ll +++ b/bench/duckdb/optimized/format.ll @@ -30812,16 +30812,15 @@ _ZN10duckdb_fmt2v68internal14write_exponentIcPcEET0_iS4_.exit: ; preds = %41, %5 br i1 %.not.i.i138, label %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140, label %.lr.ph.i.i135, !llvm.loop !19 _ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140: ; preds = %.lr.ph.i.i135 - %99 = icmp slt i32 %90, %storemerge228 - br i1 %99, label %100, label %_ZSt6fill_nIPcicET_S1_T0_RKT1_.exit142 - -100: ; preds = %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140 - %101 = sub nsw i32 %storemerge228, %.sroa.speculated - br label %_ZSt6fill_nIPcicET_S1_T0_RKT1_.exit142.sink.split - -_ZSt6fill_nIPcicET_S1_T0_RKT1_.exit142.sink.split: ; preds = %86, %100 - %storemerge228.sink = phi i32 [ %101, %100 ], [ %storemerge228, %86 ] - %.3.sink273 = phi ptr [ %98, %100 ], [ %.3, %86 ] + %99 = icmp sge i32 %90, %storemerge228 + %100 = sub nsw i32 %storemerge228, %.sroa.speculated + %101 = icmp slt i32 %100, 1 + %or.cond276 = select i1 %99, i1 true, i1 %101 + br i1 %or.cond276, label %_ZSt6fill_nIPcicET_S1_T0_RKT1_.exit142, label %_ZSt6fill_nIPcicET_S1_T0_RKT1_.exit142.sink.split + +_ZSt6fill_nIPcicET_S1_T0_RKT1_.exit142.sink.split: ; preds = %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140, %86 + %storemerge228.sink = phi i32 [ %storemerge228, %86 ], [ %100, %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140 ] + %.3.sink273 = phi ptr [ %.3, %86 ], [ %98, %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140 ] %102 = zext nneg i32 %storemerge228.sink to i64 %103 = getelementptr inbounds nuw i8, ptr %.3.sink273, i64 %102 tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %.3.sink273, i8 48, i64 %102, i1 false) diff --git a/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll b/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll index 53fc1310a9e..2098fa53382 100644 --- a/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll +++ b/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll @@ -181,8 +181,8 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall .lr.ph: ; preds = %58, %67 %69 = phi i32 [ %68, %67 ], [ -4, %58 ] - %.sroa.0155.4.ph328 = phi i32 [ %62, %67 ], [ 0, %58 ] - %.sroa.25.5.ph327 = phi ptr [ %malloc, %67 ], [ null, %58 ] + %.sroa.0155.4.ph325 = phi i32 [ %62, %67 ], [ 0, %58 ] + %.sroa.25.5.ph324 = phi ptr [ %malloc, %67 ], [ null, %58 ] %70 = getelementptr inbounds nuw i8, ptr %0, i64 8 %71 = load i32, ptr @_hb_NullPool, align 16 %wide.trip.count = zext i32 %69 to i64 @@ -193,18 +193,18 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall br i1 %72, label %.lr.ph272, label %._crit_edge .lr.ph272: ; preds = %67, %.preheader - %.sroa.0155.1.lcssa334 = phi i32 [ %.sroa.0155.2, %.preheader ], [ %62, %67 ] - %.sroa.17.1.lcssa333 = phi i32 [ %.sroa.17.2, %.preheader ], [ 0, %67 ] - %.sroa.25.1.lcssa332 = phi ptr [ %.sroa.25.2, %.preheader ], [ %malloc, %67 ] + %.sroa.0155.1.lcssa331 = phi i32 [ %.sroa.0155.2, %.preheader ], [ %62, %67 ] + %.sroa.17.1.lcssa330 = phi i32 [ %.sroa.17.2, %.preheader ], [ 0, %67 ] + %.sroa.25.1.lcssa329 = phi ptr [ %.sroa.25.2, %.preheader ], [ %malloc, %67 ] %73 = phi i32 [ %69, %.preheader ], [ 0, %67 ] %74 = load i32, ptr @_hb_NullPool, align 16 br label %96 75: ; preds = %.lr.ph, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] - %.sroa.0155.1262 = phi i32 [ %.sroa.0155.4.ph328, %.lr.ph ], [ %.sroa.0155.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] + %.sroa.0155.1262 = phi i32 [ %.sroa.0155.4.ph325, %.lr.ph ], [ %.sroa.0155.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] %.sroa.17.1261 = phi i32 [ 0, %.lr.ph ], [ %.sroa.17.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] - %.sroa.25.1260 = phi ptr [ %.sroa.25.5.ph327, %.lr.ph ], [ %.sroa.25.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] + %.sroa.25.1260 = phi ptr [ %.sroa.25.5.ph324, %.lr.ph ], [ %.sroa.25.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] %76 = load ptr, ptr %70, align 8, !tbaa !22 %77 = getelementptr inbounds nuw %struct.contour_point_t, ptr %76, i64 %indvars.iv, i32 3 %78 = load i8, ptr %77, align 1, !tbaa !23, !range !27, !noundef !28 @@ -213,7 +213,7 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall 80: ; preds = %75 %.not.i48 = icmp slt i32 %.sroa.17.1261, %.sroa.0155.1262 - %.pre319 = add i32 %.sroa.17.1261, 1 + %.pre316 = add i32 %.sroa.17.1261, 1 br i1 %.not.i48, label %.critedge.i50, label %81 81: ; preds = %80 @@ -221,7 +221,7 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall br i1 %82, label %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i, label %83, !prof !14 83: ; preds = %81 - %.not.i.i49 = icmp ugt i32 %.pre319, %.sroa.0155.1262 + %.not.i.i49 = icmp ugt i32 %.pre316, %.sroa.0155.1262 br i1 %.not.i.i49, label %.preheader.i.i52, label %.critedge.i50, !prof !14 .preheader.i.i52: ; preds = %83, %.preheader.i.i52 @@ -229,7 +229,7 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall %84 = lshr i32 %.11542.i.i53, 1 %85 = add i32 %.11542.i.i53, 8 %86 = add i32 %85, %84 - %87 = icmp ugt i32 %.pre319, %86 + %87 = icmp ugt i32 %.pre316, %86 br i1 %87, label %.preheader.i.i52, label %.thread.i.i, !llvm.loop !21 .thread.i.i: ; preds = %.preheader.i.i52 @@ -263,7 +263,7 @@ _ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i: ; preds = %_ZN11hb_vector_tIjL _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i, %75 %.sroa.25.2 = phi ptr [ %.sroa.25.1260, %75 ], [ %.sroa.25.6, %.critedge.i50 ], [ %.sroa.25.1260, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] - %.sroa.17.2 = phi i32 [ %.sroa.17.1261, %75 ], [ %.pre319, %.critedge.i50 ], [ %.sroa.17.1261, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] + %.sroa.17.2 = phi i32 [ %.sroa.17.1261, %75 ], [ %.pre316, %.critedge.i50 ], [ %.sroa.17.1261, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] %.sroa.0155.2 = phi i32 [ %.sroa.0155.1262, %75 ], [ %.sroa.0155.5, %.critedge.i50 ], [ %.sroa.0155.6, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count @@ -278,11 +278,11 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN 96: ; preds = %.lr.ph272, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 %storemerge46271 = phi i32 [ %73, %.lr.ph272 ], [ %110, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] - %.sroa.0155.3270 = phi i32 [ %.sroa.0155.1.lcssa334, %.lr.ph272 ], [ %.sroa.0155.10, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] - %.sroa.17.3269 = phi i32 [ %.sroa.17.1.lcssa333, %.lr.ph272 ], [ %.sroa.17.5, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] - %.sroa.25.3267 = phi ptr [ %.sroa.25.1.lcssa332, %.lr.ph272 ], [ %.sroa.25.9, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] + %.sroa.0155.3270 = phi i32 [ %.sroa.0155.1.lcssa331, %.lr.ph272 ], [ %.sroa.0155.10, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] + %.sroa.17.3269 = phi i32 [ %.sroa.17.1.lcssa330, %.lr.ph272 ], [ %.sroa.17.5, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] + %.sroa.25.3267 = phi ptr [ %.sroa.25.1.lcssa329, %.lr.ph272 ], [ %.sroa.25.9, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] %.not.i56 = icmp slt i32 %.sroa.17.3269, %.sroa.0155.3270 - %.pre318 = add i32 %.sroa.17.3269, 1 + %.pre315 = add i32 %.sroa.17.3269, 1 br i1 %.not.i56, label %.critedge.i58, label %97 97: ; preds = %96 @@ -290,7 +290,7 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN br i1 %98, label %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70, label %99, !prof !14 99: ; preds = %97 - %.not.i.i57 = icmp ugt i32 %.pre318, %.sroa.0155.3270 + %.not.i.i57 = icmp ugt i32 %.pre315, %.sroa.0155.3270 br i1 %.not.i.i57, label %.preheader.i.i60, label %.critedge.i58, !prof !14 .preheader.i.i60: ; preds = %99, %.preheader.i.i60 @@ -298,7 +298,7 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN %100 = lshr i32 %.11542.i.i61, 1 %101 = add i32 %.11542.i.i61, 8 %102 = add i32 %101, %100 - %103 = icmp ugt i32 %.pre318, %102 + %103 = icmp ugt i32 %.pre315, %102 br i1 %103, label %.preheader.i.i60, label %.thread.i.i62, !llvm.loop !21 .thread.i.i62: ; preds = %.preheader.i.i60 @@ -331,7 +331,7 @@ _ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70: ; preds = %_ZN11hb_vector_tIj _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71: ; preds = %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70, %.critedge.i58 %.sroa.25.9 = phi ptr [ %.sroa.25.8, %.critedge.i58 ], [ %.sroa.25.3267, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] - %.sroa.17.5 = phi i32 [ %.pre318, %.critedge.i58 ], [ %.sroa.17.3269, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] + %.sroa.17.5 = phi i32 [ %.pre315, %.critedge.i58 ], [ %.sroa.17.3269, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] %.sroa.0155.10 = phi i32 [ %.sroa.0155.8, %.critedge.i58 ], [ %.sroa.0155.9, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] %110 = add nuw i32 %storemerge46271, 1 %111 = icmp ult i32 %110, %59 @@ -407,7 +407,7 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71: ; preds = %_ZN11hb_vector_tIj %174 = getelementptr inbounds nuw i8, ptr %28, i64 8 %175 = getelementptr inbounds nuw i8, ptr %30, i64 64 %.phi.trans.insert.i = getelementptr inbounds nuw i8, ptr %30, i64 36 - %.phi.trans.insert86.i = getelementptr inbounds nuw i8, ptr %30, i64 40 + %.phi.trans.insert84.i = getelementptr inbounds nuw i8, ptr %30, i64 40 %.sink.in.i.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %30, i64 56 br label %176 @@ -809,17 +809,17 @@ _ZNK14hb_sparseset_tI23hb_bit_set_invertible_tE7get_maxEv.exit.i: ; preds = %327 338: ; preds = %.thread.i.i.i138 %339 = zext nneg i32 %335 to i64 %340 = mul nuw nsw i64 %339, 12 - %malloc321 = call ptr @malloc(i64 %340) - %.not21.i.i.i139 = icmp eq ptr %malloc321, null + %malloc318 = call ptr @malloc(i64 %340) + %.not21.i.i.i139 = icmp eq ptr %malloc318, null br i1 %.not21.i.i.i139, label %.sink.split, label %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140, !prof !18 _ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140: ; preds = %338 - store ptr %malloc321, ptr %134, align 8, !tbaa !22 + store ptr %malloc318, ptr %134, align 8, !tbaa !22 store i32 %335, ptr %17, align 8, !tbaa !60 br label %341 341: ; preds = %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140, %331 - %342 = phi ptr [ %malloc321, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140 ], [ null, %331 ] + %342 = phi ptr [ %malloc318, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140 ], [ null, %331 ] store i32 %332, ptr %135, align 4, !tbaa !4 %343 = urem i32 %329, %.sroa.speculated.i.i %344 = zext nneg i32 %343 to i64 @@ -865,17 +865,17 @@ _ZL9hb_memcpyPvPKvm.exit.i133: ; preds = %346, %341 362: ; preds = %.thread.i.i.i122 %363 = shl nuw i32 %359, 2 %364 = zext i32 %363 to i64 - %malloc322 = call ptr @malloc(i64 %364) - %.not21.i.i.i123 = icmp eq ptr %malloc322, null + %malloc319 = call ptr @malloc(i64 %364) + %.not21.i.i.i123 = icmp eq ptr %malloc319, null br i1 %.not21.i.i.i123, label %.sink.split, label %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124, !prof !18 _ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124: ; preds = %362 - store ptr %malloc322, ptr %136, align 8, !tbaa !32 + store ptr %malloc319, ptr %136, align 8, !tbaa !32 store i32 %359, ptr %15, align 8, !tbaa !70 br label %365 365: ; preds = %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124, %356 - %366 = phi ptr [ %malloc322, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124 ], [ null, %356 ] + %366 = phi ptr [ %malloc319, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124 ], [ null, %356 ] store i32 %332, ptr %137, align 4, !tbaa !35 %367 = shl i32 %343, 2 %.not.i.i116 = icmp eq i32 %367, 0 @@ -918,18 +918,18 @@ _ZL9hb_memcpyPvPKvm.exit.i117: ; preds = %368, %365 383: ; preds = %.thread.i.i.i112 %384 = shl nuw i32 %380, 2 %385 = zext i32 %384 to i64 - %malloc323 = call ptr @malloc(i64 %385) - %.not21.i.i.i113 = icmp eq ptr %malloc323, null + %malloc320 = call ptr @malloc(i64 %385) + %.not21.i.i.i113 = icmp eq ptr %malloc320, null br i1 %.not21.i.i.i113, label %.sink.split, label %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i, !prof !18 _ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i: ; preds = %383 - store ptr %malloc323, ptr %138, align 8, !tbaa !32 + store ptr %malloc320, ptr %138, align 8, !tbaa !32 store i32 %380, ptr %16, align 8, !tbaa !70 br label %386 386: ; preds = %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i, %377 %387 = phi i32 [ %380, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i ], [ 0, %377 ] - %388 = phi ptr [ %malloc323, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i ], [ null, %377 ] + %388 = phi ptr [ %malloc320, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i ], [ null, %377 ] store i32 %332, ptr %139, align 4, !tbaa !35 br i1 %.not.i.i116, label %_ZL9hb_memcpyPvPKvm.exit.i, label %389, !prof !14 @@ -1167,9 +1167,9 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit159.i: ; preds = %465, %_ZN11hb_vecto %467 = shl i32 %.sroa.speculated.i.i, 1 %468 = call i32 @llvm.smax.i32(i32 %467, i32 0) %.not.i.i160.i = icmp slt i32 %467, 1 - br i1 %.not.i.i160.i, label %.thread90.i, label %.preheader.i.i.i, !prof !20 + br i1 %.not.i.i160.i, label %.thread88.i, label %.preheader.i.i.i, !prof !20 -.thread90.i: ; preds = %466 +.thread88.i: ; preds = %466 store i32 %468, ptr %154, align 4, !tbaa !35 store i32 %468, ptr %156, align 4, !tbaa !35 br label %_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i @@ -1214,12 +1214,12 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit159.i: ; preds = %465, %_ZN11hb_vecto 482: ; preds = %.thread.i.i166.i %483 = shl nuw i32 %479, 2 %484 = zext i32 %483 to i64 - %malloc88.i = call ptr @malloc(i64 %484) - %.not21.i.i167.i = icmp eq ptr %malloc88.i, null + %malloc86.i = call ptr @malloc(i64 %484) + %.not21.i.i167.i = icmp eq ptr %malloc86.i, null br i1 %.not21.i.i167.i, label %_ZN11hb_vector_tIiLb0EED2Ev.exit207.i, label %.preheader.i.i176.preheader.i, !prof !18 .preheader.i.i176.preheader.i: ; preds = %482 - store ptr %malloc88.i, ptr %155, align 8, !tbaa !32 + store ptr %malloc86.i, ptr %155, align 8, !tbaa !32 store i32 %479, ptr %26, align 8, !tbaa !70 store i32 %468, ptr %156, align 4, !tbaa !35 br label %.preheader.i.i176.i @@ -1239,19 +1239,19 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit159.i: ; preds = %465, %_ZN11hb_vecto 490: ; preds = %.thread.i.i178.i %491 = zext nneg i32 %487 to i64 %492 = mul nuw nsw i64 %491, 12 - %malloc89.i = call ptr @malloc(i64 %492) - %.not21.i.i179.i = icmp eq ptr %malloc89.i, null + %malloc87.i = call ptr @malloc(i64 %492) + %.not21.i.i179.i = icmp eq ptr %malloc87.i, null br i1 %.not21.i.i179.i, label %_ZN11hb_vector_tIiLb0EED2Ev.exit207.i, label %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i, !prof !18 _ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i: ; preds = %490 - store ptr %malloc89.i, ptr %157, align 8, !tbaa !22 + store ptr %malloc87.i, ptr %157, align 8, !tbaa !22 store i32 %487, ptr %27, align 8, !tbaa !60 br label %_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i -_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i: ; preds = %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i, %.thread90.i - %493 = phi ptr [ %malloc88.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread90.i ] - %494 = phi ptr [ %malloc.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread90.i ] - %495 = phi ptr [ %malloc89.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread90.i ] +_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i: ; preds = %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i, %.thread88.i + %493 = phi ptr [ %malloc86.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] + %494 = phi ptr [ %malloc.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] + %495 = phi ptr [ %malloc87.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] store i32 %468, ptr %158, align 4, !tbaa !4 %496 = shl nuw nsw i64 %.sroa.3.8.insert.ext.i.i, 2 %497 = getelementptr inbounds nuw i32, ptr %494, i64 %.sroa.3.8.insert.ext.i.i @@ -1309,15 +1309,15 @@ _ZL9hb_memcpyPvPKvm.exit193.i: ; preds = %504, %_ZL9hb_memcpy br label %514 .preheader.loopexit.i: ; preds = %_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3setERKS1_.exit.i - %.pre82.pre.i = load i32, ptr %.phi.trans.insert.i, align 4, !tbaa !125 - %.pre83.pre.i = load ptr, ptr %.phi.trans.insert86.i, align 8, !tbaa !126 + %.pre80.pre.i = load i32, ptr %.phi.trans.insert.i, align 4, !tbaa !125 + %.pre81.pre.i = load ptr, ptr %.phi.trans.insert84.i, align 8, !tbaa !126 br label %.preheader.i99 .preheader.i99: ; preds = %.preheader.loopexit.i, %506 - %.pre83.i = phi ptr [ %.pre83.pre.i, %.preheader.loopexit.i ], [ null, %506 ] - %.pre82.i = phi i32 [ %.pre82.pre.i, %.preheader.loopexit.i ], [ 0, %506 ] - %.not4.i.i.i.i.i.i.i.i.i.i.i = icmp sgt i32 %.pre82.i, 0 - %513 = add nsw i32 %.pre82.i, -1 + %.pre81.i = phi ptr [ %.pre81.pre.i, %.preheader.loopexit.i ], [ null, %506 ] + %.pre80.i = phi i32 [ %.pre80.pre.i, %.preheader.loopexit.i ], [ 0, %506 ] + %.not4.i.i.i.i.i.i.i.i.i.i.i = icmp sgt i32 %.pre80.i, 0 + %513 = add nsw i32 %.pre80.i, -1 br label %570 514: ; preds = %_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3setERKS1_.exit.i, %.lr.ph48.i @@ -1392,18 +1392,18 @@ _ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3addEj.exit.i: ; preds = %528, %52 546: ; preds = %._crit_edge44.i %547 = icmp slt i32 %.0110.lcssa.i, 0 - %.pre81.i = load ptr, ptr %174, align 8, !tbaa !98 + %.pre79.i = load ptr, ptr %174, align 8, !tbaa !98 br i1 %547, label %552, label %548 548: ; preds = %546 %549 = zext nneg i32 %.0110.lcssa.i to i64 - %550 = getelementptr inbounds nuw i32, ptr %.pre81.i, i64 %549 + %550 = getelementptr inbounds nuw i32, ptr %.pre79.i, i64 %549 %551 = load i32, ptr %550, align 4, !tbaa !29 br label %552 552: ; preds = %548, %546 %553 = phi i32 [ %551, %548 ], [ 0, %546 ] - %554 = getelementptr inbounds i32, ptr %.pre81.i, i64 %indvars.iv70.i + %554 = getelementptr inbounds i32, ptr %.pre79.i, i64 %indvars.iv70.i %555 = load i32, ptr %554, align 4, !tbaa !29 %556 = sub i32 %555, %553 %.not131.i = icmp ugt i32 %556, %.011345.i @@ -1478,12 +1478,12 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit203.i: ; preds = %_ZN11hb_vector_tIiL %571 = trunc nuw i64 %indvars.iv74.i to i32 %572 = lshr i32 %571, 9 %573 = load atomic i32, ptr %162 monotonic, align 8 - %574 = icmp ult i32 %573, %.pre82.i + %574 = icmp ult i32 %573, %.pre80.i br i1 %574, label %575, label %._crit_edge.i.i.i.i.i.i.i, !prof !20 575: ; preds = %570 %576 = zext i32 %573 to i64 - %577 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre83.i, i64 %576 + %577 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre81.i, i64 %576 %578 = load i32, ptr %577, align 4, !tbaa !130 %.not.i.i.i.i.i.i.i = icmp eq i32 %578, %572 br i1 %.not.i.i.i.i.i.i.i, label %.thread.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i @@ -1502,7 +1502,7 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit203.i: ; preds = %_ZN11hb_vector_tIiL %581 = lshr i32 %580, 1 %582 = zext nneg i32 %581 to i64 %583 = shl nuw nsw i64 %582, 3 - %584 = getelementptr inbounds nuw i8, ptr %.pre83.i, i64 %583 + %584 = getelementptr inbounds nuw i8, ptr %.pre81.i, i64 %583 %585 = load i32, ptr %584, align 4, !tbaa !130 %586 = icmp slt i32 %572, %585 br i1 %586, label %587, label %589 @@ -1527,7 +1527,7 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit203.i: ; preds = %_ZN11hb_vector_tIiL _ZNK11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE5bfindIS1_Lb1ETnPN12hb_enable_ifIXT0_EvE4typeELPv0EEEbRKT_Pj14hb_not_found_tj.exit.i.i.i.i.i.i.i: ; preds = %589 store atomic i32 %581, ptr %162 monotonic, align 8 - %593 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre83.i, i64 %582, i32 1 + %593 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre81.i, i64 %582, i32 1 br label %_ZNK12hb_bit_set_t8page_forEj.exit.i.i.i.i.i.i _ZNK12hb_bit_set_t8page_forEj.exit.i.i.i.i.i.i: ; preds = %_ZNK11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE5bfindIS1_Lb1ETnPN12hb_enable_ifIXT0_EvE4typeELPv0EEEbRKT_Pj14hb_not_found_tj.exit.i.i.i.i.i.i.i, %.thread.i.i.i.i.i.i.i @@ -1571,7 +1571,7 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit207.thread.i: ; preds = %474, %.thread.i.i.i br label %_ZN11hb_vector_tIiLb0EED2Ev.exit209.i _ZN11hb_vector_tIiLb0EED2Ev.exit207.i: ; preds = %490, %.thread.i.i178.i, %482, %.thread.i.i166.i - %.ph.i = phi ptr [ null, %482 ], [ null, %.thread.i.i166.i ], [ %malloc88.i, %.thread.i.i178.i ], [ %malloc88.i, %490 ] + %.ph.i = phi ptr [ null, %482 ], [ null, %.thread.i.i166.i ], [ %malloc86.i, %.thread.i.i178.i ], [ %malloc86.i, %490 ] call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #11 call void @free(ptr noundef %.ph.i) #11 br label %_ZN11hb_vector_tIiLb0EED2Ev.exit209.i @@ -1590,14 +1590,14 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit209.i: ; preds = %_ZN11hb_vector_tIiL .sink.split: ; preds = %362, %.thread.i.i.i122, %383, %.thread.i.i.i112, %338, %.thread.i.i.i138 %.sink.sink = phi ptr [ %17, %.thread.i.i.i138 ], [ %17, %338 ], [ %15, %362 ], [ %15, %.thread.i.i.i122 ], [ %16, %383 ], [ %16, %.thread.i.i.i112 ] - %.ph363 = phi ptr [ null, %.thread.i.i.i138 ], [ null, %338 ], [ %342, %362 ], [ %342, %.thread.i.i.i122 ], [ %342, %383 ], [ %342, %.thread.i.i.i112 ] + %.ph360 = phi ptr [ null, %.thread.i.i.i138 ], [ null, %338 ], [ %342, %362 ], [ %342, %.thread.i.i.i122 ], [ %342, %383 ], [ %342, %.thread.i.i.i112 ] store i32 -1, ptr %.sink.sink, align 8, !tbaa !29 call void @_ZN14hb_sparseset_tI23hb_bit_set_invertible_tED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18) #11 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %18) #11 br label %610 610: ; preds = %.sink.split, %.critedge134.critedge.i - %611 = phi ptr [ %342, %.critedge134.critedge.i ], [ %.ph363, %.sink.split ] + %611 = phi ptr [ %342, %.critedge134.critedge.i ], [ %.ph360, %.sink.split ] call void @free(ptr noundef %611) #11 %.pre = load i32, ptr %16, align 8, !tbaa !70 br label %_ZN11hb_vector_tI15contour_point_tLb0EED2Ev.exit211.i diff --git a/bench/icu/optimized/alphaindex.ll b/bench/icu/optimized/alphaindex.ll index c6846104bcc..961709976ce 100644 --- a/bench/icu/optimized/alphaindex.ll +++ b/bench/icu/optimized/alphaindex.ll @@ -2605,7 +2605,7 @@ define void @_ZNK6icu_7715AlphabeticIndex10initLabelsERNS_7UVectorER10UErrorCode %10 = tail call noundef ptr @_ZN6icu_7711Normalizer215getNFKDInstanceER10UErrorCode(ptr noundef nonnull align 4 dereferenceable(4) %2) %11 = load i32, ptr %2, align 4, !tbaa !40 %12 = icmp slt i32 %11, 1 - br i1 %12, label %13, label %261 + br i1 %12, label %13, label %265 13: ; preds = %3 %14 = getelementptr inbounds nuw i8, ptr %0, i64 48 @@ -2744,7 +2744,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit: ; preds = 87: ; preds = %_ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit %88 = icmp slt i32 %86, 0 - br i1 %88, label %225, label %89 + br i1 %88, label %229, label %89 89: ; preds = %87 %90 = load ptr, ptr %26, align 8, !tbaa !46 @@ -2753,7 +2753,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit: ; preds = 92: ; preds = %89 %93 = icmp sgt i32 %91, -1 - br i1 %93, label %225, label %94 + br i1 %93, label %229, label %94 94: ; preds = %92 br i1 %.not91, label %.critedge101.thread, label %95 @@ -2772,7 +2772,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit: ; preds = %99 = icmp eq i32 %98, 0 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %9) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #16 - br i1 %99, label %225, label %.critedge101.thread + br i1 %99, label %229, label %.critedge101.thread 100: ; preds = %95 %101 = landingpad { ptr, i32 } @@ -2882,7 +2882,7 @@ _ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1 %.0.i = phi ptr [ null, %134 ], [ %131, %133 ], [ null, %_ZN6icu_7712_GLOBAL__N_112binarySearchERKNS_7UVectorERKNS_13UnicodeStringERKNS_8CollatorE.exit.thread ], [ %.sroa.0.1, %129 ] %137 = xor i32 %.021.i129, -1 invoke void @_ZN6icu_777UVector15insertElementAtEPviR10UErrorCode(ptr noundef nonnull align 8 dereferenceable(40) %1, ptr noundef %.0.i, i32 noundef %137, ptr noundef nonnull align 4 dereferenceable(4) %2) - to label %225 unwind label %.loopexit.split-lp + to label %229 unwind label %.loopexit.split-lp .loopexit133: ; preds = %.preheader.i, %.noexc %lpad.loopexit = landingpad { ptr, i32 } @@ -2896,7 +2896,7 @@ _ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1 138: ; preds = %_ZN6icu_7712_GLOBAL__N_112binarySearchERKNS_7UVectorERKNS_13UnicodeStringERKNS_8CollatorE.exit %139 = invoke noundef ptr @_ZNK6icu_777UVector9elementAtEi(ptr noundef nonnull align 8 dereferenceable(40) %1, i32 noundef %.2.ph.i) - to label %_ZN6icu_7712_GLOBAL__N_19getStringERKNS_7UVectorEi.exit unwind label %223 + to label %_ZN6icu_7712_GLOBAL__N_19getStringERKNS_7UVectorEi.exit unwind label %227 _ZN6icu_7712_GLOBAL__N_19getStringERKNS_7UVectorEi.exit: ; preds = %138 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #16 @@ -2936,7 +2936,7 @@ _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit.i: ; _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i: ; preds = %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit.i %152 = load i32, ptr %4, align 4, !tbaa !40 %153 = icmp slt i32 %152, 1 - br i1 %153, label %154, label %211 + br i1 %153, label %154, label %215 154: ; preds = %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i %155 = invoke noundef i32 @_ZNK6icu_7713UnicodeString11countChar32Eii(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef 0, i32 noundef 2147483647) @@ -2953,7 +2953,7 @@ _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i: 159: ; preds = %158 %160 = icmp slt i32 %155, %157 %161 = zext i1 %160 to i8 - br label %211 + br label %215 162: ; preds = %.sink.split.i.i.i23.i, %.sink.split.i.i.i.i, %156, %154 %163 = landingpad { ptr, i32 } @@ -2985,60 +2985,66 @@ _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i: %180 = sext i16 %179 to i32 %181 = select i1 %177, i32 %178, i32 %180 %spec.select.i.i.i = call i32 @llvm.smin.i32(i32 %176, i32 0) - %.010.i.i.i = call i32 @llvm.smax.i32(i32 %176, i32 0) - %182 = and i16 %166, 2 - %.not.i.i.i.i = icmp eq i16 %182, 0 - %183 = load ptr, ptr %33, align 8 - %184 = select i1 %.not.i.i.i.i, ptr %183, ptr %32 - %185 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString23doCompareCodePointOrderEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef 0, i32 noundef %181, ptr noundef %184, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) + %182 = icmp slt i32 %176, 0 + %183 = sub nsw i32 %176, %spec.select.i.i.i + %spec.select13.i.i.i = call i32 @llvm.smin.i32(i32 %176, i32 %183) + %.010.i.i.i = select i1 %182, i32 0, i32 %spec.select13.i.i.i + %184 = and i16 %166, 2 + %.not.i.i.i.i = icmp eq i16 %184, 0 + %185 = load ptr, ptr %33, align 8 + %186 = select i1 %.not.i.i.i.i, ptr %185, ptr %32 + %187 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString23doCompareCodePointOrderEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef 0, i32 noundef %181, ptr noundef %186, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) to label %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i unwind label %162 _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i: ; preds = %.sink.split.i.i.i.i, %168 - %.0.i.i.i = phi i8 [ %171, %168 ], [ %185, %.sink.split.i.i.i.i ] + %.0.i.i.i = phi i8 [ %171, %168 ], [ %187, %.sink.split.i.i.i.i ] %.not17.i = icmp eq i8 %.0.i.i.i, 0 - br i1 %.not17.i, label %187, label %186 + br i1 %.not17.i, label %189, label %188 -186: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i +188: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i %.lobit19.i = lshr i8 %.0.i.i.i, 7 - br label %211 - -187: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i - %188 = getelementptr inbounds nuw i8, ptr %139, i64 8 - %189 = load i16, ptr %188, align 8, !tbaa !39 - %190 = and i16 %189, 1 - %.not.i.i21.i = icmp eq i16 %190, 0 - br i1 %.not.i.i21.i, label %.sink.split.i.i.i23.i, label %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit28.i - -.sink.split.i.i.i23.i: ; preds = %187 - %191 = getelementptr inbounds nuw i8, ptr %.076, i64 8 - %192 = load i16, ptr %191, align 8, !tbaa !39 - %193 = icmp slt i16 %189, 0 - %194 = getelementptr inbounds nuw i8, ptr %139, i64 12 - %195 = load i32, ptr %194, align 4 - %196 = ashr i16 %189, 5 - %197 = sext i16 %196 to i32 - %198 = select i1 %193, i32 %195, i32 %197 - %199 = icmp slt i16 %192, 0 - %200 = getelementptr inbounds nuw i8, ptr %.076, i64 12 - %201 = load i32, ptr %200, align 4 - %202 = ashr i16 %192, 5 - %203 = sext i16 %202 to i32 - %204 = select i1 %199, i32 %201, i32 %203 - %spec.select.i.i24.i = call i32 @llvm.smin.i32(i32 %198, i32 0) - %.010.i.i25.i = call i32 @llvm.smax.i32(i32 %198, i32 0) - %205 = and i16 %189, 2 - %.not.i.i.i26.i = icmp eq i16 %205, 0 - %206 = getelementptr inbounds nuw i8, ptr %139, i64 10 - %207 = getelementptr inbounds nuw i8, ptr %139, i64 24 - %208 = load ptr, ptr %207, align 8 - %209 = select i1 %.not.i.i.i26.i, ptr %208, ptr %206 - %210 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString23doCompareCodePointOrderEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.076, i32 noundef 0, i32 noundef %204, ptr noundef %209, i32 noundef %spec.select.i.i24.i, i32 noundef %.010.i.i25.i) - to label %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit28.i unwind label %162 - -_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit28.i: ; preds = %.sink.split.i.i.i23.i, %187 - %.0.i.i22.i = phi i8 [ %210, %.sink.split.i.i.i23.i ], [ 0, %187 ] + br label %215 + +189: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i + %190 = getelementptr inbounds nuw i8, ptr %139, i64 8 + %191 = load i16, ptr %190, align 8, !tbaa !39 + %192 = and i16 %191, 1 + %.not.i.i21.i = icmp eq i16 %192, 0 + br i1 %.not.i.i21.i, label %.sink.split.i.i.i23.i, label %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i + +.sink.split.i.i.i23.i: ; preds = %189 + %193 = getelementptr inbounds nuw i8, ptr %.076, i64 8 + %194 = load i16, ptr %193, align 8, !tbaa !39 + %195 = icmp slt i16 %191, 0 + %196 = getelementptr inbounds nuw i8, ptr %139, i64 12 + %197 = load i32, ptr %196, align 4 + %198 = ashr i16 %191, 5 + %199 = sext i16 %198 to i32 + %200 = select i1 %195, i32 %197, i32 %199 + %201 = icmp slt i16 %194, 0 + %202 = getelementptr inbounds nuw i8, ptr %.076, i64 12 + %203 = load i32, ptr %202, align 4 + %204 = ashr i16 %194, 5 + %205 = sext i16 %204 to i32 + %206 = select i1 %201, i32 %203, i32 %205 + %spec.select.i.i24.i = call i32 @llvm.smin.i32(i32 %200, i32 0) + %207 = icmp slt i32 %200, 0 + %208 = sub nsw i32 %200, %spec.select.i.i24.i + %spec.select13.i.i25.i = call i32 @llvm.smin.i32(i32 %200, i32 %208) + %.010.i.i26.i = select i1 %207, i32 0, i32 %spec.select13.i.i25.i + %209 = and i16 %191, 2 + %.not.i.i.i27.i = icmp eq i16 %209, 0 + %210 = getelementptr inbounds nuw i8, ptr %139, i64 10 + %211 = getelementptr inbounds nuw i8, ptr %139, i64 24 + %212 = load ptr, ptr %211, align 8 + %213 = select i1 %.not.i.i.i27.i, ptr %212, ptr %210 + %214 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString23doCompareCodePointOrderEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.076, i32 noundef 0, i32 noundef %206, ptr noundef %213, i32 noundef %spec.select.i.i24.i, i32 noundef %.010.i.i26.i) + to label %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i unwind label %162 + +_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i: ; preds = %.sink.split.i.i.i23.i, %189 + %.0.i.i22.i = phi i8 [ %214, %.sink.split.i.i.i23.i ], [ 0, %189 ] %.lobit.i = lshr i8 %.0.i.i22.i, 7 - br label %211 + br label %215 .body.i: ; preds = %162, %150 %.pn.i = phi { ptr, i32 } [ %163, %162 ], [ %151, %150 ] @@ -3049,148 +3055,148 @@ _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit28.i: ; preds = %.si call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #16 br label %.body -211: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit28.i, %186, %159, %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i - %.013.i = phi i8 [ 0, %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i ], [ %161, %159 ], [ %.lobit19.i, %186 ], [ %.lobit.i, %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit28.i ] +215: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i, %188, %159, %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i + %.013.i = phi i8 [ 0, %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i ], [ %161, %159 ], [ %.lobit19.i, %188 ], [ %.lobit.i, %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #16 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #16 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #16 %.not93 = icmp eq i8 %.013.i, 0 - br i1 %.not93, label %225, label %212 + br i1 %.not93, label %229, label %216 -212: ; preds = %211 - %213 = load i32, ptr %2, align 4, !tbaa !40 - %214 = icmp slt i32 %213, 1 - br i1 %214, label %215, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 +216: ; preds = %215 + %217 = load i32, ptr %2, align 4, !tbaa !40 + %218 = icmp slt i32 %217, 1 + br i1 %218, label %219, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 -215: ; preds = %212 +219: ; preds = %216 %.not.i113 = icmp eq ptr %.sroa.0.1, null - br i1 %.not.i113, label %216, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 + br i1 %.not.i113, label %220, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 -216: ; preds = %215 - %217 = call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #16 - %218 = icmp eq ptr %217, null - br i1 %218, label %220, label %219 +220: ; preds = %219 + %221 = call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #16 + %222 = icmp eq ptr %221, null + br i1 %222, label %224, label %223 -219: ; preds = %216 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %217, ptr noundef nonnull align 8 dereferenceable(64) %.076) - to label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 unwind label %221 +223: ; preds = %220 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %221, ptr noundef nonnull align 8 dereferenceable(64) %.076) + to label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 unwind label %225 -220: ; preds = %216 +224: ; preds = %220 store i32 7, ptr %2, align 4, !tbaa !40 br label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 -221: ; preds = %219 - %222 = landingpad { ptr, i32 } +225: ; preds = %223 + %226 = landingpad { ptr, i32 } cleanup - call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %217) #16 + call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %221) #16 br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118 -_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116: ; preds = %220, %219, %212, %215 - %.sroa.0.10 = phi ptr [ null, %220 ], [ null, %219 ], [ %.sroa.0.1, %212 ], [ null, %215 ] - %.0.i112 = phi ptr [ null, %220 ], [ %217, %219 ], [ null, %212 ], [ %.sroa.0.1, %215 ] +_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116: ; preds = %224, %223, %216, %219 + %.sroa.0.10 = phi ptr [ null, %224 ], [ null, %223 ], [ %.sroa.0.1, %216 ], [ null, %219 ] + %.0.i112 = phi ptr [ null, %224 ], [ %221, %223 ], [ null, %216 ], [ %.sroa.0.1, %219 ] invoke void @_ZN6icu_777UVector12setElementAtEPvi(ptr noundef nonnull align 8 dereferenceable(40) %1, ptr noundef %.0.i112, i32 noundef %.2.ph.i) - to label %225 unwind label %223 + to label %229 unwind label %227 -223: ; preds = %138, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 +227: ; preds = %138, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 %.sroa.0.5 = phi ptr [ %.sroa.0.10, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 ], [ %.sroa.0.1, %138 ] - %224 = landingpad { ptr, i32 } + %228 = landingpad { ptr, i32 } cleanup br label %.body -225: ; preds = %87, %.critedge101, %92, %211, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit - %.sroa.0.3 = phi ptr [ %.sroa.0.1, %87 ], [ %.sroa.0.1, %92 ], [ %.sroa.0.1, %.critedge101 ], [ %.sroa.0.7, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit ], [ %.sroa.0.1, %211 ], [ %.sroa.0.10, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 ] - %226 = icmp eq ptr %.sroa.0.3, null - br i1 %226, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, label %227 +229: ; preds = %87, %.critedge101, %92, %215, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit + %.sroa.0.3 = phi ptr [ %.sroa.0.1, %87 ], [ %.sroa.0.1, %92 ], [ %.sroa.0.1, %.critedge101 ], [ %.sroa.0.7, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit ], [ %.sroa.0.1, %215 ], [ %.sroa.0.10, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 ] + %230 = icmp eq ptr %.sroa.0.3, null + br i1 %230, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, label %231 -227: ; preds = %225 - %228 = load ptr, ptr %.sroa.0.3, align 8, !tbaa !3 - %229 = getelementptr inbounds nuw i8, ptr %228, i64 8 - %230 = load ptr, ptr %229, align 8 - call void %230(ptr noundef nonnull align 8 dereferenceable(64) %.sroa.0.3) #16 +231: ; preds = %229 + %232 = load ptr, ptr %.sroa.0.3, align 8, !tbaa !3 + %233 = getelementptr inbounds nuw i8, ptr %232, i64 8 + %234 = load ptr, ptr %233, align 8 + call void %234(ptr noundef nonnull align 8 dereferenceable(64) %.sroa.0.3) #16 br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117 -_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %225, %227 - %231 = load i32, ptr %2, align 4, !tbaa !40 - %232 = icmp sgt i32 %231, 0 - br i1 %232, label %.loopexit, label %34, !llvm.loop !85 - -.body: ; preds = %.loopexit133, %.loopexit.split-lp, %.body.i, %144, %223, %104, %54 - %.sroa.0.2 = phi ptr [ %.sroa.0.1, %104 ], [ %.sroa.0.0, %54 ], [ %.sroa.0.1, %.body.i ], [ %.sroa.0.1, %144 ], [ %.sroa.0.5, %223 ], [ %.sroa.0.1, %.loopexit133 ], [ %.sroa.0.7, %.loopexit.split-lp ] - %.pn94.pn = phi { ptr, i32 } [ %.pn, %104 ], [ %55, %54 ], [ %.pn.i, %.body.i ], [ %145, %144 ], [ %224, %223 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] - %233 = icmp eq ptr %.sroa.0.2, null - br i1 %233, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118, label %234 - -234: ; preds = %.body - %235 = load ptr, ptr %.sroa.0.2, align 8, !tbaa !3 - %236 = getelementptr inbounds nuw i8, ptr %235, i64 8 - %237 = load ptr, ptr %236, align 8 - call void %237(ptr noundef nonnull align 8 dereferenceable(64) %.sroa.0.2) #16 +_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %229, %231 + %235 = load i32, ptr %2, align 4, !tbaa !40 + %236 = icmp sgt i32 %235, 0 + br i1 %236, label %.loopexit, label %34, !llvm.loop !85 + +.body: ; preds = %.loopexit133, %.loopexit.split-lp, %.body.i, %144, %227, %104, %54 + %.sroa.0.2 = phi ptr [ %.sroa.0.1, %104 ], [ %.sroa.0.0, %54 ], [ %.sroa.0.1, %.body.i ], [ %.sroa.0.1, %144 ], [ %.sroa.0.5, %227 ], [ %.sroa.0.1, %.loopexit133 ], [ %.sroa.0.7, %.loopexit.split-lp ] + %.pn94.pn = phi { ptr, i32 } [ %.pn, %104 ], [ %55, %54 ], [ %.pn.i, %.body.i ], [ %145, %144 ], [ %228, %227 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] + %237 = icmp eq ptr %.sroa.0.2, null + br i1 %237, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118, label %238 + +238: ; preds = %.body + %239 = load ptr, ptr %.sroa.0.2, align 8, !tbaa !3 + %240 = getelementptr inbounds nuw i8, ptr %239, i64 8 + %241 = load ptr, ptr %240, align 8 + call void %241(ptr noundef nonnull align 8 dereferenceable(64) %.sroa.0.2) #16 br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118 .critedge: ; preds = %36 %.pre.pre = load i32, ptr %2, align 4, !tbaa !40 - %238 = icmp slt i32 %.pre.pre, 1 - br i1 %238, label %239, label %.loopexit - -239: ; preds = %.critedge - %240 = getelementptr inbounds nuw i8, ptr %1, i64 8 - %241 = load i32, ptr %240, align 8, !tbaa !18 - %242 = add nsw i32 %241, -1 - %243 = getelementptr inbounds nuw i8, ptr %0, i64 32 - %244 = load i32, ptr %243, align 8, !tbaa !38 - %245 = icmp sgt i32 %242, %244 - %246 = icmp sgt i32 %241, 0 - %or.cond = and i1 %245, %246 + %242 = icmp slt i32 %.pre.pre, 1 + br i1 %242, label %243, label %.loopexit + +243: ; preds = %.critedge + %244 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %245 = load i32, ptr %244, align 8, !tbaa !18 + %246 = add nsw i32 %245, -1 + %247 = getelementptr inbounds nuw i8, ptr %0, i64 32 + %248 = load i32, ptr %247, align 8, !tbaa !38 + %249 = icmp sgt i32 %246, %248 + %250 = icmp sgt i32 %245, 0 + %or.cond = and i1 %249, %250 br i1 %or.cond, label %.lr.ph158, label %.loopexit -.lr.ph158: ; preds = %239, %258 - %247 = phi i32 [ %259, %258 ], [ %241, %239 ] - %.064157 = phi i32 [ %.1, %258 ], [ 0, %239 ] - %.065156 = phi i32 [ %.166, %258 ], [ -1, %239 ] - %.067155 = phi i32 [ %248, %258 ], [ 0, %239 ] - %248 = add nuw nsw i32 %.067155, 1 - %249 = load i32, ptr %243, align 8, !tbaa !38 - %250 = mul nsw i32 %249, %248 - %251 = sdiv i32 %250, %242 - %252 = icmp eq i32 %251, %.065156 - br i1 %252, label %253, label %256 - -253: ; preds = %.lr.ph158 +.lr.ph158: ; preds = %243, %262 + %251 = phi i32 [ %263, %262 ], [ %245, %243 ] + %.064157 = phi i32 [ %.1, %262 ], [ 0, %243 ] + %.065156 = phi i32 [ %.166, %262 ], [ -1, %243 ] + %.067155 = phi i32 [ %252, %262 ], [ 0, %243 ] + %252 = add nuw nsw i32 %.067155, 1 + %253 = load i32, ptr %247, align 8, !tbaa !38 + %254 = mul nsw i32 %253, %252 + %255 = sdiv i32 %254, %246 + %256 = icmp eq i32 %255, %.065156 + br i1 %256, label %257, label %260 + +257: ; preds = %.lr.ph158 invoke void @_ZN6icu_777UVector15removeElementAtEi(ptr noundef nonnull align 8 dereferenceable(40) %1, i32 noundef %.064157) - to label %._crit_edge unwind label %254 + to label %._crit_edge unwind label %258 -._crit_edge: ; preds = %253 - %.pre180 = load i32, ptr %240, align 8, !tbaa !18 - br label %258 +._crit_edge: ; preds = %257 + %.pre180 = load i32, ptr %244, align 8, !tbaa !18 + br label %262 -254: ; preds = %253 - %255 = landingpad { ptr, i32 } +258: ; preds = %257 + %259 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118 -256: ; preds = %.lr.ph158 - %257 = add nsw i32 %.064157, 1 - br label %258 +260: ; preds = %.lr.ph158 + %261 = add nsw i32 %.064157, 1 + br label %262 -258: ; preds = %._crit_edge, %256 - %259 = phi i32 [ %.pre180, %._crit_edge ], [ %247, %256 ] - %.166 = phi i32 [ %.065156, %._crit_edge ], [ %251, %256 ] - %.1 = phi i32 [ %.064157, %._crit_edge ], [ %257, %256 ] - %260 = icmp slt i32 %.1, %259 - br i1 %260, label %.lr.ph158, label %.loopexit, !llvm.loop !86 +262: ; preds = %._crit_edge, %260 + %263 = phi i32 [ %.pre180, %._crit_edge ], [ %251, %260 ] + %.166 = phi i32 [ %.065156, %._crit_edge ], [ %255, %260 ] + %.1 = phi i32 [ %.064157, %._crit_edge ], [ %261, %260 ] + %264 = icmp slt i32 %.1, %263 + br i1 %264, label %.lr.ph158, label %.loopexit, !llvm.loop !86 -.loopexit: ; preds = %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, %258, %13, %239, %.critedge, %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit +.loopexit: ; preds = %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, %262, %13, %243, %.critedge, %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit call void @_ZN6icu_7718UnicodeSetIteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #16 - br label %261 + br label %265 -261: ; preds = %3, %.loopexit +265: ; preds = %3, %.loopexit ret void -_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118: ; preds = %221, %135, %83, %.body, %234, %52, %254, %50 - %.pn94.pn.pn.pn.pn = phi { ptr, i32 } [ %255, %254 ], [ %51, %50 ], [ %53, %52 ], [ %.pn94.pn, %.body ], [ %.pn94.pn, %234 ], [ %222, %221 ], [ %136, %135 ], [ %84, %83 ] +_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118: ; preds = %225, %135, %83, %.body, %238, %52, %258, %50 + %.pn94.pn.pn.pn.pn = phi { ptr, i32 } [ %259, %258 ], [ %51, %50 ], [ %53, %52 ], [ %.pn94.pn, %.body ], [ %.pn94.pn, %238 ], [ %226, %225 ], [ %136, %135 ], [ %84, %83 ] call void @_ZN6icu_7718UnicodeSetIteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #16 resume { ptr, i32 } %.pn94.pn.pn.pn.pn @@ -4639,9 +4645,6 @@ declare void @_ZN6icu_7711ReplaceableD2Ev(ptr noundef nonnull align 8 dereferenc ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #14 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #14 - ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #15 diff --git a/bench/icu/optimized/collationsets.ll b/bench/icu/optimized/collationsets.ll index e6fc4d7f6a3..d92bcc7a275 100644 --- a/bench/icu/optimized/collationsets.ll +++ b/bench/icu/optimized/collationsets.ll @@ -746,24 +746,24 @@ define void @_ZN6icu_7711TailoredSet15comparePrefixesEiPKDsS2_(ptr noundef nonnu cleanup %30 = load ptr, ptr %6, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %30) #9, !srcloc !46 - br label %101 + br label %103 31: ; preds = %11 %32 = landingpad { ptr, i32 } cleanup %33 = load ptr, ptr %8, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %33) #9, !srcloc !46 - br label %100 + br label %102 34: ; preds = %13 %35 = landingpad { ptr, i32 } cleanup - br label %99 + br label %101 36: ; preds = %40, %25 %37 = landingpad { ptr, i32 } cleanup - br label %98 + br label %100 38: ; preds = %27, %23 %.123 = phi ptr [ %.022, %23 ], [ %spec.select, %27 ] @@ -783,7 +783,7 @@ define void @_ZN6icu_7711TailoredSet15comparePrefixesEiPKDsS2_(ptr noundef nonnu %44 = icmp eq ptr %.123, %9 %45 = icmp eq ptr %.120, %9 %or.cond = and i1 %44, %45 - br i1 %or.cond, label %97, label %.thread + br i1 %or.cond, label %99, label %.thread .thread: ; preds = %42, %43 %.12042 = phi ptr [ %.120, %43 ], [ %16, %42 ] @@ -799,7 +799,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread %51 = trunc i16 %47 to i8 %52 = and i8 %51, 1 %53 = xor i8 %52, 1 - br label %78 + br label %80 .sink.split.i.i.i: ; preds = %.thread %54 = icmp slt i16 %49, 0 @@ -815,77 +815,80 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread %64 = sext i16 %63 to i32 %65 = select i1 %60, i32 %62, i32 %64 %spec.select.i.i = call i32 @llvm.smin.i32(i32 %59, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %59, i32 0) - %66 = and i16 %49, 2 - %.not.i.i.i = icmp eq i16 %66, 0 - %67 = getelementptr inbounds nuw i8, ptr %.12042, i64 10 - %68 = getelementptr inbounds nuw i8, ptr %.12042, i64 24 - %69 = load ptr, ptr %68, align 8 - %70 = select i1 %.not.i.i.i, ptr %69, ptr %67 - %71 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %65, ptr noundef %70, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) - to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %76 + %66 = icmp slt i32 %59, 0 + %67 = sub nsw i32 %59, %spec.select.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %59, i32 %67) + %.010.i.i = select i1 %66, i32 0, i32 %spec.select13.i.i + %68 = and i16 %49, 2 + %.not.i.i.i = icmp eq i16 %68, 0 + %69 = getelementptr inbounds nuw i8, ptr %.12042, i64 10 + %70 = getelementptr inbounds nuw i8, ptr %.12042, i64 24 + %71 = load ptr, ptr %70, align 8 + %72 = select i1 %.not.i.i.i, ptr %71, ptr %69 + %73 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %65, ptr noundef %72, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %78 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %.sink.split.i.i.i - %72 = icmp slt i8 %71, 0 - br i1 %72, label %73, label %78 + %74 = icmp slt i8 %73, 0 + br i1 %74, label %75, label %80 -73: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %74 = load ptr, ptr %0, align 8, !tbaa !16 - %75 = load i32, ptr %22, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %74, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef %1, i32 noundef %75) - to label %.backedge unwind label %76 +75: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %76 = load ptr, ptr %0, align 8, !tbaa !16 + %77 = load i32, ptr %22, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %76, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef %1, i32 noundef %77) + to label %.backedge unwind label %78 -76: ; preds = %.noexc37, %82, %.sink.split.i.i.i, %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit, %79, %73 - %77 = landingpad { ptr, i32 } +78: ; preds = %.noexc37, %84, %.sink.split.i.i.i, %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit, %81, %75 + %79 = landingpad { ptr, i32 } cleanup - br label %98 + br label %100 -78: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0.i.i44 = phi i8 [ %53, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %71, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] +80: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %.0.i.i44 = phi i8 [ %53, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %73, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] %.not32 = icmp eq i8 %.0.i.i44, 0 - br i1 %.not32, label %82, label %79 - -79: ; preds = %78 - %80 = load ptr, ptr %17, align 8, !tbaa !27 - %81 = load i32, ptr %18, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %80, ptr noundef nonnull align 8 dereferenceable(64) %.12042, i32 noundef %1, i32 noundef %81) - to label %.backedge unwind label %76 - -82: ; preds = %78 - %83 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %19, ptr noundef nonnull align 8 dereferenceable(64) %.123) - to label %.noexc37 unwind label %76 - -.noexc37: ; preds = %82 - %84 = load i16, ptr %20, align 8, !tbaa !57 - %85 = icmp slt i16 %84, 0 - %86 = ashr i16 %84, 5 - %87 = sext i16 %86 to i32 - %88 = load i32, ptr %21, align 4 - %89 = select i1 %85, i32 %88, i32 %87 - %90 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString9doReverseEii(ptr noundef nonnull align 8 dereferenceable(64) %19, i32 noundef 0, i32 noundef %89) - to label %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit unwind label %76 + br i1 %.not32, label %84, label %81 + +81: ; preds = %80 + %82 = load ptr, ptr %17, align 8, !tbaa !27 + %83 = load i32, ptr %18, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %82, ptr noundef nonnull align 8 dereferenceable(64) %.12042, i32 noundef %1, i32 noundef %83) + to label %.backedge unwind label %78 + +84: ; preds = %80 + %85 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %19, ptr noundef nonnull align 8 dereferenceable(64) %.123) + to label %.noexc37 unwind label %78 + +.noexc37: ; preds = %84 + %86 = load i16, ptr %20, align 8, !tbaa !57 + %87 = icmp slt i16 %86, 0 + %88 = ashr i16 %86, 5 + %89 = sext i16 %88 to i32 + %90 = load i32, ptr %21, align 4 + %91 = select i1 %87, i32 %90, i32 %89 + %92 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString9doReverseEii(ptr noundef nonnull align 8 dereferenceable(64) %19, i32 noundef 0, i32 noundef %91) + to label %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit unwind label %78 _ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit: ; preds = %.noexc37 - %91 = load i32, ptr %22, align 4, !tbaa !47 - %92 = load i32, ptr %18, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %91, i32 noundef %92) - to label %93 unwind label %76 - -93: ; preds = %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit - %94 = load i16, ptr %20, align 8, !tbaa !57 - %95 = and i16 %94, 1 - %.not.i.i39 = icmp eq i16 %95, 0 - %96 = and i16 %94, 30 - %storemerge.i.i = select i1 %.not.i.i39, i16 %96, i16 2 + %93 = load i32, ptr %22, align 4, !tbaa !47 + %94 = load i32, ptr %18, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %93, i32 noundef %94) + to label %95 unwind label %78 + +95: ; preds = %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit + %96 = load i16, ptr %20, align 8, !tbaa !57 + %97 = and i16 %96, 1 + %.not.i.i39 = icmp eq i16 %97, 0 + %98 = and i16 %96, 30 + %storemerge.i.i = select i1 %.not.i.i39, i16 %98, i16 2 store i16 %storemerge.i.i, ptr %20, align 8, !tbaa !57 br label %.backedge -.backedge: ; preds = %93, %79, %73 - %.022.be = phi ptr [ null, %73 ], [ %.123, %79 ], [ null, %93 ] - %.019.be = phi ptr [ %.12042, %73 ], [ null, %79 ], [ null, %93 ] +.backedge: ; preds = %95, %81, %75 + %.022.be = phi ptr [ null, %75 ], [ %.123, %81 ], [ null, %95 ] + %.019.be = phi ptr [ %.12042, %75 ], [ null, %81 ], [ null, %95 ] br label %23, !llvm.loop !58 -97: ; preds = %43 +99: ; preds = %43 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %9) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #9 @@ -894,25 +897,25 @@ _ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit: ; preds = %.noexc3 call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #9 ret void -98: ; preds = %76, %36 - %.pn = phi { ptr, i32 } [ %77, %76 ], [ %37, %36 ] +100: ; preds = %78, %36 + %.pn = phi { ptr, i32 } [ %79, %78 ], [ %37, %36 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %9) #9 - br label %99 + br label %101 -99: ; preds = %98, %34 - %.pn.pn = phi { ptr, i32 } [ %.pn, %98 ], [ %35, %34 ] +101: ; preds = %100, %34 + %.pn.pn = phi { ptr, i32 } [ %.pn, %100 ], [ %35, %34 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #9 - br label %100 + br label %102 -100: ; preds = %99, %31 - %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %99 ], [ %32, %31 ] +102: ; preds = %101, %31 + %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %101 ], [ %32, %31 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %7) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #9 - br label %101 + br label %103 -101: ; preds = %100, %28 - %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %100 ], [ %29, %28 ] +103: ; preds = %102, %28 + %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %102 ], [ %29, %28 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #9 resume { ptr, i32 } %.pn.pn.pn.pn } @@ -1039,19 +1042,19 @@ _ZN6icu_7713UnicodeString6appendEDs.exit: ; preds = %18 cleanup %34 = load ptr, ptr %9, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %34) #9, !srcloc !46 - br label %114 + br label %116 35: ; preds = %14 %36 = landingpad { ptr, i32 } cleanup %37 = load ptr, ptr %11, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %37) #9, !srcloc !46 - br label %113 + br label %115 38: ; preds = %16 %39 = landingpad { ptr, i32 } cleanup - br label %112 + br label %114 .loopexit: ; preds = %29, %42 %lpad.loopexit = landingpad { ptr, i32 } @@ -1081,7 +1084,7 @@ _ZN6icu_7713UnicodeString6appendEDs.exit: ; preds = %18 %46 = icmp eq ptr %.123, %12 %47 = icmp eq ptr %.120, %12 %or.cond = and i1 %46, %47 - br i1 %or.cond, label %111, label %.thread + br i1 %or.cond, label %113, label %.thread .thread: ; preds = %44, %45 %.12045 = phi ptr [ %.120, %45 ], [ %21, %44 ] @@ -1097,7 +1100,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread %53 = trunc i16 %49 to i8 %54 = and i8 %53, 1 %55 = xor i8 %54, 1 - br label %91 + br label %93 .sink.split.i.i.i: ; preds = %.thread %56 = icmp slt i16 %51, 0 @@ -1113,46 +1116,49 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread %66 = sext i16 %65 to i32 %67 = select i1 %62, i32 %64, i32 %66 %spec.select.i.i = call i32 @llvm.smin.i32(i32 %61, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %61, i32 0) - %68 = and i16 %51, 2 - %.not.i.i.i = icmp eq i16 %68, 0 - %69 = getelementptr inbounds nuw i8, ptr %.12045, i64 10 - %70 = getelementptr inbounds nuw i8, ptr %.12045, i64 24 - %71 = load ptr, ptr %70, align 8 - %72 = select i1 %.not.i.i.i, ptr %71, ptr %69 - %73 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %67, ptr noundef %72, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) - to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %89 + %68 = icmp slt i32 %61, 0 + %69 = sub nsw i32 %61, %spec.select.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %61, i32 %69) + %.010.i.i = select i1 %68, i32 0, i32 %spec.select13.i.i + %70 = and i16 %51, 2 + %.not.i.i.i = icmp eq i16 %70, 0 + %71 = getelementptr inbounds nuw i8, ptr %.12045, i64 10 + %72 = getelementptr inbounds nuw i8, ptr %.12045, i64 24 + %73 = load ptr, ptr %72, align 8 + %74 = select i1 %.not.i.i.i, ptr %73, ptr %71 + %75 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %67, ptr noundef %74, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %91 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %.sink.split.i.i.i - %74 = icmp slt i8 %73, 0 - br i1 %74, label %75, label %91 + %76 = icmp slt i8 %75, 0 + br i1 %76, label %77, label %93 -75: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %76 = load ptr, ptr %22, align 8, !tbaa !38 +77: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %78 = load ptr, ptr %22, align 8, !tbaa !38 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #9 invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %6, ptr noundef nonnull align 8 dereferenceable(64) %23) - to label %.noexc37 unwind label %89 - -.noexc37: ; preds = %75 - %77 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %6, i32 noundef %1) - to label %78 unwind label %87 - -78: ; preds = %.noexc37 - %79 = load i16, ptr %48, align 8, !tbaa !57 - %80 = icmp slt i16 %79, 0 - %81 = ashr i16 %79, 5 - %82 = sext i16 %81 to i32 - %83 = load i32, ptr %63, align 4 - %84 = select i1 %80, i32 %83, i32 %82 - %85 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %77, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %84) - to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i unwind label %87 - -_ZN6icu_7713UnicodeString6appendERKS0_.exit.i: ; preds = %78 - %86 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %76, ptr noundef nonnull align 8 dereferenceable(64) %85) - to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit unwind label %87 - -87: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i, %78, %.noexc37 - %88 = landingpad { ptr, i32 } + to label %.noexc37 unwind label %91 + +.noexc37: ; preds = %77 + %79 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %6, i32 noundef %1) + to label %80 unwind label %89 + +80: ; preds = %.noexc37 + %81 = load i16, ptr %48, align 8, !tbaa !57 + %82 = icmp slt i16 %81, 0 + %83 = ashr i16 %81, 5 + %84 = sext i16 %83 to i32 + %85 = load i32, ptr %63, align 4 + %86 = select i1 %82, i32 %85, i32 %84 + %87 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %79, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %86) + to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i unwind label %89 + +_ZN6icu_7713UnicodeString6appendERKS0_.exit.i: ; preds = %80 + %88 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %78, ptr noundef nonnull align 8 dereferenceable(64) %87) + to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit unwind label %89 + +89: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i, %80, %.noexc37 + %90 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #9 @@ -1163,43 +1169,43 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit: ; preds = %_ZN6ic call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #9 br label %.backedge -89: ; preds = %92, %75, %.sink.split.i.i.i, %107 - %90 = landingpad { ptr, i32 } +91: ; preds = %94, %77, %.sink.split.i.i.i, %109 + %92 = landingpad { ptr, i32 } cleanup br label %.body -91: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0.i.i47 = phi i8 [ %55, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %73, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] +93: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %.0.i.i47 = phi i8 [ %55, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %75, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] %.not32 = icmp eq i8 %.0.i.i47, 0 - br i1 %.not32, label %107, label %92 + br i1 %.not32, label %109, label %94 -92: ; preds = %91 - %93 = load ptr, ptr %22, align 8, !tbaa !38 +94: ; preds = %93 + %95 = load ptr, ptr %22, align 8, !tbaa !38 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #9 invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %5, ptr noundef nonnull align 8 dereferenceable(64) %23) - to label %.noexc39 unwind label %89 - -.noexc39: ; preds = %92 - %94 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef %1) - to label %95 unwind label %105 - -95: ; preds = %.noexc39 - %96 = load i16, ptr %50, align 8, !tbaa !57 - %97 = icmp slt i16 %96, 0 - %98 = ashr i16 %96, 5 - %99 = sext i16 %98 to i32 - %100 = getelementptr inbounds nuw i8, ptr %.12045, i64 12 - %101 = load i32, ptr %100, align 4 - %102 = select i1 %97, i32 %101, i32 %99 - %103 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %94, ptr noundef nonnull align 8 dereferenceable(64) %.12045, i32 noundef 0, i32 noundef %102) - to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38 unwind label %105 - -_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38: ; preds = %95 - %104 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %93, ptr noundef nonnull align 8 dereferenceable(64) %103) - to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 unwind label %105 - -105: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38, %95, %.noexc39 - %106 = landingpad { ptr, i32 } + to label %.noexc39 unwind label %91 + +.noexc39: ; preds = %94 + %96 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef %1) + to label %97 unwind label %107 + +97: ; preds = %.noexc39 + %98 = load i16, ptr %50, align 8, !tbaa !57 + %99 = icmp slt i16 %98, 0 + %100 = ashr i16 %98, 5 + %101 = sext i16 %100 to i32 + %102 = getelementptr inbounds nuw i8, ptr %.12045, i64 12 + %103 = load i32, ptr %102, align 4 + %104 = select i1 %99, i32 %103, i32 %101 + %105 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %96, ptr noundef nonnull align 8 dereferenceable(64) %.12045, i32 noundef 0, i32 noundef %104) + to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38 unwind label %107 + +_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38: ; preds = %97 + %106 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %95, ptr noundef nonnull align 8 dereferenceable(64) %105) + to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 unwind label %107 + +107: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38, %97, %.noexc39 + %108 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #9 @@ -1210,23 +1216,23 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #9 br label %.backedge -.backedge: ; preds = %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit, %110 - %.022.be = phi ptr [ null, %110 ], [ null, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit ], [ %.123, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 ] - %.019.be = phi ptr [ null, %110 ], [ %.12045, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit ], [ null, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 ] +.backedge: ; preds = %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit, %112 + %.022.be = phi ptr [ null, %112 ], [ null, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit ], [ %.123, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 ] + %.019.be = phi ptr [ null, %112 ], [ %.12045, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit ], [ null, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 ] br label %27, !llvm.loop !59 -107: ; preds = %91 +109: ; preds = %93 store ptr %.123, ptr %24, align 8, !tbaa !60 - %108 = load i32, ptr %25, align 4, !tbaa !47 - %109 = load i32, ptr %26, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %108, i32 noundef %109) - to label %110 unwind label %89 + %110 = load i32, ptr %25, align 4, !tbaa !47 + %111 = load i32, ptr %26, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %110, i32 noundef %111) + to label %112 unwind label %91 -110: ; preds = %107 +112: ; preds = %109 store ptr null, ptr %24, align 8, !tbaa !60 br label %.backedge -111: ; preds = %45 +113: ; preds = %45 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %10) #9 @@ -1235,25 +1241,25 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #9 ret void -.body: ; preds = %.loopexit, %.loopexit.split-lp, %87, %105, %89 - %.pn = phi { ptr, i32 } [ %88, %87 ], [ %90, %89 ], [ %106, %105 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] +.body: ; preds = %.loopexit, %.loopexit.split-lp, %89, %107, %91 + %.pn = phi { ptr, i32 } [ %90, %89 ], [ %92, %91 ], [ %108, %107 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #9 - br label %112 + br label %114 -112: ; preds = %.body, %38 +114: ; preds = %.body, %38 %.pn.pn = phi { ptr, i32 } [ %.pn, %.body ], [ %39, %38 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %10) #9 - br label %113 + br label %115 -113: ; preds = %112, %35 - %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %112 ], [ %36, %35 ] +115: ; preds = %114, %35 + %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %114 ], [ %36, %35 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %10) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #9 - br label %114 + br label %116 -114: ; preds = %113, %32 - %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %113 ], [ %33, %32 ] +116: ; preds = %115, %32 + %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %115 ], [ %33, %32 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #9 resume { ptr, i32 } %.pn.pn.pn.pn } diff --git a/bench/icu/optimized/dtptngen.ll b/bench/icu/optimized/dtptngen.ll index 06bfd7a8cd1..37298a131ad 100644 --- a/bench/icu/optimized/dtptngen.ll +++ b/bench/icu/optimized/dtptngen.ll @@ -9081,8 +9081,8 @@ _ZNK6icu_7710PatternMap9getHeaderEDs.exit: ; preds = %_ZNK6icu_7713Unicod %26 = icmp eq ptr %.0.i, null br i1 %26, label %_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread, label %.preheader -.preheader: ; preds = %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %57 - %.0 = phi ptr [ %59, %57 ], [ %.0.i, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ] +.preheader: ; preds = %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %59 + %.0 = phi ptr [ %61, %59 ], [ %.0.i, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ] %27 = load i16, ptr %4, align 8, !tbaa !17 %28 = getelementptr inbounds nuw i8, ptr %.0, i64 16 %29 = load i16, ptr %28, align 8, !tbaa !17 @@ -9109,36 +9109,39 @@ _ZNK6icu_7710PatternMap9getHeaderEDs.exit: ; preds = %_ZNK6icu_7713Unicod %44 = sext i16 %43 to i32 %45 = select i1 %41, i32 %42, i32 %44 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %40, i32 0) - %.010.i.i = tail call i32 @llvm.smax.i32(i32 %40, i32 0) - %46 = and i16 %29, 2 - %.not.i.i.i14 = icmp eq i16 %46, 0 - %47 = getelementptr inbounds nuw i8, ptr %.0, i64 18 - %48 = getelementptr inbounds nuw i8, ptr %.0, i64 32 - %49 = load ptr, ptr %48, align 8 - %50 = select i1 %.not.i.i.i14, ptr %49, ptr %47 - %51 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %45, ptr noundef %50, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + %46 = icmp slt i32 %40, 0 + %47 = sub nsw i32 %40, %spec.select.i.i + %spec.select13.i.i = tail call i32 @llvm.smin.i32(i32 %40, i32 %47) + %.010.i.i = select i1 %46, i32 0, i32 %spec.select13.i.i + %48 = and i16 %29, 2 + %.not.i.i.i14 = icmp eq i16 %48, 0 + %49 = getelementptr inbounds nuw i8, ptr %.0, i64 18 + %50 = getelementptr inbounds nuw i8, ptr %.0, i64 32 + %51 = load ptr, ptr %50, align 8 + %52 = select i1 %.not.i.i.i14, ptr %51, ptr %49 + %53 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %45, ptr noundef %52, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %31, %.sink.split.i.i.i - %.0.i.i13 = phi i8 [ %34, %31 ], [ %51, %.sink.split.i.i.i ] - %52 = icmp eq i8 %.0.i.i13, 0 - br i1 %52, label %53, label %57 - -53: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %54 = getelementptr inbounds nuw i8, ptr %.0, i64 144 - %55 = load i8, ptr %54, align 8, !tbaa !58 - store i8 %55, ptr %2, align 1, !tbaa !17 - %56 = getelementptr inbounds nuw i8, ptr %.0, i64 80 + %.0.i.i13 = phi i8 [ %34, %31 ], [ %53, %.sink.split.i.i.i ] + %54 = icmp eq i8 %.0.i.i13, 0 + br i1 %54, label %55, label %59 + +55: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %56 = getelementptr inbounds nuw i8, ptr %.0, i64 144 + %57 = load i8, ptr %56, align 8, !tbaa !58 + store i8 %57, ptr %2, align 1, !tbaa !17 + %58 = getelementptr inbounds nuw i8, ptr %.0, i64 80 br label %_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread -57: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %58 = getelementptr inbounds nuw i8, ptr %.0, i64 152 - %59 = load ptr, ptr %58, align 8, !tbaa !63 - %.not = icmp eq ptr %59, null +59: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %60 = getelementptr inbounds nuw i8, ptr %.0, i64 152 + %61 = load ptr, ptr %60, align 8, !tbaa !63 + %.not = icmp eq ptr %61, null br i1 %.not, label %_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread, label %.preheader, !llvm.loop !160 -_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread: ; preds = %57, %3, %20, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %53 - %.010 = phi ptr [ %56, %53 ], [ null, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ], [ null, %20 ], [ null, %3 ], [ null, %57 ] +_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread: ; preds = %59, %3, %20, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %55 + %.010 = phi ptr [ %58, %55 ], [ null, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ], [ null, %20 ], [ null, %3 ], [ null, %59 ] ret ptr %.010 } @@ -9426,7 +9429,7 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R br label %84 84: ; preds = %.thread.i, %.preheader24.i - %.017.i = phi ptr [ %121, %.thread.i ], [ %.061, %.preheader24.i ] + %.017.i = phi ptr [ %123, %.thread.i ], [ %.061, %.preheader24.i ] %85 = load i16, ptr %7, align 8, !tbaa !17 %86 = getelementptr inbounds nuw i8, ptr %.017.i, i64 16 %87 = load i16, ptr %86, align 8, !tbaa !17 @@ -9453,196 +9456,199 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R %102 = sext i16 %101 to i32 %103 = select i1 %99, i32 %100, i32 %102 %spec.select.i.i.i = tail call i32 @llvm.smin.i32(i32 %98, i32 0) - %.010.i.i.i = tail call i32 @llvm.smax.i32(i32 %98, i32 0) - %104 = and i16 %87, 2 - %.not.i.i.i.i = icmp eq i16 %104, 0 - %105 = getelementptr inbounds nuw i8, ptr %.017.i, i64 18 - %106 = getelementptr inbounds nuw i8, ptr %.017.i, i64 32 - %107 = load ptr, ptr %106, align 8 - %108 = select i1 %.not.i.i.i.i, ptr %107, ptr %105 - %109 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %103, ptr noundef %108, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) + %104 = icmp slt i32 %98, 0 + %105 = sub nsw i32 %98, %spec.select.i.i.i + %spec.select13.i.i.i = tail call i32 @llvm.smin.i32(i32 %98, i32 %105) + %.010.i.i.i = select i1 %104, i32 0, i32 %spec.select13.i.i.i + %106 = and i16 %87, 2 + %.not.i.i.i.i = icmp eq i16 %106, 0 + %107 = getelementptr inbounds nuw i8, ptr %.017.i, i64 18 + %108 = getelementptr inbounds nuw i8, ptr %.017.i, i64 32 + %109 = load ptr, ptr %108, align 8 + %110 = select i1 %.not.i.i.i.i, ptr %109, ptr %107 + %111 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %103, ptr noundef %110, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.i _ZNK6icu_7713UnicodeString7compareERKS0_.exit.i: ; preds = %.sink.split.i.i.i.i, %89 - %.0.i.i.i = phi i8 [ %92, %89 ], [ %109, %.sink.split.i.i.i.i ] - %110 = icmp eq i8 %.0.i.i.i, 0 - br i1 %110, label %.preheader.i, label %.thread.i + %.0.i.i.i = phi i8 [ %92, %89 ], [ %111, %.sink.split.i.i.i.i ] + %112 = icmp eq i8 %.0.i.i.i, 0 + br i1 %112, label %.preheader.i, label %.thread.i .preheader.i: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.i - %111 = getelementptr inbounds nuw i8, ptr %.017.i, i64 72 - %112 = load ptr, ptr %111, align 8, !tbaa !55 - %113 = getelementptr inbounds nuw i8, ptr %112, i64 8 - br label %115 + %113 = getelementptr inbounds nuw i8, ptr %.017.i, i64 72 + %114 = load ptr, ptr %113, align 8, !tbaa !55 + %115 = getelementptr inbounds nuw i8, ptr %114, i64 8 + br label %117 -114: ; preds = %115 +116: ; preds = %117 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, 16 - br i1 %exitcond.not.i, label %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, label %115, !llvm.loop !161 + br i1 %exitcond.not.i, label %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, label %117, !llvm.loop !161 -115: ; preds = %114, %.preheader.i - %indvars.iv.i = phi i64 [ 0, %.preheader.i ], [ %indvars.iv.next.i, %114 ] - %116 = getelementptr inbounds nuw [16 x i32], ptr %113, i64 0, i64 %indvars.iv.i - %117 = load i32, ptr %116, align 4, !tbaa !12 - %118 = getelementptr inbounds nuw [16 x i32], ptr %83, i64 0, i64 %indvars.iv.i +117: ; preds = %116, %.preheader.i + %indvars.iv.i = phi i64 [ 0, %.preheader.i ], [ %indvars.iv.next.i, %116 ] + %118 = getelementptr inbounds nuw [16 x i32], ptr %115, i64 0, i64 %indvars.iv.i %119 = load i32, ptr %118, align 4, !tbaa !12 - %.not.i = icmp eq i32 %117, %119 - br i1 %.not.i, label %114, label %.thread.i + %120 = getelementptr inbounds nuw [16 x i32], ptr %83, i64 0, i64 %indvars.iv.i + %121 = load i32, ptr %120, align 4, !tbaa !12 + %.not.i = icmp eq i32 %119, %121 + br i1 %.not.i, label %116, label %.thread.i -.thread.i: ; preds = %115, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.i - %120 = getelementptr inbounds nuw i8, ptr %.017.i, i64 152 - %121 = load ptr, ptr %120, align 8, !tbaa !63 - %.not22.i = icmp eq ptr %121, null +.thread.i: ; preds = %117, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.i + %122 = getelementptr inbounds nuw i8, ptr %.017.i, i64 152 + %123 = load ptr, ptr %122, align 8, !tbaa !63 + %.not22.i = icmp eq ptr %123, null br i1 %.not22.i, label %.preheader, label %84, !llvm.loop !162 .preheader: ; preds = %.thread.i, %.preheader - %.0 = phi ptr [ %123, %.preheader ], [ %.061, %.thread.i ] - %122 = getelementptr inbounds nuw i8, ptr %.0, i64 152 - %123 = load ptr, ptr %122, align 8, !tbaa !63 - %.not = icmp eq ptr %123, null - br i1 %.not, label %124, label %.preheader, !llvm.loop !163 - -124: ; preds = %.preheader - %125 = getelementptr inbounds nuw i8, ptr %.0, i64 152 - %126 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 160) #35 - %127 = icmp eq ptr %126, null - br i1 %127, label %129, label %128 - -128: ; preds = %124 - invoke void @_ZN6icu_777PtnElemC1ERKNS_13UnicodeStringES3_(ptr noundef nonnull align 8 dereferenceable(160) %126, ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(64) %3) - to label %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 unwind label %134 - -129: ; preds = %124 - %130 = load i32, ptr %5, align 4 - %131 = icmp sgt i32 %130, 0 - br i1 %131, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %132 - -132: ; preds = %129 + %.0 = phi ptr [ %125, %.preheader ], [ %.061, %.thread.i ] + %124 = getelementptr inbounds nuw i8, ptr %.0, i64 152 + %125 = load ptr, ptr %124, align 8, !tbaa !63 + %.not = icmp eq ptr %125, null + br i1 %.not, label %126, label %.preheader, !llvm.loop !163 + +126: ; preds = %.preheader + %127 = getelementptr inbounds nuw i8, ptr %.0, i64 152 + %128 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 160) #35 + %129 = icmp eq ptr %128, null + br i1 %129, label %131, label %130 + +130: ; preds = %126 + invoke void @_ZN6icu_777PtnElemC1ERKNS_13UnicodeStringES3_(ptr noundef nonnull align 8 dereferenceable(160) %128, ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(64) %3) + to label %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 unwind label %136 + +131: ; preds = %126 + %132 = load i32, ptr %5, align 4 + %133 = icmp sgt i32 %132, 0 + br i1 %133, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %134 + +134: ; preds = %131 store i32 7, ptr %5, align 4, !tbaa !13 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89: ; preds = %128 +_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89: ; preds = %130 %.pre = load i32, ptr %5, align 4, !tbaa !13 - %133 = icmp slt i32 %.pre, 1 - br i1 %133, label %136, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread + %135 = icmp slt i32 %.pre, 1 + br i1 %135, label %138, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread -134: ; preds = %128 - %135 = landingpad { ptr, i32 } +136: ; preds = %130 + %137 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %126) #35 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %128) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit -136: ; preds = %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 - %137 = getelementptr inbounds nuw i8, ptr %126, i64 72 - %138 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 144) #35 - %139 = icmp eq ptr %138, null - br i1 %139, label %.thread120, label %140 - -140: ; preds = %136 - invoke void @_ZN6icu_7711PtnSkeletonC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(137) %138, ptr noundef nonnull align 8 dereferenceable(137) %2) - to label %141 unwind label %160 +138: ; preds = %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 + %139 = getelementptr inbounds nuw i8, ptr %128, i64 72 + %140 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 144) #35 + %141 = icmp eq ptr %140, null + br i1 %141, label %.thread120, label %142 -141: ; preds = %140 - %142 = load i32, ptr %5, align 4, !tbaa !13 - %143 = icmp sgt i32 %142, 0 - br i1 %143, label %155, label %146 +142: ; preds = %138 + invoke void @_ZN6icu_7711PtnSkeletonC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(137) %140, ptr noundef nonnull align 8 dereferenceable(137) %2) + to label %143 unwind label %162 -.thread120: ; preds = %136 +143: ; preds = %142 %144 = load i32, ptr %5, align 4, !tbaa !13 %145 = icmp sgt i32 %144, 0 - br i1 %145, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, label %146 - -146: ; preds = %.thread120, %141 - %147 = load ptr, ptr %137, align 8, !tbaa !55 - %148 = icmp eq ptr %147, null - br i1 %148, label %153, label %149 - -149: ; preds = %146 - %150 = load ptr, ptr %147, align 8, !tbaa !15 - %151 = getelementptr inbounds nuw i8, ptr %150, i64 8 - %152 = load ptr, ptr %151, align 8 - tail call void %152(ptr noundef nonnull align 8 dereferenceable(137) %147) #35 - br label %153 + br i1 %145, label %157, label %148 + +.thread120: ; preds = %138 + %146 = load i32, ptr %5, align 4, !tbaa !13 + %147 = icmp sgt i32 %146, 0 + br i1 %147, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, label %148 + +148: ; preds = %.thread120, %143 + %149 = load ptr, ptr %139, align 8, !tbaa !55 + %150 = icmp eq ptr %149, null + br i1 %150, label %155, label %151 + +151: ; preds = %148 + %152 = load ptr, ptr %149, align 8, !tbaa !15 + %153 = getelementptr inbounds nuw i8, ptr %152, i64 8 + %154 = load ptr, ptr %153, align 8 + tail call void %154(ptr noundef nonnull align 8 dereferenceable(137) %149) #35 + br label %155 -153: ; preds = %149, %146 - store ptr %138, ptr %137, align 8, !tbaa !55 - br i1 %139, label %154, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 +155: ; preds = %151, %148 + store ptr %140, ptr %139, align 8, !tbaa !55 + br i1 %141, label %156, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 -154: ; preds = %153 +156: ; preds = %155 store i32 7, ptr %5, align 4, !tbaa !13 br label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread -155: ; preds = %141 - %156 = load ptr, ptr %138, align 8, !tbaa !15 - %157 = getelementptr inbounds nuw i8, ptr %156, i64 8 - %158 = load ptr, ptr %157, align 8 - tail call void %158(ptr noundef nonnull align 8 dereferenceable(137) %138) #35 +157: ; preds = %143 + %158 = load ptr, ptr %140, align 8, !tbaa !15 + %159 = getelementptr inbounds nuw i8, ptr %158, i64 8 + %160 = load ptr, ptr %159, align 8 + tail call void %160(ptr noundef nonnull align 8 dereferenceable(137) %140) #35 br label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 -_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90: ; preds = %153, %155 +_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90: ; preds = %155, %157 %.pr129 = load i32, ptr %5, align 4, !tbaa !13 - %159 = icmp slt i32 %.pr129, 1 - br i1 %159, label %.critedge85, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread + %161 = icmp slt i32 %.pr129, 1 + br i1 %161, label %.critedge85, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread -160: ; preds = %140 - %161 = landingpad { ptr, i32 } +162: ; preds = %142 + %163 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %138) #35 - %162 = load ptr, ptr %126, align 8, !tbaa !15 - %163 = getelementptr inbounds nuw i8, ptr %162, i64 8 - %164 = load ptr, ptr %163, align 8 - tail call void %164(ptr noundef nonnull align 8 dereferenceable(160) %126) #35 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %140) #35 + %164 = load ptr, ptr %128, align 8, !tbaa !15 + %165 = getelementptr inbounds nuw i8, ptr %164, i64 8 + %166 = load ptr, ptr %165, align 8 + tail call void %166(ptr noundef nonnull align 8 dereferenceable(160) %128) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit .critedge85: ; preds = %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 - %165 = getelementptr inbounds nuw i8, ptr %126, i64 144 - store i8 %4, ptr %165, align 8, !tbaa !58 - %166 = load ptr, ptr %125, align 8, !tbaa !63 - %167 = icmp eq ptr %166, null - br i1 %167, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, label %168 - -168: ; preds = %.critedge85 - %169 = load ptr, ptr %166, align 8, !tbaa !15 - %170 = getelementptr inbounds nuw i8, ptr %169, i64 8 - %171 = load ptr, ptr %170, align 8 - tail call void %171(ptr noundef nonnull align 8 dereferenceable(160) %166) #35 + %167 = getelementptr inbounds nuw i8, ptr %128, i64 144 + store i8 %4, ptr %167, align 8, !tbaa !58 + %168 = load ptr, ptr %127, align 8, !tbaa !63 + %169 = icmp eq ptr %168, null + br i1 %169, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, label %170 + +170: ; preds = %.critedge85 + %171 = load ptr, ptr %168, align 8, !tbaa !15 + %172 = getelementptr inbounds nuw i8, ptr %171, i64 8 + %173 = load ptr, ptr %172, align 8 + tail call void %173(ptr noundef nonnull align 8 dereferenceable(160) %168) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92 -_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92: ; preds = %168, %.critedge85 - store ptr %126, ptr %125, align 8, !tbaa !63 +_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92: ; preds = %170, %.critedge85 + store ptr %128, ptr %127, align 8, !tbaa !63 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread: ; preds = %154, %.thread120, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90, %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 - %172 = load ptr, ptr %126, align 8, !tbaa !15 - %173 = getelementptr inbounds nuw i8, ptr %172, i64 8 - %174 = load ptr, ptr %173, align 8 - tail call void %174(ptr noundef nonnull align 8 dereferenceable(160) %126) #35 +_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread: ; preds = %156, %.thread120, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90, %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 + %174 = load ptr, ptr %128, align 8, !tbaa !15 + %175 = getelementptr inbounds nuw i8, ptr %174, i64 8 + %176 = load ptr, ptr %175, align 8 + tail call void %176(ptr noundef nonnull align 8 dereferenceable(160) %128) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit: ; preds = %114 - %175 = getelementptr inbounds nuw i8, ptr %0, i64 424 - %176 = load i8, ptr %175, align 8, !tbaa !51 - %.not78 = icmp eq i8 %176, 0 - br i1 %.not78, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %177 - -177: ; preds = %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit - %178 = getelementptr inbounds nuw i8, ptr %.017.i, i64 80 - %179 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %178, ptr noundef nonnull align 8 dereferenceable(64) %3) - %180 = getelementptr inbounds nuw i8, ptr %.017.i, i64 144 - store i8 %4, ptr %180, align 8, !tbaa !58 +_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit: ; preds = %116 + %177 = getelementptr inbounds nuw i8, ptr %0, i64 424 + %178 = load i8, ptr %177, align 8, !tbaa !51 + %.not78 = icmp eq i8 %178, 0 + br i1 %.not78, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %179 + +179: ; preds = %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit + %180 = getelementptr inbounds nuw i8, ptr %.017.i, i64 80 + %181 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %180, ptr noundef nonnull align 8 dereferenceable(64) %3) + %182 = getelementptr inbounds nuw i8, ptr %.017.i, i64 144 + store i8 %4, ptr %182, align 8, !tbaa !58 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit.thread: ; preds = %60, %.thread115, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit, %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit - %181 = load ptr, ptr %32, align 8, !tbaa !15 - %182 = getelementptr inbounds nuw i8, ptr %181, i64 8 - %183 = load ptr, ptr %182, align 8 - tail call void %183(ptr noundef nonnull align 8 dereferenceable(160) %32) #35 + %183 = load ptr, ptr %32, align 8, !tbaa !15 + %184 = getelementptr inbounds nuw i8, ptr %183, i64 8 + %185 = load ptr, ptr %184, align 8 + tail call void %185(ptr noundef nonnull align 8 dereferenceable(160) %32) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93: ; preds = %38, %35, %132, %129, %75, %79, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit.thread, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, %177, %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, %25 +_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93: ; preds = %38, %35, %134, %131, %75, %79, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit.thread, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, %179, %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, %25 ret void -_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit: ; preds = %134, %160, %40, %66 - %.pn80.pn = phi { ptr, i32 } [ %41, %40 ], [ %67, %66 ], [ %135, %134 ], [ %161, %160 ] +_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit: ; preds = %136, %162, %40, %66 + %.pn80.pn = phi { ptr, i32 } [ %41, %40 ], [ %67, %66 ], [ %137, %136 ], [ %163, %162 ] resume { ptr, i32 } %.pn80.pn } @@ -11361,7 +11367,7 @@ define noundef ptr @_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStrin br label %9 9: ; preds = %.preheader24, %.thread - %.017 = phi ptr [ %46, %.thread ], [ %3, %.preheader24 ] + %.017 = phi ptr [ %48, %.thread ], [ %3, %.preheader24 ] %10 = load i16, ptr %6, align 8, !tbaa !17 %11 = getelementptr inbounds nuw i8, ptr %.017, i64 16 %12 = load i16, ptr %11, align 8, !tbaa !17 @@ -11388,49 +11394,52 @@ define noundef ptr @_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStrin %27 = sext i16 %26 to i32 %28 = select i1 %24, i32 %25, i32 %27 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %23, i32 0) - %.010.i.i = tail call i32 @llvm.smax.i32(i32 %23, i32 0) - %29 = and i16 %12, 2 - %.not.i.i.i = icmp eq i16 %29, 0 - %30 = getelementptr inbounds nuw i8, ptr %.017, i64 18 - %31 = getelementptr inbounds nuw i8, ptr %.017, i64 32 - %32 = load ptr, ptr %31, align 8 - %33 = select i1 %.not.i.i.i, ptr %32, ptr %30 - %34 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %28, ptr noundef %33, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + %29 = icmp slt i32 %23, 0 + %30 = sub nsw i32 %23, %spec.select.i.i + %spec.select13.i.i = tail call i32 @llvm.smin.i32(i32 %23, i32 %30) + %.010.i.i = select i1 %29, i32 0, i32 %spec.select13.i.i + %31 = and i16 %12, 2 + %.not.i.i.i = icmp eq i16 %31, 0 + %32 = getelementptr inbounds nuw i8, ptr %.017, i64 18 + %33 = getelementptr inbounds nuw i8, ptr %.017, i64 32 + %34 = load ptr, ptr %33, align 8 + %35 = select i1 %.not.i.i.i, ptr %34, ptr %32 + %36 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %28, ptr noundef %35, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %14, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %17, %14 ], [ %34, %.sink.split.i.i.i ] - %35 = icmp eq i8 %.0.i.i, 0 - br i1 %35, label %.preheader, label %.thread + %.0.i.i = phi i8 [ %17, %14 ], [ %36, %.sink.split.i.i.i ] + %37 = icmp eq i8 %.0.i.i, 0 + br i1 %37, label %.preheader, label %.thread .preheader: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %36 = getelementptr inbounds nuw i8, ptr %.017, i64 72 - %37 = load ptr, ptr %36, align 8, !tbaa !55 - %38 = getelementptr inbounds nuw i8, ptr %37, i64 8 - br label %40 + %38 = getelementptr inbounds nuw i8, ptr %.017, i64 72 + %39 = load ptr, ptr %38, align 8, !tbaa !55 + %40 = getelementptr inbounds nuw i8, ptr %39, i64 8 + br label %42 -39: ; preds = %40 +41: ; preds = %42 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, 16 - br i1 %exitcond.not, label %.loopexit, label %40, !llvm.loop !161 + br i1 %exitcond.not, label %.loopexit, label %42, !llvm.loop !161 -40: ; preds = %.preheader, %39 - %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %39 ] - %41 = getelementptr inbounds nuw [16 x i32], ptr %38, i64 0, i64 %indvars.iv - %42 = load i32, ptr %41, align 4, !tbaa !12 - %43 = getelementptr inbounds nuw [16 x i32], ptr %8, i64 0, i64 %indvars.iv +42: ; preds = %.preheader, %41 + %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %41 ] + %43 = getelementptr inbounds nuw [16 x i32], ptr %40, i64 0, i64 %indvars.iv %44 = load i32, ptr %43, align 4, !tbaa !12 - %.not = icmp eq i32 %42, %44 - br i1 %.not, label %39, label %.thread - -.thread: ; preds = %40, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %45 = getelementptr inbounds nuw i8, ptr %.017, i64 152 - %46 = load ptr, ptr %45, align 8, !tbaa !63 - %.not22 = icmp eq ptr %46, null + %45 = getelementptr inbounds nuw [16 x i32], ptr %8, i64 0, i64 %indvars.iv + %46 = load i32, ptr %45, align 4, !tbaa !12 + %.not = icmp eq i32 %44, %46 + br i1 %.not, label %41, label %.thread + +.thread: ; preds = %42, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %47 = getelementptr inbounds nuw i8, ptr %.017, i64 152 + %48 = load ptr, ptr %47, align 8, !tbaa !63 + %.not22 = icmp eq ptr %48, null br i1 %.not22, label %.loopexit, label %9, !llvm.loop !162 -.loopexit: ; preds = %.thread, %39, %4 - %.018 = phi ptr [ null, %4 ], [ %.017, %39 ], [ null, %.thread ] +.loopexit: ; preds = %.thread, %41, %4 + %.018 = phi ptr [ null, %4 ], [ %.017, %41 ], [ null, %.thread ] ret ptr %.018 } diff --git a/bench/icu/optimized/filteredbrk.ll b/bench/icu/optimized/filteredbrk.ll index cca639bb7dd..2d18b290325 100644 --- a/bench/icu/optimized/filteredbrk.ll +++ b/bench/icu/optimized/filteredbrk.ll @@ -2561,20 +2561,23 @@ define internal noundef range(i32 -128, 128) i32 @_ZN6icu_77L20compareUnicodeStr %22 = sext i16 %21 to i32 %23 = select i1 %18, i32 %20, i32 %22 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %17, i32 0) - %.010.i.i = tail call i32 @llvm.smax.i32(i32 %17, i32 0) - %24 = and i16 %6, 2 - %.not.i.i.i = icmp eq i16 %24, 0 - %25 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %26 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %27 = load ptr, ptr %26, align 8 - %28 = select i1 %.not.i.i.i, ptr %27, ptr %25 - %29 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %28, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + %24 = icmp slt i32 %17, 0 + %25 = sub nsw i32 %17, %spec.select.i.i + %spec.select13.i.i = tail call i32 @llvm.smin.i32(i32 %17, i32 %25) + %.010.i.i = select i1 %24, i32 0, i32 %spec.select13.i.i + %26 = and i16 %6, 2 + %.not.i.i.i = icmp eq i16 %26, 0 + %27 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %28 = getelementptr inbounds nuw i8, ptr %1, i64 24 + %29 = load ptr, ptr %28, align 8 + %30 = select i1 %.not.i.i.i, ptr %29, ptr %27 + %31 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %30, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %8, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %11, %8 ], [ %29, %.sink.split.i.i.i ] - %30 = sext i8 %.0.i.i to i32 - ret i32 %30 + %.0.i.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i.i ] + %32 = sext i8 %.0.i.i to i32 + ret i32 %32 } declare noundef i32 @_ZNK6icu_777UVector7indexOfEPvi(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef, i32 noundef) local_unnamed_addr #3 @@ -2613,9 +2616,6 @@ declare i32 @llvm.smin.i32(i32, i32) #12 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umax.i32(i32, i32) #12 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #12 - ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #13 diff --git a/bench/icu/optimized/formattedval_sbimpl.ll b/bench/icu/optimized/formattedval_sbimpl.ll index 198e33af270..9bb0f41db6d 100644 --- a/bench/icu/optimized/formattedval_sbimpl.ll +++ b/bench/icu/optimized/formattedval_sbimpl.ll @@ -1385,9 +1385,8 @@ define void @_ZN6icu_7731FormattedValueStringBuilderImpl14appendSpanInfoE14UFiel 23: ; preds = %19 %24 = load i32, ptr %11, align 8, !tbaa !21 %spec.select.i = tail call i32 @llvm.smin.i32(i32 %12, i32 %24) - %.1.i = tail call i32 @llvm.smin.i32(i32 %spec.select.i, i32 %17) %25 = load ptr, ptr %10, align 8, !tbaa !18 - %26 = sext i32 %.1.i to i64 + %26 = sext i32 %spec.select.i to i64 %27 = shl nsw i64 %26, 4 tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %22, ptr align 4 %25, i64 %27, i1 false) %28 = getelementptr inbounds nuw i8, ptr %0, i64 164 @@ -1461,9 +1460,8 @@ define void @_ZN6icu_7731FormattedValueStringBuilderImpl15prependSpanInfoE14UFie 23: ; preds = %19 %24 = load i32, ptr %11, align 8, !tbaa !21 %spec.select.i = tail call i32 @llvm.smin.i32(i32 %12, i32 %24) - %.1.i = tail call i32 @llvm.smin.i32(i32 %spec.select.i, i32 %17) %25 = load ptr, ptr %10, align 8, !tbaa !18 - %26 = sext i32 %.1.i to i64 + %26 = sext i32 %spec.select.i to i64 %27 = shl nsw i64 %26, 4 tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %22, ptr align 4 %25, i64 %27, i1 false) %28 = getelementptr inbounds nuw i8, ptr %0, i64 164 diff --git a/bench/icu/optimized/number_longnames.ll b/bench/icu/optimized/number_longnames.ll index 0e0871b3612..4a7e31a314d 100644 --- a/bench/icu/optimized/number_longnames.ll +++ b/bench/icu/optimized/number_longnames.ll @@ -3370,27 +3370,27 @@ define internal fastcc void @_ZN12_GLOBAL__N_117DerivedComponentsC2ERKN6icu_776L 31: ; preds = %29 %32 = load i32, ptr %0, align 8, !tbaa !92 %33 = icmp slt i32 %32, 1 - br i1 %33, label %42, label %177 + br i1 %33, label %42, label %181 34: ; preds = %4 %35 = landingpad { ptr, i32 } cleanup - br label %182 + br label %186 36: ; preds = %22 %37 = landingpad { ptr, i32 } cleanup - br label %181 + br label %185 38: ; preds = %25 %39 = landingpad { ptr, i32 } cleanup - br label %180 + br label %184 40: ; preds = %29, %27, %26 %41 = landingpad { ptr, i32 } cleanup - br label %179 + br label %183 42: ; preds = %31 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #21 @@ -3411,7 +3411,7 @@ define internal fastcc void @_ZN12_GLOBAL__N_117DerivedComponentsC2ERKN6icu_776L 50: ; preds = %57, %55, %53, %48, %42 %51 = landingpad { ptr, i32 } cleanup - br label %178 + br label %182 52: ; preds = %45 store i32 %46, ptr %0, align 8, !tbaa !92 @@ -3546,7 +3546,7 @@ define internal fastcc void @_ZN12_GLOBAL__N_117DerivedComponentsC2ERKN6icu_776L call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) %100 = load i32, ptr %0, align 8, !tbaa !92 %101 = icmp sgt i32 %100, 0 - br i1 %101, label %176, label %102 + br i1 %101, label %180, label %102 102: ; preds = %99 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #21 @@ -3589,143 +3589,149 @@ _ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit: ; preds = %102 %124 = sext i16 %123 to i32 %125 = select i1 %120, i32 %122, i32 %124 %spec.select.i.i = call i32 @llvm.smin.i32(i32 %119, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %119, i32 0) - %126 = and i16 %108, 2 - %.not.i.i.i = icmp eq i16 %126, 0 - %127 = getelementptr inbounds nuw i8, ptr %14, i64 10 - %128 = getelementptr inbounds nuw i8, ptr %14, i64 24 - %129 = load ptr, ptr %128, align 8 - %130 = select i1 %.not.i.i.i, ptr %129, ptr %127 - %131 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %12, i32 noundef 0, i32 noundef %125, ptr noundef %130, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) - to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %134 + %126 = icmp slt i32 %119, 0 + %127 = sub nsw i32 %119, %spec.select.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %119, i32 %127) + %.010.i.i = select i1 %126, i32 0, i32 %spec.select13.i.i + %128 = and i16 %108, 2 + %.not.i.i.i = icmp eq i16 %128, 0 + %129 = getelementptr inbounds nuw i8, ptr %14, i64 10 + %130 = getelementptr inbounds nuw i8, ptr %14, i64 24 + %131 = load ptr, ptr %130, align 8 + %132 = select i1 %.not.i.i.i, ptr %131, ptr %129 + %133 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %12, i32 noundef 0, i32 noundef %125, ptr noundef %132, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %136 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %110, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %113, %110 ], [ %131, %.sink.split.i.i.i ] - %132 = icmp eq i8 %.0.i.i, 0 + %.0.i.i = phi i8 [ %113, %110 ], [ %133, %.sink.split.i.i.i ] + %134 = icmp eq i8 %.0.i.i, 0 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %14) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #21 - br i1 %132, label %133, label %136 + br i1 %134, label %135, label %138 -133: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit +135: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit store i8 1, ptr %16, align 4, !tbaa !86 - br label %140 + br label %142 -134: ; preds = %.sink.split.i.i.i - %135 = landingpad { ptr, i32 } +136: ; preds = %.sink.split.i.i.i + %137 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %14) #21 br label %.body33 -.body33: ; preds = %105, %134 - %.pn = phi { ptr, i32 } [ %135, %134 ], [ %106, %105 ] +.body33: ; preds = %105, %136 + %.pn = phi { ptr, i32 } [ %137, %136 ], [ %106, %105 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #21 br label %.body30 -136: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit +138: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit store i8 0, ptr %16, align 4, !tbaa !86 - %137 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %18, ptr noundef nonnull align 8 dereferenceable(64) %12, ptr noundef nonnull align 4 dereferenceable(4) %0) - to label %140 unwind label %138 + %139 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %18, ptr noundef nonnull align 8 dereferenceable(64) %12, ptr noundef nonnull align 4 dereferenceable(4) %0) + to label %142 unwind label %140 -138: ; preds = %174, %136 - %139 = landingpad { ptr, i32 } +140: ; preds = %178, %138 + %141 = landingpad { ptr, i32 } cleanup br label %.body30 -140: ; preds = %136, %133 +142: ; preds = %138, %135 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #21 store ptr getelementptr inbounds nuw inrange(-16, 88) (i8, ptr @_ZTVN6icu_7713UnicodeStringE, i64 16), ptr %15, align 8, !tbaa !15 - %141 = getelementptr inbounds nuw i8, ptr %15, i64 8 - store i16 2, ptr %141, align 8, !tbaa !17 - %142 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendESt17basic_string_viewIDsSt11char_traitsIDsEE(ptr noundef nonnull align 8 dereferenceable(64) %15, i64 8, ptr nonnull @.str.34) - to label %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 unwind label %143 + %143 = getelementptr inbounds nuw i8, ptr %15, i64 8 + store i16 2, ptr %143, align 8, !tbaa !17 + %144 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendESt17basic_string_viewIDsSt11char_traitsIDsEE(ptr noundef nonnull align 8 dereferenceable(64) %15, i64 8, ptr nonnull @.str.34) + to label %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 unwind label %145 -143: ; preds = %140 - %144 = landingpad { ptr, i32 } +145: ; preds = %142 + %146 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7711ReplaceableD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #21 br label %.body36 -_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38: ; preds = %140 - %145 = load i16, ptr %80, align 8, !tbaa !17 - %146 = load i16, ptr %141, align 8, !tbaa !17 - %147 = and i16 %146, 1 - %.not.i.i39 = icmp eq i16 %147, 0 - br i1 %.not.i.i39, label %.sink.split.i.i.i41, label %148 +_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38: ; preds = %142 + %147 = load i16, ptr %80, align 8, !tbaa !17 + %148 = load i16, ptr %143, align 8, !tbaa !17 + %149 = and i16 %148, 1 + %.not.i.i39 = icmp eq i16 %149, 0 + br i1 %.not.i.i39, label %.sink.split.i.i.i41, label %150 -148: ; preds = %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 - %149 = trunc i16 %145 to i8 - %150 = and i8 %149, 1 - %151 = xor i8 %150, 1 - br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit46 +150: ; preds = %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 + %151 = trunc i16 %147 to i8 + %152 = and i8 %151, 1 + %153 = xor i8 %152, 1 + br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 .sink.split.i.i.i41: ; preds = %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 - %152 = icmp slt i16 %146, 0 - %153 = getelementptr inbounds nuw i8, ptr %15, i64 12 - %154 = load i32, ptr %153, align 4 - %155 = ashr i16 %146, 5 - %156 = sext i16 %155 to i32 - %157 = select i1 %152, i32 %154, i32 %156 - %158 = icmp slt i16 %145, 0 - %159 = getelementptr inbounds nuw i8, ptr %13, i64 12 - %160 = load i32, ptr %159, align 4 - %161 = ashr i16 %145, 5 - %162 = sext i16 %161 to i32 - %163 = select i1 %158, i32 %160, i32 %162 - %spec.select.i.i42 = call i32 @llvm.smin.i32(i32 %157, i32 0) - %.010.i.i43 = call i32 @llvm.smax.i32(i32 %157, i32 0) - %164 = and i16 %146, 2 - %.not.i.i.i44 = icmp eq i16 %164, 0 - %165 = getelementptr inbounds nuw i8, ptr %15, i64 10 - %166 = getelementptr inbounds nuw i8, ptr %15, i64 24 - %167 = load ptr, ptr %166, align 8 - %168 = select i1 %.not.i.i.i44, ptr %167, ptr %165 - %169 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %13, i32 noundef 0, i32 noundef %163, ptr noundef %168, i32 noundef %spec.select.i.i42, i32 noundef %.010.i.i43) - to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit46 unwind label %172 - -_ZNK6icu_7713UnicodeString7compareERKS0_.exit46: ; preds = %148, %.sink.split.i.i.i41 - %.0.i.i40 = phi i8 [ %151, %148 ], [ %169, %.sink.split.i.i.i41 ] - %170 = icmp eq i8 %.0.i.i40, 0 + %154 = icmp slt i16 %148, 0 + %155 = getelementptr inbounds nuw i8, ptr %15, i64 12 + %156 = load i32, ptr %155, align 4 + %157 = ashr i16 %148, 5 + %158 = sext i16 %157 to i32 + %159 = select i1 %154, i32 %156, i32 %158 + %160 = icmp slt i16 %147, 0 + %161 = getelementptr inbounds nuw i8, ptr %13, i64 12 + %162 = load i32, ptr %161, align 4 + %163 = ashr i16 %147, 5 + %164 = sext i16 %163 to i32 + %165 = select i1 %160, i32 %162, i32 %164 + %spec.select.i.i42 = call i32 @llvm.smin.i32(i32 %159, i32 0) + %166 = icmp slt i32 %159, 0 + %167 = sub nsw i32 %159, %spec.select.i.i42 + %spec.select13.i.i43 = call i32 @llvm.smin.i32(i32 %159, i32 %167) + %.010.i.i44 = select i1 %166, i32 0, i32 %spec.select13.i.i43 + %168 = and i16 %148, 2 + %.not.i.i.i45 = icmp eq i16 %168, 0 + %169 = getelementptr inbounds nuw i8, ptr %15, i64 10 + %170 = getelementptr inbounds nuw i8, ptr %15, i64 24 + %171 = load ptr, ptr %170, align 8 + %172 = select i1 %.not.i.i.i45, ptr %171, ptr %169 + %173 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %13, i32 noundef 0, i32 noundef %165, ptr noundef %172, i32 noundef %spec.select.i.i42, i32 noundef %.010.i.i44) + to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 unwind label %176 + +_ZNK6icu_7713UnicodeString7compareERKS0_.exit47: ; preds = %150, %.sink.split.i.i.i41 + %.0.i.i40 = phi i8 [ %153, %150 ], [ %173, %.sink.split.i.i.i41 ] + %174 = icmp eq i8 %.0.i.i40, 0 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #21 - br i1 %170, label %171, label %174 + br i1 %174, label %175, label %178 -171: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit46 +175: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 store i8 1, ptr %17, align 1, !tbaa !91 - br label %176 + br label %180 -172: ; preds = %.sink.split.i.i.i41 - %173 = landingpad { ptr, i32 } +176: ; preds = %.sink.split.i.i.i41 + %177 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #21 br label %.body36 -.body36: ; preds = %143, %172 - %.pn18 = phi { ptr, i32 } [ %173, %172 ], [ %144, %143 ] +.body36: ; preds = %145, %176 + %.pn18 = phi { ptr, i32 } [ %177, %176 ], [ %146, %145 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #21 br label %.body30 -174: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit46 +178: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 store i8 0, ptr %17, align 1, !tbaa !91 - %175 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %21, ptr noundef nonnull align 8 dereferenceable(64) %13, ptr noundef nonnull align 4 dereferenceable(4) %0) - to label %176 unwind label %138 + %179 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %21, ptr noundef nonnull align 8 dereferenceable(64) %13, ptr noundef nonnull align 4 dereferenceable(4) %0) + to label %180 unwind label %140 -176: ; preds = %171, %174, %99 +180: ; preds = %175, %178, %99 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %13) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #21 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #21 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #21 - br label %177 + br label %181 -177: ; preds = %31, %176 +181: ; preds = %31, %180 call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %10) #21 call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %10) #21 call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %9) #21 call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %9) #21 ret void -.body30: ; preds = %.body33, %138, %.body36, %98 - %.pn20.pn = phi { ptr, i32 } [ %.pn10.i29, %98 ], [ %139, %138 ], [ %.pn18, %.body36 ], [ %.pn, %.body33 ] +.body30: ; preds = %.body33, %140, %.body36, %98 + %.pn20.pn = phi { ptr, i32 } [ %.pn10.i29, %98 ], [ %141, %140 ], [ %.pn18, %.body36 ], [ %.pn, %.body33 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %13) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #21 br label %.body @@ -3734,32 +3740,32 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit46: ; preds = %148, %.sink.split.i %.pn20.pn.pn = phi { ptr, i32 } [ %.pn20.pn, %.body30 ], [ %.pn10.i, %78 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #21 - br label %178 + br label %182 -178: ; preds = %.body, %50 +182: ; preds = %.body, %50 %.pn20.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn, %.body ], [ %51, %50 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #21 - br label %179 + br label %183 -179: ; preds = %178, %40 - %.pn20.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn, %178 ], [ %41, %40 ] +183: ; preds = %182, %40 + %.pn20.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn, %182 ], [ %41, %40 ] call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %10) #21 - br label %180 + br label %184 -180: ; preds = %179, %38 - %.pn20.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn, %179 ], [ %39, %38 ] +184: ; preds = %183, %38 + %.pn20.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn, %183 ], [ %39, %38 ] call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %10) #21 call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %9) #21 - br label %181 + br label %185 -181: ; preds = %180, %36 - %.pn20.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn.pn, %180 ], [ %37, %36 ] +185: ; preds = %184, %36 + %.pn20.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn.pn, %184 ], [ %37, %36 ] call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %9) #21 call void @_ZN6icu_7715MaybeStackArrayIcLi40EED1Ev(ptr noundef nonnull align 8 dereferenceable(60) %21) #21 - br label %182 + br label %186 -182: ; preds = %181, %34 - %.pn20.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn.pn.pn, %181 ], [ %35, %34 ] +186: ; preds = %185, %34 + %.pn20.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn.pn.pn, %185 ], [ %35, %34 ] call void @_ZN6icu_7715MaybeStackArrayIcLi40EED1Ev(ptr noundef nonnull align 8 dereferenceable(60) %18) #21 resume { ptr, i32 } %.pn20.pn.pn.pn.pn.pn.pn.pn } @@ -10614,9 +10620,6 @@ declare i32 @llvm.smin.i32(i32, i32) #19 ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #20 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #19 - attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/icu/optimized/numfmt.ll b/bench/icu/optimized/numfmt.ll index 4d5c0b8ca67..ddc527f66ce 100644 --- a/bench/icu/optimized/numfmt.ll +++ b/bench/icu/optimized/numfmt.ll @@ -3904,18 +3904,21 @@ define linkonce_odr noundef signext i8 @_ZNK6icu_7713UnicodeString7compareERKS0_ %22 = sext i16 %21 to i32 %23 = select i1 %18, i32 %20, i32 %22 %spec.select.i = tail call i32 @llvm.smin.i32(i32 %17, i32 0) - %.010.i = tail call i32 @llvm.smax.i32(i32 %17, i32 0) - %24 = and i16 %6, 2 - %.not.i.i = icmp eq i16 %24, 0 - %25 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %26 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %27 = load ptr, ptr %26, align 8 - %28 = select i1 %.not.i.i, ptr %27, ptr %25 - %29 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %28, i32 noundef %spec.select.i, i32 noundef %.010.i) + %24 = icmp slt i32 %17, 0 + %25 = sub nsw i32 %17, %spec.select.i + %spec.select13.i = tail call i32 @llvm.smin.i32(i32 %17, i32 %25) + %.010.i = select i1 %24, i32 0, i32 %spec.select13.i + %26 = and i16 %6, 2 + %.not.i.i = icmp eq i16 %26, 0 + %27 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %28 = getelementptr inbounds nuw i8, ptr %1, i64 24 + %29 = load ptr, ptr %28, align 8 + %30 = select i1 %.not.i.i, ptr %29, ptr %27 + %31 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %30, i32 noundef %spec.select.i, i32 noundef %.010.i) br label %_ZNK6icu_7713UnicodeString9doCompareEiiRKS0_ii.exit _ZNK6icu_7713UnicodeString9doCompareEiiRKS0_ii.exit: ; preds = %8, %.sink.split.i.i - %.0.i = phi i8 [ %11, %8 ], [ %29, %.sink.split.i.i ] + %.0.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i ] ret i8 %.0.i } @@ -4698,9 +4701,6 @@ declare void @ures_close_77(ptr noundef) local_unnamed_addr #9 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #21 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #21 - attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/icu/optimized/numparse_impl.ll b/bench/icu/optimized/numparse_impl.ll index ef3c36024a9..a9644869455 100644 --- a/bench/icu/optimized/numparse_impl.ll +++ b/bench/icu/optimized/numparse_impl.ll @@ -4029,9 +4029,8 @@ define void @_ZN6icu_778numparse4impl16NumberParserImpl10addMatcherERNS1_18Numbe 15: ; preds = %11 %16 = load i32, ptr %6, align 8, !tbaa !179 %spec.select.i = tail call i32 @llvm.smin.i32(i32 %4, i32 %16) - %.1.i = tail call i32 @llvm.smin.i32(i32 %spec.select.i, i32 %9) %17 = load ptr, ptr %5, align 8, !tbaa !178 - %18 = sext i32 %.1.i to i64 + %18 = sext i32 %spec.select.i to i64 %19 = shl nsw i64 %18, 3 tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %14, ptr align 8 %17, i64 %19, i1 false) %20 = getelementptr inbounds nuw i8, ptr %0, i64 28 diff --git a/bench/icu/optimized/plurfmt.ll b/bench/icu/optimized/plurfmt.ll index 8bd066e3abd..d73e983c5f5 100644 --- a/bench/icu/optimized/plurfmt.ll +++ b/bench/icu/optimized/plurfmt.ll @@ -2252,7 +2252,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat %10 = alloca %"class.icu_77::UnicodeString", align 8 %11 = load i32, ptr %5, align 4, !tbaa !13 %12 = icmp slt i32 %11, 1 - br i1 %12, label %13, label %172 + br i1 %12, label %13, label %180 13: ; preds = %6 %14 = getelementptr inbounds nuw i8, ptr %0, i64 96 @@ -2299,11 +2299,11 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat %.pre = load ptr, ptr %16, align 8, !tbaa !55 br label %39 -39: ; preds = %164, %27 - %40 = phi ptr [ %.pre, %27 ], [ %165, %164 ] - %.157 = phi i32 [ %.056, %27 ], [ %168, %164 ] - %.047 = phi i8 [ 0, %27 ], [ %.249, %164 ] - %.044 = phi i32 [ 0, %27 ], [ %.246, %164 ] +39: ; preds = %172, %27 + %40 = phi ptr [ %.pre, %27 ], [ %173, %172 ] + %.157 = phi i32 [ %.056, %27 ], [ %176, %172 ] + %.047 = phi i8 [ 0, %27 ], [ %.249, %172 ] + %.044 = phi i32 [ 0, %27 ], [ %.246, %172 ] %41 = add nsw i32 %.157, 1 %42 = sext i32 %.157 to i64 %43 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %40, i64 %42 @@ -2316,20 +2316,20 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat cleanup %48 = load ptr, ptr %9, align 8, !tbaa !69 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %48) #18, !srcloc !72 - br label %171 + br label %179 -49: ; preds = %.sink.split.i.i.i.i86, %.sink.split.i.i.i78, %.sink.split.i.i.i, %.sink.split.i.i.i.i, %56 +49: ; preds = %.sink.split.i.i.i.i87, %.sink.split.i.i.i78, %.sink.split.i.i.i, %.sink.split.i.i.i.i, %56 %50 = landingpad { ptr, i32 } cleanup - br label %170 + br label %178 51: ; preds = %39 %52 = sext i32 %41 to i64 %53 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %40, i64 %52 %54 = load i32, ptr %53, align 4, !tbaa !60 %55 = and i32 %54, -2 - %.not108 = icmp eq i32 %55, 12 - br i1 %.not108, label %56, label %61 + %.not110 = icmp eq i32 %55, 12 + br i1 %.not110, label %56, label %61 56: ; preds = %51 %57 = invoke noundef double @_ZNK6icu_7714MessagePattern15getNumericValueERKNS0_4PartE(ptr noundef nonnull align 8 dereferenceable(127) %0, ptr noundef nonnull align 4 dereferenceable(16) %53) @@ -2341,12 +2341,12 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat br i1 %60, label %.thread, label %._crit_edge ._crit_edge: ; preds = %58 - %.pre114 = sext i32 %59 to i64 - br label %164 + %.pre116 = sext i32 %59 to i64 + br label %172 61: ; preds = %51 %.not63 = icmp eq i8 %.047, 0 - br i1 %.not63, label %62, label %164 + br i1 %.not63, label %62, label %172 62: ; preds = %61 %63 = load i16, ptr %29, align 8, !tbaa !39 @@ -2359,7 +2359,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat %67 = trunc i16 %66 to i8 %68 = and i8 %67, 1 %69 = xor i8 %68, 1 - br label %84 + br label %86 .sink.split.i.i.i.i: ; preds = %62 %70 = getelementptr inbounds nuw i8, ptr %43, i64 8 @@ -2373,204 +2373,216 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat %78 = sext i16 %77 to i32 %79 = select i1 %75, i32 %76, i32 %78 %spec.select.i.i.i = call i32 @llvm.smin.i32(i32 %79, i32 0) - %.010.i.i.i = call i32 @llvm.smax.i32(i32 %79, i32 0) - %80 = and i16 %63, 2 - %.not.i.i.i.i = icmp eq i16 %80, 0 - %81 = load ptr, ptr %34, align 8 - %82 = select i1 %.not.i.i.i.i, ptr %81, ptr %33 - %83 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %74, i32 noundef %72, ptr noundef %82, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) - to label %84 unwind label %49 - -84: ; preds = %65, %.sink.split.i.i.i.i - %.0.i.i.i = phi i8 [ %69, %65 ], [ %83, %.sink.split.i.i.i.i ] - %.not109 = icmp eq i8 %.0.i.i.i, 0 - br i1 %.not109, label %85, label %110 - -85: ; preds = %84 - %86 = icmp eq i32 %.044, 0 - br i1 %86, label %87, label %164 - -87: ; preds = %85 - %88 = load i16, ptr %26, align 8, !tbaa !39 - %89 = load i16, ptr %29, align 8, !tbaa !39 - %90 = and i16 %89, 1 - %.not.i.i = icmp eq i16 %90, 0 - br i1 %.not.i.i, label %.sink.split.i.i.i, label %91 - -91: ; preds = %87 - %92 = trunc i16 %88 to i8 - %93 = and i8 %92, 1 - %94 = xor i8 %93, 1 + %80 = icmp slt i32 %79, 0 + %81 = sub nsw i32 %79, %spec.select.i.i.i + %spec.select13.i.i.i = call i32 @llvm.smin.i32(i32 %79, i32 %81) + %.010.i.i.i = select i1 %80, i32 0, i32 %spec.select13.i.i.i + %82 = and i16 %63, 2 + %.not.i.i.i.i = icmp eq i16 %82, 0 + %83 = load ptr, ptr %34, align 8 + %84 = select i1 %.not.i.i.i.i, ptr %83, ptr %33 + %85 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %74, i32 noundef %72, ptr noundef %84, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) + to label %86 unwind label %49 + +86: ; preds = %65, %.sink.split.i.i.i.i + %.0.i.i.i = phi i8 [ %69, %65 ], [ %85, %.sink.split.i.i.i.i ] + %.not111 = icmp eq i8 %.0.i.i.i, 0 + br i1 %.not111, label %87, label %114 + +87: ; preds = %86 + %88 = icmp eq i32 %.044, 0 + br i1 %88, label %89, label %172 + +89: ; preds = %87 + %90 = load i16, ptr %26, align 8, !tbaa !39 + %91 = load i16, ptr %29, align 8, !tbaa !39 + %92 = and i16 %91, 1 + %.not.i.i = icmp eq i16 %92, 0 + br i1 %.not.i.i, label %.sink.split.i.i.i, label %93 + +93: ; preds = %89 + %94 = trunc i16 %90 to i8 + %95 = and i8 %94, 1 + %96 = xor i8 %95, 1 br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit -.sink.split.i.i.i: ; preds = %87 - %95 = icmp slt i16 %89, 0 - %96 = load i32, ptr %32, align 4 - %97 = ashr i16 %89, 5 - %98 = sext i16 %97 to i32 - %99 = select i1 %95, i32 %96, i32 %98 - %100 = icmp slt i16 %88, 0 - %101 = load i32, ptr %36, align 4 - %102 = ashr i16 %88, 5 - %103 = sext i16 %102 to i32 - %104 = select i1 %100, i32 %101, i32 %103 - %spec.select.i.i = call i32 @llvm.smin.i32(i32 %99, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %99, i32 0) - %105 = and i16 %89, 2 - %.not.i.i.i74 = icmp eq i16 %105, 0 - %106 = load ptr, ptr %34, align 8 - %107 = select i1 %.not.i.i.i74, ptr %106, ptr %33 - %108 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %7, i32 noundef 0, i32 noundef %104, ptr noundef %107, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) +.sink.split.i.i.i: ; preds = %89 + %97 = icmp slt i16 %91, 0 + %98 = load i32, ptr %32, align 4 + %99 = ashr i16 %91, 5 + %100 = sext i16 %99 to i32 + %101 = select i1 %97, i32 %98, i32 %100 + %102 = icmp slt i16 %90, 0 + %103 = load i32, ptr %36, align 4 + %104 = ashr i16 %90, 5 + %105 = sext i16 %104 to i32 + %106 = select i1 %102, i32 %103, i32 %105 + %spec.select.i.i = call i32 @llvm.smin.i32(i32 %101, i32 0) + %107 = icmp slt i32 %101, 0 + %108 = sub nsw i32 %101, %spec.select.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %101, i32 %108) + %.010.i.i = select i1 %107, i32 0, i32 %spec.select13.i.i + %109 = and i16 %91, 2 + %.not.i.i.i74 = icmp eq i16 %109, 0 + %110 = load ptr, ptr %34, align 8 + %111 = select i1 %.not.i.i.i74, ptr %110, ptr %33 + %112 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %7, i32 noundef 0, i32 noundef %106, ptr noundef %111, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %49 -_ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %91, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %94, %91 ], [ %108, %.sink.split.i.i.i ] - %109 = icmp eq i8 %.0.i.i, 0 - %spec.select = zext i1 %109 to i8 - br label %164 +_ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %93, %.sink.split.i.i.i + %.0.i.i = phi i8 [ %96, %93 ], [ %112, %.sink.split.i.i.i ] + %113 = icmp eq i8 %.0.i.i, 0 + %spec.select = zext i1 %113 to i8 + br label %172 -110: ; preds = %84 - %111 = load i16, ptr %26, align 8, !tbaa !39 - %112 = icmp ugt i16 %111, 31 - br i1 %112, label %.critedge, label %113 +114: ; preds = %86 + %115 = load i16, ptr %26, align 8, !tbaa !39 + %116 = icmp ugt i16 %115, 31 + br i1 %116, label %.critedge, label %117 -113: ; preds = %110 +117: ; preds = %114 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #18 - %114 = load ptr, ptr %2, align 8, !tbaa !15 - %115 = getelementptr inbounds nuw i8, ptr %114, i64 16 - %116 = load ptr, ptr %115, align 8 - invoke void %116(ptr dead_on_unwind nonnull writable sret(%"class.icu_77::UnicodeString") align 8 %10, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef %3, double noundef %35, ptr noundef nonnull align 4 dereferenceable(4) %5) - to label %117 unwind label %140 - -117: ; preds = %113 - %118 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSEOS0_(ptr noundef nonnull align 8 dereferenceable(64) %7, ptr noundef nonnull align 8 dereferenceable(64) %10) #18 + %118 = load ptr, ptr %2, align 8, !tbaa !15 + %119 = getelementptr inbounds nuw i8, ptr %118, i64 16 + %120 = load ptr, ptr %119, align 8 + invoke void %120(ptr dead_on_unwind nonnull writable sret(%"class.icu_77::UnicodeString") align 8 %10, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef %3, double noundef %35, ptr noundef nonnull align 4 dereferenceable(4) %5) + to label %121 unwind label %146 + +121: ; preds = %117 + %122 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSEOS0_(ptr noundef nonnull align 8 dereferenceable(64) %7, ptr noundef nonnull align 8 dereferenceable(64) %10) #18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %10) #18 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #18 %.not66 = icmp eq i32 %.044, 0 - %.pre113 = load i16, ptr %26, align 8, !tbaa !39 - br i1 %.not66, label %.critedge, label %119 - -119: ; preds = %117 - %120 = load i16, ptr %29, align 8, !tbaa !39 - %121 = and i16 %120, 1 - %.not.i.i76 = icmp eq i16 %121, 0 - br i1 %.not.i.i76, label %.sink.split.i.i.i78, label %122 - -122: ; preds = %119 - %123 = trunc i16 %.pre113 to i8 - %124 = and i8 %123, 1 - %125 = xor i8 %124, 1 - br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 - -.sink.split.i.i.i78: ; preds = %119 - %126 = icmp slt i16 %120, 0 - %127 = load i32, ptr %32, align 4 - %128 = ashr i16 %120, 5 - %129 = sext i16 %128 to i32 - %130 = select i1 %126, i32 %127, i32 %129 - %131 = icmp slt i16 %.pre113, 0 - %132 = load i32, ptr %36, align 4 - %133 = ashr i16 %.pre113, 5 - %134 = sext i16 %133 to i32 - %135 = select i1 %131, i32 %132, i32 %134 - %spec.select.i.i79 = call i32 @llvm.smin.i32(i32 %130, i32 0) - %.010.i.i80 = call i32 @llvm.smax.i32(i32 %130, i32 0) - %136 = and i16 %120, 2 - %.not.i.i.i81 = icmp eq i16 %136, 0 - %137 = load ptr, ptr %34, align 8 - %138 = select i1 %.not.i.i.i81, ptr %137, ptr %33 - %139 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %7, i32 noundef 0, i32 noundef %135, ptr noundef %138, i32 noundef %spec.select.i.i79, i32 noundef %.010.i.i80) - to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 unwind label %49 - -_ZNK6icu_7713UnicodeString7compareERKS0_.exit83: ; preds = %122, %.sink.split.i.i.i78 - %.0.i.i77 = phi i8 [ %125, %122 ], [ %139, %.sink.split.i.i.i78 ] - %.not110 = icmp eq i8 %.0.i.i77, 0 - br i1 %.not110, label %164, label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge - -_ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 - %.pre112 = load i16, ptr %26, align 8, !tbaa !39 + %.pre115 = load i16, ptr %26, align 8, !tbaa !39 + br i1 %.not66, label %.critedge, label %123 + +123: ; preds = %121 + %124 = load i16, ptr %29, align 8, !tbaa !39 + %125 = and i16 %124, 1 + %.not.i.i76 = icmp eq i16 %125, 0 + br i1 %.not.i.i76, label %.sink.split.i.i.i78, label %126 + +126: ; preds = %123 + %127 = trunc i16 %.pre115 to i8 + %128 = and i8 %127, 1 + %129 = xor i8 %128, 1 + br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 + +.sink.split.i.i.i78: ; preds = %123 + %130 = icmp slt i16 %124, 0 + %131 = load i32, ptr %32, align 4 + %132 = ashr i16 %124, 5 + %133 = sext i16 %132 to i32 + %134 = select i1 %130, i32 %131, i32 %133 + %135 = icmp slt i16 %.pre115, 0 + %136 = load i32, ptr %36, align 4 + %137 = ashr i16 %.pre115, 5 + %138 = sext i16 %137 to i32 + %139 = select i1 %135, i32 %136, i32 %138 + %spec.select.i.i79 = call i32 @llvm.smin.i32(i32 %134, i32 0) + %140 = icmp slt i32 %134, 0 + %141 = sub nsw i32 %134, %spec.select.i.i79 + %spec.select13.i.i80 = call i32 @llvm.smin.i32(i32 %134, i32 %141) + %.010.i.i81 = select i1 %140, i32 0, i32 %spec.select13.i.i80 + %142 = and i16 %124, 2 + %.not.i.i.i82 = icmp eq i16 %142, 0 + %143 = load ptr, ptr %34, align 8 + %144 = select i1 %.not.i.i.i82, ptr %143, ptr %33 + %145 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %7, i32 noundef 0, i32 noundef %139, ptr noundef %144, i32 noundef %spec.select.i.i79, i32 noundef %.010.i.i81) + to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 unwind label %49 + +_ZNK6icu_7713UnicodeString7compareERKS0_.exit84: ; preds = %126, %.sink.split.i.i.i78 + %.0.i.i77 = phi i8 [ %129, %126 ], [ %145, %.sink.split.i.i.i78 ] + %.not112 = icmp eq i8 %.0.i.i77, 0 + br i1 %.not112, label %172, label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge + +_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 + %.pre114 = load i16, ptr %26, align 8, !tbaa !39 br label %.critedge -140: ; preds = %113 - %141 = landingpad { ptr, i32 } +146: ; preds = %117 + %147 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #18 - br label %170 - -.critedge: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge, %117, %110 - %142 = phi i16 [ %.pre112, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge ], [ %.pre113, %117 ], [ %111, %110 ] - %143 = and i16 %142, 1 - %.not.i.i.i84 = icmp eq i16 %143, 0 - br i1 %.not.i.i.i84, label %.sink.split.i.i.i.i86, label %144 - -144: ; preds = %.critedge - %145 = load i16, ptr %30, align 8, !tbaa !39 - %146 = trunc i16 %145 to i8 - %147 = and i8 %146, 1 - %148 = xor i8 %147, 1 - br label %163 + br label %178 + +.critedge: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge, %121, %114 + %148 = phi i16 [ %.pre114, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge ], [ %.pre115, %121 ], [ %115, %114 ] + %149 = and i16 %148, 1 + %.not.i.i.i85 = icmp eq i16 %149, 0 + br i1 %.not.i.i.i85, label %.sink.split.i.i.i.i87, label %150 + +150: ; preds = %.critedge + %151 = load i16, ptr %30, align 8, !tbaa !39 + %152 = trunc i16 %151 to i8 + %153 = and i8 %152, 1 + %154 = xor i8 %153, 1 + br label %171 -.sink.split.i.i.i.i86: ; preds = %.critedge - %149 = getelementptr inbounds nuw i8, ptr %43, i64 8 - %150 = load i16, ptr %149, align 4, !tbaa !59 - %151 = zext i16 %150 to i32 - %152 = getelementptr inbounds nuw i8, ptr %43, i64 4 - %153 = load i32, ptr %152, align 4, !tbaa !56 - %154 = icmp slt i16 %142, 0 - %155 = load i32, ptr %36, align 4 - %156 = ashr i16 %142, 5 - %157 = sext i16 %156 to i32 - %158 = select i1 %154, i32 %155, i32 %157 - %spec.select.i.i.i87 = call i32 @llvm.smin.i32(i32 %158, i32 0) - %.010.i.i.i88 = call i32 @llvm.smax.i32(i32 %158, i32 0) - %159 = and i16 %142, 2 - %.not.i.i.i.i89 = icmp eq i16 %159, 0 - %160 = load ptr, ptr %38, align 8 - %161 = select i1 %.not.i.i.i.i89, ptr %160, ptr %37 - %162 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %153, i32 noundef %151, ptr noundef %161, i32 noundef %spec.select.i.i.i87, i32 noundef %.010.i.i.i88) - to label %163 unwind label %49 - -163: ; preds = %144, %.sink.split.i.i.i.i86 - %.0.i.i.i85 = phi i8 [ %148, %144 ], [ %162, %.sink.split.i.i.i.i86 ] - %.not111 = icmp eq i8 %.0.i.i.i85, 0 - %spec.select72 = zext i1 %.not111 to i8 - %spec.select73 = select i1 %.not111, i32 %41, i32 %.044 - br label %164 - -164: ; preds = %._crit_edge, %85, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83, %61, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit, %163 - %.pre-phi = phi i64 [ %.pre114, %._crit_edge ], [ %52, %85 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 ], [ %52, %61 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %52, %163 ] - %.359 = phi i32 [ %59, %._crit_edge ], [ %41, %85 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 ], [ %41, %61 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %41, %163 ] - %.249 = phi i8 [ %.047, %._crit_edge ], [ 0, %85 ], [ 1, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 ], [ 1, %61 ], [ %spec.select, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %spec.select72, %163 ] - %.246 = phi i32 [ %.044, %._crit_edge ], [ %.044, %85 ], [ %.044, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 ], [ %.044, %61 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %spec.select73, %163 ] - %165 = load ptr, ptr %16, align 8, !tbaa !55 - %166 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %165, i64 %.pre-phi, i32 4 - %167 = load i32, ptr %166, align 4, !tbaa !62 - %..i = call noundef i32 @llvm.smax.i32(i32 %167, i32 %.359) - %168 = add nsw i32 %..i, 1 - %169 = icmp slt i32 %168, %15 - br i1 %169, label %39, label %.thread, !llvm.loop !73 - -170: ; preds = %140, %49 - %.pn = phi { ptr, i32 } [ %50, %49 ], [ %141, %140 ] +.sink.split.i.i.i.i87: ; preds = %.critedge + %155 = getelementptr inbounds nuw i8, ptr %43, i64 8 + %156 = load i16, ptr %155, align 4, !tbaa !59 + %157 = zext i16 %156 to i32 + %158 = getelementptr inbounds nuw i8, ptr %43, i64 4 + %159 = load i32, ptr %158, align 4, !tbaa !56 + %160 = icmp slt i16 %148, 0 + %161 = load i32, ptr %36, align 4 + %162 = ashr i16 %148, 5 + %163 = sext i16 %162 to i32 + %164 = select i1 %160, i32 %161, i32 %163 + %spec.select.i.i.i88 = call i32 @llvm.smin.i32(i32 %164, i32 0) + %165 = icmp slt i32 %164, 0 + %166 = sub nsw i32 %164, %spec.select.i.i.i88 + %spec.select13.i.i.i89 = call i32 @llvm.smin.i32(i32 %164, i32 %166) + %.010.i.i.i90 = select i1 %165, i32 0, i32 %spec.select13.i.i.i89 + %167 = and i16 %148, 2 + %.not.i.i.i.i91 = icmp eq i16 %167, 0 + %168 = load ptr, ptr %38, align 8 + %169 = select i1 %.not.i.i.i.i91, ptr %168, ptr %37 + %170 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %159, i32 noundef %157, ptr noundef %169, i32 noundef %spec.select.i.i.i88, i32 noundef %.010.i.i.i90) + to label %171 unwind label %49 + +171: ; preds = %150, %.sink.split.i.i.i.i87 + %.0.i.i.i86 = phi i8 [ %154, %150 ], [ %170, %.sink.split.i.i.i.i87 ] + %.not113 = icmp eq i8 %.0.i.i.i86, 0 + %spec.select72 = zext i1 %.not113 to i8 + %spec.select73 = select i1 %.not113, i32 %41, i32 %.044 + br label %172 + +172: ; preds = %._crit_edge, %87, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84, %61, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit, %171 + %.pre-phi = phi i64 [ %.pre116, %._crit_edge ], [ %52, %87 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ %52, %61 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %52, %171 ] + %.359 = phi i32 [ %59, %._crit_edge ], [ %41, %87 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ %41, %61 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %41, %171 ] + %.249 = phi i8 [ %.047, %._crit_edge ], [ 0, %87 ], [ 1, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ 1, %61 ], [ %spec.select, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %spec.select72, %171 ] + %.246 = phi i32 [ %.044, %._crit_edge ], [ %.044, %87 ], [ %.044, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ %.044, %61 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %spec.select73, %171 ] + %173 = load ptr, ptr %16, align 8, !tbaa !55 + %174 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %173, i64 %.pre-phi, i32 4 + %175 = load i32, ptr %174, align 4, !tbaa !62 + %..i = call noundef i32 @llvm.smax.i32(i32 %175, i32 %.359) + %176 = add nsw i32 %..i, 1 + %177 = icmp slt i32 %176, %15 + br i1 %177, label %39, label %.thread, !llvm.loop !73 + +178: ; preds = %146, %49 + %.pn = phi { ptr, i32 } [ %50, %49 ], [ %147, %146 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #18 - br label %171 + br label %179 -.thread: ; preds = %58, %164, %39 - %.3 = phi i32 [ %.246, %164 ], [ %.044, %39 ], [ %59, %58 ] +.thread: ; preds = %58, %172, %39 + %.3 = phi i32 [ %.246, %172 ], [ %.044, %39 ], [ %59, %58 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #18 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %7) #18 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #18 - br label %172 + br label %180 -171: ; preds = %170, %46 - %.pn.pn = phi { ptr, i32 } [ %.pn, %170 ], [ %47, %46 ] +179: ; preds = %178, %46 + %.pn.pn = phi { ptr, i32 } [ %.pn, %178 ], [ %47, %46 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %7) #18 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #18 resume { ptr, i32 } %.pn.pn -172: ; preds = %6, %.thread +180: ; preds = %6, %.thread %.043 = phi i32 [ %.3, %.thread ], [ 0, %6 ] ret i32 %.043 } diff --git a/bench/icu/optimized/rbnf.ll b/bench/icu/optimized/rbnf.ll index 21492d43dcb..2eed4a2c24b 100644 --- a/bench/icu/optimized/rbnf.ll +++ b/bench/icu/optimized/rbnf.ll @@ -5989,7 +5989,7 @@ _ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCo 69: ; preds = %67, %64 %.pn20 = phi { ptr, i32 } [ %68, %67 ], [ %65, %64 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #21 - br label %140 + br label %142 70: ; preds = %14 tail call void @_ZN6icu_7721RuleBasedNumberFormat18initDefaultRuleSetEv(ptr noundef nonnull align 8 dereferenceable(456) %0) @@ -5999,7 +5999,7 @@ _ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCo call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #21 store ptr @.str.7, ptr %7, align 8, !tbaa !100 invoke void @_ZN6icu_7713UnicodeStringC1EaNS_14ConstChar16PtrEi(ptr noundef nonnull align 8 dereferenceable(64) %6, i8 noundef signext 1, ptr noundef nonnull %7, i32 noundef -1) - to label %72 unwind label %93 + to label %72 unwind label %95 72: ; preds = %71 %73 = getelementptr inbounds nuw i8, ptr %6, i64 8 @@ -6021,142 +6021,145 @@ _ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCo br i1 %.not6.i.i, label %84, label %.critedge 84: ; preds = %.sink.split.i.i.i + %85 = icmp slt i32 %80, 0 %spec.select12.i.i = call i32 @llvm.smin.i32(i32 %80, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %80, i32 0) - %85 = and i16 %74, 2 - %.not.i.i.i23 = icmp eq i16 %85, 0 - %86 = getelementptr inbounds nuw i8, ptr %6, i64 10 - %87 = getelementptr inbounds nuw i8, ptr %6, i64 24 - %88 = load ptr, ptr %87, align 8 - %89 = select i1 %.not.i.i.i23, ptr %88, ptr %86 - %90 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString17doEqualsSubstringEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %80, ptr noundef %89, i32 noundef %spec.select12.i.i, i32 noundef %.010.i.i) - to label %.noexc24 unwind label %95 + %86 = sub nsw i32 %80, %spec.select12.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %80, i32 %86) + %.010.i.i = select i1 %85, i32 0, i32 %spec.select13.i.i + %87 = and i16 %74, 2 + %.not.i.i.i23 = icmp eq i16 %87, 0 + %88 = getelementptr inbounds nuw i8, ptr %6, i64 10 + %89 = getelementptr inbounds nuw i8, ptr %6, i64 24 + %90 = load ptr, ptr %89, align 8 + %91 = select i1 %.not.i.i.i23, ptr %90, ptr %88 + %92 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString17doEqualsSubstringEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %80, ptr noundef %91, i32 noundef %spec.select12.i.i, i32 noundef %.010.i.i) + to label %.noexc24 unwind label %97 .noexc24: ; preds = %84 - %.not = icmp eq i8 %90, 0 + %.not = icmp eq i8 %92, 0 br label %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit _ZNK6icu_7713UnicodeString10startsWithERKS0_.exit: ; preds = %72, %.noexc24 %.0.i.i = phi i1 [ %.not, %.noexc24 ], [ %.not6.i.i, %72 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #21 - %91 = load ptr, ptr %7, align 8, !tbaa !100 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %91) #21, !srcloc !102 + %93 = load ptr, ptr %7, align 8, !tbaa !100 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %93) #21, !srcloc !102 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #21 - br i1 %.0.i.i, label %100, label %92 + br i1 %.0.i.i, label %102, label %94 -92: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit +94: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit store i32 1, ptr %2, align 4, !tbaa !19 br label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread -93: ; preds = %71 - %94 = landingpad { ptr, i32 } +95: ; preds = %71 + %96 = landingpad { ptr, i32 } cleanup - br label %97 + br label %99 -95: ; preds = %84 - %96 = landingpad { ptr, i32 } +97: ; preds = %84 + %98 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #21 - br label %97 + br label %99 -97: ; preds = %95, %93 - %.pn = phi { ptr, i32 } [ %96, %95 ], [ %94, %93 ] - %98 = load ptr, ptr %7, align 8, !tbaa !100 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %98) #21, !srcloc !102 +99: ; preds = %97, %95 + %.pn = phi { ptr, i32 } [ %98, %97 ], [ %96, %95 ] + %100 = load ptr, ptr %7, align 8, !tbaa !100 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %100) #21, !srcloc !102 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #21 - br label %140 + br label %142 .critedge: ; preds = %.sink.split.i.i.i call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #21 - %99 = load ptr, ptr %7, align 8, !tbaa !100 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %99) #21, !srcloc !102 + %101 = load ptr, ptr %7, align 8, !tbaa !100 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %101) #21, !srcloc !102 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #21 - br label %100 - -100: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit - %101 = load i32, ptr %2, align 4, !tbaa !19 - %102 = icmp sgt i32 %101, 0 - %103 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %104 = load ptr, ptr %103, align 8 - %.not16.i25 = icmp eq ptr %104, null - %or.cond.i26 = select i1 %102, i1 true, i1 %.not16.i25 + br label %102 + +102: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit + %103 = load i32, ptr %2, align 4, !tbaa !19 + %104 = icmp sgt i32 %103, 0 + %105 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %106 = load ptr, ptr %105, align 8 + %.not16.i25 = icmp eq ptr %106, null + %or.cond.i26 = select i1 %104, i1 true, i1 %.not16.i25 br i1 %or.cond.i26, label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread, label %.preheader.i27 -.preheader.i27: ; preds = %100 - %105 = load ptr, ptr %104, align 8, !tbaa !96 - %.not1729.i28 = icmp eq ptr %105, null +.preheader.i27: ; preds = %102 + %107 = load ptr, ptr %106, align 8, !tbaa !96 + %.not1729.i28 = icmp eq ptr %107, null br i1 %.not1729.i28, label %._crit_edge.i36, label %.lr.ph.i29 .lr.ph.i29: ; preds = %.preheader.i27 - %106 = getelementptr inbounds nuw i8, ptr %1, i64 12 - %107 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %108 = getelementptr inbounds nuw i8, ptr %1, i64 24 - br label %109 - -109: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, %.lr.ph.i29 - %110 = phi ptr [ %105, %.lr.ph.i29 ], [ %138, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] - %.01330.i30 = phi ptr [ %104, %.lr.ph.i29 ], [ %137, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] - %111 = getelementptr inbounds nuw i8, ptr %110, i64 8 - %112 = getelementptr inbounds nuw i8, ptr %110, i64 16 - %113 = load i16, ptr %112, align 8, !tbaa !55 - %114 = and i16 %113, 1 - %.not.i.i.i31 = icmp eq i16 %114, 0 - br i1 %.not.i.i.i31, label %118, label %115 - -115: ; preds = %109 - %116 = load i16, ptr %11, align 8, !tbaa !55 - %117 = and i16 %116, 1 - %.not.i32 = icmp eq i16 %117, 0 + %108 = getelementptr inbounds nuw i8, ptr %1, i64 12 + %109 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %110 = getelementptr inbounds nuw i8, ptr %1, i64 24 + br label %111 + +111: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, %.lr.ph.i29 + %112 = phi ptr [ %107, %.lr.ph.i29 ], [ %140, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] + %.01330.i30 = phi ptr [ %106, %.lr.ph.i29 ], [ %139, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] + %113 = getelementptr inbounds nuw i8, ptr %112, i64 8 + %114 = getelementptr inbounds nuw i8, ptr %112, i64 16 + %115 = load i16, ptr %114, align 8, !tbaa !55 + %116 = and i16 %115, 1 + %.not.i.i.i31 = icmp eq i16 %116, 0 + br i1 %.not.i.i.i31, label %120, label %117 + +117: ; preds = %111 + %118 = load i16, ptr %11, align 8, !tbaa !55 + %119 = and i16 %118, 1 + %.not.i32 = icmp eq i16 %119, 0 br i1 %.not.i32, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42 -118: ; preds = %109 - %119 = icmp slt i16 %113, 0 - %120 = ashr i16 %113, 5 - %121 = sext i16 %120 to i32 - %122 = getelementptr inbounds nuw i8, ptr %110, i64 20 - %123 = load i32, ptr %122, align 4 - %124 = select i1 %119, i32 %123, i32 %121 - %125 = load i16, ptr %11, align 8, !tbaa !55 - %126 = icmp slt i16 %125, 0 - %127 = ashr i16 %125, 5 - %128 = sext i16 %127 to i32 - %129 = load i32, ptr %106, align 4 - %130 = select i1 %126, i32 %129, i32 %128 - %131 = and i16 %125, 1 - %.not9.i.i.i37 = icmp eq i16 %131, 0 - %132 = icmp eq i32 %124, %130 - %or.cond.i.i.i38 = and i1 %.not9.i.i.i37, %132 +120: ; preds = %111 + %121 = icmp slt i16 %115, 0 + %122 = ashr i16 %115, 5 + %123 = sext i16 %122 to i32 + %124 = getelementptr inbounds nuw i8, ptr %112, i64 20 + %125 = load i32, ptr %124, align 4 + %126 = select i1 %121, i32 %125, i32 %123 + %127 = load i16, ptr %11, align 8, !tbaa !55 + %128 = icmp slt i16 %127, 0 + %129 = ashr i16 %127, 5 + %130 = sext i16 %129 to i32 + %131 = load i32, ptr %108, align 4 + %132 = select i1 %128, i32 %131, i32 %130 + %133 = and i16 %127, 1 + %.not9.i.i.i37 = icmp eq i16 %133, 0 + %134 = icmp eq i32 %126, %132 + %or.cond.i.i.i38 = and i1 %.not9.i.i.i37, %134 br i1 %or.cond.i.i.i38, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 -_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39: ; preds = %118 - %133 = and i16 %125, 2 - %.not.i.i.i.i.i40 = icmp eq i16 %133, 0 - %134 = load ptr, ptr %108, align 8 - %135 = select i1 %.not.i.i.i.i.i40, ptr %134, ptr %107 - %136 = call noundef signext i8 @_ZNK6icu_7713UnicodeString8doEqualsEPKDsi(ptr noundef nonnull align 8 dereferenceable(64) %111, ptr noundef %135, i32 noundef %124) - %.not33.i41 = icmp eq i8 %136, 0 +_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39: ; preds = %120 + %135 = and i16 %127, 2 + %.not.i.i.i.i.i40 = icmp eq i16 %135, 0 + %136 = load ptr, ptr %110, align 8 + %137 = select i1 %.not.i.i.i.i.i40, ptr %136, ptr %109 + %138 = call noundef signext i8 @_ZNK6icu_7713UnicodeString8doEqualsEPKDsi(ptr noundef nonnull align 8 dereferenceable(64) %113, ptr noundef %137, i32 noundef %126) + %.not33.i41 = icmp eq i8 %138, 0 br i1 %.not33.i41, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42 -_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %118, %115 - %137 = getelementptr inbounds nuw i8, ptr %.01330.i30, i64 8 - %138 = load ptr, ptr %137, align 8, !tbaa !96 - %.not17.i35 = icmp eq ptr %138, null - br i1 %.not17.i35, label %._crit_edge.i36, label %109, !llvm.loop !103 +_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %120, %117 + %139 = getelementptr inbounds nuw i8, ptr %.01330.i30, i64 8 + %140 = load ptr, ptr %139, align 8, !tbaa !96 + %.not17.i35 = icmp eq ptr %140, null + br i1 %.not17.i35, label %._crit_edge.i36, label %111, !llvm.loop !103 ._crit_edge.i36: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, %.preheader.i27 store i32 1, ptr %2, align 4, !tbaa !19 br label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread -_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %115 - %139 = getelementptr inbounds nuw i8, ptr %0, i64 88 - store ptr %110, ptr %139, align 8, !tbaa !64 +_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %117 + %141 = getelementptr inbounds nuw i8, ptr %0, i64 88 + store ptr %112, ptr %141, align 8, !tbaa !64 br label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread -_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread: ; preds = %100, %._crit_edge.i36, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42, %70, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit, %92, %3 +_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread: ; preds = %102, %._crit_edge.i36, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42, %70, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit, %94, %3 ret void -140: ; preds = %97, %69 - %.pn20.pn = phi { ptr, i32 } [ %.pn20, %69 ], [ %.pn, %97 ] +142: ; preds = %99, %69 + %.pn20.pn = phi { ptr, i32 } [ %.pn20, %69 ], [ %.pn, %99 ] resume { ptr, i32 } %.pn20.pn } diff --git a/bench/icu/optimized/rbt_rule.ll b/bench/icu/optimized/rbt_rule.ll index e9d261094d6..e183ac73629 100644 --- a/bench/icu/optimized/rbt_rule.ll +++ b/bench/icu/optimized/rbt_rule.ll @@ -1097,80 +1097,83 @@ define noundef signext range(i8 0, 2) i8 @_ZNK6icu_7719TransliterationRule5masks %30 = sub nsw i32 %14, %12 %31 = getelementptr inbounds nuw i8, ptr %1, i64 40 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %10, i32 0) - %.010.i.i = tail call i32 @llvm.smax.i32(i32 %10, i32 0) - %32 = and i16 %4, 2 - %.not.i.i.i = icmp eq i16 %32, 0 - %33 = getelementptr inbounds nuw i8, ptr %0, i64 50 - %34 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %35 = load ptr, ptr %34, align 8 - %36 = select i1 %.not.i.i.i, ptr %35, ptr %33 - %37 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %30, i32 noundef %10, ptr noundef %36, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + %32 = icmp slt i32 %10, 0 + %33 = sub nsw i32 %10, %spec.select.i.i + %spec.select13.i.i = tail call i32 @llvm.smin.i32(i32 %10, i32 %33) + %.010.i.i = select i1 %32, i32 0, i32 %spec.select13.i.i + %34 = and i16 %4, 2 + %.not.i.i.i = icmp eq i16 %34, 0 + %35 = getelementptr inbounds nuw i8, ptr %0, i64 50 + %36 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %37 = load ptr, ptr %36, align 8 + %38 = select i1 %.not.i.i.i, ptr %37, ptr %35 + %39 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %30, i32 noundef %10, ptr noundef %38, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) br label %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit _ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit: ; preds = %26, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %29, %26 ], [ %37, %.sink.split.i.i.i ] - %38 = icmp eq i32 %12, %14 - %39 = icmp eq i32 %15, %24 - %or.cond35 = select i1 %38, i1 %39, i1 false - br i1 %or.cond35, label %40, label %58 - -40: ; preds = %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit - %41 = getelementptr inbounds nuw i8, ptr %0, i64 120 - %42 = load i32, ptr %41, align 8, !tbaa !30 - %43 = getelementptr inbounds nuw i8, ptr %1, i64 120 + %.0.i.i = phi i8 [ %29, %26 ], [ %39, %.sink.split.i.i.i ] + %40 = icmp eq i32 %12, %14 + %41 = icmp eq i32 %15, %24 + %or.cond35 = select i1 %40, i1 %41, i1 false + br i1 %or.cond35, label %42, label %60 + +42: ; preds = %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit + %43 = getelementptr inbounds nuw i8, ptr %0, i64 120 %44 = load i32, ptr %43, align 8, !tbaa !30 - %45 = icmp sle i32 %42, %44 - %46 = icmp eq i8 %.0.i.i, 0 - %or.cond = and i1 %46, %45 - br i1 %or.cond, label %47, label %58 - -47: ; preds = %40 - %48 = getelementptr inbounds nuw i8, ptr %0, i64 124 - %49 = load i8, ptr %48, align 4, !tbaa !32 - %50 = getelementptr inbounds nuw i8, ptr %1, i64 124 + %45 = getelementptr inbounds nuw i8, ptr %1, i64 120 + %46 = load i32, ptr %45, align 8, !tbaa !30 + %47 = icmp sle i32 %44, %46 + %48 = icmp eq i8 %.0.i.i, 0 + %or.cond = and i1 %48, %47 + br i1 %or.cond, label %49, label %60 + +49: ; preds = %42 + %50 = getelementptr inbounds nuw i8, ptr %0, i64 124 %51 = load i8, ptr %50, align 4, !tbaa !32 - %52 = icmp eq i8 %49, %51 - %53 = and i8 %49, 3 - %or.cond36 = icmp eq i8 %53, 0 - %or.cond37 = or i1 %52, %or.cond36 - br i1 %or.cond37, label %70, label %54 - -54: ; preds = %47 - %55 = and i8 %51, 1 - %.not34 = icmp eq i8 %55, 0 - br i1 %.not34, label %70, label %56 - -56: ; preds = %54 - %57 = lshr i8 %51, 1 - %.lobit = and i8 %57, 1 - br label %70 - -58: ; preds = %40, %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit + %52 = getelementptr inbounds nuw i8, ptr %1, i64 124 + %53 = load i8, ptr %52, align 4, !tbaa !32 + %54 = icmp eq i8 %51, %53 + %55 = and i8 %51, 3 + %or.cond36 = icmp eq i8 %55, 0 + %or.cond37 = or i1 %54, %or.cond36 + br i1 %or.cond37, label %72, label %56 + +56: ; preds = %49 + %57 = and i8 %53, 1 + %.not34 = icmp eq i8 %57, 0 + br i1 %.not34, label %72, label %58 + +58: ; preds = %56 + %59 = lshr i8 %53, 1 + %.lobit = and i8 %59, 1 + br label %72 + +60: ; preds = %42, %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit %.not = icmp sgt i32 %12, %14 - br i1 %.not, label %70, label %59 + br i1 %.not, label %72, label %61 -59: ; preds = %58 - %60 = icmp slt i32 %15, %24 - br i1 %60, label %67, label %61 +61: ; preds = %60 + %62 = icmp slt i32 %15, %24 + br i1 %62, label %69, label %63 -61: ; preds = %59 - br i1 %39, label %62, label %70 +63: ; preds = %61 + br i1 %41, label %64, label %72 -62: ; preds = %61 - %63 = getelementptr inbounds nuw i8, ptr %0, i64 120 - %64 = load i32, ptr %63, align 8, !tbaa !30 - %65 = getelementptr inbounds nuw i8, ptr %1, i64 120 +64: ; preds = %63 + %65 = getelementptr inbounds nuw i8, ptr %0, i64 120 %66 = load i32, ptr %65, align 8, !tbaa !30 - %.not31 = icmp sgt i32 %64, %66 - br i1 %.not31, label %70, label %67 - -67: ; preds = %62, %59 - %68 = icmp eq i8 %.0.i.i, 0 - %69 = zext i1 %68 to i8 - br label %70 - -70: ; preds = %58, %61, %62, %67, %47, %56, %54 - %.0 = phi i8 [ 1, %47 ], [ 0, %54 ], [ %.lobit, %56 ], [ 0, %62 ], [ 0, %61 ], [ 0, %58 ], [ %69, %67 ] + %67 = getelementptr inbounds nuw i8, ptr %1, i64 120 + %68 = load i32, ptr %67, align 8, !tbaa !30 + %.not31 = icmp sgt i32 %66, %68 + br i1 %.not31, label %72, label %69 + +69: ; preds = %64, %61 + %70 = icmp eq i8 %.0.i.i, 0 + %71 = zext i1 %70 to i8 + br label %72 + +72: ; preds = %60, %63, %64, %69, %49, %58, %56 + %.0 = phi i8 [ 1, %49 ], [ 0, %56 ], [ %.lobit, %58 ], [ 0, %64 ], [ 0, %63 ], [ 0, %60 ], [ %71, %69 ] ret i8 %.0 } @@ -1702,9 +1705,6 @@ declare noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStri ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #12 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #12 - ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #13 diff --git a/bench/icu/optimized/reslist.ll b/bench/icu/optimized/reslist.ll index 4bbcb0d0816..1093f0fada9 100644 --- a/bench/icu/optimized/reslist.ll +++ b/bench/icu/optimized/reslist.ll @@ -4174,7 +4174,7 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( %4 = alloca i32, align 4 %5 = load i32, ptr %2, align 4, !tbaa !22 %6 = icmp slt i32 %5, 1 - br i1 %6, label %7, label %307 + br i1 %6, label %7, label %309 7: ; preds = %3 %8 = tail call i32 @uhash_count_77(ptr noundef %1) @@ -4239,9 +4239,9 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( %30 = getelementptr inbounds nuw i8, ptr %0, i64 152 br label %31 -._crit_edge202: ; preds = %.thread, %135, %.preheader185 +._crit_edge202: ; preds = %.thread, %137, %.preheader185 invoke void @uprv_sortArray_77(ptr noundef nonnull %13, i32 noundef %8, i32 noundef 8, ptr noundef nonnull @_ZL20compareStringLengthsPKvS0_S0_, ptr noundef null, i8 noundef signext 0, ptr noundef nonnull %2) - to label %138 unwind label %16 + to label %140 unwind label %16 31: ; preds = %.lr.ph201, %.thread %.0124200 = phi i32 [ 0, %.lr.ph201 ], [ %.0125.lcssa, %.thread ] @@ -4278,8 +4278,8 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( %57 = add nsw i64 %32, 1 br label %58 -58: ; preds = %.lr.ph197, %135 - %indvars.iv226 = phi i64 [ %57, %.lr.ph197 ], [ %indvars.iv.next227, %135 ] +58: ; preds = %.lr.ph197, %137 + %indvars.iv226 = phi i64 [ %57, %.lr.ph197 ], [ %indvars.iv.next227, %137 ] %59 = getelementptr inbounds ptr, ptr %13, i64 %indvars.iv226 %60 = load ptr, ptr %59, align 8, !tbaa !146 %61 = load i16, ptr %40, align 8, !tbaa !4 @@ -4304,461 +4304,464 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( br i1 %.not.i.i, label %.sink.split.i.i.i, label %78 78: ; preds = %58 - br i1 %.not6.i.i, label %.thread.loopexit, label %86 + br i1 %.not6.i.i, label %.thread.loopexit, label %88 .sink.split.i.i.i: ; preds = %58 br i1 %.not6.i.i, label %79, label %.thread.loopexit 79: ; preds = %.sink.split.i.i.i + %80 = icmp slt i32 %74, 0 %spec.select12.i.i = call i32 @llvm.smin.i32(i32 %74, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %74, i32 0) - %80 = and i16 %68, 2 - %.not.i.i.i = icmp eq i16 %80, 0 - %81 = getelementptr inbounds nuw i8, ptr %60, i64 66 - %82 = getelementptr inbounds nuw i8, ptr %60, i64 80 - %83 = load ptr, ptr %82, align 8 - %84 = select i1 %.not.i.i.i, ptr %83, ptr %81 - %85 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString17doEqualsSubstringEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %54, i32 noundef %75, i32 noundef %74, ptr noundef %84, i32 noundef %spec.select12.i.i, i32 noundef %.010.i.i) - to label %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit unwind label %89 + %81 = sub nsw i32 %74, %spec.select12.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %74, i32 %81) + %.010.i.i = select i1 %80, i32 0, i32 %spec.select13.i.i + %82 = and i16 %68, 2 + %.not.i.i.i = icmp eq i16 %82, 0 + %83 = getelementptr inbounds nuw i8, ptr %60, i64 66 + %84 = getelementptr inbounds nuw i8, ptr %60, i64 80 + %85 = load ptr, ptr %84, align 8 + %86 = select i1 %.not.i.i.i, ptr %85, ptr %83 + %87 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString17doEqualsSubstringEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %54, i32 noundef %75, i32 noundef %74, ptr noundef %86, i32 noundef %spec.select12.i.i, i32 noundef %.010.i.i) + to label %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit unwind label %91 _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 - %.not = icmp eq i8 %85, 0 - br i1 %.not, label %.thread.loopexit, label %86 + %.not = icmp eq i8 %87, 0 + br i1 %.not, label %.thread.loopexit, label %88 -86: ; preds = %78, %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit - %87 = getelementptr inbounds nuw i8, ptr %60, i64 9 - %88 = load i8, ptr %87, align 1, !tbaa !17 - %.not159 = icmp eq i8 %88, 0 - br i1 %.not159, label %91, label %135 +88: ; preds = %78, %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit + %89 = getelementptr inbounds nuw i8, ptr %60, i64 9 + %90 = load i8, ptr %89, align 1, !tbaa !17 + %.not159 = icmp eq i8 %90, 0 + br i1 %.not159, label %93, label %137 -89: ; preds = %79 - %90 = landingpad { ptr, i32 } +91: ; preds = %79 + %92 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -91: ; preds = %86 - %92 = getelementptr inbounds nuw i8, ptr %60, i64 140 - %93 = load i8, ptr %92, align 4, !tbaa !72 - %94 = icmp eq i8 %93, 0 - br i1 %94, label %95, label %135 - -95: ; preds = %91 - %96 = getelementptr inbounds nuw i8, ptr %60, i64 120 - store ptr %34, ptr %96, align 8, !tbaa !63 - %97 = load i16, ptr %40, align 8, !tbaa !4 - %98 = icmp slt i16 %97, 0 - %99 = ashr i16 %97, 5 - %100 = sext i16 %99 to i32 - %101 = load i32, ptr %45, align 4 - %102 = select i1 %98, i32 %101, i32 %100 - %103 = load i16, ptr %67, align 8, !tbaa !4 - %104 = icmp slt i16 %103, 0 - %105 = ashr i16 %103, 5 - %106 = sext i16 %105 to i32 - %107 = load i32, ptr %72, align 4 - %108 = select i1 %104, i32 %107, i32 %106 - %109 = sub nsw i32 %102, %108 - %110 = getelementptr inbounds nuw i8, ptr %60, i64 128 - store i32 %109, ptr %110, align 8, !tbaa !148 - %111 = load i8, ptr %55, align 1, !tbaa !17 - %.not160 = icmp eq i8 %111, 0 - br i1 %.not160, label %124, label %112 - -112: ; preds = %95 - %113 = load i32, ptr %56, align 4, !tbaa !20 - %114 = load i8, ptr %37, align 4, !tbaa !72 - %115 = sext i8 %114 to i32 - %116 = add i32 %113, %109 - %117 = add i32 %116, %115 - %118 = getelementptr inbounds nuw i8, ptr %60, i64 12 - store i32 %117, ptr %118, align 4, !tbaa !20 - %119 = and i32 %117, 268435455 - %120 = load i32, ptr %30, align 8, !tbaa !68 - %.not161 = icmp slt i32 %119, %120 - br i1 %.not161, label %123, label %121 - -121: ; preds = %112 - %122 = add nuw nsw i32 %119, 1 - store i32 %122, ptr %30, align 8, !tbaa !68 +93: ; preds = %88 + %94 = getelementptr inbounds nuw i8, ptr %60, i64 140 + %95 = load i8, ptr %94, align 4, !tbaa !72 + %96 = icmp eq i8 %95, 0 + br i1 %96, label %97, label %137 + +97: ; preds = %93 + %98 = getelementptr inbounds nuw i8, ptr %60, i64 120 + store ptr %34, ptr %98, align 8, !tbaa !63 + %99 = load i16, ptr %40, align 8, !tbaa !4 + %100 = icmp slt i16 %99, 0 + %101 = ashr i16 %99, 5 + %102 = sext i16 %101 to i32 + %103 = load i32, ptr %45, align 4 + %104 = select i1 %100, i32 %103, i32 %102 + %105 = load i16, ptr %67, align 8, !tbaa !4 + %106 = icmp slt i16 %105, 0 + %107 = ashr i16 %105, 5 + %108 = sext i16 %107 to i32 + %109 = load i32, ptr %72, align 4 + %110 = select i1 %106, i32 %109, i32 %108 + %111 = sub nsw i32 %104, %110 + %112 = getelementptr inbounds nuw i8, ptr %60, i64 128 + store i32 %111, ptr %112, align 8, !tbaa !148 + %113 = load i8, ptr %55, align 1, !tbaa !17 + %.not160 = icmp eq i8 %113, 0 + br i1 %.not160, label %126, label %114 + +114: ; preds = %97 + %115 = load i32, ptr %56, align 4, !tbaa !20 + %116 = load i8, ptr %37, align 4, !tbaa !72 + %117 = sext i8 %116 to i32 + %118 = add i32 %115, %111 + %119 = add i32 %118, %117 + %120 = getelementptr inbounds nuw i8, ptr %60, i64 12 + store i32 %119, ptr %120, align 4, !tbaa !20 + %121 = and i32 %119, 268435455 + %122 = load i32, ptr %30, align 8, !tbaa !68 + %.not161 = icmp slt i32 %121, %122 + br i1 %.not161, label %125, label %123 + +123: ; preds = %114 + %124 = add nuw nsw i32 %121, 1 + store i32 %124, ptr %30, align 8, !tbaa !68 %.pre.pre = load i16, ptr %67, align 8, !tbaa !4 %.pre248.pre = load i32, ptr %72, align 4 %.pre254 = ashr i16 %.pre.pre, 5 %.pre255 = sext i16 %.pre254 to i32 - br label %123 - -123: ; preds = %121, %112 - %.pre252.pre-phi = phi i32 [ %.pre255, %121 ], [ %106, %112 ] - %.pre248 = phi i32 [ %.pre248.pre, %121 ], [ %107, %112 ] - %.pre = phi i16 [ %.pre.pre, %121 ], [ %103, %112 ] - store i8 1, ptr %87, align 1, !tbaa !17 - br label %124 - -124: ; preds = %95, %123 - %.pre-phi253 = phi i32 [ %106, %95 ], [ %.pre252.pre-phi, %123 ] - %125 = phi i32 [ %107, %95 ], [ %.pre248, %123 ] - %126 = phi i16 [ %103, %95 ], [ %.pre, %123 ] - %127 = getelementptr inbounds nuw i8, ptr %60, i64 132 - %128 = load i32, ptr %127, align 4, !tbaa !67 - %129 = icmp slt i16 %126, 0 - %130 = select i1 %129, i32 %125, i32 %.pre-phi253 - %131 = add i32 %130, 1 - %132 = mul nsw i32 %131, %128 - %133 = load i32, ptr %52, align 8, !tbaa !103 - %134 = add nsw i32 %132, %133 - store i32 %134, ptr %52, align 8, !tbaa !103 - br label %135 - -135: ; preds = %124, %91, %86 + br label %125 + +125: ; preds = %123, %114 + %.pre252.pre-phi = phi i32 [ %.pre255, %123 ], [ %108, %114 ] + %.pre248 = phi i32 [ %.pre248.pre, %123 ], [ %109, %114 ] + %.pre = phi i16 [ %.pre.pre, %123 ], [ %105, %114 ] + store i8 1, ptr %89, align 1, !tbaa !17 + br label %126 + +126: ; preds = %97, %125 + %.pre-phi253 = phi i32 [ %108, %97 ], [ %.pre252.pre-phi, %125 ] + %127 = phi i32 [ %109, %97 ], [ %.pre248, %125 ] + %128 = phi i16 [ %105, %97 ], [ %.pre, %125 ] + %129 = getelementptr inbounds nuw i8, ptr %60, i64 132 + %130 = load i32, ptr %129, align 4, !tbaa !67 + %131 = icmp slt i16 %128, 0 + %132 = select i1 %131, i32 %127, i32 %.pre-phi253 + %133 = add i32 %132, 1 + %134 = mul nsw i32 %133, %130 + %135 = load i32, ptr %52, align 8, !tbaa !103 + %136 = add nsw i32 %134, %135 + store i32 %136, ptr %52, align 8, !tbaa !103 + br label %137 + +137: ; preds = %126, %93, %88 %indvars.iv.next227 = add nsw i64 %indvars.iv226, 1 %exitcond229.not = icmp eq i64 %indvars.iv.next227, %9 br i1 %exitcond229.not, label %._crit_edge202, label %58, !llvm.loop !149 .thread.loopexit: ; preds = %78, %.sink.split.i.i.i, %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit - %136 = trunc nsw i64 %indvars.iv226 to i32 + %138 = trunc nsw i64 %indvars.iv226 to i32 br label %.thread .thread: ; preds = %.thread.loopexit, %31 - %.0125.lcssa = phi i32 [ %.0125194, %31 ], [ %136, %.thread.loopexit ] - %137 = icmp slt i32 %.0125.lcssa, %8 - br i1 %137, label %31, label %._crit_edge202, !llvm.loop !150 - -138: ; preds = %._crit_edge202 - %139 = load i32, ptr %2, align 4, !tbaa !22 - %140 = icmp slt i32 %139, 1 - br i1 %140, label %141, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit - -141: ; preds = %138 - %142 = getelementptr inbounds nuw i8, ptr %0, i64 26 - %143 = load i8, ptr %142, align 2, !tbaa !107 - %.not145 = icmp eq i8 %143, 0 + %.0125.lcssa = phi i32 [ %.0125194, %31 ], [ %138, %.thread.loopexit ] + %139 = icmp slt i32 %.0125.lcssa, %8 + br i1 %139, label %31, label %._crit_edge202, !llvm.loop !150 + +140: ; preds = %._crit_edge202 + %141 = load i32, ptr %2, align 4, !tbaa !22 + %142 = icmp slt i32 %141, 1 + br i1 %142, label %143, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit + +143: ; preds = %140 + %144 = getelementptr inbounds nuw i8, ptr %0, i64 26 + %145 = load i8, ptr %144, align 2, !tbaa !107 + %.not145 = icmp eq i8 %145, 0 br i1 %.not145, label %.preheader, label %.preheader184 -.preheader184: ; preds = %141 +.preheader184: ; preds = %143 br i1 %19, label %._crit_edge208, label %.lr.ph207 .lr.ph207: ; preds = %.preheader184 - %144 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %145 = getelementptr inbounds nuw i8, ptr %0, i64 84 - %146 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %146 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %147 = getelementptr inbounds nuw i8, ptr %0, i64 84 + %148 = getelementptr inbounds nuw i8, ptr %0, i64 72 %wide.trip.count233 = zext nneg i32 %8 to i64 - br label %155 + br label %157 -.preheader: ; preds = %141 +.preheader: ; preds = %143 br i1 %19, label %.critedge, label %.lr.ph213 .lr.ph213: ; preds = %.preheader - %147 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %148 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %149 = getelementptr inbounds nuw i8, ptr %0, i64 84 - %150 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %151 = getelementptr inbounds nuw i8, ptr %0, i64 152 + %149 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %150 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %151 = getelementptr inbounds nuw i8, ptr %0, i64 84 + %152 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %153 = getelementptr inbounds nuw i8, ptr %0, i64 152 %wide.trip.count238 = zext nneg i32 %8 to i64 - br label %214 - -._crit_edge208: ; preds = %192, %.preheader184 - %.0134.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1135, %192 ] - %.0132.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1133, %192 ] - %.0126.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1127, %192 ] - %152 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %153 = load i16, ptr %152, align 8, !tbaa !4 - %154 = and i16 %153, 1 - %.not154 = icmp eq i16 %154, 0 - br i1 %.not154, label %196, label %193 - -155: ; preds = %.lr.ph207, %192 - %indvars.iv230 = phi i64 [ 0, %.lr.ph207 ], [ %indvars.iv.next231, %192 ] - %.0126206 = phi i32 [ 0, %.lr.ph207 ], [ %.1127, %192 ] - %.0132205 = phi i32 [ 0, %.lr.ph207 ], [ %.1133, %192 ] - %.0134204 = phi i32 [ 0, %.lr.ph207 ], [ %.1135, %192 ] - %156 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv230 - %157 = load ptr, ptr %156, align 8, !tbaa !146 - %158 = load i16, ptr %144, align 8, !tbaa !4 - %159 = icmp slt i16 %158, 0 - %160 = ashr i16 %158, 5 - %161 = sext i16 %160 to i32 - %162 = load i32, ptr %145, align 4 - %163 = select i1 %159, i32 %162, i32 %161 - %164 = getelementptr inbounds nuw i8, ptr %157, i64 140 - %165 = load i8, ptr %164, align 4, !tbaa !72 - %166 = getelementptr inbounds nuw i8, ptr %157, i64 64 - %167 = load i16, ptr %166, align 8, !tbaa !4 - %168 = icmp slt i16 %167, 0 - %169 = ashr i16 %167, 5 - %170 = sext i16 %169 to i32 - %171 = getelementptr inbounds nuw i8, ptr %157, i64 68 - %172 = load i32, ptr %171, align 4 - %173 = select i1 %168, i32 %172, i32 %170 - %174 = sext i8 %165 to i32 - %175 = add nsw i32 %163, %174 - %176 = add nsw i32 %175, %173 - %177 = getelementptr inbounds nuw i8, ptr %157, i64 136 - %178 = load i32, ptr %177, align 8, !tbaa !103 - %179 = icmp sgt i32 %178, 9 - %180 = icmp slt i32 %176, 268435456 - %or.cond = select i1 %179, i1 %180, i1 false - br i1 %or.cond, label %181, label %188 - -181: ; preds = %155 - invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %157, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(64) %146) - to label %182 unwind label %186 - -182: ; preds = %181 - %183 = add nsw i32 %.0126206, 1 - %184 = load i32, ptr %177, align 8, !tbaa !103 - %185 = add nsw i32 %184, %.0132205 - br label %192 - -186: ; preds = %181 - %187 = landingpad { ptr, i32 } + br label %216 + +._crit_edge208: ; preds = %194, %.preheader184 + %.0134.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1135, %194 ] + %.0132.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1133, %194 ] + %.0126.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1127, %194 ] + %154 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %155 = load i16, ptr %154, align 8, !tbaa !4 + %156 = and i16 %155, 1 + %.not154 = icmp eq i16 %156, 0 + br i1 %.not154, label %198, label %195 + +157: ; preds = %.lr.ph207, %194 + %indvars.iv230 = phi i64 [ 0, %.lr.ph207 ], [ %indvars.iv.next231, %194 ] + %.0126206 = phi i32 [ 0, %.lr.ph207 ], [ %.1127, %194 ] + %.0132205 = phi i32 [ 0, %.lr.ph207 ], [ %.1133, %194 ] + %.0134204 = phi i32 [ 0, %.lr.ph207 ], [ %.1135, %194 ] + %158 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv230 + %159 = load ptr, ptr %158, align 8, !tbaa !146 + %160 = load i16, ptr %146, align 8, !tbaa !4 + %161 = icmp slt i16 %160, 0 + %162 = ashr i16 %160, 5 + %163 = sext i16 %162 to i32 + %164 = load i32, ptr %147, align 4 + %165 = select i1 %161, i32 %164, i32 %163 + %166 = getelementptr inbounds nuw i8, ptr %159, i64 140 + %167 = load i8, ptr %166, align 4, !tbaa !72 + %168 = getelementptr inbounds nuw i8, ptr %159, i64 64 + %169 = load i16, ptr %168, align 8, !tbaa !4 + %170 = icmp slt i16 %169, 0 + %171 = ashr i16 %169, 5 + %172 = sext i16 %171 to i32 + %173 = getelementptr inbounds nuw i8, ptr %159, i64 68 + %174 = load i32, ptr %173, align 4 + %175 = select i1 %170, i32 %174, i32 %172 + %176 = sext i8 %167 to i32 + %177 = add nsw i32 %165, %176 + %178 = add nsw i32 %177, %175 + %179 = getelementptr inbounds nuw i8, ptr %159, i64 136 + %180 = load i32, ptr %179, align 8, !tbaa !103 + %181 = icmp sgt i32 %180, 9 + %182 = icmp slt i32 %178, 268435456 + %or.cond = select i1 %181, i1 %182, i1 false + br i1 %or.cond, label %183, label %190 + +183: ; preds = %157 + invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %159, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(64) %148) + to label %184 unwind label %188 + +184: ; preds = %183 + %185 = add nsw i32 %.0126206, 1 + %186 = load i32, ptr %179, align 8, !tbaa !103 + %187 = add nsw i32 %186, %.0132205 + br label %194 + +188: ; preds = %183 + %189 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -188: ; preds = %155 - %189 = add nsw i32 %178, %.0134204 - %190 = getelementptr inbounds nuw i8, ptr %157, i64 12 - store i32 0, ptr %190, align 4, !tbaa !20 - %191 = getelementptr inbounds nuw i8, ptr %157, i64 9 - store i8 1, ptr %191, align 1, !tbaa !17 - br label %192 - -192: ; preds = %188, %182 - %.1135 = phi i32 [ %.0134204, %182 ], [ %189, %188 ] - %.1133 = phi i32 [ %185, %182 ], [ %.0132205, %188 ] - %.1127 = phi i32 [ %183, %182 ], [ %.0126206, %188 ] +190: ; preds = %157 + %191 = add nsw i32 %180, %.0134204 + %192 = getelementptr inbounds nuw i8, ptr %159, i64 12 + store i32 0, ptr %192, align 4, !tbaa !20 + %193 = getelementptr inbounds nuw i8, ptr %159, i64 9 + store i8 1, ptr %193, align 1, !tbaa !17 + br label %194 + +194: ; preds = %190, %184 + %.1135 = phi i32 [ %.0134204, %184 ], [ %191, %190 ] + %.1133 = phi i32 [ %187, %184 ], [ %.0132205, %190 ] + %.1127 = phi i32 [ %185, %184 ], [ %.0126206, %190 ] %indvars.iv.next231 = add nuw nsw i64 %indvars.iv230, 1 %exitcond234.not = icmp eq i64 %indvars.iv.next231, %wide.trip.count233 - br i1 %exitcond234.not, label %._crit_edge208, label %155, !llvm.loop !151 + br i1 %exitcond234.not, label %._crit_edge208, label %157, !llvm.loop !151 -193: ; preds = %._crit_edge208 +195: ; preds = %._crit_edge208 store i32 7, ptr %2, align 4, !tbaa !22 - br label %196 + br label %198 -194: ; preds = %196 - %195 = landingpad { ptr, i32 } +196: ; preds = %198 + %197 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -196: ; preds = %193, %._crit_edge208 - %197 = invoke signext i8 @getShowWarning() - to label %198 unwind label %194 - -198: ; preds = %196 - %.not155 = icmp eq i8 %197, 0 - br i1 %.not155, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %199 - -199: ; preds = %198 - %200 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %.0126.lcssa) - %201 = load i16, ptr %152, align 8, !tbaa !4 - %202 = icmp slt i16 %201, 0 - %203 = ashr i16 %201, 5 - %204 = sext i16 %203 to i32 - %205 = getelementptr inbounds nuw i8, ptr %0, i64 84 - %206 = load i32, ptr %205, align 4 - %207 = select i1 %202, i32 %206, i32 %204 - %208 = shl nsw i32 %207, 1 - %209 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %207, i32 noundef %208) - %210 = shl nsw i32 %.0132.lcssa, 1 - %211 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %.0132.lcssa, i32 noundef %210) - %212 = shl nsw i32 %.0134.lcssa, 1 - %213 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %.0134.lcssa, i32 noundef %212) +198: ; preds = %195, %._crit_edge208 + %199 = invoke signext i8 @getShowWarning() + to label %200 unwind label %196 + +200: ; preds = %198 + %.not155 = icmp eq i8 %199, 0 + br i1 %.not155, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %201 + +201: ; preds = %200 + %202 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %.0126.lcssa) + %203 = load i16, ptr %154, align 8, !tbaa !4 + %204 = icmp slt i16 %203, 0 + %205 = ashr i16 %203, 5 + %206 = sext i16 %205 to i32 + %207 = getelementptr inbounds nuw i8, ptr %0, i64 84 + %208 = load i32, ptr %207, align 4 + %209 = select i1 %204, i32 %208, i32 %206 + %210 = shl nsw i32 %209, 1 + %211 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %209, i32 noundef %210) + %212 = shl nsw i32 %.0132.lcssa, 1 + %213 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %.0132.lcssa, i32 noundef %212) + %214 = shl nsw i32 %.0134.lcssa, 1 + %215 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %.0134.lcssa, i32 noundef %214) br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit -214: ; preds = %.lr.ph213, %237 - %indvars.iv235 = phi i64 [ 0, %.lr.ph213 ], [ %indvars.iv.next236, %237 ] - %215 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv235 - %216 = load ptr, ptr %215, align 8, !tbaa !146 - %217 = getelementptr inbounds nuw i8, ptr %216, i64 120 - %218 = load ptr, ptr %217, align 8, !tbaa !63 - %219 = icmp eq ptr %218, null - br i1 %219, label %220, label %.critedge.loopexit.split.loop.exit268 - -220: ; preds = %214 - %221 = getelementptr inbounds nuw i8, ptr %216, i64 9 - %222 = load i8, ptr %221, align 1, !tbaa !17 - %.not150 = icmp eq i8 %222, 0 - br i1 %.not150, label %223, label %237 +216: ; preds = %.lr.ph213, %239 + %indvars.iv235 = phi i64 [ 0, %.lr.ph213 ], [ %indvars.iv.next236, %239 ] + %217 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv235 + %218 = load ptr, ptr %217, align 8, !tbaa !146 + %219 = getelementptr inbounds nuw i8, ptr %218, i64 120 + %220 = load ptr, ptr %219, align 8, !tbaa !63 + %221 = icmp eq ptr %220, null + br i1 %221, label %222, label %.critedge.loopexit.split.loop.exit268 + +222: ; preds = %216 + %223 = getelementptr inbounds nuw i8, ptr %218, i64 9 + %224 = load i8, ptr %223, align 1, !tbaa !17 + %.not150 = icmp eq i8 %224, 0 + br i1 %.not150, label %225, label %239 -223: ; preds = %220 - %224 = load i16, ptr %148, align 8, !tbaa !4 - %225 = icmp slt i16 %224, 0 - %226 = ashr i16 %224, 5 - %227 = sext i16 %226 to i32 - %228 = load i32, ptr %149, align 4 - %229 = select i1 %225, i32 %228, i32 %227 - %230 = load i32, ptr %150, align 8, !tbaa !106 - %.not151 = icmp slt i32 %229, %230 - br i1 %.not151, label %235, label %231 - -231: ; preds = %223 - %232 = add nsw i32 %229, 1 - store i32 %232, ptr %150, align 8, !tbaa !106 - br label %235 - -233: ; preds = %235 - %234 = landingpad { ptr, i32 } +225: ; preds = %222 + %226 = load i16, ptr %150, align 8, !tbaa !4 + %227 = icmp slt i16 %226, 0 + %228 = ashr i16 %226, 5 + %229 = sext i16 %228 to i32 + %230 = load i32, ptr %151, align 4 + %231 = select i1 %227, i32 %230, i32 %229 + %232 = load i32, ptr %152, align 8, !tbaa !106 + %.not151 = icmp slt i32 %231, %232 + br i1 %.not151, label %237, label %233 + +233: ; preds = %225 + %234 = add nsw i32 %231, 1 + store i32 %234, ptr %152, align 8, !tbaa !106 + br label %237 + +235: ; preds = %237 + %236 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -235: ; preds = %231, %223 - %236 = load i32, ptr %151, align 8, !tbaa !68 - invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %216, i32 noundef %236, ptr noundef nonnull align 8 dereferenceable(64) %147) - to label %237 unwind label %233 +237: ; preds = %233, %225 + %238 = load i32, ptr %153, align 8, !tbaa !68 + invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %218, i32 noundef %238, ptr noundef nonnull align 8 dereferenceable(64) %149) + to label %239 unwind label %235 -237: ; preds = %235, %220 +239: ; preds = %237, %222 %indvars.iv.next236 = add nuw nsw i64 %indvars.iv235, 1 %exitcond239.not = icmp eq i64 %indvars.iv.next236, %wide.trip.count238 - br i1 %exitcond239.not, label %.critedge, label %214, !llvm.loop !152 + br i1 %exitcond239.not, label %.critedge, label %216, !llvm.loop !152 -.critedge.loopexit.split.loop.exit268: ; preds = %214 - %238 = trunc nuw nsw i64 %indvars.iv235 to i32 +.critedge.loopexit.split.loop.exit268: ; preds = %216 + %240 = trunc nuw nsw i64 %indvars.iv235 to i32 br label %.critedge -.critedge: ; preds = %237, %.critedge.loopexit.split.loop.exit268, %.preheader - %.0128.lcssa = phi i32 [ 0, %.preheader ], [ %238, %.critedge.loopexit.split.loop.exit268 ], [ %8, %237 ] - %239 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %240 = load i16, ptr %239, align 8, !tbaa !4 - %241 = and i16 %240, 1 - %.not146 = icmp eq i16 %241, 0 - br i1 %.not146, label %243, label %242 +.critedge: ; preds = %239, %.critedge.loopexit.split.loop.exit268, %.preheader + %.0128.lcssa = phi i32 [ 0, %.preheader ], [ %240, %.critedge.loopexit.split.loop.exit268 ], [ %8, %239 ] + %241 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %242 = load i16, ptr %241, align 8, !tbaa !4 + %243 = and i16 %242, 1 + %.not146 = icmp eq i16 %243, 0 + br i1 %.not146, label %245, label %244 -242: ; preds = %.critedge +244: ; preds = %.critedge store i32 7, ptr %2, align 4, !tbaa !22 br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit -243: ; preds = %.critedge - %244 = getelementptr inbounds nuw i8, ptr %0, i64 168 - %245 = load ptr, ptr %244, align 8, !tbaa !153 - %246 = icmp eq ptr %245, null - %247 = load i32, ptr @_ZL14gFormatVersion, align 4 - %248 = icmp slt i32 %247, 3 - %or.cond3.not273 = select i1 %246, i1 true, i1 %248 +245: ; preds = %.critedge + %246 = getelementptr inbounds nuw i8, ptr %0, i64 168 + %247 = load ptr, ptr %246, align 8, !tbaa !153 + %248 = icmp eq ptr %247, null + %249 = load i32, ptr @_ZL14gFormatVersion, align 4 + %250 = icmp slt i32 %249, 3 + %or.cond3.not273 = select i1 %248, i1 true, i1 %250 %brmerge = or i1 %or.cond3.not273, %19 %.0128.lcssa.mux = select i1 %or.cond3.not273, i32 %.0128.lcssa, i32 0 br i1 %brmerge, label %.critedge5, label %.lr.ph219 -.lr.ph219: ; preds = %243 - %249 = load ptr, ptr %245, align 8, !tbaa !105 - %250 = getelementptr inbounds nuw i8, ptr %249, i64 64 - %251 = getelementptr inbounds nuw i8, ptr %249, i64 56 +.lr.ph219: ; preds = %245 + %251 = load ptr, ptr %247, align 8, !tbaa !105 + %252 = getelementptr inbounds nuw i8, ptr %251, i64 64 + %253 = getelementptr inbounds nuw i8, ptr %251, i64 56 %wide.trip.count243 = zext nneg i32 %8 to i64 - br label %252 - -252: ; preds = %.lr.ph219, %266 - %indvars.iv240 = phi i64 [ 0, %.lr.ph219 ], [ %indvars.iv.next241, %266 ] - %253 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv240 - %254 = load ptr, ptr %253, align 8, !tbaa !146 - %255 = getelementptr inbounds nuw i8, ptr %254, i64 120 - %256 = load ptr, ptr %255, align 8, !tbaa !63 - %257 = icmp eq ptr %256, null - br i1 %257, label %258, label %.critedge5.loopexit - -258: ; preds = %252 - %259 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #37 - to label %260 unwind label %262 - -260: ; preds = %258 - %261 = getelementptr inbounds nuw i8, ptr %254, i64 56 - invoke void @_ZN18StringBaseResourceC2EP7SRBRootaRKN6icu_7713UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(141) %259, ptr poison, i8 noundef signext 0, ptr noundef nonnull align 8 dereferenceable(64) %261, ptr noundef nonnull align 4 dereferenceable(4) %2) - to label %266 unwind label %264 - -262: ; preds = %258 - %263 = landingpad { ptr, i32 } - cleanup - br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 + br label %254 + +254: ; preds = %.lr.ph219, %268 + %indvars.iv240 = phi i64 [ 0, %.lr.ph219 ], [ %indvars.iv.next241, %268 ] + %255 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv240 + %256 = load ptr, ptr %255, align 8, !tbaa !146 + %257 = getelementptr inbounds nuw i8, ptr %256, i64 120 + %258 = load ptr, ptr %257, align 8, !tbaa !63 + %259 = icmp eq ptr %258, null + br i1 %259, label %260, label %.critedge5.loopexit + +260: ; preds = %254 + %261 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #37 + to label %262 unwind label %264 + +262: ; preds = %260 + %263 = getelementptr inbounds nuw i8, ptr %256, i64 56 + invoke void @_ZN18StringBaseResourceC2EP7SRBRootaRKN6icu_7713UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(141) %261, ptr poison, i8 noundef signext 0, ptr noundef nonnull align 8 dereferenceable(64) %263, ptr noundef nonnull align 4 dereferenceable(4) %2) + to label %268 unwind label %266 264: ; preds = %260 %265 = landingpad { ptr, i32 } cleanup - call void @_ZdlPvm(ptr noundef nonnull %259, i64 noundef 144) #36 br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -266: ; preds = %260 - store ptr getelementptr inbounds nuw inrange(-16, 64) (i8, ptr @_ZTV14StringResource, i64 16), ptr %259, align 8, !tbaa !9 - %267 = getelementptr inbounds nuw i8, ptr %259, i64 120 - call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(21) %267, i8 0, i64 21, i1 false) - %268 = load ptr, ptr %250, align 8, !tbaa !38 - %269 = getelementptr inbounds nuw i8, ptr %259, i64 32 - store ptr %268, ptr %269, align 8, !tbaa !19 - store ptr %259, ptr %250, align 8, !tbaa !38 - %270 = load i32, ptr %251, align 8, !tbaa !42 - %271 = add i32 %270, 1 - store i32 %271, ptr %251, align 8, !tbaa !42 +266: ; preds = %262 + %267 = landingpad { ptr, i32 } + cleanup + call void @_ZdlPvm(ptr noundef nonnull %261, i64 noundef 144) #36 + br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 + +268: ; preds = %262 + store ptr getelementptr inbounds nuw inrange(-16, 64) (i8, ptr @_ZTV14StringResource, i64 16), ptr %261, align 8, !tbaa !9 + %269 = getelementptr inbounds nuw i8, ptr %261, i64 120 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(21) %269, i8 0, i64 21, i1 false) + %270 = load ptr, ptr %252, align 8, !tbaa !38 + %271 = getelementptr inbounds nuw i8, ptr %261, i64 32 + store ptr %270, ptr %271, align 8, !tbaa !19 + store ptr %261, ptr %252, align 8, !tbaa !38 + %272 = load i32, ptr %253, align 8, !tbaa !42 + %273 = add i32 %272, 1 + store i32 %273, ptr %253, align 8, !tbaa !42 %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1 %exitcond244.not = icmp eq i64 %indvars.iv.next241, %wide.trip.count243 - br i1 %exitcond244.not, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %252, !llvm.loop !154 + br i1 %exitcond244.not, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %254, !llvm.loop !154 -.critedge5.loopexit: ; preds = %252 - %272 = trunc nuw nsw i64 %indvars.iv240 to i32 +.critedge5.loopexit: ; preds = %254 + %274 = trunc nuw nsw i64 %indvars.iv240 to i32 br label %.critedge5 -.critedge5: ; preds = %243, %.critedge5.loopexit - %.1129 = phi i32 [ %.0128.lcssa.mux, %243 ], [ %272, %.critedge5.loopexit ] - %273 = icmp slt i32 %.1129, %8 - br i1 %273, label %.lr.ph224, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit +.critedge5: ; preds = %245, %.critedge5.loopexit + %.1129 = phi i32 [ %.0128.lcssa.mux, %245 ], [ %274, %.critedge5.loopexit ] + %275 = icmp slt i32 %.1129, %8 + br i1 %275, label %.lr.ph224, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit .lr.ph224: ; preds = %.critedge5 - %274 = getelementptr inbounds nuw i8, ptr %0, i64 152 - %275 = load i32, ptr %274, align 8 - %276 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %.promoted = load i32, ptr %276, align 8 - %277 = zext i32 %.1129 to i64 - br label %278 - -278: ; preds = %.lr.ph224, %303 - %indvars.iv245 = phi i64 [ %277, %.lr.ph224 ], [ %indvars.iv.next246, %303 ] - %279 = phi i32 [ %.promoted, %.lr.ph224 ], [ %304, %303 ] - %280 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv245 - %281 = load ptr, ptr %280, align 8, !tbaa !146 - %282 = getelementptr inbounds nuw i8, ptr %281, i64 9 - %283 = load i8, ptr %282, align 1, !tbaa !17 - %.not147 = icmp eq i8 %283, 0 - br i1 %.not147, label %284, label %303 - -284: ; preds = %278 - %285 = getelementptr inbounds nuw i8, ptr %281, i64 120 - %286 = load ptr, ptr %285, align 8, !tbaa !63 - %287 = getelementptr inbounds nuw i8, ptr %286, i64 12 - %288 = load i32, ptr %287, align 4, !tbaa !20 - %289 = getelementptr inbounds nuw i8, ptr %286, i64 140 - %290 = load i8, ptr %289, align 4, !tbaa !72 - %291 = sext i8 %290 to i32 - %292 = add i32 %288, %291 - %293 = getelementptr inbounds nuw i8, ptr %281, i64 128 - %294 = load i32, ptr %293, align 8, !tbaa !148 - %295 = add i32 %292, %294 - %296 = getelementptr inbounds nuw i8, ptr %281, i64 12 - store i32 %295, ptr %296, align 4, !tbaa !20 - %297 = and i32 %295, 268435455 - %298 = sub nsw i32 %297, %275 - %.not148 = icmp slt i32 %298, %279 - br i1 %.not148, label %301, label %299 - -299: ; preds = %284 - %300 = add nsw i32 %298, 1 - store i32 %300, ptr %276, align 8, !tbaa !106 - br label %301 - -301: ; preds = %299, %284 - %302 = phi i32 [ %300, %299 ], [ %279, %284 ] - store i8 1, ptr %282, align 1, !tbaa !17 + %276 = getelementptr inbounds nuw i8, ptr %0, i64 152 + %277 = load i32, ptr %276, align 8 + %278 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %.promoted = load i32, ptr %278, align 8 + %279 = zext i32 %.1129 to i64 + br label %280 + +280: ; preds = %.lr.ph224, %305 + %indvars.iv245 = phi i64 [ %279, %.lr.ph224 ], [ %indvars.iv.next246, %305 ] + %281 = phi i32 [ %.promoted, %.lr.ph224 ], [ %306, %305 ] + %282 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv245 + %283 = load ptr, ptr %282, align 8, !tbaa !146 + %284 = getelementptr inbounds nuw i8, ptr %283, i64 9 + %285 = load i8, ptr %284, align 1, !tbaa !17 + %.not147 = icmp eq i8 %285, 0 + br i1 %.not147, label %286, label %305 + +286: ; preds = %280 + %287 = getelementptr inbounds nuw i8, ptr %283, i64 120 + %288 = load ptr, ptr %287, align 8, !tbaa !63 + %289 = getelementptr inbounds nuw i8, ptr %288, i64 12 + %290 = load i32, ptr %289, align 4, !tbaa !20 + %291 = getelementptr inbounds nuw i8, ptr %288, i64 140 + %292 = load i8, ptr %291, align 4, !tbaa !72 + %293 = sext i8 %292 to i32 + %294 = add i32 %290, %293 + %295 = getelementptr inbounds nuw i8, ptr %283, i64 128 + %296 = load i32, ptr %295, align 8, !tbaa !148 + %297 = add i32 %294, %296 + %298 = getelementptr inbounds nuw i8, ptr %283, i64 12 + store i32 %297, ptr %298, align 4, !tbaa !20 + %299 = and i32 %297, 268435455 + %300 = sub nsw i32 %299, %277 + %.not148 = icmp slt i32 %300, %281 + br i1 %.not148, label %303, label %301 + +301: ; preds = %286 + %302 = add nsw i32 %300, 1 + store i32 %302, ptr %278, align 8, !tbaa !106 br label %303 -303: ; preds = %278, %301 - %304 = phi i32 [ %279, %278 ], [ %302, %301 ] +303: ; preds = %301, %286 + %304 = phi i32 [ %302, %301 ], [ %281, %286 ] + store i8 1, ptr %284, align 1, !tbaa !17 + br label %305 + +305: ; preds = %280, %303 + %306 = phi i32 [ %281, %280 ], [ %304, %303 ] %indvars.iv.next246 = add nuw nsw i64 %indvars.iv245, 1 - %305 = trunc nuw i64 %indvars.iv.next246 to i32 - %306 = icmp sgt i32 %8, %305 - br i1 %306, label %278, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, !llvm.loop !155 + %307 = trunc nuw i64 %indvars.iv.next246 to i32 + %308 = icmp sgt i32 %8, %307 + br i1 %308, label %280, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, !llvm.loop !155 -_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit: ; preds = %266, %303, %.critedge5, %242, %199, %198, %138, %27, %7 +_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit: ; preds = %268, %305, %.critedge5, %244, %201, %200, %140, %27, %7 call void @_ZdaPv(ptr noundef nonnull %13) #36 - br label %307 + br label %309 -307: ; preds = %3, %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit +309: ; preds = %3, %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit ret void -_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167: ; preds = %233, %264, %262, %186, %194, %89, %25, %16 - %.pn164 = phi { ptr, i32 } [ %26, %25 ], [ %17, %16 ], [ %90, %89 ], [ %187, %186 ], [ %195, %194 ], [ %234, %233 ], [ %265, %264 ], [ %263, %262 ] +_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167: ; preds = %235, %266, %264, %188, %196, %91, %25, %16 + %.pn164 = phi { ptr, i32 } [ %26, %25 ], [ %17, %16 ], [ %92, %91 ], [ %189, %188 ], [ %197, %196 ], [ %236, %235 ], [ %267, %266 ], [ %265, %264 ] call void @_ZdaPv(ptr noundef nonnull %13) #36 resume { ptr, i32 } %.pn164 } @@ -6062,7 +6065,7 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap %.neg = sext i1 %12 to i32 %13 = add nsw i32 %.neg, %9 %.not = icmp eq i32 %13, 0 - br i1 %.not, label %14, label %52 + br i1 %.not, label %14, label %54 14: ; preds = %3 %15 = getelementptr inbounds nuw i8, ptr %4, i64 64 @@ -6083,7 +6086,7 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap %30 = select i1 %25, i32 %29, i32 %27 %31 = sub nsw i32 %22, %30 %.not19 = icmp eq i32 %31, 0 - br i1 %.not19, label %32, label %52 + br i1 %.not19, label %32, label %54 32: ; preds = %14 %33 = getelementptr inbounds nuw i8, ptr %5, i64 136 @@ -6092,7 +6095,7 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap %36 = load i32, ptr %35, align 8, !tbaa !103 %37 = sub nsw i32 %34, %36 %.not20 = icmp eq i32 %37, 0 - br i1 %.not20, label %38, label %52 + br i1 %.not20, label %38, label %54 38: ; preds = %32 %39 = and i16 %24, 1 @@ -6108,23 +6111,26 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap .sink.split.i.i.i: ; preds = %38 %44 = getelementptr inbounds nuw i8, ptr %4, i64 56 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %30, i32 0) - %.010.i.i = tail call i32 @llvm.smax.i32(i32 %30, i32 0) - %45 = and i16 %24, 2 - %.not.i.i.i = icmp eq i16 %45, 0 - %46 = getelementptr inbounds nuw i8, ptr %5, i64 66 - %47 = getelementptr inbounds nuw i8, ptr %5, i64 80 - %48 = load ptr, ptr %47, align 8 - %49 = select i1 %.not.i.i.i, ptr %48, ptr %46 - %50 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %44, i32 noundef 0, i32 noundef %22, ptr noundef %49, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + %45 = icmp slt i32 %30, 0 + %46 = sub nsw i32 %30, %spec.select.i.i + %spec.select13.i.i = tail call i32 @llvm.smin.i32(i32 %30, i32 %46) + %.010.i.i = select i1 %45, i32 0, i32 %spec.select13.i.i + %47 = and i16 %24, 2 + %.not.i.i.i = icmp eq i16 %47, 0 + %48 = getelementptr inbounds nuw i8, ptr %5, i64 66 + %49 = getelementptr inbounds nuw i8, ptr %5, i64 80 + %50 = load ptr, ptr %49, align 8 + %51 = select i1 %.not.i.i.i, ptr %50, ptr %48 + %52 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %44, i32 noundef 0, i32 noundef %22, ptr noundef %51, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %40, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %43, %40 ], [ %50, %.sink.split.i.i.i ] - %51 = sext i8 %.0.i.i to i32 - br label %52 + %.0.i.i = phi i8 [ %43, %40 ], [ %52, %.sink.split.i.i.i ] + %53 = sext i8 %.0.i.i to i32 + br label %54 -52: ; preds = %32, %14, %3, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0 = phi i32 [ %51, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %13, %3 ], [ %31, %14 ], [ %37, %32 ] +54: ; preds = %32, %14, %3, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %.0 = phi i32 [ %53, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %13, %3 ], [ %31, %14 ], [ %37, %32 ] ret i32 %.0 } @@ -6669,9 +6675,6 @@ declare range(i32 -1, 2) i32 @llvm.scmp.i32.i32(i32, i32) #31 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #31 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #31 - attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { nofree nounwind } diff --git a/bench/icu/optimized/selfmt.ll b/bench/icu/optimized/selfmt.ll index ac52da2017a..1a44d4c7a88 100644 --- a/bench/icu/optimized/selfmt.ll +++ b/bench/icu/optimized/selfmt.ll @@ -748,7 +748,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %6 = alloca %"class.icu_77::ConstChar16Ptr", align 8 %7 = load i32, ptr %3, align 4, !tbaa !13 %8 = icmp slt i32 %7, 1 - br i1 %8, label %9, label %93 + br i1 %8, label %9, label %97 9: ; preds = %4 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #14 @@ -775,10 +775,10 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %.pre = load ptr, ptr %14, align 8, !tbaa !29 br label %25 -25: ; preds = %85, %10 - %26 = phi ptr [ %.pre, %10 ], [ %86, %85 ] - %.025 = phi i32 [ 0, %10 ], [ %.227, %85 ] - %.023 = phi i32 [ %1, %10 ], [ %90, %85 ] +25: ; preds = %89, %10 + %26 = phi ptr [ %.pre, %10 ], [ %90, %89 ] + %.025 = phi i32 [ 0, %10 ], [ %.227, %89 ] + %.023 = phi i32 [ %1, %10 ], [ %94, %89 ] %27 = add nsw i32 %.023, 1 %28 = sext i32 %.023 to i64 %29 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %26, i64 %28 @@ -791,13 +791,13 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat cleanup %34 = load ptr, ptr %6, align 8, !tbaa !36 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %34) #14, !srcloc !39 - br label %92 + br label %96 35: ; preds = %.sink.split.i.i.i.i36, %.sink.split.i.i.i.i %36 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #14 - br label %92 + br label %96 37: ; preds = %25 %38 = load i16, ptr %15, align 8, !tbaa !17 @@ -810,7 +810,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %42 = trunc i16 %41 to i8 %43 = and i8 %42, 1 %44 = xor i8 %43, 1 - br label %59 + br label %61 .sink.split.i.i.i.i: ; preds = %37 %45 = getelementptr inbounds nuw i8, ptr %29, i64 8 @@ -824,85 +824,91 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %53 = sext i16 %52 to i32 %54 = select i1 %50, i32 %51, i32 %53 %spec.select.i.i.i = call i32 @llvm.smin.i32(i32 %54, i32 0) - %.010.i.i.i = call i32 @llvm.smax.i32(i32 %54, i32 0) - %55 = and i16 %38, 2 - %.not.i.i.i.i = icmp eq i16 %55, 0 - %56 = load ptr, ptr %20, align 8 - %57 = select i1 %.not.i.i.i.i, ptr %56, ptr %19 - %58 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %17, i32 noundef %49, i32 noundef %47, ptr noundef %57, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) - to label %59 unwind label %35 - -59: ; preds = %40, %.sink.split.i.i.i.i - %.0.i.i.i = phi i8 [ %44, %40 ], [ %58, %.sink.split.i.i.i.i ] + %55 = icmp slt i32 %54, 0 + %56 = sub nsw i32 %54, %spec.select.i.i.i + %spec.select13.i.i.i = call i32 @llvm.smin.i32(i32 %54, i32 %56) + %.010.i.i.i = select i1 %55, i32 0, i32 %spec.select13.i.i.i + %57 = and i16 %38, 2 + %.not.i.i.i.i = icmp eq i16 %57, 0 + %58 = load ptr, ptr %20, align 8 + %59 = select i1 %.not.i.i.i.i, ptr %58, ptr %19 + %60 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %17, i32 noundef %49, i32 noundef %47, ptr noundef %59, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) + to label %61 unwind label %35 + +61: ; preds = %40, %.sink.split.i.i.i.i + %.0.i.i.i = phi i8 [ %44, %40 ], [ %60, %.sink.split.i.i.i.i ] %.not = icmp eq i8 %.0.i.i.i, 0 - br i1 %.not, label %.thread, label %60 - -60: ; preds = %59 - %61 = icmp eq i32 %.025, 0 - br i1 %61, label %62, label %85 - -62: ; preds = %60 - %63 = load i16, ptr %21, align 8, !tbaa !17 - %64 = and i16 %63, 1 - %.not.i.i.i34 = icmp eq i16 %64, 0 - br i1 %.not.i.i.i34, label %.sink.split.i.i.i.i36, label %65 - -65: ; preds = %62 - %66 = load i16, ptr %16, align 8, !tbaa !17 - %67 = trunc i16 %66 to i8 - %68 = and i8 %67, 1 - %69 = xor i8 %68, 1 - br label %84 - -.sink.split.i.i.i.i36: ; preds = %62 - %70 = getelementptr inbounds nuw i8, ptr %29, i64 8 - %71 = load i16, ptr %70, align 4, !tbaa !34 - %72 = zext i16 %71 to i32 - %73 = getelementptr inbounds nuw i8, ptr %29, i64 4 - %74 = load i32, ptr %73, align 4, !tbaa !30 - %75 = icmp slt i16 %63, 0 - %76 = load i32, ptr %22, align 4 - %77 = ashr i16 %63, 5 - %78 = sext i16 %77 to i32 - %79 = select i1 %75, i32 %76, i32 %78 - %spec.select.i.i.i37 = call i32 @llvm.smin.i32(i32 %79, i32 0) - %.010.i.i.i38 = call i32 @llvm.smax.i32(i32 %79, i32 0) - %80 = and i16 %63, 2 - %.not.i.i.i.i39 = icmp eq i16 %80, 0 - %81 = load ptr, ptr %24, align 8 - %82 = select i1 %.not.i.i.i.i39, ptr %81, ptr %23 - %83 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %17, i32 noundef %74, i32 noundef %72, ptr noundef %82, i32 noundef %spec.select.i.i.i37, i32 noundef %.010.i.i.i38) - to label %84 unwind label %35 - -84: ; preds = %65, %.sink.split.i.i.i.i36 - %.0.i.i.i35 = phi i8 [ %69, %65 ], [ %83, %.sink.split.i.i.i.i36 ] - %.not55 = icmp eq i8 %.0.i.i.i35, 0 - %spec.select = select i1 %.not55, i32 %27, i32 0 - br label %85 - -85: ; preds = %60, %84 - %.227 = phi i32 [ %.025, %60 ], [ %spec.select, %84 ] - %86 = load ptr, ptr %14, align 8, !tbaa !29 - %87 = sext i32 %27 to i64 - %88 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %86, i64 %87, i32 4 - %89 = load i32, ptr %88, align 4, !tbaa !35 - %..i = call noundef i32 @llvm.smax.i32(i32 %89, i32 %27) - %90 = add nsw i32 %..i, 1 - %91 = icmp slt i32 %90, %13 - br i1 %91, label %25, label %.thread, !llvm.loop !41 - -.thread: ; preds = %59, %85, %25 - %.3 = phi i32 [ %.227, %85 ], [ %.025, %25 ], [ %27, %59 ] + br i1 %.not, label %.thread, label %62 + +62: ; preds = %61 + %63 = icmp eq i32 %.025, 0 + br i1 %63, label %64, label %89 + +64: ; preds = %62 + %65 = load i16, ptr %21, align 8, !tbaa !17 + %66 = and i16 %65, 1 + %.not.i.i.i34 = icmp eq i16 %66, 0 + br i1 %.not.i.i.i34, label %.sink.split.i.i.i.i36, label %67 + +67: ; preds = %64 + %68 = load i16, ptr %16, align 8, !tbaa !17 + %69 = trunc i16 %68 to i8 + %70 = and i8 %69, 1 + %71 = xor i8 %70, 1 + br label %88 + +.sink.split.i.i.i.i36: ; preds = %64 + %72 = getelementptr inbounds nuw i8, ptr %29, i64 8 + %73 = load i16, ptr %72, align 4, !tbaa !34 + %74 = zext i16 %73 to i32 + %75 = getelementptr inbounds nuw i8, ptr %29, i64 4 + %76 = load i32, ptr %75, align 4, !tbaa !30 + %77 = icmp slt i16 %65, 0 + %78 = load i32, ptr %22, align 4 + %79 = ashr i16 %65, 5 + %80 = sext i16 %79 to i32 + %81 = select i1 %77, i32 %78, i32 %80 + %spec.select.i.i.i37 = call i32 @llvm.smin.i32(i32 %81, i32 0) + %82 = icmp slt i32 %81, 0 + %83 = sub nsw i32 %81, %spec.select.i.i.i37 + %spec.select13.i.i.i38 = call i32 @llvm.smin.i32(i32 %81, i32 %83) + %.010.i.i.i39 = select i1 %82, i32 0, i32 %spec.select13.i.i.i38 + %84 = and i16 %65, 2 + %.not.i.i.i.i40 = icmp eq i16 %84, 0 + %85 = load ptr, ptr %24, align 8 + %86 = select i1 %.not.i.i.i.i40, ptr %85, ptr %23 + %87 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %17, i32 noundef %76, i32 noundef %74, ptr noundef %86, i32 noundef %spec.select.i.i.i37, i32 noundef %.010.i.i.i39) + to label %88 unwind label %35 + +88: ; preds = %67, %.sink.split.i.i.i.i36 + %.0.i.i.i35 = phi i8 [ %71, %67 ], [ %87, %.sink.split.i.i.i.i36 ] + %.not56 = icmp eq i8 %.0.i.i.i35, 0 + %spec.select = select i1 %.not56, i32 %27, i32 0 + br label %89 + +89: ; preds = %62, %88 + %.227 = phi i32 [ %.025, %62 ], [ %spec.select, %88 ] + %90 = load ptr, ptr %14, align 8, !tbaa !29 + %91 = sext i32 %27 to i64 + %92 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %90, i64 %91, i32 4 + %93 = load i32, ptr %92, align 4, !tbaa !35 + %..i = call noundef i32 @llvm.smax.i32(i32 %93, i32 %27) + %94 = add nsw i32 %..i, 1 + %95 = icmp slt i32 %94, %13 + br i1 %95, label %25, label %.thread, !llvm.loop !41 + +.thread: ; preds = %61, %89, %25 + %.3 = phi i32 [ %.227, %89 ], [ %.025, %25 ], [ %27, %61 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #14 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #14 - br label %93 + br label %97 -92: ; preds = %35, %32 +96: ; preds = %35, %32 %.pn = phi { ptr, i32 } [ %36, %35 ], [ %33, %32 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #14 resume { ptr, i32 } %.pn -93: ; preds = %4, %.thread +97: ; preds = %4, %.thread %.022 = phi i32 [ %.3, %.thread ], [ 0, %4 ] ret i32 %.022 } diff --git a/bench/icu/optimized/smpdtfmt.ll b/bench/icu/optimized/smpdtfmt.ll index 3115eff55c7..61b8d1565bd 100644 --- a/bench/icu/optimized/smpdtfmt.ll +++ b/bench/icu/optimized/smpdtfmt.ll @@ -7841,18 +7841,21 @@ define linkonce_odr noundef signext i8 @_ZNK6icu_7713UnicodeString7compareERKS0_ %22 = sext i16 %21 to i32 %23 = select i1 %18, i32 %20, i32 %22 %spec.select.i = tail call i32 @llvm.smin.i32(i32 %17, i32 0) - %.010.i = tail call i32 @llvm.smax.i32(i32 %17, i32 0) - %24 = and i16 %6, 2 - %.not.i.i = icmp eq i16 %24, 0 - %25 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %26 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %27 = load ptr, ptr %26, align 8 - %28 = select i1 %.not.i.i, ptr %27, ptr %25 - %29 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %28, i32 noundef %spec.select.i, i32 noundef %.010.i) + %24 = icmp slt i32 %17, 0 + %25 = sub nsw i32 %17, %spec.select.i + %spec.select13.i = tail call i32 @llvm.smin.i32(i32 %17, i32 %25) + %.010.i = select i1 %24, i32 0, i32 %spec.select13.i + %26 = and i16 %6, 2 + %.not.i.i = icmp eq i16 %26, 0 + %27 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %28 = getelementptr inbounds nuw i8, ptr %1, i64 24 + %29 = load ptr, ptr %28, align 8 + %30 = select i1 %.not.i.i, ptr %29, ptr %27 + %31 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %30, i32 noundef %spec.select.i, i32 noundef %.010.i) br label %_ZNK6icu_7713UnicodeString9doCompareEiiRKS0_ii.exit _ZNK6icu_7713UnicodeString9doCompareEiiRKS0_ii.exit: ; preds = %8, %.sink.split.i.i - %.0.i = phi i8 [ %11, %8 ], [ %29, %.sink.split.i.i ] + %.0.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i ] ret i8 %.0.i } diff --git a/bench/icu/optimized/sprintf.ll b/bench/icu/optimized/sprintf.ll index 8e1f593bd33..4abed380b61 100644 --- a/bench/icu/optimized/sprintf.ll +++ b/bench/icu/optimized/sprintf.ll @@ -371,7 +371,7 @@ define internal noundef i32 @_ZL25u_sprintf_pad_and_justifyPvPK18u_printf_spec_i %.not = icmp ne i32 %8, -1 %10 = icmp slt i32 %3, %8 %or.cond = and i1 %.not, %10 - br i1 %or.cond, label %72, label %11 + br i1 %or.cond, label %69, label %11 11: ; preds = %9 %12 = getelementptr inbounds nuw i8, ptr %0, i64 8 @@ -389,103 +389,100 @@ define internal noundef i32 @_ZL25u_sprintf_pad_and_justifyPvPK18u_printf_spec_i %.not6577 = icmp ne i32 %8, -1 %17 = icmp slt i32 %.76, %8 %or.cond6778 = select i1 %.not6577, i1 %17, i1 false - br i1 %or.cond6778, label %18, label %61 + br i1 %or.cond6778, label %18, label %58 18: ; preds = %.thread, %11 %.79 = phi i32 [ %.76, %.thread ], [ %., %11 ] %19 = phi i32 [ %16, %.thread ], [ %13, %11 ] %20 = phi ptr [ %15, %.thread ], [ %12, %11 ] - %21 = sub nsw i32 %8, %.79 - %22 = getelementptr inbounds nuw i8, ptr %0, i64 12 - %23 = load i32, ptr %22, align 4, !tbaa !13 - %24 = sub nsw i32 %23, %19 - %25 = icmp sgt i32 %8, %19 - %26 = sub nsw i32 %19, %.79 - %spec.store.select = tail call i32 @llvm.smax.i32(i32 %26, i32 0) - %.056 = select i1 %25, i32 %spec.store.select, i32 %21 - %27 = getelementptr inbounds nuw i8, ptr %1, i64 16 - %28 = load i8, ptr %27, align 4, !tbaa !19 - %.not66 = icmp eq i8 %28, 0 - br i1 %.not66, label %43, label %29 - -29: ; preds = %18 - br i1 %6, label %_ZL15u_sprintf_writePvPKDsi.exit, label %30 - -30: ; preds = %29 - %31 = sext i32 %24 to i64 - %32 = getelementptr inbounds i16, ptr %5, i64 %31 - %33 = tail call ptr @u_strncpy_77(ptr noundef nonnull %32, ptr noundef %2, i32 noundef %.79) - %34 = load i32, ptr %20, align 8, !tbaa !14 - %35 = sub nsw i32 %34, %.79 - store i32 %35, ptr %20, align 8, !tbaa !14 + %21 = getelementptr inbounds nuw i8, ptr %0, i64 12 + %22 = load i32, ptr %21, align 4, !tbaa !13 + %23 = sub nsw i32 %22, %19 + %.056.v = tail call i32 @llvm.smin.i32(i32 %8, i32 %19) + %.056 = sub nsw i32 %.056.v, %.79 + %24 = getelementptr inbounds nuw i8, ptr %1, i64 16 + %25 = load i8, ptr %24, align 4, !tbaa !19 + %.not66 = icmp eq i8 %25, 0 + br i1 %.not66, label %40, label %26 + +26: ; preds = %18 + br i1 %6, label %_ZL15u_sprintf_writePvPKDsi.exit, label %27 + +27: ; preds = %26 + %28 = sext i32 %23 to i64 + %29 = getelementptr inbounds i16, ptr %5, i64 %28 + %30 = tail call ptr @u_strncpy_77(ptr noundef nonnull %29, ptr noundef %2, i32 noundef %.79) + %31 = load i32, ptr %20, align 8, !tbaa !14 + %32 = sub nsw i32 %31, %.79 + store i32 %32, ptr %20, align 8, !tbaa !14 %.pre75 = load ptr, ptr %0, align 8, !tbaa !7 br label %_ZL15u_sprintf_writePvPKDsi.exit -_ZL15u_sprintf_writePvPKDsi.exit: ; preds = %29, %30 - %36 = phi ptr [ null, %29 ], [ %.pre75, %30 ] - %37 = add nsw i32 %24, %.79 - %38 = sext i32 %37 to i64 - %39 = getelementptr inbounds i16, ptr %36, i64 %38 - %40 = getelementptr inbounds nuw i8, ptr %1, i64 12 - %41 = load i16, ptr %40, align 4, !tbaa !20 - %42 = tail call ptr @u_memset_77(ptr noundef %39, i16 noundef zeroext %41, i32 noundef %.056) +_ZL15u_sprintf_writePvPKDsi.exit: ; preds = %26, %27 + %33 = phi ptr [ null, %26 ], [ %.pre75, %27 ] + %34 = add nsw i32 %23, %.79 + %35 = sext i32 %34 to i64 + %36 = getelementptr inbounds i16, ptr %33, i64 %35 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 12 + %38 = load i16, ptr %37, align 4, !tbaa !20 + %39 = tail call ptr @u_memset_77(ptr noundef %36, i16 noundef zeroext %38, i32 noundef %.056) br label %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split -43: ; preds = %18 - %44 = sext i32 %24 to i64 - %45 = getelementptr inbounds i16, ptr %5, i64 %44 - %46 = getelementptr inbounds nuw i8, ptr %1, i64 12 - %47 = load i16, ptr %46, align 4, !tbaa !20 - %48 = tail call ptr @u_memset_77(ptr noundef %45, i16 noundef zeroext %47, i32 noundef %.056) - %49 = load i32, ptr %20, align 8, !tbaa !14 - %50 = sub nsw i32 %49, %.056 - store i32 %50, ptr %20, align 8, !tbaa !14 - %51 = load ptr, ptr %0, align 8, !tbaa !7 - %52 = icmp eq ptr %51, null - br i1 %52, label %_ZL15u_sprintf_writePvPKDsi.exit71, label %53 - -53: ; preds = %43 - %..i69 = tail call i32 @llvm.smin.i32(i32 %.79, i32 %50) - %54 = load i32, ptr %22, align 4, !tbaa !13 - %55 = sub nsw i32 %54, %50 - %56 = sext i32 %55 to i64 - %57 = getelementptr inbounds i16, ptr %51, i64 %56 - %58 = tail call ptr @u_strncpy_77(ptr noundef nonnull %57, ptr noundef %2, i32 noundef %..i69) +40: ; preds = %18 + %41 = sext i32 %23 to i64 + %42 = getelementptr inbounds i16, ptr %5, i64 %41 + %43 = getelementptr inbounds nuw i8, ptr %1, i64 12 + %44 = load i16, ptr %43, align 4, !tbaa !20 + %45 = tail call ptr @u_memset_77(ptr noundef %42, i16 noundef zeroext %44, i32 noundef %.056) + %46 = load i32, ptr %20, align 8, !tbaa !14 + %47 = sub nsw i32 %46, %.056 + store i32 %47, ptr %20, align 8, !tbaa !14 + %48 = load ptr, ptr %0, align 8, !tbaa !7 + %49 = icmp eq ptr %48, null + br i1 %49, label %_ZL15u_sprintf_writePvPKDsi.exit71, label %50 + +50: ; preds = %40 + %..i69 = tail call i32 @llvm.smin.i32(i32 %.79, i32 %47) + %51 = load i32, ptr %21, align 4, !tbaa !13 + %52 = sub nsw i32 %51, %47 + %53 = sext i32 %52 to i64 + %54 = getelementptr inbounds i16, ptr %48, i64 %53 + %55 = tail call ptr @u_strncpy_77(ptr noundef nonnull %54, ptr noundef %2, i32 noundef %..i69) br label %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split -_ZL15u_sprintf_writePvPKDsi.exit71.sink.split: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit, %53 - %..i69.sink = phi i32 [ %..i69, %53 ], [ %.056, %_ZL15u_sprintf_writePvPKDsi.exit ] - %.pn.ph = phi i32 [ %..i69, %53 ], [ %.79, %_ZL15u_sprintf_writePvPKDsi.exit ] - %59 = load i32, ptr %20, align 8, !tbaa !14 - %60 = sub nsw i32 %59, %..i69.sink - store i32 %60, ptr %20, align 8, !tbaa !14 +_ZL15u_sprintf_writePvPKDsi.exit71.sink.split: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit, %50 + %..i69.sink = phi i32 [ %..i69, %50 ], [ %.056, %_ZL15u_sprintf_writePvPKDsi.exit ] + %.pn.ph = phi i32 [ %..i69, %50 ], [ %.79, %_ZL15u_sprintf_writePvPKDsi.exit ] + %56 = load i32, ptr %20, align 8, !tbaa !14 + %57 = sub nsw i32 %56, %..i69.sink + store i32 %57, ptr %20, align 8, !tbaa !14 br label %_ZL15u_sprintf_writePvPKDsi.exit71 -_ZL15u_sprintf_writePvPKDsi.exit71: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split, %43 - %.pn = phi i32 [ %.79, %43 ], [ %.pn.ph, %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split ] +_ZL15u_sprintf_writePvPKDsi.exit71: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split, %40 + %.pn = phi i32 [ %.79, %40 ], [ %.pn.ph, %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split ] %.057 = add nsw i32 %.pn, %.056 br label %_ZL15u_sprintf_writePvPKDsi.exit74 -61: ; preds = %.thread - %62 = getelementptr inbounds nuw i8, ptr %0, i64 12 - %63 = load i32, ptr %62, align 4, !tbaa !13 - %64 = sub nsw i32 %63, %16 - %65 = sext i32 %64 to i64 - %66 = getelementptr inbounds i16, ptr %5, i64 %65 - %67 = tail call ptr @u_strncpy_77(ptr noundef nonnull %66, ptr noundef %2, i32 noundef %.76) - %68 = load i32, ptr %15, align 8, !tbaa !14 - %69 = sub nsw i32 %68, %.76 - store i32 %69, ptr %15, align 8, !tbaa !14 +58: ; preds = %.thread + %59 = getelementptr inbounds nuw i8, ptr %0, i64 12 + %60 = load i32, ptr %59, align 4, !tbaa !13 + %61 = sub nsw i32 %60, %16 + %62 = sext i32 %61 to i64 + %63 = getelementptr inbounds i16, ptr %5, i64 %62 + %64 = tail call ptr @u_strncpy_77(ptr noundef nonnull %63, ptr noundef %2, i32 noundef %.76) + %65 = load i32, ptr %15, align 8, !tbaa !14 + %66 = sub nsw i32 %65, %.76 + store i32 %66, ptr %15, align 8, !tbaa !14 br label %_ZL15u_sprintf_writePvPKDsi.exit74 -_ZL15u_sprintf_writePvPKDsi.exit74: ; preds = %11, %61, %_ZL15u_sprintf_writePvPKDsi.exit71 - %.1 = phi i32 [ %.057, %_ZL15u_sprintf_writePvPKDsi.exit71 ], [ %.76, %61 ], [ %., %11 ] - %70 = tail call i32 @llvm.smax.i32(i32 %3, i32 %.1) - %71 = icmp slt i32 %.1, 0 - %spec.select = select i1 %71, i32 %.1, i32 %70 - br label %72 +_ZL15u_sprintf_writePvPKDsi.exit74: ; preds = %11, %58, %_ZL15u_sprintf_writePvPKDsi.exit71 + %.1 = phi i32 [ %.057, %_ZL15u_sprintf_writePvPKDsi.exit71 ], [ %.76, %58 ], [ %., %11 ] + %67 = tail call i32 @llvm.smax.i32(i32 %3, i32 %.1) + %68 = icmp slt i32 %.1, 0 + %spec.select = select i1 %68, i32 %.1, i32 %67 + br label %69 -72: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit74, %9 +69: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit74, %9 %.0 = phi i32 [ %8, %9 ], [ %spec.select, %_ZL15u_sprintf_writePvPKDsi.exit74 ] ret i32 %.0 } diff --git a/bench/icu/optimized/timezone.ll b/bench/icu/optimized/timezone.ll index b15db843f0d..eac609c85af 100644 --- a/bench/icu/optimized/timezone.ll +++ b/bench/icu/optimized/timezone.ll @@ -2534,7 +2534,7 @@ define internal fastcc noundef range(i32 -1, -2147483648) i32 @_ZN6icu_77L17find 18: ; preds = %3 %19 = landingpad { ptr, i32 } cleanup - br label %63 + br label %65 20: ; preds = %.preheader, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit %.032 = phi i32 [ %..032, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %8, %.preheader ] @@ -2557,13 +2557,13 @@ define internal fastcc noundef range(i32 -1, -2147483648) i32 @_ZN6icu_77L17find 29: ; preds = %24 %30 = landingpad { ptr, i32 } cleanup - br label %63 + br label %65 31: ; preds = %26 store ptr %25, ptr %6, align 8, !tbaa !15 %32 = load i32, ptr %5, align 4, !tbaa !12 %33 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString5setToEaNS_14ConstChar16PtrEi(ptr noundef nonnull align 8 dereferenceable(64) %4, i8 noundef signext 1, ptr noundef nonnull %6, i32 noundef %32) - to label %34 unwind label %58 + to label %34 unwind label %60 34: ; preds = %31 %35 = load ptr, ptr %6, align 8, !tbaa !15 @@ -2592,33 +2592,36 @@ define internal fastcc noundef range(i32 -1, -2147483648) i32 @_ZN6icu_77L17find %51 = sext i16 %50 to i32 %52 = select i1 %48, i32 %49, i32 %51 %spec.select.i.i = call i32 @llvm.smin.i32(i32 %47, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %47, i32 0) - %53 = and i16 %37, 2 - %.not.i.i.i = icmp eq i16 %53, 0 - %54 = load ptr, ptr %17, align 8 - %55 = select i1 %.not.i.i.i, ptr %54, ptr %16 - %56 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %52, ptr noundef %55, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) - to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %61 + %53 = icmp slt i32 %47, 0 + %54 = sub nsw i32 %47, %spec.select.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %47, i32 %54) + %.010.i.i = select i1 %53, i32 0, i32 %spec.select13.i.i + %55 = and i16 %37, 2 + %.not.i.i.i = icmp eq i16 %55, 0 + %56 = load ptr, ptr %17, align 8 + %57 = select i1 %.not.i.i.i, ptr %56, ptr %16 + %58 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %52, ptr noundef %57, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %63 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %39, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %42, %39 ], [ %56, %.sink.split.i.i.i ] + %.0.i.i = phi i8 [ %42, %39 ], [ %58, %.sink.split.i.i.i ] %.not40 = icmp eq i8 %.0.i.i, 0 - %57 = icmp slt i8 %.0.i.i, 0 - %..032 = select i1 %57, i32 %22, i32 %.032 - %.025. = select i1 %57, i32 %.025, i32 %22 + %59 = icmp slt i8 %.0.i.i, 0 + %..032 = select i1 %59, i32 %22, i32 %.032 + %.025. = select i1 %59, i32 %.025, i32 %22 br i1 %.not40, label %.loopexit, label %20, !llvm.loop !47 -58: ; preds = %31 - %59 = landingpad { ptr, i32 } +60: ; preds = %31 + %61 = landingpad { ptr, i32 } cleanup - %60 = load ptr, ptr %6, align 8, !tbaa !15 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %60) #21, !srcloc !18 - br label %63 + %62 = load ptr, ptr %6, align 8, !tbaa !15 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %62) #21, !srcloc !18 + br label %65 -61: ; preds = %.sink.split.i.i.i - %62 = landingpad { ptr, i32 } +63: ; preds = %.sink.split.i.i.i + %64 = landingpad { ptr, i32 } cleanup - br label %63 + br label %65 .loopexit: ; preds = %20, %26, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit, %9 %.0 = phi i32 [ -1, %9 ], [ -1, %20 ], [ -1, %26 ], [ %22, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] @@ -2627,8 +2630,8 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %39, %.sink.split.i. call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #21 ret i32 %.0 -63: ; preds = %29, %58, %61, %18 - %.pn.pn = phi { ptr, i32 } [ %19, %18 ], [ %62, %61 ], [ %59, %58 ], [ %30, %29 ] +65: ; preds = %29, %60, %63, %18 + %.pn.pn = phi { ptr, i32 } [ %19, %18 ], [ %64, %63 ], [ %61, %60 ], [ %30, %29 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #21 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #21 @@ -5281,9 +5284,6 @@ declare void @_ZN6icu_7711ReplaceableD2Ev(ptr noundef nonnull align 8 dereferenc ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #19 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #19 - ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #20 diff --git a/bench/icu/optimized/tridpars.ll b/bench/icu/optimized/tridpars.ll index 83ee5de90cd..e60a76080fe 100644 --- a/bench/icu/optimized/tridpars.ll +++ b/bench/icu/optimized/tridpars.ll @@ -3222,7 +3222,7 @@ _ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit: ; preds = %1 18: ; preds = %_ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit %.not30 = icmp eq i8 %2, 0 - br i1 %.not30, label %48, label %19 + br i1 %.not30, label %50, label %19 19: ; preds = %18 %20 = getelementptr inbounds nuw i8, ptr %0, i64 8 @@ -3253,131 +3253,134 @@ _ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit: ; preds = %1 %39 = sext i16 %38 to i32 %40 = select i1 %35, i32 %37, i32 %39 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %34, i32 0) - %.011.i.i = tail call i32 @llvm.smax.i32(i32 %34, i32 0) - %41 = and i16 %23, 2 - %.not.i.i.i = icmp eq i16 %41, 0 - %42 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %43 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %44 = load ptr, ptr %43, align 8 - %45 = select i1 %.not.i.i.i, ptr %44, ptr %42 - %46 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %40, ptr noundef %45, i32 noundef %spec.select.i.i, i32 noundef %.011.i.i, i32 noundef 0) + %41 = icmp slt i32 %34, 0 + %42 = sub nsw i32 %34, %spec.select.i.i + %spec.select14.i.i = tail call i32 @llvm.smin.i32(i32 %34, i32 %42) + %.011.i.i = select i1 %41, i32 0, i32 %spec.select14.i.i + %43 = and i16 %23, 2 + %.not.i.i.i = icmp eq i16 %43, 0 + %44 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %45 = getelementptr inbounds nuw i8, ptr %1, i64 24 + %46 = load ptr, ptr %45, align 8 + %47 = select i1 %.not.i.i.i, ptr %46, ptr %44 + %48 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %40, ptr noundef %47, i32 noundef %spec.select.i.i, i32 noundef %.011.i.i, i32 noundef 0) br label %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit _ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit: ; preds = %25, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %28, %25 ], [ %46, %.sink.split.i.i.i ] - %47 = icmp eq i8 %.0.i.i, 0 - br label %48 + %.0.i.i = phi i8 [ %28, %25 ], [ %48, %.sink.split.i.i.i ] + %49 = icmp eq i8 %.0.i.i, 0 + br label %50 -48: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit, %18 - %.not31 = phi i1 [ true, %18 ], [ %47, %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit ] +50: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit, %18 + %.not31 = phi i1 [ true, %18 ], [ %49, %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit ] tail call void @umtx_lock_77(ptr noundef nonnull @_ZN6icu_77L4LOCKE) - %49 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %50 = icmp eq ptr %49, null - br i1 %50, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %51 + %51 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %52 = icmp eq ptr %51, null + br i1 %52, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %53 -51: ; preds = %48 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %49, ptr noundef nonnull align 8 dereferenceable(64) %1) - to label %54 unwind label %52 +53: ; preds = %50 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %51, ptr noundef nonnull align 8 dereferenceable(64) %1) + to label %56 unwind label %54 -52: ; preds = %51 - %53 = landingpad { ptr, i32 } +54: ; preds = %53 + %55 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %49) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %51) #12 br label %.body -54: ; preds = %51 - %55 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 - %56 = load ptr, ptr %55, align 8, !tbaa !40 - %57 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %58 = icmp eq ptr %57, null - br i1 %58, label %60, label %59 - -59: ; preds = %54 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %57, ptr noundef nonnull align 8 dereferenceable(64) %0) - to label %60 unwind label %62 - -60: ; preds = %59, %54 - %61 = invoke noundef ptr @uhash_put_77(ptr noundef %56, ptr noundef %57, ptr noundef nonnull %49, ptr noundef nonnull align 4 dereferenceable(4) %3) - to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit unwind label %68 - -62: ; preds = %59 - %63 = landingpad { ptr, i32 } +56: ; preds = %53 + %57 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 + %58 = load ptr, ptr %57, align 8, !tbaa !40 + %59 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %60 = icmp eq ptr %59, null + br i1 %60, label %62, label %61 + +61: ; preds = %56 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %59, ptr noundef nonnull align 8 dereferenceable(64) %0) + to label %62 unwind label %64 + +62: ; preds = %61, %56 + %63 = invoke noundef ptr @uhash_put_77(ptr noundef %58, ptr noundef %59, ptr noundef nonnull %51, ptr noundef nonnull align 4 dereferenceable(4) %3) + to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit unwind label %70 + +64: ; preds = %61 + %65 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %57) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %59) #12 br label %.body -_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit: ; preds = %60 - br i1 %.not31, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35, label %64 +_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit: ; preds = %62 + br i1 %.not31, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35, label %66 -64: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit - %65 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %66 = icmp eq ptr %65, null - br i1 %66, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %67 +66: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit + %67 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %68 = icmp eq ptr %67, null + br i1 %68, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %69 -67: ; preds = %64 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %65, ptr noundef nonnull align 8 dereferenceable(64) %0) - to label %72 unwind label %70 +69: ; preds = %66 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %67, ptr noundef nonnull align 8 dereferenceable(64) %0) + to label %74 unwind label %72 -68: ; preds = %78, %60 - %69 = landingpad { ptr, i32 } +70: ; preds = %80, %62 + %71 = landingpad { ptr, i32 } cleanup br label %.body -70: ; preds = %67 - %71 = landingpad { ptr, i32 } +72: ; preds = %69 + %73 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %65) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %67) #12 br label %.body -72: ; preds = %67 - %73 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 - %74 = load ptr, ptr %73, align 8, !tbaa !40 - %75 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %76 = icmp eq ptr %75, null - br i1 %76, label %78, label %77 - -77: ; preds = %72 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %75, ptr noundef nonnull align 8 dereferenceable(64) %1) - to label %78 unwind label %80 - -78: ; preds = %77, %72 - %79 = invoke noundef ptr @uhash_put_77(ptr noundef %74, ptr noundef %75, ptr noundef nonnull %65, ptr noundef nonnull align 4 dereferenceable(4) %3) - to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 unwind label %68 - -80: ; preds = %77 - %81 = landingpad { ptr, i32 } +74: ; preds = %69 + %75 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 + %76 = load ptr, ptr %75, align 8, !tbaa !40 + %77 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %78 = icmp eq ptr %77, null + br i1 %78, label %80, label %79 + +79: ; preds = %74 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %77, ptr noundef nonnull align 8 dereferenceable(64) %1) + to label %80 unwind label %82 + +80: ; preds = %79, %74 + %81 = invoke noundef ptr @uhash_put_77(ptr noundef %76, ptr noundef %77, ptr noundef nonnull %67, ptr noundef nonnull align 4 dereferenceable(4) %3) + to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 unwind label %70 + +82: ; preds = %79 + %83 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %75) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %77) #12 br label %.body -_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split: ; preds = %64, %48 +_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split: ; preds = %66, %50 store i32 7, ptr %3, align 4, !tbaa !13 br label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 -_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, %78, %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit +_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, %80, %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit invoke void @umtx_unlock_77(ptr noundef nonnull @_ZN6icu_77L4LOCKE) - to label %_ZN6icu_775MutexD2Ev.exit unwind label %82 + to label %_ZN6icu_775MutexD2Ev.exit unwind label %84 -82: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 - %83 = landingpad { ptr, i32 } +84: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 + %85 = landingpad { ptr, i32 } catch ptr null - %84 = extractvalue { ptr, i32 } %83, 0 - tail call void @__clang_call_terminate(ptr %84) #14 + %86 = extractvalue { ptr, i32 } %85, 0 + tail call void @__clang_call_terminate(ptr %86) #14 unreachable _ZN6icu_775MutexD2Ev.exit: ; preds = %16, %4, %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35, %_ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit ret void -.body: ; preds = %62, %80, %68, %70, %52 - %.pn = phi { ptr, i32 } [ %71, %70 ], [ %53, %52 ], [ %63, %62 ], [ %69, %68 ], [ %81, %80 ] +.body: ; preds = %64, %82, %70, %72, %54 + %.pn = phi { ptr, i32 } [ %73, %72 ], [ %55, %54 ], [ %65, %64 ], [ %71, %70 ], [ %83, %82 ] invoke void @umtx_unlock_77(ptr noundef nonnull @_ZN6icu_77L4LOCKE) - to label %_ZN6icu_775MutexD2Ev.exit36 unwind label %85 + to label %_ZN6icu_775MutexD2Ev.exit36 unwind label %87 -85: ; preds = %.body - %86 = landingpad { ptr, i32 } +87: ; preds = %.body + %88 = landingpad { ptr, i32 } catch ptr null - %87 = extractvalue { ptr, i32 } %86, 0 - tail call void @__clang_call_terminate(ptr %87) #14 + %89 = extractvalue { ptr, i32 } %88, 0 + tail call void @__clang_call_terminate(ptr %89) #14 unreachable _ZN6icu_775MutexD2Ev.exit36: ; preds = %.body @@ -3518,9 +3521,6 @@ declare void @uhash_close_77(ptr noundef) local_unnamed_addr #9 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #11 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #11 - attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/icu/optimized/tzfmt.ll b/bench/icu/optimized/tzfmt.ll index 7fca92312d4..b2969e7de95 100644 --- a/bench/icu/optimized/tzfmt.ll +++ b/bench/icu/optimized/tzfmt.ll @@ -6068,7 +6068,7 @@ define noundef i32 @_ZNK6icu_7714TimeZoneFormat23parseOffsetLocalizedGMTERKNS_13 %19 = phi i32 [ %14, %16 ], [ %11, %9 ] %20 = add nsw i32 %19, %8 store i32 %20, ptr %7, align 8, !tbaa !67 - br label %72 + br label %74 21: ; preds = %9 %22 = call noundef i32 @_ZNK6icu_7714TimeZoneFormat30parseOffsetDefaultLocalizedGMTERKNS_13UnicodeStringEiRi(ptr noundef nonnull align 8 dereferenceable(1024) %0, ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, ptr noundef nonnull align 4 dereferenceable(4) %6) @@ -6091,7 +6091,7 @@ define noundef i32 @_ZNK6icu_7714TimeZoneFormat23parseOffsetLocalizedGMTERKNS_13 %31 = phi i32 [ %26, %28 ], [ %23, %21 ] %32 = add nsw i32 %31, %8 store i32 %32, ptr %7, align 8, !tbaa !67 - br label %72 + br label %74 33: ; preds = %.thread50, %21 %34 = getelementptr inbounds nuw i8, ptr %0, i64 768 @@ -6116,58 +6116,61 @@ define noundef i32 @_ZNK6icu_7714TimeZoneFormat23parseOffsetLocalizedGMTERKNS_13 %47 = sext i16 %46 to i32 %48 = select i1 %44, i32 %45, i32 %47 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %48, i32 0) - %.011.i.i = tail call i32 @llvm.smax.i32(i32 %48, i32 0) - %49 = and i16 %35, 2 - %.not.i.i.i = icmp eq i16 %49, 0 - %50 = getelementptr inbounds nuw i8, ptr %0, i64 770 - %51 = getelementptr inbounds nuw i8, ptr %0, i64 784 - %52 = load ptr, ptr %51, align 8 - %53 = select i1 %.not.i.i.i, ptr %52, ptr %50 - %54 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, i32 noundef %48, ptr noundef %53, i32 noundef %spec.select.i.i, i32 noundef %.011.i.i, i32 noundef 0) + %49 = icmp slt i32 %48, 0 + %50 = sub nsw i32 %48, %spec.select.i.i + %spec.select14.i.i = tail call i32 @llvm.smin.i32(i32 %48, i32 %50) + %.011.i.i = select i1 %49, i32 0, i32 %spec.select14.i.i + %51 = and i16 %35, 2 + %.not.i.i.i = icmp eq i16 %51, 0 + %52 = getelementptr inbounds nuw i8, ptr %0, i64 770 + %53 = getelementptr inbounds nuw i8, ptr %0, i64 784 + %54 = load ptr, ptr %53, align 8 + %55 = select i1 %.not.i.i.i, ptr %54, ptr %52 + %56 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, i32 noundef %48, ptr noundef %55, i32 noundef %spec.select.i.i, i32 noundef %.011.i.i, i32 noundef 0) br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit _ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit: ; preds = %38, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %43, %38 ], [ %54, %.sink.split.i.i.i ] - %55 = icmp eq i8 %.0.i.i, 0 - br i1 %55, label %56, label %.critedge - -56: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit - %57 = load i16, ptr %34, align 8, !tbaa !23 - %58 = icmp slt i16 %57, 0 - %59 = ashr i16 %57, 5 - %60 = sext i16 %59 to i32 - %61 = load i32, ptr %36, align 4 - %62 = select i1 %58, i32 %61, i32 %60 - %63 = add nsw i32 %62, %8 - store i32 %63, ptr %7, align 8, !tbaa !67 - br label %72 + %.0.i.i = phi i8 [ %43, %38 ], [ %56, %.sink.split.i.i.i ] + %57 = icmp eq i8 %.0.i.i, 0 + br i1 %57, label %58, label %.critedge + +58: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit + %59 = load i16, ptr %34, align 8, !tbaa !23 + %60 = icmp slt i16 %59, 0 + %61 = ashr i16 %59, 5 + %62 = sext i16 %61 to i32 + %63 = load i32, ptr %36, align 4 + %64 = select i1 %60, i32 %63, i32 %62 + %65 = add nsw i32 %64, %8 + store i32 %65, ptr %7, align 8, !tbaa !67 + br label %74 -64: ; preds = %.critedge +66: ; preds = %.critedge %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %65 = getelementptr inbounds nuw [4 x [4 x i16]], ptr @_ZN6icu_77L15ALT_GMT_STRINGSE, i64 0, i64 %indvars.iv.next + %67 = getelementptr inbounds nuw [4 x [4 x i16]], ptr @_ZN6icu_77L15ALT_GMT_STRINGSE, i64 0, i64 %indvars.iv.next %exitcond = icmp eq i64 %indvars.iv.next, 3 br i1 %exitcond, label %.critedge48, label %.critedge, !llvm.loop !76 -.critedge: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %64 - %indvars.iv = phi i64 [ %indvars.iv.next, %64 ], [ 0, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] - %66 = phi ptr [ %65, %64 ], [ @_ZN6icu_77L15ALT_GMT_STRINGSE, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] - %67 = tail call i32 @u_strlen_77(ptr noundef nonnull %66) - %68 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, i32 noundef %67, ptr noundef nonnull %66, i32 noundef 0, i32 noundef %67, i32 noundef 0) - %.not46 = icmp eq i8 %68, 0 - br i1 %.not46, label %69, label %64 - -69: ; preds = %.critedge - %70 = add nsw i32 %67, %8 - store i32 %70, ptr %7, align 8, !tbaa !67 - br label %72 +.critedge: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %66 + %indvars.iv = phi i64 [ %indvars.iv.next, %66 ], [ 0, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] + %68 = phi ptr [ %67, %66 ], [ @_ZN6icu_77L15ALT_GMT_STRINGSE, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] + %69 = tail call i32 @u_strlen_77(ptr noundef nonnull %68) + %70 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, i32 noundef %69, ptr noundef nonnull %68, i32 noundef 0, i32 noundef %69, i32 noundef 0) + %.not46 = icmp eq i8 %70, 0 + br i1 %.not46, label %71, label %66 + +71: ; preds = %.critedge + %72 = add nsw i32 %69, %8 + store i32 %72, ptr %7, align 8, !tbaa !67 + br label %74 -.critedge48: ; preds = %64 - %71 = getelementptr inbounds nuw i8, ptr %2, i64 12 - store i32 %8, ptr %71, align 4, !tbaa !69 - br label %72 +.critedge48: ; preds = %66 + %73 = getelementptr inbounds nuw i8, ptr %2, i64 12 + store i32 %8, ptr %73, align 4, !tbaa !69 + br label %74 -72: ; preds = %69, %.critedge48, %56, %29, %17 - %.0 = phi i32 [ %18, %17 ], [ %30, %29 ], [ 0, %56 ], [ 0, %.critedge48 ], [ 0, %69 ] +74: ; preds = %71, %.critedge48, %58, %29, %17 + %.0 = phi i32 [ %18, %17 ], [ %30, %29 ], [ 0, %58 ], [ 0, %.critedge48 ], [ 0, %71 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #22 ret i32 %.0 } @@ -8038,39 +8041,39 @@ _ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit: ; preds = %18, %.sink.spl %51 = trunc i16 %50 to i8 %52 = and i8 %51, 1 %53 = xor i8 %52, 1 - br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 + br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 .sink.split.i.i.i24: ; preds = %46 %54 = and i16 %38, 2 - %.not.i.i.i27 = icmp eq i16 %54, 0 + %.not.i.i.i28 = icmp eq i16 %54, 0 %55 = getelementptr inbounds nuw i8, ptr %0, i64 906 %56 = getelementptr inbounds nuw i8, ptr %0, i64 920 %57 = load ptr, ptr %56, align 8 - %58 = select i1 %.not.i.i.i27, ptr %57, ptr %55 + %58 = select i1 %.not.i.i.i28, ptr %57, ptr %55 %59 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %36, i32 noundef %44, ptr noundef %58, i32 noundef 0, i32 noundef %44, i32 noundef 0) - br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 + br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 -_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28: ; preds = %48, %.sink.split.i.i.i24 +_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29: ; preds = %48, %.sink.split.i.i.i24 %.0.i.i23 = phi i8 [ %53, %48 ], [ %59, %.sink.split.i.i.i24 ] %.not20 = icmp eq i8 %.0.i.i23, 0 br i1 %.not20, label %60, label %63 -60: ; preds = %35, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 +60: ; preds = %35, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #22 %61 = add i32 %33, %14 %62 = add i32 %61, %44 br label %64 -63: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %30, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 - %.015.ph = phi i32 [ %32, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 ], [ %32, %30 ], [ 0, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] +63: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %30, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 + %.015.ph = phi i32 [ %32, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 ], [ %32, %30 ], [ 0, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #22 br label %64 64: ; preds = %60, %63 - %.01532 = phi i32 [ %.015.ph, %63 ], [ %32, %60 ] + %.01533 = phi i32 [ %.015.ph, %63 ], [ %32, %60 ] %65 = phi i32 [ 0, %63 ], [ %62, %60 ] store i32 %65, ptr %4, align 4, !tbaa !12 - ret i32 %.01532 + ret i32 %.01533 } ; Function Attrs: mustprogress uwtable diff --git a/bench/icu/optimized/ucharstriebuilder.ll b/bench/icu/optimized/ucharstriebuilder.ll index 975806e6cf6..dd1b9559f31 100644 --- a/bench/icu/optimized/ucharstriebuilder.ll +++ b/bench/icu/optimized/ucharstriebuilder.ll @@ -161,7 +161,7 @@ _ZNK6icu_7713UnicodeStringixEi.exit.i: ; preds = %35, %_ZNK6icu_7717U %.0.i.i.i7 = phi i32 [ %44, %35 ], [ 65535, %_ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit ] %45 = add nsw i32 %27, 1 invoke void @_ZNK6icu_7713UnicodeString13tempSubStringEii(ptr dead_on_unwind nonnull writable sret(%"class.icu_77::UnicodeString") align 8 %5, ptr noundef nonnull align 8 dereferenceable(64) %2, i32 noundef %45, i32 noundef %.0.i.i.i7) - to label %_ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9 unwind label %74 + to label %_ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9 unwind label %76 _ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9: ; preds = %_ZNK6icu_7713UnicodeStringixEi.exit.i %46 = getelementptr inbounds nuw i8, ptr %4, i64 8 @@ -192,38 +192,41 @@ _ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9: ; preds = %65 = sext i16 %64 to i32 %66 = select i1 %61, i32 %63, i32 %65 %spec.select.i.i = call i32 @llvm.smin.i32(i32 %60, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %60, i32 0) - %67 = and i16 %49, 2 - %.not.i.i.i = icmp eq i16 %67, 0 - %68 = getelementptr inbounds nuw i8, ptr %5, i64 10 - %69 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %70 = load ptr, ptr %69, align 8 - %71 = select i1 %.not.i.i.i, ptr %70, ptr %68 - %72 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %4, i32 noundef 0, i32 noundef %66, ptr noundef %71, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) - to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %76 + %67 = icmp slt i32 %60, 0 + %68 = sub nsw i32 %60, %spec.select.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %60, i32 %68) + %.010.i.i = select i1 %67, i32 0, i32 %spec.select13.i.i + %69 = and i16 %49, 2 + %.not.i.i.i = icmp eq i16 %69, 0 + %70 = getelementptr inbounds nuw i8, ptr %5, i64 10 + %71 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %72 = load ptr, ptr %71, align 8 + %73 = select i1 %.not.i.i.i, ptr %72, ptr %70 + %74 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %4, i32 noundef 0, i32 noundef %66, ptr noundef %73, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %78 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %51, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %54, %51 ], [ %72, %.sink.split.i.i.i ] - %73 = sext i8 %.0.i.i to i32 + %.0.i.i = phi i8 [ %54, %51 ], [ %74, %.sink.split.i.i.i ] + %75 = sext i8 %.0.i.i to i32 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #13 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #13 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #13 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #13 - ret i32 %73 + ret i32 %75 -74: ; preds = %_ZNK6icu_7713UnicodeStringixEi.exit.i - %75 = landingpad { ptr, i32 } +76: ; preds = %_ZNK6icu_7713UnicodeStringixEi.exit.i + %77 = landingpad { ptr, i32 } cleanup - br label %78 + br label %80 -76: ; preds = %.sink.split.i.i.i - %77 = landingpad { ptr, i32 } +78: ; preds = %.sink.split.i.i.i + %79 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #13 - br label %78 + br label %80 -78: ; preds = %76, %74 - %.pn = phi { ptr, i32 } [ %77, %76 ], [ %75, %74 ] +80: ; preds = %78, %76 + %.pn = phi { ptr, i32 } [ %79, %78 ], [ %77, %76 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #13 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #13 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #13 diff --git a/bench/icu/optimized/uniset.ll b/bench/icu/optimized/uniset.ll index 70614c2e01a..e90db28a073 100644 --- a/bench/icu/optimized/uniset.ll +++ b/bench/icu/optimized/uniset.ll @@ -4886,20 +4886,23 @@ define internal noundef range(i32 -128, 128) i32 @_ZN6icu_77L20compareUnicodeStr %22 = sext i16 %21 to i32 %23 = select i1 %18, i32 %20, i32 %22 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %17, i32 0) - %.010.i.i = tail call i32 @llvm.smax.i32(i32 %17, i32 0) - %24 = and i16 %6, 2 - %.not.i.i.i = icmp eq i16 %24, 0 - %25 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %26 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %27 = load ptr, ptr %26, align 8 - %28 = select i1 %.not.i.i.i, ptr %27, ptr %25 - %29 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %28, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + %24 = icmp slt i32 %17, 0 + %25 = sub nsw i32 %17, %spec.select.i.i + %spec.select13.i.i = tail call i32 @llvm.smin.i32(i32 %17, i32 %25) + %.010.i.i = select i1 %24, i32 0, i32 %spec.select13.i.i + %26 = and i16 %6, 2 + %.not.i.i.i = icmp eq i16 %26, 0 + %27 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %28 = getelementptr inbounds nuw i8, ptr %1, i64 24 + %29 = load ptr, ptr %28, align 8 + %30 = select i1 %.not.i.i.i, ptr %29, ptr %27 + %31 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef 0, i32 noundef %23, ptr noundef %30, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %8, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %11, %8 ], [ %29, %.sink.split.i.i.i ] - %30 = sext i8 %.0.i.i to i32 - ret i32 %30 + %.0.i.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i.i ] + %32 = sext i8 %.0.i.i to i32 + ret i32 %32 } ; Function Attrs: mustprogress uwtable diff --git a/bench/icu/optimized/unistr.ll b/bench/icu/optimized/unistr.ll index b843c5debf5..6e3de25931b 100644 --- a/bench/icu/optimized/unistr.ll +++ b/bench/icu/optimized/unistr.ll @@ -105,7 +105,7 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %3 store ptr null, ptr %24, align 8, !tbaa !3 %25 = getelementptr inbounds nuw i8, ptr %0, i64 16 store i32 0, ptr %25, align 8, !tbaa !3 - br label %59 + br label %63 26: ; preds = %3 %27 = load i32, ptr %4, align 4, !tbaa !8 @@ -132,60 +132,66 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %3 .sink.split.i.i.i: ; preds = %30 %spec.select.i.i = call i32 @llvm.smin.i32(i32 %37, i32 0) - %.07.i.i = call i32 @llvm.smax.i32(i32 %37, i32 0) - %39 = and i16 %32, 2 - %.not.i.i.i = icmp eq i16 %39, 0 - %40 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %41 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %42 = load ptr, ptr %41, align 8 - %43 = select i1 %.not.i.i.i, ptr %42, ptr %40 - %44 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %5, ptr noundef %43, i32 noundef %spec.select.i.i, i32 noundef %.07.i.i) - to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit unwind label %60 + %39 = icmp slt i32 %37, 0 + %40 = sub nsw i32 %37, %spec.select.i.i + %spec.select10.i.i = call i32 @llvm.smin.i32(i32 %37, i32 %40) + %.07.i.i = select i1 %39, i32 0, i32 %spec.select10.i.i + %41 = and i16 %32, 2 + %.not.i.i.i = icmp eq i16 %41, 0 + %42 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %43 = getelementptr inbounds nuw i8, ptr %1, i64 24 + %44 = load ptr, ptr %43, align 8 + %45 = select i1 %.not.i.i.i, ptr %44, ptr %42 + %46 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %5, ptr noundef %45, i32 noundef %spec.select.i.i, i32 noundef %.07.i.i) + to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit unwind label %64 _ZN6icu_7713UnicodeString6appendERKS0_.exit: ; preds = %30, %.sink.split.i.i.i - %.0.i.i = phi ptr [ %5, %30 ], [ %44, %.sink.split.i.i.i ] - %45 = load i16, ptr %14, align 8, !tbaa !3 - %46 = icmp slt i16 %45, 0 - %47 = ashr i16 %45, 5 - %48 = sext i16 %47 to i32 - %49 = load i32, ptr %19, align 4 - %50 = select i1 %46, i32 %49, i32 %48 - %51 = icmp eq i32 %50, 0 - br i1 %51, label %_ZN6icu_7713UnicodeString6appendERKS0_.exit17, label %.sink.split.i.i.i11 + %.0.i.i = phi ptr [ %5, %30 ], [ %46, %.sink.split.i.i.i ] + %47 = load i16, ptr %14, align 8, !tbaa !3 + %48 = icmp slt i16 %47, 0 + %49 = ashr i16 %47, 5 + %50 = sext i16 %49 to i32 + %51 = load i32, ptr %19, align 4 + %52 = select i1 %48, i32 %51, i32 %50 + %53 = icmp eq i32 %52, 0 + br i1 %53, label %_ZN6icu_7713UnicodeString6appendERKS0_.exit18, label %.sink.split.i.i.i11 .sink.split.i.i.i11: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit - %spec.select.i.i12 = call i32 @llvm.smin.i32(i32 %50, i32 0) - %.07.i.i13 = call i32 @llvm.smax.i32(i32 %50, i32 0) - %52 = and i16 %45, 2 - %.not.i.i.i14 = icmp eq i16 %52, 0 - %53 = getelementptr inbounds nuw i8, ptr %2, i64 10 - %54 = getelementptr inbounds nuw i8, ptr %2, i64 24 - %55 = load ptr, ptr %54, align 8 - %56 = select i1 %.not.i.i.i14, ptr %55, ptr %53 - %57 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i, ptr noundef %56, i32 noundef %spec.select.i.i12, i32 noundef %.07.i.i13) - to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit17 unwind label %60 - -_ZN6icu_7713UnicodeString6appendERKS0_.exit17: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %.sink.split.i.i.i11 - %.0.i.i15 = phi ptr [ %.0.i.i, %_ZN6icu_7713UnicodeString6appendERKS0_.exit ], [ %57, %.sink.split.i.i.i11 ] - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i15) - to label %58 unwind label %60 - -58: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit17 + %spec.select.i.i12 = call i32 @llvm.smin.i32(i32 %52, i32 0) + %54 = icmp slt i32 %52, 0 + %55 = sub nsw i32 %52, %spec.select.i.i12 + %spec.select10.i.i13 = call i32 @llvm.smin.i32(i32 %52, i32 %55) + %.07.i.i14 = select i1 %54, i32 0, i32 %spec.select10.i.i13 + %56 = and i16 %47, 2 + %.not.i.i.i15 = icmp eq i16 %56, 0 + %57 = getelementptr inbounds nuw i8, ptr %2, i64 10 + %58 = getelementptr inbounds nuw i8, ptr %2, i64 24 + %59 = load ptr, ptr %58, align 8 + %60 = select i1 %.not.i.i.i15, ptr %59, ptr %57 + %61 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i, ptr noundef %60, i32 noundef %spec.select.i.i12, i32 noundef %.07.i.i14) + to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit18 unwind label %64 + +_ZN6icu_7713UnicodeString6appendERKS0_.exit18: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %.sink.split.i.i.i11 + %.0.i.i16 = phi ptr [ %.0.i.i, %_ZN6icu_7713UnicodeString6appendERKS0_.exit ], [ %61, %.sink.split.i.i.i11 ] + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i16) + to label %62 unwind label %64 + +62: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #24 - br label %59 + br label %63 -59: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %58 +63: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %62 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #24 ret void -60: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit17, %.sink.split.i.i.i, %.sink.split.i.i.i11 - %61 = landingpad { ptr, i32 } +64: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit18, %.sink.split.i.i.i, %.sink.split.i.i.i11 + %65 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #24 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #24 - resume { ptr, i32 } %61 + resume { ptr, i32 } %65 } ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) @@ -259,7 +265,7 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %4, %8 store ptr null, ptr %20, align 8, !tbaa !3 %21 = getelementptr inbounds nuw i8, ptr %0, i64 16 store i32 0, ptr %21, align 8, !tbaa !3 - br label %48 + br label %50 22: ; preds = %8 %23 = load i32, ptr %5, align 4, !tbaa !8 @@ -286,51 +292,54 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %4, %8 .sink.split.i.i.i: ; preds = %26 %spec.select.i.i = call i32 @llvm.smin.i32(i32 %33, i32 0) - %.07.i.i = call i32 @llvm.smax.i32(i32 %33, i32 0) - %35 = and i16 %28, 2 - %.not.i.i.i = icmp eq i16 %35, 0 - %36 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %37 = getelementptr inbounds nuw i8, ptr %1, i64 24 - %38 = load ptr, ptr %37, align 8 - %39 = select i1 %.not.i.i.i, ptr %38, ptr %36 - %40 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %6, ptr noundef %39, i32 noundef %spec.select.i.i, i32 noundef %.07.i.i) - to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit unwind label %49 + %35 = icmp slt i32 %33, 0 + %36 = sub nsw i32 %33, %spec.select.i.i + %spec.select10.i.i = call i32 @llvm.smin.i32(i32 %33, i32 %36) + %.07.i.i = select i1 %35, i32 0, i32 %spec.select10.i.i + %37 = and i16 %28, 2 + %.not.i.i.i = icmp eq i16 %37, 0 + %38 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %39 = getelementptr inbounds nuw i8, ptr %1, i64 24 + %40 = load ptr, ptr %39, align 8 + %41 = select i1 %.not.i.i.i, ptr %40, ptr %38 + %42 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %6, ptr noundef %41, i32 noundef %spec.select.i.i, i32 noundef %.07.i.i) + to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit unwind label %51 _ZN6icu_7713UnicodeString6appendERKS0_.exit: ; preds = %26, %.sink.split.i.i.i - %.0.i.i = phi ptr [ %6, %26 ], [ %40, %.sink.split.i.i.i ] - %41 = getelementptr inbounds nuw i8, ptr %.0.i.i, i64 8 - %42 = load i16, ptr %41, align 8, !tbaa !3 - %43 = and i16 %42, 17 - %.not.i.i.i9 = icmp ne i16 %43, 0 - %44 = icmp eq i64 %2, 0 - %or.cond.i.i = or i1 %44, %.not.i.i.i9 - br i1 %or.cond.i.i, label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, label %45 - -45: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit - %46 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i, ptr noundef %3, i32 noundef 0, i32 noundef %17) - to label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit unwind label %49 - -_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %45 - %.0.i.i10 = phi ptr [ %.0.i.i, %_ZN6icu_7713UnicodeString6appendERKS0_.exit ], [ %46, %45 ] + %.0.i.i = phi ptr [ %6, %26 ], [ %42, %.sink.split.i.i.i ] + %43 = getelementptr inbounds nuw i8, ptr %.0.i.i, i64 8 + %44 = load i16, ptr %43, align 8, !tbaa !3 + %45 = and i16 %44, 17 + %.not.i.i.i9 = icmp ne i16 %45, 0 + %46 = icmp eq i64 %2, 0 + %or.cond.i.i = or i1 %46, %.not.i.i.i9 + br i1 %or.cond.i.i, label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, label %47 + +47: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit + %48 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i, ptr noundef %3, i32 noundef 0, i32 noundef %17) + to label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit unwind label %51 + +_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %47 + %.0.i.i10 = phi ptr [ %.0.i.i, %_ZN6icu_7713UnicodeString6appendERKS0_.exit ], [ %48, %47 ] invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i10) - to label %47 unwind label %49 + to label %49 unwind label %51 -47: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit +49: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #24 - br label %48 + br label %50 -48: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %47 +50: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %49 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #24 ret void -49: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, %.sink.split.i.i.i, %45 - %50 = landingpad { ptr, i32 } +51: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, %.sink.split.i.i.i, %47 + %52 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #24 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #24 - resume { ptr, i32 } %50 + resume { ptr, i32 } %52 } ; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(readwrite, inaccessiblemem: none) uwtable @@ -6252,14 +6261,17 @@ define void @_ZN6icu_7713UnicodeString20handleReplaceBetweenEiiRKS0_(ptr noundef %12 = load i32, ptr %11, align 4 %13 = select i1 %8, i32 %12, i32 %10 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %13, i32 0) - %.0.i.i = tail call i32 @llvm.smax.i32(i32 %13, i32 0) - %14 = and i16 %7, 2 - %.not.i.i.i = icmp eq i16 %14, 0 - %15 = getelementptr inbounds nuw i8, ptr %3, i64 10 - %16 = getelementptr inbounds nuw i8, ptr %3, i64 24 - %17 = load ptr, ptr %16, align 8 - %18 = select i1 %.not.i.i.i, ptr %17, ptr %15 - %19 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString9doReplaceEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef %1, i32 noundef %5, ptr noundef %18, i32 noundef %spec.select.i.i, i32 noundef %.0.i.i) + %14 = icmp slt i32 %13, 0 + %15 = sub nsw i32 %13, %spec.select.i.i + %spec.select9.i.i = tail call i32 @llvm.smin.i32(i32 %13, i32 %15) + %.0.i.i = select i1 %14, i32 0, i32 %spec.select9.i.i + %16 = and i16 %7, 2 + %.not.i.i.i = icmp eq i16 %16, 0 + %17 = getelementptr inbounds nuw i8, ptr %3, i64 10 + %18 = getelementptr inbounds nuw i8, ptr %3, i64 24 + %19 = load ptr, ptr %18, align 8 + %20 = select i1 %.not.i.i.i, ptr %19, ptr %17 + %21 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString9doReplaceEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %0, i32 noundef %1, i32 noundef %5, ptr noundef %20, i32 noundef %spec.select.i.i, i32 noundef %.0.i.i) ret void } diff --git a/bench/icu/optimized/unistr_case.ll b/bench/icu/optimized/unistr_case.ll index 3d5902e14c9..bbfb5572afb 100644 --- a/bench/icu/optimized/unistr_case.ll +++ b/bench/icu/optimized/unistr_case.ll @@ -641,51 +641,54 @@ define signext range(i8 0, 2) i8 @uhash_compareCaselessUnicodeString_77(ptr %0, %36 = sub nsw i32 %24, %spec.select14.i %spec.select15.i = tail call i32 @llvm.smin.i32(i32 %24, i32 %36) %spec.select38.i.i = tail call i32 @llvm.smin.i32(i32 %16, i32 0) - %.0.i.i = tail call i32 @llvm.smax.i32(i32 %16, i32 0) - %37 = icmp eq ptr %34, null - %38 = or i1 %35, %37 - %spec.select32.i.i = select i1 %38, i32 0, i32 %spec.select15.i - %39 = and i16 %10, 2 - %.not.i.i.i = icmp eq i16 %39, 0 - %40 = getelementptr inbounds nuw i8, ptr %0, i64 10 - %41 = getelementptr inbounds nuw i8, ptr %0, i64 24 - %42 = load ptr, ptr %41, align 8 - %43 = select i1 %.not.i.i.i, ptr %42, ptr %40 - %44 = sext i32 %spec.select38.i.i to i64 - %45 = getelementptr inbounds i16, ptr %43, i64 %44 - %46 = sext i32 %spec.select14.i to i64 - %47 = select i1 %37, i64 0, i64 %46 - %48 = getelementptr inbounds i16, ptr %34, i64 %47 - %.not29.i.i = icmp eq ptr %45, %48 - br i1 %.not29.i.i, label %51, label %49 - -49: ; preds = %.sink.split.i.i.i + %37 = icmp slt i32 %16, 0 + %38 = sub nsw i32 %16, %spec.select38.i.i + %spec.select40.i.i = tail call i32 @llvm.smin.i32(i32 %16, i32 %38) + %.0.i.i = select i1 %37, i32 0, i32 %spec.select40.i.i + %39 = icmp eq ptr %34, null + %40 = or i1 %35, %39 + %spec.select32.i.i = select i1 %40, i32 0, i32 %spec.select15.i + %41 = and i16 %10, 2 + %.not.i.i.i = icmp eq i16 %41, 0 + %42 = getelementptr inbounds nuw i8, ptr %0, i64 10 + %43 = getelementptr inbounds nuw i8, ptr %0, i64 24 + %44 = load ptr, ptr %43, align 8 + %45 = select i1 %.not.i.i.i, ptr %44, ptr %42 + %46 = sext i32 %spec.select38.i.i to i64 + %47 = getelementptr inbounds i16, ptr %45, i64 %46 + %48 = sext i32 %spec.select14.i to i64 + %49 = select i1 %39, i64 0, i64 %48 + %50 = getelementptr inbounds i16, ptr %34, i64 %49 + %.not29.i.i = icmp eq ptr %47, %50 + br i1 %.not29.i.i, label %53, label %51 + +51: ; preds = %.sink.split.i.i.i call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6 store i32 0, ptr %3, align 4, !tbaa !6 - %50 = call i32 @u_strcmpFold_77(ptr noundef %45, i32 noundef %.0.i.i, ptr noundef %48, i32 noundef %spec.select32.i.i, i32 noundef 65536, ptr noundef nonnull %3) - %.not31.i.i = icmp eq i32 %50, 0 + %52 = call i32 @u_strcmpFold_77(ptr noundef %47, i32 noundef %.0.i.i, ptr noundef %50, i32 noundef %spec.select32.i.i, i32 noundef 65536, ptr noundef nonnull %3) + %.not31.i.i = icmp eq i32 %52, 0 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6 - br i1 %.not31.i.i, label %57, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit + br i1 %.not31.i.i, label %59, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit -51: ; preds = %.sink.split.i.i.i - %52 = icmp slt i32 %spec.select32.i.i, 0 - br i1 %52, label %53, label %56 +53: ; preds = %.sink.split.i.i.i + %54 = icmp slt i32 %spec.select32.i.i, 0 + br i1 %54, label %55, label %58 -53: ; preds = %51 - %54 = getelementptr inbounds i16, ptr %48, i64 %47 - %55 = tail call i32 @u_strlen_77(ptr noundef %54) - br label %56 +55: ; preds = %53 + %56 = getelementptr inbounds i16, ptr %50, i64 %49 + %57 = tail call i32 @u_strlen_77(ptr noundef %56) + br label %58 -56: ; preds = %53, %51 - %.123.i.i = phi i32 [ %55, %53 ], [ %spec.select32.i.i, %51 ] +58: ; preds = %55, %53 + %.123.i.i = phi i32 [ %57, %55 ], [ %spec.select32.i.i, %53 ] %.not30.i.i = icmp eq i32 %.0.i.i, %.123.i.i - br i1 %.not30.i.i, label %57, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit + br i1 %.not30.i.i, label %59, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit -57: ; preds = %56, %49 +59: ; preds = %58, %51 br label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit -_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit: ; preds = %57, %49, %.sink.split.i.i, %26, %56, %5, %2 - %.0 = phi i8 [ 1, %2 ], [ 0, %5 ], [ %28, %26 ], [ 0, %.sink.split.i.i ], [ 1, %57 ], [ 0, %49 ], [ 0, %56 ] +_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit: ; preds = %59, %51, %.sink.split.i.i, %26, %58, %5, %2 + %.0 = phi i8 [ 1, %2 ], [ 0, %5 ], [ %28, %26 ], [ 0, %.sink.split.i.i ], [ 1, %59 ], [ 0, %51 ], [ 0, %58 ] ret i8 %.0 } @@ -703,9 +706,6 @@ declare i32 @llvm.smin.i32(i32, i32) #4 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #5 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #4 - attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/icu/optimized/units_router.ll b/bench/icu/optimized/units_router.ll index 5f6a208f00b..eb1a2c80aac 100644 --- a/bench/icu/optimized/units_router.ll +++ b/bench/icu/optimized/units_router.ll @@ -549,13 +549,13 @@ define void @_ZN6icu_775units11UnitsRouter24parseSkeletonToPrecisionENS_13Unicod store i32 0, ptr %0, align 8, !tbaa !15 %10 = getelementptr inbounds nuw i8, ptr %0, i64 24 store i32 0, ptr %10, align 8, !tbaa !19 - br label %44 + br label %46 11: ; preds = %3 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4) #14 store ptr @.str, ptr %5, align 8, !tbaa !20 invoke void @_ZN6icu_7713UnicodeStringC1EaNS_14ConstChar16PtrEi(ptr noundef nonnull align 8 dereferenceable(64) %4, i8 noundef signext 1, ptr noundef nonnull %5, i32 noundef -1) - to label %12 unwind label %36 + to label %12 unwind label %38 12: ; preds = %11 %13 = getelementptr inbounds nuw i8, ptr %4, i64 8 @@ -578,73 +578,76 @@ define void @_ZN6icu_775units11UnitsRouter24parseSkeletonToPrecisionENS_13Unicod br i1 %.not6.i.i, label %25, label %.critedge 25: ; preds = %.sink.split.i.i.i + %26 = icmp slt i32 %20, 0 %spec.select12.i.i = call i32 @llvm.smin.i32(i32 %20, i32 0) - %.010.i.i = call i32 @llvm.smax.i32(i32 %20, i32 0) - %26 = and i16 %14, 2 - %.not.i.i.i = icmp eq i16 %26, 0 - %27 = getelementptr inbounds nuw i8, ptr %4, i64 10 - %28 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %29 = load ptr, ptr %28, align 8 - %30 = select i1 %.not.i.i.i, ptr %29, ptr %27 - %31 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString17doEqualsSubstringEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %20, ptr noundef %30, i32 noundef %spec.select12.i.i, i32 noundef %.010.i.i) - to label %.noexc unwind label %38 + %27 = sub nsw i32 %20, %spec.select12.i.i + %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %20, i32 %27) + %.010.i.i = select i1 %26, i32 0, i32 %spec.select13.i.i + %28 = and i16 %14, 2 + %.not.i.i.i = icmp eq i16 %28, 0 + %29 = getelementptr inbounds nuw i8, ptr %4, i64 10 + %30 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %31 = load ptr, ptr %30, align 8 + %32 = select i1 %.not.i.i.i, ptr %31, ptr %29 + %33 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString17doEqualsSubstringEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef 0, i32 noundef %20, ptr noundef %32, i32 noundef %spec.select12.i.i, i32 noundef %.010.i.i) + to label %.noexc unwind label %40 .noexc: ; preds = %25 - %.not = icmp eq i8 %31, 0 + %.not = icmp eq i8 %33, 0 br label %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit _ZNK6icu_7713UnicodeString10startsWithERKS0_.exit: ; preds = %12, %.noexc %.0.i.i = phi i1 [ %.not, %.noexc ], [ %.not6.i.i, %12 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #14 - %32 = load ptr, ptr %5, align 8, !tbaa !20 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %32) #14, !srcloc !24 + %34 = load ptr, ptr %5, align 8, !tbaa !20 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %34) #14, !srcloc !24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #14 - br i1 %.0.i.i, label %34, label %42 + br i1 %.0.i.i, label %36, label %44 .critedge: ; preds = %.sink.split.i.i.i call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #14 - %33 = load ptr, ptr %5, align 8, !tbaa !20 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %33) #14, !srcloc !24 + %35 = load ptr, ptr %5, align 8, !tbaa !20 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %35) #14, !srcloc !24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #14 - br label %34 + br label %36 -34: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit +36: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit store i32 3, ptr %2, align 4, !tbaa !13 store i32 0, ptr %0, align 8, !tbaa !15 - %35 = getelementptr inbounds nuw i8, ptr %0, i64 24 - store i32 0, ptr %35, align 8, !tbaa !19 - br label %44 + %37 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i32 0, ptr %37, align 8, !tbaa !19 + br label %46 -36: ; preds = %11 - %37 = landingpad { ptr, i32 } +38: ; preds = %11 + %39 = landingpad { ptr, i32 } cleanup - br label %40 + br label %42 -38: ; preds = %25 - %39 = landingpad { ptr, i32 } +40: ; preds = %25 + %41 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #14 - br label %40 + br label %42 -40: ; preds = %38, %36 - %.pn = phi { ptr, i32 } [ %39, %38 ], [ %37, %36 ] - %41 = load ptr, ptr %5, align 8, !tbaa !20 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %41) #14, !srcloc !24 +42: ; preds = %40, %38 + %.pn = phi { ptr, i32 } [ %41, %40 ], [ %39, %38 ] + %43 = load ptr, ptr %5, align 8, !tbaa !20 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %43) #14, !srcloc !24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #14 resume { ptr, i32 } %.pn -42: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit +44: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #14 call void @_ZN6icu_7713StringSegmentC1ERKNS_13UnicodeStringEb(ptr noundef nonnull align 8 dereferenceable(17) %6, ptr noundef nonnull align 8 dereferenceable(64) %1, i1 noundef zeroext false) call void @_ZN6icu_7713StringSegment12adjustOffsetEi(ptr noundef nonnull align 8 dereferenceable(17) %6, i32 noundef 20) store i32 0, ptr %0, align 8, !tbaa !15 - %43 = getelementptr inbounds nuw i8, ptr %0, i64 24 - store i32 0, ptr %43, align 8, !tbaa !19 + %45 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i32 0, ptr %45, align 8, !tbaa !19 call void @_ZN6icu_776number4impl20parseIncrementOptionERKNS_13StringSegmentERNS0_9PrecisionER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(17) %6, ptr noundef nonnull align 8 dereferenceable(28) %0, ptr noundef nonnull align 4 dereferenceable(4) %2) call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #14 - br label %44 + br label %46 -44: ; preds = %34, %42, %9 +46: ; preds = %36, %44, %9 ret void } @@ -2959,9 +2962,6 @@ declare void @_ZN6icu_7713UnicodeStringC1EOS0_(ptr noundef nonnull align 8 deref ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #13 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #13 - attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/icu/optimized/uspoof_conf.ll b/bench/icu/optimized/uspoof_conf.ll index e2a6d5d8b73..003ffc7b8f2 100644 --- a/bench/icu/optimized/uspoof_conf.ll +++ b/bench/icu/optimized/uspoof_conf.ll @@ -237,11 +237,11 @@ define internal noundef range(i32 -128, 128) i32 @_ZL16SPUStringCompare8UElement %19 = load i32, ptr %18, align 4 %20 = select i1 %15, i32 %19, i32 %17 %21 = icmp slt i32 %11, %20 - br i1 %21, label %37, label %22 + br i1 %21, label %39, label %22 22: ; preds = %2 %23 = icmp sgt i32 %11, %20 - br i1 %23, label %37, label %24 + br i1 %23, label %39, label %24 24: ; preds = %22 %25 = and i16 %14, 1 @@ -256,23 +256,26 @@ define internal noundef range(i32 -128, 128) i32 @_ZL16SPUStringCompare8UElement .sink.split.i.i.i: ; preds = %24 %spec.select.i.i = tail call i32 @llvm.smin.i32(i32 %20, i32 0) - %.010.i.i = tail call i32 @llvm.smax.i32(i32 %20, i32 0) - %30 = and i16 %14, 2 - %.not.i.i.i = icmp eq i16 %30, 0 - %31 = getelementptr inbounds nuw i8, ptr %12, i64 10 - %32 = getelementptr inbounds nuw i8, ptr %12, i64 24 - %33 = load ptr, ptr %32, align 8 - %34 = select i1 %.not.i.i.i, ptr %33, ptr %31 - %35 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %3, i32 noundef 0, i32 noundef %11, ptr noundef %34, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) + %30 = icmp slt i32 %20, 0 + %31 = sub nsw i32 %20, %spec.select.i.i + %spec.select13.i.i = tail call i32 @llvm.smin.i32(i32 %20, i32 %31) + %.010.i.i = select i1 %30, i32 0, i32 %spec.select13.i.i + %32 = and i16 %14, 2 + %.not.i.i.i = icmp eq i16 %32, 0 + %33 = getelementptr inbounds nuw i8, ptr %12, i64 10 + %34 = getelementptr inbounds nuw i8, ptr %12, i64 24 + %35 = load ptr, ptr %34, align 8 + %36 = select i1 %.not.i.i.i, ptr %35, ptr %33 + %37 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %3, i32 noundef 0, i32 noundef %11, ptr noundef %36, i32 noundef %spec.select.i.i, i32 noundef %.010.i.i) br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %26, %.sink.split.i.i.i - %.0.i.i = phi i8 [ %29, %26 ], [ %35, %.sink.split.i.i.i ] - %36 = sext i8 %.0.i.i to i32 - br label %37 + %.0.i.i = phi i8 [ %29, %26 ], [ %37, %.sink.split.i.i.i ] + %38 = sext i8 %.0.i.i to i32 + br label %39 -37: ; preds = %22, %2, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0 = phi i32 [ %36, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ -1, %2 ], [ 1, %22 ] +39: ; preds = %22, %2, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %.0 = phi i32 [ %38, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ -1, %2 ], [ 1, %22 ] ret i32 %.0 } @@ -1429,9 +1432,6 @@ declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immar ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smin.i32(i32, i32) #12 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i32 @llvm.smax.i32(i32, i32) #12 - attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/bench/libpng/optimized/pngrutil.ll b/bench/libpng/optimized/pngrutil.ll index aeb0974a249..74a4a8dcc2c 100644 --- a/bench/libpng/optimized/pngrutil.ll +++ b/bench/libpng/optimized/pngrutil.ll @@ -1996,12 +1996,12 @@ define void @png_read_IDAT_data(ptr noalias noundef initializes((344, 356)) %0, %32 = getelementptr inbounds nuw i8, ptr %0, i64 368 br label %33 -33: ; preds = %166, %3 - %.1 = phi i64 [ %spec.select, %3 ], [ %.3, %166 ] +33: ; preds = %168, %3 + %.1 = phi i64 [ %spec.select, %3 ], [ %.3, %168 ] call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %6) #12 %34 = load i32, ptr %11, align 8, !tbaa !39 %35 = icmp eq i32 %34, 0 - br i1 %35, label %.preheader.preheader, label %134 + br i1 %35, label %.preheader.preheader, label %136 .preheader.preheader: ; preds = %33 %.pre = load i32, ptr %12, align 8, !tbaa !87 @@ -2171,160 +2171,164 @@ png_read_chunk_header.exit: ; preds = %97 %.171 = call i32 @llvm.umin.i32(i32 %36, i32 %spec.select82) %121 = zext i32 %.171 to i64 %122 = load ptr, ptr %29, align 8, !tbaa !104, !alias.scope !105 + %123 = icmp ult i64 %120, %121 + br i1 %123, label %132, label %124 + +124: ; preds = %117 %.not.i84 = icmp eq ptr %122, null - br i1 %.not.i84, label %127, label %123 + br i1 %.not.i84, label %129, label %125 -123: ; preds = %117 - %124 = load i64, ptr %30, align 8, !tbaa !108, !alias.scope !105 - %125 = icmp ult i64 %124, %121 - br i1 %125, label %126, label %png_crc_read.exit +125: ; preds = %124 + %126 = load i64, ptr %30, align 8, !tbaa !108, !alias.scope !105 + %127 = icmp ult i64 %126, %121 + br i1 %127, label %128, label %png_crc_read.exit -126: ; preds = %123 +128: ; preds = %125 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %29, i8 0, i64 16, i1 false), !alias.scope !105 call void @png_free(ptr noundef nonnull %0, ptr noundef nonnull %122) #12 - br label %127 + br label %129 -127: ; preds = %126, %117 - %128 = call noalias ptr @png_malloc_base(ptr noundef nonnull %0, i64 noundef range(i64 0, 4294967296) %121) #12 - %.not27.i = icmp eq ptr %128, null - br i1 %.not27.i, label %130, label %129 +129: ; preds = %128, %124 + %130 = call noalias ptr @png_malloc_base(ptr noundef nonnull %0, i64 noundef range(i64 0, 4294967296) %121) #12 + %.not27.i = icmp eq ptr %130, null + br i1 %.not27.i, label %132, label %131 -129: ; preds = %127 - call void @llvm.memset.p0.i64(ptr nonnull align 1 %128, i8 0, i64 range(i64 0, 4294967296) %121, i1 false) - store ptr %128, ptr %29, align 8, !tbaa !104, !alias.scope !105 +131: ; preds = %129 + call void @llvm.memset.p0.i64(ptr nonnull align 1 %130, i8 0, i64 range(i64 0, 4294967296) %121, i1 false) + store ptr %130, ptr %29, align 8, !tbaa !104, !alias.scope !105 store i64 %121, ptr %30, align 8, !tbaa !108, !alias.scope !105 br label %png_crc_read.exit -130: ; preds = %127 +132: ; preds = %117, %129 call void @png_chunk_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.22) #11 unreachable -png_crc_read.exit: ; preds = %129, %123 - %.021.i = phi ptr [ %128, %129 ], [ %122, %123 ] +png_crc_read.exit: ; preds = %131, %125 + %.021.i = phi ptr [ %130, %131 ], [ %122, %125 ] call void @png_read_data(ptr noundef nonnull %0, ptr noundef nonnull %.021.i, i64 noundef %121) #12 call void @png_calculate_crc(ptr noundef nonnull %0, ptr noundef nonnull %.021.i, i64 noundef %121) #12 - %131 = load i32, ptr %12, align 8, !tbaa !87 - %132 = sub i32 %131, %.171 - store i32 %132, ptr %12, align 8, !tbaa !87 + %133 = load i32, ptr %12, align 8, !tbaa !87 + %134 = sub i32 %133, %.171 + store i32 %134, ptr %12, align 8, !tbaa !87 store ptr %.021.i, ptr %7, align 8, !tbaa !40 store i32 %.171, ptr %11, align 8, !tbaa !39 - %133 = icmp eq i64 %spec.select8291, 0 - br label %134 + %135 = icmp eq i64 %spec.select8291, 0 + br label %136 -134: ; preds = %png_crc_read.exit, %33 - %.not7.i = phi i1 [ %133, %png_crc_read.exit ], [ false, %33 ] - br i1 %10, label %137, label %135 +136: ; preds = %png_crc_read.exit, %33 + %.not7.i = phi i1 [ %135, %png_crc_read.exit ], [ false, %33 ] + br i1 %10, label %139, label %137 -135: ; preds = %134 +137: ; preds = %136 %spec.select8392 = call i64 @llvm.umin.i64(i64 %.1, i64 4294967295) %spec.select83 = trunc nuw i64 %spec.select8392 to i32 - %136 = sub i64 %.1, %spec.select8392 - br label %138 + %138 = sub i64 %.1, %spec.select8392 + br label %140 -137: ; preds = %134 +139: ; preds = %136 store ptr %6, ptr %8, align 8, !tbaa !85 - br label %138 + br label %140 -138: ; preds = %137, %135 - %storemerge = phi i32 [ 1024, %137 ], [ %spec.select83, %135 ] - %.2 = phi i64 [ %.1, %137 ], [ %136, %135 ] +140: ; preds = %139, %137 + %storemerge = phi i32 [ 1024, %139 ], [ %spec.select83, %137 ] + %.2 = phi i64 [ %.1, %139 ], [ %138, %137 ] store i32 %storemerge, ptr %9, align 8, !tbaa !86 call void @llvm.experimental.noalias.scope.decl(metadata !109) - %139 = load i8, ptr %31, align 8, !tbaa !38, !alias.scope !109 - %.not.i85 = icmp eq i8 %139, 0 - %brmerge = select i1 %.not.i85, i1 true, i1 %.not7.i - br i1 %brmerge, label %146, label %140 - -140: ; preds = %138 - %141 = load ptr, ptr %7, align 8, !tbaa !40, !alias.scope !109 - %142 = load i8, ptr %141, align 1, !tbaa !3, !noalias !109 - %143 = icmp slt i8 %142, 0 - br i1 %143, label %144, label %145 - -144: ; preds = %140 + %141 = load i8, ptr %31, align 8, !tbaa !38, !alias.scope !109 + %.not.i85 = icmp eq i8 %141, 0 + %brmerge = or i1 %.not.i85, %.not7.i + br i1 %brmerge, label %148, label %142 + +142: ; preds = %140 + %143 = load ptr, ptr %7, align 8, !tbaa !40, !alias.scope !109 + %144 = load i8, ptr %143, align 1, !tbaa !3, !noalias !109 + %145 = icmp slt i8 %144, 0 + br i1 %145, label %146, label %147 + +146: ; preds = %142 store ptr @.str.5, ptr %32, align 8, !tbaa !41, !alias.scope !109 br label %png_zlib_inflate.exit -145: ; preds = %140 +147: ; preds = %142 store i8 0, ptr %31, align 8, !tbaa !38, !alias.scope !109 - br label %146 + br label %148 -146: ; preds = %138, %145 - %147 = call i32 @inflate(ptr noundef nonnull %7, i32 noundef 0) #12 +148: ; preds = %140, %147 + %149 = call i32 @inflate(ptr noundef nonnull %7, i32 noundef 0) #12 br label %png_zlib_inflate.exit -png_zlib_inflate.exit: ; preds = %144, %146 - %.0.i = phi i32 [ -3, %144 ], [ %147, %146 ] - %148 = load i32, ptr %9, align 8, !tbaa !86 - %149 = zext i32 %148 to i64 - %150 = add i64 %.2, %149 +png_zlib_inflate.exit: ; preds = %146, %148 + %.0.i = phi i32 [ -3, %146 ], [ %149, %148 ] + %150 = load i32, ptr %9, align 8, !tbaa !86 + %151 = zext i32 %150 to i64 + %152 = add i64 %.2, %151 %reass.sub = add i64 %.2, 1024 - %151 = sub i64 %reass.sub, %149 - %.3 = select i1 %10, i64 %151, i64 %150 + %153 = sub i64 %reass.sub, %151 + %.3 = select i1 %10, i64 %153, i64 %152 store i32 0, ptr %9, align 8, !tbaa !86 - switch i32 %.0.i, label %162 [ - i32 1, label %152 - i32 0, label %166 + switch i32 %.0.i, label %164 [ + i32 1, label %154 + i32 0, label %168 ] -152: ; preds = %png_zlib_inflate.exit +154: ; preds = %png_zlib_inflate.exit store ptr null, ptr %8, align 8, !tbaa !85 - %153 = getelementptr inbounds nuw i8, ptr %0, i64 300 - %154 = load i32, ptr %153, align 4, !tbaa !24 - %155 = or i32 %154, 8 - store i32 %155, ptr %153, align 4, !tbaa !24 - %156 = load i32, ptr %14, align 8, !tbaa !31 + %155 = getelementptr inbounds nuw i8, ptr %0, i64 300 + %156 = load i32, ptr %155, align 4, !tbaa !24 %157 = or i32 %156, 8 - store i32 %157, ptr %14, align 8, !tbaa !31 - %158 = load i32, ptr %11, align 8, !tbaa !39 - %.not77 = icmp eq i32 %158, 0 - br i1 %.not77, label %159, label %161 - -159: ; preds = %152 - %160 = load i32, ptr %12, align 8, !tbaa !87 - %.not78 = icmp eq i32 %160, 0 - br i1 %.not78, label %167, label %161 - -161: ; preds = %159, %152 + store i32 %157, ptr %155, align 4, !tbaa !24 + %158 = load i32, ptr %14, align 8, !tbaa !31 + %159 = or i32 %158, 8 + store i32 %159, ptr %14, align 8, !tbaa !31 + %160 = load i32, ptr %11, align 8, !tbaa !39 + %.not77 = icmp eq i32 %160, 0 + br i1 %.not77, label %161, label %163 + +161: ; preds = %154 + %162 = load i32, ptr %12, align 8, !tbaa !87 + %.not78 = icmp eq i32 %162, 0 + br i1 %.not78, label %169, label %163 + +163: ; preds = %161, %154 call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.23) #12 - br label %167 + br label %169 -162: ; preds = %png_zlib_inflate.exit +164: ; preds = %png_zlib_inflate.exit call void @png_zstream_error(ptr noundef nonnull %0, i32 noundef %.0.i) #12 - %163 = load ptr, ptr %32, align 8, !tbaa !41 - br i1 %10, label %165, label %164 + %165 = load ptr, ptr %32, align 8, !tbaa !41 + br i1 %10, label %167, label %166 -164: ; preds = %162 - call void @png_chunk_error(ptr noundef nonnull %0, ptr noundef %163) #11 +166: ; preds = %164 + call void @png_chunk_error(ptr noundef nonnull %0, ptr noundef %165) #11 unreachable -165: ; preds = %162 - call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef %163) #12 +167: ; preds = %164 + call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef %165) #12 call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #12 br label %.loopexit -166: ; preds = %png_zlib_inflate.exit +168: ; preds = %png_zlib_inflate.exit call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #12 %cond = icmp eq i64 %.3, 0 br i1 %cond, label %.loopexit, label %33 -167: ; preds = %161, %159 +169: ; preds = %163, %161 call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #12 %.not80 = icmp eq i64 %.3, 0 - br i1 %.not80, label %.loopexit, label %168 + br i1 %.not80, label %.loopexit, label %170 -168: ; preds = %167 - br i1 %10, label %170, label %169 +170: ; preds = %169 + br i1 %10, label %172, label %171 -169: ; preds = %168 +171: ; preds = %170 call void @png_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.21) #11 unreachable -170: ; preds = %168 +172: ; preds = %170 call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.24) #12 br label %.loopexit -.loopexit: ; preds = %166, %165, %170, %167 +.loopexit: ; preds = %168, %167, %172, %169 ret void } diff --git a/bench/libquic/optimized/url_parse.ll b/bench/libquic/optimized/url_parse.ll index f3690e7d3d3..b08a358fad2 100644 --- a/bench/libquic/optimized/url_parse.ll +++ b/bench/libquic/optimized/url_parse.ll @@ -4881,7 +4881,7 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 %33 = getelementptr inbounds nuw i8, ptr %3, i64 48 %34 = getelementptr inbounds nuw i8, ptr %3, i64 56 %35 = icmp eq i32 %27, -1 - br i1 %35, label %36, label %.lr.ph.preheader.i30 + br i1 %35, label %36, label %43 36: ; preds = %.thread, %26 %37 = phi ptr [ %25, %.thread ], [ %34, %26 ] @@ -4898,105 +4898,111 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 store i32 -1, ptr %42, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -.lr.ph.preheader.i30: ; preds = %26 - %43 = sext i32 %spec.select.i to i64 - %44 = sext i32 %1 to i64 +43: ; preds = %26 + %44 = icmp sgt i32 %27, 0 + br i1 %44, label %.lr.ph.preheader.i30, label %._crit_edge.thread.i + +.lr.ph.preheader.i30: ; preds = %43 + %45 = sext i32 %spec.select.i to i64 + %46 = sext i32 %1 to i64 br label %.lr.ph.i31 -._crit_edge.i: ; preds = %55 - %45 = icmp sgt i32 %.139.i, -1 - br i1 %45, label %56, label %._crit_edge.thread.i - -.lr.ph.i31: ; preds = %55, %.lr.ph.preheader.i30 - %indvars.iv.i32 = phi i64 [ %43, %.lr.ph.preheader.i30 ], [ %indvars.iv.next.i33, %55 ] - %.058.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.1.i, %55 ] - %.03857.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.139.i, %55 ] - %46 = getelementptr inbounds i8, ptr %0, i64 %indvars.iv.i32 - %47 = load i8, ptr %46, align 1, !tbaa !21 - switch i8 %47, label %55 [ - i8 63, label %48 - i8 35, label %52 +._crit_edge.i: ; preds = %57 + %47 = icmp sgt i32 %.139.i, -1 + br i1 %47, label %58, label %._crit_edge.thread.i + +.lr.ph.i31: ; preds = %57, %.lr.ph.preheader.i30 + %indvars.iv.i32 = phi i64 [ %45, %.lr.ph.preheader.i30 ], [ %indvars.iv.next.i33, %57 ] + %.058.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.1.i, %57 ] + %.03857.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.139.i, %57 ] + %48 = getelementptr inbounds i8, ptr %0, i64 %indvars.iv.i32 + %49 = load i8, ptr %48, align 1, !tbaa !21 + switch i8 %49, label %57 [ + i8 63, label %50 + i8 35, label %54 ] -48: ; preds = %.lr.ph.i31 - %49 = icmp slt i32 %.03857.i, 0 - %50 = icmp slt i32 %.058.i, 0 - %or.cond.i = select i1 %49, i1 %50, i1 false - %51 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select.i34 = select i1 %or.cond.i, i32 %51, i32 %.058.i - br label %55 - -52: ; preds = %.lr.ph.i31 - %53 = icmp slt i32 %.03857.i, 0 - %54 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select47.i = select i1 %53, i32 %54, i32 %.03857.i - br label %55 - -55: ; preds = %52, %48, %.lr.ph.i31 - %.139.i = phi i32 [ %.03857.i, %.lr.ph.i31 ], [ %.03857.i, %48 ], [ %spec.select47.i, %52 ] - %.1.i = phi i32 [ %.058.i, %.lr.ph.i31 ], [ %spec.select.i34, %48 ], [ %.058.i, %52 ] +50: ; preds = %.lr.ph.i31 + %51 = icmp slt i32 %.03857.i, 0 + %52 = icmp slt i32 %.058.i, 0 + %or.cond.i = select i1 %51, i1 %52, i1 false + %53 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select.i34 = select i1 %or.cond.i, i32 %53, i32 %.058.i + br label %57 + +54: ; preds = %.lr.ph.i31 + %55 = icmp slt i32 %.03857.i, 0 + %56 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select47.i = select i1 %55, i32 %56, i32 %.03857.i + br label %57 + +57: ; preds = %54, %50, %.lr.ph.i31 + %.139.i = phi i32 [ %.03857.i, %.lr.ph.i31 ], [ %.03857.i, %50 ], [ %spec.select47.i, %54 ] + %.1.i = phi i32 [ %.058.i, %.lr.ph.i31 ], [ %spec.select.i34, %50 ], [ %.058.i, %54 ] %indvars.iv.next.i33 = add nsw i64 %indvars.iv.i32, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next.i33, %44 + %exitcond.not = icmp eq i64 %indvars.iv.next.i33, %46 br i1 %exitcond.not, label %._crit_edge.i, label %.lr.ph.i31, !llvm.loop !49 -56: ; preds = %._crit_edge.i - %57 = add nuw nsw i32 %.139.i, 1 - %58 = sub nsw i32 %1, %57 - %.sroa.2.0.insert.ext.i.i = zext i32 %58 to i64 +58: ; preds = %._crit_edge.i + %59 = add nuw nsw i32 %.139.i, 1 + %60 = sub nsw i32 %1, %59 + %.sroa.2.0.insert.ext.i.i = zext i32 %60 to i64 %.sroa.2.0.insert.shift.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i.i, 32 - %.sroa.0.0.insert.ext.i.i = zext nneg i32 %57 to i64 + %.sroa.0.0.insert.ext.i.i = zext nneg i32 %59 to i64 %.sroa.0.0.insert.insert.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i store i64 %.sroa.0.0.insert.insert.i.i, ptr %34, align 4 - br label %60 + br label %62 -._crit_edge.thread.i: ; preds = %._crit_edge.i +._crit_edge.thread.i: ; preds = %._crit_edge.i, %43 + %.0.lcssa64.i = phi i32 [ %.1.i, %._crit_edge.i ], [ -1, %43 ] store i32 0, ptr %34, align 4, !tbaa !3 - %59 = getelementptr inbounds nuw i8, ptr %3, i64 60 - store i32 -1, ptr %59, align 4, !tbaa !8 - br label %60 - -60: ; preds = %._crit_edge.thread.i, %56 - %.041.i = phi i32 [ %.139.i, %56 ], [ %1, %._crit_edge.thread.i ] - %61 = icmp sgt i32 %.1.i, -1 - br i1 %61, label %62, label %65 - -62: ; preds = %60 - %63 = add nuw nsw i32 %.1.i, 1 - %64 = sub nsw i32 %.041.i, %63 - %.sroa.2.0.insert.ext.i48.i = zext i32 %64 to i64 + %61 = getelementptr inbounds nuw i8, ptr %3, i64 60 + store i32 -1, ptr %61, align 4, !tbaa !8 + br label %62 + +62: ; preds = %._crit_edge.thread.i, %58 + %.0.lcssa63.i = phi i32 [ %.1.i, %58 ], [ %.0.lcssa64.i, %._crit_edge.thread.i ] + %.041.i = phi i32 [ %.139.i, %58 ], [ %1, %._crit_edge.thread.i ] + %63 = icmp sgt i32 %.0.lcssa63.i, -1 + br i1 %63, label %64, label %67 + +64: ; preds = %62 + %65 = add nuw nsw i32 %.0.lcssa63.i, 1 + %66 = sub nsw i32 %.041.i, %65 + %.sroa.2.0.insert.ext.i48.i = zext i32 %66 to i64 %.sroa.2.0.insert.shift.i49.i = shl nuw i64 %.sroa.2.0.insert.ext.i48.i, 32 - %.sroa.0.0.insert.ext.i50.i = zext nneg i32 %63 to i64 + %.sroa.0.0.insert.ext.i50.i = zext nneg i32 %65 to i64 %.sroa.0.0.insert.insert.i51.i = or disjoint i64 %.sroa.2.0.insert.shift.i49.i, %.sroa.0.0.insert.ext.i50.i store i64 %.sroa.0.0.insert.insert.i51.i, ptr %33, align 4 - br label %67 + br label %69 -65: ; preds = %60 +67: ; preds = %62 store i32 0, ptr %33, align 4, !tbaa !3 - %66 = getelementptr inbounds nuw i8, ptr %3, i64 52 - store i32 -1, ptr %66, align 4, !tbaa !8 - br label %67 + %68 = getelementptr inbounds nuw i8, ptr %3, i64 52 + store i32 -1, ptr %68, align 4, !tbaa !8 + br label %69 -67: ; preds = %65, %62 - %.143.i = phi i32 [ %.1.i, %62 ], [ %.041.i, %65 ] +69: ; preds = %67, %64 + %.143.i = phi i32 [ %.0.lcssa63.i, %64 ], [ %.041.i, %67 ] %.not.i = icmp eq i32 %.143.i, %spec.select.i - br i1 %.not.i, label %70, label %68 + br i1 %.not.i, label %72, label %70 -68: ; preds = %67 - %69 = sub nsw i32 %.143.i, %spec.select.i - %.sroa.2.0.insert.ext.i52.i = zext i32 %69 to i64 +70: ; preds = %69 + %71 = sub nsw i32 %.143.i, %spec.select.i + %.sroa.2.0.insert.ext.i52.i = zext i32 %71 to i64 %.sroa.2.0.insert.shift.i53.i = shl nuw i64 %.sroa.2.0.insert.ext.i52.i, 32 %.sroa.0.0.insert.ext.i54.i = zext i32 %spec.select.i to i64 %.sroa.0.0.insert.insert.i55.i = or disjoint i64 %.sroa.2.0.insert.shift.i53.i, %.sroa.0.0.insert.ext.i54.i store i64 %.sroa.0.0.insert.insert.i55.i, ptr %32, align 4 br label %_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -70: ; preds = %67 +72: ; preds = %69 store i32 0, ptr %32, align 4, !tbaa !3 - %71 = getelementptr inbounds nuw i8, ptr %3, i64 44 - store i32 -1, ptr %71, align 4, !tbaa !8 + %73 = getelementptr inbounds nuw i8, ptr %3, i64 44 + store i32 -1, ptr %73, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %68, %70 +_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %70, %72 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #15 ret void } @@ -5104,7 +5110,7 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 %33 = getelementptr inbounds nuw i8, ptr %3, i64 48 %34 = getelementptr inbounds nuw i8, ptr %3, i64 56 %35 = icmp eq i32 %27, -1 - br i1 %35, label %36, label %.lr.ph.preheader.i30 + br i1 %35, label %36, label %43 36: ; preds = %.thread, %26 %37 = phi ptr [ %25, %.thread ], [ %34, %26 ] @@ -5121,105 +5127,111 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 store i32 -1, ptr %42, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -.lr.ph.preheader.i30: ; preds = %26 - %43 = sext i32 %spec.select.i to i64 - %44 = sext i32 %1 to i64 +43: ; preds = %26 + %44 = icmp sgt i32 %27, 0 + br i1 %44, label %.lr.ph.preheader.i30, label %._crit_edge.thread.i + +.lr.ph.preheader.i30: ; preds = %43 + %45 = sext i32 %spec.select.i to i64 + %46 = sext i32 %1 to i64 br label %.lr.ph.i31 -._crit_edge.i: ; preds = %55 - %45 = icmp sgt i32 %.139.i, -1 - br i1 %45, label %56, label %._crit_edge.thread.i - -.lr.ph.i31: ; preds = %55, %.lr.ph.preheader.i30 - %indvars.iv.i32 = phi i64 [ %43, %.lr.ph.preheader.i30 ], [ %indvars.iv.next.i33, %55 ] - %.058.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.1.i, %55 ] - %.03857.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.139.i, %55 ] - %46 = getelementptr inbounds i16, ptr %0, i64 %indvars.iv.i32 - %47 = load i16, ptr %46, align 2, !tbaa !25 - switch i16 %47, label %55 [ - i16 63, label %48 - i16 35, label %52 +._crit_edge.i: ; preds = %57 + %47 = icmp sgt i32 %.139.i, -1 + br i1 %47, label %58, label %._crit_edge.thread.i + +.lr.ph.i31: ; preds = %57, %.lr.ph.preheader.i30 + %indvars.iv.i32 = phi i64 [ %45, %.lr.ph.preheader.i30 ], [ %indvars.iv.next.i33, %57 ] + %.058.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.1.i, %57 ] + %.03857.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.139.i, %57 ] + %48 = getelementptr inbounds i16, ptr %0, i64 %indvars.iv.i32 + %49 = load i16, ptr %48, align 2, !tbaa !25 + switch i16 %49, label %57 [ + i16 63, label %50 + i16 35, label %54 ] -48: ; preds = %.lr.ph.i31 - %49 = icmp slt i32 %.03857.i, 0 - %50 = icmp slt i32 %.058.i, 0 - %or.cond.i = select i1 %49, i1 %50, i1 false - %51 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select.i34 = select i1 %or.cond.i, i32 %51, i32 %.058.i - br label %55 - -52: ; preds = %.lr.ph.i31 - %53 = icmp slt i32 %.03857.i, 0 - %54 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select47.i = select i1 %53, i32 %54, i32 %.03857.i - br label %55 - -55: ; preds = %52, %48, %.lr.ph.i31 - %.139.i = phi i32 [ %.03857.i, %.lr.ph.i31 ], [ %.03857.i, %48 ], [ %spec.select47.i, %52 ] - %.1.i = phi i32 [ %.058.i, %.lr.ph.i31 ], [ %spec.select.i34, %48 ], [ %.058.i, %52 ] +50: ; preds = %.lr.ph.i31 + %51 = icmp slt i32 %.03857.i, 0 + %52 = icmp slt i32 %.058.i, 0 + %or.cond.i = select i1 %51, i1 %52, i1 false + %53 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select.i34 = select i1 %or.cond.i, i32 %53, i32 %.058.i + br label %57 + +54: ; preds = %.lr.ph.i31 + %55 = icmp slt i32 %.03857.i, 0 + %56 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select47.i = select i1 %55, i32 %56, i32 %.03857.i + br label %57 + +57: ; preds = %54, %50, %.lr.ph.i31 + %.139.i = phi i32 [ %.03857.i, %.lr.ph.i31 ], [ %.03857.i, %50 ], [ %spec.select47.i, %54 ] + %.1.i = phi i32 [ %.058.i, %.lr.ph.i31 ], [ %spec.select.i34, %50 ], [ %.058.i, %54 ] %indvars.iv.next.i33 = add nsw i64 %indvars.iv.i32, 1 - %exitcond.not = icmp eq i64 %indvars.iv.next.i33, %44 + %exitcond.not = icmp eq i64 %indvars.iv.next.i33, %46 br i1 %exitcond.not, label %._crit_edge.i, label %.lr.ph.i31, !llvm.loop !50 -56: ; preds = %._crit_edge.i - %57 = add nuw nsw i32 %.139.i, 1 - %58 = sub nsw i32 %1, %57 - %.sroa.2.0.insert.ext.i.i = zext i32 %58 to i64 +58: ; preds = %._crit_edge.i + %59 = add nuw nsw i32 %.139.i, 1 + %60 = sub nsw i32 %1, %59 + %.sroa.2.0.insert.ext.i.i = zext i32 %60 to i64 %.sroa.2.0.insert.shift.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i.i, 32 - %.sroa.0.0.insert.ext.i.i = zext nneg i32 %57 to i64 + %.sroa.0.0.insert.ext.i.i = zext nneg i32 %59 to i64 %.sroa.0.0.insert.insert.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i store i64 %.sroa.0.0.insert.insert.i.i, ptr %34, align 4 - br label %60 + br label %62 -._crit_edge.thread.i: ; preds = %._crit_edge.i +._crit_edge.thread.i: ; preds = %._crit_edge.i, %43 + %.0.lcssa64.i = phi i32 [ %.1.i, %._crit_edge.i ], [ -1, %43 ] store i32 0, ptr %34, align 4, !tbaa !3 - %59 = getelementptr inbounds nuw i8, ptr %3, i64 60 - store i32 -1, ptr %59, align 4, !tbaa !8 - br label %60 - -60: ; preds = %._crit_edge.thread.i, %56 - %.041.i = phi i32 [ %.139.i, %56 ], [ %1, %._crit_edge.thread.i ] - %61 = icmp sgt i32 %.1.i, -1 - br i1 %61, label %62, label %65 - -62: ; preds = %60 - %63 = add nuw nsw i32 %.1.i, 1 - %64 = sub nsw i32 %.041.i, %63 - %.sroa.2.0.insert.ext.i48.i = zext i32 %64 to i64 + %61 = getelementptr inbounds nuw i8, ptr %3, i64 60 + store i32 -1, ptr %61, align 4, !tbaa !8 + br label %62 + +62: ; preds = %._crit_edge.thread.i, %58 + %.0.lcssa63.i = phi i32 [ %.1.i, %58 ], [ %.0.lcssa64.i, %._crit_edge.thread.i ] + %.041.i = phi i32 [ %.139.i, %58 ], [ %1, %._crit_edge.thread.i ] + %63 = icmp sgt i32 %.0.lcssa63.i, -1 + br i1 %63, label %64, label %67 + +64: ; preds = %62 + %65 = add nuw nsw i32 %.0.lcssa63.i, 1 + %66 = sub nsw i32 %.041.i, %65 + %.sroa.2.0.insert.ext.i48.i = zext i32 %66 to i64 %.sroa.2.0.insert.shift.i49.i = shl nuw i64 %.sroa.2.0.insert.ext.i48.i, 32 - %.sroa.0.0.insert.ext.i50.i = zext nneg i32 %63 to i64 + %.sroa.0.0.insert.ext.i50.i = zext nneg i32 %65 to i64 %.sroa.0.0.insert.insert.i51.i = or disjoint i64 %.sroa.2.0.insert.shift.i49.i, %.sroa.0.0.insert.ext.i50.i store i64 %.sroa.0.0.insert.insert.i51.i, ptr %33, align 4 - br label %67 + br label %69 -65: ; preds = %60 +67: ; preds = %62 store i32 0, ptr %33, align 4, !tbaa !3 - %66 = getelementptr inbounds nuw i8, ptr %3, i64 52 - store i32 -1, ptr %66, align 4, !tbaa !8 - br label %67 + %68 = getelementptr inbounds nuw i8, ptr %3, i64 52 + store i32 -1, ptr %68, align 4, !tbaa !8 + br label %69 -67: ; preds = %65, %62 - %.143.i = phi i32 [ %.1.i, %62 ], [ %.041.i, %65 ] +69: ; preds = %67, %64 + %.143.i = phi i32 [ %.0.lcssa63.i, %64 ], [ %.041.i, %67 ] %.not.i = icmp eq i32 %.143.i, %spec.select.i - br i1 %.not.i, label %70, label %68 + br i1 %.not.i, label %72, label %70 -68: ; preds = %67 - %69 = sub nsw i32 %.143.i, %spec.select.i - %.sroa.2.0.insert.ext.i52.i = zext i32 %69 to i64 +70: ; preds = %69 + %71 = sub nsw i32 %.143.i, %spec.select.i + %.sroa.2.0.insert.ext.i52.i = zext i32 %71 to i64 %.sroa.2.0.insert.shift.i53.i = shl nuw i64 %.sroa.2.0.insert.ext.i52.i, 32 %.sroa.0.0.insert.ext.i54.i = zext i32 %spec.select.i to i64 %.sroa.0.0.insert.insert.i55.i = or disjoint i64 %.sroa.2.0.insert.shift.i53.i, %.sroa.0.0.insert.ext.i54.i store i64 %.sroa.0.0.insert.insert.i55.i, ptr %32, align 4 br label %_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -70: ; preds = %67 +72: ; preds = %69 store i32 0, ptr %32, align 4, !tbaa !3 - %71 = getelementptr inbounds nuw i8, ptr %3, i64 44 - store i32 -1, ptr %71, align 4, !tbaa !8 + %73 = getelementptr inbounds nuw i8, ptr %3, i64 44 + store i32 -1, ptr %73, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %68, %70 +_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %70, %72 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #15 ret void } diff --git a/bench/llvm/optimized/BTFParser.ll b/bench/llvm/optimized/BTFParser.ll index 30a720e4354..675d3d34dfc 100644 --- a/bench/llvm/optimized/BTFParser.ll +++ b/bench/llvm/optimized/BTFParser.ll @@ -623,68 +623,74 @@ _ZN12_GLOBAL__N_13ErrD2Ev.exit61: ; preds = %_ZNKSt7__cxx1112bas %162 = zext i32 %148 to i64 %163 = zext i32 %149 to i64 %.sroa.speculated3.i = call i64 @llvm.umin.i64(i64 %.sroa.2.0.copyload.i, i64 %162) - %164 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload.i, i64 %.sroa.speculated3.i - %165 = call i64 @llvm.usub.sat.i64(i64 %163, i64 %.sroa.speculated3.i) - store ptr %164, ptr %1, align 8, !tbaa !40 + %164 = icmp ult i64 %.sroa.2.0.copyload.i, %163 + %.sroa.speculate.load.false.sroa.speculated.i = call i64 @llvm.umax.i64(i64 %163, i64 %.sroa.speculated3.i) + %.sroa.speculated.i = select i1 %164, i64 %.sroa.2.0.copyload.i, i64 %.sroa.speculate.load.false.sroa.speculated.i + %165 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload.i, i64 %.sroa.speculated3.i + %166 = sub i64 %.sroa.speculated.i, %.sroa.speculated3.i + store ptr %165, ptr %1, align 8, !tbaa !40 %.sroa.44.0..sroa_idx = getelementptr inbounds nuw i8, ptr %1, i64 8 - store i64 %165, ptr %.sroa.44.0..sroa_idx, align 8, !tbaa !41 + store i64 %166, ptr %.sroa.44.0..sroa_idx, align 8, !tbaa !41 %.not49 = icmp eq i32 %145, 0 - br i1 %.not49, label %_ZN4llvm5ErrorD2Ev.exit81, label %166 - -166: ; preds = %161 - %167 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %168 = load ptr, ptr %167, align 8, !tbaa !101 - %169 = getelementptr inbounds nuw i8, ptr %168, i64 1 - %170 = load i8, ptr %169, align 1, !tbaa !102, !range !104, !noundef !105 - %171 = trunc nuw i8 %170 to i1 - br i1 %171, label %172, label %_ZN4llvm5ErrorD2Ev.exit81 - -172: ; preds = %166 - %173 = zext i32 %150 to i64 - %174 = zext i32 %151 to i64 - %.sroa.speculated3.i76 = call i64 @llvm.umin.i64(i64 %.sroa.2.0.copyload.i, i64 %173) - %175 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload.i, i64 %.sroa.speculated3.i76 - %176 = call i64 @llvm.usub.sat.i64(i64 %174, i64 %.sroa.speculated3.i76) - call void @_ZN4llvm9BTFParser14parseTypesInfoERNS0_12ParseContextEmNS_9StringRefE(ptr dead_on_unwind writable sret(%"class.llvm::Error") align 8 %0, ptr noundef nonnull align 8 dereferenceable(104) %1, ptr noundef nonnull align 8 dereferenceable(40) %2, i64 noundef %173, ptr %175, i64 %176) - %177 = load ptr, ptr %0, align 8, !tbaa !35 - %.not94 = icmp eq ptr %177, null + br i1 %.not49, label %_ZN4llvm5ErrorD2Ev.exit81, label %167 + +167: ; preds = %161 + %168 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %169 = load ptr, ptr %168, align 8, !tbaa !101 + %170 = getelementptr inbounds nuw i8, ptr %169, i64 1 + %171 = load i8, ptr %170, align 1, !tbaa !102, !range !104, !noundef !105 + %172 = trunc nuw i8 %171 to i1 + br i1 %172, label %173, label %_ZN4llvm5ErrorD2Ev.exit81 + +173: ; preds = %167 + %174 = zext i32 %150 to i64 + %175 = zext i32 %151 to i64 + %.sroa.speculated3.i76 = call i64 @llvm.umin.i64(i64 %.sroa.2.0.copyload.i, i64 %174) + %176 = icmp ult i64 %.sroa.2.0.copyload.i, %175 + %.sroa.speculate.load.false.sroa.speculated.i77 = call i64 @llvm.umax.i64(i64 %175, i64 %.sroa.speculated3.i76) + %.sroa.speculated.i78 = select i1 %176, i64 %.sroa.2.0.copyload.i, i64 %.sroa.speculate.load.false.sroa.speculated.i77 + %177 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload.i, i64 %.sroa.speculated3.i76 + %178 = sub i64 %.sroa.speculated.i78, %.sroa.speculated3.i76 + call void @_ZN4llvm9BTFParser14parseTypesInfoERNS0_12ParseContextEmNS_9StringRefE(ptr dead_on_unwind writable sret(%"class.llvm::Error") align 8 %0, ptr noundef nonnull align 8 dereferenceable(104) %1, ptr noundef nonnull align 8 dereferenceable(40) %2, i64 noundef %174, ptr %177, i64 %178) + %179 = load ptr, ptr %0, align 8, !tbaa !35 + %.not94 = icmp eq ptr %179, null br i1 %.not94, label %_ZN4llvm5ErrorD2Ev.exit81, label %.critedge -_ZN4llvm5ErrorD2Ev.exit81: ; preds = %161, %166, %172 +_ZN4llvm5ErrorD2Ev.exit81: ; preds = %161, %167, %173 store ptr null, ptr %0, align 8, !tbaa !35 br label %.critedge -.critedge: ; preds = %153, %157, %_ZN4llvm5ErrorD2Ev.exit81, %172, %_ZN12_GLOBAL__N_13ErrD2Ev.exit56, %_ZN12_GLOBAL__N_13ErrD2Ev.exit61, %139, %136, %_ZN12_GLOBAL__N_13ErrD2Ev.exit52, %_ZN12_GLOBAL__N_13ErrD2Ev.exit - %178 = load ptr, ptr %48, align 8, !tbaa !35 - %179 = icmp eq ptr %178, null - br i1 %179, label %184, label %180 +.critedge: ; preds = %153, %157, %_ZN4llvm5ErrorD2Ev.exit81, %173, %_ZN12_GLOBAL__N_13ErrD2Ev.exit56, %_ZN12_GLOBAL__N_13ErrD2Ev.exit61, %139, %136, %_ZN12_GLOBAL__N_13ErrD2Ev.exit52, %_ZN12_GLOBAL__N_13ErrD2Ev.exit + %180 = load ptr, ptr %48, align 8, !tbaa !35 + %181 = icmp eq ptr %180, null + br i1 %181, label %186, label %182 -180: ; preds = %.critedge - %181 = load ptr, ptr %178, align 8, !tbaa !9 - %182 = getelementptr inbounds nuw i8, ptr %181, i64 8 - %183 = load ptr, ptr %182, align 8 - call void %183(ptr noundef nonnull align 8 dereferenceable(8) %178) #23 - br label %184 +182: ; preds = %.critedge + %183 = load ptr, ptr %180, align 8, !tbaa !9 + %184 = getelementptr inbounds nuw i8, ptr %183, i64 8 + %185 = load ptr, ptr %184, align 8 + call void %185(ptr noundef nonnull align 8 dereferenceable(8) %180) #23 + br label %186 -184: ; preds = %180, %.critedge +186: ; preds = %182, %.critedge call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #23 %.pre = load i8, ptr %47, align 8 - %185 = trunc i8 %.pre to i1 - br i1 %185, label %186, label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit + %187 = trunc i8 %.pre to i1 + br i1 %187, label %188, label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit -186: ; preds = %184 +188: ; preds = %186 %.pr = load ptr, ptr %13, align 8, !tbaa !30 %.not.i.i = icmp eq ptr %.pr, null br i1 %.not.i.i, label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit, label %_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i -_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i: ; preds = %186 - %187 = load ptr, ptr %.pr, align 8, !tbaa !9 - %188 = getelementptr inbounds nuw i8, ptr %187, i64 8 - %189 = load ptr, ptr %188, align 8 - call void %189(ptr noundef nonnull align 8 dereferenceable(8) %.pr) #23 +_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i: ; preds = %188 + %189 = load ptr, ptr %.pr, align 8, !tbaa !9 + %190 = getelementptr inbounds nuw i8, ptr %189, i64 8 + %191 = load ptr, ptr %190, align 8 + call void %191(ptr noundef nonnull align 8 dereferenceable(8) %.pr) #23 br label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit -_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit: ; preds = %186, %_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i, %.thread95, %184 +_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit: ; preds = %188, %_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i, %.thread95, %186 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #23 ret void } @@ -10890,9 +10896,6 @@ declare i64 @llvm.umin.i64(i64, i64) #22 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umax.i32(i32, i32) #22 -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare i64 @llvm.usub.sat.i64(i64, i64) #22 - ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i64 @llvm.smin.i64(i64, i64) #22 diff --git a/bench/llvm/optimized/MachOObjectFile.ll b/bench/llvm/optimized/MachOObjectFile.ll index cce76096e6a..06cb77daaae 100644 --- a/bench/llvm/optimized/MachOObjectFile.ll +++ b/bench/llvm/optimized/MachOObjectFile.ll @@ -21774,7 +21774,7 @@ _ZNK4llvm9StringRef5rfindEcm.exit: ; preds = %6 %or.cond = icmp eq i64 %.0.i, 1 br i1 %or.cond, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %11 -_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader: ; preds = %5, %42, %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, %_ZNK4llvm9StringRef5rfindEcm.exit194, %48, %_ZN4llvmeqENS_9StringRefES0_.exit206, %_ZN4llvmeqENS_9StringRefES0_.exit210, %_ZNK4llvm9StringRef11starts_withES0_.exit, %_ZNK4llvm9StringRef5rfindEcm.exit183, %_ZN4llvmeqENS_9StringRefES0_.exit.thread443, %_ZNK4llvm9StringRef5rfindEcm.exit +_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader: ; preds = %5, %42, %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, %_ZNK4llvm9StringRef5rfindEcm.exit194, %_ZN4llvmeqENS_9StringRefES0_.exit206, %_ZN4llvmeqENS_9StringRefES0_.exit210, %_ZNK4llvm9StringRef11starts_withES0_.exit, %_ZNK4llvm9StringRef5rfindEcm.exit183, %_ZN4llvmeqENS_9StringRefES0_.exit.thread443, %_ZNK4llvm9StringRef5rfindEcm.exit br label %_ZNK4llvm9StringRef5rfindEcm.exit.thread 11: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit @@ -21900,247 +21900,240 @@ _ZN4llvmeqENS_9StringRefES0_.exit.thread443: ; preds = %_ZN4llvmeqENS_9Stri _ZNK4llvm9StringRef5rfindEcm.exit183: ; preds = %43 %or.cond3 = icmp eq i64 %.0.i180, 1 - br i1 %or.cond3, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %48 - -48: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit183 - %.sroa.speculated4.i184 = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0.i180) - %49 = sub i64 %1, %.sroa.speculated4.i184 - %.not.i188 = icmp ult i64 %49, 9 - br i1 %.not.i188, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %_ZNK4llvm9StringRef11starts_withES0_.exit - -_ZNK4llvm9StringRef11starts_withES0_.exit: ; preds = %48 - %50 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i184 - %bcmp.i189 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(9) %50, ptr noundef nonnull dereferenceable(9) @.str.156, i64 9) - %51 = icmp eq i32 %bcmp.i189, 0 - br i1 %51, label %_ZNK4llvm9StringRef11starts_withES0_.exit.thread, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader - -_ZNK4llvm9StringRef11starts_withES0_.exit.thread: ; preds = %_ZNK4llvm9StringRef11starts_withES0_.exit - %.sroa.speculated.i190 = tail call i64 @llvm.umin.i64(i64 %1, i64 %44) - br label %52 - -52: ; preds = %53, %_ZNK4llvm9StringRef11starts_withES0_.exit.thread - %.0.i191 = phi i64 [ %.sroa.speculated.i190, %_ZNK4llvm9StringRef11starts_withES0_.exit.thread ], [ %54, %53 ] + %48 = sub i64 %1, %.0.i180 + %.not.i188 = icmp ult i64 %48, 9 + %or.cond536 = select i1 %or.cond3, i1 true, i1 %.not.i188 + br i1 %or.cond536, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %_ZNK4llvm9StringRef11starts_withES0_.exit + +_ZNK4llvm9StringRef11starts_withES0_.exit: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit183 + %49 = getelementptr inbounds nuw i8, ptr %0, i64 %.0.i180 + %bcmp.i189 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(9) %49, ptr noundef nonnull dereferenceable(9) @.str.156, i64 9) + %50 = icmp eq i32 %bcmp.i189, 0 + br i1 %50, label %_ZNK4llvm9StringRef11starts_withES0_.exit.thread, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader + +_ZNK4llvm9StringRef11starts_withES0_.exit.thread: ; preds = %_ZNK4llvm9StringRef11starts_withES0_.exit, %51 + %.0.i191 = phi i64 [ %52, %51 ], [ %44, %_ZNK4llvm9StringRef11starts_withES0_.exit ] %.not.i192 = icmp eq i64 %.0.i191, 0 - br i1 %.not.i192, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %53 + br i1 %.not.i192, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %51 -53: ; preds = %52 - %54 = add i64 %.0.i191, -1 - %55 = getelementptr inbounds nuw i8, ptr %0, i64 %54 - %56 = load i8, ptr %55, align 1, !tbaa !229 - %57 = icmp eq i8 %56, 47 - br i1 %57, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %52, !llvm.loop !3865 +51: ; preds = %_ZNK4llvm9StringRef11starts_withES0_.exit.thread + %52 = add i64 %.0.i191, -1 + %53 = getelementptr inbounds nuw i8, ptr %0, i64 %52 + %54 = load i8, ptr %53, align 1, !tbaa !229 + %55 = icmp eq i8 %54, 47 + br i1 %55, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %_ZNK4llvm9StringRef11starts_withES0_.exit.thread, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit194: ; preds = %53, %52 +_ZNK4llvm9StringRef5rfindEcm.exit194: ; preds = %51, %_ZNK4llvm9StringRef11starts_withES0_.exit.thread %.sroa.speculated4.i195 = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0.i191) - %58 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i195 - %59 = sub i64 %1, %.sroa.speculated4.i195 - %.sroa.speculated.i196 = tail call i64 @llvm.umin.i64(i64 %59, i64 %.sroa.12.0) - %60 = add i64 %.0.i191, %.sroa.12.0 - %.sroa.speculated4.i199 = tail call i64 @llvm.umin.i64(i64 %1, i64 %60) - %61 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i199 - %62 = sub i64 %1, %.sroa.speculated4.i199 - %.sroa.speculated.i200 = tail call i64 @llvm.umin.i64(i64 %62, i64 11) - %.not.i203.not = icmp ugt i64 %.sroa.12.0, %59 - br i1 %.not.i203.not, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %63 - -63: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit194 - %64 = icmp eq i64 %.sroa.speculated.i196, 0 - br i1 %64, label %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, label %_ZN4llvmeqENS_9StringRefES0_.exit206 - -_ZN4llvmeqENS_9StringRefES0_.exit206: ; preds = %63 - %bcmp.i205 = tail call i32 @bcmp(ptr %58, ptr nonnull %12, i64 %.sroa.speculated.i196) - %65 = icmp eq i32 %bcmp.i205, 0 - %.not.i207 = icmp ugt i64 %62, 10 - %or.cond499 = select i1 %65, i1 %.not.i207, i1 false + %56 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i195 + %57 = sub i64 %1, %.sroa.speculated4.i195 + %.sroa.speculated.i196 = tail call i64 @llvm.umin.i64(i64 %57, i64 %.sroa.12.0) + %58 = add i64 %.0.i191, %.sroa.12.0 + %.sroa.speculated4.i199 = tail call i64 @llvm.umin.i64(i64 %1, i64 %58) + %59 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i199 + %60 = sub i64 %1, %.sroa.speculated4.i199 + %.sroa.speculated.i200 = tail call i64 @llvm.umin.i64(i64 %60, i64 11) + %.not.i203.not = icmp ugt i64 %.sroa.12.0, %57 + br i1 %.not.i203.not, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %61 + +61: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit194 + %62 = icmp eq i64 %.sroa.speculated.i196, 0 + br i1 %62, label %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, label %_ZN4llvmeqENS_9StringRefES0_.exit206 + +_ZN4llvmeqENS_9StringRefES0_.exit206: ; preds = %61 + %bcmp.i205 = tail call i32 @bcmp(ptr %56, ptr nonnull %12, i64 %.sroa.speculated.i196) + %63 = icmp eq i32 %bcmp.i205, 0 + %.not.i207 = icmp ugt i64 %60, 10 + %or.cond499 = select i1 %63, i1 %.not.i207, i1 false br i1 %or.cond499, label %_ZN4llvmeqENS_9StringRefES0_.exit210, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader -_ZN4llvmeqENS_9StringRefES0_.exit206.thread: ; preds = %63 - %.not.i207.old = icmp ugt i64 %62, 10 +_ZN4llvmeqENS_9StringRefES0_.exit206.thread: ; preds = %61 + %.not.i207.old = icmp ugt i64 %60, 10 br i1 %.not.i207.old, label %_ZN4llvmeqENS_9StringRefES0_.exit210, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader _ZN4llvmeqENS_9StringRefES0_.exit210: ; preds = %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, %_ZN4llvmeqENS_9StringRefES0_.exit206 - %bcmp.i209 = tail call i32 @bcmp(ptr %61, ptr nonnull @.str.155, i64 %.sroa.speculated.i200) - %66 = icmp eq i32 %bcmp.i209, 0 - br i1 %66, label %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader + %bcmp.i209 = tail call i32 @bcmp(ptr %59, ptr nonnull @.str.155, i64 %.sroa.speculated.i200) + %64 = icmp eq i32 %bcmp.i209, 0 + br i1 %64, label %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader _ZN4llvmeqENS_9StringRefES0_.exit210.thread: ; preds = %_ZN4llvmeqENS_9StringRefES0_.exit210 store i8 1, ptr %2, align 1, !tbaa !599 br label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZNK4llvm9StringRef5rfindEcm.exit.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, %67 - %.0.i212 = phi i64 [ %68, %67 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader ] +_ZNK4llvm9StringRef5rfindEcm.exit.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, %65 + %.0.i212 = phi i64 [ %66, %65 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader ] %.not.i213 = icmp eq i64 %.0.i212, 0 - br i1 %.not.i213, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %67 + br i1 %.not.i213, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %65 -67: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread - %68 = add i64 %.0.i212, -1 - %69 = getelementptr inbounds nuw i8, ptr %0, i64 %68 - %70 = load i8, ptr %69, align 1, !tbaa !229 - %71 = icmp eq i8 %70, 46 - br i1 %71, label %_ZNK4llvm9StringRef5rfindEcm.exit215, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread, !llvm.loop !3865 +65: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread + %66 = add i64 %.0.i212, -1 + %67 = getelementptr inbounds nuw i8, ptr %0, i64 %66 + %68 = load i8, ptr %67, align 1, !tbaa !229 + %69 = icmp eq i8 %68, 46 + br i1 %69, label %_ZNK4llvm9StringRef5rfindEcm.exit215, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit215: ; preds = %67 - %72 = getelementptr inbounds nuw i8, ptr %0, i64 %68 +_ZNK4llvm9StringRef5rfindEcm.exit215: ; preds = %65 + %70 = getelementptr inbounds nuw i8, ptr %0, i64 %66 %or.cond5 = icmp eq i64 %.0.i212, 1 - br i1 %or.cond5, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %73 + br i1 %or.cond5, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %71 -73: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit215 - %74 = sub i64 %1, %68 - switch i64 %74, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread [ +71: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit215 + %72 = sub i64 %1, %66 + switch i64 %72, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread [ i64 6, label %_ZN4llvmneENS_9StringRefES0_.exit223 i64 4, label %_ZN4llvmneENS_9StringRefES0_.exit288 ] -_ZN4llvmneENS_9StringRefES0_.exit223: ; preds = %73 - %bcmp.i.i222 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %72, ptr noundef nonnull dereferenceable(6) @.str.157, i64 6) +_ZN4llvmneENS_9StringRefES0_.exit223: ; preds = %71 + %bcmp.i.i222 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %70, ptr noundef nonnull dereferenceable(6) @.str.157, i64 6) %.not493 = icmp eq i32 %bcmp.i.i222, 0 br i1 %.not493, label %_ZN4llvmneENS_9StringRefES0_.exit223.thread462, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread _ZN4llvmneENS_9StringRefES0_.exit223.thread462: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit223 - %75 = icmp ugt i64 %68, 2 - br i1 %75, label %_ZN4llvmeqENS_9StringRefES0_.exit231, label %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 + %73 = icmp ugt i64 %66, 2 + br i1 %73, label %_ZN4llvmeqENS_9StringRefES0_.exit231, label %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 _ZN4llvmeqENS_9StringRefES0_.exit231: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 - %76 = add i64 %.0.i212, -3 - %77 = getelementptr inbounds nuw i8, ptr %0, i64 %76 - %lhsc511 = load i8, ptr %77, align 1 + %74 = add i64 %.0.i212, -3 + %75 = getelementptr inbounds nuw i8, ptr %0, i64 %74 + %lhsc511 = load i8, ptr %75, align 1 %lhsc511.fr = freeze i8 %lhsc511 - %78 = icmp eq i8 %lhsc511.fr, 46 - %spec.select = select i1 %78, i64 %76, i64 %68 + %76 = icmp eq i8 %lhsc511.fr, 46 + %spec.select = select i1 %76, i64 %74, i64 %66 br label %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 _ZN4llvmeqENS_9StringRefES0_.exit231.thread466: ; preds = %_ZN4llvmeqENS_9StringRefES0_.exit231, %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 - %.0 = phi i64 [ %68, %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 ], [ %spec.select, %_ZN4llvmeqENS_9StringRefES0_.exit231 ] + %.0 = phi i64 [ %66, %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 ], [ %spec.select, %_ZN4llvmeqENS_9StringRefES0_.exit231 ] %.sroa.speculated.i232 = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0) - br label %79 + br label %77 -79: ; preds = %80, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 - %.0.i233 = phi i64 [ %.sroa.speculated.i232, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 ], [ %81, %80 ] +77: ; preds = %78, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 + %.0.i233 = phi i64 [ %.sroa.speculated.i232, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 ], [ %79, %78 ] %.not.i234 = icmp eq i64 %.0.i233, 0 - br i1 %.not.i234, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %80 + br i1 %.not.i234, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %78 -80: ; preds = %79 - %81 = add i64 %.0.i233, -1 - %82 = getelementptr inbounds nuw i8, ptr %0, i64 %81 - %83 = load i8, ptr %82, align 1, !tbaa !229 - %84 = icmp eq i8 %83, 47 - br i1 %84, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %79, !llvm.loop !3865 +78: ; preds = %77 + %79 = add i64 %.0.i233, -1 + %80 = getelementptr inbounds nuw i8, ptr %0, i64 %79 + %81 = load i8, ptr %80, align 1, !tbaa !229 + %82 = icmp eq i8 %81, 47 + br i1 %82, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %77, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit236.preheader: ; preds = %80, %79 +_ZNK4llvm9StringRef5rfindEcm.exit236.preheader: ; preds = %78, %77 br label %_ZNK4llvm9StringRef5rfindEcm.exit236 -_ZNK4llvm9StringRef5rfindEcm.exit236: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, %85 - %.0.i238 = phi i64 [ %86, %85 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader ] +_ZNK4llvm9StringRef5rfindEcm.exit236: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, %83 + %.0.i238 = phi i64 [ %84, %83 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader ] %.not.i239 = icmp eq i64 %.0.i238, 0 - br i1 %.not.i239, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %85 + br i1 %.not.i239, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %83 -85: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236 - %86 = add i64 %.0.i238, -1 - %87 = getelementptr inbounds nuw i8, ptr %0, i64 %86 - %88 = load i8, ptr %87, align 1, !tbaa !229 - %89 = icmp eq i8 %88, 95 - br i1 %89, label %_ZNK4llvm9StringRef5rfindEcm.exit241, label %_ZNK4llvm9StringRef5rfindEcm.exit236, !llvm.loop !3865 +83: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236 + %84 = add i64 %.0.i238, -1 + %85 = getelementptr inbounds nuw i8, ptr %0, i64 %84 + %86 = load i8, ptr %85, align 1, !tbaa !229 + %87 = icmp eq i8 %86, 95 + br i1 %87, label %_ZNK4llvm9StringRef5rfindEcm.exit241, label %_ZNK4llvm9StringRef5rfindEcm.exit236, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit241: ; preds = %85 - %90 = getelementptr inbounds nuw i8, ptr %0, i64 %86 - %.not145 = icmp eq i64 %86, %.0.i233 - br i1 %.not145, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %91 +_ZNK4llvm9StringRef5rfindEcm.exit241: ; preds = %83 + %88 = getelementptr inbounds nuw i8, ptr %0, i64 %84 + %.not145 = icmp eq i64 %84, %.0.i233 + br i1 %.not145, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %89 -91: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit241 +89: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit241 %.sroa.speculated3.i = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0.i233) - %92 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i - %93 = tail call i64 @llvm.usub.sat.i64(i64 %86, i64 %.sroa.speculated3.i) - %94 = icmp ugt i64 %.0, %1 - %.sroa.speculate.load.false.sroa.speculated.i246 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %86) - %.sroa.speculated.i247 = select i1 %94, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i246 - %95 = sub i64 %.sroa.speculated.i247, %86 - store ptr %90, ptr %3, align 8, !tbaa !189 + %90 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i + %91 = tail call i64 @llvm.usub.sat.i64(i64 %84, i64 %.sroa.speculated3.i) + %92 = icmp ugt i64 %.0, %1 + %.sroa.speculate.load.false.sroa.speculated.i246 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %84) + %.sroa.speculated.i247 = select i1 %92, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i246 + %93 = sub i64 %.sroa.speculated.i247, %84 + store ptr %88, ptr %3, align 8, !tbaa !189 %.sroa.432.0..sroa_idx = getelementptr inbounds nuw i8, ptr %3, i64 8 - store i64 %95, ptr %.sroa.432.0..sroa_idx, align 8, !tbaa !188 - switch i64 %95, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread [ + store i64 %93, ptr %.sroa.432.0..sroa_idx, align 8, !tbaa !188 + switch i64 %93, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread [ i64 6, label %_ZN4llvmneENS_9StringRefES0_.exit253 i64 8, label %_ZN4llvmneENS_9StringRefES0_.exit257 ] -_ZN4llvmneENS_9StringRefES0_.exit253: ; preds = %91 - %bcmp.i.i252 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %90, ptr noundef nonnull dereferenceable(6) @.str.153, i64 6) +_ZN4llvmneENS_9StringRefES0_.exit253: ; preds = %89 + %bcmp.i.i252 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %88, ptr noundef nonnull dereferenceable(6) @.str.153, i64 6) %.not495 = icmp eq i32 %bcmp.i.i252, 0 br i1 %.not495, label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread -_ZN4llvmneENS_9StringRefES0_.exit257: ; preds = %91 - %bcmp.i.i256 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(8) %90, ptr noundef nonnull dereferenceable(8) @.str.154, i64 8) +_ZN4llvmneENS_9StringRefES0_.exit257: ; preds = %89 + %bcmp.i.i256 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(8) %88, ptr noundef nonnull dereferenceable(8) @.str.154, i64 8) %.not496 = icmp eq i32 %bcmp.i.i256, 0 br i1 %.not496, label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread -_ZN4llvmneENS_9StringRefES0_.exit257.thread: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253, %91, %_ZN4llvmneENS_9StringRefES0_.exit257 +_ZN4llvmneENS_9StringRefES0_.exit257.thread: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253, %89, %_ZN4llvmneENS_9StringRefES0_.exit257 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %3, i8 0, i64 16, i1 false) %.sroa.speculate.load.false.sroa.speculated.i259 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %.sroa.speculated3.i) - %.sroa.speculated.i260 = select i1 %94, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i259 - %96 = sub i64 %.sroa.speculated.i260, %.sroa.speculated3.i + %.sroa.speculated.i260 = select i1 %92, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i259 + %94 = sub i64 %.sroa.speculated.i260, %.sroa.speculated3.i br label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 _ZNK4llvm9StringRef5rfindEcm.exit241.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236, %_ZNK4llvm9StringRef5rfindEcm.exit241 %.sroa.speculated3.i263 = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0.i233) - %97 = icmp ugt i64 %.0, %1 + %95 = icmp ugt i64 %.0, %1 %.sroa.speculate.load.false.sroa.speculated.i264 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %.sroa.speculated3.i263) - %.sroa.speculated.i265 = select i1 %97, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i264 - %98 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i263 - %99 = sub i64 %.sroa.speculated.i265, %.sroa.speculated3.i263 + %.sroa.speculated.i265 = select i1 %95, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i264 + %96 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i263 + %97 = sub i64 %.sroa.speculated.i265, %.sroa.speculated3.i263 br label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 _ZN4llvmneENS_9StringRefES0_.exit253.thread477: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253, %_ZN4llvmneENS_9StringRefES0_.exit257, %_ZN4llvmneENS_9StringRefES0_.exit257.thread, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread - %.sroa.16.0 = phi i64 [ %99, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %96, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %93, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %93, %_ZN4llvmneENS_9StringRefES0_.exit253 ] - %.sroa.0341.0 = phi ptr [ %98, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %92, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %92, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %92, %_ZN4llvmneENS_9StringRefES0_.exit253 ] - %100 = icmp ugt i64 %.sroa.16.0, 2 - br i1 %100, label %_ZN4llvmeqENS_9StringRefES0_.exit275, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread + %.sroa.16.0 = phi i64 [ %97, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %94, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %91, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %91, %_ZN4llvmneENS_9StringRefES0_.exit253 ] + %.sroa.0341.0 = phi ptr [ %96, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %90, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %90, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %90, %_ZN4llvmneENS_9StringRefES0_.exit253 ] + %98 = icmp ugt i64 %.sroa.16.0, 2 + br i1 %98, label %_ZN4llvmeqENS_9StringRefES0_.exit275, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread _ZN4llvmeqENS_9StringRefES0_.exit275: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 - %101 = add i64 %.sroa.16.0, -2 - %102 = getelementptr inbounds nuw i8, ptr %.sroa.0341.0, i64 %101 - %lhsc497 = load i8, ptr %102, align 1 - %103 = icmp eq i8 %lhsc497, 46 - %spec.select509 = select i1 %103, i64 %101, i64 %.sroa.16.0 + %99 = add i64 %.sroa.16.0, -2 + %100 = getelementptr inbounds nuw i8, ptr %.sroa.0341.0, i64 %99 + %lhsc497 = load i8, ptr %100, align 1 + %101 = icmp eq i8 %lhsc497, 46 + %spec.select509 = select i1 %101, i64 %99, i64 %.sroa.16.0 br label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZN4llvmneENS_9StringRefES0_.exit288: ; preds = %73 - %bcmp.i.i287 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %72, ptr noundef nonnull dereferenceable(4) @.str.159, i64 4) +_ZN4llvmneENS_9StringRefES0_.exit288: ; preds = %71 + %bcmp.i.i287 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %70, ptr noundef nonnull dereferenceable(4) @.str.159, i64 4) %.not494 = icmp eq i32 %bcmp.i.i287, 0 br i1 %.not494, label %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZN4llvmneENS_9StringRefES0_.exit288.thread486: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288, %104 - %.0.i290 = phi i64 [ %105, %104 ], [ %68, %_ZN4llvmneENS_9StringRefES0_.exit288 ] +_ZN4llvmneENS_9StringRefES0_.exit288.thread486: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288, %102 + %.0.i290 = phi i64 [ %103, %102 ], [ %66, %_ZN4llvmneENS_9StringRefES0_.exit288 ] %.not.i291 = icmp eq i64 %.0.i290, 0 - br i1 %.not.i291, label %.loopexit, label %104 - -104: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 - %105 = add i64 %.0.i290, -1 - %106 = getelementptr inbounds nuw i8, ptr %0, i64 %105 - %107 = load i8, ptr %106, align 1, !tbaa !229 - %108 = icmp eq i8 %107, 47 - br i1 %108, label %_ZNK4llvm9StringRef5rfindEcm.exit293, label %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, !llvm.loop !3865 - -_ZNK4llvm9StringRef5rfindEcm.exit293: ; preds = %104 - %109 = getelementptr inbounds nuw i8, ptr %0, i64 %.0.i290 - %110 = sub i64 %68, %.0.i290 + br i1 %.not.i291, label %.loopexit, label %102 + +102: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 + %103 = add i64 %.0.i290, -1 + %104 = getelementptr inbounds nuw i8, ptr %0, i64 %103 + %105 = load i8, ptr %104, align 1, !tbaa !229 + %106 = icmp eq i8 %105, 47 + br i1 %106, label %_ZNK4llvm9StringRef5rfindEcm.exit293, label %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, !llvm.loop !3865 + +_ZNK4llvm9StringRef5rfindEcm.exit293: ; preds = %102 + %107 = getelementptr inbounds nuw i8, ptr %0, i64 %.0.i290 + %108 = sub i64 %66, %.0.i290 br label %.loopexit .loopexit: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, %_ZNK4llvm9StringRef5rfindEcm.exit293 - %.sroa.16.2 = phi i64 [ %110, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %68, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] - %.sroa.0341.2 = phi ptr [ %109, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %0, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] - %111 = icmp ugt i64 %.sroa.16.2, 2 - br i1 %111, label %_ZN4llvmeqENS_9StringRefES0_.exit311, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread + %.sroa.16.2 = phi i64 [ %108, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %66, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] + %.sroa.0341.2 = phi ptr [ %107, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %0, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] + %109 = icmp ugt i64 %.sroa.16.2, 2 + br i1 %109, label %_ZN4llvmeqENS_9StringRefES0_.exit311, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread _ZN4llvmeqENS_9StringRefES0_.exit311: ; preds = %.loopexit - %112 = add i64 %.sroa.16.2, -2 - %113 = getelementptr inbounds nuw i8, ptr %.sroa.0341.2, i64 %112 - %lhsc = load i8, ptr %113, align 1 - %114 = icmp eq i8 %lhsc, 46 - %spec.select510 = select i1 %114, i64 %112, i64 %.sroa.16.2 + %110 = add i64 %.sroa.16.2, -2 + %111 = getelementptr inbounds nuw i8, ptr %.sroa.0341.2, i64 %110 + %lhsc = load i8, ptr %111, align 1 + %112 = icmp eq i8 %lhsc, 46 + %spec.select510 = select i1 %112, i64 %110, i64 %.sroa.16.2 br label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZNK4llvm9StringRef5rfindEcm.exit215.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread, %_ZN4llvmeqENS_9StringRefES0_.exit311, %_ZN4llvmeqENS_9StringRefES0_.exit275, %_ZN4llvmneENS_9StringRefES0_.exit223, %73, %.loopexit, %_ZN4llvmneENS_9StringRefES0_.exit288, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, %_ZNK4llvm9StringRef5rfindEcm.exit215, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread - %.sroa.9.0 = phi i64 [ %.sroa.12.0, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread ], [ %.sroa.12.0, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread ], [ 0, %_ZNK4llvm9StringRef5rfindEcm.exit215 ], [ %.sroa.16.0, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 ], [ 0, %_ZN4llvmneENS_9StringRefES0_.exit288 ], [ %.sroa.16.2, %.loopexit ], [ 0, %73 ], [ %spec.select509, %_ZN4llvmeqENS_9StringRefES0_.exit275 ], [ 0, %_ZN4llvmneENS_9StringRefES0_.exit223 ], [ %spec.select510, %_ZN4llvmeqENS_9StringRefES0_.exit311 ], [ 0, %_ZNK4llvm9StringRef5rfindEcm.exit.thread ] - %.sroa.0425.0 = phi ptr [ %12, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread ], [ %12, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread ], [ null, %_ZNK4llvm9StringRef5rfindEcm.exit215 ], [ %.sroa.0341.0, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 ], [ null, %_ZN4llvmneENS_9StringRefES0_.exit288 ], [ %.sroa.0341.2, %.loopexit ], [ null, %73 ], [ %.sroa.0341.0, %_ZN4llvmeqENS_9StringRefES0_.exit275 ], [ null, %_ZN4llvmneENS_9StringRefES0_.exit223 ], [ %.sroa.0341.2, %_ZN4llvmeqENS_9StringRefES0_.exit311 ], [ null, %_ZNK4llvm9StringRef5rfindEcm.exit.thread ] +_ZNK4llvm9StringRef5rfindEcm.exit215.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread, %_ZN4llvmeqENS_9StringRefES0_.exit311, %_ZN4llvmeqENS_9StringRefES0_.exit275, %_ZN4llvmneENS_9StringRefES0_.exit223, %71, %.loopexit, %_ZN4llvmneENS_9StringRefES0_.exit288, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, %_ZNK4llvm9StringRef5rfindEcm.exit215, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread + %.sroa.9.0 = phi i64 [ %.sroa.12.0, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread ], [ %.sroa.12.0, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread ], [ 0, %_ZNK4llvm9StringRef5rfindEcm.exit215 ], [ %.sroa.16.0, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 ], [ 0, %_ZN4llvmneENS_9StringRefES0_.exit288 ], [ %.sroa.16.2, %.loopexit ], [ 0, %71 ], [ %spec.select509, %_ZN4llvmeqENS_9StringRefES0_.exit275 ], [ 0, %_ZN4llvmneENS_9StringRefES0_.exit223 ], [ %spec.select510, %_ZN4llvmeqENS_9StringRefES0_.exit311 ], [ 0, %_ZNK4llvm9StringRef5rfindEcm.exit.thread ] + %.sroa.0425.0 = phi ptr [ %12, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread ], [ %12, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread ], [ null, %_ZNK4llvm9StringRef5rfindEcm.exit215 ], [ %.sroa.0341.0, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 ], [ null, %_ZN4llvmneENS_9StringRefES0_.exit288 ], [ %.sroa.0341.2, %.loopexit ], [ null, %71 ], [ %.sroa.0341.0, %_ZN4llvmeqENS_9StringRefES0_.exit275 ], [ null, %_ZN4llvmneENS_9StringRefES0_.exit223 ], [ %.sroa.0341.2, %_ZN4llvmeqENS_9StringRefES0_.exit311 ], [ null, %_ZNK4llvm9StringRef5rfindEcm.exit.thread ] %.fca.0.insert = insertvalue { ptr, i64 } poison, ptr %.sroa.0425.0, 0 %.fca.1.insert = insertvalue { ptr, i64 } %.fca.0.insert, i64 %.sroa.9.0, 1 ret { ptr, i64 } %.fca.1.insert diff --git a/bench/meshlab/optimized/cube_style_precomputation.ll b/bench/meshlab/optimized/cube_style_precomputation.ll index 9a462e14e63..7516d6db588 100644 --- a/bench/meshlab/optimized/cube_style_precomputation.ll +++ b/bench/meshlab/optimized/cube_style_precomputation.ll @@ -67460,7 +67460,7 @@ define linkonce_odr void @_ZN5Eigen8internal23assign_sparse_to_sparseINS_12Spars %19 = load ptr, ptr %18, align 8 %20 = getelementptr inbounds nuw i8, ptr %19, i64 16 %21 = load i64, ptr %20, align 8 - br i1 %17, label %22, label %168 + br i1 %17, label %22, label %169 22: ; preds = %2 tail call void @_ZN5Eigen12SparseMatrixIdLi0EiE6resizeEll(ptr noundef nonnull align 8 dereferenceable(72) %0, i64 noundef %21, i64 noundef 1) @@ -67488,93 +67488,96 @@ _ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit: ; preds = %22, %32 %35 = load ptr, ptr %18, align 8 %36 = getelementptr inbounds nuw i8, ptr %35, i64 16 %37 = load i64, ptr %36, align 8 - %38 = load i64, ptr %23, align 8 - %39 = add nsw i64 %37, %38 - %40 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %41 = load i64, ptr %40, align 8 - %42 = icmp sgt i64 %39, %41 - br i1 %42, label %43, label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit + %.sroa.speculated121 = tail call i64 @llvm.smax.i64(i64 %37, i64 1) + %38 = shl nuw nsw i64 %.sroa.speculated121, 1 + %.sroa.speculated126 = tail call i64 @llvm.smin.i64(i64 %38, i64 %37) + %39 = load i64, ptr %23, align 8 + %40 = add nsw i64 %.sroa.speculated126, %39 + %41 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %42 = load i64, ptr %41, align 8 + %43 = icmp sgt i64 %40, %42 + br i1 %43, label %44, label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit -43: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit - %44 = getelementptr inbounds nuw i8, ptr %0, i64 40 - tail call void @_ZN5Eigen8internal17CompressedStorageIdiE10reallocateEl(ptr noundef nonnull align 8 dereferenceable(32) %44, i64 noundef %39) +44: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit + %45 = getelementptr inbounds nuw i8, ptr %0, i64 40 + tail call void @_ZN5Eigen8internal17CompressedStorageIdiE10reallocateEl(ptr noundef nonnull align 8 dereferenceable(32) %45, i64 noundef %40) br label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit -_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit: ; preds = %43, %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit - %45 = getelementptr inbounds nuw i8, ptr %4, i64 120 - %46 = getelementptr inbounds nuw i8, ptr %4, i64 112 - %47 = getelementptr inbounds nuw i8, ptr %0, i64 40 +_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit: ; preds = %44, %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit + %46 = getelementptr inbounds nuw i8, ptr %4, i64 120 + %47 = getelementptr inbounds nuw i8, ptr %4, i64 112 + %48 = getelementptr inbounds nuw i8, ptr %0, i64 40 %.phi.trans.insert.i74 = getelementptr inbounds nuw i8, ptr %0, i64 48 - %48 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %49 = getelementptr inbounds nuw i8, ptr %4, i64 32 - %50 = getelementptr inbounds nuw i8, ptr %4, i64 72 - %51 = getelementptr inbounds nuw i8, ptr %4, i64 80 + %49 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %50 = getelementptr inbounds nuw i8, ptr %4, i64 32 + %51 = getelementptr inbounds nuw i8, ptr %4, i64 72 + %52 = getelementptr inbounds nuw i8, ptr %4, i64 80 %.phi.trans.insert.i = getelementptr inbounds nuw i8, ptr %4, i64 56 - %52 = getelementptr inbounds nuw i8, ptr %4, i64 40 - %53 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %54 = getelementptr inbounds nuw i8, ptr %4, i64 48 - %55 = load ptr, ptr %24, align 8 - %56 = load i32, ptr %55, align 4 - %57 = getelementptr i8, ptr %55, i64 4 - store i32 %56, ptr %57, align 4 + %53 = getelementptr inbounds nuw i8, ptr %4, i64 40 + %54 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %55 = getelementptr inbounds nuw i8, ptr %4, i64 48 + %56 = load ptr, ptr %24, align 8 + %57 = load i32, ptr %56, align 4 + %58 = getelementptr i8, ptr %56, i64 4 + store i32 %57, ptr %58, align 4 call void @_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorC2ERKSR_l(ptr noundef nonnull align 8 dereferenceable(128) %4, ptr noundef nonnull align 8 dereferenceable(64) %3, i64 noundef 0) - %58 = load i64, ptr %45, align 8 - %59 = icmp sgt i64 %58, -1 - br i1 %59, label %.lr.ph139.preheader, label %.loopexit + %59 = load i64, ptr %46, align 8 + %60 = icmp sgt i64 %59, -1 + br i1 %60, label %.lr.ph139.preheader, label %.loopexit .loopexit: ; preds = %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread, %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit - %60 = load ptr, ptr %30, align 8 - %61 = icmp eq ptr %60, null - br i1 %61, label %152, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit + %61 = load ptr, ptr %30, align 8 + %62 = icmp eq ptr %61, null + br i1 %62, label %153, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit .lr.ph139.preheader: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit - %.pre142 = load double, ptr %46, align 8 + %.pre142 = load double, ptr %47, align 8 br label %.lr.ph139 .lr.ph139: ; preds = %.lr.ph139.preheader, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit - %62 = phi double [ %150, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %.pre142, %.lr.ph139.preheader ] - %63 = phi i64 [ %149, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %58, %.lr.ph139.preheader ] - %64 = load ptr, ptr %24, align 8 - %65 = getelementptr i8, ptr %64, i64 4 - %66 = load i32, ptr %65, align 4 - %67 = add nsw i32 %66, 1 - store i32 %67, ptr %65, align 4 - %68 = load i64, ptr %23, align 8 - %69 = add nsw i64 %68, 1 - %70 = load i64, ptr %40, align 8 - %.not.i.i = icmp sgt i64 %70, %68 - br i1 %.not.i.i, label %92, label %71 - -71: ; preds = %.lr.ph139 - %72 = sitofp i64 %69 to double - %73 = fptosi double %72 to i64 - %74 = add nsw i64 %69, %73 - %.sroa.speculated.i.i.i = call i64 @llvm.smin.i64(i64 %74, i64 2147483647) - %.not3.i.i = icmp sgt i64 %.sroa.speculated.i.i.i, %68 + %63 = phi double [ %151, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %.pre142, %.lr.ph139.preheader ] + %64 = phi i64 [ %150, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %59, %.lr.ph139.preheader ] + %65 = load ptr, ptr %24, align 8 + %66 = getelementptr i8, ptr %65, i64 4 + %67 = load i32, ptr %66, align 4 + %68 = add nsw i32 %67, 1 + store i32 %68, ptr %66, align 4 + %69 = load i64, ptr %23, align 8 + %70 = add nsw i64 %69, 1 + %71 = load i64, ptr %41, align 8 + %.not.i.i = icmp sgt i64 %71, %69 + br i1 %.not.i.i, label %93, label %72 + +72: ; preds = %.lr.ph139 + %73 = sitofp i64 %70 to double + %74 = fptosi double %73 to i64 + %75 = add nsw i64 %70, %74 + %.sroa.speculated.i.i.i = call i64 @llvm.smin.i64(i64 %75, i64 2147483647) + %.not3.i.i = icmp sgt i64 %.sroa.speculated.i.i.i, %69 br i1 %.not3.i.i, label %.noexc75, label %.noexc42 -.noexc42: ; preds = %71 - %75 = call ptr @__cxa_allocate_exception(i64 8) #16 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %75, align 8 - call void @__cxa_throw(ptr nonnull %75, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 +.noexc42: ; preds = %72 + %76 = call ptr @__cxa_allocate_exception(i64 8) #16 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %76, align 8 + call void @__cxa_throw(ptr nonnull %76, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 unreachable -.noexc75: ; preds = %71 - %76 = icmp ugt i64 %.sroa.speculated.i.i.i, 2305843009213693951 - %77 = shl nuw i64 %.sroa.speculated.i.i.i, 3 - %78 = select i1 %76, i64 -1, i64 %77 - %79 = call noalias noundef nonnull ptr @_Znam(i64 noundef %78) #36 - %80 = icmp ugt i64 %.sroa.speculated.i.i.i, 4611686018427387903 - %81 = shl nuw i64 %.sroa.speculated.i.i.i, 2 - %82 = select i1 %80, i64 -1, i64 %81 - %83 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %82) #36 +.noexc75: ; preds = %72 + %77 = icmp ugt i64 %.sroa.speculated.i.i.i, 2305843009213693951 + %78 = shl nuw i64 %.sroa.speculated.i.i.i, 3 + %79 = select i1 %77, i64 -1, i64 %78 + %80 = call noalias noundef nonnull ptr @_Znam(i64 noundef %79) #36 + %81 = icmp ugt i64 %.sroa.speculated.i.i.i, 4611686018427387903 + %82 = shl nuw i64 %.sroa.speculated.i.i.i, 2 + %83 = select i1 %81, i64 -1, i64 %82 + %84 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %83) #36 to label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i unwind label %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i _ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i: ; preds = %.noexc75 - %.sroa.speculated.i = call i64 @llvm.smin.i64(i64 %68, i64 %.sroa.speculated.i.i.i) - %84 = icmp sgt i64 %.sroa.speculated.i, 0 - %.pre.i73 = load ptr, ptr %47, align 8 - br i1 %84, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i + %.sroa.speculated.i = call i64 @llvm.smin.i64(i64 %69, i64 %.sroa.speculated.i.i.i) + %85 = icmp sgt i64 %.sroa.speculated.i, 0 + %.pre.i73 = load ptr, ptr %48, align 8 + br i1 %85, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i %.pre24.i = load ptr, ptr %.phi.trans.insert.i74, align 8 @@ -67582,333 +67585,336 @@ _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEv _ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i %.idx.i = shl nuw nsw i64 %.sroa.speculated.i, 3 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %79, ptr align 8 %.pre.i73, i64 %.idx.i, i1 false) - %85 = load ptr, ptr %.phi.trans.insert.i74, align 8 + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %80, ptr align 8 %.pre.i73, i64 %.idx.i, i1 false) + %86 = load ptr, ptr %.phi.trans.insert.i74, align 8 %.idx23.i = shl nuw nsw i64 %.sroa.speculated.i, 2 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %83, ptr align 4 %85, i64 %.idx23.i, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %84, ptr align 4 %86, i64 %.idx23.i, i1 false) br label %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i _ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i: ; preds = %.noexc75 - %86 = landingpad { ptr, i32 } + %87 = landingpad { ptr, i32 } cleanup - call void @_ZdaPv(ptr noundef nonnull %79) #37 + call void @_ZdaPv(ptr noundef nonnull %80) #37 br label %.body _ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i: ; preds = %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i - %87 = phi ptr [ %.pre24.i, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i ], [ %85, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i ] - store ptr %79, ptr %47, align 8 - store ptr %83, ptr %.phi.trans.insert.i74, align 8 - store i64 %.sroa.speculated.i.i.i, ptr %40, align 8 - %88 = icmp eq ptr %87, null - br i1 %88, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i, label %89 + %88 = phi ptr [ %.pre24.i, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i ], [ %86, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i ] + store ptr %80, ptr %48, align 8 + store ptr %84, ptr %.phi.trans.insert.i74, align 8 + store i64 %.sroa.speculated.i.i.i, ptr %41, align 8 + %89 = icmp eq ptr %88, null + br i1 %89, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i, label %90 -89: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i - call void @_ZdaPv(ptr noundef nonnull %87) #37 +90: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i + call void @_ZdaPv(ptr noundef nonnull %88) #37 br label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i -_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %89, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i - %90 = icmp eq ptr %.pre.i73, null - br i1 %90, label %92, label %91 +_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %90, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i + %91 = icmp eq ptr %.pre.i73, null + br i1 %91, label %93, label %92 -91: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i +92: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i call void @_ZdaPv(ptr noundef nonnull %.pre.i73) #37 - br label %92 - -92: ; preds = %.lr.ph139, %91, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i - %93 = sext i32 %66 to i64 - store i64 %69, ptr %23, align 8 - %94 = load ptr, ptr %47, align 8 - %95 = getelementptr inbounds double, ptr %94, i64 %68 - store double 0.000000e+00, ptr %95, align 8 - %96 = trunc i64 %63 to i32 - %97 = load ptr, ptr %.phi.trans.insert.i74, align 8 - %98 = getelementptr inbounds i32, ptr %97, i64 %68 - store i32 %96, ptr %98, align 4 - %99 = load ptr, ptr %47, align 8 - %100 = getelementptr inbounds double, ptr %99, i64 %93 - store double %62, ptr %100, align 8 - %101 = load i64, ptr %48, align 8 + br label %93 + +93: ; preds = %.lr.ph139, %92, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i + %94 = sext i32 %67 to i64 + store i64 %70, ptr %23, align 8 + %95 = load ptr, ptr %48, align 8 + %96 = getelementptr inbounds double, ptr %95, i64 %69 + store double 0.000000e+00, ptr %96, align 8 + %97 = trunc i64 %64 to i32 + %98 = load ptr, ptr %.phi.trans.insert.i74, align 8 + %99 = getelementptr inbounds i32, ptr %98, i64 %69 + store i32 %97, ptr %99, align 4 + %100 = load ptr, ptr %48, align 8 + %101 = getelementptr inbounds double, ptr %100, i64 %94 + store double %63, ptr %101, align 8 %102 = load i64, ptr %49, align 8 - %103 = icmp slt i64 %101, %102 - %104 = load i64, ptr %50, align 8 + %103 = load i64, ptr %50, align 8 + %104 = icmp slt i64 %102, %103 %105 = load i64, ptr %51, align 8 - %106 = icmp slt i64 %104, %105 - br i1 %103, label %107, label %.thread4.i - -107: ; preds = %92 - %108 = load ptr, ptr %53, align 8 - %109 = getelementptr inbounds i32, ptr %108, i64 %101 - %110 = load i32, ptr %109, align 4 - br i1 %106, label %111, label %._crit_edge8.i + %106 = load i64, ptr %52, align 8 + %107 = icmp slt i64 %105, %106 + br i1 %104, label %108, label %.thread4.i -111: ; preds = %107 - %112 = load ptr, ptr %.phi.trans.insert.i, align 8 - %113 = getelementptr inbounds i32, ptr %112, i64 %104 - %114 = load i32, ptr %113, align 4 - %115 = icmp eq i32 %114, %110 - br i1 %115, label %116, label %130 +108: ; preds = %93 + %109 = load ptr, ptr %54, align 8 + %110 = getelementptr inbounds i32, ptr %109, i64 %102 + %111 = load i32, ptr %110, align 4 + br i1 %107, label %112, label %._crit_edge8.i -116: ; preds = %111 - %117 = sext i32 %110 to i64 - store i64 %117, ptr %45, align 8 - %118 = load ptr, ptr %4, align 8 - %119 = getelementptr inbounds double, ptr %118, i64 %101 - %120 = load ptr, ptr %52, align 8 - %121 = load double, ptr %120, align 8 - %122 = load ptr, ptr %54, align 8 - %123 = getelementptr inbounds double, ptr %122, i64 %104 - %124 = load double, ptr %123, align 8 - %125 = fmul double %121, %124 - %126 = load double, ptr %119, align 8 - %127 = fsub double %126, %125 - store double %127, ptr %46, align 8 - %128 = add nsw i64 %101, 1 - store i64 %128, ptr %48, align 8 - %129 = add nsw i64 %104, 1 - store i64 %129, ptr %50, align 8 +112: ; preds = %108 + %113 = load ptr, ptr %.phi.trans.insert.i, align 8 + %114 = getelementptr inbounds i32, ptr %113, i64 %105 + %115 = load i32, ptr %114, align 4 + %116 = icmp eq i32 %115, %111 + br i1 %116, label %117, label %131 + +117: ; preds = %112 + %118 = sext i32 %111 to i64 + store i64 %118, ptr %46, align 8 + %119 = load ptr, ptr %4, align 8 + %120 = getelementptr inbounds double, ptr %119, i64 %102 + %121 = load ptr, ptr %53, align 8 + %122 = load double, ptr %121, align 8 + %123 = load ptr, ptr %55, align 8 + %124 = getelementptr inbounds double, ptr %123, i64 %105 + %125 = load double, ptr %124, align 8 + %126 = fmul double %122, %125 + %127 = load double, ptr %120, align 8 + %128 = fsub double %127, %126 + store double %128, ptr %47, align 8 + %129 = add nsw i64 %102, 1 + store i64 %129, ptr %49, align 8 + %130 = add nsw i64 %105, 1 + store i64 %130, ptr %51, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit -130: ; preds = %111 - %131 = icmp sgt i32 %114, %110 - br i1 %131, label %._crit_edge8.i, label %137 +131: ; preds = %112 + %132 = icmp sgt i32 %115, %111 + br i1 %132, label %._crit_edge8.i, label %138 -._crit_edge8.i: ; preds = %130, %107 - %132 = sext i32 %110 to i64 - store i64 %132, ptr %45, align 8 - %133 = load ptr, ptr %4, align 8 - %134 = getelementptr inbounds double, ptr %133, i64 %101 - %135 = load double, ptr %134, align 8 - store double %135, ptr %46, align 8 - %136 = add nsw i64 %101, 1 - store i64 %136, ptr %48, align 8 +._crit_edge8.i: ; preds = %131, %108 + %133 = sext i32 %111 to i64 + store i64 %133, ptr %46, align 8 + %134 = load ptr, ptr %4, align 8 + %135 = getelementptr inbounds double, ptr %134, i64 %102 + %136 = load double, ptr %135, align 8 + store double %136, ptr %47, align 8 + %137 = add nsw i64 %102, 1 + store i64 %137, ptr %49, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit -.thread4.i: ; preds = %92 - br i1 %106, label %.thread4..thread5_crit_edge.i, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread +.thread4.i: ; preds = %93 + br i1 %107, label %.thread4..thread5_crit_edge.i, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread .thread4..thread5_crit_edge.i: ; preds = %.thread4.i %.pre.i = load ptr, ptr %.phi.trans.insert.i, align 8 - %.phi.trans.insert6.i = getelementptr inbounds i32, ptr %.pre.i, i64 %104 + %.phi.trans.insert6.i = getelementptr inbounds i32, ptr %.pre.i, i64 %105 %.pre7.i = load i32, ptr %.phi.trans.insert6.i, align 4 br label %.thread5.i -137: ; preds = %130 - %138 = icmp slt i32 %114, %110 - br i1 %138, label %.thread5.i, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread +138: ; preds = %131 + %139 = icmp slt i32 %115, %111 + br i1 %139, label %.thread5.i, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread -.thread5.i: ; preds = %137, %.thread4..thread5_crit_edge.i - %139 = phi i32 [ %114, %137 ], [ %.pre7.i, %.thread4..thread5_crit_edge.i ] - %140 = sext i32 %139 to i64 - store i64 %140, ptr %45, align 8 - %141 = load ptr, ptr %52, align 8 - %142 = load double, ptr %141, align 8 - %143 = load ptr, ptr %54, align 8 - %144 = getelementptr inbounds double, ptr %143, i64 %104 - %145 = load double, ptr %144, align 8 - %146 = fmul double %142, %145 - %147 = fsub double 0.000000e+00, %146 - store double %147, ptr %46, align 8 - %148 = add nsw i64 %104, 1 - store i64 %148, ptr %50, align 8 +.thread5.i: ; preds = %138, %.thread4..thread5_crit_edge.i + %140 = phi i32 [ %115, %138 ], [ %.pre7.i, %.thread4..thread5_crit_edge.i ] + %141 = sext i32 %140 to i64 + store i64 %141, ptr %46, align 8 + %142 = load ptr, ptr %53, align 8 + %143 = load double, ptr %142, align 8 + %144 = load ptr, ptr %55, align 8 + %145 = getelementptr inbounds double, ptr %144, i64 %105 + %146 = load double, ptr %145, align 8 + %147 = fmul double %143, %146 + %148 = fsub double 0.000000e+00, %147 + store double %148, ptr %47, align 8 + %149 = add nsw i64 %105, 1 + store i64 %149, ptr %51, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit -_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread: ; preds = %.thread4.i, %137 - store double 0.000000e+00, ptr %46, align 8 - store i64 -1, ptr %45, align 8 +_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread: ; preds = %.thread4.i, %138 + store double 0.000000e+00, ptr %47, align 8 + store i64 -1, ptr %46, align 8 br label %.loopexit -_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit: ; preds = %116, %._crit_edge8.i, %.thread5.i - %149 = phi i64 [ %117, %116 ], [ %132, %._crit_edge8.i ], [ %140, %.thread5.i ] - %150 = phi double [ %127, %116 ], [ %135, %._crit_edge8.i ], [ %147, %.thread5.i ] - %151 = icmp sgt i64 %149, -1 - br i1 %151, label %.lr.ph139, label %.loopexit - -152: ; preds = %.loopexit - %153 = load i64, ptr %23, align 8 - %154 = trunc i64 %153 to i32 - %155 = load i64, ptr %26, align 8 - %156 = icmp sgt i64 %155, -1 - br i1 %156, label %.lr.ph.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit - -.lr.ph.i: ; preds = %152 - %157 = load ptr, ptr %24, align 8 - br label %158 - -158: ; preds = %162, %.lr.ph.i - %.08.i = phi i64 [ %155, %.lr.ph.i ], [ %163, %162 ] - %159 = getelementptr inbounds nuw i32, ptr %157, i64 %.08.i - %160 = load i32, ptr %159, align 4 - %161 = icmp eq i32 %160, 0 - br i1 %161, label %162, label %.critedge.i +_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit: ; preds = %117, %._crit_edge8.i, %.thread5.i + %150 = phi i64 [ %118, %117 ], [ %133, %._crit_edge8.i ], [ %141, %.thread5.i ] + %151 = phi double [ %128, %117 ], [ %136, %._crit_edge8.i ], [ %148, %.thread5.i ] + %152 = icmp sgt i64 %150, -1 + br i1 %152, label %.lr.ph139, label %.loopexit + +153: ; preds = %.loopexit + %154 = load i64, ptr %23, align 8 + %155 = trunc i64 %154 to i32 + %156 = load i64, ptr %26, align 8 + %157 = icmp sgt i64 %156, -1 + br i1 %157, label %.lr.ph.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit + +.lr.ph.i: ; preds = %153 + %158 = load ptr, ptr %24, align 8 + br label %159 + +159: ; preds = %163, %.lr.ph.i + %.08.i = phi i64 [ %156, %.lr.ph.i ], [ %164, %163 ] + %160 = getelementptr inbounds nuw i32, ptr %158, i64 %.08.i + %161 = load i32, ptr %160, align 4 + %162 = icmp eq i32 %161, 0 + br i1 %162, label %163, label %.critedge.i -162: ; preds = %158 - %163 = add nsw i64 %.08.i, -1 - %164 = icmp sgt i64 %.08.i, 0 - br i1 %164, label %158, label %.critedge.i, !llvm.loop !223 +163: ; preds = %159 + %164 = add nsw i64 %.08.i, -1 + %165 = icmp sgt i64 %.08.i, 0 + br i1 %165, label %159, label %.critedge.i, !llvm.loop !223 -.critedge.i: ; preds = %162, %158 - %.0.lcssa.i = phi i64 [ %.08.i, %158 ], [ -1, %162 ] - %.not.not11.i = icmp slt i64 %.0.lcssa.i, %155 +.critedge.i: ; preds = %163, %159 + %.0.lcssa.i = phi i64 [ %.08.i, %159 ], [ -1, %163 ] + %.not.not11.i = icmp slt i64 %.0.lcssa.i, %156 br i1 %.not.not11.i, label %.lr.ph13.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit .lr.ph13.i: ; preds = %.critedge.i, %.lr.ph13.i %.1.in12.i = phi i64 [ %.1.i, %.lr.ph13.i ], [ %.0.lcssa.i, %.critedge.i ] %.1.i = add nsw i64 %.1.in12.i, 1 - %165 = load ptr, ptr %24, align 8 - %166 = getelementptr inbounds i32, ptr %165, i64 %.1.i - store i32 %154, ptr %166, align 4 - %167 = load i64, ptr %26, align 8 - %.not.not.i = icmp slt i64 %.1.i, %167 + %166 = load ptr, ptr %24, align 8 + %167 = getelementptr inbounds i32, ptr %166, i64 %.1.i + store i32 %155, ptr %167, align 4 + %168 = load i64, ptr %26, align 8 + %.not.not.i = icmp slt i64 %.1.i, %168 br i1 %.not.not.i, label %.lr.ph13.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit, !llvm.loop !224 -168: ; preds = %2 +169: ; preds = %2 store i8 0, ptr %5, align 8 - %169 = getelementptr inbounds nuw i8, ptr %5, i64 8 - call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %169, i8 0, i64 64, i1 false) - %170 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %21, ptr %170, align 8 - %171 = getelementptr inbounds nuw i8, ptr %5, i64 56 - %172 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %173 = tail call noalias dereferenceable_or_null(8) ptr @malloc(i64 noundef 8) #34 - store ptr %173, ptr %172, align 8 - %.not6.i = icmp eq ptr %173, null - br i1 %.not6.i, label %174, label %179 - -174: ; preds = %168 - %175 = tail call ptr @__cxa_allocate_exception(i64 8) #16 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %175, align 8 - invoke void @__cxa_throw(ptr nonnull %175, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 - to label %.noexc80 unwind label %176 + %170 = getelementptr inbounds nuw i8, ptr %5, i64 8 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %170, i8 0, i64 64, i1 false) + %171 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %21, ptr %171, align 8 + %172 = getelementptr inbounds nuw i8, ptr %5, i64 56 + %173 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %174 = tail call noalias dereferenceable_or_null(8) ptr @malloc(i64 noundef 8) #34 + store ptr %174, ptr %173, align 8 + %.not6.i = icmp eq ptr %174, null + br i1 %.not6.i, label %175, label %180 -.noexc80: ; preds = %174 +175: ; preds = %169 + %176 = tail call ptr @__cxa_allocate_exception(i64 8) #16 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %176, align 8 + invoke void @__cxa_throw(ptr nonnull %176, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 + to label %.noexc80 unwind label %177 + +.noexc80: ; preds = %175 unreachable -176: ; preds = %174 - %177 = landingpad { ptr, i32 } +177: ; preds = %175 + %178 = landingpad { ptr, i32 } cleanup - %178 = getelementptr inbounds nuw i8, ptr %5, i64 40 - call void @_ZN5Eigen8internal17CompressedStorageIdiED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #16 + %179 = getelementptr inbounds nuw i8, ptr %5, i64 40 + call void @_ZN5Eigen8internal17CompressedStorageIdiED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #16 br label %.body -179: ; preds = %168 - store i64 1, ptr %169, align 8 - %180 = getelementptr inbounds nuw i8, ptr %5, i64 32 - store i64 0, ptr %173, align 4 - %181 = load i64, ptr %20, align 8 - %182 = getelementptr inbounds nuw i8, ptr %5, i64 64 - %183 = icmp sgt i64 %181, 0 - br i1 %183, label %184, label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 - -184: ; preds = %179 - %185 = getelementptr inbounds nuw i8, ptr %5, i64 40 - %186 = icmp samesign ugt i64 %181, 2305843009213693951 - %187 = shl nuw i64 %181, 3 - %188 = select i1 %186, i64 -1, i64 %187 - %189 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %188) #36 +180: ; preds = %169 + store i64 1, ptr %170, align 8 + %181 = getelementptr inbounds nuw i8, ptr %5, i64 32 + store i64 0, ptr %174, align 4 + %182 = load i64, ptr %20, align 8 + %.sroa.speculated = tail call i64 @llvm.smax.i64(i64 %182, i64 1) + %183 = shl nuw nsw i64 %.sroa.speculated, 1 + %.sroa.speculated116 = tail call i64 @llvm.smin.i64(i64 %183, i64 %182) + %184 = getelementptr inbounds nuw i8, ptr %5, i64 64 + %185 = icmp sgt i64 %182, 0 + br i1 %185, label %186, label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 + +186: ; preds = %180 + %187 = getelementptr inbounds nuw i8, ptr %5, i64 40 + %188 = icmp ugt i64 %.sroa.speculated116, 2305843009213693951 + %189 = shl nuw i64 %.sroa.speculated116, 3 + %190 = select i1 %188, i64 -1, i64 %189 + %191 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %190) #36 to label %.noexc93 unwind label %.loopexit.split-lp.loopexit.split-lp -.noexc93: ; preds = %184 - %190 = icmp samesign ugt i64 %181, 4611686018427387903 - %191 = shl nuw i64 %181, 2 - %192 = select i1 %190, i64 -1, i64 %191 - %193 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %192) #36 +.noexc93: ; preds = %186 + %192 = icmp ugt i64 %.sroa.speculated116, 4611686018427387903 + %193 = shl nuw i64 %.sroa.speculated116, 2 + %194 = select i1 %192, i64 -1, i64 %193 + %195 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %194) #36 to label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89 unwind label %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 _ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81: ; preds = %.noexc93 - %194 = landingpad { ptr, i32 } + %196 = landingpad { ptr, i32 } cleanup - tail call void @_ZdaPv(ptr noundef nonnull %189) #37 + tail call void @_ZdaPv(ptr noundef nonnull %191) #37 br label %.body94 _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89: ; preds = %.noexc93 - store ptr %189, ptr %185, align 8 - %195 = getelementptr inbounds nuw i8, ptr %5, i64 48 - store ptr %193, ptr %195, align 8 - store i64 %181, ptr %182, align 8 + store ptr %191, ptr %187, align 8 + %197 = getelementptr inbounds nuw i8, ptr %5, i64 48 + store ptr %195, ptr %197, align 8 + store i64 %.sroa.speculated116, ptr %184, align 8 br label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 -_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89, %179 - %196 = getelementptr inbounds nuw i8, ptr %6, i64 120 - %197 = getelementptr inbounds nuw i8, ptr %6, i64 112 - %198 = getelementptr inbounds nuw i8, ptr %5, i64 40 +_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89, %180 + %198 = getelementptr inbounds nuw i8, ptr %6, i64 120 + %199 = getelementptr inbounds nuw i8, ptr %6, i64 112 + %200 = getelementptr inbounds nuw i8, ptr %5, i64 40 %.phi.trans.insert.i102 = getelementptr inbounds nuw i8, ptr %5, i64 48 - %199 = getelementptr inbounds nuw i8, ptr %6, i64 24 - %200 = getelementptr inbounds nuw i8, ptr %6, i64 32 - %201 = getelementptr inbounds nuw i8, ptr %6, i64 72 - %202 = getelementptr inbounds nuw i8, ptr %6, i64 80 + %201 = getelementptr inbounds nuw i8, ptr %6, i64 24 + %202 = getelementptr inbounds nuw i8, ptr %6, i64 32 + %203 = getelementptr inbounds nuw i8, ptr %6, i64 72 + %204 = getelementptr inbounds nuw i8, ptr %6, i64 80 %.phi.trans.insert.i56 = getelementptr inbounds nuw i8, ptr %6, i64 56 - %203 = getelementptr inbounds nuw i8, ptr %6, i64 40 - %204 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %205 = getelementptr inbounds nuw i8, ptr %6, i64 48 - %206 = getelementptr i8, ptr %173, i64 4 - store i32 0, ptr %206, align 4 + %205 = getelementptr inbounds nuw i8, ptr %6, i64 40 + %206 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %207 = getelementptr inbounds nuw i8, ptr %6, i64 48 + %208 = getelementptr i8, ptr %174, i64 4 + store i32 0, ptr %208, align 4 invoke void @_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorC2ERKSR_l(ptr noundef nonnull align 8 dereferenceable(128) %6, ptr noundef nonnull align 8 dereferenceable(64) %3, i64 noundef 0) to label %.preheader unwind label %.loopexit.split-lp.loopexit .loopexit132: ; preds = %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread, %.preheader - %207 = load ptr, ptr %180, align 8 - %208 = icmp eq ptr %207, null - br i1 %208, label %303, label %.loopexit131 + %209 = load ptr, ptr %181, align 8 + %210 = icmp eq ptr %209, null + br i1 %210, label %305, label %.loopexit131 .preheader: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 - %209 = load i64, ptr %196, align 8 - %210 = icmp sgt i64 %209, -1 - br i1 %210, label %.lr.ph.preheader, label %.loopexit132 + %211 = load i64, ptr %198, align 8 + %212 = icmp sgt i64 %211, -1 + br i1 %212, label %.lr.ph.preheader, label %.loopexit132 .lr.ph.preheader: ; preds = %.preheader - %.pre = load double, ptr %197, align 8 + %.pre = load double, ptr %199, align 8 br label %.lr.ph .lr.ph: ; preds = %.lr.ph.preheader, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 - %211 = phi double [ %301, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %.pre, %.lr.ph.preheader ] - %212 = phi i64 [ %300, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %209, %.lr.ph.preheader ] - %213 = load ptr, ptr %172, align 8 - %214 = getelementptr i8, ptr %213, i64 4 - %215 = load i32, ptr %214, align 4 - %216 = add nsw i32 %215, 1 - store i32 %216, ptr %214, align 4 - %217 = load i64, ptr %171, align 8 - %218 = add nsw i64 %217, 1 - %219 = load i64, ptr %182, align 8 - %.not.i.i48 = icmp sgt i64 %219, %217 - br i1 %.not.i.i48, label %243, label %220 - -220: ; preds = %.lr.ph - %221 = sitofp i64 %218 to double - %222 = fptosi double %221 to i64 - %223 = add nsw i64 %218, %222 - %.sroa.speculated.i.i.i49 = call i64 @llvm.smin.i64(i64 %223, i64 2147483647) - %.not3.i.i50 = icmp sgt i64 %.sroa.speculated.i.i.i49, %217 - br i1 %.not3.i.i50, label %226, label %224 - -224: ; preds = %220 - %225 = call ptr @__cxa_allocate_exception(i64 8) #16 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %225, align 8 - invoke void @__cxa_throw(ptr nonnull %225, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 + %213 = phi double [ %303, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %.pre, %.lr.ph.preheader ] + %214 = phi i64 [ %302, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %211, %.lr.ph.preheader ] + %215 = load ptr, ptr %173, align 8 + %216 = getelementptr i8, ptr %215, i64 4 + %217 = load i32, ptr %216, align 4 + %218 = add nsw i32 %217, 1 + store i32 %218, ptr %216, align 4 + %219 = load i64, ptr %172, align 8 + %220 = add nsw i64 %219, 1 + %221 = load i64, ptr %184, align 8 + %.not.i.i48 = icmp sgt i64 %221, %219 + br i1 %.not.i.i48, label %245, label %222 + +222: ; preds = %.lr.ph + %223 = sitofp i64 %220 to double + %224 = fptosi double %223 to i64 + %225 = add nsw i64 %220, %224 + %.sroa.speculated.i.i.i49 = call i64 @llvm.smin.i64(i64 %225, i64 2147483647) + %.not3.i.i50 = icmp sgt i64 %.sroa.speculated.i.i.i49, %219 + br i1 %.not3.i.i50, label %228, label %226 + +226: ; preds = %222 + %227 = call ptr @__cxa_allocate_exception(i64 8) #16 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %227, align 8 + invoke void @__cxa_throw(ptr nonnull %227, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 to label %.noexc51 unwind label %.loopexit.split-lp.loopexit.split-lp -.noexc51: ; preds = %224 +.noexc51: ; preds = %226 unreachable -226: ; preds = %220 - %227 = icmp ugt i64 %.sroa.speculated.i.i.i49, 2305843009213693951 - %228 = shl nuw i64 %.sroa.speculated.i.i.i49, 3 - %229 = select i1 %227, i64 -1, i64 %228 - %230 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %229) #36 +228: ; preds = %222 + %229 = icmp ugt i64 %.sroa.speculated.i.i.i49, 2305843009213693951 + %230 = shl nuw i64 %.sroa.speculated.i.i.i49, 3 + %231 = select i1 %229, i64 -1, i64 %230 + %232 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %231) #36 to label %.noexc109 unwind label %.loopexit133 -.noexc109: ; preds = %226 - %231 = icmp ugt i64 %.sroa.speculated.i.i.i49, 4611686018427387903 - %232 = shl nuw i64 %.sroa.speculated.i.i.i49, 2 - %233 = select i1 %231, i64 -1, i64 %232 - %234 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %233) #36 +.noexc109: ; preds = %228 + %233 = icmp ugt i64 %.sroa.speculated.i.i.i49, 4611686018427387903 + %234 = shl nuw i64 %.sroa.speculated.i.i.i49, 2 + %235 = select i1 %233, i64 -1, i64 %234 + %236 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %235) #36 to label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98 unwind label %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97 _ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98: ; preds = %.noexc109 - %.sroa.speculated.i99 = call i64 @llvm.smin.i64(i64 %217, i64 %.sroa.speculated.i.i.i49) - %235 = icmp sgt i64 %.sroa.speculated.i99, 0 - %.pre.i100 = load ptr, ptr %198, align 8 - br i1 %235, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 + %.sroa.speculated.i99 = call i64 @llvm.smin.i64(i64 %219, i64 %.sroa.speculated.i.i.i49) + %237 = icmp sgt i64 %.sroa.speculated.i99, 0 + %.pre.i100 = load ptr, ptr %200, align 8 + br i1 %237, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98 %.pre24.i103 = load ptr, ptr %.phi.trans.insert.i102, align 8 @@ -67916,148 +67922,148 @@ _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEv _ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98 %.idx.i107 = shl nuw nsw i64 %.sroa.speculated.i99, 3 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %230, ptr align 8 %.pre.i100, i64 %.idx.i107, i1 false) - %236 = load ptr, ptr %.phi.trans.insert.i102, align 8 + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %232, ptr align 8 %.pre.i100, i64 %.idx.i107, i1 false) + %238 = load ptr, ptr %.phi.trans.insert.i102, align 8 %.idx23.i108 = shl nuw nsw i64 %.sroa.speculated.i99, 2 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %234, ptr align 4 %236, i64 %.idx23.i108, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %236, ptr align 4 %238, i64 %.idx23.i108, i1 false) br label %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 _ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97: ; preds = %.noexc109 - %237 = landingpad { ptr, i32 } + %239 = landingpad { ptr, i32 } cleanup - call void @_ZdaPv(ptr noundef nonnull %230) #37 + call void @_ZdaPv(ptr noundef nonnull %232) #37 br label %.body94 _ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104: ; preds = %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 - %238 = phi ptr [ %.pre24.i103, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 ], [ %236, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106 ] - store ptr %230, ptr %198, align 8 - store ptr %234, ptr %.phi.trans.insert.i102, align 8 - store i64 %.sroa.speculated.i.i.i49, ptr %182, align 8 - %239 = icmp eq ptr %238, null - br i1 %239, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105, label %240 - -240: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 - call void @_ZdaPv(ptr noundef nonnull %238) #37 + %240 = phi ptr [ %.pre24.i103, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 ], [ %238, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106 ] + store ptr %232, ptr %200, align 8 + store ptr %236, ptr %.phi.trans.insert.i102, align 8 + store i64 %.sroa.speculated.i.i.i49, ptr %184, align 8 + %241 = icmp eq ptr %240, null + br i1 %241, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105, label %242 + +242: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 + call void @_ZdaPv(ptr noundef nonnull %240) #37 br label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 -_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105: ; preds = %240, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 - %241 = icmp eq ptr %.pre.i100, null - br i1 %241, label %243, label %242 +_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105: ; preds = %242, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 + %243 = icmp eq ptr %.pre.i100, null + br i1 %243, label %245, label %244 -242: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 +244: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 call void @_ZdaPv(ptr noundef nonnull %.pre.i100) #37 - br label %243 - -243: ; preds = %.lr.ph, %242, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 - %244 = sext i32 %215 to i64 - store i64 %218, ptr %171, align 8 - %245 = load ptr, ptr %198, align 8 - %246 = getelementptr inbounds double, ptr %245, i64 %217 - store double 0.000000e+00, ptr %246, align 8 - %247 = trunc i64 %212 to i32 - %248 = load ptr, ptr %.phi.trans.insert.i102, align 8 - %249 = getelementptr inbounds i32, ptr %248, i64 %217 - store i32 %247, ptr %249, align 4 - %250 = load ptr, ptr %198, align 8 - %251 = getelementptr inbounds double, ptr %250, i64 %244 - store double %211, ptr %251, align 8 - %252 = load i64, ptr %199, align 8 - %253 = load i64, ptr %200, align 8 - %254 = icmp slt i64 %252, %253 - %255 = load i64, ptr %201, align 8 - %256 = load i64, ptr %202, align 8 - %257 = icmp slt i64 %255, %256 - br i1 %254, label %258, label %.thread4.i54 - -258: ; preds = %243 - %259 = load ptr, ptr %204, align 8 - %260 = getelementptr inbounds i32, ptr %259, i64 %252 - %261 = load i32, ptr %260, align 4 - br i1 %257, label %262, label %._crit_edge8.i61 + br label %245 -262: ; preds = %258 - %263 = load ptr, ptr %.phi.trans.insert.i56, align 8 - %264 = getelementptr inbounds i32, ptr %263, i64 %255 - %265 = load i32, ptr %264, align 4 - %266 = icmp eq i32 %265, %261 - br i1 %266, label %267, label %281 - -267: ; preds = %262 - %268 = sext i32 %261 to i64 - store i64 %268, ptr %196, align 8 - %269 = load ptr, ptr %6, align 8 - %270 = getelementptr inbounds double, ptr %269, i64 %252 - %271 = load ptr, ptr %203, align 8 - %272 = load double, ptr %271, align 8 +245: ; preds = %.lr.ph, %244, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 + %246 = sext i32 %217 to i64 + store i64 %220, ptr %172, align 8 + %247 = load ptr, ptr %200, align 8 + %248 = getelementptr inbounds double, ptr %247, i64 %219 + store double 0.000000e+00, ptr %248, align 8 + %249 = trunc i64 %214 to i32 + %250 = load ptr, ptr %.phi.trans.insert.i102, align 8 + %251 = getelementptr inbounds i32, ptr %250, i64 %219 + store i32 %249, ptr %251, align 4 + %252 = load ptr, ptr %200, align 8 + %253 = getelementptr inbounds double, ptr %252, i64 %246 + store double %213, ptr %253, align 8 + %254 = load i64, ptr %201, align 8 + %255 = load i64, ptr %202, align 8 + %256 = icmp slt i64 %254, %255 + %257 = load i64, ptr %203, align 8 + %258 = load i64, ptr %204, align 8 + %259 = icmp slt i64 %257, %258 + br i1 %256, label %260, label %.thread4.i54 + +260: ; preds = %245 + %261 = load ptr, ptr %206, align 8 + %262 = getelementptr inbounds i32, ptr %261, i64 %254 + %263 = load i32, ptr %262, align 4 + br i1 %259, label %264, label %._crit_edge8.i61 + +264: ; preds = %260 + %265 = load ptr, ptr %.phi.trans.insert.i56, align 8 + %266 = getelementptr inbounds i32, ptr %265, i64 %257 + %267 = load i32, ptr %266, align 4 + %268 = icmp eq i32 %267, %263 + br i1 %268, label %269, label %283 + +269: ; preds = %264 + %270 = sext i32 %263 to i64 + store i64 %270, ptr %198, align 8 + %271 = load ptr, ptr %6, align 8 + %272 = getelementptr inbounds double, ptr %271, i64 %254 %273 = load ptr, ptr %205, align 8 - %274 = getelementptr inbounds double, ptr %273, i64 %255 - %275 = load double, ptr %274, align 8 - %276 = fmul double %272, %275 - %277 = load double, ptr %270, align 8 - %278 = fsub double %277, %276 - store double %278, ptr %197, align 8 - %279 = add nsw i64 %252, 1 - store i64 %279, ptr %199, align 8 - %280 = add nsw i64 %255, 1 - store i64 %280, ptr %201, align 8 + %274 = load double, ptr %273, align 8 + %275 = load ptr, ptr %207, align 8 + %276 = getelementptr inbounds double, ptr %275, i64 %257 + %277 = load double, ptr %276, align 8 + %278 = fmul double %274, %277 + %279 = load double, ptr %272, align 8 + %280 = fsub double %279, %278 + store double %280, ptr %199, align 8 + %281 = add nsw i64 %254, 1 + store i64 %281, ptr %201, align 8 + %282 = add nsw i64 %257, 1 + store i64 %282, ptr %203, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 -281: ; preds = %262 - %282 = icmp sgt i32 %265, %261 - br i1 %282, label %._crit_edge8.i61, label %288 - -._crit_edge8.i61: ; preds = %281, %258 - %283 = sext i32 %261 to i64 - store i64 %283, ptr %196, align 8 - %284 = load ptr, ptr %6, align 8 - %285 = getelementptr inbounds double, ptr %284, i64 %252 - %286 = load double, ptr %285, align 8 - store double %286, ptr %197, align 8 - %287 = add nsw i64 %252, 1 - store i64 %287, ptr %199, align 8 +283: ; preds = %264 + %284 = icmp sgt i32 %267, %263 + br i1 %284, label %._crit_edge8.i61, label %290 + +._crit_edge8.i61: ; preds = %283, %260 + %285 = sext i32 %263 to i64 + store i64 %285, ptr %198, align 8 + %286 = load ptr, ptr %6, align 8 + %287 = getelementptr inbounds double, ptr %286, i64 %254 + %288 = load double, ptr %287, align 8 + store double %288, ptr %199, align 8 + %289 = add nsw i64 %254, 1 + store i64 %289, ptr %201, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 -.thread4.i54: ; preds = %243 - br i1 %257, label %.thread4..thread5_crit_edge.i55, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread +.thread4.i54: ; preds = %245 + br i1 %259, label %.thread4..thread5_crit_edge.i55, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread .thread4..thread5_crit_edge.i55: ; preds = %.thread4.i54 %.pre.i57 = load ptr, ptr %.phi.trans.insert.i56, align 8 - %.phi.trans.insert6.i58 = getelementptr inbounds i32, ptr %.pre.i57, i64 %255 + %.phi.trans.insert6.i58 = getelementptr inbounds i32, ptr %.pre.i57, i64 %257 %.pre7.i59 = load i32, ptr %.phi.trans.insert6.i58, align 4 br label %.thread5.i60 -288: ; preds = %281 - %289 = icmp slt i32 %265, %261 - br i1 %289, label %.thread5.i60, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread +290: ; preds = %283 + %291 = icmp slt i32 %267, %263 + br i1 %291, label %.thread5.i60, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread -.thread5.i60: ; preds = %288, %.thread4..thread5_crit_edge.i55 - %290 = phi i32 [ %265, %288 ], [ %.pre7.i59, %.thread4..thread5_crit_edge.i55 ] - %291 = sext i32 %290 to i64 - store i64 %291, ptr %196, align 8 - %292 = load ptr, ptr %203, align 8 - %293 = load double, ptr %292, align 8 +.thread5.i60: ; preds = %290, %.thread4..thread5_crit_edge.i55 + %292 = phi i32 [ %267, %290 ], [ %.pre7.i59, %.thread4..thread5_crit_edge.i55 ] + %293 = sext i32 %292 to i64 + store i64 %293, ptr %198, align 8 %294 = load ptr, ptr %205, align 8 - %295 = getelementptr inbounds double, ptr %294, i64 %255 - %296 = load double, ptr %295, align 8 - %297 = fmul double %293, %296 - %298 = fsub double 0.000000e+00, %297 - store double %298, ptr %197, align 8 - %299 = add nsw i64 %255, 1 - store i64 %299, ptr %201, align 8 + %295 = load double, ptr %294, align 8 + %296 = load ptr, ptr %207, align 8 + %297 = getelementptr inbounds double, ptr %296, i64 %257 + %298 = load double, ptr %297, align 8 + %299 = fmul double %295, %298 + %300 = fsub double 0.000000e+00, %299 + store double %300, ptr %199, align 8 + %301 = add nsw i64 %257, 1 + store i64 %301, ptr %203, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 -_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread: ; preds = %.thread4.i54, %288 - store double 0.000000e+00, ptr %197, align 8 - store i64 -1, ptr %196, align 8 +_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread: ; preds = %.thread4.i54, %290 + store double 0.000000e+00, ptr %199, align 8 + store i64 -1, ptr %198, align 8 br label %.loopexit132 -_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62: ; preds = %267, %._crit_edge8.i61, %.thread5.i60 - %300 = phi i64 [ %268, %267 ], [ %283, %._crit_edge8.i61 ], [ %291, %.thread5.i60 ] - %301 = phi double [ %278, %267 ], [ %286, %._crit_edge8.i61 ], [ %298, %.thread5.i60 ] - %302 = icmp sgt i64 %300, -1 - br i1 %302, label %.lr.ph, label %.loopexit132 +_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62: ; preds = %269, %._crit_edge8.i61, %.thread5.i60 + %302 = phi i64 [ %270, %269 ], [ %285, %._crit_edge8.i61 ], [ %293, %.thread5.i60 ] + %303 = phi double [ %280, %269 ], [ %288, %._crit_edge8.i61 ], [ %300, %.thread5.i60 ] + %304 = icmp sgt i64 %302, -1 + br i1 %304, label %.lr.ph, label %.loopexit132 -.loopexit133: ; preds = %226 +.loopexit133: ; preds = %228 %lpad.loopexit = landingpad { ptr, i32 } cleanup br label %.body94 @@ -68067,86 +68073,86 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ cleanup br label %.body94 -.loopexit.split-lp.loopexit.split-lp: ; preds = %184, %224, %.loopexit131 +.loopexit.split-lp.loopexit.split-lp: ; preds = %186, %226, %.loopexit131 %lpad.loopexit.split-lp135 = landingpad { ptr, i32 } cleanup br label %.body94 .body94: ; preds = %.loopexit133, %.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 - %eh.lpad-body95 = phi { ptr, i32 } [ %194, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 ], [ %237, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit134, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp135, %.loopexit.split-lp.loopexit.split-lp ] + %eh.lpad-body95 = phi { ptr, i32 } [ %196, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 ], [ %239, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit134, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp135, %.loopexit.split-lp.loopexit.split-lp ] call void @_ZN5Eigen12SparseMatrixIdLi0EiED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %5) #16 br label %.body -303: ; preds = %.loopexit132 - %304 = load i64, ptr %171, align 8 - %305 = trunc i64 %304 to i32 - %306 = load i64, ptr %169, align 8 - %307 = icmp sgt i64 %306, -1 - br i1 %307, label %.lr.ph.i63, label %.loopexit131 - -.lr.ph.i63: ; preds = %303 - %308 = load ptr, ptr %172, align 8 - br label %309 - -309: ; preds = %313, %.lr.ph.i63 - %.08.i64 = phi i64 [ %306, %.lr.ph.i63 ], [ %314, %313 ] - %310 = getelementptr inbounds nuw i32, ptr %308, i64 %.08.i64 - %311 = load i32, ptr %310, align 4 - %312 = icmp eq i32 %311, 0 - br i1 %312, label %313, label %.critedge.i65 - -313: ; preds = %309 - %314 = add nsw i64 %.08.i64, -1 - %315 = icmp sgt i64 %.08.i64, 0 - br i1 %315, label %309, label %.critedge.i65, !llvm.loop !223 - -.critedge.i65: ; preds = %313, %309 - %.0.lcssa.i66 = phi i64 [ %.08.i64, %309 ], [ -1, %313 ] - %.not.not11.i67 = icmp slt i64 %.0.lcssa.i66, %306 +305: ; preds = %.loopexit132 + %306 = load i64, ptr %172, align 8 + %307 = trunc i64 %306 to i32 + %308 = load i64, ptr %170, align 8 + %309 = icmp sgt i64 %308, -1 + br i1 %309, label %.lr.ph.i63, label %.loopexit131 + +.lr.ph.i63: ; preds = %305 + %310 = load ptr, ptr %173, align 8 + br label %311 + +311: ; preds = %315, %.lr.ph.i63 + %.08.i64 = phi i64 [ %308, %.lr.ph.i63 ], [ %316, %315 ] + %312 = getelementptr inbounds nuw i32, ptr %310, i64 %.08.i64 + %313 = load i32, ptr %312, align 4 + %314 = icmp eq i32 %313, 0 + br i1 %314, label %315, label %.critedge.i65 + +315: ; preds = %311 + %316 = add nsw i64 %.08.i64, -1 + %317 = icmp sgt i64 %.08.i64, 0 + br i1 %317, label %311, label %.critedge.i65, !llvm.loop !223 + +.critedge.i65: ; preds = %315, %311 + %.0.lcssa.i66 = phi i64 [ %.08.i64, %311 ], [ -1, %315 ] + %.not.not11.i67 = icmp slt i64 %.0.lcssa.i66, %308 br i1 %.not.not11.i67, label %.lr.ph13.i68, label %.loopexit131 .lr.ph13.i68: ; preds = %.critedge.i65, %.lr.ph13.i68 %.1.in12.i69 = phi i64 [ %.1.i70, %.lr.ph13.i68 ], [ %.0.lcssa.i66, %.critedge.i65 ] %.1.i70 = add nsw i64 %.1.in12.i69, 1 - %316 = load ptr, ptr %172, align 8 - %317 = getelementptr inbounds i32, ptr %316, i64 %.1.i70 - store i32 %305, ptr %317, align 4 - %318 = load i64, ptr %169, align 8 - %.not.not.i71 = icmp slt i64 %.1.i70, %318 + %318 = load ptr, ptr %173, align 8 + %319 = getelementptr inbounds i32, ptr %318, i64 %.1.i70 + store i32 %307, ptr %319, align 4 + %320 = load i64, ptr %170, align 8 + %.not.not.i71 = icmp slt i64 %.1.i70, %320 br i1 %.not.not.i71, label %.lr.ph13.i68, label %.loopexit131, !llvm.loop !224 -.loopexit131: ; preds = %.lr.ph13.i68, %.loopexit132, %303, %.critedge.i65 +.loopexit131: ; preds = %.lr.ph13.i68, %.loopexit132, %305, %.critedge.i65 store i8 1, ptr %5, align 8 - %319 = invoke noundef nonnull align 8 dereferenceable(72) ptr @_ZN5Eigen12SparseMatrixIdLi0EiEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(72) %0, ptr noundef nonnull align 8 dereferenceable(72) %5) - to label %320 unwind label %.loopexit.split-lp.loopexit.split-lp - -320: ; preds = %.loopexit131 - %321 = load ptr, ptr %172, align 8 - call void @free(ptr noundef %321) #16 - %322 = load ptr, ptr %180, align 8 - call void @free(ptr noundef %322) #16 - %323 = load ptr, ptr %198, align 8 - %324 = icmp eq ptr %323, null - br i1 %324, label %326, label %325 - -325: ; preds = %320 - call void @_ZdaPv(ptr noundef nonnull %323) #37 - br label %326 - -326: ; preds = %325, %320 - %327 = load ptr, ptr %.phi.trans.insert.i102, align 8 - %328 = icmp eq ptr %327, null - br i1 %328, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit, label %329 + %321 = invoke noundef nonnull align 8 dereferenceable(72) ptr @_ZN5Eigen12SparseMatrixIdLi0EiEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(72) %0, ptr noundef nonnull align 8 dereferenceable(72) %5) + to label %322 unwind label %.loopexit.split-lp.loopexit.split-lp + +322: ; preds = %.loopexit131 + %323 = load ptr, ptr %173, align 8 + call void @free(ptr noundef %323) #16 + %324 = load ptr, ptr %181, align 8 + call void @free(ptr noundef %324) #16 + %325 = load ptr, ptr %200, align 8 + %326 = icmp eq ptr %325, null + br i1 %326, label %328, label %327 + +327: ; preds = %322 + call void @_ZdaPv(ptr noundef nonnull %325) #37 + br label %328 + +328: ; preds = %327, %322 + %329 = load ptr, ptr %.phi.trans.insert.i102, align 8 + %330 = icmp eq ptr %329, null + br i1 %330, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit, label %331 -329: ; preds = %326 - call void @_ZdaPv(ptr noundef nonnull %327) #37 +331: ; preds = %328 + call void @_ZdaPv(ptr noundef nonnull %329) #37 br label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit -_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit: ; preds = %.lr.ph13.i, %329, %326, %.critedge.i, %152, %.loopexit +_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit: ; preds = %.lr.ph13.i, %331, %328, %.critedge.i, %153, %.loopexit ret void -.body: ; preds = %176, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i, %.body94 - %.pn = phi { ptr, i32 } [ %eh.lpad-body95, %.body94 ], [ %177, %176 ], [ %86, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i ] +.body: ; preds = %177, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i, %.body94 + %.pn = phi { ptr, i32 } [ %eh.lpad-body95, %.body94 ], [ %178, %177 ], [ %87, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i ] resume { ptr, i32 } %.pn } diff --git a/bench/openblas/optimized/dorbdb1.ll b/bench/openblas/optimized/dorbdb1.ll index f3193a28b1f..141cff3453e 100644 --- a/bench/openblas/optimized/dorbdb1.ll +++ b/bench/openblas/optimized/dorbdb1.ll @@ -82,10 +82,11 @@ define void @dorbdb1_(ptr noundef readonly captures(none) %0, ptr noundef readon %61 = add nsw i32 %41, -2 store i32 %61, ptr %23, align 4, !tbaa !3 %62 = add nsw i32 %60, 1 - %63 = uitofp nneg i32 %62 to double - store double %63, ptr %12, align 8, !tbaa !7 - %64 = icmp sgt i32 %35, %60 - %or.cond = or i1 %64, %36 + %63 = tail call i32 @llvm.smax.i32(i32 %62, i32 %59) + %64 = uitofp nneg i32 %63 to double + store double %64, ptr %12, align 8, !tbaa !7 + %65 = icmp sge i32 %35, %63 + %or.cond = or i1 %65, %36 br i1 %or.cond, label %.thread, label %.thread273 .thread273: ; preds = %54, %50, %47, %45, %39, %15 @@ -93,7 +94,7 @@ define void @dorbdb1_(ptr noundef readonly captures(none) %0, ptr noundef readon %.neg = phi i32 [ 1, %15 ], [ 2, %39 ], [ 3, %45 ], [ 5, %47 ], [ 7, %50 ], [ 14, %54 ] store i32 %.sink, ptr %14, align 4, !tbaa !3 store i32 %.neg, ptr %16, align 4, !tbaa !3 - %65 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 + %66 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 br label %.loopexit .thread: ; preds = %54 @@ -102,173 +103,173 @@ define void @dorbdb1_(ptr noundef readonly captures(none) %0, ptr noundef readon br i1 %or.cond293, label %.loopexit, label %.lr.ph .lr.ph: ; preds = %.thread - %66 = getelementptr inbounds nuw i8, ptr %12, i64 8 - %67 = sext i32 %27 to i64 - %68 = sext i32 %24 to i64 - %69 = zext nneg i32 %41 to i64 - br label %70 - -70: ; preds = %.lr.ph, %173 - %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %173 ] - %.0.neg288 = phi i32 [ -1, %.lr.ph ], [ %.pre-phi292, %173 ] + %67 = getelementptr inbounds nuw i8, ptr %12, i64 8 + %68 = sext i32 %27 to i64 + %69 = sext i32 %24 to i64 + %70 = zext nneg i32 %41 to i64 + br label %71 + +71: ; preds = %.lr.ph, %174 + %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %174 ] + %.0.neg288 = phi i32 [ -1, %.lr.ph ], [ %.pre-phi292, %174 ] %indvars290 = trunc nuw i64 %indvars.iv to i32 - %71 = load i32, ptr %1, align 4, !tbaa !3 - %72 = add nsw i32 %.0.neg288, 1 - %73 = add i32 %72, %71 - store i32 %73, ptr %17, align 4, !tbaa !3 - %74 = mul nsw i64 %indvars.iv, %68 - %75 = mul nsw i32 %24, %indvars290 - %76 = sext i32 %75 to i64 - %77 = getelementptr double, ptr %26, i64 %indvars.iv - %78 = getelementptr double, ptr %77, i64 %76 + %72 = load i32, ptr %1, align 4, !tbaa !3 + %73 = add nsw i32 %.0.neg288, 1 + %74 = add i32 %73, %72 + store i32 %74, ptr %17, align 4, !tbaa !3 + %75 = mul nsw i64 %indvars.iv, %69 + %76 = mul nsw i32 %24, %indvars290 + %77 = sext i32 %76 to i64 + %78 = getelementptr double, ptr %26, i64 %indvars.iv + %79 = getelementptr double, ptr %78, i64 %77 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %indvars = trunc i64 %indvars.iv.next to i32 - %79 = getelementptr double, ptr %26, i64 %indvars.iv.next - %80 = getelementptr double, ptr %79, i64 %74 - %81 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %78, ptr noundef %80, ptr noundef nonnull @c__1, ptr noundef nonnull %81) #6 - %82 = load i32, ptr %0, align 4, !tbaa !3 - %83 = load i32, ptr %1, align 4, !tbaa !3 - %84 = add i32 %72, %82 - %85 = sub i32 %84, %83 - store i32 %85, ptr %17, align 4, !tbaa !3 - %86 = mul nsw i64 %indvars.iv, %67 - %87 = mul nsw i32 %27, %indvars290 - %88 = sext i32 %87 to i64 - %89 = getelementptr double, ptr %29, i64 %indvars.iv - %90 = getelementptr double, ptr %89, i64 %88 - %91 = getelementptr double, ptr %29, i64 %indvars.iv.next - %92 = getelementptr double, ptr %91, i64 %86 - %93 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %90, ptr noundef %92, ptr noundef nonnull @c__1, ptr noundef nonnull %93) #6 - %94 = load double, ptr %90, align 8, !tbaa !7 - %95 = load double, ptr %78, align 8, !tbaa !7 - %96 = call double @atan2(double noundef %94, double noundef %95) #6, !tbaa !3 - %97 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv - store double %96, ptr %97, align 8, !tbaa !7 - %98 = call double @cos(double noundef %96) #6, !tbaa !3 - store double %98, ptr %20, align 8, !tbaa !7 - %99 = call double @sin(double noundef %96) #6, !tbaa !3 - store double %99, ptr %21, align 8, !tbaa !7 - store double 1.000000e+00, ptr %78, align 8, !tbaa !7 - store double 1.000000e+00, ptr %90, align 8, !tbaa !7 - %100 = load i32, ptr %1, align 4, !tbaa !3 - %101 = add i32 %72, %100 - store i32 %101, ptr %17, align 4, !tbaa !3 - %102 = load i32, ptr %2, align 4, !tbaa !3 - %103 = sub nsw i32 %102, %indvars290 - store i32 %103, ptr %18, align 4, !tbaa !3 - %104 = mul nsw i32 %24, %indvars - %105 = sext i32 %104 to i64 - %106 = getelementptr double, ptr %26, i64 %indvars.iv - %107 = getelementptr double, ptr %106, i64 %105 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %78, ptr noundef nonnull @c__1, ptr noundef nonnull %81, ptr noundef %107, ptr noundef nonnull %4, ptr noundef nonnull %66) #6 - %108 = load i32, ptr %0, align 4, !tbaa !3 - %109 = load i32, ptr %1, align 4, !tbaa !3 - %110 = add i32 %72, %108 - %111 = sub i32 %110, %109 - store i32 %111, ptr %17, align 4, !tbaa !3 - %112 = load i32, ptr %2, align 4, !tbaa !3 - %113 = sub nsw i32 %112, %indvars290 - store i32 %113, ptr %18, align 4, !tbaa !3 - %114 = mul nsw i32 %27, %indvars - %115 = sext i32 %114 to i64 - %116 = getelementptr double, ptr %29, i64 %indvars.iv - %117 = getelementptr double, ptr %116, i64 %115 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %90, ptr noundef nonnull @c__1, ptr noundef nonnull %93, ptr noundef %117, ptr noundef nonnull %6, ptr noundef nonnull %66) #6 - %118 = load i32, ptr %2, align 4, !tbaa !3 - %119 = sext i32 %118 to i64 - %120 = icmp slt i64 %indvars.iv, %119 - br i1 %120, label %122, label %._crit_edge - -._crit_edge: ; preds = %70 - %121 = trunc nuw i64 %indvars.iv to i32 - %.pre291 = xor i32 %121, -1 - br label %173 - -122: ; preds = %70 - %123 = sub nsw i32 %118, %indvars290 - store i32 %123, ptr %17, align 4, !tbaa !3 - call void @drot_(ptr noundef nonnull %17, ptr noundef nonnull %107, ptr noundef nonnull %4, ptr noundef nonnull %117, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 - %124 = load i32, ptr %2, align 4, !tbaa !3 - %125 = sub nsw i32 %124, %indvars290 - store i32 %125, ptr %17, align 4, !tbaa !3 - %126 = add nuw nsw i64 %indvars.iv, 2 - %127 = add nuw nsw i32 %indvars290, 2 - %128 = mul nsw i64 %126, %67 - %129 = mul nsw i32 %127, %27 - %130 = sext i32 %129 to i64 - %131 = getelementptr double, ptr %29, i64 %indvars.iv - %132 = getelementptr double, ptr %131, i64 %130 - %133 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %117, ptr noundef %132, ptr noundef nonnull %6, ptr noundef nonnull %133) #6 - %134 = load double, ptr %117, align 8, !tbaa !7 - store double %134, ptr %21, align 8, !tbaa !7 - store double 1.000000e+00, ptr %117, align 8, !tbaa !7 - %135 = load i32, ptr %1, align 4, !tbaa !3 - %136 = sub nsw i32 %135, %indvars290 - store i32 %136, ptr %17, align 4, !tbaa !3 - %137 = load i32, ptr %2, align 4, !tbaa !3 - %138 = sub nsw i32 %137, %indvars290 - store i32 %138, ptr %18, align 4, !tbaa !3 - %139 = getelementptr double, ptr %26, i64 %indvars.iv.next - %140 = getelementptr double, ptr %139, i64 %105 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %117, ptr noundef nonnull %6, ptr noundef nonnull %133, ptr noundef %140, ptr noundef nonnull %4, ptr noundef nonnull %66) #6 - %141 = load i32, ptr %0, align 4, !tbaa !3 - %142 = load i32, ptr %1, align 4, !tbaa !3 - %.neg281 = add i32 %141, %.0.neg288 - %143 = sub i32 %.neg281, %142 - store i32 %143, ptr %17, align 4, !tbaa !3 - %144 = load i32, ptr %2, align 4, !tbaa !3 - %145 = sub nsw i32 %144, %indvars290 - store i32 %145, ptr %18, align 4, !tbaa !3 - %146 = getelementptr double, ptr %29, i64 %indvars.iv.next - %147 = getelementptr double, ptr %146, i64 %115 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %117, ptr noundef nonnull %6, ptr noundef nonnull %133, ptr noundef %147, ptr noundef nonnull %6, ptr noundef nonnull %66) #6 - %148 = load i32, ptr %1, align 4, !tbaa !3 - %149 = sub nsw i32 %148, %indvars290 - store i32 %149, ptr %17, align 4, !tbaa !3 - %150 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %140, ptr noundef nonnull @c__1) #6 - %151 = load i32, ptr %0, align 4, !tbaa !3 - %152 = load i32, ptr %1, align 4, !tbaa !3 - %.neg283 = add i32 %151, %.0.neg288 - %153 = sub i32 %.neg283, %152 - store i32 %153, ptr %18, align 4, !tbaa !3 - %154 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %147, ptr noundef nonnull @c__1) #6 - %155 = fmul double %154, %154 - %156 = call double @llvm.fmuladd.f64(double %150, double %150, double %155) - %sqrt = call double @llvm.sqrt.f64(double %156) + %80 = getelementptr double, ptr %26, i64 %indvars.iv.next + %81 = getelementptr double, ptr %80, i64 %75 + %82 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %79, ptr noundef %81, ptr noundef nonnull @c__1, ptr noundef nonnull %82) #6 + %83 = load i32, ptr %0, align 4, !tbaa !3 + %84 = load i32, ptr %1, align 4, !tbaa !3 + %85 = add i32 %73, %83 + %86 = sub i32 %85, %84 + store i32 %86, ptr %17, align 4, !tbaa !3 + %87 = mul nsw i64 %indvars.iv, %68 + %88 = mul nsw i32 %27, %indvars290 + %89 = sext i32 %88 to i64 + %90 = getelementptr double, ptr %29, i64 %indvars.iv + %91 = getelementptr double, ptr %90, i64 %89 + %92 = getelementptr double, ptr %29, i64 %indvars.iv.next + %93 = getelementptr double, ptr %92, i64 %87 + %94 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %91, ptr noundef %93, ptr noundef nonnull @c__1, ptr noundef nonnull %94) #6 + %95 = load double, ptr %91, align 8, !tbaa !7 + %96 = load double, ptr %79, align 8, !tbaa !7 + %97 = call double @atan2(double noundef %95, double noundef %96) #6, !tbaa !3 + %98 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv + store double %97, ptr %98, align 8, !tbaa !7 + %99 = call double @cos(double noundef %97) #6, !tbaa !3 + store double %99, ptr %20, align 8, !tbaa !7 + %100 = call double @sin(double noundef %97) #6, !tbaa !3 + store double %100, ptr %21, align 8, !tbaa !7 + store double 1.000000e+00, ptr %79, align 8, !tbaa !7 + store double 1.000000e+00, ptr %91, align 8, !tbaa !7 + %101 = load i32, ptr %1, align 4, !tbaa !3 + %102 = add i32 %73, %101 + store i32 %102, ptr %17, align 4, !tbaa !3 + %103 = load i32, ptr %2, align 4, !tbaa !3 + %104 = sub nsw i32 %103, %indvars290 + store i32 %104, ptr %18, align 4, !tbaa !3 + %105 = mul nsw i32 %24, %indvars + %106 = sext i32 %105 to i64 + %107 = getelementptr double, ptr %26, i64 %indvars.iv + %108 = getelementptr double, ptr %107, i64 %106 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %79, ptr noundef nonnull @c__1, ptr noundef nonnull %82, ptr noundef %108, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 + %109 = load i32, ptr %0, align 4, !tbaa !3 + %110 = load i32, ptr %1, align 4, !tbaa !3 + %111 = add i32 %73, %109 + %112 = sub i32 %111, %110 + store i32 %112, ptr %17, align 4, !tbaa !3 + %113 = load i32, ptr %2, align 4, !tbaa !3 + %114 = sub nsw i32 %113, %indvars290 + store i32 %114, ptr %18, align 4, !tbaa !3 + %115 = mul nsw i32 %27, %indvars + %116 = sext i32 %115 to i64 + %117 = getelementptr double, ptr %29, i64 %indvars.iv + %118 = getelementptr double, ptr %117, i64 %116 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %91, ptr noundef nonnull @c__1, ptr noundef nonnull %94, ptr noundef %118, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 + %119 = load i32, ptr %2, align 4, !tbaa !3 + %120 = sext i32 %119 to i64 + %121 = icmp slt i64 %indvars.iv, %120 + br i1 %121, label %123, label %._crit_edge + +._crit_edge: ; preds = %71 + %122 = trunc nuw i64 %indvars.iv to i32 + %.pre291 = xor i32 %122, -1 + br label %174 + +123: ; preds = %71 + %124 = sub nsw i32 %119, %indvars290 + store i32 %124, ptr %17, align 4, !tbaa !3 + call void @drot_(ptr noundef nonnull %17, ptr noundef nonnull %108, ptr noundef nonnull %4, ptr noundef nonnull %118, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 + %125 = load i32, ptr %2, align 4, !tbaa !3 + %126 = sub nsw i32 %125, %indvars290 + store i32 %126, ptr %17, align 4, !tbaa !3 + %127 = add nuw nsw i64 %indvars.iv, 2 + %128 = add nuw nsw i32 %indvars290, 2 + %129 = mul nsw i64 %127, %68 + %130 = mul nsw i32 %128, %27 + %131 = sext i32 %130 to i64 + %132 = getelementptr double, ptr %29, i64 %indvars.iv + %133 = getelementptr double, ptr %132, i64 %131 + %134 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %118, ptr noundef %133, ptr noundef nonnull %6, ptr noundef nonnull %134) #6 + %135 = load double, ptr %118, align 8, !tbaa !7 + store double %135, ptr %21, align 8, !tbaa !7 + store double 1.000000e+00, ptr %118, align 8, !tbaa !7 + %136 = load i32, ptr %1, align 4, !tbaa !3 + %137 = sub nsw i32 %136, %indvars290 + store i32 %137, ptr %17, align 4, !tbaa !3 + %138 = load i32, ptr %2, align 4, !tbaa !3 + %139 = sub nsw i32 %138, %indvars290 + store i32 %139, ptr %18, align 4, !tbaa !3 + %140 = getelementptr double, ptr %26, i64 %indvars.iv.next + %141 = getelementptr double, ptr %140, i64 %106 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %118, ptr noundef nonnull %6, ptr noundef nonnull %134, ptr noundef %141, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 + %142 = load i32, ptr %0, align 4, !tbaa !3 + %143 = load i32, ptr %1, align 4, !tbaa !3 + %.neg281 = add i32 %142, %.0.neg288 + %144 = sub i32 %.neg281, %143 + store i32 %144, ptr %17, align 4, !tbaa !3 + %145 = load i32, ptr %2, align 4, !tbaa !3 + %146 = sub nsw i32 %145, %indvars290 + store i32 %146, ptr %18, align 4, !tbaa !3 + %147 = getelementptr double, ptr %29, i64 %indvars.iv.next + %148 = getelementptr double, ptr %147, i64 %116 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %118, ptr noundef nonnull %6, ptr noundef nonnull %134, ptr noundef %148, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 + %149 = load i32, ptr %1, align 4, !tbaa !3 + %150 = sub nsw i32 %149, %indvars290 + store i32 %150, ptr %17, align 4, !tbaa !3 + %151 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %141, ptr noundef nonnull @c__1) #6 + %152 = load i32, ptr %0, align 4, !tbaa !3 + %153 = load i32, ptr %1, align 4, !tbaa !3 + %.neg283 = add i32 %152, %.0.neg288 + %154 = sub i32 %.neg283, %153 + store i32 %154, ptr %18, align 4, !tbaa !3 + %155 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %148, ptr noundef nonnull @c__1) #6 + %156 = fmul double %155, %155 + %157 = call double @llvm.fmuladd.f64(double %151, double %151, double %156) + %sqrt = call double @llvm.sqrt.f64(double %157) store double %sqrt, ptr %20, align 8, !tbaa !7 - %157 = load double, ptr %21, align 8, !tbaa !7 - %158 = call double @atan2(double noundef %157, double noundef %sqrt) #6, !tbaa !3 - %159 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv - store double %158, ptr %159, align 8, !tbaa !7 - %160 = load i32, ptr %1, align 4, !tbaa !3 - %161 = sub nsw i32 %160, %indvars290 - store i32 %161, ptr %17, align 4, !tbaa !3 - %162 = load i32, ptr %0, align 4, !tbaa !3 - %.neg285 = sub i32 %.0.neg288, %160 - %163 = add i32 %.neg285, %162 - store i32 %163, ptr %18, align 4, !tbaa !3 - %164 = load i32, ptr %2, align 4, !tbaa !3 - %165 = trunc nuw nsw i64 %indvars.iv to i32 - %166 = xor i32 %165, -1 - %167 = add i32 %164, %166 - store i32 %167, ptr %19, align 4, !tbaa !3 - %168 = mul nsw i64 %126, %68 - %169 = getelementptr double, ptr %26, i64 %168 - %170 = getelementptr double, ptr %169, i64 %indvars.iv.next - %171 = getelementptr double, ptr %29, i64 %128 - %172 = getelementptr double, ptr %171, i64 %indvars.iv.next - call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %140, ptr noundef nonnull @c__1, ptr noundef %147, ptr noundef nonnull @c__1, ptr noundef %170, ptr noundef nonnull %4, ptr noundef %172, ptr noundef nonnull %6, ptr noundef nonnull %66, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 - br label %173 - -173: ; preds = %._crit_edge, %122 - %.pre-phi292 = phi i32 [ %.pre291, %._crit_edge ], [ %166, %122 ] - %.not265.not = icmp samesign ult i64 %indvars.iv, %69 - br i1 %.not265.not, label %70, label %.loopexit, !llvm.loop !9 - -.loopexit: ; preds = %173, %.thread, %.thread273 + %158 = load double, ptr %21, align 8, !tbaa !7 + %159 = call double @atan2(double noundef %158, double noundef %sqrt) #6, !tbaa !3 + %160 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv + store double %159, ptr %160, align 8, !tbaa !7 + %161 = load i32, ptr %1, align 4, !tbaa !3 + %162 = sub nsw i32 %161, %indvars290 + store i32 %162, ptr %17, align 4, !tbaa !3 + %163 = load i32, ptr %0, align 4, !tbaa !3 + %.neg285 = sub i32 %.0.neg288, %161 + %164 = add i32 %.neg285, %163 + store i32 %164, ptr %18, align 4, !tbaa !3 + %165 = load i32, ptr %2, align 4, !tbaa !3 + %166 = trunc nuw nsw i64 %indvars.iv to i32 + %167 = xor i32 %166, -1 + %168 = add i32 %165, %167 + store i32 %168, ptr %19, align 4, !tbaa !3 + %169 = mul nsw i64 %127, %69 + %170 = getelementptr double, ptr %26, i64 %169 + %171 = getelementptr double, ptr %170, i64 %indvars.iv.next + %172 = getelementptr double, ptr %29, i64 %129 + %173 = getelementptr double, ptr %172, i64 %indvars.iv.next + call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %141, ptr noundef nonnull @c__1, ptr noundef %148, ptr noundef nonnull @c__1, ptr noundef %171, ptr noundef nonnull %4, ptr noundef %173, ptr noundef nonnull %6, ptr noundef nonnull %67, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 + br label %174 + +174: ; preds = %._crit_edge, %123 + %.pre-phi292 = phi i32 [ %.pre291, %._crit_edge ], [ %167, %123 ] + %.not265.not = icmp samesign ult i64 %indvars.iv, %70 + br i1 %.not265.not, label %71, label %.loopexit, !llvm.loop !9 + +.loopexit: ; preds = %174, %.thread, %.thread273 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6 diff --git a/bench/openblas/optimized/dorbdb2.ll b/bench/openblas/optimized/dorbdb2.ll index ae0beb06433..183623b0990 100644 --- a/bench/openblas/optimized/dorbdb2.ll +++ b/bench/openblas/optimized/dorbdb2.ll @@ -82,10 +82,11 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon %60 = tail call i32 @llvm.smax.i32(i32 %58, i32 %59) store i32 %59, ptr %23, align 4, !tbaa !3 %61 = add nsw i32 %60, 1 - %62 = uitofp nneg i32 %61 to double - store double %62, ptr %12, align 8, !tbaa !7 - %63 = icmp sgt i32 %35, %60 - %or.cond = or i1 %63, %36 + %62 = tail call i32 @llvm.umax.i32(i32 %61, i32 %45) + %63 = uitofp nneg i32 %62 to double + store double %63, ptr %12, align 8, !tbaa !7 + %64 = icmp sge i32 %35, %62 + %or.cond = or i1 %64, %36 br i1 %or.cond, label %.thread, label %.thread322 .thread322: ; preds = %56, %52, %49, %44, %39, %15 @@ -93,248 +94,248 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon %.neg = phi i32 [ 1, %15 ], [ 2, %39 ], [ 3, %44 ], [ 5, %49 ], [ 7, %52 ], [ 14, %56 ] store i32 %.sink, ptr %14, align 4, !tbaa !3 store i32 %.neg, ptr %16, align 4, !tbaa !3 - %64 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 + %65 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 br label %.loopexit .thread: ; preds = %56 - br i1 %36, label %.loopexit, label %65 + br i1 %36, label %.loopexit, label %66 -65: ; preds = %.thread +66: ; preds = %.thread %.not312339 = icmp eq i32 %40, 0 br i1 %.not312339, label %._crit_edge, label %.lr.ph -.lr.ph: ; preds = %65 - %66 = add i32 %24, 1 - %67 = getelementptr inbounds nuw i8, ptr %12, i64 8 - %68 = sext i32 %27 to i64 - %69 = sext i32 %24 to i64 +.lr.ph: ; preds = %66 + %67 = add i32 %24, 1 + %68 = getelementptr inbounds nuw i8, ptr %12, i64 8 + %69 = sext i32 %27 to i64 + %70 = sext i32 %24 to i64 %invariant.gep = getelementptr i8, ptr %29, i64 -8 %invariant.gep362 = getelementptr i8, ptr %26, i64 16 - %70 = zext nneg i32 %40 to i64 - br label %71 + %71 = zext nneg i32 %40 to i64 + br label %72 -71: ; preds = %.lr.ph, %163 - %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %163 ] - %.0.neg341 = phi i32 [ -1, %.lr.ph ], [ %171, %163 ] +72: ; preds = %.lr.ph, %164 + %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %164 ] + %.0.neg341 = phi i32 [ -1, %.lr.ph ], [ %172, %164 ] %indvars349 = trunc nuw i64 %indvars.iv to i32 - %72 = icmp samesign ugt i64 %indvars.iv, 1 + %73 = icmp samesign ugt i64 %indvars.iv, 1 %.pre354 = load i32, ptr %2, align 4, !tbaa !3 - %73 = add nsw i32 %.0.neg341, 1 - br i1 %72, label %74, label %._crit_edge358 - -._crit_edge358: ; preds = %71 - %.pre360 = mul nuw nsw i64 %indvars.iv, %68 - br label %81 - -74: ; preds = %71 - %75 = add i32 %73, %.pre354 - store i32 %75, ptr %17, align 4, !tbaa !3 - %76 = mul i32 %66, %indvars349 - %77 = sext i32 %76 to i64 - %78 = getelementptr inbounds double, ptr %26, i64 %77 - %79 = mul nsw i64 %indvars.iv, %68 + %74 = add nsw i32 %.0.neg341, 1 + br i1 %73, label %75, label %._crit_edge358 + +._crit_edge358: ; preds = %72 + %.pre360 = mul nuw nsw i64 %indvars.iv, %69 + br label %82 + +75: ; preds = %72 + %76 = add i32 %74, %.pre354 + store i32 %76, ptr %17, align 4, !tbaa !3 + %77 = mul i32 %67, %indvars349 + %78 = sext i32 %77 to i64 + %79 = getelementptr inbounds double, ptr %26, i64 %78 + %80 = mul nsw i64 %indvars.iv, %69 %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv - %80 = getelementptr double, ptr %gep, i64 %79 - call void @drot_(ptr noundef nonnull %17, ptr noundef %78, ptr noundef nonnull %4, ptr noundef %80, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 + %81 = getelementptr double, ptr %gep, i64 %80 + call void @drot_(ptr noundef nonnull %17, ptr noundef %79, ptr noundef nonnull %4, ptr noundef %81, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 %.pre = load i32, ptr %2, align 4, !tbaa !3 - br label %81 - -81: ; preds = %._crit_edge358, %74 - %.pre-phi361 = phi i64 [ %.pre360, %._crit_edge358 ], [ %79, %74 ] - %82 = phi i32 [ %.pre354, %._crit_edge358 ], [ %.pre, %74 ] - %83 = add i32 %73, %82 - store i32 %83, ptr %17, align 4, !tbaa !3 - %84 = mul nsw i64 %indvars.iv, %69 - %85 = mul nsw i32 %24, %indvars349 - %86 = sext i32 %85 to i64 - %87 = getelementptr double, ptr %26, i64 %indvars.iv - %88 = getelementptr double, ptr %87, i64 %86 + br label %82 + +82: ; preds = %._crit_edge358, %75 + %.pre-phi361 = phi i64 [ %.pre360, %._crit_edge358 ], [ %80, %75 ] + %83 = phi i32 [ %.pre354, %._crit_edge358 ], [ %.pre, %75 ] + %84 = add i32 %74, %83 + store i32 %84, ptr %17, align 4, !tbaa !3 + %85 = mul nsw i64 %indvars.iv, %70 + %86 = mul nsw i32 %24, %indvars349 + %87 = sext i32 %86 to i64 + %88 = getelementptr double, ptr %26, i64 %indvars.iv + %89 = getelementptr double, ptr %88, i64 %87 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %indvars = trunc i64 %indvars.iv.next to i32 - %89 = mul nsw i32 %24, %indvars - %90 = sext i32 %89 to i64 - %91 = getelementptr double, ptr %26, i64 %indvars.iv - %92 = getelementptr double, ptr %91, i64 %90 - %93 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %88, ptr noundef %92, ptr noundef nonnull %4, ptr noundef nonnull %93) #6 - %94 = load double, ptr %88, align 8, !tbaa !7 - store double %94, ptr %20, align 8, !tbaa !7 - store double 1.000000e+00, ptr %88, align 8, !tbaa !7 - %95 = load i32, ptr %1, align 4, !tbaa !3 - %96 = sub nsw i32 %95, %indvars349 - store i32 %96, ptr %17, align 4, !tbaa !3 - %97 = load i32, ptr %2, align 4, !tbaa !3 - %98 = add i32 %73, %97 - store i32 %98, ptr %18, align 4, !tbaa !3 - %99 = getelementptr double, ptr %26, i64 %indvars.iv.next - %100 = getelementptr double, ptr %99, i64 %84 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %88, ptr noundef nonnull %4, ptr noundef nonnull %93, ptr noundef %100, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 - %101 = load i32, ptr %0, align 4, !tbaa !3 - %102 = load i32, ptr %1, align 4, !tbaa !3 - %103 = add i32 %73, %101 - %104 = sub i32 %103, %102 - store i32 %104, ptr %17, align 4, !tbaa !3 - %105 = load i32, ptr %2, align 4, !tbaa !3 - %106 = add i32 %73, %105 - store i32 %106, ptr %18, align 4, !tbaa !3 - %107 = mul nsw i32 %27, %indvars349 - %108 = sext i32 %107 to i64 - %109 = getelementptr double, ptr %29, i64 %indvars.iv - %110 = getelementptr double, ptr %109, i64 %108 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %88, ptr noundef nonnull %4, ptr noundef nonnull %93, ptr noundef %110, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 - %111 = load i32, ptr %1, align 4, !tbaa !3 - %112 = sub nsw i32 %111, %indvars349 - store i32 %112, ptr %17, align 4, !tbaa !3 - %113 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %100, ptr noundef nonnull @c__1) #6 - %114 = load i32, ptr %0, align 4, !tbaa !3 - %115 = load i32, ptr %1, align 4, !tbaa !3 - %116 = add i32 %73, %114 - %117 = sub i32 %116, %115 - store i32 %117, ptr %18, align 4, !tbaa !3 - %118 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %110, ptr noundef nonnull @c__1) #6 - %119 = fmul double %118, %118 - %120 = call double @llvm.fmuladd.f64(double %113, double %113, double %119) - %sqrt = call double @llvm.sqrt.f64(double %120) + %90 = mul nsw i32 %24, %indvars + %91 = sext i32 %90 to i64 + %92 = getelementptr double, ptr %26, i64 %indvars.iv + %93 = getelementptr double, ptr %92, i64 %91 + %94 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %89, ptr noundef %93, ptr noundef nonnull %4, ptr noundef nonnull %94) #6 + %95 = load double, ptr %89, align 8, !tbaa !7 + store double %95, ptr %20, align 8, !tbaa !7 + store double 1.000000e+00, ptr %89, align 8, !tbaa !7 + %96 = load i32, ptr %1, align 4, !tbaa !3 + %97 = sub nsw i32 %96, %indvars349 + store i32 %97, ptr %17, align 4, !tbaa !3 + %98 = load i32, ptr %2, align 4, !tbaa !3 + %99 = add i32 %74, %98 + store i32 %99, ptr %18, align 4, !tbaa !3 + %100 = getelementptr double, ptr %26, i64 %indvars.iv.next + %101 = getelementptr double, ptr %100, i64 %85 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %89, ptr noundef nonnull %4, ptr noundef nonnull %94, ptr noundef %101, ptr noundef nonnull %4, ptr noundef nonnull %68) #6 + %102 = load i32, ptr %0, align 4, !tbaa !3 + %103 = load i32, ptr %1, align 4, !tbaa !3 + %104 = add i32 %74, %102 + %105 = sub i32 %104, %103 + store i32 %105, ptr %17, align 4, !tbaa !3 + %106 = load i32, ptr %2, align 4, !tbaa !3 + %107 = add i32 %74, %106 + store i32 %107, ptr %18, align 4, !tbaa !3 + %108 = mul nsw i32 %27, %indvars349 + %109 = sext i32 %108 to i64 + %110 = getelementptr double, ptr %29, i64 %indvars.iv + %111 = getelementptr double, ptr %110, i64 %109 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %89, ptr noundef nonnull %4, ptr noundef nonnull %94, ptr noundef %111, ptr noundef nonnull %6, ptr noundef nonnull %68) #6 + %112 = load i32, ptr %1, align 4, !tbaa !3 + %113 = sub nsw i32 %112, %indvars349 + store i32 %113, ptr %17, align 4, !tbaa !3 + %114 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %101, ptr noundef nonnull @c__1) #6 + %115 = load i32, ptr %0, align 4, !tbaa !3 + %116 = load i32, ptr %1, align 4, !tbaa !3 + %117 = add i32 %74, %115 + %118 = sub i32 %117, %116 + store i32 %118, ptr %18, align 4, !tbaa !3 + %119 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %111, ptr noundef nonnull @c__1) #6 + %120 = fmul double %119, %119 + %121 = call double @llvm.fmuladd.f64(double %114, double %114, double %120) + %sqrt = call double @llvm.sqrt.f64(double %121) store double %sqrt, ptr %21, align 8, !tbaa !7 - %121 = load double, ptr %20, align 8, !tbaa !7 - %122 = call double @atan2(double noundef %sqrt, double noundef %121) #6, !tbaa !3 - %123 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv - store double %122, ptr %123, align 8, !tbaa !7 - %124 = load i32, ptr %1, align 4, !tbaa !3 - %125 = sub nsw i32 %124, %indvars349 - store i32 %125, ptr %17, align 4, !tbaa !3 - %126 = load i32, ptr %0, align 4, !tbaa !3 - %127 = sub i32 %73, %124 - %128 = add i32 %127, %126 - store i32 %128, ptr %18, align 4, !tbaa !3 - %129 = load i32, ptr %2, align 4, !tbaa !3 - %130 = sub nsw i32 %129, %indvars349 - store i32 %130, ptr %19, align 4, !tbaa !3 - %131 = getelementptr double, ptr %26, i64 %indvars.iv.next - %132 = getelementptr double, ptr %131, i64 %90 - %133 = mul nsw i32 %27, %indvars - %134 = sext i32 %133 to i64 - %135 = getelementptr double, ptr %29, i64 %indvars.iv - %136 = getelementptr double, ptr %135, i64 %134 - call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %100, ptr noundef nonnull @c__1, ptr noundef %110, ptr noundef nonnull @c__1, ptr noundef %132, ptr noundef nonnull %4, ptr noundef %136, ptr noundef nonnull %6, ptr noundef nonnull %67, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 - %137 = load i32, ptr %1, align 4, !tbaa !3 - %138 = sub nsw i32 %137, %indvars349 - store i32 %138, ptr %17, align 4, !tbaa !3 - call void @dscal_(ptr noundef nonnull %17, ptr noundef nonnull @c_b9, ptr noundef %100, ptr noundef nonnull @c__1) #6 - %139 = load i32, ptr %0, align 4, !tbaa !3 - %140 = load i32, ptr %1, align 4, !tbaa !3 - %141 = add i32 %73, %139 - %142 = sub i32 %141, %140 - store i32 %142, ptr %17, align 4, !tbaa !3 - %143 = getelementptr double, ptr %29, i64 %indvars.iv.next - %144 = getelementptr double, ptr %143, i64 %.pre-phi361 - %145 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %110, ptr noundef %144, ptr noundef nonnull @c__1, ptr noundef nonnull %145) #6 - %146 = load i32, ptr %1, align 4, !tbaa !3 - %147 = sext i32 %146 to i64 - %148 = icmp slt i64 %indvars.iv, %147 - br i1 %148, label %149, label %163 - -149: ; preds = %81 - %150 = sub nsw i32 %146, %indvars349 - store i32 %150, ptr %17, align 4, !tbaa !3 + %122 = load double, ptr %20, align 8, !tbaa !7 + %123 = call double @atan2(double noundef %sqrt, double noundef %122) #6, !tbaa !3 + %124 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv + store double %123, ptr %124, align 8, !tbaa !7 + %125 = load i32, ptr %1, align 4, !tbaa !3 + %126 = sub nsw i32 %125, %indvars349 + store i32 %126, ptr %17, align 4, !tbaa !3 + %127 = load i32, ptr %0, align 4, !tbaa !3 + %128 = sub i32 %74, %125 + %129 = add i32 %128, %127 + store i32 %129, ptr %18, align 4, !tbaa !3 + %130 = load i32, ptr %2, align 4, !tbaa !3 + %131 = sub nsw i32 %130, %indvars349 + store i32 %131, ptr %19, align 4, !tbaa !3 + %132 = getelementptr double, ptr %26, i64 %indvars.iv.next + %133 = getelementptr double, ptr %132, i64 %91 + %134 = mul nsw i32 %27, %indvars + %135 = sext i32 %134 to i64 + %136 = getelementptr double, ptr %29, i64 %indvars.iv + %137 = getelementptr double, ptr %136, i64 %135 + call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %101, ptr noundef nonnull @c__1, ptr noundef %111, ptr noundef nonnull @c__1, ptr noundef %133, ptr noundef nonnull %4, ptr noundef %137, ptr noundef nonnull %6, ptr noundef nonnull %68, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 + %138 = load i32, ptr %1, align 4, !tbaa !3 + %139 = sub nsw i32 %138, %indvars349 + store i32 %139, ptr %17, align 4, !tbaa !3 + call void @dscal_(ptr noundef nonnull %17, ptr noundef nonnull @c_b9, ptr noundef %101, ptr noundef nonnull @c__1) #6 + %140 = load i32, ptr %0, align 4, !tbaa !3 + %141 = load i32, ptr %1, align 4, !tbaa !3 + %142 = add i32 %74, %140 + %143 = sub i32 %142, %141 + store i32 %143, ptr %17, align 4, !tbaa !3 + %144 = getelementptr double, ptr %29, i64 %indvars.iv.next + %145 = getelementptr double, ptr %144, i64 %.pre-phi361 + %146 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %111, ptr noundef %145, ptr noundef nonnull @c__1, ptr noundef nonnull %146) #6 + %147 = load i32, ptr %1, align 4, !tbaa !3 + %148 = sext i32 %147 to i64 + %149 = icmp slt i64 %indvars.iv, %148 + br i1 %149, label %150, label %164 + +150: ; preds = %82 + %151 = sub nsw i32 %147, %indvars349 + store i32 %151, ptr %17, align 4, !tbaa !3 %gep363 = getelementptr double, ptr %invariant.gep362, i64 %indvars.iv - %151 = getelementptr double, ptr %gep363, i64 %84 - %152 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %100, ptr noundef %151, ptr noundef nonnull @c__1, ptr noundef nonnull %152) #6 - %153 = load double, ptr %100, align 8, !tbaa !7 - %154 = load double, ptr %110, align 8, !tbaa !7 - %155 = call double @atan2(double noundef %153, double noundef %154) #6, !tbaa !3 - %156 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv - store double %155, ptr %156, align 8, !tbaa !7 - %157 = call double @cos(double noundef %155) #6, !tbaa !3 - store double %157, ptr %20, align 8, !tbaa !7 - %158 = call double @sin(double noundef %155) #6, !tbaa !3 - store double %158, ptr %21, align 8, !tbaa !7 - store double 1.000000e+00, ptr %100, align 8, !tbaa !7 - %159 = load i32, ptr %1, align 4, !tbaa !3 - %160 = sub nsw i32 %159, %indvars349 - store i32 %160, ptr %17, align 4, !tbaa !3 - %161 = load i32, ptr %2, align 4, !tbaa !3 - %162 = sub nsw i32 %161, %indvars349 - store i32 %162, ptr %18, align 4, !tbaa !3 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %100, ptr noundef nonnull @c__1, ptr noundef nonnull %152, ptr noundef nonnull %132, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 + %152 = getelementptr double, ptr %gep363, i64 %85 + %153 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %101, ptr noundef %152, ptr noundef nonnull @c__1, ptr noundef nonnull %153) #6 + %154 = load double, ptr %101, align 8, !tbaa !7 + %155 = load double, ptr %111, align 8, !tbaa !7 + %156 = call double @atan2(double noundef %154, double noundef %155) #6, !tbaa !3 + %157 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv + store double %156, ptr %157, align 8, !tbaa !7 + %158 = call double @cos(double noundef %156) #6, !tbaa !3 + store double %158, ptr %20, align 8, !tbaa !7 + %159 = call double @sin(double noundef %156) #6, !tbaa !3 + store double %159, ptr %21, align 8, !tbaa !7 + store double 1.000000e+00, ptr %101, align 8, !tbaa !7 + %160 = load i32, ptr %1, align 4, !tbaa !3 + %161 = sub nsw i32 %160, %indvars349 + store i32 %161, ptr %17, align 4, !tbaa !3 + %162 = load i32, ptr %2, align 4, !tbaa !3 + %163 = sub nsw i32 %162, %indvars349 + store i32 %163, ptr %18, align 4, !tbaa !3 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %101, ptr noundef nonnull @c__1, ptr noundef nonnull %153, ptr noundef nonnull %133, ptr noundef nonnull %4, ptr noundef nonnull %68) #6 %.pre355 = load i32, ptr %1, align 4, !tbaa !3 - br label %163 - -163: ; preds = %149, %81 - %164 = phi i32 [ %.pre355, %149 ], [ %146, %81 ] - store double 1.000000e+00, ptr %110, align 8, !tbaa !7 - %165 = load i32, ptr %0, align 4, !tbaa !3 - %166 = add i32 %73, %165 - %167 = sub i32 %166, %164 - store i32 %167, ptr %17, align 4, !tbaa !3 - %168 = load i32, ptr %2, align 4, !tbaa !3 - %169 = sub nsw i32 %168, %indvars349 - store i32 %169, ptr %18, align 4, !tbaa !3 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %110, ptr noundef nonnull @c__1, ptr noundef nonnull %145, ptr noundef %136, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 - %.not312.not = icmp samesign ult i64 %indvars.iv, %70 - %170 = trunc nuw i64 %indvars.iv to i32 - %171 = xor i32 %170, -1 - br i1 %.not312.not, label %71, label %._crit_edge.loopexit, !llvm.loop !9 - -._crit_edge.loopexit: ; preds = %163 + br label %164 + +164: ; preds = %150, %82 + %165 = phi i32 [ %.pre355, %150 ], [ %147, %82 ] + store double 1.000000e+00, ptr %111, align 8, !tbaa !7 + %166 = load i32, ptr %0, align 4, !tbaa !3 + %167 = add i32 %74, %166 + %168 = sub i32 %167, %165 + store i32 %168, ptr %17, align 4, !tbaa !3 + %169 = load i32, ptr %2, align 4, !tbaa !3 + %170 = sub nsw i32 %169, %indvars349 + store i32 %170, ptr %18, align 4, !tbaa !3 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %111, ptr noundef nonnull @c__1, ptr noundef nonnull %146, ptr noundef %137, ptr noundef nonnull %6, ptr noundef nonnull %68) #6 + %.not312.not = icmp samesign ult i64 %indvars.iv, %71 + %171 = trunc nuw i64 %indvars.iv to i32 + %172 = xor i32 %171, -1 + br i1 %.not312.not, label %72, label %._crit_edge.loopexit, !llvm.loop !9 + +._crit_edge.loopexit: ; preds = %164 %.pre356 = load i32, ptr %2, align 4, !tbaa !3 %.pre357 = load i32, ptr %1, align 4, !tbaa !3 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %65 - %172 = phi i32 [ %.pre357, %._crit_edge.loopexit ], [ 0, %65 ] - %173 = phi i32 [ %.pre356, %._crit_edge.loopexit ], [ %45, %65 ] - %.not313343.not = icmp slt i32 %172, %173 +._crit_edge: ; preds = %._crit_edge.loopexit, %66 + %173 = phi i32 [ %.pre357, %._crit_edge.loopexit ], [ 0, %66 ] + %174 = phi i32 [ %.pre356, %._crit_edge.loopexit ], [ %45, %66 ] + %.not313343.not = icmp slt i32 %173, %174 br i1 %.not313343.not, label %.lr.ph347, label %.loopexit .lr.ph347: ; preds = %._crit_edge - %174 = getelementptr inbounds nuw i8, ptr %12, i64 8 - %175 = sext i32 %172 to i64 - %176 = add nsw i64 %175, 1 - %177 = sext i32 %27 to i64 - %178 = sext i32 %173 to i64 - br label %179 - -179: ; preds = %.lr.ph347, %179 - %indvars.iv350 = phi i64 [ %176, %.lr.ph347 ], [ %indvars.iv.next351, %179 ] - %.1.neg345.in = phi i32 [ %172, %.lr.ph347 ], [ %indvars353, %179 ] + %175 = getelementptr inbounds nuw i8, ptr %12, i64 8 + %176 = sext i32 %173 to i64 + %177 = add nsw i64 %176, 1 + %178 = sext i32 %27 to i64 + %179 = sext i32 %174 to i64 + br label %180 + +180: ; preds = %.lr.ph347, %180 + %indvars.iv350 = phi i64 [ %177, %.lr.ph347 ], [ %indvars.iv.next351, %180 ] + %.1.neg345.in = phi i32 [ %173, %.lr.ph347 ], [ %indvars353, %180 ] %indvars353 = trunc i64 %indvars.iv350 to i32 - %180 = load i32, ptr %0, align 4, !tbaa !3 - %181 = load i32, ptr %1, align 4, !tbaa !3 - %182 = add i32 %.1.neg345.in, %181 - %183 = sub i32 %180, %182 - store i32 %183, ptr %17, align 4, !tbaa !3 - %184 = mul nsw i64 %indvars.iv350, %177 - %185 = mul nsw i32 %27, %indvars353 - %186 = sext i32 %185 to i64 - %187 = getelementptr double, ptr %29, i64 %indvars.iv350 - %188 = getelementptr double, ptr %187, i64 %186 + %181 = load i32, ptr %0, align 4, !tbaa !3 + %182 = load i32, ptr %1, align 4, !tbaa !3 + %183 = add i32 %.1.neg345.in, %182 + %184 = sub i32 %181, %183 + store i32 %184, ptr %17, align 4, !tbaa !3 + %185 = mul nsw i64 %indvars.iv350, %178 + %186 = mul nsw i32 %27, %indvars353 + %187 = sext i32 %186 to i64 + %188 = getelementptr double, ptr %29, i64 %indvars.iv350 + %189 = getelementptr double, ptr %188, i64 %187 %indvars.iv.next351 = add nsw i64 %indvars.iv350, 1 %indvars352 = trunc i64 %indvars.iv.next351 to i32 - %189 = getelementptr double, ptr %29, i64 %indvars.iv.next351 - %190 = getelementptr double, ptr %189, i64 %184 - %191 = getelementptr inbounds double, ptr %33, i64 %indvars.iv350 - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %188, ptr noundef %190, ptr noundef nonnull @c__1, ptr noundef nonnull %191) #6 - store double 1.000000e+00, ptr %188, align 8, !tbaa !7 - %192 = load i32, ptr %0, align 4, !tbaa !3 - %193 = load i32, ptr %1, align 4, !tbaa !3 - %194 = add i32 %.1.neg345.in, %193 - %195 = sub i32 %192, %194 - store i32 %195, ptr %17, align 4, !tbaa !3 - %196 = load i32, ptr %2, align 4, !tbaa !3 - %197 = sub nsw i32 %196, %indvars353 - store i32 %197, ptr %18, align 4, !tbaa !3 - %198 = mul nsw i32 %27, %indvars352 - %199 = sext i32 %198 to i64 - %200 = getelementptr double, ptr %29, i64 %indvars.iv350 - %201 = getelementptr double, ptr %200, i64 %199 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %188, ptr noundef nonnull @c__1, ptr noundef nonnull %191, ptr noundef %201, ptr noundef nonnull %6, ptr noundef nonnull %174) #6 - %.not313.not = icmp slt i64 %indvars.iv350, %178 - br i1 %.not313.not, label %179, label %.loopexit, !llvm.loop !11 - -.loopexit: ; preds = %179, %._crit_edge, %.thread, %.thread322 + %190 = getelementptr double, ptr %29, i64 %indvars.iv.next351 + %191 = getelementptr double, ptr %190, i64 %185 + %192 = getelementptr inbounds double, ptr %33, i64 %indvars.iv350 + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %189, ptr noundef %191, ptr noundef nonnull @c__1, ptr noundef nonnull %192) #6 + store double 1.000000e+00, ptr %189, align 8, !tbaa !7 + %193 = load i32, ptr %0, align 4, !tbaa !3 + %194 = load i32, ptr %1, align 4, !tbaa !3 + %195 = add i32 %.1.neg345.in, %194 + %196 = sub i32 %193, %195 + store i32 %196, ptr %17, align 4, !tbaa !3 + %197 = load i32, ptr %2, align 4, !tbaa !3 + %198 = sub nsw i32 %197, %indvars353 + store i32 %198, ptr %18, align 4, !tbaa !3 + %199 = mul nsw i32 %27, %indvars352 + %200 = sext i32 %199 to i64 + %201 = getelementptr double, ptr %29, i64 %indvars.iv350 + %202 = getelementptr double, ptr %201, i64 %200 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %189, ptr noundef nonnull @c__1, ptr noundef nonnull %192, ptr noundef %202, ptr noundef nonnull %6, ptr noundef nonnull %175) #6 + %.not313.not = icmp slt i64 %indvars.iv350, %179 + br i1 %.not313.not, label %180, label %.loopexit, !llvm.loop !11 + +.loopexit: ; preds = %180, %._crit_edge, %.thread, %.thread322 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6 diff --git a/bench/opencv/optimized/stringutils.ll b/bench/opencv/optimized/stringutils.ll index 862266605d6..e8b9b4fdfbd 100644 --- a/bench/opencv/optimized/stringutils.ll +++ b/bench/opencv/optimized/stringutils.ll @@ -886,9 +886,7 @@ _ZN5zxing6common11StringUtils13is_ascii_codeEPci.exit: ; preds = %.lr.ph.i235, % 215: ; preds = %203 %216 = icmp sgt i32 %185, 0 - %or.cond33 = or i1 %95, %216 - %or.cond35 = or i1 %96, %or.cond33 - br i1 %or.cond35, label %.thread, label %._crit_edge.i.i250 + br i1 %216, label %.thread, label %._crit_edge.i.i250 ._crit_edge.i.i250: ; preds = %215 %217 = getelementptr inbounds nuw i8, ptr %0, i64 16 diff --git a/bench/openjdk/optimized/DrawLine.ll b/bench/openjdk/optimized/DrawLine.ll index 4943d9a2661..c41feb15cbd 100644 --- a/bench/openjdk/optimized/DrawLine.ll +++ b/bench/openjdk/optimized/DrawLine.ll @@ -731,7 +731,7 @@ define void @Java_sun_java2d_loops_DrawLine_DrawLine(ptr noundef %0, ptr noundef %19 = tail call i32 @GrPrim_Sg2dGetPixel(ptr noundef %0, ptr noundef %2) #4 %20 = tail call ptr @GetNativePrim(ptr noundef %0, ptr noundef %1) #4 %21 = icmp eq ptr %20, null - br i1 %21, label %118, label %22 + br i1 %21, label %120, label %22 22: ; preds = %8 %23 = getelementptr inbounds nuw i8, ptr %20, i64 16 @@ -748,7 +748,7 @@ define void @Java_sun_java2d_loops_DrawLine_DrawLine(ptr noundef %0, ptr noundef 28: ; preds = %27, %22 %29 = call ptr @SurfaceData_GetOps(ptr noundef %0, ptr noundef %3) #4 %30 = icmp eq ptr %29, null - br i1 %30, label %118, label %31 + br i1 %30, label %120, label %31 31: ; preds = %28 call void @GrPrim_Sg2dGetClip(ptr noundef %0, ptr noundef %2, ptr noundef nonnull %9) #4 @@ -802,19 +802,19 @@ RefineBounds.exit: ; preds = %47, %51 %54 = load i32, ptr %53, align 4 %55 = call i32 %52(ptr noundef %0, ptr noundef nonnull %29, ptr noundef nonnull %9, i32 noundef %54) #4 %.not100 = icmp eq i32 %55, 0 - br i1 %.not100, label %56, label %118 + br i1 %.not100, label %56, label %120 56: ; preds = %RefineBounds.exit %57 = load i32, ptr %37, align 8 %58 = load i32, ptr %9, align 8 %59 = icmp sgt i32 %57, %58 - br i1 %59, label %60, label %114 + br i1 %59, label %60, label %116 60: ; preds = %56 %61 = load i32, ptr %48, align 4 %62 = load i32, ptr %43, align 4 %63 = icmp sgt i32 %61, %62 - br i1 %63, label %64, label %114 + br i1 %63, label %64, label %116 64: ; preds = %60 %65 = getelementptr inbounds nuw i8, ptr %29, i64 8 @@ -823,11 +823,11 @@ RefineBounds.exit: ; preds = %47, %51 %67 = getelementptr inbounds nuw i8, ptr %9, i64 16 %68 = load ptr, ptr %67, align 8 %.not101 = icmp eq ptr %68, null - br i1 %.not101, label %110, label %69 + br i1 %.not101, label %112, label %69 69: ; preds = %64 %70 = icmp eq i32 %5, %7 - br i1 %70, label %71, label %83 + br i1 %70, label %71, label %84 71: ; preds = %69 %72 = load i32, ptr %43, align 4 @@ -835,90 +835,94 @@ RefineBounds.exit: ; preds = %47, %51 %73 = load i32, ptr %48, align 4 %74 = icmp slt i32 %5, %73 %or.cond = select i1 %.not104, i1 %74, i1 false - br i1 %or.cond, label %75, label %110 + br i1 %or.cond, label %75, label %112 75: ; preds = %71 - %76 = load i32, ptr %9, align 8 - %spec.store.select = call i32 @llvm.smax.i32(i32 %..i, i32 %76) - %77 = load i32, ptr %37, align 8 - %spec.select = call i32 @llvm.smin.i32(i32 %32, i32 %77) - %78 = icmp slt i32 %spec.store.select, %spec.select - br i1 %78, label %79, label %110 - -79: ; preds = %75 - %80 = getelementptr inbounds nuw i8, ptr %20, i64 32 - %81 = load ptr, ptr %80, align 8 - %82 = sub nsw i32 %spec.select, %spec.store.select - call void %81(ptr noundef nonnull %9, i32 noundef %spec.store.select, i32 noundef %5, i32 noundef %19, i32 noundef %82, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 - br label %110 - -83: ; preds = %69 - %84 = icmp eq i32 %4, %6 - br i1 %84, label %85, label %97 - -85: ; preds = %83 - %86 = load i32, ptr %9, align 8 - %.not103 = icmp sge i32 %4, %86 - %87 = load i32, ptr %37, align 8 - %88 = icmp slt i32 %4, %87 - %or.cond111 = select i1 %.not103, i1 %88, i1 false - br i1 %or.cond111, label %89, label %110 - -89: ; preds = %85 - %90 = load i32, ptr %43, align 4 - %spec.store.select115 = call i32 @llvm.smax.i32(i32 %.49.i, i32 %90) - %91 = load i32, ptr %48, align 4 - %spec.select114 = call i32 @llvm.smin.i32(i32 %42, i32 %91) - %92 = icmp slt i32 %spec.store.select115, %spec.select114 - br i1 %92, label %93, label %110 - -93: ; preds = %89 - %94 = getelementptr inbounds nuw i8, ptr %20, i64 32 - %95 = load ptr, ptr %94, align 8 - %96 = sub nsw i32 %spec.select114, %spec.store.select115 - call void %95(ptr noundef nonnull %9, i32 noundef %4, i32 noundef %spec.store.select115, i32 noundef %19, i32 noundef %96, i32 noundef 0, i32 noundef 4, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 - br label %110 - -97: ; preds = %83 - %98 = call zeroext i8 @LineUtils_SetupBresenham(i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef 0, ptr noundef nonnull %9, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %15, ptr noundef nonnull %17, ptr noundef nonnull %16, ptr noundef nonnull %18) - %.not102 = icmp eq i8 %98, 0 - br i1 %.not102, label %110, label %99 - -99: ; preds = %97 - %100 = getelementptr inbounds nuw i8, ptr %20, i64 32 - %101 = load ptr, ptr %100, align 8 - %102 = load i32, ptr %11, align 4 - %103 = load i32, ptr %12, align 4 - %104 = load i32, ptr %13, align 4 - %105 = load i32, ptr %14, align 4 - %106 = load i32, ptr %17, align 4 - %107 = load i32, ptr %15, align 4 - %108 = load i32, ptr %18, align 4 - %109 = load i32, ptr %16, align 4 - call void %101(ptr noundef nonnull %9, i32 noundef %102, i32 noundef %103, i32 noundef %19, i32 noundef %104, i32 noundef %105, i32 noundef %106, i32 noundef %107, i32 noundef %108, i32 noundef %109, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 - br label %110 - -110: ; preds = %64, %75, %79, %71, %97, %99, %85, %93, %89 - %111 = getelementptr inbounds nuw i8, ptr %29, i64 16 - %112 = load ptr, ptr %111, align 8 - %.not106 = icmp eq ptr %112, null - br i1 %.not106, label %114, label %113 - -113: ; preds = %110 - call void %112(ptr noundef %0, ptr noundef nonnull %29, ptr noundef nonnull %9) #4 - br label %114 - -114: ; preds = %56, %60, %110, %113 - %115 = getelementptr inbounds nuw i8, ptr %29, i64 24 - %116 = load ptr, ptr %115, align 8 - %.not107 = icmp eq ptr %116, null - br i1 %.not107, label %118, label %117 - -117: ; preds = %114 - call void %116(ptr noundef %0, ptr noundef nonnull %29, ptr noundef nonnull %9) #4 - br label %118 - -118: ; preds = %114, %117, %RefineBounds.exit, %28, %8 + %76 = icmp slt i32 %32, %..i + %.178 = select i1 %76, i32 %.48.i, i32 %32 + %77 = load i32, ptr %9, align 8 + %spec.store.select = call i32 @llvm.smax.i32(i32 %..i, i32 %77) + %78 = load i32, ptr %37, align 8 + %spec.select = call i32 @llvm.smin.i32(i32 %.178, i32 %78) + %79 = icmp slt i32 %spec.store.select, %spec.select + br i1 %79, label %80, label %112 + +80: ; preds = %75 + %81 = getelementptr inbounds nuw i8, ptr %20, i64 32 + %82 = load ptr, ptr %81, align 8 + %83 = sub nsw i32 %spec.select, %spec.store.select + call void %82(ptr noundef nonnull %9, i32 noundef %spec.store.select, i32 noundef %5, i32 noundef %19, i32 noundef %83, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 + br label %112 + +84: ; preds = %69 + %85 = icmp eq i32 %4, %6 + br i1 %85, label %86, label %99 + +86: ; preds = %84 + %87 = load i32, ptr %9, align 8 + %.not103 = icmp sge i32 %4, %87 + %88 = load i32, ptr %37, align 8 + %89 = icmp slt i32 %4, %88 + %or.cond111 = select i1 %.not103, i1 %89, i1 false + br i1 %or.cond111, label %90, label %112 + +90: ; preds = %86 + %91 = icmp slt i32 %42, %.49.i + %.1 = select i1 %91, i32 %.50.i, i32 %42 + %92 = load i32, ptr %43, align 4 + %spec.store.select115 = call i32 @llvm.smax.i32(i32 %.49.i, i32 %92) + %93 = load i32, ptr %48, align 4 + %spec.select114 = call i32 @llvm.smin.i32(i32 %.1, i32 %93) + %94 = icmp slt i32 %spec.store.select115, %spec.select114 + br i1 %94, label %95, label %112 + +95: ; preds = %90 + %96 = getelementptr inbounds nuw i8, ptr %20, i64 32 + %97 = load ptr, ptr %96, align 8 + %98 = sub nsw i32 %spec.select114, %spec.store.select115 + call void %97(ptr noundef nonnull %9, i32 noundef %4, i32 noundef %spec.store.select115, i32 noundef %19, i32 noundef %98, i32 noundef 0, i32 noundef 4, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 + br label %112 + +99: ; preds = %84 + %100 = call zeroext i8 @LineUtils_SetupBresenham(i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef 0, ptr noundef nonnull %9, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %15, ptr noundef nonnull %17, ptr noundef nonnull %16, ptr noundef nonnull %18) + %.not102 = icmp eq i8 %100, 0 + br i1 %.not102, label %112, label %101 + +101: ; preds = %99 + %102 = getelementptr inbounds nuw i8, ptr %20, i64 32 + %103 = load ptr, ptr %102, align 8 + %104 = load i32, ptr %11, align 4 + %105 = load i32, ptr %12, align 4 + %106 = load i32, ptr %13, align 4 + %107 = load i32, ptr %14, align 4 + %108 = load i32, ptr %17, align 4 + %109 = load i32, ptr %15, align 4 + %110 = load i32, ptr %18, align 4 + %111 = load i32, ptr %16, align 4 + call void %103(ptr noundef nonnull %9, i32 noundef %104, i32 noundef %105, i32 noundef %19, i32 noundef %106, i32 noundef %107, i32 noundef %108, i32 noundef %109, i32 noundef %110, i32 noundef %111, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 + br label %112 + +112: ; preds = %64, %75, %80, %71, %99, %101, %86, %95, %90 + %113 = getelementptr inbounds nuw i8, ptr %29, i64 16 + %114 = load ptr, ptr %113, align 8 + %.not106 = icmp eq ptr %114, null + br i1 %.not106, label %116, label %115 + +115: ; preds = %112 + call void %114(ptr noundef %0, ptr noundef nonnull %29, ptr noundef nonnull %9) #4 + br label %116 + +116: ; preds = %56, %60, %112, %115 + %117 = getelementptr inbounds nuw i8, ptr %29, i64 24 + %118 = load ptr, ptr %117, align 8 + %.not107 = icmp eq ptr %118, null + br i1 %.not107, label %120, label %119 + +119: ; preds = %116 + call void %118(ptr noundef %0, ptr noundef nonnull %29, ptr noundef nonnull %9) #4 + br label %120 + +120: ; preds = %116, %119, %RefineBounds.exit, %28, %8 ret void } diff --git a/bench/openjdk/optimized/DrawPath.ll b/bench/openjdk/optimized/DrawPath.ll index 3990c60fb37..3920b6320ac 100644 --- a/bench/openjdk/optimized/DrawPath.ll +++ b/bench/openjdk/optimized/DrawPath.ll @@ -271,7 +271,7 @@ define internal void @processLine(ptr noundef readonly captures(none) %0, i32 no %12 = alloca i32, align 4 %13 = alloca i32, align 4 %14 = icmp eq i32 %2, %4 - br i1 %14, label %15, label %41 + br i1 %14, label %15, label %42 15: ; preds = %5 %16 = getelementptr inbounds nuw i8, ptr %0, i64 56 @@ -280,111 +280,115 @@ define internal void @processLine(ptr noundef readonly captures(none) %0, i32 no %19 = getelementptr inbounds nuw i8, ptr %18, i64 4 %20 = load i32, ptr %19, align 4 %.not83 = icmp slt i32 %2, %20 - br i1 %.not83, label %90, label %21 + br i1 %.not83, label %92, label %21 21: ; preds = %15 %22 = getelementptr inbounds nuw i8, ptr %18, i64 12 %23 = load i32, ptr %22, align 4 %24 = icmp slt i32 %2, %23 - br i1 %24, label %25, label %90 + br i1 %24, label %25, label %92 25: ; preds = %21 %. = tail call i32 @llvm.smin.i32(i32 %1, i32 %3) %.85 = tail call i32 @llvm.smax.i32(i32 %1, i32 %3) %26 = add nsw i32 %.85, 1 - %27 = load i32, ptr %18, align 8 - %spec.store.select = tail call i32 @llvm.smax.i32(i32 %., i32 %27) - %28 = getelementptr inbounds nuw i8, ptr %18, i64 8 - %29 = load i32, ptr %28, align 8 - %spec.select = tail call i32 @llvm.smin.i32(i32 %26, i32 %29) - %30 = icmp slt i32 %spec.store.select, %spec.select - br i1 %30, label %31, label %90 - -31: ; preds = %25 - %32 = getelementptr inbounds nuw i8, ptr %17, i64 16 - %33 = load ptr, ptr %32, align 8 - %34 = getelementptr inbounds nuw i8, ptr %33, i64 32 - %35 = load ptr, ptr %34, align 8 - %36 = getelementptr inbounds nuw i8, ptr %17, i64 8 - %37 = load i32, ptr %36, align 8 - %38 = sub nsw i32 %spec.select, %spec.store.select - %39 = getelementptr inbounds nuw i8, ptr %17, i64 24 - %40 = load ptr, ptr %39, align 8 - tail call void %35(ptr noundef nonnull %18, i32 noundef %spec.store.select, i32 noundef %2, i32 noundef %37, i32 noundef %38, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef %33, ptr noundef %40) #4 - br label %90 - -41: ; preds = %5 - %42 = icmp eq i32 %1, %3 - %43 = getelementptr inbounds nuw i8, ptr %0, i64 56 - %44 = load ptr, ptr %43, align 8 + %27 = icmp slt i32 %26, %. + %.164 = select i1 %27, i32 %.85, i32 %26 + %28 = load i32, ptr %18, align 8 + %spec.store.select = tail call i32 @llvm.smax.i32(i32 %., i32 %28) + %29 = getelementptr inbounds nuw i8, ptr %18, i64 8 + %30 = load i32, ptr %29, align 8 + %spec.select = tail call i32 @llvm.smin.i32(i32 %.164, i32 %30) + %31 = icmp slt i32 %spec.store.select, %spec.select + br i1 %31, label %32, label %92 + +32: ; preds = %25 + %33 = getelementptr inbounds nuw i8, ptr %17, i64 16 + %34 = load ptr, ptr %33, align 8 + %35 = getelementptr inbounds nuw i8, ptr %34, i64 32 + %36 = load ptr, ptr %35, align 8 + %37 = getelementptr inbounds nuw i8, ptr %17, i64 8 + %38 = load i32, ptr %37, align 8 + %39 = sub nsw i32 %spec.select, %spec.store.select + %40 = getelementptr inbounds nuw i8, ptr %17, i64 24 + %41 = load ptr, ptr %40, align 8 + tail call void %36(ptr noundef nonnull %18, i32 noundef %spec.store.select, i32 noundef %2, i32 noundef %38, i32 noundef %39, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef %34, ptr noundef %41) #4 + br label %92 + +42: ; preds = %5 + %43 = icmp eq i32 %1, %3 + %44 = getelementptr inbounds nuw i8, ptr %0, i64 56 %45 = load ptr, ptr %44, align 8 - br i1 %42, label %46, label %69 + %46 = load ptr, ptr %45, align 8 + br i1 %43, label %47, label %71 -46: ; preds = %41 - %47 = load i32, ptr %45, align 8 - %.not82 = icmp slt i32 %1, %47 - br i1 %.not82, label %90, label %48 +47: ; preds = %42 + %48 = load i32, ptr %46, align 8 + %.not82 = icmp slt i32 %1, %48 + br i1 %.not82, label %92, label %49 -48: ; preds = %46 - %49 = getelementptr inbounds nuw i8, ptr %45, i64 8 - %50 = load i32, ptr %49, align 8 - %51 = icmp slt i32 %1, %50 - br i1 %51, label %52, label %90 +49: ; preds = %47 + %50 = getelementptr inbounds nuw i8, ptr %46, i64 8 + %51 = load i32, ptr %50, align 8 + %52 = icmp slt i32 %1, %51 + br i1 %52, label %53, label %92 -52: ; preds = %48 +53: ; preds = %49 %.86 = tail call i32 @llvm.smin.i32(i32 %2, i32 %4) %.87 = tail call i32 @llvm.smax.i32(i32 %2, i32 %4) - %53 = add nsw i32 %.87, 1 - %54 = getelementptr inbounds nuw i8, ptr %45, i64 4 - %55 = load i32, ptr %54, align 4 - %spec.store.select89 = tail call i32 @llvm.smax.i32(i32 %.86, i32 %55) - %56 = getelementptr inbounds nuw i8, ptr %45, i64 12 + %54 = add nsw i32 %.87, 1 + %55 = icmp slt i32 %54, %.86 + %.1 = select i1 %55, i32 %.87, i32 %54 + %56 = getelementptr inbounds nuw i8, ptr %46, i64 4 %57 = load i32, ptr %56, align 4 - %spec.select88 = tail call i32 @llvm.smin.i32(i32 %53, i32 %57) - %58 = icmp slt i32 %spec.store.select89, %spec.select88 - br i1 %58, label %59, label %90 - -59: ; preds = %52 - %60 = getelementptr inbounds nuw i8, ptr %44, i64 16 - %61 = load ptr, ptr %60, align 8 - %62 = getelementptr inbounds nuw i8, ptr %61, i64 32 + %spec.store.select89 = tail call i32 @llvm.smax.i32(i32 %.86, i32 %57) + %58 = getelementptr inbounds nuw i8, ptr %46, i64 12 + %59 = load i32, ptr %58, align 4 + %spec.select88 = tail call i32 @llvm.smin.i32(i32 %.1, i32 %59) + %60 = icmp slt i32 %spec.store.select89, %spec.select88 + br i1 %60, label %61, label %92 + +61: ; preds = %53 + %62 = getelementptr inbounds nuw i8, ptr %45, i64 16 %63 = load ptr, ptr %62, align 8 - %64 = getelementptr inbounds nuw i8, ptr %44, i64 8 - %65 = load i32, ptr %64, align 8 - %66 = sub nsw i32 %spec.select88, %spec.store.select89 - %67 = getelementptr inbounds nuw i8, ptr %44, i64 24 - %68 = load ptr, ptr %67, align 8 - tail call void %63(ptr noundef nonnull %45, i32 noundef %1, i32 noundef %spec.store.select89, i32 noundef %65, i32 noundef %66, i32 noundef 0, i32 noundef 4, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef %61, ptr noundef %68) #4 - br label %90 - -69: ; preds = %41 - %70 = call zeroext i8 @LineUtils_SetupBresenham(i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef 0, ptr noundef %45, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %13) #4 - %.not = icmp eq i8 %70, 0 - br i1 %.not, label %90, label %71 - -71: ; preds = %69 - %72 = load ptr, ptr %43, align 8 - %73 = getelementptr inbounds nuw i8, ptr %72, i64 16 - %74 = load ptr, ptr %73, align 8 - %75 = getelementptr inbounds nuw i8, ptr %74, i64 32 + %64 = getelementptr inbounds nuw i8, ptr %63, i64 32 + %65 = load ptr, ptr %64, align 8 + %66 = getelementptr inbounds nuw i8, ptr %45, i64 8 + %67 = load i32, ptr %66, align 8 + %68 = sub nsw i32 %spec.select88, %spec.store.select89 + %69 = getelementptr inbounds nuw i8, ptr %45, i64 24 + %70 = load ptr, ptr %69, align 8 + tail call void %65(ptr noundef nonnull %46, i32 noundef %1, i32 noundef %spec.store.select89, i32 noundef %67, i32 noundef %68, i32 noundef 0, i32 noundef 4, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef %63, ptr noundef %70) #4 + br label %92 + +71: ; preds = %42 + %72 = call zeroext i8 @LineUtils_SetupBresenham(i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef 0, ptr noundef %46, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %13) #4 + %.not = icmp eq i8 %72, 0 + br i1 %.not, label %92, label %73 + +73: ; preds = %71 + %74 = load ptr, ptr %44, align 8 + %75 = getelementptr inbounds nuw i8, ptr %74, i64 16 %76 = load ptr, ptr %75, align 8 - %77 = load ptr, ptr %72, align 8 - %78 = load i32, ptr %6, align 4 - %79 = load i32, ptr %7, align 4 - %80 = getelementptr inbounds nuw i8, ptr %72, i64 8 - %81 = load i32, ptr %80, align 8 - %82 = load i32, ptr %8, align 4 - %83 = load i32, ptr %9, align 4 - %84 = load i32, ptr %12, align 4 - %85 = load i32, ptr %10, align 4 - %86 = load i32, ptr %13, align 4 - %87 = load i32, ptr %11, align 4 - %88 = getelementptr inbounds nuw i8, ptr %72, i64 24 - %89 = load ptr, ptr %88, align 8 - call void %76(ptr noundef %77, i32 noundef %78, i32 noundef %79, i32 noundef %81, i32 noundef %82, i32 noundef %83, i32 noundef %84, i32 noundef %85, i32 noundef %86, i32 noundef %87, ptr noundef %74, ptr noundef %89) #4 - br label %90 - -90: ; preds = %25, %31, %21, %15, %69, %71, %46, %48, %59, %52 + %77 = getelementptr inbounds nuw i8, ptr %76, i64 32 + %78 = load ptr, ptr %77, align 8 + %79 = load ptr, ptr %74, align 8 + %80 = load i32, ptr %6, align 4 + %81 = load i32, ptr %7, align 4 + %82 = getelementptr inbounds nuw i8, ptr %74, i64 8 + %83 = load i32, ptr %82, align 8 + %84 = load i32, ptr %8, align 4 + %85 = load i32, ptr %9, align 4 + %86 = load i32, ptr %12, align 4 + %87 = load i32, ptr %10, align 4 + %88 = load i32, ptr %13, align 4 + %89 = load i32, ptr %11, align 4 + %90 = getelementptr inbounds nuw i8, ptr %74, i64 24 + %91 = load ptr, ptr %90, align 8 + call void %78(ptr noundef %79, i32 noundef %80, i32 noundef %81, i32 noundef %83, i32 noundef %84, i32 noundef %85, i32 noundef %86, i32 noundef %87, i32 noundef %88, i32 noundef %89, ptr noundef %76, ptr noundef %91) #4 + br label %92 + +92: ; preds = %25, %32, %21, %15, %71, %73, %47, %49, %61, %53 ret void } diff --git a/bench/openjdk/optimized/genArguments.ll b/bench/openjdk/optimized/genArguments.ll index 4155b686858..9cd507f500a 100644 --- a/bench/openjdk/optimized/genArguments.ll +++ b/bench/openjdk/optimized/genArguments.ll @@ -514,106 +514,108 @@ define hidden void @_ZN12GenArguments20initialize_size_infoEv(ptr noundef nonnul %71 = tail call noundef i64 @llvm.umin.i64(i64 %67, i64 %69) %72 = tail call noundef i64 @llvm.umin.i64(i64 %71, i64 %70) store i64 %72, ptr @MinOldSize, align 8 - %73 = add i64 %71, %.033 - %.not = icmp eq i64 %73, %68 - br i1 %.not, label %96, label %74 - -74: ; preds = %61 - %75 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_40ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 72), align 8 - %.not47 = icmp eq ptr %75, null - br i1 %.not47, label %77, label %76 - -76: ; preds = %74 + %73 = tail call noundef i64 @llvm.umax.i64(i64 %69, i64 %72) + %74 = tail call noundef i64 @llvm.umin.i64(i64 %73, i64 %67) + %75 = add i64 %74, %.033 + %.not = icmp eq i64 %75, %68 + br i1 %.not, label %98, label %76 + +76: ; preds = %61 + %77 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_40ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 72), align 8 + %.not47 = icmp eq ptr %77, null + br i1 %.not47, label %79, label %78 + +78: ; preds = %76 tail call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_40ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE4EEEvPKcz(ptr noundef nonnull @.str.8) %.pre53 = load i64, ptr @InitialHeapSize, align 8 - br label %77 - -77: ; preds = %74, %76 - %78 = phi i64 [ %68, %74 ], [ %.pre53, %76 ] - %79 = sub i64 %78, %71 - %80 = icmp ult i64 %78, %71 - br i1 %80, label %81, label %84 - -81: ; preds = %77 - %82 = load i64, ptr @MinNewSize, align 8 - %83 = sub i64 %78, %82 - br label %92 - -84: ; preds = %77 - %85 = icmp ugt i64 %79, %.1 - br i1 %85, label %86, label %88 - -86: ; preds = %84 - %87 = sub i64 %78, %.1 - br label %92 - -88: ; preds = %84 - %89 = load i64, ptr @MinNewSize, align 8 - %90 = icmp ult i64 %79, %89 - %91 = sub i64 %78, %89 - %spec.select = tail call i64 @llvm.umax.i64(i64 %79, i64 %89) - %spec.select43 = select i1 %90, i64 %91, i64 %71 - br label %92 - -92: ; preds = %88, %86, %81 - %.2 = phi i64 [ %82, %81 ], [ %.1, %86 ], [ %spec.select, %88 ] - %.132 = phi i64 [ %83, %81 ], [ %87, %86 ], [ %spec.select43, %88 ] - %93 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 - %.not48 = icmp eq ptr %93, null - br i1 %.not48, label %96, label %94 - -94: ; preds = %92 - %95 = load i64, ptr @MinNewSize, align 8 - tail call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.9, i64 noundef %95, i64 noundef %.2, i64 noundef %.1) - br label %96 - -96: ; preds = %94, %92, %61 - %.134 = phi i64 [ %.2, %94 ], [ %.2, %92 ], [ %.033, %61 ] - %.031 = phi i64 [ %.132, %94 ], [ %.132, %92 ], [ %71, %61 ] - %97 = load i64, ptr @NewSize, align 8 - %.not40 = icmp eq i64 %97, %.134 - br i1 %.not40, label %100, label %98 - -98: ; preds = %96 + br label %79 + +79: ; preds = %76, %78 + %80 = phi i64 [ %68, %76 ], [ %.pre53, %78 ] + %81 = sub i64 %80, %74 + %82 = icmp ult i64 %80, %74 + br i1 %82, label %83, label %86 + +83: ; preds = %79 + %84 = load i64, ptr @MinNewSize, align 8 + %85 = sub i64 %80, %84 + br label %94 + +86: ; preds = %79 + %87 = icmp ugt i64 %81, %.1 + br i1 %87, label %88, label %90 + +88: ; preds = %86 + %89 = sub i64 %80, %.1 + br label %94 + +90: ; preds = %86 + %91 = load i64, ptr @MinNewSize, align 8 + %92 = icmp ult i64 %81, %91 + %93 = sub i64 %80, %91 + %spec.select = tail call i64 @llvm.umax.i64(i64 %81, i64 %91) + %spec.select43 = select i1 %92, i64 %93, i64 %74 + br label %94 + +94: ; preds = %90, %88, %83 + %.2 = phi i64 [ %84, %83 ], [ %.1, %88 ], [ %spec.select, %90 ] + %.132 = phi i64 [ %85, %83 ], [ %89, %88 ], [ %spec.select43, %90 ] + %95 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 + %.not48 = icmp eq ptr %95, null + br i1 %.not48, label %98, label %96 + +96: ; preds = %94 + %97 = load i64, ptr @MinNewSize, align 8 + tail call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.9, i64 noundef %97, i64 noundef %.2, i64 noundef %.1) + br label %98 + +98: ; preds = %96, %94, %61 + %.134 = phi i64 [ %.2, %96 ], [ %.2, %94 ], [ %.033, %61 ] + %.031 = phi i64 [ %.132, %96 ], [ %.132, %94 ], [ %74, %61 ] + %99 = load i64, ptr @NewSize, align 8 + %.not40 = icmp eq i64 %99, %.134 + br i1 %.not40, label %102, label %100 + +100: ; preds = %98 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) store i64 %.134, ptr %3, align 8 - %99 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1195, i32 noundef 6, ptr noundef nonnull %3, i32 noundef 5) #8 + %101 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1195, i32 noundef 6, ptr noundef nonnull %3, i32 noundef 5) #8 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) - br label %100 + br label %102 -100: ; preds = %98, %96 - %101 = load i64, ptr @MaxNewSize, align 8 - %.not41 = icmp eq i64 %101, %.1 - br i1 %.not41, label %104, label %102 +102: ; preds = %100, %98 + %103 = load i64, ptr @MaxNewSize, align 8 + %.not41 = icmp eq i64 %103, %.1 + br i1 %.not41, label %106, label %104 -102: ; preds = %100 +104: ; preds = %102 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) store i64 %.1, ptr %2, align 8 - %103 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1196, i32 noundef 6, ptr noundef nonnull %2, i32 noundef 5) #8 + %105 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1196, i32 noundef 6, ptr noundef nonnull %2, i32 noundef 5) #8 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) - br label %104 + br label %106 -104: ; preds = %102, %100 - %105 = load i64, ptr @OldSize, align 8 - %.not42 = icmp eq i64 %105, %.031 - br i1 %.not42, label %107, label %106 +106: ; preds = %104, %102 + %107 = load i64, ptr @OldSize, align 8 + %.not42 = icmp eq i64 %107, %.031 + br i1 %.not42, label %109, label %108 -106: ; preds = %104 +108: ; preds = %106 store i64 %.031, ptr @OldSize, align 8 - br label %107 + br label %109 -107: ; preds = %106, %104 - %108 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 - %.not49 = icmp eq ptr %108, null - br i1 %.not49, label %112, label %109 +109: ; preds = %108, %106 + %110 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 + %.not49 = icmp eq ptr %110, null + br i1 %.not49, label %114, label %111 -109: ; preds = %107 - %110 = load i64, ptr @MinOldSize, align 8 - %111 = load i64, ptr @MaxOldSize, align 8 - call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.10, i64 noundef %110, i64 noundef %.031, i64 noundef %111) - br label %112 +111: ; preds = %109 + %112 = load i64, ptr @MinOldSize, align 8 + %113 = load i64, ptr @MaxOldSize, align 8 + call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.10, i64 noundef %112, i64 noundef %.031, i64 noundef %113) + br label %114 -112: ; preds = %107, %109 +114: ; preds = %109, %111 ret void } diff --git a/bench/openusd/optimized/mvref_common.ll b/bench/openusd/optimized/mvref_common.ll index 847d7f4aed6..10e683a3e0a 100644 --- a/bench/openusd/optimized/mvref_common.ll +++ b/bench/openusd/optimized/mvref_common.ll @@ -2587,116 +2587,115 @@ get_relative_dist.exit76: ; preds = %get_relative_dist.e br i1 %or.cond.us.us, label %90, label %.thread89.us105.us 90: ; preds = %83 - %91 = tail call i32 @llvm.umin.i32(i32 %86, i32 31) - %92 = sext i16 %.sroa.0.0.copyload.us.us to i32 - %93 = zext nneg i32 %91 to i64 - %94 = getelementptr inbounds nuw [32 x i32], ptr @div_mult, i64 0, i64 %93 - %95 = load i32, ptr %94, align 4 - %96 = mul i32 %95, %. - %97 = mul i32 %96, %92 - %98 = icmp slt i32 %97, 0 - br i1 %98, label %102, label %99 - -99: ; preds = %90 - %100 = add nuw nsw i32 %97, 8192 - %101 = lshr i32 %100, 14 - br label %106 - -102: ; preds = %90 - %103 = sub i32 8192, %97 - %104 = lshr i32 %103, 14 - %105 = sub nsw i32 0, %104 - br label %106 - -106: ; preds = %102, %99 - %107 = phi i32 [ %105, %102 ], [ %101, %99 ] - %108 = sext i16 %.sroa.3.0.copyload.us.us to i32 - %109 = mul i32 %96, %108 - %110 = icmp slt i32 %109, 0 - br i1 %110, label %114, label %111 - -111: ; preds = %106 - %112 = add nuw nsw i32 %109, 8192 - %113 = lshr i32 %112, 14 + %91 = sext i16 %.sroa.0.0.copyload.us.us to i32 + %92 = zext nneg i32 %86 to i64 + %93 = getelementptr inbounds nuw [32 x i32], ptr @div_mult, i64 0, i64 %92 + %94 = load i32, ptr %93, align 4 + %95 = mul i32 %94, %. + %96 = mul i32 %95, %91 + %97 = icmp slt i32 %96, 0 + br i1 %97, label %101, label %98 + +98: ; preds = %90 + %99 = add nuw nsw i32 %96, 8192 + %100 = lshr i32 %99, 14 + br label %105 + +101: ; preds = %90 + %102 = sub i32 8192, %96 + %103 = lshr i32 %102, 14 + %104 = sub nsw i32 0, %103 + br label %105 + +105: ; preds = %101, %98 + %106 = phi i32 [ %104, %101 ], [ %100, %98 ] + %107 = sext i16 %.sroa.3.0.copyload.us.us to i32 + %108 = mul i32 %95, %107 + %109 = icmp slt i32 %108, 0 + br i1 %109, label %113, label %110 + +110: ; preds = %105 + %111 = add nuw nsw i32 %108, 8192 + %112 = lshr i32 %111, 14 br label %get_mv_projection.exit.us.us -114: ; preds = %106 - %115 = sub i32 8192, %109 - %116 = lshr i32 %115, 14 - %117 = sub nsw i32 0, %116 +113: ; preds = %105 + %114 = sub i32 8192, %108 + %115 = lshr i32 %114, 14 + %116 = sub nsw i32 0, %115 br label %get_mv_projection.exit.us.us -get_mv_projection.exit.us.us: ; preds = %114, %111 - %118 = phi i32 [ %117, %114 ], [ %113, %111 ] - %119 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %107, i32 16383) - %120 = tail call i32 @llvm.smax.i32(i32 %119, i32 -16383) - %121 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %118, i32 16383) - %122 = tail call i32 @llvm.smax.i32(i32 %121, i32 -16383) - %123 = trunc nuw nsw i64 %indvars.iv116 to i32 - %124 = and i32 %123, 2147483640 - %125 = lshr i32 %120, 6 - %126 = sub nsw i32 0, %120 - %127 = lshr i32 %126, 6 - %128 = sub nsw i32 0, %127 - %129 = icmp slt i32 %107, 0 - %130 = select i1 %129, i32 %128, i32 %125 - %131 = lshr i32 %122, 6 - %132 = sub nsw i32 0, %122 - %133 = lshr i32 %132, 6 - %134 = sub nsw i32 0, %133 - %135 = icmp slt i32 %118, 0 - %136 = select i1 %135, i32 %134, i32 %131 - %137 = sub nsw i32 0, %130 - %.p.i.us.us = select i1 %.not.i78, i32 %130, i32 %137 - %138 = add i32 %.p.i.us.us, %76 - %139 = sub nsw i32 0, %136 - %.p49.i.us.us = select i1 %.not.i78, i32 %136, i32 %139 - %140 = add i32 %.p49.i.us.us, %123 - %141 = icmp slt i32 %138, 0 - br i1 %141, label %.thread89.us105.us, label %142 - -142: ; preds = %get_mv_projection.exit.us.us - %143 = load i32, ptr %23, align 4 - %144 = ashr i32 %143, 1 - %145 = icmp sge i32 %138, %144 - %146 = icmp slt i32 %140, 0 - %or.cond.i.us.us = select i1 %145, i1 true, i1 %146 - br i1 %or.cond.i.us.us, label %.thread89.us105.us, label %147 - -147: ; preds = %142 - %148 = load i32, ptr %28, align 8 - %149 = ashr i32 %148, 1 - %.not42.i.us.us = icmp slt i32 %140, %149 - br i1 %.not42.i.us.us, label %150, label %.thread89.us105.us - -150: ; preds = %147 - %151 = icmp sge i32 %138, %77 - %.not43.i.us.us = icmp slt i32 %138, %78 - %or.cond45.not51.not55.i.us.us = select i1 %151, i1 %.not43.i.us.us, i1 false - %152 = add nsw i32 %124, -8 - %153 = icmp sge i32 %140, %152 - %or.cond47.not53.i.us.us = select i1 %or.cond45.not51.not55.i.us.us, i1 %153, i1 false - %154 = add nuw nsw i32 %124, 16 - %.not44.i.us.us = icmp samesign ult i32 %140, %154 +get_mv_projection.exit.us.us: ; preds = %113, %110 + %117 = phi i32 [ %116, %113 ], [ %112, %110 ] + %118 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %106, i32 16383) + %119 = tail call i32 @llvm.smax.i32(i32 %118, i32 -16383) + %120 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %117, i32 16383) + %121 = tail call i32 @llvm.smax.i32(i32 %120, i32 -16383) + %122 = trunc nuw nsw i64 %indvars.iv116 to i32 + %123 = and i32 %122, 2147483640 + %124 = lshr i32 %119, 6 + %125 = sub nsw i32 0, %119 + %126 = lshr i32 %125, 6 + %127 = sub nsw i32 0, %126 + %128 = icmp slt i32 %106, 0 + %129 = select i1 %128, i32 %127, i32 %124 + %130 = lshr i32 %121, 6 + %131 = sub nsw i32 0, %121 + %132 = lshr i32 %131, 6 + %133 = sub nsw i32 0, %132 + %134 = icmp slt i32 %117, 0 + %135 = select i1 %134, i32 %133, i32 %130 + %136 = sub nsw i32 0, %129 + %.p.i.us.us = select i1 %.not.i78, i32 %129, i32 %136 + %137 = add i32 %.p.i.us.us, %76 + %138 = sub nsw i32 0, %135 + %.p49.i.us.us = select i1 %.not.i78, i32 %135, i32 %138 + %139 = add i32 %.p49.i.us.us, %122 + %140 = icmp slt i32 %137, 0 + br i1 %140, label %.thread89.us105.us, label %141 + +141: ; preds = %get_mv_projection.exit.us.us + %142 = load i32, ptr %23, align 4 + %143 = ashr i32 %142, 1 + %144 = icmp sge i32 %137, %143 + %145 = icmp slt i32 %139, 0 + %or.cond.i.us.us = select i1 %144, i1 true, i1 %145 + br i1 %or.cond.i.us.us, label %.thread89.us105.us, label %146 + +146: ; preds = %141 + %147 = load i32, ptr %28, align 8 + %148 = ashr i32 %147, 1 + %.not42.i.us.us = icmp slt i32 %139, %148 + br i1 %.not42.i.us.us, label %149, label %.thread89.us105.us + +149: ; preds = %146 + %150 = icmp sge i32 %137, %77 + %.not43.i.us.us = icmp slt i32 %137, %78 + %or.cond45.not51.not55.i.us.us = select i1 %150, i1 %.not43.i.us.us, i1 false + %151 = add nsw i32 %123, -8 + %152 = icmp sge i32 %139, %151 + %or.cond47.not53.i.us.us = select i1 %or.cond45.not51.not55.i.us.us, i1 %152, i1 false + %153 = add nuw nsw i32 %123, 16 + %.not44.i.us.us = icmp samesign ult i32 %139, %153 %or.cond48.i.us.us = select i1 %or.cond47.not53.i.us.us, i1 %.not44.i.us.us, i1 false - br i1 %or.cond48.i.us.us, label %155, label %.thread89.us105.us - -155: ; preds = %150 - %156 = load i32, ptr %66, align 4 - %157 = ashr i32 %156, 1 - %158 = mul nsw i32 %157, %138 - %159 = add nsw i32 %158, %140 - %160 = sext i32 %159 to i64 - %161 = getelementptr inbounds %struct.TPL_MV_REF, ptr %5, i64 %160 - store i16 %.sroa.0.0.copyload.us.us, ptr %161, align 4 - %162 = getelementptr inbounds nuw i8, ptr %161, i64 2 - store i16 %.sroa.3.0.copyload.us.us, ptr %162, align 2 - %163 = trunc i32 %86 to i8 - %164 = getelementptr inbounds nuw i8, ptr %161, i64 4 - store i8 %163, ptr %164, align 4 + br i1 %or.cond48.i.us.us, label %154, label %.thread89.us105.us + +154: ; preds = %149 + %155 = load i32, ptr %66, align 4 + %156 = ashr i32 %155, 1 + %157 = mul nsw i32 %156, %137 + %158 = add nsw i32 %157, %139 + %159 = sext i32 %158 to i64 + %160 = getelementptr inbounds %struct.TPL_MV_REF, ptr %5, i64 %159 + store i16 %.sroa.0.0.copyload.us.us, ptr %160, align 4 + %161 = getelementptr inbounds nuw i8, ptr %160, i64 2 + store i16 %.sroa.3.0.copyload.us.us, ptr %161, align 2 + %162 = trunc i32 %86 to i8 + %163 = getelementptr inbounds nuw i8, ptr %160, i64 4 + store i8 %162, ptr %163, align 4 br label %.thread89.us105.us -.thread89.us105.us: ; preds = %155, %150, %147, %142, %get_mv_projection.exit.us.us, %83, %79 +.thread89.us105.us: ; preds = %154, %149, %146, %141, %get_mv_projection.exit.us.us, %83, %79 %indvars.iv.next117 = add nuw nsw i64 %indvars.iv116, 1 %exitcond119.not = icmp eq i64 %indvars.iv.next117, %74 br i1 %exitcond119.not, label %._crit_edge.split.us106.us, label %79, !llvm.loop !41 diff --git a/bench/recastnavigation/optimized/DetourLocalBoundary.ll b/bench/recastnavigation/optimized/DetourLocalBoundary.ll index 684676f6b46..b22d83151ed 100644 --- a/bench/recastnavigation/optimized/DetourLocalBoundary.ll +++ b/bench/recastnavigation/optimized/DetourLocalBoundary.ll @@ -5,6 +5,9 @@ target triple = "x86_64-pc-linux-gnu" %"struct.dtLocalBoundary::Segment" = type { [6 x float], float } +@.str = private unnamed_addr constant [24 x i8] c"tgt+n <= MAX_LOCAL_SEGS\00", align 1 +@.str.1 = private unnamed_addr constant [154 x i8] c"generated/home/dtcxzyw/WorkSpace/Projects/compilers/llvm-opt-benchmark/bench/recastnavigation/recastnavigation/DetourCrowd/Source/DetourLocalBoundary.cpp\00", align 1 + @_ZN15dtLocalBoundaryC1Ev = unnamed_addr alias void (ptr), ptr @_ZN15dtLocalBoundaryC2Ev @_ZN15dtLocalBoundaryD1Ev = unnamed_addr alias void (ptr), ptr @_ZN15dtLocalBoundaryD2Ev @@ -47,7 +50,7 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c %5 = load i32, ptr %4, align 4 %.not = icmp eq i32 %5, 0 %6 = getelementptr inbounds nuw i8, ptr %0, i64 12 - br i1 %.not, label %39, label %7 + br i1 %.not, label %44, label %7 7: ; preds = %3 %8 = add nsw i32 %5, -1 @@ -62,7 +65,7 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c .preheader: ; preds = %7 %invariant.gep = getelementptr inbounds nuw i8, ptr %0, i64 36 %14 = icmp sgt i32 %5, 0 - br i1 %14, label %.lr.ph.preheader, label %.loopexit + br i1 %14, label %.lr.ph.preheader, label %._crit_edge .lr.ph.preheader: ; preds = %.preheader %wide.trip.count = zext nneg i32 %5 to i64 @@ -70,12 +73,12 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c 15: ; preds = %7 %16 = icmp sgt i32 %5, 7 - br i1 %16, label %45, label %17 + br i1 %16, label %50, label %17 17: ; preds = %15 %18 = sext i32 %5 to i64 %19 = getelementptr inbounds [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %18 - br label %39 + br label %44 .lr.ph: ; preds = %.lr.ph.preheader, %22 %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %22 ] @@ -83,61 +86,72 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c %gep = getelementptr inbounds nuw i8, ptr %invariant.gep, i64 %.idx27 %20 = load float, ptr %gep, align 4 %21 = fcmp ugt float %1, %20 - br i1 %21, label %22, label %.loopexit.split.loop.exit34 + br i1 %21, label %22, label %._crit_edge.loopexit.split.loop.exit 22: ; preds = %.lr.ph %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 %.loopexit, label %.lr.ph, !llvm.loop !4 + br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !4 -.loopexit.split.loop.exit34: ; preds = %.lr.ph +._crit_edge.loopexit.split.loop.exit: ; preds = %.lr.ph %23 = trunc nuw nsw i64 %indvars.iv to i32 - br label %.loopexit - -.loopexit: ; preds = %22, %.loopexit.split.loop.exit34, %.preheader - %.021.lcssa = phi i32 [ 0, %.preheader ], [ %23, %.loopexit.split.loop.exit34 ], [ %5, %22 ] - %24 = sub nsw i32 %5, %.021.lcssa - %25 = sub nsw i32 7, %.021.lcssa - %26 = tail call noundef i32 @llvm.smin.i32(i32 %24, i32 %25) - %27 = tail call noundef ptr @_Z21dtAssertFailGetCustomv() - %28 = icmp sgt i32 %26, 0 - br i1 %28, label %29, label %._crit_edge33 - -._crit_edge33: ; preds = %.loopexit + br label %._crit_edge + +._crit_edge: ; preds = %22, %._crit_edge.loopexit.split.loop.exit, %.preheader + %.021.lcssa = phi i32 [ 0, %.preheader ], [ %23, %._crit_edge.loopexit.split.loop.exit ], [ %5, %22 ] + %24 = add nuw nsw i32 %.021.lcssa, 1 + %25 = sub nsw i32 %5, %.021.lcssa + %26 = sub nsw i32 7, %.021.lcssa + %27 = tail call noundef i32 @llvm.smin.i32(i32 %25, i32 %26) + %28 = tail call noundef ptr @_Z21dtAssertFailGetCustomv() + %29 = icmp eq ptr %28, null + %30 = add nsw i32 %27, %24 + %31 = icmp slt i32 %30, 9 + %or.cond = select i1 %29, i1 true, i1 %31 + br i1 %or.cond, label %33, label %32 + +32: ; preds = %._crit_edge + tail call void %28(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 71) + br label %33 + +33: ; preds = %32, %._crit_edge + %34 = icmp sgt i32 %27, 0 + br i1 %34, label %35, label %._crit_edge33 + +._crit_edge33: ; preds = %33 %.pre = zext nneg i32 %.021.lcssa to i64 - br label %37 - -29: ; preds = %.loopexit - %30 = add nuw nsw i32 %.021.lcssa, 1 - %31 = zext nneg i32 %30 to i64 - %32 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %31 - %33 = zext nneg i32 %.021.lcssa to i64 - %34 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %33 - %35 = zext nneg i32 %26 to i64 - %36 = mul nuw nsw i64 %35, 28 - tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %32, ptr nonnull align 4 %34, i64 %36, i1 false) - br label %37 - -37: ; preds = %._crit_edge33, %29 - %.pre-phi = phi i64 [ %.pre, %._crit_edge33 ], [ %33, %29 ] - %38 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %.pre-phi - br label %39 - -39: ; preds = %3, %17, %37 - %.0 = phi ptr [ %19, %17 ], [ %38, %37 ], [ %6, %3 ] - %40 = getelementptr inbounds nuw i8, ptr %.0, i64 24 - store float %1, ptr %40, align 4 + br label %42 + +35: ; preds = %33 + %36 = zext nneg i32 %24 to i64 + %37 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %36 + %38 = zext nneg i32 %.021.lcssa to i64 + %39 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %38 + %40 = zext nneg i32 %27 to i64 + %41 = mul nuw nsw i64 %40, 28 + tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %37, ptr nonnull align 4 %39, i64 %41, i1 false) + br label %42 + +42: ; preds = %._crit_edge33, %35 + %.pre-phi = phi i64 [ %.pre, %._crit_edge33 ], [ %38, %35 ] + %43 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %.pre-phi + br label %44 + +44: ; preds = %3, %17, %42 + %.0 = phi ptr [ %19, %17 ], [ %43, %42 ], [ %6, %3 ] + %45 = getelementptr inbounds nuw i8, ptr %.0, i64 24 + store float %1, ptr %45, align 4 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %.0, ptr noundef nonnull align 4 dereferenceable(24) %2, i64 24, i1 false) - %41 = load i32, ptr %4, align 4 - %42 = icmp slt i32 %41, 8 - br i1 %42, label %43, label %45 + %46 = load i32, ptr %4, align 4 + %47 = icmp slt i32 %46, 8 + br i1 %47, label %48, label %50 -43: ; preds = %39 - %44 = add nsw i32 %41, 1 - store i32 %44, ptr %4, align 4 - br label %45 +48: ; preds = %44 + %49 = add nsw i32 %46, 1 + store i32 %49, ptr %4, align 4 + br label %50 -45: ; preds = %15, %43, %39 +50: ; preds = %15, %48, %44 ret void } @@ -217,7 +231,7 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter 42: ; preds = %.lr.ph %43 = load i32, ptr %26, align 4 %.not.i = icmp eq i32 %43, 0 - br i1 %.not.i, label %74, label %44 + br i1 %.not.i, label %79, label %44 44: ; preds = %42 %45 = add nsw i32 %43, -1 @@ -230,7 +244,7 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter .preheader.i: ; preds = %44 %49 = icmp sgt i32 %43, 0 - br i1 %49, label %.lr.ph.preheader.i, label %.loopexit.i + br i1 %49, label %.lr.ph.preheader.i, label %._crit_edge.i .lr.ph.preheader.i: ; preds = %.preheader.i %wide.trip.count.i = zext nneg i32 %43 to i64 @@ -243,7 +257,7 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter 52: ; preds = %50 %53 = sext i32 %43 to i64 %54 = getelementptr inbounds [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %53 - br label %74 + br label %79 .lr.ph.i: ; preds = %57, %.lr.ph.preheader.i %indvars.iv.i = phi i64 [ 0, %.lr.ph.preheader.i ], [ %indvars.iv.next.i, %57 ] @@ -251,73 +265,84 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter %gep.i = getelementptr inbounds nuw i8, ptr %invariant.gep, i64 %.idx27.i %55 = load float, ptr %gep.i, align 4 %56 = fcmp ugt float %40, %55 - br i1 %56, label %57, label %.loopexit.split.loop.exit34.i + br i1 %56, label %57, label %._crit_edge.loopexit.split.loop.exit.i 57: ; preds = %.lr.ph.i %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i - br i1 %exitcond.not.i, label %.loopexit.i, label %.lr.ph.i, !llvm.loop !4 + br i1 %exitcond.not.i, label %._crit_edge.i, label %.lr.ph.i, !llvm.loop !4 -.loopexit.split.loop.exit34.i: ; preds = %.lr.ph.i +._crit_edge.loopexit.split.loop.exit.i: ; preds = %.lr.ph.i %58 = trunc nuw nsw i64 %indvars.iv.i to i32 - br label %.loopexit.i - -.loopexit.i: ; preds = %57, %.loopexit.split.loop.exit34.i, %.preheader.i - %.021.lcssa.i = phi i32 [ 0, %.preheader.i ], [ %58, %.loopexit.split.loop.exit34.i ], [ %43, %57 ] - %59 = sub nsw i32 %43, %.021.lcssa.i - %60 = sub nsw i32 7, %.021.lcssa.i - %61 = call noundef i32 @llvm.smin.i32(i32 %59, i32 %60) - %62 = call noundef ptr @_Z21dtAssertFailGetCustomv() - %63 = icmp sgt i32 %61, 0 - br i1 %63, label %64, label %._crit_edge33.i - -._crit_edge33.i: ; preds = %.loopexit.i + br label %._crit_edge.i + +._crit_edge.i: ; preds = %57, %._crit_edge.loopexit.split.loop.exit.i, %.preheader.i + %.021.lcssa.i = phi i32 [ 0, %.preheader.i ], [ %58, %._crit_edge.loopexit.split.loop.exit.i ], [ %43, %57 ] + %59 = add nuw nsw i32 %.021.lcssa.i, 1 + %60 = sub nsw i32 %43, %.021.lcssa.i + %61 = sub nsw i32 7, %.021.lcssa.i + %62 = call noundef i32 @llvm.smin.i32(i32 %60, i32 %61) + %63 = call noundef ptr @_Z21dtAssertFailGetCustomv() + %64 = icmp eq ptr %63, null + %65 = add nsw i32 %62, %59 + %66 = icmp slt i32 %65, 9 + %or.cond.i = select i1 %64, i1 true, i1 %66 + br i1 %or.cond.i, label %68, label %67 + +67: ; preds = %._crit_edge.i + call void %63(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 71) + br label %68 + +68: ; preds = %67, %._crit_edge.i + %69 = icmp sgt i32 %62, 0 + br i1 %69, label %70, label %._crit_edge33.i + +._crit_edge33.i: ; preds = %68 %.pre.i = zext nneg i32 %.021.lcssa.i to i64 - br label %72 - -64: ; preds = %.loopexit.i - %65 = add nuw nsw i32 %.021.lcssa.i, 1 - %66 = zext nneg i32 %65 to i64 - %67 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %66 - %68 = zext nneg i32 %.021.lcssa.i to i64 - %69 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %68 - %70 = zext nneg i32 %61 to i64 - %71 = mul nuw nsw i64 %70, 28 - call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %67, ptr nonnull align 4 %69, i64 %71, i1 false) - br label %72 - -72: ; preds = %64, %._crit_edge33.i - %.pre-phi.i = phi i64 [ %.pre.i, %._crit_edge33.i ], [ %68, %64 ] - %73 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %.pre-phi.i - br label %74 - -74: ; preds = %72, %52, %42 - %.0.i = phi ptr [ %54, %52 ], [ %73, %72 ], [ %30, %42 ] - %75 = getelementptr inbounds nuw i8, ptr %.0.i, i64 24 - store float %40, ptr %75, align 4 + br label %77 + +70: ; preds = %68 + %71 = zext nneg i32 %59 to i64 + %72 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %71 + %73 = zext nneg i32 %.021.lcssa.i to i64 + %74 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %73 + %75 = zext nneg i32 %62 to i64 + %76 = mul nuw nsw i64 %75, 28 + call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %72, ptr nonnull align 4 %74, i64 %76, i1 false) + br label %77 + +77: ; preds = %70, %._crit_edge33.i + %.pre-phi.i = phi i64 [ %.pre.i, %._crit_edge33.i ], [ %73, %70 ] + %78 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %.pre-phi.i + br label %79 + +79: ; preds = %77, %52, %42 + %.0.i = phi ptr [ %54, %52 ], [ %78, %77 ], [ %30, %42 ] + %80 = getelementptr inbounds nuw i8, ptr %.0.i, i64 24 + store float %40, ptr %80, align 4 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %.0.i, ptr noundef nonnull readonly align 8 dereferenceable(24) %38, i64 24, i1 false) - %76 = load i32, ptr %26, align 4 - %77 = icmp slt i32 %76, 8 - br i1 %77, label %78, label %_ZN15dtLocalBoundary10addSegmentEfPKf.exit + %81 = load i32, ptr %26, align 4 + %82 = icmp slt i32 %81, 8 + br i1 %82, label %83, label %_ZN15dtLocalBoundary10addSegmentEfPKf.exit -78: ; preds = %74 - %79 = add nsw i32 %76, 1 - store i32 %79, ptr %26, align 4 +83: ; preds = %79 + %84 = add nsw i32 %81, 1 + store i32 %84, ptr %26, align 4 br label %_ZN15dtLocalBoundary10addSegmentEfPKf.exit -_ZN15dtLocalBoundary10addSegmentEfPKf.exit: ; preds = %78, %74, %50, %.lr.ph +_ZN15dtLocalBoundary10addSegmentEfPKf.exit: ; preds = %83, %79, %50, %.lr.ph %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %80 = load i32, ptr %8, align 4 - %81 = sext i32 %80 to i64 - %82 = icmp slt i64 %indvars.iv.next, %81 - br i1 %82, label %.lr.ph, label %._crit_edge, !llvm.loop !6 + %85 = load i32, ptr %8, align 4 + %86 = sext i32 %85 to i64 + %87 = icmp slt i64 %indvars.iv.next, %86 + br i1 %87, label %.lr.ph, label %._crit_edge, !llvm.loop !6 ._crit_edge: ; preds = %_ZN15dtLocalBoundary10addSegmentEfPKf.exit, %31 %indvars.iv.next33 = add nuw nsw i64 %indvars.iv32, 1 - %83 = load i32, ptr %24, align 4 - %84 = sext i32 %83 to i64 - %85 = icmp slt i64 %indvars.iv.next33, %84 - br i1 %85, label %31, label %.loopexit, !llvm.loop !7 + %88 = load i32, ptr %24, align 4 + %89 = sext i32 %88 to i64 + %90 = icmp slt i64 %indvars.iv.next33, %89 + br i1 %90, label %31, label %.loopexit, !llvm.loop !7 .loopexit: ; preds = %._crit_edge, %15, %10 ret void diff --git a/bench/recastnavigation/optimized/DetourPathCorridor.ll b/bench/recastnavigation/optimized/DetourPathCorridor.ll index 956a4b9d396..78a48b4c039 100644 --- a/bench/recastnavigation/optimized/DetourPathCorridor.ll +++ b/bench/recastnavigation/optimized/DetourPathCorridor.ll @@ -5,6 +5,7 @@ target triple = "x86_64-pc-linux-gnu" $__clang_call_terminate = comdat any +@.str = private unnamed_addr constant [22 x i8] c"ppos+count <= maxPath\00", align 1 @.str.1 = private unnamed_addr constant [153 x i8] c"generated/home/dtcxzyw/WorkSpace/Projects/compilers/llvm-opt-benchmark/bench/recastnavigation/recastnavigation/DetourCrowd/Source/DetourPathCorridor.cpp\00", align 1 @.str.2 = private unnamed_addr constant [8 x i8] c"!m_path\00", align 1 @.str.3 = private unnamed_addr constant [7 x i8] c"m_path\00", align 1 @@ -76,52 +77,53 @@ define noundef i32 @_Z25dtMergeCorridorStartMovedPjiiPKji(ptr noundef captures(n %24 = add nuw nsw i32 %.us-phi66, 1 %25 = tail call noundef i32 @llvm.smin.i32(i32 %24, i32 %1) %26 = sub nsw i32 %1, %25 - %27 = add nsw i32 %26, %23 - %28 = icmp sgt i32 %27, %2 - %29 = sub nsw i32 %2, %23 - %spec.select = select i1 %28, i32 %29, i32 %26 - %30 = icmp sgt i32 %spec.select, 0 - br i1 %30, label %31, label %38 + %27 = tail call noundef i32 @llvm.smax.i32(i32 %26, i32 0) + %28 = add nsw i32 %27, %23 + %29 = icmp sgt i32 %28, %2 + %30 = sub nsw i32 %2, %23 + %spec.select = select i1 %29, i32 %30, i32 %27 + %31 = icmp sgt i32 %spec.select, 0 + br i1 %31, label %32, label %39 + +32: ; preds = %22 + %33 = sext i32 %23 to i64 + %34 = getelementptr inbounds i32, ptr %0, i64 %33 + %35 = sext i32 %25 to i64 + %36 = getelementptr inbounds i32, ptr %0, i64 %35 + %37 = zext nneg i32 %spec.select to i64 + %38 = shl nuw nsw i64 %37, 2 + tail call void @llvm.memmove.p0.p0.i64(ptr align 4 %34, ptr align 4 %36, i64 %38, i1 false) + br label %39 + +39: ; preds = %32, %22 + %40 = tail call noundef i32 @llvm.smin.i32(i32 %23, i32 %2) + %41 = icmp sgt i32 %40, 0 + br i1 %41, label %.lr.ph.preheader, label %._crit_edge -31: ; preds = %22 - %32 = sext i32 %23 to i64 - %33 = getelementptr inbounds i32, ptr %0, i64 %32 - %34 = sext i32 %25 to i64 - %35 = getelementptr inbounds i32, ptr %0, i64 %34 - %36 = zext nneg i32 %spec.select to i64 - %37 = shl nuw nsw i64 %36, 2 - tail call void @llvm.memmove.p0.p0.i64(ptr align 4 %33, ptr align 4 %35, i64 %37, i1 false) - br label %38 - -38: ; preds = %31, %22 - %39 = tail call noundef i32 @llvm.smin.i32(i32 %23, i32 %2) - %40 = icmp sgt i32 %39, 0 - br i1 %40, label %.lr.ph.preheader, label %._crit_edge - -.lr.ph.preheader: ; preds = %38 - %wide.trip.count = zext nneg i32 %39 to i64 +.lr.ph.preheader: ; preds = %39 + %wide.trip.count = zext nneg i32 %40 to i64 br label %.lr.ph .lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph %indvars.iv72 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next73, %.lr.ph ] - %41 = trunc i64 %indvars.iv72 to i32 - %42 = xor i32 %41, -1 - %43 = add i32 %4, %42 - %44 = sext i32 %43 to i64 - %45 = getelementptr inbounds i32, ptr %3, i64 %44 - %46 = load i32, ptr %45, align 4 - %47 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv72 - store i32 %46, ptr %47, align 4 + %42 = trunc i64 %indvars.iv72 to i32 + %43 = xor i32 %42, -1 + %44 = add i32 %4, %43 + %45 = sext i32 %44 to i64 + %46 = getelementptr inbounds i32, ptr %3, i64 %45 + %47 = load i32, ptr %46, align 4 + %48 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv72 + store i32 %47, ptr %48, align 4 %indvars.iv.next73 = add nuw nsw i64 %indvars.iv72, 1 %exitcond.not = icmp eq i64 %indvars.iv.next73, %wide.trip.count br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !7 -._crit_edge: ; preds = %.lr.ph, %38 - %48 = add nsw i32 %spec.select, %23 +._crit_edge: ; preds = %.lr.ph, %39 + %49 = add nsw i32 %spec.select, %23 br label %.split65.us.thread .split65.us.thread: ; preds = %5, %.split65.us, %._crit_edge - %.0 = phi i32 [ %48, %._crit_edge ], [ %1, %.split65.us ], [ %1, %5 ] + %.0 = phi i32 [ %49, %._crit_edge ], [ %1, %.split65.us ], [ %1, %5 ] ret i32 %.0 } @@ -132,8 +134,8 @@ declare void @llvm.memmove.p0.p0.i64(ptr writeonly captures(none), ptr readonly define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(none) %0, i32 noundef %1, i32 noundef %2, ptr noundef readonly captures(none) %3, i32 noundef %4) local_unnamed_addr #2 { %6 = icmp sgt i32 %1, 0 %7 = icmp sgt i32 %4, 0 - %or.cond75 = and i1 %6, %7 - br i1 %or.cond75, label %.preheader.us.preheader, label %._crit_edge58.thread + %or.cond76 = and i1 %6, %7 + br i1 %or.cond76, label %.preheader.us.preheader, label %._crit_edge58.thread .preheader.us.preheader: ; preds = %5 %8 = zext nneg i32 %4 to i64 @@ -141,12 +143,12 @@ define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(non br label %.preheader.us .preheader.us: ; preds = %.preheader.us.preheader, %._crit_edge.us - %indvars.iv69 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next70, %._crit_edge.us ] + %indvars.iv70 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next71, %._crit_edge.us ] %.03657.us = phi i32 [ -1, %.preheader.us.preheader ], [ %.3.us, %._crit_edge.us ] %.03756.us = phi i32 [ -1, %.preheader.us.preheader ], [ %.340.us, %._crit_edge.us ] - %10 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv69 + %10 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv70 %11 = load i32, ptr %10, align 4 - %12 = trunc nuw nsw i64 %indvars.iv69 to i32 + %12 = trunc nuw nsw i64 %indvars.iv70 to i32 br label %13 13: ; preds = %.preheader.us, %13 @@ -166,8 +168,8 @@ define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(non br i1 %18, label %13, label %._crit_edge.us, !llvm.loop !8 ._crit_edge.us: ; preds = %13 - %indvars.iv.next70 = add nuw nsw i64 %indvars.iv69, 1 - %19 = icmp samesign uge i64 %indvars.iv.next70, %9 + %indvars.iv.next71 = add nuw nsw i64 %indvars.iv70, 1 + %19 = icmp samesign uge i64 %indvars.iv.next71, %9 %or.cond67.not = select i1 %.144.us, i1 true, i1 %19 br i1 %or.cond67.not, label %._crit_edge58, label %.preheader.us, !llvm.loop !9 @@ -184,22 +186,32 @@ define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(non %26 = sub nsw i32 %2, %23 %27 = tail call noundef i32 @llvm.smin.i32(i32 %25, i32 %26) %28 = tail call noundef ptr @_Z21dtAssertFailGetCustomv() - %29 = add nsw i32 %27, %23 + %29 = icmp ne ptr %28, null + %30 = add nsw i32 %27, %23 + %.not = icmp sgt i32 %30, %2 + %or.cond48 = select i1 %29, i1 %.not, i1 false + br i1 %or.cond48, label %31, label %32 + +31: ; preds = %22 + tail call void %28(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 103) + br label %32 + +32: ; preds = %31, %22 %.not47 = icmp eq i32 %27, 0 - br i1 %.not47, label %._crit_edge58.thread, label %30 - -30: ; preds = %22 - %31 = sext i32 %23 to i64 - %32 = getelementptr inbounds i32, ptr %0, i64 %31 - %33 = zext nneg i32 %24 to i64 - %34 = getelementptr inbounds nuw i32, ptr %3, i64 %33 - %35 = sext i32 %27 to i64 - %36 = shl nsw i64 %35, 2 - tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %32, ptr nonnull align 4 %34, i64 %36, i1 false) + br i1 %.not47, label %._crit_edge58.thread, label %33 + +33: ; preds = %32 + %34 = sext i32 %23 to i64 + %35 = getelementptr inbounds i32, ptr %0, i64 %34 + %36 = zext nneg i32 %24 to i64 + %37 = getelementptr inbounds nuw i32, ptr %3, i64 %36 + %38 = sext i32 %27 to i64 + %39 = shl nsw i64 %38, 2 + tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %35, ptr nonnull align 4 %37, i64 %39, i1 false) br label %._crit_edge58.thread -._crit_edge58.thread: ; preds = %5, %22, %30, %._crit_edge58 - %.0 = phi i32 [ %1, %._crit_edge58 ], [ %29, %30 ], [ %29, %22 ], [ %1, %5 ] +._crit_edge58.thread: ; preds = %5, %32, %33, %._crit_edge58 + %.0 = phi i32 [ %1, %._crit_edge58 ], [ %30, %33 ], [ %30, %32 ], [ %1, %5 ] ret i32 %.0 } @@ -1054,7 +1066,7 @@ define noundef zeroext i1 @_ZN14dtPathCorridor12movePositionEPKfP14dtNavMeshQuer %23 = call noundef i32 @_ZNK14dtNavMeshQuery16moveAlongSurfaceEjPKfS1_PK13dtQueryFilterPfPjPii(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %22, ptr noundef nonnull %0, ptr noundef %1, ptr noundef %3, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef 16) %24 = and i32 %23, 1073741824 %25 = icmp ne i32 %24, 0 - br i1 %25, label %26, label %85 + br i1 %25, label %26, label %86 26: ; preds = %20 %27 = load ptr, ptr %11, align 8 @@ -1118,71 +1130,72 @@ define noundef zeroext i1 @_ZN14dtPathCorridor12movePositionEPKfP14dtNavMeshQuer %50 = add nuw nsw i32 %.us-phi66.i, 1 %51 = call noundef i32 @llvm.smin.i32(i32 %50, i32 %28) %52 = sub nsw i32 %28, %51 - %53 = add nsw i32 %52, %49 - %54 = icmp sgt i32 %53, %30 - %55 = sub nsw i32 %30, %49 - %spec.select.i = select i1 %54, i32 %55, i32 %52 - %56 = icmp sgt i32 %spec.select.i, 0 - br i1 %56, label %57, label %64 - -57: ; preds = %48 - %58 = sext i32 %49 to i64 - %59 = getelementptr inbounds i32, ptr %27, i64 %58 - %60 = sext i32 %51 to i64 - %61 = getelementptr inbounds i32, ptr %27, i64 %60 - %62 = zext nneg i32 %spec.select.i to i64 - %63 = shl nuw nsw i64 %62, 2 - call void @llvm.memmove.p0.p0.i64(ptr align 4 %59, ptr align 4 %61, i64 %63, i1 false) - br label %64 - -64: ; preds = %57, %48 - %65 = call noundef i32 @llvm.smin.i32(i32 %49, i32 %30) - %66 = icmp sgt i32 %65, 0 - br i1 %66, label %.lr.ph.preheader.i, label %._crit_edge.i - -.lr.ph.preheader.i: ; preds = %64 - %wide.trip.count.i = zext nneg i32 %65 to i64 + %53 = call noundef i32 @llvm.smax.i32(i32 %52, i32 0) + %54 = add nsw i32 %53, %49 + %55 = icmp sgt i32 %54, %30 + %56 = sub nsw i32 %30, %49 + %spec.select.i = select i1 %55, i32 %56, i32 %53 + %57 = icmp sgt i32 %spec.select.i, 0 + br i1 %57, label %58, label %65 + +58: ; preds = %48 + %59 = sext i32 %49 to i64 + %60 = getelementptr inbounds i32, ptr %27, i64 %59 + %61 = sext i32 %51 to i64 + %62 = getelementptr inbounds i32, ptr %27, i64 %61 + %63 = zext nneg i32 %spec.select.i to i64 + %64 = shl nuw nsw i64 %63, 2 + call void @llvm.memmove.p0.p0.i64(ptr align 4 %60, ptr align 4 %62, i64 %64, i1 false) + br label %65 + +65: ; preds = %58, %48 + %66 = call noundef i32 @llvm.smin.i32(i32 %49, i32 %30) + %67 = icmp sgt i32 %66, 0 + br i1 %67, label %.lr.ph.preheader.i, label %._crit_edge.i + +.lr.ph.preheader.i: ; preds = %65 + %wide.trip.count.i = zext nneg i32 %66 to i64 br label %.lr.ph.i .lr.ph.i: ; preds = %.lr.ph.i, %.lr.ph.preheader.i %indvars.iv72.i = phi i64 [ 0, %.lr.ph.preheader.i ], [ %indvars.iv.next73.i, %.lr.ph.i ] - %67 = trunc i64 %indvars.iv72.i to i32 - %68 = xor i32 %67, -1 - %69 = add i32 %31, %68 - %70 = sext i32 %69 to i64 - %71 = getelementptr inbounds i32, ptr %6, i64 %70 - %72 = load i32, ptr %71, align 4 - %73 = getelementptr inbounds nuw i32, ptr %27, i64 %indvars.iv72.i - store i32 %72, ptr %73, align 4 + %68 = trunc i64 %indvars.iv72.i to i32 + %69 = xor i32 %68, -1 + %70 = add i32 %31, %69 + %71 = sext i32 %70 to i64 + %72 = getelementptr inbounds i32, ptr %6, i64 %71 + %73 = load i32, ptr %72, align 4 + %74 = getelementptr inbounds nuw i32, ptr %27, i64 %indvars.iv72.i + store i32 %73, ptr %74, align 4 %indvars.iv.next73.i = add nuw nsw i64 %indvars.iv72.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next73.i, %wide.trip.count.i br i1 %exitcond.not.i, label %._crit_edge.i, label %.lr.ph.i, !llvm.loop !7 -._crit_edge.i: ; preds = %.lr.ph.i, %64 - %74 = add nsw i32 %spec.select.i, %49 +._crit_edge.i: ; preds = %.lr.ph.i, %65 + %75 = add nsw i32 %spec.select.i, %49 %.pre = load ptr, ptr %11, align 8 br label %_Z25dtMergeCorridorStartMovedPjiiPKji.exit _Z25dtMergeCorridorStartMovedPjiiPKji.exit: ; preds = %26, %.split65.us.i, %._crit_edge.i - %75 = phi ptr [ %.pre, %._crit_edge.i ], [ %27, %.split65.us.i ], [ %27, %26 ] - %.0.i = phi i32 [ %74, %._crit_edge.i ], [ %28, %.split65.us.i ], [ %28, %26 ] + %76 = phi ptr [ %.pre, %._crit_edge.i ], [ %27, %.split65.us.i ], [ %27, %26 ] + %.0.i = phi i32 [ %75, %._crit_edge.i ], [ %28, %.split65.us.i ], [ %28, %26 ] store i32 %.0.i, ptr %17, align 8 - %76 = getelementptr inbounds nuw i8, ptr %0, i64 4 - %77 = load float, ptr %76, align 4 - store float %77, ptr %8, align 4 - %78 = load i32, ptr %75, align 4 - %79 = call noundef i32 @_ZNK14dtNavMeshQuery13getPolyHeightEjPKfPf(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %78, ptr noundef nonnull %5, ptr noundef nonnull %8) - %80 = load float, ptr %8, align 4 - %81 = load float, ptr %5, align 4 - store float %81, ptr %0, align 8 - store float %80, ptr %76, align 4 - %82 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %83 = load float, ptr %82, align 4 - %84 = getelementptr inbounds nuw i8, ptr %0, i64 8 - store float %83, ptr %84, align 8 - br label %85 - -85: ; preds = %20, %_Z25dtMergeCorridorStartMovedPjiiPKji.exit + %77 = getelementptr inbounds nuw i8, ptr %0, i64 4 + %78 = load float, ptr %77, align 4 + store float %78, ptr %8, align 4 + %79 = load i32, ptr %76, align 4 + %80 = call noundef i32 @_ZNK14dtNavMeshQuery13getPolyHeightEjPKfPf(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %79, ptr noundef nonnull %5, ptr noundef nonnull %8) + %81 = load float, ptr %8, align 4 + %82 = load float, ptr %5, align 4 + store float %82, ptr %0, align 8 + store float %81, ptr %77, align 4 + %83 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %84 = load float, ptr %83, align 4 + %85 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store float %84, ptr %85, align 8 + br label %86 + +86: ; preds = %20, %_Z25dtMergeCorridorStartMovedPjiiPKji.exit ret i1 %25 } @@ -1233,7 +1246,7 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe %27 = call noundef i32 @_ZNK14dtNavMeshQuery16moveAlongSurfaceEjPKfS1_PK13dtQueryFilterPfPjPii(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %25, ptr noundef nonnull %26, ptr noundef %1, ptr noundef %3, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef 16) %28 = and i32 %27, 1073741824 %29 = icmp ne i32 %28, 0 - br i1 %29, label %30, label %74 + br i1 %29, label %30, label %77 30: ; preds = %19 %31 = load ptr, ptr %10, align 8 @@ -1243,8 +1256,8 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe %35 = load i32, ptr %7, align 4 %36 = icmp sgt i32 %32, 0 %37 = icmp sgt i32 %35, 0 - %or.cond75.i = and i1 %36, %37 - br i1 %or.cond75.i, label %.preheader.us.preheader.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit + %or.cond76.i = and i1 %36, %37 + br i1 %or.cond76.i, label %.preheader.us.preheader.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit .preheader.us.preheader.i: ; preds = %30 %38 = zext nneg i32 %35 to i64 @@ -1252,12 +1265,12 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe br label %.preheader.us.i .preheader.us.i: ; preds = %._crit_edge.us.i, %.preheader.us.preheader.i - %indvars.iv69.i = phi i64 [ 0, %.preheader.us.preheader.i ], [ %indvars.iv.next70.i, %._crit_edge.us.i ] + %indvars.iv70.i = phi i64 [ 0, %.preheader.us.preheader.i ], [ %indvars.iv.next71.i, %._crit_edge.us.i ] %.03657.us.i = phi i32 [ -1, %.preheader.us.preheader.i ], [ %.3.us.i, %._crit_edge.us.i ] %.03756.us.i = phi i32 [ -1, %.preheader.us.preheader.i ], [ %.340.us.i, %._crit_edge.us.i ] - %40 = getelementptr inbounds nuw i32, ptr %31, i64 %indvars.iv69.i + %40 = getelementptr inbounds nuw i32, ptr %31, i64 %indvars.iv70.i %41 = load i32, ptr %40, align 4 - %42 = trunc nuw nsw i64 %indvars.iv69.i to i32 + %42 = trunc nuw nsw i64 %indvars.iv70.i to i32 br label %43 43: ; preds = %43, %.preheader.us.i @@ -1277,8 +1290,8 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe br i1 %48, label %43, label %._crit_edge.us.i, !llvm.loop !8 ._crit_edge.us.i: ; preds = %43 - %indvars.iv.next70.i = add nuw nsw i64 %indvars.iv69.i, 1 - %49 = icmp samesign uge i64 %indvars.iv.next70.i, %39 + %indvars.iv.next71.i = add nuw nsw i64 %indvars.iv70.i, 1 + %49 = icmp samesign uge i64 %indvars.iv.next71.i, %39 %or.cond67.not.i = select i1 %.144.us.i, i1 true, i1 %49 br i1 %or.cond67.not.i, label %._crit_edge58.i, label %.preheader.us.i, !llvm.loop !9 @@ -1295,36 +1308,46 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe %56 = sub nsw i32 %34, %53 %57 = call noundef i32 @llvm.smin.i32(i32 %55, i32 %56) %58 = call noundef ptr @_Z21dtAssertFailGetCustomv() - %59 = add nsw i32 %57, %53 + %59 = icmp ne ptr %58, null + %60 = add nsw i32 %57, %53 + %.not.i = icmp sgt i32 %60, %34 + %or.cond48.i = select i1 %59, i1 %.not.i, i1 false + br i1 %or.cond48.i, label %61, label %62 + +61: ; preds = %52 + call void %58(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 103) + br label %62 + +62: ; preds = %61, %52 %.not47.i = icmp eq i32 %57, 0 - br i1 %.not47.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit, label %60 - -60: ; preds = %52 - %61 = sext i32 %53 to i64 - %62 = getelementptr inbounds i32, ptr %31, i64 %61 - %63 = zext nneg i32 %54 to i64 - %64 = getelementptr inbounds nuw i32, ptr %6, i64 %63 - %65 = sext i32 %57 to i64 - %66 = shl nsw i64 %65, 2 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %62, ptr nonnull readonly align 4 %64, i64 %66, i1 false) + br i1 %.not47.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit, label %63 + +63: ; preds = %62 + %64 = sext i32 %53 to i64 + %65 = getelementptr inbounds i32, ptr %31, i64 %64 + %66 = zext nneg i32 %54 to i64 + %67 = getelementptr inbounds nuw i32, ptr %6, i64 %66 + %68 = sext i32 %57 to i64 + %69 = shl nsw i64 %68, 2 + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %65, ptr nonnull readonly align 4 %67, i64 %69, i1 false) br label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit -_Z23dtMergeCorridorEndMovedPjiiPKji.exit: ; preds = %30, %._crit_edge58.i, %52, %60 - %.0.i = phi i32 [ %32, %._crit_edge58.i ], [ %59, %60 ], [ %59, %52 ], [ %32, %30 ] +_Z23dtMergeCorridorEndMovedPjiiPKji.exit: ; preds = %30, %._crit_edge58.i, %62, %63 + %.0.i = phi i32 [ %32, %._crit_edge58.i ], [ %60, %63 ], [ %60, %62 ], [ %32, %30 ] store i32 %.0.i, ptr %16, align 8 - %67 = load float, ptr %5, align 4 - store float %67, ptr %26, align 4 - %68 = getelementptr inbounds nuw i8, ptr %5, i64 4 - %69 = load float, ptr %68, align 4 - %70 = getelementptr inbounds nuw i8, ptr %0, i64 16 - store float %69, ptr %70, align 8 - %71 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %70 = load float, ptr %5, align 4 + store float %70, ptr %26, align 4 + %71 = getelementptr inbounds nuw i8, ptr %5, i64 4 %72 = load float, ptr %71, align 4 - %73 = getelementptr inbounds nuw i8, ptr %0, i64 20 - store float %72, ptr %73, align 4 - br label %74 + %73 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store float %72, ptr %73, align 8 + %74 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %75 = load float, ptr %74, align 4 + %76 = getelementptr inbounds nuw i8, ptr %0, i64 20 + store float %75, ptr %76, align 4 + br label %77 -74: ; preds = %19, %_Z23dtMergeCorridorEndMovedPjiiPKji.exit +77: ; preds = %19, %_Z23dtMergeCorridorEndMovedPjiiPKji.exit ret i1 %29 } diff --git a/bench/spike/optimized/vfwadd_vf.ll b/bench/spike/optimized/vfwadd_vf.ll index 2a376c63e69..47a299295dc 100644 --- a/bench/spike/optimized/vfwadd_vf.ll +++ b/bench/spike/optimized/vfwadd_vf.ll @@ -308,7 +308,8 @@ define noundef range(i64 -2147483648, 2147483648) i64 @_Z20fast_rv32i_vfwadd_vfP 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -1062,7 +1063,8 @@ define noundef i64 @_Z20fast_rv64i_vfwadd_vfP11processor_t6insn_tm(ptr noundef % 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -1682,7 +1684,8 @@ define noundef range(i64 -2147483648, 2147483648) i64 @_Z22logged_rv32i_vfwadd_v 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -2304,7 +2307,8 @@ define noundef i64 @_Z22logged_rv64i_vfwadd_vfP11processor_t6insn_tm(ptr noundef 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -2924,7 +2928,8 @@ define noundef range(i64 -2147483648, 2147483648) i64 @_Z20fast_rv32e_vfwadd_vfP 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -3546,7 +3551,8 @@ define noundef i64 @_Z20fast_rv64e_vfwadd_vfP11processor_t6insn_tm(ptr noundef % 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -4166,7 +4172,8 @@ define noundef range(i64 -2147483648, 2147483648) i64 @_Z22logged_rv32e_vfwadd_v 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -4788,7 +4795,8 @@ define noundef i64 @_Z22logged_rv64e_vfwadd_vfP11processor_t6insn_tm(ptr noundef 128: ; preds = %124 %129 = add nsw i32 %111, %109 %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %110, i32 %129) - %130 = sub nsw i32 %.sroa.speculated.i15.i, %69 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %111, i32 %69) + %130 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %131 = icmp slt i32 %130, %126 br i1 %131, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -5482,6 +5490,9 @@ declare i32 @llvm.umax.i32(i32, i32) #16 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.smax.i32(i32, i32) #16 +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smin.i32(i32, i32) #16 + ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) declare i32 @llvm.umin.i32(i32, i32) #16 diff --git a/bench/spike/optimized/vloxei16_v.ll b/bench/spike/optimized/vloxei16_v.ll index 9328b1c3e56..4782dc832d3 100644 --- a/bench/spike/optimized/vloxei16_v.ll +++ b/bench/spike/optimized/vloxei16_v.ll @@ -403,7 +403,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us321: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -1276,7 +1277,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us321: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -2025,7 +2027,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us321: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -2776,7 +2779,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us321: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -3525,7 +3529,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us325: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -4292,7 +4297,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us325: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -5057,7 +5063,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us325: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread @@ -5824,7 +5831,8 @@ _ZL19is_overlapped_wideniiii.exit.thread.us325: ; preds = %.preheader.split.sp 159: ; preds = %.preheader.split.split.split %.sroa.speculated.i15.i = call i32 @llvm.smax.i32(i32 %147, i32 %106) - %160 = sub nsw i32 %.sroa.speculated.i15.i, %146 + %.sroa.speculated13.i16.i = call i32 @llvm.smin.i32(i32 %105, i32 %146) + %160 = sub nsw i32 %.sroa.speculated.i15.i, %.sroa.speculated13.i16.i %161 = icmp slt i32 %160, %.pre32.i br i1 %161, label %_ZL19is_overlapped_wideniiii.exit, label %_ZL19is_overlapped_wideniiii.exit.thread diff --git a/bench/sundials/optimized/arkode_interp.ll b/bench/sundials/optimized/arkode_interp.ll index 5e61fd72173..17778e5243b 100644 --- a/bench/sundials/optimized/arkode_interp.ll +++ b/bench/sundials/optimized/arkode_interp.ll @@ -1994,7 +1994,7 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 19: ; preds = %6 tail call void (ptr, i32, i32, ptr, ptr, ptr, ...) @arkProcessError(ptr noundef %0, i32 noundef -22, i32 noundef 1209, ptr noundef nonnull @__func__.arkInterpEvaluate_Lagrange, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.6) #14 - br label %170 + br label %166 20: ; preds = %6 %21 = icmp sgt i32 %3, %18 @@ -2002,7 +2002,7 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 22: ; preds = %20 tail call void @N_VConst(double noundef 0.000000e+00, ptr noundef %5) #14 - br label %170 + br label %166 23: ; preds = %20 %24 = icmp eq i32 %18, 0 @@ -2011,7 +2011,7 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 25: ; preds = %23 %26 = load ptr, ptr %15, align 8, !tbaa !48 tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %26, ptr noundef %5) #14 - br label %170 + br label %166 27: ; preds = %23 %28 = load double, ptr %13, align 8, !tbaa !47 @@ -2033,168 +2033,154 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 34: ; preds = %27 %35 = icmp eq i32 %3, 0 - %36 = icmp sgt i32 %11, 0 - br i1 %35, label %37, label %57 - -37: ; preds = %34 - br i1 %36, label %.lr.ph.i, label %LBasis.exit93 - -.lr.ph.i: ; preds = %37 %wide.trip.count.i = zext nneg i32 %11 to i64 - br label %38 + br i1 %35, label %.lr.ph.i, label %.lr.ph36.split.us.i -38: ; preds = %47, %.lr.ph.i - %indvars.iv.i = phi i64 [ 0, %.lr.ph.i ], [ %indvars.iv.next.i, %47 ] - %.016.i = phi double [ 1.000000e+00, %.lr.ph.i ], [ %.1.i, %47 ] - %39 = icmp eq i64 %indvars.iv.i, 0 - br i1 %39, label %47, label %40 +.lr.ph.i: ; preds = %34, %44 + %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %44 ], [ 0, %34 ] + %.016.i = phi double [ %.1.i, %44 ], [ 1.000000e+00, %34 ] + %36 = icmp eq i64 %indvars.iv.i, 0 + br i1 %36, label %44, label %37 -40: ; preds = %38 - %41 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i - %42 = load double, ptr %41, align 8, !tbaa !47 - %43 = fsub double %32, %42 - %44 = fsub double %28, %42 - %45 = fdiv double %43, %44 - %46 = fmul double %.016.i, %45 - br label %47 - -47: ; preds = %40, %38 - %.1.i = phi double [ %.016.i, %38 ], [ %46, %40 ] +37: ; preds = %.lr.ph.i + %38 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i + %39 = load double, ptr %38, align 8, !tbaa !47 + %40 = fsub double %32, %39 + %41 = fsub double %28, %39 + %42 = fdiv double %40, %41 + %43 = fmul double %.016.i, %42 + br label %44 + +44: ; preds = %37, %.lr.ph.i + %.1.i = phi double [ %.016.i, %.lr.ph.i ], [ %43, %37 ] %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i - br i1 %exitcond.not.i, label %LBasis.exit, label %38 - -LBasis.exit: ; preds = %47, %56 - %indvars.iv.i88 = phi i64 [ %indvars.iv.next.i91, %56 ], [ 0, %47 ] - %.016.i89 = phi double [ %.1.i90, %56 ], [ 1.000000e+00, %47 ] - %48 = icmp eq i64 %indvars.iv.i88, 1 - br i1 %48, label %56, label %49 - -49: ; preds = %LBasis.exit - %50 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i88 - %51 = load double, ptr %50, align 8, !tbaa !47 - %52 = fsub double %32, %51 - %53 = fsub double %30, %51 - %54 = fdiv double %52, %53 - %55 = fmul double %.016.i89, %54 - br label %56 - -56: ; preds = %49, %LBasis.exit - %.1.i90 = phi double [ %.016.i89, %LBasis.exit ], [ %55, %49 ] + br i1 %exitcond.not.i, label %LBasis.exit, label %.lr.ph.i + +LBasis.exit: ; preds = %44, %53 + %indvars.iv.i88 = phi i64 [ %indvars.iv.next.i91, %53 ], [ 0, %44 ] + %.016.i89 = phi double [ %.1.i90, %53 ], [ 1.000000e+00, %44 ] + %45 = icmp eq i64 %indvars.iv.i88, 1 + br i1 %45, label %53, label %46 + +46: ; preds = %LBasis.exit + %47 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i88 + %48 = load double, ptr %47, align 8, !tbaa !47 + %49 = fsub double %32, %48 + %50 = fsub double %30, %48 + %51 = fdiv double %49, %50 + %52 = fmul double %.016.i89, %51 + br label %53 + +53: ; preds = %46, %LBasis.exit + %.1.i90 = phi double [ %.016.i89, %LBasis.exit ], [ %52, %46 ] %indvars.iv.next.i91 = add nuw nsw i64 %indvars.iv.i88, 1 %exitcond.not.i92 = icmp eq i64 %indvars.iv.next.i91, %wide.trip.count.i br i1 %exitcond.not.i92, label %LBasis.exit93, label %LBasis.exit -57: ; preds = %34 - br i1 %36, label %.lr.ph36.split.us.preheader.i, label %LBasis.exit93 - -.lr.ph36.split.us.preheader.i: ; preds = %57 - %wide.trip.count44.i = zext nneg i32 %11 to i64 - br label %.lr.ph36.split.us.i - -.lr.ph36.split.us.i: ; preds = %69, %.lr.ph36.split.us.preheader.i - %indvars.iv41.i = phi i64 [ 0, %.lr.ph36.split.us.preheader.i ], [ %indvars.iv.next42.i, %69 ] - %.02634.us.i = phi double [ 0.000000e+00, %.lr.ph36.split.us.preheader.i ], [ %.127.us.i, %69 ] - %58 = icmp eq i64 %indvars.iv41.i, 0 - br i1 %58, label %69, label %.preheader.us.i - -.preheader.us.i: ; preds = %.lr.ph36.split.us.i, %68 - %indvars.iv.i94 = phi i64 [ %indvars.iv.next.i95, %68 ], [ 0, %.lr.ph36.split.us.i ] - %.032.us.i = phi double [ %.1.us.i, %68 ], [ 1.000000e+00, %.lr.ph36.split.us.i ] - %59 = icmp eq i64 %indvars.iv.i94, 0 - %60 = icmp eq i64 %indvars.iv.i94, %indvars.iv41.i - %or.cond.us.i = or i1 %59, %60 - br i1 %or.cond.us.i, label %68, label %61 - -61: ; preds = %.preheader.us.i - %62 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i94 - %63 = load double, ptr %62, align 8, !tbaa !47 - %64 = fsub double %32, %63 - %65 = fsub double %28, %63 - %66 = fdiv double %64, %65 - %67 = fmul double %.032.us.i, %66 - br label %68 - -68: ; preds = %61, %.preheader.us.i - %.1.us.i = phi double [ %.032.us.i, %.preheader.us.i ], [ %67, %61 ] +.lr.ph36.split.us.i: ; preds = %34, %65 + %indvars.iv41.i = phi i64 [ %indvars.iv.next42.i, %65 ], [ 0, %34 ] + %.02634.us.i = phi double [ %.127.us.i, %65 ], [ 0.000000e+00, %34 ] + %54 = icmp eq i64 %indvars.iv41.i, 0 + br i1 %54, label %65, label %.preheader.us.i + +.preheader.us.i: ; preds = %.lr.ph36.split.us.i, %64 + %indvars.iv.i94 = phi i64 [ %indvars.iv.next.i95, %64 ], [ 0, %.lr.ph36.split.us.i ] + %.032.us.i = phi double [ %.1.us.i, %64 ], [ 1.000000e+00, %.lr.ph36.split.us.i ] + %55 = icmp eq i64 %indvars.iv.i94, 0 + %56 = icmp eq i64 %indvars.iv.i94, %indvars.iv41.i + %or.cond.us.i = or i1 %55, %56 + br i1 %or.cond.us.i, label %64, label %57 + +57: ; preds = %.preheader.us.i + %58 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i94 + %59 = load double, ptr %58, align 8, !tbaa !47 + %60 = fsub double %32, %59 + %61 = fsub double %28, %59 + %62 = fdiv double %60, %61 + %63 = fmul double %.032.us.i, %62 + br label %64 + +64: ; preds = %57, %.preheader.us.i + %.1.us.i = phi double [ %.032.us.i, %.preheader.us.i ], [ %63, %57 ] %indvars.iv.next.i95 = add nuw nsw i64 %indvars.iv.i94, 1 - %exitcond.not.i96 = icmp eq i64 %indvars.iv.next.i95, %wide.trip.count44.i + %exitcond.not.i96 = icmp eq i64 %indvars.iv.next.i95, %wide.trip.count.i br i1 %exitcond.not.i96, label %._crit_edge.us.i, label %.preheader.us.i -69: ; preds = %._crit_edge.us.i, %.lr.ph36.split.us.i - %.127.us.i = phi double [ %.02634.us.i, %.lr.ph36.split.us.i ], [ %74, %._crit_edge.us.i ] +65: ; preds = %._crit_edge.us.i, %.lr.ph36.split.us.i + %.127.us.i = phi double [ %.02634.us.i, %.lr.ph36.split.us.i ], [ %70, %._crit_edge.us.i ] %indvars.iv.next42.i = add nuw nsw i64 %indvars.iv41.i, 1 - %exitcond45.not.i = icmp eq i64 %indvars.iv.next42.i, %wide.trip.count44.i + %exitcond45.not.i = icmp eq i64 %indvars.iv.next42.i, %wide.trip.count.i br i1 %exitcond45.not.i, label %.lr.ph36.split.us.i100, label %.lr.ph36.split.us.i -._crit_edge.us.i: ; preds = %68 - %70 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i - %71 = load double, ptr %70, align 8, !tbaa !47 - %72 = fsub double %28, %71 - %73 = fdiv double %.1.us.i, %72 - %74 = fadd double %.02634.us.i, %73 - br label %69 - -.lr.ph36.split.us.i100: ; preds = %69, %86 - %indvars.iv41.i101 = phi i64 [ %indvars.iv.next42.i112, %86 ], [ 0, %69 ] - %.02634.us.i102 = phi double [ %.127.us.i111, %86 ], [ 0.000000e+00, %69 ] - %75 = icmp eq i64 %indvars.iv41.i101, 1 - br i1 %75, label %86, label %.preheader.us.i103 - -.preheader.us.i103: ; preds = %.lr.ph36.split.us.i100, %85 - %indvars.iv.i104 = phi i64 [ %indvars.iv.next.i108, %85 ], [ 0, %.lr.ph36.split.us.i100 ] - %.032.us.i105 = phi double [ %.1.us.i107, %85 ], [ 1.000000e+00, %.lr.ph36.split.us.i100 ] - %76 = icmp eq i64 %indvars.iv.i104, 1 - %77 = icmp eq i64 %indvars.iv.i104, %indvars.iv41.i101 - %or.cond.us.i106 = or i1 %76, %77 - br i1 %or.cond.us.i106, label %85, label %78 - -78: ; preds = %.preheader.us.i103 - %79 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i104 - %80 = load double, ptr %79, align 8, !tbaa !47 - %81 = fsub double %32, %80 - %82 = fsub double %30, %80 - %83 = fdiv double %81, %82 - %84 = fmul double %.032.us.i105, %83 - br label %85 - -85: ; preds = %78, %.preheader.us.i103 - %.1.us.i107 = phi double [ %.032.us.i105, %.preheader.us.i103 ], [ %84, %78 ] +._crit_edge.us.i: ; preds = %64 + %66 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i + %67 = load double, ptr %66, align 8, !tbaa !47 + %68 = fsub double %28, %67 + %69 = fdiv double %.1.us.i, %68 + %70 = fadd double %.02634.us.i, %69 + br label %65 + +.lr.ph36.split.us.i100: ; preds = %65, %82 + %indvars.iv41.i101 = phi i64 [ %indvars.iv.next42.i112, %82 ], [ 0, %65 ] + %.02634.us.i102 = phi double [ %.127.us.i111, %82 ], [ 0.000000e+00, %65 ] + %71 = icmp eq i64 %indvars.iv41.i101, 1 + br i1 %71, label %82, label %.preheader.us.i103 + +.preheader.us.i103: ; preds = %.lr.ph36.split.us.i100, %81 + %indvars.iv.i104 = phi i64 [ %indvars.iv.next.i108, %81 ], [ 0, %.lr.ph36.split.us.i100 ] + %.032.us.i105 = phi double [ %.1.us.i107, %81 ], [ 1.000000e+00, %.lr.ph36.split.us.i100 ] + %72 = icmp eq i64 %indvars.iv.i104, 1 + %73 = icmp eq i64 %indvars.iv.i104, %indvars.iv41.i101 + %or.cond.us.i106 = or i1 %72, %73 + br i1 %or.cond.us.i106, label %81, label %74 + +74: ; preds = %.preheader.us.i103 + %75 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i104 + %76 = load double, ptr %75, align 8, !tbaa !47 + %77 = fsub double %32, %76 + %78 = fsub double %30, %76 + %79 = fdiv double %77, %78 + %80 = fmul double %.032.us.i105, %79 + br label %81 + +81: ; preds = %74, %.preheader.us.i103 + %.1.us.i107 = phi double [ %.032.us.i105, %.preheader.us.i103 ], [ %80, %74 ] %indvars.iv.next.i108 = add nuw nsw i64 %indvars.iv.i104, 1 - %exitcond.not.i109 = icmp eq i64 %indvars.iv.next.i108, %wide.trip.count44.i + %exitcond.not.i109 = icmp eq i64 %indvars.iv.next.i108, %wide.trip.count.i br i1 %exitcond.not.i109, label %._crit_edge.us.i110, label %.preheader.us.i103 -86: ; preds = %._crit_edge.us.i110, %.lr.ph36.split.us.i100 - %.127.us.i111 = phi double [ %.02634.us.i102, %.lr.ph36.split.us.i100 ], [ %91, %._crit_edge.us.i110 ] +82: ; preds = %._crit_edge.us.i110, %.lr.ph36.split.us.i100 + %.127.us.i111 = phi double [ %.02634.us.i102, %.lr.ph36.split.us.i100 ], [ %87, %._crit_edge.us.i110 ] %indvars.iv.next42.i112 = add nuw nsw i64 %indvars.iv41.i101, 1 - %exitcond45.not.i113 = icmp eq i64 %indvars.iv.next42.i112, %wide.trip.count44.i + %exitcond45.not.i113 = icmp eq i64 %indvars.iv.next42.i112, %wide.trip.count.i br i1 %exitcond45.not.i113, label %LBasis.exit93, label %.lr.ph36.split.us.i100 -._crit_edge.us.i110: ; preds = %85 - %87 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i101 - %88 = load double, ptr %87, align 8, !tbaa !47 - %89 = fsub double %30, %88 - %90 = fdiv double %.1.us.i107, %89 - %91 = fadd double %.02634.us.i102, %90 - br label %86 - -LBasis.exit93: ; preds = %86, %56, %57, %37 - %92 = phi double [ 1.000000e+00, %37 ], [ 0.000000e+00, %57 ], [ %.1.i90, %56 ], [ %.127.us.i111, %86 ] - %93 = phi double [ 1.000000e+00, %37 ], [ 0.000000e+00, %57 ], [ %.1.i, %56 ], [ %.127.us.i, %86 ] - %94 = load ptr, ptr %15, align 8, !tbaa !48 - %95 = getelementptr inbounds nuw i8, ptr %15, i64 8 - %96 = load ptr, ptr %95, align 8, !tbaa !48 - tail call void @N_VLinearSum(double noundef %93, ptr noundef %94, double noundef %92, ptr noundef %96, ptr noundef %5) #14 - br label %170 +._crit_edge.us.i110: ; preds = %81 + %83 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i101 + %84 = load double, ptr %83, align 8, !tbaa !47 + %85 = fsub double %30, %84 + %86 = fdiv double %.1.us.i107, %85 + %87 = fadd double %.02634.us.i102, %86 + br label %82 + +LBasis.exit93: ; preds = %82, %53 + %88 = phi double [ %.1.i90, %53 ], [ %.127.us.i111, %82 ] + %89 = phi double [ %.1.i, %53 ], [ %.127.us.i, %82 ] + %90 = load ptr, ptr %15, align 8, !tbaa !48 + %91 = getelementptr inbounds nuw i8, ptr %15, i64 8 + %92 = load ptr, ptr %91, align 8, !tbaa !48 + tail call void @N_VLinearSum(double noundef %89, ptr noundef %90, double noundef %88, ptr noundef %92, ptr noundef %5) #14 + br label %166 .lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ] - %97 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv - store double 0.000000e+00, ptr %97, align 8, !tbaa !47 - %98 = getelementptr inbounds nuw ptr, ptr %15, i64 %indvars.iv - %99 = load ptr, ptr %98, align 8, !tbaa !48 - %100 = getelementptr inbounds nuw [6 x ptr], ptr %8, i64 0, i64 %indvars.iv - store ptr %99, ptr %100, align 8, !tbaa !48 + %93 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv + store double 0.000000e+00, ptr %93, align 8, !tbaa !47 + %94 = getelementptr inbounds nuw ptr, ptr %15, i64 %indvars.iv + %95 = load ptr, ptr %94, align 8, !tbaa !48 + %96 = getelementptr inbounds nuw [6 x ptr], ptr %8, i64 0, i64 %indvars.iv + store ptr %95, ptr %96, align 8, !tbaa !48 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count br i1 %exitcond.not, label %._crit_edge, label %.lr.ph @@ -2211,226 +2197,226 @@ LBasis.exit93: ; preds = %86, %56, %57, %37 br i1 %.not154, label %.loopexit, label %.lr.ph158.preheader .lr.ph158.preheader: ; preds = %.preheader151 - %wide.trip.count178 = zext i32 %.pre to i64 + %wide.trip.count172 = zext i32 %.pre to i64 br label %.lr.ph158 .preheader149: ; preds = %._crit_edge - br i1 %.not154, label %.loopexit, label %.lr.ph.split.us.preheader.i.us.preheader + br i1 %.not154, label %.loopexit, label %.lr.ph.split.us.preheader.i.lr.ph -.lr.ph.split.us.preheader.i.us.preheader: ; preds = %.preheader149 +.lr.ph.split.us.preheader.i.lr.ph: ; preds = %.preheader149 %wide.trip.count72.i = zext nneg i32 %11 to i64 - %wide.trip.count183 = zext i32 %.pre to i64 - br label %.lr.ph.split.us.preheader.i.us - -.lr.ph.split.us.preheader.i.us: ; preds = %.lr.ph.split.us.preheader.i.us.preheader, %LBasisD2.exit.loopexit.us - %indvars.iv180 = phi i64 [ 0, %.lr.ph.split.us.preheader.i.us.preheader ], [ %indvars.iv.next181, %LBasisD2.exit.loopexit.us ] - %101 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv180 - br label %.lr.ph.split.us.i.us - -.lr.ph.split.us.i.us: ; preds = %130, %.lr.ph.split.us.preheader.i.us - %indvars.iv69.i.us = phi i64 [ 0, %.lr.ph.split.us.preheader.i.us ], [ %indvars.iv.next70.i.us, %130 ] - %.04360.us.i.us = phi double [ 0.000000e+00, %.lr.ph.split.us.preheader.i.us ], [ %.144.us.i.us, %130 ] - %102 = icmp eq i64 %indvars.iv69.i.us, %indvars.iv180 - br i1 %102, label %130, label %.preheader51.us.i.us - -.preheader51.us.i.us: ; preds = %.lr.ph.split.us.i.us, %123 - %indvars.iv64.i.us = phi i64 [ %indvars.iv.next65.i.us, %123 ], [ 0, %.lr.ph.split.us.i.us ] - %.04155.us.us.i.us = phi double [ %.142.us.us.i.us, %123 ], [ 0.000000e+00, %.lr.ph.split.us.i.us ] - %103 = icmp eq i64 %indvars.iv64.i.us, %indvars.iv180 - %104 = icmp eq i64 %indvars.iv64.i.us, %indvars.iv69.i.us - %or.cond.us.us.i.us = or i1 %103, %104 - br i1 %or.cond.us.us.i.us, label %123, label %.preheader.us.us.i.us - -.preheader.us.us.i.us: ; preds = %.preheader51.us.i.us, %116 - %indvars.iv.i142.us = phi i64 [ %indvars.iv.next.i143.us, %116 ], [ 0, %.preheader51.us.i.us ] - %.053.us.us.i.us = phi double [ %.1.us.us.i.us, %116 ], [ 1.000000e+00, %.preheader51.us.i.us ] - %105 = icmp eq i64 %indvars.iv.i142.us, %indvars.iv180 - %106 = icmp eq i64 %indvars.iv.i142.us, %indvars.iv64.i.us - %or.cond49.us.us.i.us = or i1 %105, %106 - %107 = icmp eq i64 %indvars.iv.i142.us, %indvars.iv69.i.us - %or.cond50.us.us.i.us = or i1 %107, %or.cond49.us.us.i.us - br i1 %or.cond50.us.us.i.us, label %116, label %108 - -108: ; preds = %.preheader.us.us.i.us - %109 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i142.us - %110 = load double, ptr %109, align 8, !tbaa !47 - %111 = fsub double %32, %110 - %112 = load double, ptr %101, align 8, !tbaa !47 - %113 = fsub double %112, %110 - %114 = fdiv double %111, %113 - %115 = fmul double %.053.us.us.i.us, %114 - br label %116 - -116: ; preds = %108, %.preheader.us.us.i.us - %.1.us.us.i.us = phi double [ %.053.us.us.i.us, %.preheader.us.us.i.us ], [ %115, %108 ] - %indvars.iv.next.i143.us = add nuw nsw i64 %indvars.iv.i142.us, 1 - %exitcond.not.i144.us = icmp eq i64 %indvars.iv.next.i143.us, %wide.trip.count72.i - br i1 %exitcond.not.i144.us, label %._crit_edge.us.us.i.us, label %.preheader.us.us.i.us - -._crit_edge.us.us.i.us: ; preds = %116 - %117 = load double, ptr %101, align 8, !tbaa !47 - %118 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv64.i.us - %119 = load double, ptr %118, align 8, !tbaa !47 - %120 = fsub double %117, %119 - %121 = fdiv double %.1.us.us.i.us, %120 - %122 = fadd double %.04155.us.us.i.us, %121 - br label %123 - -123: ; preds = %._crit_edge.us.us.i.us, %.preheader51.us.i.us - %.142.us.us.i.us = phi double [ %.04155.us.us.i.us, %.preheader51.us.i.us ], [ %122, %._crit_edge.us.us.i.us ] - %indvars.iv.next65.i.us = add nuw nsw i64 %indvars.iv64.i.us, 1 - %exitcond68.not.i.us = icmp eq i64 %indvars.iv.next65.i.us, %wide.trip.count72.i - br i1 %exitcond68.not.i.us, label %._crit_edge57.split.us.us.i.us, label %.preheader51.us.i.us - -._crit_edge57.split.us.us.i.us: ; preds = %123 - %124 = load double, ptr %101, align 8, !tbaa !47 - %125 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv69.i.us - %126 = load double, ptr %125, align 8, !tbaa !47 - %127 = fsub double %124, %126 - %128 = fdiv double %.142.us.us.i.us, %127 - %129 = fadd double %.04360.us.i.us, %128 - br label %130 - -130: ; preds = %._crit_edge57.split.us.us.i.us, %.lr.ph.split.us.i.us - %.144.us.i.us = phi double [ %.04360.us.i.us, %.lr.ph.split.us.i.us ], [ %129, %._crit_edge57.split.us.us.i.us ] - %indvars.iv.next70.i.us = add nuw nsw i64 %indvars.iv69.i.us, 1 - %exitcond73.not.i.us = icmp eq i64 %indvars.iv.next70.i.us, %wide.trip.count72.i - br i1 %exitcond73.not.i.us, label %LBasisD2.exit.loopexit.us, label %.lr.ph.split.us.i.us - -LBasisD2.exit.loopexit.us: ; preds = %130 - %131 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv180 - store double %.144.us.i.us, ptr %131, align 8, !tbaa !47 - %indvars.iv.next181 = add nuw nsw i64 %indvars.iv180, 1 - %exitcond184.not = icmp eq i64 %indvars.iv.next181, %wide.trip.count183 - br i1 %exitcond184.not, label %.loopexit, label %.lr.ph.split.us.preheader.i.us + %wide.trip.count177 = zext i32 %.pre to i64 + br label %.lr.ph.split.us.preheader.i .preheader147: ; preds = %._crit_edge - br i1 %.not154, label %.loopexit, label %.lr.ph36.split.us.preheader.i125.us.preheader + br i1 %.not154, label %.loopexit, label %.lr.ph36.split.us.preheader.i125.lr.ph -.lr.ph36.split.us.preheader.i125.us.preheader: ; preds = %.preheader147 +.lr.ph36.split.us.preheader.i125.lr.ph: ; preds = %.preheader147 %wide.trip.count44.i126 = zext nneg i32 %11 to i64 - %wide.trip.count188 = zext i32 %.pre to i64 - br label %.lr.ph36.split.us.preheader.i125.us - -.lr.ph36.split.us.preheader.i125.us: ; preds = %.lr.ph36.split.us.preheader.i125.us.preheader, %LBasisD.exit141.loopexit.us - %indvars.iv185 = phi i64 [ 0, %.lr.ph36.split.us.preheader.i125.us.preheader ], [ %indvars.iv.next186, %LBasisD.exit141.loopexit.us ] - %132 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv185 - br label %.lr.ph36.split.us.i127.us - -.lr.ph36.split.us.i127.us: ; preds = %151, %.lr.ph36.split.us.preheader.i125.us - %indvars.iv41.i128.us = phi i64 [ 0, %.lr.ph36.split.us.preheader.i125.us ], [ %indvars.iv.next42.i139.us, %151 ] - %.02634.us.i129.us = phi double [ 0.000000e+00, %.lr.ph36.split.us.preheader.i125.us ], [ %.127.us.i138.us, %151 ] - %133 = icmp eq i64 %indvars.iv41.i128.us, %indvars.iv185 - br i1 %133, label %151, label %.preheader.us.i130.us - -.preheader.us.i130.us: ; preds = %.lr.ph36.split.us.i127.us, %144 - %indvars.iv.i131.us = phi i64 [ %indvars.iv.next.i135.us, %144 ], [ 0, %.lr.ph36.split.us.i127.us ] - %.032.us.i132.us = phi double [ %.1.us.i134.us, %144 ], [ 1.000000e+00, %.lr.ph36.split.us.i127.us ] - %134 = icmp eq i64 %indvars.iv.i131.us, %indvars.iv185 - %135 = icmp eq i64 %indvars.iv.i131.us, %indvars.iv41.i128.us - %or.cond.us.i133.us = or i1 %134, %135 - br i1 %or.cond.us.i133.us, label %144, label %136 - -136: ; preds = %.preheader.us.i130.us - %137 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i131.us - %138 = load double, ptr %137, align 8, !tbaa !47 - %139 = fsub double %32, %138 - %140 = load double, ptr %132, align 8, !tbaa !47 - %141 = fsub double %140, %138 - %142 = fdiv double %139, %141 - %143 = fmul double %.032.us.i132.us, %142 - br label %144 - -144: ; preds = %136, %.preheader.us.i130.us - %.1.us.i134.us = phi double [ %.032.us.i132.us, %.preheader.us.i130.us ], [ %143, %136 ] - %indvars.iv.next.i135.us = add nuw nsw i64 %indvars.iv.i131.us, 1 - %exitcond.not.i136.us = icmp eq i64 %indvars.iv.next.i135.us, %wide.trip.count44.i126 - br i1 %exitcond.not.i136.us, label %._crit_edge.us.i137.us, label %.preheader.us.i130.us - -._crit_edge.us.i137.us: ; preds = %144 - %145 = load double, ptr %132, align 8, !tbaa !47 - %146 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i128.us - %147 = load double, ptr %146, align 8, !tbaa !47 - %148 = fsub double %145, %147 - %149 = fdiv double %.1.us.i134.us, %148 - %150 = fadd double %.02634.us.i129.us, %149 - br label %151 - -151: ; preds = %._crit_edge.us.i137.us, %.lr.ph36.split.us.i127.us - %.127.us.i138.us = phi double [ %.02634.us.i129.us, %.lr.ph36.split.us.i127.us ], [ %150, %._crit_edge.us.i137.us ] - %indvars.iv.next42.i139.us = add nuw nsw i64 %indvars.iv41.i128.us, 1 - %exitcond45.not.i140.us = icmp eq i64 %indvars.iv.next42.i139.us, %wide.trip.count44.i126 - br i1 %exitcond45.not.i140.us, label %LBasisD.exit141.loopexit.us, label %.lr.ph36.split.us.i127.us - -LBasisD.exit141.loopexit.us: ; preds = %151 - %152 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv185 - store double %.127.us.i138.us, ptr %152, align 8, !tbaa !47 - %indvars.iv.next186 = add nuw nsw i64 %indvars.iv185, 1 - %exitcond189.not = icmp eq i64 %indvars.iv.next186, %wide.trip.count188 - br i1 %exitcond189.not, label %.loopexit, label %.lr.ph36.split.us.preheader.i125.us + %wide.trip.count182 = zext i32 %.pre to i64 + br label %.lr.ph36.split.us.preheader.i125 .preheader: ; preds = %._crit_edge - br i1 %.not154, label %.loopexit, label %.lr.ph.i116.us.preheader + br i1 %.not154, label %.loopexit, label %.lr.ph.i116.lr.ph -.lr.ph.i116.us.preheader: ; preds = %.preheader +.lr.ph.i116.lr.ph: ; preds = %.preheader %wide.trip.count.i117 = zext nneg i32 %11 to i64 - %wide.trip.count193 = zext i32 %.pre to i64 - br label %.lr.ph.i116.us - -.lr.ph.i116.us: ; preds = %.lr.ph.i116.us.preheader, %LBasis.exit123.loopexit.us - %indvars.iv190 = phi i64 [ 0, %.lr.ph.i116.us.preheader ], [ %indvars.iv.next191, %LBasis.exit123.loopexit.us ] - %153 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv190 - br label %154 - -154: ; preds = %164, %.lr.ph.i116.us - %indvars.iv.i118.us = phi i64 [ 0, %.lr.ph.i116.us ], [ %indvars.iv.next.i121.us, %164 ] - %.016.i119.us = phi double [ 1.000000e+00, %.lr.ph.i116.us ], [ %.1.i120.us, %164 ] - %155 = icmp eq i64 %indvars.iv.i118.us, %indvars.iv190 - br i1 %155, label %164, label %156 - -156: ; preds = %154 - %157 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i118.us - %158 = load double, ptr %157, align 8, !tbaa !47 - %159 = fsub double %32, %158 - %160 = load double, ptr %153, align 8, !tbaa !47 - %161 = fsub double %160, %158 - %162 = fdiv double %159, %161 - %163 = fmul double %.016.i119.us, %162 - br label %164 - -164: ; preds = %156, %154 - %.1.i120.us = phi double [ %.016.i119.us, %154 ], [ %163, %156 ] - %indvars.iv.next.i121.us = add nuw nsw i64 %indvars.iv.i118.us, 1 - %exitcond.not.i122.us = icmp eq i64 %indvars.iv.next.i121.us, %wide.trip.count.i117 - br i1 %exitcond.not.i122.us, label %LBasis.exit123.loopexit.us, label %154 - -LBasis.exit123.loopexit.us: ; preds = %164 - %165 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv190 - store double %.1.i120.us, ptr %165, align 8, !tbaa !47 - %indvars.iv.next191 = add nuw nsw i64 %indvars.iv190, 1 - %exitcond194.not = icmp eq i64 %indvars.iv.next191, %wide.trip.count193 - br i1 %exitcond194.not, label %.loopexit, label %.lr.ph.i116.us + %wide.trip.count187 = zext i32 %.pre to i64 + br label %.lr.ph.i116 + +.lr.ph.i116: ; preds = %.lr.ph.i116.lr.ph, %LBasis.exit123.loopexit + %indvars.iv184 = phi i64 [ 0, %.lr.ph.i116.lr.ph ], [ %indvars.iv.next185, %LBasis.exit123.loopexit ] + %97 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv184 + br label %98 + +98: ; preds = %108, %.lr.ph.i116 + %indvars.iv.i118 = phi i64 [ 0, %.lr.ph.i116 ], [ %indvars.iv.next.i121, %108 ] + %.016.i119 = phi double [ 1.000000e+00, %.lr.ph.i116 ], [ %.1.i120, %108 ] + %99 = icmp eq i64 %indvars.iv.i118, %indvars.iv184 + br i1 %99, label %108, label %100 + +100: ; preds = %98 + %101 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i118 + %102 = load double, ptr %101, align 8, !tbaa !47 + %103 = fsub double %32, %102 + %104 = load double, ptr %97, align 8, !tbaa !47 + %105 = fsub double %104, %102 + %106 = fdiv double %103, %105 + %107 = fmul double %.016.i119, %106 + br label %108 + +108: ; preds = %100, %98 + %.1.i120 = phi double [ %.016.i119, %98 ], [ %107, %100 ] + %indvars.iv.next.i121 = add nuw nsw i64 %indvars.iv.i118, 1 + %exitcond.not.i122 = icmp eq i64 %indvars.iv.next.i121, %wide.trip.count.i117 + br i1 %exitcond.not.i122, label %LBasis.exit123.loopexit, label %98 + +LBasis.exit123.loopexit: ; preds = %108 + %109 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv184 + store double %.1.i120, ptr %109, align 8, !tbaa !47 + %indvars.iv.next185 = add nuw nsw i64 %indvars.iv184, 1 + %exitcond188.not = icmp eq i64 %indvars.iv.next185, %wide.trip.count187 + br i1 %exitcond188.not, label %.loopexit, label %.lr.ph.i116 + +.lr.ph36.split.us.preheader.i125: ; preds = %.lr.ph36.split.us.preheader.i125.lr.ph, %LBasisD.exit141.loopexit + %indvars.iv179 = phi i64 [ 0, %.lr.ph36.split.us.preheader.i125.lr.ph ], [ %indvars.iv.next180, %LBasisD.exit141.loopexit ] + %110 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv179 + br label %.lr.ph36.split.us.i127 + +.lr.ph36.split.us.i127: ; preds = %123, %.lr.ph36.split.us.preheader.i125 + %indvars.iv41.i128 = phi i64 [ 0, %.lr.ph36.split.us.preheader.i125 ], [ %indvars.iv.next42.i139, %123 ] + %.02634.us.i129 = phi double [ 0.000000e+00, %.lr.ph36.split.us.preheader.i125 ], [ %.127.us.i138, %123 ] + %111 = icmp eq i64 %indvars.iv41.i128, %indvars.iv179 + br i1 %111, label %123, label %.preheader.us.i130 + +.preheader.us.i130: ; preds = %.lr.ph36.split.us.i127, %122 + %indvars.iv.i131 = phi i64 [ %indvars.iv.next.i135, %122 ], [ 0, %.lr.ph36.split.us.i127 ] + %.032.us.i132 = phi double [ %.1.us.i134, %122 ], [ 1.000000e+00, %.lr.ph36.split.us.i127 ] + %112 = icmp eq i64 %indvars.iv.i131, %indvars.iv179 + %113 = icmp eq i64 %indvars.iv.i131, %indvars.iv41.i128 + %or.cond.us.i133 = or i1 %112, %113 + br i1 %or.cond.us.i133, label %122, label %114 + +114: ; preds = %.preheader.us.i130 + %115 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i131 + %116 = load double, ptr %115, align 8, !tbaa !47 + %117 = fsub double %32, %116 + %118 = load double, ptr %110, align 8, !tbaa !47 + %119 = fsub double %118, %116 + %120 = fdiv double %117, %119 + %121 = fmul double %.032.us.i132, %120 + br label %122 + +122: ; preds = %114, %.preheader.us.i130 + %.1.us.i134 = phi double [ %.032.us.i132, %.preheader.us.i130 ], [ %121, %114 ] + %indvars.iv.next.i135 = add nuw nsw i64 %indvars.iv.i131, 1 + %exitcond.not.i136 = icmp eq i64 %indvars.iv.next.i135, %wide.trip.count44.i126 + br i1 %exitcond.not.i136, label %._crit_edge.us.i137, label %.preheader.us.i130 + +123: ; preds = %._crit_edge.us.i137, %.lr.ph36.split.us.i127 + %.127.us.i138 = phi double [ %.02634.us.i129, %.lr.ph36.split.us.i127 ], [ %129, %._crit_edge.us.i137 ] + %indvars.iv.next42.i139 = add nuw nsw i64 %indvars.iv41.i128, 1 + %exitcond45.not.i140 = icmp eq i64 %indvars.iv.next42.i139, %wide.trip.count44.i126 + br i1 %exitcond45.not.i140, label %LBasisD.exit141.loopexit, label %.lr.ph36.split.us.i127 + +._crit_edge.us.i137: ; preds = %122 + %124 = load double, ptr %110, align 8, !tbaa !47 + %125 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i128 + %126 = load double, ptr %125, align 8, !tbaa !47 + %127 = fsub double %124, %126 + %128 = fdiv double %.1.us.i134, %127 + %129 = fadd double %.02634.us.i129, %128 + br label %123 + +LBasisD.exit141.loopexit: ; preds = %123 + %130 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv179 + store double %.127.us.i138, ptr %130, align 8, !tbaa !47 + %indvars.iv.next180 = add nuw nsw i64 %indvars.iv179, 1 + %exitcond183.not = icmp eq i64 %indvars.iv.next180, %wide.trip.count182 + br i1 %exitcond183.not, label %.loopexit, label %.lr.ph36.split.us.preheader.i125 + +.lr.ph.split.us.preheader.i: ; preds = %.lr.ph.split.us.preheader.i.lr.ph, %LBasisD2.exit.loopexit + %indvars.iv174 = phi i64 [ 0, %.lr.ph.split.us.preheader.i.lr.ph ], [ %indvars.iv.next175, %LBasisD2.exit.loopexit ] + %131 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv174 + br label %.lr.ph.split.us.i + +.lr.ph.split.us.i: ; preds = %133, %.lr.ph.split.us.preheader.i + %indvars.iv69.i = phi i64 [ 0, %.lr.ph.split.us.preheader.i ], [ %indvars.iv.next70.i, %133 ] + %.04360.us.i = phi double [ 0.000000e+00, %.lr.ph.split.us.preheader.i ], [ %.144.us.i, %133 ] + %132 = icmp eq i64 %indvars.iv69.i, %indvars.iv174 + br i1 %132, label %133, label %.preheader51.us.i + +133: ; preds = %._crit_edge57.split.us.us.i, %.lr.ph.split.us.i + %.144.us.i = phi double [ %.04360.us.i, %.lr.ph.split.us.i ], [ %160, %._crit_edge57.split.us.us.i ] + %indvars.iv.next70.i = add nuw nsw i64 %indvars.iv69.i, 1 + %exitcond73.not.i = icmp eq i64 %indvars.iv.next70.i, %wide.trip.count72.i + br i1 %exitcond73.not.i, label %LBasisD2.exit.loopexit, label %.lr.ph.split.us.i + +.preheader51.us.i: ; preds = %.lr.ph.split.us.i, %148 + %indvars.iv64.i = phi i64 [ %indvars.iv.next65.i, %148 ], [ 0, %.lr.ph.split.us.i ] + %.04155.us.us.i = phi double [ %.142.us.us.i, %148 ], [ 0.000000e+00, %.lr.ph.split.us.i ] + %134 = icmp eq i64 %indvars.iv64.i, %indvars.iv174 + %135 = icmp eq i64 %indvars.iv64.i, %indvars.iv69.i + %or.cond.us.us.i = or i1 %134, %135 + br i1 %or.cond.us.us.i, label %148, label %.preheader.us.us.i + +.preheader.us.us.i: ; preds = %.preheader51.us.i, %147 + %indvars.iv.i142 = phi i64 [ %indvars.iv.next.i143, %147 ], [ 0, %.preheader51.us.i ] + %.053.us.us.i = phi double [ %.1.us.us.i, %147 ], [ 1.000000e+00, %.preheader51.us.i ] + %136 = icmp eq i64 %indvars.iv.i142, %indvars.iv174 + %137 = icmp eq i64 %indvars.iv.i142, %indvars.iv64.i + %or.cond49.us.us.i = or i1 %136, %137 + %138 = icmp eq i64 %indvars.iv.i142, %indvars.iv69.i + %or.cond50.us.us.i = or i1 %138, %or.cond49.us.us.i + br i1 %or.cond50.us.us.i, label %147, label %139 + +139: ; preds = %.preheader.us.us.i + %140 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i142 + %141 = load double, ptr %140, align 8, !tbaa !47 + %142 = fsub double %32, %141 + %143 = load double, ptr %131, align 8, !tbaa !47 + %144 = fsub double %143, %141 + %145 = fdiv double %142, %144 + %146 = fmul double %.053.us.us.i, %145 + br label %147 + +147: ; preds = %139, %.preheader.us.us.i + %.1.us.us.i = phi double [ %.053.us.us.i, %.preheader.us.us.i ], [ %146, %139 ] + %indvars.iv.next.i143 = add nuw nsw i64 %indvars.iv.i142, 1 + %exitcond.not.i144 = icmp eq i64 %indvars.iv.next.i143, %wide.trip.count72.i + br i1 %exitcond.not.i144, label %._crit_edge.us.us.i, label %.preheader.us.us.i + +148: ; preds = %._crit_edge.us.us.i, %.preheader51.us.i + %.142.us.us.i = phi double [ %.04155.us.us.i, %.preheader51.us.i ], [ %154, %._crit_edge.us.us.i ] + %indvars.iv.next65.i = add nuw nsw i64 %indvars.iv64.i, 1 + %exitcond68.not.i = icmp eq i64 %indvars.iv.next65.i, %wide.trip.count72.i + br i1 %exitcond68.not.i, label %._crit_edge57.split.us.us.i, label %.preheader51.us.i + +._crit_edge.us.us.i: ; preds = %147 + %149 = load double, ptr %131, align 8, !tbaa !47 + %150 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv64.i + %151 = load double, ptr %150, align 8, !tbaa !47 + %152 = fsub double %149, %151 + %153 = fdiv double %.1.us.us.i, %152 + %154 = fadd double %.04155.us.us.i, %153 + br label %148 + +._crit_edge57.split.us.us.i: ; preds = %148 + %155 = load double, ptr %131, align 8, !tbaa !47 + %156 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv69.i + %157 = load double, ptr %156, align 8, !tbaa !47 + %158 = fsub double %155, %157 + %159 = fdiv double %.142.us.us.i, %158 + %160 = fadd double %.04360.us.i, %159 + br label %133 + +LBasisD2.exit.loopexit: ; preds = %133 + %161 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv174 + store double %.144.us.i, ptr %161, align 8, !tbaa !47 + %indvars.iv.next175 = add nuw nsw i64 %indvars.iv174, 1 + %exitcond178.not = icmp eq i64 %indvars.iv.next175, %wide.trip.count177 + br i1 %exitcond178.not, label %.loopexit, label %.lr.ph.split.us.preheader.i .lr.ph158: ; preds = %.lr.ph158.preheader, %.lr.ph158 - %indvars.iv175 = phi i64 [ 0, %.lr.ph158.preheader ], [ %indvars.iv.next176, %.lr.ph158 ] - %166 = trunc nuw nsw i64 %indvars.iv175 to i32 - %167 = tail call double @LBasisD3(ptr noundef nonnull %1, i32 noundef %166, double noundef %32) - %168 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv175 - store double %167, ptr %168, align 8, !tbaa !47 - %indvars.iv.next176 = add nuw nsw i64 %indvars.iv175, 1 - %exitcond179.not = icmp eq i64 %indvars.iv.next176, %wide.trip.count178 - br i1 %exitcond179.not, label %.loopexit, label %.lr.ph158 + %indvars.iv169 = phi i64 [ 0, %.lr.ph158.preheader ], [ %indvars.iv.next170, %.lr.ph158 ] + %162 = trunc nuw nsw i64 %indvars.iv169 to i32 + %163 = tail call double @LBasisD3(ptr noundef nonnull %1, i32 noundef %162, double noundef %32) + %164 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv169 + store double %163, ptr %164, align 8, !tbaa !47 + %indvars.iv.next170 = add nuw nsw i64 %indvars.iv169, 1 + %exitcond173.not = icmp eq i64 %indvars.iv.next170, %wide.trip.count172 + br i1 %exitcond173.not, label %.loopexit, label %.lr.ph158 default.unreachable: ; preds = %._crit_edge unreachable -.loopexit: ; preds = %.lr.ph158, %LBasisD2.exit.loopexit.us, %LBasisD.exit141.loopexit.us, %LBasis.exit123.loopexit.us, %.preheader151, %.preheader149, %.preheader147, %.preheader - %169 = call i32 @N_VLinearCombination(i32 noundef %.pre, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef %5) #14 - %.not84 = icmp eq i32 %169, 0 +.loopexit: ; preds = %.lr.ph158, %LBasisD2.exit.loopexit, %LBasisD.exit141.loopexit, %LBasis.exit123.loopexit, %.preheader151, %.preheader149, %.preheader147, %.preheader + %165 = call i32 @N_VLinearCombination(i32 noundef %.pre, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef %5) #14 + %.not84 = icmp eq i32 %165, 0 %. = select i1 %.not84, i32 0, i32 -28 - br label %170 + br label %166 -170: ; preds = %.loopexit, %LBasis.exit93, %25, %22, %19 +166: ; preds = %.loopexit, %LBasis.exit93, %25, %22, %19 %.0 = phi i32 [ -22, %19 ], [ 0, %22 ], [ 0, %25 ], [ 0, %LBasis.exit93 ], [ %., %.loopexit ] call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #14 call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #14 diff --git a/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll b/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll index a1ab2ba517c..7869a765aee 100644 --- a/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll +++ b/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll @@ -99262,7 +99262,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 45: ; preds = %2 store i32 2, ptr %0, align 8 - br label %389 + br label %392 46: ; preds = %.preheader, %"_ZN103_$LT$alloc..vec..into_iter..IntoIter$LT$T$C$A$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h31f2d44bc2f4046fE.exit" %47 = phi i64 [ %.pre, %.preheader ], [ 3, %"_ZN103_$LT$alloc..vec..into_iter..IntoIter$LT$T$C$A$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h31f2d44bc2f4046fE.exit" ] @@ -99483,7 +99483,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 124: ; preds = %70, %82 store i32 2, ptr %0, align 8 call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %25) - br label %389 + br label %392 125: ; preds = %119 %126 = getelementptr inbounds nuw i8, ptr %1, i64 1360 @@ -99526,7 +99526,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %140 = getelementptr inbounds nuw i8, ptr %1, i64 1992 %141 = load ptr, ptr %140, align 8, !noundef !4 %142 = icmp eq ptr %141, null - br i1 %142, label %262, label %261 + br i1 %142, label %265, label %264 143: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit" call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %24) @@ -99574,11 +99574,11 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ "_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit": ; preds = %152, %147, %156 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %126, ptr noundef nonnull align 8 dereferenceable(176) %24, i64 176, i1 false) call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %24) - %.pre214 = load i64, ptr %136, align 8 + %.pre213 = load i64, ptr %136, align 8 br label %159 159: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit", %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit" - %160 = phi i64 [ %137, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit" ], [ %.pre214, %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit" ] + %160 = phi i64 [ %137, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit" ], [ %.pre213, %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit" ] %161 = load ptr, ptr %135, align 8, !nonnull !4, !align !5, !noundef !4 %162 = call noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.548) %163 = icmp eq ptr %162, null @@ -99598,140 +99598,146 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %.sroa.0.0.sroa.speculated.i = call noundef i64 @llvm.umin.i64(i64 %160, i64 %170) %171 = sub i64 %.sroa.0129.0, %169 %.sroa.0.0.sroa.speculated.i141 = call noundef i64 @llvm.umin.i64(i64 %.sroa.0.0.sroa.speculated.i, i64 %171) - %172 = icmp ne i64 %.sroa.0.0.sroa.speculated.i141, 0 - %173 = icmp ult i64 %.sroa.0.0.sroa.speculated.i141, %160 - %or.cond211 = and i1 %172, %173 - br i1 %or.cond211, label %174, label %179 - -174: ; preds = %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" - %175 = getelementptr inbounds i8, ptr %161, i64 %.sroa.0.0.sroa.speculated.i141 - %176 = load i8, ptr %175, align 1, !alias.scope !28726, !noalias !28729, !noundef !4 - %177 = icmp sgt i8 %176, -65 - br i1 %177, label %179, label %178 - -"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146": ; preds = %366, %371, %370, %238, %236, %241, %157 - %.pn.pn = phi { ptr, i32 } [ %158, %157 ], [ %237, %241 ], [ %237, %236 ], [ %237, %238 ], [ %372, %370 ], [ %372, %371 ], [ %372, %366 ] + %172 = icmp eq i64 %.sroa.0.0.sroa.speculated.i141, 0 + br i1 %172, label %182, label %173 + +173: ; preds = %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" + %174 = icmp ult i64 %.sroa.0.0.sroa.speculated.i141, %160 + br i1 %174, label %175, label %179 + +175: ; preds = %173 + %176 = getelementptr inbounds i8, ptr %161, i64 %.sroa.0.0.sroa.speculated.i141 + %177 = load i8, ptr %176, align 1, !alias.scope !28726, !noalias !28729, !noundef !4 + %178 = icmp sgt i8 %177, -65 + br i1 %178, label %182, label %181 + +179: ; preds = %173 + %180 = icmp eq i64 %.sroa.0.0.sroa.speculated.i141, %160 + br i1 %180, label %182, label %181 + +"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146": ; preds = %369, %374, %373, %241, %239, %244, %157 + %.pn.pn = phi { ptr, i32 } [ %158, %157 ], [ %240, %244 ], [ %240, %239 ], [ %240, %241 ], [ %375, %373 ], [ %375, %374 ], [ %375, %369 ] resume { ptr, i32 } %.pn.pn -178: ; preds = %174 +181: ; preds = %179, %175 call void @_ZN4core3str16slice_error_fail17h402ef64b20c243efE(ptr noalias noundef nonnull readonly align 1 %161, i64 noundef %160, i64 noundef 0, i64 noundef %.sroa.0.0.sroa.speculated.i141, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.447) #56 unreachable -179: ; preds = %174, %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" - %180 = sub nuw i64 %160, %.sroa.0.0.sroa.speculated.i141 - %181 = getelementptr inbounds i8, ptr %161, i64 %.sroa.0.0.sroa.speculated.i141 - store ptr %181, ptr %135, align 8 - store i64 %180, ptr %136, align 8 - %182 = add i64 %.sroa.0.0.sroa.speculated.i141, %169 - store i64 %182, ptr %29, align 8 +182: ; preds = %179, %175, %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" + %183 = sub nuw i64 %160, %.sroa.0.0.sroa.speculated.i141 + %184 = getelementptr inbounds i8, ptr %161, i64 %.sroa.0.0.sroa.speculated.i141 + store ptr %184, ptr %135, align 8 + store i64 %183, ptr %136, align 8 + %185 = add i64 %.sroa.0.0.sroa.speculated.i141, %169 + store i64 %185, ptr %29, align 8 call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %22) call void @llvm.experimental.noalias.scope.decl(metadata !28731) - %183 = load i32, ptr %126, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 - %184 = getelementptr inbounds nuw i8, ptr %1, i64 1364 - %185 = load i32, ptr %184, align 4, !alias.scope !28731, !noalias !28734 + %186 = load i32, ptr %126, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 + %187 = getelementptr inbounds nuw i8, ptr %1, i64 1364 + %188 = load i32, ptr %187, align 4, !alias.scope !28731, !noalias !28734 call void @llvm.lifetime.start.p0(i64 108, ptr nonnull %.sroa.53.i) - %186 = getelementptr inbounds nuw i8, ptr %1, i64 1376 - %187 = load i32, ptr %186, align 8, !range !4664, !alias.scope !28731, !noalias !28734, !noundef !4 - %188 = icmp eq i32 %187, 2 - br i1 %188, label %190, label %189 + %189 = getelementptr inbounds nuw i8, ptr %1, i64 1376 + %190 = load i32, ptr %189, align 8, !range !4664, !alias.scope !28731, !noalias !28734, !noundef !4 + %191 = icmp eq i32 %190, 2 + br i1 %191, label %193, label %192 -189: ; preds = %179 +192: ; preds = %182 %.sroa.413.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %1, i64 1380 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(108) %.sroa.53.i, ptr noundef nonnull readonly align 4 dereferenceable(108) %.sroa.413.0..sroa_idx.i, i64 108, i1 false), !noalias !28734 - br label %190 + br label %193 -190: ; preds = %189, %179 - %191 = getelementptr inbounds nuw i8, ptr %1, i64 1368 - %192 = load i32, ptr %191, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 - %193 = getelementptr inbounds nuw i8, ptr %1, i64 1372 - %194 = load i32, ptr %193, align 4, !alias.scope !28731, !noalias !28734 - %195 = getelementptr inbounds nuw i8, ptr %1, i64 1528 - %196 = load i8, ptr %195, align 8, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 - %197 = getelementptr inbounds nuw i8, ptr %1, i64 1529 - %198 = load i8, ptr %197, align 1, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 - %199 = getelementptr inbounds nuw i8, ptr %1, i64 1504 - %200 = load i8, ptr %199, align 8, !range !2148, !alias.scope !28731, !noalias !28734, !noundef !4 - %201 = icmp eq i8 %200, 2 - br i1 %201, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", label %202 - -202: ; preds = %190 - %203 = getelementptr inbounds nuw i8, ptr %1, i64 1488 - %204 = load ptr, ptr %203, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !noundef !4 - %205 = getelementptr inbounds nuw i8, ptr %1, i64 1496 - %206 = load ptr, ptr %205, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !align !179, !noundef !4 - %207 = atomicrmw add ptr %204, i64 1 monotonic, align 8, !noalias !28736 - %208 = icmp slt i64 %207, 0 - br i1 %208, label %209, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" +193: ; preds = %192, %182 + %194 = getelementptr inbounds nuw i8, ptr %1, i64 1368 + %195 = load i32, ptr %194, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 + %196 = getelementptr inbounds nuw i8, ptr %1, i64 1372 + %197 = load i32, ptr %196, align 4, !alias.scope !28731, !noalias !28734 + %198 = getelementptr inbounds nuw i8, ptr %1, i64 1528 + %199 = load i8, ptr %198, align 8, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 + %200 = getelementptr inbounds nuw i8, ptr %1, i64 1529 + %201 = load i8, ptr %200, align 1, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 + %202 = getelementptr inbounds nuw i8, ptr %1, i64 1504 + %203 = load i8, ptr %202, align 8, !range !2148, !alias.scope !28731, !noalias !28734, !noundef !4 + %204 = icmp eq i8 %203, 2 + br i1 %204, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", label %205 + +205: ; preds = %193 + %206 = getelementptr inbounds nuw i8, ptr %1, i64 1488 + %207 = load ptr, ptr %206, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !noundef !4 + %208 = getelementptr inbounds nuw i8, ptr %1, i64 1496 + %209 = load ptr, ptr %208, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !align !179, !noundef !4 + %210 = atomicrmw add ptr %207, i64 1 monotonic, align 8, !noalias !28736 + %211 = icmp slt i64 %210, 0 + br i1 %211, label %212, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" -209: ; preds = %202 +212: ; preds = %205 call void @llvm.trap() unreachable -"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit": ; preds = %202, %190 - %210 = phi ptr [ undef, %190 ], [ %204, %202 ] - %.sroa.07.sroa.4.0.i = phi ptr [ undef, %190 ], [ %206, %202 ] - %trunc18.i = trunc nuw i32 %192 to i1 - %.sroa.56.0.i = select i1 %trunc18.i, i32 %194, i32 undef - %trunc.i143 = trunc nuw i32 %183 to i1 - %.sroa.5.0.i = select i1 %trunc.i143, i32 %185, i32 undef +"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit": ; preds = %205, %193 + %213 = phi ptr [ undef, %193 ], [ %207, %205 ] + %.sroa.07.sroa.4.0.i = phi ptr [ undef, %193 ], [ %209, %205 ] + %trunc18.i = trunc nuw i32 %195 to i1 + %.sroa.56.0.i = select i1 %trunc18.i, i32 %197, i32 undef + %trunc.i143 = trunc nuw i32 %186 to i1 + %.sroa.5.0.i = select i1 %trunc.i143, i32 %188, i32 undef %.sroa.12.16..sroa_idx = getelementptr inbounds nuw i8, ptr %22, i64 20 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(108) %.sroa.12.16..sroa_idx, ptr noundef nonnull align 4 dereferenceable(108) %.sroa.53.i, i64 108, i1 false) call void @llvm.lifetime.end.p0(i64 108, ptr nonnull %.sroa.53.i) - %211 = getelementptr inbounds nuw i8, ptr %22, i64 152 - store ptr %161, ptr %211, align 8 - %212 = getelementptr inbounds nuw i8, ptr %22, i64 160 - store i64 %.sroa.0.0.sroa.speculated.i141, ptr %212, align 8 - store i32 %183, ptr %22, align 8 - %213 = getelementptr inbounds nuw i8, ptr %22, i64 4 - store i32 %.sroa.5.0.i, ptr %213, align 4 - %214 = getelementptr inbounds nuw i8, ptr %22, i64 16 - store i32 %187, ptr %214, align 8 - %215 = getelementptr inbounds nuw i8, ptr %22, i64 8 - store i32 %192, ptr %215, align 8 - %216 = getelementptr inbounds nuw i8, ptr %22, i64 12 - store i32 %.sroa.56.0.i, ptr %216, align 4 - %217 = getelementptr inbounds nuw i8, ptr %22, i64 168 - store i8 %196, ptr %217, align 8 - %218 = getelementptr inbounds nuw i8, ptr %22, i64 169 - store i8 %198, ptr %218, align 1 - %219 = getelementptr inbounds nuw i8, ptr %22, i64 128 - store ptr %210, ptr %219, align 8 + %214 = getelementptr inbounds nuw i8, ptr %22, i64 152 + store ptr %161, ptr %214, align 8 + %215 = getelementptr inbounds nuw i8, ptr %22, i64 160 + store i64 %.sroa.0.0.sroa.speculated.i141, ptr %215, align 8 + store i32 %186, ptr %22, align 8 + %216 = getelementptr inbounds nuw i8, ptr %22, i64 4 + store i32 %.sroa.5.0.i, ptr %216, align 4 + %217 = getelementptr inbounds nuw i8, ptr %22, i64 16 + store i32 %190, ptr %217, align 8 + %218 = getelementptr inbounds nuw i8, ptr %22, i64 8 + store i32 %195, ptr %218, align 8 + %219 = getelementptr inbounds nuw i8, ptr %22, i64 12 + store i32 %.sroa.56.0.i, ptr %219, align 4 + %220 = getelementptr inbounds nuw i8, ptr %22, i64 168 + store i8 %199, ptr %220, align 8 + %221 = getelementptr inbounds nuw i8, ptr %22, i64 169 + store i8 %201, ptr %221, align 1 + %222 = getelementptr inbounds nuw i8, ptr %22, i64 128 + store ptr %213, ptr %222, align 8 %.sroa.15.128..sroa_idx = getelementptr inbounds nuw i8, ptr %22, i64 136 store ptr %.sroa.07.sroa.4.0.i, ptr %.sroa.15.128..sroa_idx, align 8 %.sroa.16.128..sroa_idx = getelementptr inbounds nuw i8, ptr %22, i64 144 - store i8 %200, ptr %.sroa.16.128..sroa_idx, align 8 - %220 = getelementptr inbounds nuw i8, ptr %1, i64 3056 - %221 = load i64, ptr %220, align 8, !noundef !4 - %222 = icmp eq i64 %221, 0 - br i1 %222, label %233, label %223 + store i8 %203, ptr %.sroa.16.128..sroa_idx, align 8 + %223 = getelementptr inbounds nuw i8, ptr %1, i64 3056 + %224 = load i64, ptr %223, align 8, !noundef !4 + %225 = icmp eq i64 %224, 0 + br i1 %225, label %236, label %226 -223: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" +226: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %21) store i32 0, ptr %21, align 4 - %224 = getelementptr inbounds nuw i8, ptr %21, i64 20 - store i32 0, ptr %224, align 4 - %225 = getelementptr inbounds nuw i8, ptr %21, i64 108 - store i8 3, ptr %225, align 4 - %226 = getelementptr inbounds nuw i8, ptr %21, i64 28 - store i32 0, ptr %226, align 4 - %227 = getelementptr inbounds nuw i8, ptr %21, i64 56 - store i32 2, ptr %227, align 4 - %228 = getelementptr inbounds nuw i8, ptr %21, i64 84 - store i32 2, ptr %228, align 4 - %229 = getelementptr inbounds nuw i8, ptr %21, i64 48 + %227 = getelementptr inbounds nuw i8, ptr %21, i64 20 + store i32 0, ptr %227, align 4 + %228 = getelementptr inbounds nuw i8, ptr %21, i64 108 + store i8 3, ptr %228, align 4 + %229 = getelementptr inbounds nuw i8, ptr %21, i64 28 store i32 0, ptr %229, align 4 - %230 = load ptr, ptr %39, align 8, !noundef !4 - %231 = icmp ne ptr %230, null - %232 = load i64, ptr %40, align 8 - %.sroa.038.sroa.0.0 = zext i1 %231 to i64 - %.sroa.038.sroa.5.sroa.6.0 = select i1 %231, i64 %232, i64 undef - %.sroa.539.0 = select i1 %231, i64 %221, i64 0 + %230 = getelementptr inbounds nuw i8, ptr %21, i64 56 + store i32 2, ptr %230, align 4 + %231 = getelementptr inbounds nuw i8, ptr %21, i64 84 + store i32 2, ptr %231, align 4 + %232 = getelementptr inbounds nuw i8, ptr %21, i64 48 + store i32 0, ptr %232, align 4 + %233 = load ptr, ptr %39, align 8, !noundef !4 + %234 = icmp ne ptr %233, null + %235 = load i64, ptr %40, align 8 + %.sroa.038.sroa.0.0 = zext i1 %234 to i64 + %.sroa.038.sroa.5.sroa.6.0 = select i1 %234, i64 %235, i64 undef + %.sroa.539.0 = select i1 %234, i64 %224, i64 0 call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %20) store i64 %.sroa.038.sroa.0.0, ptr %20, align 8 %.sroa.040.sroa.2.0..sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 8 store ptr null, ptr %.sroa.040.sroa.2.0..sroa_idx, align 8 %.sroa.040.sroa.2.sroa.2.0..sroa.040.sroa.2.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 16 - store ptr %230, ptr %.sroa.040.sroa.2.sroa.2.0..sroa.040.sroa.2.0..sroa_idx.sroa_idx, align 8 + store ptr %233, ptr %.sroa.040.sroa.2.sroa.2.0..sroa.040.sroa.2.0..sroa_idx.sroa_idx, align 8 %.sroa.040.sroa.2.sroa.3.0..sroa.040.sroa.2.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 24 store i64 %.sroa.038.sroa.5.sroa.6.0, ptr %.sroa.040.sroa.2.sroa.3.0..sroa.040.sroa.2.0..sroa_idx.sroa_idx, align 8 %.sroa.040.sroa.3.0..sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 32 @@ -99739,142 +99745,142 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %.sroa.040.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 40 store ptr null, ptr %.sroa.040.sroa.4.0..sroa_idx, align 8 %.sroa.040.sroa.4.sroa.2.0..sroa.040.sroa.4.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 48 - store ptr %230, ptr %.sroa.040.sroa.4.sroa.2.0..sroa.040.sroa.4.0..sroa_idx.sroa_idx, align 8 + store ptr %233, ptr %.sroa.040.sroa.4.sroa.2.0..sroa.040.sroa.4.0..sroa_idx.sroa_idx, align 8 %.sroa.040.sroa.4.sroa.3.0..sroa.040.sroa.4.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 56 store i64 %.sroa.038.sroa.5.sroa.6.0, ptr %.sroa.040.sroa.4.sroa.3.0..sroa.040.sroa.4.0..sroa_idx.sroa_idx, align 8 %.sroa.241.0..sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 64 store i64 %.sroa.539.0, ptr %.sroa.241.0..sroa_idx, align 8 - br label %234 + br label %237 -233: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", %248 +236: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", %251 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %25, ptr noundef nonnull align 8 dereferenceable(176) %22, i64 176, i1 false) call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %22) - br label %250 + br label %253 -234: ; preds = %258, %223 - %235 = invoke { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %20) - to label %242 unwind label %236 +237: ; preds = %261, %226 + %238 = invoke { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %20) + to label %245 unwind label %239 -236: ; preds = %249, %234 - %237 = landingpad { ptr, i32 } +239: ; preds = %252, %237 + %240 = landingpad { ptr, i32 } cleanup - br i1 %201, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %238 + br i1 %204, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %241 -238: ; preds = %236 - %239 = atomicrmw sub ptr %210, i64 1 release, align 8, !noalias !28737 - %240 = icmp eq i64 %239, 1 - br i1 %240, label %241, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" +241: ; preds = %239 + %242 = atomicrmw sub ptr %213, i64 1 release, align 8, !noalias !28737 + %243 = icmp eq i64 %242, 1 + br i1 %243, label %244, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" -241: ; preds = %238 +244: ; preds = %241 fence acquire - invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %219) - to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %259 + invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %222) + to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %262 -242: ; preds = %234 - %243 = extractvalue { ptr, ptr } %235, 0 - %244 = icmp eq ptr %243, null - %245 = extractvalue { ptr, ptr } %235, 1 - %246 = icmp eq ptr %245, null - %247 = select i1 %244, i1 true, i1 %246 - br i1 %247, label %248, label %249 +245: ; preds = %237 + %246 = extractvalue { ptr, ptr } %238, 0 + %247 = icmp eq ptr %246, null + %248 = extractvalue { ptr, ptr } %238, 1 + %249 = icmp eq ptr %248, null + %250 = select i1 %247, i1 true, i1 %249 + br i1 %250, label %251, label %252 -248: ; preds = %242 +251: ; preds = %245 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %20) - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %214, ptr noundef nonnull align 4 dereferenceable(112) %21, i64 112, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %217, ptr noundef nonnull align 4 dereferenceable(112) %21, i64 112, i1 false) call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %21) - br label %233 + br label %236 -249: ; preds = %242 +252: ; preds = %245 call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %19) - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %19, ptr noundef nonnull align 4 dereferenceable(112) %245, i64 112, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %19, ptr noundef nonnull align 4 dereferenceable(112) %248, i64 112, i1 false) invoke void @_ZN4gpui5style14HighlightStyle9highlight17h1cc9a839e4fef7abE(ptr noalias noundef nonnull align 4 dereferenceable(112) %21, ptr noalias noundef nonnull align 4 captures(none) dereferenceable(112) %19) - to label %258 unwind label %236 + to label %261 unwind label %239 -250: ; preds = %348, %233 - %251 = invoke noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.549) - to label %.noexc151 unwind label %371 +253: ; preds = %351, %236 + %254 = invoke noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.549) + to label %.noexc151 unwind label %374 -.noexc151: ; preds = %250 - %252 = icmp eq ptr %251, null - %253 = load i64, ptr %61, align 8, !alias.scope !28748, !noalias !28751, !noundef !4 - br i1 %252, label %377, label %254 +.noexc151: ; preds = %253 + %255 = icmp eq ptr %254, null + %256 = load i64, ptr %61, align 8, !alias.scope !28748, !noalias !28751, !noundef !4 + br i1 %255, label %380, label %257 -254: ; preds = %.noexc151 - %255 = getelementptr inbounds nuw i8, ptr %251, i64 48 - %256 = load i64, ptr %255, align 8, !alias.scope !28753, !noalias !28758, !noundef !4 - %257 = add i64 %256, %253 - br label %377 +257: ; preds = %.noexc151 + %258 = getelementptr inbounds nuw i8, ptr %254, i64 48 + %259 = load i64, ptr %258, align 8, !alias.scope !28753, !noalias !28758, !noundef !4 + %260 = add i64 %259, %256 + br label %380 -258: ; preds = %249 +261: ; preds = %252 call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %19) - br label %234 + br label %237 -259: ; preds = %370, %241 - %260 = landingpad { ptr, i32 } +262: ; preds = %373, %244 + %263 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hfa05ef7d5107e16aE() #57 unreachable -261: ; preds = %139 +264: ; preds = %139 call void @llvm.lifetime.start.p0(i64 272, ptr nonnull %18) store ptr %141, ptr %18, align 8 %.sroa.278.0..sroa_idx = getelementptr inbounds nuw i8, ptr %18, i64 8 store i32 0, ptr %.sroa.278.0..sroa_idx, align 8 - br label %269 + br label %272 -262: ; preds = %139, %.thread204 - %263 = phi i64 [ %122, %139 ], [ %.pre212, %.thread204 ] +265: ; preds = %139, %.thread204 + %266 = phi i64 [ %122, %139 ], [ %.pre211, %.thread204 ] %.sroa.011.0 = phi ptr [ null, %139 ], [ %.sroa.011.1, %.thread204 ] call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %17) - %trunc = trunc nuw i64 %263 to i1 + %trunc = trunc nuw i64 %266 to i1 %. = select i1 %trunc, i64 1536, i64 1648 - %264 = getelementptr inbounds nuw i8, ptr %1, i64 %. - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %17, ptr noundef nonnull align 8 dereferenceable(112) %264, i64 112, i1 false) - %265 = load i64, ptr %29, align 8, !noundef !4 - %266 = load i64, ptr %61, align 8, !noundef !4 - %267 = sub i64 %265, %266 - %268 = icmp eq ptr %.sroa.011.0, null - br i1 %268, label %289, label %275 - -269: ; preds = %272, %261 - %270 = call noundef align 8 dereferenceable_or_null(24) ptr @"_ZN90_$LT$sum_tree..cursor..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17hb60b82399c106c70E"(ptr noalias noundef nonnull align 8 dereferenceable(272) %18) - %271 = icmp eq ptr %270, null - br i1 %271, label %.thread204, label %272 - -.thread204: ; preds = %269, %272 - %.sroa.011.1 = phi ptr [ %273, %272 ], [ null, %269 ] - call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %18) - %.pre212 = load i64, ptr %121, align 8, !range !24 - br label %262 - -272: ; preds = %269 - %273 = call noundef align 8 dereferenceable_or_null(192) ptr @"_ZN8sum_tree8tree_map20TreeMap$LT$K$C$V$GT$3get17h6ff1c67ec4628d10E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %270, ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %121) + %267 = getelementptr inbounds nuw i8, ptr %1, i64 %. + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %17, ptr noundef nonnull align 8 dereferenceable(112) %267, i64 112, i1 false) + %268 = load i64, ptr %29, align 8, !noundef !4 + %269 = load i64, ptr %61, align 8, !noundef !4 + %270 = sub i64 %268, %269 + %271 = icmp eq ptr %.sroa.011.0, null + br i1 %271, label %292, label %278 + +272: ; preds = %275, %264 + %273 = call noundef align 8 dereferenceable_or_null(24) ptr @"_ZN90_$LT$sum_tree..cursor..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17hb60b82399c106c70E"(ptr noalias noundef nonnull align 8 dereferenceable(272) %18) %274 = icmp eq ptr %273, null - br i1 %274, label %269, label %.thread204 - -275: ; preds = %262 - %276 = getelementptr inbounds nuw i8, ptr %.sroa.011.0, i64 176 - %277 = load i64, ptr %276, align 8, !noundef !4 - %278 = icmp ult i64 %267, %277 - br i1 %278, label %282, label %279 - -279: ; preds = %275 - %280 = getelementptr inbounds nuw i8, ptr %.sroa.011.0, i64 184 - %281 = load i64, ptr %280, align 8, !noundef !4 - %.not = icmp ult i64 %267, %281 - br i1 %.not, label %284, label %289 - -282: ; preds = %275 - %283 = sub nuw i64 %277, %267 - br label %289 + br i1 %274, label %.thread204, label %275 -284: ; preds = %279 - %285 = sub nuw i64 %281, %267 - %286 = load i32, ptr %17, align 4, !range !4664, !alias.scope !28761, !noundef !4 - %287 = icmp eq i32 %286, 2 - br i1 %287, label %288, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" - -288: ; preds = %284 +.thread204: ; preds = %272, %275 + %.sroa.011.1 = phi ptr [ %276, %275 ], [ null, %272 ] + call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %18) + %.pre211 = load i64, ptr %121, align 8, !range !24 + br label %265 + +275: ; preds = %272 + %276 = call noundef align 8 dereferenceable_or_null(192) ptr @"_ZN8sum_tree8tree_map20TreeMap$LT$K$C$V$GT$3get17h6ff1c67ec4628d10E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %273, ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %121) + %277 = icmp eq ptr %276, null + br i1 %277, label %272, label %.thread204 + +278: ; preds = %265 + %279 = getelementptr inbounds nuw i8, ptr %.sroa.011.0, i64 176 + %280 = load i64, ptr %279, align 8, !noundef !4 + %281 = icmp ult i64 %270, %280 + br i1 %281, label %285, label %282 + +282: ; preds = %278 + %283 = getelementptr inbounds nuw i8, ptr %.sroa.011.0, i64 184 + %284 = load i64, ptr %283, align 8, !noundef !4 + %.not = icmp ult i64 %270, %284 + br i1 %.not, label %287, label %292 + +285: ; preds = %278 + %286 = sub nuw i64 %280, %270 + br label %292 + +287: ; preds = %282 + %288 = sub nuw i64 %284, %270 + %289 = load i32, ptr %17, align 4, !range !4664, !alias.scope !28761, !noundef !4 + %290 = icmp eq i32 %289, 2 + br i1 %290, label %291, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" + +291: ; preds = %287 store i32 0, ptr %17, align 4, !alias.scope !28761 %.sroa.511.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %17, i64 20 store i32 0, ptr %.sroa.511.0..sroa_idx.i, align 4, !alias.scope !28761 @@ -99890,132 +99896,132 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ store i8 3, ptr %.sroa.15.0..sroa_idx.i, align 4, !alias.scope !28761 br label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" -"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit": ; preds = %284, %288 +"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit": ; preds = %287, %291 call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %16) call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %16, ptr noundef nonnull align 8 dereferenceable(112) %.sroa.011.0, i64 112, i1 false) call void @_ZN4gpui5style14HighlightStyle9highlight17h1cc9a839e4fef7abE(ptr noalias noundef nonnull align 4 dereferenceable(112) %17, ptr noalias noundef nonnull align 4 captures(none) dereferenceable(112) %16) call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %16) - br label %289 + br label %292 -289: ; preds = %279, %262, %282, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" - %.sroa.017.0 = phi i64 [ %283, %282 ], [ %285, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" ], [ -1, %262 ], [ -1, %279 ] - %290 = getelementptr inbounds nuw i8, ptr %1, i64 2552 +292: ; preds = %282, %265, %285, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" + %.sroa.017.0 = phi i64 [ %286, %285 ], [ %288, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" ], [ -1, %265 ], [ -1, %282 ] + %293 = getelementptr inbounds nuw i8, ptr %1, i64 2552 call void @llvm.experimental.noalias.scope.decl(metadata !28764) - %291 = getelementptr inbounds nuw i8, ptr %1, i64 2992 - %292 = load i8, ptr %291, align 8, !range !2148, !alias.scope !28764, !noalias !28767, !noundef !4 - %293 = icmp eq i8 %292, 2 - br i1 %293, label %294, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" + %294 = getelementptr inbounds nuw i8, ptr %1, i64 2992 + %295 = load i8, ptr %294, align 8, !range !2148, !alias.scope !28764, !noalias !28767, !noundef !4 + %296 = icmp eq i8 %295, 2 + br i1 %296, label %297, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" -294: ; preds = %289 +297: ; preds = %292 call void @llvm.lifetime.start.p0(i64 448, ptr nonnull %3), !noalias !28769 - %295 = load i64, ptr %31, align 8, !noalias !28770, !noundef !4 - %296 = call noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.552), !noalias !28770 - %297 = icmp eq ptr %296, null - %298 = load i64, ptr %61, align 8, !alias.scope !28774, !noalias !28777, !noundef !4 - br i1 %297, label %303, label %299 - -299: ; preds = %294 - %300 = getelementptr inbounds nuw i8, ptr %296, i64 48 - %301 = load i64, ptr %300, align 8, !alias.scope !28779, !noalias !28784, !noundef !4 - %302 = add i64 %301, %298 - br label %303 - -303: ; preds = %299, %294 - %.pn8.i.i.i = phi i64 [ %302, %299 ], [ %298, %294 ] - %.sroa.0.0.sroa.speculated.i.i.i = call noundef i64 @llvm.umin.i64(i64 %295, i64 %.pn8.i.i.i) - %304 = sub i64 %.sroa.0.0.sroa.speculated.i.i.i, %298 - %305 = getelementptr inbounds nuw i8, ptr %121, i64 64 - call void @_ZN4rope4Rope15chunks_in_range17h24309e1dc9ed5cd9E(ptr noalias noundef nonnull sret([448 x i8]) align 8 captures(none) dereferenceable(448) %3, ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %305, i64 noundef %267, i64 noundef %304), !noalias !28769 - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(448) %290, ptr noundef nonnull align 8 dereferenceable(448) %3, i64 448, i1 false), !noalias !28767 + %298 = load i64, ptr %31, align 8, !noalias !28770, !noundef !4 + %299 = call noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.552), !noalias !28770 + %300 = icmp eq ptr %299, null + %301 = load i64, ptr %61, align 8, !alias.scope !28774, !noalias !28777, !noundef !4 + br i1 %300, label %306, label %302 + +302: ; preds = %297 + %303 = getelementptr inbounds nuw i8, ptr %299, i64 48 + %304 = load i64, ptr %303, align 8, !alias.scope !28779, !noalias !28784, !noundef !4 + %305 = add i64 %304, %301 + br label %306 + +306: ; preds = %302, %297 + %.pn8.i.i.i = phi i64 [ %305, %302 ], [ %301, %297 ] + %.sroa.0.0.sroa.speculated.i.i.i = call noundef i64 @llvm.umin.i64(i64 %298, i64 %.pn8.i.i.i) + %307 = sub i64 %.sroa.0.0.sroa.speculated.i.i.i, %301 + %308 = getelementptr inbounds nuw i8, ptr %121, i64 64 + call void @_ZN4rope4Rope15chunks_in_range17h24309e1dc9ed5cd9E(ptr noalias noundef nonnull sret([448 x i8]) align 8 captures(none) dereferenceable(448) %3, ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %308, i64 noundef %270, i64 noundef %307), !noalias !28769 + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(448) %293, ptr noundef nonnull align 8 dereferenceable(448) %3, i64 448, i1 false), !noalias !28767 call void @llvm.lifetime.end.p0(i64 448, ptr nonnull %3), !noalias !28769 - %.pre.i158 = load i8, ptr %291, align 8, !range !2148, !alias.scope !28764, !noalias !28767 - %306 = icmp ne i8 %.pre.i158, 2 + %.pre.i158 = load i8, ptr %294, align 8, !range !2148, !alias.scope !28764, !noalias !28767 + %309 = icmp ne i8 %.pre.i158, 2 br label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" -"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit": ; preds = %289, %303 - %307 = phi i1 [ true, %289 ], [ %306, %303 ] - call void @llvm.assume(i1 %307) - %308 = getelementptr inbounds nuw i8, ptr %1, i64 3008 +"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit": ; preds = %292, %306 + %310 = phi i1 [ true, %292 ], [ %309, %306 ] + call void @llvm.assume(i1 %310) + %311 = getelementptr inbounds nuw i8, ptr %1, i64 3008 call void @llvm.experimental.noalias.scope.decl(metadata !28787) - %309 = load ptr, ptr %308, align 8, !alias.scope !28787, !noalias !28790, !noundef !4 - %310 = icmp eq ptr %309, null - br i1 %310, label %311, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" + %312 = load ptr, ptr %311, align 8, !alias.scope !28787, !noalias !28790, !noundef !4 + %313 = icmp eq ptr %312, null + br i1 %313, label %314, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" "_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge": ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" %.phi.trans.insert = getelementptr inbounds nuw i8, ptr %1, i64 3016 - %.pre213 = load i64, ptr %.phi.trans.insert, align 8 + %.pre212 = load i64, ptr %.phi.trans.insert, align 8 br label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" -311: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" - %312 = call { ptr, i64 } @"_ZN71_$LT$rope..Chunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h5c66813f2a4ee8d2E"(ptr noalias noundef nonnull align 8 dereferenceable(448) %290), !noalias !28787 - %313 = extractvalue { ptr, i64 } %312, 0 - %314 = icmp eq ptr %313, null - br i1 %314, label %315, label %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" +314: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" + %315 = call { ptr, i64 } @"_ZN71_$LT$rope..Chunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h5c66813f2a4ee8d2E"(ptr noalias noundef nonnull align 8 dereferenceable(448) %293), !noalias !28787 + %316 = extractvalue { ptr, i64 } %315, 0 + %317 = icmp eq ptr %316, null + br i1 %317, label %318, label %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" -315: ; preds = %311 +318: ; preds = %314 call void @_ZN4core6option13unwrap_failed17hba6b08832f9ce30bE(ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.553) #56, !noalias !28787 unreachable -"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i": ; preds = %311 - %316 = extractvalue { ptr, i64 } %312, 1 - store ptr %313, ptr %308, align 8, !alias.scope !28787, !noalias !28790 - %317 = getelementptr inbounds nuw i8, ptr %1, i64 3016 - store i64 %316, ptr %317, align 8, !alias.scope !28787, !noalias !28790 +"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i": ; preds = %314 + %319 = extractvalue { ptr, i64 } %315, 1 + store ptr %316, ptr %311, align 8, !alias.scope !28787, !noalias !28790 + %320 = getelementptr inbounds nuw i8, ptr %1, i64 3016 + store i64 %319, ptr %320, align 8, !alias.scope !28787, !noalias !28790 br label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" "_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit": ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge", %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" - %318 = phi i64 [ %.pre213, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %316, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] - %319 = phi ptr [ %309, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %313, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] - %320 = getelementptr inbounds nuw i8, ptr %1, i64 3016 - %.sroa.0.0.sroa.speculated.i159 = call noundef i64 @llvm.umin.i64(i64 %318, i64 %.sroa.017.0) - %321 = icmp ne i64 %.sroa.0.0.sroa.speculated.i159, 0 - %322 = icmp ult i64 %.sroa.017.0, %318 - %or.cond = and i1 %322, %321 - br i1 %or.cond, label %323, label %328 - -323: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" - %324 = getelementptr inbounds i8, ptr %319, i64 %.sroa.0.0.sroa.speculated.i159 - %325 = load i8, ptr %324, align 1, !alias.scope !28792, !noalias !28795, !noundef !4 - %326 = icmp sgt i8 %325, -65 - br i1 %326, label %328, label %327 - -327: ; preds = %323 - call void @_ZN4core3str16slice_error_fail17h402ef64b20c243efE(ptr noalias noundef nonnull readonly align 1 %319, i64 noundef %318, i64 noundef 0, i64 noundef %.sroa.0.0.sroa.speculated.i159, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.447) #56 - unreachable - -328: ; preds = %323, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" - %329 = sub nuw i64 %318, %.sroa.0.0.sroa.speculated.i159 - %330 = getelementptr inbounds i8, ptr %319, i64 %.sroa.0.0.sroa.speculated.i159 - store ptr %330, ptr %308, align 8 - store i64 %329, ptr %320, align 8 - br i1 %322, label %332, label %331 - -331: ; preds = %328 - store ptr null, ptr %308, align 8 - br label %332 - -332: ; preds = %328, %331 - %333 = load i64, ptr %29, align 8, !noundef !4 - %334 = add i64 %333, %.sroa.0.0.sroa.speculated.i159 - store i64 %334, ptr %29, align 8 - %335 = getelementptr inbounds nuw i8, ptr %1, i64 3056 - %336 = load i64, ptr %335, align 8, !noundef !4 - %337 = icmp eq i64 %336, 0 - br i1 %337, label %348, label %338 - -338: ; preds = %332 - %339 = load ptr, ptr %39, align 8, !noundef !4 - %340 = icmp ne ptr %339, null - %341 = load i64, ptr %40, align 8 - %.sroa.582.0 = select i1 %340, i64 %336, i64 0 - %.sroa.081.sroa.6.0 = zext i1 %340 to i64 - %.sroa.081.sroa.5.sroa.6.0 = select i1 %340, i64 %341, i64 undef + %321 = phi i64 [ %.pre212, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %319, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] + %322 = phi ptr [ %312, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %316, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] + %323 = getelementptr inbounds nuw i8, ptr %1, i64 3016 + %.sroa.0.0.sroa.speculated.i159 = call noundef i64 @llvm.umin.i64(i64 %321, i64 %.sroa.017.0) + %324 = icmp ne i64 %.sroa.0.0.sroa.speculated.i159, 0 + %325 = icmp ult i64 %.sroa.017.0, %321 + %or.cond = and i1 %325, %324 + br i1 %or.cond, label %326, label %331 + +326: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" + %327 = getelementptr inbounds i8, ptr %322, i64 %.sroa.0.0.sroa.speculated.i159 + %328 = load i8, ptr %327, align 1, !alias.scope !28792, !noalias !28795, !noundef !4 + %329 = icmp sgt i8 %328, -65 + br i1 %329, label %331, label %330 + +330: ; preds = %326 + call void @_ZN4core3str16slice_error_fail17h402ef64b20c243efE(ptr noalias noundef nonnull readonly align 1 %322, i64 noundef %321, i64 noundef 0, i64 noundef %.sroa.0.0.sroa.speculated.i159, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.447) #56 + unreachable + +331: ; preds = %326, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" + %332 = sub nuw i64 %321, %.sroa.0.0.sroa.speculated.i159 + %333 = getelementptr inbounds i8, ptr %322, i64 %.sroa.0.0.sroa.speculated.i159 + store ptr %333, ptr %311, align 8 + store i64 %332, ptr %323, align 8 + br i1 %325, label %335, label %334 + +334: ; preds = %331 + store ptr null, ptr %311, align 8 + br label %335 + +335: ; preds = %331, %334 + %336 = load i64, ptr %29, align 8, !noundef !4 + %337 = add i64 %336, %.sroa.0.0.sroa.speculated.i159 + store i64 %337, ptr %29, align 8 + %338 = getelementptr inbounds nuw i8, ptr %1, i64 3056 + %339 = load i64, ptr %338, align 8, !noundef !4 + %340 = icmp eq i64 %339, 0 + br i1 %340, label %351, label %341 + +341: ; preds = %335 + %342 = load ptr, ptr %39, align 8, !noundef !4 + %343 = icmp ne ptr %342, null + %344 = load i64, ptr %40, align 8 + %.sroa.582.0 = select i1 %343, i64 %339, i64 0 + %.sroa.081.sroa.6.0 = zext i1 %343 to i64 + %.sroa.081.sroa.5.sroa.6.0 = select i1 %343, i64 %344, i64 undef call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %15) store i64 %.sroa.081.sroa.6.0, ptr %15, align 8 %.sroa.083.sroa.2.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 8 store ptr null, ptr %.sroa.083.sroa.2.0..sroa_idx, align 8 %.sroa.083.sroa.2.sroa.2.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 16 - store ptr %339, ptr %.sroa.083.sroa.2.sroa.2.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx, align 8 + store ptr %342, ptr %.sroa.083.sroa.2.sroa.2.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx, align 8 %.sroa.083.sroa.2.sroa.3.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 24 store i64 %.sroa.081.sroa.5.sroa.6.0, ptr %.sroa.083.sroa.2.sroa.3.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx, align 8 %.sroa.083.sroa.3.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 32 @@ -100023,59 +100029,59 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %.sroa.083.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 40 store ptr null, ptr %.sroa.083.sroa.4.0..sroa_idx, align 8 %.sroa.083.sroa.4.sroa.2.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 48 - store ptr %339, ptr %.sroa.083.sroa.4.sroa.2.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx, align 8 + store ptr %342, ptr %.sroa.083.sroa.4.sroa.2.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx, align 8 %.sroa.083.sroa.4.sroa.3.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 56 store i64 %.sroa.081.sroa.5.sroa.6.0, ptr %.sroa.083.sroa.4.sroa.3.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx, align 8 %.sroa.284.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 64 store i64 %.sroa.582.0, ptr %.sroa.284.0..sroa_idx, align 8 - %342 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) - %343 = extractvalue { ptr, ptr } %342, 0 - %344 = icmp eq ptr %343, null - %345 = extractvalue { ptr, ptr } %342, 1 - %346 = icmp eq ptr %345, null - %347 = select i1 %344, i1 true, i1 %346 - br i1 %347, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %338 + %345 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) + %346 = extractvalue { ptr, ptr } %345, 0 + %347 = icmp eq ptr %346, null + %348 = extractvalue { ptr, ptr } %345, 1 + %349 = icmp eq ptr %348, null + %350 = select i1 %347, i1 true, i1 %349 + br i1 %350, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %341 %.sroa.5180.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 20 %.sroa.6182.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 28 %.sroa.8184.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 48 %.sroa.9185.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 56 %.sroa.11.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 84 %.sroa.13188.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 108 - br label %355 - -348: ; preds = %332, %._crit_edge - %349 = getelementptr inbounds nuw i8, ptr %25, i64 16 - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %349, ptr noundef nonnull align 4 dereferenceable(112) %17, i64 112, i1 false) - %350 = getelementptr inbounds nuw i8, ptr %25, i64 152 - store ptr %319, ptr %350, align 8 - %351 = getelementptr inbounds nuw i8, ptr %25, i64 160 - store i64 %.sroa.0.0.sroa.speculated.i159, ptr %351, align 8 + br label %358 + +351: ; preds = %335, %._crit_edge + %352 = getelementptr inbounds nuw i8, ptr %25, i64 16 + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %352, ptr noundef nonnull align 4 dereferenceable(112) %17, i64 112, i1 false) + %353 = getelementptr inbounds nuw i8, ptr %25, i64 152 + store ptr %322, ptr %353, align 8 + %354 = getelementptr inbounds nuw i8, ptr %25, i64 160 + store i64 %.sroa.0.0.sroa.speculated.i159, ptr %354, align 8 store i32 0, ptr %25, align 8 - %352 = getelementptr inbounds nuw i8, ptr %25, i64 8 - store i32 0, ptr %352, align 8 - %353 = getelementptr inbounds nuw i8, ptr %25, i64 168 - store i8 0, ptr %353, align 8 - %354 = getelementptr inbounds nuw i8, ptr %25, i64 169 - store i8 0, ptr %354, align 1 + %355 = getelementptr inbounds nuw i8, ptr %25, i64 8 + store i32 0, ptr %355, align 8 + %356 = getelementptr inbounds nuw i8, ptr %25, i64 168 + store i8 0, ptr %356, align 8 + %357 = getelementptr inbounds nuw i8, ptr %25, i64 169 + store i8 0, ptr %357, align 1 %.sroa.1.0..sroa_idx = getelementptr inbounds nuw i8, ptr %25, i64 144 store i8 2, ptr %.sroa.1.0..sroa_idx, align 8 call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %17) - br label %250 + br label %253 -._crit_edge: ; preds = %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit", %338 +._crit_edge: ; preds = %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit", %341 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %15) - br label %348 + br label %351 -355: ; preds = %.lr.ph, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" - %356 = phi ptr [ %345, %.lr.ph ], [ %363, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" ] +358: ; preds = %.lr.ph, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" + %359 = phi ptr [ %348, %.lr.ph ], [ %366, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" ] call void @llvm.experimental.noalias.scope.decl(metadata !28797) - %357 = load i32, ptr %17, align 4, !range !4664, !alias.scope !28800, !noalias !28797, !noundef !4 - %358 = icmp eq i32 %357, 2 - br i1 %358, label %359, label %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" + %360 = load i32, ptr %17, align 4, !range !4664, !alias.scope !28800, !noalias !28797, !noundef !4 + %361 = icmp eq i32 %360, 2 + br i1 %361, label %362, label %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" -359: ; preds = %355 +362: ; preds = %358 store i32 0, ptr %17, align 4, !alias.scope !28802 store i32 0, ptr %.sroa.5180.0..sroa_idx, align 4, !alias.scope !28802 store i32 0, ptr %.sroa.6182.0..sroa_idx, align 4, !alias.scope !28802 @@ -100085,77 +100091,77 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ store i8 3, ptr %.sroa.13188.0..sroa_idx, align 4, !alias.scope !28802 br label %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" -"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit": ; preds = %355, %359 +"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit": ; preds = %358, %362 call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %14) - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %14, ptr noundef nonnull align 4 dereferenceable(112) %356, i64 112, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %14, ptr noundef nonnull align 4 dereferenceable(112) %359, i64 112, i1 false) call void @_ZN4gpui5style14HighlightStyle9highlight17h1cc9a839e4fef7abE(ptr noalias noundef nonnull align 4 dereferenceable(112) %17, ptr noalias noundef nonnull align 4 captures(none) dereferenceable(112) %14) call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %14) - %360 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) - %361 = extractvalue { ptr, ptr } %360, 0 - %362 = icmp eq ptr %361, null - %363 = extractvalue { ptr, ptr } %360, 1 - %364 = icmp eq ptr %363, null - %365 = select i1 %362, i1 true, i1 %364 - br i1 %365, label %._crit_edge, label %355 - -366: ; preds = %371 + %363 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) + %364 = extractvalue { ptr, ptr } %363, 0 + %365 = icmp eq ptr %364, null + %366 = extractvalue { ptr, ptr } %363, 1 + %367 = icmp eq ptr %366, null + %368 = select i1 %365, i1 true, i1 %367 + br i1 %368, label %._crit_edge, label %358 + +369: ; preds = %374 call void @llvm.experimental.noalias.scope.decl(metadata !28803) call void @llvm.experimental.noalias.scope.decl(metadata !28806) call void @llvm.experimental.noalias.scope.decl(metadata !28809) - %367 = load ptr, ptr %373, align 8, !alias.scope !28812, !nonnull !4, !noundef !4 - %368 = atomicrmw sub ptr %367, i64 1 release, align 8, !noalias !28812 - %369 = icmp eq i64 %368, 1 - br i1 %369, label %370, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" + %370 = load ptr, ptr %376, align 8, !alias.scope !28812, !nonnull !4, !noundef !4 + %371 = atomicrmw sub ptr %370, i64 1 release, align 8, !noalias !28812 + %372 = icmp eq i64 %371, 1 + br i1 %372, label %373, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" -370: ; preds = %366 +373: ; preds = %369 fence acquire - invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %373) - to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %259 + invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %376) + to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %262 -371: ; preds = %250, %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit" - %372 = landingpad { ptr, i32 } +374: ; preds = %253, %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit" + %375 = landingpad { ptr, i32 } cleanup call void @llvm.experimental.noalias.scope.decl(metadata !28817) - %373 = getelementptr inbounds nuw i8, ptr %25, i64 128 + %376 = getelementptr inbounds nuw i8, ptr %25, i64 128 call void @llvm.experimental.noalias.scope.decl(metadata !28818) - %374 = getelementptr inbounds nuw i8, ptr %25, i64 144 - %375 = load i8, ptr %374, align 8, !range !2148, !alias.scope !28819, !noundef !4 - %376 = icmp eq i8 %375, 2 - br i1 %376, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %366 + %377 = getelementptr inbounds nuw i8, ptr %25, i64 144 + %378 = load i8, ptr %377, align 8, !range !2148, !alias.scope !28819, !noundef !4 + %379 = icmp eq i8 %378, 2 + br i1 %379, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %369 -377: ; preds = %254, %.noexc151 - %.pn8.i147 = phi i64 [ %257, %254 ], [ %253, %.noexc151 ] - %378 = load i64, ptr %29, align 8, !noundef !4 - %379 = icmp eq i64 %378, %.pn8.i147 - br i1 %379, label %380, label %388 +380: ; preds = %257, %.noexc151 + %.pn8.i147 = phi i64 [ %260, %257 ], [ %256, %.noexc151 ] + %381 = load i64, ptr %29, align 8, !noundef !4 + %382 = icmp eq i64 %381, %.pn8.i147 + br i1 %382, label %383, label %391 -380: ; preds = %377 - %381 = getelementptr inbounds nuw i8, ptr %1, i64 2992 - %382 = load i8, ptr %381, align 8, !range !2148, !alias.scope !28820, !noundef !4 - %383 = icmp eq i8 %382, 2 - br i1 %383, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %384 - -384: ; preds = %380 - %385 = getelementptr inbounds nuw i8, ptr %1, i64 2576 - %386 = load i32, ptr %385, align 8, !alias.scope !28823, !noundef !4 - %.not.i.i.i.i.i = icmp eq i32 %386, 0 - br i1 %.not.i.i.i.i.i, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %387 - -387: ; preds = %384 - store i32 0, ptr %385, align 8, !alias.scope !28836 +383: ; preds = %380 + %384 = getelementptr inbounds nuw i8, ptr %1, i64 2992 + %385 = load i8, ptr %384, align 8, !range !2148, !alias.scope !28820, !noundef !4 + %386 = icmp eq i8 %385, 2 + br i1 %386, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %387 + +387: ; preds = %383 + %388 = getelementptr inbounds nuw i8, ptr %1, i64 2576 + %389 = load i32, ptr %388, align 8, !alias.scope !28823, !noundef !4 + %.not.i.i.i.i.i = icmp eq i32 %389, 0 + br i1 %.not.i.i.i.i.i, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %390 + +390: ; preds = %387 + store i32 0, ptr %388, align 8, !alias.scope !28836 br label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit" -388: ; preds = %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", %377 +391: ; preds = %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", %380 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %0, ptr noundef nonnull align 8 dereferenceable(176) %25, i64 176, i1 false) call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %25) - br label %389 + br label %392 -"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit": ; preds = %387, %384, %380 - store i8 2, ptr %381, align 8 +"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit": ; preds = %390, %387, %383 + store i8 2, ptr %384, align 8 invoke void @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$14search_forward17hcdbe42ac17918dbdE"(ptr noalias noundef nonnull align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 1 inttoptr (i64 1 to ptr), ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.550) - to label %388 unwind label %371 + to label %391 unwind label %374 -389: ; preds = %388, %124, %45 +392: ; preds = %391, %124, %45 ret void } From 89260791893ed549a1a29f3c38ae55717f8ff5a4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Apr 2025 10:38:22 +0000 Subject: [PATCH 3/3] pre-commit: Remap --- bench/abc/optimized/extraUtilMisc.ll | 402 +++++----- .../optimized/damerau_levenshtein_distance.ll | 306 ++++---- .../optimized/505489it2i89bi1c.ll | 52 +- bench/darktable/optimized/Cr2Decompressor.ll | 100 +-- .../optimized/PanasonicV4Decompressor.ll | 164 ++-- bench/duckdb/optimized/format.ll | 2 +- .../optimized/hb-subset-instancer-iup.ll | 116 +-- bench/icu/optimized/alphaindex.ll | 242 +++--- bench/icu/optimized/collationsets.ll | 282 +++---- bench/icu/optimized/dtptngen.ll | 280 +++---- bench/icu/optimized/filteredbrk.ll | 4 +- bench/icu/optimized/number_longnames.ll | 154 ++-- bench/icu/optimized/plurfmt.ll | 202 ++--- bench/icu/optimized/rbnf.ll | 168 ++-- bench/icu/optimized/rbt_rule.ll | 38 +- bench/icu/optimized/reslist.ll | 662 ++++++++-------- bench/icu/optimized/selfmt.ll | 80 +- bench/icu/optimized/sprintf.ll | 106 +-- bench/icu/optimized/timezone.ll | 32 +- bench/icu/optimized/tridpars.ll | 156 ++-- bench/icu/optimized/tzfmt.ll | 84 +- bench/icu/optimized/ucharstriebuilder.ll | 22 +- bench/icu/optimized/uniset.ll | 4 +- bench/icu/optimized/unistr.ll | 80 +- bench/icu/optimized/unistr_case.ll | 34 +- bench/icu/optimized/units_router.ll | 54 +- bench/icu/optimized/uspoof_conf.ll | 12 +- bench/libpng/optimized/pngrutil.ll | 152 ++-- bench/libquic/optimized/url_parse.ll | 216 ++--- bench/llvm/optimized/BTFParser.ll | 76 +- bench/llvm/optimized/MachOObjectFile.ll | 280 +++---- .../optimized/cube_style_precomputation.ll | 738 +++++++++--------- bench/openblas/optimized/dorbdb1.ll | 322 ++++---- bench/openblas/optimized/dorbdb2.ll | 424 +++++----- bench/openjdk/optimized/DrawLine.ll | 40 +- bench/openjdk/optimized/DrawPath.ll | 46 +- bench/openjdk/optimized/genArguments.ll | 144 ++-- bench/openusd/optimized/mvref_common.ll | 144 ++-- .../optimized/DetourLocalBoundary.ll | 76 +- .../optimized/DetourPathCorridor.ll | 170 ++-- bench/sundials/optimized/arkode_interp.ll | 300 +++---- .../optimized/468j8mrahlfb4zd02cozu1ma6.ll | 652 ++++++++-------- 42 files changed, 3809 insertions(+), 3809 deletions(-) diff --git a/bench/abc/optimized/extraUtilMisc.ll b/bench/abc/optimized/extraUtilMisc.ll index f2a2bb81317..d920766579b 100644 --- a/bench/abc/optimized/extraUtilMisc.ll +++ b/bench/abc/optimized/extraUtilMisc.ll @@ -4374,9 +4374,9 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a %23 = add nuw nsw i64 %22, %21 %24 = trunc i64 %23 to i32 %25 = icmp samesign ult i32 %24, 32 - br i1 %25, label %.preheader.i, label %92 + br i1 %25, label %.preheader.i, label %91 -26: ; preds = %90 +26: ; preds = %89 %27 = add nuw nsw i32 %.01521.i, 1 %exitcond.not.i = icmp eq i32 %27, 10 br i1 %exitcond.not.i, label %Extra_Truth6MinimumRoundMany.exit, label %.preheader.i, !llvm.loop !98 @@ -4452,231 +4452,231 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a %89 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i, i64 %88) %indvars.iv.next.i = add nsw i64 %indvars.iv.i, -1 %.not.i = icmp eq i64 %indvars.iv.i, 0 - br i1 %.not.i, label %90, label %28, !llvm.loop !99 + br i1 %.not.i, label %89, label %28, !llvm.loop !99 -90: ; preds = %28 - %91 = icmp eq i64 %.01620.i, %89 - br i1 %91, label %Extra_Truth6MinimumRoundMany.exit, label %26 +89: ; preds = %28 + %90 = icmp eq i64 %.01620.i, %89 + br i1 %90, label %Extra_Truth6MinimumRoundMany.exit, label %26 -92: ; preds = %1 +91: ; preds = %1 %.not = icmp eq i32 %24, 32 - br i1 %.not, label %.preheader.i21, label %93 + br i1 %.not, label %.preheader.i21, label %92 -93: ; preds = %92 - %94 = xor i64 %0, -1 +92: ; preds = %91 + %93 = xor i64 %0, -1 br label %.preheader.i11 -95: ; preds = %159 - %96 = add nuw nsw i32 %.01521.i12, 1 - %exitcond.not.i18 = icmp eq i32 %96, 10 +94: ; preds = %157 + %95 = add nuw nsw i32 %.01521.i12, 1 + %exitcond.not.i18 = icmp eq i32 %95, 10 br i1 %exitcond.not.i18, label %Extra_Truth6MinimumRoundMany.exit, label %.preheader.i11, !llvm.loop !98 -.preheader.i11: ; preds = %95, %93 - %.01521.i12 = phi i32 [ 0, %93 ], [ %96, %95 ] - %.01620.i13 = phi i64 [ %94, %93 ], [ %158, %95 ] - br label %97 +.preheader.i11: ; preds = %94, %92 + %.01521.i12 = phi i32 [ 0, %93 ], [ %95, %95 ] + %.01620.i13 = phi i64 [ %93, %93 ], [ %158, %95 ] + br label %96 -97: ; preds = %97, %.preheader.i11 - %98 = phi i64 [ -4294967296, %.preheader.i11 ], [ %100, %97 ] +96: ; preds = %96, %.preheader.i11 + %97 = phi i64 [ -4294967296, %.preheader.i11 ], [ %99, %97 ] %indvars.iv.i14 = phi i64 [ 4, %.preheader.i11 ], [ %indvars.iv.next.i16, %97 ] %.219.i15 = phi i64 [ %.01620.i13, %.preheader.i11 ], [ %158, %97 ] - %99 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i14 - %100 = load i64, ptr %99, align 8, !tbaa !93 - %101 = xor i64 %100, -1 - %102 = and i64 %.219.i15, %101 - %103 = trunc nuw nsw i64 %indvars.iv.i14 to i32 - %104 = shl nuw i32 1, %103 - %105 = zext i32 %104 to i64 - %106 = shl i64 %102, %105 - %107 = and i64 %100, %.219.i15 - %108 = lshr i64 %107, %105 - %109 = or i64 %106, %108 - %110 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i15, i64 %109) - %111 = xor i64 %98, -1 - %112 = and i64 %.219.i15, %111 - %113 = shl nuw i32 2, %103 - %114 = zext i32 %113 to i64 - %115 = shl i64 %112, %114 - %116 = and i64 %.219.i15, %98 - %117 = lshr i64 %116, %114 - %118 = or i64 %115, %117 - %119 = tail call noundef i64 @llvm.umin.i64(i64 %110, i64 %118) - %120 = and i64 %118, %101 - %121 = shl i64 %120, %105 - %122 = and i64 %118, %100 - %123 = lshr i64 %122, %105 - %124 = or i64 %121, %123 - %125 = tail call noundef i64 @llvm.umin.i64(i64 %119, i64 %124) - %126 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i14 - %127 = load i64, ptr %126, align 8, !tbaa !93 - %128 = and i64 %127, %.219.i15 - %129 = getelementptr inbounds nuw i8, ptr %126, i64 8 - %130 = load i64, ptr %129, align 8, !tbaa !93 - %131 = and i64 %130, %.219.i15 - %132 = shl i64 %131, %105 - %133 = or i64 %132, %128 - %134 = getelementptr inbounds nuw i8, ptr %126, i64 16 - %135 = load i64, ptr %134, align 8, !tbaa !93 - %136 = and i64 %135, %.219.i15 - %137 = lshr i64 %136, %105 - %138 = or i64 %133, %137 - %139 = tail call noundef i64 @llvm.umin.i64(i64 %125, i64 %138) - %140 = and i64 %138, %101 - %141 = shl i64 %140, %105 - %142 = and i64 %138, %100 - %143 = lshr i64 %142, %105 - %144 = or i64 %141, %143 - %145 = tail call noundef i64 @llvm.umin.i64(i64 %139, i64 %144) - %146 = and i64 %138, %111 - %147 = shl i64 %146, %114 - %148 = and i64 %138, %98 - %149 = lshr i64 %148, %114 - %150 = or i64 %147, %149 - %151 = tail call noundef i64 @llvm.umin.i64(i64 %145, i64 %150) - %152 = and i64 %150, %101 - %153 = shl i64 %152, %105 - %154 = and i64 %150, %100 - %155 = lshr i64 %154, %105 - %156 = or i64 %153, %155 - %157 = tail call noundef i64 @llvm.umin.i64(i64 %151, i64 %156) + %98 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i14 + %99 = load i64, ptr %98, align 8, !tbaa !93 + %100 = xor i64 %99, -1 + %101 = and i64 %.219.i15, %100 + %102 = trunc nuw nsw i64 %indvars.iv.i14 to i32 + %103 = shl nuw i32 1, %102 + %104 = zext i32 %103 to i64 + %105 = shl i64 %101, %104 + %106 = and i64 %99, %.219.i15 + %107 = lshr i64 %106, %104 + %108 = or i64 %105, %107 + %109 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i15, i64 %108) + %110 = xor i64 %97, -1 + %111 = and i64 %.219.i15, %110 + %112 = shl nuw i32 2, %102 + %113 = zext i32 %112 to i64 + %114 = shl i64 %111, %113 + %115 = and i64 %.219.i15, %97 + %116 = lshr i64 %115, %113 + %117 = or i64 %114, %116 + %118 = tail call noundef i64 @llvm.umin.i64(i64 %109, i64 %117) + %119 = and i64 %117, %100 + %120 = shl i64 %119, %104 + %121 = and i64 %117, %99 + %122 = lshr i64 %121, %104 + %123 = or i64 %120, %122 + %124 = tail call noundef i64 @llvm.umin.i64(i64 %118, i64 %123) + %125 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i14 + %126 = load i64, ptr %125, align 8, !tbaa !93 + %127 = and i64 %126, %.219.i15 + %128 = getelementptr inbounds nuw i8, ptr %125, i64 8 + %129 = load i64, ptr %128, align 8, !tbaa !93 + %130 = and i64 %129, %.219.i15 + %131 = shl i64 %130, %104 + %132 = or i64 %131, %127 + %133 = getelementptr inbounds nuw i8, ptr %125, i64 16 + %134 = load i64, ptr %133, align 8, !tbaa !93 + %135 = and i64 %134, %.219.i15 + %136 = lshr i64 %135, %104 + %137 = or i64 %132, %136 + %138 = tail call noundef i64 @llvm.umin.i64(i64 %124, i64 %137) + %139 = and i64 %137, %100 + %140 = shl i64 %139, %104 + %141 = and i64 %137, %99 + %142 = lshr i64 %141, %104 + %143 = or i64 %140, %142 + %144 = tail call noundef i64 @llvm.umin.i64(i64 %138, i64 %143) + %145 = and i64 %137, %110 + %146 = shl i64 %145, %113 + %147 = and i64 %137, %97 + %148 = lshr i64 %147, %113 + %149 = or i64 %146, %148 + %150 = tail call noundef i64 @llvm.umin.i64(i64 %144, i64 %149) + %151 = and i64 %149, %100 + %152 = shl i64 %151, %104 + %153 = and i64 %149, %99 + %154 = lshr i64 %153, %104 + %155 = or i64 %152, %154 + %156 = tail call noundef i64 @llvm.umin.i64(i64 %150, i64 %155) %158 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i15, i64 %157) %indvars.iv.next.i16 = add nsw i64 %indvars.iv.i14, -1 %.not.i17 = icmp eq i64 %indvars.iv.i14, 0 - br i1 %.not.i17, label %159, label %97, !llvm.loop !99 + br i1 %.not.i17, label %157, label %96, !llvm.loop !99 -159: ; preds = %97 - %160 = icmp eq i64 %.01620.i13, %158 - br i1 %160, label %Extra_Truth6MinimumRoundMany.exit, label %95 +157: ; preds = %96 + %158 = icmp eq i64 %.01620.i13, %158 + br i1 %158, label %Extra_Truth6MinimumRoundMany.exit, label %94 -161: ; preds = %225 - %162 = add nuw nsw i32 %.01521.i22, 1 - %exitcond.not.i28 = icmp eq i32 %162, 10 +159: ; preds = %222 + %160 = add nuw nsw i32 %.01521.i22, 1 + %exitcond.not.i28 = icmp eq i32 %160, 10 br i1 %exitcond.not.i28, label %Extra_Truth6MinimumRoundMany.exit30, label %.preheader.i21, !llvm.loop !98 -.preheader.i21: ; preds = %92, %161 - %.01521.i22 = phi i32 [ %162, %161 ], [ 0, %92 ] +.preheader.i21: ; preds = %91, %159 + %.01521.i22 = phi i32 [ %160, %161 ], [ 0, %92 ] %.01620.i23 = phi i64 [ %224, %161 ], [ %0, %92 ] - br label %163 + br label %161 -163: ; preds = %163, %.preheader.i21 - %164 = phi i64 [ -4294967296, %.preheader.i21 ], [ %166, %163 ] +161: ; preds = %161, %.preheader.i21 + %162 = phi i64 [ -4294967296, %.preheader.i21 ], [ %164, %163 ] %indvars.iv.i24 = phi i64 [ 4, %.preheader.i21 ], [ %indvars.iv.next.i26, %163 ] %.219.i25 = phi i64 [ %.01620.i23, %.preheader.i21 ], [ %224, %163 ] - %165 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i24 - %166 = load i64, ptr %165, align 8, !tbaa !93 - %167 = xor i64 %166, -1 - %168 = and i64 %.219.i25, %167 - %169 = trunc nuw nsw i64 %indvars.iv.i24 to i32 - %170 = shl nuw i32 1, %169 - %171 = zext i32 %170 to i64 - %172 = shl i64 %168, %171 - %173 = and i64 %166, %.219.i25 - %174 = lshr i64 %173, %171 - %175 = or i64 %172, %174 - %176 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i25, i64 %175) - %177 = xor i64 %164, -1 - %178 = and i64 %.219.i25, %177 - %179 = shl nuw i32 2, %169 - %180 = zext i32 %179 to i64 - %181 = shl i64 %178, %180 - %182 = and i64 %.219.i25, %164 - %183 = lshr i64 %182, %180 - %184 = or i64 %181, %183 - %185 = tail call noundef i64 @llvm.umin.i64(i64 %176, i64 %184) - %186 = and i64 %184, %167 - %187 = shl i64 %186, %171 - %188 = and i64 %184, %166 - %189 = lshr i64 %188, %171 - %190 = or i64 %187, %189 - %191 = tail call noundef i64 @llvm.umin.i64(i64 %185, i64 %190) - %192 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i24 - %193 = load i64, ptr %192, align 8, !tbaa !93 - %194 = and i64 %193, %.219.i25 - %195 = getelementptr inbounds nuw i8, ptr %192, i64 8 - %196 = load i64, ptr %195, align 8, !tbaa !93 - %197 = and i64 %196, %.219.i25 - %198 = shl i64 %197, %171 - %199 = or i64 %198, %194 - %200 = getelementptr inbounds nuw i8, ptr %192, i64 16 - %201 = load i64, ptr %200, align 8, !tbaa !93 - %202 = and i64 %201, %.219.i25 - %203 = lshr i64 %202, %171 - %204 = or i64 %199, %203 - %205 = tail call noundef i64 @llvm.umin.i64(i64 %191, i64 %204) - %206 = and i64 %204, %167 - %207 = shl i64 %206, %171 - %208 = and i64 %204, %166 - %209 = lshr i64 %208, %171 - %210 = or i64 %207, %209 - %211 = tail call noundef i64 @llvm.umin.i64(i64 %205, i64 %210) - %212 = and i64 %204, %177 - %213 = shl i64 %212, %180 - %214 = and i64 %204, %164 - %215 = lshr i64 %214, %180 - %216 = or i64 %213, %215 - %217 = tail call noundef i64 @llvm.umin.i64(i64 %211, i64 %216) - %218 = and i64 %216, %167 - %219 = shl i64 %218, %171 - %220 = and i64 %216, %166 - %221 = lshr i64 %220, %171 - %222 = or i64 %219, %221 - %223 = tail call noundef i64 @llvm.umin.i64(i64 %217, i64 %222) + %163 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i24 + %164 = load i64, ptr %163, align 8, !tbaa !93 + %165 = xor i64 %164, -1 + %166 = and i64 %.219.i25, %165 + %167 = trunc nuw nsw i64 %indvars.iv.i24 to i32 + %168 = shl nuw i32 1, %167 + %169 = zext i32 %168 to i64 + %170 = shl i64 %166, %169 + %171 = and i64 %164, %.219.i25 + %172 = lshr i64 %171, %169 + %173 = or i64 %170, %172 + %174 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i25, i64 %173) + %175 = xor i64 %162, -1 + %176 = and i64 %.219.i25, %175 + %177 = shl nuw i32 2, %167 + %178 = zext i32 %177 to i64 + %179 = shl i64 %176, %178 + %180 = and i64 %.219.i25, %162 + %181 = lshr i64 %180, %178 + %182 = or i64 %179, %181 + %183 = tail call noundef i64 @llvm.umin.i64(i64 %174, i64 %182) + %184 = and i64 %182, %165 + %185 = shl i64 %184, %169 + %186 = and i64 %182, %164 + %187 = lshr i64 %186, %169 + %188 = or i64 %185, %187 + %189 = tail call noundef i64 @llvm.umin.i64(i64 %183, i64 %189) + %190 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i24 + %191 = load i64, ptr %190, align 8, !tbaa !93 + %192 = and i64 %191, %.219.i25 + %193 = getelementptr inbounds nuw i8, ptr %190, i64 8 + %194 = load i64, ptr %193, align 8, !tbaa !93 + %195 = and i64 %194, %.219.i25 + %196 = shl i64 %195, %169 + %197 = or i64 %196, %192 + %198 = getelementptr inbounds nuw i8, ptr %190, i64 16 + %199 = load i64, ptr %198, align 8, !tbaa !93 + %200 = and i64 %199, %.219.i25 + %201 = lshr i64 %200, %169 + %202 = or i64 %197, %201 + %203 = tail call noundef i64 @llvm.umin.i64(i64 %189, i64 %202) + %204 = and i64 %202, %165 + %205 = shl i64 %204, %169 + %206 = and i64 %202, %164 + %207 = lshr i64 %206, %169 + %208 = or i64 %205, %207 + %209 = tail call noundef i64 @llvm.umin.i64(i64 %203, i64 %208) + %210 = and i64 %202, %175 + %211 = shl i64 %210, %178 + %212 = and i64 %202, %162 + %213 = lshr i64 %212, %178 + %214 = or i64 %211, %213 + %215 = tail call noundef i64 @llvm.umin.i64(i64 %209, i64 %214) + %216 = and i64 %214, %165 + %217 = shl i64 %216, %169 + %218 = and i64 %214, %164 + %219 = lshr i64 %218, %169 + %220 = or i64 %217, %219 + %221 = tail call noundef i64 @llvm.umin.i64(i64 %215, i64 %220) %224 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i25, i64 %223) %indvars.iv.next.i26 = add nsw i64 %indvars.iv.i24, -1 %.not.i27 = icmp eq i64 %indvars.iv.i24, 0 - br i1 %.not.i27, label %225, label %163, !llvm.loop !99 + br i1 %.not.i27, label %222, label %161, !llvm.loop !99 -225: ; preds = %163 - %226 = icmp eq i64 %.01620.i23, %224 - br i1 %226, label %Extra_Truth6MinimumRoundMany.exit30, label %161 +222: ; preds = %161 + %223 = icmp eq i64 %.01620.i23, %224 + br i1 %223, label %Extra_Truth6MinimumRoundMany.exit30, label %159 -Extra_Truth6MinimumRoundMany.exit30: ; preds = %161, %225 +Extra_Truth6MinimumRoundMany.exit30: ; preds = %159, %222 %.lcssa.lcssa.i29 = phi i64 [ %.01620.i23, %225 ], [ %224, %161 ] - %227 = xor i64 %0, -1 + %224 = xor i64 %0, -1 br label %.preheader.i31 -228: ; preds = %292 - %229 = add nuw nsw i32 %.01521.i32, 1 - %exitcond.not.i38 = icmp eq i32 %229, 10 +225: ; preds = %288 + %226 = add nuw nsw i32 %.01521.i32, 1 + %exitcond.not.i38 = icmp eq i32 %226, 10 br i1 %exitcond.not.i38, label %Extra_Truth6MinimumRoundMany.exit40, label %.preheader.i31, !llvm.loop !98 -.preheader.i31: ; preds = %228, %Extra_Truth6MinimumRoundMany.exit30 - %.01521.i32 = phi i32 [ 0, %Extra_Truth6MinimumRoundMany.exit30 ], [ %229, %228 ] - %.01620.i33 = phi i64 [ %227, %Extra_Truth6MinimumRoundMany.exit30 ], [ %291, %228 ] - br label %230 +.preheader.i31: ; preds = %225, %Extra_Truth6MinimumRoundMany.exit30 + %.01521.i32 = phi i32 [ 0, %Extra_Truth6MinimumRoundMany.exit30 ], [ %226, %228 ] + %.01620.i33 = phi i64 [ %224, %Extra_Truth6MinimumRoundMany.exit30 ], [ %291, %228 ] + br label %227 -230: ; preds = %230, %.preheader.i31 - %231 = phi i64 [ -4294967296, %.preheader.i31 ], [ %233, %230 ] +227: ; preds = %227, %.preheader.i31 + %228 = phi i64 [ -4294967296, %.preheader.i31 ], [ %230, %230 ] %indvars.iv.i34 = phi i64 [ 4, %.preheader.i31 ], [ %indvars.iv.next.i36, %230 ] %.219.i35 = phi i64 [ %.01620.i33, %.preheader.i31 ], [ %291, %230 ] - %232 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i34 - %233 = load i64, ptr %232, align 8, !tbaa !93 - %234 = xor i64 %233, -1 - %235 = and i64 %.219.i35, %234 - %236 = trunc nuw nsw i64 %indvars.iv.i34 to i32 - %237 = shl nuw i32 1, %236 - %238 = zext i32 %237 to i64 - %239 = shl i64 %235, %238 - %240 = and i64 %233, %.219.i35 - %241 = lshr i64 %240, %238 - %242 = or i64 %239, %241 - %243 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i35, i64 %242) - %244 = xor i64 %231, -1 - %245 = and i64 %.219.i35, %244 - %246 = shl nuw i32 2, %236 - %247 = zext i32 %246 to i64 - %248 = shl i64 %245, %247 - %249 = and i64 %.219.i35, %231 - %250 = lshr i64 %249, %247 - %251 = or i64 %248, %250 - %252 = tail call noundef i64 @llvm.umin.i64(i64 %243, i64 %251) - %253 = and i64 %251, %234 - %254 = shl i64 %253, %238 - %255 = and i64 %251, %233 - %256 = lshr i64 %255, %238 - %257 = or i64 %254, %256 - %258 = tail call noundef i64 @llvm.umin.i64(i64 %252, i64 %257) - %259 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i34 + %229 = getelementptr inbounds nuw [6 x i64], ptr @Extra_Truth6ChangePhase.Truth6, i64 0, i64 %indvars.iv.i34 + %230 = load i64, ptr %229, align 8, !tbaa !93 + %231 = xor i64 %230, -1 + %232 = and i64 %.219.i35, %231 + %233 = trunc nuw nsw i64 %indvars.iv.i34 to i32 + %234 = shl nuw i32 1, %233 + %235 = zext i32 %234 to i64 + %236 = shl i64 %232, %235 + %237 = and i64 %230, %.219.i35 + %238 = lshr i64 %237, %235 + %239 = or i64 %236, %238 + %240 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i35, i64 %239) + %241 = xor i64 %228, -1 + %242 = and i64 %.219.i35, %241 + %243 = shl nuw i32 2, %233 + %244 = zext i32 %243 to i64 + %245 = shl i64 %242, %244 + %246 = and i64 %.219.i35, %228 + %247 = lshr i64 %246, %244 + %248 = or i64 %245, %247 + %249 = tail call noundef i64 @llvm.umin.i64(i64 %240, i64 %248) + %250 = and i64 %248, %231 + %251 = shl i64 %250, %235 + %252 = and i64 %248, %230 + %253 = lshr i64 %252, %235 + %254 = or i64 %251, %253 + %255 = tail call noundef i64 @llvm.umin.i64(i64 %249, i64 %254) + %256 = getelementptr inbounds nuw [5 x [3 x i64]], ptr @Extra_Truth6SwapAdjacent.PMasks, i64 0, i64 %indvars.iv.i34 %260 = load i64, ptr %259, align 8, !tbaa !93 %261 = and i64 %260, %.219.i35 %262 = getelementptr inbounds nuw i8, ptr %259, i64 8 @@ -4698,7 +4698,7 @@ Extra_Truth6MinimumRoundMany.exit30: ; preds = %161, %225 %278 = tail call noundef i64 @llvm.umin.i64(i64 %272, i64 %277) %279 = and i64 %271, %244 %280 = shl i64 %279, %247 - %281 = and i64 %271, %231 + %281 = and i64 %271, %228 %282 = lshr i64 %281, %247 %283 = or i64 %280, %282 %284 = tail call noundef i64 @llvm.umin.i64(i64 %278, i64 %283) @@ -4711,19 +4711,19 @@ Extra_Truth6MinimumRoundMany.exit30: ; preds = %161, %225 %291 = tail call noundef i64 @llvm.umin.i64(i64 %.219.i35, i64 %290) %indvars.iv.next.i36 = add nsw i64 %indvars.iv.i34, -1 %.not.i37 = icmp eq i64 %indvars.iv.i34, 0 - br i1 %.not.i37, label %292, label %230, !llvm.loop !99 + br i1 %.not.i37, label %288, label %227, !llvm.loop !99 -292: ; preds = %230 - %293 = icmp eq i64 %.01620.i33, %291 - br i1 %293, label %Extra_Truth6MinimumRoundMany.exit40, label %228 +288: ; preds = %227 + %289 = icmp eq i64 %.01620.i33, %291 + br i1 %289, label %Extra_Truth6MinimumRoundMany.exit40, label %225 -Extra_Truth6MinimumRoundMany.exit40: ; preds = %228, %292 +Extra_Truth6MinimumRoundMany.exit40: ; preds = %225, %288 %.lcssa.lcssa.i39 = phi i64 [ %.01620.i33, %292 ], [ %291, %228 ] - %294 = tail call noundef i64 @llvm.umin.i64(i64 %.lcssa.lcssa.i29, i64 %.lcssa.lcssa.i39) + %290 = tail call noundef i64 @llvm.umin.i64(i64 %.lcssa.lcssa.i29, i64 %.lcssa.lcssa.i39) br label %Extra_Truth6MinimumRoundMany.exit -Extra_Truth6MinimumRoundMany.exit: ; preds = %159, %95, %90, %26, %Extra_Truth6MinimumRoundMany.exit40 - %.0 = phi i64 [ %294, %Extra_Truth6MinimumRoundMany.exit40 ], [ %89, %26 ], [ %.01620.i, %90 ], [ %158, %95 ], [ %.01620.i13, %159 ] +Extra_Truth6MinimumRoundMany.exit: ; preds = %157, %94, %89, %26, %Extra_Truth6MinimumRoundMany.exit40 + %.0 = phi i64 [ %290, %Extra_Truth6MinimumRoundMany.exit40 ], [ %89, %26 ], [ %.01620.i, %90 ], [ %158, %95 ], [ %.01620.i13, %159 ] ret i64 %.0 } diff --git a/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll b/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll index 142b8459b2d..cfe70ea660b 100644 --- a/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll +++ b/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll @@ -28,223 +28,223 @@ define dso_local noundef zeroext i8 @_ZN4absl16strings_internal32CappedDamerauLe %14 = icmp ult i64 %13, %.sroa.0.0 %15 = icmp ugt i64 %.sroa.0.0, 100 %or.cond89 = or i1 %15, %14 - br i1 %or.cond89, label %117, label %16 + br i1 %or.cond89, label %115, label %16 16: ; preds = %11 %17 = icmp eq i64 %.sroa.080.0, 0 - br i1 %17, label %18, label %20 + br i1 %17, label %18, label %.lr.ph.i.preheader 18: ; preds = %16 %19 = trunc nuw nsw i64 %.sroa.0.0 to i8 - br label %117 + br label %115 -20: ; preds = %16 +.lr.ph.i.preheader: ; preds = %16 %.neg = sub i64 %.sroa.080.0, %.sroa.0.0 %.neg63 = trunc i64 %.neg to i8 %21 = add i8 %.sroa.speculated, %.neg63 call void @llvm.lifetime.start.p0(i64 10404, ptr nonnull %6) #3 - %22 = getelementptr inbounds nuw i8, ptr %6, i64 %12 + %20 = getelementptr inbounds nuw i8, ptr %6, i64 %12 %23 = getelementptr inbounds nuw i8, ptr %22, i64 1 %.not6.i = icmp eq ptr %6, %23 br i1 %.not6.i, label %.lr.ph96, label %.lr.ph.i -.lr.ph.i: ; preds = %20, %.lr.ph.i +.lr.ph.i: ; preds = %.lr.ph.i.preheader, %.lr.ph.i %.08.i = phi i8 [ %24, %.lr.ph.i ], [ 0, %20 ] %.057.i = phi ptr [ %25, %.lr.ph.i ], [ %6, %20 ] store i8 %.08.i, ptr %.057.i, align 1, !tbaa !4 - %24 = add nuw nsw i8 %.08.i, 1 - %25 = getelementptr inbounds nuw i8, ptr %.057.i, i64 1 - %.not.i = icmp eq ptr %.057.i, %22 + %21 = add nuw nsw i8 %.08.i, 1 + %22 = getelementptr inbounds nuw i8, ptr %.057.i, i64 1 + %.not.i = icmp eq ptr %.057.i, %20 br i1 %.not.i, label %.lr.ph96, label %.lr.ph.i, !llvm.loop !7 .lr.ph96: ; preds = %.lr.ph.i, %20 - %26 = zext nneg i8 %8 to i64 - %27 = getelementptr inbounds nuw [102 x i8], ptr %6, i64 0, i64 %26 - store i8 %8, ptr %27, align 1, !tbaa !4 + %23 = zext nneg i8 %8 to i64 + %24 = getelementptr inbounds nuw [102 x i8], ptr %6, i64 0, i64 %23 + store i8 %8, ptr %24, align 1, !tbaa !4 %28 = zext i8 %21 to i64 %.ptr91 = getelementptr inbounds nuw i8, ptr %7, i64 1 - %29 = getelementptr inbounds nuw i8, ptr %7, i64 2 - %30 = getelementptr inbounds nuw i8, ptr %7, i64 3 - %31 = getelementptr inbounds nuw i8, ptr %7, i64 4 - br label %35 + %27 = getelementptr inbounds nuw i8, ptr %7, i64 2 + %28 = getelementptr inbounds nuw i8, ptr %7, i64 3 + %29 = getelementptr inbounds nuw i8, ptr %7, i64 4 + br label %33 ._crit_edge97: ; preds = %._crit_edge - %32 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.sroa.080.0 - %33 = getelementptr inbounds nuw [102 x i8], ptr %32, i64 0, i64 %.sroa.0.0 - %34 = load i8, ptr %33, align 1, !tbaa !4 + %30 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.sroa.080.0 + %31 = getelementptr inbounds nuw [102 x i8], ptr %30, i64 0, i64 %.sroa.0.0 + %32 = load i8, ptr %31, align 1, !tbaa !4 call void @llvm.lifetime.end.p0(i64 10404, ptr nonnull %6) #3 - br label %117 - -35: ; preds = %.lr.ph96, %._crit_edge - %.05795 = phi i64 [ 1, %.lr.ph96 ], [ %81, %._crit_edge ] - %36 = icmp ugt i64 %.05795, %28 - %37 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 - br i1 %36, label %38, label %42 - -38: ; preds = %35 - %39 = sub nuw i64 %.05795, %28 - %40 = add i64 %39, -1 - %41 = getelementptr inbounds nuw [102 x i8], ptr %37, i64 0, i64 %40 - store i8 %8, ptr %41, align 1, !tbaa !4 - br label %44 - -42: ; preds = %35 - %43 = trunc nuw i64 %.05795 to i8 - store i8 %43, ptr %37, align 1, !tbaa !4 - br label %44 - -44: ; preds = %42, %38 - %.058 = phi i64 [ %39, %38 ], [ 1, %42 ] - %45 = add i64 %.05795, %12 - %46 = icmp ugt i64 %45, %.sroa.0.0 - br i1 %46, label %51, label %47 - -47: ; preds = %44 - %48 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 - %49 = add i64 %45, 1 - %50 = getelementptr inbounds nuw [102 x i8], ptr %48, i64 0, i64 %49 - store i8 %8, ptr %50, align 1, !tbaa !4 - br label %51 - -51: ; preds = %44, %47 - %.059 = phi i64 [ %45, %47 ], [ %.sroa.0.0, %44 ] + br label %115 + +33: ; preds = %.lr.ph96, %._crit_edge + %.05795 = phi i64 [ 1, %.lr.ph96 ], [ %79, %._crit_edge ] + %34 = icmp ugt i64 %.05795, %28 + %35 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 + br i1 %34, label %36, label %40 + +36: ; preds = %33 + %37 = sub nuw i64 %.05795, %28 + %38 = add i64 %37, -1 + %39 = getelementptr inbounds nuw [102 x i8], ptr %35, i64 0, i64 %38 + store i8 %8, ptr %39, align 1, !tbaa !4 + br label %42 + +40: ; preds = %33 + %41 = trunc nuw i64 %.05795 to i8 + store i8 %41, ptr %35, align 1, !tbaa !4 + br label %42 + +42: ; preds = %40, %36 + %.058 = phi i64 [ %37, %38 ], [ 1, %42 ] + %43 = add i64 %.05795, %12 + %44 = icmp ugt i64 %43, %.sroa.0.0 + br i1 %44, label %49, label %45 + +45: ; preds = %42 + %46 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 + %47 = add i64 %43, 1 + %48 = getelementptr inbounds nuw [102 x i8], ptr %46, i64 0, i64 %47 + store i8 %8, ptr %48, align 1, !tbaa !4 + br label %49 + +49: ; preds = %42, %45 + %.059 = phi i64 [ %43, %47 ], [ %.sroa.0.0, %44 ] %.not6492 = icmp ugt i64 %.058, %.059 br i1 %.not6492, label %._crit_edge, label %.lr.ph -.lr.ph: ; preds = %51 - %52 = add i64 %.05795, -1 - %53 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %52 - %54 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 - %55 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %52 - %56 = icmp ugt i64 %.05795, 1 - %57 = add i64 %.05795, -2 - %58 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %57 - %59 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %57 - %.pre99 = load i8, ptr %55, align 1, !tbaa !4 - br i1 %56, label %.lr.ph.split, label %.lr.ph.split.us +.lr.ph: ; preds = %49 + %50 = add i64 %.05795, -1 + %51 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %50 + %52 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %.05795 + %53 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %50 + %54 = icmp ugt i64 %.05795, 1 + %55 = add i64 %.05795, -2 + %56 = getelementptr inbounds nuw i8, ptr %.sroa.9.0, i64 %55 + %57 = getelementptr inbounds nuw [102 x %"struct.std::array.0"], ptr %6, i64 0, i64 %55 + %.pre99 = load i8, ptr %53, align 1, !tbaa !4 + br i1 %54, label %.lr.ph.split, label %.lr.ph.split.us .lr.ph.split.us: ; preds = %.lr.ph, %_ZSt3minIhET_St16initializer_listIS0_E.exit.us - %.06093.us = phi i64 [ %80, %_ZSt3minIhET_St16initializer_listIS0_E.exit.us ], [ %.058, %.lr.ph ] - %60 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %.06093.us - %61 = load i8, ptr %60, align 1, !tbaa !4 - %62 = add i8 %61, 1 - %63 = add i64 %.06093.us, -1 - %64 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %63 - %65 = load i8, ptr %64, align 1, !tbaa !4 - %66 = add i8 %65, 1 - %67 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %63 - %68 = load i8, ptr %67, align 1, !tbaa !4 - %69 = icmp ne i8 %.pre99, %68 - %70 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %63 - %71 = load i8, ptr %70, align 1, !tbaa !4 - %72 = zext i1 %69 to i8 - %73 = add i8 %71, %72 + %.06093.us = phi i64 [ %78, %_ZSt3minIhET_St16initializer_listIS0_E.exit.us ], [ %.058, %.lr.ph ] + %58 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %.06093.us + %59 = load i8, ptr %58, align 1, !tbaa !4 + %60 = add i8 %59, 1 + %61 = add i64 %.06093.us, -1 + %62 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %61 + %63 = load i8, ptr %62, align 1, !tbaa !4 + %64 = add i8 %63, 1 + %65 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %61 + %66 = load i8, ptr %65, align 1, !tbaa !4 + %67 = icmp ne i8 %.pre99, %66 + %68 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %61 + %69 = load i8, ptr %68, align 1, !tbaa !4 + %70 = zext i1 %67 to i8 + %71 = add i8 %69, %70 call void @llvm.lifetime.start.p0(i64 5, ptr nonnull %7) #3 store i8 %8, ptr %7, align 1, !tbaa !4 - store i8 %62, ptr %.ptr91, align 1, !tbaa !4 - store i8 %66, ptr %29, align 1, !tbaa !4 - store i8 %73, ptr %30, align 1, !tbaa !4 - store i8 %8, ptr %31, align 1, !tbaa !4 + store i8 %60, ptr %.ptr91, align 1, !tbaa !4 + store i8 %64, ptr %27, align 1, !tbaa !4 + store i8 %71, ptr %28, align 1, !tbaa !4 + store i8 %8, ptr %29, align 1, !tbaa !4 br label %.lr.ph.i.i.us .lr.ph.i.i.us: ; preds = %.lr.ph.i.i.us, %.lr.ph.split.us - %74 = phi i8 [ %77, %.lr.ph.i.i.us ], [ %8, %.lr.ph.split.us ] + %72 = phi i8 [ %75, %.lr.ph.i.i.us ], [ %8, %.lr.ph.split.us ] %.idx.us = phi i64 [ %.add.us, %.lr.ph.i.i.us ], [ 1, %.lr.ph.split.us ] %.018.i.i.us = phi ptr [ %spec.select.i.i.us, %.lr.ph.i.i.us ], [ %7, %.lr.ph.split.us ] %.ptr.us = getelementptr inbounds nuw i8, ptr %7, i64 %.idx.us - %75 = load i8, ptr %.ptr.us, align 1, !tbaa !4 - %76 = icmp ult i8 %75, %74 - %77 = call i8 @llvm.umin.i8(i8 %75, i8 %74) - %spec.select.i.i.us = select i1 %76, ptr %.ptr.us, ptr %.018.i.i.us + %73 = load i8, ptr %.ptr.us, align 1, !tbaa !4 + %74 = icmp ult i8 %73, %72 + %75 = call i8 @llvm.umin.i8(i8 %73, i8 %72) + %spec.select.i.i.us = select i1 %74, ptr %.ptr.us, ptr %.018.i.i.us %.add.us = add nuw nsw i64 %.idx.us, 1 %.not.i.i.us = icmp eq i64 %.add.us, 5 br i1 %.not.i.i.us, label %_ZSt3minIhET_St16initializer_listIS0_E.exit.us, label %.lr.ph.i.i.us, !llvm.loop !9 _ZSt3minIhET_St16initializer_listIS0_E.exit.us: ; preds = %.lr.ph.i.i.us - %78 = load i8, ptr %spec.select.i.i.us, align 1, !tbaa !4 - %79 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %.06093.us - store i8 %78, ptr %79, align 1, !tbaa !4 + %76 = load i8, ptr %spec.select.i.i.us, align 1, !tbaa !4 + %77 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %.06093.us + store i8 %76, ptr %77, align 1, !tbaa !4 call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %7) #3 - %80 = add i64 %.06093.us, 1 - %.not64.us = icmp ugt i64 %80, %.059 + %78 = add i64 %.06093.us, 1 + %.not64.us = icmp ugt i64 %78, %.059 br i1 %.not64.us, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !10 -._crit_edge: ; preds = %_ZSt3minIhET_St16initializer_listIS0_E.exit.us, %_ZSt3minIhET_St16initializer_listIS0_E.exit, %51 - %81 = add i64 %.05795, 1 - %.not = icmp ugt i64 %81, %.sroa.080.0 - br i1 %.not, label %._crit_edge97, label %35, !llvm.loop !11 +._crit_edge: ; preds = %_ZSt3minIhET_St16initializer_listIS0_E.exit.us, %_ZSt3minIhET_St16initializer_listIS0_E.exit, %49 + %79 = add i64 %.05795, 1 + %.not.not = icmp ugt i64 %79, %.sroa.080.0 + br i1 %.not.not, label %._crit_edge97, label %35, !llvm.loop !11 .lr.ph.split: ; preds = %.lr.ph, %_ZSt3minIhET_St16initializer_listIS0_E.exit - %.06093 = phi i64 [ %116, %_ZSt3minIhET_St16initializer_listIS0_E.exit ], [ %.058, %.lr.ph ] - %82 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %.06093 - %83 = load i8, ptr %82, align 1, !tbaa !4 - %84 = add i8 %83, 1 - %85 = add i64 %.06093, -1 - %86 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %85 - %87 = load i8, ptr %86, align 1, !tbaa !4 - %88 = add i8 %87, 1 - %89 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %85 - %90 = load i8, ptr %89, align 1, !tbaa !4 - %91 = icmp ne i8 %.pre99, %90 - %92 = getelementptr inbounds nuw [102 x i8], ptr %53, i64 0, i64 %85 - %93 = load i8, ptr %92, align 1, !tbaa !4 - %94 = zext i1 %91 to i8 - %95 = add i8 %93, %94 - %96 = icmp ugt i64 %.06093, 1 - br i1 %96, label %97, label %109 - -97: ; preds = %.lr.ph.split - %98 = add i64 %.06093, -2 - %99 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %98 - %100 = load i8, ptr %99, align 1, !tbaa !4 - %101 = icmp eq i8 %.pre99, %100 - br i1 %101, label %102, label %109 - -102: ; preds = %97 - %103 = load i8, ptr %58, align 1, !tbaa !4 - %104 = icmp eq i8 %103, %90 - br i1 %104, label %105, label %109 - -105: ; preds = %102 - %106 = getelementptr inbounds nuw [102 x i8], ptr %59, i64 0, i64 %98 - %107 = load i8, ptr %106, align 1, !tbaa !4 - %108 = add i8 %107, 1 - br label %109 - -109: ; preds = %105, %102, %97, %.lr.ph.split - %.056 = phi i8 [ %108, %105 ], [ %8, %102 ], [ %8, %97 ], [ %8, %.lr.ph.split ] + %.06093 = phi i64 [ %114, %_ZSt3minIhET_St16initializer_listIS0_E.exit ], [ %.058, %.lr.ph ] + %80 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %.06093 + %81 = load i8, ptr %80, align 1, !tbaa !4 + %82 = add i8 %81, 1 + %83 = add i64 %.06093, -1 + %84 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %83 + %85 = load i8, ptr %84, align 1, !tbaa !4 + %86 = add i8 %85, 1 + %87 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %83 + %88 = load i8, ptr %87, align 1, !tbaa !4 + %89 = icmp ne i8 %.pre99, %88 + %90 = getelementptr inbounds nuw [102 x i8], ptr %51, i64 0, i64 %83 + %91 = load i8, ptr %90, align 1, !tbaa !4 + %92 = zext i1 %89 to i8 + %93 = add i8 %91, %92 + %94 = icmp ugt i64 %.06093, 1 + br i1 %94, label %95, label %107 + +95: ; preds = %.lr.ph.split + %96 = add i64 %.06093, -2 + %97 = getelementptr inbounds nuw i8, ptr %.sroa.11.0, i64 %96 + %98 = load i8, ptr %97, align 1, !tbaa !4 + %99 = icmp eq i8 %.pre99, %98 + br i1 %99, label %100, label %107 + +100: ; preds = %95 + %101 = load i8, ptr %56, align 1, !tbaa !4 + %102 = icmp eq i8 %101, %88 + br i1 %102, label %103, label %107 + +103: ; preds = %100 + %104 = getelementptr inbounds nuw [102 x i8], ptr %57, i64 0, i64 %96 + %105 = load i8, ptr %104, align 1, !tbaa !4 + %106 = add i8 %105, 1 + br label %107 + +107: ; preds = %103, %100, %95, %.lr.ph.split + %.056 = phi i8 [ %106, %105 ], [ %8, %102 ], [ %8, %97 ], [ %8, %.lr.ph.split ] call void @llvm.lifetime.start.p0(i64 5, ptr nonnull %7) #3 store i8 %8, ptr %7, align 1, !tbaa !4 - store i8 %84, ptr %.ptr91, align 1, !tbaa !4 - store i8 %88, ptr %29, align 1, !tbaa !4 - store i8 %95, ptr %30, align 1, !tbaa !4 - store i8 %.056, ptr %31, align 1, !tbaa !4 + store i8 %82, ptr %.ptr91, align 1, !tbaa !4 + store i8 %86, ptr %27, align 1, !tbaa !4 + store i8 %93, ptr %28, align 1, !tbaa !4 + store i8 %.056, ptr %29, align 1, !tbaa !4 br label %.lr.ph.i.i -.lr.ph.i.i: ; preds = %.lr.ph.i.i, %109 - %110 = phi i8 [ %113, %.lr.ph.i.i ], [ %8, %109 ] +.lr.ph.i.i: ; preds = %.lr.ph.i.i, %107 + %108 = phi i8 [ %111, %.lr.ph.i.i ], [ %8, %109 ] %.idx = phi i64 [ %.add, %.lr.ph.i.i ], [ 1, %109 ] %.018.i.i = phi ptr [ %spec.select.i.i, %.lr.ph.i.i ], [ %7, %109 ] %.ptr = getelementptr inbounds nuw i8, ptr %7, i64 %.idx - %111 = load i8, ptr %.ptr, align 1, !tbaa !4 - %112 = icmp ult i8 %111, %110 - %113 = call i8 @llvm.umin.i8(i8 %111, i8 %110) - %spec.select.i.i = select i1 %112, ptr %.ptr, ptr %.018.i.i + %109 = load i8, ptr %.ptr, align 1, !tbaa !4 + %110 = icmp ult i8 %109, %108 + %111 = call i8 @llvm.umin.i8(i8 %109, i8 %108) + %spec.select.i.i = select i1 %110, ptr %.ptr, ptr %.018.i.i %.add = add nuw nsw i64 %.idx, 1 %.not.i.i = icmp eq i64 %.add, 5 br i1 %.not.i.i, label %_ZSt3minIhET_St16initializer_listIS0_E.exit, label %.lr.ph.i.i, !llvm.loop !9 _ZSt3minIhET_St16initializer_listIS0_E.exit: ; preds = %.lr.ph.i.i - %114 = load i8, ptr %spec.select.i.i, align 1, !tbaa !4 - %115 = getelementptr inbounds nuw [102 x i8], ptr %54, i64 0, i64 %.06093 - store i8 %114, ptr %115, align 1, !tbaa !4 + %112 = load i8, ptr %spec.select.i.i, align 1, !tbaa !4 + %113 = getelementptr inbounds nuw [102 x i8], ptr %52, i64 0, i64 %.06093 + store i8 %112, ptr %113, align 1, !tbaa !4 call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %7) #3 - %116 = add i64 %.06093, 1 - %.not64 = icmp ugt i64 %116, %.059 + %114 = add i64 %.06093, 1 + %.not64 = icmp ugt i64 %114, %.059 br i1 %.not64, label %._crit_edge, label %.lr.ph.split, !llvm.loop !10 -117: ; preds = %11, %._crit_edge97, %18 - %.0 = phi i8 [ %19, %18 ], [ %34, %._crit_edge97 ], [ %8, %11 ] +115: ; preds = %11, %._crit_edge97, %18 + %.0 = phi i8 [ %19, %18 ], [ %32, %._crit_edge97 ], [ %8, %11 ] ret i8 %.0 } diff --git a/bench/coreutils-rs/optimized/505489it2i89bi1c.ll b/bench/coreutils-rs/optimized/505489it2i89bi1c.ll index 78d5376747c..8abb640e736 100644 --- a/bench/coreutils-rs/optimized/505489it2i89bi1c.ll +++ b/bench/coreutils-rs/optimized/505489it2i89bi1c.ll @@ -746,7 +746,7 @@ define hidden { i64, i8 } @_ZN5uu_wc4utf810Incomplete20try_complete_offsets17h99 %6 = load i8, ptr %5, align 1, !noundef !16 %7 = zext i8 %6 to i64 %8 = icmp ugt i8 %6, 4 - br i1 %8, label %15, label %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" + br i1 %8, label %13, label %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" "_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit": ; preds = %3 %9 = sub nuw nsw i64 4, %7 @@ -764,55 +764,55 @@ define hidden { i64, i8 } @_ZN5uu_wc4utf810Incomplete20try_complete_offsets17h99 "_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit": ; preds = %"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$15copy_from_slice17hd2e7cb0b2bdf2d0cE.exit" call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) call void @_ZN4core3str8converts9from_utf817hca39c4a07e0467cbE(ptr noalias noundef nonnull sret({ i64, [2 x i64] }) align 8 captures(none) dereferenceable(24) %4, ptr noalias noundef nonnull readonly align 1 %0, i64 noundef %11) - %14 = load i64, ptr %4, align 8, !range !110, !noundef !16 - %trunc = trunc nuw i64 %14 to i1 - br i1 %trunc, label %16, label %18 + %12 = load i64, ptr %4, align 8, !range !110, !noundef !16 + %trunc = trunc nuw i64 %12 to i1 + br i1 %trunc, label %14, label %16 -15: ; preds = %3 +13: ; preds = %3 tail call void @_ZN4core5slice5index26slice_start_index_len_fail17h6f35008186d11abeE(i64 noundef %7, i64 noundef 4, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.da842841755b59d00e4ceb51b0ca2ba9.27) #20 unreachable -16: ; preds = %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" - %17 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %.sroa.01.0.copyload = load i64, ptr %17, align 8 +14: ; preds = %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" + %15 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %.sroa.01.0.copyload = load i64, ptr %15, align 8 %.not = icmp eq i64 %.sroa.01.0.copyload, 0 - br i1 %.not, label %21, label %22 + br i1 %.not, label %19, label %20 -18: ; preds = %21, %24, %22, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" - %storemerge.in26 = phi i64 [ %11, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ %11, %21 ], [ %25, %24 ], [ %.sroa.01.0.copyload, %22 ] +16: ; preds = %19, %22, %20, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" + %storemerge.in26 = phi i64 [ %11, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ %11, %21 ], [ %23, %24 ], [ %.sroa.01.0.copyload, %22 ] %.sroa.5.0 = phi i8 [ 0, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ 2, %21 ], [ 1, %24 ], [ 0, %22 ] - %.sroa.0.0 = phi i64 [ %.0.sroa.speculated.i, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ %.0.sroa.speculated.i, %21 ], [ %26, %24 ], [ %23, %22 ] + %.sroa.0.0 = phi i64 [ %.0.sroa.speculated.i, %"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h38a936267d02964dE.llvm.3769632144542507335.exit" ], [ %.0.sroa.speculated.i, %21 ], [ %24, %24 ], [ %21, %22 ] %storemerge = trunc i64 %storemerge.in26 to i8 store i8 %storemerge, ptr %5, align 1 call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) - %19 = insertvalue { i64, i8 } poison, i64 %.sroa.0.0, 0 - %20 = insertvalue { i64, i8 } %19, i8 %.sroa.5.0, 1 - ret { i64, i8 } %20 + %17 = insertvalue { i64, i8 } poison, i64 %.sroa.0.0, 0 + %18 = insertvalue { i64, i8 } %17, i8 %.sroa.5.0, 1 + ret { i64, i8 } %18 -21: ; preds = %16 +19: ; preds = %14 %.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %4, i64 16 %.sroa.4.0.copyload = load i8, ptr %.sroa.4.0..sroa_idx, align 8 %trunc21 = trunc i8 %.sroa.4.0.copyload to i1 - br i1 %trunc21, label %24, label %18 + br i1 %trunc21, label %22, label %16 -22: ; preds = %16 - %23 = sub i64 %.sroa.01.0.copyload, %7 +20: ; preds = %14 + %21 = sub i64 %.sroa.01.0.copyload, %7 %.not32 = icmp ult i64 %.sroa.01.0.copyload, %7 - br i1 %.not32, label %28, label %18 + br i1 %.not32, label %26, label %16 -24: ; preds = %21 +22: ; preds = %19 %.sroa.52.0..sroa_idx = getelementptr inbounds nuw i8, ptr %4, i64 17 %.sroa.52.0.copyload = load i8, ptr %.sroa.52.0..sroa_idx, align 1 - %25 = zext i8 %.sroa.52.0.copyload to i64 - %26 = sub nsw i64 %25, %7 + %23 = zext i8 %.sroa.52.0.copyload to i64 + %24 = sub nsw i64 %23, %7 %.not33 = icmp ult i8 %.sroa.52.0.copyload, %6 - br i1 %.not33, label %27, label %18 + br i1 %.not33, label %25, label %16 -27: ; preds = %24 +25: ; preds = %22 tail call void @_ZN4core6option13unwrap_failed17hcb3a256a9f1ca882E(ptr noalias noundef readonly align 8 dereferenceable(24) @anon.da842841755b59d00e4ceb51b0ca2ba9.25) #20 unreachable -28: ; preds = %22 +26: ; preds = %20 tail call void @_ZN4core6option13unwrap_failed17hcb3a256a9f1ca882E(ptr noalias noundef readonly align 8 dereferenceable(24) @anon.da842841755b59d00e4ceb51b0ca2ba9.26) #20 unreachable } diff --git a/bench/darktable/optimized/Cr2Decompressor.ll b/bench/darktable/optimized/Cr2Decompressor.ll index 866214988b3..e35807ded3d 100644 --- a/bench/darktable/optimized/Cr2Decompressor.ll +++ b/bench/darktable/optimized/Cr2Decompressor.ll @@ -551,7 +551,7 @@ define weak_odr hidden void @_ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDec 40: ; preds = %_ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread183, %48, %38 %41 = landingpad { ptr, i32 } cleanup - br label %218 + br label %216 42: ; preds = %8 %43 = getelementptr inbounds nuw i8, ptr %35, i64 584 @@ -650,7 +650,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 83: ; preds = %.invoke, %._crit_edge240 %84 = landingpad { ptr, i32 } cleanup - br label %218 + br label %216 85: ; preds = %80 store i32 %82, ptr %22, align 4, !tbaa !125 @@ -731,7 +731,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 119: ; preds = %117 %120 = landingpad { ptr, i32 } cleanup - br label %218 + br label %216 121: ; preds = %109 %122 = load ptr, ptr %28, align 8, !tbaa !53 @@ -778,7 +778,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 140: ; preds = %138 %141 = landingpad { ptr, i32 } cleanup - br label %218 + br label %216 142: ; preds = %167 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #20 @@ -820,7 +820,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z %166 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #20 - br label %218 + br label %216 167: ; preds = %158 store i32 %162, ptr %159, align 4, !tbaa !13 @@ -896,7 +896,7 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z 189: ; preds = %.invoke267 %190 = landingpad { ptr, i32 } cleanup - br label %218 + br label %216 _ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exit.thread: ; preds = %.critedge.i, %180, %.lr.ph219 %191 = add nsw i32 %.0.i.i.i5.i, %.sroa.17106.sroa.0.0213 @@ -906,7 +906,7 @@ _ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exi %194 = select i1 %.not.i62, i1 %193, i1 false br i1 %194, label %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit, label %195 -195: ; preds = %_ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exit.thread +195:; preds = %_ZN8rawspeed12_GLOBAL__N_124evaluateConsecutiveTilesERKNS_12iRectangle2DES3_.exit.thread %196 = icmp slt i32 %.sroa.17106.sroa.0.0213, %150 %197 = icmp slt i32 %.sroa.17106.sroa.8.0214, %153 %198 = and i1 %196, %197 @@ -925,72 +925,72 @@ _ZN8rawspeed21Cr2OutputTileIteratorppEv.exit: ; preds = %_ZN8rawspeed12_GLOB %.sroa.073.sroa.8.0.insert.shift87 = shl nuw i64 %.sroa.073.sroa.8.0.insert.ext86, 32 %.sroa.073.sroa.0.0.insert.ext79 = zext i32 %.sroa.17106.sroa.0.0213 to i64 %.sroa.073.sroa.0.0.insert.insert81 = or disjoint i64 %.sroa.073.sroa.8.0.insert.shift87, %.sroa.073.sroa.0.0.insert.ext79 - %200 = add nsw i32 %.sroa.speculated.i, %.sroa.22.0212 - %201 = icmp sgt i32 %200, -1 - tail call void @llvm.assume(i1 %201) - %202 = icmp sle i32 %200, %146 - tail call void @llvm.assume(i1 %202) - %203 = icmp eq i32 %200, %146 - %spec.select = select i1 %203, i32 %174, i32 %.sroa.13.0211 - %spec.select194 = select i1 %203, i32 0, i32 %200 - %204 = icmp eq i32 %192, %153 - %205 = select i1 %204, i32 %.0.i.i.i5.i, i32 0 - %.sroa.17106.sroa.0.1 = add nsw i32 %205, %.sroa.17106.sroa.0.0213 - %.sroa.17106.sroa.8.1 = select i1 %204, i32 0, i32 %192 - %206 = icmp eq i32 %spec.select, %170 - %207 = icmp eq i32 %spec.select194, 0 - %208 = and i1 %206, %207 - br i1 %208, label %.loopexit.thread, label %.lr.ph219 + %198 = add nsw i32 %.sroa.speculated.i, %.sroa.22.0212 + %199 = icmp sgt i32 %198, -1 + tail call void @llvm.assume(i1 %199) + %200 = icmp sle i32 %198, %146 + tail call void @llvm.assume(i1 %200) + %201 = icmp eq i32 %198, %146 + %spec.select = select i1 %201, i32 %174, i32 %.sroa.13.0211 + %spec.select194 = select i1 %201, i32 0, i32 %198 + %202 = icmp eq i32 %192, %153 + %203 = select i1 %202, i32 %.0.i.i.i5.i, i32 0 + %.sroa.17106.sroa.0.1 = add nsw i32 %203, %.sroa.17106.sroa.0.0213 + %.sroa.17106.sroa.8.1 = select i1 %202, i32 0, i32 %192 + %204 = icmp eq i32 %spec.select, %170 + %205 = icmp eq i32 %spec.select194, 0 + %206 = and i1 %204, %205 + br i1 %206, label %.loopexit.thread, label %.lr.ph219 .loopexit: ; preds = %195 br i1 %.sroa.14.0217, label %.loopexit.thread, label %.invoke269 -209: ; preds = %.invoke269 - %210 = landingpad { ptr, i32 } +207: ; preds = %.invoke269 + %208 = landingpad { ptr, i32 } cleanup - br label %218 + br label %216 .loopexit.thread: ; preds = %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit, %.loopexit %.sroa.8.0201248 = phi i64 [ %.sroa.8.0216, %.loopexit ], [ %.sroa.3.8.insert.insert.i, %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit ] %.sroa.0126.0204247 = phi i64 [ %.sroa.0126.0215, %.loopexit ], [ %.sroa.073.sroa.0.0.insert.insert81, %_ZN8rawspeed21Cr2OutputTileIteratorppEv.exit ] - %211 = add i64 %.sroa.8.0201248, %.sroa.0126.0204247 + %209 = add i64 %.sroa.8.0201248, %.sroa.0126.0204247 %.sroa.0126.4.extract.shift130 = lshr i64 %.sroa.0126.0204247, 32 %.sroa.0126.4.extract.trunc131 = trunc nuw i64 %.sroa.0126.4.extract.shift130 to i32 %.sroa.8.12.extract.shift137 = lshr i64 %.sroa.8.0201248, 32 %.sroa.8.12.extract.trunc138 = trunc nuw i64 %.sroa.8.12.extract.shift137 to i32 - %212 = add nsw i32 %.sroa.8.12.extract.trunc138, %.sroa.0126.4.extract.trunc131 - %.sroa.0.0.extract.trunc = trunc i64 %211 to i32 - %213 = icmp eq i32 %150, %.sroa.0.0.extract.trunc - %214 = icmp eq i32 %212, %153 - %215 = select i1 %213, i1 %214, i1 false - br i1 %215, label %217, label %.invoke269 + %210 = add nsw i32 %.sroa.8.12.extract.trunc138, %.sroa.0126.4.extract.trunc131 + %.sroa.0.0.extract.trunc = trunc i64 %209 to i32 + %211 = icmp eq i32 %150, %.sroa.0.0.extract.trunc + %212 = icmp eq i32 %210, %153 + %213 = select i1 %211, i1 %212, i1 false + br i1 %213, label %215, label %.invoke269 .invoke269: ; preds = %.loopexit, %169, %.loopexit.thread - %216 = phi ptr [ @.str.16, %.loopexit.thread ], [ @.str.15, %169 ], [ @.str.15, %.loopexit ] - invoke void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_19RawDecoderExceptionEEEvPKcz(ptr noundef nonnull %216, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDecoderINS_15BaselineCodeTagENS_23PrefixCodeLookupDecoderIS2_EEEEEC2ENS_8RawImageESt5tupleIJiiiEENS_8iPoint2DENS_14Cr2SliceWidthsESt6vectorINS6_18PerComponentRecipeESaISD_EENS_10Array1DRefIKhEE) #14 - to label %.cont270 unwind label %209 + %214 = phi ptr [ @.str.16, %.loopexit.thread ], [ @.str.15, %169 ], [ @.str.15, %.loopexit ] + invoke void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_19RawDecoderExceptionEEEvPKcz(ptr noundef nonnull %214, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8rawspeed15Cr2DecompressorINS_20PrefixCodeLUTDecoderINS_15BaselineCodeTagENS_23PrefixCodeLookupDecoderIS2_EEEEEC2ENS_8RawImageESt5tupleIJiiiEENS_8iPoint2DENS_14Cr2SliceWidthsESt6vectorINS6_18PerComponentRecipeESaISD_EENS_10Array1DRefIKhEE) #14 + to label %.cont270 unwind label %207 .cont270: ; preds = %.invoke269 unreachable -217: ; preds = %.loopexit.thread +215: ; preds = %.loopexit.thread ret void -218: ; preds = %209, %189, %83, %119, %140, %165, %40 - %.pn56 = phi { ptr, i32 } [ %41, %40 ], [ %84, %83 ], [ %120, %119 ], [ %141, %140 ], [ %166, %165 ], [ %210, %209 ], [ %190, %189 ] - %219 = load ptr, ptr %26, align 8, !tbaa !50 - %.not.i.i.i = icmp eq ptr %219, null - br i1 %.not.i.i.i, label %_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit, label %220 - -220: ; preds = %218 - %221 = load ptr, ptr %31, align 8, !tbaa !54 - %222 = ptrtoint ptr %221 to i64 - %223 = ptrtoint ptr %219 to i64 - %224 = sub i64 %222, %223 - tail call void @_ZdlPvm(ptr noundef nonnull %219, i64 noundef %224) #21 +216: ; preds = %207, %189, %83, %119, %140, %165, %40 + %.pn56 = phi { ptr, i32 } [ %41, %40 ], [ %84, %83 ], [ %120, %119 ], [ %141, %140 ], [ %166, %165 ], [ %208, %209 ], [ %190, %189 ] + %217 = load ptr, ptr %26, align 8, !tbaa !50 + %.not.i.i.i = icmp eq ptr %217, null + br i1 %.not.i.i.i, label %_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit, label %218 + +218: ; preds = %216 + %219 = load ptr, ptr %31, align 8, !tbaa !54 + %220 = ptrtoint ptr %219 to i64 + %221 = ptrtoint ptr %217 to i64 + %222 = sub i64 %220, %221 + tail call void @_ZdlPvm(ptr noundef nonnull %217, i64 noundef %222) #21 br label %_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit -_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit: ; preds = %218, %220 +_ZNSt6vectorIN8rawspeed15Cr2DecompressorINS0_20PrefixCodeLUTDecoderINS0_15BaselineCodeTagENS0_23PrefixCodeLookupDecoderIS3_EEEEE18PerComponentRecipeESaIS8_EED2Ev.exit: ; preds = %216, %218 tail call void @_ZN8rawspeed8RawImageD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %0) #20 resume { ptr, i32 } %.pn56 } diff --git a/bench/darktable/optimized/PanasonicV4Decompressor.ll b/bench/darktable/optimized/PanasonicV4Decompressor.ll index d72f0e1c845..3552c4c7520 100644 --- a/bench/darktable/optimized/PanasonicV4Decompressor.ll +++ b/bench/darktable/optimized/PanasonicV4Decompressor.ll @@ -389,8 +389,8 @@ _ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit: br label %47 47: ; preds = %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit - %.0 = phi i32 [ 0, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %71, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] - %.018.i = phi i64 [ %15, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %100, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] + %.0 = phi i32 [ 0, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %69, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] + %48 = phi i64 [ %15, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit ], [ %97, %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i ] %48 = load i32, ptr %6, align 8, !tbaa !19, !noalias !122 %49 = load i32, ptr %8, align 8, !tbaa !23, !noalias !122 %50 = icmp samesign uge i32 %48, %49 @@ -409,15 +409,15 @@ _ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit: %57 = zext nneg i32 %49 to i64 %58 = zext nneg i32 %.sroa.speculated.i.i to i64 %59 = add nuw nsw i64 %58, %57 - %60 = zext nneg i32 %48 to i64 + %59 = zext nneg i32 %48 to i64 %.not.i.i.i.i.i.i = icmp samesign ugt i64 %59, %60 br i1 %.not.i.i.i.i.i.i, label %61, label %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" -61: ; preds = %47 +61:; preds = %47 tail call void (ptr, ...) @_ZN8rawspeed14ThrowExceptionINS_11IOExceptionEEEvPKcz(ptr noundef nonnull @.str.4, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK8rawspeed6Buffer10getSubViewEjj) #14, !noalias !125 unreachable -"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i": ; preds = %47 +"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i":; preds = %47 %62 = lshr exact i32 %.sroa.speculated.i.i, 4 %63 = mul nuw nsw i32 %62, 14 %64 = load ptr, ptr %5, align 8, !tbaa !15, !noalias !125, !nonnull !110, !noundef !110 @@ -430,118 +430,118 @@ _ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE7reserveEm.exit: %.sroa.4.8.insert.shift.i.i.i.i.i = shl nuw nsw i64 %.sroa.4.8.insert.ext.i.i.i.i.i, 32 %.sroa.2.8.insert.insert.i.i.i.i.i = or disjoint i64 %.sroa.4.8.insert.shift.i.i.i.i.i, %58 store i32 %65, ptr %8, align 8, !tbaa !23, !noalias !132 - %69 = urem i32 %.0, %4 - %70 = udiv i32 %.0, %4 - %.sroa.2.0.insert.ext.i.i.i = zext i32 %70 to i64 + %67 = urem i32 %.0, %4 + %68 = udiv i32 %.0, %4 + %.sroa.2.0.insert.ext.i.i.i = zext i32 %68 to i64 %.sroa.2.0.insert.shift.i.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i.i.i, 32 - %.sroa.0.0.insert.ext.i.i.i = zext i32 %69 to i64 + %.sroa.0.0.insert.ext.i.i.i = zext i32 %67 to i64 %.sroa.0.0.insert.insert.i.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i.i.i, %.sroa.0.0.insert.ext.i.i.i - %71 = add i32 %63, %.0 - %72 = urem i32 %71, %4 - %73 = udiv i32 %71, %4 - %.sroa.2.0.insert.ext.i12.i.i = zext i32 %73 to i64 + %69 = add i32 %63, %.0 + %70 = urem i32 %69, %4 + %71 = udiv i32 %69, %4 + %.sroa.2.0.insert.ext.i12.i.i = zext i32 %71 to i64 %.sroa.2.0.insert.shift.i13.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i12.i.i, 32 - %.sroa.0.0.insert.ext.i14.i.i = zext i32 %72 to i64 + %.sroa.0.0.insert.ext.i14.i.i = zext i32 %70 to i64 %.sroa.0.0.insert.insert.i15.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i13.i.i, %.sroa.0.0.insert.ext.i14.i.i - %74 = load ptr, ptr %46, align 8, !tbaa !115 + %72 = load ptr, ptr %46, align 8, !tbaa !115 %75 = load ptr, ptr %26, align 8, !tbaa !112 %.not.i.i.i.i6 = icmp eq ptr %74, %75 br i1 %.not.i.i.i.i6, label %79, label %76 -76: ; preds = %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" +73: ; preds = %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" store ptr %67, ptr %74, align 8 %.sroa.5.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 8 store i64 %.sroa.2.8.insert.insert.i.i.i.i.i, ptr %.sroa.5.0..sroa_idx.i, align 8 %.sroa.6.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 16 store i32 0, ptr %.sroa.6.0..sroa_idx.i, align 8 - %.sroa.712.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 24 - store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.712.0..sroa_idx.i, align 8 + %.sroa.711.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 24 + store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.711.0..sroa_idx.i, align 8 %.sroa.8.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %74, i64 32 store i64 %.sroa.0.0.insert.insert.i15.i.i, ptr %.sroa.8.0..sroa_idx.i, align 8 - %77 = load ptr, ptr %46, align 8, !tbaa !115 - %78 = getelementptr inbounds nuw i8, ptr %77, i64 40 - store ptr %78, ptr %46, align 8, !tbaa !115 + %74 = load ptr, ptr %46, align 8, !tbaa !115 + %75 = getelementptr inbounds nuw i8, ptr %74, i64 40 + store ptr %75, ptr %46, align 8, !tbaa !115 br label %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i -79: ; preds = %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" - %80 = load ptr, ptr %25, align 8, !tbaa !111 - %81 = ptrtoint ptr %74 to i64 - %82 = ptrtoint ptr %80 to i64 - %83 = sub i64 %81, %82 - %84 = icmp eq i64 %83, 9223372036854775800 - br i1 %84, label %85, label %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i - -85: ; preds = %79 +76: ; preds = %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" + %77 = load ptr, ptr %25, align 8, !tbaa !111 + %78 = ptrtoint ptr %74 to i64 + %79 = ptrtoint ptr %77 to i64 + %80 = sub i64 %78, %79 + %81 = icmp eq i64 %80, 9223372036854775800 + br i1 %81, label %82, label %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i + +82: ; preds = %76 tail call void @_ZSt20__throw_length_errorPKc(ptr noundef nonnull @.str.8) #25 unreachable -_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i: ; preds = %79 - %86 = sdiv exact i64 %83, 40 - %.sroa.speculated.i.i.i.i.i.i = tail call i64 @llvm.umax.i64(i64 %86, i64 1) - %87 = add nsw i64 %.sroa.speculated.i.i.i.i.i.i, %86 - %88 = icmp ult i64 %87, %86 - %89 = tail call i64 @llvm.umin.i64(i64 %87, i64 230584300921369395) - %90 = select i1 %88, i64 230584300921369395, i64 %89 - %.not.i.i.i.i.i3.i = icmp ne i64 %90, 0 - tail call void @llvm.assume(i1 %.not.i.i.i.i.i3.i) - %91 = mul nuw nsw i64 %90, 40 - %92 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %91) #26 - %93 = getelementptr inbounds nuw i8, ptr %92, i64 %83 - store ptr %67, ptr %93, align 8 - %.sroa.5.0..sroa_idx6.i = getelementptr inbounds nuw i8, ptr %93, i64 8 - store i64 %.sroa.2.8.insert.insert.i.i.i.i.i, ptr %.sroa.5.0..sroa_idx6.i, align 8 - %.sroa.6.0..sroa_idx8.i = getelementptr inbounds nuw i8, ptr %93, i64 16 - store i32 0, ptr %.sroa.6.0..sroa_idx8.i, align 8 - %.sroa.712.0..sroa_idx13.i = getelementptr inbounds nuw i8, ptr %93, i64 24 - store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.712.0..sroa_idx13.i, align 8 - %.sroa.8.0..sroa_idx15.i = getelementptr inbounds nuw i8, ptr %93, i64 32 - store i64 %.sroa.0.0.insert.insert.i15.i.i, ptr %.sroa.8.0..sroa_idx15.i, align 8 - %.not10.i.i.i.i.i.i.i.i = icmp eq ptr %80, %74 +_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i: ; preds = %76 + %83 = sdiv exact i64 %80, 40 + %.sroa.speculated.i.i.i.i.i.i = tail call i64 @llvm.umax.i64(i64 %83, i64 1) + %84 = add nsw i64 %.sroa.speculated.i.i.i.i.i.i, %83 + %85 = icmp ult i64 %84, %83 + %86 = tail call i64 @llvm.umin.i64(i64 %84, i64 230584300921369395) + %87 = select i1 %85, i64 230584300921369395, i64 %86 + %.not.i.i.i.i.i.i = icmp ne i64 %87, 0 + tail call void @llvm.assume(i1 %.not.i.i.i.i.i.i) + %88 = mul nuw nsw i64 %87, 40 + %89 = tail call noalias noundef nonnull ptr @_Znwm(i64 noundef %88) #26 + %90 = getelementptr inbounds nuw i8, ptr %89, i64 %80 + store ptr %67, ptr %90, align 8 + %.sroa.5.0..sroa_idx5.i = getelementptr inbounds nuw i8, ptr %90, i64 8 + store i64 %.sroa.2.8.insert.insert.i.i.i.i.i, ptr %.sroa.5.0..sroa_idx5.i, align 8 + %.sroa.6.0..sroa_idx7.i = getelementptr inbounds nuw i8, ptr %90, i64 16 + store i32 0, ptr %.sroa.6.0..sroa_idx7.i, align 8 + %.sroa.711.0..sroa_idx12.i = getelementptr inbounds nuw i8, ptr %90, i64 24 + store i64 %.sroa.0.0.insert.insert.i.i.i, ptr %.sroa.711.0..sroa_idx12.i, align 8 + %.sroa.8.0..sroa_idx14.i = getelementptr inbounds nuw i8, ptr %90, i64 32 + store i64 %.sroa.0.0.insert.insert.i15.i.i, ptr %.sroa.8.0..sroa_idx14.i, align 8 + %.not10.i.i.i.i.i.i.i.i = icmp eq ptr %77, %74 br i1 %.not10.i.i.i.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i .lr.ph.i.i.i.i.i.i.i.i: ; preds = %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i, %.lr.ph.i.i.i.i.i.i.i.i - %.012.i.i.i.i.i.i.i.i = phi ptr [ %95, %.lr.ph.i.i.i.i.i.i.i.i ], [ %92, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] - %.0911.i.i.i.i.i.i.i.i = phi ptr [ %94, %.lr.ph.i.i.i.i.i.i.i.i ], [ %80, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] + %.012.i.i.i.i.i.i.i.i = phi ptr [ %92, %.lr.ph.i.i.i.i.i.i.i.i ], [ %89, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] + %.0911.i.i.i.i.i.i.i.i = phi ptr [ %91, %.lr.ph.i.i.i.i.i.i.i.i ], [ %77, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ] tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %.012.i.i.i.i.i.i.i.i, ptr noundef nonnull align 8 dereferenceable(40) %.0911.i.i.i.i.i.i.i.i, i64 40, i1 false), !alias.scope !133 - %94 = getelementptr inbounds nuw i8, ptr %.0911.i.i.i.i.i.i.i.i, i64 40 - %95 = getelementptr inbounds nuw i8, ptr %.012.i.i.i.i.i.i.i.i, i64 40 - %.not.i.i.i.i.i.i.i.i = icmp eq ptr %94, %74 + %91 = getelementptr inbounds nuw i8, ptr %.0911.i.i.i.i.i.i.i.i, i64 40 + %92 = getelementptr inbounds nuw i8, ptr %.012.i.i.i.i.i.i.i.i, i64 40 + %.not.i.i.i.i.i.i.i.i = icmp eq ptr %91, %74 br i1 %.not.i.i.i.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i, label %.lr.ph.i.i.i.i.i.i.i.i, !llvm.loop !120 _ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i: ; preds = %.lr.ph.i.i.i.i.i.i.i.i, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i - %.0.lcssa.i.i.i.i.i.i.i.i = phi ptr [ %92, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ], [ %95, %.lr.ph.i.i.i.i.i.i.i.i ] - %96 = getelementptr inbounds nuw i8, ptr %.0.lcssa.i.i.i.i.i.i.i.i, i64 40 - %.not.i23.i.i.i.i.i = icmp eq ptr %80, null - br i1 %.not.i23.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, label %97 + %.0.lcssa.i.i.i.i.i.i.i.i = phi ptr [ %89, %_ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEmPKc.exit.i.i.i.i.i ], [ %92, %.lr.ph.i.i.i.i.i.i.i.i ] + %93 = getelementptr inbounds nuw i8, ptr %.0.lcssa.i.i.i.i.i.i.i.i, i64 40 + %.not.i23.i.i.i.i.i = icmp eq ptr %77, null + br i1 %.not.i23.i.i.i.i.i, label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, label %94 -97: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i - tail call void @_ZdlPvm(ptr noundef nonnull %80, i64 noundef %83) #23 +94: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i + tail call void @_ZdlPvm(ptr noundef nonnull %77, i64 noundef %80) #23 br label %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i -_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i: ; preds = %97, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i - store ptr %92, ptr %25, align 8, !tbaa !111 - store ptr %96, ptr %46, align 8, !tbaa !115 - %98 = getelementptr inbounds nuw %"struct.rawspeed::PanasonicV4Decompressor::Block", ptr %92, i64 %90 - store ptr %98, ptr %26, align 8, !tbaa !112 +_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i: ; preds = %94, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_.exit22.i.i.i.i.i + store ptr %89, ptr %25, align 8, !tbaa !111 + store ptr %93, ptr %46, align 8, !tbaa !115 + %95 = getelementptr inbounds nuw %"struct.rawspeed::PanasonicV4Decompressor::Block", ptr %89, i64 %87 + store ptr %95, ptr %26, align 8, !tbaa !112 br label %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i -_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, %76 - %99 = phi ptr [ %.0.lcssa.i.i.i.i.i.i.i.i, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i ], [ %77, %76 ] - %100 = add nsw i64 %.018.i, -1 - %.not.i7 = icmp eq i64 %100, 0 +_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i: ; preds = %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i, %73 + %96 = phi ptr [ %.0.lcssa.i.i.i.i.i.i.i.i, %_ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_.exit.i.i.i.i ], [ %77, %76 ] + %97 = add nsw i64 %.018.i, -1 + %.not.i7 = icmp eq i64 %97, 0 br i1 %.not.i7, label %"_ZSt10generate_nISt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS4_EEEmZNS3_19chopInputIntoBlocksEvE3$_0ET_S9_T0_T1_.exit", label %47, !llvm.loop !137 "_ZSt10generate_nISt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS4_EEEmZNS3_19chopInputIntoBlocksEvE3$_0ET_S9_T0_T1_.exit": ; preds = %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i - %101 = load ptr, ptr %0, align 8, !tbaa !6 - %102 = getelementptr inbounds nuw i8, ptr %101, i64 40 - %103 = getelementptr inbounds nuw i8, ptr %99, i64 32 - %104 = load i64, ptr %102, align 8 - store i64 %104, ptr %103, align 8 - %105 = load ptr, ptr %46, align 8, !tbaa !138 - %106 = getelementptr inbounds i8, ptr %105, i64 -4 - %107 = load i32, ptr %106, align 4, !tbaa !139 - %108 = add nsw i32 %107, -1 - store i32 %108, ptr %106, align 4, !tbaa !139 + %98 = load ptr, ptr %0, align 8, !tbaa !6 + %99 = getelementptr inbounds nuw i8, ptr %98, i64 40 + %100 = getelementptr inbounds nuw i8, ptr %96, i64 32 + %101 = load i64, ptr %99, align 8 + store i64 %101, ptr %100, align 8 + %102 = load ptr, ptr %46, align 8, !tbaa !138 + %103 = getelementptr inbounds i8, ptr %102, i64 -4 + %104 = load i32, ptr %103, align 4, !tbaa !139 + %105 = add nsw i32 %104, -1 + store i32 %105, ptr %103, align 4, !tbaa !139 ret void } diff --git a/bench/duckdb/optimized/format.ll b/bench/duckdb/optimized/format.ll index 6a0d576d9b3..fcd715e2f0b 100644 --- a/bench/duckdb/optimized/format.ll +++ b/bench/duckdb/optimized/format.ll @@ -30820,7 +30820,7 @@ _ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversion _ZSt6fill_nIPcicET_S1_T0_RKT1_.exit142.sink.split: ; preds = %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140, %86 %storemerge228.sink = phi i32 [ %storemerge228, %86 ], [ %100, %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140 ] - %.3.sink273 = phi ptr [ %.3, %86 ], [ %98, %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140 ] + %storemerge228.sink = phi ptr [ %.3, %86 ], [ %98, %_ZN10duckdb_fmt2v68internal8copy_strIcPKcPcTnNSt9enable_ifIXsr16needs_conversionIT0_T_EE5valueEiE4typeELi0EEET1_S7_S7_SB_.exit140 ] %102 = zext nneg i32 %storemerge228.sink to i64 %103 = getelementptr inbounds nuw i8, ptr %.3.sink273, i64 %102 tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %.3.sink273, i8 48, i64 %102, i1 false) diff --git a/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll b/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll index 2098fa53382..30443f0c05b 100644 --- a/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll +++ b/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll @@ -181,8 +181,8 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall .lr.ph: ; preds = %58, %67 %69 = phi i32 [ %68, %67 ], [ -4, %58 ] - %.sroa.0155.4.ph325 = phi i32 [ %62, %67 ], [ 0, %58 ] - %.sroa.25.5.ph324 = phi ptr [ %malloc, %67 ], [ null, %58 ] + %.sroa.0155.4.ph328 = phi i32 [ %62, %67 ], [ 0, %58 ] + %.sroa.25.5.ph327 = phi ptr [ %malloc, %67 ], [ null, %58 ] %70 = getelementptr inbounds nuw i8, ptr %0, i64 8 %71 = load i32, ptr @_hb_NullPool, align 16 %wide.trip.count = zext i32 %69 to i64 @@ -193,18 +193,18 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall br i1 %72, label %.lr.ph272, label %._crit_edge .lr.ph272: ; preds = %67, %.preheader - %.sroa.0155.1.lcssa331 = phi i32 [ %.sroa.0155.2, %.preheader ], [ %62, %67 ] - %.sroa.17.1.lcssa330 = phi i32 [ %.sroa.17.2, %.preheader ], [ 0, %67 ] - %.sroa.25.1.lcssa329 = phi ptr [ %.sroa.25.2, %.preheader ], [ %malloc, %67 ] + %.sroa.0155.1.lcssa334 = phi i32 [ %.sroa.0155.2, %.preheader ], [ %62, %67 ] + %.sroa.17.1.lcssa333 = phi i32 [ %.sroa.17.2, %.preheader ], [ 0, %67 ] + %.sroa.25.1.lcssa332 = phi ptr [ %.sroa.25.2, %.preheader ], [ %malloc, %67 ] %73 = phi i32 [ %69, %.preheader ], [ 0, %67 ] %74 = load i32, ptr @_hb_NullPool, align 16 br label %96 75: ; preds = %.lr.ph, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] - %.sroa.0155.1262 = phi i32 [ %.sroa.0155.4.ph325, %.lr.ph ], [ %.sroa.0155.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] + %.sroa.0155.1262 = phi i32 [ %.sroa.0155.4.ph328, %.lr.ph ], [ %.sroa.0155.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] %.sroa.17.1261 = phi i32 [ 0, %.lr.ph ], [ %.sroa.17.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] - %.sroa.25.1260 = phi ptr [ %.sroa.25.5.ph324, %.lr.ph ], [ %.sroa.25.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] + %.sroa.25.1260 = phi ptr [ %.sroa.25.5.ph327, %.lr.ph ], [ %.sroa.25.2, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit ] %76 = load ptr, ptr %70, align 8, !tbaa !22 %77 = getelementptr inbounds nuw %struct.contour_point_t, ptr %76, i64 %indvars.iv, i32 3 %78 = load i8, ptr %77, align 1, !tbaa !23, !range !27, !noundef !28 @@ -213,7 +213,7 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall 80: ; preds = %75 %.not.i48 = icmp slt i32 %.sroa.17.1261, %.sroa.0155.1262 - %.pre316 = add i32 %.sroa.17.1261, 1 + %.pre319 = add i32 %.sroa.17.1261, 1 br i1 %.not.i48, label %.critedge.i50, label %81 81: ; preds = %80 @@ -221,7 +221,7 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall br i1 %82, label %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i, label %83, !prof !14 83: ; preds = %81 - %.not.i.i49 = icmp ugt i32 %.pre316, %.sroa.0155.1262 + %.not.i.i49 = icmp ugt i32 %.pre319, %.sroa.0155.1262 br i1 %.not.i.i49, label %.preheader.i.i52, label %.critedge.i50, !prof !14 .preheader.i.i52: ; preds = %83, %.preheader.i.i52 @@ -229,7 +229,7 @@ _ZN11hb_vector_tIjLb0EE14realloc_vectorIjTnPN12hb_enable_ifIXsr3std28is_triviall %84 = lshr i32 %.11542.i.i53, 1 %85 = add i32 %.11542.i.i53, 8 %86 = add i32 %85, %84 - %87 = icmp ugt i32 %.pre316, %86 + %87 = icmp ugt i32 %.pre319, %86 br i1 %87, label %.preheader.i.i52, label %.thread.i.i, !llvm.loop !21 .thread.i.i: ; preds = %.preheader.i.i52 @@ -263,7 +263,7 @@ _ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i: ; preds = %_ZN11hb_vector_tIjL _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i, %75 %.sroa.25.2 = phi ptr [ %.sroa.25.1260, %75 ], [ %.sroa.25.6, %.critedge.i50 ], [ %.sroa.25.1260, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] - %.sroa.17.2 = phi i32 [ %.sroa.17.1261, %75 ], [ %.pre316, %.critedge.i50 ], [ %.sroa.17.1261, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] + %.sroa.17.2 = phi i32 [ %.sroa.17.1261, %75 ], [ %.pre319, %.critedge.i50 ], [ %.sroa.17.1261, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] %.sroa.0155.2 = phi i32 [ %.sroa.0155.1262, %75 ], [ %.sroa.0155.5, %.critedge.i50 ], [ %.sroa.0155.6, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i ] %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count @@ -278,11 +278,11 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN 96: ; preds = %.lr.ph272, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 %storemerge46271 = phi i32 [ %73, %.lr.ph272 ], [ %110, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] - %.sroa.0155.3270 = phi i32 [ %.sroa.0155.1.lcssa331, %.lr.ph272 ], [ %.sroa.0155.10, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] - %.sroa.17.3269 = phi i32 [ %.sroa.17.1.lcssa330, %.lr.ph272 ], [ %.sroa.17.5, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] - %.sroa.25.3267 = phi ptr [ %.sroa.25.1.lcssa329, %.lr.ph272 ], [ %.sroa.25.9, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] + %.sroa.0155.3270 = phi i32 [ %.sroa.0155.1.lcssa334, %.lr.ph272 ], [ %.sroa.0155.10, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] + %.sroa.17.3269 = phi i32 [ %.sroa.17.1.lcssa333, %.lr.ph272 ], [ %.sroa.17.5, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] + %.sroa.25.3267 = phi ptr [ %.sroa.25.1.lcssa332, %.lr.ph272 ], [ %.sroa.25.9, %_ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71 ] %.not.i56 = icmp slt i32 %.sroa.17.3269, %.sroa.0155.3270 - %.pre315 = add i32 %.sroa.17.3269, 1 + %.pre318 = add i32 %.sroa.17.3269, 1 br i1 %.not.i56, label %.critedge.i58, label %97 97: ; preds = %96 @@ -290,7 +290,7 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN br i1 %98, label %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70, label %99, !prof !14 99: ; preds = %97 - %.not.i.i57 = icmp ugt i32 %.pre315, %.sroa.0155.3270 + %.not.i.i57 = icmp ugt i32 %.pre318, %.sroa.0155.3270 br i1 %.not.i.i57, label %.preheader.i.i60, label %.critedge.i58, !prof !14 .preheader.i.i60: ; preds = %99, %.preheader.i.i60 @@ -298,7 +298,7 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit: ; preds = %.critedge.i50, %_ZN %100 = lshr i32 %.11542.i.i61, 1 %101 = add i32 %.11542.i.i61, 8 %102 = add i32 %101, %100 - %103 = icmp ugt i32 %.pre315, %102 + %103 = icmp ugt i32 %.pre318, %102 br i1 %103, label %.preheader.i.i60, label %.thread.i.i62, !llvm.loop !21 .thread.i.i62: ; preds = %.preheader.i.i60 @@ -331,7 +331,7 @@ _ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70: ; preds = %_ZN11hb_vector_tIj _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71: ; preds = %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70, %.critedge.i58 %.sroa.25.9 = phi ptr [ %.sroa.25.8, %.critedge.i58 ], [ %.sroa.25.3267, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] - %.sroa.17.5 = phi i32 [ %.pre315, %.critedge.i58 ], [ %.sroa.17.3269, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] + %.sroa.17.5 = phi i32 [ %.pre318, %.critedge.i58 ], [ %.sroa.17.3269, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] %.sroa.0155.10 = phi i32 [ %.sroa.0155.8, %.critedge.i58 ], [ %.sroa.0155.9, %_ZN11hb_vector_tIjLb0EE5allocEjb.exit.thread6.i70 ] %110 = add nuw i32 %storemerge46271, 1 %111 = icmp ult i32 %110, %59 @@ -407,7 +407,7 @@ _ZN11hb_vector_tIjLb0EE4pushIJRjEEEPjDpOT_.exit71: ; preds = %_ZN11hb_vector_tIj %174 = getelementptr inbounds nuw i8, ptr %28, i64 8 %175 = getelementptr inbounds nuw i8, ptr %30, i64 64 %.phi.trans.insert.i = getelementptr inbounds nuw i8, ptr %30, i64 36 - %.phi.trans.insert84.i = getelementptr inbounds nuw i8, ptr %30, i64 40 + %.phi.trans.insert86.i = getelementptr inbounds nuw i8, ptr %30, i64 40 %.sink.in.i.i.i.i.i.i = getelementptr inbounds nuw i8, ptr %30, i64 56 br label %176 @@ -809,17 +809,17 @@ _ZNK14hb_sparseset_tI23hb_bit_set_invertible_tE7get_maxEv.exit.i: ; preds = %327 338: ; preds = %.thread.i.i.i138 %339 = zext nneg i32 %335 to i64 %340 = mul nuw nsw i64 %339, 12 - %malloc318 = call ptr @malloc(i64 %340) - %.not21.i.i.i139 = icmp eq ptr %malloc318, null + %malloc321 = call ptr @malloc(i64 %340) + %.not21.i.i.i139 = icmp eq ptr %malloc321, null br i1 %.not21.i.i.i139, label %.sink.split, label %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140, !prof !18 _ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140: ; preds = %338 - store ptr %malloc318, ptr %134, align 8, !tbaa !22 + store ptr %malloc321, ptr %134, align 8, !tbaa !22 store i32 %335, ptr %17, align 8, !tbaa !60 br label %341 341: ; preds = %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140, %331 - %342 = phi ptr [ %malloc318, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140 ], [ null, %331 ] + %342 = phi ptr [ %malloc321, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i140 ], [ null, %331 ] store i32 %332, ptr %135, align 4, !tbaa !4 %343 = urem i32 %329, %.sroa.speculated.i.i %344 = zext nneg i32 %343 to i64 @@ -865,17 +865,17 @@ _ZL9hb_memcpyPvPKvm.exit.i133: ; preds = %346, %341 362: ; preds = %.thread.i.i.i122 %363 = shl nuw i32 %359, 2 %364 = zext i32 %363 to i64 - %malloc319 = call ptr @malloc(i64 %364) - %.not21.i.i.i123 = icmp eq ptr %malloc319, null + %malloc322 = call ptr @malloc(i64 %364) + %.not21.i.i.i123 = icmp eq ptr %malloc322, null br i1 %.not21.i.i.i123, label %.sink.split, label %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124, !prof !18 _ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124: ; preds = %362 - store ptr %malloc319, ptr %136, align 8, !tbaa !32 + store ptr %malloc322, ptr %136, align 8, !tbaa !32 store i32 %359, ptr %15, align 8, !tbaa !70 br label %365 365: ; preds = %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124, %356 - %366 = phi ptr [ %malloc319, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124 ], [ null, %356 ] + %366 = phi ptr [ %malloc322, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i124 ], [ null, %356 ] store i32 %332, ptr %137, align 4, !tbaa !35 %367 = shl i32 %343, 2 %.not.i.i116 = icmp eq i32 %367, 0 @@ -918,18 +918,18 @@ _ZL9hb_memcpyPvPKvm.exit.i117: ; preds = %368, %365 383: ; preds = %.thread.i.i.i112 %384 = shl nuw i32 %380, 2 %385 = zext i32 %384 to i64 - %malloc320 = call ptr @malloc(i64 %385) - %.not21.i.i.i113 = icmp eq ptr %malloc320, null + %malloc323 = call ptr @malloc(i64 %385) + %.not21.i.i.i113 = icmp eq ptr %malloc323, null br i1 %.not21.i.i.i113, label %.sink.split, label %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i, !prof !18 _ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i: ; preds = %383 - store ptr %malloc320, ptr %138, align 8, !tbaa !32 + store ptr %malloc323, ptr %138, align 8, !tbaa !32 store i32 %380, ptr %16, align 8, !tbaa !70 br label %386 386: ; preds = %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i, %377 %387 = phi i32 [ %380, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i ], [ 0, %377 ] - %388 = phi ptr [ %malloc320, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i ], [ null, %377 ] + %388 = phi ptr [ %malloc323, %_ZN11hb_vector_tIiLb0EE5allocEjb.exit.i.i ], [ null, %377 ] store i32 %332, ptr %139, align 4, !tbaa !35 br i1 %.not.i.i116, label %_ZL9hb_memcpyPvPKvm.exit.i, label %389, !prof !14 @@ -1167,9 +1167,9 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit159.i: ; preds = %465, %_ZN11hb_vecto %467 = shl i32 %.sroa.speculated.i.i, 1 %468 = call i32 @llvm.smax.i32(i32 %467, i32 0) %.not.i.i160.i = icmp slt i32 %467, 1 - br i1 %.not.i.i160.i, label %.thread88.i, label %.preheader.i.i.i, !prof !20 + br i1 %.not.i.i160.i, label %.thread90.i, label %.preheader.i.i.i, !prof !20 -.thread88.i: ; preds = %466 +.thread90.i: ; preds = %466 store i32 %468, ptr %154, align 4, !tbaa !35 store i32 %468, ptr %156, align 4, !tbaa !35 br label %_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i @@ -1214,12 +1214,12 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit159.i: ; preds = %465, %_ZN11hb_vecto 482: ; preds = %.thread.i.i166.i %483 = shl nuw i32 %479, 2 %484 = zext i32 %483 to i64 - %malloc86.i = call ptr @malloc(i64 %484) - %.not21.i.i167.i = icmp eq ptr %malloc86.i, null + %malloc88.i = call ptr @malloc(i64 %484) + %.not21.i.i167.i = icmp eq ptr %malloc88.i, null br i1 %.not21.i.i167.i, label %_ZN11hb_vector_tIiLb0EED2Ev.exit207.i, label %.preheader.i.i176.preheader.i, !prof !18 .preheader.i.i176.preheader.i: ; preds = %482 - store ptr %malloc86.i, ptr %155, align 8, !tbaa !32 + store ptr %malloc88.i, ptr %155, align 8, !tbaa !32 store i32 %479, ptr %26, align 8, !tbaa !70 store i32 %468, ptr %156, align 4, !tbaa !35 br label %.preheader.i.i176.i @@ -1239,19 +1239,19 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit159.i: ; preds = %465, %_ZN11hb_vecto 490: ; preds = %.thread.i.i178.i %491 = zext nneg i32 %487 to i64 %492 = mul nuw nsw i64 %491, 12 - %malloc87.i = call ptr @malloc(i64 %492) - %.not21.i.i179.i = icmp eq ptr %malloc87.i, null + %malloc89.i = call ptr @malloc(i64 %492) + %.not21.i.i179.i = icmp eq ptr %malloc89.i, null br i1 %.not21.i.i179.i, label %_ZN11hb_vector_tIiLb0EED2Ev.exit207.i, label %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i, !prof !18 _ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i: ; preds = %490 - store ptr %malloc87.i, ptr %157, align 8, !tbaa !22 + store ptr %malloc89.i, ptr %157, align 8, !tbaa !22 store i32 %487, ptr %27, align 8, !tbaa !60 br label %_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i -_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i: ; preds = %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i, %.thread88.i - %493 = phi ptr [ %malloc86.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] +_ZN11hb_vector_tI15contour_point_tLb0EE6resizeEibb.exit.i: ; preds = %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i, %.thread90.i + %493 = phi ptr [ %malloc88.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] %494 = phi ptr [ %malloc.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] - %495 = phi ptr [ %malloc87.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] + %495 = phi ptr [ %malloc89.i, %_ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i ], [ null, %.thread88.i ] store i32 %468, ptr %158, align 4, !tbaa !4 %496 = shl nuw nsw i64 %.sroa.3.8.insert.ext.i.i, 2 %497 = getelementptr inbounds nuw i32, ptr %494, i64 %.sroa.3.8.insert.ext.i.i @@ -1309,15 +1309,15 @@ _ZL9hb_memcpyPvPKvm.exit193.i: ; preds = %504, %_ZL9hb_memcpy br label %514 .preheader.loopexit.i: ; preds = %_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3setERKS1_.exit.i - %.pre80.pre.i = load i32, ptr %.phi.trans.insert.i, align 4, !tbaa !125 - %.pre81.pre.i = load ptr, ptr %.phi.trans.insert84.i, align 8, !tbaa !126 + %.pre82.pre.i = load i32, ptr %.phi.trans.insert.i, align 4, !tbaa !125 + %.pre83.pre.i = load ptr, ptr %.phi.trans.insert86.i, align 8, !tbaa !126 br label %.preheader.i99 .preheader.i99: ; preds = %.preheader.loopexit.i, %506 - %.pre81.i = phi ptr [ %.pre81.pre.i, %.preheader.loopexit.i ], [ null, %506 ] - %.pre80.i = phi i32 [ %.pre80.pre.i, %.preheader.loopexit.i ], [ 0, %506 ] - %.not4.i.i.i.i.i.i.i.i.i.i.i = icmp sgt i32 %.pre80.i, 0 - %513 = add nsw i32 %.pre80.i, -1 + %.pre83.i = phi ptr [ %.pre83.pre.i, %.preheader.loopexit.i ], [ null, %506 ] + %.pre82.i = phi i32 [ %.pre82.pre.i, %.preheader.loopexit.i ], [ 0, %506 ] + %.not4.i.i.i.i.i.i.i.i.i.i.i = icmp sgt i32 %.pre82.i, 0 + %513 = add nsw i32 %.pre82.i, -1 br label %570 514: ; preds = %_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3setERKS1_.exit.i, %.lr.ph48.i @@ -1392,18 +1392,18 @@ _ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3addEj.exit.i: ; preds = %528, %52 546: ; preds = %._crit_edge44.i %547 = icmp slt i32 %.0110.lcssa.i, 0 - %.pre79.i = load ptr, ptr %174, align 8, !tbaa !98 + %.pre81.i = load ptr, ptr %174, align 8, !tbaa !98 br i1 %547, label %552, label %548 548: ; preds = %546 %549 = zext nneg i32 %.0110.lcssa.i to i64 - %550 = getelementptr inbounds nuw i32, ptr %.pre79.i, i64 %549 + %550 = getelementptr inbounds nuw i32, ptr %.pre81.i, i64 %549 %551 = load i32, ptr %550, align 4, !tbaa !29 br label %552 552: ; preds = %548, %546 %553 = phi i32 [ %551, %548 ], [ 0, %546 ] - %554 = getelementptr inbounds i32, ptr %.pre79.i, i64 %indvars.iv70.i + %554 = getelementptr inbounds i32, ptr %.pre81.i, i64 %indvars.iv70.i %555 = load i32, ptr %554, align 4, !tbaa !29 %556 = sub i32 %555, %553 %.not131.i = icmp ugt i32 %556, %.011345.i @@ -1478,12 +1478,12 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit203.i: ; preds = %_ZN11hb_vector_tIiL %571 = trunc nuw i64 %indvars.iv74.i to i32 %572 = lshr i32 %571, 9 %573 = load atomic i32, ptr %162 monotonic, align 8 - %574 = icmp ult i32 %573, %.pre80.i + %574 = icmp ult i32 %573, %.pre82.i br i1 %574, label %575, label %._crit_edge.i.i.i.i.i.i.i, !prof !20 575: ; preds = %570 %576 = zext i32 %573 to i64 - %577 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre81.i, i64 %576 + %577 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre83.i, i64 %576 %578 = load i32, ptr %577, align 4, !tbaa !130 %.not.i.i.i.i.i.i.i = icmp eq i32 %578, %572 br i1 %.not.i.i.i.i.i.i.i, label %.thread.i.i.i.i.i.i.i, label %._crit_edge.i.i.i.i.i.i.i @@ -1502,7 +1502,7 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit203.i: ; preds = %_ZN11hb_vector_tIiL %581 = lshr i32 %580, 1 %582 = zext nneg i32 %581 to i64 %583 = shl nuw nsw i64 %582, 3 - %584 = getelementptr inbounds nuw i8, ptr %.pre81.i, i64 %583 + %584 = getelementptr inbounds nuw i8, ptr %.pre83.i, i64 %583 %585 = load i32, ptr %584, align 4, !tbaa !130 %586 = icmp slt i32 %572, %585 br i1 %586, label %587, label %589 @@ -1527,7 +1527,7 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit203.i: ; preds = %_ZN11hb_vector_tIiL _ZNK11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE5bfindIS1_Lb1ETnPN12hb_enable_ifIXT0_EvE4typeELPv0EEEbRKT_Pj14hb_not_found_tj.exit.i.i.i.i.i.i.i: ; preds = %589 store atomic i32 %581, ptr %162 monotonic, align 8 - %593 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre81.i, i64 %582, i32 1 + %593 = getelementptr inbounds nuw %"struct.hb_bit_set_t::page_map_t", ptr %.pre83.i, i64 %582, i32 1 br label %_ZNK12hb_bit_set_t8page_forEj.exit.i.i.i.i.i.i _ZNK12hb_bit_set_t8page_forEj.exit.i.i.i.i.i.i: ; preds = %_ZNK11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE5bfindIS1_Lb1ETnPN12hb_enable_ifIXT0_EvE4typeELPv0EEEbRKT_Pj14hb_not_found_tj.exit.i.i.i.i.i.i.i, %.thread.i.i.i.i.i.i.i @@ -1571,7 +1571,7 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit207.thread.i: ; preds = %474, %.thread.i.i.i br label %_ZN11hb_vector_tIiLb0EED2Ev.exit209.i _ZN11hb_vector_tIiLb0EED2Ev.exit207.i: ; preds = %490, %.thread.i.i178.i, %482, %.thread.i.i166.i - %.ph.i = phi ptr [ null, %482 ], [ null, %.thread.i.i166.i ], [ %malloc86.i, %.thread.i.i178.i ], [ %malloc86.i, %490 ] + %.ph.i = phi ptr [ null, %482 ], [ null, %.thread.i.i166.i ], [ %malloc88.i, %.thread.i.i178.i ], [ %malloc88.i, %490 ] call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #11 call void @free(ptr noundef %.ph.i) #11 br label %_ZN11hb_vector_tIiLb0EED2Ev.exit209.i @@ -1590,14 +1590,14 @@ _ZN11hb_vector_tIiLb0EED2Ev.exit209.i: ; preds = %_ZN11hb_vector_tIiL .sink.split: ; preds = %362, %.thread.i.i.i122, %383, %.thread.i.i.i112, %338, %.thread.i.i.i138 %.sink.sink = phi ptr [ %17, %.thread.i.i.i138 ], [ %17, %338 ], [ %15, %362 ], [ %15, %.thread.i.i.i122 ], [ %16, %383 ], [ %16, %.thread.i.i.i112 ] - %.ph360 = phi ptr [ null, %.thread.i.i.i138 ], [ null, %338 ], [ %342, %362 ], [ %342, %.thread.i.i.i122 ], [ %342, %383 ], [ %342, %.thread.i.i.i112 ] + %.ph363 = phi ptr [ null, %.thread.i.i.i138 ], [ null, %338 ], [ %342, %362 ], [ %342, %.thread.i.i.i122 ], [ %342, %383 ], [ %342, %.thread.i.i.i112 ] store i32 -1, ptr %.sink.sink, align 8, !tbaa !29 call void @_ZN14hb_sparseset_tI23hb_bit_set_invertible_tED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18) #11 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %18) #11 br label %610 610: ; preds = %.sink.split, %.critedge134.critedge.i - %611 = phi ptr [ %342, %.critedge134.critedge.i ], [ %.ph360, %.sink.split ] + %611 = phi ptr [ %342, %.critedge134.critedge.i ], [ %.ph363, %.sink.split ] call void @free(ptr noundef %611) #11 %.pre = load i32, ptr %16, align 8, !tbaa !70 br label %_ZN11hb_vector_tI15contour_point_tLb0EED2Ev.exit211.i diff --git a/bench/icu/optimized/alphaindex.ll b/bench/icu/optimized/alphaindex.ll index 961709976ce..b78865378e5 100644 --- a/bench/icu/optimized/alphaindex.ll +++ b/bench/icu/optimized/alphaindex.ll @@ -2605,7 +2605,7 @@ define void @_ZNK6icu_7715AlphabeticIndex10initLabelsERNS_7UVectorER10UErrorCode %10 = tail call noundef ptr @_ZN6icu_7711Normalizer215getNFKDInstanceER10UErrorCode(ptr noundef nonnull align 4 dereferenceable(4) %2) %11 = load i32, ptr %2, align 4, !tbaa !40 %12 = icmp slt i32 %11, 1 - br i1 %12, label %13, label %265 + br i1 %12, label %13, label %261 13: ; preds = %3 %14 = getelementptr inbounds nuw i8, ptr %0, i64 48 @@ -2744,7 +2744,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit: ; preds = 87: ; preds = %_ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit %88 = icmp slt i32 %86, 0 - br i1 %88, label %229, label %89 + br i1 %88, label %225, label %89 89: ; preds = %87 %90 = load ptr, ptr %26, align 8, !tbaa !46 @@ -2753,7 +2753,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit: ; preds = 92: ; preds = %89 %93 = icmp sgt i32 %91, -1 - br i1 %93, label %229, label %94 + br i1 %93, label %225, label %94 94: ; preds = %92 br i1 %.not91, label %.critedge101.thread, label %95 @@ -2772,7 +2772,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEE12adoptInsteadEPS1_.exit: ; preds = %99 = icmp eq i32 %98, 0 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %9) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #16 - br i1 %99, label %229, label %.critedge101.thread + br i1 %99, label %225, label %.critedge101.thread 100: ; preds = %95 %101 = landingpad { ptr, i32 } @@ -2896,7 +2896,7 @@ _ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1 138: ; preds = %_ZN6icu_7712_GLOBAL__N_112binarySearchERKNS_7UVectorERKNS_13UnicodeStringERKNS_8CollatorE.exit %139 = invoke noundef ptr @_ZNK6icu_777UVector9elementAtEi(ptr noundef nonnull align 8 dereferenceable(40) %1, i32 noundef %.2.ph.i) - to label %_ZN6icu_7712_GLOBAL__N_19getStringERKNS_7UVectorEi.exit unwind label %227 + to label %_ZN6icu_7712_GLOBAL__N_19getStringERKNS_7UVectorEi.exit unwind label %223 _ZN6icu_7712_GLOBAL__N_19getStringERKNS_7UVectorEi.exit: ; preds = %138 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #16 @@ -2936,7 +2936,7 @@ _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit.i: ; _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i: ; preds = %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit.i %152 = load i32, ptr %4, align 4, !tbaa !40 %153 = icmp slt i32 %152, 1 - br i1 %153, label %154, label %215 + br i1 %153, label %154, label %211 154: ; preds = %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i %155 = invoke noundef i32 @_ZNK6icu_7713UnicodeString11countChar32Eii(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef 0, i32 noundef 2147483647) @@ -2953,7 +2953,7 @@ _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i: 159: ; preds = %158 %160 = icmp slt i32 %155, %157 %161 = zext i1 %160 to i8 - br label %215 + br label %211 162: ; preds = %.sink.split.i.i.i23.i, %.sink.split.i.i.i.i, %156, %154 %163 = landingpad { ptr, i32 } @@ -2999,37 +2999,37 @@ _ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i: _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i: ; preds = %.sink.split.i.i.i.i, %168 %.0.i.i.i = phi i8 [ %171, %168 ], [ %187, %.sink.split.i.i.i.i ] %.not17.i = icmp eq i8 %.0.i.i.i, 0 - br i1 %.not17.i, label %189, label %188 + br i1 %.not17.i, label %187, label %186 -188: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i +186: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i %.lobit19.i = lshr i8 %.0.i.i.i, 7 - br label %215 + br label %211 -189: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i - %190 = getelementptr inbounds nuw i8, ptr %139, i64 8 - %191 = load i16, ptr %190, align 8, !tbaa !39 - %192 = and i16 %191, 1 - %.not.i.i21.i = icmp eq i16 %192, 0 +187: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i + %188 = getelementptr inbounds nuw i8, ptr %139, i64 8 + %189 = load i16, ptr %188, align 8, !tbaa !39 + %190 = and i16 %189, 1 + %.not.i.i21.i = icmp eq i16 %190, 0 br i1 %.not.i.i21.i, label %.sink.split.i.i.i23.i, label %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i -.sink.split.i.i.i23.i: ; preds = %189 - %193 = getelementptr inbounds nuw i8, ptr %.076, i64 8 - %194 = load i16, ptr %193, align 8, !tbaa !39 - %195 = icmp slt i16 %191, 0 - %196 = getelementptr inbounds nuw i8, ptr %139, i64 12 - %197 = load i32, ptr %196, align 4 - %198 = ashr i16 %191, 5 - %199 = sext i16 %198 to i32 - %200 = select i1 %195, i32 %197, i32 %199 - %201 = icmp slt i16 %194, 0 - %202 = getelementptr inbounds nuw i8, ptr %.076, i64 12 - %203 = load i32, ptr %202, align 4 - %204 = ashr i16 %194, 5 - %205 = sext i16 %204 to i32 - %206 = select i1 %201, i32 %203, i32 %205 - %spec.select.i.i24.i = call i32 @llvm.smin.i32(i32 %200, i32 0) - %207 = icmp slt i32 %200, 0 - %208 = sub nsw i32 %200, %spec.select.i.i24.i +.sink.split.i.i.i23.i: ; preds = %187 + %191 = getelementptr inbounds nuw i8, ptr %.076, i64 8 + %192 = load i16, ptr %191, align 8, !tbaa !39 + %193 = icmp slt i16 %189, 0 + %194 = getelementptr inbounds nuw i8, ptr %139, i64 12 + %195 = load i32, ptr %194, align 4 + %196 = ashr i16 %189, 5 + %197 = sext i16 %196 to i32 + %198 = select i1 %193, i32 %195, i32 %197 + %199 = icmp slt i16 %192, 0 + %200 = getelementptr inbounds nuw i8, ptr %.076, i64 12 + %201 = load i32, ptr %200, align 4 + %202 = ashr i16 %192, 5 + %203 = sext i16 %202 to i32 + %204 = select i1 %199, i32 %201, i32 %203 + %spec.select.i.i24.i = call i32 @llvm.smin.i32(i32 %198, i32 0) + %207 = icmp slt i32 %198, 0 + %208 = sub nsw i32 %198, %spec.select.i.i24.i %spec.select13.i.i25.i = call i32 @llvm.smin.i32(i32 %200, i32 %208) %.010.i.i26.i = select i1 %207, i32 0, i32 %spec.select13.i.i25.i %209 = and i16 %191, 2 @@ -3044,7 +3044,7 @@ _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i: ; preds = %.sink _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i: ; preds = %.sink.split.i.i.i23.i, %189 %.0.i.i22.i = phi i8 [ %214, %.sink.split.i.i.i23.i ], [ 0, %189 ] %.lobit.i = lshr i8 %.0.i.i22.i, 7 - br label %215 + br label %211 .body.i: ; preds = %162, %150 %.pn.i = phi { ptr, i32 } [ %163, %162 ], [ %151, %150 ] @@ -3055,7 +3055,7 @@ _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i: ; preds = %.si call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #16 br label %.body -215: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i, %188, %159, %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i +211: ; preds = %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i, %186, %159, %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i %.013.i = phi i8 [ 0, %_ZNK6icu_7711Normalizer29normalizeERKNS_13UnicodeStringER10UErrorCode.exit20.i ], [ %161, %159 ], [ %.lobit19.i, %188 ], [ %.lobit.i, %_ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #16 @@ -3063,140 +3063,140 @@ _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit29.i: ; preds = %.si call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #16 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #16 %.not93 = icmp eq i8 %.013.i, 0 - br i1 %.not93, label %229, label %216 + br i1 %.not93, label %225, label %212 -216: ; preds = %215 - %217 = load i32, ptr %2, align 4, !tbaa !40 - %218 = icmp slt i32 %217, 1 - br i1 %218, label %219, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 +212: ; preds = %211 + %213 = load i32, ptr %2, align 4, !tbaa !40 + %214 = icmp slt i32 %213, 1 + br i1 %214, label %215, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 -219: ; preds = %216 +215: ; preds = %212 %.not.i113 = icmp eq ptr %.sroa.0.1, null - br i1 %.not.i113, label %220, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 + br i1 %.not.i113, label %216, label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 -220: ; preds = %219 - %221 = call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #16 - %222 = icmp eq ptr %221, null - br i1 %222, label %224, label %223 +216: ; preds = %215 + %217 = call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #16 + %218 = icmp eq ptr %217, null + br i1 %218, label %220, label %219 -223: ; preds = %220 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %221, ptr noundef nonnull align 8 dereferenceable(64) %.076) - to label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 unwind label %225 +219: ; preds = %216 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %217, ptr noundef nonnull align 8 dereferenceable(64) %.076) + to label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 unwind label %221 -224: ; preds = %220 +220: ; preds = %216 store i32 7, ptr %2, align 4, !tbaa !40 br label %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 -225: ; preds = %223 - %226 = landingpad { ptr, i32 } +221: ; preds = %219 + %222 = landingpad { ptr, i32 } cleanup - call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %221) #16 + call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %217) #16 br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118 -_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116: ; preds = %224, %223, %216, %219 +_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116: ; preds = %220, %219, %212, %215 %.sroa.0.10 = phi ptr [ null, %224 ], [ null, %223 ], [ %.sroa.0.1, %216 ], [ null, %219 ] - %.0.i112 = phi ptr [ null, %224 ], [ %221, %223 ], [ null, %216 ], [ %.sroa.0.1, %219 ] + %.0.i112 = phi ptr [ null, %224 ], [ %217, %223 ], [ null, %216 ], [ %.sroa.0.1, %219 ] invoke void @_ZN6icu_777UVector12setElementAtEPvi(ptr noundef nonnull align 8 dereferenceable(40) %1, ptr noundef %.0.i112, i32 noundef %.2.ph.i) - to label %229 unwind label %227 + to label %229 unwind label %223 -227: ; preds = %138, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 +223: ; preds = %138, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 %.sroa.0.5 = phi ptr [ %.sroa.0.10, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 ], [ %.sroa.0.1, %138 ] - %228 = landingpad { ptr, i32 } + %224 = landingpad { ptr, i32 } cleanup br label %.body -229: ; preds = %87, %.critedge101, %92, %215, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit +225: ; preds = %87, %.critedge101, %92, %211, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit %.sroa.0.3 = phi ptr [ %.sroa.0.1, %87 ], [ %.sroa.0.1, %92 ], [ %.sroa.0.1, %.critedge101 ], [ %.sroa.0.7, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit ], [ %.sroa.0.1, %215 ], [ %.sroa.0.10, %_ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1_EER10UErrorCode.exit116 ] - %230 = icmp eq ptr %.sroa.0.3, null - br i1 %230, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, label %231 + %226 = icmp eq ptr %.sroa.0.3, null + br i1 %226, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, label %227 -231: ; preds = %229 - %232 = load ptr, ptr %.sroa.0.3, align 8, !tbaa !3 - %233 = getelementptr inbounds nuw i8, ptr %232, i64 8 - %234 = load ptr, ptr %233, align 8 +227: ; preds = %225 + %228 = load ptr, ptr %.sroa.0.3, align 8, !tbaa !3 + %229 = getelementptr inbounds nuw i8, ptr %228, i64 8 + %230 = load ptr, ptr %229, align 8 call void %234(ptr noundef nonnull align 8 dereferenceable(64) %.sroa.0.3) #16 br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117 -_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %229, %231 - %235 = load i32, ptr %2, align 4, !tbaa !40 - %236 = icmp sgt i32 %235, 0 - br i1 %236, label %.loopexit, label %34, !llvm.loop !85 +_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %225, %227 + %231 = load i32, ptr %2, align 4, !tbaa !40 + %232 = icmp sgt i32 %231, 0 + br i1 %232, label %.loopexit, label %34, !llvm.loop !85 -.body: ; preds = %.loopexit133, %.loopexit.split-lp, %.body.i, %144, %227, %104, %54 +.body: ; preds = %.loopexit133, %.loopexit.split-lp, %.body.i, %144, %223, %104, %54 %.sroa.0.2 = phi ptr [ %.sroa.0.1, %104 ], [ %.sroa.0.0, %54 ], [ %.sroa.0.1, %.body.i ], [ %.sroa.0.1, %144 ], [ %.sroa.0.5, %227 ], [ %.sroa.0.1, %.loopexit133 ], [ %.sroa.0.7, %.loopexit.split-lp ] - %.pn94.pn = phi { ptr, i32 } [ %.pn, %104 ], [ %55, %54 ], [ %.pn.i, %.body.i ], [ %145, %144 ], [ %228, %227 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] - %237 = icmp eq ptr %.sroa.0.2, null - br i1 %237, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118, label %238 - -238: ; preds = %.body - %239 = load ptr, ptr %.sroa.0.2, align 8, !tbaa !3 - %240 = getelementptr inbounds nuw i8, ptr %239, i64 8 - %241 = load ptr, ptr %240, align 8 + %.pn94.pn = phi { ptr, i32 } [ %.pn, %104 ], [ %55, %54 ], [ %.pn.i, %.body.i ], [ %145, %144 ], [ %224, %227 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] + %233 = icmp eq ptr %.sroa.0.2, null + br i1 %233, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118, label %234 + +234: ; preds = %.body + %235 = load ptr, ptr %.sroa.0.2, align 8, !tbaa !3 + %236 = getelementptr inbounds nuw i8, ptr %235, i64 8 + %237 = load ptr, ptr %236, align 8 call void %241(ptr noundef nonnull align 8 dereferenceable(64) %.sroa.0.2) #16 br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118 .critedge: ; preds = %36 %.pre.pre = load i32, ptr %2, align 4, !tbaa !40 - %242 = icmp slt i32 %.pre.pre, 1 - br i1 %242, label %243, label %.loopexit - -243: ; preds = %.critedge - %244 = getelementptr inbounds nuw i8, ptr %1, i64 8 - %245 = load i32, ptr %244, align 8, !tbaa !18 - %246 = add nsw i32 %245, -1 - %247 = getelementptr inbounds nuw i8, ptr %0, i64 32 - %248 = load i32, ptr %247, align 8, !tbaa !38 - %249 = icmp sgt i32 %246, %248 - %250 = icmp sgt i32 %245, 0 - %or.cond = and i1 %249, %250 + %238 = icmp slt i32 %.pre.pre, 1 + br i1 %238, label %239, label %.loopexit + +239: ; preds = %.critedge + %240 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %241 = load i32, ptr %240, align 8, !tbaa !18 + %242 = add nsw i32 %241, -1 + %243 = getelementptr inbounds nuw i8, ptr %0, i64 32 + %244 = load i32, ptr %243, align 8, !tbaa !38 + %245 = icmp sgt i32 %242, %244 + %246 = icmp sgt i32 %241, 0 + %or.cond = and i1 %245, %246 br i1 %or.cond, label %.lr.ph158, label %.loopexit -.lr.ph158: ; preds = %243, %262 - %251 = phi i32 [ %263, %262 ], [ %245, %243 ] +.lr.ph158: ; preds = %239, %258 + %247 = phi i32 [ %259, %262 ], [ %241, %243 ] %.064157 = phi i32 [ %.1, %262 ], [ 0, %243 ] %.065156 = phi i32 [ %.166, %262 ], [ -1, %243 ] - %.067155 = phi i32 [ %252, %262 ], [ 0, %243 ] - %252 = add nuw nsw i32 %.067155, 1 - %253 = load i32, ptr %247, align 8, !tbaa !38 - %254 = mul nsw i32 %253, %252 - %255 = sdiv i32 %254, %246 - %256 = icmp eq i32 %255, %.065156 - br i1 %256, label %257, label %260 - -257: ; preds = %.lr.ph158 + %.067155 = phi i32 [ %248, %262 ], [ 0, %243 ] + %248 = add nuw nsw i32 %.067155, 1 + %249 = load i32, ptr %243, align 8, !tbaa !38 + %250 = mul nsw i32 %249, %248 + %251 = sdiv i32 %250, %242 + %252 = icmp eq i32 %251, %.065156 + br i1 %252, label %253, label %256 + +253: ; preds = %.lr.ph158 invoke void @_ZN6icu_777UVector15removeElementAtEi(ptr noundef nonnull align 8 dereferenceable(40) %1, i32 noundef %.064157) - to label %._crit_edge unwind label %258 + to label %._crit_edge unwind label %254 -._crit_edge: ; preds = %257 - %.pre180 = load i32, ptr %244, align 8, !tbaa !18 - br label %262 +._crit_edge: ; preds = %253 + %.pre180 = load i32, ptr %240, align 8, !tbaa !18 + br label %258 -258: ; preds = %257 - %259 = landingpad { ptr, i32 } +254: ; preds = %253 + %255 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118 -260: ; preds = %.lr.ph158 - %261 = add nsw i32 %.064157, 1 - br label %262 +256: ; preds = %.lr.ph158 + %257 = add nsw i32 %.064157, 1 + br label %258 -262: ; preds = %._crit_edge, %260 - %263 = phi i32 [ %.pre180, %._crit_edge ], [ %251, %260 ] - %.166 = phi i32 [ %.065156, %._crit_edge ], [ %255, %260 ] - %.1 = phi i32 [ %.064157, %._crit_edge ], [ %261, %260 ] - %264 = icmp slt i32 %.1, %263 - br i1 %264, label %.lr.ph158, label %.loopexit, !llvm.loop !86 +258: ; preds = %._crit_edge, %256 + %259 = phi i32 [ %.pre180, %._crit_edge ], [ %247, %260 ] + %.166 = phi i32 [ %.065156, %._crit_edge ], [ %251, %260 ] + %.1 = phi i32 [ %.064157, %._crit_edge ], [ %257, %260 ] + %260 = icmp slt i32 %.1, %259 + br i1 %260, label %.lr.ph158, label %.loopexit, !llvm.loop !86 -.loopexit: ; preds = %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, %262, %13, %243, %.critedge, %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit +.loopexit: ; preds = %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, %258, %13, %239, %.critedge, %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit call void @_ZN6icu_7718UnicodeSetIteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #16 - br label %265 + br label %261 -265: ; preds = %3, %.loopexit +261: ; preds = %3, %.loopexit ret void -_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118: ; preds = %225, %135, %83, %.body, %238, %52, %258, %50 - %.pn94.pn.pn.pn.pn = phi { ptr, i32 } [ %259, %258 ], [ %51, %50 ], [ %53, %52 ], [ %.pn94.pn, %.body ], [ %.pn94.pn, %238 ], [ %226, %225 ], [ %136, %135 ], [ %84, %83 ] +_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118: ; preds = %221, %135, %83, %.body, %234, %52, %254, %50 + %.pn94.pn.pn.pn.pn = phi { ptr, i32 } [ %255, %258 ], [ %51, %50 ], [ %53, %52 ], [ %.pn94.pn, %.body ], [ %.pn94.pn, %238 ], [ %222, %225 ], [ %136, %135 ], [ %84, %83 ] call void @_ZN6icu_7718UnicodeSetIteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #16 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #16 resume { ptr, i32 } %.pn94.pn.pn.pn.pn diff --git a/bench/icu/optimized/collationsets.ll b/bench/icu/optimized/collationsets.ll index d92bcc7a275..934d8d5909f 100644 --- a/bench/icu/optimized/collationsets.ll +++ b/bench/icu/optimized/collationsets.ll @@ -746,24 +746,24 @@ define void @_ZN6icu_7711TailoredSet15comparePrefixesEiPKDsS2_(ptr noundef nonnu cleanup %30 = load ptr, ptr %6, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %30) #9, !srcloc !46 - br label %103 + br label %101 31: ; preds = %11 %32 = landingpad { ptr, i32 } cleanup %33 = load ptr, ptr %8, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %33) #9, !srcloc !46 - br label %102 + br label %100 34: ; preds = %13 %35 = landingpad { ptr, i32 } cleanup - br label %101 + br label %99 36: ; preds = %40, %25 %37 = landingpad { ptr, i32 } cleanup - br label %100 + br label %98 38: ; preds = %27, %23 %.123 = phi ptr [ %.022, %23 ], [ %spec.select, %27 ] @@ -783,7 +783,7 @@ define void @_ZN6icu_7711TailoredSet15comparePrefixesEiPKDsS2_(ptr noundef nonnu %44 = icmp eq ptr %.123, %9 %45 = icmp eq ptr %.120, %9 %or.cond = and i1 %44, %45 - br i1 %or.cond, label %99, label %.thread + br i1 %or.cond, label %97, label %.thread .thread: ; preds = %42, %43 %.12042 = phi ptr [ %.120, %43 ], [ %16, %42 ] @@ -799,7 +799,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread %51 = trunc i16 %47 to i8 %52 = and i8 %51, 1 %53 = xor i8 %52, 1 - br label %80 + br label %78 .sink.split.i.i.i: ; preds = %.thread %54 = icmp slt i16 %49, 0 @@ -829,66 +829,66 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %78 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %.sink.split.i.i.i - %74 = icmp slt i8 %73, 0 - br i1 %74, label %75, label %80 + %72 = icmp slt i8 %73, 0 + br i1 %72, label %73, label %78 -75: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %76 = load ptr, ptr %0, align 8, !tbaa !16 - %77 = load i32, ptr %22, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %76, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef %1, i32 noundef %77) - to label %.backedge unwind label %78 +73: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %74 = load ptr, ptr %0, align 8, !tbaa !16 + %75 = load i32, ptr %22, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %74, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef %1, i32 noundef %75) + to label %.backedge unwind label %76 -78: ; preds = %.noexc37, %84, %.sink.split.i.i.i, %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit, %81, %75 - %79 = landingpad { ptr, i32 } +76: ; preds = %.noexc37, %82, %.sink.split.i.i.i, %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit, %79, %73 + %77 = landingpad { ptr, i32 } cleanup - br label %100 + br label %98 -80: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit +78: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit %.0.i.i44 = phi i8 [ %53, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %73, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] %.not32 = icmp eq i8 %.0.i.i44, 0 - br i1 %.not32, label %84, label %81 - -81: ; preds = %80 - %82 = load ptr, ptr %17, align 8, !tbaa !27 - %83 = load i32, ptr %18, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %82, ptr noundef nonnull align 8 dereferenceable(64) %.12042, i32 noundef %1, i32 noundef %83) - to label %.backedge unwind label %78 - -84: ; preds = %80 - %85 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %19, ptr noundef nonnull align 8 dereferenceable(64) %.123) - to label %.noexc37 unwind label %78 - -.noexc37: ; preds = %84 - %86 = load i16, ptr %20, align 8, !tbaa !57 - %87 = icmp slt i16 %86, 0 - %88 = ashr i16 %86, 5 - %89 = sext i16 %88 to i32 - %90 = load i32, ptr %21, align 4 - %91 = select i1 %87, i32 %90, i32 %89 - %92 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString9doReverseEii(ptr noundef nonnull align 8 dereferenceable(64) %19, i32 noundef 0, i32 noundef %91) - to label %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit unwind label %78 + br i1 %.not32, label %82, label %79 + +79: ; preds = %78 + %80 = load ptr, ptr %17, align 8, !tbaa !27 + %81 = load i32, ptr %18, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet9addPrefixEPKNS_13CollationDataERKNS_13UnicodeStringEij(ptr noundef nonnull align 8 dereferenceable(100) %0, ptr noundef %80, ptr noundef nonnull align 8 dereferenceable(64) %.12042, i32 noundef %1, i32 noundef %81) + to label %.backedge unwind label %76 + +82: ; preds = %78 + %83 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %19, ptr noundef nonnull align 8 dereferenceable(64) %.123) + to label %.noexc37 unwind label %76 + +.noexc37: ; preds = %82 + %84 = load i16, ptr %20, align 8, !tbaa !57 + %85 = icmp slt i16 %84, 0 + %86 = ashr i16 %84, 5 + %87 = sext i16 %86 to i32 + %88 = load i32, ptr %21, align 4 + %89 = select i1 %85, i32 %88, i32 %87 + %90 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString9doReverseEii(ptr noundef nonnull align 8 dereferenceable(64) %19, i32 noundef 0, i32 noundef %89) + to label %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit unwind label %76 _ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit: ; preds = %.noexc37 - %93 = load i32, ptr %22, align 4, !tbaa !47 - %94 = load i32, ptr %18, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %93, i32 noundef %94) - to label %95 unwind label %78 - -95: ; preds = %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit - %96 = load i16, ptr %20, align 8, !tbaa !57 - %97 = and i16 %96, 1 - %.not.i.i39 = icmp eq i16 %97, 0 - %98 = and i16 %96, 30 - %storemerge.i.i = select i1 %.not.i.i39, i16 %98, i16 2 + %91 = load i32, ptr %22, align 4, !tbaa !47 + %92 = load i32, ptr %18, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %91, i32 noundef %92) + to label %93 unwind label %76 + +93: ; preds = %_ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit + %94 = load i16, ptr %20, align 8, !tbaa !57 + %95 = and i16 %94, 1 + %.not.i.i39 = icmp eq i16 %95, 0 + %96 = and i16 %94, 30 + %storemerge.i.i = select i1 %.not.i.i39, i16 %96, i16 2 store i16 %storemerge.i.i, ptr %20, align 8, !tbaa !57 br label %.backedge -.backedge: ; preds = %95, %81, %75 - %.022.be = phi ptr [ null, %75 ], [ %.123, %81 ], [ null, %95 ] - %.019.be = phi ptr [ %.12042, %75 ], [ null, %81 ], [ null, %95 ] +.backedge: ; preds = %93, %79, %73 + %.022.be = phi ptr [ null, %75 ], [ %.123, %79 ], [ null, %93 ] + %.019.be = phi ptr [ %.12042, %75 ], [ null, %79 ], [ null, %93 ] br label %23, !llvm.loop !58 -99: ; preds = %43 +97: ; preds = %43 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %9) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #9 @@ -897,25 +897,25 @@ _ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit: ; preds = %.noexc3 call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #9 ret void -100: ; preds = %78, %36 - %.pn = phi { ptr, i32 } [ %79, %78 ], [ %37, %36 ] +98: ; preds = %76, %36 + %.pn = phi { ptr, i32 } [ %77, %76 ], [ %37, %36 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %9) #9 - br label %101 + br label %99 -101: ; preds = %100, %34 - %.pn.pn = phi { ptr, i32 } [ %.pn, %100 ], [ %35, %34 ] +99: ; preds = %98, %34 + %.pn.pn = phi { ptr, i32 } [ %.pn, %98 ], [ %35, %34 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #9 - br label %102 + br label %100 -102: ; preds = %101, %31 - %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %101 ], [ %32, %31 ] +100: ; preds = %99, %31 + %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %99 ], [ %32, %31 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %7) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #9 - br label %103 + br label %101 -103: ; preds = %102, %28 - %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %102 ], [ %29, %28 ] +101: ; preds = %100, %28 + %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %100 ], [ %29, %28 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #9 resume { ptr, i32 } %.pn.pn.pn.pn } @@ -1042,19 +1042,19 @@ _ZN6icu_7713UnicodeString6appendEDs.exit: ; preds = %18 cleanup %34 = load ptr, ptr %9, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %34) #9, !srcloc !46 - br label %116 + br label %114 35: ; preds = %14 %36 = landingpad { ptr, i32 } cleanup %37 = load ptr, ptr %11, align 8, !tbaa !44 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %37) #9, !srcloc !46 - br label %115 + br label %113 38: ; preds = %16 %39 = landingpad { ptr, i32 } cleanup - br label %114 + br label %112 .loopexit: ; preds = %29, %42 %lpad.loopexit = landingpad { ptr, i32 } @@ -1084,7 +1084,7 @@ _ZN6icu_7713UnicodeString6appendEDs.exit: ; preds = %18 %46 = icmp eq ptr %.123, %12 %47 = icmp eq ptr %.120, %12 %or.cond = and i1 %46, %47 - br i1 %or.cond, label %113, label %.thread + br i1 %or.cond, label %111, label %.thread .thread: ; preds = %44, %45 %.12045 = phi ptr [ %.120, %45 ], [ %21, %44 ] @@ -1100,7 +1100,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread %53 = trunc i16 %49 to i8 %54 = and i8 %53, 1 %55 = xor i8 %54, 1 - br label %93 + br label %91 .sink.split.i.i.i: ; preds = %.thread %56 = icmp slt i16 %51, 0 @@ -1130,35 +1130,35 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread: ; preds = %.thread to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit unwind label %91 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %.sink.split.i.i.i - %76 = icmp slt i8 %75, 0 - br i1 %76, label %77, label %93 + %74 = icmp slt i8 %73, 0 + br i1 %74, label %75, label %91 -77: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %78 = load ptr, ptr %22, align 8, !tbaa !38 +75: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %76 = load ptr, ptr %22, align 8, !tbaa !38 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #9 invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %6, ptr noundef nonnull align 8 dereferenceable(64) %23) - to label %.noexc37 unwind label %91 - -.noexc37: ; preds = %77 - %79 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %6, i32 noundef %1) - to label %80 unwind label %89 - -80: ; preds = %.noexc37 - %81 = load i16, ptr %48, align 8, !tbaa !57 - %82 = icmp slt i16 %81, 0 - %83 = ashr i16 %81, 5 - %84 = sext i16 %83 to i32 - %85 = load i32, ptr %63, align 4 - %86 = select i1 %82, i32 %85, i32 %84 - %87 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %79, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %86) - to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i unwind label %89 - -_ZN6icu_7713UnicodeString6appendERKS0_.exit.i: ; preds = %80 - %88 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %78, ptr noundef nonnull align 8 dereferenceable(64) %87) - to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit unwind label %89 - -89: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i, %80, %.noexc37 - %90 = landingpad { ptr, i32 } + to label %.noexc37 unwind label %89 + +.noexc37: ; preds = %75 + %77 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %6, i32 noundef %1) + to label %80 unwind label %87 + +78: ; preds = %.noexc37 + %79 = load i16, ptr %48, align 8, !tbaa !57 + %80 = icmp slt i16 %79, 0 + %81 = ashr i16 %79, 5 + %82 = sext i16 %81 to i32 + %83 = load i32, ptr %63, align 4 + %84 = select i1 %80, i32 %83, i32 %82 + %85 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %77, ptr noundef nonnull align 8 dereferenceable(64) %.123, i32 noundef 0, i32 noundef %84) + to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i unwind label %87 + +_ZN6icu_7713UnicodeString6appendERKS0_.exit.i: ; preds = %78 + %86 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %76, ptr noundef nonnull align 8 dereferenceable(64) %85) + to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit unwind label %87 + +87: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i, %78, %.noexc37 + %88 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #9 @@ -1169,43 +1169,43 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit: ; preds = %_ZN6ic call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #9 br label %.backedge -91: ; preds = %94, %77, %.sink.split.i.i.i, %109 - %92 = landingpad { ptr, i32 } +89: ; preds = %92, %75, %.sink.split.i.i.i, %107 + %90 = landingpad { ptr, i32 } cleanup br label %.body -93: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0.i.i47 = phi i8 [ %55, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %75, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] +91: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %.0.i.i47 = phi i8 [ %55, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %73, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] %.not32 = icmp eq i8 %.0.i.i47, 0 - br i1 %.not32, label %109, label %94 + br i1 %.not32, label %107, label %92 -94: ; preds = %93 - %95 = load ptr, ptr %22, align 8, !tbaa !38 +92: ; preds = %91 + %93 = load ptr, ptr %22, align 8, !tbaa !38 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #9 invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %5, ptr noundef nonnull align 8 dereferenceable(64) %23) - to label %.noexc39 unwind label %91 - -.noexc39: ; preds = %94 - %96 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef %1) - to label %97 unwind label %107 - -97: ; preds = %.noexc39 - %98 = load i16, ptr %50, align 8, !tbaa !57 - %99 = icmp slt i16 %98, 0 - %100 = ashr i16 %98, 5 - %101 = sext i16 %100 to i32 - %102 = getelementptr inbounds nuw i8, ptr %.12045, i64 12 - %103 = load i32, ptr %102, align 4 - %104 = select i1 %99, i32 %103, i32 %101 - %105 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %96, ptr noundef nonnull align 8 dereferenceable(64) %.12045, i32 noundef 0, i32 noundef %104) - to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38 unwind label %107 - -_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38: ; preds = %97 - %106 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %95, ptr noundef nonnull align 8 dereferenceable(64) %105) - to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 unwind label %107 - -107: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38, %97, %.noexc39 - %108 = landingpad { ptr, i32 } + to label %.noexc39 unwind label %89 + +.noexc39: ; preds = %92 + %94 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString6appendEi(ptr noundef nonnull align 8 dereferenceable(64) %5, i32 noundef %1) + to label %95 unwind label %105 + +95: ; preds = %.noexc39 + %96 = load i16, ptr %50, align 8, !tbaa !57 + %97 = icmp slt i16 %96, 0 + %98 = ashr i16 %96, 5 + %99 = sext i16 %98 to i32 + %100 = getelementptr inbounds nuw i8, ptr %.12045, i64 12 + %101 = load i32, ptr %100, align 4 + %102 = select i1 %97, i32 %101, i32 %99 + %103 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendERKS0_ii(ptr noundef nonnull align 8 dereferenceable(64) %94, ptr noundef nonnull align 8 dereferenceable(64) %.12045, i32 noundef 0, i32 noundef %102) + to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38 unwind label %105 + +_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38: ; preds = %95 + %104 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZN6icu_7710UnicodeSet3addERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(200) %93, ptr noundef nonnull align 8 dereferenceable(64) %103) + to label %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 unwind label %105 + +105: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit.i38, %95, %.noexc39 + %106 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #9 @@ -1216,23 +1216,23 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #9 br label %.backedge -.backedge: ; preds = %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit, %112 +.backedge: ; preds = %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit, %110 %.022.be = phi ptr [ null, %112 ], [ null, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit ], [ %.123, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 ] %.019.be = phi ptr [ null, %112 ], [ %.12045, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit ], [ null, %_ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42 ] br label %27, !llvm.loop !59 -109: ; preds = %93 +107: ; preds = %91 store ptr %.123, ptr %24, align 8, !tbaa !60 - %110 = load i32, ptr %25, align 4, !tbaa !47 - %111 = load i32, ptr %26, align 4, !tbaa !47 - invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %110, i32 noundef %111) - to label %112 unwind label %91 + %108 = load i32, ptr %25, align 4, !tbaa !47 + %109 = load i32, ptr %26, align 4, !tbaa !47 + invoke void @_ZN6icu_7711TailoredSet7compareEijj(ptr noundef nonnull align 8 dereferenceable(100) %0, i32 noundef %1, i32 noundef %108, i32 noundef %109) + to label %112 unwind label %89 -112: ; preds = %109 +110: ; preds = %107 store ptr null, ptr %24, align 8, !tbaa !60 br label %.backedge -113: ; preds = %45 +111: ; preds = %45 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #9 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %10) #9 @@ -1241,24 +1241,24 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #9 ret void -.body: ; preds = %.loopexit, %.loopexit.split-lp, %89, %107, %91 - %.pn = phi { ptr, i32 } [ %90, %89 ], [ %92, %91 ], [ %108, %107 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] +.body: ; preds = %.loopexit, %.loopexit.split-lp, %87, %105, %89 + %.pn = phi { ptr, i32 } [ %88, %87 ], [ %90, %89 ], [ %106, %107 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #9 - br label %114 + br label %112 -114: ; preds = %.body, %38 +112: ; preds = %.body, %38 %.pn.pn = phi { ptr, i32 } [ %.pn, %.body ], [ %39, %38 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %10) #9 - br label %115 + br label %113 -115: ; preds = %114, %35 +113: ; preds = %112, %35 %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %114 ], [ %36, %35 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %10) #9 call void @_ZN6icu_7710UCharsTrie8IteratorD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #9 - br label %116 + br label %114 -116: ; preds = %115, %32 +114: ; preds = %113, %32 %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %115 ], [ %33, %32 ] call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #9 resume { ptr, i32 } %.pn.pn.pn.pn diff --git a/bench/icu/optimized/dtptngen.ll b/bench/icu/optimized/dtptngen.ll index 37298a131ad..a7d7e7ac01a 100644 --- a/bench/icu/optimized/dtptngen.ll +++ b/bench/icu/optimized/dtptngen.ll @@ -9081,8 +9081,8 @@ _ZNK6icu_7710PatternMap9getHeaderEDs.exit: ; preds = %_ZNK6icu_7713Unicod %26 = icmp eq ptr %.0.i, null br i1 %26, label %_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread, label %.preheader -.preheader: ; preds = %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %59 - %.0 = phi ptr [ %61, %59 ], [ %.0.i, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ] +.preheader: ; preds = %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %57 + %.0 = phi ptr [ %59, %59 ], [ %.0.i, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ] %27 = load i16, ptr %4, align 8, !tbaa !17 %28 = getelementptr inbounds nuw i8, ptr %.0, i64 16 %29 = load i16, ptr %28, align 8, !tbaa !17 @@ -9124,24 +9124,24 @@ _ZNK6icu_7710PatternMap9getHeaderEDs.exit: ; preds = %_ZNK6icu_7713Unicod _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %31, %.sink.split.i.i.i %.0.i.i13 = phi i8 [ %34, %31 ], [ %53, %.sink.split.i.i.i ] - %54 = icmp eq i8 %.0.i.i13, 0 - br i1 %54, label %55, label %59 - -55: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %56 = getelementptr inbounds nuw i8, ptr %.0, i64 144 - %57 = load i8, ptr %56, align 8, !tbaa !58 - store i8 %57, ptr %2, align 1, !tbaa !17 - %58 = getelementptr inbounds nuw i8, ptr %.0, i64 80 + %52 = icmp eq i8 %.0.i.i13, 0 + br i1 %52, label %53, label %57 + +53: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %54 = getelementptr inbounds nuw i8, ptr %.0, i64 144 + %55 = load i8, ptr %54, align 8, !tbaa !58 + store i8 %55, ptr %2, align 1, !tbaa !17 + %56 = getelementptr inbounds nuw i8, ptr %.0, i64 80 br label %_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread -59: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %60 = getelementptr inbounds nuw i8, ptr %.0, i64 152 - %61 = load ptr, ptr %60, align 8, !tbaa !63 - %.not = icmp eq ptr %61, null +57: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %58 = getelementptr inbounds nuw i8, ptr %.0, i64 152 + %59 = load ptr, ptr %58, align 8, !tbaa !63 + %.not = icmp eq ptr %59, null br i1 %.not, label %_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread, label %.preheader, !llvm.loop !160 -_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread: ; preds = %59, %3, %20, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %55 - %.010 = phi ptr [ %58, %55 ], [ null, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ], [ null, %20 ], [ null, %3 ], [ null, %59 ] +_ZNK6icu_7710PatternMap9getHeaderEDs.exit.thread: ; preds = %57, %3, %20, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit, %53 + %.010 = phi ptr [ %56, %55 ], [ null, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ], [ null, %20 ], [ null, %3 ], [ null, %59 ] ret ptr %.010 } @@ -9429,7 +9429,7 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R br label %84 84: ; preds = %.thread.i, %.preheader24.i - %.017.i = phi ptr [ %123, %.thread.i ], [ %.061, %.preheader24.i ] + %.017.i = phi ptr [ %121, %.thread.i ], [ %.061, %.preheader24.i ] %85 = load i16, ptr %7, align 8, !tbaa !17 %86 = getelementptr inbounds nuw i8, ptr %.017.i, i64 16 %87 = load i16, ptr %86, align 8, !tbaa !17 @@ -9471,184 +9471,184 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R _ZNK6icu_7713UnicodeString7compareERKS0_.exit.i: ; preds = %.sink.split.i.i.i.i, %89 %.0.i.i.i = phi i8 [ %92, %89 ], [ %111, %.sink.split.i.i.i.i ] - %112 = icmp eq i8 %.0.i.i.i, 0 - br i1 %112, label %.preheader.i, label %.thread.i + %110 = icmp eq i8 %.0.i.i.i, 0 + br i1 %110, label %.preheader.i, label %.thread.i .preheader.i: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.i - %113 = getelementptr inbounds nuw i8, ptr %.017.i, i64 72 - %114 = load ptr, ptr %113, align 8, !tbaa !55 - %115 = getelementptr inbounds nuw i8, ptr %114, i64 8 - br label %117 + %111 = getelementptr inbounds nuw i8, ptr %.017.i, i64 72 + %112 = load ptr, ptr %111, align 8, !tbaa !55 + %113 = getelementptr inbounds nuw i8, ptr %112, i64 8 + br label %115 -116: ; preds = %117 +114: ; preds = %115 %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, 16 - br i1 %exitcond.not.i, label %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, label %117, !llvm.loop !161 + br i1 %exitcond.not.i, label %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, label %115, !llvm.loop !161 -117: ; preds = %116, %.preheader.i +115: ; preds = %114, %.preheader.i %indvars.iv.i = phi i64 [ 0, %.preheader.i ], [ %indvars.iv.next.i, %116 ] - %118 = getelementptr inbounds nuw [16 x i32], ptr %115, i64 0, i64 %indvars.iv.i + %116 = getelementptr inbounds nuw [16 x i32], ptr %113, i64 0, i64 %indvars.iv.i %119 = load i32, ptr %118, align 4, !tbaa !12 %120 = getelementptr inbounds nuw [16 x i32], ptr %83, i64 0, i64 %indvars.iv.i %121 = load i32, ptr %120, align 4, !tbaa !12 %.not.i = icmp eq i32 %119, %121 br i1 %.not.i, label %116, label %.thread.i -.thread.i: ; preds = %117, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.i - %122 = getelementptr inbounds nuw i8, ptr %.017.i, i64 152 - %123 = load ptr, ptr %122, align 8, !tbaa !63 - %.not22.i = icmp eq ptr %123, null +.thread.i: ; preds = %115, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.i + %120 = getelementptr inbounds nuw i8, ptr %.017.i, i64 152 + %121 = load ptr, ptr %120, align 8, !tbaa !63 + %.not22.i = icmp eq ptr %121, null br i1 %.not22.i, label %.preheader, label %84, !llvm.loop !162 .preheader: ; preds = %.thread.i, %.preheader - %.0 = phi ptr [ %125, %.preheader ], [ %.061, %.thread.i ] - %124 = getelementptr inbounds nuw i8, ptr %.0, i64 152 - %125 = load ptr, ptr %124, align 8, !tbaa !63 - %.not = icmp eq ptr %125, null - br i1 %.not, label %126, label %.preheader, !llvm.loop !163 - -126: ; preds = %.preheader - %127 = getelementptr inbounds nuw i8, ptr %.0, i64 152 - %128 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 160) #35 - %129 = icmp eq ptr %128, null - br i1 %129, label %131, label %130 - -130: ; preds = %126 - invoke void @_ZN6icu_777PtnElemC1ERKNS_13UnicodeStringES3_(ptr noundef nonnull align 8 dereferenceable(160) %128, ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(64) %3) - to label %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 unwind label %136 - -131: ; preds = %126 - %132 = load i32, ptr %5, align 4 - %133 = icmp sgt i32 %132, 0 - br i1 %133, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %134 - -134: ; preds = %131 + %.0 = phi ptr [ %123, %.preheader ], [ %.061, %.thread.i ] + %122 = getelementptr inbounds nuw i8, ptr %.0, i64 152 + %123 = load ptr, ptr %122, align 8, !tbaa !63 + %.not = icmp eq ptr %123, null + br i1 %.not, label %124, label %.preheader, !llvm.loop !163 + +124: ; preds = %.preheader + %125 = getelementptr inbounds nuw i8, ptr %.0, i64 152 + %126 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 160) #35 + %127 = icmp eq ptr %126, null + br i1 %127, label %129, label %128 + +128: ; preds = %124 + invoke void @_ZN6icu_777PtnElemC1ERKNS_13UnicodeStringES3_(ptr noundef nonnull align 8 dereferenceable(160) %126, ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(64) %3) + to label %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 unwind label %134 + +129: ; preds = %124 + %130 = load i32, ptr %5, align 4 + %131 = icmp sgt i32 %130, 0 + br i1 %131, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %132 + +132: ; preds = %129 store i32 7, ptr %5, align 4, !tbaa !13 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89: ; preds = %130 +_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89: ; preds = %128 %.pre = load i32, ptr %5, align 4, !tbaa !13 - %135 = icmp slt i32 %.pre, 1 - br i1 %135, label %138, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread + %133 = icmp slt i32 %.pre, 1 + br i1 %133, label %136, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread -136: ; preds = %130 - %137 = landingpad { ptr, i32 } +134: ; preds = %128 + %135 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %128) #35 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %126) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit -138: ; preds = %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 - %139 = getelementptr inbounds nuw i8, ptr %128, i64 72 - %140 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 144) #35 - %141 = icmp eq ptr %140, null - br i1 %141, label %.thread120, label %142 +136: ; preds = %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 + %137 = getelementptr inbounds nuw i8, ptr %126, i64 72 + %138 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 144) #35 + %139 = icmp eq ptr %138, null + br i1 %139, label %.thread120, label %140 -142: ; preds = %138 +141: ; preds = %138 invoke void @_ZN6icu_7711PtnSkeletonC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(137) %140, ptr noundef nonnull align 8 dereferenceable(137) %2) to label %143 unwind label %162 -143: ; preds = %142 +.thread120: ; preds = %142 %144 = load i32, ptr %5, align 4, !tbaa !13 %145 = icmp sgt i32 %144, 0 br i1 %145, label %157, label %148 -.thread120: ; preds = %138 - %146 = load i32, ptr %5, align 4, !tbaa !13 - %147 = icmp sgt i32 %146, 0 - br i1 %147, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, label %148 +146: ; preds = %138 + %147 = load i32, ptr %5, align 4, !tbaa !13 + %148 = icmp sgt i32 %147, 0 + br i1 %148, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, label %149 -148: ; preds = %.thread120, %143 - %149 = load ptr, ptr %139, align 8, !tbaa !55 - %150 = icmp eq ptr %149, null +149: ; preds = %146, %143 + %150 = load ptr, ptr %137, align 8, !tbaa !55 + %150 = icmp eq ptr %150, null br i1 %150, label %155, label %151 -151: ; preds = %148 +151:; preds = %148 %152 = load ptr, ptr %149, align 8, !tbaa !15 %153 = getelementptr inbounds nuw i8, ptr %152, i64 8 %154 = load ptr, ptr %153, align 8 tail call void %154(ptr noundef nonnull align 8 dereferenceable(137) %149) #35 br label %155 -155: ; preds = %151, %148 - store ptr %140, ptr %139, align 8, !tbaa !55 - br i1 %141, label %156, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 +153: ; preds = %151, %148 + store ptr %138, ptr %137, align 8, !tbaa !55 + br i1 %139, label %154, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 -156: ; preds = %155 +154: ; preds = %153 store i32 7, ptr %5, align 4, !tbaa !13 br label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread -157: ; preds = %143 - %158 = load ptr, ptr %140, align 8, !tbaa !15 - %159 = getelementptr inbounds nuw i8, ptr %158, i64 8 - %160 = load ptr, ptr %159, align 8 - tail call void %160(ptr noundef nonnull align 8 dereferenceable(137) %140) #35 +155: ; preds = %143 + %156 = load ptr, ptr %138, align 8, !tbaa !15 + %157 = getelementptr inbounds nuw i8, ptr %156, i64 8 + %158 = load ptr, ptr %157, align 8 + tail call void %160(ptr noundef nonnull align 8 dereferenceable(137) %138) #35 br label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 -_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90: ; preds = %155, %157 +_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90: ; preds = %153, %155 %.pr129 = load i32, ptr %5, align 4, !tbaa !13 - %161 = icmp slt i32 %.pr129, 1 - br i1 %161, label %.critedge85, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread + %159 = icmp slt i32 %.pr129, 1 + br i1 %159, label %.critedge85, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread -162: ; preds = %142 - %163 = landingpad { ptr, i32 } +160: ; preds = %140 + %161 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %140) #35 - %164 = load ptr, ptr %128, align 8, !tbaa !15 - %165 = getelementptr inbounds nuw i8, ptr %164, i64 8 - %166 = load ptr, ptr %165, align 8 - tail call void %166(ptr noundef nonnull align 8 dereferenceable(160) %128) #35 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %138) #35 + %162 = load ptr, ptr %126, align 8, !tbaa !15 + %163 = getelementptr inbounds nuw i8, ptr %162, i64 8 + %164 = load ptr, ptr %163, align 8 + tail call void %166(ptr noundef nonnull align 8 dereferenceable(160) %126) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit .critedge85: ; preds = %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 - %167 = getelementptr inbounds nuw i8, ptr %128, i64 144 - store i8 %4, ptr %167, align 8, !tbaa !58 - %168 = load ptr, ptr %127, align 8, !tbaa !63 - %169 = icmp eq ptr %168, null - br i1 %169, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, label %170 - -170: ; preds = %.critedge85 - %171 = load ptr, ptr %168, align 8, !tbaa !15 - %172 = getelementptr inbounds nuw i8, ptr %171, i64 8 - %173 = load ptr, ptr %172, align 8 - tail call void %173(ptr noundef nonnull align 8 dereferenceable(160) %168) #35 + %165 = getelementptr inbounds nuw i8, ptr %126, i64 144 + store i8 %4, ptr %165, align 8, !tbaa !58 + %166 = load ptr, ptr %125, align 8, !tbaa !63 + %167 = icmp eq ptr %166, null + br i1 %167, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, label %168 + +168: ; preds = %.critedge85 + %169 = load ptr, ptr %166, align 8, !tbaa !15 + %170 = getelementptr inbounds nuw i8, ptr %169, i64 8 + %171 = load ptr, ptr %170, align 8 + tail call void %173(ptr noundef nonnull align 8 dereferenceable(160) %166) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92 -_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92: ; preds = %170, %.critedge85 - store ptr %128, ptr %127, align 8, !tbaa !63 +_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92: ; preds = %168, %.critedge85 + store ptr %126, ptr %125, align 8, !tbaa !63 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread: ; preds = %156, %.thread120, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90, %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 - %174 = load ptr, ptr %128, align 8, !tbaa !15 - %175 = getelementptr inbounds nuw i8, ptr %174, i64 8 - %176 = load ptr, ptr %175, align 8 - tail call void %176(ptr noundef nonnull align 8 dereferenceable(160) %128) #35 +_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread: ; preds = %154, %.thread120, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90, %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89 + %172 = load ptr, ptr %126, align 8, !tbaa !15 + %173 = getelementptr inbounds nuw i8, ptr %172, i64 8 + %174 = load ptr, ptr %173, align 8 + tail call void %176(ptr noundef nonnull align 8 dereferenceable(160) %126) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit: ; preds = %116 - %177 = getelementptr inbounds nuw i8, ptr %0, i64 424 - %178 = load i8, ptr %177, align 8, !tbaa !51 - %.not78 = icmp eq i8 %178, 0 - br i1 %.not78, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %179 - -179: ; preds = %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit - %180 = getelementptr inbounds nuw i8, ptr %.017.i, i64 80 - %181 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %180, ptr noundef nonnull align 8 dereferenceable(64) %3) - %182 = getelementptr inbounds nuw i8, ptr %.017.i, i64 144 - store i8 %4, ptr %182, align 8, !tbaa !58 +_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit: ; preds = %114 + %175 = getelementptr inbounds nuw i8, ptr %0, i64 424 + %176 = load i8, ptr %175, align 8, !tbaa !51 + %.not78 = icmp eq i8 %176, 0 + br i1 %.not78, label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93, label %177 + +177: ; preds = %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit + %178 = getelementptr inbounds nuw i8, ptr %.017.i, i64 80 + %179 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %178, ptr noundef nonnull align 8 dereferenceable(64) %3) + %180 = getelementptr inbounds nuw i8, ptr %.017.i, i64 144 + store i8 %4, ptr %180, align 8, !tbaa !58 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit.thread: ; preds = %60, %.thread115, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit, %_ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit - %183 = load ptr, ptr %32, align 8, !tbaa !15 - %184 = getelementptr inbounds nuw i8, ptr %183, i64 8 - %185 = load ptr, ptr %184, align 8 + %181 = load ptr, ptr %32, align 8, !tbaa !15 + %182 = getelementptr inbounds nuw i8, ptr %181, i64 8 + %183 = load ptr, ptr %182, align 8 tail call void %185(ptr noundef nonnull align 8 dereferenceable(160) %32) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93 -_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93: ; preds = %38, %35, %134, %131, %75, %79, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit.thread, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, %179, %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, %25 +_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit93: ; preds = %38, %35, %132, %129, %75, %79, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit.thread, %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread, %177, %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92, %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, %25 ret void -_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit: ; preds = %136, %162, %40, %66 - %.pn80.pn = phi { ptr, i32 } [ %41, %40 ], [ %67, %66 ], [ %137, %136 ], [ %163, %162 ] +_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit: ; preds = %134, %160, %40, %66 + %.pn80.pn = phi { ptr, i32 } [ %41, %40 ], [ %67, %66 ], [ %135, %136 ], [ %161, %162 ] resume { ptr, i32 } %.pn80.pn } @@ -11409,36 +11409,36 @@ define noundef ptr @_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStrin _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %14, %.sink.split.i.i.i %.0.i.i = phi i8 [ %17, %14 ], [ %36, %.sink.split.i.i.i ] - %37 = icmp eq i8 %.0.i.i, 0 - br i1 %37, label %.preheader, label %.thread + %35 = icmp eq i8 %.0.i.i, 0 + br i1 %35, label %.preheader, label %.thread .preheader: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %38 = getelementptr inbounds nuw i8, ptr %.017, i64 72 - %39 = load ptr, ptr %38, align 8, !tbaa !55 - %40 = getelementptr inbounds nuw i8, ptr %39, i64 8 - br label %42 + %36 = getelementptr inbounds nuw i8, ptr %.017, i64 72 + %37 = load ptr, ptr %36, align 8, !tbaa !55 + %38 = getelementptr inbounds nuw i8, ptr %37, i64 8 + br label %40 -41: ; preds = %42 +39: ; preds = %40 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, 16 - br i1 %exitcond.not, label %.loopexit, label %42, !llvm.loop !161 + br i1 %exitcond.not, label %.loopexit, label %40, !llvm.loop !161 -42: ; preds = %.preheader, %41 +40: ; preds = %.preheader, %39 %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %41 ] - %43 = getelementptr inbounds nuw [16 x i32], ptr %40, i64 0, i64 %indvars.iv + %41 = getelementptr inbounds nuw [16 x i32], ptr %38, i64 0, i64 %indvars.iv %44 = load i32, ptr %43, align 4, !tbaa !12 %45 = getelementptr inbounds nuw [16 x i32], ptr %8, i64 0, i64 %indvars.iv %46 = load i32, ptr %45, align 4, !tbaa !12 %.not = icmp eq i32 %44, %46 br i1 %.not, label %41, label %.thread -.thread: ; preds = %42, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit +.thread:; preds = %42, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit %47 = getelementptr inbounds nuw i8, ptr %.017, i64 152 %48 = load ptr, ptr %47, align 8, !tbaa !63 %.not22 = icmp eq ptr %48, null br i1 %.not22, label %.loopexit, label %9, !llvm.loop !162 -.loopexit: ; preds = %.thread, %41, %4 +.loopexit: ; preds = %.thread, %39, %4 %.018 = phi ptr [ null, %4 ], [ %.017, %41 ], [ null, %.thread ] ret ptr %.018 } diff --git a/bench/icu/optimized/filteredbrk.ll b/bench/icu/optimized/filteredbrk.ll index 2d18b290325..5d8d63e4cfa 100644 --- a/bench/icu/optimized/filteredbrk.ll +++ b/bench/icu/optimized/filteredbrk.ll @@ -2576,8 +2576,8 @@ define internal noundef range(i32 -128, 128) i32 @_ZN6icu_77L20compareUnicodeStr _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %8, %.sink.split.i.i.i %.0.i.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i.i ] - %32 = sext i8 %.0.i.i to i32 - ret i32 %32 + %30 = sext i8 %.0.i.i to i32 + ret i32 %30 } declare noundef i32 @_ZNK6icu_777UVector7indexOfEPvi(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef, i32 noundef) local_unnamed_addr #3 diff --git a/bench/icu/optimized/number_longnames.ll b/bench/icu/optimized/number_longnames.ll index 4a7e31a314d..7cb15ea3055 100644 --- a/bench/icu/optimized/number_longnames.ll +++ b/bench/icu/optimized/number_longnames.ll @@ -3370,27 +3370,27 @@ define internal fastcc void @_ZN12_GLOBAL__N_117DerivedComponentsC2ERKN6icu_776L 31: ; preds = %29 %32 = load i32, ptr %0, align 8, !tbaa !92 %33 = icmp slt i32 %32, 1 - br i1 %33, label %42, label %181 + br i1 %33, label %42, label %177 34: ; preds = %4 %35 = landingpad { ptr, i32 } cleanup - br label %186 + br label %182 36: ; preds = %22 %37 = landingpad { ptr, i32 } cleanup - br label %185 + br label %181 38: ; preds = %25 %39 = landingpad { ptr, i32 } cleanup - br label %184 + br label %180 40: ; preds = %29, %27, %26 %41 = landingpad { ptr, i32 } cleanup - br label %183 + br label %179 42: ; preds = %31 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #21 @@ -3411,7 +3411,7 @@ define internal fastcc void @_ZN12_GLOBAL__N_117DerivedComponentsC2ERKN6icu_776L 50: ; preds = %57, %55, %53, %48, %42 %51 = landingpad { ptr, i32 } cleanup - br label %182 + br label %178 52: ; preds = %45 store i32 %46, ptr %0, align 8, !tbaa !92 @@ -3546,7 +3546,7 @@ define internal fastcc void @_ZN12_GLOBAL__N_117DerivedComponentsC2ERKN6icu_776L call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) %100 = load i32, ptr %0, align 8, !tbaa !92 %101 = icmp sgt i32 %100, 0 - br i1 %101, label %180, label %102 + br i1 %101, label %176, label %102 102: ; preds = %99 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #21 @@ -3604,78 +3604,78 @@ _ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit: ; preds = %102 _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %110, %.sink.split.i.i.i %.0.i.i = phi i8 [ %113, %110 ], [ %133, %.sink.split.i.i.i ] - %134 = icmp eq i8 %.0.i.i, 0 + %132 = icmp eq i8 %.0.i.i, 0 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %14) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #21 - br i1 %134, label %135, label %138 + br i1 %132, label %133, label %136 -135: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit +133: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit store i8 1, ptr %16, align 4, !tbaa !86 - br label %142 + br label %140 -136: ; preds = %.sink.split.i.i.i - %137 = landingpad { ptr, i32 } +134: ; preds = %.sink.split.i.i.i + %135 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %14) #21 br label %.body33 -.body33: ; preds = %105, %136 - %.pn = phi { ptr, i32 } [ %137, %136 ], [ %106, %105 ] +.body33: ; preds = %105, %134 + %.pn = phi { ptr, i32 } [ %135, %136 ], [ %106, %105 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #21 br label %.body30 -138: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit +136: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit store i8 0, ptr %16, align 4, !tbaa !86 - %139 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %18, ptr noundef nonnull align 8 dereferenceable(64) %12, ptr noundef nonnull align 4 dereferenceable(4) %0) - to label %142 unwind label %140 + %137 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %18, ptr noundef nonnull align 8 dereferenceable(64) %12, ptr noundef nonnull align 4 dereferenceable(4) %0) + to label %142 unwind label %138 -140: ; preds = %178, %138 - %141 = landingpad { ptr, i32 } +138: ; preds = %174, %136 + %139 = landingpad { ptr, i32 } cleanup br label %.body30 -142: ; preds = %138, %135 +140: ; preds = %136, %133 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #21 store ptr getelementptr inbounds nuw inrange(-16, 88) (i8, ptr @_ZTVN6icu_7713UnicodeStringE, i64 16), ptr %15, align 8, !tbaa !15 - %143 = getelementptr inbounds nuw i8, ptr %15, i64 8 - store i16 2, ptr %143, align 8, !tbaa !17 - %144 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendESt17basic_string_viewIDsSt11char_traitsIDsEE(ptr noundef nonnull align 8 dereferenceable(64) %15, i64 8, ptr nonnull @.str.34) - to label %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 unwind label %145 + %141 = getelementptr inbounds nuw i8, ptr %15, i64 8 + store i16 2, ptr %141, align 8, !tbaa !17 + %142 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendESt17basic_string_viewIDsSt11char_traitsIDsEE(ptr noundef nonnull align 8 dereferenceable(64) %15, i64 8, ptr nonnull @.str.34) + to label %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 unwind label %143 -145: ; preds = %142 - %146 = landingpad { ptr, i32 } +143: ; preds = %140 + %144 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7711ReplaceableD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #21 br label %.body36 -_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38: ; preds = %142 - %147 = load i16, ptr %80, align 8, !tbaa !17 - %148 = load i16, ptr %143, align 8, !tbaa !17 - %149 = and i16 %148, 1 - %.not.i.i39 = icmp eq i16 %149, 0 - br i1 %.not.i.i39, label %.sink.split.i.i.i41, label %150 - -150: ; preds = %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 - %151 = trunc i16 %147 to i8 - %152 = and i8 %151, 1 - %153 = xor i8 %152, 1 +_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38: ; preds = %140 + %145 = load i16, ptr %80, align 8, !tbaa !17 + %146 = load i16, ptr %141, align 8, !tbaa !17 + %147 = and i16 %146, 1 + %.not.i.i39 = icmp eq i16 %147, 0 + br i1 %.not.i.i39, label %.sink.split.i.i.i41, label %148 + +148: ; preds = %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 + %149 = trunc i16 %145 to i8 + %150 = and i8 %149, 1 + %151 = xor i8 %150, 1 br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 .sink.split.i.i.i41: ; preds = %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 - %154 = icmp slt i16 %148, 0 - %155 = getelementptr inbounds nuw i8, ptr %15, i64 12 - %156 = load i32, ptr %155, align 4 - %157 = ashr i16 %148, 5 - %158 = sext i16 %157 to i32 - %159 = select i1 %154, i32 %156, i32 %158 - %160 = icmp slt i16 %147, 0 - %161 = getelementptr inbounds nuw i8, ptr %13, i64 12 - %162 = load i32, ptr %161, align 4 - %163 = ashr i16 %147, 5 - %164 = sext i16 %163 to i32 - %165 = select i1 %160, i32 %162, i32 %164 - %spec.select.i.i42 = call i32 @llvm.smin.i32(i32 %159, i32 0) - %166 = icmp slt i32 %159, 0 + %152 = icmp slt i16 %146, 0 + %153 = getelementptr inbounds nuw i8, ptr %15, i64 12 + %154 = load i32, ptr %153, align 4 + %155 = ashr i16 %146, 5 + %156 = sext i16 %155 to i32 + %157 = select i1 %152, i32 %154, i32 %156 + %158 = icmp slt i16 %145, 0 + %159 = getelementptr inbounds nuw i8, ptr %13, i64 12 + %160 = load i32, ptr %159, align 4 + %161 = ashr i16 %145, 5 + %162 = sext i16 %161 to i32 + %163 = select i1 %158, i32 %160, i32 %162 + %spec.select.i.i42 = call i32 @llvm.smin.i32(i32 %157, i32 0) + %166 = icmp slt i32 %157, 0 %167 = sub nsw i32 %159, %spec.select.i.i42 %spec.select13.i.i43 = call i32 @llvm.smin.i32(i32 %159, i32 %167) %.010.i.i44 = select i1 %166, i32 0, i32 %spec.select13.i.i43 @@ -3693,45 +3693,45 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit47: ; preds = %150, %.sink.split.i %174 = icmp eq i8 %.0.i.i40, 0 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #21 - br i1 %174, label %175, label %178 + br i1 %174, label %171, label %174 -175: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 +171: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 store i8 1, ptr %17, align 1, !tbaa !91 - br label %180 + br label %176 -176: ; preds = %.sink.split.i.i.i41 - %177 = landingpad { ptr, i32 } +172: ; preds = %.sink.split.i.i.i41 + %173 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %15) #21 br label %.body36 -.body36: ; preds = %145, %176 - %.pn18 = phi { ptr, i32 } [ %177, %176 ], [ %146, %145 ] +.body36: ; preds = %143, %172 + %.pn18 = phi { ptr, i32 } [ %173, %176 ], [ %144, %145 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #21 br label %.body30 -178: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 +174: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 store i8 0, ptr %17, align 1, !tbaa !91 - %179 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %21, ptr noundef nonnull align 8 dereferenceable(64) %13, ptr noundef nonnull align 4 dereferenceable(4) %0) - to label %180 unwind label %140 + %175 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN6icu_7710CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(60) %21, ptr noundef nonnull align 8 dereferenceable(64) %13, ptr noundef nonnull align 4 dereferenceable(4) %0) + to label %180 unwind label %138 -180: ; preds = %175, %178, %99 +176: ; preds = %171, %174, %99 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %13) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #21 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #21 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #21 - br label %181 + br label %177 -181: ; preds = %31, %180 +177: ; preds = %31, %176 call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %10) #21 call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %10) #21 call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %9) #21 call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %9) #21 ret void -.body30: ; preds = %.body33, %140, %.body36, %98 - %.pn20.pn = phi { ptr, i32 } [ %.pn10.i29, %98 ], [ %141, %140 ], [ %.pn18, %.body36 ], [ %.pn, %.body33 ] +.body30: ; preds = %.body33, %138, %.body36, %98 + %.pn20.pn = phi { ptr, i32 } [ %.pn10.i29, %98 ], [ %139, %140 ], [ %.pn18, %.body36 ], [ %.pn, %.body33 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %13) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #21 br label %.body @@ -3740,31 +3740,31 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit47: ; preds = %150, %.sink.split.i %.pn20.pn.pn = phi { ptr, i32 } [ %.pn20.pn, %.body30 ], [ %.pn10.i, %78 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %12) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #21 - br label %182 + br label %178 -182: ; preds = %.body, %50 +178: ; preds = %.body, %50 %.pn20.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn, %.body ], [ %51, %50 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #21 - br label %183 + br label %179 -183: ; preds = %182, %40 +179: ; preds = %178, %40 %.pn20.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn, %182 ], [ %41, %40 ] call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %10) #21 - br label %184 + br label %180 -184: ; preds = %183, %38 +180: ; preds = %179, %38 %.pn20.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn, %183 ], [ %39, %38 ] call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %10) #21 call void @_ZN6icu_7720StackUResourceBundleD1Ev(ptr noundef nonnull align 8 dereferenceable(136) %9) #21 - br label %185 + br label %181 -185: ; preds = %184, %36 +181: ; preds = %180, %36 %.pn20.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn.pn, %184 ], [ %37, %36 ] call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %9) #21 call void @_ZN6icu_7715MaybeStackArrayIcLi40EED1Ev(ptr noundef nonnull align 8 dereferenceable(60) %21) #21 - br label %186 + br label %182 -186: ; preds = %185, %34 +182: ; preds = %181, %34 %.pn20.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn.pn.pn, %185 ], [ %35, %34 ] call void @_ZN6icu_7715MaybeStackArrayIcLi40EED1Ev(ptr noundef nonnull align 8 dereferenceable(60) %18) #21 resume { ptr, i32 } %.pn20.pn.pn.pn.pn.pn.pn.pn diff --git a/bench/icu/optimized/plurfmt.ll b/bench/icu/optimized/plurfmt.ll index d73e983c5f5..8174ebf2b74 100644 --- a/bench/icu/optimized/plurfmt.ll +++ b/bench/icu/optimized/plurfmt.ll @@ -2252,7 +2252,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat %10 = alloca %"class.icu_77::UnicodeString", align 8 %11 = load i32, ptr %5, align 4, !tbaa !13 %12 = icmp slt i32 %11, 1 - br i1 %12, label %13, label %180 + br i1 %12, label %13, label %172 13: ; preds = %6 %14 = getelementptr inbounds nuw i8, ptr %0, i64 96 @@ -2316,9 +2316,9 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat cleanup %48 = load ptr, ptr %9, align 8, !tbaa !69 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %48) #18, !srcloc !72 - br label %179 + br label %171 -49: ; preds = %.sink.split.i.i.i.i87, %.sink.split.i.i.i78, %.sink.split.i.i.i, %.sink.split.i.i.i.i, %56 +49: ; preds = %.sink.split.i.i.i.i86, %.sink.split.i.i.i78, %.sink.split.i.i.i, %.sink.split.i.i.i.i, %56 %50 = landingpad { ptr, i32 } cleanup br label %178 @@ -2328,8 +2328,8 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat %53 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %40, i64 %52 %54 = load i32, ptr %53, align 4, !tbaa !60 %55 = and i32 %54, -2 - %.not110 = icmp eq i32 %55, 12 - br i1 %.not110, label %56, label %61 + %.not108 = icmp eq i32 %55, 12 + br i1 %.not108, label %56, label %61 56: ; preds = %51 %57 = invoke noundef double @_ZNK6icu_7714MessagePattern15getNumericValueERKNS0_4PartE(ptr noundef nonnull align 8 dereferenceable(127) %0, ptr noundef nonnull align 4 dereferenceable(16) %53) @@ -2341,7 +2341,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat br i1 %60, label %.thread, label %._crit_edge ._crit_edge: ; preds = %58 - %.pre116 = sext i32 %59 to i64 + %.pre114 = sext i32 %59 to i64 br label %172 61: ; preds = %51 @@ -2384,42 +2384,42 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat %85 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %74, i32 noundef %72, ptr noundef %84, i32 noundef %spec.select.i.i.i, i32 noundef %.010.i.i.i) to label %86 unwind label %49 -86: ; preds = %65, %.sink.split.i.i.i.i +86:; preds = %65, %.sink.split.i.i.i.i %.0.i.i.i = phi i8 [ %69, %65 ], [ %85, %.sink.split.i.i.i.i ] %.not111 = icmp eq i8 %.0.i.i.i, 0 - br i1 %.not111, label %87, label %114 + br i1 %.not111, label %87, label %110 87: ; preds = %86 %88 = icmp eq i32 %.044, 0 br i1 %88, label %89, label %172 -89: ; preds = %87 +89:; preds = %87 %90 = load i16, ptr %26, align 8, !tbaa !39 %91 = load i16, ptr %29, align 8, !tbaa !39 %92 = and i16 %91, 1 %.not.i.i = icmp eq i16 %92, 0 br i1 %.not.i.i, label %.sink.split.i.i.i, label %93 -93: ; preds = %89 +93:; preds = %89 %94 = trunc i16 %90 to i8 %95 = and i8 %94, 1 %96 = xor i8 %95, 1 br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit .sink.split.i.i.i: ; preds = %89 - %97 = icmp slt i16 %91, 0 - %98 = load i32, ptr %32, align 4 - %99 = ashr i16 %91, 5 - %100 = sext i16 %99 to i32 - %101 = select i1 %97, i32 %98, i32 %100 - %102 = icmp slt i16 %90, 0 - %103 = load i32, ptr %36, align 4 - %104 = ashr i16 %90, 5 - %105 = sext i16 %104 to i32 - %106 = select i1 %102, i32 %103, i32 %105 - %spec.select.i.i = call i32 @llvm.smin.i32(i32 %101, i32 0) - %107 = icmp slt i32 %101, 0 - %108 = sub nsw i32 %101, %spec.select.i.i + %95 = icmp slt i16 %91, 0 + %96 = load i32, ptr %32, align 4 + %97 = ashr i16 %91, 5 + %98 = sext i16 %97 to i32 + %99 = select i1 %95, i32 %96, i32 %98 + %100 = icmp slt i16 %90, 0 + %101 = load i32, ptr %36, align 4 + %102 = ashr i16 %90, 5 + %103 = sext i16 %102 to i32 + %104 = select i1 %100, i32 %101, i32 %103 + %spec.select.i.i = call i32 @llvm.smin.i32(i32 %99, i32 0) + %107 = icmp slt i32 %99, 0 + %108 = sub nsw i32 %99, %spec.select.i.i %spec.select13.i.i = call i32 @llvm.smin.i32(i32 %101, i32 %108) %.010.i.i = select i1 %107, i32 0, i32 %spec.select13.i.i %109 = and i16 %91, 2 @@ -2431,57 +2431,57 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %93, %.sink.split.i.i.i %.0.i.i = phi i8 [ %96, %93 ], [ %112, %.sink.split.i.i.i ] - %113 = icmp eq i8 %.0.i.i, 0 - %spec.select = zext i1 %113 to i8 + %109 = icmp eq i8 %.0.i.i, 0 + %spec.select = zext i1 %109 to i8 br label %172 -114: ; preds = %86 - %115 = load i16, ptr %26, align 8, !tbaa !39 - %116 = icmp ugt i16 %115, 31 - br i1 %116, label %.critedge, label %117 +110: ; preds = %86 + %111 = load i16, ptr %26, align 8, !tbaa !39 + %112 = icmp ugt i16 %111, 31 + br i1 %112, label %.critedge, label %113 -117: ; preds = %114 +113: ; preds = %110 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #18 - %118 = load ptr, ptr %2, align 8, !tbaa !15 - %119 = getelementptr inbounds nuw i8, ptr %118, i64 16 - %120 = load ptr, ptr %119, align 8 - invoke void %120(ptr dead_on_unwind nonnull writable sret(%"class.icu_77::UnicodeString") align 8 %10, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef %3, double noundef %35, ptr noundef nonnull align 4 dereferenceable(4) %5) - to label %121 unwind label %146 - -121: ; preds = %117 - %122 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSEOS0_(ptr noundef nonnull align 8 dereferenceable(64) %7, ptr noundef nonnull align 8 dereferenceable(64) %10) #18 + %114 = load ptr, ptr %2, align 8, !tbaa !15 + %115 = getelementptr inbounds nuw i8, ptr %114, i64 16 + %116 = load ptr, ptr %115, align 8 + invoke void %116(ptr dead_on_unwind nonnull writable sret(%"class.icu_77::UnicodeString") align 8 %10, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef %3, double noundef %35, ptr noundef nonnull align 4 dereferenceable(4) %5) + to label %121 unwind label %140 + +117: ; preds = %113 + %118 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeStringaSEOS0_(ptr noundef nonnull align 8 dereferenceable(64) %7, ptr noundef nonnull align 8 dereferenceable(64) %10) #18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %10) #18 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #18 %.not66 = icmp eq i32 %.044, 0 - %.pre115 = load i16, ptr %26, align 8, !tbaa !39 - br i1 %.not66, label %.critedge, label %123 - -123: ; preds = %121 - %124 = load i16, ptr %29, align 8, !tbaa !39 - %125 = and i16 %124, 1 - %.not.i.i76 = icmp eq i16 %125, 0 - br i1 %.not.i.i76, label %.sink.split.i.i.i78, label %126 - -126: ; preds = %123 - %127 = trunc i16 %.pre115 to i8 - %128 = and i8 %127, 1 - %129 = xor i8 %128, 1 + %.pre113 = load i16, ptr %26, align 8, !tbaa !39 + br i1 %.not66, label %.critedge, label %119 + +119: ; preds = %117 + %120 = load i16, ptr %29, align 8, !tbaa !39 + %121 = and i16 %120, 1 + %.not.i.i76 = icmp eq i16 %121, 0 + br i1 %.not.i.i76, label %.sink.split.i.i.i78, label %122 + +122: ; preds = %119 + %123 = trunc i16 %.pre113 to i8 + %124 = and i8 %123, 1 + %125 = xor i8 %124, 1 br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 -.sink.split.i.i.i78: ; preds = %123 - %130 = icmp slt i16 %124, 0 - %131 = load i32, ptr %32, align 4 - %132 = ashr i16 %124, 5 - %133 = sext i16 %132 to i32 - %134 = select i1 %130, i32 %131, i32 %133 - %135 = icmp slt i16 %.pre115, 0 - %136 = load i32, ptr %36, align 4 - %137 = ashr i16 %.pre115, 5 - %138 = sext i16 %137 to i32 - %139 = select i1 %135, i32 %136, i32 %138 - %spec.select.i.i79 = call i32 @llvm.smin.i32(i32 %134, i32 0) - %140 = icmp slt i32 %134, 0 - %141 = sub nsw i32 %134, %spec.select.i.i79 +.sink.split.i.i.i78: ; preds = %119 + %126 = icmp slt i16 %120, 0 + %127 = load i32, ptr %32, align 4 + %128 = ashr i16 %120, 5 + %129 = sext i16 %128 to i32 + %130 = select i1 %126, i32 %127, i32 %129 + %131 = icmp slt i16 %.pre113, 0 + %132 = load i32, ptr %36, align 4 + %133 = ashr i16 %.pre113, 5 + %134 = sext i16 %133 to i32 + %135 = select i1 %131, i32 %132, i32 %134 + %spec.select.i.i79 = call i32 @llvm.smin.i32(i32 %130, i32 0) + %140 = icmp slt i32 %130, 0 + %141 = sub nsw i32 %126, %spec.select.i.i79 %spec.select13.i.i80 = call i32 @llvm.smin.i32(i32 %134, i32 %141) %.010.i.i81 = select i1 %140, i32 0, i32 %spec.select13.i.i80 %142 = and i16 %124, 2 @@ -2491,7 +2491,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %93, %.sink.split.i. %145 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %7, i32 noundef 0, i32 noundef %139, ptr noundef %144, i32 noundef %spec.select.i.i79, i32 noundef %.010.i.i81) to label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 unwind label %49 -_ZNK6icu_7713UnicodeString7compareERKS0_.exit84: ; preds = %126, %.sink.split.i.i.i78 +_ZNK6icu_7713UnicodeString7compareERKS0_.exit84:; preds = %126, %.sink.split.i.i.i78 %.0.i.i77 = phi i8 [ %129, %126 ], [ %145, %.sink.split.i.i.i78 ] %.not112 = icmp eq i8 %.0.i.i77, 0 br i1 %.not112, label %172, label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge @@ -2500,40 +2500,40 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge: ; preds = % %.pre114 = load i16, ptr %26, align 8, !tbaa !39 br label %.critedge -146: ; preds = %117 - %147 = landingpad { ptr, i32 } +140: ; preds = %113 + %141 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #18 br label %178 -.critedge: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge, %121, %114 - %148 = phi i16 [ %.pre114, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge ], [ %.pre115, %121 ], [ %115, %114 ] - %149 = and i16 %148, 1 - %.not.i.i.i85 = icmp eq i16 %149, 0 - br i1 %.not.i.i.i85, label %.sink.split.i.i.i.i87, label %150 - -150: ; preds = %.critedge - %151 = load i16, ptr %30, align 8, !tbaa !39 - %152 = trunc i16 %151 to i8 - %153 = and i8 %152, 1 - %154 = xor i8 %153, 1 +.critedge: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge, %117, %110 + %142 = phi i16 [ %.pre114, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge ], [ %.pre113, %121 ], [ %111, %114 ] + %143 = and i16 %142, 1 + %.not.i.i.i84 = icmp eq i16 %143, 0 + br i1 %.not.i.i.i84, label %.sink.split.i.i.i.i86, label %144 + +144: ; preds = %.critedge + %145 = load i16, ptr %30, align 8, !tbaa !39 + %146 = trunc i16 %145 to i8 + %147 = and i8 %146, 1 + %148 = xor i8 %147, 1 br label %171 -.sink.split.i.i.i.i87: ; preds = %.critedge - %155 = getelementptr inbounds nuw i8, ptr %43, i64 8 - %156 = load i16, ptr %155, align 4, !tbaa !59 - %157 = zext i16 %156 to i32 - %158 = getelementptr inbounds nuw i8, ptr %43, i64 4 - %159 = load i32, ptr %158, align 4, !tbaa !56 - %160 = icmp slt i16 %148, 0 - %161 = load i32, ptr %36, align 4 - %162 = ashr i16 %148, 5 - %163 = sext i16 %162 to i32 - %164 = select i1 %160, i32 %161, i32 %163 - %spec.select.i.i.i88 = call i32 @llvm.smin.i32(i32 %164, i32 0) - %165 = icmp slt i32 %164, 0 +.sink.split.i.i.i.i86: ; preds = %.critedge + %149 = getelementptr inbounds nuw i8, ptr %43, i64 8 + %150 = load i16, ptr %149, align 4, !tbaa !59 + %151 = zext i16 %150 to i32 + %152 = getelementptr inbounds nuw i8, ptr %43, i64 4 + %153 = load i32, ptr %152, align 4, !tbaa !56 + %154 = icmp slt i16 %142, 0 + %155 = load i32, ptr %36, align 4 + %156 = ashr i16 %142, 5 + %157 = sext i16 %156 to i32 + %158 = select i1 %154, i32 %155, i32 %157 + %spec.select.i.i.i87 = call i32 @llvm.smin.i32(i32 %158, i32 0) + %165 = icmp slt i32 %158, 0 %166 = sub nsw i32 %164, %spec.select.i.i.i88 - %spec.select13.i.i.i89 = call i32 @llvm.smin.i32(i32 %164, i32 %166) + %spec.select13.i.i.i89 = call i32 @llvm.smin.i32(i32 %158, i32 %166) %.010.i.i.i90 = select i1 %165, i32 0, i32 %spec.select13.i.i.i89 %167 = and i16 %148, 2 %.not.i.i.i.i91 = icmp eq i16 %167, 0 @@ -2542,20 +2542,20 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge: ; preds = % %170 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %31, i32 noundef %159, i32 noundef %157, ptr noundef %169, i32 noundef %spec.select.i.i.i88, i32 noundef %.010.i.i.i90) to label %171 unwind label %49 -171: ; preds = %150, %.sink.split.i.i.i.i87 +171:; preds = %150, %.sink.split.i.i.i.i87 %.0.i.i.i86 = phi i8 [ %154, %150 ], [ %170, %.sink.split.i.i.i.i87 ] %.not113 = icmp eq i8 %.0.i.i.i86, 0 %spec.select72 = zext i1 %.not113 to i8 %spec.select73 = select i1 %.not113, i32 %41, i32 %.044 br label %172 -172: ; preds = %._crit_edge, %87, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84, %61, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit, %171 - %.pre-phi = phi i64 [ %.pre116, %._crit_edge ], [ %52, %87 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ %52, %61 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %52, %171 ] +172:; preds = %._crit_edge, %87, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84, %61, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit, %171 + %.246 = phi i64 [ %.pre114, %._crit_edge ], [ %52, %87 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ %52, %61 ], [ %52, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %52, %171 ] %.359 = phi i32 [ %59, %._crit_edge ], [ %41, %87 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ %41, %61 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %41, %171 ] %.249 = phi i8 [ %.047, %._crit_edge ], [ 0, %87 ], [ 1, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ 1, %61 ], [ %spec.select, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %spec.select72, %171 ] %.246 = phi i32 [ %.044, %._crit_edge ], [ %.044, %87 ], [ %.044, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 ], [ %.044, %61 ], [ %41, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %spec.select73, %171 ] %173 = load ptr, ptr %16, align 8, !tbaa !55 - %174 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %173, i64 %.pre-phi, i32 4 + %174 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %173, i64 %.246, i32 4 %175 = load i32, ptr %174, align 4, !tbaa !62 %..i = call noundef i32 @llvm.smax.i32(i32 %175, i32 %.359) %176 = add nsw i32 %..i, 1 @@ -2565,7 +2565,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge: ; preds = % 178: ; preds = %146, %49 %.pn = phi { ptr, i32 } [ %50, %49 ], [ %147, %146 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #18 - br label %179 + br label %171 .thread: ; preds = %58, %172, %39 %.3 = phi i32 [ %.246, %172 ], [ %.044, %39 ], [ %59, %58 ] @@ -2573,16 +2573,16 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit84..critedge_crit_edge: ; preds = % call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %7) #18 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #18 - br label %180 + br label %172 -179: ; preds = %178, %46 +171: ; preds = %178, %46 %.pn.pn = phi { ptr, i32 } [ %.pn, %178 ], [ %47, %46 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %7) #18 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #18 resume { ptr, i32 } %.pn.pn -180: ; preds = %6, %.thread +172: ; preds = %6, %.thread %.043 = phi i32 [ %.3, %.thread ], [ 0, %6 ] ret i32 %.043 } diff --git a/bench/icu/optimized/rbnf.ll b/bench/icu/optimized/rbnf.ll index 2eed4a2c24b..0d708c0afa9 100644 --- a/bench/icu/optimized/rbnf.ll +++ b/bench/icu/optimized/rbnf.ll @@ -5989,7 +5989,7 @@ _ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCo 69: ; preds = %67, %64 %.pn20 = phi { ptr, i32 } [ %68, %67 ], [ %65, %64 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #21 - br label %142 + br label %140 70: ; preds = %14 tail call void @_ZN6icu_7721RuleBasedNumberFormat18initDefaultRuleSetEv(ptr noundef nonnull align 8 dereferenceable(456) %0) @@ -5999,7 +5999,7 @@ _ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCo call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #21 store ptr @.str.7, ptr %7, align 8, !tbaa !100 invoke void @_ZN6icu_7713UnicodeStringC1EaNS_14ConstChar16PtrEi(ptr noundef nonnull align 8 dereferenceable(64) %6, i8 noundef signext 1, ptr noundef nonnull %7, i32 noundef -1) - to label %72 unwind label %95 + to label %72 unwind label %93 72: ; preds = %71 %73 = getelementptr inbounds nuw i8, ptr %6, i64 8 @@ -6042,123 +6042,123 @@ _ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCo _ZNK6icu_7713UnicodeString10startsWithERKS0_.exit: ; preds = %72, %.noexc24 %.0.i.i = phi i1 [ %.not, %.noexc24 ], [ %.not6.i.i, %72 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #21 - %93 = load ptr, ptr %7, align 8, !tbaa !100 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %93) #21, !srcloc !102 + %91 = load ptr, ptr %7, align 8, !tbaa !100 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %91) #21, !srcloc !102 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #21 - br i1 %.0.i.i, label %102, label %94 + br i1 %.0.i.i, label %100, label %92 -94: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit +92: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit store i32 1, ptr %2, align 4, !tbaa !19 br label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread -95: ; preds = %71 - %96 = landingpad { ptr, i32 } +93: ; preds = %71 + %94 = landingpad { ptr, i32 } cleanup - br label %99 + br label %97 -97: ; preds = %84 - %98 = landingpad { ptr, i32 } +95: ; preds = %84 + %96 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #21 - br label %99 + br label %97 -99: ; preds = %97, %95 - %.pn = phi { ptr, i32 } [ %98, %97 ], [ %96, %95 ] - %100 = load ptr, ptr %7, align 8, !tbaa !100 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %100) #21, !srcloc !102 +97: ; preds = %95, %93 + %.pn = phi { ptr, i32 } [ %96, %97 ], [ %94, %95 ] + %98 = load ptr, ptr %7, align 8, !tbaa !100 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %98) #21, !srcloc !102 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #21 - br label %142 + br label %140 .critedge: ; preds = %.sink.split.i.i.i call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #21 - %101 = load ptr, ptr %7, align 8, !tbaa !100 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %101) #21, !srcloc !102 + %99 = load ptr, ptr %7, align 8, !tbaa !100 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %99) #21, !srcloc !102 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #21 - br label %102 - -102: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit - %103 = load i32, ptr %2, align 4, !tbaa !19 - %104 = icmp sgt i32 %103, 0 - %105 = getelementptr inbounds nuw i8, ptr %0, i64 64 - %106 = load ptr, ptr %105, align 8 - %.not16.i25 = icmp eq ptr %106, null - %or.cond.i26 = select i1 %104, i1 true, i1 %.not16.i25 + br label %100 + +100: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit + %101 = load i32, ptr %2, align 4, !tbaa !19 + %102 = icmp sgt i32 %101, 0 + %103 = getelementptr inbounds nuw i8, ptr %0, i64 64 + %104 = load ptr, ptr %103, align 8 + %.not16.i25 = icmp eq ptr %104, null + %or.cond.i26 = select i1 %102, i1 true, i1 %.not16.i25 br i1 %or.cond.i26, label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread, label %.preheader.i27 -.preheader.i27: ; preds = %102 - %107 = load ptr, ptr %106, align 8, !tbaa !96 - %.not1729.i28 = icmp eq ptr %107, null +.preheader.i27: ; preds = %100 + %105 = load ptr, ptr %104, align 8, !tbaa !96 + %.not1729.i28 = icmp eq ptr %105, null br i1 %.not1729.i28, label %._crit_edge.i36, label %.lr.ph.i29 .lr.ph.i29: ; preds = %.preheader.i27 - %108 = getelementptr inbounds nuw i8, ptr %1, i64 12 - %109 = getelementptr inbounds nuw i8, ptr %1, i64 10 - %110 = getelementptr inbounds nuw i8, ptr %1, i64 24 - br label %111 - -111: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, %.lr.ph.i29 - %112 = phi ptr [ %107, %.lr.ph.i29 ], [ %140, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] - %.01330.i30 = phi ptr [ %106, %.lr.ph.i29 ], [ %139, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] - %113 = getelementptr inbounds nuw i8, ptr %112, i64 8 - %114 = getelementptr inbounds nuw i8, ptr %112, i64 16 - %115 = load i16, ptr %114, align 8, !tbaa !55 - %116 = and i16 %115, 1 - %.not.i.i.i31 = icmp eq i16 %116, 0 - br i1 %.not.i.i.i31, label %120, label %117 - -117: ; preds = %111 - %118 = load i16, ptr %11, align 8, !tbaa !55 - %119 = and i16 %118, 1 - %.not.i32 = icmp eq i16 %119, 0 + %106 = getelementptr inbounds nuw i8, ptr %1, i64 12 + %107 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %108 = getelementptr inbounds nuw i8, ptr %1, i64 24 + br label %109 + +109: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, %.lr.ph.i29 + %110 = phi ptr [ %105, %.lr.ph.i29 ], [ %138, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] + %.01330.i30 = phi ptr [ %104, %.lr.ph.i29 ], [ %137, %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 ] + %111 = getelementptr inbounds nuw i8, ptr %110, i64 8 + %112 = getelementptr inbounds nuw i8, ptr %110, i64 16 + %113 = load i16, ptr %112, align 8, !tbaa !55 + %114 = and i16 %113, 1 + %.not.i.i.i31 = icmp eq i16 %114, 0 + br i1 %.not.i.i.i31, label %118, label %115 + +115: ; preds = %109 + %116 = load i16, ptr %11, align 8, !tbaa !55 + %117 = and i16 %116, 1 + %.not.i32 = icmp eq i16 %117, 0 br i1 %.not.i32, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42 -120: ; preds = %111 - %121 = icmp slt i16 %115, 0 - %122 = ashr i16 %115, 5 - %123 = sext i16 %122 to i32 - %124 = getelementptr inbounds nuw i8, ptr %112, i64 20 - %125 = load i32, ptr %124, align 4 - %126 = select i1 %121, i32 %125, i32 %123 - %127 = load i16, ptr %11, align 8, !tbaa !55 - %128 = icmp slt i16 %127, 0 - %129 = ashr i16 %127, 5 - %130 = sext i16 %129 to i32 - %131 = load i32, ptr %108, align 4 - %132 = select i1 %128, i32 %131, i32 %130 - %133 = and i16 %127, 1 - %.not9.i.i.i37 = icmp eq i16 %133, 0 - %134 = icmp eq i32 %126, %132 - %or.cond.i.i.i38 = and i1 %.not9.i.i.i37, %134 +118: ; preds = %109 + %119 = icmp slt i16 %113, 0 + %120 = ashr i16 %113, 5 + %121 = sext i16 %120 to i32 + %122 = getelementptr inbounds nuw i8, ptr %110, i64 20 + %123 = load i32, ptr %122, align 4 + %124 = select i1 %119, i32 %123, i32 %121 + %125 = load i16, ptr %11, align 8, !tbaa !55 + %126 = icmp slt i16 %125, 0 + %127 = ashr i16 %125, 5 + %128 = sext i16 %127 to i32 + %129 = load i32, ptr %106, align 4 + %130 = select i1 %126, i32 %129, i32 %128 + %131 = and i16 %125, 1 + %.not9.i.i.i37 = icmp eq i16 %131, 0 + %132 = icmp eq i32 %124, %130 + %or.cond.i.i.i38 = and i1 %.not9.i.i.i37, %132 br i1 %or.cond.i.i.i38, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34 -_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39: ; preds = %120 - %135 = and i16 %127, 2 - %.not.i.i.i.i.i40 = icmp eq i16 %135, 0 - %136 = load ptr, ptr %110, align 8 - %137 = select i1 %.not.i.i.i.i.i40, ptr %136, ptr %109 - %138 = call noundef signext i8 @_ZNK6icu_7713UnicodeString8doEqualsEPKDsi(ptr noundef nonnull align 8 dereferenceable(64) %113, ptr noundef %137, i32 noundef %126) - %.not33.i41 = icmp eq i8 %138, 0 +_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39: ; preds = %118 + %133 = and i16 %125, 2 + %.not.i.i.i.i.i40 = icmp eq i16 %133, 0 + %134 = load ptr, ptr %108, align 8 + %135 = select i1 %.not.i.i.i.i.i40, ptr %134, ptr %107 + %136 = call noundef signext i8 @_ZNK6icu_7713UnicodeString8doEqualsEPKDsi(ptr noundef nonnull align 8 dereferenceable(64) %111, ptr noundef %135, i32 noundef %124) + %.not33.i41 = icmp eq i8 %136, 0 br i1 %.not33.i41, label %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42 -_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %120, %117 - %139 = getelementptr inbounds nuw i8, ptr %.01330.i30, i64 8 - %140 = load ptr, ptr %139, align 8, !tbaa !96 - %.not17.i35 = icmp eq ptr %140, null - br i1 %.not17.i35, label %._crit_edge.i36, label %111, !llvm.loop !103 +_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %118, %115 + %137 = getelementptr inbounds nuw i8, ptr %.01330.i30, i64 8 + %138 = load ptr, ptr %137, align 8, !tbaa !96 + %.not17.i35 = icmp eq ptr %138, null + br i1 %.not17.i35, label %._crit_edge.i36, label %109, !llvm.loop !103 ._crit_edge.i36: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.thread.i34, %.preheader.i27 store i32 1, ptr %2, align 4, !tbaa !19 br label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread -_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %117 - %141 = getelementptr inbounds nuw i8, ptr %0, i64 88 - store ptr %112, ptr %141, align 8, !tbaa !64 +_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42: ; preds = %_ZNK6icu_779NFRuleSet7isNamedERKNS_13UnicodeStringE.exit.i39, %115 + %139 = getelementptr inbounds nuw i8, ptr %0, i64 88 + store ptr %110, ptr %139, align 8, !tbaa !64 br label %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread -_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread: ; preds = %102, %._crit_edge.i36, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42, %70, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit, %94, %3 +_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42.thread: ; preds = %100, %._crit_edge.i36, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit42, %70, %_ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCode.exit, %92, %3 ret void -142: ; preds = %99, %69 +140: ; preds = %97, %69 %.pn20.pn = phi { ptr, i32 } [ %.pn20, %69 ], [ %.pn, %99 ] resume { ptr, i32 } %.pn20.pn } diff --git a/bench/icu/optimized/rbt_rule.ll b/bench/icu/optimized/rbt_rule.ll index e183ac73629..9207b08c511 100644 --- a/bench/icu/optimized/rbt_rule.ll +++ b/bench/icu/optimized/rbt_rule.ll @@ -1112,13 +1112,13 @@ define noundef signext range(i8 0, 2) i8 @_ZNK6icu_7719TransliterationRule5masks _ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit: ; preds = %26, %.sink.split.i.i.i %.0.i.i = phi i8 [ %29, %26 ], [ %39, %.sink.split.i.i.i ] - %40 = icmp eq i32 %12, %14 - %41 = icmp eq i32 %15, %24 - %or.cond35 = select i1 %40, i1 %41, i1 false - br i1 %or.cond35, label %42, label %60 + %38 = icmp eq i32 %12, %14 + %39 = icmp eq i32 %15, %24 + %or.cond35 = select i1 %38, i1 %39, i1 false + br i1 %or.cond35, label %40, label %60 -42: ; preds = %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit - %43 = getelementptr inbounds nuw i8, ptr %0, i64 120 +40: ; preds = %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit + %41 = getelementptr inbounds nuw i8, ptr %0, i64 120 %44 = load i32, ptr %43, align 8, !tbaa !30 %45 = getelementptr inbounds nuw i8, ptr %1, i64 120 %46 = load i32, ptr %45, align 8, !tbaa !30 @@ -1127,47 +1127,47 @@ _ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit: ; preds = %26, %.sink.split.i. %or.cond = and i1 %48, %47 br i1 %or.cond, label %49, label %60 -49: ; preds = %42 +49:; preds = %42 %50 = getelementptr inbounds nuw i8, ptr %0, i64 124 %51 = load i8, ptr %50, align 4, !tbaa !32 %52 = getelementptr inbounds nuw i8, ptr %1, i64 124 %53 = load i8, ptr %52, align 4, !tbaa !32 - %54 = icmp eq i8 %51, %53 + %or.cond36 = icmp eq i8 %51, %53 %55 = and i8 %51, 3 %or.cond36 = icmp eq i8 %55, 0 %or.cond37 = or i1 %54, %or.cond36 br i1 %or.cond37, label %72, label %56 -56: ; preds = %49 +56:; preds = %49 %57 = and i8 %53, 1 %.not34 = icmp eq i8 %57, 0 br i1 %.not34, label %72, label %58 -58: ; preds = %56 +58:; preds = %56 %59 = lshr i8 %53, 1 %.lobit = and i8 %59, 1 br label %72 60: ; preds = %42, %_ZNK6icu_7713UnicodeString7compareEiiRKS0_.exit %.not = icmp sgt i32 %12, %14 - br i1 %.not, label %72, label %61 + br i1 %.not, label %72, label %59 -61: ; preds = %60 - %62 = icmp slt i32 %15, %24 - br i1 %62, label %69, label %63 +59: ; preds = %60 + %60 = icmp slt i32 %15, %24 + br i1 %60, label %69, label %61 -63: ; preds = %61 - br i1 %41, label %64, label %72 +61: ; preds = %59 + br i1 %39, label %62, label %72 -64: ; preds = %63 - %65 = getelementptr inbounds nuw i8, ptr %0, i64 120 +62: ; preds = %61 + %63 = getelementptr inbounds nuw i8, ptr %0, i64 120 %66 = load i32, ptr %65, align 8, !tbaa !30 %67 = getelementptr inbounds nuw i8, ptr %1, i64 120 %68 = load i32, ptr %67, align 8, !tbaa !30 %.not31 = icmp sgt i32 %66, %68 br i1 %.not31, label %72, label %69 -69: ; preds = %64, %61 +69:; preds = %64, %61 %70 = icmp eq i8 %.0.i.i, 0 %71 = zext i1 %70 to i8 br label %72 diff --git a/bench/icu/optimized/reslist.ll b/bench/icu/optimized/reslist.ll index 1093f0fada9..f75efd3e0f1 100644 --- a/bench/icu/optimized/reslist.ll +++ b/bench/icu/optimized/reslist.ll @@ -4174,7 +4174,7 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( %4 = alloca i32, align 4 %5 = load i32, ptr %2, align 4, !tbaa !22 %6 = icmp slt i32 %5, 1 - br i1 %6, label %7, label %309 + br i1 %6, label %7, label %307 7: ; preds = %3 %8 = tail call i32 @uhash_count_77(ptr noundef %1) @@ -4239,7 +4239,7 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( %30 = getelementptr inbounds nuw i8, ptr %0, i64 152 br label %31 -._crit_edge202: ; preds = %.thread, %137, %.preheader185 +._crit_edge202: ; preds = %.thread, %135, %.preheader185 invoke void @uprv_sortArray_77(ptr noundef nonnull %13, i32 noundef %8, i32 noundef 8, ptr noundef nonnull @_ZL20compareStringLengthsPKvS0_S0_, ptr noundef null, i8 noundef signext 0, ptr noundef nonnull %2) to label %140 unwind label %16 @@ -4278,7 +4278,7 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( %57 = add nsw i64 %32, 1 br label %58 -58: ; preds = %.lr.ph197, %137 +58: ; preds = %.lr.ph197, %135 %indvars.iv226 = phi i64 [ %57, %.lr.ph197 ], [ %indvars.iv.next227, %137 ] %59 = getelementptr inbounds ptr, ptr %13, i64 %indvars.iv226 %60 = load ptr, ptr %59, align 8, !tbaa !146 @@ -4304,7 +4304,7 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( br i1 %.not.i.i, label %.sink.split.i.i.i, label %78 78: ; preds = %58 - br i1 %.not6.i.i, label %.thread.loopexit, label %88 + br i1 %.not6.i.i, label %.thread.loopexit, label %86 .sink.split.i.i.i: ; preds = %58 br i1 %.not6.i.i, label %79, label %.thread.loopexit @@ -4326,342 +4326,342 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 %.not = icmp eq i8 %87, 0 - br i1 %.not, label %.thread.loopexit, label %88 + br i1 %.not, label %.thread.loopexit, label %86 -88: ; preds = %78, %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit - %89 = getelementptr inbounds nuw i8, ptr %60, i64 9 - %90 = load i8, ptr %89, align 1, !tbaa !17 - %.not159 = icmp eq i8 %90, 0 - br i1 %.not159, label %93, label %137 +86: ; preds = %78, %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit + %87 = getelementptr inbounds nuw i8, ptr %60, i64 9 + %88 = load i8, ptr %87, align 1, !tbaa !17 + %.not159 = icmp eq i8 %88, 0 + br i1 %.not159, label %91, label %135 -91: ; preds = %79 - %92 = landingpad { ptr, i32 } +89: ; preds = %79 + %90 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -93: ; preds = %88 - %94 = getelementptr inbounds nuw i8, ptr %60, i64 140 - %95 = load i8, ptr %94, align 4, !tbaa !72 - %96 = icmp eq i8 %95, 0 - br i1 %96, label %97, label %137 - -97: ; preds = %93 - %98 = getelementptr inbounds nuw i8, ptr %60, i64 120 - store ptr %34, ptr %98, align 8, !tbaa !63 - %99 = load i16, ptr %40, align 8, !tbaa !4 - %100 = icmp slt i16 %99, 0 - %101 = ashr i16 %99, 5 - %102 = sext i16 %101 to i32 - %103 = load i32, ptr %45, align 4 - %104 = select i1 %100, i32 %103, i32 %102 - %105 = load i16, ptr %67, align 8, !tbaa !4 - %106 = icmp slt i16 %105, 0 - %107 = ashr i16 %105, 5 - %108 = sext i16 %107 to i32 - %109 = load i32, ptr %72, align 4 - %110 = select i1 %106, i32 %109, i32 %108 - %111 = sub nsw i32 %104, %110 - %112 = getelementptr inbounds nuw i8, ptr %60, i64 128 - store i32 %111, ptr %112, align 8, !tbaa !148 - %113 = load i8, ptr %55, align 1, !tbaa !17 - %.not160 = icmp eq i8 %113, 0 - br i1 %.not160, label %126, label %114 - -114: ; preds = %97 - %115 = load i32, ptr %56, align 4, !tbaa !20 - %116 = load i8, ptr %37, align 4, !tbaa !72 - %117 = sext i8 %116 to i32 - %118 = add i32 %115, %111 - %119 = add i32 %118, %117 - %120 = getelementptr inbounds nuw i8, ptr %60, i64 12 - store i32 %119, ptr %120, align 4, !tbaa !20 - %121 = and i32 %119, 268435455 - %122 = load i32, ptr %30, align 8, !tbaa !68 - %.not161 = icmp slt i32 %121, %122 - br i1 %.not161, label %125, label %123 - -123: ; preds = %114 - %124 = add nuw nsw i32 %121, 1 - store i32 %124, ptr %30, align 8, !tbaa !68 +91: ; preds = %86 + %92 = getelementptr inbounds nuw i8, ptr %60, i64 140 + %93 = load i8, ptr %92, align 4, !tbaa !72 + %94 = icmp eq i8 %93, 0 + br i1 %94, label %95, label %135 + +95: ; preds = %91 + %96 = getelementptr inbounds nuw i8, ptr %60, i64 120 + store ptr %34, ptr %96, align 8, !tbaa !63 + %97 = load i16, ptr %40, align 8, !tbaa !4 + %98 = icmp slt i16 %97, 0 + %99 = ashr i16 %97, 5 + %100 = sext i16 %99 to i32 + %101 = load i32, ptr %45, align 4 + %102 = select i1 %98, i32 %101, i32 %100 + %103 = load i16, ptr %67, align 8, !tbaa !4 + %104 = icmp slt i16 %103, 0 + %105 = ashr i16 %103, 5 + %106 = sext i16 %105 to i32 + %107 = load i32, ptr %72, align 4 + %108 = select i1 %104, i32 %107, i32 %106 + %109 = sub nsw i32 %102, %108 + %110 = getelementptr inbounds nuw i8, ptr %60, i64 128 + store i32 %109, ptr %110, align 8, !tbaa !148 + %111 = load i8, ptr %55, align 1, !tbaa !17 + %.not160 = icmp eq i8 %111, 0 + br i1 %.not160, label %124, label %112 + +112: ; preds = %95 + %113 = load i32, ptr %56, align 4, !tbaa !20 + %114 = load i8, ptr %37, align 4, !tbaa !72 + %115 = sext i8 %114 to i32 + %116 = add i32 %113, %109 + %117 = add i32 %116, %115 + %118 = getelementptr inbounds nuw i8, ptr %60, i64 12 + store i32 %117, ptr %118, align 4, !tbaa !20 + %119 = and i32 %117, 268435455 + %120 = load i32, ptr %30, align 8, !tbaa !68 + %.not161 = icmp slt i32 %119, %120 + br i1 %.not161, label %123, label %121 + +121: ; preds = %112 + %122 = add nuw nsw i32 %119, 1 + store i32 %122, ptr %30, align 8, !tbaa !68 %.pre.pre = load i16, ptr %67, align 8, !tbaa !4 %.pre248.pre = load i32, ptr %72, align 4 %.pre254 = ashr i16 %.pre.pre, 5 %.pre255 = sext i16 %.pre254 to i32 - br label %125 - -125: ; preds = %123, %114 - %.pre252.pre-phi = phi i32 [ %.pre255, %123 ], [ %108, %114 ] - %.pre248 = phi i32 [ %.pre248.pre, %123 ], [ %109, %114 ] - %.pre = phi i16 [ %.pre.pre, %123 ], [ %105, %114 ] - store i8 1, ptr %89, align 1, !tbaa !17 - br label %126 - -126: ; preds = %97, %125 - %.pre-phi253 = phi i32 [ %108, %97 ], [ %.pre252.pre-phi, %125 ] - %127 = phi i32 [ %109, %97 ], [ %.pre248, %125 ] - %128 = phi i16 [ %105, %97 ], [ %.pre, %125 ] - %129 = getelementptr inbounds nuw i8, ptr %60, i64 132 - %130 = load i32, ptr %129, align 4, !tbaa !67 - %131 = icmp slt i16 %128, 0 - %132 = select i1 %131, i32 %127, i32 %.pre-phi253 - %133 = add i32 %132, 1 - %134 = mul nsw i32 %133, %130 - %135 = load i32, ptr %52, align 8, !tbaa !103 - %136 = add nsw i32 %134, %135 - store i32 %136, ptr %52, align 8, !tbaa !103 - br label %137 - -137: ; preds = %126, %93, %88 + br label %123 + +123: ; preds = %121, %112 + %.pre252.pre-phi = phi i32 [ %.pre255, %123 ], [ %106, %114 ] + %.pre248 = phi i32 [ %.pre248.pre, %123 ], [ %107, %114 ] + %.pre = phi i16 [ %.pre.pre, %123 ], [ %103, %114 ] + store i8 1, ptr %87, align 1, !tbaa !17 + br label %124 + +124: ; preds = %95, %123 + %.pre-phi253 = phi i32 [ %106, %97 ], [ %.pre252.pre-phi, %125 ] + %125 = phi i32 [ %107, %97 ], [ %.pre248, %125 ] + %126 = phi i16 [ %103, %97 ], [ %.pre, %125 ] + %127 = getelementptr inbounds nuw i8, ptr %60, i64 132 + %128 = load i32, ptr %127, align 4, !tbaa !67 + %129 = icmp slt i16 %126, 0 + %130 = select i1 %129, i32 %125, i32 %.pre-phi253 + %131 = add i32 %130, 1 + %132 = mul nsw i32 %131, %128 + %133 = load i32, ptr %52, align 8, !tbaa !103 + %134 = add nsw i32 %132, %133 + store i32 %134, ptr %52, align 8, !tbaa !103 + br label %135 + +135: ; preds = %124, %91, %86 %indvars.iv.next227 = add nsw i64 %indvars.iv226, 1 %exitcond229.not = icmp eq i64 %indvars.iv.next227, %9 br i1 %exitcond229.not, label %._crit_edge202, label %58, !llvm.loop !149 .thread.loopexit: ; preds = %78, %.sink.split.i.i.i, %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit - %138 = trunc nsw i64 %indvars.iv226 to i32 + %136 = trunc nsw i64 %indvars.iv226 to i32 br label %.thread .thread: ; preds = %.thread.loopexit, %31 - %.0125.lcssa = phi i32 [ %.0125194, %31 ], [ %138, %.thread.loopexit ] - %139 = icmp slt i32 %.0125.lcssa, %8 - br i1 %139, label %31, label %._crit_edge202, !llvm.loop !150 - -140: ; preds = %._crit_edge202 - %141 = load i32, ptr %2, align 4, !tbaa !22 - %142 = icmp slt i32 %141, 1 - br i1 %142, label %143, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit - -143: ; preds = %140 - %144 = getelementptr inbounds nuw i8, ptr %0, i64 26 - %145 = load i8, ptr %144, align 2, !tbaa !107 - %.not145 = icmp eq i8 %145, 0 + %.0125.lcssa = phi i32 [ %.0125194, %31 ], [ %136, %.thread.loopexit ] + %137 = icmp slt i32 %.0125.lcssa, %8 + br i1 %137, label %31, label %._crit_edge202, !llvm.loop !150 + +138: ; preds = %._crit_edge202 + %139 = load i32, ptr %2, align 4, !tbaa !22 + %140 = icmp slt i32 %139, 1 + br i1 %140, label %141, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit + +141: ; preds = %138 + %142 = getelementptr inbounds nuw i8, ptr %0, i64 26 + %143 = load i8, ptr %142, align 2, !tbaa !107 + %.not145 = icmp eq i8 %143, 0 br i1 %.not145, label %.preheader, label %.preheader184 -.preheader184: ; preds = %143 +.preheader184: ; preds = %141 br i1 %19, label %._crit_edge208, label %.lr.ph207 .lr.ph207: ; preds = %.preheader184 - %146 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %147 = getelementptr inbounds nuw i8, ptr %0, i64 84 - %148 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %144 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %145 = getelementptr inbounds nuw i8, ptr %0, i64 84 + %146 = getelementptr inbounds nuw i8, ptr %0, i64 72 %wide.trip.count233 = zext nneg i32 %8 to i64 - br label %157 + br label %155 -.preheader: ; preds = %143 +.preheader: ; preds = %141 br i1 %19, label %.critedge, label %.lr.ph213 .lr.ph213: ; preds = %.preheader - %149 = getelementptr inbounds nuw i8, ptr %0, i64 72 - %150 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %151 = getelementptr inbounds nuw i8, ptr %0, i64 84 - %152 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %153 = getelementptr inbounds nuw i8, ptr %0, i64 152 + %147 = getelementptr inbounds nuw i8, ptr %0, i64 72 + %148 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %149 = getelementptr inbounds nuw i8, ptr %0, i64 84 + %150 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %151 = getelementptr inbounds nuw i8, ptr %0, i64 152 %wide.trip.count238 = zext nneg i32 %8 to i64 - br label %216 + br label %214 -._crit_edge208: ; preds = %194, %.preheader184 +._crit_edge208: ; preds = %192, %.preheader184 %.0134.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1135, %194 ] %.0132.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1133, %194 ] %.0126.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1127, %194 ] - %154 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %155 = load i16, ptr %154, align 8, !tbaa !4 - %156 = and i16 %155, 1 - %.not154 = icmp eq i16 %156, 0 - br i1 %.not154, label %198, label %195 + %152 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %153 = load i16, ptr %152, align 8, !tbaa !4 + %154 = and i16 %153, 1 + %.not154 = icmp eq i16 %154, 0 + br i1 %.not154, label %196, label %193 -157: ; preds = %.lr.ph207, %194 +155: ; preds = %.lr.ph207, %192 %indvars.iv230 = phi i64 [ 0, %.lr.ph207 ], [ %indvars.iv.next231, %194 ] %.0126206 = phi i32 [ 0, %.lr.ph207 ], [ %.1127, %194 ] %.0132205 = phi i32 [ 0, %.lr.ph207 ], [ %.1133, %194 ] %.0134204 = phi i32 [ 0, %.lr.ph207 ], [ %.1135, %194 ] - %158 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv230 - %159 = load ptr, ptr %158, align 8, !tbaa !146 - %160 = load i16, ptr %146, align 8, !tbaa !4 - %161 = icmp slt i16 %160, 0 - %162 = ashr i16 %160, 5 - %163 = sext i16 %162 to i32 - %164 = load i32, ptr %147, align 4 - %165 = select i1 %161, i32 %164, i32 %163 - %166 = getelementptr inbounds nuw i8, ptr %159, i64 140 - %167 = load i8, ptr %166, align 4, !tbaa !72 - %168 = getelementptr inbounds nuw i8, ptr %159, i64 64 - %169 = load i16, ptr %168, align 8, !tbaa !4 - %170 = icmp slt i16 %169, 0 - %171 = ashr i16 %169, 5 - %172 = sext i16 %171 to i32 - %173 = getelementptr inbounds nuw i8, ptr %159, i64 68 - %174 = load i32, ptr %173, align 4 - %175 = select i1 %170, i32 %174, i32 %172 - %176 = sext i8 %167 to i32 - %177 = add nsw i32 %165, %176 - %178 = add nsw i32 %177, %175 - %179 = getelementptr inbounds nuw i8, ptr %159, i64 136 - %180 = load i32, ptr %179, align 8, !tbaa !103 - %181 = icmp sgt i32 %180, 9 - %182 = icmp slt i32 %178, 268435456 - %or.cond = select i1 %181, i1 %182, i1 false - br i1 %or.cond, label %183, label %190 - -183: ; preds = %157 - invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %159, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(64) %148) - to label %184 unwind label %188 - -184: ; preds = %183 - %185 = add nsw i32 %.0126206, 1 - %186 = load i32, ptr %179, align 8, !tbaa !103 - %187 = add nsw i32 %186, %.0132205 - br label %194 - -188: ; preds = %183 - %189 = landingpad { ptr, i32 } + %156 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv230 + %157 = load ptr, ptr %156, align 8, !tbaa !146 + %158 = load i16, ptr %144, align 8, !tbaa !4 + %159 = icmp slt i16 %158, 0 + %160 = ashr i16 %158, 5 + %161 = sext i16 %160 to i32 + %162 = load i32, ptr %145, align 4 + %163 = select i1 %159, i32 %162, i32 %161 + %164 = getelementptr inbounds nuw i8, ptr %157, i64 140 + %165 = load i8, ptr %164, align 4, !tbaa !72 + %166 = getelementptr inbounds nuw i8, ptr %157, i64 64 + %167 = load i16, ptr %166, align 8, !tbaa !4 + %168 = icmp slt i16 %167, 0 + %169 = ashr i16 %167, 5 + %170 = sext i16 %169 to i32 + %171 = getelementptr inbounds nuw i8, ptr %157, i64 68 + %172 = load i32, ptr %171, align 4 + %173 = select i1 %168, i32 %172, i32 %170 + %174 = sext i8 %165 to i32 + %175 = add nsw i32 %163, %174 + %176 = add nsw i32 %175, %173 + %177 = getelementptr inbounds nuw i8, ptr %157, i64 136 + %178 = load i32, ptr %177, align 8, !tbaa !103 + %179 = icmp sgt i32 %178, 9 + %180 = icmp slt i32 %176, 268435456 + %or.cond = select i1 %179, i1 %180, i1 false + br i1 %or.cond, label %181, label %188 + +181: ; preds = %155 + invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %157, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(64) %146) + to label %184 unwind label %186 + +182: ; preds = %181 + %183 = add nsw i32 %.0126206, 1 + %184 = load i32, ptr %177, align 8, !tbaa !103 + %185 = add nsw i32 %184, %.0132205 + br label %192 + +186: ; preds = %181 + %187 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -190: ; preds = %157 - %191 = add nsw i32 %180, %.0134204 - %192 = getelementptr inbounds nuw i8, ptr %159, i64 12 - store i32 0, ptr %192, align 4, !tbaa !20 - %193 = getelementptr inbounds nuw i8, ptr %159, i64 9 - store i8 1, ptr %193, align 1, !tbaa !17 - br label %194 - -194: ; preds = %190, %184 - %.1135 = phi i32 [ %.0134204, %184 ], [ %191, %190 ] - %.1133 = phi i32 [ %187, %184 ], [ %.0132205, %190 ] - %.1127 = phi i32 [ %185, %184 ], [ %.0126206, %190 ] +188: ; preds = %155 + %189 = add nsw i32 %178, %.0134204 + %190 = getelementptr inbounds nuw i8, ptr %157, i64 12 + store i32 0, ptr %190, align 4, !tbaa !20 + %191 = getelementptr inbounds nuw i8, ptr %157, i64 9 + store i8 1, ptr %191, align 1, !tbaa !17 + br label %192 + +192: ; preds = %188, %182 + %.1135 = phi i32 [ %.0134204, %184 ], [ %189, %190 ] + %.1133 = phi i32 [ %185, %184 ], [ %.0132205, %190 ] + %.1127 = phi i32 [ %183, %184 ], [ %.0126206, %190 ] %indvars.iv.next231 = add nuw nsw i64 %indvars.iv230, 1 %exitcond234.not = icmp eq i64 %indvars.iv.next231, %wide.trip.count233 - br i1 %exitcond234.not, label %._crit_edge208, label %157, !llvm.loop !151 + br i1 %exitcond234.not, label %._crit_edge208, label %155, !llvm.loop !151 -195: ; preds = %._crit_edge208 +193: ; preds = %._crit_edge208 store i32 7, ptr %2, align 4, !tbaa !22 - br label %198 + br label %196 -196: ; preds = %198 - %197 = landingpad { ptr, i32 } +194: ; preds = %196 + %195 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -198: ; preds = %195, %._crit_edge208 - %199 = invoke signext i8 @getShowWarning() - to label %200 unwind label %196 - -200: ; preds = %198 - %.not155 = icmp eq i8 %199, 0 - br i1 %.not155, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %201 - -201: ; preds = %200 - %202 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %.0126.lcssa) - %203 = load i16, ptr %154, align 8, !tbaa !4 - %204 = icmp slt i16 %203, 0 - %205 = ashr i16 %203, 5 - %206 = sext i16 %205 to i32 - %207 = getelementptr inbounds nuw i8, ptr %0, i64 84 - %208 = load i32, ptr %207, align 4 - %209 = select i1 %204, i32 %208, i32 %206 - %210 = shl nsw i32 %209, 1 - %211 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %209, i32 noundef %210) - %212 = shl nsw i32 %.0132.lcssa, 1 - %213 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %.0132.lcssa, i32 noundef %212) - %214 = shl nsw i32 %.0134.lcssa, 1 - %215 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %.0134.lcssa, i32 noundef %214) +196: ; preds = %193, %._crit_edge208 + %197 = invoke signext i8 @getShowWarning() + to label %200 unwind label %194 + +198: ; preds = %196 + %.not155 = icmp eq i8 %197, 0 + br i1 %.not155, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %199 + +199: ; preds = %198 + %200 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %.0126.lcssa) + %201 = load i16, ptr %152, align 8, !tbaa !4 + %202 = icmp slt i16 %201, 0 + %203 = ashr i16 %201, 5 + %204 = sext i16 %203 to i32 + %205 = getelementptr inbounds nuw i8, ptr %0, i64 84 + %206 = load i32, ptr %205, align 4 + %207 = select i1 %202, i32 %206, i32 %204 + %208 = shl nsw i32 %207, 1 + %209 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %207, i32 noundef %208) + %210 = shl nsw i32 %.0132.lcssa, 1 + %211 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %.0132.lcssa, i32 noundef %210) + %212 = shl nsw i32 %.0134.lcssa, 1 + %213 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %.0134.lcssa, i32 noundef %212) br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit -216: ; preds = %.lr.ph213, %239 +214: ; preds = %.lr.ph213, %237 %indvars.iv235 = phi i64 [ 0, %.lr.ph213 ], [ %indvars.iv.next236, %239 ] - %217 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv235 - %218 = load ptr, ptr %217, align 8, !tbaa !146 - %219 = getelementptr inbounds nuw i8, ptr %218, i64 120 - %220 = load ptr, ptr %219, align 8, !tbaa !63 - %221 = icmp eq ptr %220, null - br i1 %221, label %222, label %.critedge.loopexit.split.loop.exit268 - -222: ; preds = %216 - %223 = getelementptr inbounds nuw i8, ptr %218, i64 9 - %224 = load i8, ptr %223, align 1, !tbaa !17 - %.not150 = icmp eq i8 %224, 0 - br i1 %.not150, label %225, label %239 + %215 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv235 + %216 = load ptr, ptr %215, align 8, !tbaa !146 + %217 = getelementptr inbounds nuw i8, ptr %216, i64 120 + %218 = load ptr, ptr %217, align 8, !tbaa !63 + %219 = icmp eq ptr %218, null + br i1 %219, label %220, label %.critedge.loopexit.split.loop.exit268 + +220: ; preds = %214 + %221 = getelementptr inbounds nuw i8, ptr %216, i64 9 + %222 = load i8, ptr %221, align 1, !tbaa !17 + %.not150 = icmp eq i8 %222, 0 + br i1 %.not150, label %223, label %237 -225: ; preds = %222 - %226 = load i16, ptr %150, align 8, !tbaa !4 - %227 = icmp slt i16 %226, 0 - %228 = ashr i16 %226, 5 - %229 = sext i16 %228 to i32 - %230 = load i32, ptr %151, align 4 - %231 = select i1 %227, i32 %230, i32 %229 - %232 = load i32, ptr %152, align 8, !tbaa !106 - %.not151 = icmp slt i32 %231, %232 - br i1 %.not151, label %237, label %233 - -233: ; preds = %225 - %234 = add nsw i32 %231, 1 - store i32 %234, ptr %152, align 8, !tbaa !106 - br label %237 - -235: ; preds = %237 - %236 = landingpad { ptr, i32 } +223: ; preds = %220 + %224 = load i16, ptr %148, align 8, !tbaa !4 + %225 = icmp slt i16 %224, 0 + %226 = ashr i16 %224, 5 + %227 = sext i16 %226 to i32 + %228 = load i32, ptr %149, align 4 + %229 = select i1 %225, i32 %228, i32 %227 + %230 = load i32, ptr %150, align 8, !tbaa !106 + %.not151 = icmp slt i32 %229, %230 + br i1 %.not151, label %235, label %231 + +231: ; preds = %223 + %232 = add nsw i32 %229, 1 + store i32 %232, ptr %150, align 8, !tbaa !106 + br label %235 + +233: ; preds = %235 + %234 = landingpad { ptr, i32 } cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -237: ; preds = %233, %225 - %238 = load i32, ptr %153, align 8, !tbaa !68 - invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %218, i32 noundef %238, ptr noundef nonnull align 8 dereferenceable(64) %149) - to label %239 unwind label %235 +235: ; preds = %231, %223 + %236 = load i32, ptr %151, align 8, !tbaa !68 + invoke void @_ZN14StringResource12writeUTF16v2EiRN6icu_7713UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(141) %216, i32 noundef %236, ptr noundef nonnull align 8 dereferenceable(64) %147) + to label %239 unwind label %233 -239: ; preds = %237, %222 +237: ; preds = %235, %220 %indvars.iv.next236 = add nuw nsw i64 %indvars.iv235, 1 %exitcond239.not = icmp eq i64 %indvars.iv.next236, %wide.trip.count238 - br i1 %exitcond239.not, label %.critedge, label %216, !llvm.loop !152 + br i1 %exitcond239.not, label %.critedge, label %214, !llvm.loop !152 -.critedge.loopexit.split.loop.exit268: ; preds = %216 - %240 = trunc nuw nsw i64 %indvars.iv235 to i32 +.critedge.loopexit.split.loop.exit268: ; preds = %214 + %238 = trunc nuw nsw i64 %indvars.iv235 to i32 br label %.critedge -.critedge: ; preds = %239, %.critedge.loopexit.split.loop.exit268, %.preheader - %.0128.lcssa = phi i32 [ 0, %.preheader ], [ %240, %.critedge.loopexit.split.loop.exit268 ], [ %8, %239 ] - %241 = getelementptr inbounds nuw i8, ptr %0, i64 80 - %242 = load i16, ptr %241, align 8, !tbaa !4 - %243 = and i16 %242, 1 - %.not146 = icmp eq i16 %243, 0 - br i1 %.not146, label %245, label %244 +.critedge: ; preds = %237, %.critedge.loopexit.split.loop.exit268, %.preheader + %.0128.lcssa = phi i32 [ 0, %.preheader ], [ %238, %.critedge.loopexit.split.loop.exit268 ], [ %8, %239 ] + %239 = getelementptr inbounds nuw i8, ptr %0, i64 80 + %240 = load i16, ptr %239, align 8, !tbaa !4 + %241 = and i16 %240, 1 + %.not146 = icmp eq i16 %241, 0 + br i1 %.not146, label %243, label %242 -244: ; preds = %.critedge +242: ; preds = %.critedge store i32 7, ptr %2, align 4, !tbaa !22 br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit -245: ; preds = %.critedge - %246 = getelementptr inbounds nuw i8, ptr %0, i64 168 - %247 = load ptr, ptr %246, align 8, !tbaa !153 - %248 = icmp eq ptr %247, null - %249 = load i32, ptr @_ZL14gFormatVersion, align 4 - %250 = icmp slt i32 %249, 3 - %or.cond3.not273 = select i1 %248, i1 true, i1 %250 +243: ; preds = %.critedge + %244 = getelementptr inbounds nuw i8, ptr %0, i64 168 + %245 = load ptr, ptr %244, align 8, !tbaa !153 + %246 = icmp eq ptr %245, null + %247 = load i32, ptr @_ZL14gFormatVersion, align 4 + %248 = icmp slt i32 %247, 3 + %or.cond3.not273 = select i1 %246, i1 true, i1 %248 %brmerge = or i1 %or.cond3.not273, %19 %.0128.lcssa.mux = select i1 %or.cond3.not273, i32 %.0128.lcssa, i32 0 br i1 %brmerge, label %.critedge5, label %.lr.ph219 -.lr.ph219: ; preds = %245 - %251 = load ptr, ptr %247, align 8, !tbaa !105 - %252 = getelementptr inbounds nuw i8, ptr %251, i64 64 - %253 = getelementptr inbounds nuw i8, ptr %251, i64 56 +.lr.ph219: ; preds = %243 + %249 = load ptr, ptr %245, align 8, !tbaa !105 + %250 = getelementptr inbounds nuw i8, ptr %249, i64 64 + %251 = getelementptr inbounds nuw i8, ptr %249, i64 56 %wide.trip.count243 = zext nneg i32 %8 to i64 - br label %254 + br label %252 -254: ; preds = %.lr.ph219, %268 +252: ; preds = %.lr.ph219, %268 %indvars.iv240 = phi i64 [ 0, %.lr.ph219 ], [ %indvars.iv.next241, %268 ] - %255 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv240 - %256 = load ptr, ptr %255, align 8, !tbaa !146 - %257 = getelementptr inbounds nuw i8, ptr %256, i64 120 - %258 = load ptr, ptr %257, align 8, !tbaa !63 - %259 = icmp eq ptr %258, null - br i1 %259, label %260, label %.critedge5.loopexit - -260: ; preds = %254 - %261 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #37 + %253 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv240 + %254 = load ptr, ptr %253, align 8, !tbaa !146 + %255 = getelementptr inbounds nuw i8, ptr %254, i64 120 + %256 = load ptr, ptr %255, align 8, !tbaa !63 + %257 = icmp eq ptr %256, null + br i1 %257, label %258, label %.critedge5.loopexit + +258: ; preds = %252 + %259 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #37 to label %262 unwind label %264 -262: ; preds = %260 - %263 = getelementptr inbounds nuw i8, ptr %256, i64 56 - invoke void @_ZN18StringBaseResourceC2EP7SRBRootaRKN6icu_7713UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(141) %261, ptr poison, i8 noundef signext 0, ptr noundef nonnull align 8 dereferenceable(64) %263, ptr noundef nonnull align 4 dereferenceable(4) %2) +260: ; preds = %258 + %261 = getelementptr inbounds nuw i8, ptr %254, i64 56 + invoke void @_ZN18StringBaseResourceC2EP7SRBRootaRKN6icu_7713UnicodeStringER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(141) %259, ptr poison, i8 noundef signext 0, ptr noundef nonnull align 8 dereferenceable(64) %261, ptr noundef nonnull align 4 dereferenceable(4) %2) to label %268 unwind label %266 264: ; preds = %260 @@ -4669,14 +4669,14 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 cleanup br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -266: ; preds = %262 +266: ; preds = %260 %267 = landingpad { ptr, i32 } cleanup call void @_ZdlPvm(ptr noundef nonnull %261, i64 noundef 144) #36 br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167 -268: ; preds = %262 - store ptr getelementptr inbounds nuw inrange(-16, 64) (i8, ptr @_ZTV14StringResource, i64 16), ptr %261, align 8, !tbaa !9 +268:; preds = %262 + store ptr getelementptr inbounds nuw inrange(-16, 64) (i8, ptr @_ZTV14StringResource, i64 16), ptr %259, align 8, !tbaa !9 %269 = getelementptr inbounds nuw i8, ptr %261, i64 120 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(21) %269, i8 0, i64 21, i1 false) %270 = load ptr, ptr %252, align 8, !tbaa !38 @@ -4688,60 +4688,60 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 store i32 %273, ptr %253, align 8, !tbaa !42 %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1 %exitcond244.not = icmp eq i64 %indvars.iv.next241, %wide.trip.count243 - br i1 %exitcond244.not, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %254, !llvm.loop !154 + br i1 %exitcond244.not, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, label %252, !llvm.loop !154 -.critedge5.loopexit: ; preds = %254 - %274 = trunc nuw nsw i64 %indvars.iv240 to i32 +.critedge5.loopexit: ; preds = %252 + %272 = trunc nuw nsw i64 %indvars.iv240 to i32 br label %.critedge5 -.critedge5: ; preds = %245, %.critedge5.loopexit - %.1129 = phi i32 [ %.0128.lcssa.mux, %245 ], [ %274, %.critedge5.loopexit ] - %275 = icmp slt i32 %.1129, %8 - br i1 %275, label %.lr.ph224, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit +.critedge5: ; preds = %243, %.critedge5.loopexit + %.1129 = phi i32 [ %.0128.lcssa.mux, %245 ], [ %272, %.critedge5.loopexit ] + %273 = icmp slt i32 %.1129, %8 + br i1 %273, label %.lr.ph224, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit .lr.ph224: ; preds = %.critedge5 - %276 = getelementptr inbounds nuw i8, ptr %0, i64 152 - %277 = load i32, ptr %276, align 8 - %278 = getelementptr inbounds nuw i8, ptr %0, i64 160 - %.promoted = load i32, ptr %278, align 8 - %279 = zext i32 %.1129 to i64 - br label %280 - -280: ; preds = %.lr.ph224, %305 - %indvars.iv245 = phi i64 [ %279, %.lr.ph224 ], [ %indvars.iv.next246, %305 ] - %281 = phi i32 [ %.promoted, %.lr.ph224 ], [ %306, %305 ] - %282 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv245 - %283 = load ptr, ptr %282, align 8, !tbaa !146 - %284 = getelementptr inbounds nuw i8, ptr %283, i64 9 - %285 = load i8, ptr %284, align 1, !tbaa !17 - %.not147 = icmp eq i8 %285, 0 - br i1 %.not147, label %286, label %305 - -286: ; preds = %280 - %287 = getelementptr inbounds nuw i8, ptr %283, i64 120 - %288 = load ptr, ptr %287, align 8, !tbaa !63 - %289 = getelementptr inbounds nuw i8, ptr %288, i64 12 - %290 = load i32, ptr %289, align 4, !tbaa !20 - %291 = getelementptr inbounds nuw i8, ptr %288, i64 140 - %292 = load i8, ptr %291, align 4, !tbaa !72 - %293 = sext i8 %292 to i32 - %294 = add i32 %290, %293 - %295 = getelementptr inbounds nuw i8, ptr %283, i64 128 - %296 = load i32, ptr %295, align 8, !tbaa !148 - %297 = add i32 %294, %296 - %298 = getelementptr inbounds nuw i8, ptr %283, i64 12 - store i32 %297, ptr %298, align 4, !tbaa !20 - %299 = and i32 %297, 268435455 - %300 = sub nsw i32 %299, %277 - %.not148 = icmp slt i32 %300, %281 - br i1 %.not148, label %303, label %301 - -301: ; preds = %286 - %302 = add nsw i32 %300, 1 - store i32 %302, ptr %278, align 8, !tbaa !106 + %274 = getelementptr inbounds nuw i8, ptr %0, i64 152 + %275 = load i32, ptr %274, align 8 + %276 = getelementptr inbounds nuw i8, ptr %0, i64 160 + %.promoted = load i32, ptr %276, align 8 + %277 = zext i32 %.1129 to i64 + br label %278 + +278: ; preds = %.lr.ph224, %305 + %indvars.iv245 = phi i64 [ %277, %.lr.ph224 ], [ %indvars.iv.next246, %305 ] + %279 = phi i32 [ %.promoted, %.lr.ph224 ], [ %306, %305 ] + %280 = getelementptr inbounds nuw ptr, ptr %13, i64 %indvars.iv245 + %281 = load ptr, ptr %280, align 8, !tbaa !146 + %282 = getelementptr inbounds nuw i8, ptr %281, i64 9 + %283 = load i8, ptr %282, align 1, !tbaa !17 + %.not147 = icmp eq i8 %283, 0 + br i1 %.not147, label %284, label %305 + +284: ; preds = %278 + %285 = getelementptr inbounds nuw i8, ptr %281, i64 120 + %286 = load ptr, ptr %285, align 8, !tbaa !63 + %287 = getelementptr inbounds nuw i8, ptr %286, i64 12 + %288 = load i32, ptr %287, align 4, !tbaa !20 + %289 = getelementptr inbounds nuw i8, ptr %286, i64 140 + %290 = load i8, ptr %289, align 4, !tbaa !72 + %291 = sext i8 %290 to i32 + %292 = add i32 %288, %291 + %293 = getelementptr inbounds nuw i8, ptr %281, i64 128 + %294 = load i32, ptr %293, align 8, !tbaa !148 + %295 = add i32 %292, %294 + %296 = getelementptr inbounds nuw i8, ptr %281, i64 12 + store i32 %295, ptr %296, align 4, !tbaa !20 + %297 = and i32 %295, 268435455 + %298 = sub nsw i32 %297, %275 + %.not148 = icmp slt i32 %298, %279 + br i1 %.not148, label %303, label %299 + +299: ; preds = %284 + %300 = add nsw i32 %298, 1 + store i32 %300, ptr %276, align 8, !tbaa !106 br label %303 -303: ; preds = %301, %286 +303: ; preds = %297, %286 %304 = phi i32 [ %302, %301 ], [ %281, %286 ] store i8 1, ptr %284, align 1, !tbaa !17 br label %305 @@ -4749,19 +4749,19 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 305: ; preds = %280, %303 %306 = phi i32 [ %281, %280 ], [ %304, %303 ] %indvars.iv.next246 = add nuw nsw i64 %indvars.iv245, 1 - %307 = trunc nuw i64 %indvars.iv.next246 to i32 - %308 = icmp sgt i32 %8, %307 - br i1 %308, label %280, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, !llvm.loop !155 + %305 = trunc nuw i64 %indvars.iv.next246 to i32 + %306 = icmp sgt i32 %8, %305 + br i1 %306, label %278, label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit, !llvm.loop !155 -_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit: ; preds = %268, %305, %.critedge5, %244, %201, %200, %140, %27, %7 +_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit: ; preds = %268, %305, %.critedge5, %242, %199, %198, %138, %27, %7 call void @_ZdaPv(ptr noundef nonnull %13) #36 - br label %309 + br label %307 -309: ; preds = %3, %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit +307: ; preds = %3, %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit ret void -_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167: ; preds = %235, %266, %264, %188, %196, %91, %25, %16 - %.pn164 = phi { ptr, i32 } [ %26, %25 ], [ %17, %16 ], [ %92, %91 ], [ %189, %188 ], [ %197, %196 ], [ %236, %235 ], [ %267, %266 ], [ %265, %264 ] +_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit167: ; preds = %233, %266, %264, %186, %194, %89, %25, %16 + %.pn164 = phi { ptr, i32 } [ %26, %25 ], [ %17, %16 ], [ %90, %91 ], [ %187, %188 ], [ %195, %196 ], [ %234, %235 ], [ %267, %266 ], [ %265, %264 ] call void @_ZdaPv(ptr noundef nonnull %13) #36 resume { ptr, i32 } %.pn164 } @@ -6065,7 +6065,7 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap %.neg = sext i1 %12 to i32 %13 = add nsw i32 %.neg, %9 %.not = icmp eq i32 %13, 0 - br i1 %.not, label %14, label %54 + br i1 %.not, label %14, label %52 14: ; preds = %3 %15 = getelementptr inbounds nuw i8, ptr %4, i64 64 @@ -6086,7 +6086,7 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap %30 = select i1 %25, i32 %29, i32 %27 %31 = sub nsw i32 %22, %30 %.not19 = icmp eq i32 %31, 0 - br i1 %.not19, label %32, label %54 + br i1 %.not19, label %32, label %52 32: ; preds = %14 %33 = getelementptr inbounds nuw i8, ptr %5, i64 136 @@ -6095,7 +6095,7 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap %36 = load i32, ptr %35, align 8, !tbaa !103 %37 = sub nsw i32 %34, %36 %.not20 = icmp eq i32 %37, 0 - br i1 %.not20, label %38, label %54 + br i1 %.not20, label %38, label %52 38: ; preds = %32 %39 = and i16 %24, 1 @@ -6126,11 +6126,11 @@ define internal noundef i32 @_ZL20compareStringLengthsPKvS0_S0_(ptr readnone cap _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %40, %.sink.split.i.i.i %.0.i.i = phi i8 [ %43, %40 ], [ %52, %.sink.split.i.i.i ] - %53 = sext i8 %.0.i.i to i32 - br label %54 + %51 = sext i8 %.0.i.i to i32 + br label %52 -54: ; preds = %32, %14, %3, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0 = phi i32 [ %53, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %13, %3 ], [ %31, %14 ], [ %37, %32 ] +52: ; preds = %32, %14, %3, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %.0 = phi i32 [ %51, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %13, %3 ], [ %31, %14 ], [ %37, %32 ] ret i32 %.0 } diff --git a/bench/icu/optimized/selfmt.ll b/bench/icu/optimized/selfmt.ll index 1a44d4c7a88..bc72382aad5 100644 --- a/bench/icu/optimized/selfmt.ll +++ b/bench/icu/optimized/selfmt.ll @@ -748,7 +748,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %6 = alloca %"class.icu_77::ConstChar16Ptr", align 8 %7 = load i32, ptr %3, align 4, !tbaa !13 %8 = icmp slt i32 %7, 1 - br i1 %8, label %9, label %97 + br i1 %8, label %9, label %93 9: ; preds = %4 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #14 @@ -776,7 +776,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat br label %25 25: ; preds = %89, %10 - %26 = phi ptr [ %.pre, %10 ], [ %90, %89 ] + %26 = phi ptr [ %.pre, %10 ], [ %89, %89 ] %.025 = phi i32 [ 0, %10 ], [ %.227, %89 ] %.023 = phi i32 [ %1, %10 ], [ %94, %89 ] %27 = add nsw i32 %.023, 1 @@ -791,13 +791,13 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat cleanup %34 = load ptr, ptr %6, align 8, !tbaa !36 call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %34) #14, !srcloc !39 - br label %96 + br label %92 35: ; preds = %.sink.split.i.i.i.i36, %.sink.split.i.i.i.i %36 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #14 - br label %96 + br label %92 37: ; preds = %25 %38 = load i16, ptr %15, align 8, !tbaa !17 @@ -838,38 +838,38 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat 61: ; preds = %40, %.sink.split.i.i.i.i %.0.i.i.i = phi i8 [ %44, %40 ], [ %60, %.sink.split.i.i.i.i ] %.not = icmp eq i8 %.0.i.i.i, 0 - br i1 %.not, label %.thread, label %62 - -62: ; preds = %61 - %63 = icmp eq i32 %.025, 0 - br i1 %63, label %64, label %89 - -64: ; preds = %62 - %65 = load i16, ptr %21, align 8, !tbaa !17 - %66 = and i16 %65, 1 - %.not.i.i.i34 = icmp eq i16 %66, 0 - br i1 %.not.i.i.i34, label %.sink.split.i.i.i.i36, label %67 - -67: ; preds = %64 - %68 = load i16, ptr %16, align 8, !tbaa !17 - %69 = trunc i16 %68 to i8 - %70 = and i8 %69, 1 - %71 = xor i8 %70, 1 + br i1 %.not, label %.thread, label %60 + +60: ; preds = %61 + %61 = icmp eq i32 %.025, 0 + br i1 %61, label %62, label %89 + +62: ; preds = %60 + %63 = load i16, ptr %21, align 8, !tbaa !17 + %64 = and i16 %63, 1 + %.not.i.i.i34 = icmp eq i16 %64, 0 + br i1 %.not.i.i.i34, label %.sink.split.i.i.i.i36, label %65 + +65: ; preds = %62 + %66 = load i16, ptr %16, align 8, !tbaa !17 + %67 = trunc i16 %66 to i8 + %68 = and i8 %67, 1 + %69 = xor i8 %68, 1 br label %88 -.sink.split.i.i.i.i36: ; preds = %64 - %72 = getelementptr inbounds nuw i8, ptr %29, i64 8 - %73 = load i16, ptr %72, align 4, !tbaa !34 - %74 = zext i16 %73 to i32 - %75 = getelementptr inbounds nuw i8, ptr %29, i64 4 - %76 = load i32, ptr %75, align 4, !tbaa !30 - %77 = icmp slt i16 %65, 0 - %78 = load i32, ptr %22, align 4 - %79 = ashr i16 %65, 5 - %80 = sext i16 %79 to i32 - %81 = select i1 %77, i32 %78, i32 %80 - %spec.select.i.i.i37 = call i32 @llvm.smin.i32(i32 %81, i32 0) - %82 = icmp slt i32 %81, 0 +.sink.split.i.i.i.i36: ; preds = %62 + %70 = getelementptr inbounds nuw i8, ptr %29, i64 8 + %71 = load i16, ptr %70, align 4, !tbaa !34 + %72 = zext i16 %71 to i32 + %73 = getelementptr inbounds nuw i8, ptr %29, i64 4 + %74 = load i32, ptr %73, align 4, !tbaa !30 + %75 = icmp slt i16 %63, 0 + %76 = load i32, ptr %22, align 4 + %77 = ashr i16 %63, 5 + %78 = sext i16 %77 to i32 + %79 = select i1 %75, i32 %76, i32 %78 + %spec.select.i.i.i37 = call i32 @llvm.smin.i32(i32 %79, i32 0) + %82 = icmp slt i32 %79, 0 %83 = sub nsw i32 %81, %spec.select.i.i.i37 %spec.select13.i.i.i38 = call i32 @llvm.smin.i32(i32 %81, i32 %83) %.010.i.i.i39 = select i1 %82, i32 0, i32 %spec.select13.i.i.i38 @@ -880,15 +880,15 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %87 = invoke noundef signext i8 @_ZNK6icu_7713UnicodeString9doCompareEiiPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %17, i32 noundef %76, i32 noundef %74, ptr noundef %86, i32 noundef %spec.select.i.i.i37, i32 noundef %.010.i.i.i39) to label %88 unwind label %35 -88: ; preds = %67, %.sink.split.i.i.i.i36 +88:; preds = %67, %.sink.split.i.i.i.i36 %.0.i.i.i35 = phi i8 [ %71, %67 ], [ %87, %.sink.split.i.i.i.i36 ] %.not56 = icmp eq i8 %.0.i.i.i35, 0 %spec.select = select i1 %.not56, i32 %27, i32 0 br label %89 -89: ; preds = %62, %88 +89:; preds = %62, %88 %.227 = phi i32 [ %.025, %62 ], [ %spec.select, %88 ] - %90 = load ptr, ptr %14, align 8, !tbaa !29 + %89 = load ptr, ptr %14, align 8, !tbaa !29 %91 = sext i32 %27 to i64 %92 = getelementptr inbounds %"class.icu_77::MessagePattern::Part", ptr %90, i64 %91, i32 4 %93 = load i32, ptr %92, align 4, !tbaa !35 @@ -901,14 +901,14 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %.3 = phi i32 [ %.227, %89 ], [ %.025, %25 ], [ %27, %61 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #14 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #14 - br label %97 + br label %93 -96: ; preds = %35, %32 +92: ; preds = %35, %32 %.pn = phi { ptr, i32 } [ %36, %35 ], [ %33, %32 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #14 resume { ptr, i32 } %.pn -97: ; preds = %4, %.thread +93: ; preds = %4, %.thread %.022 = phi i32 [ %.3, %.thread ], [ 0, %4 ] ret i32 %.022 } diff --git a/bench/icu/optimized/sprintf.ll b/bench/icu/optimized/sprintf.ll index 4abed380b61..61b800f001f 100644 --- a/bench/icu/optimized/sprintf.ll +++ b/bench/icu/optimized/sprintf.ll @@ -371,7 +371,7 @@ define internal noundef i32 @_ZL25u_sprintf_pad_and_justifyPvPK18u_printf_spec_i %.not = icmp ne i32 %8, -1 %10 = icmp slt i32 %3, %8 %or.cond = and i1 %.not, %10 - br i1 %or.cond, label %69, label %11 + br i1 %or.cond, label %72, label %11 11: ; preds = %9 %12 = getelementptr inbounds nuw i8, ptr %0, i64 8 @@ -389,7 +389,7 @@ define internal noundef i32 @_ZL25u_sprintf_pad_and_justifyPvPK18u_printf_spec_i %.not6577 = icmp ne i32 %8, -1 %17 = icmp slt i32 %.76, %8 %or.cond6778 = select i1 %.not6577, i1 %17, i1 false - br i1 %or.cond6778, label %18, label %58 + br i1 %or.cond6778, label %18, label %61 18: ; preds = %.thread, %11 %.79 = phi i32 [ %.76, %.thread ], [ %., %11 ] @@ -405,10 +405,10 @@ define internal noundef i32 @_ZL25u_sprintf_pad_and_justifyPvPK18u_printf_spec_i %.not66 = icmp eq i8 %25, 0 br i1 %.not66, label %40, label %26 -26: ; preds = %18 - br i1 %6, label %_ZL15u_sprintf_writePvPKDsi.exit, label %27 +26:; preds = %18 + br i1 %6, label %_ZL15u_sprintf_writePvPKDsi.exit, label %29 -27: ; preds = %26 +29: ; preds = %26 %28 = sext i32 %23 to i64 %29 = getelementptr inbounds i16, ptr %5, i64 %28 %30 = tail call ptr @u_strncpy_77(ptr noundef nonnull %29, ptr noundef %2, i32 noundef %.79) @@ -419,70 +419,70 @@ define internal noundef i32 @_ZL25u_sprintf_pad_and_justifyPvPK18u_printf_spec_i br label %_ZL15u_sprintf_writePvPKDsi.exit _ZL15u_sprintf_writePvPKDsi.exit: ; preds = %26, %27 - %33 = phi ptr [ null, %26 ], [ %.pre75, %27 ] - %34 = add nsw i32 %23, %.79 - %35 = sext i32 %34 to i64 - %36 = getelementptr inbounds i16, ptr %33, i64 %35 - %37 = getelementptr inbounds nuw i8, ptr %1, i64 12 - %38 = load i16, ptr %37, align 4, !tbaa !20 - %39 = tail call ptr @u_memset_77(ptr noundef %36, i16 noundef zeroext %38, i32 noundef %.056) + %36 = phi ptr [ null, %26 ], [ %.pre75, %27 ] + %37 = add nsw i32 %23, %.79 + %38 = sext i32 %37 to i64 + %39 = getelementptr inbounds i16, ptr %36, i64 %38 + %40 = getelementptr inbounds nuw i8, ptr %1, i64 12 + %41 = load i16, ptr %40, align 4, !tbaa !20 + %42 = tail call ptr @u_memset_77(ptr noundef %39, i16 noundef zeroext %41, i32 noundef %.056) br label %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split -40: ; preds = %18 - %41 = sext i32 %23 to i64 - %42 = getelementptr inbounds i16, ptr %5, i64 %41 - %43 = getelementptr inbounds nuw i8, ptr %1, i64 12 - %44 = load i16, ptr %43, align 4, !tbaa !20 - %45 = tail call ptr @u_memset_77(ptr noundef %42, i16 noundef zeroext %44, i32 noundef %.056) - %46 = load i32, ptr %20, align 8, !tbaa !14 - %47 = sub nsw i32 %46, %.056 - store i32 %47, ptr %20, align 8, !tbaa !14 - %48 = load ptr, ptr %0, align 8, !tbaa !7 - %49 = icmp eq ptr %48, null - br i1 %49, label %_ZL15u_sprintf_writePvPKDsi.exit71, label %50 - -50: ; preds = %40 - %..i69 = tail call i32 @llvm.smin.i32(i32 %.79, i32 %47) - %51 = load i32, ptr %21, align 4, !tbaa !13 - %52 = sub nsw i32 %51, %47 - %53 = sext i32 %52 to i64 - %54 = getelementptr inbounds i16, ptr %48, i64 %53 - %55 = tail call ptr @u_strncpy_77(ptr noundef nonnull %54, ptr noundef %2, i32 noundef %..i69) +43: ; preds = %18 + %44 = sext i32 %23 to i64 + %45 = getelementptr inbounds i16, ptr %5, i64 %44 + %46 = getelementptr inbounds nuw i8, ptr %1, i64 12 + %47 = load i16, ptr %46, align 4, !tbaa !20 + %48 = tail call ptr @u_memset_77(ptr noundef %45, i16 noundef zeroext %47, i32 noundef %.056) + %49 = load i32, ptr %20, align 8, !tbaa !14 + %50 = sub nsw i32 %49, %.056 + store i32 %50, ptr %20, align 8, !tbaa !14 + %51 = load ptr, ptr %0, align 8, !tbaa !7 + %52 = icmp eq ptr %51, null + br i1 %52, label %_ZL15u_sprintf_writePvPKDsi.exit71, label %53 + +53: ; preds = %43 + %..i69 = tail call i32 @llvm.smin.i32(i32 %.79, i32 %50) + %54 = load i32, ptr %21, align 4, !tbaa !13 + %55 = sub nsw i32 %54, %50 + %56 = sext i32 %55 to i64 + %57 = getelementptr inbounds i16, ptr %51, i64 %56 + %58 = tail call ptr @u_strncpy_77(ptr noundef nonnull %57, ptr noundef %2, i32 noundef %..i69) br label %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split -_ZL15u_sprintf_writePvPKDsi.exit71.sink.split: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit, %50 +_ZL15u_sprintf_writePvPKDsi.exit71.sink.split: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit, %53 %..i69.sink = phi i32 [ %..i69, %50 ], [ %.056, %_ZL15u_sprintf_writePvPKDsi.exit ] %.pn.ph = phi i32 [ %..i69, %50 ], [ %.79, %_ZL15u_sprintf_writePvPKDsi.exit ] - %56 = load i32, ptr %20, align 8, !tbaa !14 - %57 = sub nsw i32 %56, %..i69.sink - store i32 %57, ptr %20, align 8, !tbaa !14 + %59 = load i32, ptr %20, align 8, !tbaa !14 + %60 = sub nsw i32 %59, %..i69.sink + store i32 %60, ptr %20, align 8, !tbaa !14 br label %_ZL15u_sprintf_writePvPKDsi.exit71 -_ZL15u_sprintf_writePvPKDsi.exit71: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split, %40 +_ZL15u_sprintf_writePvPKDsi.exit71: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split, %43 %.pn = phi i32 [ %.79, %40 ], [ %.pn.ph, %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split ] %.057 = add nsw i32 %.pn, %.056 br label %_ZL15u_sprintf_writePvPKDsi.exit74 -58: ; preds = %.thread - %59 = getelementptr inbounds nuw i8, ptr %0, i64 12 - %60 = load i32, ptr %59, align 4, !tbaa !13 - %61 = sub nsw i32 %60, %16 - %62 = sext i32 %61 to i64 - %63 = getelementptr inbounds i16, ptr %5, i64 %62 - %64 = tail call ptr @u_strncpy_77(ptr noundef nonnull %63, ptr noundef %2, i32 noundef %.76) - %65 = load i32, ptr %15, align 8, !tbaa !14 - %66 = sub nsw i32 %65, %.76 - store i32 %66, ptr %15, align 8, !tbaa !14 +61: ; preds = %.thread + %62 = getelementptr inbounds nuw i8, ptr %0, i64 12 + %63 = load i32, ptr %62, align 4, !tbaa !13 + %64 = sub nsw i32 %63, %16 + %65 = sext i32 %64 to i64 + %66 = getelementptr inbounds i16, ptr %5, i64 %65 + %67 = tail call ptr @u_strncpy_77(ptr noundef nonnull %66, ptr noundef %2, i32 noundef %.76) + %68 = load i32, ptr %15, align 8, !tbaa !14 + %69 = sub nsw i32 %68, %.76 + store i32 %69, ptr %15, align 8, !tbaa !14 br label %_ZL15u_sprintf_writePvPKDsi.exit74 -_ZL15u_sprintf_writePvPKDsi.exit74: ; preds = %11, %58, %_ZL15u_sprintf_writePvPKDsi.exit71 +_ZL15u_sprintf_writePvPKDsi.exit74: ; preds = %11, %61, %_ZL15u_sprintf_writePvPKDsi.exit71 %.1 = phi i32 [ %.057, %_ZL15u_sprintf_writePvPKDsi.exit71 ], [ %.76, %58 ], [ %., %11 ] - %67 = tail call i32 @llvm.smax.i32(i32 %3, i32 %.1) - %68 = icmp slt i32 %.1, 0 - %spec.select = select i1 %68, i32 %.1, i32 %67 - br label %69 + %70 = tail call i32 @llvm.smax.i32(i32 %3, i32 %.1) + %71 = icmp slt i32 %.1, 0 + %spec.select = select i1 %71, i32 %.1, i32 %70 + br label %72 -69: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit74, %9 +72: ; preds = %_ZL15u_sprintf_writePvPKDsi.exit74, %9 %.0 = phi i32 [ %8, %9 ], [ %spec.select, %_ZL15u_sprintf_writePvPKDsi.exit74 ] ret i32 %.0 } diff --git a/bench/icu/optimized/timezone.ll b/bench/icu/optimized/timezone.ll index eac609c85af..ba8d4ad60b2 100644 --- a/bench/icu/optimized/timezone.ll +++ b/bench/icu/optimized/timezone.ll @@ -2534,7 +2534,7 @@ define internal fastcc noundef range(i32 -1, -2147483648) i32 @_ZN6icu_77L17find 18: ; preds = %3 %19 = landingpad { ptr, i32 } cleanup - br label %65 + br label %63 20: ; preds = %.preheader, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit %.032 = phi i32 [ %..032, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ %8, %.preheader ] @@ -2557,13 +2557,13 @@ define internal fastcc noundef range(i32 -1, -2147483648) i32 @_ZN6icu_77L17find 29: ; preds = %24 %30 = landingpad { ptr, i32 } cleanup - br label %65 + br label %63 31: ; preds = %26 store ptr %25, ptr %6, align 8, !tbaa !15 %32 = load i32, ptr %5, align 4, !tbaa !12 %33 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString5setToEaNS_14ConstChar16PtrEi(ptr noundef nonnull align 8 dereferenceable(64) %4, i8 noundef signext 1, ptr noundef nonnull %6, i32 noundef %32) - to label %34 unwind label %60 + to label %34 unwind label %58 34: ; preds = %31 %35 = load ptr, ptr %6, align 8, !tbaa !15 @@ -2606,22 +2606,22 @@ define internal fastcc noundef range(i32 -1, -2147483648) i32 @_ZN6icu_77L17find _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %39, %.sink.split.i.i.i %.0.i.i = phi i8 [ %42, %39 ], [ %58, %.sink.split.i.i.i ] %.not40 = icmp eq i8 %.0.i.i, 0 - %59 = icmp slt i8 %.0.i.i, 0 - %..032 = select i1 %59, i32 %22, i32 %.032 - %.025. = select i1 %59, i32 %.025, i32 %22 + %57 = icmp slt i8 %.0.i.i, 0 + %..032 = select i1 %57, i32 %22, i32 %.032 + %.025. = select i1 %57, i32 %.025, i32 %22 br i1 %.not40, label %.loopexit, label %20, !llvm.loop !47 -60: ; preds = %31 - %61 = landingpad { ptr, i32 } +58: ; preds = %31 + %59 = landingpad { ptr, i32 } cleanup - %62 = load ptr, ptr %6, align 8, !tbaa !15 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %62) #21, !srcloc !18 - br label %65 + %60 = load ptr, ptr %6, align 8, !tbaa !15 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %60) #21, !srcloc !18 + br label %63 -63: ; preds = %.sink.split.i.i.i - %64 = landingpad { ptr, i32 } +61: ; preds = %.sink.split.i.i.i + %62 = landingpad { ptr, i32 } cleanup - br label %65 + br label %63 .loopexit: ; preds = %20, %26, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit, %9 %.0 = phi i32 [ -1, %9 ], [ -1, %20 ], [ -1, %26 ], [ %22, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ] @@ -2630,8 +2630,8 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %39, %.sink.split.i. call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #21 ret i32 %.0 -65: ; preds = %29, %60, %63, %18 - %.pn.pn = phi { ptr, i32 } [ %19, %18 ], [ %64, %63 ], [ %61, %60 ], [ %30, %29 ] +63: ; preds = %29, %58, %61, %18 + %.pn.pn = phi { ptr, i32 } [ %19, %18 ], [ %62, %63 ], [ %59, %60 ], [ %30, %29 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #21 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #21 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #21 diff --git a/bench/icu/optimized/tridpars.ll b/bench/icu/optimized/tridpars.ll index e60a76080fe..8062021357b 100644 --- a/bench/icu/optimized/tridpars.ll +++ b/bench/icu/optimized/tridpars.ll @@ -3222,7 +3222,7 @@ _ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit: ; preds = %1 18: ; preds = %_ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit %.not30 = icmp eq i8 %2, 0 - br i1 %.not30, label %50, label %19 + br i1 %.not30, label %48, label %19 19: ; preds = %18 %20 = getelementptr inbounds nuw i8, ptr %0, i64 8 @@ -3268,119 +3268,119 @@ _ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit: ; preds = %1 _ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit: ; preds = %25, %.sink.split.i.i.i %.0.i.i = phi i8 [ %28, %25 ], [ %48, %.sink.split.i.i.i ] - %49 = icmp eq i8 %.0.i.i, 0 - br label %50 + %47 = icmp eq i8 %.0.i.i, 0 + br label %48 -50: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit, %18 - %.not31 = phi i1 [ true, %18 ], [ %49, %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit ] +48: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit, %18 + %.not31 = phi i1 [ true, %18 ], [ %47, %_ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit ] tail call void @umtx_lock_77(ptr noundef nonnull @_ZN6icu_77L4LOCKE) - %51 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %52 = icmp eq ptr %51, null - br i1 %52, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %53 + %49 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %50 = icmp eq ptr %49, null + br i1 %50, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %51 -53: ; preds = %50 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %51, ptr noundef nonnull align 8 dereferenceable(64) %1) - to label %56 unwind label %54 +51: ; preds = %48 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %49, ptr noundef nonnull align 8 dereferenceable(64) %1) + to label %56 unwind label %52 -54: ; preds = %53 - %55 = landingpad { ptr, i32 } +52: ; preds = %51 + %53 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %51) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %49) #12 br label %.body -56: ; preds = %53 - %57 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 - %58 = load ptr, ptr %57, align 8, !tbaa !40 - %59 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %60 = icmp eq ptr %59, null - br i1 %60, label %62, label %61 - -61: ; preds = %56 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %59, ptr noundef nonnull align 8 dereferenceable(64) %0) - to label %62 unwind label %64 - -62: ; preds = %61, %56 - %63 = invoke noundef ptr @uhash_put_77(ptr noundef %58, ptr noundef %59, ptr noundef nonnull %51, ptr noundef nonnull align 4 dereferenceable(4) %3) - to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit unwind label %70 - -64: ; preds = %61 - %65 = landingpad { ptr, i32 } +54: ; preds = %51 + %55 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 + %56 = load ptr, ptr %55, align 8, !tbaa !40 + %57 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %58 = icmp eq ptr %57, null + br i1 %58, label %60, label %59 + +59: ; preds = %54 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %57, ptr noundef nonnull align 8 dereferenceable(64) %0) + to label %62 unwind label %62 + +60: ; preds = %59, %54 + %61 = invoke noundef ptr @uhash_put_77(ptr noundef %56, ptr noundef %57, ptr noundef nonnull %49, ptr noundef nonnull align 4 dereferenceable(4) %3) + to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit unwind label %68 + +62: ; preds = %59 + %63 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %59) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %57) #12 br label %.body -_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit: ; preds = %62 - br i1 %.not31, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35, label %66 +_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit: ; preds = %60 + br i1 %.not31, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35, label %64 -66: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit - %67 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %68 = icmp eq ptr %67, null - br i1 %68, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %69 +64: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit + %65 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %66 = icmp eq ptr %65, null + br i1 %66, label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, label %67 -69: ; preds = %66 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %67, ptr noundef nonnull align 8 dereferenceable(64) %0) - to label %74 unwind label %72 +67: ; preds = %64 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %65, ptr noundef nonnull align 8 dereferenceable(64) %0) + to label %74 unwind label %70 -70: ; preds = %80, %62 - %71 = landingpad { ptr, i32 } +68: ; preds = %78, %60 + %69 = landingpad { ptr, i32 } cleanup br label %.body -72: ; preds = %69 - %73 = landingpad { ptr, i32 } +70: ; preds = %67 + %71 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %67) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %65) #12 br label %.body -74: ; preds = %69 - %75 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 - %76 = load ptr, ptr %75, align 8, !tbaa !40 - %77 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 - %78 = icmp eq ptr %77, null - br i1 %78, label %80, label %79 - -79: ; preds = %74 - invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %77, ptr noundef nonnull align 8 dereferenceable(64) %1) - to label %80 unwind label %82 - -80: ; preds = %79, %74 - %81 = invoke noundef ptr @uhash_put_77(ptr noundef %76, ptr noundef %77, ptr noundef nonnull %67, ptr noundef nonnull align 4 dereferenceable(4) %3) - to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 unwind label %70 - -82: ; preds = %79 - %83 = landingpad { ptr, i32 } +72: ; preds = %67 + %73 = load ptr, ptr @_ZN6icu_77L16SPECIAL_INVERSESE, align 8, !tbaa !38 + %74 = load ptr, ptr %73, align 8, !tbaa !40 + %75 = tail call noundef ptr @_ZN6icu_777UMemorynwEm(i64 noundef 64) #12 + %76 = icmp eq ptr %75, null + br i1 %76, label %78, label %77 + +77: ; preds = %72 + invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %75, ptr noundef nonnull align 8 dereferenceable(64) %1) + to label %80 unwind label %80 + +78: ; preds = %77, %72 + %79 = invoke noundef ptr @uhash_put_77(ptr noundef %74, ptr noundef %75, ptr noundef nonnull %65, ptr noundef nonnull align 4 dereferenceable(4) %3) + to label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 unwind label %68 + +80: ; preds = %77 + %81 = landingpad { ptr, i32 } cleanup - tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %77) #12 + tail call void @_ZN6icu_777UMemorydlEPv(ptr noundef nonnull %75) #12 br label %.body -_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split: ; preds = %66, %50 +_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split: ; preds = %64, %48 store i32 7, ptr %3, align 4, !tbaa !13 br label %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 -_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, %80, %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit +_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35.sink.split, %78, %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit invoke void @umtx_unlock_77(ptr noundef nonnull @_ZN6icu_77L4LOCKE) - to label %_ZN6icu_775MutexD2Ev.exit unwind label %84 + to label %_ZN6icu_775MutexD2Ev.exit unwind label %82 -84: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 - %85 = landingpad { ptr, i32 } +82: ; preds = %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35 + %83 = landingpad { ptr, i32 } catch ptr null - %86 = extractvalue { ptr, i32 } %85, 0 - tail call void @__clang_call_terminate(ptr %86) #14 + %84 = extractvalue { ptr, i32 } %83, 0 + tail call void @__clang_call_terminate(ptr %84) #14 unreachable _ZN6icu_775MutexD2Ev.exit: ; preds = %16, %4, %_ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit35, %_ZN6icu_7713umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_.exit ret void -.body: ; preds = %64, %82, %70, %72, %54 - %.pn = phi { ptr, i32 } [ %73, %72 ], [ %55, %54 ], [ %65, %64 ], [ %71, %70 ], [ %83, %82 ] +.body: ; preds = %62, %80, %68, %70, %52 + %.pn = phi { ptr, i32 } [ %71, %72 ], [ %53, %54 ], [ %63, %64 ], [ %69, %70 ], [ %81, %82 ] invoke void @umtx_unlock_77(ptr noundef nonnull @_ZN6icu_77L4LOCKE) - to label %_ZN6icu_775MutexD2Ev.exit36 unwind label %87 + to label %_ZN6icu_775MutexD2Ev.exit36 unwind label %85 -87: ; preds = %.body - %88 = landingpad { ptr, i32 } +85: ; preds = %.body + %86 = landingpad { ptr, i32 } catch ptr null - %89 = extractvalue { ptr, i32 } %88, 0 - tail call void @__clang_call_terminate(ptr %89) #14 + %87 = extractvalue { ptr, i32 } %86, 0 + tail call void @__clang_call_terminate(ptr %87) #14 unreachable _ZN6icu_775MutexD2Ev.exit36: ; preds = %.body diff --git a/bench/icu/optimized/tzfmt.ll b/bench/icu/optimized/tzfmt.ll index b2969e7de95..6c18dccecea 100644 --- a/bench/icu/optimized/tzfmt.ll +++ b/bench/icu/optimized/tzfmt.ll @@ -6068,7 +6068,7 @@ define noundef i32 @_ZNK6icu_7714TimeZoneFormat23parseOffsetLocalizedGMTERKNS_13 %19 = phi i32 [ %14, %16 ], [ %11, %9 ] %20 = add nsw i32 %19, %8 store i32 %20, ptr %7, align 8, !tbaa !67 - br label %74 + br label %72 21: ; preds = %9 %22 = call noundef i32 @_ZNK6icu_7714TimeZoneFormat30parseOffsetDefaultLocalizedGMTERKNS_13UnicodeStringEiRi(ptr noundef nonnull align 8 dereferenceable(1024) %0, ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, ptr noundef nonnull align 4 dereferenceable(4) %6) @@ -6091,7 +6091,7 @@ define noundef i32 @_ZNK6icu_7714TimeZoneFormat23parseOffsetLocalizedGMTERKNS_13 %31 = phi i32 [ %26, %28 ], [ %23, %21 ] %32 = add nsw i32 %31, %8 store i32 %32, ptr %7, align 8, !tbaa !67 - br label %74 + br label %72 33: ; preds = %.thread50, %21 %34 = getelementptr inbounds nuw i8, ptr %0, i64 768 @@ -6131,45 +6131,45 @@ define noundef i32 @_ZNK6icu_7714TimeZoneFormat23parseOffsetLocalizedGMTERKNS_13 _ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit: ; preds = %38, %.sink.split.i.i.i %.0.i.i = phi i8 [ %43, %38 ], [ %56, %.sink.split.i.i.i ] - %57 = icmp eq i8 %.0.i.i, 0 - br i1 %57, label %58, label %.critedge - -58: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit - %59 = load i16, ptr %34, align 8, !tbaa !23 - %60 = icmp slt i16 %59, 0 - %61 = ashr i16 %59, 5 - %62 = sext i16 %61 to i32 - %63 = load i32, ptr %36, align 4 - %64 = select i1 %60, i32 %63, i32 %62 - %65 = add nsw i32 %64, %8 - store i32 %65, ptr %7, align 8, !tbaa !67 - br label %74 + %55 = icmp eq i8 %.0.i.i, 0 + br i1 %55, label %56, label %.critedge + +56: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit + %57 = load i16, ptr %34, align 8, !tbaa !23 + %58 = icmp slt i16 %57, 0 + %59 = ashr i16 %57, 5 + %60 = sext i16 %59 to i32 + %61 = load i32, ptr %36, align 4 + %62 = select i1 %58, i32 %61, i32 %60 + %63 = add nsw i32 %62, %8 + store i32 %63, ptr %7, align 8, !tbaa !67 + br label %72 -66: ; preds = %.critedge +64: ; preds = %.critedge %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %67 = getelementptr inbounds nuw [4 x [4 x i16]], ptr @_ZN6icu_77L15ALT_GMT_STRINGSE, i64 0, i64 %indvars.iv.next + %65 = getelementptr inbounds nuw [4 x [4 x i16]], ptr @_ZN6icu_77L15ALT_GMT_STRINGSE, i64 0, i64 %indvars.iv.next %exitcond = icmp eq i64 %indvars.iv.next, 3 br i1 %exitcond, label %.critedge48, label %.critedge, !llvm.loop !76 -.critedge: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %66 +.critedge: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %64 %indvars.iv = phi i64 [ %indvars.iv.next, %66 ], [ 0, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] - %68 = phi ptr [ %67, %66 ], [ @_ZN6icu_77L15ALT_GMT_STRINGSE, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] - %69 = tail call i32 @u_strlen_77(ptr noundef nonnull %68) - %70 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, i32 noundef %69, ptr noundef nonnull %68, i32 noundef 0, i32 noundef %69, i32 noundef 0) - %.not46 = icmp eq i8 %70, 0 - br i1 %.not46, label %71, label %66 - -71: ; preds = %.critedge - %72 = add nsw i32 %69, %8 - store i32 %72, ptr %7, align 8, !tbaa !67 - br label %74 + %66 = phi ptr [ %65, %66 ], [ @_ZN6icu_77L15ALT_GMT_STRINGSE, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] + %67 = tail call i32 @u_strlen_77(ptr noundef nonnull %66) + %68 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %8, i32 noundef %67, ptr noundef nonnull %66, i32 noundef 0, i32 noundef %67, i32 noundef 0) + %.not46 = icmp eq i8 %68, 0 + br i1 %.not46, label %69, label %64 -.critedge48: ; preds = %66 - %73 = getelementptr inbounds nuw i8, ptr %2, i64 12 - store i32 %8, ptr %73, align 4, !tbaa !69 - br label %74 +69: ; preds = %.critedge + %70 = add nsw i32 %67, %8 + store i32 %70, ptr %7, align 8, !tbaa !67 + br label %72 + +.critedge48: ; preds = %64 + %71 = getelementptr inbounds nuw i8, ptr %2, i64 12 + store i32 %8, ptr %71, align 4, !tbaa !69 + br label %72 -74: ; preds = %71, %.critedge48, %58, %29, %17 +72: ; preds = %69, %.critedge48, %56, %29, %17 %.0 = phi i32 [ %18, %17 ], [ %30, %29 ], [ 0, %58 ], [ 0, %.critedge48 ], [ 0, %71 ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #22 ret i32 %.0 @@ -8041,39 +8041,39 @@ _ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit: ; preds = %18, %.sink.spl %51 = trunc i16 %50 to i8 %52 = and i8 %51, 1 %53 = xor i8 %52, 1 - br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 + br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 .sink.split.i.i.i24: ; preds = %46 %54 = and i16 %38, 2 - %.not.i.i.i28 = icmp eq i16 %54, 0 + %.not.i.i.i27 = icmp eq i16 %54, 0 %55 = getelementptr inbounds nuw i8, ptr %0, i64 906 %56 = getelementptr inbounds nuw i8, ptr %0, i64 920 %57 = load ptr, ptr %56, align 8 - %58 = select i1 %.not.i.i.i28, ptr %57, ptr %55 + %58 = select i1 %.not.i.i.i27, ptr %57, ptr %55 %59 = tail call noundef signext i8 @_ZNK6icu_7713UnicodeString13doCaseCompareEiiPKDsiij(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %36, i32 noundef %44, ptr noundef %58, i32 noundef 0, i32 noundef %44, i32 noundef 0) - br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 + br label %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 -_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29: ; preds = %48, %.sink.split.i.i.i24 +_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28: ; preds = %48, %.sink.split.i.i.i24 %.0.i.i23 = phi i8 [ %53, %48 ], [ %59, %.sink.split.i.i.i24 ] %.not20 = icmp eq i8 %.0.i.i23, 0 br i1 %.not20, label %60, label %63 -60: ; preds = %35, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 +60: ; preds = %35, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #22 %61 = add i32 %33, %14 %62 = add i32 %61, %44 br label %64 -63: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %30, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 +63: ; preds = %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit, %30, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28 %.015.ph = phi i32 [ %32, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit29 ], [ %32, %30 ], [ 0, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #22 br label %64 64: ; preds = %60, %63 - %.01533 = phi i32 [ %.015.ph, %63 ], [ %32, %60 ] + %.01532 = phi i32 [ %.015.ph, %63 ], [ %32, %60 ] %65 = phi i32 [ 0, %63 ], [ %62, %60 ] store i32 %65, ptr %4, align 4, !tbaa !12 - ret i32 %.01533 + ret i32 %.01532 } ; Function Attrs: mustprogress uwtable diff --git a/bench/icu/optimized/ucharstriebuilder.ll b/bench/icu/optimized/ucharstriebuilder.ll index dd1b9559f31..1b96b94e754 100644 --- a/bench/icu/optimized/ucharstriebuilder.ll +++ b/bench/icu/optimized/ucharstriebuilder.ll @@ -161,7 +161,7 @@ _ZNK6icu_7713UnicodeStringixEi.exit.i: ; preds = %35, %_ZNK6icu_7717U %.0.i.i.i7 = phi i32 [ %44, %35 ], [ 65535, %_ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit ] %45 = add nsw i32 %27, 1 invoke void @_ZNK6icu_7713UnicodeString13tempSubStringEii(ptr dead_on_unwind nonnull writable sret(%"class.icu_77::UnicodeString") align 8 %5, ptr noundef nonnull align 8 dereferenceable(64) %2, i32 noundef %45, i32 noundef %.0.i.i.i7) - to label %_ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9 unwind label %76 + to label %_ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9 unwind label %74 _ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9: ; preds = %_ZNK6icu_7713UnicodeStringixEi.exit.i %46 = getelementptr inbounds nuw i8, ptr %4, i64 8 @@ -207,26 +207,26 @@ _ZNK6icu_7717UCharsTrieElement9getStringERKNS_13UnicodeStringE.exit9: ; preds = _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %51, %.sink.split.i.i.i %.0.i.i = phi i8 [ %54, %51 ], [ %74, %.sink.split.i.i.i ] - %75 = sext i8 %.0.i.i to i32 + %73 = sext i8 %.0.i.i to i32 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #13 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #13 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #13 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #13 - ret i32 %75 + ret i32 %73 -76: ; preds = %_ZNK6icu_7713UnicodeStringixEi.exit.i - %77 = landingpad { ptr, i32 } +74: ; preds = %_ZNK6icu_7713UnicodeStringixEi.exit.i + %75 = landingpad { ptr, i32 } cleanup - br label %80 + br label %78 -78: ; preds = %.sink.split.i.i.i - %79 = landingpad { ptr, i32 } +76: ; preds = %.sink.split.i.i.i + %77 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #13 - br label %80 + br label %78 -80: ; preds = %78, %76 - %.pn = phi { ptr, i32 } [ %79, %78 ], [ %77, %76 ] +78: ; preds = %76, %74 + %.pn = phi { ptr, i32 } [ %77, %78 ], [ %75, %76 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #13 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #13 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #13 diff --git a/bench/icu/optimized/uniset.ll b/bench/icu/optimized/uniset.ll index e90db28a073..bbc963f445a 100644 --- a/bench/icu/optimized/uniset.ll +++ b/bench/icu/optimized/uniset.ll @@ -4901,8 +4901,8 @@ define internal noundef range(i32 -128, 128) i32 @_ZN6icu_77L20compareUnicodeStr _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %8, %.sink.split.i.i.i %.0.i.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i.i ] - %32 = sext i8 %.0.i.i to i32 - ret i32 %32 + %30 = sext i8 %.0.i.i to i32 + ret i32 %30 } ; Function Attrs: mustprogress uwtable diff --git a/bench/icu/optimized/unistr.ll b/bench/icu/optimized/unistr.ll index 6e3de25931b..13a27cdd8bb 100644 --- a/bench/icu/optimized/unistr.ll +++ b/bench/icu/optimized/unistr.ll @@ -105,7 +105,7 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %3 store ptr null, ptr %24, align 8, !tbaa !3 %25 = getelementptr inbounds nuw i8, ptr %0, i64 16 store i32 0, ptr %25, align 8, !tbaa !3 - br label %63 + br label %59 26: ; preds = %3 %27 = load i32, ptr %4, align 4, !tbaa !8 @@ -146,19 +146,19 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %3 to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit unwind label %64 _ZN6icu_7713UnicodeString6appendERKS0_.exit: ; preds = %30, %.sink.split.i.i.i - %.0.i.i = phi ptr [ %5, %30 ], [ %46, %.sink.split.i.i.i ] - %47 = load i16, ptr %14, align 8, !tbaa !3 - %48 = icmp slt i16 %47, 0 - %49 = ashr i16 %47, 5 - %50 = sext i16 %49 to i32 - %51 = load i32, ptr %19, align 4 - %52 = select i1 %48, i32 %51, i32 %50 - %53 = icmp eq i32 %52, 0 - br i1 %53, label %_ZN6icu_7713UnicodeString6appendERKS0_.exit18, label %.sink.split.i.i.i11 + %.0.i.i = phi ptr [ %5, %30 ], [ %44, %.sink.split.i.i.i ] + %45 = load i16, ptr %14, align 8, !tbaa !3 + %46 = icmp slt i16 %45, 0 + %47 = ashr i16 %45, 5 + %48 = sext i16 %47 to i32 + %49 = load i32, ptr %19, align 4 + %50 = select i1 %46, i32 %49, i32 %48 + %51 = icmp eq i32 %50, 0 + br i1 %51, label %_ZN6icu_7713UnicodeString6appendERKS0_.exit18, label %.sink.split.i.i.i11 .sink.split.i.i.i11: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit - %spec.select.i.i12 = call i32 @llvm.smin.i32(i32 %52, i32 0) - %54 = icmp slt i32 %52, 0 + %spec.select.i.i12 = call i32 @llvm.smin.i32(i32 %50, i32 0) + %54 = icmp slt i32 %50, 0 %55 = sub nsw i32 %52, %spec.select.i.i12 %spec.select10.i.i13 = call i32 @llvm.smin.i32(i32 %52, i32 %55) %.07.i.i14 = select i1 %54, i32 0, i32 %spec.select10.i.i13 @@ -171,7 +171,7 @@ _ZN6icu_7713UnicodeString6appendERKS0_.exit: ; preds = %30, %.sink.split.i. %61 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i, ptr noundef %60, i32 noundef %spec.select.i.i12, i32 noundef %.07.i.i14) to label %_ZN6icu_7713UnicodeString6appendERKS0_.exit18 unwind label %64 -_ZN6icu_7713UnicodeString6appendERKS0_.exit18: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %.sink.split.i.i.i11 +_ZN6icu_7713UnicodeString6appendERKS0_.exit18:; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %.sink.split.i.i.i11 %.0.i.i16 = phi ptr [ %.0.i.i, %_ZN6icu_7713UnicodeString6appendERKS0_.exit ], [ %61, %.sink.split.i.i.i11 ] invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i16) to label %62 unwind label %64 @@ -179,19 +179,19 @@ _ZN6icu_7713UnicodeString6appendERKS0_.exit18: ; preds = %_ZN6icu_7713Unicode 62: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit18 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #24 - br label %63 + br label %59 -63: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %62 +59: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %62 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #24 ret void -64: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit18, %.sink.split.i.i.i, %.sink.split.i.i.i11 - %65 = landingpad { ptr, i32 } +60: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit18, %.sink.split.i.i.i, %.sink.split.i.i.i11 + %61 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #24 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #24 - resume { ptr, i32 } %65 + resume { ptr, i32 } %61 } ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) @@ -265,7 +265,7 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %4, %8 store ptr null, ptr %20, align 8, !tbaa !3 %21 = getelementptr inbounds nuw i8, ptr %0, i64 16 store i32 0, ptr %21, align 8, !tbaa !3 - br label %50 + br label %48 22: ; preds = %8 %23 = load i32, ptr %5, align 4, !tbaa !8 @@ -307,39 +307,39 @@ _ZN6icu_7713UnicodeString10setToBogusEv.exit: ; preds = %4, %8 _ZN6icu_7713UnicodeString6appendERKS0_.exit: ; preds = %26, %.sink.split.i.i.i %.0.i.i = phi ptr [ %6, %26 ], [ %42, %.sink.split.i.i.i ] - %43 = getelementptr inbounds nuw i8, ptr %.0.i.i, i64 8 - %44 = load i16, ptr %43, align 8, !tbaa !3 - %45 = and i16 %44, 17 - %.not.i.i.i9 = icmp ne i16 %45, 0 - %46 = icmp eq i64 %2, 0 - %or.cond.i.i = or i1 %46, %.not.i.i.i9 - br i1 %or.cond.i.i, label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, label %47 - -47: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit - %48 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i, ptr noundef %3, i32 noundef 0, i32 noundef %17) - to label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit unwind label %51 - -_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %47 - %.0.i.i10 = phi ptr [ %.0.i.i, %_ZN6icu_7713UnicodeString6appendERKS0_.exit ], [ %48, %47 ] + %41 = getelementptr inbounds nuw i8, ptr %.0.i.i, i64 8 + %42 = load i16, ptr %41, align 8, !tbaa !3 + %43 = and i16 %42, 17 + %.not.i.i.i9 = icmp ne i16 %43, 0 + %44 = icmp eq i64 %2, 0 + %or.cond.i.i = or i1 %44, %.not.i.i.i9 + br i1 %or.cond.i.i, label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, label %45 + +45: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit + %46 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN6icu_7713UnicodeString8doAppendEPKDsii(ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i, ptr noundef %3, i32 noundef 0, i32 noundef %17) + to label %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit unwind label %49 + +_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit: ; preds = %_ZN6icu_7713UnicodeString6appendERKS0_.exit, %45 + %.0.i.i10 = phi ptr [ %.0.i.i, %_ZN6icu_7713UnicodeString6appendERKS0_.exit ], [ %46, %45 ] invoke void @_ZN6icu_7713UnicodeStringC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef nonnull align 8 dereferenceable(64) %.0.i.i10) - to label %49 unwind label %51 + to label %47 unwind label %49 -49: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit +47: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #24 - br label %50 + br label %48 -50: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %49 +48: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %47 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #24 ret void -51: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, %.sink.split.i.i.i, %47 - %52 = landingpad { ptr, i32 } +49: ; preds = %_ZN6icu_7713UnicodeString6appendISt17basic_string_viewIDsSt11char_traitsIDsEEvEERS0_RKT_.exit, %.sink.split.i.i.i, %45 + %50 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #24 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #24 - resume { ptr, i32 } %52 + resume { ptr, i32 } %50 } ; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(readwrite, inaccessiblemem: none) uwtable diff --git a/bench/icu/optimized/unistr_case.ll b/bench/icu/optimized/unistr_case.ll index bbfb5572afb..f5a2774dabd 100644 --- a/bench/icu/optimized/unistr_case.ll +++ b/bench/icu/optimized/unistr_case.ll @@ -644,7 +644,7 @@ define signext range(i8 0, 2) i8 @uhash_compareCaselessUnicodeString_77(ptr %0, %37 = icmp slt i32 %16, 0 %38 = sub nsw i32 %16, %spec.select38.i.i %spec.select40.i.i = tail call i32 @llvm.smin.i32(i32 %16, i32 %38) - %.0.i.i = select i1 %37, i32 0, i32 %spec.select40.i.i + %spec.select32.i.i = select i1 %37, i32 0, i32 %spec.select40.i.i %39 = icmp eq ptr %34, null %40 = or i1 %35, %39 %spec.select32.i.i = select i1 %40, i32 0, i32 %spec.select15.i @@ -655,7 +655,7 @@ define signext range(i8 0, 2) i8 @uhash_compareCaselessUnicodeString_77(ptr %0, %44 = load ptr, ptr %43, align 8 %45 = select i1 %.not.i.i.i, ptr %44, ptr %42 %46 = sext i32 %spec.select38.i.i to i64 - %47 = getelementptr inbounds i16, ptr %45, i64 %46 + %48 = getelementptr inbounds i16, ptr %45, i64 %46 %48 = sext i32 %spec.select14.i to i64 %49 = select i1 %39, i64 0, i64 %48 %50 = getelementptr inbounds i16, ptr %34, i64 %49 @@ -665,29 +665,29 @@ define signext range(i8 0, 2) i8 @uhash_compareCaselessUnicodeString_77(ptr %0, 51: ; preds = %.sink.split.i.i.i call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6 store i32 0, ptr %3, align 4, !tbaa !6 - %52 = call i32 @u_strcmpFold_77(ptr noundef %47, i32 noundef %.0.i.i, ptr noundef %50, i32 noundef %spec.select32.i.i, i32 noundef 65536, ptr noundef nonnull %3) - %.not31.i.i = icmp eq i32 %52, 0 + %50 = call i32 @u_strcmpFold_77(ptr noundef %47, i32 noundef %.0.i.i, ptr noundef %50, i32 noundef %spec.select32.i.i, i32 noundef 65536, ptr noundef nonnull %3) + %.not31.i.i = icmp eq i32 %50, 0 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6 - br i1 %.not31.i.i, label %59, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit + br i1 %.not31.i.i, label %57, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit -53: ; preds = %.sink.split.i.i.i - %54 = icmp slt i32 %spec.select32.i.i, 0 - br i1 %54, label %55, label %58 +51: ; preds = %.sink.split.i.i.i + %52 = icmp slt i32 %spec.select32.i.i, 0 + br i1 %52, label %53, label %56 -55: ; preds = %53 - %56 = getelementptr inbounds i16, ptr %50, i64 %49 - %57 = tail call i32 @u_strlen_77(ptr noundef %56) - br label %58 +53: ; preds = %51 + %54 = getelementptr inbounds i16, ptr %50, i64 %49 + %55 = tail call i32 @u_strlen_77(ptr noundef %54) + br label %56 -58: ; preds = %55, %53 - %.123.i.i = phi i32 [ %57, %55 ], [ %spec.select32.i.i, %53 ] +56: ; preds = %53, %51 + %.123.i.i = phi i32 [ %55, %55 ], [ %spec.select32.i.i, %53 ] %.not30.i.i = icmp eq i32 %.0.i.i, %.123.i.i - br i1 %.not30.i.i, label %59, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit + br i1 %.not30.i.i, label %57, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit -59: ; preds = %58, %51 +57: ; preds = %56, %51 br label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit -_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit: ; preds = %59, %51, %.sink.split.i.i, %26, %58, %5, %2 +_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit: ; preds = %57, %51, %.sink.split.i.i, %26, %56, %5, %2 %.0 = phi i8 [ 1, %2 ], [ 0, %5 ], [ %28, %26 ], [ 0, %.sink.split.i.i ], [ 1, %59 ], [ 0, %51 ], [ 0, %58 ] ret i8 %.0 } diff --git a/bench/icu/optimized/units_router.ll b/bench/icu/optimized/units_router.ll index eb1a2c80aac..feb40ae9bf8 100644 --- a/bench/icu/optimized/units_router.ll +++ b/bench/icu/optimized/units_router.ll @@ -549,13 +549,13 @@ define void @_ZN6icu_775units11UnitsRouter24parseSkeletonToPrecisionENS_13Unicod store i32 0, ptr %0, align 8, !tbaa !15 %10 = getelementptr inbounds nuw i8, ptr %0, i64 24 store i32 0, ptr %10, align 8, !tbaa !19 - br label %46 + br label %44 11: ; preds = %3 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4) #14 store ptr @.str, ptr %5, align 8, !tbaa !20 invoke void @_ZN6icu_7713UnicodeStringC1EaNS_14ConstChar16PtrEi(ptr noundef nonnull align 8 dereferenceable(64) %4, i8 noundef signext 1, ptr noundef nonnull %5, i32 noundef -1) - to label %12 unwind label %38 + to label %12 unwind label %36 12: ; preds = %11 %13 = getelementptr inbounds nuw i8, ptr %4, i64 8 @@ -599,55 +599,55 @@ define void @_ZN6icu_775units11UnitsRouter24parseSkeletonToPrecisionENS_13Unicod _ZNK6icu_7713UnicodeString10startsWithERKS0_.exit: ; preds = %12, %.noexc %.0.i.i = phi i1 [ %.not, %.noexc ], [ %.not6.i.i, %12 ] call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #14 - %34 = load ptr, ptr %5, align 8, !tbaa !20 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %34) #14, !srcloc !24 + %32 = load ptr, ptr %5, align 8, !tbaa !20 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %32) #14, !srcloc !24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #14 - br i1 %.0.i.i, label %36, label %44 + br i1 %.0.i.i, label %34, label %42 .critedge: ; preds = %.sink.split.i.i.i call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #14 - %35 = load ptr, ptr %5, align 8, !tbaa !20 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %35) #14, !srcloc !24 + %33 = load ptr, ptr %5, align 8, !tbaa !20 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %33) #14, !srcloc !24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #14 - br label %36 + br label %34 -36: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit +34: ; preds = %.critedge, %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit store i32 3, ptr %2, align 4, !tbaa !13 store i32 0, ptr %0, align 8, !tbaa !15 - %37 = getelementptr inbounds nuw i8, ptr %0, i64 24 - store i32 0, ptr %37, align 8, !tbaa !19 - br label %46 + %35 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i32 0, ptr %35, align 8, !tbaa !19 + br label %44 -38: ; preds = %11 - %39 = landingpad { ptr, i32 } +36: ; preds = %11 + %37 = landingpad { ptr, i32 } cleanup - br label %42 + br label %40 -40: ; preds = %25 - %41 = landingpad { ptr, i32 } +38: ; preds = %25 + %39 = landingpad { ptr, i32 } cleanup call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %4) #14 - br label %42 + br label %40 -42: ; preds = %40, %38 - %.pn = phi { ptr, i32 } [ %41, %40 ], [ %39, %38 ] - %43 = load ptr, ptr %5, align 8, !tbaa !20 - call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %43) #14, !srcloc !24 +40: ; preds = %38, %36 + %.pn = phi { ptr, i32 } [ %39, %40 ], [ %37, %38 ] + %41 = load ptr, ptr %5, align 8, !tbaa !20 + call void asm sideeffect "", "rm,~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %41) #14, !srcloc !24 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #14 resume { ptr, i32 } %.pn -44: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit +42: ; preds = %_ZNK6icu_7713UnicodeString10startsWithERKS0_.exit call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #14 call void @_ZN6icu_7713StringSegmentC1ERKNS_13UnicodeStringEb(ptr noundef nonnull align 8 dereferenceable(17) %6, ptr noundef nonnull align 8 dereferenceable(64) %1, i1 noundef zeroext false) call void @_ZN6icu_7713StringSegment12adjustOffsetEi(ptr noundef nonnull align 8 dereferenceable(17) %6, i32 noundef 20) store i32 0, ptr %0, align 8, !tbaa !15 - %45 = getelementptr inbounds nuw i8, ptr %0, i64 24 - store i32 0, ptr %45, align 8, !tbaa !19 + %43 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i32 0, ptr %43, align 8, !tbaa !19 call void @_ZN6icu_776number4impl20parseIncrementOptionERKNS_13StringSegmentERNS0_9PrecisionER10UErrorCode(ptr noundef nonnull align 8 dereferenceable(17) %6, ptr noundef nonnull align 8 dereferenceable(28) %0, ptr noundef nonnull align 4 dereferenceable(4) %2) call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #14 - br label %46 + br label %44 -46: ; preds = %36, %44, %9 +44: ; preds = %34, %42, %9 ret void } diff --git a/bench/icu/optimized/uspoof_conf.ll b/bench/icu/optimized/uspoof_conf.ll index 003ffc7b8f2..7c54bf26880 100644 --- a/bench/icu/optimized/uspoof_conf.ll +++ b/bench/icu/optimized/uspoof_conf.ll @@ -237,11 +237,11 @@ define internal noundef range(i32 -128, 128) i32 @_ZL16SPUStringCompare8UElement %19 = load i32, ptr %18, align 4 %20 = select i1 %15, i32 %19, i32 %17 %21 = icmp slt i32 %11, %20 - br i1 %21, label %39, label %22 + br i1 %21, label %37, label %22 22: ; preds = %2 %23 = icmp sgt i32 %11, %20 - br i1 %23, label %39, label %24 + br i1 %23, label %37, label %24 24: ; preds = %22 %25 = and i16 %14, 1 @@ -271,11 +271,11 @@ define internal noundef range(i32 -128, 128) i32 @_ZL16SPUStringCompare8UElement _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %26, %.sink.split.i.i.i %.0.i.i = phi i8 [ %29, %26 ], [ %37, %.sink.split.i.i.i ] - %38 = sext i8 %.0.i.i to i32 - br label %39 + %36 = sext i8 %.0.i.i to i32 + br label %37 -39: ; preds = %22, %2, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0 = phi i32 [ %38, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ -1, %2 ], [ 1, %22 ] +37: ; preds = %22, %2, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit + %.0 = phi i32 [ %36, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit ], [ -1, %2 ], [ 1, %22 ] ret i32 %.0 } diff --git a/bench/libpng/optimized/pngrutil.ll b/bench/libpng/optimized/pngrutil.ll index 74a4a8dcc2c..fabbf76bedc 100644 --- a/bench/libpng/optimized/pngrutil.ll +++ b/bench/libpng/optimized/pngrutil.ll @@ -1996,12 +1996,12 @@ define void @png_read_IDAT_data(ptr noalias noundef initializes((344, 356)) %0, %32 = getelementptr inbounds nuw i8, ptr %0, i64 368 br label %33 -33: ; preds = %168, %3 +33: ; preds = %166, %3 %.1 = phi i64 [ %spec.select, %3 ], [ %.3, %168 ] call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %6) #12 %34 = load i32, ptr %11, align 8, !tbaa !39 %35 = icmp eq i32 %34, 0 - br i1 %35, label %.preheader.preheader, label %136 + br i1 %35, label %.preheader.preheader, label %134 .preheader.preheader: ; preds = %33 %.pre = load i32, ptr %12, align 8, !tbaa !87 @@ -2176,105 +2176,105 @@ png_read_chunk_header.exit: ; preds = %97 124: ; preds = %117 %.not.i84 = icmp eq ptr %122, null - br i1 %.not.i84, label %129, label %125 + br i1 %.not.i84, label %127, label %123 -125: ; preds = %124 - %126 = load i64, ptr %30, align 8, !tbaa !108, !alias.scope !105 - %127 = icmp ult i64 %126, %121 - br i1 %127, label %128, label %png_crc_read.exit +123: ; preds = %124 + %124 = load i64, ptr %30, align 8, !tbaa !108, !alias.scope !105 + %125 = icmp ult i64 %124, %121 + br i1 %125, label %126, label %png_crc_read.exit -128: ; preds = %125 +126: ; preds = %123 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %29, i8 0, i64 16, i1 false), !alias.scope !105 call void @png_free(ptr noundef nonnull %0, ptr noundef nonnull %122) #12 - br label %129 + br label %127 -129: ; preds = %128, %124 - %130 = call noalias ptr @png_malloc_base(ptr noundef nonnull %0, i64 noundef range(i64 0, 4294967296) %121) #12 - %.not27.i = icmp eq ptr %130, null - br i1 %.not27.i, label %132, label %131 +127: ; preds = %126, %124 + %128 = call noalias ptr @png_malloc_base(ptr noundef nonnull %0, i64 noundef range(i64 0, 4294967296) %121) #12 + %.not27.i = icmp eq ptr %128, null + br i1 %.not27.i, label %130, label %129 -131: ; preds = %129 - call void @llvm.memset.p0.i64(ptr nonnull align 1 %130, i8 0, i64 range(i64 0, 4294967296) %121, i1 false) - store ptr %130, ptr %29, align 8, !tbaa !104, !alias.scope !105 +129: ; preds = %127 + call void @llvm.memset.p0.i64(ptr nonnull align 1 %128, i8 0, i64 range(i64 0, 4294967296) %121, i1 false) + store ptr %128, ptr %29, align 8, !tbaa !104, !alias.scope !105 store i64 %121, ptr %30, align 8, !tbaa !108, !alias.scope !105 br label %png_crc_read.exit -132: ; preds = %117, %129 +130: ; preds = %117, %127 call void @png_chunk_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.22) #11 unreachable -png_crc_read.exit: ; preds = %131, %125 - %.021.i = phi ptr [ %130, %131 ], [ %122, %125 ] +png_crc_read.exit: ; preds = %129, %123 + %.021.i = phi ptr [ %128, %131 ], [ %122, %125 ] call void @png_read_data(ptr noundef nonnull %0, ptr noundef nonnull %.021.i, i64 noundef %121) #12 call void @png_calculate_crc(ptr noundef nonnull %0, ptr noundef nonnull %.021.i, i64 noundef %121) #12 - %133 = load i32, ptr %12, align 8, !tbaa !87 - %134 = sub i32 %133, %.171 - store i32 %134, ptr %12, align 8, !tbaa !87 + %131 = load i32, ptr %12, align 8, !tbaa !87 + %132 = sub i32 %131, %.171 + store i32 %132, ptr %12, align 8, !tbaa !87 store ptr %.021.i, ptr %7, align 8, !tbaa !40 store i32 %.171, ptr %11, align 8, !tbaa !39 - %135 = icmp eq i64 %spec.select8291, 0 - br label %136 + %133 = icmp eq i64 %spec.select8291, 0 + br label %134 -136: ; preds = %png_crc_read.exit, %33 - %.not7.i = phi i1 [ %135, %png_crc_read.exit ], [ false, %33 ] - br i1 %10, label %139, label %137 +134: ; preds = %png_crc_read.exit, %33 + %.not7.i = phi i1 [ %133, %png_crc_read.exit ], [ false, %33 ] + br i1 %10, label %137, label %135 -137: ; preds = %136 +135: ; preds = %134 %spec.select8392 = call i64 @llvm.umin.i64(i64 %.1, i64 4294967295) %spec.select83 = trunc nuw i64 %spec.select8392 to i32 - %138 = sub i64 %.1, %spec.select8392 - br label %140 + %136 = sub i64 %.1, %spec.select8392 + br label %138 -139: ; preds = %136 +137: ; preds = %134 store ptr %6, ptr %8, align 8, !tbaa !85 - br label %140 + br label %138 -140: ; preds = %139, %137 +138: ; preds = %137, %135 %storemerge = phi i32 [ 1024, %139 ], [ %spec.select83, %137 ] - %.2 = phi i64 [ %.1, %139 ], [ %138, %137 ] + %.2 = phi i64 [ %.1, %139 ], [ %136, %137 ] store i32 %storemerge, ptr %9, align 8, !tbaa !86 call void @llvm.experimental.noalias.scope.decl(metadata !109) - %141 = load i8, ptr %31, align 8, !tbaa !38, !alias.scope !109 - %.not.i85 = icmp eq i8 %141, 0 + %139 = load i8, ptr %31, align 8, !tbaa !38, !alias.scope !109 + %.not.i85 = icmp eq i8 %139, 0 %brmerge = or i1 %.not.i85, %.not7.i - br i1 %brmerge, label %148, label %142 + br i1 %brmerge, label %146, label %140 -142: ; preds = %140 - %143 = load ptr, ptr %7, align 8, !tbaa !40, !alias.scope !109 - %144 = load i8, ptr %143, align 1, !tbaa !3, !noalias !109 - %145 = icmp slt i8 %144, 0 - br i1 %145, label %146, label %147 +140: ; preds = %138 + %141 = load ptr, ptr %7, align 8, !tbaa !40, !alias.scope !109 + %142 = load i8, ptr %141, align 1, !tbaa !3, !noalias !109 + %143 = icmp slt i8 %142, 0 + br i1 %143, label %144, label %145 -146: ; preds = %142 +144: ; preds = %140 store ptr @.str.5, ptr %32, align 8, !tbaa !41, !alias.scope !109 br label %png_zlib_inflate.exit -147: ; preds = %142 +145: ; preds = %140 store i8 0, ptr %31, align 8, !tbaa !38, !alias.scope !109 - br label %148 + br label %146 -148: ; preds = %140, %147 - %149 = call i32 @inflate(ptr noundef nonnull %7, i32 noundef 0) #12 +146: ; preds = %138, %145 + %147 = call i32 @inflate(ptr noundef nonnull %7, i32 noundef 0) #12 br label %png_zlib_inflate.exit -png_zlib_inflate.exit: ; preds = %146, %148 - %.0.i = phi i32 [ -3, %146 ], [ %149, %148 ] - %150 = load i32, ptr %9, align 8, !tbaa !86 - %151 = zext i32 %150 to i64 - %152 = add i64 %.2, %151 +png_zlib_inflate.exit: ; preds = %144, %146 + %.0.i = phi i32 [ -3, %146 ], [ %147, %148 ] + %148 = load i32, ptr %9, align 8, !tbaa !86 + %149 = zext i32 %148 to i64 + %150 = add i64 %.2, %149 %reass.sub = add i64 %.2, 1024 - %153 = sub i64 %reass.sub, %151 - %.3 = select i1 %10, i64 %153, i64 %152 + %151 = sub i64 %reass.sub, %149 + %.3 = select i1 %10, i64 %151, i64 %150 store i32 0, ptr %9, align 8, !tbaa !86 switch i32 %.0.i, label %164 [ - i32 1, label %154 - i32 0, label %168 + i32 1, label %152 + i32 0, label %166 ] -154: ; preds = %png_zlib_inflate.exit +152: ; preds = %png_zlib_inflate.exit store ptr null, ptr %8, align 8, !tbaa !85 - %155 = getelementptr inbounds nuw i8, ptr %0, i64 300 - %156 = load i32, ptr %155, align 4, !tbaa !24 + %153 = getelementptr inbounds nuw i8, ptr %0, i64 300 + %154 = load i32, ptr %153, align 4, !tbaa !24 %157 = or i32 %156, 8 store i32 %157, ptr %155, align 4, !tbaa !24 %158 = load i32, ptr %14, align 8, !tbaa !31 @@ -2284,51 +2284,51 @@ png_zlib_inflate.exit: ; preds = %146, %148 %.not77 = icmp eq i32 %160, 0 br i1 %.not77, label %161, label %163 -161: ; preds = %154 +161:; preds = %154 %162 = load i32, ptr %12, align 8, !tbaa !87 %.not78 = icmp eq i32 %162, 0 br i1 %.not78, label %169, label %163 163: ; preds = %161, %154 call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.23) #12 - br label %169 + br label %167 -164: ; preds = %png_zlib_inflate.exit +162: ; preds = %png_zlib_inflate.exit call void @png_zstream_error(ptr noundef nonnull %0, i32 noundef %.0.i) #12 - %165 = load ptr, ptr %32, align 8, !tbaa !41 - br i1 %10, label %167, label %166 + %163 = load ptr, ptr %32, align 8, !tbaa !41 + br i1 %10, label %165, label %164 -166: ; preds = %164 - call void @png_chunk_error(ptr noundef nonnull %0, ptr noundef %165) #11 +164: ; preds = %162 + call void @png_chunk_error(ptr noundef nonnull %0, ptr noundef %163) #11 unreachable -167: ; preds = %164 - call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef %165) #12 +165: ; preds = %162 + call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef %163) #12 call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #12 br label %.loopexit -168: ; preds = %png_zlib_inflate.exit +166: ; preds = %png_zlib_inflate.exit call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #12 %cond = icmp eq i64 %.3, 0 br i1 %cond, label %.loopexit, label %33 -169: ; preds = %163, %161 +167: ; preds = %163, %161 call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #12 %.not80 = icmp eq i64 %.3, 0 - br i1 %.not80, label %.loopexit, label %170 + br i1 %.not80, label %.loopexit, label %168 -170: ; preds = %169 - br i1 %10, label %172, label %171 +168: ; preds = %167 + br i1 %10, label %170, label %169 -171: ; preds = %170 +169: ; preds = %168 call void @png_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.21) #11 unreachable -172: ; preds = %170 +170: ; preds = %168 call void @png_chunk_benign_error(ptr noundef nonnull %0, ptr noundef nonnull @.str.24) #12 br label %.loopexit -.loopexit: ; preds = %168, %167, %172, %169 +.loopexit: ; preds = %166, %165, %170, %167 ret void } diff --git a/bench/libquic/optimized/url_parse.ll b/bench/libquic/optimized/url_parse.ll index b08a358fad2..c01324ca0ce 100644 --- a/bench/libquic/optimized/url_parse.ll +++ b/bench/libquic/optimized/url_parse.ll @@ -4881,7 +4881,7 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 %33 = getelementptr inbounds nuw i8, ptr %3, i64 48 %34 = getelementptr inbounds nuw i8, ptr %3, i64 56 %35 = icmp eq i32 %27, -1 - br i1 %35, label %36, label %43 + br i1 %35, label %36, label %.lr.ph.preheader.i30 36: ; preds = %.thread, %26 %37 = phi ptr [ %25, %.thread ], [ %34, %26 ] @@ -4898,7 +4898,7 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 store i32 -1, ptr %42, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -43: ; preds = %26 +.lr.ph.preheader.i30: ; preds = %26 %44 = icmp sgt i32 %27, 0 br i1 %44, label %.lr.ph.preheader.i30, label %._crit_edge.thread.i @@ -4907,102 +4907,102 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 %46 = sext i32 %1 to i64 br label %.lr.ph.i31 -._crit_edge.i: ; preds = %57 - %47 = icmp sgt i32 %.139.i, -1 - br i1 %47, label %58, label %._crit_edge.thread.i +._crit_edge.i: ; preds = %55 + %45 = icmp sgt i32 %.139.i, -1 + br i1 %45, label %56, label %._crit_edge.thread.i -.lr.ph.i31: ; preds = %57, %.lr.ph.preheader.i30 +.lr.ph.i31: ; preds = %55, %.lr.ph.preheader.i30 %indvars.iv.i32 = phi i64 [ %45, %.lr.ph.preheader.i30 ], [ %indvars.iv.next.i33, %57 ] %.058.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.1.i, %57 ] %.03857.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.139.i, %57 ] - %48 = getelementptr inbounds i8, ptr %0, i64 %indvars.iv.i32 - %49 = load i8, ptr %48, align 1, !tbaa !21 - switch i8 %49, label %57 [ - i8 63, label %50 - i8 35, label %54 + %46 = getelementptr inbounds i8, ptr %0, i64 %indvars.iv.i32 + %47 = load i8, ptr %46, align 1, !tbaa !21 + switch i8 %47, label %57 [ + i8 63, label %48 + i8 35, label %52 ] -50: ; preds = %.lr.ph.i31 - %51 = icmp slt i32 %.03857.i, 0 - %52 = icmp slt i32 %.058.i, 0 - %or.cond.i = select i1 %51, i1 %52, i1 false - %53 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select.i34 = select i1 %or.cond.i, i32 %53, i32 %.058.i - br label %57 - -54: ; preds = %.lr.ph.i31 - %55 = icmp slt i32 %.03857.i, 0 - %56 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select47.i = select i1 %55, i32 %56, i32 %.03857.i - br label %57 - -57: ; preds = %54, %50, %.lr.ph.i31 +48: ; preds = %.lr.ph.i31 + %49 = icmp slt i32 %.03857.i, 0 + %50 = icmp slt i32 %.058.i, 0 + %or.cond.i = select i1 %49, i1 %50, i1 false + %51 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select.i34 = select i1 %or.cond.i, i32 %51, i32 %.058.i + br label %55 + +52: ; preds = %.lr.ph.i31 + %53 = icmp slt i32 %.03857.i, 0 + %54 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select47.i = select i1 %53, i32 %54, i32 %.03857.i + br label %55 + +55: ; preds = %52, %48, %.lr.ph.i31 %.139.i = phi i32 [ %.03857.i, %.lr.ph.i31 ], [ %.03857.i, %50 ], [ %spec.select47.i, %54 ] %.1.i = phi i32 [ %.058.i, %.lr.ph.i31 ], [ %spec.select.i34, %50 ], [ %.058.i, %54 ] %indvars.iv.next.i33 = add nsw i64 %indvars.iv.i32, 1 %exitcond.not = icmp eq i64 %indvars.iv.next.i33, %46 br i1 %exitcond.not, label %._crit_edge.i, label %.lr.ph.i31, !llvm.loop !49 -58: ; preds = %._crit_edge.i - %59 = add nuw nsw i32 %.139.i, 1 - %60 = sub nsw i32 %1, %59 - %.sroa.2.0.insert.ext.i.i = zext i32 %60 to i64 +56: ; preds = %._crit_edge.i + %57 = add nuw nsw i32 %.139.i, 1 + %58 = sub nsw i32 %1, %57 + %.sroa.2.0.insert.ext.i.i = zext i32 %58 to i64 %.sroa.2.0.insert.shift.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i.i, 32 - %.sroa.0.0.insert.ext.i.i = zext nneg i32 %59 to i64 + %.sroa.0.0.insert.ext.i.i = zext nneg i32 %57 to i64 %.sroa.0.0.insert.insert.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i store i64 %.sroa.0.0.insert.insert.i.i, ptr %34, align 4 - br label %62 + br label %60 ._crit_edge.thread.i: ; preds = %._crit_edge.i, %43 %.0.lcssa64.i = phi i32 [ %.1.i, %._crit_edge.i ], [ -1, %43 ] store i32 0, ptr %34, align 4, !tbaa !3 - %61 = getelementptr inbounds nuw i8, ptr %3, i64 60 - store i32 -1, ptr %61, align 4, !tbaa !8 - br label %62 + %59 = getelementptr inbounds nuw i8, ptr %3, i64 60 + store i32 -1, ptr %59, align 4, !tbaa !8 + br label %60 -62: ; preds = %._crit_edge.thread.i, %58 - %.0.lcssa63.i = phi i32 [ %.1.i, %58 ], [ %.0.lcssa64.i, %._crit_edge.thread.i ] +60: ; preds = %._crit_edge.thread.i, %56 + %.041.i = phi i32 [ %.1.i, %58 ], [ %.0.lcssa64.i, %._crit_edge.thread.i ] %.041.i = phi i32 [ %.139.i, %58 ], [ %1, %._crit_edge.thread.i ] %63 = icmp sgt i32 %.0.lcssa63.i, -1 br i1 %63, label %64, label %67 -64: ; preds = %62 - %65 = add nuw nsw i32 %.0.lcssa63.i, 1 +64:; preds = %62 + %65 = add nuw nsw i32 %.041.i, 1 %66 = sub nsw i32 %.041.i, %65 %.sroa.2.0.insert.ext.i48.i = zext i32 %66 to i64 %.sroa.2.0.insert.shift.i49.i = shl nuw i64 %.sroa.2.0.insert.ext.i48.i, 32 %.sroa.0.0.insert.ext.i50.i = zext nneg i32 %65 to i64 %.sroa.0.0.insert.insert.i51.i = or disjoint i64 %.sroa.2.0.insert.shift.i49.i, %.sroa.0.0.insert.ext.i50.i store i64 %.sroa.0.0.insert.insert.i51.i, ptr %33, align 4 - br label %69 + br label %67 -67: ; preds = %62 +65: ; preds = %60 store i32 0, ptr %33, align 4, !tbaa !3 - %68 = getelementptr inbounds nuw i8, ptr %3, i64 52 - store i32 -1, ptr %68, align 4, !tbaa !8 - br label %69 + %66 = getelementptr inbounds nuw i8, ptr %3, i64 52 + store i32 -1, ptr %66, align 4, !tbaa !8 + br label %67 -69: ; preds = %67, %64 - %.143.i = phi i32 [ %.0.lcssa63.i, %64 ], [ %.041.i, %67 ] +67: ; preds = %65, %64 + %.143.i = phi i32 [ %.041.i, %64 ], [ %.041.i, %67 ] %.not.i = icmp eq i32 %.143.i, %spec.select.i - br i1 %.not.i, label %72, label %70 + br i1 %.not.i, label %70, label %68 -70: ; preds = %69 - %71 = sub nsw i32 %.143.i, %spec.select.i - %.sroa.2.0.insert.ext.i52.i = zext i32 %71 to i64 +68: ; preds = %67 + %69 = sub nsw i32 %.143.i, %spec.select.i + %.sroa.2.0.insert.ext.i52.i = zext i32 %69 to i64 %.sroa.2.0.insert.shift.i53.i = shl nuw i64 %.sroa.2.0.insert.ext.i52.i, 32 %.sroa.0.0.insert.ext.i54.i = zext i32 %spec.select.i to i64 %.sroa.0.0.insert.insert.i55.i = or disjoint i64 %.sroa.2.0.insert.shift.i53.i, %.sroa.0.0.insert.ext.i54.i store i64 %.sroa.0.0.insert.insert.i55.i, ptr %32, align 4 br label %_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -72: ; preds = %69 +70: ; preds = %67 store i32 0, ptr %32, align 4, !tbaa !3 - %73 = getelementptr inbounds nuw i8, ptr %3, i64 44 - store i32 -1, ptr %73, align 4, !tbaa !8 + %71 = getelementptr inbounds nuw i8, ptr %3, i64 44 + store i32 -1, ptr %71, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %70, %72 +_ZN3url12_GLOBAL__N_19ParsePathIcEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %68, %70 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #15 ret void } @@ -5110,7 +5110,7 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 %33 = getelementptr inbounds nuw i8, ptr %3, i64 48 %34 = getelementptr inbounds nuw i8, ptr %3, i64 56 %35 = icmp eq i32 %27, -1 - br i1 %35, label %36, label %43 + br i1 %35, label %36, label %.lr.ph.preheader.i30 36: ; preds = %.thread, %26 %37 = phi ptr [ %25, %.thread ], [ %34, %26 ] @@ -5127,7 +5127,7 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 store i32 -1, ptr %42, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -43: ; preds = %26 +.lr.ph.preheader.i30: ; preds = %26 %44 = icmp sgt i32 %27, 0 br i1 %44, label %.lr.ph.preheader.i30, label %._crit_edge.thread.i @@ -5136,102 +5136,102 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 %46 = sext i32 %1 to i64 br label %.lr.ph.i31 -._crit_edge.i: ; preds = %57 - %47 = icmp sgt i32 %.139.i, -1 - br i1 %47, label %58, label %._crit_edge.thread.i +._crit_edge.i: ; preds = %55 + %45 = icmp sgt i32 %.139.i, -1 + br i1 %45, label %56, label %._crit_edge.thread.i -.lr.ph.i31: ; preds = %57, %.lr.ph.preheader.i30 +.lr.ph.i31: ; preds = %55, %.lr.ph.preheader.i30 %indvars.iv.i32 = phi i64 [ %45, %.lr.ph.preheader.i30 ], [ %indvars.iv.next.i33, %57 ] %.058.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.1.i, %57 ] %.03857.i = phi i32 [ -1, %.lr.ph.preheader.i30 ], [ %.139.i, %57 ] - %48 = getelementptr inbounds i16, ptr %0, i64 %indvars.iv.i32 - %49 = load i16, ptr %48, align 2, !tbaa !25 - switch i16 %49, label %57 [ - i16 63, label %50 - i16 35, label %54 + %46 = getelementptr inbounds i16, ptr %0, i64 %indvars.iv.i32 + %47 = load i16, ptr %46, align 2, !tbaa !25 + switch i16 %47, label %57 [ + i16 63, label %48 + i16 35, label %52 ] -50: ; preds = %.lr.ph.i31 - %51 = icmp slt i32 %.03857.i, 0 - %52 = icmp slt i32 %.058.i, 0 - %or.cond.i = select i1 %51, i1 %52, i1 false - %53 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select.i34 = select i1 %or.cond.i, i32 %53, i32 %.058.i - br label %57 - -54: ; preds = %.lr.ph.i31 - %55 = icmp slt i32 %.03857.i, 0 - %56 = trunc nsw i64 %indvars.iv.i32 to i32 - %spec.select47.i = select i1 %55, i32 %56, i32 %.03857.i - br label %57 - -57: ; preds = %54, %50, %.lr.ph.i31 +48: ; preds = %.lr.ph.i31 + %49 = icmp slt i32 %.03857.i, 0 + %50 = icmp slt i32 %.058.i, 0 + %or.cond.i = select i1 %49, i1 %50, i1 false + %51 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select.i34 = select i1 %or.cond.i, i32 %51, i32 %.058.i + br label %55 + +52: ; preds = %.lr.ph.i31 + %53 = icmp slt i32 %.03857.i, 0 + %54 = trunc nsw i64 %indvars.iv.i32 to i32 + %spec.select47.i = select i1 %53, i32 %54, i32 %.03857.i + br label %55 + +55: ; preds = %52, %48, %.lr.ph.i31 %.139.i = phi i32 [ %.03857.i, %.lr.ph.i31 ], [ %.03857.i, %50 ], [ %spec.select47.i, %54 ] %.1.i = phi i32 [ %.058.i, %.lr.ph.i31 ], [ %spec.select.i34, %50 ], [ %.058.i, %54 ] %indvars.iv.next.i33 = add nsw i64 %indvars.iv.i32, 1 %exitcond.not = icmp eq i64 %indvars.iv.next.i33, %46 br i1 %exitcond.not, label %._crit_edge.i, label %.lr.ph.i31, !llvm.loop !50 -58: ; preds = %._crit_edge.i - %59 = add nuw nsw i32 %.139.i, 1 - %60 = sub nsw i32 %1, %59 - %.sroa.2.0.insert.ext.i.i = zext i32 %60 to i64 +56: ; preds = %._crit_edge.i + %57 = add nuw nsw i32 %.139.i, 1 + %58 = sub nsw i32 %1, %57 + %.sroa.2.0.insert.ext.i.i = zext i32 %58 to i64 %.sroa.2.0.insert.shift.i.i = shl nuw i64 %.sroa.2.0.insert.ext.i.i, 32 - %.sroa.0.0.insert.ext.i.i = zext nneg i32 %59 to i64 + %.sroa.0.0.insert.ext.i.i = zext nneg i32 %57 to i64 %.sroa.0.0.insert.insert.i.i = or disjoint i64 %.sroa.2.0.insert.shift.i.i, %.sroa.0.0.insert.ext.i.i store i64 %.sroa.0.0.insert.insert.i.i, ptr %34, align 4 - br label %62 + br label %60 ._crit_edge.thread.i: ; preds = %._crit_edge.i, %43 %.0.lcssa64.i = phi i32 [ %.1.i, %._crit_edge.i ], [ -1, %43 ] store i32 0, ptr %34, align 4, !tbaa !3 - %61 = getelementptr inbounds nuw i8, ptr %3, i64 60 - store i32 -1, ptr %61, align 4, !tbaa !8 - br label %62 + %59 = getelementptr inbounds nuw i8, ptr %3, i64 60 + store i32 -1, ptr %59, align 4, !tbaa !8 + br label %60 -62: ; preds = %._crit_edge.thread.i, %58 - %.0.lcssa63.i = phi i32 [ %.1.i, %58 ], [ %.0.lcssa64.i, %._crit_edge.thread.i ] +60: ; preds = %._crit_edge.thread.i, %56 + %.041.i = phi i32 [ %.1.i, %58 ], [ %.0.lcssa64.i, %._crit_edge.thread.i ] %.041.i = phi i32 [ %.139.i, %58 ], [ %1, %._crit_edge.thread.i ] %63 = icmp sgt i32 %.0.lcssa63.i, -1 br i1 %63, label %64, label %67 -64: ; preds = %62 - %65 = add nuw nsw i32 %.0.lcssa63.i, 1 +64:; preds = %62 + %65 = add nuw nsw i32 %.041.i, 1 %66 = sub nsw i32 %.041.i, %65 %.sroa.2.0.insert.ext.i48.i = zext i32 %66 to i64 %.sroa.2.0.insert.shift.i49.i = shl nuw i64 %.sroa.2.0.insert.ext.i48.i, 32 %.sroa.0.0.insert.ext.i50.i = zext nneg i32 %65 to i64 %.sroa.0.0.insert.insert.i51.i = or disjoint i64 %.sroa.2.0.insert.shift.i49.i, %.sroa.0.0.insert.ext.i50.i store i64 %.sroa.0.0.insert.insert.i51.i, ptr %33, align 4 - br label %69 + br label %67 -67: ; preds = %62 +65: ; preds = %60 store i32 0, ptr %33, align 4, !tbaa !3 - %68 = getelementptr inbounds nuw i8, ptr %3, i64 52 - store i32 -1, ptr %68, align 4, !tbaa !8 - br label %69 + %66 = getelementptr inbounds nuw i8, ptr %3, i64 52 + store i32 -1, ptr %66, align 4, !tbaa !8 + br label %67 -69: ; preds = %67, %64 - %.143.i = phi i32 [ %.0.lcssa63.i, %64 ], [ %.041.i, %67 ] +67: ; preds = %65, %64 + %.143.i = phi i32 [ %.041.i, %64 ], [ %.041.i, %67 ] %.not.i = icmp eq i32 %.143.i, %spec.select.i - br i1 %.not.i, label %72, label %70 + br i1 %.not.i, label %70, label %68 -70: ; preds = %69 - %71 = sub nsw i32 %.143.i, %spec.select.i - %.sroa.2.0.insert.ext.i52.i = zext i32 %71 to i64 +68: ; preds = %67 + %69 = sub nsw i32 %.143.i, %spec.select.i + %.sroa.2.0.insert.ext.i52.i = zext i32 %69 to i64 %.sroa.2.0.insert.shift.i53.i = shl nuw i64 %.sroa.2.0.insert.ext.i52.i, 32 %.sroa.0.0.insert.ext.i54.i = zext i32 %spec.select.i to i64 %.sroa.0.0.insert.insert.i55.i = or disjoint i64 %.sroa.2.0.insert.shift.i53.i, %.sroa.0.0.insert.ext.i54.i store i64 %.sroa.0.0.insert.insert.i55.i, ptr %32, align 4 br label %_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -72: ; preds = %69 +70: ; preds = %67 store i32 0, ptr %32, align 4, !tbaa !3 - %73 = getelementptr inbounds nuw i8, ptr %3, i64 44 - store i32 -1, ptr %73, align 4, !tbaa !8 + %71 = getelementptr inbounds nuw i8, ptr %3, i64 44 + store i32 -1, ptr %71, align 4, !tbaa !8 br label %_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit -_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %70, %72 +_ZN3url12_GLOBAL__N_19ParsePathItEEvPKT_RKNS_9ComponentEPS5_S8_S8_.exit: ; preds = %36, %68, %70 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #15 ret void } diff --git a/bench/llvm/optimized/BTFParser.ll b/bench/llvm/optimized/BTFParser.ll index 675d3d34dfc..190838a7a2a 100644 --- a/bench/llvm/optimized/BTFParser.ll +++ b/bench/llvm/optimized/BTFParser.ll @@ -624,31 +624,31 @@ _ZN12_GLOBAL__N_13ErrD2Ev.exit61: ; preds = %_ZNKSt7__cxx1112bas %163 = zext i32 %149 to i64 %.sroa.speculated3.i = call i64 @llvm.umin.i64(i64 %.sroa.2.0.copyload.i, i64 %162) %164 = icmp ult i64 %.sroa.2.0.copyload.i, %163 - %.sroa.speculate.load.false.sroa.speculated.i = call i64 @llvm.umax.i64(i64 %163, i64 %.sroa.speculated3.i) - %.sroa.speculated.i = select i1 %164, i64 %.sroa.2.0.copyload.i, i64 %.sroa.speculate.load.false.sroa.speculated.i + %165 = call i64 @llvm.umax.i64(i64 %163, i64 %.sroa.speculated3.i) + %.sroa.speculated.i = select i1 %164, i64 %.sroa.2.0.copyload.i, i64 %165 %165 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload.i, i64 %.sroa.speculated3.i %166 = sub i64 %.sroa.speculated.i, %.sroa.speculated3.i store ptr %165, ptr %1, align 8, !tbaa !40 %.sroa.44.0..sroa_idx = getelementptr inbounds nuw i8, ptr %1, i64 8 store i64 %166, ptr %.sroa.44.0..sroa_idx, align 8, !tbaa !41 %.not49 = icmp eq i32 %145, 0 - br i1 %.not49, label %_ZN4llvm5ErrorD2Ev.exit81, label %167 - -167: ; preds = %161 - %168 = getelementptr inbounds nuw i8, ptr %2, i64 8 - %169 = load ptr, ptr %168, align 8, !tbaa !101 - %170 = getelementptr inbounds nuw i8, ptr %169, i64 1 - %171 = load i8, ptr %170, align 1, !tbaa !102, !range !104, !noundef !105 - %172 = trunc nuw i8 %171 to i1 - br i1 %172, label %173, label %_ZN4llvm5ErrorD2Ev.exit81 - -173: ; preds = %167 - %174 = zext i32 %150 to i64 - %175 = zext i32 %151 to i64 - %.sroa.speculated3.i76 = call i64 @llvm.umin.i64(i64 %.sroa.2.0.copyload.i, i64 %174) + br i1 %.not49, label %_ZN4llvm5ErrorD2Ev.exit81, label %166 + +166: ; preds = %161 + %167 = getelementptr inbounds nuw i8, ptr %2, i64 8 + %168 = load ptr, ptr %167, align 8, !tbaa !101 + %169 = getelementptr inbounds nuw i8, ptr %168, i64 1 + %170 = load i8, ptr %169, align 1, !tbaa !102, !range !104, !noundef !105 + %171 = trunc nuw i8 %170 to i1 + br i1 %171, label %172, label %_ZN4llvm5ErrorD2Ev.exit81 + +172: ; preds = %166 + %173 = zext i32 %150 to i64 + %174 = zext i32 %151 to i64 + %.sroa.speculated3.i76 = call i64 @llvm.umin.i64(i64 %.sroa.2.0.copyload.i, i64 %173) %176 = icmp ult i64 %.sroa.2.0.copyload.i, %175 - %.sroa.speculate.load.false.sroa.speculated.i77 = call i64 @llvm.umax.i64(i64 %175, i64 %.sroa.speculated3.i76) - %.sroa.speculated.i78 = select i1 %176, i64 %.sroa.2.0.copyload.i, i64 %.sroa.speculate.load.false.sroa.speculated.i77 + %176 = call i64 @llvm.umax.i64(i64 %174, i64 %.sroa.speculated3.i76) + %.sroa.speculated.i78 = select i1 %176, i64 %.sroa.2.0.copyload.i, i64 %176 %177 = getelementptr inbounds nuw i8, ptr %.sroa.0.0.copyload.i, i64 %.sroa.speculated3.i76 %178 = sub i64 %.sroa.speculated.i78, %.sroa.speculated3.i76 call void @_ZN4llvm9BTFParser14parseTypesInfoERNS0_12ParseContextEmNS_9StringRefE(ptr dead_on_unwind writable sret(%"class.llvm::Error") align 8 %0, ptr noundef nonnull align 8 dereferenceable(104) %1, ptr noundef nonnull align 8 dereferenceable(40) %2, i64 noundef %174, ptr %177, i64 %178) @@ -656,41 +656,41 @@ _ZN12_GLOBAL__N_13ErrD2Ev.exit61: ; preds = %_ZNKSt7__cxx1112bas %.not94 = icmp eq ptr %179, null br i1 %.not94, label %_ZN4llvm5ErrorD2Ev.exit81, label %.critedge -_ZN4llvm5ErrorD2Ev.exit81: ; preds = %161, %167, %173 +_ZN4llvm5ErrorD2Ev.exit81: ; preds = %161, %166, %172 store ptr null, ptr %0, align 8, !tbaa !35 br label %.critedge -.critedge: ; preds = %153, %157, %_ZN4llvm5ErrorD2Ev.exit81, %173, %_ZN12_GLOBAL__N_13ErrD2Ev.exit56, %_ZN12_GLOBAL__N_13ErrD2Ev.exit61, %139, %136, %_ZN12_GLOBAL__N_13ErrD2Ev.exit52, %_ZN12_GLOBAL__N_13ErrD2Ev.exit - %180 = load ptr, ptr %48, align 8, !tbaa !35 - %181 = icmp eq ptr %180, null - br i1 %181, label %186, label %182 +.critedge: ; preds = %153, %157, %_ZN4llvm5ErrorD2Ev.exit81, %172, %_ZN12_GLOBAL__N_13ErrD2Ev.exit56, %_ZN12_GLOBAL__N_13ErrD2Ev.exit61, %139, %136, %_ZN12_GLOBAL__N_13ErrD2Ev.exit52, %_ZN12_GLOBAL__N_13ErrD2Ev.exit + %178 = load ptr, ptr %48, align 8, !tbaa !35 + %179 = icmp eq ptr %178, null + br i1 %179, label %184, label %180 -182: ; preds = %.critedge - %183 = load ptr, ptr %180, align 8, !tbaa !9 - %184 = getelementptr inbounds nuw i8, ptr %183, i64 8 - %185 = load ptr, ptr %184, align 8 - call void %185(ptr noundef nonnull align 8 dereferenceable(8) %180) #23 - br label %186 +180: ; preds = %.critedge + %181 = load ptr, ptr %178, align 8, !tbaa !9 + %182 = getelementptr inbounds nuw i8, ptr %181, i64 8 + %183 = load ptr, ptr %182, align 8 + call void %185(ptr noundef nonnull align 8 dereferenceable(8) %178) #23 + br label %184 -186: ; preds = %182, %.critedge +184: ; preds = %180, %.critedge call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #23 %.pre = load i8, ptr %47, align 8 - %187 = trunc i8 %.pre to i1 - br i1 %187, label %188, label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit + %185 = trunc i8 %.pre to i1 + br i1 %185, label %186, label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit -188: ; preds = %186 +186: ; preds = %184 %.pr = load ptr, ptr %13, align 8, !tbaa !30 %.not.i.i = icmp eq ptr %.pr, null br i1 %.not.i.i, label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit, label %_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i -_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i: ; preds = %188 - %189 = load ptr, ptr %.pr, align 8, !tbaa !9 - %190 = getelementptr inbounds nuw i8, ptr %189, i64 8 - %191 = load ptr, ptr %190, align 8 +_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i: ; preds = %186 + %187 = load ptr, ptr %.pr, align 8, !tbaa !9 + %188 = getelementptr inbounds nuw i8, ptr %187, i64 8 + %189 = load ptr, ptr %188, align 8 call void %191(ptr noundef nonnull align 8 dereferenceable(8) %.pr) #23 br label %_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit -_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit: ; preds = %188, %_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i, %.thread95, %186 +_ZN4llvm8ExpectedINS_13DataExtractorEED2Ev.exit: ; preds = %186, %_ZNKSt14default_deleteIN4llvm13ErrorInfoBaseEEclEPS1_.exit.i.i, %.thread95, %184 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #23 ret void } diff --git a/bench/llvm/optimized/MachOObjectFile.ll b/bench/llvm/optimized/MachOObjectFile.ll index 06cb77daaae..6cb161a0906 100644 --- a/bench/llvm/optimized/MachOObjectFile.ll +++ b/bench/llvm/optimized/MachOObjectFile.ll @@ -21905,233 +21905,233 @@ _ZNK4llvm9StringRef5rfindEcm.exit183: ; preds = %43 %or.cond536 = select i1 %or.cond3, i1 true, i1 %.not.i188 br i1 %or.cond536, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %_ZNK4llvm9StringRef11starts_withES0_.exit -_ZNK4llvm9StringRef11starts_withES0_.exit: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit183 +_ZNK4llvm9StringRef11starts_withES0_.exit:; preds = %_ZNK4llvm9StringRef5rfindEcm.exit183 %49 = getelementptr inbounds nuw i8, ptr %0, i64 %.0.i180 %bcmp.i189 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(9) %49, ptr noundef nonnull dereferenceable(9) @.str.156, i64 9) %50 = icmp eq i32 %bcmp.i189, 0 br i1 %50, label %_ZNK4llvm9StringRef11starts_withES0_.exit.thread, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader -_ZNK4llvm9StringRef11starts_withES0_.exit.thread: ; preds = %_ZNK4llvm9StringRef11starts_withES0_.exit, %51 +_ZNK4llvm9StringRef11starts_withES0_.exit.thread:; preds = %_ZNK4llvm9StringRef11starts_withES0_.exit, %51 %.0.i191 = phi i64 [ %52, %51 ], [ %44, %_ZNK4llvm9StringRef11starts_withES0_.exit ] %.not.i192 = icmp eq i64 %.0.i191, 0 - br i1 %.not.i192, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %51 + br i1 %.not.i192, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %53 -51: ; preds = %_ZNK4llvm9StringRef11starts_withES0_.exit.thread - %52 = add i64 %.0.i191, -1 - %53 = getelementptr inbounds nuw i8, ptr %0, i64 %52 - %54 = load i8, ptr %53, align 1, !tbaa !229 - %55 = icmp eq i8 %54, 47 - br i1 %55, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %_ZNK4llvm9StringRef11starts_withES0_.exit.thread, !llvm.loop !3865 +53: ; preds = %_ZNK4llvm9StringRef11starts_withES0_.exit.thread + %54 = add i64 %.0.i191, -1 + %55 = getelementptr inbounds nuw i8, ptr %0, i64 %54 + %56 = load i8, ptr %55, align 1, !tbaa !229 + %57 = icmp eq i8 %56, 47 + br i1 %57, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %_ZNK4llvm9StringRef11starts_withES0_.exit.thread, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit194: ; preds = %51, %_ZNK4llvm9StringRef11starts_withES0_.exit.thread +_ZNK4llvm9StringRef5rfindEcm.exit194: ; preds = %53, %_ZNK4llvm9StringRef11starts_withES0_.exit.thread %.sroa.speculated4.i195 = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0.i191) - %56 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i195 - %57 = sub i64 %1, %.sroa.speculated4.i195 - %.sroa.speculated.i196 = tail call i64 @llvm.umin.i64(i64 %57, i64 %.sroa.12.0) - %58 = add i64 %.0.i191, %.sroa.12.0 - %.sroa.speculated4.i199 = tail call i64 @llvm.umin.i64(i64 %1, i64 %58) - %59 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i199 - %60 = sub i64 %1, %.sroa.speculated4.i199 - %.sroa.speculated.i200 = tail call i64 @llvm.umin.i64(i64 %60, i64 11) - %.not.i203.not = icmp ugt i64 %.sroa.12.0, %57 - br i1 %.not.i203.not, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %61 - -61: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit194 - %62 = icmp eq i64 %.sroa.speculated.i196, 0 - br i1 %62, label %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, label %_ZN4llvmeqENS_9StringRefES0_.exit206 - -_ZN4llvmeqENS_9StringRefES0_.exit206: ; preds = %61 - %bcmp.i205 = tail call i32 @bcmp(ptr %56, ptr nonnull %12, i64 %.sroa.speculated.i196) - %63 = icmp eq i32 %bcmp.i205, 0 - %.not.i207 = icmp ugt i64 %60, 10 - %or.cond499 = select i1 %63, i1 %.not.i207, i1 false + %58 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i195 + %59 = sub i64 %1, %.sroa.speculated4.i195 + %.sroa.speculated.i196 = tail call i64 @llvm.umin.i64(i64 %59, i64 %.sroa.12.0) + %60 = add i64 %.0.i191, %.sroa.12.0 + %.sroa.speculated4.i199 = tail call i64 @llvm.umin.i64(i64 %1, i64 %60) + %61 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated4.i199 + %62 = sub i64 %1, %.sroa.speculated4.i199 + %.sroa.speculated.i200 = tail call i64 @llvm.umin.i64(i64 %62, i64 11) + %.not.i203.not = icmp ugt i64 %.sroa.12.0, %59 + br i1 %.not.i203.not, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, label %63 + +63: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit194 + %64 = icmp eq i64 %.sroa.speculated.i196, 0 + br i1 %64, label %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, label %_ZN4llvmeqENS_9StringRefES0_.exit206 + +_ZN4llvmeqENS_9StringRefES0_.exit206: ; preds = %63 + %bcmp.i205 = tail call i32 @bcmp(ptr %58, ptr nonnull %12, i64 %.sroa.speculated.i196) + %65 = icmp eq i32 %bcmp.i205, 0 + %.not.i207 = icmp ugt i64 %62, 10 + %or.cond499 = select i1 %65, i1 %.not.i207, i1 false br i1 %or.cond499, label %_ZN4llvmeqENS_9StringRefES0_.exit210, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader -_ZN4llvmeqENS_9StringRefES0_.exit206.thread: ; preds = %61 - %.not.i207.old = icmp ugt i64 %60, 10 +_ZN4llvmeqENS_9StringRefES0_.exit206.thread: ; preds = %63 + %.not.i207.old = icmp ugt i64 %62, 10 br i1 %.not.i207.old, label %_ZN4llvmeqENS_9StringRefES0_.exit210, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader _ZN4llvmeqENS_9StringRefES0_.exit210: ; preds = %_ZN4llvmeqENS_9StringRefES0_.exit206.thread, %_ZN4llvmeqENS_9StringRefES0_.exit206 - %bcmp.i209 = tail call i32 @bcmp(ptr %59, ptr nonnull @.str.155, i64 %.sroa.speculated.i200) - %64 = icmp eq i32 %bcmp.i209, 0 - br i1 %64, label %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader + %bcmp.i209 = tail call i32 @bcmp(ptr %61, ptr nonnull @.str.155, i64 %.sroa.speculated.i200) + %66 = icmp eq i32 %bcmp.i209, 0 + br i1 %66, label %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader _ZN4llvmeqENS_9StringRefES0_.exit210.thread: ; preds = %_ZN4llvmeqENS_9StringRefES0_.exit210 store i8 1, ptr %2, align 1, !tbaa !599 br label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZNK4llvm9StringRef5rfindEcm.exit.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, %65 - %.0.i212 = phi i64 [ %66, %65 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader ] +_ZNK4llvm9StringRef5rfindEcm.exit.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader, %67 + %.0.i212 = phi i64 [ %68, %65 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit.thread.preheader ] %.not.i213 = icmp eq i64 %.0.i212, 0 - br i1 %.not.i213, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %65 + br i1 %.not.i213, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %67 -65: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread - %66 = add i64 %.0.i212, -1 - %67 = getelementptr inbounds nuw i8, ptr %0, i64 %66 - %68 = load i8, ptr %67, align 1, !tbaa !229 - %69 = icmp eq i8 %68, 46 - br i1 %69, label %_ZNK4llvm9StringRef5rfindEcm.exit215, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread, !llvm.loop !3865 +67: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread + %68 = add i64 %.0.i212, -1 + %69 = getelementptr inbounds nuw i8, ptr %0, i64 %68 + %70 = load i8, ptr %69, align 1, !tbaa !229 + %71 = icmp eq i8 %70, 46 + br i1 %71, label %_ZNK4llvm9StringRef5rfindEcm.exit215, label %_ZNK4llvm9StringRef5rfindEcm.exit.thread, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit215: ; preds = %65 - %70 = getelementptr inbounds nuw i8, ptr %0, i64 %66 +_ZNK4llvm9StringRef5rfindEcm.exit215: ; preds = %67 + %72 = getelementptr inbounds nuw i8, ptr %0, i64 %68 %or.cond5 = icmp eq i64 %.0.i212, 1 - br i1 %or.cond5, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %71 + br i1 %or.cond5, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread, label %73 -71: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit215 - %72 = sub i64 %1, %66 - switch i64 %72, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread [ +73: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit215 + %74 = sub i64 %1, %68 + switch i64 %74, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread [ i64 6, label %_ZN4llvmneENS_9StringRefES0_.exit223 i64 4, label %_ZN4llvmneENS_9StringRefES0_.exit288 ] -_ZN4llvmneENS_9StringRefES0_.exit223: ; preds = %71 - %bcmp.i.i222 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %70, ptr noundef nonnull dereferenceable(6) @.str.157, i64 6) +_ZN4llvmneENS_9StringRefES0_.exit223: ; preds = %73 + %bcmp.i.i222 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %72, ptr noundef nonnull dereferenceable(6) @.str.157, i64 6) %.not493 = icmp eq i32 %bcmp.i.i222, 0 br i1 %.not493, label %_ZN4llvmneENS_9StringRefES0_.exit223.thread462, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread _ZN4llvmneENS_9StringRefES0_.exit223.thread462: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit223 - %73 = icmp ugt i64 %66, 2 - br i1 %73, label %_ZN4llvmeqENS_9StringRefES0_.exit231, label %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 + %75 = icmp ugt i64 %68, 2 + br i1 %75, label %_ZN4llvmeqENS_9StringRefES0_.exit231, label %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 _ZN4llvmeqENS_9StringRefES0_.exit231: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 - %74 = add i64 %.0.i212, -3 - %75 = getelementptr inbounds nuw i8, ptr %0, i64 %74 - %lhsc511 = load i8, ptr %75, align 1 + %76 = add i64 %.0.i212, -3 + %77 = getelementptr inbounds nuw i8, ptr %0, i64 %76 + %lhsc511 = load i8, ptr %77, align 1 %lhsc511.fr = freeze i8 %lhsc511 - %76 = icmp eq i8 %lhsc511.fr, 46 - %spec.select = select i1 %76, i64 %74, i64 %66 + %78 = icmp eq i8 %lhsc511.fr, 46 + %spec.select = select i1 %78, i64 %76, i64 %68 br label %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 _ZN4llvmeqENS_9StringRefES0_.exit231.thread466: ; preds = %_ZN4llvmeqENS_9StringRefES0_.exit231, %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 - %.0 = phi i64 [ %66, %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 ], [ %spec.select, %_ZN4llvmeqENS_9StringRefES0_.exit231 ] + %.0 = phi i64 [ %68, %_ZN4llvmneENS_9StringRefES0_.exit223.thread462 ], [ %spec.select, %_ZN4llvmeqENS_9StringRefES0_.exit231 ] %.sroa.speculated.i232 = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0) - br label %77 + br label %79 -77: ; preds = %78, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 - %.0.i233 = phi i64 [ %.sroa.speculated.i232, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 ], [ %79, %78 ] +79: ; preds = %80, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 + %.0.i233 = phi i64 [ %.sroa.speculated.i232, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 ], [ %81, %78 ] %.not.i234 = icmp eq i64 %.0.i233, 0 - br i1 %.not.i234, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %78 + br i1 %.not.i234, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %80 -78: ; preds = %77 - %79 = add i64 %.0.i233, -1 - %80 = getelementptr inbounds nuw i8, ptr %0, i64 %79 - %81 = load i8, ptr %80, align 1, !tbaa !229 - %82 = icmp eq i8 %81, 47 - br i1 %82, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %77, !llvm.loop !3865 +80: ; preds = %79 + %81 = add i64 %.0.i233, -1 + %82 = getelementptr inbounds nuw i8, ptr %0, i64 %81 + %83 = load i8, ptr %82, align 1, !tbaa !229 + %84 = icmp eq i8 %83, 47 + br i1 %84, label %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, label %79, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit236.preheader: ; preds = %78, %77 +_ZNK4llvm9StringRef5rfindEcm.exit236.preheader: ; preds = %80, %79 br label %_ZNK4llvm9StringRef5rfindEcm.exit236 -_ZNK4llvm9StringRef5rfindEcm.exit236: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, %83 - %.0.i238 = phi i64 [ %84, %83 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader ] +_ZNK4llvm9StringRef5rfindEcm.exit236: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, %85 + %.0.i238 = phi i64 [ %86, %83 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader ] %.not.i239 = icmp eq i64 %.0.i238, 0 - br i1 %.not.i239, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %83 + br i1 %.not.i239, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %85 -83: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236 - %84 = add i64 %.0.i238, -1 - %85 = getelementptr inbounds nuw i8, ptr %0, i64 %84 - %86 = load i8, ptr %85, align 1, !tbaa !229 - %87 = icmp eq i8 %86, 95 - br i1 %87, label %_ZNK4llvm9StringRef5rfindEcm.exit241, label %_ZNK4llvm9StringRef5rfindEcm.exit236, !llvm.loop !3865 +85: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236 + %86 = add i64 %.0.i238, -1 + %87 = getelementptr inbounds nuw i8, ptr %0, i64 %86 + %88 = load i8, ptr %87, align 1, !tbaa !229 + %89 = icmp eq i8 %88, 95 + br i1 %89, label %_ZNK4llvm9StringRef5rfindEcm.exit241, label %_ZNK4llvm9StringRef5rfindEcm.exit236, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit241: ; preds = %83 - %88 = getelementptr inbounds nuw i8, ptr %0, i64 %84 - %.not145 = icmp eq i64 %84, %.0.i233 - br i1 %.not145, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %89 +_ZNK4llvm9StringRef5rfindEcm.exit241: ; preds = %85 + %90 = getelementptr inbounds nuw i8, ptr %0, i64 %86 + %.not145 = icmp eq i64 %86, %.0.i233 + br i1 %.not145, label %_ZNK4llvm9StringRef5rfindEcm.exit241.thread, label %91 -89: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit241 +91: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit241 %.sroa.speculated3.i = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0.i233) - %90 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i - %91 = tail call i64 @llvm.usub.sat.i64(i64 %84, i64 %.sroa.speculated3.i) - %92 = icmp ugt i64 %.0, %1 - %.sroa.speculate.load.false.sroa.speculated.i246 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %84) - %.sroa.speculated.i247 = select i1 %92, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i246 - %93 = sub i64 %.sroa.speculated.i247, %84 - store ptr %88, ptr %3, align 8, !tbaa !189 + %92 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i + %93 = tail call i64 @llvm.usub.sat.i64(i64 %86, i64 %.sroa.speculated3.i) + %94 = icmp ugt i64 %.0, %1 + %.sroa.speculate.load.false.sroa.speculated.i246 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %86) + %.sroa.speculated.i247 = select i1 %94, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i246 + %95 = sub i64 %.sroa.speculated.i247, %86 + store ptr %90, ptr %3, align 8, !tbaa !189 %.sroa.432.0..sroa_idx = getelementptr inbounds nuw i8, ptr %3, i64 8 - store i64 %93, ptr %.sroa.432.0..sroa_idx, align 8, !tbaa !188 - switch i64 %93, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread [ + store i64 %95, ptr %.sroa.432.0..sroa_idx, align 8, !tbaa !188 + switch i64 %95, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread [ i64 6, label %_ZN4llvmneENS_9StringRefES0_.exit253 i64 8, label %_ZN4llvmneENS_9StringRefES0_.exit257 ] -_ZN4llvmneENS_9StringRefES0_.exit253: ; preds = %89 - %bcmp.i.i252 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %88, ptr noundef nonnull dereferenceable(6) @.str.153, i64 6) +_ZN4llvmneENS_9StringRefES0_.exit253: ; preds = %91 + %bcmp.i.i252 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(6) %90, ptr noundef nonnull dereferenceable(6) @.str.153, i64 6) %.not495 = icmp eq i32 %bcmp.i.i252, 0 br i1 %.not495, label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread -_ZN4llvmneENS_9StringRefES0_.exit257: ; preds = %89 - %bcmp.i.i256 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(8) %88, ptr noundef nonnull dereferenceable(8) @.str.154, i64 8) +_ZN4llvmneENS_9StringRefES0_.exit257: ; preds = %91 + %bcmp.i.i256 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(8) %90, ptr noundef nonnull dereferenceable(8) @.str.154, i64 8) %.not496 = icmp eq i32 %bcmp.i.i256, 0 br i1 %.not496, label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, label %_ZN4llvmneENS_9StringRefES0_.exit257.thread -_ZN4llvmneENS_9StringRefES0_.exit257.thread: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253, %89, %_ZN4llvmneENS_9StringRefES0_.exit257 +_ZN4llvmneENS_9StringRefES0_.exit257.thread: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253, %91, %_ZN4llvmneENS_9StringRefES0_.exit257 tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %3, i8 0, i64 16, i1 false) %.sroa.speculate.load.false.sroa.speculated.i259 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %.sroa.speculated3.i) - %.sroa.speculated.i260 = select i1 %92, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i259 - %94 = sub i64 %.sroa.speculated.i260, %.sroa.speculated3.i + %.sroa.speculated.i260 = select i1 %94, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i259 + %96 = sub i64 %.sroa.speculated.i260, %.sroa.speculated3.i br label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 _ZNK4llvm9StringRef5rfindEcm.exit241.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236, %_ZNK4llvm9StringRef5rfindEcm.exit241 %.sroa.speculated3.i263 = tail call i64 @llvm.umin.i64(i64 %1, i64 %.0.i233) - %95 = icmp ugt i64 %.0, %1 + %97 = icmp ugt i64 %.0, %1 %.sroa.speculate.load.false.sroa.speculated.i264 = tail call i64 @llvm.umax.i64(i64 %.0, i64 %.sroa.speculated3.i263) - %.sroa.speculated.i265 = select i1 %95, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i264 - %96 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i263 - %97 = sub i64 %.sroa.speculated.i265, %.sroa.speculated3.i263 + %.sroa.speculated.i265 = select i1 %97, i64 %1, i64 %.sroa.speculate.load.false.sroa.speculated.i264 + %98 = getelementptr inbounds nuw i8, ptr %0, i64 %.sroa.speculated3.i263 + %99 = sub i64 %.sroa.speculated.i265, %.sroa.speculated3.i263 br label %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 _ZN4llvmneENS_9StringRefES0_.exit253.thread477: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253, %_ZN4llvmneENS_9StringRefES0_.exit257, %_ZN4llvmneENS_9StringRefES0_.exit257.thread, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread - %.sroa.16.0 = phi i64 [ %97, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %94, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %91, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %91, %_ZN4llvmneENS_9StringRefES0_.exit253 ] - %.sroa.0341.0 = phi ptr [ %96, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %90, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %90, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %90, %_ZN4llvmneENS_9StringRefES0_.exit253 ] - %98 = icmp ugt i64 %.sroa.16.0, 2 - br i1 %98, label %_ZN4llvmeqENS_9StringRefES0_.exit275, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread + %.sroa.16.0 = phi i64 [ %99, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %96, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %93, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %93, %_ZN4llvmneENS_9StringRefES0_.exit253 ] + %.sroa.0341.0 = phi ptr [ %98, %_ZNK4llvm9StringRef5rfindEcm.exit241.thread ], [ %92, %_ZN4llvmneENS_9StringRefES0_.exit257.thread ], [ %92, %_ZN4llvmneENS_9StringRefES0_.exit257 ], [ %92, %_ZN4llvmneENS_9StringRefES0_.exit253 ] + %100 = icmp ugt i64 %.sroa.16.0, 2 + br i1 %100, label %_ZN4llvmeqENS_9StringRefES0_.exit275, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread _ZN4llvmeqENS_9StringRefES0_.exit275: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 - %99 = add i64 %.sroa.16.0, -2 - %100 = getelementptr inbounds nuw i8, ptr %.sroa.0341.0, i64 %99 - %lhsc497 = load i8, ptr %100, align 1 - %101 = icmp eq i8 %lhsc497, 46 - %spec.select509 = select i1 %101, i64 %99, i64 %.sroa.16.0 + %101 = add i64 %.sroa.16.0, -2 + %102 = getelementptr inbounds nuw i8, ptr %.sroa.0341.0, i64 %101 + %lhsc497 = load i8, ptr %102, align 1 + %103 = icmp eq i8 %lhsc497, 46 + %spec.select509 = select i1 %103, i64 %101, i64 %.sroa.16.0 br label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZN4llvmneENS_9StringRefES0_.exit288: ; preds = %71 - %bcmp.i.i287 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %70, ptr noundef nonnull dereferenceable(4) @.str.159, i64 4) +_ZN4llvmneENS_9StringRefES0_.exit288: ; preds = %73 + %bcmp.i.i287 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %72, ptr noundef nonnull dereferenceable(4) @.str.159, i64 4) %.not494 = icmp eq i32 %bcmp.i.i287, 0 br i1 %.not494, label %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZN4llvmneENS_9StringRefES0_.exit288.thread486: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288, %102 - %.0.i290 = phi i64 [ %103, %102 ], [ %66, %_ZN4llvmneENS_9StringRefES0_.exit288 ] +_ZN4llvmneENS_9StringRefES0_.exit288.thread486: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288, %104 + %.0.i290 = phi i64 [ %105, %102 ], [ %68, %_ZN4llvmneENS_9StringRefES0_.exit288 ] %.not.i291 = icmp eq i64 %.0.i290, 0 - br i1 %.not.i291, label %.loopexit, label %102 - -102: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 - %103 = add i64 %.0.i290, -1 - %104 = getelementptr inbounds nuw i8, ptr %0, i64 %103 - %105 = load i8, ptr %104, align 1, !tbaa !229 - %106 = icmp eq i8 %105, 47 - br i1 %106, label %_ZNK4llvm9StringRef5rfindEcm.exit293, label %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, !llvm.loop !3865 - -_ZNK4llvm9StringRef5rfindEcm.exit293: ; preds = %102 - %107 = getelementptr inbounds nuw i8, ptr %0, i64 %.0.i290 - %108 = sub i64 %66, %.0.i290 + br i1 %.not.i291, label %.loopexit, label %104 + +104: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 + %105 = add i64 %.0.i290, -1 + %106 = getelementptr inbounds nuw i8, ptr %0, i64 %105 + %107 = load i8, ptr %106, align 1, !tbaa !229 + %108 = icmp eq i8 %107, 47 + br i1 %108, label %_ZNK4llvm9StringRef5rfindEcm.exit293, label %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, !llvm.loop !3865 + +_ZNK4llvm9StringRef5rfindEcm.exit293: ; preds = %104 + %109 = getelementptr inbounds nuw i8, ptr %0, i64 %.0.i290 + %110 = sub i64 %68, %.0.i290 br label %.loopexit .loopexit: ; preds = %_ZN4llvmneENS_9StringRefES0_.exit288.thread486, %_ZNK4llvm9StringRef5rfindEcm.exit293 - %.sroa.16.2 = phi i64 [ %108, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %66, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] - %.sroa.0341.2 = phi ptr [ %107, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %0, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] - %109 = icmp ugt i64 %.sroa.16.2, 2 - br i1 %109, label %_ZN4llvmeqENS_9StringRefES0_.exit311, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread + %.sroa.16.2 = phi i64 [ %110, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %68, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] + %.sroa.0341.2 = phi ptr [ %109, %_ZNK4llvm9StringRef5rfindEcm.exit293 ], [ %0, %_ZN4llvmneENS_9StringRefES0_.exit288.thread486 ] + %111 = icmp ugt i64 %.sroa.16.2, 2 + br i1 %111, label %_ZN4llvmeqENS_9StringRefES0_.exit311, label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread _ZN4llvmeqENS_9StringRefES0_.exit311: ; preds = %.loopexit - %110 = add i64 %.sroa.16.2, -2 - %111 = getelementptr inbounds nuw i8, ptr %.sroa.0341.2, i64 %110 - %lhsc = load i8, ptr %111, align 1 - %112 = icmp eq i8 %lhsc, 46 - %spec.select510 = select i1 %112, i64 %110, i64 %.sroa.16.2 + %112 = add i64 %.sroa.16.2, -2 + %113 = getelementptr inbounds nuw i8, ptr %.sroa.0341.2, i64 %112 + %lhsc = load i8, ptr %113, align 1 + %114 = icmp eq i8 %lhsc, 46 + %spec.select510 = select i1 %114, i64 %112, i64 %.sroa.16.2 br label %_ZNK4llvm9StringRef5rfindEcm.exit215.thread -_ZNK4llvm9StringRef5rfindEcm.exit215.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread, %_ZN4llvmeqENS_9StringRefES0_.exit311, %_ZN4llvmeqENS_9StringRefES0_.exit275, %_ZN4llvmneENS_9StringRefES0_.exit223, %71, %.loopexit, %_ZN4llvmneENS_9StringRefES0_.exit288, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, %_ZNK4llvm9StringRef5rfindEcm.exit215, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread +_ZNK4llvm9StringRef5rfindEcm.exit215.thread: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit.thread, %_ZN4llvmeqENS_9StringRefES0_.exit311, %_ZN4llvmeqENS_9StringRefES0_.exit275, %_ZN4llvmneENS_9StringRefES0_.exit223, %73, %.loopexit, %_ZN4llvmneENS_9StringRefES0_.exit288, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477, %_ZNK4llvm9StringRef5rfindEcm.exit215, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread %.sroa.9.0 = phi i64 [ %.sroa.12.0, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread ], [ %.sroa.12.0, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread ], [ 0, %_ZNK4llvm9StringRef5rfindEcm.exit215 ], [ %.sroa.16.0, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 ], [ 0, %_ZN4llvmneENS_9StringRefES0_.exit288 ], [ %.sroa.16.2, %.loopexit ], [ 0, %71 ], [ %spec.select509, %_ZN4llvmeqENS_9StringRefES0_.exit275 ], [ 0, %_ZN4llvmneENS_9StringRefES0_.exit223 ], [ %spec.select510, %_ZN4llvmeqENS_9StringRefES0_.exit311 ], [ 0, %_ZNK4llvm9StringRef5rfindEcm.exit.thread ] %.sroa.0425.0 = phi ptr [ %12, %_ZN4llvmeqENS_9StringRefES0_.exit178.thread ], [ %12, %_ZN4llvmeqENS_9StringRefES0_.exit210.thread ], [ null, %_ZNK4llvm9StringRef5rfindEcm.exit215 ], [ %.sroa.0341.0, %_ZN4llvmneENS_9StringRefES0_.exit253.thread477 ], [ null, %_ZN4llvmneENS_9StringRefES0_.exit288 ], [ %.sroa.0341.2, %.loopexit ], [ null, %71 ], [ %.sroa.0341.0, %_ZN4llvmeqENS_9StringRefES0_.exit275 ], [ null, %_ZN4llvmneENS_9StringRefES0_.exit223 ], [ %.sroa.0341.2, %_ZN4llvmeqENS_9StringRefES0_.exit311 ], [ null, %_ZNK4llvm9StringRef5rfindEcm.exit.thread ] %.fca.0.insert = insertvalue { ptr, i64 } poison, ptr %.sroa.0425.0, 0 diff --git a/bench/meshlab/optimized/cube_style_precomputation.ll b/bench/meshlab/optimized/cube_style_precomputation.ll index 7516d6db588..ba3e4fca6ec 100644 --- a/bench/meshlab/optimized/cube_style_precomputation.ll +++ b/bench/meshlab/optimized/cube_style_precomputation.ll @@ -67460,7 +67460,7 @@ define linkonce_odr void @_ZN5Eigen8internal23assign_sparse_to_sparseINS_12Spars %19 = load ptr, ptr %18, align 8 %20 = getelementptr inbounds nuw i8, ptr %19, i64 16 %21 = load i64, ptr %20, align 8 - br i1 %17, label %22, label %169 + br i1 %17, label %22, label %168 22: ; preds = %2 tail call void @_ZN5Eigen12SparseMatrixIdLi0EiE6resizeEll(ptr noundef nonnull align 8 dereferenceable(72) %0, i64 noundef %21, i64 noundef 1) @@ -67491,93 +67491,93 @@ _ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit: ; preds = %22, %32 %.sroa.speculated121 = tail call i64 @llvm.smax.i64(i64 %37, i64 1) %38 = shl nuw nsw i64 %.sroa.speculated121, 1 %.sroa.speculated126 = tail call i64 @llvm.smin.i64(i64 %38, i64 %37) - %39 = load i64, ptr %23, align 8 - %40 = add nsw i64 %.sroa.speculated126, %39 + %41 = load i64, ptr %23, align 8 + %40 = add nsw i64 %.sroa.speculated126, %41 %41 = getelementptr inbounds nuw i8, ptr %0, i64 64 %42 = load i64, ptr %41, align 8 %43 = icmp sgt i64 %40, %42 br i1 %43, label %44, label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit -44: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit - %45 = getelementptr inbounds nuw i8, ptr %0, i64 40 - tail call void @_ZN5Eigen8internal17CompressedStorageIdiE10reallocateEl(ptr noundef nonnull align 8 dereferenceable(32) %45, i64 noundef %40) +43: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit + %44 = getelementptr inbounds nuw i8, ptr %0, i64 40 + tail call void @_ZN5Eigen8internal17CompressedStorageIdiE10reallocateEl(ptr noundef nonnull align 8 dereferenceable(32) %44, i64 noundef %40) br label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit -_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit: ; preds = %44, %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit - %46 = getelementptr inbounds nuw i8, ptr %4, i64 120 - %47 = getelementptr inbounds nuw i8, ptr %4, i64 112 - %48 = getelementptr inbounds nuw i8, ptr %0, i64 40 +_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit: ; preds = %43, %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit + %45 = getelementptr inbounds nuw i8, ptr %4, i64 120 + %46 = getelementptr inbounds nuw i8, ptr %4, i64 112 + %47 = getelementptr inbounds nuw i8, ptr %0, i64 40 %.phi.trans.insert.i74 = getelementptr inbounds nuw i8, ptr %0, i64 48 - %49 = getelementptr inbounds nuw i8, ptr %4, i64 24 - %50 = getelementptr inbounds nuw i8, ptr %4, i64 32 - %51 = getelementptr inbounds nuw i8, ptr %4, i64 72 - %52 = getelementptr inbounds nuw i8, ptr %4, i64 80 + %48 = getelementptr inbounds nuw i8, ptr %4, i64 24 + %49 = getelementptr inbounds nuw i8, ptr %4, i64 32 + %50 = getelementptr inbounds nuw i8, ptr %4, i64 72 + %51 = getelementptr inbounds nuw i8, ptr %4, i64 80 %.phi.trans.insert.i = getelementptr inbounds nuw i8, ptr %4, i64 56 - %53 = getelementptr inbounds nuw i8, ptr %4, i64 40 - %54 = getelementptr inbounds nuw i8, ptr %4, i64 8 - %55 = getelementptr inbounds nuw i8, ptr %4, i64 48 - %56 = load ptr, ptr %24, align 8 - %57 = load i32, ptr %56, align 4 - %58 = getelementptr i8, ptr %56, i64 4 - store i32 %57, ptr %58, align 4 + %52 = getelementptr inbounds nuw i8, ptr %4, i64 40 + %53 = getelementptr inbounds nuw i8, ptr %4, i64 8 + %54 = getelementptr inbounds nuw i8, ptr %4, i64 48 + %55 = load ptr, ptr %24, align 8 + %56 = load i32, ptr %55, align 4 + %57 = getelementptr i8, ptr %55, i64 4 + store i32 %56, ptr %57, align 4 call void @_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorC2ERKSR_l(ptr noundef nonnull align 8 dereferenceable(128) %4, ptr noundef nonnull align 8 dereferenceable(64) %3, i64 noundef 0) - %59 = load i64, ptr %46, align 8 - %60 = icmp sgt i64 %59, -1 - br i1 %60, label %.lr.ph139.preheader, label %.loopexit + %58 = load i64, ptr %45, align 8 + %59 = icmp sgt i64 %58, -1 + br i1 %59, label %.lr.ph139.preheader, label %.loopexit .loopexit: ; preds = %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread, %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit - %61 = load ptr, ptr %30, align 8 - %62 = icmp eq ptr %61, null - br i1 %62, label %153, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit + %60 = load ptr, ptr %30, align 8 + %61 = icmp eq ptr %60, null + br i1 %61, label %152, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit .lr.ph139.preheader: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit - %.pre142 = load double, ptr %47, align 8 + %.pre142 = load double, ptr %46, align 8 br label %.lr.ph139 .lr.ph139: ; preds = %.lr.ph139.preheader, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit - %63 = phi double [ %151, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %.pre142, %.lr.ph139.preheader ] - %64 = phi i64 [ %150, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %59, %.lr.ph139.preheader ] - %65 = load ptr, ptr %24, align 8 - %66 = getelementptr i8, ptr %65, i64 4 - %67 = load i32, ptr %66, align 4 - %68 = add nsw i32 %67, 1 - store i32 %68, ptr %66, align 4 - %69 = load i64, ptr %23, align 8 - %70 = add nsw i64 %69, 1 - %71 = load i64, ptr %41, align 8 - %.not.i.i = icmp sgt i64 %71, %69 - br i1 %.not.i.i, label %93, label %72 - -72: ; preds = %.lr.ph139 - %73 = sitofp i64 %70 to double - %74 = fptosi double %73 to i64 - %75 = add nsw i64 %70, %74 - %.sroa.speculated.i.i.i = call i64 @llvm.smin.i64(i64 %75, i64 2147483647) - %.not3.i.i = icmp sgt i64 %.sroa.speculated.i.i.i, %69 + %62 = phi double [ %150, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %.pre142, %.lr.ph139.preheader ] + %63 = phi i64 [ %149, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit ], [ %58, %.lr.ph139.preheader ] + %64 = load ptr, ptr %24, align 8 + %65 = getelementptr i8, ptr %64, i64 4 + %66 = load i32, ptr %65, align 4 + %67 = add nsw i32 %66, 1 + store i32 %67, ptr %65, align 4 + %68 = load i64, ptr %23, align 8 + %69 = add nsw i64 %68, 1 + %70 = load i64, ptr %41, align 8 + %.not.i.i = icmp sgt i64 %70, %68 + br i1 %.not.i.i, label %92, label %71 + +71: ; preds = %.lr.ph139 + %72 = sitofp i64 %69 to double + %73 = fptosi double %72 to i64 + %74 = add nsw i64 %69, %73 + %.sroa.speculated.i.i.i = call i64 @llvm.smin.i64(i64 %74, i64 2147483647) + %.not3.i.i = icmp sgt i64 %.sroa.speculated.i.i.i, %68 br i1 %.not3.i.i, label %.noexc75, label %.noexc42 -.noexc42: ; preds = %72 - %76 = call ptr @__cxa_allocate_exception(i64 8) #16 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %76, align 8 - call void @__cxa_throw(ptr nonnull %76, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 +.noexc42: ; preds = %71 + %75 = call ptr @__cxa_allocate_exception(i64 8) #16 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %75, align 8 + call void @__cxa_throw(ptr nonnull %75, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 unreachable -.noexc75: ; preds = %72 - %77 = icmp ugt i64 %.sroa.speculated.i.i.i, 2305843009213693951 - %78 = shl nuw i64 %.sroa.speculated.i.i.i, 3 - %79 = select i1 %77, i64 -1, i64 %78 - %80 = call noalias noundef nonnull ptr @_Znam(i64 noundef %79) #36 - %81 = icmp ugt i64 %.sroa.speculated.i.i.i, 4611686018427387903 - %82 = shl nuw i64 %.sroa.speculated.i.i.i, 2 - %83 = select i1 %81, i64 -1, i64 %82 - %84 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %83) #36 +.noexc75: ; preds = %71 + %76 = icmp ugt i64 %.sroa.speculated.i.i.i, 2305843009213693951 + %77 = shl nuw i64 %.sroa.speculated.i.i.i, 3 + %78 = select i1 %76, i64 -1, i64 %77 + %79 = call noalias noundef nonnull ptr @_Znam(i64 noundef %78) #36 + %80 = icmp ugt i64 %.sroa.speculated.i.i.i, 4611686018427387903 + %81 = shl nuw i64 %.sroa.speculated.i.i.i, 2 + %82 = select i1 %80, i64 -1, i64 %81 + %83 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %82) #36 to label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i unwind label %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i _ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i: ; preds = %.noexc75 - %.sroa.speculated.i = call i64 @llvm.smin.i64(i64 %69, i64 %.sroa.speculated.i.i.i) - %85 = icmp sgt i64 %.sroa.speculated.i, 0 - %.pre.i73 = load ptr, ptr %48, align 8 - br i1 %85, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i + %.sroa.speculated.i = call i64 @llvm.smin.i64(i64 %68, i64 %.sroa.speculated.i.i.i) + %84 = icmp sgt i64 %.sroa.speculated.i, 0 + %.pre.i73 = load ptr, ptr %47, align 8 + br i1 %84, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i %.pre24.i = load ptr, ptr %.phi.trans.insert.i74, align 8 @@ -67585,51 +67585,51 @@ _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEv _ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i %.idx.i = shl nuw nsw i64 %.sroa.speculated.i, 3 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %80, ptr align 8 %.pre.i73, i64 %.idx.i, i1 false) - %86 = load ptr, ptr %.phi.trans.insert.i74, align 8 + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %79, ptr align 8 %.pre.i73, i64 %.idx.i, i1 false) + %85 = load ptr, ptr %.phi.trans.insert.i74, align 8 %.idx23.i = shl nuw nsw i64 %.sroa.speculated.i, 2 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %84, ptr align 4 %86, i64 %.idx23.i, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %83, ptr align 4 %85, i64 %.idx23.i, i1 false) br label %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i _ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i: ; preds = %.noexc75 - %87 = landingpad { ptr, i32 } + %86 = landingpad { ptr, i32 } cleanup - call void @_ZdaPv(ptr noundef nonnull %80) #37 + call void @_ZdaPv(ptr noundef nonnull %79) #37 br label %.body _ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i: ; preds = %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i - %88 = phi ptr [ %.pre24.i, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i ], [ %86, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i ] - store ptr %80, ptr %48, align 8 - store ptr %84, ptr %.phi.trans.insert.i74, align 8 + %87 = phi ptr [ %.pre24.i, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i ], [ %85, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i ] + store ptr %79, ptr %47, align 8 + store ptr %83, ptr %.phi.trans.insert.i74, align 8 store i64 %.sroa.speculated.i.i.i, ptr %41, align 8 - %89 = icmp eq ptr %88, null - br i1 %89, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i, label %90 + %88 = icmp eq ptr %87, null + br i1 %88, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i, label %89 -90: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i - call void @_ZdaPv(ptr noundef nonnull %88) #37 +89: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i + call void @_ZdaPv(ptr noundef nonnull %87) #37 br label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i -_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %90, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i - %91 = icmp eq ptr %.pre.i73, null - br i1 %91, label %93, label %92 +_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %89, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i + %90 = icmp eq ptr %.pre.i73, null + br i1 %90, label %92, label %91 -92: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i +91: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i call void @_ZdaPv(ptr noundef nonnull %.pre.i73) #37 - br label %93 - -93: ; preds = %.lr.ph139, %92, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i - %94 = sext i32 %67 to i64 - store i64 %70, ptr %23, align 8 - %95 = load ptr, ptr %48, align 8 - %96 = getelementptr inbounds double, ptr %95, i64 %69 - store double 0.000000e+00, ptr %96, align 8 - %97 = trunc i64 %64 to i32 - %98 = load ptr, ptr %.phi.trans.insert.i74, align 8 - %99 = getelementptr inbounds i32, ptr %98, i64 %69 - store i32 %97, ptr %99, align 4 - %100 = load ptr, ptr %48, align 8 - %101 = getelementptr inbounds double, ptr %100, i64 %94 - store double %63, ptr %101, align 8 + br label %92 + +92: ; preds = %.lr.ph139, %91, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i + %93 = sext i32 %66 to i64 + store i64 %69, ptr %23, align 8 + %94 = load ptr, ptr %47, align 8 + %95 = getelementptr inbounds double, ptr %94, i64 %68 + store double 0.000000e+00, ptr %95, align 8 + %96 = trunc i64 %63 to i32 + %97 = load ptr, ptr %.phi.trans.insert.i74, align 8 + %98 = getelementptr inbounds i32, ptr %97, i64 %68 + store i32 %96, ptr %98, align 4 + %99 = load ptr, ptr %47, align 8 + %100 = getelementptr inbounds double, ptr %99, i64 %93 + store double %62, ptr %100, align 8 %102 = load i64, ptr %49, align 8 %103 = load i64, ptr %50, align 8 %104 = icmp slt i64 %102, %103 @@ -67638,20 +67638,20 @@ _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %90, %_ZN5Eigen8inte %107 = icmp slt i64 %105, %106 br i1 %104, label %108, label %.thread4.i -108: ; preds = %93 - %109 = load ptr, ptr %54, align 8 - %110 = getelementptr inbounds i32, ptr %109, i64 %102 - %111 = load i32, ptr %110, align 4 +111: ; preds = %93 + %112 = load ptr, ptr %54, align 8 + %113 = getelementptr inbounds i32, ptr %112, i64 %102 + %114 = load i32, ptr %113, align 4 br i1 %107, label %112, label %._crit_edge8.i -112: ; preds = %108 +116: ; preds = %111 %113 = load ptr, ptr %.phi.trans.insert.i, align 8 %114 = getelementptr inbounds i32, ptr %113, i64 %105 - %115 = load i32, ptr %114, align 4 - %116 = icmp eq i32 %115, %111 + %118 = load i32, ptr %114, align 4 + %116 = icmp eq i32 %118, %111 br i1 %116, label %117, label %131 -117: ; preds = %112 +117:; preds = %112 %118 = sext i32 %111 to i64 store i64 %118, ptr %46, align 8 %119 = load ptr, ptr %4, align 8 @@ -67671,22 +67671,22 @@ _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %90, %_ZN5Eigen8inte store i64 %130, ptr %51, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit -131: ; preds = %112 - %132 = icmp sgt i32 %115, %111 - br i1 %132, label %._crit_edge8.i, label %138 +130: ; preds = %112 + %131 = icmp sgt i32 %115, %111 + br i1 %131, label %._crit_edge8.i, label %137 -._crit_edge8.i: ; preds = %131, %108 - %133 = sext i32 %111 to i64 - store i64 %133, ptr %46, align 8 - %134 = load ptr, ptr %4, align 8 - %135 = getelementptr inbounds double, ptr %134, i64 %102 - %136 = load double, ptr %135, align 8 - store double %136, ptr %47, align 8 - %137 = add nsw i64 %102, 1 - store i64 %137, ptr %49, align 8 +._crit_edge8.i: ; preds = %130, %108 + %132 = sext i32 %111 to i64 + store i64 %132, ptr %45, align 8 + %133 = load ptr, ptr %4, align 8 + %134 = getelementptr inbounds double, ptr %133, i64 %102 + %135 = load double, ptr %134, align 8 + store double %135, ptr %46, align 8 + %136 = add nsw i64 %102, 1 + store i64 %136, ptr %48, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit -.thread4.i: ; preds = %93 +.thread4.i: ; preds = %92 br i1 %107, label %.thread4..thread5_crit_edge.i, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread .thread4..thread5_crit_edge.i: ; preds = %.thread4.i @@ -67695,89 +67695,89 @@ _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %90, %_ZN5Eigen8inte %.pre7.i = load i32, ptr %.phi.trans.insert6.i, align 4 br label %.thread5.i -138: ; preds = %131 - %139 = icmp slt i32 %115, %111 - br i1 %139, label %.thread5.i, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread +137: ; preds = %130 + %138 = icmp slt i32 %115, %111 + br i1 %138, label %.thread5.i, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread -.thread5.i: ; preds = %138, %.thread4..thread5_crit_edge.i - %140 = phi i32 [ %115, %138 ], [ %.pre7.i, %.thread4..thread5_crit_edge.i ] - %141 = sext i32 %140 to i64 - store i64 %141, ptr %46, align 8 - %142 = load ptr, ptr %53, align 8 - %143 = load double, ptr %142, align 8 - %144 = load ptr, ptr %55, align 8 - %145 = getelementptr inbounds double, ptr %144, i64 %105 - %146 = load double, ptr %145, align 8 - %147 = fmul double %143, %146 - %148 = fsub double 0.000000e+00, %147 - store double %148, ptr %47, align 8 - %149 = add nsw i64 %105, 1 - store i64 %149, ptr %51, align 8 +.thread5.i: ; preds = %137, %.thread4..thread5_crit_edge.i + %139 = phi i32 [ %115, %138 ], [ %.pre7.i, %.thread4..thread5_crit_edge.i ] + %140 = sext i32 %139 to i64 + store i64 %140, ptr %45, align 8 + %141 = load ptr, ptr %52, align 8 + %142 = load double, ptr %141, align 8 + %143 = load ptr, ptr %54, align 8 + %144 = getelementptr inbounds double, ptr %143, i64 %105 + %145 = load double, ptr %144, align 8 + %146 = fmul double %142, %145 + %147 = fsub double 0.000000e+00, %146 + store double %147, ptr %46, align 8 + %148 = add nsw i64 %105, 1 + store i64 %148, ptr %50, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit -_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread: ; preds = %.thread4.i, %138 - store double 0.000000e+00, ptr %47, align 8 - store i64 -1, ptr %46, align 8 +_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit.thread: ; preds = %.thread4.i, %137 + store double 0.000000e+00, ptr %46, align 8 + store i64 -1, ptr %45, align 8 br label %.loopexit _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit: ; preds = %117, %._crit_edge8.i, %.thread5.i - %150 = phi i64 [ %118, %117 ], [ %133, %._crit_edge8.i ], [ %141, %.thread5.i ] - %151 = phi double [ %128, %117 ], [ %136, %._crit_edge8.i ], [ %148, %.thread5.i ] - %152 = icmp sgt i64 %150, -1 - br i1 %152, label %.lr.ph139, label %.loopexit - -153: ; preds = %.loopexit - %154 = load i64, ptr %23, align 8 - %155 = trunc i64 %154 to i32 - %156 = load i64, ptr %26, align 8 - %157 = icmp sgt i64 %156, -1 - br i1 %157, label %.lr.ph.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit - -.lr.ph.i: ; preds = %153 - %158 = load ptr, ptr %24, align 8 - br label %159 - -159: ; preds = %163, %.lr.ph.i - %.08.i = phi i64 [ %156, %.lr.ph.i ], [ %164, %163 ] - %160 = getelementptr inbounds nuw i32, ptr %158, i64 %.08.i - %161 = load i32, ptr %160, align 4 - %162 = icmp eq i32 %161, 0 - br i1 %162, label %163, label %.critedge.i + %149 = phi i64 [ %118, %117 ], [ %132, %._crit_edge8.i ], [ %140, %.thread5.i ] + %150 = phi double [ %128, %117 ], [ %135, %._crit_edge8.i ], [ %147, %.thread5.i ] + %151 = icmp sgt i64 %149, -1 + br i1 %151, label %.lr.ph139, label %.loopexit + +152: ; preds = %.loopexit + %153 = load i64, ptr %23, align 8 + %154 = trunc i64 %153 to i32 + %155 = load i64, ptr %26, align 8 + %156 = icmp sgt i64 %155, -1 + br i1 %156, label %.lr.ph.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit + +.lr.ph.i: ; preds = %152 + %157 = load ptr, ptr %24, align 8 + br label %158 + +158: ; preds = %162, %.lr.ph.i + %.08.i = phi i64 [ %155, %.lr.ph.i ], [ %163, %163 ] + %159 = getelementptr inbounds nuw i32, ptr %157, i64 %.08.i + %160 = load i32, ptr %159, align 4 + %161 = icmp eq i32 %160, 0 + br i1 %161, label %162, label %.critedge.i -163: ; preds = %159 - %164 = add nsw i64 %.08.i, -1 - %165 = icmp sgt i64 %.08.i, 0 - br i1 %165, label %159, label %.critedge.i, !llvm.loop !223 +162: ; preds = %158 + %163 = add nsw i64 %.08.i, -1 + %164 = icmp sgt i64 %.08.i, 0 + br i1 %164, label %158, label %.critedge.i, !llvm.loop !223 -.critedge.i: ; preds = %163, %159 +.critedge.i: ; preds = %162, %158 %.0.lcssa.i = phi i64 [ %.08.i, %159 ], [ -1, %163 ] - %.not.not11.i = icmp slt i64 %.0.lcssa.i, %156 + %.not.not11.i = icmp slt i64 %.0.lcssa.i, %155 br i1 %.not.not11.i, label %.lr.ph13.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit .lr.ph13.i: ; preds = %.critedge.i, %.lr.ph13.i %.1.in12.i = phi i64 [ %.1.i, %.lr.ph13.i ], [ %.0.lcssa.i, %.critedge.i ] %.1.i = add nsw i64 %.1.in12.i, 1 - %166 = load ptr, ptr %24, align 8 - %167 = getelementptr inbounds i32, ptr %166, i64 %.1.i - store i32 %155, ptr %167, align 4 - %168 = load i64, ptr %26, align 8 - %.not.not.i = icmp slt i64 %.1.i, %168 + %165 = load ptr, ptr %24, align 8 + %166 = getelementptr inbounds i32, ptr %165, i64 %.1.i + store i32 %154, ptr %166, align 4 + %167 = load i64, ptr %26, align 8 + %.not.not.i = icmp slt i64 %.1.i, %167 br i1 %.not.not.i, label %.lr.ph13.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit, !llvm.loop !224 -169: ; preds = %2 +168: ; preds = %2 store i8 0, ptr %5, align 8 - %170 = getelementptr inbounds nuw i8, ptr %5, i64 8 - call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %170, i8 0, i64 64, i1 false) - %171 = getelementptr inbounds nuw i8, ptr %5, i64 16 - store i64 %21, ptr %171, align 8 - %172 = getelementptr inbounds nuw i8, ptr %5, i64 56 - %173 = getelementptr inbounds nuw i8, ptr %5, i64 24 - %174 = tail call noalias dereferenceable_or_null(8) ptr @malloc(i64 noundef 8) #34 - store ptr %174, ptr %173, align 8 - %.not6.i = icmp eq ptr %174, null - br i1 %.not6.i, label %175, label %180 - -175: ; preds = %169 + %169 = getelementptr inbounds nuw i8, ptr %5, i64 8 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %169, i8 0, i64 64, i1 false) + %170 = getelementptr inbounds nuw i8, ptr %5, i64 16 + store i64 %21, ptr %170, align 8 + %171 = getelementptr inbounds nuw i8, ptr %5, i64 56 + %172 = getelementptr inbounds nuw i8, ptr %5, i64 24 + %173 = tail call noalias dereferenceable_or_null(8) ptr @malloc(i64 noundef 8) #34 + store ptr %173, ptr %172, align 8 + %.not6.i = icmp eq ptr %173, null + br i1 %.not6.i, label %175, label %179 + +.noexc80: ; preds = %169 %176 = tail call ptr @__cxa_allocate_exception(i64 8) #16 store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %176, align 8 invoke void @__cxa_throw(ptr nonnull %176, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 @@ -67786,26 +67786,26 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ .noexc80: ; preds = %175 unreachable -177: ; preds = %175 - %178 = landingpad { ptr, i32 } +176: ; preds = %175 + %177 = landingpad { ptr, i32 } cleanup - %179 = getelementptr inbounds nuw i8, ptr %5, i64 40 - call void @_ZN5Eigen8internal17CompressedStorageIdiED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #16 + %178 = getelementptr inbounds nuw i8, ptr %5, i64 40 + call void @_ZN5Eigen8internal17CompressedStorageIdiED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #16 br label %.body -180: ; preds = %169 - store i64 1, ptr %170, align 8 - %181 = getelementptr inbounds nuw i8, ptr %5, i64 32 - store i64 0, ptr %174, align 4 - %182 = load i64, ptr %20, align 8 - %.sroa.speculated = tail call i64 @llvm.smax.i64(i64 %182, i64 1) +179: ; preds = %168 + store i64 1, ptr %169, align 8 + %180 = getelementptr inbounds nuw i8, ptr %5, i64 32 + store i64 0, ptr %173, align 4 + %181 = load i64, ptr %20, align 8 + %.sroa.speculated = tail call i64 @llvm.smax.i64(i64 %181, i64 1) %183 = shl nuw nsw i64 %.sroa.speculated, 1 %.sroa.speculated116 = tail call i64 @llvm.smin.i64(i64 %183, i64 %182) %184 = getelementptr inbounds nuw i8, ptr %5, i64 64 %185 = icmp sgt i64 %182, 0 br i1 %185, label %186, label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 -186: ; preds = %180 +186:; preds = %180 %187 = getelementptr inbounds nuw i8, ptr %5, i64 40 %188 = icmp ugt i64 %.sroa.speculated116, 2305843009213693951 %189 = shl nuw i64 %.sroa.speculated116, 3 @@ -67814,107 +67814,107 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ to label %.noexc93 unwind label %.loopexit.split-lp.loopexit.split-lp .noexc93: ; preds = %186 - %192 = icmp ugt i64 %.sroa.speculated116, 4611686018427387903 - %193 = shl nuw i64 %.sroa.speculated116, 2 - %194 = select i1 %192, i64 -1, i64 %193 - %195 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %194) #36 + %190 = icmp ugt i64 %.sroa.speculated116, 4611686018427387903 + %191 = shl nuw i64 %.sroa.speculated116, 2 + %192 = select i1 %190, i64 -1, i64 %191 + %193 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %192) #36 to label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89 unwind label %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 _ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81: ; preds = %.noexc93 - %196 = landingpad { ptr, i32 } + %194 = landingpad { ptr, i32 } cleanup tail call void @_ZdaPv(ptr noundef nonnull %191) #37 br label %.body94 _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89: ; preds = %.noexc93 store ptr %191, ptr %187, align 8 - %197 = getelementptr inbounds nuw i8, ptr %5, i64 48 - store ptr %195, ptr %197, align 8 + %195 = getelementptr inbounds nuw i8, ptr %5, i64 48 + store ptr %193, ptr %195, align 8 store i64 %.sroa.speculated116, ptr %184, align 8 br label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 -_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89, %180 - %198 = getelementptr inbounds nuw i8, ptr %6, i64 120 - %199 = getelementptr inbounds nuw i8, ptr %6, i64 112 - %200 = getelementptr inbounds nuw i8, ptr %5, i64 40 +_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89, %179 + %196 = getelementptr inbounds nuw i8, ptr %6, i64 120 + %197 = getelementptr inbounds nuw i8, ptr %6, i64 112 + %198 = getelementptr inbounds nuw i8, ptr %5, i64 40 %.phi.trans.insert.i102 = getelementptr inbounds nuw i8, ptr %5, i64 48 - %201 = getelementptr inbounds nuw i8, ptr %6, i64 24 - %202 = getelementptr inbounds nuw i8, ptr %6, i64 32 - %203 = getelementptr inbounds nuw i8, ptr %6, i64 72 - %204 = getelementptr inbounds nuw i8, ptr %6, i64 80 + %199 = getelementptr inbounds nuw i8, ptr %6, i64 24 + %200 = getelementptr inbounds nuw i8, ptr %6, i64 32 + %201 = getelementptr inbounds nuw i8, ptr %6, i64 72 + %202 = getelementptr inbounds nuw i8, ptr %6, i64 80 %.phi.trans.insert.i56 = getelementptr inbounds nuw i8, ptr %6, i64 56 - %205 = getelementptr inbounds nuw i8, ptr %6, i64 40 - %206 = getelementptr inbounds nuw i8, ptr %6, i64 8 - %207 = getelementptr inbounds nuw i8, ptr %6, i64 48 - %208 = getelementptr i8, ptr %174, i64 4 - store i32 0, ptr %208, align 4 + %203 = getelementptr inbounds nuw i8, ptr %6, i64 40 + %204 = getelementptr inbounds nuw i8, ptr %6, i64 8 + %205 = getelementptr inbounds nuw i8, ptr %6, i64 48 + %206 = getelementptr i8, ptr %173, i64 4 + store i32 0, ptr %206, align 4 invoke void @_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorC2ERKSR_l(ptr noundef nonnull align 8 dereferenceable(128) %6, ptr noundef nonnull align 8 dereferenceable(64) %3, i64 noundef 0) to label %.preheader unwind label %.loopexit.split-lp.loopexit .loopexit132: ; preds = %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread, %.preheader - %209 = load ptr, ptr %181, align 8 - %210 = icmp eq ptr %209, null - br i1 %210, label %305, label %.loopexit131 + %207 = load ptr, ptr %180, align 8 + %208 = icmp eq ptr %207, null + br i1 %208, label %303, label %.loopexit131 .preheader: ; preds = %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 - %211 = load i64, ptr %198, align 8 - %212 = icmp sgt i64 %211, -1 - br i1 %212, label %.lr.ph.preheader, label %.loopexit132 + %209 = load i64, ptr %196, align 8 + %210 = icmp sgt i64 %209, -1 + br i1 %210, label %.lr.ph.preheader, label %.loopexit132 .lr.ph.preheader: ; preds = %.preheader - %.pre = load double, ptr %199, align 8 + %.pre = load double, ptr %197, align 8 br label %.lr.ph .lr.ph: ; preds = %.lr.ph.preheader, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 - %213 = phi double [ %303, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %.pre, %.lr.ph.preheader ] - %214 = phi i64 [ %302, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %211, %.lr.ph.preheader ] - %215 = load ptr, ptr %173, align 8 - %216 = getelementptr i8, ptr %215, i64 4 - %217 = load i32, ptr %216, align 4 - %218 = add nsw i32 %217, 1 - store i32 %218, ptr %216, align 4 - %219 = load i64, ptr %172, align 8 - %220 = add nsw i64 %219, 1 - %221 = load i64, ptr %184, align 8 - %.not.i.i48 = icmp sgt i64 %221, %219 - br i1 %.not.i.i48, label %245, label %222 - -222: ; preds = %.lr.ph - %223 = sitofp i64 %220 to double - %224 = fptosi double %223 to i64 - %225 = add nsw i64 %220, %224 - %.sroa.speculated.i.i.i49 = call i64 @llvm.smin.i64(i64 %225, i64 2147483647) - %.not3.i.i50 = icmp sgt i64 %.sroa.speculated.i.i.i49, %219 - br i1 %.not3.i.i50, label %228, label %226 - -226: ; preds = %222 - %227 = call ptr @__cxa_allocate_exception(i64 8) #16 - store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %227, align 8 - invoke void @__cxa_throw(ptr nonnull %227, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 + %211 = phi double [ %301, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %.pre, %.lr.ph.preheader ] + %212 = phi i64 [ %300, %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 ], [ %209, %.lr.ph.preheader ] + %213 = load ptr, ptr %172, align 8 + %214 = getelementptr i8, ptr %213, i64 4 + %215 = load i32, ptr %214, align 4 + %216 = add nsw i32 %215, 1 + store i32 %216, ptr %214, align 4 + %217 = load i64, ptr %171, align 8 + %218 = add nsw i64 %217, 1 + %219 = load i64, ptr %184, align 8 + %.not.i.i48 = icmp sgt i64 %219, %217 + br i1 %.not.i.i48, label %245, label %220 + +220: ; preds = %.lr.ph + %221 = sitofp i64 %218 to double + %222 = fptosi double %221 to i64 + %223 = add nsw i64 %218, %222 + %.sroa.speculated.i.i.i49 = call i64 @llvm.smin.i64(i64 %223, i64 2147483647) + %.not3.i.i50 = icmp sgt i64 %.sroa.speculated.i.i.i49, %217 + br i1 %.not3.i.i50, label %226, label %224 + +224: ; preds = %220 + %225 = call ptr @__cxa_allocate_exception(i64 8) #16 + store ptr getelementptr inbounds nuw (i8, ptr @_ZTVSt9bad_alloc, i64 16), ptr %225, align 8 + invoke void @__cxa_throw(ptr nonnull %225, ptr nonnull @_ZTISt9bad_alloc, ptr nonnull @_ZNSt9bad_allocD1Ev) #35 to label %.noexc51 unwind label %.loopexit.split-lp.loopexit.split-lp -.noexc51: ; preds = %226 +.noexc51: ; preds = %224 unreachable -228: ; preds = %222 - %229 = icmp ugt i64 %.sroa.speculated.i.i.i49, 2305843009213693951 - %230 = shl nuw i64 %.sroa.speculated.i.i.i49, 3 - %231 = select i1 %229, i64 -1, i64 %230 - %232 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %231) #36 +226: ; preds = %220 + %227 = icmp ugt i64 %.sroa.speculated.i.i.i49, 2305843009213693951 + %228 = shl nuw i64 %.sroa.speculated.i.i.i49, 3 + %229 = select i1 %227, i64 -1, i64 %228 + %230 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %229) #36 to label %.noexc109 unwind label %.loopexit133 -.noexc109: ; preds = %228 - %233 = icmp ugt i64 %.sroa.speculated.i.i.i49, 4611686018427387903 - %234 = shl nuw i64 %.sroa.speculated.i.i.i49, 2 - %235 = select i1 %233, i64 -1, i64 %234 - %236 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %235) #36 +.noexc109: ; preds = %226 + %231 = icmp ugt i64 %.sroa.speculated.i.i.i49, 4611686018427387903 + %232 = shl nuw i64 %.sroa.speculated.i.i.i49, 2 + %233 = select i1 %231, i64 -1, i64 %232 + %234 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %233) #36 to label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98 unwind label %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97 _ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98: ; preds = %.noexc109 - %.sroa.speculated.i99 = call i64 @llvm.smin.i64(i64 %219, i64 %.sroa.speculated.i.i.i49) - %237 = icmp sgt i64 %.sroa.speculated.i99, 0 - %.pre.i100 = load ptr, ptr %200, align 8 - br i1 %237, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 + %.sroa.speculated.i99 = call i64 @llvm.smin.i64(i64 %217, i64 %.sroa.speculated.i.i.i49) + %235 = icmp sgt i64 %.sroa.speculated.i99, 0 + %.pre.i100 = load ptr, ptr %198, align 8 + br i1 %235, label %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106, label %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98 %.pre24.i103 = load ptr, ptr %.phi.trans.insert.i102, align 8 @@ -67922,52 +67922,52 @@ _ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEv _ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106: ; preds = %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit.i98 %.idx.i107 = shl nuw nsw i64 %.sroa.speculated.i99, 3 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %232, ptr align 8 %.pre.i100, i64 %.idx.i107, i1 false) - %238 = load ptr, ptr %.phi.trans.insert.i102, align 8 + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %230, ptr align 8 %.pre.i100, i64 %.idx.i107, i1 false) + %236 = load ptr, ptr %.phi.trans.insert.i102, align 8 %.idx23.i108 = shl nuw nsw i64 %.sroa.speculated.i99, 2 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %236, ptr align 4 %238, i64 %.idx23.i108, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %234, ptr align 4 %236, i64 %.idx23.i108, i1 false) br label %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 _ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97: ; preds = %.noexc109 - %239 = landingpad { ptr, i32 } + %237 = landingpad { ptr, i32 } cleanup - call void @_ZdaPv(ptr noundef nonnull %232) #37 + call void @_ZdaPv(ptr noundef nonnull %230) #37 br label %.body94 _ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104: ; preds = %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 - %240 = phi ptr [ %.pre24.i103, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 ], [ %238, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106 ] - store ptr %232, ptr %200, align 8 - store ptr %236, ptr %.phi.trans.insert.i102, align 8 + %238 = phi ptr [ %.pre24.i103, %_ZN5Eigen8internal12scoped_arrayIiEC2El.exit._ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit_crit_edge.i101 ], [ %236, %_ZN5Eigen8internal10smart_copyIdEEvPKT_S4_PS2_.exit.i106 ] + store ptr %230, ptr %198, align 8 + store ptr %234, ptr %.phi.trans.insert.i102, align 8 store i64 %.sroa.speculated.i.i.i49, ptr %184, align 8 - %241 = icmp eq ptr %240, null - br i1 %241, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105, label %242 + %239 = icmp eq ptr %238, null + br i1 %239, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105, label %240 -242: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 - call void @_ZdaPv(ptr noundef nonnull %240) #37 +240: ; preds = %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 + call void @_ZdaPv(ptr noundef nonnull %238) #37 br label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 -_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105: ; preds = %242, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 - %243 = icmp eq ptr %.pre.i100, null - br i1 %243, label %245, label %244 +_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105: ; preds = %240, %_ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104 + %241 = icmp eq ptr %.pre.i100, null + br i1 %241, label %245, label %242 -244: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 +242: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 call void @_ZdaPv(ptr noundef nonnull %.pre.i100) #37 br label %245 -245: ; preds = %.lr.ph, %244, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 +262: ; preds = %.lr.ph, %244, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 %246 = sext i32 %217 to i64 store i64 %220, ptr %172, align 8 - %247 = load ptr, ptr %200, align 8 - %248 = getelementptr inbounds double, ptr %247, i64 %219 + %265 = load ptr, ptr %200, align 8 + %248 = getelementptr inbounds double, ptr %265, i64 %219 store double 0.000000e+00, ptr %248, align 8 %249 = trunc i64 %214 to i32 %250 = load ptr, ptr %.phi.trans.insert.i102, align 8 %251 = getelementptr inbounds i32, ptr %250, i64 %219 store i32 %249, ptr %251, align 4 - %252 = load ptr, ptr %200, align 8 - %253 = getelementptr inbounds double, ptr %252, i64 %246 + %269 = load ptr, ptr %200, align 8 + %270 = getelementptr inbounds double, ptr %269, i64 %246 store double %213, ptr %253, align 8 - %254 = load i64, ptr %201, align 8 + %272 = load i64, ptr %201, align 8 %255 = load i64, ptr %202, align 8 %256 = icmp slt i64 %254, %255 %257 = load i64, ptr %203, align 8 @@ -68002,25 +68002,25 @@ _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105: ; preds = %242, %_ZN5Eigen8i %279 = load double, ptr %272, align 8 %280 = fsub double %279, %278 store double %280, ptr %199, align 8 - %281 = add nsw i64 %254, 1 - store i64 %281, ptr %201, align 8 + %280 = add nsw i64 %254, 1 + store i64 %280, ptr %201, align 8 %282 = add nsw i64 %257, 1 store i64 %282, ptr %203, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 -283: ; preds = %264 - %284 = icmp sgt i32 %267, %263 - br i1 %284, label %._crit_edge8.i61, label %290 - -._crit_edge8.i61: ; preds = %283, %260 - %285 = sext i32 %263 to i64 - store i64 %285, ptr %198, align 8 - %286 = load ptr, ptr %6, align 8 - %287 = getelementptr inbounds double, ptr %286, i64 %254 - %288 = load double, ptr %287, align 8 - store double %288, ptr %199, align 8 - %289 = add nsw i64 %254, 1 - store i64 %289, ptr %201, align 8 +281: ; preds = %264 + %282 = icmp sgt i32 %267, %263 + br i1 %282, label %._crit_edge8.i61, label %289 + +._crit_edge8.i61: ; preds = %281, %260 + %283 = sext i32 %263 to i64 + store i64 %283, ptr %196, align 8 + %284 = load ptr, ptr %6, align 8 + %285 = getelementptr inbounds double, ptr %284, i64 %254 + %286 = load double, ptr %285, align 8 + store double %286, ptr %197, align 8 + %287 = add nsw i64 %254, 1 + store i64 %287, ptr %199, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 .thread4.i54: ; preds = %245 @@ -68032,17 +68032,17 @@ _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105: ; preds = %242, %_ZN5Eigen8i %.pre7.i59 = load i32, ptr %.phi.trans.insert6.i58, align 4 br label %.thread5.i60 -290: ; preds = %283 - %291 = icmp slt i32 %267, %263 - br i1 %291, label %.thread5.i60, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread +289: ; preds = %281 + %289 = icmp slt i32 %267, %263 + br i1 %289, label %.thread5.i60, label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread -.thread5.i60: ; preds = %290, %.thread4..thread5_crit_edge.i55 - %292 = phi i32 [ %267, %290 ], [ %.pre7.i59, %.thread4..thread5_crit_edge.i55 ] - %293 = sext i32 %292 to i64 - store i64 %293, ptr %198, align 8 +.thread5.i60: ; preds = %289, %.thread4..thread5_crit_edge.i55 + %290 = phi i32 [ %267, %290 ], [ %.pre7.i59, %.thread4..thread5_crit_edge.i55 ] + %291 = sext i32 %290 to i64 + store i64 %291, ptr %196, align 8 %294 = load ptr, ptr %205, align 8 %295 = load double, ptr %294, align 8 - %296 = load ptr, ptr %207, align 8 + %296 = load ptr, ptr %205, align 8 %297 = getelementptr inbounds double, ptr %296, i64 %257 %298 = load double, ptr %297, align 8 %299 = fmul double %295, %298 @@ -68052,18 +68052,18 @@ _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105: ; preds = %242, %_ZN5Eigen8i store i64 %301, ptr %203, align 8 br label %_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62 -_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread: ; preds = %.thread4.i54, %290 - store double 0.000000e+00, ptr %199, align 8 - store i64 -1, ptr %198, align 8 +_ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62.thread: ; preds = %.thread4.i54, %289 + store double 0.000000e+00, ptr %197, align 8 + store i64 -1, ptr %196, align 8 br label %.loopexit132 _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_opIddEEKNS_5BlockINS_12SparseMatrixIdLi0EiEELin1ELi1ELb1EEEKNS2_INS0_17scalar_product_opIddEEKNS_14CwiseNullaryOpINS0_18scalar_constant_opIdEEKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEEKNS5_IKS7_Lin1ELi1ELb1EEEEEEENS0_13IteratorBasedESQ_ddE13InnerIteratorppEv.exit62: ; preds = %269, %._crit_edge8.i61, %.thread5.i60 - %302 = phi i64 [ %270, %269 ], [ %285, %._crit_edge8.i61 ], [ %293, %.thread5.i60 ] - %303 = phi double [ %280, %269 ], [ %288, %._crit_edge8.i61 ], [ %300, %.thread5.i60 ] - %304 = icmp sgt i64 %302, -1 - br i1 %304, label %.lr.ph, label %.loopexit132 + %300 = phi i64 [ %270, %269 ], [ %283, %._crit_edge8.i61 ], [ %291, %.thread5.i60 ] + %301 = phi double [ %280, %269 ], [ %286, %._crit_edge8.i61 ], [ %300, %.thread5.i60 ] + %302 = icmp sgt i64 %300, -1 + br i1 %302, label %.lr.ph, label %.loopexit132 -.loopexit133: ; preds = %228 +.loopexit133: ; preds = %226 %lpad.loopexit = landingpad { ptr, i32 } cleanup br label %.body94 @@ -68073,86 +68073,86 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ cleanup br label %.body94 -.loopexit.split-lp.loopexit.split-lp: ; preds = %186, %226, %.loopexit131 +.loopexit.split-lp.loopexit.split-lp: ; preds = %186, %224, %.loopexit131 %lpad.loopexit.split-lp135 = landingpad { ptr, i32 } cleanup br label %.body94 .body94: ; preds = %.loopexit133, %.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 - %eh.lpad-body95 = phi { ptr, i32 } [ %196, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 ], [ %239, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit134, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp135, %.loopexit.split-lp.loopexit.split-lp ] + %eh.lpad-body95 = phi { ptr, i32 } [ %194, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81 ], [ %237, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i97 ], [ %lpad.loopexit, %.loopexit133 ], [ %lpad.loopexit134, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp135, %.loopexit.split-lp.loopexit.split-lp ] call void @_ZN5Eigen12SparseMatrixIdLi0EiED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %5) #16 br label %.body -305: ; preds = %.loopexit132 - %306 = load i64, ptr %172, align 8 - %307 = trunc i64 %306 to i32 - %308 = load i64, ptr %170, align 8 - %309 = icmp sgt i64 %308, -1 - br i1 %309, label %.lr.ph.i63, label %.loopexit131 - -.lr.ph.i63: ; preds = %305 - %310 = load ptr, ptr %173, align 8 - br label %311 - -311: ; preds = %315, %.lr.ph.i63 - %.08.i64 = phi i64 [ %308, %.lr.ph.i63 ], [ %316, %315 ] - %312 = getelementptr inbounds nuw i32, ptr %310, i64 %.08.i64 - %313 = load i32, ptr %312, align 4 - %314 = icmp eq i32 %313, 0 - br i1 %314, label %315, label %.critedge.i65 - -315: ; preds = %311 - %316 = add nsw i64 %.08.i64, -1 - %317 = icmp sgt i64 %.08.i64, 0 - br i1 %317, label %311, label %.critedge.i65, !llvm.loop !223 - -.critedge.i65: ; preds = %315, %311 +303: ; preds = %.loopexit132 + %304 = load i64, ptr %171, align 8 + %305 = trunc i64 %304 to i32 + %306 = load i64, ptr %169, align 8 + %307 = icmp sgt i64 %306, -1 + br i1 %307, label %.lr.ph.i63, label %.loopexit131 + +.lr.ph.i63: ; preds = %303 + %308 = load ptr, ptr %172, align 8 + br label %309 + +309: ; preds = %313, %.lr.ph.i63 + %.08.i64 = phi i64 [ %306, %.lr.ph.i63 ], [ %314, %315 ] + %310 = getelementptr inbounds nuw i32, ptr %308, i64 %.08.i64 + %311 = load i32, ptr %310, align 4 + %312 = icmp eq i32 %311, 0 + br i1 %312, label %313, label %.critedge.i65 + +313: ; preds = %309 + %314 = add nsw i64 %.08.i64, -1 + %315 = icmp sgt i64 %.08.i64, 0 + br i1 %315, label %309, label %.critedge.i65, !llvm.loop !223 + +.critedge.i65: ; preds = %313, %309 %.0.lcssa.i66 = phi i64 [ %.08.i64, %311 ], [ -1, %315 ] - %.not.not11.i67 = icmp slt i64 %.0.lcssa.i66, %308 + %.not.not11.i67 = icmp slt i64 %.0.lcssa.i66, %306 br i1 %.not.not11.i67, label %.lr.ph13.i68, label %.loopexit131 .lr.ph13.i68: ; preds = %.critedge.i65, %.lr.ph13.i68 %.1.in12.i69 = phi i64 [ %.1.i70, %.lr.ph13.i68 ], [ %.0.lcssa.i66, %.critedge.i65 ] %.1.i70 = add nsw i64 %.1.in12.i69, 1 - %318 = load ptr, ptr %173, align 8 - %319 = getelementptr inbounds i32, ptr %318, i64 %.1.i70 - store i32 %307, ptr %319, align 4 - %320 = load i64, ptr %170, align 8 - %.not.not.i71 = icmp slt i64 %.1.i70, %320 + %316 = load ptr, ptr %172, align 8 + %317 = getelementptr inbounds i32, ptr %316, i64 %.1.i70 + store i32 %305, ptr %317, align 4 + %318 = load i64, ptr %169, align 8 + %.not.not.i71 = icmp slt i64 %.1.i70, %318 br i1 %.not.not.i71, label %.lr.ph13.i68, label %.loopexit131, !llvm.loop !224 -.loopexit131: ; preds = %.lr.ph13.i68, %.loopexit132, %305, %.critedge.i65 +.loopexit131: ; preds = %.lr.ph13.i68, %.loopexit132, %303, %.critedge.i65 store i8 1, ptr %5, align 8 - %321 = invoke noundef nonnull align 8 dereferenceable(72) ptr @_ZN5Eigen12SparseMatrixIdLi0EiEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(72) %0, ptr noundef nonnull align 8 dereferenceable(72) %5) + %319 = invoke noundef nonnull align 8 dereferenceable(72) ptr @_ZN5Eigen12SparseMatrixIdLi0EiEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(72) %0, ptr noundef nonnull align 8 dereferenceable(72) %5) to label %322 unwind label %.loopexit.split-lp.loopexit.split-lp -322: ; preds = %.loopexit131 - %323 = load ptr, ptr %173, align 8 - call void @free(ptr noundef %323) #16 - %324 = load ptr, ptr %181, align 8 - call void @free(ptr noundef %324) #16 - %325 = load ptr, ptr %200, align 8 - %326 = icmp eq ptr %325, null - br i1 %326, label %328, label %327 - -327: ; preds = %322 - call void @_ZdaPv(ptr noundef nonnull %325) #37 - br label %328 - -328: ; preds = %327, %322 - %329 = load ptr, ptr %.phi.trans.insert.i102, align 8 - %330 = icmp eq ptr %329, null - br i1 %330, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit, label %331 +320: ; preds = %.loopexit131 + %321 = load ptr, ptr %172, align 8 + call void @free(ptr noundef %321) #16 + %322 = load ptr, ptr %180, align 8 + call void @free(ptr noundef %322) #16 + %323 = load ptr, ptr %198, align 8 + %324 = icmp eq ptr %323, null + br i1 %324, label %326, label %325 -331: ; preds = %328 - call void @_ZdaPv(ptr noundef nonnull %329) #37 +325: ; preds = %320 + call void @_ZdaPv(ptr noundef nonnull %323) #37 + br label %326 + +326: ; preds = %325, %320 + %327 = load ptr, ptr %.phi.trans.insert.i102, align 8 + %328 = icmp eq ptr %327, null + br i1 %328, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit, label %329 + +329: ; preds = %326 + call void @_ZdaPv(ptr noundef nonnull %327) #37 br label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit -_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit: ; preds = %.lr.ph13.i, %331, %328, %.critedge.i, %153, %.loopexit +_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit: ; preds = %.lr.ph13.i, %329, %326, %.critedge.i, %152, %.loopexit ret void -.body: ; preds = %177, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i, %.body94 - %.pn = phi { ptr, i32 } [ %eh.lpad-body95, %.body94 ], [ %178, %177 ], [ %87, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i ] +.body: ; preds = %176, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i, %.body94 + %.pn = phi { ptr, i32 } [ %eh.lpad-body95, %.body94 ], [ %177, %177 ], [ %86, %_ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i ] resume { ptr, i32 } %.pn } diff --git a/bench/openblas/optimized/dorbdb1.ll b/bench/openblas/optimized/dorbdb1.ll index 141cff3453e..5311e061593 100644 --- a/bench/openblas/optimized/dorbdb1.ll +++ b/bench/openblas/optimized/dorbdb1.ll @@ -94,7 +94,7 @@ define void @dorbdb1_(ptr noundef readonly captures(none) %0, ptr noundef readon %.neg = phi i32 [ 1, %15 ], [ 2, %39 ], [ 3, %45 ], [ 5, %47 ], [ 7, %50 ], [ 14, %54 ] store i32 %.sink, ptr %14, align 4, !tbaa !3 store i32 %.neg, ptr %16, align 4, !tbaa !3 - %66 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 + %65 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 br label %.loopexit .thread: ; preds = %54 @@ -103,173 +103,173 @@ define void @dorbdb1_(ptr noundef readonly captures(none) %0, ptr noundef readon br i1 %or.cond293, label %.loopexit, label %.lr.ph .lr.ph: ; preds = %.thread - %67 = getelementptr inbounds nuw i8, ptr %12, i64 8 - %68 = sext i32 %27 to i64 - %69 = sext i32 %24 to i64 - %70 = zext nneg i32 %41 to i64 - br label %71 + %66 = getelementptr inbounds nuw i8, ptr %12, i64 8 + %67 = sext i32 %27 to i64 + %68 = sext i32 %24 to i64 + %69 = zext nneg i32 %41 to i64 + br label %70 -71: ; preds = %.lr.ph, %174 +70: ; preds = %.lr.ph, %173 %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %174 ] %.0.neg288 = phi i32 [ -1, %.lr.ph ], [ %.pre-phi292, %174 ] %indvars290 = trunc nuw i64 %indvars.iv to i32 - %72 = load i32, ptr %1, align 4, !tbaa !3 - %73 = add nsw i32 %.0.neg288, 1 - %74 = add i32 %73, %72 - store i32 %74, ptr %17, align 4, !tbaa !3 - %75 = mul nsw i64 %indvars.iv, %69 - %76 = mul nsw i32 %24, %indvars290 - %77 = sext i32 %76 to i64 - %78 = getelementptr double, ptr %26, i64 %indvars.iv - %79 = getelementptr double, ptr %78, i64 %77 + %71 = load i32, ptr %1, align 4, !tbaa !3 + %72 = add nsw i32 %.0.neg288, 1 + %73 = add i32 %72, %71 + store i32 %73, ptr %17, align 4, !tbaa !3 + %74 = mul nsw i64 %indvars.iv, %68 + %75 = mul nsw i32 %24, %indvars290 + %76 = sext i32 %75 to i64 + %77 = getelementptr double, ptr %26, i64 %indvars.iv + %78 = getelementptr double, ptr %77, i64 %76 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %indvars = trunc i64 %indvars.iv.next to i32 - %80 = getelementptr double, ptr %26, i64 %indvars.iv.next - %81 = getelementptr double, ptr %80, i64 %75 - %82 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %79, ptr noundef %81, ptr noundef nonnull @c__1, ptr noundef nonnull %82) #6 - %83 = load i32, ptr %0, align 4, !tbaa !3 - %84 = load i32, ptr %1, align 4, !tbaa !3 - %85 = add i32 %73, %83 - %86 = sub i32 %85, %84 - store i32 %86, ptr %17, align 4, !tbaa !3 - %87 = mul nsw i64 %indvars.iv, %68 - %88 = mul nsw i32 %27, %indvars290 - %89 = sext i32 %88 to i64 - %90 = getelementptr double, ptr %29, i64 %indvars.iv - %91 = getelementptr double, ptr %90, i64 %89 - %92 = getelementptr double, ptr %29, i64 %indvars.iv.next - %93 = getelementptr double, ptr %92, i64 %87 - %94 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %91, ptr noundef %93, ptr noundef nonnull @c__1, ptr noundef nonnull %94) #6 - %95 = load double, ptr %91, align 8, !tbaa !7 - %96 = load double, ptr %79, align 8, !tbaa !7 - %97 = call double @atan2(double noundef %95, double noundef %96) #6, !tbaa !3 - %98 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv - store double %97, ptr %98, align 8, !tbaa !7 - %99 = call double @cos(double noundef %97) #6, !tbaa !3 - store double %99, ptr %20, align 8, !tbaa !7 - %100 = call double @sin(double noundef %97) #6, !tbaa !3 - store double %100, ptr %21, align 8, !tbaa !7 - store double 1.000000e+00, ptr %79, align 8, !tbaa !7 - store double 1.000000e+00, ptr %91, align 8, !tbaa !7 - %101 = load i32, ptr %1, align 4, !tbaa !3 - %102 = add i32 %73, %101 - store i32 %102, ptr %17, align 4, !tbaa !3 - %103 = load i32, ptr %2, align 4, !tbaa !3 - %104 = sub nsw i32 %103, %indvars290 - store i32 %104, ptr %18, align 4, !tbaa !3 - %105 = mul nsw i32 %24, %indvars - %106 = sext i32 %105 to i64 - %107 = getelementptr double, ptr %26, i64 %indvars.iv - %108 = getelementptr double, ptr %107, i64 %106 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %79, ptr noundef nonnull @c__1, ptr noundef nonnull %82, ptr noundef %108, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 - %109 = load i32, ptr %0, align 4, !tbaa !3 - %110 = load i32, ptr %1, align 4, !tbaa !3 - %111 = add i32 %73, %109 - %112 = sub i32 %111, %110 - store i32 %112, ptr %17, align 4, !tbaa !3 - %113 = load i32, ptr %2, align 4, !tbaa !3 - %114 = sub nsw i32 %113, %indvars290 - store i32 %114, ptr %18, align 4, !tbaa !3 - %115 = mul nsw i32 %27, %indvars - %116 = sext i32 %115 to i64 - %117 = getelementptr double, ptr %29, i64 %indvars.iv - %118 = getelementptr double, ptr %117, i64 %116 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %91, ptr noundef nonnull @c__1, ptr noundef nonnull %94, ptr noundef %118, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 - %119 = load i32, ptr %2, align 4, !tbaa !3 - %120 = sext i32 %119 to i64 - %121 = icmp slt i64 %indvars.iv, %120 - br i1 %121, label %123, label %._crit_edge - -._crit_edge: ; preds = %71 - %122 = trunc nuw i64 %indvars.iv to i32 - %.pre291 = xor i32 %122, -1 - br label %174 - -123: ; preds = %71 - %124 = sub nsw i32 %119, %indvars290 - store i32 %124, ptr %17, align 4, !tbaa !3 - call void @drot_(ptr noundef nonnull %17, ptr noundef nonnull %108, ptr noundef nonnull %4, ptr noundef nonnull %118, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 - %125 = load i32, ptr %2, align 4, !tbaa !3 - %126 = sub nsw i32 %125, %indvars290 - store i32 %126, ptr %17, align 4, !tbaa !3 - %127 = add nuw nsw i64 %indvars.iv, 2 - %128 = add nuw nsw i32 %indvars290, 2 - %129 = mul nsw i64 %127, %68 - %130 = mul nsw i32 %128, %27 - %131 = sext i32 %130 to i64 - %132 = getelementptr double, ptr %29, i64 %indvars.iv - %133 = getelementptr double, ptr %132, i64 %131 - %134 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %118, ptr noundef %133, ptr noundef nonnull %6, ptr noundef nonnull %134) #6 - %135 = load double, ptr %118, align 8, !tbaa !7 - store double %135, ptr %21, align 8, !tbaa !7 - store double 1.000000e+00, ptr %118, align 8, !tbaa !7 - %136 = load i32, ptr %1, align 4, !tbaa !3 - %137 = sub nsw i32 %136, %indvars290 - store i32 %137, ptr %17, align 4, !tbaa !3 - %138 = load i32, ptr %2, align 4, !tbaa !3 - %139 = sub nsw i32 %138, %indvars290 - store i32 %139, ptr %18, align 4, !tbaa !3 - %140 = getelementptr double, ptr %26, i64 %indvars.iv.next - %141 = getelementptr double, ptr %140, i64 %106 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %118, ptr noundef nonnull %6, ptr noundef nonnull %134, ptr noundef %141, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 - %142 = load i32, ptr %0, align 4, !tbaa !3 - %143 = load i32, ptr %1, align 4, !tbaa !3 - %.neg281 = add i32 %142, %.0.neg288 - %144 = sub i32 %.neg281, %143 - store i32 %144, ptr %17, align 4, !tbaa !3 - %145 = load i32, ptr %2, align 4, !tbaa !3 - %146 = sub nsw i32 %145, %indvars290 - store i32 %146, ptr %18, align 4, !tbaa !3 - %147 = getelementptr double, ptr %29, i64 %indvars.iv.next - %148 = getelementptr double, ptr %147, i64 %116 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %118, ptr noundef nonnull %6, ptr noundef nonnull %134, ptr noundef %148, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 - %149 = load i32, ptr %1, align 4, !tbaa !3 - %150 = sub nsw i32 %149, %indvars290 - store i32 %150, ptr %17, align 4, !tbaa !3 - %151 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %141, ptr noundef nonnull @c__1) #6 - %152 = load i32, ptr %0, align 4, !tbaa !3 - %153 = load i32, ptr %1, align 4, !tbaa !3 - %.neg283 = add i32 %152, %.0.neg288 - %154 = sub i32 %.neg283, %153 - store i32 %154, ptr %18, align 4, !tbaa !3 - %155 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %148, ptr noundef nonnull @c__1) #6 - %156 = fmul double %155, %155 - %157 = call double @llvm.fmuladd.f64(double %151, double %151, double %156) - %sqrt = call double @llvm.sqrt.f64(double %157) + %79 = getelementptr double, ptr %26, i64 %indvars.iv.next + %80 = getelementptr double, ptr %79, i64 %74 + %81 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %78, ptr noundef %80, ptr noundef nonnull @c__1, ptr noundef nonnull %81) #6 + %82 = load i32, ptr %0, align 4, !tbaa !3 + %83 = load i32, ptr %1, align 4, !tbaa !3 + %84 = add i32 %72, %82 + %85 = sub i32 %84, %83 + store i32 %85, ptr %17, align 4, !tbaa !3 + %86 = mul nsw i64 %indvars.iv, %67 + %87 = mul nsw i32 %27, %indvars290 + %88 = sext i32 %87 to i64 + %89 = getelementptr double, ptr %29, i64 %indvars.iv + %90 = getelementptr double, ptr %89, i64 %88 + %91 = getelementptr double, ptr %29, i64 %indvars.iv.next + %92 = getelementptr double, ptr %91, i64 %86 + %93 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %90, ptr noundef %92, ptr noundef nonnull @c__1, ptr noundef nonnull %93) #6 + %94 = load double, ptr %90, align 8, !tbaa !7 + %95 = load double, ptr %78, align 8, !tbaa !7 + %96 = call double @atan2(double noundef %94, double noundef %95) #6, !tbaa !3 + %97 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv + store double %96, ptr %97, align 8, !tbaa !7 + %98 = call double @cos(double noundef %96) #6, !tbaa !3 + store double %98, ptr %20, align 8, !tbaa !7 + %99 = call double @sin(double noundef %96) #6, !tbaa !3 + store double %99, ptr %21, align 8, !tbaa !7 + store double 1.000000e+00, ptr %78, align 8, !tbaa !7 + store double 1.000000e+00, ptr %90, align 8, !tbaa !7 + %100 = load i32, ptr %1, align 4, !tbaa !3 + %101 = add i32 %72, %100 + store i32 %101, ptr %17, align 4, !tbaa !3 + %102 = load i32, ptr %2, align 4, !tbaa !3 + %103 = sub nsw i32 %102, %indvars290 + store i32 %103, ptr %18, align 4, !tbaa !3 + %104 = mul nsw i32 %24, %indvars + %105 = sext i32 %104 to i64 + %106 = getelementptr double, ptr %26, i64 %indvars.iv + %107 = getelementptr double, ptr %106, i64 %105 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %78, ptr noundef nonnull @c__1, ptr noundef nonnull %81, ptr noundef %107, ptr noundef nonnull %4, ptr noundef nonnull %66) #6 + %108 = load i32, ptr %0, align 4, !tbaa !3 + %109 = load i32, ptr %1, align 4, !tbaa !3 + %110 = add i32 %72, %108 + %111 = sub i32 %110, %109 + store i32 %111, ptr %17, align 4, !tbaa !3 + %112 = load i32, ptr %2, align 4, !tbaa !3 + %113 = sub nsw i32 %112, %indvars290 + store i32 %113, ptr %18, align 4, !tbaa !3 + %114 = mul nsw i32 %27, %indvars + %115 = sext i32 %114 to i64 + %116 = getelementptr double, ptr %29, i64 %indvars.iv + %117 = getelementptr double, ptr %116, i64 %115 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %90, ptr noundef nonnull @c__1, ptr noundef nonnull %93, ptr noundef %117, ptr noundef nonnull %6, ptr noundef nonnull %66) #6 + %118 = load i32, ptr %2, align 4, !tbaa !3 + %119 = sext i32 %118 to i64 + %120 = icmp slt i64 %indvars.iv, %119 + br i1 %120, label %122, label %._crit_edge + +._crit_edge: ; preds = %70 + %121 = trunc nuw i64 %indvars.iv to i32 + %.pre291 = xor i32 %121, -1 + br label %173 + +122: ; preds = %70 + %123 = sub nsw i32 %118, %indvars290 + store i32 %123, ptr %17, align 4, !tbaa !3 + call void @drot_(ptr noundef nonnull %17, ptr noundef nonnull %107, ptr noundef nonnull %4, ptr noundef nonnull %117, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 + %124 = load i32, ptr %2, align 4, !tbaa !3 + %125 = sub nsw i32 %124, %indvars290 + store i32 %125, ptr %17, align 4, !tbaa !3 + %126 = add nuw nsw i64 %indvars.iv, 2 + %127 = add nuw nsw i32 %indvars290, 2 + %128 = mul nsw i64 %126, %67 + %129 = mul nsw i32 %127, %27 + %130 = sext i32 %129 to i64 + %131 = getelementptr double, ptr %29, i64 %indvars.iv + %132 = getelementptr double, ptr %131, i64 %130 + %133 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %117, ptr noundef %132, ptr noundef nonnull %6, ptr noundef nonnull %133) #6 + %134 = load double, ptr %117, align 8, !tbaa !7 + store double %134, ptr %21, align 8, !tbaa !7 + store double 1.000000e+00, ptr %117, align 8, !tbaa !7 + %135 = load i32, ptr %1, align 4, !tbaa !3 + %136 = sub nsw i32 %135, %indvars290 + store i32 %136, ptr %17, align 4, !tbaa !3 + %137 = load i32, ptr %2, align 4, !tbaa !3 + %138 = sub nsw i32 %137, %indvars290 + store i32 %138, ptr %18, align 4, !tbaa !3 + %139 = getelementptr double, ptr %26, i64 %indvars.iv.next + %140 = getelementptr double, ptr %139, i64 %105 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %117, ptr noundef nonnull %6, ptr noundef nonnull %133, ptr noundef %140, ptr noundef nonnull %4, ptr noundef nonnull %66) #6 + %141 = load i32, ptr %0, align 4, !tbaa !3 + %142 = load i32, ptr %1, align 4, !tbaa !3 + %.neg281 = add i32 %141, %.0.neg288 + %143 = sub i32 %.neg281, %142 + store i32 %143, ptr %17, align 4, !tbaa !3 + %144 = load i32, ptr %2, align 4, !tbaa !3 + %145 = sub nsw i32 %144, %indvars290 + store i32 %145, ptr %18, align 4, !tbaa !3 + %146 = getelementptr double, ptr %29, i64 %indvars.iv.next + %147 = getelementptr double, ptr %146, i64 %115 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %117, ptr noundef nonnull %6, ptr noundef nonnull %133, ptr noundef %147, ptr noundef nonnull %6, ptr noundef nonnull %66) #6 + %148 = load i32, ptr %1, align 4, !tbaa !3 + %149 = sub nsw i32 %148, %indvars290 + store i32 %149, ptr %17, align 4, !tbaa !3 + %150 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %140, ptr noundef nonnull @c__1) #6 + %151 = load i32, ptr %0, align 4, !tbaa !3 + %152 = load i32, ptr %1, align 4, !tbaa !3 + %.neg283 = add i32 %151, %.0.neg288 + %153 = sub i32 %.neg283, %152 + store i32 %153, ptr %18, align 4, !tbaa !3 + %154 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %147, ptr noundef nonnull @c__1) #6 + %155 = fmul double %154, %154 + %156 = call double @llvm.fmuladd.f64(double %150, double %150, double %155) + %sqrt = call double @llvm.sqrt.f64(double %156) store double %sqrt, ptr %20, align 8, !tbaa !7 - %158 = load double, ptr %21, align 8, !tbaa !7 - %159 = call double @atan2(double noundef %158, double noundef %sqrt) #6, !tbaa !3 - %160 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv - store double %159, ptr %160, align 8, !tbaa !7 - %161 = load i32, ptr %1, align 4, !tbaa !3 - %162 = sub nsw i32 %161, %indvars290 - store i32 %162, ptr %17, align 4, !tbaa !3 - %163 = load i32, ptr %0, align 4, !tbaa !3 - %.neg285 = sub i32 %.0.neg288, %161 - %164 = add i32 %.neg285, %163 - store i32 %164, ptr %18, align 4, !tbaa !3 - %165 = load i32, ptr %2, align 4, !tbaa !3 - %166 = trunc nuw nsw i64 %indvars.iv to i32 - %167 = xor i32 %166, -1 - %168 = add i32 %165, %167 - store i32 %168, ptr %19, align 4, !tbaa !3 - %169 = mul nsw i64 %127, %69 - %170 = getelementptr double, ptr %26, i64 %169 - %171 = getelementptr double, ptr %170, i64 %indvars.iv.next - %172 = getelementptr double, ptr %29, i64 %129 - %173 = getelementptr double, ptr %172, i64 %indvars.iv.next - call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %141, ptr noundef nonnull @c__1, ptr noundef %148, ptr noundef nonnull @c__1, ptr noundef %171, ptr noundef nonnull %4, ptr noundef %173, ptr noundef nonnull %6, ptr noundef nonnull %67, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 - br label %174 - -174: ; preds = %._crit_edge, %123 - %.pre-phi292 = phi i32 [ %.pre291, %._crit_edge ], [ %167, %123 ] - %.not265.not = icmp samesign ult i64 %indvars.iv, %70 - br i1 %.not265.not, label %71, label %.loopexit, !llvm.loop !9 - -.loopexit: ; preds = %174, %.thread, %.thread273 + %157 = load double, ptr %21, align 8, !tbaa !7 + %158 = call double @atan2(double noundef %157, double noundef %sqrt) #6, !tbaa !3 + %159 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv + store double %158, ptr %159, align 8, !tbaa !7 + %160 = load i32, ptr %1, align 4, !tbaa !3 + %161 = sub nsw i32 %160, %indvars290 + store i32 %161, ptr %17, align 4, !tbaa !3 + %162 = load i32, ptr %0, align 4, !tbaa !3 + %.neg285 = sub i32 %.0.neg288, %160 + %163 = add i32 %.neg285, %162 + store i32 %163, ptr %18, align 4, !tbaa !3 + %164 = load i32, ptr %2, align 4, !tbaa !3 + %165 = trunc nuw nsw i64 %indvars.iv to i32 + %166 = xor i32 %165, -1 + %167 = add i32 %164, %166 + store i32 %167, ptr %19, align 4, !tbaa !3 + %168 = mul nsw i64 %126, %68 + %169 = getelementptr double, ptr %26, i64 %168 + %170 = getelementptr double, ptr %169, i64 %indvars.iv.next + %171 = getelementptr double, ptr %29, i64 %128 + %172 = getelementptr double, ptr %171, i64 %indvars.iv.next + call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %140, ptr noundef nonnull @c__1, ptr noundef %147, ptr noundef nonnull @c__1, ptr noundef %170, ptr noundef nonnull %4, ptr noundef %172, ptr noundef nonnull %6, ptr noundef nonnull %66, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 + br label %173 + +173: ; preds = %._crit_edge, %122 + %.pre-phi292 = phi i32 [ %.pre291, %._crit_edge ], [ %166, %123 ] + %.not265.not = icmp samesign ult i64 %indvars.iv, %69 + br i1 %.not265.not, label %70, label %.loopexit, !llvm.loop !9 + +.loopexit: ; preds = %173, %.thread, %.thread273 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6 diff --git a/bench/openblas/optimized/dorbdb2.ll b/bench/openblas/optimized/dorbdb2.ll index 183623b0990..f4efb1d2372 100644 --- a/bench/openblas/optimized/dorbdb2.ll +++ b/bench/openblas/optimized/dorbdb2.ll @@ -94,248 +94,248 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon %.neg = phi i32 [ 1, %15 ], [ 2, %39 ], [ 3, %44 ], [ 5, %49 ], [ 7, %52 ], [ 14, %56 ] store i32 %.sink, ptr %14, align 4, !tbaa !3 store i32 %.neg, ptr %16, align 4, !tbaa !3 - %65 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 + %64 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 7) #6 br label %.loopexit .thread: ; preds = %56 - br i1 %36, label %.loopexit, label %66 + br i1 %36, label %.loopexit, label %65 -66: ; preds = %.thread +65: ; preds = %.thread %.not312339 = icmp eq i32 %40, 0 br i1 %.not312339, label %._crit_edge, label %.lr.ph -.lr.ph: ; preds = %66 - %67 = add i32 %24, 1 - %68 = getelementptr inbounds nuw i8, ptr %12, i64 8 - %69 = sext i32 %27 to i64 - %70 = sext i32 %24 to i64 +.lr.ph: ; preds = %65 + %66 = add i32 %24, 1 + %67 = getelementptr inbounds nuw i8, ptr %12, i64 8 + %68 = sext i32 %27 to i64 + %69 = sext i32 %24 to i64 %invariant.gep = getelementptr i8, ptr %29, i64 -8 %invariant.gep362 = getelementptr i8, ptr %26, i64 16 - %71 = zext nneg i32 %40 to i64 - br label %72 + %70 = zext nneg i32 %40 to i64 + br label %71 -72: ; preds = %.lr.ph, %164 +71: ; preds = %.lr.ph, %163 %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %164 ] - %.0.neg341 = phi i32 [ -1, %.lr.ph ], [ %172, %164 ] + %.0.neg341 = phi i32 [ -1, %.lr.ph ], [ %171, %164 ] %indvars349 = trunc nuw i64 %indvars.iv to i32 - %73 = icmp samesign ugt i64 %indvars.iv, 1 + %72 = icmp samesign ugt i64 %indvars.iv, 1 %.pre354 = load i32, ptr %2, align 4, !tbaa !3 - %74 = add nsw i32 %.0.neg341, 1 - br i1 %73, label %75, label %._crit_edge358 - -._crit_edge358: ; preds = %72 - %.pre360 = mul nuw nsw i64 %indvars.iv, %69 - br label %82 - -75: ; preds = %72 - %76 = add i32 %74, %.pre354 - store i32 %76, ptr %17, align 4, !tbaa !3 - %77 = mul i32 %67, %indvars349 - %78 = sext i32 %77 to i64 - %79 = getelementptr inbounds double, ptr %26, i64 %78 - %80 = mul nsw i64 %indvars.iv, %69 + %73 = add nsw i32 %.0.neg341, 1 + br i1 %72, label %74, label %._crit_edge358 + +._crit_edge358: ; preds = %71 + %.pre360 = mul nuw nsw i64 %indvars.iv, %68 + br label %81 + +74: ; preds = %71 + %75 = add i32 %73, %.pre354 + store i32 %75, ptr %17, align 4, !tbaa !3 + %76 = mul i32 %66, %indvars349 + %77 = sext i32 %76 to i64 + %78 = getelementptr inbounds double, ptr %26, i64 %77 + %79 = mul nsw i64 %indvars.iv, %68 %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv - %81 = getelementptr double, ptr %gep, i64 %80 - call void @drot_(ptr noundef nonnull %17, ptr noundef %79, ptr noundef nonnull %4, ptr noundef %81, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 + %80 = getelementptr double, ptr %gep, i64 %79 + call void @drot_(ptr noundef nonnull %17, ptr noundef %78, ptr noundef nonnull %4, ptr noundef %80, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %21) #6 %.pre = load i32, ptr %2, align 4, !tbaa !3 - br label %82 - -82: ; preds = %._crit_edge358, %75 - %.pre-phi361 = phi i64 [ %.pre360, %._crit_edge358 ], [ %80, %75 ] - %83 = phi i32 [ %.pre354, %._crit_edge358 ], [ %.pre, %75 ] - %84 = add i32 %74, %83 - store i32 %84, ptr %17, align 4, !tbaa !3 - %85 = mul nsw i64 %indvars.iv, %70 - %86 = mul nsw i32 %24, %indvars349 - %87 = sext i32 %86 to i64 - %88 = getelementptr double, ptr %26, i64 %indvars.iv - %89 = getelementptr double, ptr %88, i64 %87 + br label %81 + +81: ; preds = %._crit_edge358, %74 + %.pre-phi361 = phi i64 [ %.pre360, %._crit_edge358 ], [ %79, %75 ] + %82 = phi i32 [ %.pre354, %._crit_edge358 ], [ %.pre, %75 ] + %83 = add i32 %73, %82 + store i32 %83, ptr %17, align 4, !tbaa !3 + %84 = mul nsw i64 %indvars.iv, %69 + %85 = mul nsw i32 %24, %indvars349 + %86 = sext i32 %85 to i64 + %87 = getelementptr double, ptr %26, i64 %indvars.iv + %88 = getelementptr double, ptr %87, i64 %86 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %indvars = trunc i64 %indvars.iv.next to i32 - %90 = mul nsw i32 %24, %indvars - %91 = sext i32 %90 to i64 - %92 = getelementptr double, ptr %26, i64 %indvars.iv - %93 = getelementptr double, ptr %92, i64 %91 - %94 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %89, ptr noundef %93, ptr noundef nonnull %4, ptr noundef nonnull %94) #6 - %95 = load double, ptr %89, align 8, !tbaa !7 - store double %95, ptr %20, align 8, !tbaa !7 - store double 1.000000e+00, ptr %89, align 8, !tbaa !7 - %96 = load i32, ptr %1, align 4, !tbaa !3 - %97 = sub nsw i32 %96, %indvars349 - store i32 %97, ptr %17, align 4, !tbaa !3 - %98 = load i32, ptr %2, align 4, !tbaa !3 - %99 = add i32 %74, %98 - store i32 %99, ptr %18, align 4, !tbaa !3 - %100 = getelementptr double, ptr %26, i64 %indvars.iv.next - %101 = getelementptr double, ptr %100, i64 %85 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %89, ptr noundef nonnull %4, ptr noundef nonnull %94, ptr noundef %101, ptr noundef nonnull %4, ptr noundef nonnull %68) #6 - %102 = load i32, ptr %0, align 4, !tbaa !3 - %103 = load i32, ptr %1, align 4, !tbaa !3 - %104 = add i32 %74, %102 - %105 = sub i32 %104, %103 - store i32 %105, ptr %17, align 4, !tbaa !3 - %106 = load i32, ptr %2, align 4, !tbaa !3 - %107 = add i32 %74, %106 - store i32 %107, ptr %18, align 4, !tbaa !3 - %108 = mul nsw i32 %27, %indvars349 - %109 = sext i32 %108 to i64 - %110 = getelementptr double, ptr %29, i64 %indvars.iv - %111 = getelementptr double, ptr %110, i64 %109 - call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %89, ptr noundef nonnull %4, ptr noundef nonnull %94, ptr noundef %111, ptr noundef nonnull %6, ptr noundef nonnull %68) #6 - %112 = load i32, ptr %1, align 4, !tbaa !3 - %113 = sub nsw i32 %112, %indvars349 - store i32 %113, ptr %17, align 4, !tbaa !3 - %114 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %101, ptr noundef nonnull @c__1) #6 - %115 = load i32, ptr %0, align 4, !tbaa !3 - %116 = load i32, ptr %1, align 4, !tbaa !3 - %117 = add i32 %74, %115 - %118 = sub i32 %117, %116 - store i32 %118, ptr %18, align 4, !tbaa !3 - %119 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %111, ptr noundef nonnull @c__1) #6 - %120 = fmul double %119, %119 - %121 = call double @llvm.fmuladd.f64(double %114, double %114, double %120) - %sqrt = call double @llvm.sqrt.f64(double %121) + %89 = mul nsw i32 %24, %indvars + %90 = sext i32 %89 to i64 + %91 = getelementptr double, ptr %26, i64 %indvars.iv + %92 = getelementptr double, ptr %91, i64 %90 + %93 = getelementptr inbounds nuw double, ptr %34, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %88, ptr noundef %92, ptr noundef nonnull %4, ptr noundef nonnull %93) #6 + %94 = load double, ptr %88, align 8, !tbaa !7 + store double %94, ptr %20, align 8, !tbaa !7 + store double 1.000000e+00, ptr %88, align 8, !tbaa !7 + %95 = load i32, ptr %1, align 4, !tbaa !3 + %96 = sub nsw i32 %95, %indvars349 + store i32 %96, ptr %17, align 4, !tbaa !3 + %97 = load i32, ptr %2, align 4, !tbaa !3 + %98 = add i32 %73, %97 + store i32 %98, ptr %18, align 4, !tbaa !3 + %99 = getelementptr double, ptr %26, i64 %indvars.iv.next + %100 = getelementptr double, ptr %99, i64 %84 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %88, ptr noundef nonnull %4, ptr noundef nonnull %93, ptr noundef %100, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 + %101 = load i32, ptr %0, align 4, !tbaa !3 + %102 = load i32, ptr %1, align 4, !tbaa !3 + %103 = add i32 %73, %101 + %104 = sub i32 %103, %102 + store i32 %104, ptr %17, align 4, !tbaa !3 + %105 = load i32, ptr %2, align 4, !tbaa !3 + %106 = add i32 %73, %105 + store i32 %106, ptr %18, align 4, !tbaa !3 + %107 = mul nsw i32 %27, %indvars349 + %108 = sext i32 %107 to i64 + %109 = getelementptr double, ptr %29, i64 %indvars.iv + %110 = getelementptr double, ptr %109, i64 %108 + call void @dlarf_(ptr noundef nonnull @.str.1, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %88, ptr noundef nonnull %4, ptr noundef nonnull %93, ptr noundef %110, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 + %111 = load i32, ptr %1, align 4, !tbaa !3 + %112 = sub nsw i32 %111, %indvars349 + store i32 %112, ptr %17, align 4, !tbaa !3 + %113 = call double @dnrm2_(ptr noundef nonnull %17, ptr noundef %100, ptr noundef nonnull @c__1) #6 + %114 = load i32, ptr %0, align 4, !tbaa !3 + %115 = load i32, ptr %1, align 4, !tbaa !3 + %116 = add i32 %73, %114 + %117 = sub i32 %116, %115 + store i32 %117, ptr %18, align 4, !tbaa !3 + %118 = call double @dnrm2_(ptr noundef nonnull %18, ptr noundef %110, ptr noundef nonnull @c__1) #6 + %119 = fmul double %118, %118 + %120 = call double @llvm.fmuladd.f64(double %113, double %113, double %119) + %sqrt = call double @llvm.sqrt.f64(double %120) store double %sqrt, ptr %21, align 8, !tbaa !7 - %122 = load double, ptr %20, align 8, !tbaa !7 - %123 = call double @atan2(double noundef %sqrt, double noundef %122) #6, !tbaa !3 - %124 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv - store double %123, ptr %124, align 8, !tbaa !7 - %125 = load i32, ptr %1, align 4, !tbaa !3 - %126 = sub nsw i32 %125, %indvars349 - store i32 %126, ptr %17, align 4, !tbaa !3 - %127 = load i32, ptr %0, align 4, !tbaa !3 - %128 = sub i32 %74, %125 - %129 = add i32 %128, %127 - store i32 %129, ptr %18, align 4, !tbaa !3 - %130 = load i32, ptr %2, align 4, !tbaa !3 - %131 = sub nsw i32 %130, %indvars349 - store i32 %131, ptr %19, align 4, !tbaa !3 - %132 = getelementptr double, ptr %26, i64 %indvars.iv.next - %133 = getelementptr double, ptr %132, i64 %91 - %134 = mul nsw i32 %27, %indvars - %135 = sext i32 %134 to i64 - %136 = getelementptr double, ptr %29, i64 %indvars.iv - %137 = getelementptr double, ptr %136, i64 %135 - call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %101, ptr noundef nonnull @c__1, ptr noundef %111, ptr noundef nonnull @c__1, ptr noundef %133, ptr noundef nonnull %4, ptr noundef %137, ptr noundef nonnull %6, ptr noundef nonnull %68, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 - %138 = load i32, ptr %1, align 4, !tbaa !3 - %139 = sub nsw i32 %138, %indvars349 - store i32 %139, ptr %17, align 4, !tbaa !3 - call void @dscal_(ptr noundef nonnull %17, ptr noundef nonnull @c_b9, ptr noundef %101, ptr noundef nonnull @c__1) #6 - %140 = load i32, ptr %0, align 4, !tbaa !3 - %141 = load i32, ptr %1, align 4, !tbaa !3 - %142 = add i32 %74, %140 - %143 = sub i32 %142, %141 - store i32 %143, ptr %17, align 4, !tbaa !3 - %144 = getelementptr double, ptr %29, i64 %indvars.iv.next - %145 = getelementptr double, ptr %144, i64 %.pre-phi361 - %146 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %111, ptr noundef %145, ptr noundef nonnull @c__1, ptr noundef nonnull %146) #6 - %147 = load i32, ptr %1, align 4, !tbaa !3 - %148 = sext i32 %147 to i64 - %149 = icmp slt i64 %indvars.iv, %148 - br i1 %149, label %150, label %164 - -150: ; preds = %82 - %151 = sub nsw i32 %147, %indvars349 - store i32 %151, ptr %17, align 4, !tbaa !3 + %121 = load double, ptr %20, align 8, !tbaa !7 + %122 = call double @atan2(double noundef %sqrt, double noundef %121) #6, !tbaa !3 + %123 = getelementptr inbounds nuw double, ptr %30, i64 %indvars.iv + store double %122, ptr %123, align 8, !tbaa !7 + %124 = load i32, ptr %1, align 4, !tbaa !3 + %125 = sub nsw i32 %124, %indvars349 + store i32 %125, ptr %17, align 4, !tbaa !3 + %126 = load i32, ptr %0, align 4, !tbaa !3 + %127 = sub i32 %73, %124 + %128 = add i32 %127, %126 + store i32 %128, ptr %18, align 4, !tbaa !3 + %129 = load i32, ptr %2, align 4, !tbaa !3 + %130 = sub nsw i32 %129, %indvars349 + store i32 %130, ptr %19, align 4, !tbaa !3 + %131 = getelementptr double, ptr %26, i64 %indvars.iv.next + %132 = getelementptr double, ptr %131, i64 %90 + %133 = mul nsw i32 %27, %indvars + %134 = sext i32 %133 to i64 + %135 = getelementptr double, ptr %29, i64 %indvars.iv + %136 = getelementptr double, ptr %135, i64 %134 + call void @dorbdb5_(ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %100, ptr noundef nonnull @c__1, ptr noundef %110, ptr noundef nonnull @c__1, ptr noundef %132, ptr noundef nonnull %4, ptr noundef %136, ptr noundef nonnull %6, ptr noundef nonnull %67, ptr noundef nonnull %23, ptr noundef nonnull %22) #6 + %137 = load i32, ptr %1, align 4, !tbaa !3 + %138 = sub nsw i32 %137, %indvars349 + store i32 %138, ptr %17, align 4, !tbaa !3 + call void @dscal_(ptr noundef nonnull %17, ptr noundef nonnull @c_b9, ptr noundef %100, ptr noundef nonnull @c__1) #6 + %139 = load i32, ptr %0, align 4, !tbaa !3 + %140 = load i32, ptr %1, align 4, !tbaa !3 + %141 = add i32 %73, %139 + %142 = sub i32 %141, %140 + store i32 %142, ptr %17, align 4, !tbaa !3 + %143 = getelementptr double, ptr %29, i64 %indvars.iv.next + %144 = getelementptr double, ptr %143, i64 %.pre-phi361 + %145 = getelementptr inbounds nuw double, ptr %33, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %110, ptr noundef %144, ptr noundef nonnull @c__1, ptr noundef nonnull %145) #6 + %146 = load i32, ptr %1, align 4, !tbaa !3 + %147 = sext i32 %146 to i64 + %148 = icmp slt i64 %indvars.iv, %147 + br i1 %148, label %149, label %163 + +149: ; preds = %81 + %150 = sub nsw i32 %146, %indvars349 + store i32 %150, ptr %17, align 4, !tbaa !3 %gep363 = getelementptr double, ptr %invariant.gep362, i64 %indvars.iv - %152 = getelementptr double, ptr %gep363, i64 %85 - %153 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %101, ptr noundef %152, ptr noundef nonnull @c__1, ptr noundef nonnull %153) #6 - %154 = load double, ptr %101, align 8, !tbaa !7 - %155 = load double, ptr %111, align 8, !tbaa !7 - %156 = call double @atan2(double noundef %154, double noundef %155) #6, !tbaa !3 - %157 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv - store double %156, ptr %157, align 8, !tbaa !7 - %158 = call double @cos(double noundef %156) #6, !tbaa !3 - store double %158, ptr %20, align 8, !tbaa !7 - %159 = call double @sin(double noundef %156) #6, !tbaa !3 - store double %159, ptr %21, align 8, !tbaa !7 - store double 1.000000e+00, ptr %101, align 8, !tbaa !7 - %160 = load i32, ptr %1, align 4, !tbaa !3 - %161 = sub nsw i32 %160, %indvars349 - store i32 %161, ptr %17, align 4, !tbaa !3 - %162 = load i32, ptr %2, align 4, !tbaa !3 - %163 = sub nsw i32 %162, %indvars349 - store i32 %163, ptr %18, align 4, !tbaa !3 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %101, ptr noundef nonnull @c__1, ptr noundef nonnull %153, ptr noundef nonnull %133, ptr noundef nonnull %4, ptr noundef nonnull %68) #6 + %151 = getelementptr double, ptr %gep363, i64 %84 + %152 = getelementptr inbounds nuw double, ptr %32, i64 %indvars.iv + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef nonnull %100, ptr noundef %151, ptr noundef nonnull @c__1, ptr noundef nonnull %152) #6 + %153 = load double, ptr %100, align 8, !tbaa !7 + %154 = load double, ptr %110, align 8, !tbaa !7 + %155 = call double @atan2(double noundef %153, double noundef %154) #6, !tbaa !3 + %156 = getelementptr inbounds nuw double, ptr %31, i64 %indvars.iv + store double %155, ptr %156, align 8, !tbaa !7 + %157 = call double @cos(double noundef %155) #6, !tbaa !3 + store double %157, ptr %20, align 8, !tbaa !7 + %158 = call double @sin(double noundef %155) #6, !tbaa !3 + store double %158, ptr %21, align 8, !tbaa !7 + store double 1.000000e+00, ptr %100, align 8, !tbaa !7 + %159 = load i32, ptr %1, align 4, !tbaa !3 + %160 = sub nsw i32 %159, %indvars349 + store i32 %160, ptr %17, align 4, !tbaa !3 + %161 = load i32, ptr %2, align 4, !tbaa !3 + %162 = sub nsw i32 %161, %indvars349 + store i32 %162, ptr %18, align 4, !tbaa !3 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %100, ptr noundef nonnull @c__1, ptr noundef nonnull %152, ptr noundef nonnull %132, ptr noundef nonnull %4, ptr noundef nonnull %67) #6 %.pre355 = load i32, ptr %1, align 4, !tbaa !3 - br label %164 - -164: ; preds = %150, %82 - %165 = phi i32 [ %.pre355, %150 ], [ %147, %82 ] - store double 1.000000e+00, ptr %111, align 8, !tbaa !7 - %166 = load i32, ptr %0, align 4, !tbaa !3 - %167 = add i32 %74, %166 - %168 = sub i32 %167, %165 - store i32 %168, ptr %17, align 4, !tbaa !3 - %169 = load i32, ptr %2, align 4, !tbaa !3 - %170 = sub nsw i32 %169, %indvars349 - store i32 %170, ptr %18, align 4, !tbaa !3 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %111, ptr noundef nonnull @c__1, ptr noundef nonnull %146, ptr noundef %137, ptr noundef nonnull %6, ptr noundef nonnull %68) #6 - %.not312.not = icmp samesign ult i64 %indvars.iv, %71 - %171 = trunc nuw i64 %indvars.iv to i32 - %172 = xor i32 %171, -1 - br i1 %.not312.not, label %72, label %._crit_edge.loopexit, !llvm.loop !9 - -._crit_edge.loopexit: ; preds = %164 + br label %163 + +163: ; preds = %149, %81 + %164 = phi i32 [ %.pre355, %150 ], [ %146, %82 ] + store double 1.000000e+00, ptr %110, align 8, !tbaa !7 + %165 = load i32, ptr %0, align 4, !tbaa !3 + %166 = add i32 %73, %165 + %167 = sub i32 %166, %164 + store i32 %167, ptr %17, align 4, !tbaa !3 + %168 = load i32, ptr %2, align 4, !tbaa !3 + %169 = sub nsw i32 %168, %indvars349 + store i32 %169, ptr %18, align 4, !tbaa !3 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %110, ptr noundef nonnull @c__1, ptr noundef nonnull %145, ptr noundef %136, ptr noundef nonnull %6, ptr noundef nonnull %67) #6 + %.not312.not = icmp samesign ult i64 %indvars.iv, %70 + %170 = trunc nuw i64 %indvars.iv to i32 + %171 = xor i32 %170, -1 + br i1 %.not312.not, label %71, label %._crit_edge.loopexit, !llvm.loop !9 + +._crit_edge.loopexit: ; preds = %163 %.pre356 = load i32, ptr %2, align 4, !tbaa !3 %.pre357 = load i32, ptr %1, align 4, !tbaa !3 br label %._crit_edge -._crit_edge: ; preds = %._crit_edge.loopexit, %66 - %173 = phi i32 [ %.pre357, %._crit_edge.loopexit ], [ 0, %66 ] - %174 = phi i32 [ %.pre356, %._crit_edge.loopexit ], [ %45, %66 ] - %.not313343.not = icmp slt i32 %173, %174 +._crit_edge: ; preds = %._crit_edge.loopexit, %65 + %172 = phi i32 [ %.pre357, %._crit_edge.loopexit ], [ 0, %66 ] + %173 = phi i32 [ %.pre356, %._crit_edge.loopexit ], [ %45, %66 ] + %.not313343.not = icmp slt i32 %172, %173 br i1 %.not313343.not, label %.lr.ph347, label %.loopexit .lr.ph347: ; preds = %._crit_edge - %175 = getelementptr inbounds nuw i8, ptr %12, i64 8 - %176 = sext i32 %173 to i64 - %177 = add nsw i64 %176, 1 - %178 = sext i32 %27 to i64 - %179 = sext i32 %174 to i64 - br label %180 - -180: ; preds = %.lr.ph347, %180 - %indvars.iv350 = phi i64 [ %177, %.lr.ph347 ], [ %indvars.iv.next351, %180 ] - %.1.neg345.in = phi i32 [ %173, %.lr.ph347 ], [ %indvars353, %180 ] + %174 = getelementptr inbounds nuw i8, ptr %12, i64 8 + %175 = sext i32 %172 to i64 + %176 = add nsw i64 %175, 1 + %177 = sext i32 %27 to i64 + %178 = sext i32 %173 to i64 + br label %179 + +179: ; preds = %.lr.ph347, %179 + %indvars.iv350 = phi i64 [ %176, %.lr.ph347 ], [ %indvars.iv.next351, %180 ] + %.1.neg345.in = phi i32 [ %172, %.lr.ph347 ], [ %indvars353, %180 ] %indvars353 = trunc i64 %indvars.iv350 to i32 - %181 = load i32, ptr %0, align 4, !tbaa !3 - %182 = load i32, ptr %1, align 4, !tbaa !3 - %183 = add i32 %.1.neg345.in, %182 - %184 = sub i32 %181, %183 - store i32 %184, ptr %17, align 4, !tbaa !3 - %185 = mul nsw i64 %indvars.iv350, %178 - %186 = mul nsw i32 %27, %indvars353 - %187 = sext i32 %186 to i64 - %188 = getelementptr double, ptr %29, i64 %indvars.iv350 - %189 = getelementptr double, ptr %188, i64 %187 + %180 = load i32, ptr %0, align 4, !tbaa !3 + %181 = load i32, ptr %1, align 4, !tbaa !3 + %182 = add i32 %.1.neg345.in, %181 + %183 = sub i32 %180, %182 + store i32 %183, ptr %17, align 4, !tbaa !3 + %184 = mul nsw i64 %indvars.iv350, %177 + %185 = mul nsw i32 %27, %indvars353 + %186 = sext i32 %185 to i64 + %187 = getelementptr double, ptr %29, i64 %indvars.iv350 + %188 = getelementptr double, ptr %187, i64 %186 %indvars.iv.next351 = add nsw i64 %indvars.iv350, 1 %indvars352 = trunc i64 %indvars.iv.next351 to i32 - %190 = getelementptr double, ptr %29, i64 %indvars.iv.next351 - %191 = getelementptr double, ptr %190, i64 %185 - %192 = getelementptr inbounds double, ptr %33, i64 %indvars.iv350 - call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %189, ptr noundef %191, ptr noundef nonnull @c__1, ptr noundef nonnull %192) #6 - store double 1.000000e+00, ptr %189, align 8, !tbaa !7 - %193 = load i32, ptr %0, align 4, !tbaa !3 - %194 = load i32, ptr %1, align 4, !tbaa !3 - %195 = add i32 %.1.neg345.in, %194 - %196 = sub i32 %193, %195 - store i32 %196, ptr %17, align 4, !tbaa !3 - %197 = load i32, ptr %2, align 4, !tbaa !3 - %198 = sub nsw i32 %197, %indvars353 - store i32 %198, ptr %18, align 4, !tbaa !3 - %199 = mul nsw i32 %27, %indvars352 - %200 = sext i32 %199 to i64 - %201 = getelementptr double, ptr %29, i64 %indvars.iv350 - %202 = getelementptr double, ptr %201, i64 %200 - call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %189, ptr noundef nonnull @c__1, ptr noundef nonnull %192, ptr noundef %202, ptr noundef nonnull %6, ptr noundef nonnull %175) #6 - %.not313.not = icmp slt i64 %indvars.iv350, %179 - br i1 %.not313.not, label %180, label %.loopexit, !llvm.loop !11 - -.loopexit: ; preds = %180, %._crit_edge, %.thread, %.thread322 + %189 = getelementptr double, ptr %29, i64 %indvars.iv.next351 + %190 = getelementptr double, ptr %189, i64 %184 + %191 = getelementptr inbounds double, ptr %33, i64 %indvars.iv350 + call void @dlarfgp_(ptr noundef nonnull %17, ptr noundef %188, ptr noundef %190, ptr noundef nonnull @c__1, ptr noundef nonnull %191) #6 + store double 1.000000e+00, ptr %188, align 8, !tbaa !7 + %192 = load i32, ptr %0, align 4, !tbaa !3 + %193 = load i32, ptr %1, align 4, !tbaa !3 + %194 = add i32 %.1.neg345.in, %193 + %195 = sub i32 %192, %194 + store i32 %195, ptr %17, align 4, !tbaa !3 + %196 = load i32, ptr %2, align 4, !tbaa !3 + %197 = sub nsw i32 %196, %indvars353 + store i32 %197, ptr %18, align 4, !tbaa !3 + %198 = mul nsw i32 %27, %indvars352 + %199 = sext i32 %198 to i64 + %200 = getelementptr double, ptr %29, i64 %indvars.iv350 + %201 = getelementptr double, ptr %200, i64 %199 + call void @dlarf_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %188, ptr noundef nonnull @c__1, ptr noundef nonnull %191, ptr noundef %201, ptr noundef nonnull %6, ptr noundef nonnull %174) #6 + %.not313.not = icmp slt i64 %indvars.iv350, %178 + br i1 %.not313.not, label %179, label %.loopexit, !llvm.loop !11 + +.loopexit: ; preds = %179, %._crit_edge, %.thread, %.thread322 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6 diff --git a/bench/openjdk/optimized/DrawLine.ll b/bench/openjdk/optimized/DrawLine.ll index c41feb15cbd..cd9fceee3c0 100644 --- a/bench/openjdk/optimized/DrawLine.ll +++ b/bench/openjdk/optimized/DrawLine.ll @@ -841,32 +841,32 @@ RefineBounds.exit: ; preds = %47, %51 %76 = icmp slt i32 %32, %..i %.178 = select i1 %76, i32 %.48.i, i32 %32 %77 = load i32, ptr %9, align 8 - %spec.store.select = call i32 @llvm.smax.i32(i32 %..i, i32 %77) + %spec.select = call i32 @llvm.smax.i32(i32 %..i, i32 %77) %78 = load i32, ptr %37, align 8 %spec.select = call i32 @llvm.smin.i32(i32 %.178, i32 %78) %79 = icmp slt i32 %spec.store.select, %spec.select br i1 %79, label %80, label %112 -80: ; preds = %75 +80:; preds = %75 %81 = getelementptr inbounds nuw i8, ptr %20, i64 32 %82 = load ptr, ptr %81, align 8 - %83 = sub nsw i32 %spec.select, %spec.store.select + %83 = sub nsw i32 %spec.select, %spec.select call void %82(ptr noundef nonnull %9, i32 noundef %spec.store.select, i32 noundef %5, i32 noundef %19, i32 noundef %83, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 br label %112 -84: ; preds = %69 +84:; preds = %69 %85 = icmp eq i32 %4, %6 br i1 %85, label %86, label %99 -86: ; preds = %84 +86:; preds = %84 %87 = load i32, ptr %9, align 8 - %.not103 = icmp sge i32 %4, %87 + %88 = icmp sge i32 %4, %87 %88 = load i32, ptr %37, align 8 %89 = icmp slt i32 %4, %88 %or.cond111 = select i1 %.not103, i1 %89, i1 false br i1 %or.cond111, label %90, label %112 -90: ; preds = %86 +90:; preds = %86 %91 = icmp slt i32 %42, %.49.i %.1 = select i1 %91, i32 %.50.i, i32 %42 %92 = load i32, ptr %43, align 4 @@ -876,7 +876,7 @@ RefineBounds.exit: ; preds = %47, %51 %94 = icmp slt i32 %spec.store.select115, %spec.select114 br i1 %94, label %95, label %112 -95: ; preds = %90 +95:; preds = %90 %96 = getelementptr inbounds nuw i8, ptr %20, i64 32 %97 = load ptr, ptr %96, align 8 %98 = sub nsw i32 %spec.select114, %spec.store.select115 @@ -888,13 +888,13 @@ RefineBounds.exit: ; preds = %47, %51 %.not102 = icmp eq i8 %100, 0 br i1 %.not102, label %112, label %101 -101: ; preds = %99 +101:; preds = %99 %102 = getelementptr inbounds nuw i8, ptr %20, i64 32 - %103 = load ptr, ptr %102, align 8 - %104 = load i32, ptr %11, align 4 - %105 = load i32, ptr %12, align 4 - %106 = load i32, ptr %13, align 4 - %107 = load i32, ptr %14, align 4 + %105 = load ptr, ptr %102, align 8 + %106 = load i32, ptr %11, align 4 + %107 = load i32, ptr %12, align 4 + %108 = load i32, ptr %13, align 4 + %109 = load i32, ptr %14, align 4 %108 = load i32, ptr %17, align 4 %109 = load i32, ptr %15, align 4 %110 = load i32, ptr %18, align 4 @@ -902,23 +902,23 @@ RefineBounds.exit: ; preds = %47, %51 call void %103(ptr noundef nonnull %9, i32 noundef %104, i32 noundef %105, i32 noundef %19, i32 noundef %106, i32 noundef %107, i32 noundef %108, i32 noundef %109, i32 noundef %110, i32 noundef %111, ptr noundef nonnull %20, ptr noundef nonnull %10) #4 br label %112 -112: ; preds = %64, %75, %80, %71, %99, %101, %86, %95, %90 +112:; preds = %64, %75, %80, %71, %99, %101, %86, %95, %90 %113 = getelementptr inbounds nuw i8, ptr %29, i64 16 %114 = load ptr, ptr %113, align 8 %.not106 = icmp eq ptr %114, null - br i1 %.not106, label %116, label %115 + br i1 %.not106, label %116, label %114 -115: ; preds = %112 +114: ; preds = %112 call void %114(ptr noundef %0, ptr noundef nonnull %29, ptr noundef nonnull %9) #4 br label %116 -116: ; preds = %56, %60, %112, %115 +116:; preds = %56, %60, %112, %115 %117 = getelementptr inbounds nuw i8, ptr %29, i64 24 %118 = load ptr, ptr %117, align 8 %.not107 = icmp eq ptr %118, null - br i1 %.not107, label %120, label %119 + br i1 %.not107, label %120, label %118 -119: ; preds = %116 +118: ; preds = %116 call void %118(ptr noundef %0, ptr noundef nonnull %29, ptr noundef nonnull %9) #4 br label %120 diff --git a/bench/openjdk/optimized/DrawPath.ll b/bench/openjdk/optimized/DrawPath.ll index 3920b6320ac..4b792aed6a2 100644 --- a/bench/openjdk/optimized/DrawPath.ll +++ b/bench/openjdk/optimized/DrawPath.ll @@ -302,11 +302,11 @@ define internal void @processLine(ptr noundef readonly captures(none) %0, i32 no %31 = icmp slt i32 %spec.store.select, %spec.select br i1 %31, label %32, label %92 -32: ; preds = %25 - %33 = getelementptr inbounds nuw i8, ptr %17, i64 16 - %34 = load ptr, ptr %33, align 8 - %35 = getelementptr inbounds nuw i8, ptr %34, i64 32 - %36 = load ptr, ptr %35, align 8 +32:; preds = %25 + %34 = getelementptr inbounds nuw i8, ptr %17, i64 16 + %35 = load ptr, ptr %34, align 8 + %36 = getelementptr inbounds nuw i8, ptr %34, i64 32 + %37 = load ptr, ptr %36, align 8 %37 = getelementptr inbounds nuw i8, ptr %17, i64 8 %38 = load i32, ptr %37, align 8 %39 = sub nsw i32 %spec.select, %spec.store.select @@ -315,58 +315,58 @@ define internal void @processLine(ptr noundef readonly captures(none) %0, i32 no tail call void %36(ptr noundef nonnull %18, i32 noundef %spec.store.select, i32 noundef %2, i32 noundef %38, i32 noundef %39, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef %34, ptr noundef %41) #4 br label %92 -42: ; preds = %5 +42: ; preds = %5 %43 = icmp eq i32 %1, %3 %44 = getelementptr inbounds nuw i8, ptr %0, i64 56 %45 = load ptr, ptr %44, align 8 %46 = load ptr, ptr %45, align 8 br i1 %43, label %47, label %71 -47: ; preds = %42 - %48 = load i32, ptr %46, align 8 - %.not82 = icmp slt i32 %1, %48 - br i1 %.not82, label %92, label %49 +46: ; preds = %42 + %47 = load i32, ptr %46, align 8 + %.not82 = icmp slt i32 %1, %47 + br i1 %.not82, label %92, label %48 -49: ; preds = %47 - %50 = getelementptr inbounds nuw i8, ptr %46, i64 8 - %51 = load i32, ptr %50, align 8 - %52 = icmp slt i32 %1, %51 - br i1 %52, label %53, label %92 +48: ; preds = %46 + %49 = getelementptr inbounds nuw i8, ptr %46, i64 8 + %50 = load i32, ptr %49, align 8 + %51 = icmp slt i32 %1, %50 + br i1 %51, label %52, label %92 -53: ; preds = %49 +52: ; preds = %48 %.86 = tail call i32 @llvm.smin.i32(i32 %2, i32 %4) %.87 = tail call i32 @llvm.smax.i32(i32 %2, i32 %4) - %54 = add nsw i32 %.87, 1 + %53 = add nsw i32 %.87, 1 %55 = icmp slt i32 %54, %.86 %.1 = select i1 %55, i32 %.87, i32 %54 %56 = getelementptr inbounds nuw i8, ptr %46, i64 4 %57 = load i32, ptr %56, align 4 - %spec.store.select89 = tail call i32 @llvm.smax.i32(i32 %.86, i32 %57) + %spec.select88 = tail call i32 @llvm.smax.i32(i32 %.86, i32 %57) %58 = getelementptr inbounds nuw i8, ptr %46, i64 12 %59 = load i32, ptr %58, align 4 %spec.select88 = tail call i32 @llvm.smin.i32(i32 %.1, i32 %59) - %60 = icmp slt i32 %spec.store.select89, %spec.select88 + %60 = icmp slt i32 %spec.select88, %spec.select88 br i1 %60, label %61, label %92 -61: ; preds = %53 +61: ; preds = %53 %62 = getelementptr inbounds nuw i8, ptr %45, i64 16 %63 = load ptr, ptr %62, align 8 %64 = getelementptr inbounds nuw i8, ptr %63, i64 32 %65 = load ptr, ptr %64, align 8 %66 = getelementptr inbounds nuw i8, ptr %45, i64 8 %67 = load i32, ptr %66, align 8 - %68 = sub nsw i32 %spec.select88, %spec.store.select89 + %68 = sub nsw i32 %spec.select88, %spec.select88 %69 = getelementptr inbounds nuw i8, ptr %45, i64 24 %70 = load ptr, ptr %69, align 8 tail call void %65(ptr noundef nonnull %46, i32 noundef %1, i32 noundef %spec.store.select89, i32 noundef %67, i32 noundef %68, i32 noundef 0, i32 noundef 4, i32 noundef 0, i32 noundef 0, i32 noundef 0, ptr noundef %63, ptr noundef %70) #4 br label %92 -71: ; preds = %42 +71:; preds = %42 %72 = call zeroext i8 @LineUtils_SetupBresenham(i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef 0, ptr noundef %46, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %13) #4 %.not = icmp eq i8 %72, 0 br i1 %.not, label %92, label %73 -73: ; preds = %71 +73: ; preds = %71 %74 = load ptr, ptr %44, align 8 %75 = getelementptr inbounds nuw i8, ptr %74, i64 16 %76 = load ptr, ptr %75, align 8 diff --git a/bench/openjdk/optimized/genArguments.ll b/bench/openjdk/optimized/genArguments.ll index 9cd507f500a..b34d37411e8 100644 --- a/bench/openjdk/optimized/genArguments.ll +++ b/bench/openjdk/optimized/genArguments.ll @@ -520,7 +520,7 @@ define hidden void @_ZN12GenArguments20initialize_size_infoEv(ptr noundef nonnul %.not = icmp eq i64 %75, %68 br i1 %.not, label %98, label %76 -76: ; preds = %61 +76:; preds = %61 %77 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_40ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 72), align 8 %.not47 = icmp eq ptr %77, null br i1 %.not47, label %79, label %78 @@ -528,94 +528,94 @@ define hidden void @_ZN12GenArguments20initialize_size_infoEv(ptr noundef nonnul 78: ; preds = %76 tail call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_40ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE4EEEvPKcz(ptr noundef nonnull @.str.8) %.pre53 = load i64, ptr @InitialHeapSize, align 8 - br label %79 - -79: ; preds = %76, %78 - %80 = phi i64 [ %68, %76 ], [ %.pre53, %78 ] - %81 = sub i64 %80, %74 - %82 = icmp ult i64 %80, %74 - br i1 %82, label %83, label %86 - -83: ; preds = %79 - %84 = load i64, ptr @MinNewSize, align 8 - %85 = sub i64 %80, %84 - br label %94 - -86: ; preds = %79 - %87 = icmp ugt i64 %81, %.1 - br i1 %87, label %88, label %90 - -88: ; preds = %86 - %89 = sub i64 %80, %.1 - br label %94 - -90: ; preds = %86 - %91 = load i64, ptr @MinNewSize, align 8 - %92 = icmp ult i64 %81, %91 - %93 = sub i64 %80, %91 - %spec.select = tail call i64 @llvm.umax.i64(i64 %81, i64 %91) - %spec.select43 = select i1 %92, i64 %93, i64 %74 - br label %94 - -94: ; preds = %90, %88, %83 - %.2 = phi i64 [ %84, %83 ], [ %.1, %88 ], [ %spec.select, %90 ] - %.132 = phi i64 [ %85, %83 ], [ %89, %88 ], [ %spec.select43, %90 ] - %95 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 - %.not48 = icmp eq ptr %95, null - br i1 %.not48, label %98, label %96 - -96: ; preds = %94 - %97 = load i64, ptr @MinNewSize, align 8 - tail call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.9, i64 noundef %97, i64 noundef %.2, i64 noundef %.1) - br label %98 - -98: ; preds = %96, %94, %61 + br label %77 + +77: ; preds = %76, %78 + %78 = phi i64 [ %68, %76 ], [ %.pre53, %78 ] + %79 = sub i64 %78, %74 + %80 = icmp ult i64 %78, %74 + br i1 %80, label %81, label %84 + +81: ; preds = %77 + %82 = load i64, ptr @MinNewSize, align 8 + %83 = sub i64 %78, %82 + br label %92 + +84: ; preds = %77 + %85 = icmp ugt i64 %79, %.1 + br i1 %85, label %86, label %88 + +86: ; preds = %84 + %87 = sub i64 %78, %.1 + br label %92 + +88: ; preds = %84 + %89 = load i64, ptr @MinNewSize, align 8 + %90 = icmp ult i64 %79, %89 + %91 = sub i64 %78, %89 + %spec.select = tail call i64 @llvm.umax.i64(i64 %79, i64 %89) + %spec.select43 = select i1 %90, i64 %91, i64 %74 + br label %92 + +92: ; preds = %88, %86, %81 + %.2 = phi i64 [ %82, %83 ], [ %.1, %88 ], [ %spec.select, %90 ] + %.132 = phi i64 [ %83, %83 ], [ %87, %88 ], [ %spec.select43, %90 ] + %93 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 + %.not48 = icmp eq ptr %93, null + br i1 %.not48, label %96, label %94 + +94: ; preds = %92 + %95 = load i64, ptr @MinNewSize, align 8 + tail call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.9, i64 noundef %95, i64 noundef %.2, i64 noundef %.1) + br label %96 + +96: ; preds = %94, %92, %61 %.134 = phi i64 [ %.2, %96 ], [ %.2, %94 ], [ %.033, %61 ] %.031 = phi i64 [ %.132, %96 ], [ %.132, %94 ], [ %74, %61 ] - %99 = load i64, ptr @NewSize, align 8 - %.not40 = icmp eq i64 %99, %.134 - br i1 %.not40, label %102, label %100 + %97 = load i64, ptr @NewSize, align 8 + %.not40 = icmp eq i64 %97, %.134 + br i1 %.not40, label %100, label %98 -100: ; preds = %98 +98: ; preds = %96 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) store i64 %.134, ptr %3, align 8 - %101 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1195, i32 noundef 6, ptr noundef nonnull %3, i32 noundef 5) #8 + %99 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1195, i32 noundef 6, ptr noundef nonnull %3, i32 noundef 5) #8 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) - br label %102 + br label %100 -102: ; preds = %100, %98 - %103 = load i64, ptr @MaxNewSize, align 8 - %.not41 = icmp eq i64 %103, %.1 - br i1 %.not41, label %106, label %104 +100: ; preds = %98, %96 + %101 = load i64, ptr @MaxNewSize, align 8 + %.not41 = icmp eq i64 %101, %.1 + br i1 %.not41, label %104, label %102 -104: ; preds = %102 +102: ; preds = %100 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) store i64 %.1, ptr %2, align 8 - %105 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1196, i32 noundef 6, ptr noundef nonnull %2, i32 noundef 5) #8 + %103 = call noundef i32 @_ZN13JVMFlagAccess13set_or_assertE12JVMFlagsEnumiPv13JVMFlagOrigin(i32 noundef 1196, i32 noundef 6, ptr noundef nonnull %2, i32 noundef 5) #8 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) - br label %106 + br label %104 -106: ; preds = %104, %102 - %107 = load i64, ptr @OldSize, align 8 - %.not42 = icmp eq i64 %107, %.031 - br i1 %.not42, label %109, label %108 +104: ; preds = %102, %100 + %105 = load i64, ptr @OldSize, align 8 + %.not42 = icmp eq i64 %105, %.031 + br i1 %.not42, label %107, label %106 -108: ; preds = %106 +106: ; preds = %104 store i64 %.031, ptr @OldSize, align 8 - br label %109 + br label %107 -109: ; preds = %108, %106 - %110 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 - %.not49 = icmp eq ptr %110, null - br i1 %.not49, label %114, label %111 +107: ; preds = %106, %104 + %108 = load volatile ptr, ptr getelementptr inbounds nuw (i8, ptr @_ZN16LogTagSetMappingILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE, i64 48), align 8 + %.not49 = icmp eq ptr %108, null + br i1 %.not49, label %112, label %109 -111: ; preds = %109 - %112 = load i64, ptr @MinOldSize, align 8 - %113 = load i64, ptr @MaxOldSize, align 8 - call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.10, i64 noundef %112, i64 noundef %.031, i64 noundef %113) - br label %114 +109: ; preds = %107 + %110 = load i64, ptr @MinOldSize, align 8 + %111 = load i64, ptr @MaxOldSize, align 8 + call void (ptr, ...) @_ZN7LogImplILN6LogTag4typeE49ELS1_52ELS1_0ELS1_0ELS1_0ELS1_0EE5writeILN8LogLevel4typeE1EEEvPKcz(ptr noundef nonnull @.str.10, i64 noundef %110, i64 noundef %.031, i64 noundef %111) + br label %112 -114: ; preds = %109, %111 +112: ; preds = %107, %109 ret void } diff --git a/bench/openusd/optimized/mvref_common.ll b/bench/openusd/optimized/mvref_common.ll index 10e683a3e0a..8f82a71d506 100644 --- a/bench/openusd/optimized/mvref_common.ll +++ b/bench/openusd/optimized/mvref_common.ll @@ -2619,83 +2619,83 @@ get_relative_dist.exit76: ; preds = %get_relative_dist.e %112 = lshr i32 %111, 14 br label %get_mv_projection.exit.us.us -113: ; preds = %105 - %114 = sub i32 8192, %108 - %115 = lshr i32 %114, 14 - %116 = sub nsw i32 0, %115 +114: ; preds = %105 + %115 = sub i32 8192, %108 + %116 = lshr i32 %115, 14 + %117 = sub nsw i32 0, %116 br label %get_mv_projection.exit.us.us -get_mv_projection.exit.us.us: ; preds = %113, %110 - %117 = phi i32 [ %116, %113 ], [ %112, %110 ] - %118 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %106, i32 16383) - %119 = tail call i32 @llvm.smax.i32(i32 %118, i32 -16383) - %120 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %117, i32 16383) - %121 = tail call i32 @llvm.smax.i32(i32 %120, i32 -16383) - %122 = trunc nuw nsw i64 %indvars.iv116 to i32 - %123 = and i32 %122, 2147483640 - %124 = lshr i32 %119, 6 - %125 = sub nsw i32 0, %119 - %126 = lshr i32 %125, 6 - %127 = sub nsw i32 0, %126 - %128 = icmp slt i32 %106, 0 - %129 = select i1 %128, i32 %127, i32 %124 - %130 = lshr i32 %121, 6 - %131 = sub nsw i32 0, %121 - %132 = lshr i32 %131, 6 - %133 = sub nsw i32 0, %132 - %134 = icmp slt i32 %117, 0 - %135 = select i1 %134, i32 %133, i32 %130 - %136 = sub nsw i32 0, %129 - %.p.i.us.us = select i1 %.not.i78, i32 %129, i32 %136 - %137 = add i32 %.p.i.us.us, %76 - %138 = sub nsw i32 0, %135 - %.p49.i.us.us = select i1 %.not.i78, i32 %135, i32 %138 - %139 = add i32 %.p49.i.us.us, %122 - %140 = icmp slt i32 %137, 0 - br i1 %140, label %.thread89.us105.us, label %141 - -141: ; preds = %get_mv_projection.exit.us.us - %142 = load i32, ptr %23, align 4 - %143 = ashr i32 %142, 1 - %144 = icmp sge i32 %137, %143 - %145 = icmp slt i32 %139, 0 - %or.cond.i.us.us = select i1 %144, i1 true, i1 %145 - br i1 %or.cond.i.us.us, label %.thread89.us105.us, label %146 - -146: ; preds = %141 - %147 = load i32, ptr %28, align 8 - %148 = ashr i32 %147, 1 - %.not42.i.us.us = icmp slt i32 %139, %148 - br i1 %.not42.i.us.us, label %149, label %.thread89.us105.us - -149: ; preds = %146 - %150 = icmp sge i32 %137, %77 - %.not43.i.us.us = icmp slt i32 %137, %78 - %or.cond45.not51.not55.i.us.us = select i1 %150, i1 %.not43.i.us.us, i1 false - %151 = add nsw i32 %123, -8 - %152 = icmp sge i32 %139, %151 - %or.cond47.not53.i.us.us = select i1 %or.cond45.not51.not55.i.us.us, i1 %152, i1 false - %153 = add nuw nsw i32 %123, 16 - %.not44.i.us.us = icmp samesign ult i32 %139, %153 +get_mv_projection.exit.us.us: ; preds = %114, %110 + %118 = phi i32 [ %117, %113 ], [ %112, %110 ] + %119 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %106, i32 16383) + %120 = tail call i32 @llvm.smax.i32(i32 %119, i32 -16383) + %121 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %118, i32 16383) + %122 = tail call i32 @llvm.smax.i32(i32 %121, i32 -16383) + %123 = trunc nuw nsw i64 %indvars.iv116 to i32 + %124 = and i32 %123, 2147483640 + %125 = lshr i32 %120, 6 + %126 = sub nsw i32 0, %120 + %127 = lshr i32 %126, 6 + %128 = sub nsw i32 0, %127 + %129 = icmp slt i32 %106, 0 + %130 = select i1 %129, i32 %128, i32 %125 + %131 = lshr i32 %122, 6 + %132 = sub nsw i32 0, %122 + %133 = lshr i32 %132, 6 + %134 = sub nsw i32 0, %133 + %135 = icmp slt i32 %118, 0 + %136 = select i1 %135, i32 %134, i32 %131 + %137 = sub nsw i32 0, %130 + %.p.i.us.us = select i1 %.not.i78, i32 %130, i32 %137 + %138 = add i32 %.p.i.us.us, %76 + %139 = sub nsw i32 0, %136 + %.p49.i.us.us = select i1 %.not.i78, i32 %136, i32 %139 + %140 = add i32 %.p49.i.us.us, %123 + %141 = icmp slt i32 %138, 0 + br i1 %141, label %.thread89.us105.us, label %142 + +142: ; preds = %get_mv_projection.exit.us.us + %143 = load i32, ptr %23, align 4 + %144 = ashr i32 %143, 1 + %145 = icmp sge i32 %138, %144 + %146 = icmp slt i32 %140, 0 + %or.cond.i.us.us = select i1 %145, i1 true, i1 %146 + br i1 %or.cond.i.us.us, label %.thread89.us105.us, label %147 + +147: ; preds = %142 + %148 = load i32, ptr %28, align 8 + %149 = ashr i32 %148, 1 + %.not42.i.us.us = icmp slt i32 %140, %149 + br i1 %.not42.i.us.us, label %150, label %.thread89.us105.us + +150: ; preds = %147 + %151 = icmp sge i32 %138, %77 + %.not43.i.us.us = icmp slt i32 %138, %78 + %or.cond45.not51.not55.i.us.us = select i1 %151, i1 %.not43.i.us.us, i1 false + %152 = add nsw i32 %124, -8 + %153 = icmp sge i32 %140, %152 + %or.cond47.not53.i.us.us = select i1 %or.cond45.not51.not55.i.us.us, i1 %153, i1 false + %154 = add nuw nsw i32 %124, 16 + %.not44.i.us.us = icmp samesign ult i32 %140, %154 %or.cond48.i.us.us = select i1 %or.cond47.not53.i.us.us, i1 %.not44.i.us.us, i1 false - br i1 %or.cond48.i.us.us, label %154, label %.thread89.us105.us - -154: ; preds = %149 - %155 = load i32, ptr %66, align 4 - %156 = ashr i32 %155, 1 - %157 = mul nsw i32 %156, %137 - %158 = add nsw i32 %157, %139 - %159 = sext i32 %158 to i64 - %160 = getelementptr inbounds %struct.TPL_MV_REF, ptr %5, i64 %159 - store i16 %.sroa.0.0.copyload.us.us, ptr %160, align 4 - %161 = getelementptr inbounds nuw i8, ptr %160, i64 2 - store i16 %.sroa.3.0.copyload.us.us, ptr %161, align 2 - %162 = trunc i32 %86 to i8 - %163 = getelementptr inbounds nuw i8, ptr %160, i64 4 - store i8 %162, ptr %163, align 4 + br i1 %or.cond48.i.us.us, label %155, label %.thread89.us105.us + +155: ; preds = %150 + %156 = load i32, ptr %66, align 4 + %157 = ashr i32 %156, 1 + %158 = mul nsw i32 %157, %138 + %159 = add nsw i32 %158, %140 + %160 = sext i32 %159 to i64 + %161 = getelementptr inbounds %struct.TPL_MV_REF, ptr %5, i64 %160 + store i16 %.sroa.0.0.copyload.us.us, ptr %161, align 4 + %162 = getelementptr inbounds nuw i8, ptr %161, i64 2 + store i16 %.sroa.3.0.copyload.us.us, ptr %162, align 2 + %163 = trunc i32 %86 to i8 + %164 = getelementptr inbounds nuw i8, ptr %161, i64 4 + store i8 %163, ptr %164, align 4 br label %.thread89.us105.us -.thread89.us105.us: ; preds = %154, %149, %146, %141, %get_mv_projection.exit.us.us, %83, %79 +.thread89.us105.us: ; preds = %155, %150, %147, %142, %get_mv_projection.exit.us.us, %83, %79 %indvars.iv.next117 = add nuw nsw i64 %indvars.iv116, 1 %exitcond119.not = icmp eq i64 %indvars.iv.next117, %74 br i1 %exitcond119.not, label %._crit_edge.split.us106.us, label %79, !llvm.loop !41 diff --git a/bench/recastnavigation/optimized/DetourLocalBoundary.ll b/bench/recastnavigation/optimized/DetourLocalBoundary.ll index b22d83151ed..faec8eb44be 100644 --- a/bench/recastnavigation/optimized/DetourLocalBoundary.ll +++ b/bench/recastnavigation/optimized/DetourLocalBoundary.ll @@ -65,7 +65,7 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c .preheader: ; preds = %7 %invariant.gep = getelementptr inbounds nuw i8, ptr %0, i64 36 %14 = icmp sgt i32 %5, 0 - br i1 %14, label %.lr.ph.preheader, label %._crit_edge + br i1 %14, label %.lr.ph.preheader, label %.loopexit .lr.ph.preheader: ; preds = %.preheader %wide.trip.count = zext nneg i32 %5 to i64 @@ -73,7 +73,7 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c 15: ; preds = %7 %16 = icmp sgt i32 %5, 7 - br i1 %16, label %50, label %17 + br i1 %16, label %45, label %17 17: ; preds = %15 %18 = sext i32 %5 to i64 @@ -86,18 +86,18 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c %gep = getelementptr inbounds nuw i8, ptr %invariant.gep, i64 %.idx27 %20 = load float, ptr %gep, align 4 %21 = fcmp ugt float %1, %20 - br i1 %21, label %22, label %._crit_edge.loopexit.split.loop.exit + br i1 %21, label %22, label %.loopexit.split.loop.exit34 22: ; preds = %.lr.ph %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !4 + br i1 %exitcond.not, label %.loopexit, label %.lr.ph, !llvm.loop !4 -._crit_edge.loopexit.split.loop.exit: ; preds = %.lr.ph +.loopexit.split.loop.exit34: ; preds = %.lr.ph %23 = trunc nuw nsw i64 %indvars.iv to i32 - br label %._crit_edge + br label %.loopexit -._crit_edge: ; preds = %22, %._crit_edge.loopexit.split.loop.exit, %.preheader +.loopexit: ; preds = %22, %.loopexit.split.loop.exit34, %.preheader %.021.lcssa = phi i32 [ 0, %.preheader ], [ %23, %._crit_edge.loopexit.split.loop.exit ], [ %5, %22 ] %24 = add nuw nsw i32 %.021.lcssa, 1 %25 = sub nsw i32 %5, %.021.lcssa @@ -122,7 +122,7 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c %.pre = zext nneg i32 %.021.lcssa to i64 br label %42 -35: ; preds = %33 +29: ; preds = %33 %36 = zext nneg i32 %24 to i64 %37 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %6, i64 0, i64 %36 %38 = zext nneg i32 %.021.lcssa to i64 @@ -142,16 +142,16 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c %45 = getelementptr inbounds nuw i8, ptr %.0, i64 24 store float %1, ptr %45, align 4 tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %.0, ptr noundef nonnull align 4 dereferenceable(24) %2, i64 24, i1 false) - %46 = load i32, ptr %4, align 4 - %47 = icmp slt i32 %46, 8 - br i1 %47, label %48, label %50 + %41 = load i32, ptr %4, align 4 + %42 = icmp slt i32 %41, 8 + br i1 %42, label %43, label %45 -48: ; preds = %44 - %49 = add nsw i32 %46, 1 - store i32 %49, ptr %4, align 4 - br label %50 +43: ; preds = %44 + %44 = add nsw i32 %41, 1 + store i32 %44, ptr %4, align 4 + br label %45 -50: ; preds = %15, %48, %44 +45: ; preds = %15, %43, %44 ret void } @@ -244,7 +244,7 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter .preheader.i: ; preds = %44 %49 = icmp sgt i32 %43, 0 - br i1 %49, label %.lr.ph.preheader.i, label %._crit_edge.i + br i1 %49, label %.lr.ph.preheader.i, label %.loopexit.i .lr.ph.preheader.i: ; preds = %.preheader.i %wide.trip.count.i = zext nneg i32 %43 to i64 @@ -265,18 +265,18 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter %gep.i = getelementptr inbounds nuw i8, ptr %invariant.gep, i64 %.idx27.i %55 = load float, ptr %gep.i, align 4 %56 = fcmp ugt float %40, %55 - br i1 %56, label %57, label %._crit_edge.loopexit.split.loop.exit.i + br i1 %56, label %57, label %.loopexit.split.loop.exit34.i 57: ; preds = %.lr.ph.i %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i - br i1 %exitcond.not.i, label %._crit_edge.i, label %.lr.ph.i, !llvm.loop !4 + br i1 %exitcond.not.i, label %.loopexit.i, label %.lr.ph.i, !llvm.loop !4 -._crit_edge.loopexit.split.loop.exit.i: ; preds = %.lr.ph.i +.loopexit.split.loop.exit34.i: ; preds = %.lr.ph.i %58 = trunc nuw nsw i64 %indvars.iv.i to i32 - br label %._crit_edge.i + br label %.loopexit.i -._crit_edge.i: ; preds = %57, %._crit_edge.loopexit.split.loop.exit.i, %.preheader.i +.loopexit.i: ; preds = %57, %.loopexit.split.loop.exit34.i, %.preheader.i %.021.lcssa.i = phi i32 [ 0, %.preheader.i ], [ %58, %._crit_edge.loopexit.split.loop.exit.i ], [ %43, %57 ] %59 = add nuw nsw i32 %.021.lcssa.i, 1 %60 = sub nsw i32 %43, %.021.lcssa.i @@ -301,7 +301,7 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter %.pre.i = zext nneg i32 %.021.lcssa.i to i64 br label %77 -70: ; preds = %68 +64: ; preds = %68 %71 = zext nneg i32 %59 to i64 %72 = getelementptr inbounds nuw [8 x %"struct.dtLocalBoundary::Segment"], ptr %30, i64 0, i64 %71 %73 = zext nneg i32 %.021.lcssa.i to i64 @@ -321,28 +321,28 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter %80 = getelementptr inbounds nuw i8, ptr %.0.i, i64 24 store float %40, ptr %80, align 4 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %.0.i, ptr noundef nonnull readonly align 8 dereferenceable(24) %38, i64 24, i1 false) - %81 = load i32, ptr %26, align 4 - %82 = icmp slt i32 %81, 8 - br i1 %82, label %83, label %_ZN15dtLocalBoundary10addSegmentEfPKf.exit + %76 = load i32, ptr %26, align 4 + %77 = icmp slt i32 %76, 8 + br i1 %77, label %78, label %_ZN15dtLocalBoundary10addSegmentEfPKf.exit -83: ; preds = %79 - %84 = add nsw i32 %81, 1 - store i32 %84, ptr %26, align 4 +78: ; preds = %79 + %79 = add nsw i32 %76, 1 + store i32 %79, ptr %26, align 4 br label %_ZN15dtLocalBoundary10addSegmentEfPKf.exit -_ZN15dtLocalBoundary10addSegmentEfPKf.exit: ; preds = %83, %79, %50, %.lr.ph +_ZN15dtLocalBoundary10addSegmentEfPKf.exit: ; preds = %78, %79, %50, %.lr.ph %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %85 = load i32, ptr %8, align 4 - %86 = sext i32 %85 to i64 - %87 = icmp slt i64 %indvars.iv.next, %86 - br i1 %87, label %.lr.ph, label %._crit_edge, !llvm.loop !6 + %80 = load i32, ptr %8, align 4 + %81 = sext i32 %80 to i64 + %82 = icmp slt i64 %indvars.iv.next, %81 + br i1 %82, label %.lr.ph, label %._crit_edge, !llvm.loop !6 ._crit_edge: ; preds = %_ZN15dtLocalBoundary10addSegmentEfPKf.exit, %31 %indvars.iv.next33 = add nuw nsw i64 %indvars.iv32, 1 - %88 = load i32, ptr %24, align 4 - %89 = sext i32 %88 to i64 - %90 = icmp slt i64 %indvars.iv.next33, %89 - br i1 %90, label %31, label %.loopexit, !llvm.loop !7 + %83 = load i32, ptr %24, align 4 + %84 = sext i32 %83 to i64 + %85 = icmp slt i64 %indvars.iv.next33, %84 + br i1 %85, label %31, label %.loopexit, !llvm.loop !7 .loopexit: ; preds = %._crit_edge, %15, %10 ret void diff --git a/bench/recastnavigation/optimized/DetourPathCorridor.ll b/bench/recastnavigation/optimized/DetourPathCorridor.ll index 78a48b4c039..4758626c48b 100644 --- a/bench/recastnavigation/optimized/DetourPathCorridor.ll +++ b/bench/recastnavigation/optimized/DetourPathCorridor.ll @@ -100,30 +100,30 @@ define noundef i32 @_Z25dtMergeCorridorStartMovedPjiiPKji(ptr noundef captures(n %41 = icmp sgt i32 %40, 0 br i1 %41, label %.lr.ph.preheader, label %._crit_edge -.lr.ph.preheader: ; preds = %39 +31: ; preds = %39 %wide.trip.count = zext nneg i32 %40 to i64 br label %.lr.ph .lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph %indvars.iv72 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next73, %.lr.ph ] - %42 = trunc i64 %indvars.iv72 to i32 - %43 = xor i32 %42, -1 - %44 = add i32 %4, %43 - %45 = sext i32 %44 to i64 - %46 = getelementptr inbounds i32, ptr %3, i64 %45 - %47 = load i32, ptr %46, align 4 - %48 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv72 - store i32 %47, ptr %48, align 4 + %41 = trunc i64 %indvars.iv72 to i32 + %42 = xor i32 %41, -1 + %43 = add i32 %4, %42 + %44 = sext i32 %43 to i64 + %45 = getelementptr inbounds i32, ptr %3, i64 %44 + %46 = load i32, ptr %45, align 4 + %47 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv72 + store i32 %46, ptr %47, align 4 %indvars.iv.next73 = add nuw nsw i64 %indvars.iv72, 1 %exitcond.not = icmp eq i64 %indvars.iv.next73, %wide.trip.count br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !7 ._crit_edge: ; preds = %.lr.ph, %39 - %49 = add nsw i32 %spec.select, %23 + %48 = add nsw i32 %spec.select, %23 br label %.split65.us.thread .split65.us.thread: ; preds = %5, %.split65.us, %._crit_edge - %.0 = phi i32 [ %49, %._crit_edge ], [ %1, %.split65.us ], [ %1, %5 ] + %.0 = phi i32 [ %48, %._crit_edge ], [ %1, %.split65.us ], [ %1, %5 ] ret i32 %.0 } @@ -134,8 +134,8 @@ declare void @llvm.memmove.p0.p0.i64(ptr writeonly captures(none), ptr readonly define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(none) %0, i32 noundef %1, i32 noundef %2, ptr noundef readonly captures(none) %3, i32 noundef %4) local_unnamed_addr #2 { %6 = icmp sgt i32 %1, 0 %7 = icmp sgt i32 %4, 0 - %or.cond76 = and i1 %6, %7 - br i1 %or.cond76, label %.preheader.us.preheader, label %._crit_edge58.thread + %or.cond75 = and i1 %6, %7 + br i1 %or.cond75, label %.preheader.us.preheader, label %._crit_edge58.thread .preheader.us.preheader: ; preds = %5 %8 = zext nneg i32 %4 to i64 @@ -143,12 +143,12 @@ define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(non br label %.preheader.us .preheader.us: ; preds = %.preheader.us.preheader, %._crit_edge.us - %indvars.iv70 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next71, %._crit_edge.us ] + %indvars.iv69 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next70, %._crit_edge.us ] %.03657.us = phi i32 [ -1, %.preheader.us.preheader ], [ %.3.us, %._crit_edge.us ] %.03756.us = phi i32 [ -1, %.preheader.us.preheader ], [ %.340.us, %._crit_edge.us ] - %10 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv70 + %10 = getelementptr inbounds nuw i32, ptr %0, i64 %indvars.iv69 %11 = load i32, ptr %10, align 4 - %12 = trunc nuw nsw i64 %indvars.iv70 to i32 + %12 = trunc nuw nsw i64 %indvars.iv69 to i32 br label %13 13: ; preds = %.preheader.us, %13 @@ -168,8 +168,8 @@ define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(non br i1 %18, label %13, label %._crit_edge.us, !llvm.loop !8 ._crit_edge.us: ; preds = %13 - %indvars.iv.next71 = add nuw nsw i64 %indvars.iv70, 1 - %19 = icmp samesign uge i64 %indvars.iv.next71, %9 + %indvars.iv.next70 = add nuw nsw i64 %indvars.iv69, 1 + %19 = icmp samesign uge i64 %indvars.iv.next70, %9 %or.cond67.not = select i1 %.144.us, i1 true, i1 %19 br i1 %or.cond67.not, label %._crit_edge58, label %.preheader.us, !llvm.loop !9 @@ -198,19 +198,19 @@ define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(non 32: ; preds = %31, %22 %.not47 = icmp eq i32 %27, 0 - br i1 %.not47, label %._crit_edge58.thread, label %33 - -33: ; preds = %32 - %34 = sext i32 %23 to i64 - %35 = getelementptr inbounds i32, ptr %0, i64 %34 - %36 = zext nneg i32 %24 to i64 - %37 = getelementptr inbounds nuw i32, ptr %3, i64 %36 - %38 = sext i32 %27 to i64 - %39 = shl nsw i64 %38, 2 - tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %35, ptr nonnull align 4 %37, i64 %39, i1 false) + br i1 %.not47, label %._crit_edge58.thread, label %30 + +30: ; preds = %32 + %31 = sext i32 %23 to i64 + %32 = getelementptr inbounds i32, ptr %0, i64 %31 + %33 = zext nneg i32 %24 to i64 + %34 = getelementptr inbounds nuw i32, ptr %3, i64 %33 + %35 = sext i32 %27 to i64 + %36 = shl nsw i64 %35, 2 + tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %32, ptr nonnull align 4 %34, i64 %36, i1 false) br label %._crit_edge58.thread -._crit_edge58.thread: ; preds = %5, %32, %33, %._crit_edge58 +._crit_edge58.thread: ; preds = %5, %32, %30, %._crit_edge58 %.0 = phi i32 [ %1, %._crit_edge58 ], [ %30, %33 ], [ %30, %32 ], [ %1, %5 ] ret i32 %.0 } @@ -1066,7 +1066,7 @@ define noundef zeroext i1 @_ZN14dtPathCorridor12movePositionEPKfP14dtNavMeshQuer %23 = call noundef i32 @_ZNK14dtNavMeshQuery16moveAlongSurfaceEjPKfS1_PK13dtQueryFilterPfPjPii(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %22, ptr noundef nonnull %0, ptr noundef %1, ptr noundef %3, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef 16) %24 = and i32 %23, 1073741824 %25 = icmp ne i32 %24, 0 - br i1 %25, label %26, label %86 + br i1 %25, label %26, label %85 26: ; preds = %20 %27 = load ptr, ptr %11, align 8 @@ -1138,64 +1138,64 @@ define noundef zeroext i1 @_ZN14dtPathCorridor12movePositionEPKfP14dtNavMeshQuer %57 = icmp sgt i32 %spec.select.i, 0 br i1 %57, label %58, label %65 -58: ; preds = %48 +58:; preds = %48 %59 = sext i32 %49 to i64 %60 = getelementptr inbounds i32, ptr %27, i64 %59 %61 = sext i32 %51 to i64 %62 = getelementptr inbounds i32, ptr %27, i64 %61 %63 = zext nneg i32 %spec.select.i to i64 - %64 = shl nuw nsw i64 %63, 2 + %61 = shl nuw nsw i64 %63, 2 call void @llvm.memmove.p0.p0.i64(ptr align 4 %60, ptr align 4 %62, i64 %64, i1 false) br label %65 -65: ; preds = %58, %48 +65:; preds = %58, %48 %66 = call noundef i32 @llvm.smin.i32(i32 %49, i32 %30) - %67 = icmp sgt i32 %66, 0 + %67 = icmp sgt i32 %63, 0 br i1 %67, label %.lr.ph.preheader.i, label %._crit_edge.i -.lr.ph.preheader.i: ; preds = %65 +.lr.ph.preheader.i:; preds = %65 %wide.trip.count.i = zext nneg i32 %66 to i64 br label %.lr.ph.i .lr.ph.i: ; preds = %.lr.ph.i, %.lr.ph.preheader.i %indvars.iv72.i = phi i64 [ 0, %.lr.ph.preheader.i ], [ %indvars.iv.next73.i, %.lr.ph.i ] - %68 = trunc i64 %indvars.iv72.i to i32 - %69 = xor i32 %68, -1 - %70 = add i32 %31, %69 - %71 = sext i32 %70 to i64 - %72 = getelementptr inbounds i32, ptr %6, i64 %71 - %73 = load i32, ptr %72, align 4 - %74 = getelementptr inbounds nuw i32, ptr %27, i64 %indvars.iv72.i - store i32 %73, ptr %74, align 4 + %67 = trunc i64 %indvars.iv72.i to i32 + %68 = xor i32 %67, -1 + %69 = add i32 %31, %68 + %70 = sext i32 %69 to i64 + %71 = getelementptr inbounds i32, ptr %6, i64 %70 + %72 = load i32, ptr %71, align 4 + %73 = getelementptr inbounds nuw i32, ptr %27, i64 %indvars.iv72.i + store i32 %72, ptr %73, align 4 %indvars.iv.next73.i = add nuw nsw i64 %indvars.iv72.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next73.i, %wide.trip.count.i br i1 %exitcond.not.i, label %._crit_edge.i, label %.lr.ph.i, !llvm.loop !7 ._crit_edge.i: ; preds = %.lr.ph.i, %65 - %75 = add nsw i32 %spec.select.i, %49 + %74 = add nsw i32 %spec.select.i, %49 %.pre = load ptr, ptr %11, align 8 br label %_Z25dtMergeCorridorStartMovedPjiiPKji.exit _Z25dtMergeCorridorStartMovedPjiiPKji.exit: ; preds = %26, %.split65.us.i, %._crit_edge.i - %76 = phi ptr [ %.pre, %._crit_edge.i ], [ %27, %.split65.us.i ], [ %27, %26 ] - %.0.i = phi i32 [ %75, %._crit_edge.i ], [ %28, %.split65.us.i ], [ %28, %26 ] + %75 = phi ptr [ %.pre, %._crit_edge.i ], [ %27, %.split65.us.i ], [ %27, %26 ] + %.0.i = phi i32 [ %74, %._crit_edge.i ], [ %28, %.split65.us.i ], [ %28, %26 ] store i32 %.0.i, ptr %17, align 8 - %77 = getelementptr inbounds nuw i8, ptr %0, i64 4 - %78 = load float, ptr %77, align 4 - store float %78, ptr %8, align 4 - %79 = load i32, ptr %76, align 4 - %80 = call noundef i32 @_ZNK14dtNavMeshQuery13getPolyHeightEjPKfPf(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %79, ptr noundef nonnull %5, ptr noundef nonnull %8) - %81 = load float, ptr %8, align 4 - %82 = load float, ptr %5, align 4 - store float %82, ptr %0, align 8 - store float %81, ptr %77, align 4 - %83 = getelementptr inbounds nuw i8, ptr %5, i64 8 - %84 = load float, ptr %83, align 4 - %85 = getelementptr inbounds nuw i8, ptr %0, i64 8 - store float %84, ptr %85, align 8 - br label %86 - -86: ; preds = %20, %_Z25dtMergeCorridorStartMovedPjiiPKji.exit + %76 = getelementptr inbounds nuw i8, ptr %0, i64 4 + %77 = load float, ptr %76, align 4 + store float %77, ptr %8, align 4 + %78 = load i32, ptr %75, align 4 + %79 = call noundef i32 @_ZNK14dtNavMeshQuery13getPolyHeightEjPKfPf(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %78, ptr noundef nonnull %5, ptr noundef nonnull %8) + %80 = load float, ptr %8, align 4 + %81 = load float, ptr %5, align 4 + store float %81, ptr %0, align 8 + store float %80, ptr %76, align 4 + %82 = getelementptr inbounds nuw i8, ptr %5, i64 8 + %83 = load float, ptr %82, align 4 + %84 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store float %83, ptr %84, align 8 + br label %85 + +85: ; preds = %20, %_Z25dtMergeCorridorStartMovedPjiiPKji.exit ret i1 %25 } @@ -1246,7 +1246,7 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe %27 = call noundef i32 @_ZNK14dtNavMeshQuery16moveAlongSurfaceEjPKfS1_PK13dtQueryFilterPfPjPii(ptr noundef nonnull align 8 dereferenceable(104) %2, i32 noundef %25, ptr noundef nonnull %26, ptr noundef %1, ptr noundef %3, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef 16) %28 = and i32 %27, 1073741824 %29 = icmp ne i32 %28, 0 - br i1 %29, label %30, label %77 + br i1 %29, label %30, label %74 30: ; preds = %19 %31 = load ptr, ptr %10, align 8 @@ -1256,8 +1256,8 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe %35 = load i32, ptr %7, align 4 %36 = icmp sgt i32 %32, 0 %37 = icmp sgt i32 %35, 0 - %or.cond76.i = and i1 %36, %37 - br i1 %or.cond76.i, label %.preheader.us.preheader.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit + %or.cond75.i = and i1 %36, %37 + br i1 %or.cond75.i, label %.preheader.us.preheader.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit .preheader.us.preheader.i: ; preds = %30 %38 = zext nneg i32 %35 to i64 @@ -1265,12 +1265,12 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe br label %.preheader.us.i .preheader.us.i: ; preds = %._crit_edge.us.i, %.preheader.us.preheader.i - %indvars.iv70.i = phi i64 [ 0, %.preheader.us.preheader.i ], [ %indvars.iv.next71.i, %._crit_edge.us.i ] + %indvars.iv69.i = phi i64 [ 0, %.preheader.us.preheader.i ], [ %indvars.iv.next70.i, %._crit_edge.us.i ] %.03657.us.i = phi i32 [ -1, %.preheader.us.preheader.i ], [ %.3.us.i, %._crit_edge.us.i ] %.03756.us.i = phi i32 [ -1, %.preheader.us.preheader.i ], [ %.340.us.i, %._crit_edge.us.i ] - %40 = getelementptr inbounds nuw i32, ptr %31, i64 %indvars.iv70.i + %40 = getelementptr inbounds nuw i32, ptr %31, i64 %indvars.iv69.i %41 = load i32, ptr %40, align 4 - %42 = trunc nuw nsw i64 %indvars.iv70.i to i32 + %42 = trunc nuw nsw i64 %indvars.iv69.i to i32 br label %43 43: ; preds = %43, %.preheader.us.i @@ -1290,8 +1290,8 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe br i1 %48, label %43, label %._crit_edge.us.i, !llvm.loop !8 ._crit_edge.us.i: ; preds = %43 - %indvars.iv.next71.i = add nuw nsw i64 %indvars.iv70.i, 1 - %49 = icmp samesign uge i64 %indvars.iv.next71.i, %39 + %indvars.iv.next70.i = add nuw nsw i64 %indvars.iv69.i, 1 + %49 = icmp samesign uge i64 %indvars.iv.next70.i, %39 %or.cond67.not.i = select i1 %.144.us.i, i1 true, i1 %49 br i1 %or.cond67.not.i, label %._crit_edge58.i, label %.preheader.us.i, !llvm.loop !9 @@ -1320,24 +1320,24 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe 62: ; preds = %61, %52 %.not47.i = icmp eq i32 %57, 0 - br i1 %.not47.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit, label %63 - -63: ; preds = %62 - %64 = sext i32 %53 to i64 - %65 = getelementptr inbounds i32, ptr %31, i64 %64 - %66 = zext nneg i32 %54 to i64 - %67 = getelementptr inbounds nuw i32, ptr %6, i64 %66 - %68 = sext i32 %57 to i64 - %69 = shl nsw i64 %68, 2 - call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %65, ptr nonnull readonly align 4 %67, i64 %69, i1 false) + br i1 %.not47.i, label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit, label %60 + +60: ; preds = %62 + %61 = sext i32 %53 to i64 + %62 = getelementptr inbounds i32, ptr %31, i64 %61 + %63 = zext nneg i32 %54 to i64 + %64 = getelementptr inbounds nuw i32, ptr %6, i64 %63 + %65 = sext i32 %57 to i64 + %66 = shl nsw i64 %65, 2 + call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %62, ptr nonnull readonly align 4 %64, i64 %66, i1 false) br label %_Z23dtMergeCorridorEndMovedPjiiPKji.exit -_Z23dtMergeCorridorEndMovedPjiiPKji.exit: ; preds = %30, %._crit_edge58.i, %62, %63 +_Z23dtMergeCorridorEndMovedPjiiPKji.exit: ; preds = %30, %._crit_edge58.i, %62, %60 %.0.i = phi i32 [ %32, %._crit_edge58.i ], [ %60, %63 ], [ %60, %62 ], [ %32, %30 ] store i32 %.0.i, ptr %16, align 8 - %70 = load float, ptr %5, align 4 - store float %70, ptr %26, align 4 - %71 = getelementptr inbounds nuw i8, ptr %5, i64 4 + %67 = load float, ptr %5, align 4 + store float %67, ptr %26, align 4 + %68 = getelementptr inbounds nuw i8, ptr %5, i64 4 %72 = load float, ptr %71, align 4 %73 = getelementptr inbounds nuw i8, ptr %0, i64 16 store float %72, ptr %73, align 8 @@ -1347,7 +1347,7 @@ _Z23dtMergeCorridorEndMovedPjiiPKji.exit: ; preds = %30, %._crit_edge58. store float %75, ptr %76, align 4 br label %77 -77: ; preds = %19, %_Z23dtMergeCorridorEndMovedPjiiPKji.exit +74: ; preds = %19, %_Z23dtMergeCorridorEndMovedPjiiPKji.exit ret i1 %29 } diff --git a/bench/sundials/optimized/arkode_interp.ll b/bench/sundials/optimized/arkode_interp.ll index 17778e5243b..1ddf1bc25df 100644 --- a/bench/sundials/optimized/arkode_interp.ll +++ b/bench/sundials/optimized/arkode_interp.ll @@ -1994,7 +1994,7 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 19: ; preds = %6 tail call void (ptr, i32, i32, ptr, ptr, ptr, ...) @arkProcessError(ptr noundef %0, i32 noundef -22, i32 noundef 1209, ptr noundef nonnull @__func__.arkInterpEvaluate_Lagrange, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.6) #14 - br label %166 + br label %170 20: ; preds = %6 %21 = icmp sgt i32 %3, %18 @@ -2002,7 +2002,7 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 22: ; preds = %20 tail call void @N_VConst(double noundef 0.000000e+00, ptr noundef %5) #14 - br label %166 + br label %170 23: ; preds = %20 %24 = icmp eq i32 %18, 0 @@ -2011,7 +2011,7 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 25: ; preds = %23 %26 = load ptr, ptr %15, align 8, !tbaa !48 tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %26, ptr noundef %5) #14 - br label %166 + br label %170 27: ; preds = %23 %28 = load double, ptr %13, align 8, !tbaa !47 @@ -2034,51 +2034,51 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou 34: ; preds = %27 %35 = icmp eq i32 %3, 0 %wide.trip.count.i = zext nneg i32 %11 to i64 - br i1 %35, label %.lr.ph.i, label %.lr.ph36.split.us.i + br i1 %35, label %38, label %57 -.lr.ph.i: ; preds = %34, %44 +38: ; preds = %34, %44 %indvars.iv.i = phi i64 [ %indvars.iv.next.i, %44 ], [ 0, %34 ] %.016.i = phi double [ %.1.i, %44 ], [ 1.000000e+00, %34 ] - %36 = icmp eq i64 %indvars.iv.i, 0 - br i1 %36, label %44, label %37 + %39 = icmp eq i64 %indvars.iv.i, 0 + br i1 %39, label %47, label %40 -37: ; preds = %.lr.ph.i - %38 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i - %39 = load double, ptr %38, align 8, !tbaa !47 - %40 = fsub double %32, %39 - %41 = fsub double %28, %39 - %42 = fdiv double %40, %41 - %43 = fmul double %.016.i, %42 - br label %44 - -44: ; preds = %37, %.lr.ph.i - %.1.i = phi double [ %.016.i, %.lr.ph.i ], [ %43, %37 ] +40: ; preds = %38 + %41 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i + %42 = load double, ptr %41, align 8, !tbaa !47 + %43 = fsub double %32, %42 + %44 = fsub double %28, %42 + %45 = fdiv double %43, %44 + %46 = fmul double %.016.i, %45 + br label %47 + +47: ; preds = %40, %38 + %.1.i = phi double [ %.016.i, %.lr.ph.i ], [ %46, %37 ] %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i - br i1 %exitcond.not.i, label %LBasis.exit, label %.lr.ph.i + br i1 %exitcond.not.i, label %LBasis.exit, label %38 -LBasis.exit: ; preds = %44, %53 +LBasis.exit: ; preds = %47, %56 %indvars.iv.i88 = phi i64 [ %indvars.iv.next.i91, %53 ], [ 0, %44 ] %.016.i89 = phi double [ %.1.i90, %53 ], [ 1.000000e+00, %44 ] - %45 = icmp eq i64 %indvars.iv.i88, 1 - br i1 %45, label %53, label %46 - -46: ; preds = %LBasis.exit - %47 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i88 - %48 = load double, ptr %47, align 8, !tbaa !47 - %49 = fsub double %32, %48 - %50 = fsub double %30, %48 - %51 = fdiv double %49, %50 - %52 = fmul double %.016.i89, %51 - br label %53 - -53: ; preds = %46, %LBasis.exit - %.1.i90 = phi double [ %.016.i89, %LBasis.exit ], [ %52, %46 ] + %48 = icmp eq i64 %indvars.iv.i88, 1 + br i1 %48, label %56, label %49 + +49: ; preds = %LBasis.exit + %50 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i88 + %51 = load double, ptr %50, align 8, !tbaa !47 + %52 = fsub double %32, %51 + %53 = fsub double %30, %51 + %54 = fdiv double %52, %53 + %55 = fmul double %.016.i89, %54 + br label %56 + +56: ; preds = %49, %LBasis.exit + %.1.i90 = phi double [ %.016.i89, %LBasis.exit ], [ %55, %46 ] %indvars.iv.next.i91 = add nuw nsw i64 %indvars.iv.i88, 1 %exitcond.not.i92 = icmp eq i64 %indvars.iv.next.i91, %wide.trip.count.i br i1 %exitcond.not.i92, label %LBasis.exit93, label %LBasis.exit -.lr.ph36.split.us.i: ; preds = %34, %65 +57: ; preds = %34, %65 %indvars.iv41.i = phi i64 [ %indvars.iv.next42.i, %65 ], [ 0, %34 ] %.02634.us.i = phi double [ %.127.us.i, %65 ], [ 0.000000e+00, %34 ] %54 = icmp eq i64 %indvars.iv41.i, 0 @@ -2086,13 +2086,13 @@ LBasis.exit: ; preds = %44, %53 .preheader.us.i: ; preds = %.lr.ph36.split.us.i, %64 %indvars.iv.i94 = phi i64 [ %indvars.iv.next.i95, %64 ], [ 0, %.lr.ph36.split.us.i ] - %.032.us.i = phi double [ %.1.us.i, %64 ], [ 1.000000e+00, %.lr.ph36.split.us.i ] + %indvars.iv41.i = phi double [ %.1.us.i, %64 ], [ 1.000000e+00, %.lr.ph36.split.us.i ] %55 = icmp eq i64 %indvars.iv.i94, 0 - %56 = icmp eq i64 %indvars.iv.i94, %indvars.iv41.i + %58 = icmp eq i64 %indvars.iv.i94, %indvars.iv41.i %or.cond.us.i = or i1 %55, %56 br i1 %or.cond.us.i, label %64, label %57 -57: ; preds = %.preheader.us.i +57:; preds = %.preheader.us.i %58 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i94 %59 = load double, ptr %58, align 8, !tbaa !47 %60 = fsub double %32, %59 @@ -2101,86 +2101,86 @@ LBasis.exit: ; preds = %44, %53 %63 = fmul double %.032.us.i, %62 br label %64 -64: ; preds = %57, %.preheader.us.i +64:; preds = %57, %.preheader.us.i %.1.us.i = phi double [ %.032.us.i, %.preheader.us.i ], [ %63, %57 ] %indvars.iv.next.i95 = add nuw nsw i64 %indvars.iv.i94, 1 %exitcond.not.i96 = icmp eq i64 %indvars.iv.next.i95, %wide.trip.count.i br i1 %exitcond.not.i96, label %._crit_edge.us.i, label %.preheader.us.i -65: ; preds = %._crit_edge.us.i, %.lr.ph36.split.us.i - %.127.us.i = phi double [ %.02634.us.i, %.lr.ph36.split.us.i ], [ %70, %._crit_edge.us.i ] +69: ; preds = %._crit_edge.us.i, %.lr.ph36.split.us.i + %.127.us.i = phi double [ %.02634.us.i, %.lr.ph36.split.us.i ], [ %74, %._crit_edge.us.i ] %indvars.iv.next42.i = add nuw nsw i64 %indvars.iv41.i, 1 %exitcond45.not.i = icmp eq i64 %indvars.iv.next42.i, %wide.trip.count.i br i1 %exitcond45.not.i, label %.lr.ph36.split.us.i100, label %.lr.ph36.split.us.i ._crit_edge.us.i: ; preds = %64 - %66 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i - %67 = load double, ptr %66, align 8, !tbaa !47 - %68 = fsub double %28, %67 - %69 = fdiv double %.1.us.i, %68 - %70 = fadd double %.02634.us.i, %69 - br label %65 - -.lr.ph36.split.us.i100: ; preds = %65, %82 + %70 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i + %71 = load double, ptr %70, align 8, !tbaa !47 + %72 = fsub double %28, %71 + %73 = fdiv double %.1.us.i, %72 + %74 = fadd double %.02634.us.i, %73 + br label %69 + +.lr.ph36.split.us.i100: ; preds = %69, %86 %indvars.iv41.i101 = phi i64 [ %indvars.iv.next42.i112, %82 ], [ 0, %65 ] %.02634.us.i102 = phi double [ %.127.us.i111, %82 ], [ 0.000000e+00, %65 ] - %71 = icmp eq i64 %indvars.iv41.i101, 1 - br i1 %71, label %82, label %.preheader.us.i103 + %75 = icmp eq i64 %indvars.iv41.i101, 1 + br i1 %75, label %86, label %.preheader.us.i103 -.preheader.us.i103: ; preds = %.lr.ph36.split.us.i100, %81 +.preheader.us.i103: ; preds = %.lr.ph36.split.us.i100, %85 %indvars.iv.i104 = phi i64 [ %indvars.iv.next.i108, %81 ], [ 0, %.lr.ph36.split.us.i100 ] %.032.us.i105 = phi double [ %.1.us.i107, %81 ], [ 1.000000e+00, %.lr.ph36.split.us.i100 ] - %72 = icmp eq i64 %indvars.iv.i104, 1 - %73 = icmp eq i64 %indvars.iv.i104, %indvars.iv41.i101 - %or.cond.us.i106 = or i1 %72, %73 - br i1 %or.cond.us.i106, label %81, label %74 - -74: ; preds = %.preheader.us.i103 - %75 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i104 - %76 = load double, ptr %75, align 8, !tbaa !47 - %77 = fsub double %32, %76 - %78 = fsub double %30, %76 - %79 = fdiv double %77, %78 - %80 = fmul double %.032.us.i105, %79 - br label %81 - -81: ; preds = %74, %.preheader.us.i103 - %.1.us.i107 = phi double [ %.032.us.i105, %.preheader.us.i103 ], [ %80, %74 ] + %76 = icmp eq i64 %indvars.iv.i104, 1 + %77 = icmp eq i64 %indvars.iv.i104, %indvars.iv41.i101 + %or.cond.us.i106 = or i1 %76, %77 + br i1 %or.cond.us.i106, label %85, label %78 + +78: ; preds = %.preheader.us.i103 + %79 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i104 + %80 = load double, ptr %79, align 8, !tbaa !47 + %81 = fsub double %32, %80 + %82 = fsub double %30, %80 + %83 = fdiv double %81, %82 + %84 = fmul double %.032.us.i105, %83 + br label %85 + +85: ; preds = %78, %.preheader.us.i103 + %.1.us.i107 = phi double [ %.032.us.i105, %.preheader.us.i103 ], [ %84, %74 ] %indvars.iv.next.i108 = add nuw nsw i64 %indvars.iv.i104, 1 %exitcond.not.i109 = icmp eq i64 %indvars.iv.next.i108, %wide.trip.count.i br i1 %exitcond.not.i109, label %._crit_edge.us.i110, label %.preheader.us.i103 -82: ; preds = %._crit_edge.us.i110, %.lr.ph36.split.us.i100 - %.127.us.i111 = phi double [ %.02634.us.i102, %.lr.ph36.split.us.i100 ], [ %87, %._crit_edge.us.i110 ] +86: ; preds = %._crit_edge.us.i110, %.lr.ph36.split.us.i100 + %.127.us.i111 = phi double [ %.02634.us.i102, %.lr.ph36.split.us.i100 ], [ %91, %._crit_edge.us.i110 ] %indvars.iv.next42.i112 = add nuw nsw i64 %indvars.iv41.i101, 1 %exitcond45.not.i113 = icmp eq i64 %indvars.iv.next42.i112, %wide.trip.count.i br i1 %exitcond45.not.i113, label %LBasis.exit93, label %.lr.ph36.split.us.i100 -._crit_edge.us.i110: ; preds = %81 - %83 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i101 - %84 = load double, ptr %83, align 8, !tbaa !47 - %85 = fsub double %30, %84 - %86 = fdiv double %.1.us.i107, %85 - %87 = fadd double %.02634.us.i102, %86 - br label %82 - -LBasis.exit93: ; preds = %82, %53 - %88 = phi double [ %.1.i90, %53 ], [ %.127.us.i111, %82 ] - %89 = phi double [ %.1.i, %53 ], [ %.127.us.i, %82 ] - %90 = load ptr, ptr %15, align 8, !tbaa !48 - %91 = getelementptr inbounds nuw i8, ptr %15, i64 8 - %92 = load ptr, ptr %91, align 8, !tbaa !48 - tail call void @N_VLinearSum(double noundef %89, ptr noundef %90, double noundef %88, ptr noundef %92, ptr noundef %5) #14 - br label %166 +._crit_edge.us.i110: ; preds = %85 + %87 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv41.i101 + %88 = load double, ptr %87, align 8, !tbaa !47 + %89 = fsub double %30, %88 + %90 = fdiv double %.1.us.i107, %89 + %91 = fadd double %.02634.us.i102, %90 + br label %86 + +LBasis.exit93: ; preds = %86, %53 + %92 = phi double [ %.1.i90, %53 ], [ %.127.us.i111, %82 ] + %93 = phi double [ %.1.i, %53 ], [ %.127.us.i, %82 ] + %94 = load ptr, ptr %15, align 8, !tbaa !48 + %95 = getelementptr inbounds nuw i8, ptr %15, i64 8 + %96 = load ptr, ptr %95, align 8, !tbaa !48 + tail call void @N_VLinearSum(double noundef %93, ptr noundef %94, double noundef %92, ptr noundef %96, ptr noundef %5) #14 + br label %170 .lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ] - %93 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv - store double 0.000000e+00, ptr %93, align 8, !tbaa !47 - %94 = getelementptr inbounds nuw ptr, ptr %15, i64 %indvars.iv - %95 = load ptr, ptr %94, align 8, !tbaa !48 - %96 = getelementptr inbounds nuw [6 x ptr], ptr %8, i64 0, i64 %indvars.iv - store ptr %95, ptr %96, align 8, !tbaa !48 + %97 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv + store double 0.000000e+00, ptr %97, align 8, !tbaa !47 + %98 = getelementptr inbounds nuw ptr, ptr %15, i64 %indvars.iv + %99 = load ptr, ptr %98, align 8, !tbaa !48 + %100 = getelementptr inbounds nuw [6 x ptr], ptr %8, i64 0, i64 %indvars.iv + store ptr %99, ptr %100, align 8, !tbaa !48 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count br i1 %exitcond.not, label %._crit_edge, label %.lr.ph @@ -2197,66 +2197,66 @@ LBasis.exit93: ; preds = %82, %53 br i1 %.not154, label %.loopexit, label %.lr.ph158.preheader .lr.ph158.preheader: ; preds = %.preheader151 - %wide.trip.count172 = zext i32 %.pre to i64 + %wide.trip.count178 = zext i32 %.pre to i64 br label %.lr.ph158 .preheader149: ; preds = %._crit_edge - br i1 %.not154, label %.loopexit, label %.lr.ph.split.us.preheader.i.lr.ph + br i1 %.not154, label %.loopexit, label %.lr.ph.split.us.preheader.i.us.preheader -.lr.ph.split.us.preheader.i.lr.ph: ; preds = %.preheader149 +.lr.ph.split.us.preheader.i.us.preheader: ; preds = %.preheader149 %wide.trip.count72.i = zext nneg i32 %11 to i64 - %wide.trip.count177 = zext i32 %.pre to i64 + %wide.trip.count183 = zext i32 %.pre to i64 br label %.lr.ph.split.us.preheader.i .preheader147: ; preds = %._crit_edge - br i1 %.not154, label %.loopexit, label %.lr.ph36.split.us.preheader.i125.lr.ph + br i1 %.not154, label %.loopexit, label %.lr.ph36.split.us.preheader.i125.us.preheader -.lr.ph36.split.us.preheader.i125.lr.ph: ; preds = %.preheader147 +.lr.ph36.split.us.preheader.i125.us.preheader: ; preds = %.preheader147 %wide.trip.count44.i126 = zext nneg i32 %11 to i64 - %wide.trip.count182 = zext i32 %.pre to i64 + %wide.trip.count188 = zext i32 %.pre to i64 br label %.lr.ph36.split.us.preheader.i125 .preheader: ; preds = %._crit_edge - br i1 %.not154, label %.loopexit, label %.lr.ph.i116.lr.ph + br i1 %.not154, label %.loopexit, label %.lr.ph.i116.us.preheader -.lr.ph.i116.lr.ph: ; preds = %.preheader +.lr.ph.i116.us.preheader: ; preds = %.preheader %wide.trip.count.i117 = zext nneg i32 %11 to i64 - %wide.trip.count187 = zext i32 %.pre to i64 - br label %.lr.ph.i116 - -.lr.ph.i116: ; preds = %.lr.ph.i116.lr.ph, %LBasis.exit123.loopexit - %indvars.iv184 = phi i64 [ 0, %.lr.ph.i116.lr.ph ], [ %indvars.iv.next185, %LBasis.exit123.loopexit ] - %97 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv184 - br label %98 - -98: ; preds = %108, %.lr.ph.i116 - %indvars.iv.i118 = phi i64 [ 0, %.lr.ph.i116 ], [ %indvars.iv.next.i121, %108 ] - %.016.i119 = phi double [ 1.000000e+00, %.lr.ph.i116 ], [ %.1.i120, %108 ] - %99 = icmp eq i64 %indvars.iv.i118, %indvars.iv184 - br i1 %99, label %108, label %100 - -100: ; preds = %98 - %101 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i118 - %102 = load double, ptr %101, align 8, !tbaa !47 - %103 = fsub double %32, %102 - %104 = load double, ptr %97, align 8, !tbaa !47 - %105 = fsub double %104, %102 - %106 = fdiv double %103, %105 - %107 = fmul double %.016.i119, %106 - br label %108 - -108: ; preds = %100, %98 - %.1.i120 = phi double [ %.016.i119, %98 ], [ %107, %100 ] - %indvars.iv.next.i121 = add nuw nsw i64 %indvars.iv.i118, 1 - %exitcond.not.i122 = icmp eq i64 %indvars.iv.next.i121, %wide.trip.count.i117 - br i1 %exitcond.not.i122, label %LBasis.exit123.loopexit, label %98 - -LBasis.exit123.loopexit: ; preds = %108 - %109 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv184 - store double %.1.i120, ptr %109, align 8, !tbaa !47 - %indvars.iv.next185 = add nuw nsw i64 %indvars.iv184, 1 - %exitcond188.not = icmp eq i64 %indvars.iv.next185, %wide.trip.count187 - br i1 %exitcond188.not, label %.loopexit, label %.lr.ph.i116 + %wide.trip.count193 = zext i32 %.pre to i64 + br label %.lr.ph.i116.us + +.lr.ph.i116.us: ; preds = %.lr.ph.i116.us.preheader, %LBasis.exit123.loopexit.us + %indvars.iv190 = phi i64 [ 0, %.lr.ph.i116.lr.ph ], [ %indvars.iv.next191, %LBasis.exit123.loopexit ] + %153 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv190 + br label %154 + +154: ; preds = %164, %.lr.ph.i116.us + %indvars.iv.i118.us = phi i64 [ 0, %.lr.ph.i116 ], [ %indvars.iv.next.i121.us, %108 ] + %.016.i119.us = phi double [ 1.000000e+00, %.lr.ph.i116 ], [ %.1.i120.us, %108 ] + %155 = icmp eq i64 %indvars.iv.i118.us, %indvars.iv190 + br i1 %155, label %164, label %156 + +156: ; preds = %154 + %157 = getelementptr inbounds nuw double, ptr %13, i64 %indvars.iv.i118.us + %158 = load double, ptr %157, align 8, !tbaa !47 + %159 = fsub double %32, %158 + %160 = load double, ptr %153, align 8, !tbaa !47 + %161 = fsub double %160, %158 + %162 = fdiv double %159, %161 + %163 = fmul double %.016.i119.us, %162 + br label %164 + +164: ; preds = %156, %154 + %.1.i120.us = phi double [ %.016.i119.us, %98 ], [ %163, %100 ] + %indvars.iv.next.i121.us = add nuw nsw i64 %indvars.iv.i118.us, 1 + %exitcond.not.i122.us = icmp eq i64 %indvars.iv.next.i121.us, %wide.trip.count.i117 + br i1 %exitcond.not.i122.us, label %LBasis.exit123.loopexit.us, label %154 + +LBasis.exit123.loopexit.us: ; preds = %164 + %165 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv190 + store double %.1.i120.us, ptr %165, align 8, !tbaa !47 + %indvars.iv.next191 = add nuw nsw i64 %indvars.iv190, 1 + %exitcond194.not = icmp eq i64 %indvars.iv.next191, %wide.trip.count193 + br i1 %exitcond194.not, label %.loopexit, label %.lr.ph.i116.us .lr.ph36.split.us.preheader.i125: ; preds = %.lr.ph36.split.us.preheader.i125.lr.ph, %LBasisD.exit141.loopexit %indvars.iv179 = phi i64 [ 0, %.lr.ph36.split.us.preheader.i125.lr.ph ], [ %indvars.iv.next180, %LBasisD.exit141.loopexit ] @@ -2398,25 +2398,25 @@ LBasisD2.exit.loopexit: ; preds = %133 br i1 %exitcond178.not, label %.loopexit, label %.lr.ph.split.us.preheader.i .lr.ph158: ; preds = %.lr.ph158.preheader, %.lr.ph158 - %indvars.iv169 = phi i64 [ 0, %.lr.ph158.preheader ], [ %indvars.iv.next170, %.lr.ph158 ] - %162 = trunc nuw nsw i64 %indvars.iv169 to i32 - %163 = tail call double @LBasisD3(ptr noundef nonnull %1, i32 noundef %162, double noundef %32) - %164 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv169 - store double %163, ptr %164, align 8, !tbaa !47 - %indvars.iv.next170 = add nuw nsw i64 %indvars.iv169, 1 - %exitcond173.not = icmp eq i64 %indvars.iv.next170, %wide.trip.count172 - br i1 %exitcond173.not, label %.loopexit, label %.lr.ph158 + %indvars.iv175 = phi i64 [ 0, %.lr.ph158.preheader ], [ %indvars.iv.next176, %.lr.ph158 ] + %166 = trunc nuw nsw i64 %indvars.iv175 to i32 + %167 = tail call double @LBasisD3(ptr noundef nonnull %1, i32 noundef %166, double noundef %32) + %168 = getelementptr inbounds nuw [6 x double], ptr %7, i64 0, i64 %indvars.iv175 + store double %167, ptr %168, align 8, !tbaa !47 + %indvars.iv.next176 = add nuw nsw i64 %indvars.iv175, 1 + %exitcond179.not = icmp eq i64 %indvars.iv.next176, %wide.trip.count178 + br i1 %exitcond179.not, label %.loopexit, label %.lr.ph158 default.unreachable: ; preds = %._crit_edge unreachable -.loopexit: ; preds = %.lr.ph158, %LBasisD2.exit.loopexit, %LBasisD.exit141.loopexit, %LBasis.exit123.loopexit, %.preheader151, %.preheader149, %.preheader147, %.preheader - %165 = call i32 @N_VLinearCombination(i32 noundef %.pre, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef %5) #14 - %.not84 = icmp eq i32 %165, 0 +.loopexit: ; preds = %.lr.ph158, %LBasisD2.exit.loopexit, %LBasisD.exit141.loopexit, %LBasis.exit123.loopexit.us, %.preheader151, %.preheader149, %.preheader147, %.preheader + %169 = call i32 @N_VLinearCombination(i32 noundef %.pre, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef %5) #14 + %.not84 = icmp eq i32 %169, 0 %. = select i1 %.not84, i32 0, i32 -28 - br label %166 + br label %170 -166: ; preds = %.loopexit, %LBasis.exit93, %25, %22, %19 +170: ; preds = %.loopexit, %LBasis.exit93, %25, %22, %19 %.0 = phi i32 [ -22, %19 ], [ 0, %22 ], [ 0, %25 ], [ 0, %LBasis.exit93 ], [ %., %.loopexit ] call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #14 call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #14 diff --git a/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll b/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll index 7869a765aee..243befa5760 100644 --- a/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll +++ b/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll @@ -99262,7 +99262,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 45: ; preds = %2 store i32 2, ptr %0, align 8 - br label %392 + br label %389 46: ; preds = %.preheader, %"_ZN103_$LT$alloc..vec..into_iter..IntoIter$LT$T$C$A$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h31f2d44bc2f4046fE.exit" %47 = phi i64 [ %.pre, %.preheader ], [ 3, %"_ZN103_$LT$alloc..vec..into_iter..IntoIter$LT$T$C$A$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h31f2d44bc2f4046fE.exit" ] @@ -99483,7 +99483,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 124: ; preds = %70, %82 store i32 2, ptr %0, align 8 call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %25) - br label %392 + br label %389 125: ; preds = %119 %126 = getelementptr inbounds nuw i8, ptr %1, i64 1360 @@ -99526,7 +99526,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %140 = getelementptr inbounds nuw i8, ptr %1, i64 1992 %141 = load ptr, ptr %140, align 8, !noundef !4 %142 = icmp eq ptr %141, null - br i1 %142, label %265, label %264 + br i1 %142, label %262, label %261 143: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit" call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %24) @@ -99574,11 +99574,11 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ "_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit": ; preds = %152, %147, %156 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %126, ptr noundef nonnull align 8 dereferenceable(176) %24, i64 176, i1 false) call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %24) - %.pre213 = load i64, ptr %136, align 8 + %.pre214 = load i64, ptr %136, align 8 br label %159 159: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit", %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit" - %160 = phi i64 [ %137, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit" ], [ %.pre213, %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit" ] + %160 = phi i64 [ %137, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h6eea137847388a6bE.exit" ], [ %.pre214, %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit" ] %161 = load ptr, ptr %135, align 8, !nonnull !4, !align !5, !noundef !4 %162 = call noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.548) %163 = icmp eq ptr %162, null @@ -99601,11 +99601,11 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %172 = icmp eq i64 %.sroa.0.0.sroa.speculated.i141, 0 br i1 %172, label %182, label %173 -173: ; preds = %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" +173:; preds = %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" %174 = icmp ult i64 %.sroa.0.0.sroa.speculated.i141, %160 br i1 %174, label %175, label %179 -175: ; preds = %173 +175: ; preds = %173 %176 = getelementptr inbounds i8, ptr %161, i64 %.sroa.0.0.sroa.speculated.i141 %177 = load i8, ptr %176, align 1, !alias.scope !28726, !noalias !28729, !noundef !4 %178 = icmp sgt i8 %177, -65 @@ -99619,106 +99619,106 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %.pn.pn = phi { ptr, i32 } [ %158, %157 ], [ %240, %244 ], [ %240, %239 ], [ %240, %241 ], [ %375, %373 ], [ %375, %374 ], [ %375, %369 ] resume { ptr, i32 } %.pn.pn -181: ; preds = %179, %175 +178: ; preds = %179, %175 call void @_ZN4core3str16slice_error_fail17h402ef64b20c243efE(ptr noalias noundef nonnull readonly align 1 %161, i64 noundef %160, i64 noundef 0, i64 noundef %.sroa.0.0.sroa.speculated.i141, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.447) #56 unreachable -182: ; preds = %179, %175, %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" - %183 = sub nuw i64 %160, %.sroa.0.0.sroa.speculated.i141 - %184 = getelementptr inbounds i8, ptr %161, i64 %.sroa.0.0.sroa.speculated.i141 - store ptr %184, ptr %135, align 8 - store i64 %183, ptr %136, align 8 - %185 = add i64 %.sroa.0.0.sroa.speculated.i141, %169 - store i64 %185, ptr %29, align 8 +179: ; preds = %179, %175, %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" + %180 = sub nuw i64 %160, %.sroa.0.0.sroa.speculated.i141 + %181 = getelementptr inbounds i8, ptr %161, i64 %.sroa.0.0.sroa.speculated.i141 + store ptr %181, ptr %135, align 8 + store i64 %180, ptr %136, align 8 + %182 = add i64 %.sroa.0.0.sroa.speculated.i141, %169 + store i64 %182, ptr %29, align 8 call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %22) call void @llvm.experimental.noalias.scope.decl(metadata !28731) - %186 = load i32, ptr %126, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 - %187 = getelementptr inbounds nuw i8, ptr %1, i64 1364 - %188 = load i32, ptr %187, align 4, !alias.scope !28731, !noalias !28734 + %183 = load i32, ptr %126, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 + %184 = getelementptr inbounds nuw i8, ptr %1, i64 1364 + %185 = load i32, ptr %184, align 4, !alias.scope !28731, !noalias !28734 call void @llvm.lifetime.start.p0(i64 108, ptr nonnull %.sroa.53.i) - %189 = getelementptr inbounds nuw i8, ptr %1, i64 1376 - %190 = load i32, ptr %189, align 8, !range !4664, !alias.scope !28731, !noalias !28734, !noundef !4 - %191 = icmp eq i32 %190, 2 - br i1 %191, label %193, label %192 + %186 = getelementptr inbounds nuw i8, ptr %1, i64 1376 + %187 = load i32, ptr %186, align 8, !range !4664, !alias.scope !28731, !noalias !28734, !noundef !4 + %188 = icmp eq i32 %187, 2 + br i1 %188, label %190, label %189 -192: ; preds = %182 +189: ; preds = %179 %.sroa.413.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %1, i64 1380 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(108) %.sroa.53.i, ptr noundef nonnull readonly align 4 dereferenceable(108) %.sroa.413.0..sroa_idx.i, i64 108, i1 false), !noalias !28734 - br label %193 + br label %190 -193: ; preds = %192, %182 - %194 = getelementptr inbounds nuw i8, ptr %1, i64 1368 - %195 = load i32, ptr %194, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 - %196 = getelementptr inbounds nuw i8, ptr %1, i64 1372 - %197 = load i32, ptr %196, align 4, !alias.scope !28731, !noalias !28734 - %198 = getelementptr inbounds nuw i8, ptr %1, i64 1528 - %199 = load i8, ptr %198, align 8, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 - %200 = getelementptr inbounds nuw i8, ptr %1, i64 1529 - %201 = load i8, ptr %200, align 1, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 - %202 = getelementptr inbounds nuw i8, ptr %1, i64 1504 - %203 = load i8, ptr %202, align 8, !range !2148, !alias.scope !28731, !noalias !28734, !noundef !4 - %204 = icmp eq i8 %203, 2 - br i1 %204, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", label %205 - -205: ; preds = %193 - %206 = getelementptr inbounds nuw i8, ptr %1, i64 1488 - %207 = load ptr, ptr %206, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !noundef !4 - %208 = getelementptr inbounds nuw i8, ptr %1, i64 1496 - %209 = load ptr, ptr %208, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !align !179, !noundef !4 - %210 = atomicrmw add ptr %207, i64 1 monotonic, align 8, !noalias !28736 - %211 = icmp slt i64 %210, 0 - br i1 %211, label %212, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" +190: ; preds = %189, %179 + %191 = getelementptr inbounds nuw i8, ptr %1, i64 1368 + %192 = load i32, ptr %191, align 8, !range !11612, !alias.scope !28731, !noalias !28734, !noundef !4 + %193 = getelementptr inbounds nuw i8, ptr %1, i64 1372 + %194 = load i32, ptr %193, align 4, !alias.scope !28731, !noalias !28734 + %195 = getelementptr inbounds nuw i8, ptr %1, i64 1528 + %196 = load i8, ptr %195, align 8, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 + %197 = getelementptr inbounds nuw i8, ptr %1, i64 1529 + %198 = load i8, ptr %197, align 1, !range !21, !alias.scope !28731, !noalias !28734, !noundef !4 + %199 = getelementptr inbounds nuw i8, ptr %1, i64 1504 + %200 = load i8, ptr %199, align 8, !range !2148, !alias.scope !28731, !noalias !28734, !noundef !4 + %201 = icmp eq i8 %200, 2 + br i1 %201, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", label %202 + +202: ; preds = %190 + %203 = getelementptr inbounds nuw i8, ptr %1, i64 1488 + %204 = load ptr, ptr %203, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !noundef !4 + %205 = getelementptr inbounds nuw i8, ptr %1, i64 1496 + %206 = load ptr, ptr %205, align 8, !alias.scope !28731, !noalias !28734, !nonnull !4, !align !179, !noundef !4 + %207 = atomicrmw add ptr %204, i64 1 monotonic, align 8, !noalias !28736 + %208 = icmp slt i64 %207, 0 + br i1 %208, label %209, label %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" -212: ; preds = %205 +209: ; preds = %202 call void @llvm.trap() unreachable -"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit": ; preds = %205, %193 - %213 = phi ptr [ undef, %193 ], [ %207, %205 ] - %.sroa.07.sroa.4.0.i = phi ptr [ undef, %193 ], [ %209, %205 ] - %trunc18.i = trunc nuw i32 %195 to i1 - %.sroa.56.0.i = select i1 %trunc18.i, i32 %197, i32 undef - %trunc.i143 = trunc nuw i32 %186 to i1 - %.sroa.5.0.i = select i1 %trunc.i143, i32 %188, i32 undef +"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit": ; preds = %202, %190 + %210 = phi ptr [ undef, %193 ], [ %204, %205 ] + %.sroa.07.sroa.4.0.i = phi ptr [ undef, %193 ], [ %206, %205 ] + %trunc18.i = trunc nuw i32 %192 to i1 + %.sroa.56.0.i = select i1 %trunc18.i, i32 %194, i32 undef + %trunc.i143 = trunc nuw i32 %183 to i1 + %.sroa.5.0.i = select i1 %trunc.i143, i32 %185, i32 undef %.sroa.12.16..sroa_idx = getelementptr inbounds nuw i8, ptr %22, i64 20 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(108) %.sroa.12.16..sroa_idx, ptr noundef nonnull align 4 dereferenceable(108) %.sroa.53.i, i64 108, i1 false) call void @llvm.lifetime.end.p0(i64 108, ptr nonnull %.sroa.53.i) - %214 = getelementptr inbounds nuw i8, ptr %22, i64 152 - store ptr %161, ptr %214, align 8 - %215 = getelementptr inbounds nuw i8, ptr %22, i64 160 - store i64 %.sroa.0.0.sroa.speculated.i141, ptr %215, align 8 - store i32 %186, ptr %22, align 8 - %216 = getelementptr inbounds nuw i8, ptr %22, i64 4 - store i32 %.sroa.5.0.i, ptr %216, align 4 - %217 = getelementptr inbounds nuw i8, ptr %22, i64 16 - store i32 %190, ptr %217, align 8 - %218 = getelementptr inbounds nuw i8, ptr %22, i64 8 - store i32 %195, ptr %218, align 8 - %219 = getelementptr inbounds nuw i8, ptr %22, i64 12 - store i32 %.sroa.56.0.i, ptr %219, align 4 - %220 = getelementptr inbounds nuw i8, ptr %22, i64 168 - store i8 %199, ptr %220, align 8 - %221 = getelementptr inbounds nuw i8, ptr %22, i64 169 - store i8 %201, ptr %221, align 1 - %222 = getelementptr inbounds nuw i8, ptr %22, i64 128 - store ptr %213, ptr %222, align 8 + %211 = getelementptr inbounds nuw i8, ptr %22, i64 152 + store ptr %161, ptr %211, align 8 + %212 = getelementptr inbounds nuw i8, ptr %22, i64 160 + store i64 %.sroa.0.0.sroa.speculated.i141, ptr %212, align 8 + store i32 %183, ptr %22, align 8 + %213 = getelementptr inbounds nuw i8, ptr %22, i64 4 + store i32 %.sroa.5.0.i, ptr %213, align 4 + %214 = getelementptr inbounds nuw i8, ptr %22, i64 16 + store i32 %187, ptr %214, align 8 + %215 = getelementptr inbounds nuw i8, ptr %22, i64 8 + store i32 %192, ptr %215, align 8 + %216 = getelementptr inbounds nuw i8, ptr %22, i64 12 + store i32 %.sroa.56.0.i, ptr %216, align 4 + %217 = getelementptr inbounds nuw i8, ptr %22, i64 168 + store i8 %196, ptr %217, align 8 + %218 = getelementptr inbounds nuw i8, ptr %22, i64 169 + store i8 %198, ptr %218, align 1 + %219 = getelementptr inbounds nuw i8, ptr %22, i64 128 + store ptr %210, ptr %219, align 8 %.sroa.15.128..sroa_idx = getelementptr inbounds nuw i8, ptr %22, i64 136 store ptr %.sroa.07.sroa.4.0.i, ptr %.sroa.15.128..sroa_idx, align 8 %.sroa.16.128..sroa_idx = getelementptr inbounds nuw i8, ptr %22, i64 144 - store i8 %203, ptr %.sroa.16.128..sroa_idx, align 8 - %223 = getelementptr inbounds nuw i8, ptr %1, i64 3056 - %224 = load i64, ptr %223, align 8, !noundef !4 - %225 = icmp eq i64 %224, 0 - br i1 %225, label %236, label %226 + store i8 %200, ptr %.sroa.16.128..sroa_idx, align 8 + %220 = getelementptr inbounds nuw i8, ptr %1, i64 3056 + %221 = load i64, ptr %220, align 8, !noundef !4 + %222 = icmp eq i64 %221, 0 + br i1 %222, label %233, label %223 -226: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" +223: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit" call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %21) store i32 0, ptr %21, align 4 - %227 = getelementptr inbounds nuw i8, ptr %21, i64 20 - store i32 0, ptr %227, align 4 - %228 = getelementptr inbounds nuw i8, ptr %21, i64 108 - store i8 3, ptr %228, align 4 - %229 = getelementptr inbounds nuw i8, ptr %21, i64 28 + %224 = getelementptr inbounds nuw i8, ptr %21, i64 20 + store i32 0, ptr %224, align 4 + %225 = getelementptr inbounds nuw i8, ptr %21, i64 108 + store i8 3, ptr %225, align 4 + %226 = getelementptr inbounds nuw i8, ptr %21, i64 28 store i32 0, ptr %229, align 4 %230 = getelementptr inbounds nuw i8, ptr %21, i64 56 store i32 2, ptr %230, align 4 @@ -99750,110 +99750,110 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ store i64 %.sroa.038.sroa.5.sroa.6.0, ptr %.sroa.040.sroa.4.sroa.3.0..sroa.040.sroa.4.0..sroa_idx.sroa_idx, align 8 %.sroa.241.0..sroa_idx = getelementptr inbounds nuw i8, ptr %20, i64 64 store i64 %.sroa.539.0, ptr %.sroa.241.0..sroa_idx, align 8 - br label %237 + br label %234 -236: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", %251 +233: ; preds = %"_ZN62_$LT$language..buffer..Chunk$u20$as$u20$core..clone..Clone$GT$5clone17h053e18fb4e855929E.exit", %248 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %25, ptr noundef nonnull align 8 dereferenceable(176) %22, i64 176, i1 false) call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %22) - br label %253 + br label %250 -237: ; preds = %261, %226 - %238 = invoke { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %20) - to label %245 unwind label %239 +234: ; preds = %258, %223 + %235 = invoke { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %20) + to label %245 unwind label %236 -239: ; preds = %252, %237 - %240 = landingpad { ptr, i32 } +236: ; preds = %249, %234 + %237 = landingpad { ptr, i32 } cleanup - br i1 %204, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %241 + br i1 %201, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %238 -241: ; preds = %239 - %242 = atomicrmw sub ptr %213, i64 1 release, align 8, !noalias !28737 - %243 = icmp eq i64 %242, 1 - br i1 %243, label %244, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" +238: ; preds = %236 + %239 = atomicrmw sub ptr %210, i64 1 release, align 8, !noalias !28737 + %240 = icmp eq i64 %239, 1 + br i1 %240, label %241, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" -244: ; preds = %241 +241: ; preds = %238 fence acquire - invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %222) - to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %262 + invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %219) + to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %259 -245: ; preds = %237 - %246 = extractvalue { ptr, ptr } %238, 0 - %247 = icmp eq ptr %246, null - %248 = extractvalue { ptr, ptr } %238, 1 - %249 = icmp eq ptr %248, null - %250 = select i1 %247, i1 true, i1 %249 - br i1 %250, label %251, label %252 +242: ; preds = %234 + %243 = extractvalue { ptr, ptr } %235, 0 + %244 = icmp eq ptr %243, null + %245 = extractvalue { ptr, ptr } %235, 1 + %246 = icmp eq ptr %245, null + %247 = select i1 %244, i1 true, i1 %246 + br i1 %247, label %248, label %249 -251: ; preds = %245 +248: ; preds = %242 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %20) - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %217, ptr noundef nonnull align 4 dereferenceable(112) %21, i64 112, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %214, ptr noundef nonnull align 4 dereferenceable(112) %21, i64 112, i1 false) call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %21) - br label %236 + br label %233 -252: ; preds = %245 +249: ; preds = %242 call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %19) - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %19, ptr noundef nonnull align 4 dereferenceable(112) %248, i64 112, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %19, ptr noundef nonnull align 4 dereferenceable(112) %245, i64 112, i1 false) invoke void @_ZN4gpui5style14HighlightStyle9highlight17h1cc9a839e4fef7abE(ptr noalias noundef nonnull align 4 dereferenceable(112) %21, ptr noalias noundef nonnull align 4 captures(none) dereferenceable(112) %19) - to label %261 unwind label %239 + to label %261 unwind label %236 -253: ; preds = %351, %236 - %254 = invoke noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.549) - to label %.noexc151 unwind label %374 +250: ; preds = %348, %233 + %251 = invoke noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.549) + to label %.noexc151 unwind label %371 -.noexc151: ; preds = %253 - %255 = icmp eq ptr %254, null - %256 = load i64, ptr %61, align 8, !alias.scope !28748, !noalias !28751, !noundef !4 - br i1 %255, label %380, label %257 +.noexc151: ; preds = %250 + %252 = icmp eq ptr %251, null + %253 = load i64, ptr %61, align 8, !alias.scope !28748, !noalias !28751, !noundef !4 + br i1 %252, label %377, label %254 -257: ; preds = %.noexc151 - %258 = getelementptr inbounds nuw i8, ptr %254, i64 48 - %259 = load i64, ptr %258, align 8, !alias.scope !28753, !noalias !28758, !noundef !4 - %260 = add i64 %259, %256 - br label %380 +254: ; preds = %.noexc151 + %255 = getelementptr inbounds nuw i8, ptr %251, i64 48 + %256 = load i64, ptr %255, align 8, !alias.scope !28753, !noalias !28758, !noundef !4 + %257 = add i64 %256, %253 + br label %377 -261: ; preds = %252 +258: ; preds = %249 call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %19) - br label %237 + br label %234 -262: ; preds = %373, %244 - %263 = landingpad { ptr, i32 } +259: ; preds = %370, %241 + %260 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer call void @_ZN4core9panicking16panic_in_cleanup17hfa05ef7d5107e16aE() #57 unreachable -264: ; preds = %139 +261: ; preds = %139 call void @llvm.lifetime.start.p0(i64 272, ptr nonnull %18) store ptr %141, ptr %18, align 8 %.sroa.278.0..sroa_idx = getelementptr inbounds nuw i8, ptr %18, i64 8 store i32 0, ptr %.sroa.278.0..sroa_idx, align 8 - br label %272 + br label %269 -265: ; preds = %139, %.thread204 - %266 = phi i64 [ %122, %139 ], [ %.pre211, %.thread204 ] +262: ; preds = %139, %.thread204 + %263 = phi i64 [ %122, %139 ], [ %.pre211, %.thread204 ] %.sroa.011.0 = phi ptr [ null, %139 ], [ %.sroa.011.1, %.thread204 ] call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %17) - %trunc = trunc nuw i64 %266 to i1 + %trunc = trunc nuw i64 %263 to i1 %. = select i1 %trunc, i64 1536, i64 1648 - %267 = getelementptr inbounds nuw i8, ptr %1, i64 %. - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %17, ptr noundef nonnull align 8 dereferenceable(112) %267, i64 112, i1 false) - %268 = load i64, ptr %29, align 8, !noundef !4 - %269 = load i64, ptr %61, align 8, !noundef !4 - %270 = sub i64 %268, %269 - %271 = icmp eq ptr %.sroa.011.0, null - br i1 %271, label %292, label %278 - -272: ; preds = %275, %264 - %273 = call noundef align 8 dereferenceable_or_null(24) ptr @"_ZN90_$LT$sum_tree..cursor..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17hb60b82399c106c70E"(ptr noalias noundef nonnull align 8 dereferenceable(272) %18) + %264 = getelementptr inbounds nuw i8, ptr %1, i64 %. + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %17, ptr noundef nonnull align 8 dereferenceable(112) %264, i64 112, i1 false) + %265 = load i64, ptr %29, align 8, !noundef !4 + %266 = load i64, ptr %61, align 8, !noundef !4 + %267 = sub i64 %265, %266 + %268 = icmp eq ptr %.sroa.011.0, null + br i1 %268, label %289, label %278 + +269: ; preds = %275, %261 + %270 = call noundef align 8 dereferenceable_or_null(24) ptr @"_ZN90_$LT$sum_tree..cursor..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17hb60b82399c106c70E"(ptr noalias noundef nonnull align 8 dereferenceable(272) %18) %274 = icmp eq ptr %273, null - br i1 %274, label %.thread204, label %275 + br i1 %274, label %284, label %275 -.thread204: ; preds = %272, %275 +284: ; preds = %272, %275 %.sroa.011.1 = phi ptr [ %276, %275 ], [ null, %272 ] call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %18) %.pre211 = load i64, ptr %121, align 8, !range !24 br label %265 -275: ; preds = %272 +288: ; preds = %272 %276 = call noundef align 8 dereferenceable_or_null(192) ptr @"_ZN8sum_tree8tree_map20TreeMap$LT$K$C$V$GT$3get17h6ff1c67ec4628d10E"(ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %273, ptr noalias noundef nonnull readonly align 8 dereferenceable(16) %121) %277 = icmp eq ptr %276, null br i1 %277, label %272, label %.thread204 @@ -99901,127 +99901,127 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %16, ptr noundef nonnull align 8 dereferenceable(112) %.sroa.011.0, i64 112, i1 false) call void @_ZN4gpui5style14HighlightStyle9highlight17h1cc9a839e4fef7abE(ptr noalias noundef nonnull align 4 dereferenceable(112) %17, ptr noalias noundef nonnull align 4 captures(none) dereferenceable(112) %16) call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %16) - br label %292 + br label %289 -292: ; preds = %282, %265, %285, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" +289: ; preds = %282, %262, %285, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" %.sroa.017.0 = phi i64 [ %286, %285 ], [ %288, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7504c612da6122dfE.exit" ], [ -1, %265 ], [ -1, %282 ] - %293 = getelementptr inbounds nuw i8, ptr %1, i64 2552 + %290 = getelementptr inbounds nuw i8, ptr %1, i64 2552 call void @llvm.experimental.noalias.scope.decl(metadata !28764) - %294 = getelementptr inbounds nuw i8, ptr %1, i64 2992 - %295 = load i8, ptr %294, align 8, !range !2148, !alias.scope !28764, !noalias !28767, !noundef !4 - %296 = icmp eq i8 %295, 2 - br i1 %296, label %297, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" + %291 = getelementptr inbounds nuw i8, ptr %1, i64 2992 + %292 = load i8, ptr %291, align 8, !range !2148, !alias.scope !28764, !noalias !28767, !noundef !4 + %293 = icmp eq i8 %292, 2 + br i1 %293, label %294, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" -297: ; preds = %292 +294: ; preds = %289 call void @llvm.lifetime.start.p0(i64 448, ptr nonnull %3), !noalias !28769 - %298 = load i64, ptr %31, align 8, !noalias !28770, !noundef !4 - %299 = call noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.552), !noalias !28770 - %300 = icmp eq ptr %299, null - %301 = load i64, ptr %61, align 8, !alias.scope !28774, !noalias !28777, !noundef !4 - br i1 %300, label %306, label %302 - -302: ; preds = %297 - %303 = getelementptr inbounds nuw i8, ptr %299, i64 48 - %304 = load i64, ptr %303, align 8, !alias.scope !28779, !noalias !28784, !noundef !4 - %305 = add i64 %304, %301 - br label %306 - -306: ; preds = %302, %297 - %.pn8.i.i.i = phi i64 [ %305, %302 ], [ %301, %297 ] - %.sroa.0.0.sroa.speculated.i.i.i = call noundef i64 @llvm.umin.i64(i64 %298, i64 %.pn8.i.i.i) - %307 = sub i64 %.sroa.0.0.sroa.speculated.i.i.i, %301 - %308 = getelementptr inbounds nuw i8, ptr %121, i64 64 - call void @_ZN4rope4Rope15chunks_in_range17h24309e1dc9ed5cd9E(ptr noalias noundef nonnull sret([448 x i8]) align 8 captures(none) dereferenceable(448) %3, ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %308, i64 noundef %270, i64 noundef %307), !noalias !28769 - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(448) %293, ptr noundef nonnull align 8 dereferenceable(448) %3, i64 448, i1 false), !noalias !28767 + %295 = load i64, ptr %31, align 8, !noalias !28770, !noundef !4 + %296 = call noundef align 8 dereferenceable_or_null(96) ptr @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$12item_summary17he2ca60fee7facb98E.llvm.7770800806426765245"(ptr noalias noundef nonnull readonly align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.552), !noalias !28770 + %297 = icmp eq ptr %296, null + %298 = load i64, ptr %61, align 8, !alias.scope !28774, !noalias !28777, !noundef !4 + br i1 %297, label %303, label %299 + +299: ; preds = %294 + %300 = getelementptr inbounds nuw i8, ptr %296, i64 48 + %301 = load i64, ptr %300, align 8, !alias.scope !28779, !noalias !28784, !noundef !4 + %302 = add i64 %301, %298 + br label %303 + +303: ; preds = %299, %294 + %.pn8.i.i.i = phi i64 [ %302, %302 ], [ %298, %297 ] + %.sroa.0.0.sroa.speculated.i.i.i = call noundef i64 @llvm.umin.i64(i64 %295, i64 %.pn8.i.i.i) + %304 = sub i64 %.sroa.0.0.sroa.speculated.i.i.i, %298 + %305 = getelementptr inbounds nuw i8, ptr %121, i64 64 + call void @_ZN4rope4Rope15chunks_in_range17h24309e1dc9ed5cd9E(ptr noalias noundef nonnull sret([448 x i8]) align 8 captures(none) dereferenceable(448) %3, ptr noalias noundef nonnull readonly align 8 dereferenceable(8) %305, i64 noundef %267, i64 noundef %304), !noalias !28769 + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(448) %290, ptr noundef nonnull align 8 dereferenceable(448) %3, i64 448, i1 false), !noalias !28767 call void @llvm.lifetime.end.p0(i64 448, ptr nonnull %3), !noalias !28769 - %.pre.i158 = load i8, ptr %294, align 8, !range !2148, !alias.scope !28764, !noalias !28767 - %309 = icmp ne i8 %.pre.i158, 2 + %.pre.i158 = load i8, ptr %291, align 8, !range !2148, !alias.scope !28764, !noalias !28767 + %306 = icmp ne i8 %.pre.i158, 2 br label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" -"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit": ; preds = %292, %306 - %310 = phi i1 [ true, %292 ], [ %309, %306 ] - call void @llvm.assume(i1 %310) - %311 = getelementptr inbounds nuw i8, ptr %1, i64 3008 +"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit": ; preds = %289, %303 + %307 = phi i1 [ true, %292 ], [ %306, %306 ] + call void @llvm.assume(i1 %307) + %308 = getelementptr inbounds nuw i8, ptr %1, i64 3008 call void @llvm.experimental.noalias.scope.decl(metadata !28787) - %312 = load ptr, ptr %311, align 8, !alias.scope !28787, !noalias !28790, !noundef !4 - %313 = icmp eq ptr %312, null - br i1 %313, label %314, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" + %309 = load ptr, ptr %308, align 8, !alias.scope !28787, !noalias !28790, !noundef !4 + %310 = icmp eq ptr %309, null + br i1 %310, label %311, label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" "_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge": ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" %.phi.trans.insert = getelementptr inbounds nuw i8, ptr %1, i64 3016 - %.pre212 = load i64, ptr %.phi.trans.insert, align 8 + %.pre213 = load i64, ptr %.phi.trans.insert, align 8 br label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" -314: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" - %315 = call { ptr, i64 } @"_ZN71_$LT$rope..Chunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h5c66813f2a4ee8d2E"(ptr noalias noundef nonnull align 8 dereferenceable(448) %293), !noalias !28787 - %316 = extractvalue { ptr, i64 } %315, 0 - %317 = icmp eq ptr %316, null - br i1 %317, label %318, label %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" +311: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit" + %312 = call { ptr, i64 } @"_ZN71_$LT$rope..Chunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h5c66813f2a4ee8d2E"(ptr noalias noundef nonnull align 8 dereferenceable(448) %290), !noalias !28787 + %313 = extractvalue { ptr, i64 } %312, 0 + %314 = icmp eq ptr %313, null + br i1 %314, label %315, label %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" -318: ; preds = %314 +315: ; preds = %311 call void @_ZN4core6option13unwrap_failed17hba6b08832f9ce30bE(ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.553) #56, !noalias !28787 unreachable -"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i": ; preds = %314 - %319 = extractvalue { ptr, i64 } %315, 1 - store ptr %316, ptr %311, align 8, !alias.scope !28787, !noalias !28790 - %320 = getelementptr inbounds nuw i8, ptr %1, i64 3016 - store i64 %319, ptr %320, align 8, !alias.scope !28787, !noalias !28790 +"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i": ; preds = %311 + %316 = extractvalue { ptr, i64 } %312, 1 + store ptr %313, ptr %308, align 8, !alias.scope !28787, !noalias !28790 + %317 = getelementptr inbounds nuw i8, ptr %1, i64 3016 + store i64 %316, ptr %317, align 8, !alias.scope !28787, !noalias !28790 br label %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" "_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit": ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge", %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" - %321 = phi i64 [ %.pre212, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %319, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] - %322 = phi ptr [ %312, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %316, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] - %323 = getelementptr inbounds nuw i8, ptr %1, i64 3016 - %.sroa.0.0.sroa.speculated.i159 = call noundef i64 @llvm.umin.i64(i64 %321, i64 %.sroa.017.0) - %324 = icmp ne i64 %.sroa.0.0.sroa.speculated.i159, 0 - %325 = icmp ult i64 %.sroa.017.0, %321 - %or.cond = and i1 %325, %324 - br i1 %or.cond, label %326, label %331 - -326: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" - %327 = getelementptr inbounds i8, ptr %322, i64 %.sroa.0.0.sroa.speculated.i159 - %328 = load i8, ptr %327, align 1, !alias.scope !28792, !noalias !28795, !noundef !4 - %329 = icmp sgt i8 %328, -65 - br i1 %329, label %331, label %330 - -330: ; preds = %326 - call void @_ZN4core3str16slice_error_fail17h402ef64b20c243efE(ptr noalias noundef nonnull readonly align 1 %322, i64 noundef %321, i64 noundef 0, i64 noundef %.sroa.0.0.sroa.speculated.i159, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.447) #56 - unreachable - -331: ; preds = %326, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" - %332 = sub nuw i64 %321, %.sroa.0.0.sroa.speculated.i159 - %333 = getelementptr inbounds i8, ptr %322, i64 %.sroa.0.0.sroa.speculated.i159 - store ptr %333, ptr %311, align 8 - store i64 %332, ptr %323, align 8 - br i1 %325, label %335, label %334 - -334: ; preds = %331 - store ptr null, ptr %311, align 8 - br label %335 - -335: ; preds = %331, %334 - %336 = load i64, ptr %29, align 8, !noundef !4 - %337 = add i64 %336, %.sroa.0.0.sroa.speculated.i159 - store i64 %337, ptr %29, align 8 - %338 = getelementptr inbounds nuw i8, ptr %1, i64 3056 - %339 = load i64, ptr %338, align 8, !noundef !4 - %340 = icmp eq i64 %339, 0 - br i1 %340, label %351, label %341 - -341: ; preds = %335 - %342 = load ptr, ptr %39, align 8, !noundef !4 - %343 = icmp ne ptr %342, null - %344 = load i64, ptr %40, align 8 - %.sroa.582.0 = select i1 %343, i64 %339, i64 0 - %.sroa.081.sroa.6.0 = zext i1 %343 to i64 - %.sroa.081.sroa.5.sroa.6.0 = select i1 %343, i64 %344, i64 undef + %318 = phi i64 [ %.pre213, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %316, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] + %319 = phi ptr [ %309, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17ha9c9ed6ab2bf31ffE.exit._ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit_crit_edge" ], [ %313, %"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next28_$u7b$$u7b$closure$u7d$$u7d$17h0972dd3c35e3455aE.exit.i" ] + %320 = getelementptr inbounds nuw i8, ptr %1, i64 3016 + %.sroa.0.0.sroa.speculated.i159 = call noundef i64 @llvm.umin.i64(i64 %318, i64 %.sroa.017.0) + %321 = icmp ne i64 %.sroa.0.0.sroa.speculated.i159, 0 + %322 = icmp ult i64 %.sroa.017.0, %318 + %or.cond = and i1 %322, %321 + br i1 %or.cond, label %323, label %328 + +323: ; preds = %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" + %324 = getelementptr inbounds i8, ptr %319, i64 %.sroa.0.0.sroa.speculated.i159 + %325 = load i8, ptr %324, align 1, !alias.scope !28792, !noalias !28795, !noundef !4 + %326 = icmp sgt i8 %325, -65 + br i1 %326, label %328, label %327 + +327: ; preds = %323 + call void @_ZN4core3str16slice_error_fail17h402ef64b20c243efE(ptr noalias noundef nonnull readonly align 1 %319, i64 noundef %318, i64 noundef 0, i64 noundef %.sroa.0.0.sroa.speculated.i159, ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.447) #56 + unreachable + +328: ; preds = %323, %"_ZN4core6option15Option$LT$T$GT$18get_or_insert_with17h7a2fbd32c9d41986E.exit" + %329 = sub nuw i64 %318, %.sroa.0.0.sroa.speculated.i159 + %330 = getelementptr inbounds i8, ptr %319, i64 %.sroa.0.0.sroa.speculated.i159 + store ptr %330, ptr %308, align 8 + store i64 %329, ptr %320, align 8 + br i1 %322, label %332, label %331 + +331: ; preds = %328 + store ptr null, ptr %308, align 8 + br label %332 + +332: ; preds = %328, %331 + %333 = load i64, ptr %29, align 8, !noundef !4 + %334 = add i64 %333, %.sroa.0.0.sroa.speculated.i159 + store i64 %334, ptr %29, align 8 + %335 = getelementptr inbounds nuw i8, ptr %1, i64 3056 + %336 = load i64, ptr %335, align 8, !noundef !4 + %337 = icmp eq i64 %336, 0 + br i1 %337, label %348, label %338 + +338: ; preds = %332 + %339 = load ptr, ptr %39, align 8, !noundef !4 + %340 = icmp ne ptr %339, null + %341 = load i64, ptr %40, align 8 + %.sroa.582.0 = select i1 %340, i64 %336, i64 0 + %.sroa.081.sroa.6.0 = zext i1 %340 to i64 + %.sroa.081.sroa.5.sroa.6.0 = select i1 %340, i64 %341, i64 undef call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %15) store i64 %.sroa.081.sroa.6.0, ptr %15, align 8 %.sroa.083.sroa.2.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 8 store ptr null, ptr %.sroa.083.sroa.2.0..sroa_idx, align 8 %.sroa.083.sroa.2.sroa.2.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 16 - store ptr %342, ptr %.sroa.083.sroa.2.sroa.2.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx, align 8 + store ptr %339, ptr %.sroa.083.sroa.2.sroa.2.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx, align 8 %.sroa.083.sroa.2.sroa.3.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 24 store i64 %.sroa.081.sroa.5.sroa.6.0, ptr %.sroa.083.sroa.2.sroa.3.0..sroa.083.sroa.2.0..sroa_idx.sroa_idx, align 8 %.sroa.083.sroa.3.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 32 @@ -100029,59 +100029,59 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %.sroa.083.sroa.4.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 40 store ptr null, ptr %.sroa.083.sroa.4.0..sroa_idx, align 8 %.sroa.083.sroa.4.sroa.2.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 48 - store ptr %342, ptr %.sroa.083.sroa.4.sroa.2.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx, align 8 + store ptr %339, ptr %.sroa.083.sroa.4.sroa.2.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx, align 8 %.sroa.083.sroa.4.sroa.3.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 56 store i64 %.sroa.081.sroa.5.sroa.6.0, ptr %.sroa.083.sroa.4.sroa.3.0..sroa.083.sroa.4.0..sroa_idx.sroa_idx, align 8 %.sroa.284.0..sroa_idx = getelementptr inbounds nuw i8, ptr %15, i64 64 store i64 %.sroa.582.0, ptr %.sroa.284.0..sroa_idx, align 8 - %345 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) - %346 = extractvalue { ptr, ptr } %345, 0 - %347 = icmp eq ptr %346, null - %348 = extractvalue { ptr, ptr } %345, 1 - %349 = icmp eq ptr %348, null - %350 = select i1 %347, i1 true, i1 %349 - br i1 %350, label %._crit_edge, label %.lr.ph - -.lr.ph: ; preds = %341 + %342 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) + %343 = extractvalue { ptr, ptr } %342, 0 + %344 = icmp eq ptr %343, null + %345 = extractvalue { ptr, ptr } %342, 1 + %346 = icmp eq ptr %345, null + %347 = select i1 %344, i1 true, i1 %346 + br i1 %347, label %._crit_edge, label %.lr.ph + +.lr.ph: ; preds = %338 %.sroa.5180.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 20 %.sroa.6182.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 28 %.sroa.8184.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 48 %.sroa.9185.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 56 %.sroa.11.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 84 %.sroa.13188.0..sroa_idx = getelementptr inbounds nuw i8, ptr %17, i64 108 - br label %358 - -351: ; preds = %335, %._crit_edge - %352 = getelementptr inbounds nuw i8, ptr %25, i64 16 - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %352, ptr noundef nonnull align 4 dereferenceable(112) %17, i64 112, i1 false) - %353 = getelementptr inbounds nuw i8, ptr %25, i64 152 - store ptr %322, ptr %353, align 8 - %354 = getelementptr inbounds nuw i8, ptr %25, i64 160 - store i64 %.sroa.0.0.sroa.speculated.i159, ptr %354, align 8 + br label %355 + +348: ; preds = %332, %._crit_edge + %349 = getelementptr inbounds nuw i8, ptr %25, i64 16 + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(112) %349, ptr noundef nonnull align 4 dereferenceable(112) %17, i64 112, i1 false) + %350 = getelementptr inbounds nuw i8, ptr %25, i64 152 + store ptr %319, ptr %350, align 8 + %351 = getelementptr inbounds nuw i8, ptr %25, i64 160 + store i64 %.sroa.0.0.sroa.speculated.i159, ptr %351, align 8 store i32 0, ptr %25, align 8 - %355 = getelementptr inbounds nuw i8, ptr %25, i64 8 - store i32 0, ptr %355, align 8 - %356 = getelementptr inbounds nuw i8, ptr %25, i64 168 - store i8 0, ptr %356, align 8 - %357 = getelementptr inbounds nuw i8, ptr %25, i64 169 - store i8 0, ptr %357, align 1 + %352 = getelementptr inbounds nuw i8, ptr %25, i64 8 + store i32 0, ptr %352, align 8 + %353 = getelementptr inbounds nuw i8, ptr %25, i64 168 + store i8 0, ptr %353, align 8 + %354 = getelementptr inbounds nuw i8, ptr %25, i64 169 + store i8 0, ptr %354, align 1 %.sroa.1.0..sroa_idx = getelementptr inbounds nuw i8, ptr %25, i64 144 store i8 2, ptr %.sroa.1.0..sroa_idx, align 8 call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %17) - br label %253 + br label %250 -._crit_edge: ; preds = %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit", %341 +._crit_edge: ; preds = %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit", %338 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %15) - br label %351 + br label %348 -358: ; preds = %.lr.ph, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" - %359 = phi ptr [ %348, %.lr.ph ], [ %366, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" ] +355: ; preds = %.lr.ph, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" + %356 = phi ptr [ %345, %.lr.ph ], [ %363, %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" ] call void @llvm.experimental.noalias.scope.decl(metadata !28797) - %360 = load i32, ptr %17, align 4, !range !4664, !alias.scope !28800, !noalias !28797, !noundef !4 - %361 = icmp eq i32 %360, 2 - br i1 %361, label %362, label %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" + %357 = load i32, ptr %17, align 4, !range !4664, !alias.scope !28800, !noalias !28797, !noundef !4 + %358 = icmp eq i32 %357, 2 + br i1 %358, label %359, label %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" -362: ; preds = %358 +359: ; preds = %355 store i32 0, ptr %17, align 4, !alias.scope !28802 store i32 0, ptr %.sroa.5180.0..sroa_idx, align 4, !alias.scope !28802 store i32 0, ptr %.sroa.6182.0..sroa_idx, align 4, !alias.scope !28802 @@ -100091,77 +100091,77 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ store i8 3, ptr %.sroa.13188.0..sroa_idx, align 4, !alias.scope !28802 br label %"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit" -"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit": ; preds = %358, %362 +"_ZN4core6option15Option$LT$T$GT$13get_or_insert17h0e44c9d8c3abfa2cE.exit": ; preds = %355, %359 call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %14) - call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %14, ptr noundef nonnull align 4 dereferenceable(112) %359, i64 112, i1 false) + call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(112) %14, ptr noundef nonnull align 4 dereferenceable(112) %356, i64 112, i1 false) call void @_ZN4gpui5style14HighlightStyle9highlight17h1cc9a839e4fef7abE(ptr noalias noundef nonnull align 4 dereferenceable(112) %17, ptr noalias noundef nonnull align 4 captures(none) dereferenceable(112) %14) call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %14) - %363 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) - %364 = extractvalue { ptr, ptr } %363, 0 - %365 = icmp eq ptr %364, null - %366 = extractvalue { ptr, ptr } %363, 1 - %367 = icmp eq ptr %366, null - %368 = select i1 %365, i1 true, i1 %367 - br i1 %368, label %._crit_edge, label %358 - -369: ; preds = %374 + %360 = call { ptr, ptr } @"_ZN108_$LT$alloc..collections..btree..map..Iter$LT$K$C$V$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h2a6068d77391cc47E"(ptr noalias noundef nonnull align 8 dereferenceable(72) %15) + %361 = extractvalue { ptr, ptr } %360, 0 + %362 = icmp eq ptr %361, null + %363 = extractvalue { ptr, ptr } %360, 1 + %364 = icmp eq ptr %363, null + %365 = select i1 %362, i1 true, i1 %364 + br i1 %365, label %._crit_edge, label %355 + +366: ; preds = %371 call void @llvm.experimental.noalias.scope.decl(metadata !28803) call void @llvm.experimental.noalias.scope.decl(metadata !28806) call void @llvm.experimental.noalias.scope.decl(metadata !28809) - %370 = load ptr, ptr %376, align 8, !alias.scope !28812, !nonnull !4, !noundef !4 - %371 = atomicrmw sub ptr %370, i64 1 release, align 8, !noalias !28812 - %372 = icmp eq i64 %371, 1 - br i1 %372, label %373, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" + %367 = load ptr, ptr %373, align 8, !alias.scope !28812, !nonnull !4, !noundef !4 + %368 = atomicrmw sub ptr %367, i64 1 release, align 8, !noalias !28812 + %369 = icmp eq i64 %368, 1 + br i1 %369, label %370, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" -373: ; preds = %369 +370: ; preds = %366 fence acquire - invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %376) - to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %262 + invoke void @"_ZN5alloc4sync16Arc$LT$T$C$A$GT$9drop_slow17h1c01a3672a49775bE"(ptr noalias noundef nonnull align 8 dereferenceable(24) %373) + to label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146" unwind label %259 -374: ; preds = %253, %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit" - %375 = landingpad { ptr, i32 } +371: ; preds = %250, %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit" + %372 = landingpad { ptr, i32 } cleanup call void @llvm.experimental.noalias.scope.decl(metadata !28817) - %376 = getelementptr inbounds nuw i8, ptr %25, i64 128 + %373 = getelementptr inbounds nuw i8, ptr %25, i64 128 call void @llvm.experimental.noalias.scope.decl(metadata !28818) - %377 = getelementptr inbounds nuw i8, ptr %25, i64 144 - %378 = load i8, ptr %377, align 8, !range !2148, !alias.scope !28819, !noundef !4 - %379 = icmp eq i8 %378, 2 - br i1 %379, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %369 + %374 = getelementptr inbounds nuw i8, ptr %25, i64 144 + %375 = load i8, ptr %374, align 8, !range !2148, !alias.scope !28819, !noundef !4 + %376 = icmp eq i8 %375, 2 + br i1 %376, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %366 -380: ; preds = %257, %.noexc151 - %.pn8.i147 = phi i64 [ %260, %257 ], [ %256, %.noexc151 ] - %381 = load i64, ptr %29, align 8, !noundef !4 - %382 = icmp eq i64 %381, %.pn8.i147 - br i1 %382, label %383, label %391 - -383: ; preds = %380 - %384 = getelementptr inbounds nuw i8, ptr %1, i64 2992 - %385 = load i8, ptr %384, align 8, !range !2148, !alias.scope !28820, !noundef !4 - %386 = icmp eq i8 %385, 2 - br i1 %386, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %387 +377: ; preds = %254, %.noexc151 + %.pn8.i147 = phi i64 [ %257, %257 ], [ %253, %.noexc151 ] + %378 = load i64, ptr %29, align 8, !noundef !4 + %379 = icmp eq i64 %378, %.pn8.i147 + br i1 %379, label %380, label %388 -387: ; preds = %383 - %388 = getelementptr inbounds nuw i8, ptr %1, i64 2576 - %389 = load i32, ptr %388, align 8, !alias.scope !28823, !noundef !4 - %.not.i.i.i.i.i = icmp eq i32 %389, 0 - br i1 %.not.i.i.i.i.i, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %390 - -390: ; preds = %387 - store i32 0, ptr %388, align 8, !alias.scope !28836 +380: ; preds = %377 + %381 = getelementptr inbounds nuw i8, ptr %1, i64 2992 + %382 = load i8, ptr %381, align 8, !range !2148, !alias.scope !28820, !noundef !4 + %383 = icmp eq i8 %382, 2 + br i1 %383, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %384 + +384: ; preds = %380 + %385 = getelementptr inbounds nuw i8, ptr %1, i64 2576 + %386 = load i32, ptr %385, align 8, !alias.scope !28823, !noundef !4 + %.not.i.i.i.i.i = icmp eq i32 %386, 0 + br i1 %.not.i.i.i.i.i, label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", label %387 + +387: ; preds = %384 + store i32 0, ptr %385, align 8, !alias.scope !28836 br label %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit" -391: ; preds = %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", %380 +388: ; preds = %"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit", %377 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %0, ptr noundef nonnull align 8 dereferenceable(176) %25, i64 176, i1 false) call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %25) - br label %392 + br label %389 -"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit": ; preds = %390, %387, %383 - store i8 2, ptr %384, align 8 +"_ZN4core3ptr61drop_in_place$LT$core..option..Option$LT$rope..Chunks$GT$$GT$17h73a3c01c07047aa9E.exit": ; preds = %387, %384, %380 + store i8 2, ptr %381, align 8 invoke void @"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$14search_forward17hcdbe42ac17918dbdE"(ptr noalias noundef nonnull align 8 dereferenceable(552) %61, ptr noalias noundef nonnull readonly align 1 inttoptr (i64 1 to ptr), ptr noalias noundef readonly align 8 dereferenceable(24) @anon.f181a984f624d3ac5643ba2a53eda325.550) - to label %391 unwind label %374 + to label %391 unwind label %371 -392: ; preds = %391, %124, %45 +389: ; preds = %388, %124, %45 ret void }