diff --git a/bench/abc/optimized/extraUtilMisc.ll b/bench/abc/optimized/extraUtilMisc.ll index f8b3cd5feac..d920766579b 100644 --- a/bench/abc/optimized/extraUtilMisc.ll +++ b/bench/abc/optimized/extraUtilMisc.ll @@ -4383,13 +4383,13 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a .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,12 +4449,13 @@ 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 89: ; preds = %28 - %90 = icmp eq i64 %.01620.i, %88 + %90 = icmp eq i64 %.01620.i, %89 br i1 %90, label %Extra_Truth6MinimumRoundMany.exit, label %26 91: ; preds = %1 @@ -4471,14 +4472,14 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a 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 ] + %.01521.i12 = phi i32 [ 0, %93 ], [ %95, %95 ] + %.01620.i13 = phi i64 [ %93, %93 ], [ %158, %95 ] 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 ] + %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 ] %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 @@ -4538,12 +4539,13 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a %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 %157, label %96, !llvm.loop !99 157: ; preds = %96 - %158 = icmp eq i64 %.01620.i13, %156 + %158 = icmp eq i64 %.01620.i13, %158 br i1 %158, label %Extra_Truth6MinimumRoundMany.exit, label %94 159: ; preds = %222 @@ -4552,14 +4554,14 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a 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 ] + %.01521.i22 = phi i32 [ %160, %161 ], [ 0, %92 ] + %.01620.i23 = phi i64 [ %224, %161 ], [ %0, %92 ] 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 ] + %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 ] %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 @@ -4586,7 +4588,7 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a %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) + %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 @@ -4619,16 +4621,17 @@ define noundef i64 @Extra_Truth6MinimumHeuristic(i64 noundef %0) local_unnamed_a %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 %222, label %161, !llvm.loop !99 222: ; preds = %161 - %223 = icmp eq i64 %.01620.i23, %221 + %223 = icmp eq i64 %.01620.i23, %224 br i1 %223, label %Extra_Truth6MinimumRoundMany.exit30, label %159 Extra_Truth6MinimumRoundMany.exit30: ; preds = %159, %222 - %.lcssa.lcssa.i29 = phi i64 [ %.01620.i23, %222 ], [ %221, %159 ] + %.lcssa.lcssa.i29 = phi i64 [ %.01620.i23, %225 ], [ %224, %161 ] %224 = xor i64 %0, -1 br label %.preheader.i31 @@ -4638,14 +4641,14 @@ Extra_Truth6MinimumRoundMany.exit30: ; preds = %159, %222 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 ] + %.01521.i32 = phi i32 [ 0, %Extra_Truth6MinimumRoundMany.exit30 ], [ %226, %228 ] + %.01620.i33 = phi i64 [ %224, %Extra_Truth6MinimumRoundMany.exit30 ], [ %291, %228 ] 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 ] + %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 ] %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 @@ -4674,52 +4677,53 @@ Extra_Truth6MinimumRoundMany.exit30: ; preds = %159, %222 %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 %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, %228 + %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 288: ; preds = %227 - %289 = icmp eq i64 %.01620.i33, %287 + %289 = icmp eq i64 %.01620.i33, %291 br i1 %289, label %Extra_Truth6MinimumRoundMany.exit40, label %225 Extra_Truth6MinimumRoundMany.exit40: ; preds = %225, %288 - %.lcssa.lcssa.i39 = phi i64 [ %.01620.i33, %288 ], [ %287, %225 ] + %.lcssa.lcssa.i39 = phi i64 [ %.01620.i33, %292 ], [ %291, %228 ] %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 = %157, %94, %89, %26, %Extra_Truth6MinimumRoundMany.exit40 - %.0 = phi i64 [ %290, %Extra_Truth6MinimumRoundMany.exit40 ], [ %88, %26 ], [ %.01620.i, %89 ], [ %156, %94 ], [ %.01620.i13, %157 ] + %.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 e01d7fd9633..cfe70ea660b 100644 --- a/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll +++ b/bench/abseil-cpp/optimized/damerau_levenshtein_distance.ll @@ -39,27 +39,29 @@ define dso_local noundef zeroext i8 @_ZN4absl16strings_internal32CappedDamerauLe br label %115 .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 %20 = getelementptr inbounds nuw i8, ptr %6, i64 %12 - br label %.lr.ph.i + %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 = %.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 ] +.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 %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 +.lr.ph96: ; preds = %.lr.ph.i, %20 %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 + %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 @@ -75,12 +77,12 @@ define dso_local noundef zeroext i8 @_ZN4absl16strings_internal32CappedDamerauLe 33: ; preds = %.lr.ph96, %._crit_edge %.05795 = phi i64 [ 1, %.lr.ph96 ], [ %79, %._crit_edge ] - %34 = icmp ugt i64 %.05795, %26 + %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, %26 + %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 @@ -92,7 +94,7 @@ define dso_local noundef zeroext i8 @_ZN4absl16strings_internal32CappedDamerauLe br label %42 42: ; preds = %40, %36 - %.058 = phi i64 [ %37, %36 ], [ 1, %40 ] + %.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 @@ -105,7 +107,7 @@ define dso_local noundef zeroext i8 @_ZN4absl16strings_internal32CappedDamerauLe br label %49 49: ; preds = %42, %45 - %.059 = phi i64 [ %43, %45 ], [ %.sroa.0.0, %42 ] + %.059 = phi i64 [ %43, %47 ], [ %.sroa.0.0, %44 ] %.not6492 = icmp ugt i64 %.058, %.059 br i1 %.not6492, label %._crit_edge, label %.lr.ph @@ -168,9 +170,9 @@ _ZSt3minIhET_St16initializer_listIS0_E.exit.us: ; preds = %.lr.ph.i.i.us 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 + %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 [ %114, %_ZSt3minIhET_St16initializer_listIS0_E.exit ], [ %.058, %.lr.ph ] @@ -210,7 +212,7 @@ _ZSt3minIhET_St16initializer_listIS0_E.exit.us: ; preds = %.lr.ph.i.i.us br label %107 107: ; preds = %103, %100, %95, %.lr.ph.split - %.056 = phi i8 [ %106, %103 ], [ %8, %100 ], [ %8, %95 ], [ %8, %.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 %82, ptr %.ptr91, align 1, !tbaa !4 @@ -220,9 +222,9 @@ _ZSt3minIhET_St16initializer_listIS0_E.exit.us: ; preds = %.lr.ph.i.i.us 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 ] + %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 %109 = load i8, ptr %.ptr, align 1, !tbaa !4 %110 = icmp ult i8 %109, %108 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..8abb640e736 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 @@ -753,9 +754,17 @@ 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 + %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 @@ -763,16 +772,16 @@ define hidden { i64, i8 } @_ZN5uu_wc4utf810Incomplete20try_complete_offsets17h99 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" +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 %19, label %20 -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 ] +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 ], [ %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) @@ -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..e35807ded3d 100644 --- a/bench/darktable/optimized/Cr2Decompressor.ll +++ b/bench/darktable/optimized/Cr2Decompressor.ll @@ -900,25 +900,27 @@ _ZSteqIJiiiEJiiiEEbRKSt5tupleIJDpT_EERKS0_IJDpT0_EE.exit60.thread: ; preds = %_Z _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 @@ -931,16 +933,16 @@ _ZN8rawspeed21Cr2OutputTileIteratorppEv.exit: ; preds = %_ZN8rawspeed12_GLOB %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 + %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 %197 + %.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 = %192 +.loopexit: ; preds = %195 br i1 %.sroa.14.0217, label %.loopexit.thread, label %.invoke269 207: ; preds = %.invoke269 @@ -975,7 +977,7 @@ _ZN8rawspeed21Cr2OutputTileIteratorppEv.exit: ; preds = %_ZN8rawspeed12_GLOB 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 ] + %.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 diff --git a/bench/darktable/optimized/PanasonicV4Decompressor.ll b/bench/darktable/optimized/PanasonicV4Decompressor.ll index fe2369220b4..3552c4c7520 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,79 +384,88 @@ _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 + %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 + 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 + %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 + 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 + %.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 %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 %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 - %69 = add i32 %61, %.0 + %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 %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 - %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 - -73: ; preds = %47 - store ptr %65, ptr %48, align 8 - %.sroa.5.0..sroa_idx.i = getelementptr inbounds nuw i8, ptr %48, i64 8 + %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 + +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 %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 + %.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 %48, i64 32 + %.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 br label %_ZNSt20back_insert_iteratorISt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS3_EEEaSEOS3_.exit.i -76: ; preds = %47 +76: ; preds = %"_ZZN8rawspeed23PanasonicV4Decompressor19chopInputIntoBlocksEvENK3$_0clEv.exit.i" %77 = load ptr, ptr %25, align 8, !tbaa !111 - %78 = ptrtoint ptr %48 to i64 + %78 = ptrtoint ptr %74 to i64 %79 = ptrtoint ptr %77 to i64 %80 = sub i64 %78, %79 %81 = icmp eq i64 %80, 9223372036854775800 @@ -478,7 +487,7 @@ _ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEm %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 + 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 @@ -487,7 +496,7 @@ _ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEm 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 + %.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 @@ -496,7 +505,7 @@ _ZNKSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE12_M_check_lenEm 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 + %.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 @@ -517,15 +526,15 @@ _ZNSt6vectorIN8rawspeed23PanasonicV4Decompressor5BlockESaIS2_EE17_M_realloc_inse 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 + %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 %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 + %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 diff --git a/bench/duckdb/optimized/format.ll b/bench/duckdb/optimized/format.ll index 6d7fbe55455..fcd715e2f0b 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 ] + %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 53fc1310a9e..30443f0c05b 100644 --- a/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll +++ b/bench/harfbuzz/optimized/hb-subset-instancer-iup.ll @@ -1249,9 +1249,9 @@ _ZN11hb_vector_tI15contour_point_tLb0EE5allocEjb.exit.i.i: ; preds = %490 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 ] + %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 [ %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 diff --git a/bench/icu/optimized/alphaindex.ll b/bench/icu/optimized/alphaindex.ll index c6846104bcc..b78865378e5 100644 --- a/bench/icu/optimized/alphaindex.ll +++ b/bench/icu/optimized/alphaindex.ll @@ -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 } @@ -2985,16 +2985,19 @@ _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 @@ -3007,7 +3010,7 @@ _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i: ; preds = %.sink %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 + 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 = %187 %191 = getelementptr inbounds nuw i8, ptr %.076, i64 8 @@ -3025,18 +3028,21 @@ _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit.i: ; preds = %.sink %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 ] + %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 + %.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 @@ -3049,8 +3055,8 @@ _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 ] +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 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %5) #16 @@ -3088,10 +3094,10 @@ _ZNK6icu_7713UnicodeString21compareCodePointOrderERKS0_.exit28.i: ; preds = %.si 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 ] + %.sroa.0.10 = phi ptr [ null, %224 ], [ null, %223 ], [ %.sroa.0.1, %216 ], [ null, %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 %225 unwind label %223 + to label %229 unwind label %223 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 ] @@ -3100,7 +3106,7 @@ _ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1 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 ] + %.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 ] %226 = icmp eq ptr %.sroa.0.3, null br i1 %226, label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117, label %227 @@ -3108,7 +3114,7 @@ _ZN6icu_7712_GLOBAL__N_111ownedStringERKNS_13UnicodeStringERNS_12LocalPointerIS1 %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 + 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 @@ -3117,8 +3123,8 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %225, %227 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 ] + %.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 ], [ %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 @@ -3126,7 +3132,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %225, %227 %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 + call void %241(ptr noundef nonnull align 8 dereferenceable(64) %.sroa.0.2) #16 br label %_ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit118 .critedge: ; preds = %36 @@ -3146,10 +3152,10 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %225, %227 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 ] + %247 = phi i32 [ %259, %262 ], [ %241, %243 ] + %.064157 = phi i32 [ %.1, %262 ], [ 0, %243 ] + %.065156 = phi i32 [ %.166, %262 ], [ -1, %243 ] + %.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 @@ -3175,9 +3181,9 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %225, %227 br label %258 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 ] + %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 @@ -3190,7 +3196,7 @@ _ZN6icu_7712LocalPointerINS_13UnicodeStringEED2Ev.exit117: ; preds = %225, %227 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 ] + %.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 @@ -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..934d8d5909f 100644 --- a/bench/icu/optimized/collationsets.ll +++ b/bench/icu/optimized/collationsets.ll @@ -815,18 +815,21 @@ _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 + %72 = icmp slt i8 %73, 0 br i1 %72, label %73, label %78 73: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit @@ -841,7 +844,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %.sink.split.i.i.i br label %98 78: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit - %.0.i.i44 = phi i8 [ %53, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit.thread ], [ %71, %_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 @@ -881,8 +884,8 @@ _ZN6icu_7711TailoredSet9setPrefixERKNS_13UnicodeStringE.exit: ; preds = %.noexc3 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 ] + %.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 97: ; preds = %43 @@ -1113,15 +1116,18 @@ _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 @@ -1135,7 +1141,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %.sink.split.i.i.i .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 + to label %80 unwind label %87 78: ; preds = %.noexc37 %79 = load i16, ptr %48, align 8, !tbaa !57 @@ -1211,8 +1217,8 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 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 ] + %.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 @@ -1220,7 +1226,7 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 %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 + to label %112 unwind label %89 110: ; preds = %107 store ptr null, ptr %24, align 8, !tbaa !60 @@ -1236,7 +1242,7 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 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 ] + %.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 %112 @@ -1247,13 +1253,13 @@ _ZN6icu_7711TailoredSet9addSuffixEiRKNS_13UnicodeStringE.exit42: ; preds = %_ZN6 br label %113 113: ; preds = %112, %35 - %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %112 ], [ %36, %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 114: ; preds = %113, %32 - %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %113 ], [ %33, %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..a7d7e7ac01a 100644 --- a/bench/icu/optimized/dtptngen.ll +++ b/bench/icu/optimized/dtptngen.ll @@ -9082,7 +9082,7 @@ _ZNK6icu_7710PatternMap9getHeaderEDs.exit: ; preds = %_ZNK6icu_7713Unicod 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 ] + %.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 @@ -9109,18 +9109,21 @@ _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 ] + %.0.i.i13 = phi i8 [ %34, %31 ], [ %53, %.sink.split.i.i.i ] %52 = icmp eq i8 %.0.i.i13, 0 br i1 %52, label %53, label %57 @@ -9138,7 +9141,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %31, %.sink.split.i. 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 ] + %.010 = phi ptr [ %56, %55 ], [ null, %_ZNK6icu_7710PatternMap9getHeaderEDs.exit ], [ null, %20 ], [ null, %3 ], [ null, %59 ] ret ptr %.010 } @@ -9453,18 +9456,21 @@ _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 ] + %.0.i.i.i = phi i8 [ %92, %89 ], [ %111, %.sink.split.i.i.i.i ] %110 = icmp eq i8 %.0.i.i.i, 0 br i1 %110, label %.preheader.i, label %.thread.i @@ -9480,13 +9486,13 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit.i: ; preds = %.sink.split.i.i.i.i br i1 %exitcond.not.i, label %_ZN6icu_7710PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE.exit, label %115, !llvm.loop !161 115: ; preds = %114, %.preheader.i - %indvars.iv.i = phi i64 [ 0, %.preheader.i ], [ %indvars.iv.next.i, %114 ] + %indvars.iv.i = phi i64 [ 0, %.preheader.i ], [ %indvars.iv.next.i, %116 ] %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 %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 @@ -9537,33 +9543,33 @@ _ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89: ; preds = %12 %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 - -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 +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 -.thread120: ; preds = %136 +.thread120: ; 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 + +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 + +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 + %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 +153: ; preds = %151, %148 store ptr %138, ptr %137, align 8, !tbaa !55 br i1 %139, label %154, label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 @@ -9571,11 +9577,11 @@ _ZN6icu_7712LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode.exit89: ; preds = %12 store i32 7, ptr %5, align 4, !tbaa !13 br label %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90.thread -155: ; preds = %141 +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 %158(ptr noundef nonnull align 8 dereferenceable(137) %138) #35 + 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 = %153, %155 @@ -9590,7 +9596,7 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R %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 %166(ptr noundef nonnull align 8 dereferenceable(160) %126) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit .critedge85: ; preds = %_ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode.exit90 @@ -9604,7 +9610,7 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R %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 + tail call void %173(ptr noundef nonnull align 8 dereferenceable(160) %166) #35 br label %_ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92 _ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit92: ; preds = %168, %.critedge85 @@ -9615,7 +9621,7 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R %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 + 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 = %114 @@ -9635,14 +9641,14 @@ _ZN6icu_7712LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R %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 + 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 ret void _ZN6icu_7712LocalPointerINS_7PtnElemEED2Ev.exit: ; preds = %134, %160, %40, %66 - %.pn80.pn = phi { ptr, i32 } [ %41, %40 ], [ %67, %66 ], [ %135, %134 ], [ %161, %160 ] + %.pn80.pn = phi { ptr, i32 } [ %41, %40 ], [ %67, %66 ], [ %135, %136 ], [ %161, %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,18 +11394,21 @@ 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 ] + %.0.i.i = phi i8 [ %17, %14 ], [ %36, %.sink.split.i.i.i ] %35 = icmp eq i8 %.0.i.i, 0 br i1 %35, label %.preheader, label %.thread @@ -11415,22 +11424,22 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %14, %.sink.split.i. br i1 %exitcond.not, label %.loopexit, label %40, !llvm.loop !161 40: ; preds = %.preheader, %39 - %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %39 ] + %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %41 ] %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 %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 ] + %.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..5d8d63e4cfa 100644 --- a/bench/icu/optimized/filteredbrk.ll +++ b/bench/icu/optimized/filteredbrk.ll @@ -2561,18 +2561,21 @@ 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 ] + %.0.i.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i.i ] %30 = sext i8 %.0.i.i to i32 ret i32 %30 } @@ -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..7cb15ea3055 100644 --- a/bench/icu/optimized/number_longnames.ll +++ b/bench/icu/optimized/number_longnames.ll @@ -3589,18 +3589,21 @@ _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 ] + %.0.i.i = phi i8 [ %113, %110 ], [ %133, %.sink.split.i.i.i ] %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 @@ -3617,14 +3620,14 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %110, %.sink.split.i br label %.body33 .body33: ; preds = %105, %134 - %.pn = phi { ptr, i32 } [ %135, %134 ], [ %106, %105 ] + %.pn = phi { ptr, i32 } [ %135, %136 ], [ %106, %105 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #21 br label %.body30 136: ; 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 + to label %142 unwind label %138 138: ; preds = %174, %136 %139 = landingpad { ptr, i32 } @@ -3656,7 +3659,7 @@ _ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38: ; preds = %140 %149 = trunc i16 %145 to i8 %150 = and i8 %149, 1 %151 = xor i8 %150, 1 - br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit46 + br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 .sink.split.i.i.i41: ; preds = %_ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38 %152 = icmp slt i16 %146, 0 @@ -3672,24 +3675,27 @@ _ZN6icu_7713UnicodeStringC2IA9_DsvEERKT_.exit38: ; preds = %140 %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 + %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 + %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 %171, label %174 -171: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit46 +171: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit47 store i8 1, ptr %17, align 1, !tbaa !91 br label %176 @@ -3700,14 +3706,14 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit46: ; preds = %148, %.sink.split.i br label %.body36 .body36: ; preds = %143, %172 - %.pn18 = phi { ptr, i32 } [ %173, %172 ], [ %144, %143 ] + %.pn18 = phi { ptr, i32 } [ %173, %176 ], [ %144, %145 ] call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #21 br label %.body30 -174: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit46 +174: ; 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 + to label %180 unwind label %138 176: ; preds = %171, %174, %99 call void @_ZN6icu_7713UnicodeStringD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %13) #21 @@ -3725,7 +3731,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit46: ; preds = %148, %.sink.split.i ret void .body30: ; preds = %.body33, %138, %.body36, %98 - %.pn20.pn = phi { ptr, i32 } [ %.pn10.i29, %98 ], [ %139, %138 ], [ %.pn18, %.body36 ], [ %.pn, %.body33 ] + %.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 @@ -3742,24 +3748,24 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit46: ; preds = %148, %.sink.split.i br label %179 179: ; preds = %178, %40 - %.pn20.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn, %178 ], [ %41, %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 180: ; preds = %179, %38 - %.pn20.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn, %179 ], [ %39, %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 181: ; preds = %180, %36 - %.pn20.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn20.pn.pn.pn.pn.pn, %180 ], [ %37, %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 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 ] + %.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..8174ebf2b74 100644 --- a/bench/icu/optimized/plurfmt.ll +++ b/bench/icu/optimized/plurfmt.ll @@ -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 @@ -2321,7 +2321,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat 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 %170 + br label %178 51: ; preds = %39 %52 = sext i32 %41 to i64 @@ -2342,11 +2342,11 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712PluralFormat ._crit_edge: ; preds = %58 %.pre114 = sext i32 %59 to i64 - br label %164 + 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,63 +2373,69 @@ 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 %110 + +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 +.sink.split.i.i.i: ; preds = %89 + %95 = icmp slt i16 %91, 0 %96 = load i32, ptr %32, align 4 - %97 = ashr i16 %89, 5 + %97 = ashr i16 %91, 5 %98 = sext i16 %97 to i32 %99 = select i1 %95, i32 %96, i32 %98 - %100 = icmp slt i16 %88, 0 + %100 = icmp slt i16 %90, 0 %101 = load i32, ptr %36, align 4 - %102 = ashr i16 %88, 5 + %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) - %.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) + %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 + %.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 ] +_ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %93, %.sink.split.i.i.i + %.0.i.i = phi i8 [ %96, %93 ], [ %112, %.sink.split.i.i.i ] %109 = icmp eq i8 %.0.i.i, 0 %spec.select = zext i1 %109 to i8 - br label %164 + br label %172 -110: ; preds = %84 +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 @@ -2440,7 +2446,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %91, %.sink.split.i. %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 + 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 @@ -2460,7 +2466,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %91, %.sink.split.i. %123 = trunc i16 %.pre113 to i8 %124 = and i8 %123, 1 %125 = xor i8 %124, 1 - br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83 + br label %_ZNK6icu_7713UnicodeString7compareERKS0_.exit84 .sink.split.i.i.i78: ; preds = %119 %126 = icmp slt i16 %120, 0 @@ -2474,31 +2480,34 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %91, %.sink.split.i. %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 + %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 + %.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 } cleanup call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #18 - br label %170 + br label %178 -.critedge: ; preds = %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge, %117, %110 - %142 = phi i16 [ %.pre112, %_ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge ], [ %.pre113, %117 ], [ %111, %110 ] +.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 @@ -2508,7 +2517,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge: ; preds = % %146 = trunc i16 %145 to i8 %147 = and i8 %146, 1 %148 = xor i8 %147, 1 - br label %163 + br label %171 .sink.split.i.i.i.i86: ; preds = %.critedge %149 = getelementptr inbounds nuw i8, ptr %43, i64 8 @@ -2522,49 +2531,52 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit83..critedge_crit_edge: ; preds = % %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 ] + %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 %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 + %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 + %.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 %.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 + %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 -.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 -171: ; preds = %170, %46 - %.pn.pn = phi { ptr, i32 } [ %.pn, %170 ], [ %47, %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 diff --git a/bench/icu/optimized/rbnf.ll b/bench/icu/optimized/rbnf.ll index 21492d43dcb..0d708c0afa9 100644 --- a/bench/icu/optimized/rbnf.ll +++ b/bench/icu/optimized/rbnf.ll @@ -6021,19 +6021,22 @@ _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 @@ -6060,7 +6063,7 @@ _ZNK6icu_7713UnicodeString10startsWithERKS0_.exit: ; preds = %72, %.noexc24 br label %97 97: ; preds = %95, %93 - %.pn = phi { ptr, i32 } [ %96, %95 ], [ %94, %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 @@ -6156,7 +6159,7 @@ _ZNK6icu_7721RuleBasedNumberFormat11findRuleSetERKNS_13UnicodeStringER10UErrorCo ret void 140: ; preds = %97, %69 - %.pn20.pn = phi { ptr, i32 } [ %.pn20, %69 ], [ %.pn, %97 ] + %.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..9207b08c511 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 ] + %.0.i.i = phi i8 [ %29, %26 ], [ %39, %.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 + br i1 %or.cond35, label %40, label %60 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 %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 + %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 + %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 %59 -59: ; preds = %58 +59: ; preds = %60 %60 = icmp slt i32 %15, %24 - br i1 %60, label %67, label %61 + br i1 %60, label %69, label %61 61: ; preds = %59 - br i1 %39, label %62, label %70 + br i1 %39, label %62, 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 %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..f75efd3e0f1 100644 --- a/bench/icu/optimized/reslist.ll +++ b/bench/icu/optimized/reslist.ll @@ -4241,7 +4241,7 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( ._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 %138 unwind label %16 + to label %140 unwind label %16 31: ; preds = %.lr.ph201, %.thread %.0124200 = phi i32 [ 0, %.lr.ph201 ], [ %.0125.lcssa, %.thread ] @@ -4279,7 +4279,7 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( br label %58 58: ; preds = %.lr.ph197, %135 - %indvars.iv226 = phi i64 [ %57, %.lr.ph197 ], [ %indvars.iv.next227, %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 %61 = load i16, ptr %40, align 8, !tbaa !4 @@ -4310,19 +4310,22 @@ define dso_local void @_ZN7SRBRoot16compactStringsV2EP10UHashtableR10UErrorCode( 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 + %.not = icmp eq i8 %87, 0 br i1 %.not, label %.thread.loopexit, label %86 86: ; preds = %78, %_ZNK6icu_7713UnicodeString8endsWithERKS0_.exit @@ -4387,16 +4390,16 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 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 ] + %.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, %95 ], [ %.pre252.pre-phi, %123 ] - %125 = phi i32 [ %107, %95 ], [ %.pre248, %123 ] - %126 = phi i16 [ %103, %95 ], [ %.pre, %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 @@ -4456,9 +4459,9 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 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 ] + %.0134.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1135, %194 ] + %.0132.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1133, %194 ] + %.0126.lcssa = phi i32 [ 0, %.preheader184 ], [ %.1127, %194 ] %152 = getelementptr inbounds nuw i8, ptr %0, i64 80 %153 = load i16, ptr %152, align 8, !tbaa !4 %154 = and i16 %153, 1 @@ -4466,10 +4469,10 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 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 ] + %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 ] %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 @@ -4500,7 +4503,7 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 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 + to label %184 unwind label %186 182: ; preds = %181 %183 = add nsw i32 %.0126206, 1 @@ -4522,9 +4525,9 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 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 ] + %.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 %155, !llvm.loop !151 @@ -4540,7 +4543,7 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 196: ; preds = %193, %._crit_edge208 %197 = invoke signext i8 @getShowWarning() - to label %198 unwind label %194 + to label %200 unwind label %194 198: ; preds = %196 %.not155 = icmp eq i8 %197, 0 @@ -4564,7 +4567,7 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 br label %_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit 214: ; preds = %.lr.ph213, %237 - %indvars.iv235 = phi i64 [ 0, %.lr.ph213 ], [ %indvars.iv.next236, %237 ] + %indvars.iv235 = phi i64 [ 0, %.lr.ph213 ], [ %indvars.iv.next236, %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 @@ -4602,7 +4605,7 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 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 + to label %239 unwind label %233 237: ; preds = %235, %220 %indvars.iv.next236 = add nuw nsw i64 %indvars.iv235, 1 @@ -4614,7 +4617,7 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 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 ] + %.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 @@ -4643,8 +4646,8 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 %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 ] +252: ; preds = %.lr.ph219, %268 + %indvars.iv240 = phi i64 [ 0, %.lr.ph219 ], [ %indvars.iv.next241, %268 ] %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 @@ -4654,35 +4657,35 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 258: ; preds = %252 %259 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #37 - to label %260 unwind label %262 + to label %262 unwind label %264 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 + 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 + %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 %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 + %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 @@ -4692,7 +4695,7 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 br label %.critedge5 .critedge5: ; preds = %243, %.critedge5.loopexit - %.1129 = phi i32 [ %.0128.lcssa.mux, %243 ], [ %272, %.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 @@ -4704,15 +4707,15 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 %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 ] +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 %303 + br i1 %.not147, label %284, label %305 284: ; preds = %278 %285 = getelementptr inbounds nuw i8, ptr %281, i64 120 @@ -4731,34 +4734,34 @@ _ZNK6icu_7713UnicodeString8endsWithERKS0_.exit: ; preds = %79 %297 = and i32 %295, 268435455 %298 = sub nsw i32 %297, %275 %.not148 = icmp slt i32 %298, %279 - br i1 %.not148, label %301, label %299 + 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 %301 - -301: ; preds = %299, %284 - %302 = phi i32 [ %300, %299 ], [ %279, %284 ] - store i8 1, ptr %282, align 1, !tbaa !17 br label %303 -303: ; preds = %278, %301 - %304 = phi i32 [ %279, %278 ], [ %302, %301 ] +303: ; preds = %297, %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 -_ZN6icu_7710LocalArrayIP14StringResourceED2Ev.exit: ; preds = %266, %303, %.critedge5, %242, %199, %198, %138, %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 %307 307: ; 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 = %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 } @@ -6108,18 +6111,21 @@ 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 ] + %.0.i.i = phi i8 [ %43, %40 ], [ %52, %.sink.split.i.i.i ] %51 = sext i8 %.0.i.i to i32 br label %52 @@ -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..bc72382aad5 100644 --- a/bench/icu/optimized/selfmt.ll +++ b/bench/icu/optimized/selfmt.ll @@ -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 ], [ %89, %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 @@ -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,22 +824,25 @@ 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 +60: ; preds = %61 %61 = icmp eq i32 %.025, 0 - br i1 %61, label %62, label %85 + br i1 %61, label %62, label %89 62: ; preds = %60 %63 = load i16, ptr %21, align 8, !tbaa !17 @@ -852,7 +855,7 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %67 = trunc i16 %66 to i8 %68 = and i8 %67, 1 %69 = xor i8 %68, 1 - br label %84 + br label %88 .sink.split.i.i.i.i36: ; preds = %62 %70 = getelementptr inbounds nuw i8, ptr %29, i64 8 @@ -866,33 +869,36 @@ define noundef range(i32 -2147483647, -2147483648) i32 @_ZN6icu_7712SelectFormat %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 ] + %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 + %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 ] + %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 + %..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 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..61b800f001f 100644 --- a/bench/icu/optimized/sprintf.ll +++ b/bench/icu/optimized/sprintf.ll @@ -395,35 +395,32 @@ define internal noundef i32 @_ZL25u_sprintf_pad_and_justifyPvPK18u_printf_spec_i %.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 %29 + +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) + %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 +_ZL15u_sprintf_writePvPKDsi.exit: ; preds = %26, %27 + %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 @@ -432,7 +429,7 @@ _ZL15u_sprintf_writePvPKDsi.exit: ; preds = %29, %30 br label %_ZL15u_sprintf_writePvPKDsi.exit71.sink.split 43: ; preds = %18 - %44 = sext i32 %24 to i64 + %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 @@ -446,7 +443,7 @@ _ZL15u_sprintf_writePvPKDsi.exit: ; preds = %29, %30 53: ; preds = %43 %..i69 = tail call i32 @llvm.smin.i32(i32 %.79, i32 %50) - %54 = load i32, ptr %22, align 4, !tbaa !13 + %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 @@ -454,15 +451,15 @@ _ZL15u_sprintf_writePvPKDsi.exit: ; preds = %29, %30 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 ] + %..i69.sink = phi i32 [ %..i69, %50 ], [ %.056, %_ZL15u_sprintf_writePvPKDsi.exit ] + %.pn.ph = phi i32 [ %..i69, %50 ], [ %.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 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 ] + %.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 @@ -479,7 +476,7 @@ _ZL15u_sprintf_writePvPKDsi.exit71: ; preds = %_ZL15u_sprintf_writ 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 ] + %.1 = phi i32 [ %.057, %_ZL15u_sprintf_writePvPKDsi.exit71 ], [ %.76, %58 ], [ %., %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 diff --git a/bench/icu/optimized/timezone.ll b/bench/icu/optimized/timezone.ll index b15db843f0d..ba8d4ad60b2 100644 --- a/bench/icu/optimized/timezone.ll +++ b/bench/icu/optimized/timezone.ll @@ -2592,16 +2592,19 @@ 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 @@ -2628,7 +2631,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %39, %.sink.split.i. ret i32 %.0 63: ; preds = %29, %58, %61, %18 - %.pn.pn = phi { ptr, i32 } [ %19, %18 ], [ %62, %61 ], [ %59, %58 ], [ %30, %29 ] + %.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 @@ -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..8062021357b 100644 --- a/bench/icu/optimized/tridpars.ll +++ b/bench/icu/optimized/tridpars.ll @@ -3253,18 +3253,21 @@ _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 ] + %.0.i.i = phi i8 [ %28, %25 ], [ %48, %.sink.split.i.i.i ] %47 = icmp eq i8 %.0.i.i, 0 br label %48 @@ -3277,7 +3280,7 @@ _ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit: ; preds = %25, %.sink.split 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 + to label %56 unwind label %52 52: ; preds = %51 %53 = landingpad { ptr, i32 } @@ -3294,7 +3297,7 @@ _ZNK6icu_7713UnicodeString11caseCompareERKS0_j.exit: ; preds = %25, %.sink.split 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 + 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) @@ -3316,7 +3319,7 @@ _ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit: ; preds = %6 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 + to label %74 unwind label %70 68: ; preds = %78, %60 %69 = landingpad { ptr, i32 } @@ -3338,7 +3341,7 @@ _ZN6icu_779Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode.exit: ; preds = %6 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 + 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) @@ -3369,7 +3372,7 @@ _ZN6icu_775MutexD2Ev.exit: ; preds = %16, %4, %_ZN6icu_77 ret void .body: ; preds = %62, %80, %68, %70, %52 - %.pn = phi { ptr, i32 } [ %71, %70 ], [ %53, %52 ], [ %63, %62 ], [ %69, %68 ], [ %81, %80 ] + %.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 %85 @@ -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..6c18dccecea 100644 --- a/bench/icu/optimized/tzfmt.ll +++ b/bench/icu/optimized/tzfmt.ll @@ -6116,18 +6116,21 @@ 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 ] + %.0.i.i = phi i8 [ %43, %38 ], [ %56, %.sink.split.i.i.i ] %55 = icmp eq i8 %.0.i.i, 0 br i1 %55, label %56, label %.critedge @@ -6149,8 +6152,8 @@ _ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit: ; preds = %38, %.sink.spl 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 ] + %indvars.iv = phi i64 [ %indvars.iv.next, %66 ], [ 0, %_ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit ] + %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 @@ -6167,7 +6170,7 @@ _ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit: ; preds = %38, %.sink.spl br label %72 72: ; preds = %69, %.critedge48, %56, %29, %17 - %.0 = phi i32 [ %18, %17 ], [ %30, %29 ], [ 0, %56 ], [ 0, %.critedge48 ], [ 0, %69 ] + %.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 } @@ -8062,7 +8065,7 @@ _ZNK6icu_7713UnicodeString11caseCompareEiiRKS0_j.exit28: ; preds = %48, %.sink.s 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 ] + %.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 diff --git a/bench/icu/optimized/ucharstriebuilder.ll b/bench/icu/optimized/ucharstriebuilder.ll index 975806e6cf6..1b96b94e754 100644 --- a/bench/icu/optimized/ucharstriebuilder.ll +++ b/bench/icu/optimized/ucharstriebuilder.ll @@ -192,18 +192,21 @@ _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 ] + %.0.i.i = phi i8 [ %54, %51 ], [ %74, %.sink.split.i.i.i ] %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 @@ -223,7 +226,7 @@ _ZNK6icu_7713UnicodeString7compareERKS0_.exit: ; preds = %51, %.sink.split.i. br label %78 78: ; preds = %76, %74 - %.pn = phi { ptr, i32 } [ %77, %76 ], [ %75, %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 70614c2e01a..bbc963f445a 100644 --- a/bench/icu/optimized/uniset.ll +++ b/bench/icu/optimized/uniset.ll @@ -4886,18 +4886,21 @@ 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 ] + %.0.i.i = phi i8 [ %11, %8 ], [ %31, %.sink.split.i.i.i ] %30 = sext i8 %.0.i.i to i32 ret i32 %30 } diff --git a/bench/icu/optimized/unistr.ll b/bench/icu/optimized/unistr.ll index b843c5debf5..13a27cdd8bb 100644 --- a/bench/icu/optimized/unistr.ll +++ b/bench/icu/optimized/unistr.ll @@ -132,15 +132,18 @@ _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 ] @@ -151,35 +154,38 @@ _ZN6icu_7713UnicodeString6appendERKS0_.exit: ; preds = %30, %.sink.split.i. %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 + 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 %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 + %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 + %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 -59: ; preds = %_ZN6icu_7713UnicodeString10setToBogusEv.exit, %58 +59: ; 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 +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 @@ -286,18 +292,21 @@ _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 ] + %.0.i.i = phi ptr [ %6, %26 ], [ %42, %.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 @@ -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..f5a2774dabd 100644 --- a/bench/icu/optimized/unistr_case.ll +++ b/bench/icu/optimized/unistr_case.ll @@ -641,28 +641,31 @@ 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) + %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 + %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 + %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 + %.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) + %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 %57, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit @@ -672,20 +675,20 @@ define signext range(i8 0, 2) i8 @uhash_compareCaselessUnicodeString_77(ptr %0, br i1 %52, label %53, label %56 53: ; preds = %51 - %54 = getelementptr inbounds i16, ptr %48, i64 %47 + %54 = getelementptr inbounds i16, ptr %50, i64 %49 %55 = tail call i32 @u_strlen_77(ptr noundef %54) br label %56 56: ; preds = %53, %51 - %.123.i.i = phi i32 [ %55, %53 ], [ %spec.select32.i.i, %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 %57, label %_ZNK6icu_7713UnicodeString13doCaseCompareEiiRKS0_iij.exit -57: ; preds = %56, %49 +57: ; preds = %56, %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 = %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 } @@ -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..feb40ae9bf8 100644 --- a/bench/icu/optimized/units_router.ll +++ b/bench/icu/optimized/units_router.ll @@ -578,19 +578,22 @@ 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 @@ -627,7 +630,7 @@ _ZNK6icu_7713UnicodeString10startsWithERKS0_.exit: ; preds = %12, %.noexc br label %40 40: ; preds = %38, %36 - %.pn = phi { ptr, i32 } [ %39, %38 ], [ %37, %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 @@ -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..7c54bf26880 100644 --- a/bench/icu/optimized/uspoof_conf.ll +++ b/bench/icu/optimized/uspoof_conf.ll @@ -256,18 +256,21 @@ 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 ] + %.0.i.i = phi i8 [ %29, %26 ], [ %37, %.sink.split.i.i.i ] %36 = sext i8 %.0.i.i to i32 br label %37 @@ -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..fabbf76bedc 100644 --- a/bench/libpng/optimized/pngrutil.ll +++ b/bench/libpng/optimized/pngrutil.ll @@ -1997,7 +1997,7 @@ define void @png_read_IDAT_data(ptr noalias noundef initializes((344, 356)) %0, br label %33 33: ; preds = %166, %3 - %.1 = phi i64 [ %spec.select, %3 ], [ %.3, %166 ] + %.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 @@ -2171,10 +2171,14 @@ 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 -123: ; preds = %117 +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 @@ -2184,7 +2188,7 @@ png_read_chunk_header.exit: ; preds = %97 call void @png_free(ptr noundef nonnull %0, ptr noundef nonnull %122) #12 br label %127 -127: ; preds = %126, %117 +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 @@ -2195,12 +2199,12 @@ png_read_chunk_header.exit: ; preds = %97 store i64 %121, ptr %30, align 8, !tbaa !108, !alias.scope !105 br label %png_crc_read.exit -130: ; preds = %127 +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 = %129, %123 - %.021.i = phi ptr [ %128, %129 ], [ %122, %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 %131 = load i32, ptr %12, align 8, !tbaa !87 @@ -2226,13 +2230,13 @@ png_crc_read.exit: ; preds = %129, %123 br label %138 138: ; preds = %137, %135 - %storemerge = phi i32 [ 1024, %137 ], [ %spec.select83, %135 ] - %.2 = phi i64 [ %.1, %137 ], [ %136, %135 ] + %storemerge = phi i32 [ 1024, %139 ], [ %spec.select83, %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) %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 + %brmerge = or i1 %.not.i85, %.not7.i br i1 %brmerge, label %146, label %140 140: ; preds = %138 @@ -2254,7 +2258,7 @@ png_crc_read.exit: ; preds = %129, %123 br label %png_zlib_inflate.exit png_zlib_inflate.exit: ; preds = %144, %146 - %.0.i = phi i32 [ -3, %144 ], [ %147, %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 @@ -2262,7 +2266,7 @@ png_zlib_inflate.exit: ; preds = %144, %146 %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 %162 [ + switch i32 %.0.i, label %164 [ i32 1, label %152 i32 0, label %166 ] @@ -2271,21 +2275,21 @@ png_zlib_inflate.exit: ; preds = %144, %146 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 %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 @@ -2308,7 +2312,7 @@ png_zlib_inflate.exit: ; preds = %144, %146 %cond = icmp eq i64 %.3, 0 br i1 %cond, label %.loopexit, label %33 -167: ; preds = %161, %159 +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 %168 diff --git a/bench/libquic/optimized/url_parse.ll b/bench/libquic/optimized/url_parse.ll index f3690e7d3d3..c01324ca0ce 100644 --- a/bench/libquic/optimized/url_parse.ll +++ b/bench/libquic/optimized/url_parse.ll @@ -4899,8 +4899,12 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 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 + %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 @@ -4908,12 +4912,12 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %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 ] + %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 ] %46 = getelementptr inbounds i8, ptr %0, i64 %indvars.iv.i32 %47 = load i8, ptr %46, align 1, !tbaa !21 - switch i8 %47, label %55 [ + switch i8 %47, label %57 [ i8 63, label %48 i8 35, label %52 ] @@ -4933,10 +4937,10 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 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 ] + %.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 @@ -4949,23 +4953,25 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 store i64 %.sroa.0.0.insert.insert.i.i, ptr %34, align 4 br label %60 -._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 + %.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 %.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 %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 @@ -4976,8 +4982,8 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorIcEEiPKT_ii.exit: ; preds = %1 store i32 -1, ptr %66, align 4, !tbaa !8 br label %67 -67: ; preds = %65, %62 - %.143.i = phi i32 [ %.1.i, %62 ], [ %.041.i, %65 ] +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 %70, label %68 @@ -5122,8 +5128,12 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 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 + %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 @@ -5131,12 +5141,12 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %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 ] + %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 ] %46 = getelementptr inbounds i16, ptr %0, i64 %indvars.iv.i32 %47 = load i16, ptr %46, align 2, !tbaa !25 - switch i16 %47, label %55 [ + switch i16 %47, label %57 [ i16 63, label %48 i16 35, label %52 ] @@ -5156,10 +5166,10 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 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 ] + %.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 @@ -5172,23 +5182,25 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 store i64 %.sroa.0.0.insert.insert.i.i, ptr %34, align 4 br label %60 -._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 + %.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 %.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 %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 @@ -5199,8 +5211,8 @@ _ZN3url12_GLOBAL__N_127FindNextAuthorityTerminatorItEEiPKT_ii.exit: ; preds = %1 store i32 -1, ptr %66, align 4, !tbaa !8 br label %67 -67: ; preds = %65, %62 - %.143.i = phi i32 [ %.1.i, %62 ], [ %.041.i, %65 ] +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 %70, label %68 diff --git a/bench/llvm/optimized/BTFParser.ll b/bench/llvm/optimized/BTFParser.ll index 30a720e4354..190838a7a2a 100644 --- a/bench/llvm/optimized/BTFParser.ll +++ b/bench/llvm/optimized/BTFParser.ll @@ -623,11 +623,14 @@ _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 + %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 %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 @@ -643,11 +646,14 @@ _ZN12_GLOBAL__N_13ErrD2Ev.exit61: ; preds = %_ZNKSt7__cxx1112bas %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 + %176 = icmp ult i64 %.sroa.2.0.copyload.i, %175 + %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) + %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 @@ -663,7 +669,7 @@ _ZN4llvm5ErrorD2Ev.exit81: ; preds = %161, %166, %172 %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 + call void %185(ptr noundef nonnull align 8 dereferenceable(8) %178) #23 br label %184 184: ; preds = %180, %.critedge @@ -681,7 +687,7 @@ _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 + 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 @@ -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..6cb161a0906 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,37 +21900,30 @@ _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 -53: ; preds = %52 +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 %52, !llvm.loop !3865 + br i1 %57, label %_ZNK4llvm9StringRef5rfindEcm.exit194, label %_ZNK4llvm9StringRef11starts_withES0_.exit.thread, !llvm.loop !3865 -_ZNK4llvm9StringRef5rfindEcm.exit194: ; preds = %53, %52 +_ZNK4llvm9StringRef5rfindEcm.exit194: ; preds = %53, %_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 @@ -21968,7 +21961,7 @@ _ZN4llvmeqENS_9StringRefES0_.exit210.thread: ; preds = %_ZN4llvmeqENS_9Stri 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 ] + %.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 %67 @@ -22015,7 +22008,7 @@ _ZN4llvmeqENS_9StringRefES0_.exit231.thread466: ; preds = %_ZN4llvmeqENS_9Stri br label %79 79: ; preds = %80, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 - %.0.i233 = phi i64 [ %.sroa.speculated.i232, %_ZN4llvmeqENS_9StringRefES0_.exit231.thread466 ], [ %81, %80 ] + %.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 %80 @@ -22030,7 +22023,7 @@ _ZNK4llvm9StringRef5rfindEcm.exit236.preheader: ; preds = %80, %79 br label %_ZNK4llvm9StringRef5rfindEcm.exit236 _ZNK4llvm9StringRef5rfindEcm.exit236: ; preds = %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader, %85 - %.0.i238 = phi i64 [ %86, %85 ], [ %1, %_ZNK4llvm9StringRef5rfindEcm.exit236.preheader ] + %.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 %85 @@ -22108,7 +22101,7 @@ _ZN4llvmneENS_9StringRefES0_.exit288: ; preds = %73 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 ] + %.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 %104 @@ -22139,8 +22132,8 @@ _ZN4llvmeqENS_9StringRefES0_.exit311: ; preds = %.loopexit 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 ] + %.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..ba3e4fca6ec 100644 --- a/bench/meshlab/optimized/cube_style_precomputation.ll +++ b/bench/meshlab/optimized/cube_style_precomputation.ll @@ -67488,16 +67488,19 @@ _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) + %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 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) + tail call void @_ZN5Eigen8internal17CompressedStorageIdiE10reallocateEl(ptr noundef nonnull align 8 dereferenceable(32) %44, i64 noundef %40) br label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit _ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit: ; preds = %43, %_ZN5Eigen12SparseMatrixIdLi0EiE7setZeroEv.exit @@ -67541,7 +67544,7 @@ _ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit: ; preds = %43, %_ZN5Eigen12Spa 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 + %70 = load i64, ptr %41, align 8 %.not.i.i = icmp sgt i64 %70, %68 br i1 %.not.i.i, label %92, label %71 @@ -67598,7 +67601,7 @@ _ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i: ; preds = %_ZN5Eigen8inte %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 + store i64 %.sroa.speculated.i.i.i, ptr %41, align 8 %88 = icmp eq ptr %87, null br i1 %88, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i, label %89 @@ -67627,88 +67630,88 @@ _ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i: ; preds = %89, %_ZN5Eigen8inte %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 %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 + %106 = load i64, ptr %52, align 8 + %107 = icmp slt i64 %105, %106 + br i1 %104, label %108, 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 - -111: ; preds = %107 - %112 = load ptr, ptr %.phi.trans.insert.i, align 8 - %113 = getelementptr inbounds i32, ptr %112, i64 %104 +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 - %115 = icmp eq i32 %114, %110 - br i1 %115, label %116, label %130 + 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 + %113 = load ptr, ptr %.phi.trans.insert.i, align 8 + %114 = getelementptr inbounds i32, ptr %113, i64 %105 + %118 = load i32, ptr %114, align 4 + %116 = icmp eq i32 %118, %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 +130: ; preds = %112 + %131 = icmp sgt i32 %115, %111 br i1 %131, label %._crit_edge8.i, label %137 -._crit_edge8.i: ; preds = %130, %107 - %132 = sext i32 %110 to i64 +._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 %101 + %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 %101, 1 + %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 = %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 + 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 + %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 = %137, %.thread4..thread5_crit_edge.i - %139 = phi i32 [ %114, %137 ], [ %.pre7.i, %.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 %104 + %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 %104, 1 + %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 @@ -67717,9 +67720,9 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ 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 = %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 ] +_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 + %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 @@ -67735,7 +67738,7 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ br label %158 158: ; preds = %162, %.lr.ph.i - %.08.i = phi i64 [ %155, %.lr.ph.i ], [ %163, %162 ] + %.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 @@ -67747,7 +67750,7 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ br i1 %164, label %158, label %.critedge.i, !llvm.loop !223 .critedge.i: ; preds = %162, %158 - %.0.lcssa.i = phi i64 [ %.08.i, %158 ], [ -1, %162 ] + %.0.lcssa.i = phi i64 [ %.08.i, %159 ], [ -1, %163 ] %.not.not11.i = icmp slt i64 %.0.lcssa.i, %155 br i1 %.not.not11.i, label %.lr.ph13.i, label %_ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit @@ -67772,18 +67775,18 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ %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 + br i1 %.not6.i, label %175, 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 +.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 + to label %.noexc80 unwind label %177 -.noexc80: ; preds = %174 +.noexc80: ; preds = %175 unreachable -176: ; preds = %174 +176: ; preds = %175 %177 = landingpad { ptr, i32 } cleanup %178 = getelementptr inbounds nuw i8, ptr %5, i64 40 @@ -67795,21 +67798,24 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ %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 + %.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 + %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 +.noexc93: ; preds = %186 + %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 @@ -67817,14 +67823,14 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ _ZN5Eigen8internal12scoped_arrayIdED2Ev.exit9.i81: ; preds = %.noexc93 %194 = 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 + store ptr %191, ptr %187, 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 i64 %.sroa.speculated116, ptr %184, align 8 br label %_ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47 _ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47: ; preds = %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i89, %179 @@ -67869,9 +67875,9 @@ _ZN5Eigen12SparseMatrixIdLi0EiE7reserveEl.exit47: ; preds = %_ZN5Eigen8internal1 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 + %219 = load i64, ptr %184, align 8 %.not.i.i48 = icmp sgt i64 %219, %217 - br i1 %.not.i.i48, label %243, label %220 + br i1 %.not.i.i48, label %245, label %220 220: ; preds = %.lr.ph %221 = sitofp i64 %218 to double @@ -67932,7 +67938,7 @@ _ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104: ; preds = %_ZN5Eigen8i %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 + store i64 %.sroa.speculated.i.i.i49, ptr %184, align 8 %239 = icmp eq ptr %238, null br i1 %239, label %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105, label %240 @@ -67942,118 +67948,118 @@ _ZN5Eigen8internal10smart_copyIiEEvPKT_S4_PS2_.exit.i104: ; preds = %_ZN5Eigen8i _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 + br i1 %241, label %245, label %242 242: ; 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 +262: ; preds = %.lr.ph, %244, %_ZN5Eigen8internal12scoped_arrayIiED2Ev.exit8.i105 + %246 = sext i32 %217 to i64 + store i64 %220, ptr %172, align 8 + %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 + %269 = load ptr, ptr %200, align 8 + %270 = getelementptr inbounds double, ptr %269, i64 %246 + store double %213, ptr %253, 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 + %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 + %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 + %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 -281: ; preds = %262 - %282 = icmp sgt i32 %265, %261 - br i1 %282, label %._crit_edge8.i61, label %288 +281: ; preds = %264 + %282 = icmp sgt i32 %267, %263 + br i1 %282, label %._crit_edge8.i61, label %289 -._crit_edge8.i61: ; preds = %281, %258 - %283 = sext i32 %261 to i64 +._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 %252 + %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 %252, 1 + %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 = %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 +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 = %288, %.thread4..thread5_crit_edge.i55 - %290 = phi i32 [ %265, %288 ], [ %.pre7.i59, %.thread4..thread5_crit_edge.i55 ] +.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 - %292 = load ptr, ptr %203, align 8 - %293 = load double, ptr %292, 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 %205, 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 +_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 = %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 ] +_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 + %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 @@ -68067,7 +68073,7 @@ _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, %224, %.loopexit131 %lpad.loopexit.split-lp135 = landingpad { ptr, i32 } cleanup br label %.body94 @@ -68089,7 +68095,7 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ br label %309 309: ; preds = %313, %.lr.ph.i63 - %.08.i64 = phi i64 [ %306, %.lr.ph.i63 ], [ %314, %313 ] + %.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 @@ -68101,7 +68107,7 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ 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 ] + %.0.lcssa.i66 = phi i64 [ %.08.i64, %311 ], [ -1, %315 ] %.not.not11.i67 = icmp slt i64 %.0.lcssa.i66, %306 br i1 %.not.not11.i67, label %.lr.ph13.i68, label %.loopexit131 @@ -68118,7 +68124,7 @@ _ZN5Eigen8internal16binary_evaluatorINS_13CwiseBinaryOpINS0_20scalar_difference_ .loopexit131: ; preds = %.lr.ph13.i68, %.loopexit132, %303, %.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 + to label %322 unwind label %.loopexit.split-lp.loopexit.split-lp 320: ; preds = %.loopexit131 %321 = load ptr, ptr %172, align 8 @@ -68146,7 +68152,7 @@ _ZN5Eigen12SparseMatrixIdLi0EiE8finalizeEv.exit: ; preds = %.lr.ph13.i, %329, % 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 ] + %.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 f3193a28b1f..5311e061593 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 @@ -109,8 +110,8 @@ define void @dorbdb1_(ptr noundef readonly captures(none) %0, ptr noundef readon 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 ] + %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 @@ -264,7 +265,7 @@ define void @dorbdb1_(ptr noundef readonly captures(none) %0, ptr noundef readon br label %173 173: ; preds = %._crit_edge, %122 - %.pre-phi292 = phi i32 [ %.pre291, %._crit_edge ], [ %166, %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 diff --git a/bench/openblas/optimized/dorbdb2.ll b/bench/openblas/optimized/dorbdb2.ll index ae0beb06433..f4efb1d2372 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 @@ -114,8 +115,8 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon br label %71 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 ] + %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %164 ] + %.0.neg341 = phi i32 [ -1, %.lr.ph ], [ %171, %164 ] %indvars349 = trunc nuw i64 %indvars.iv to i32 %72 = icmp samesign ugt i64 %indvars.iv, 1 %.pre354 = load i32, ptr %2, align 4, !tbaa !3 @@ -140,8 +141,8 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon 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 ] + %.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 @@ -263,7 +264,7 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon br label %163 163: ; preds = %149, %81 - %164 = phi i32 [ %.pre355, %149 ], [ %146, %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 @@ -284,8 +285,8 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon 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 ] + %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 @@ -298,8 +299,8 @@ define void @dorbdb2_(ptr noundef readonly captures(none) %0, ptr noundef readon 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 ] + %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 %180 = load i32, ptr %0, align 4, !tbaa !3 %181 = load i32, ptr %1, align 4, !tbaa !3 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..cd9fceee3c0 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.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.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 + %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 + %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 + %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 + %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 %114 + +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 + %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 %118 + +118: ; 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..4b792aed6a2 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 + %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 + %34 = getelementptr inbounds nuw i8, ptr %17, i64 16 %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 + %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 + %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 +46: ; preds = %42 + %47 = load i32, ptr %46, align 8 %.not82 = icmp slt i32 %1, %47 - br i1 %.not82, label %90, label %48 + br i1 %.not82, label %92, label %48 48: ; preds = %46 - %49 = getelementptr inbounds nuw i8, ptr %45, i64 8 + %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 %90 + br i1 %51, label %52, label %92 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) %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 + %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.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.select88, %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.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 + %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..b34d37411e8 100644 --- a/bench/openjdk/optimized/genArguments.ll +++ b/bench/openjdk/optimized/genArguments.ll @@ -514,24 +514,26 @@ 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 +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 @@ -552,12 +554,12 @@ define hidden void @_ZN12GenArguments20initialize_size_infoEv(ptr noundef nonnul %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 + %spec.select43 = select i1 %90, i64 %91, i64 %74 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 ] + %.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 @@ -568,8 +570,8 @@ define hidden void @_ZN12GenArguments20initialize_size_infoEv(ptr noundef nonnul 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 ] + %.134 = phi i64 [ %.2, %96 ], [ %.2, %94 ], [ %.033, %61 ] + %.031 = phi i64 [ %.132, %96 ], [ %.132, %94 ], [ %74, %61 ] %97 = load i64, ptr @NewSize, align 8 %.not40 = icmp eq i64 %97, %.134 br i1 %.not40, label %100, label %98 diff --git a/bench/openusd/optimized/mvref_common.ll b/bench/openusd/optimized/mvref_common.ll index 847d7f4aed6..8f82a71d506 100644 --- a/bench/openusd/optimized/mvref_common.ll +++ b/bench/openusd/optimized/mvref_common.ll @@ -2587,48 +2587,47 @@ 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 +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 = %114, %111 - %118 = phi i32 [ %117, %114 ], [ %113, %111 ] - %119 = tail call i32 @llvm.smin.i32(i32 range(i32 -131071, 131072) %107, i32 16383) +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) @@ -2638,7 +2637,7 @@ get_mv_projection.exit.us.us: ; preds = %114, %111 %126 = sub nsw i32 0, %120 %127 = lshr i32 %126, 6 %128 = sub nsw i32 0, %127 - %129 = icmp slt i32 %107, 0 + %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 diff --git a/bench/recastnavigation/optimized/DetourLocalBoundary.ll b/bench/recastnavigation/optimized/DetourLocalBoundary.ll index 684676f6b46..faec8eb44be 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 @@ -75,7 +78,7 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c 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 ] @@ -95,49 +98,60 @@ define void @_ZN15dtLocalBoundary10addSegmentEfPKf(ptr noundef nonnull align 4 c 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 + %.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 + +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 + %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 -43: ; preds = %39 +43: ; preds = %44 %44 = add nsw i32 %41, 1 store i32 %44, ptr %4, align 4 br label %45 -45: ; preds = %15, %43, %39 +45: ; preds = %15, %43, %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 @@ -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 ] @@ -263,49 +277,60 @@ define void @_ZN15dtLocalBoundary6updateEjPKffP14dtNavMeshQueryPK13dtQueryFilter 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 + %.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 + +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 + %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 -78: ; preds = %74 +78: ; preds = %79 %79 = add nsw i32 %76, 1 store i32 %79, ptr %26, align 4 br label %_ZN15dtLocalBoundary10addSegmentEfPKf.exit -_ZN15dtLocalBoundary10addSegmentEfPKf.exit: ; preds = %78, %74, %50, %.lr.ph +_ZN15dtLocalBoundary10addSegmentEfPKf.exit: ; preds = %78, %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 diff --git a/bench/recastnavigation/optimized/DetourPathCorridor.ll b/bench/recastnavigation/optimized/DetourPathCorridor.ll index 956a4b9d396..4758626c48b 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,30 +77,31 @@ 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 +31: ; preds = %39 + %wide.trip.count = zext nneg i32 %40 to i64 br label %.lr.ph .lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph @@ -116,7 +118,7 @@ define noundef i32 @_Z25dtMergeCorridorStartMovedPjiiPKji(ptr noundef captures(n %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 +._crit_edge: ; preds = %.lr.ph, %39 %48 = add nsw i32 %spec.select, %23 br label %.split65.us.thread @@ -184,11 +186,21 @@ 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 +30: ; preds = %32 %31 = sext i32 %23 to i64 %32 = getelementptr inbounds i32, ptr %0, i64 %31 %33 = zext nneg i32 %24 to i64 @@ -198,8 +210,8 @@ define noundef i32 @_Z23dtMergeCorridorEndMovedPjiiPKji(ptr noundef captures(non 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, %22, %30, %._crit_edge58 - %.0 = phi i32 [ %1, %._crit_edge58 ], [ %29, %30 ], [ %29, %22 ], [ %1, %5 ] +._crit_edge58.thread: ; preds = %5, %32, %30, %._crit_edge58 + %.0 = phi i32 [ %1, %._crit_edge58 ], [ %30, %33 ], [ %30, %32 ], [ %1, %5 ] ret i32 %.0 } @@ -1118,30 +1130,31 @@ 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 + %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 + %66 = call noundef i32 @llvm.smin.i32(i32 %49, i32 %30) + %67 = icmp sgt i32 %63, 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 @@ -1158,7 +1171,7 @@ define noundef zeroext i1 @_ZN14dtPathCorridor12movePositionEPKfP14dtNavMeshQuer %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 +._crit_edge.i: ; preds = %.lr.ph.i, %65 %74 = add nsw i32 %spec.select.i, %49 %.pre = load ptr, ptr %11, align 8 br label %_Z25dtMergeCorridorStartMovedPjiiPKji.exit @@ -1295,11 +1308,21 @@ 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 +60: ; preds = %62 %61 = sext i32 %53 to i64 %62 = getelementptr inbounds i32, ptr %31, i64 %61 %63 = zext nneg i32 %54 to i64 @@ -1309,20 +1332,20 @@ define noundef zeroext i1 @_ZN14dtPathCorridor18moveTargetPositionEPKfP14dtNavMe 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, %52, %60 - %.0.i = phi i32 [ %32, %._crit_edge58.i ], [ %59, %60 ], [ %59, %52 ], [ %32, %30 ] +_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 %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 %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 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..1ddf1bc25df 100644 --- a/bench/sundials/optimized/arkode_interp.ll +++ b/bench/sundials/optimized/arkode_interp.ll @@ -2033,19 +2033,12 @@ 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 %38, label %57 -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 ] +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 ] %39 = icmp eq i64 %indvars.iv.i, 0 br i1 %39, label %47, label %40 @@ -2059,14 +2052,14 @@ define range(i32 -28, 1) i32 @arkInterpEvaluate_Lagrange(ptr noundef %0, ptr nou br label %47 47: ; preds = %40, %38 - %.1.i = phi double [ %.016.i, %38 ], [ %46, %40 ] + %.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 %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 ] + %indvars.iv.i88 = phi i64 [ %indvars.iv.next.i91, %53 ], [ 0, %44 ] + %.016.i89 = phi double [ %.1.i90, %53 ], [ 1.000000e+00, %44 ] %48 = icmp eq i64 %indvars.iv.i88, 1 br i1 %48, label %56, label %49 @@ -2080,54 +2073,47 @@ LBasis.exit: ; preds = %47, %56 br label %56 56: ; preds = %49, %LBasis.exit - %.1.i90 = phi double [ %.016.i89, %LBasis.exit ], [ %55, %49 ] + %.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 -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 ] +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 + 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 ] + %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 + %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 + %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 ] %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 +._crit_edge.us.i: ; preds = %64 %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 @@ -2136,14 +2122,14 @@ LBasis.exit: ; preds = %47, %56 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 ] + %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 ] %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 ] + %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 ] %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 @@ -2159,15 +2145,15 @@ LBasis.exit: ; preds = %47, %56 br label %85 85: ; preds = %78, %.preheader.us.i103 - %.1.us.i107 = phi double [ %.032.us.i105, %.preheader.us.i103 ], [ %84, %78 ] + %.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.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 ] %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 @@ -2178,9 +2164,9 @@ LBasis.exit: ; preds = %47, %56 %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 ] +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 @@ -2220,89 +2206,7 @@ LBasis.exit93: ; preds = %86, %56, %57, %37 .lr.ph.split.us.preheader.i.us.preheader: ; 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 + 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 @@ -2310,64 +2214,7 @@ LBasisD2.exit.loopexit.us: ; preds = %130 .lr.ph36.split.us.preheader.i125.us.preheader: ; 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 + br label %.lr.ph36.split.us.preheader.i125 .preheader: ; preds = %._crit_edge br i1 %.not154, label %.loopexit, label %.lr.ph.i116.us.preheader @@ -2378,13 +2225,13 @@ LBasisD.exit141.loopexit.us: ; preds = %151 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 ] + %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.us ], [ %indvars.iv.next.i121.us, %164 ] - %.016.i119.us = phi double [ 1.000000e+00, %.lr.ph.i116.us ], [ %.1.i120.us, %164 ] + %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 @@ -2399,7 +2246,7 @@ LBasisD.exit141.loopexit.us: ; preds = %151 br label %164 164: ; preds = %156, %154 - %.1.i120.us = phi double [ %.016.i119.us, %154 ], [ %163, %156 ] + %.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 @@ -2411,6 +2258,145 @@ LBasis.exit123.loopexit.us: ; preds = %164 %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 ] + %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 @@ -2424,7 +2410,7 @@ LBasis.exit123.loopexit.us: ; preds = %164 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 +.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 diff --git a/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll b/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll index a1ab2ba517c..243befa5760 100644 --- a/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll +++ b/bench/zed-rs/optimized/468j8mrahlfb4zd02cozu1ma6.ll @@ -99598,26 +99598,32 @@ 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 +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 -179: ; preds = %174, %"_ZN8sum_tree6cursor19Cursor$LT$T$C$D$GT$3end17h3826bc150cbbf6d1E.exit" +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 @@ -99668,8 +99674,8 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 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 ] + %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 @@ -99713,25 +99719,25 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %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 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,7 +99745,7 @@ 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 @@ -99753,7 +99759,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 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 + to label %245 unwind label %236 236: ; preds = %249, %234 %237 = landingpad { ptr, i32 } @@ -99788,7 +99794,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 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) 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 %236 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) @@ -99823,7 +99829,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ br label %269 262: ; preds = %139, %.thread204 - %263 = phi i64 [ %122, %139 ], [ %.pre212, %.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 %263 to i1 @@ -99834,47 +99840,47 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ %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 + br i1 %268, label %289, label %278 -269: ; preds = %272, %261 +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) - %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) %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 %284, 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 +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 + +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 + +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,15 +99896,15 @@ 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 -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 ] +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 ] %290 = 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 @@ -99921,7 +99927,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ br label %303 303: ; preds = %299, %294 - %.pn8.i.i.i = phi i64 [ %302, %299 ], [ %298, %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 @@ -99933,7 +99939,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ 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 ] + %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) @@ -100124,7 +100130,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ br i1 %376, label %"_ZN4core3ptr44drop_in_place$LT$language..buffer..Chunk$GT$17h59cdfa9fba98359eE.exit146", label %366 377: ; preds = %254, %.noexc151 - %.pn8.i147 = phi i64 [ %257, %254 ], [ %253, %.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 @@ -100153,7 +100159,7 @@ define void @"_ZN102_$LT$editor..display_map..inlay_map..InlayChunks$u20$as$u20$ "_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 %388 unwind label %371 + to label %391 unwind label %371 389: ; preds = %388, %124, %45 ret void 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