; LLVM IR from softmin/ReHLine-SVM :: liblinear/linear.ll (ZN15Solver_MCSVM_CS5SolveEPd)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%class.Solver_MCSVM_CS = type { ptr, ptr, ptr, i32, i32, i32, i32, double, ptr }
%struct.problem = type { i32, i32, ptr, ptr, double }
%struct.feature_node = type { i32, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #1

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15Solver_MCSVM_CS17solve_sub_problemEdidiPd(ptr noundef nonnull align 8 dereferenceable(56), double noundef, i32 noundef, double noundef, i32 noundef, ptr noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN15Solver_MCSVM_CS9be_shrunkEiiidd(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef, i32 noundef, double noundef, double noundef) #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15Solver_MCSVM_CS5SolveEPd(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef %1) #4 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca double, align 8
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca i32, align 4
  %25 = alloca double, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca double, align 8
  %35 = alloca ptr, align 8
  %36 = alloca double, align 8
  %37 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %38 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store i32 0, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %39 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %40 = load i32, ptr %39, align 4, !tbaa !11
  %41 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %42 = load i32, ptr %41, align 8, !tbaa !14
  %43 = mul nsw i32 %40, %42
  %44 = sext i32 %43 to i64
  %45 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %44, i64 8)
  %46 = extractvalue { i64, i1 } %45, 1
  %47 = extractvalue { i64, i1 } %45, 0
  %48 = select i1 %46, i64 -1, i64 %47
  %49 = call noalias noundef nonnull ptr @_Znam(i64 noundef %48) #9
  store ptr %49, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %50 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %51 = load i32, ptr %50, align 8, !tbaa !14
  %52 = sext i32 %51 to i64
  %53 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %52, i64 8)
  %54 = extractvalue { i64, i1 } %53, 1
  %55 = extractvalue { i64, i1 } %53, 0
  %56 = select i1 %54, i64 -1, i64 %55
  %57 = call noalias noundef nonnull ptr @_Znam(i64 noundef %56) #9
  store ptr %57, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %58 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %59 = load i32, ptr %58, align 4, !tbaa !11
  %60 = sext i32 %59 to i64
  %61 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %60, i64 4)
  %62 = extractvalue { i64, i1 } %61, 1
  %63 = extractvalue { i64, i1 } %61, 0
  %64 = select i1 %62, i64 -1, i64 %63
  %65 = call noalias noundef nonnull ptr @_Znam(i64 noundef %64) #9
  store ptr %65, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %66 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %67 = load i32, ptr %66, align 4, !tbaa !11
  %68 = sext i32 %67 to i64
  %69 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %68, i64 8)
  %70 = extractvalue { i64, i1 } %69, 1
  %71 = extractvalue { i64, i1 } %69, 0
  %72 = select i1 %70, i64 -1, i64 %71
  %73 = call noalias noundef nonnull ptr @_Znam(i64 noundef %72) #9
  store ptr %73, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %74 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %75 = load i32, ptr %74, align 8, !tbaa !14
  %76 = sext i32 %75 to i64
  %77 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %76, i64 4)
  %78 = extractvalue { i64, i1 } %77, 1
  %79 = extractvalue { i64, i1 } %77, 0
  %80 = select i1 %78, i64 -1, i64 %79
  %81 = call noalias noundef nonnull ptr @_Znam(i64 noundef %80) #9
  store ptr %81, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %82 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %83 = load i32, ptr %82, align 8, !tbaa !14
  %84 = sext i32 %83 to i64
  %85 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %84, i64 8)
  %86 = extractvalue { i64, i1 } %85, 1
  %87 = extractvalue { i64, i1 } %85, 0
  %88 = select i1 %86, i64 -1, i64 %87
  %89 = call noalias noundef nonnull ptr @_Znam(i64 noundef %88) #9
  store ptr %89, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %90 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %91 = load i32, ptr %90, align 8, !tbaa !14
  %92 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %93 = load i32, ptr %92, align 4, !tbaa !11
  %94 = mul nsw i32 %91, %93
  %95 = sext i32 %94 to i64
  %96 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %95, i64 4)
  %97 = extractvalue { i64, i1 } %96, 1
  %98 = extractvalue { i64, i1 } %96, 0
  %99 = select i1 %97, i64 -1, i64 %98
  %100 = call noalias noundef nonnull ptr @_Znam(i64 noundef %99) #9
  store ptr %100, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %101 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %102 = load i32, ptr %101, align 4, !tbaa !11
  %103 = sext i32 %102 to i64
  %104 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %103, i64 4)
  %105 = extractvalue { i64, i1 } %104, 1
  %106 = extractvalue { i64, i1 } %104, 0
  %107 = select i1 %105, i64 -1, i64 %106
  %108 = call noalias noundef nonnull ptr @_Znam(i64 noundef %107) #9
  store ptr %108, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %109 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %110 = load i32, ptr %109, align 4, !tbaa !11
  store i32 %110, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %111 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %112 = load i32, ptr %111, align 4, !tbaa !11
  %113 = sext i32 %112 to i64
  %114 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %113, i64 4)
  %115 = extractvalue { i64, i1 } %114, 1
  %116 = extractvalue { i64, i1 } %114, 0
  %117 = select i1 %115, i64 -1, i64 %116
  %118 = call noalias noundef nonnull ptr @_Znam(i64 noundef %117) #9
  store ptr %118, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %119 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 7
  %120 = load double, ptr %119, align 8, !tbaa !15
  %121 = fmul double 1.000000e+01, %120
  %122 = call noundef double @_ZL3maxIdET_S0_S0_(double noundef %121, double noundef 1.000000e+00)
  store double %122, ptr %19, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #8
  store i8 1, ptr %20, align 1, !tbaa !17
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %136, %2
  %124 = load i32, ptr %5, align 4, !tbaa !9
  %125 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %126 = load i32, ptr %125, align 4, !tbaa !11
  %127 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %128 = load i32, ptr %127, align 8, !tbaa !14
  %129 = mul nsw i32 %126, %128
  %130 = icmp slt i32 %124, %129
  br i1 %130, label %131, label %139

131:                                              ; preds = %123
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = load i32, ptr %5, align 4, !tbaa !9
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds double, ptr %132, i64 %134
  store double 0.000000e+00, ptr %135, align 8, !tbaa !16
  br label %136

136:                                              ; preds = %131
  %137 = load i32, ptr %5, align 4, !tbaa !9
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %5, align 4, !tbaa !9
  br label %123, !llvm.loop !19

139:                                              ; preds = %123
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %153, %139
  %141 = load i32, ptr %5, align 4, !tbaa !9
  %142 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 3
  %143 = load i32, ptr %142, align 8, !tbaa !21
  %144 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %145 = load i32, ptr %144, align 8, !tbaa !14
  %146 = mul nsw i32 %143, %145
  %147 = icmp slt i32 %141, %146
  br i1 %147, label %148, label %156

148:                                              ; preds = %140
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = load i32, ptr %5, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds double, ptr %149, i64 %151
  store double 0.000000e+00, ptr %152, align 8, !tbaa !16
  br label %153

153:                                              ; preds = %148
  %154 = load i32, ptr %5, align 4, !tbaa !9
  %155 = add nsw i32 %154, 1
  store i32 %155, ptr %5, align 4, !tbaa !9
  br label %140, !llvm.loop !22

156:                                              ; preds = %140
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %157

157:                                              ; preds = %239, %156
  %158 = load i32, ptr %5, align 4, !tbaa !9
  %159 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %160 = load i32, ptr %159, align 4, !tbaa !11
  %161 = icmp slt i32 %158, %160
  br i1 %161, label %162, label %242

162:                                              ; preds = %157
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %163

163:                                              ; preds = %179, %162
  %164 = load i32, ptr %6, align 4, !tbaa !9
  %165 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %166 = load i32, ptr %165, align 8, !tbaa !14
  %167 = icmp slt i32 %164, %166
  br i1 %167, label %168, label %182

168:                                              ; preds = %163
  %169 = load i32, ptr %6, align 4, !tbaa !9
  %170 = load ptr, ptr %15, align 8, !tbaa !5
  %171 = load i32, ptr %5, align 4, !tbaa !9
  %172 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %173 = load i32, ptr %172, align 8, !tbaa !14
  %174 = mul nsw i32 %171, %173
  %175 = load i32, ptr %6, align 4, !tbaa !9
  %176 = add nsw i32 %174, %175
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i32, ptr %170, i64 %177
  store i32 %169, ptr %178, align 4, !tbaa !9
  br label %179

179:                                              ; preds = %168
  %180 = load i32, ptr %6, align 4, !tbaa !9
  %181 = add nsw i32 %180, 1
  store i32 %181, ptr %6, align 4, !tbaa !9
  br label %163, !llvm.loop !23

182:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %183 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %184 = load ptr, ptr %183, align 8, !tbaa !24
  %185 = getelementptr inbounds %struct.problem, ptr %184, i32 0, i32 3
  %186 = load ptr, ptr %185, align 8, !tbaa !25
  %187 = load i32, ptr %5, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds ptr, ptr %186, i64 %188
  %190 = load ptr, ptr %189, align 8, !tbaa !5
  store ptr %190, ptr %21, align 8, !tbaa !5
  %191 = load ptr, ptr %12, align 8, !tbaa !5
  %192 = load i32, ptr %5, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds double, ptr %191, i64 %193
  store double 0.000000e+00, ptr %194, align 8, !tbaa !16
  br label %195

195:                                              ; preds = %200, %182
  %196 = load ptr, ptr %21, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.feature_node, ptr %196, i32 0, i32 0
  %198 = load i32, ptr %197, align 8, !tbaa !27
  %199 = icmp ne i32 %198, -1
  br i1 %199, label %200, label %214

200:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %201 = load ptr, ptr %21, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.feature_node, ptr %201, i32 0, i32 1
  %203 = load double, ptr %202, align 8, !tbaa !29
  store double %203, ptr %22, align 8, !tbaa !16
  %204 = load double, ptr %22, align 8, !tbaa !16
  %205 = load double, ptr %22, align 8, !tbaa !16
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = load i32, ptr %5, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  %210 = load double, ptr %209, align 8, !tbaa !16
  %211 = call double @llvm.fmuladd.f64(double %204, double %205, double %210)
  store double %211, ptr %209, align 8, !tbaa !16
  %212 = load ptr, ptr %21, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.feature_node, ptr %212, i32 1
  store ptr %213, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %195, !llvm.loop !30

214:                                              ; preds = %195
  %215 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %216 = load i32, ptr %215, align 8, !tbaa !14
  %217 = load ptr, ptr %18, align 8, !tbaa !5
  %218 = load i32, ptr %5, align 4, !tbaa !9
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %217, i64 %219
  store i32 %216, ptr %220, align 4, !tbaa !9
  %221 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %222 = load ptr, ptr %221, align 8, !tbaa !24
  %223 = getelementptr inbounds %struct.problem, ptr %222, i32 0, i32 2
  %224 = load ptr, ptr %223, align 8, !tbaa !31
  %225 = load i32, ptr %5, align 4, !tbaa !9
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds double, ptr %224, i64 %226
  %228 = load double, ptr %227, align 8, !tbaa !16
  %229 = fptosi double %228 to i32
  %230 = load ptr, ptr %16, align 8, !tbaa !5
  %231 = load i32, ptr %5, align 4, !tbaa !9
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds i32, ptr %230, i64 %232
  store i32 %229, ptr %233, align 4, !tbaa !9
  %234 = load i32, ptr %5, align 4, !tbaa !9
  %235 = load ptr, ptr %11, align 8, !tbaa !5
  %236 = load i32, ptr %5, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i32, ptr %235, i64 %237
  store i32 %234, ptr %238, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %239

239:                                              ; preds = %214
  %240 = load i32, ptr %5, align 4, !tbaa !9
  %241 = add nsw i32 %240, 1
  store i32 %241, ptr %5, align 4, !tbaa !9
  br label %157, !llvm.loop !32

242:                                              ; preds = %157
  br label %243

243:                                              ; preds = %943, %242
  %244 = load i32, ptr %8, align 4, !tbaa !9
  %245 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 6
  %246 = load i32, ptr %245, align 4, !tbaa !33
  %247 = icmp slt i32 %244, %246
  br i1 %247, label %248, label %944

248:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  store double 0xFFF0000000000000, ptr %23, align 8, !tbaa !16
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %269, %248
  %250 = load i32, ptr %5, align 4, !tbaa !9
  %251 = load i32, ptr %17, align 4, !tbaa !9
  %252 = icmp slt i32 %250, %251
  br i1 %252, label %253, label %272

253:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %254 = load i32, ptr %5, align 4, !tbaa !9
  %255 = call i32 @rand() #8
  %256 = load i32, ptr %17, align 4, !tbaa !9
  %257 = load i32, ptr %5, align 4, !tbaa !9
  %258 = sub nsw i32 %256, %257
  %259 = srem i32 %255, %258
  %260 = add nsw i32 %254, %259
  store i32 %260, ptr %24, align 4, !tbaa !9
  %261 = load ptr, ptr %11, align 8, !tbaa !5
  %262 = load i32, ptr %5, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %261, i64 %263
  %265 = load ptr, ptr %11, align 8, !tbaa !5
  %266 = load i32, ptr %24, align 4, !tbaa !9
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i32, ptr %265, i64 %267
  call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %264, ptr noundef nonnull align 4 dereferenceable(4) %268)
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %269

269:                                              ; preds = %253
  %270 = load i32, ptr %5, align 4, !tbaa !9
  %271 = add nsw i32 %270, 1
  store i32 %271, ptr %5, align 4, !tbaa !9
  br label %249, !llvm.loop !34

272:                                              ; preds = %249
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %889, %272
  %274 = load i32, ptr %7, align 4, !tbaa !9
  %275 = load i32, ptr %17, align 4, !tbaa !9
  %276 = icmp slt i32 %274, %275
  br i1 %276, label %277, label %892

277:                                              ; preds = %273
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  %279 = load i32, ptr %7, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds i32, ptr %278, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !9
  store i32 %282, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %283 = load ptr, ptr %12, align 8, !tbaa !5
  %284 = load i32, ptr %5, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds double, ptr %283, i64 %285
  %287 = load double, ptr %286, align 8, !tbaa !16
  store double %287, ptr %25, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = load i32, ptr %5, align 4, !tbaa !9
  %290 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %291 = load i32, ptr %290, align 8, !tbaa !14
  %292 = mul nsw i32 %289, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds double, ptr %288, i64 %293
  store ptr %294, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %295 = load ptr, ptr %15, align 8, !tbaa !5
  %296 = load i32, ptr %5, align 4, !tbaa !9
  %297 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %298 = load i32, ptr %297, align 8, !tbaa !14
  %299 = mul nsw i32 %296, %298
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds i32, ptr %295, i64 %300
  store ptr %301, ptr %27, align 8, !tbaa !5
  %302 = load double, ptr %25, align 8, !tbaa !16
  %303 = fcmp ogt double %302, 0.000000e+00
  br i1 %303, label %304, label %885

304:                                              ; preds = %277
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %305

305:                                              ; preds = %319, %304
  %306 = load i32, ptr %6, align 4, !tbaa !9
  %307 = load ptr, ptr %18, align 8, !tbaa !5
  %308 = load i32, ptr %5, align 4, !tbaa !9
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %307, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !9
  %312 = icmp slt i32 %306, %311
  br i1 %312, label %313, label %322

313:                                              ; preds = %305
  %314 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %315 = load ptr, ptr %314, align 8, !tbaa !35
  %316 = load i32, ptr %6, align 4, !tbaa !9
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds double, ptr %315, i64 %317
  store double 1.000000e+00, ptr %318, align 8, !tbaa !16
  br label %319

319:                                              ; preds = %313
  %320 = load i32, ptr %6, align 4, !tbaa !9
  %321 = add nsw i32 %320, 1
  store i32 %321, ptr %6, align 4, !tbaa !9
  br label %305, !llvm.loop !36

322:                                              ; preds = %305
  %323 = load ptr, ptr %16, align 8, !tbaa !5
  %324 = load i32, ptr %5, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds i32, ptr %323, i64 %325
  %327 = load i32, ptr %326, align 4, !tbaa !9
  %328 = load ptr, ptr %18, align 8, !tbaa !5
  %329 = load i32, ptr %5, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %328, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !9
  %333 = icmp slt i32 %327, %332
  br i1 %333, label %334, label %344

334:                                              ; preds = %322
  %335 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %336 = load ptr, ptr %335, align 8, !tbaa !35
  %337 = load ptr, ptr %16, align 8, !tbaa !5
  %338 = load i32, ptr %5, align 4, !tbaa !9
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds i32, ptr %337, i64 %339
  %341 = load i32, ptr %340, align 4, !tbaa !9
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds double, ptr %336, i64 %342
  store double 0.000000e+00, ptr %343, align 8, !tbaa !16
  br label %344

344:                                              ; preds = %334, %322
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %345 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %346 = load ptr, ptr %345, align 8, !tbaa !24
  %347 = getelementptr inbounds %struct.problem, ptr %346, i32 0, i32 3
  %348 = load ptr, ptr %347, align 8, !tbaa !25
  %349 = load i32, ptr %5, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds ptr, ptr %348, i64 %350
  %352 = load ptr, ptr %351, align 8, !tbaa !5
  store ptr %352, ptr %28, align 8, !tbaa !5
  br label %353

353:                                              ; preds = %400, %344
  %354 = load ptr, ptr %28, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.feature_node, ptr %354, i32 0, i32 0
  %356 = load i32, ptr %355, align 8, !tbaa !27
  %357 = icmp ne i32 %356, -1
  br i1 %357, label %358, label %403

358:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %359 = load ptr, ptr %4, align 8, !tbaa !5
  %360 = load ptr, ptr %28, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.feature_node, ptr %360, i32 0, i32 0
  %362 = load i32, ptr %361, align 8, !tbaa !27
  %363 = sub nsw i32 %362, 1
  %364 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %365 = load i32, ptr %364, align 8, !tbaa !14
  %366 = mul nsw i32 %363, %365
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds double, ptr %359, i64 %367
  store ptr %368, ptr %29, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %397, %358
  %370 = load i32, ptr %6, align 4, !tbaa !9
  %371 = load ptr, ptr %18, align 8, !tbaa !5
  %372 = load i32, ptr %5, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i32, ptr %371, i64 %373
  %375 = load i32, ptr %374, align 4, !tbaa !9
  %376 = icmp slt i32 %370, %375
  br i1 %376, label %377, label %400

377:                                              ; preds = %369
  %378 = load ptr, ptr %29, align 8, !tbaa !5
  %379 = load ptr, ptr %27, align 8, !tbaa !5
  %380 = load i32, ptr %6, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds i32, ptr %379, i64 %381
  %383 = load i32, ptr %382, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds double, ptr %378, i64 %384
  %386 = load double, ptr %385, align 8, !tbaa !16
  %387 = load ptr, ptr %28, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.feature_node, ptr %387, i32 0, i32 1
  %389 = load double, ptr %388, align 8, !tbaa !29
  %390 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %391 = load ptr, ptr %390, align 8, !tbaa !35
  %392 = load i32, ptr %6, align 4, !tbaa !9
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds double, ptr %391, i64 %393
  %395 = load double, ptr %394, align 8, !tbaa !16
  %396 = call double @llvm.fmuladd.f64(double %386, double %389, double %395)
  store double %396, ptr %394, align 8, !tbaa !16
  br label %397

397:                                              ; preds = %377
  %398 = load i32, ptr %6, align 4, !tbaa !9
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %6, align 4, !tbaa !9
  br label %369, !llvm.loop !37

400:                                              ; preds = %369
  %401 = load ptr, ptr %28, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.feature_node, ptr %401, i32 1
  store ptr %402, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %353, !llvm.loop !38

403:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  store double 0x7FF0000000000000, ptr %30, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  store double 0xFFF0000000000000, ptr %31, align 8, !tbaa !16
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %404

404:                                              ; preds = %456, %403
  %405 = load i32, ptr %6, align 4, !tbaa !9
  %406 = load ptr, ptr %18, align 8, !tbaa !5
  %407 = load i32, ptr %5, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds i32, ptr %406, i64 %408
  %410 = load i32, ptr %409, align 4, !tbaa !9
  %411 = icmp slt i32 %405, %410
  br i1 %411, label %412, label %459

412:                                              ; preds = %404
  %413 = load ptr, ptr %26, align 8, !tbaa !5
  %414 = load ptr, ptr %27, align 8, !tbaa !5
  %415 = load i32, ptr %6, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds i32, ptr %414, i64 %416
  %418 = load i32, ptr %417, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds double, ptr %413, i64 %419
  %421 = load double, ptr %420, align 8, !tbaa !16
  %422 = fcmp olt double %421, 0.000000e+00
  br i1 %422, label %423, label %439

423:                                              ; preds = %412
  %424 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %425 = load ptr, ptr %424, align 8, !tbaa !35
  %426 = load i32, ptr %6, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds double, ptr %425, i64 %427
  %429 = load double, ptr %428, align 8, !tbaa !16
  %430 = load double, ptr %30, align 8, !tbaa !16
  %431 = fcmp olt double %429, %430
  br i1 %431, label %432, label %439

432:                                              ; preds = %423
  %433 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %434 = load ptr, ptr %433, align 8, !tbaa !35
  %435 = load i32, ptr %6, align 4, !tbaa !9
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds double, ptr %434, i64 %436
  %438 = load double, ptr %437, align 8, !tbaa !16
  store double %438, ptr %30, align 8, !tbaa !16
  br label %439

439:                                              ; preds = %432, %423, %412
  %440 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %441 = load ptr, ptr %440, align 8, !tbaa !35
  %442 = load i32, ptr %6, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds double, ptr %441, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !16
  %446 = load double, ptr %31, align 8, !tbaa !16
  %447 = fcmp ogt double %445, %446
  br i1 %447, label %448, label %455

448:                                              ; preds = %439
  %449 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %450 = load ptr, ptr %449, align 8, !tbaa !35
  %451 = load i32, ptr %6, align 4, !tbaa !9
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds double, ptr %450, i64 %452
  %454 = load double, ptr %453, align 8, !tbaa !16
  store double %454, ptr %31, align 8, !tbaa !16
  br label %455

455:                                              ; preds = %448, %439
  br label %456

456:                                              ; preds = %455
  %457 = load i32, ptr %6, align 4, !tbaa !9
  %458 = add nsw i32 %457, 1
  store i32 %458, ptr %6, align 4, !tbaa !9
  br label %404, !llvm.loop !39

459:                                              ; preds = %404
  %460 = load ptr, ptr %16, align 8, !tbaa !5
  %461 = load i32, ptr %5, align 4, !tbaa !9
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %460, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !9
  %465 = load ptr, ptr %18, align 8, !tbaa !5
  %466 = load i32, ptr %5, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds i32, ptr %465, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !9
  %470 = icmp slt i32 %464, %469
  br i1 %470, label %471, label %525

471:                                              ; preds = %459
  %472 = load ptr, ptr %26, align 8, !tbaa !5
  %473 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %474 = load ptr, ptr %473, align 8, !tbaa !24
  %475 = getelementptr inbounds %struct.problem, ptr %474, i32 0, i32 2
  %476 = load ptr, ptr %475, align 8, !tbaa !31
  %477 = load i32, ptr %5, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds double, ptr %476, i64 %478
  %480 = load double, ptr %479, align 8, !tbaa !16
  %481 = fptosi double %480 to i32
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds double, ptr %472, i64 %482
  %484 = load double, ptr %483, align 8, !tbaa !16
  %485 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 1
  %486 = load ptr, ptr %485, align 8, !tbaa !40
  %487 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %488 = load ptr, ptr %487, align 8, !tbaa !24
  %489 = getelementptr inbounds %struct.problem, ptr %488, i32 0, i32 2
  %490 = load ptr, ptr %489, align 8, !tbaa !31
  %491 = load i32, ptr %5, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds double, ptr %490, i64 %492
  %494 = load double, ptr %493, align 8, !tbaa !16
  %495 = fptosi double %494 to i32
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds double, ptr %486, i64 %496
  %498 = load double, ptr %497, align 8, !tbaa !16
  %499 = fcmp olt double %484, %498
  br i1 %499, label %500, label %524

500:                                              ; preds = %471
  %501 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %502 = load ptr, ptr %501, align 8, !tbaa !35
  %503 = load ptr, ptr %16, align 8, !tbaa !5
  %504 = load i32, ptr %5, align 4, !tbaa !9
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds i32, ptr %503, i64 %505
  %507 = load i32, ptr %506, align 4, !tbaa !9
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds double, ptr %502, i64 %508
  %510 = load double, ptr %509, align 8, !tbaa !16
  %511 = load double, ptr %30, align 8, !tbaa !16
  %512 = fcmp olt double %510, %511
  br i1 %512, label %513, label %524

513:                                              ; preds = %500
  %514 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %515 = load ptr, ptr %514, align 8, !tbaa !35
  %516 = load ptr, ptr %16, align 8, !tbaa !5
  %517 = load i32, ptr %5, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds i32, ptr %516, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds double, ptr %515, i64 %521
  %523 = load double, ptr %522, align 8, !tbaa !16
  store double %523, ptr %30, align 8, !tbaa !16
  br label %524

524:                                              ; preds = %513, %500, %471
  br label %525

525:                                              ; preds = %524, %459
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %526

526:                                              ; preds = %668, %525
  %527 = load i32, ptr %6, align 4, !tbaa !9
  %528 = load ptr, ptr %18, align 8, !tbaa !5
  %529 = load i32, ptr %5, align 4, !tbaa !9
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds i32, ptr %528, i64 %530
  %532 = load i32, ptr %531, align 4, !tbaa !9
  %533 = icmp slt i32 %527, %532
  br i1 %533, label %534, label %671

534:                                              ; preds = %526
  %535 = load i32, ptr %5, align 4, !tbaa !9
  %536 = load i32, ptr %6, align 4, !tbaa !9
  %537 = load ptr, ptr %16, align 8, !tbaa !5
  %538 = load i32, ptr %5, align 4, !tbaa !9
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds i32, ptr %537, i64 %539
  %541 = load i32, ptr %540, align 4, !tbaa !9
  %542 = load ptr, ptr %26, align 8, !tbaa !5
  %543 = load ptr, ptr %27, align 8, !tbaa !5
  %544 = load i32, ptr %6, align 4, !tbaa !9
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds i32, ptr %543, i64 %545
  %547 = load i32, ptr %546, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds double, ptr %542, i64 %548
  %550 = load double, ptr %549, align 8, !tbaa !16
  %551 = load double, ptr %30, align 8, !tbaa !16
  %552 = call noundef zeroext i1 @_ZN15Solver_MCSVM_CS9be_shrunkEiiidd(ptr noundef nonnull align 8 dereferenceable(56) %38, i32 noundef %535, i32 noundef %536, i32 noundef %541, double noundef %550, double noundef %551)
  br i1 %552, label %553, label %667

553:                                              ; preds = %534
  %554 = load ptr, ptr %18, align 8, !tbaa !5
  %555 = load i32, ptr %5, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds i32, ptr %554, i64 %556
  %558 = load i32, ptr %557, align 4, !tbaa !9
  %559 = add nsw i32 %558, -1
  store i32 %559, ptr %557, align 4, !tbaa !9
  br label %560

560:                                              ; preds = %659, %553
  %561 = load ptr, ptr %18, align 8, !tbaa !5
  %562 = load i32, ptr %5, align 4, !tbaa !9
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds i32, ptr %561, i64 %563
  %565 = load i32, ptr %564, align 4, !tbaa !9
  %566 = load i32, ptr %6, align 4, !tbaa !9
  %567 = icmp sgt i32 %565, %566
  br i1 %567, label %568, label %666

568:                                              ; preds = %560
  %569 = load i32, ptr %5, align 4, !tbaa !9
  %570 = load ptr, ptr %18, align 8, !tbaa !5
  %571 = load i32, ptr %5, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  %574 = load i32, ptr %573, align 4, !tbaa !9
  %575 = load ptr, ptr %16, align 8, !tbaa !5
  %576 = load i32, ptr %5, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i32, ptr %575, i64 %577
  %579 = load i32, ptr %578, align 4, !tbaa !9
  %580 = load ptr, ptr %26, align 8, !tbaa !5
  %581 = load ptr, ptr %27, align 8, !tbaa !5
  %582 = load ptr, ptr %18, align 8, !tbaa !5
  %583 = load i32, ptr %5, align 4, !tbaa !9
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds i32, ptr %582, i64 %584
  %586 = load i32, ptr %585, align 4, !tbaa !9
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds i32, ptr %581, i64 %587
  %589 = load i32, ptr %588, align 4, !tbaa !9
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds double, ptr %580, i64 %590
  %592 = load double, ptr %591, align 8, !tbaa !16
  %593 = load double, ptr %30, align 8, !tbaa !16
  %594 = call noundef zeroext i1 @_ZN15Solver_MCSVM_CS9be_shrunkEiiidd(ptr noundef nonnull align 8 dereferenceable(56) %38, i32 noundef %569, i32 noundef %574, i32 noundef %579, double noundef %592, double noundef %593)
  br i1 %594, label %659, label %595

595:                                              ; preds = %568
  %596 = load ptr, ptr %27, align 8, !tbaa !5
  %597 = load i32, ptr %6, align 4, !tbaa !9
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds i32, ptr %596, i64 %598
  %600 = load ptr, ptr %27, align 8, !tbaa !5
  %601 = load ptr, ptr %18, align 8, !tbaa !5
  %602 = load i32, ptr %5, align 4, !tbaa !9
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds i32, ptr %601, i64 %603
  %605 = load i32, ptr %604, align 4, !tbaa !9
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds i32, ptr %600, i64 %606
  call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %599, ptr noundef nonnull align 4 dereferenceable(4) %607)
  %608 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %609 = load ptr, ptr %608, align 8, !tbaa !35
  %610 = load i32, ptr %6, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds double, ptr %609, i64 %611
  %613 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %614 = load ptr, ptr %613, align 8, !tbaa !35
  %615 = load ptr, ptr %18, align 8, !tbaa !5
  %616 = load i32, ptr %5, align 4, !tbaa !9
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds i32, ptr %615, i64 %617
  %619 = load i32, ptr %618, align 4, !tbaa !9
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds double, ptr %614, i64 %620
  call void @_ZL4swapIdEvRT_S1_(ptr noundef nonnull align 8 dereferenceable(8) %612, ptr noundef nonnull align 8 dereferenceable(8) %621)
  %622 = load ptr, ptr %16, align 8, !tbaa !5
  %623 = load i32, ptr %5, align 4, !tbaa !9
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds i32, ptr %622, i64 %624
  %626 = load i32, ptr %625, align 4, !tbaa !9
  %627 = load ptr, ptr %18, align 8, !tbaa !5
  %628 = load i32, ptr %5, align 4, !tbaa !9
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %627, i64 %629
  %631 = load i32, ptr %630, align 4, !tbaa !9
  %632 = icmp eq i32 %626, %631
  br i1 %632, label %633, label %639

633:                                              ; preds = %595
  %634 = load i32, ptr %6, align 4, !tbaa !9
  %635 = load ptr, ptr %16, align 8, !tbaa !5
  %636 = load i32, ptr %5, align 4, !tbaa !9
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds i32, ptr %635, i64 %637
  store i32 %634, ptr %638, align 4, !tbaa !9
  br label %658

639:                                              ; preds = %595
  %640 = load ptr, ptr %16, align 8, !tbaa !5
  %641 = load i32, ptr %5, align 4, !tbaa !9
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds i32, ptr %640, i64 %642
  %644 = load i32, ptr %643, align 4, !tbaa !9
  %645 = load i32, ptr %6, align 4, !tbaa !9
  %646 = icmp eq i32 %644, %645
  br i1 %646, label %647, label %657

647:                                              ; preds = %639
  %648 = load ptr, ptr %18, align 8, !tbaa !5
  %649 = load i32, ptr %5, align 4, !tbaa !9
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds i32, ptr %648, i64 %650
  %652 = load i32, ptr %651, align 4, !tbaa !9
  %653 = load ptr, ptr %16, align 8, !tbaa !5
  %654 = load i32, ptr %5, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  store i32 %652, ptr %656, align 4, !tbaa !9
  br label %657

657:                                              ; preds = %647, %639
  br label %658

658:                                              ; preds = %657, %633
  br label %666

659:                                              ; preds = %568
  %660 = load ptr, ptr %18, align 8, !tbaa !5
  %661 = load i32, ptr %5, align 4, !tbaa !9
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds i32, ptr %660, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !9
  %665 = add nsw i32 %664, -1
  store i32 %665, ptr %663, align 4, !tbaa !9
  br label %560, !llvm.loop !41

666:                                              ; preds = %658, %560
  br label %667

667:                                              ; preds = %666, %534
  br label %668

668:                                              ; preds = %667
  %669 = load i32, ptr %6, align 4, !tbaa !9
  %670 = add nsw i32 %669, 1
  store i32 %670, ptr %6, align 4, !tbaa !9
  br label %526, !llvm.loop !42

671:                                              ; preds = %526
  %672 = load ptr, ptr %18, align 8, !tbaa !5
  %673 = load i32, ptr %5, align 4, !tbaa !9
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds i32, ptr %672, i64 %674
  %676 = load i32, ptr %675, align 4, !tbaa !9
  %677 = icmp sle i32 %676, 1
  br i1 %677, label %678, label %691

678:                                              ; preds = %671
  %679 = load i32, ptr %17, align 4, !tbaa !9
  %680 = add nsw i32 %679, -1
  store i32 %680, ptr %17, align 4, !tbaa !9
  %681 = load ptr, ptr %11, align 8, !tbaa !5
  %682 = load i32, ptr %7, align 4, !tbaa !9
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds i32, ptr %681, i64 %683
  %685 = load ptr, ptr %11, align 8, !tbaa !5
  %686 = load i32, ptr %17, align 4, !tbaa !9
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds i32, ptr %685, i64 %687
  call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %684, ptr noundef nonnull align 4 dereferenceable(4) %688)
  %689 = load i32, ptr %7, align 4, !tbaa !9
  %690 = add nsw i32 %689, -1
  store i32 %690, ptr %7, align 4, !tbaa !9
  store i32 23, ptr %32, align 4
  br label %882

691:                                              ; preds = %671
  %692 = load double, ptr %31, align 8, !tbaa !16
  %693 = load double, ptr %30, align 8, !tbaa !16
  %694 = fsub double %692, %693
  %695 = fcmp ole double %694, 0x3D719799812DEA11
  br i1 %695, label %696, label %697

696:                                              ; preds = %691
  store i32 23, ptr %32, align 4
  br label %882

697:                                              ; preds = %691
  %698 = load double, ptr %31, align 8, !tbaa !16
  %699 = load double, ptr %30, align 8, !tbaa !16
  %700 = fsub double %698, %699
  %701 = load double, ptr %23, align 8, !tbaa !16
  %702 = call noundef double @_ZL3maxIdET_S0_S0_(double noundef %700, double noundef %701)
  store double %702, ptr %23, align 8, !tbaa !16
  br label %703

703:                                              ; preds = %697
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %704

704:                                              ; preds = %736, %703
  %705 = load i32, ptr %6, align 4, !tbaa !9
  %706 = load ptr, ptr %18, align 8, !tbaa !5
  %707 = load i32, ptr %5, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds i32, ptr %706, i64 %708
  %710 = load i32, ptr %709, align 4, !tbaa !9
  %711 = icmp slt i32 %705, %710
  br i1 %711, label %712, label %739

712:                                              ; preds = %704
  %713 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 2
  %714 = load ptr, ptr %713, align 8, !tbaa !35
  %715 = load i32, ptr %6, align 4, !tbaa !9
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds double, ptr %714, i64 %716
  %718 = load double, ptr %717, align 8, !tbaa !16
  %719 = load double, ptr %25, align 8, !tbaa !16
  %720 = load ptr, ptr %26, align 8, !tbaa !5
  %721 = load ptr, ptr %27, align 8, !tbaa !5
  %722 = load i32, ptr %6, align 4, !tbaa !9
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i32, ptr %721, i64 %723
  %725 = load i32, ptr %724, align 4, !tbaa !9
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds double, ptr %720, i64 %726
  %728 = load double, ptr %727, align 8, !tbaa !16
  %729 = fneg double %719
  %730 = call double @llvm.fmuladd.f64(double %729, double %728, double %718)
  %731 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 0
  %732 = load ptr, ptr %731, align 8, !tbaa !43
  %733 = load i32, ptr %6, align 4, !tbaa !9
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds double, ptr %732, i64 %734
  store double %730, ptr %735, align 8, !tbaa !16
  br label %736

736:                                              ; preds = %712
  %737 = load i32, ptr %6, align 4, !tbaa !9
  %738 = add nsw i32 %737, 1
  store i32 %738, ptr %6, align 4, !tbaa !9
  br label %704, !llvm.loop !44

739:                                              ; preds = %704
  %740 = load double, ptr %25, align 8, !tbaa !16
  %741 = load ptr, ptr %16, align 8, !tbaa !5
  %742 = load i32, ptr %5, align 4, !tbaa !9
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds i32, ptr %741, i64 %743
  %745 = load i32, ptr %744, align 4, !tbaa !9
  %746 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 1
  %747 = load ptr, ptr %746, align 8, !tbaa !40
  %748 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %749 = load ptr, ptr %748, align 8, !tbaa !24
  %750 = getelementptr inbounds %struct.problem, ptr %749, i32 0, i32 2
  %751 = load ptr, ptr %750, align 8, !tbaa !31
  %752 = load i32, ptr %5, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds double, ptr %751, i64 %753
  %755 = load double, ptr %754, align 8, !tbaa !16
  %756 = fptosi double %755 to i32
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds double, ptr %747, i64 %757
  %759 = load double, ptr %758, align 8, !tbaa !16
  %760 = load ptr, ptr %18, align 8, !tbaa !5
  %761 = load i32, ptr %5, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds i32, ptr %760, i64 %762
  %764 = load i32, ptr %763, align 4, !tbaa !9
  %765 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN15Solver_MCSVM_CS17solve_sub_problemEdidiPd(ptr noundef nonnull align 8 dereferenceable(56) %38, double noundef %740, i32 noundef %745, double noundef %759, i32 noundef %764, ptr noundef %765)
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %766

766:                                              ; preds = %824, %739
  %767 = load i32, ptr %6, align 4, !tbaa !9
  %768 = load ptr, ptr %18, align 8, !tbaa !5
  %769 = load i32, ptr %5, align 4, !tbaa !9
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds i32, ptr %768, i64 %770
  %772 = load i32, ptr %771, align 4, !tbaa !9
  %773 = icmp slt i32 %767, %772
  br i1 %773, label %774, label %827

774:                                              ; preds = %766
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %775 = load ptr, ptr %10, align 8, !tbaa !5
  %776 = load i32, ptr %6, align 4, !tbaa !9
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds double, ptr %775, i64 %777
  %779 = load double, ptr %778, align 8, !tbaa !16
  %780 = load ptr, ptr %26, align 8, !tbaa !5
  %781 = load ptr, ptr %27, align 8, !tbaa !5
  %782 = load i32, ptr %6, align 4, !tbaa !9
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds i32, ptr %781, i64 %783
  %785 = load i32, ptr %784, align 4, !tbaa !9
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds double, ptr %780, i64 %786
  %788 = load double, ptr %787, align 8, !tbaa !16
  %789 = fsub double %779, %788
  store double %789, ptr %34, align 8, !tbaa !16
  %790 = load ptr, ptr %10, align 8, !tbaa !5
  %791 = load i32, ptr %6, align 4, !tbaa !9
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds double, ptr %790, i64 %792
  %794 = load double, ptr %793, align 8, !tbaa !16
  %795 = load ptr, ptr %26, align 8, !tbaa !5
  %796 = load ptr, ptr %27, align 8, !tbaa !5
  %797 = load i32, ptr %6, align 4, !tbaa !9
  %798 = sext i32 %797 to i64
  %799 = getelementptr inbounds i32, ptr %796, i64 %798
  %800 = load i32, ptr %799, align 4, !tbaa !9
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds double, ptr %795, i64 %801
  store double %794, ptr %802, align 8, !tbaa !16
  %803 = load double, ptr %34, align 8, !tbaa !16
  %804 = call double @llvm.fabs.f64(double %803)
  %805 = fcmp oge double %804, 0x3D719799812DEA11
  br i1 %805, label %806, label %823

806:                                              ; preds = %774
  %807 = load ptr, ptr %27, align 8, !tbaa !5
  %808 = load i32, ptr %6, align 4, !tbaa !9
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds i32, ptr %807, i64 %809
  %811 = load i32, ptr %810, align 4, !tbaa !9
  %812 = load ptr, ptr %13, align 8, !tbaa !5
  %813 = load i32, ptr %33, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i32, ptr %812, i64 %814
  store i32 %811, ptr %815, align 4, !tbaa !9
  %816 = load double, ptr %34, align 8, !tbaa !16
  %817 = load ptr, ptr %14, align 8, !tbaa !5
  %818 = load i32, ptr %33, align 4, !tbaa !9
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds double, ptr %817, i64 %819
  store double %816, ptr %820, align 8, !tbaa !16
  %821 = load i32, ptr %33, align 4, !tbaa !9
  %822 = add nsw i32 %821, 1
  store i32 %822, ptr %33, align 4, !tbaa !9
  br label %823

823:                                              ; preds = %806, %774
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %824

824:                                              ; preds = %823
  %825 = load i32, ptr %6, align 4, !tbaa !9
  %826 = add nsw i32 %825, 1
  store i32 %826, ptr %6, align 4, !tbaa !9
  br label %766, !llvm.loop !45

827:                                              ; preds = %766
  %828 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %829 = load ptr, ptr %828, align 8, !tbaa !24
  %830 = getelementptr inbounds %struct.problem, ptr %829, i32 0, i32 3
  %831 = load ptr, ptr %830, align 8, !tbaa !25
  %832 = load i32, ptr %5, align 4, !tbaa !9
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds ptr, ptr %831, i64 %833
  %835 = load ptr, ptr %834, align 8, !tbaa !5
  store ptr %835, ptr %28, align 8, !tbaa !5
  br label %836

836:                                              ; preds = %878, %827
  %837 = load ptr, ptr %28, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.feature_node, ptr %837, i32 0, i32 0
  %839 = load i32, ptr %838, align 8, !tbaa !27
  %840 = icmp ne i32 %839, -1
  br i1 %840, label %841, label %881

841:                                              ; preds = %836
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %842 = load ptr, ptr %4, align 8, !tbaa !5
  %843 = load ptr, ptr %28, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.feature_node, ptr %843, i32 0, i32 0
  %845 = load i32, ptr %844, align 8, !tbaa !27
  %846 = sub nsw i32 %845, 1
  %847 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %848 = load i32, ptr %847, align 8, !tbaa !14
  %849 = mul nsw i32 %846, %848
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds double, ptr %842, i64 %850
  store ptr %851, ptr %35, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %852

852:                                              ; preds = %875, %841
  %853 = load i32, ptr %6, align 4, !tbaa !9
  %854 = load i32, ptr %33, align 4, !tbaa !9
  %855 = icmp slt i32 %853, %854
  br i1 %855, label %856, label %878

856:                                              ; preds = %852
  %857 = load ptr, ptr %14, align 8, !tbaa !5
  %858 = load i32, ptr %6, align 4, !tbaa !9
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds double, ptr %857, i64 %859
  %861 = load double, ptr %860, align 8, !tbaa !16
  %862 = load ptr, ptr %28, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.feature_node, ptr %862, i32 0, i32 1
  %864 = load double, ptr %863, align 8, !tbaa !29
  %865 = load ptr, ptr %35, align 8, !tbaa !5
  %866 = load ptr, ptr %13, align 8, !tbaa !5
  %867 = load i32, ptr %6, align 4, !tbaa !9
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds i32, ptr %866, i64 %868
  %870 = load i32, ptr %869, align 4, !tbaa !9
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds double, ptr %865, i64 %871
  %873 = load double, ptr %872, align 8, !tbaa !16
  %874 = call double @llvm.fmuladd.f64(double %861, double %864, double %873)
  store double %874, ptr %872, align 8, !tbaa !16
  br label %875

875:                                              ; preds = %856
  %876 = load i32, ptr %6, align 4, !tbaa !9
  %877 = add nsw i32 %876, 1
  store i32 %877, ptr %6, align 4, !tbaa !9
  br label %852, !llvm.loop !46

878:                                              ; preds = %852
  %879 = load ptr, ptr %28, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.feature_node, ptr %879, i32 1
  store ptr %880, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %836, !llvm.loop !47

881:                                              ; preds = %836
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  store i32 0, ptr %32, align 4
  br label %882

882:                                              ; preds = %881, %696, %678
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  %883 = load i32, ptr %32, align 4
  switch i32 %883, label %886 [
    i32 0, label %884
  ]

884:                                              ; preds = %882
  br label %885

885:                                              ; preds = %884, %277
  store i32 0, ptr %32, align 4
  br label %886

886:                                              ; preds = %885, %882
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  %887 = load i32, ptr %32, align 4
  switch i32 %887, label %1078 [
    i32 0, label %888
    i32 23, label %889
  ]

888:                                              ; preds = %886
  br label %889

889:                                              ; preds = %888, %886
  %890 = load i32, ptr %7, align 4, !tbaa !9
  %891 = add nsw i32 %890, 1
  store i32 %891, ptr %7, align 4, !tbaa !9
  br label %273, !llvm.loop !48

892:                                              ; preds = %273
  %893 = load i32, ptr %8, align 4, !tbaa !9
  %894 = add nsw i32 %893, 1
  store i32 %894, ptr %8, align 4, !tbaa !9
  %895 = load i32, ptr %8, align 4, !tbaa !9
  %896 = srem i32 %895, 10
  %897 = icmp eq i32 %896, 0
  br i1 %897, label %898, label %899

898:                                              ; preds = %892
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str)
  br label %899

899:                                              ; preds = %898, %892
  %900 = load double, ptr %23, align 8, !tbaa !16
  %901 = load double, ptr %19, align 8, !tbaa !16
  %902 = fcmp olt double %900, %901
  br i1 %902, label %903, label %939

903:                                              ; preds = %899
  %904 = load double, ptr %23, align 8, !tbaa !16
  %905 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 7
  %906 = load double, ptr %905, align 8, !tbaa !15
  %907 = fcmp olt double %904, %906
  br i1 %907, label %908, label %914

908:                                              ; preds = %903
  %909 = load i8, ptr %20, align 1, !tbaa !17, !range !49, !noundef !50
  %910 = trunc i8 %909 to i1
  %911 = zext i1 %910 to i32
  %912 = icmp eq i32 %911, 1
  br i1 %912, label %913, label %914

913:                                              ; preds = %908
  store i32 17, ptr %32, align 4
  br label %941

914:                                              ; preds = %908, %903
  %915 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %916 = load i32, ptr %915, align 4, !tbaa !11
  store i32 %916, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %917

917:                                              ; preds = %929, %914
  %918 = load i32, ptr %5, align 4, !tbaa !9
  %919 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %920 = load i32, ptr %919, align 4, !tbaa !11
  %921 = icmp slt i32 %918, %920
  br i1 %921, label %922, label %932

922:                                              ; preds = %917
  %923 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %924 = load i32, ptr %923, align 8, !tbaa !14
  %925 = load ptr, ptr %18, align 8, !tbaa !5
  %926 = load i32, ptr %5, align 4, !tbaa !9
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds i32, ptr %925, i64 %927
  store i32 %924, ptr %928, align 4, !tbaa !9
  br label %929

929:                                              ; preds = %922
  %930 = load i32, ptr %5, align 4, !tbaa !9
  %931 = add nsw i32 %930, 1
  store i32 %931, ptr %5, align 4, !tbaa !9
  br label %917, !llvm.loop !51

932:                                              ; preds = %917
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str.1)
  %933 = load double, ptr %19, align 8, !tbaa !16
  %934 = fdiv double %933, 2.000000e+00
  %935 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 7
  %936 = load double, ptr %935, align 8, !tbaa !15
  %937 = call noundef double @_ZL3maxIdET_S0_S0_(double noundef %934, double noundef %936)
  store double %937, ptr %19, align 8, !tbaa !16
  store i8 1, ptr %20, align 1, !tbaa !17
  br label %938

938:                                              ; preds = %932
  br label %940

939:                                              ; preds = %899
  store i8 0, ptr %20, align 1, !tbaa !17
  br label %940

940:                                              ; preds = %939, %938
  store i32 0, ptr %32, align 4
  br label %941

941:                                              ; preds = %940, %913
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  %942 = load i32, ptr %32, align 4
  switch i32 %942, label %1078 [
    i32 0, label %943
    i32 17, label %944
  ]

943:                                              ; preds = %941
  br label %243, !llvm.loop !52

944:                                              ; preds = %941, %243
  %945 = load i32, ptr %8, align 4, !tbaa !9
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str.2, i32 noundef %945)
  %946 = load i32, ptr %8, align 4, !tbaa !9
  %947 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 6
  %948 = load i32, ptr %947, align 4, !tbaa !33
  %949 = icmp sge i32 %946, %948
  br i1 %949, label %950, label %951

950:                                              ; preds = %944
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str.3)
  br label %951

951:                                              ; preds = %950, %944
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  store double 0.000000e+00, ptr %36, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 0, ptr %37, align 4, !tbaa !9
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %952

952:                                              ; preds = %973, %951
  %953 = load i32, ptr %5, align 4, !tbaa !9
  %954 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 3
  %955 = load i32, ptr %954, align 8, !tbaa !21
  %956 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %957 = load i32, ptr %956, align 8, !tbaa !14
  %958 = mul nsw i32 %955, %957
  %959 = icmp slt i32 %953, %958
  br i1 %959, label %960, label %976

960:                                              ; preds = %952
  %961 = load ptr, ptr %4, align 8, !tbaa !5
  %962 = load i32, ptr %5, align 4, !tbaa !9
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds double, ptr %961, i64 %963
  %965 = load double, ptr %964, align 8, !tbaa !16
  %966 = load ptr, ptr %4, align 8, !tbaa !5
  %967 = load i32, ptr %5, align 4, !tbaa !9
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds double, ptr %966, i64 %968
  %970 = load double, ptr %969, align 8, !tbaa !16
  %971 = load double, ptr %36, align 8, !tbaa !16
  %972 = call double @llvm.fmuladd.f64(double %965, double %970, double %971)
  store double %972, ptr %36, align 8, !tbaa !16
  br label %973

973:                                              ; preds = %960
  %974 = load i32, ptr %5, align 4, !tbaa !9
  %975 = add nsw i32 %974, 1
  store i32 %975, ptr %5, align 4, !tbaa !9
  br label %952, !llvm.loop !53

976:                                              ; preds = %952
  %977 = load double, ptr %36, align 8, !tbaa !16
  %978 = fmul double 5.000000e-01, %977
  store double %978, ptr %36, align 8, !tbaa !16
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %979

979:                                              ; preds = %1006, %976
  %980 = load i32, ptr %5, align 4, !tbaa !9
  %981 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %982 = load i32, ptr %981, align 4, !tbaa !11
  %983 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %984 = load i32, ptr %983, align 8, !tbaa !14
  %985 = mul nsw i32 %982, %984
  %986 = icmp slt i32 %980, %985
  br i1 %986, label %987, label %1009

987:                                              ; preds = %979
  %988 = load ptr, ptr %9, align 8, !tbaa !5
  %989 = load i32, ptr %5, align 4, !tbaa !9
  %990 = sext i32 %989 to i64
  %991 = getelementptr inbounds double, ptr %988, i64 %990
  %992 = load double, ptr %991, align 8, !tbaa !16
  %993 = load double, ptr %36, align 8, !tbaa !16
  %994 = fadd double %993, %992
  store double %994, ptr %36, align 8, !tbaa !16
  %995 = load ptr, ptr %9, align 8, !tbaa !5
  %996 = load i32, ptr %5, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds double, ptr %995, i64 %997
  %999 = load double, ptr %998, align 8, !tbaa !16
  %1000 = call double @llvm.fabs.f64(double %999)
  %1001 = fcmp ogt double %1000, 0.000000e+00
  br i1 %1001, label %1002, label %1005

1002:                                             ; preds = %987
  %1003 = load i32, ptr %37, align 4, !tbaa !9
  %1004 = add nsw i32 %1003, 1
  store i32 %1004, ptr %37, align 4, !tbaa !9
  br label %1005

1005:                                             ; preds = %1002, %987
  br label %1006

1006:                                             ; preds = %1005
  %1007 = load i32, ptr %5, align 4, !tbaa !9
  %1008 = add nsw i32 %1007, 1
  store i32 %1008, ptr %5, align 4, !tbaa !9
  br label %979, !llvm.loop !54

1009:                                             ; preds = %979
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %1010

1010:                                             ; preds = %1036, %1009
  %1011 = load i32, ptr %5, align 4, !tbaa !9
  %1012 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 4
  %1013 = load i32, ptr %1012, align 4, !tbaa !11
  %1014 = icmp slt i32 %1011, %1013
  br i1 %1014, label %1015, label %1039

1015:                                             ; preds = %1010
  %1016 = load ptr, ptr %9, align 8, !tbaa !5
  %1017 = load i32, ptr %5, align 4, !tbaa !9
  %1018 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 5
  %1019 = load i32, ptr %1018, align 8, !tbaa !14
  %1020 = mul nsw i32 %1017, %1019
  %1021 = getelementptr inbounds %class.Solver_MCSVM_CS, ptr %38, i32 0, i32 8
  %1022 = load ptr, ptr %1021, align 8, !tbaa !24
  %1023 = getelementptr inbounds %struct.problem, ptr %1022, i32 0, i32 2
  %1024 = load ptr, ptr %1023, align 8, !tbaa !31
  %1025 = load i32, ptr %5, align 4, !tbaa !9
  %1026 = sext i32 %1025 to i64
  %1027 = getelementptr inbounds double, ptr %1024, i64 %1026
  %1028 = load double, ptr %1027, align 8, !tbaa !16
  %1029 = fptosi double %1028 to i32
  %1030 = add nsw i32 %1020, %1029
  %1031 = sext i32 %1030 to i64
  %1032 = getelementptr inbounds double, ptr %1016, i64 %1031
  %1033 = load double, ptr %1032, align 8, !tbaa !16
  %1034 = load double, ptr %36, align 8, !tbaa !16
  %1035 = fsub double %1034, %1033
  store double %1035, ptr %36, align 8, !tbaa !16
  br label %1036

1036:                                             ; preds = %1015
  %1037 = load i32, ptr %5, align 4, !tbaa !9
  %1038 = add nsw i32 %1037, 1
  store i32 %1038, ptr %5, align 4, !tbaa !9
  br label %1010, !llvm.loop !55

1039:                                             ; preds = %1010
  %1040 = load double, ptr %36, align 8, !tbaa !16
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str.4, double noundef %1040)
  %1041 = load i32, ptr %37, align 4, !tbaa !9
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str.5, i32 noundef %1041)
  %1042 = load ptr, ptr %9, align 8, !tbaa !5
  %1043 = icmp eq ptr %1042, null
  br i1 %1043, label %1045, label %1044

1044:                                             ; preds = %1039
  call void @_ZdaPv(ptr noundef %1042) #10
  br label %1045

1045:                                             ; preds = %1044, %1039
  %1046 = load ptr, ptr %10, align 8, !tbaa !5
  %1047 = icmp eq ptr %1046, null
  br i1 %1047, label %1049, label %1048

1048:                                             ; preds = %1045
  call void @_ZdaPv(ptr noundef %1046) #10
  br label %1049

1049:                                             ; preds = %1048, %1045
  %1050 = load ptr, ptr %11, align 8, !tbaa !5
  %1051 = icmp eq ptr %1050, null
  br i1 %1051, label %1053, label %1052

1052:                                             ; preds = %1049
  call void @_ZdaPv(ptr noundef %1050) #10
  br label %1053

1053:                                             ; preds = %1052, %1049
  %1054 = load ptr, ptr %12, align 8, !tbaa !5
  %1055 = icmp eq ptr %1054, null
  br i1 %1055, label %1057, label %1056

1056:                                             ; preds = %1053
  call void @_ZdaPv(ptr noundef %1054) #10
  br label %1057

1057:                                             ; preds = %1056, %1053
  %1058 = load ptr, ptr %13, align 8, !tbaa !5
  %1059 = icmp eq ptr %1058, null
  br i1 %1059, label %1061, label %1060

1060:                                             ; preds = %1057
  call void @_ZdaPv(ptr noundef %1058) #10
  br label %1061

1061:                                             ; preds = %1060, %1057
  %1062 = load ptr, ptr %14, align 8, !tbaa !5
  %1063 = icmp eq ptr %1062, null
  br i1 %1063, label %1065, label %1064

1064:                                             ; preds = %1061
  call void @_ZdaPv(ptr noundef %1062) #10
  br label %1065

1065:                                             ; preds = %1064, %1061
  %1066 = load ptr, ptr %15, align 8, !tbaa !5
  %1067 = icmp eq ptr %1066, null
  br i1 %1067, label %1069, label %1068

1068:                                             ; preds = %1065
  call void @_ZdaPv(ptr noundef %1066) #10
  br label %1069

1069:                                             ; preds = %1068, %1065
  %1070 = load ptr, ptr %16, align 8, !tbaa !5
  %1071 = icmp eq ptr %1070, null
  br i1 %1071, label %1073, label %1072

1072:                                             ; preds = %1069
  call void @_ZdaPv(ptr noundef %1070) #10
  br label %1073

1073:                                             ; preds = %1072, %1069
  %1074 = load ptr, ptr %18, align 8, !tbaa !5
  %1075 = icmp eq ptr %1074, null
  br i1 %1075, label %1077, label %1076

1076:                                             ; preds = %1073
  call void @_ZdaPv(ptr noundef %1074) #10
  br label %1077

1077:                                             ; preds = %1076, %1073
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #8
  ret void

1078:                                             ; preds = %941, %886
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef double @_ZL3maxIdET_S0_S0_(double noundef, double noundef) #6

; Function Attrs: nounwind
declare i32 @rand() #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL4swapIdEvRT_S1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL4infoPKcz(ptr noundef, ...) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nobuiltin allocsize(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 #3 = { nobuiltin 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 #4 = { 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 #5 = { 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 #6 = { inlinehint 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 #7 = { 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 #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 28}
!12 = !{!"_ZTS15Solver_MCSVM_CS", !6, i64 0, !6, i64 8, !6, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !13, i64 40, !6, i64 48}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !10, i64 32}
!15 = !{!12, !13, i64 40}
!16 = !{!13, !13, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!12, !10, i64 24}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = !{!12, !6, i64 48}
!25 = !{!26, !6, i64 16}
!26 = !{!"_ZTS7problem", !10, i64 0, !10, i64 4, !6, i64 8, !6, i64 16, !13, i64 24}
!27 = !{!28, !10, i64 0}
!28 = !{!"_ZTS12feature_node", !10, i64 0, !13, i64 8}
!29 = !{!28, !13, i64 8}
!30 = distinct !{!30, !20}
!31 = !{!26, !6, i64 8}
!32 = distinct !{!32, !20}
!33 = !{!12, !10, i64 36}
!34 = distinct !{!34, !20}
!35 = !{!12, !6, i64 16}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = !{!12, !6, i64 8}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = !{!12, !6, i64 0}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = distinct !{!46, !20}
!47 = distinct !{!47, !20}
!48 = distinct !{!48, !20}
!49 = !{i8 0, i8 2}
!50 = !{}
!51 = distinct !{!51, !20}
!52 = distinct !{!52, !20}
!53 = distinct !{!53, !20}
!54 = distinct !{!54, !20}
!55 = distinct !{!55, !20}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #0

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15Solver_MCSVM_CS17solve_sub_problemEdidiPd(ptr noundef nonnull align 8 dereferenceable(56), double noundef, i32 noundef, double noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN15Solver_MCSVM_CS9be_shrunkEiiidd(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef, i32 noundef, double noundef, double noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15Solver_MCSVM_CS5SolveEPd(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr nocapture noundef %1) local_unnamed_addr #3 align 2 {
  %3 = getelementptr inbounds i8, ptr %0, i64 28
  %4 = load i32, ptr %3, align 4, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 32
  %6 = load i32, ptr %5, align 8, !tbaa !12
  %7 = mul nsw i32 %6, %4
  %8 = sext i32 %7 to i64
  %9 = icmp slt i32 %7, 0
  %10 = shl nsw i64 %8, 3
  %11 = select i1 %9, i64 -1, i64 %10
  %12 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %11) #8
  %13 = sext i32 %6 to i64
  %14 = icmp slt i32 %6, 0
  %15 = shl nsw i64 %13, 3
  %16 = select i1 %14, i64 -1, i64 %15
  %17 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %16) #8
  %18 = sext i32 %4 to i64
  %19 = icmp slt i32 %4, 0
  %20 = shl nsw i64 %18, 2
  %21 = select i1 %19, i64 -1, i64 %20
  %22 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %21) #8
  %23 = shl nsw i64 %18, 3
  %24 = select i1 %19, i64 -1, i64 %23
  %25 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %24) #8
  %26 = shl nsw i64 %13, 2
  %27 = select i1 %14, i64 -1, i64 %26
  %28 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %27) #8
  %29 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %16) #8
  %30 = shl nsw i64 %8, 2
  %31 = select i1 %9, i64 -1, i64 %30
  %32 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %31) #8
  %33 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %21) #8
  %34 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %21) #8
  %35 = getelementptr inbounds i8, ptr %0, i64 40
  %36 = load double, ptr %35, align 8, !tbaa !13
  %37 = fmul double %36, 1.000000e+01
  %38 = tail call noundef double @_ZL3maxIdET_S0_S0_(double noundef %37, double noundef 1.000000e+00)
  %39 = load i32, ptr %3, align 4, !tbaa !5
  %40 = load i32, ptr %5, align 8, !tbaa !12
  %41 = mul nsw i32 %40, %39
  %42 = icmp sgt i32 %41, 0
  br i1 %42, label %.lr.ph.preheader, label %.preheader356

.lr.ph.preheader:                                 ; preds = %2
  %43 = zext nneg i32 %41 to i64
  %44 = shl nuw nsw i64 %43, 3
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %12, i8 0, i64 %44, i1 false), !tbaa !14
  br label %.preheader356

.preheader356:                                    ; preds = %.lr.ph.preheader, %2
  %45 = getelementptr inbounds i8, ptr %0, i64 24
  %46 = load i32, ptr %45, align 8, !tbaa !15
  %47 = mul nsw i32 %46, %40
  %48 = icmp sgt i32 %47, 0
  br i1 %48, label %.lr.ph369.preheader, label %.preheader355

.lr.ph369.preheader:                              ; preds = %.preheader356
  %49 = zext nneg i32 %47 to i64
  %50 = shl nuw nsw i64 %49, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %1, i8 0, i64 %50, i1 false), !tbaa !14
  br label %.preheader355

.preheader355:                                    ; preds = %.lr.ph369.preheader, %.preheader356
  %51 = icmp sgt i32 %39, 0
  br i1 %51, label %.preheader354.lr.ph, label %.preheader353

.preheader354.lr.ph:                              ; preds = %.preheader355
  %52 = icmp sgt i32 %40, 0
  %53 = getelementptr inbounds i8, ptr %0, i64 48
  %54 = load ptr, ptr %53, align 8, !tbaa !16
  %55 = getelementptr inbounds i8, ptr %54, i64 16
  %56 = load ptr, ptr %55, align 8, !tbaa !17
  %57 = getelementptr inbounds i8, ptr %54, i64 8
  %58 = load ptr, ptr %57, align 8, !tbaa !19
  %59 = zext i32 %40 to i64
  %wide.trip.count473 = zext nneg i32 %39 to i64
  %min.iters.check = icmp ult i32 %40, 8
  %n.vec = and i64 %59, 2147483640
  %cmp.n = icmp eq i64 %n.vec, %59
  br label %.preheader354

.preheader354:                                    ; preds = %.preheader354.lr.ph, %._crit_edge376
  %indvars.iv470 = phi i64 [ 0, %.preheader354.lr.ph ], [ %indvars.iv.next471, %._crit_edge376 ]
  br i1 %52, label %.lr.ph371, label %._crit_edge

.lr.ph371:                                        ; preds = %.preheader354
  %60 = mul nuw nsw i64 %indvars.iv470, %59
  %invariant.gep = getelementptr inbounds i32, ptr %32, i64 %60
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.body

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph371
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph371 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

vector.body:                                      ; preds = %.lr.ph371, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph371 ]
  %vec.ind = phi <4 x i32> [ %vec.ind.next, %vector.body ], [ <i32 0, i32 1, i32 2, i32 3>, %.lr.ph371 ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %61 = getelementptr inbounds i32, ptr %invariant.gep, i64 %index
  %62 = getelementptr inbounds i8, ptr %61, i64 16
  store <4 x i32> %vec.ind, ptr %61, align 4, !tbaa !20
  store <4 x i32> %step.add, ptr %62, align 4, !tbaa !20
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %63 = icmp eq i64 %index.next, %n.vec
  br i1 %63, label %middle.block, label %vector.body, !llvm.loop !21

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

.preheader353:                                    ; preds = %._crit_edge376, %.preheader355
  %64 = getelementptr inbounds i8, ptr %0, i64 36
  %65 = load i32, ptr %64, align 4, !tbaa !25
  %66 = icmp sgt i32 %65, 0
  br i1 %66, label %.preheader352.lr.ph, label %.thread

.preheader352.lr.ph:                              ; preds = %.preheader353
  %67 = getelementptr inbounds i8, ptr %0, i64 16
  %68 = getelementptr inbounds i8, ptr %0, i64 48
  %69 = getelementptr inbounds i8, ptr %0, i64 8
  br label %.preheader352

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %gep = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv
  %70 = trunc nuw nsw i64 %indvars.iv to i32
  store i32 %70, ptr %gep, align 4, !tbaa !20
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %59
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !26

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %.preheader354
  %71 = getelementptr inbounds ptr, ptr %56, i64 %indvars.iv470
  %72 = load ptr, ptr %71, align 8, !tbaa !27
  %73 = getelementptr inbounds double, ptr %25, i64 %indvars.iv470
  store double 0.000000e+00, ptr %73, align 8, !tbaa !14
  %74 = load i32, ptr %72, align 8, !tbaa !28
  %.not340372 = icmp eq i32 %74, -1
  br i1 %.not340372, label %._crit_edge376, label %.lr.ph375

.lr.ph375:                                        ; preds = %._crit_edge, %.lr.ph375
  %75 = phi double [ %78, %.lr.ph375 ], [ 0.000000e+00, %._crit_edge ]
  %.0320373 = phi ptr [ %79, %.lr.ph375 ], [ %72, %._crit_edge ]
  %76 = getelementptr inbounds i8, ptr %.0320373, i64 8
  %77 = load double, ptr %76, align 8, !tbaa !30
  %78 = tail call double @llvm.fmuladd.f64(double %77, double %77, double %75)
  store double %78, ptr %73, align 8, !tbaa !14
  %79 = getelementptr inbounds i8, ptr %.0320373, i64 16
  %80 = load i32, ptr %79, align 8, !tbaa !28
  %.not340 = icmp eq i32 %80, -1
  br i1 %.not340, label %._crit_edge376, label %.lr.ph375, !llvm.loop !31

._crit_edge376:                                   ; preds = %.lr.ph375, %._crit_edge
  %81 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv470
  store i32 %40, ptr %81, align 4, !tbaa !20
  %82 = getelementptr inbounds double, ptr %58, i64 %indvars.iv470
  %83 = load double, ptr %82, align 8, !tbaa !14
  %84 = fptosi double %83 to i32
  %85 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv470
  store i32 %84, ptr %85, align 4, !tbaa !20
  %86 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv470
  %87 = trunc nuw nsw i64 %indvars.iv470 to i32
  store i32 %87, ptr %86, align 4, !tbaa !20
  %indvars.iv.next471 = add nuw nsw i64 %indvars.iv470, 1
  %exitcond474.not = icmp eq i64 %indvars.iv.next471, %wide.trip.count473
  br i1 %exitcond474.not, label %.preheader353, label %.preheader354, !llvm.loop !32

.preheader352:                                    ; preds = %.preheader352.lr.ph, %371
  %.0301437 = phi i32 [ 0, %.preheader352.lr.ph ], [ %351, %371 ]
  %.0303436 = phi i32 [ %4, %.preheader352.lr.ph ], [ %.6309, %371 ]
  %.0310435 = phi double [ %38, %.preheader352.lr.ph ], [ %.2312, %371 ]
  %.0313434 = phi i1 [ true, %.preheader352.lr.ph ], [ %356, %371 ]
  %88 = icmp sgt i32 %.0303436, 0
  br i1 %88, label %.lr.ph379.preheader, label %._crit_edge427

.lr.ph379.preheader:                              ; preds = %.preheader352
  %wide.trip.count478 = zext nneg i32 %.0303436 to i64
  br label %.lr.ph379

.preheader351:                                    ; preds = %.lr.ph379
  br i1 %88, label %.lr.ph426, label %._crit_edge427

.lr.ph379:                                        ; preds = %.lr.ph379.preheader, %.lr.ph379
  %indvars.iv475 = phi i64 [ 0, %.lr.ph379.preheader ], [ %indvars.iv.next476, %.lr.ph379 ]
  %89 = tail call i32 @rand() #9
  %90 = trunc i64 %indvars.iv475 to i32
  %91 = sub i32 %.0303436, %90
  %92 = srem i32 %89, %91
  %93 = trunc nuw nsw i64 %indvars.iv475 to i32
  %94 = add nsw i32 %92, %93
  %95 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv475
  %96 = sext i32 %94 to i64
  %97 = getelementptr inbounds i32, ptr %22, i64 %96
  tail call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %95, ptr noundef nonnull align 4 dereferenceable(4) %97)
  %indvars.iv.next476 = add nuw nsw i64 %indvars.iv475, 1
  %exitcond479.not = icmp eq i64 %indvars.iv.next476, %wide.trip.count478
  br i1 %exitcond479.not, label %.preheader351, label %.lr.ph379, !llvm.loop !33

.lr.ph426:                                        ; preds = %.preheader351, %.loopexit348
  %.0295425 = phi i32 [ %349, %.loopexit348 ], [ 0, %.preheader351 ]
  %.1304424 = phi i32 [ %.4307, %.loopexit348 ], [ %.0303436, %.preheader351 ]
  %.0316423 = phi double [ %.3319, %.loopexit348 ], [ 0xFFF0000000000000, %.preheader351 ]
  %98 = sext i32 %.0295425 to i64
  %99 = getelementptr inbounds i32, ptr %22, i64 %98
  %100 = load i32, ptr %99, align 4, !tbaa !20
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds double, ptr %25, i64 %101
  %103 = load double, ptr %102, align 8, !tbaa !14
  %104 = load i32, ptr %5, align 8, !tbaa !12
  %105 = mul nsw i32 %104, %100
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds double, ptr %12, i64 %106
  %108 = getelementptr inbounds i32, ptr %32, i64 %106
  %109 = fcmp ogt double %103, 0.000000e+00
  br i1 %109, label %.preheader350, label %.loopexit348

.preheader350:                                    ; preds = %.lr.ph426
  %110 = getelementptr inbounds i32, ptr %34, i64 %101
  %111 = load i32, ptr %110, align 4, !tbaa !20
  %112 = icmp sgt i32 %111, 0
  br i1 %112, label %.lr.ph381, label %._crit_edge382

.lr.ph381:                                        ; preds = %.preheader350
  %113 = load ptr, ptr %67, align 8, !tbaa !34
  %wide.trip.count483 = zext nneg i32 %111 to i64
  %min.iters.check578 = icmp ult i32 %111, 4
  br i1 %min.iters.check578, label %scalar.ph577.preheader, label %vector.ph579

vector.ph579:                                     ; preds = %.lr.ph381
  %n.vec581 = and i64 %wide.trip.count483, 2147483644
  br label %vector.body583

vector.body583:                                   ; preds = %vector.body583, %vector.ph579
  %index584 = phi i64 [ 0, %vector.ph579 ], [ %index.next585, %vector.body583 ]
  %114 = getelementptr inbounds double, ptr %113, i64 %index584
  %115 = getelementptr inbounds i8, ptr %114, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %114, align 8, !tbaa !14
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %115, align 8, !tbaa !14
  %index.next585 = add nuw i64 %index584, 4
  %116 = icmp eq i64 %index.next585, %n.vec581
  br i1 %116, label %middle.block576, label %vector.body583, !llvm.loop !35

middle.block576:                                  ; preds = %vector.body583
  %cmp.n586 = icmp eq i64 %n.vec581, %wide.trip.count483
  br i1 %cmp.n586, label %._crit_edge382, label %scalar.ph577.preheader

scalar.ph577.preheader:                           ; preds = %middle.block576, %.lr.ph381
  %indvars.iv480.ph = phi i64 [ 0, %.lr.ph381 ], [ %n.vec581, %middle.block576 ]
  br label %scalar.ph577

scalar.ph577:                                     ; preds = %scalar.ph577.preheader, %scalar.ph577
  %indvars.iv480 = phi i64 [ %indvars.iv.next481, %scalar.ph577 ], [ %indvars.iv480.ph, %scalar.ph577.preheader ]
  %117 = getelementptr inbounds double, ptr %113, i64 %indvars.iv480
  store double 1.000000e+00, ptr %117, align 8, !tbaa !14
  %indvars.iv.next481 = add nuw nsw i64 %indvars.iv480, 1
  %exitcond484.not = icmp eq i64 %indvars.iv.next481, %wide.trip.count483
  br i1 %exitcond484.not, label %._crit_edge382, label %scalar.ph577, !llvm.loop !36

._crit_edge382:                                   ; preds = %scalar.ph577, %middle.block576, %.preheader350
  %118 = getelementptr inbounds i32, ptr %33, i64 %101
  %119 = load i32, ptr %118, align 4, !tbaa !20
  %120 = icmp slt i32 %119, %111
  br i1 %120, label %121, label %125

121:                                              ; preds = %._crit_edge382
  %122 = load ptr, ptr %67, align 8, !tbaa !34
  %123 = sext i32 %119 to i64
  %124 = getelementptr inbounds double, ptr %122, i64 %123
  store double 0.000000e+00, ptr %124, align 8, !tbaa !14
  br label %125

125:                                              ; preds = %121, %._crit_edge382
  %126 = load ptr, ptr %68, align 8, !tbaa !16
  %127 = getelementptr inbounds i8, ptr %126, i64 16
  %128 = load ptr, ptr %127, align 8, !tbaa !17
  %129 = getelementptr inbounds ptr, ptr %128, i64 %101
  %130 = load ptr, ptr %129, align 8, !tbaa !27
  %131 = load i32, ptr %130, align 8, !tbaa !28
  %.not338388 = icmp eq i32 %131, -1
  br i1 %.not338388, label %.preheader349, label %.lr.ph391

.lr.ph391:                                        ; preds = %125
  %132 = load ptr, ptr %67, align 8
  br i1 %112, label %.lr.ph386.us.preheader, label %._crit_edge396

.lr.ph386.us.preheader:                           ; preds = %.lr.ph391
  %wide.trip.count488 = zext nneg i32 %111 to i64
  %xtraiter = and i64 %wide.trip.count488, 1
  %133 = icmp eq i32 %111, 1
  %unroll_iter = and i64 %wide.trip.count488, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.lr.ph386.us

.lr.ph386.us:                                     ; preds = %.lr.ph386.us.preheader, %._crit_edge387.us
  %134 = phi i32 [ %168, %._crit_edge387.us ], [ %131, %.lr.ph386.us.preheader ]
  %.0299389.us = phi ptr [ %167, %._crit_edge387.us ], [ %130, %.lr.ph386.us.preheader ]
  %135 = add nsw i32 %134, -1
  %136 = mul nsw i32 %135, %104
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds double, ptr %1, i64 %137
  %139 = getelementptr inbounds i8, ptr %.0299389.us, i64 8
  br i1 %133, label %._crit_edge387.us.unr-lcssa, label %.lr.ph386.us.new

.lr.ph386.us.new:                                 ; preds = %.lr.ph386.us, %.lr.ph386.us.new
  %indvars.iv485 = phi i64 [ %indvars.iv.next486.1, %.lr.ph386.us.new ], [ 0, %.lr.ph386.us ]
  %niter = phi i64 [ %niter.next.1, %.lr.ph386.us.new ], [ 0, %.lr.ph386.us ]
  %140 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv485
  %141 = load i32, ptr %140, align 4, !tbaa !20
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds double, ptr %138, i64 %142
  %144 = load double, ptr %143, align 8, !tbaa !14
  %145 = load double, ptr %139, align 8, !tbaa !30
  %146 = getelementptr inbounds double, ptr %132, i64 %indvars.iv485
  %147 = load double, ptr %146, align 8, !tbaa !14
  %148 = tail call double @llvm.fmuladd.f64(double %144, double %145, double %147)
  store double %148, ptr %146, align 8, !tbaa !14
  %indvars.iv.next486 = or disjoint i64 %indvars.iv485, 1
  %149 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv.next486
  %150 = load i32, ptr %149, align 4, !tbaa !20
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds double, ptr %138, i64 %151
  %153 = load double, ptr %152, align 8, !tbaa !14
  %154 = load double, ptr %139, align 8, !tbaa !30
  %155 = getelementptr inbounds double, ptr %132, i64 %indvars.iv.next486
  %156 = load double, ptr %155, align 8, !tbaa !14
  %157 = tail call double @llvm.fmuladd.f64(double %153, double %154, double %156)
  store double %157, ptr %155, align 8, !tbaa !14
  %indvars.iv.next486.1 = add nuw nsw i64 %indvars.iv485, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge387.us.unr-lcssa, label %.lr.ph386.us.new, !llvm.loop !37

._crit_edge387.us.unr-lcssa:                      ; preds = %.lr.ph386.us.new, %.lr.ph386.us
  %indvars.iv485.unr = phi i64 [ 0, %.lr.ph386.us ], [ %indvars.iv.next486.1, %.lr.ph386.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge387.us, label %._crit_edge387.us.epilog-lcssa

._crit_edge387.us.epilog-lcssa:                   ; preds = %._crit_edge387.us.unr-lcssa
  %158 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv485.unr
  %159 = load i32, ptr %158, align 4, !tbaa !20
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds double, ptr %138, i64 %160
  %162 = load double, ptr %161, align 8, !tbaa !14
  %163 = load double, ptr %139, align 8, !tbaa !30
  %164 = getelementptr inbounds double, ptr %132, i64 %indvars.iv485.unr
  %165 = load double, ptr %164, align 8, !tbaa !14
  %166 = tail call double @llvm.fmuladd.f64(double %162, double %163, double %165)
  store double %166, ptr %164, align 8, !tbaa !14
  br label %._crit_edge387.us

._crit_edge387.us:                                ; preds = %._crit_edge387.us.unr-lcssa, %._crit_edge387.us.epilog-lcssa
  %167 = getelementptr inbounds i8, ptr %.0299389.us, i64 16
  %168 = load i32, ptr %167, align 8, !tbaa !28
  %.not338.us = icmp eq i32 %168, -1
  br i1 %.not338.us, label %.preheader349, label %.lr.ph386.us, !llvm.loop !38

.preheader349:                                    ; preds = %._crit_edge387.us, %125
  br i1 %112, label %.lr.ph395, label %._crit_edge396

.lr.ph395:                                        ; preds = %.preheader349
  %169 = load ptr, ptr %67, align 8
  %wide.trip.count493 = zext nneg i32 %111 to i64
  br label %._crit_edge533

._crit_edge533:                                   ; preds = %.lr.ph395, %._crit_edge533
  %indvars.iv490 = phi i64 [ 0, %.lr.ph395 ], [ %indvars.iv.next491, %._crit_edge533 ]
  %.0290393 = phi double [ 0xFFF0000000000000, %.lr.ph395 ], [ %.1291, %._crit_edge533 ]
  %.0292392 = phi double [ 0x7FF0000000000000, %.lr.ph395 ], [ %.1293, %._crit_edge533 ]
  %170 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv490
  %171 = load i32, ptr %170, align 4, !tbaa !20
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds double, ptr %107, i64 %172
  %174 = load double, ptr %173, align 8, !tbaa !14
  %175 = fcmp olt double %174, 0.000000e+00
  %176 = getelementptr inbounds double, ptr %169, i64 %indvars.iv490
  %177 = load double, ptr %176, align 8, !tbaa !14
  %178 = fcmp olt double %177, %.0292392
  %or.cond = select i1 %175, i1 %178, i1 false
  %.1293 = select i1 %or.cond, double %177, double %.0292392
  %179 = fcmp ogt double %177, %.0290393
  %.1291 = select i1 %179, double %177, double %.0290393
  %indvars.iv.next491 = add nuw nsw i64 %indvars.iv490, 1
  %exitcond494.not = icmp eq i64 %indvars.iv.next491, %wide.trip.count493
  br i1 %exitcond494.not, label %._crit_edge396, label %._crit_edge533, !llvm.loop !39

._crit_edge396:                                   ; preds = %._crit_edge533, %.lr.ph391, %.preheader349
  %.0292.lcssa = phi double [ 0x7FF0000000000000, %.preheader349 ], [ 0x7FF0000000000000, %.lr.ph391 ], [ %.1293, %._crit_edge533 ]
  %.0290.lcssa = phi double [ 0xFFF0000000000000, %.preheader349 ], [ 0xFFF0000000000000, %.lr.ph391 ], [ %.1291, %._crit_edge533 ]
  br i1 %120, label %180, label %200

180:                                              ; preds = %._crit_edge396
  %181 = getelementptr inbounds i8, ptr %126, i64 8
  %182 = load ptr, ptr %181, align 8, !tbaa !19
  %183 = getelementptr inbounds double, ptr %182, i64 %101
  %184 = load double, ptr %183, align 8, !tbaa !14
  %185 = fptosi double %184 to i32
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds double, ptr %107, i64 %186
  %188 = load double, ptr %187, align 8, !tbaa !14
  %189 = load ptr, ptr %69, align 8, !tbaa !40
  %190 = getelementptr inbounds double, ptr %189, i64 %186
  %191 = load double, ptr %190, align 8, !tbaa !14
  %192 = fcmp olt double %188, %191
  br i1 %192, label %193, label %200

193:                                              ; preds = %180
  %194 = load ptr, ptr %67, align 8, !tbaa !34
  %195 = sext i32 %119 to i64
  %196 = getelementptr inbounds double, ptr %194, i64 %195
  %197 = load double, ptr %196, align 8, !tbaa !14
  %198 = fcmp olt double %197, %.0292.lcssa
  br i1 %198, label %199, label %200

199:                                              ; preds = %193
  br label %200

200:                                              ; preds = %180, %193, %199, %._crit_edge396
  %.2294 = phi double [ %197, %199 ], [ %.0292.lcssa, %193 ], [ %.0292.lcssa, %180 ], [ %.0292.lcssa, %._crit_edge396 ]
  br i1 %112, label %.lr.ph401, label %._crit_edge402.thread

.lr.ph401:                                        ; preds = %200, %.loopexit
  %201 = phi i32 [ %232, %.loopexit ], [ %111, %200 ]
  %202 = phi i32 [ %233, %.loopexit ], [ %119, %200 ]
  %203 = phi i32 [ %234, %.loopexit ], [ %119, %200 ]
  %204 = phi i32 [ %235, %.loopexit ], [ %119, %200 ]
  %indvars.iv495 = phi i64 [ %indvars.iv.next496, %.loopexit ], [ 0, %200 ]
  %205 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv495
  %206 = load i32, ptr %205, align 4, !tbaa !20
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds double, ptr %107, i64 %207
  %209 = load double, ptr %208, align 8, !tbaa !14
  %210 = trunc nuw nsw i64 %indvars.iv495 to i32
  %211 = tail call noundef zeroext i1 @_ZN15Solver_MCSVM_CS9be_shrunkEiiidd(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %100, i32 noundef %210, i32 noundef %204, double noundef %209, double noundef %.2294)
  br i1 %211, label %.preheader347.preheader, label %.loopexit

.preheader347.preheader:                          ; preds = %.lr.ph401
  %storemerge561 = add nsw i32 %201, -1
  store i32 %storemerge561, ptr %110, align 4, !tbaa !20
  %212 = sext i32 %storemerge561 to i64
  %213 = icmp slt i64 %indvars.iv495, %212
  br i1 %213, label %.lr.ph, label %.loopexit

.preheader347:                                    ; preds = %.lr.ph
  %storemerge = add nsw i32 %storemerge562, -1
  store i32 %storemerge, ptr %110, align 4, !tbaa !20
  %214 = sext i32 %storemerge to i64
  %215 = icmp slt i64 %indvars.iv495, %214
  br i1 %215, label %.lr.ph, label %.loopexit, !llvm.loop !41

.lr.ph:                                           ; preds = %.preheader347.preheader, %.preheader347
  %216 = phi i64 [ %214, %.preheader347 ], [ %212, %.preheader347.preheader ]
  %storemerge562 = phi i32 [ %storemerge, %.preheader347 ], [ %storemerge561, %.preheader347.preheader ]
  %217 = getelementptr inbounds i32, ptr %108, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !20
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds double, ptr %107, i64 %219
  %221 = load double, ptr %220, align 8, !tbaa !14
  %222 = tail call noundef zeroext i1 @_ZN15Solver_MCSVM_CS9be_shrunkEiiidd(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %100, i32 noundef %storemerge562, i32 noundef %203, double noundef %221, double noundef %.2294)
  br i1 %222, label %.preheader347, label %223, !llvm.loop !41

223:                                              ; preds = %.lr.ph
  %224 = getelementptr inbounds i32, ptr %108, i64 %216
  tail call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %205, ptr noundef nonnull align 4 dereferenceable(4) %224)
  %225 = load ptr, ptr %67, align 8, !tbaa !34
  %226 = getelementptr inbounds double, ptr %225, i64 %indvars.iv495
  %227 = getelementptr inbounds double, ptr %225, i64 %216
  tail call void @_ZL4swapIdEvRT_S1_(ptr noundef nonnull align 8 dereferenceable(8) %226, ptr noundef nonnull align 8 dereferenceable(8) %227)
  %228 = icmp eq i32 %202, %storemerge562
  br i1 %228, label %.loopexit.sink.split, label %229

229:                                              ; preds = %223
  %230 = zext i32 %202 to i64
  %231 = icmp eq i64 %indvars.iv495, %230
  br i1 %231, label %.loopexit.sink.split, label %.loopexit

.loopexit.sink.split:                             ; preds = %229, %223
  %.sink = phi i32 [ %210, %223 ], [ %storemerge562, %229 ]
  %.ph = phi i32 [ %202, %223 ], [ %storemerge562, %229 ]
  store i32 %.sink, ptr %118, align 4, !tbaa !20
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader347, %.preheader347.preheader, %.loopexit.sink.split, %.lr.ph401, %229
  %232 = phi i32 [ %201, %.lr.ph401 ], [ %storemerge562, %229 ], [ %.ph, %.loopexit.sink.split ], [ %storemerge561, %.preheader347.preheader ], [ %storemerge, %.preheader347 ]
  %233 = phi i32 [ %202, %.lr.ph401 ], [ %202, %229 ], [ %.sink, %.loopexit.sink.split ], [ %202, %.preheader347.preheader ], [ %202, %.preheader347 ]
  %234 = phi i32 [ %203, %.lr.ph401 ], [ %202, %229 ], [ %.sink, %.loopexit.sink.split ], [ %203, %.preheader347.preheader ], [ %203, %.preheader347 ]
  %235 = phi i32 [ %204, %.lr.ph401 ], [ %202, %229 ], [ %.sink, %.loopexit.sink.split ], [ %204, %.preheader347.preheader ], [ %203, %.preheader347 ]
  %indvars.iv.next496 = add nuw nsw i64 %indvars.iv495, 1
  %236 = sext i32 %232 to i64
  %237 = icmp slt i64 %indvars.iv.next496, %236
  br i1 %237, label %.lr.ph401, label %._crit_edge402, !llvm.loop !42

._crit_edge402:                                   ; preds = %.loopexit
  %238 = icmp slt i32 %232, 2
  br i1 %238, label %._crit_edge402.thread, label %243

._crit_edge402.thread:                            ; preds = %200, %._crit_edge402
  %239 = add nsw i32 %.1304424, -1
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i32, ptr %22, i64 %240
  tail call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %99, ptr noundef nonnull align 4 dereferenceable(4) %241)
  %242 = add nsw i32 %.0295425, -1
  br label %.loopexit348

243:                                              ; preds = %._crit_edge402
  %244 = fsub double %.0290.lcssa, %.2294
  %245 = fcmp ugt double %244, 0x3D719799812DEA11
  br i1 %245, label %.lr.ph406, label %.loopexit348

.lr.ph406:                                        ; preds = %243
  %246 = tail call noundef double @_ZL3maxIdET_S0_S0_(double noundef %244, double noundef %.0316423)
  %247 = load ptr, ptr %67, align 8, !tbaa !34
  %248 = fneg double %103
  %249 = load ptr, ptr %0, align 8, !tbaa !43
  %wide.trip.count501 = zext nneg i32 %232 to i64
  %xtraiter597 = and i64 %wide.trip.count501, 1
  %unroll_iter599 = and i64 %wide.trip.count501, 2147483646
  br label %250

250:                                              ; preds = %250, %.lr.ph406
  %indvars.iv498 = phi i64 [ 0, %.lr.ph406 ], [ %indvars.iv.next499.1, %250 ]
  %niter600 = phi i64 [ 0, %.lr.ph406 ], [ %niter600.next.1, %250 ]
  %251 = getelementptr inbounds double, ptr %247, i64 %indvars.iv498
  %252 = load double, ptr %251, align 8, !tbaa !14
  %253 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv498
  %254 = load i32, ptr %253, align 4, !tbaa !20
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds double, ptr %107, i64 %255
  %257 = load double, ptr %256, align 8, !tbaa !14
  %258 = tail call double @llvm.fmuladd.f64(double %248, double %257, double %252)
  %259 = getelementptr inbounds double, ptr %249, i64 %indvars.iv498
  store double %258, ptr %259, align 8, !tbaa !14
  %indvars.iv.next499 = or disjoint i64 %indvars.iv498, 1
  %260 = getelementptr inbounds double, ptr %247, i64 %indvars.iv.next499
  %261 = load double, ptr %260, align 8, !tbaa !14
  %262 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv.next499
  %263 = load i32, ptr %262, align 4, !tbaa !20
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds double, ptr %107, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !14
  %267 = tail call double @llvm.fmuladd.f64(double %248, double %266, double %261)
  %268 = getelementptr inbounds double, ptr %249, i64 %indvars.iv.next499
  store double %267, ptr %268, align 8, !tbaa !14
  %indvars.iv.next499.1 = add nuw nsw i64 %indvars.iv498, 2
  %niter600.next.1 = add i64 %niter600, 2
  %niter600.ncmp.1 = icmp eq i64 %niter600.next.1, %unroll_iter599
  br i1 %niter600.ncmp.1, label %.lr.ph412.preheader.unr-lcssa, label %250, !llvm.loop !44

.lr.ph412.preheader.unr-lcssa:                    ; preds = %250
  %lcmp.mod598.not = icmp eq i64 %xtraiter597, 0
  br i1 %lcmp.mod598.not, label %.lr.ph412.preheader, label %.lr.ph412.preheader.epilog-lcssa

.lr.ph412.preheader.epilog-lcssa:                 ; preds = %.lr.ph412.preheader.unr-lcssa
  %269 = getelementptr inbounds double, ptr %247, i64 %indvars.iv.next499.1
  %270 = load double, ptr %269, align 8, !tbaa !14
  %271 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv.next499.1
  %272 = load i32, ptr %271, align 4, !tbaa !20
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds double, ptr %107, i64 %273
  %275 = load double, ptr %274, align 8, !tbaa !14
  %276 = tail call double @llvm.fmuladd.f64(double %248, double %275, double %270)
  %277 = getelementptr inbounds double, ptr %249, i64 %indvars.iv.next499.1
  store double %276, ptr %277, align 8, !tbaa !14
  br label %.lr.ph412.preheader

.lr.ph412.preheader:                              ; preds = %.lr.ph412.preheader.unr-lcssa, %.lr.ph412.preheader.epilog-lcssa
  %278 = load ptr, ptr %69, align 8, !tbaa !40
  %279 = load ptr, ptr %68, align 8, !tbaa !16
  %280 = getelementptr inbounds i8, ptr %279, i64 8
  %281 = load ptr, ptr %280, align 8, !tbaa !19
  %282 = getelementptr inbounds double, ptr %281, i64 %101
  %283 = load double, ptr %282, align 8, !tbaa !14
  %284 = fptosi double %283 to i32
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds double, ptr %278, i64 %285
  %287 = load double, ptr %286, align 8, !tbaa !14
  tail call void @_ZN15Solver_MCSVM_CS17solve_sub_problemEdidiPd(ptr noundef nonnull align 8 dereferenceable(56) %0, double noundef %103, i32 noundef %233, double noundef %287, i32 noundef %232, ptr noundef nonnull %17)
  %wide.trip.count506 = zext nneg i32 %232 to i64
  br label %.lr.ph412

.lr.ph412:                                        ; preds = %.lr.ph412.preheader, %303
  %indvars.iv503 = phi i64 [ 0, %.lr.ph412.preheader ], [ %indvars.iv.next504, %303 ]
  %.0286409 = phi i32 [ 0, %.lr.ph412.preheader ], [ %.1287, %303 ]
  %288 = getelementptr inbounds double, ptr %17, i64 %indvars.iv503
  %289 = load double, ptr %288, align 8, !tbaa !14
  %290 = getelementptr inbounds i32, ptr %108, i64 %indvars.iv503
  %291 = load i32, ptr %290, align 4, !tbaa !20
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %107, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !14
  %295 = fsub double %289, %294
  store double %289, ptr %293, align 8, !tbaa !14
  %296 = tail call double @llvm.fabs.f64(double %295)
  %297 = fcmp ult double %296, 0x3D719799812DEA11
  br i1 %297, label %303, label %298

298:                                              ; preds = %.lr.ph412
  %299 = sext i32 %.0286409 to i64
  %300 = getelementptr inbounds i32, ptr %28, i64 %299
  store i32 %291, ptr %300, align 4, !tbaa !20
  %301 = getelementptr inbounds double, ptr %29, i64 %299
  store double %295, ptr %301, align 8, !tbaa !14
  %302 = add nsw i32 %.0286409, 1
  br label %303

303:                                              ; preds = %298, %.lr.ph412
  %.1287 = phi i32 [ %302, %298 ], [ %.0286409, %.lr.ph412 ]
  %indvars.iv.next504 = add nuw nsw i64 %indvars.iv503, 1
  %exitcond507.not = icmp eq i64 %indvars.iv.next504, %wide.trip.count506
  br i1 %exitcond507.not, label %._crit_edge413, label %.lr.ph412, !llvm.loop !45

._crit_edge413:                                   ; preds = %303
  %304 = load ptr, ptr %68, align 8, !tbaa !16
  %305 = getelementptr inbounds i8, ptr %304, i64 16
  %306 = load ptr, ptr %305, align 8, !tbaa !17
  %307 = getelementptr inbounds ptr, ptr %306, i64 %101
  %308 = load ptr, ptr %307, align 8, !tbaa !27
  %309 = load i32, ptr %308, align 8, !tbaa !28
  %.not339419 = icmp eq i32 %309, -1
  br i1 %.not339419, label %.loopexit348, label %.lr.ph422

.lr.ph422:                                        ; preds = %._crit_edge413
  %310 = load i32, ptr %5, align 8, !tbaa !12
  %311 = icmp sgt i32 %.1287, 0
  %wide.trip.count511 = zext i32 %.1287 to i64
  %xtraiter602 = and i64 %wide.trip.count511, 1
  %312 = icmp eq i32 %.1287, 1
  %unroll_iter604 = and i64 %wide.trip.count511, 2147483646
  %lcmp.mod603.not = icmp eq i64 %xtraiter602, 0
  br label %313

313:                                              ; preds = %.lr.ph422, %._crit_edge418
  %314 = phi i32 [ %309, %.lr.ph422 ], [ %348, %._crit_edge418 ]
  %.1300420 = phi ptr [ %308, %.lr.ph422 ], [ %347, %._crit_edge418 ]
  %315 = add nsw i32 %314, -1
  %316 = mul nsw i32 %310, %315
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds double, ptr %1, i64 %317
  br i1 %311, label %.lr.ph417, label %._crit_edge418

.lr.ph417:                                        ; preds = %313
  %319 = getelementptr inbounds i8, ptr %.1300420, i64 8
  br i1 %312, label %._crit_edge418.loopexit.unr-lcssa, label %.lr.ph417.new

.lr.ph417.new:                                    ; preds = %.lr.ph417, %.lr.ph417.new
  %indvars.iv508 = phi i64 [ %indvars.iv.next509.1, %.lr.ph417.new ], [ 0, %.lr.ph417 ]
  %niter605 = phi i64 [ %niter605.next.1, %.lr.ph417.new ], [ 0, %.lr.ph417 ]
  %320 = getelementptr inbounds double, ptr %29, i64 %indvars.iv508
  %321 = load double, ptr %320, align 8, !tbaa !14
  %322 = load double, ptr %319, align 8, !tbaa !30
  %323 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv508
  %324 = load i32, ptr %323, align 4, !tbaa !20
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds double, ptr %318, i64 %325
  %327 = load double, ptr %326, align 8, !tbaa !14
  %328 = tail call double @llvm.fmuladd.f64(double %321, double %322, double %327)
  store double %328, ptr %326, align 8, !tbaa !14
  %indvars.iv.next509 = or disjoint i64 %indvars.iv508, 1
  %329 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next509
  %330 = load double, ptr %329, align 8, !tbaa !14
  %331 = load double, ptr %319, align 8, !tbaa !30
  %332 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv.next509
  %333 = load i32, ptr %332, align 4, !tbaa !20
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %318, i64 %334
  %336 = load double, ptr %335, align 8, !tbaa !14
  %337 = tail call double @llvm.fmuladd.f64(double %330, double %331, double %336)
  store double %337, ptr %335, align 8, !tbaa !14
  %indvars.iv.next509.1 = add nuw nsw i64 %indvars.iv508, 2
  %niter605.next.1 = add i64 %niter605, 2
  %niter605.ncmp.1 = icmp eq i64 %niter605.next.1, %unroll_iter604
  br i1 %niter605.ncmp.1, label %._crit_edge418.loopexit.unr-lcssa, label %.lr.ph417.new, !llvm.loop !46

._crit_edge418.loopexit.unr-lcssa:                ; preds = %.lr.ph417.new, %.lr.ph417
  %indvars.iv508.unr = phi i64 [ 0, %.lr.ph417 ], [ %indvars.iv.next509.1, %.lr.ph417.new ]
  br i1 %lcmp.mod603.not, label %._crit_edge418, label %._crit_edge418.loopexit.epilog-lcssa

._crit_edge418.loopexit.epilog-lcssa:             ; preds = %._crit_edge418.loopexit.unr-lcssa
  %338 = getelementptr inbounds double, ptr %29, i64 %indvars.iv508.unr
  %339 = load double, ptr %338, align 8, !tbaa !14
  %340 = load double, ptr %319, align 8, !tbaa !30
  %341 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv508.unr
  %342 = load i32, ptr %341, align 4, !tbaa !20
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds double, ptr %318, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !14
  %346 = tail call double @llvm.fmuladd.f64(double %339, double %340, double %345)
  store double %346, ptr %344, align 8, !tbaa !14
  br label %._crit_edge418

._crit_edge418:                                   ; preds = %._crit_edge418.loopexit.epilog-lcssa, %._crit_edge418.loopexit.unr-lcssa, %313
  %347 = getelementptr inbounds i8, ptr %.1300420, i64 16
  %348 = load i32, ptr %347, align 8, !tbaa !28
  %.not339 = icmp eq i32 %348, -1
  br i1 %.not339, label %.loopexit348, label %313, !llvm.loop !47

.loopexit348:                                     ; preds = %._crit_edge418, %._crit_edge413, %._crit_edge402.thread, %243, %.lr.ph426
  %.3319 = phi double [ %.0316423, %.lr.ph426 ], [ %.0316423, %._crit_edge402.thread ], [ %.0316423, %243 ], [ %246, %._crit_edge413 ], [ %246, %._crit_edge418 ]
  %.4307 = phi i32 [ %.1304424, %.lr.ph426 ], [ %239, %._crit_edge402.thread ], [ %.1304424, %243 ], [ %.1304424, %._crit_edge413 ], [ %.1304424, %._crit_edge418 ]
  %.3298 = phi i32 [ %.0295425, %.lr.ph426 ], [ %242, %._crit_edge402.thread ], [ %.0295425, %243 ], [ %.0295425, %._crit_edge413 ], [ %.0295425, %._crit_edge418 ]
  %349 = add nsw i32 %.3298, 1
  %350 = icmp slt i32 %349, %.4307
  br i1 %350, label %.lr.ph426, label %._crit_edge427, !llvm.loop !48

._crit_edge427:                                   ; preds = %.loopexit348, %.preheader352, %.preheader351
  %.0316.lcssa = phi double [ 0xFFF0000000000000, %.preheader351 ], [ 0xFFF0000000000000, %.preheader352 ], [ %.3319, %.loopexit348 ]
  %.1304.lcssa = phi i32 [ %.0303436, %.preheader351 ], [ %.0303436, %.preheader352 ], [ %.4307, %.loopexit348 ]
  %351 = add nuw nsw i32 %.0301437, 1
  %352 = urem i32 %351, 10
  %353 = icmp eq i32 %352, 0
  br i1 %353, label %354, label %355

354:                                              ; preds = %._crit_edge427
  tail call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str)
  br label %355

355:                                              ; preds = %354, %._crit_edge427
  %356 = fcmp olt double %.0316.lcssa, %.0310435
  br i1 %356, label %357, label %371

357:                                              ; preds = %355
  %358 = load double, ptr %35, align 8, !tbaa !13
  %359 = fcmp olt double %.0316.lcssa, %358
  %brmerge.not = and i1 %359, %.0313434
  br i1 %brmerge.not, label %.thread, label %360

360:                                              ; preds = %357
  %361 = load i32, ptr %3, align 4, !tbaa !5
  %362 = icmp sgt i32 %361, 0
  br i1 %362, label %.lr.ph432, label %._crit_edge433

.lr.ph432:                                        ; preds = %360
  %363 = load i32, ptr %5, align 8, !tbaa !12
  %wide.trip.count516 = zext nneg i32 %361 to i64
  %min.iters.check567 = icmp ult i32 %361, 8
  br i1 %min.iters.check567, label %scalar.ph566.preheader, label %vector.ph568

vector.ph568:                                     ; preds = %.lr.ph432
  %n.vec570 = and i64 %wide.trip.count516, 2147483640
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %363, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body572

vector.body572:                                   ; preds = %vector.body572, %vector.ph568
  %index573 = phi i64 [ 0, %vector.ph568 ], [ %index.next574, %vector.body572 ]
  %364 = getelementptr inbounds i32, ptr %34, i64 %index573
  %365 = getelementptr inbounds i8, ptr %364, i64 16
  store <4 x i32> %broadcast.splat, ptr %364, align 4, !tbaa !20
  store <4 x i32> %broadcast.splat, ptr %365, align 4, !tbaa !20
  %index.next574 = add nuw i64 %index573, 8
  %366 = icmp eq i64 %index.next574, %n.vec570
  br i1 %366, label %middle.block565, label %vector.body572, !llvm.loop !49

middle.block565:                                  ; preds = %vector.body572
  %cmp.n575 = icmp eq i64 %n.vec570, %wide.trip.count516
  br i1 %cmp.n575, label %._crit_edge433, label %scalar.ph566.preheader

scalar.ph566.preheader:                           ; preds = %middle.block565, %.lr.ph432
  %indvars.iv513.ph = phi i64 [ 0, %.lr.ph432 ], [ %n.vec570, %middle.block565 ]
  br label %scalar.ph566

scalar.ph566:                                     ; preds = %scalar.ph566.preheader, %scalar.ph566
  %indvars.iv513 = phi i64 [ %indvars.iv.next514, %scalar.ph566 ], [ %indvars.iv513.ph, %scalar.ph566.preheader ]
  %367 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv513
  store i32 %363, ptr %367, align 4, !tbaa !20
  %indvars.iv.next514 = add nuw nsw i64 %indvars.iv513, 1
  %exitcond517.not = icmp eq i64 %indvars.iv.next514, %wide.trip.count516
  br i1 %exitcond517.not, label %._crit_edge433, label %scalar.ph566, !llvm.loop !50

._crit_edge433:                                   ; preds = %scalar.ph566, %middle.block565, %360
  tail call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str.1)
  %368 = fmul double %.0310435, 5.000000e-01
  %369 = load double, ptr %35, align 8, !tbaa !13
  %370 = tail call noundef double @_ZL3maxIdET_S0_S0_(double noundef %368, double noundef %369)
  br label %371

371:                                              ; preds = %._crit_edge433, %355
  %.2312 = phi double [ %370, %._crit_edge433 ], [ %.0310435, %355 ]
  %.6309 = phi i32 [ %361, %._crit_edge433 ], [ %.1304.lcssa, %355 ]
  %372 = load i32, ptr %64, align 4, !tbaa !25
  %373 = icmp slt i32 %351, %372
  br i1 %373, label %.preheader352, label %.thread

.thread:                                          ; preds = %371, %357, %.preheader353
  %.1302 = phi i32 [ 0, %.preheader353 ], [ %351, %357 ], [ %351, %371 ]
  tail call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str.2, i32 noundef %.1302)
  %374 = load i32, ptr %64, align 4, !tbaa !25
  %.not = icmp slt i32 %.1302, %374
  br i1 %.not, label %376, label %375

375:                                              ; preds = %.thread
  tail call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str.3)
  br label %376

376:                                              ; preds = %375, %.thread
  %377 = load i32, ptr %45, align 8, !tbaa !15
  %378 = load i32, ptr %5, align 8, !tbaa !12
  %379 = mul nsw i32 %378, %377
  %380 = icmp sgt i32 %379, 0
  br i1 %380, label %.lr.ph444.preheader, label %._crit_edge445

.lr.ph444.preheader:                              ; preds = %376
  %wide.trip.count521 = zext nneg i32 %379 to i64
  %xtraiter606 = and i64 %wide.trip.count521, 3
  %381 = icmp ult i32 %379, 4
  br i1 %381, label %._crit_edge445.loopexit.unr-lcssa, label %.lr.ph444.preheader.new

.lr.ph444.preheader.new:                          ; preds = %.lr.ph444.preheader
  %unroll_iter609 = and i64 %wide.trip.count521, 2147483644
  br label %.lr.ph444

.lr.ph444:                                        ; preds = %.lr.ph444, %.lr.ph444.preheader.new
  %indvars.iv518 = phi i64 [ 0, %.lr.ph444.preheader.new ], [ %indvars.iv.next519.3, %.lr.ph444 ]
  %.0273442 = phi double [ 0.000000e+00, %.lr.ph444.preheader.new ], [ %393, %.lr.ph444 ]
  %niter610 = phi i64 [ 0, %.lr.ph444.preheader.new ], [ %niter610.next.3, %.lr.ph444 ]
  %382 = getelementptr inbounds double, ptr %1, i64 %indvars.iv518
  %383 = load double, ptr %382, align 8, !tbaa !14
  %384 = tail call double @llvm.fmuladd.f64(double %383, double %383, double %.0273442)
  %indvars.iv.next519 = or disjoint i64 %indvars.iv518, 1
  %385 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next519
  %386 = load double, ptr %385, align 8, !tbaa !14
  %387 = tail call double @llvm.fmuladd.f64(double %386, double %386, double %384)
  %indvars.iv.next519.1 = or disjoint i64 %indvars.iv518, 2
  %388 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next519.1
  %389 = load double, ptr %388, align 8, !tbaa !14
  %390 = tail call double @llvm.fmuladd.f64(double %389, double %389, double %387)
  %indvars.iv.next519.2 = or disjoint i64 %indvars.iv518, 3
  %391 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next519.2
  %392 = load double, ptr %391, align 8, !tbaa !14
  %393 = tail call double @llvm.fmuladd.f64(double %392, double %392, double %390)
  %indvars.iv.next519.3 = add nuw nsw i64 %indvars.iv518, 4
  %niter610.next.3 = add i64 %niter610, 4
  %niter610.ncmp.3 = icmp eq i64 %niter610.next.3, %unroll_iter609
  br i1 %niter610.ncmp.3, label %._crit_edge445.loopexit.unr-lcssa, label %.lr.ph444, !llvm.loop !51

._crit_edge445.loopexit.unr-lcssa:                ; preds = %.lr.ph444, %.lr.ph444.preheader
  %.lcssa588.ph = phi double [ poison, %.lr.ph444.preheader ], [ %393, %.lr.ph444 ]
  %indvars.iv518.unr = phi i64 [ 0, %.lr.ph444.preheader ], [ %indvars.iv.next519.3, %.lr.ph444 ]
  %.0273442.unr = phi double [ 0.000000e+00, %.lr.ph444.preheader ], [ %393, %.lr.ph444 ]
  %lcmp.mod607.not = icmp eq i64 %xtraiter606, 0
  br i1 %lcmp.mod607.not, label %._crit_edge445.loopexit, label %.lr.ph444.epil

.lr.ph444.epil:                                   ; preds = %._crit_edge445.loopexit.unr-lcssa, %.lr.ph444.epil
  %indvars.iv518.epil = phi i64 [ %indvars.iv.next519.epil, %.lr.ph444.epil ], [ %indvars.iv518.unr, %._crit_edge445.loopexit.unr-lcssa ]
  %.0273442.epil = phi double [ %396, %.lr.ph444.epil ], [ %.0273442.unr, %._crit_edge445.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph444.epil ], [ 0, %._crit_edge445.loopexit.unr-lcssa ]
  %394 = getelementptr inbounds double, ptr %1, i64 %indvars.iv518.epil
  %395 = load double, ptr %394, align 8, !tbaa !14
  %396 = tail call double @llvm.fmuladd.f64(double %395, double %395, double %.0273442.epil)
  %indvars.iv.next519.epil = add nuw nsw i64 %indvars.iv518.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter606
  br i1 %epil.iter.cmp.not, label %._crit_edge445.loopexit, label %.lr.ph444.epil, !llvm.loop !52

._crit_edge445.loopexit:                          ; preds = %.lr.ph444.epil, %._crit_edge445.loopexit.unr-lcssa
  %.lcssa588 = phi double [ %.lcssa588.ph, %._crit_edge445.loopexit.unr-lcssa ], [ %396, %.lr.ph444.epil ]
  %397 = fmul double %.lcssa588, 5.000000e-01
  br label %._crit_edge445

._crit_edge445:                                   ; preds = %._crit_edge445.loopexit, %376
  %.0273.lcssa = phi double [ 0.000000e+00, %376 ], [ %397, %._crit_edge445.loopexit ]
  %398 = load i32, ptr %3, align 4, !tbaa !5
  %399 = mul nsw i32 %398, %378
  %400 = icmp sgt i32 %399, 0
  br i1 %400, label %.lr.ph452.preheader, label %.preheader

.lr.ph452.preheader:                              ; preds = %._crit_edge445
  %wide.trip.count526 = zext nneg i32 %399 to i64
  %xtraiter611 = and i64 %wide.trip.count526, 3
  %401 = icmp ult i32 %399, 4
  br i1 %401, label %.preheader.loopexit.unr-lcssa, label %.lr.ph452.preheader.new

.lr.ph452.preheader.new:                          ; preds = %.lr.ph452.preheader
  %unroll_iter616 = and i64 %wide.trip.count526, 2147483644
  br label %.lr.ph452

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph452, %.lr.ph452.preheader
  %.lcssa587.ph = phi double [ poison, %.lr.ph452.preheader ], [ %431, %.lr.ph452 ]
  %.1.lcssa.ph = phi i32 [ poison, %.lr.ph452.preheader ], [ %.1.3, %.lr.ph452 ]
  %indvars.iv523.unr = phi i64 [ 0, %.lr.ph452.preheader ], [ %indvars.iv.next524.3, %.lr.ph452 ]
  %.0450.unr = phi i32 [ 0, %.lr.ph452.preheader ], [ %.1.3, %.lr.ph452 ]
  %.1274449.unr = phi double [ %.0273.lcssa, %.lr.ph452.preheader ], [ %431, %.lr.ph452 ]
  %lcmp.mod613.not = icmp eq i64 %xtraiter611, 0
  br i1 %lcmp.mod613.not, label %.preheader, label %.lr.ph452.epil

.lr.ph452.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph452.epil
  %indvars.iv523.epil = phi i64 [ %indvars.iv.next524.epil, %.lr.ph452.epil ], [ %indvars.iv523.unr, %.preheader.loopexit.unr-lcssa ]
  %.0450.epil = phi i32 [ %.1.epil, %.lr.ph452.epil ], [ %.0450.unr, %.preheader.loopexit.unr-lcssa ]
  %.1274449.epil = phi double [ %404, %.lr.ph452.epil ], [ %.1274449.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter612 = phi i64 [ %epil.iter612.next, %.lr.ph452.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %402 = getelementptr inbounds double, ptr %12, i64 %indvars.iv523.epil
  %403 = load double, ptr %402, align 8, !tbaa !14
  %404 = fadd double %.1274449.epil, %403
  %405 = fcmp one double %403, 0.000000e+00
  %406 = zext i1 %405 to i32
  %.1.epil = add nuw nsw i32 %.0450.epil, %406
  %indvars.iv.next524.epil = add nuw nsw i64 %indvars.iv523.epil, 1
  %epil.iter612.next = add i64 %epil.iter612, 1
  %epil.iter612.cmp.not = icmp eq i64 %epil.iter612.next, %xtraiter611
  br i1 %epil.iter612.cmp.not, label %.preheader, label %.lr.ph452.epil, !llvm.loop !54

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph452.epil, %._crit_edge445
  %.1274.lcssa = phi double [ %.0273.lcssa, %._crit_edge445 ], [ %.lcssa587.ph, %.preheader.loopexit.unr-lcssa ], [ %404, %.lr.ph452.epil ]
  %.0.lcssa = phi i32 [ 0, %._crit_edge445 ], [ %.1.lcssa.ph, %.preheader.loopexit.unr-lcssa ], [ %.1.epil, %.lr.ph452.epil ]
  %407 = icmp sgt i32 %398, 0
  br i1 %407, label %.lr.ph458, label %._crit_edge459

.lr.ph458:                                        ; preds = %.preheader
  %408 = getelementptr inbounds i8, ptr %0, i64 48
  %409 = load ptr, ptr %408, align 8, !tbaa !16
  %410 = getelementptr inbounds i8, ptr %409, i64 8
  %411 = load ptr, ptr %410, align 8, !tbaa !19
  %412 = sext i32 %378 to i64
  %wide.trip.count531 = zext nneg i32 %398 to i64
  %xtraiter619 = and i64 %wide.trip.count531, 1
  %413 = icmp eq i32 %398, 1
  br i1 %413, label %._crit_edge459.loopexit.unr-lcssa, label %.lr.ph458.new

.lr.ph458.new:                                    ; preds = %.lr.ph458
  %unroll_iter623 = and i64 %wide.trip.count531, 2147483646
  br label %434

.lr.ph452:                                        ; preds = %.lr.ph452, %.lr.ph452.preheader.new
  %indvars.iv523 = phi i64 [ 0, %.lr.ph452.preheader.new ], [ %indvars.iv.next524.3, %.lr.ph452 ]
  %.0450 = phi i32 [ 0, %.lr.ph452.preheader.new ], [ %.1.3, %.lr.ph452 ]
  %.1274449 = phi double [ %.0273.lcssa, %.lr.ph452.preheader.new ], [ %431, %.lr.ph452 ]
  %niter617 = phi i64 [ 0, %.lr.ph452.preheader.new ], [ %niter617.next.3, %.lr.ph452 ]
  %414 = getelementptr inbounds double, ptr %12, i64 %indvars.iv523
  %415 = load double, ptr %414, align 8, !tbaa !14
  %416 = fadd double %.1274449, %415
  %417 = fcmp one double %415, 0.000000e+00
  %418 = zext i1 %417 to i32
  %.1 = add nuw nsw i32 %.0450, %418
  %indvars.iv.next524 = or disjoint i64 %indvars.iv523, 1
  %419 = getelementptr inbounds double, ptr %12, i64 %indvars.iv.next524
  %420 = load double, ptr %419, align 8, !tbaa !14
  %421 = fadd double %416, %420
  %422 = fcmp one double %420, 0.000000e+00
  %423 = zext i1 %422 to i32
  %.1.1 = add nuw nsw i32 %.1, %423
  %indvars.iv.next524.1 = or disjoint i64 %indvars.iv523, 2
  %424 = getelementptr inbounds double, ptr %12, i64 %indvars.iv.next524.1
  %425 = load double, ptr %424, align 8, !tbaa !14
  %426 = fadd double %421, %425
  %427 = fcmp one double %425, 0.000000e+00
  %428 = zext i1 %427 to i32
  %.1.2 = add nuw nsw i32 %.1.1, %428
  %indvars.iv.next524.2 = or disjoint i64 %indvars.iv523, 3
  %429 = getelementptr inbounds double, ptr %12, i64 %indvars.iv.next524.2
  %430 = load double, ptr %429, align 8, !tbaa !14
  %431 = fadd double %426, %430
  %432 = fcmp one double %430, 0.000000e+00
  %433 = zext i1 %432 to i32
  %.1.3 = add nuw nsw i32 %.1.2, %433
  %indvars.iv.next524.3 = add nuw nsw i64 %indvars.iv523, 4
  %niter617.next.3 = add i64 %niter617, 4
  %niter617.ncmp.3 = icmp eq i64 %niter617.next.3, %unroll_iter616
  br i1 %niter617.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph452, !llvm.loop !55

434:                                              ; preds = %434, %.lr.ph458.new
  %indvars.iv528 = phi i64 [ 0, %.lr.ph458.new ], [ %indvars.iv.next529.1, %434 ]
  %.2457 = phi double [ %.1274.lcssa, %.lr.ph458.new ], [ %452, %434 ]
  %niter624 = phi i64 [ 0, %.lr.ph458.new ], [ %niter624.next.1, %434 ]
  %435 = mul nsw i64 %indvars.iv528, %412
  %436 = getelementptr inbounds double, ptr %411, i64 %indvars.iv528
  %437 = load double, ptr %436, align 8, !tbaa !14
  %438 = fptosi double %437 to i32
  %439 = sext i32 %438 to i64
  %440 = getelementptr double, ptr %12, i64 %435
  %441 = getelementptr double, ptr %440, i64 %439
  %442 = load double, ptr %441, align 8, !tbaa !14
  %443 = fsub double %.2457, %442
  %indvars.iv.next529 = or disjoint i64 %indvars.iv528, 1
  %444 = mul nsw i64 %indvars.iv.next529, %412
  %445 = getelementptr inbounds double, ptr %411, i64 %indvars.iv.next529
  %446 = load double, ptr %445, align 8, !tbaa !14
  %447 = fptosi double %446 to i32
  %448 = sext i32 %447 to i64
  %449 = getelementptr double, ptr %12, i64 %444
  %450 = getelementptr double, ptr %449, i64 %448
  %451 = load double, ptr %450, align 8, !tbaa !14
  %452 = fsub double %443, %451
  %indvars.iv.next529.1 = add nuw nsw i64 %indvars.iv528, 2
  %niter624.next.1 = add i64 %niter624, 2
  %niter624.ncmp.1 = icmp eq i64 %niter624.next.1, %unroll_iter623
  br i1 %niter624.ncmp.1, label %._crit_edge459.loopexit.unr-lcssa, label %434, !llvm.loop !56

._crit_edge459.loopexit.unr-lcssa:                ; preds = %434, %.lr.ph458
  %.lcssa.ph = phi double [ poison, %.lr.ph458 ], [ %452, %434 ]
  %indvars.iv528.unr = phi i64 [ 0, %.lr.ph458 ], [ %indvars.iv.next529.1, %434 ]
  %.2457.unr = phi double [ %.1274.lcssa, %.lr.ph458 ], [ %452, %434 ]
  %lcmp.mod621.not = icmp eq i64 %xtraiter619, 0
  br i1 %lcmp.mod621.not, label %._crit_edge459, label %._crit_edge459.loopexit.epilog-lcssa

._crit_edge459.loopexit.epilog-lcssa:             ; preds = %._crit_edge459.loopexit.unr-lcssa
  %453 = mul nsw i64 %indvars.iv528.unr, %412
  %454 = getelementptr inbounds double, ptr %411, i64 %indvars.iv528.unr
  %455 = load double, ptr %454, align 8, !tbaa !14
  %456 = fptosi double %455 to i32
  %457 = sext i32 %456 to i64
  %458 = getelementptr double, ptr %12, i64 %453
  %459 = getelementptr double, ptr %458, i64 %457
  %460 = load double, ptr %459, align 8, !tbaa !14
  %461 = fsub double %.2457.unr, %460
  br label %._crit_edge459

._crit_edge459:                                   ; preds = %._crit_edge459.loopexit.epilog-lcssa, %._crit_edge459.loopexit.unr-lcssa, %.preheader
  %.2.lcssa = phi double [ %.1274.lcssa, %.preheader ], [ %.lcssa.ph, %._crit_edge459.loopexit.unr-lcssa ], [ %461, %._crit_edge459.loopexit.epilog-lcssa ]
  tail call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str.4, double noundef %.2.lcssa)
  tail call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str.5, i32 noundef %.0.lcssa)
  tail call void @_ZdaPv(ptr noundef nonnull %12) #10
  tail call void @_ZdaPv(ptr noundef nonnull %17) #10
  tail call void @_ZdaPv(ptr noundef nonnull %22) #10
  tail call void @_ZdaPv(ptr noundef nonnull %25) #10
  tail call void @_ZdaPv(ptr noundef nonnull %28) #10
  tail call void @_ZdaPv(ptr noundef nonnull %29) #10
  tail call void @_ZdaPv(ptr noundef nonnull %32) #10
  tail call void @_ZdaPv(ptr noundef nonnull %33) #10
  tail call void @_ZdaPv(ptr noundef nonnull %34) #10
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef double @_ZL3maxIdET_S0_S0_(double noundef, double noundef) local_unnamed_addr #5

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL4swapIdEvRT_S1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL4infoPKcz(ptr noundef, ...) local_unnamed_addr #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

attributes #0 = { nobuiltin allocsize(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 = { nobuiltin 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { 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 #5 = { inlinehint 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 #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { builtin allocsize(0) }
attributes #9 = { nounwind }
attributes #10 = { builtin nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 28}
!6 = !{!"_ZTS15Solver_MCSVM_CS", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !11, i64 40, !7, i64 48}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!6, !10, i64 32}
!13 = !{!6, !11, i64 40}
!14 = !{!11, !11, i64 0}
!15 = !{!6, !10, i64 24}
!16 = !{!6, !7, i64 48}
!17 = !{!18, !7, i64 16}
!18 = !{!"_ZTS7problem", !10, i64 0, !10, i64 4, !7, i64 8, !7, i64 16, !11, i64 24}
!19 = !{!18, !7, i64 8}
!20 = !{!10, !10, i64 0}
!21 = distinct !{!21, !22, !23, !24}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!"llvm.loop.isvectorized", i32 1}
!24 = !{!"llvm.loop.unroll.runtime.disable"}
!25 = !{!6, !10, i64 36}
!26 = distinct !{!26, !22, !24, !23}
!27 = !{!7, !7, i64 0}
!28 = !{!29, !10, i64 0}
!29 = !{!"_ZTS12feature_node", !10, i64 0, !11, i64 8}
!30 = !{!29, !11, i64 8}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = !{!6, !7, i64 16}
!35 = distinct !{!35, !22, !23, !24}
!36 = distinct !{!36, !22, !24, !23}
!37 = distinct !{!37, !22}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22}
!40 = !{!6, !7, i64 8}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !22}
!43 = !{!6, !7, i64 0}
!44 = distinct !{!44, !22}
!45 = distinct !{!45, !22}
!46 = distinct !{!46, !22}
!47 = distinct !{!47, !22}
!48 = distinct !{!48, !22}
!49 = distinct !{!49, !22, !23, !24}
!50 = distinct !{!50, !22, !24, !23}
!51 = distinct !{!51, !22}
!52 = distinct !{!52, !53}
!53 = !{!"llvm.loop.unroll.disable"}
!54 = distinct !{!54, !53}
!55 = distinct !{!55, !22}
!56 = distinct !{!56, !22}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass