; LLVM IR from robotic-vision-lab/Cloud-Object-Recognition-Engine :: 3rdparty/libsvm (svm)

; 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"

%struct.decision_function = type { ptr, double }
%struct.svm_problem = type { i32, ptr, ptr }
%struct.svm_model = type { %struct.svm_parameter, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32 }
%struct.svm_parameter = type { i32, i32, i32, double, double, double, double, double, i32, ptr, ptr, double, double, i32, i32 }

@stderr = external global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [16 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: nounwind
declare void @free(ptr noundef) #1

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

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

; Function Attrs: mustprogress uwtable
define dso_local ptr @svm_train(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %struct.decision_function, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %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 i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca %struct.svm_problem, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca %struct.decision_function, align 8
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %45 = call noalias ptr @malloc(i64 noundef 184) #7
  store ptr %45, ptr %5, align 8, !tbaa !5
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.svm_model, ptr %47, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %48, ptr align 8 %46, i64 104, i1 false), !tbaa.struct !9
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.svm_model, ptr %49, i32 0, i32 11
  store i32 0, ptr %50, align 8, !tbaa !14
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.svm_parameter, ptr %51, i32 0, i32 0
  %53 = load i32, ptr %52, align 8, !tbaa !17
  %54 = icmp eq i32 %53, 2
  br i1 %54, label %65, label %55

55:                                               ; preds = %2
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.svm_parameter, ptr %56, i32 0, i32 0
  %58 = load i32, ptr %57, align 8, !tbaa !17
  %59 = icmp eq i32 %58, 3
  br i1 %59, label %65, label %60

60:                                               ; preds = %55
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.svm_parameter, ptr %61, i32 0, i32 0
  %63 = load i32, ptr %62, align 8, !tbaa !17
  %64 = icmp eq i32 %63, 4
  br i1 %64, label %65, label %227

65:                                               ; preds = %60, %55, %2
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.svm_model, ptr %66, i32 0, i32 1
  store i32 2, ptr %67, align 8, !tbaa !18
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.svm_model, ptr %68, i32 0, i32 9
  store ptr null, ptr %69, align 8, !tbaa !19
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.svm_model, ptr %70, i32 0, i32 10
  store ptr null, ptr %71, align 8, !tbaa !20
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.svm_model, ptr %72, i32 0, i32 6
  store ptr null, ptr %73, align 8, !tbaa !21
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.svm_model, ptr %74, i32 0, i32 7
  store ptr null, ptr %75, align 8, !tbaa !22
  %76 = call noalias ptr @malloc(i64 noundef 8) #7
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.svm_model, ptr %77, i32 0, i32 4
  store ptr %76, ptr %78, align 8, !tbaa !23
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.svm_parameter, ptr %79, i32 0, i32 14
  %81 = load i32, ptr %80, align 4, !tbaa !24
  %82 = icmp ne i32 %81, 0
  br i1 %82, label %83, label %104

83:                                               ; preds = %65
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.svm_parameter, ptr %84, i32 0, i32 0
  %86 = load i32, ptr %85, align 8, !tbaa !17
  %87 = icmp eq i32 %86, 3
  br i1 %87, label %93, label %88

88:                                               ; preds = %83
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.svm_parameter, ptr %89, i32 0, i32 0
  %91 = load i32, ptr %90, align 8, !tbaa !17
  %92 = icmp eq i32 %91, 4
  br i1 %92, label %93, label %104

93:                                               ; preds = %88, %83
  %94 = call noalias ptr @malloc(i64 noundef 8) #7
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.svm_model, ptr %95, i32 0, i32 6
  store ptr %94, ptr %96, align 8, !tbaa !21
  %97 = load ptr, ptr %3, align 8, !tbaa !5
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = call noundef double @_ZL19svm_svr_probabilityPK11svm_problemPK13svm_parameter(ptr noundef %97, ptr noundef %98)
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.svm_model, ptr %100, i32 0, i32 6
  %102 = load ptr, ptr %101, align 8, !tbaa !21
  %103 = getelementptr inbounds double, ptr %102, i64 0
  store double %99, ptr %103, align 8, !tbaa !12
  br label %104

104:                                              ; preds = %93, %88, %65
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #6
  %105 = load ptr, ptr %3, align 8, !tbaa !5
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = call { ptr, double } @_ZL13svm_train_onePK11svm_problemPK13svm_parameterdd(ptr noundef %105, ptr noundef %106, double noundef 0.000000e+00, double noundef 0.000000e+00)
  %108 = getelementptr inbounds { ptr, double }, ptr %6, i32 0, i32 0
  %109 = extractvalue { ptr, double } %107, 0
  store ptr %109, ptr %108, align 8
  %110 = getelementptr inbounds { ptr, double }, ptr %6, i32 0, i32 1
  %111 = extractvalue { ptr, double } %107, 1
  store double %111, ptr %110, align 8
  %112 = call noalias ptr @malloc(i64 noundef 8) #7
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.svm_model, ptr %113, i32 0, i32 5
  store ptr %112, ptr %114, align 8, !tbaa !25
  %115 = getelementptr inbounds %struct.decision_function, ptr %6, i32 0, i32 1
  %116 = load double, ptr %115, align 8, !tbaa !26
  %117 = load ptr, ptr %5, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.svm_model, ptr %117, i32 0, i32 5
  %119 = load ptr, ptr %118, align 8, !tbaa !25
  %120 = getelementptr inbounds double, ptr %119, i64 0
  store double %116, ptr %120, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  store i32 0, ptr %7, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !10
  br label %121

121:                                              ; preds = %140, %104
  %122 = load i32, ptr %8, align 4, !tbaa !10
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.svm_problem, ptr %123, i32 0, i32 0
  %125 = load i32, ptr %124, align 8, !tbaa !28
  %126 = icmp slt i32 %122, %125
  br i1 %126, label %127, label %143

127:                                              ; preds = %121
  %128 = getelementptr inbounds %struct.decision_function, ptr %6, i32 0, i32 0
  %129 = load ptr, ptr %128, align 8, !tbaa !30
  %130 = load i32, ptr %8, align 4, !tbaa !10
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds double, ptr %129, i64 %131
  %133 = load double, ptr %132, align 8, !tbaa !12
  %134 = call double @llvm.fabs.f64(double %133)
  %135 = fcmp ogt double %134, 0.000000e+00
  br i1 %135, label %136, label %139

136:                                              ; preds = %127
  %137 = load i32, ptr %7, align 4, !tbaa !10
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %7, align 4, !tbaa !10
  br label %139

139:                                              ; preds = %136, %127
  br label %140

140:                                              ; preds = %139
  %141 = load i32, ptr %8, align 4, !tbaa !10
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %8, align 4, !tbaa !10
  br label %121, !llvm.loop !31

143:                                              ; preds = %121
  %144 = load i32, ptr %7, align 4, !tbaa !10
  %145 = load ptr, ptr %5, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.svm_model, ptr %145, i32 0, i32 2
  store i32 %144, ptr %146, align 4, !tbaa !33
  %147 = load i32, ptr %7, align 4, !tbaa !10
  %148 = sext i32 %147 to i64
  %149 = mul i64 %148, 8
  %150 = call noalias ptr @malloc(i64 noundef %149) #7
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.svm_model, ptr %151, i32 0, i32 3
  store ptr %150, ptr %152, align 8, !tbaa !34
  %153 = load i32, ptr %7, align 4, !tbaa !10
  %154 = sext i32 %153 to i64
  %155 = mul i64 %154, 8
  %156 = call noalias ptr @malloc(i64 noundef %155) #7
  %157 = load ptr, ptr %5, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.svm_model, ptr %157, i32 0, i32 4
  %159 = load ptr, ptr %158, align 8, !tbaa !23
  %160 = getelementptr inbounds ptr, ptr %159, i64 0
  store ptr %156, ptr %160, align 8, !tbaa !5
  %161 = load i32, ptr %7, align 4, !tbaa !10
  %162 = sext i32 %161 to i64
  %163 = mul i64 %162, 4
  %164 = call noalias ptr @malloc(i64 noundef %163) #7
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.svm_model, ptr %165, i32 0, i32 8
  store ptr %164, ptr %166, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !10
  store i32 0, ptr %8, align 4, !tbaa !10
  br label %167

167:                                              ; preds = %221, %143
  %168 = load i32, ptr %8, align 4, !tbaa !10
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.svm_problem, ptr %169, i32 0, i32 0
  %171 = load i32, ptr %170, align 8, !tbaa !28
  %172 = icmp slt i32 %168, %171
  br i1 %172, label %173, label %224

173:                                              ; preds = %167
  %174 = getelementptr inbounds %struct.decision_function, ptr %6, i32 0, i32 0
  %175 = load ptr, ptr %174, align 8, !tbaa !30
  %176 = load i32, ptr %8, align 4, !tbaa !10
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %175, i64 %177
  %179 = load double, ptr %178, align 8, !tbaa !12
  %180 = call double @llvm.fabs.f64(double %179)
  %181 = fcmp ogt double %180, 0.000000e+00
  br i1 %181, label %182, label %220

182:                                              ; preds = %173
  %183 = load ptr, ptr %3, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.svm_problem, ptr %183, i32 0, i32 2
  %185 = load ptr, ptr %184, align 8, !tbaa !36
  %186 = load i32, ptr %8, align 4, !tbaa !10
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds ptr, ptr %185, i64 %187
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  %190 = load ptr, ptr %5, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.svm_model, ptr %190, i32 0, i32 3
  %192 = load ptr, ptr %191, align 8, !tbaa !34
  %193 = load i32, ptr %9, align 4, !tbaa !10
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds ptr, ptr %192, i64 %194
  store ptr %189, ptr %195, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.decision_function, ptr %6, i32 0, i32 0
  %197 = load ptr, ptr %196, align 8, !tbaa !30
  %198 = load i32, ptr %8, align 4, !tbaa !10
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds double, ptr %197, i64 %199
  %201 = load double, ptr %200, align 8, !tbaa !12
  %202 = load ptr, ptr %5, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.svm_model, ptr %202, i32 0, i32 4
  %204 = load ptr, ptr %203, align 8, !tbaa !23
  %205 = getelementptr inbounds ptr, ptr %204, i64 0
  %206 = load ptr, ptr %205, align 8, !tbaa !5
  %207 = load i32, ptr %9, align 4, !tbaa !10
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  store double %201, ptr %209, align 8, !tbaa !12
  %210 = load i32, ptr %8, align 4, !tbaa !10
  %211 = add nsw i32 %210, 1
  %212 = load ptr, ptr %5, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.svm_model, ptr %212, i32 0, i32 8
  %214 = load ptr, ptr %213, align 8, !tbaa !35
  %215 = load i32, ptr %9, align 4, !tbaa !10
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds i32, ptr %214, i64 %216
  store i32 %211, ptr %217, align 4, !tbaa !10
  %218 = load i32, ptr %9, align 4, !tbaa !10
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %9, align 4, !tbaa !10
  br label %220

220:                                              ; preds = %182, %173
  br label %221

221:                                              ; preds = %220
  %222 = load i32, ptr %8, align 4, !tbaa !10
  %223 = add nsw i32 %222, 1
  store i32 %223, ptr %8, align 4, !tbaa !10
  br label %167, !llvm.loop !37

224:                                              ; preds = %167
  %225 = getelementptr inbounds %struct.decision_function, ptr %6, i32 0, i32 0
  %226 = load ptr, ptr %225, align 8, !tbaa !30
  call void @free(ptr noundef %226) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #6
  br label %1117

227:                                              ; preds = %60
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  %228 = load ptr, ptr %3, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.svm_problem, ptr %228, i32 0, i32 0
  %230 = load i32, ptr %229, align 8, !tbaa !28
  store i32 %230, ptr %10, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  store ptr null, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %231 = load i32, ptr %10, align 4, !tbaa !10
  %232 = sext i32 %231 to i64
  %233 = mul i64 %232, 4
  %234 = call noalias ptr @malloc(i64 noundef %233) #7
  store ptr %234, ptr %15, align 8, !tbaa !5
  %235 = load ptr, ptr %3, align 8, !tbaa !5
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_ZL17svm_group_classesPK11svm_problemPiPS2_S3_S3_S2_(ptr noundef %235, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %236)
  %237 = load i32, ptr %11, align 4, !tbaa !10
  %238 = icmp eq i32 %237, 1
  br i1 %238, label %239, label %240

239:                                              ; preds = %227
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str.5)
  br label %240

240:                                              ; preds = %239, %227
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %241 = load i32, ptr %10, align 4, !tbaa !10
  %242 = sext i32 %241 to i64
  %243 = mul i64 %242, 8
  %244 = call noalias ptr @malloc(i64 noundef %243) #7
  store ptr %244, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %245

245:                                              ; preds = %265, %240
  %246 = load i32, ptr %17, align 4, !tbaa !10
  %247 = load i32, ptr %10, align 4, !tbaa !10
  %248 = icmp slt i32 %246, %247
  br i1 %248, label %249, label %268

249:                                              ; preds = %245
  %250 = load ptr, ptr %3, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.svm_problem, ptr %250, i32 0, i32 2
  %252 = load ptr, ptr %251, align 8, !tbaa !36
  %253 = load ptr, ptr %15, align 8, !tbaa !5
  %254 = load i32, ptr %17, align 4, !tbaa !10
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %253, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !10
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds ptr, ptr %252, i64 %258
  %260 = load ptr, ptr %259, align 8, !tbaa !5
  %261 = load ptr, ptr %16, align 8, !tbaa !5
  %262 = load i32, ptr %17, align 4, !tbaa !10
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds ptr, ptr %261, i64 %263
  store ptr %260, ptr %264, align 8, !tbaa !5
  br label %265

265:                                              ; preds = %249
  %266 = load i32, ptr %17, align 4, !tbaa !10
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr %17, align 4, !tbaa !10
  br label %245, !llvm.loop !38

268:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %269 = load i32, ptr %11, align 4, !tbaa !10
  %270 = sext i32 %269 to i64
  %271 = mul i64 %270, 8
  %272 = call noalias ptr @malloc(i64 noundef %271) #7
  store ptr %272, ptr %18, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %273

273:                                              ; preds = %285, %268
  %274 = load i32, ptr %17, align 4, !tbaa !10
  %275 = load i32, ptr %11, align 4, !tbaa !10
  %276 = icmp slt i32 %274, %275
  br i1 %276, label %277, label %288

277:                                              ; preds = %273
  %278 = load ptr, ptr %4, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.svm_parameter, ptr %278, i32 0, i32 7
  %280 = load double, ptr %279, align 8, !tbaa !39
  %281 = load ptr, ptr %18, align 8, !tbaa !5
  %282 = load i32, ptr %17, align 4, !tbaa !10
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %281, i64 %283
  store double %280, ptr %284, align 8, !tbaa !12
  br label %285

285:                                              ; preds = %277
  %286 = load i32, ptr %17, align 4, !tbaa !10
  %287 = add nsw i32 %286, 1
  store i32 %287, ptr %17, align 4, !tbaa !10
  br label %273, !llvm.loop !40

288:                                              ; preds = %273
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %289

289:                                              ; preds = %348, %288
  %290 = load i32, ptr %17, align 4, !tbaa !10
  %291 = load ptr, ptr %4, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.svm_parameter, ptr %291, i32 0, i32 8
  %293 = load i32, ptr %292, align 8, !tbaa !41
  %294 = icmp slt i32 %290, %293
  br i1 %294, label %295, label %351

295:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !10
  br label %296

296:                                              ; preds = %316, %295
  %297 = load i32, ptr %19, align 4, !tbaa !10
  %298 = load i32, ptr %11, align 4, !tbaa !10
  %299 = icmp slt i32 %297, %298
  br i1 %299, label %300, label %319

300:                                              ; preds = %296
  %301 = load ptr, ptr %4, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.svm_parameter, ptr %301, i32 0, i32 9
  %303 = load ptr, ptr %302, align 8, !tbaa !42
  %304 = load i32, ptr %17, align 4, !tbaa !10
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds i32, ptr %303, i64 %305
  %307 = load i32, ptr %306, align 4, !tbaa !10
  %308 = load ptr, ptr %12, align 8, !tbaa !5
  %309 = load i32, ptr %19, align 4, !tbaa !10
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %308, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !10
  %313 = icmp eq i32 %307, %312
  br i1 %313, label %314, label %315

314:                                              ; preds = %300
  br label %319

315:                                              ; preds = %300
  br label %316

316:                                              ; preds = %315
  %317 = load i32, ptr %19, align 4, !tbaa !10
  %318 = add nsw i32 %317, 1
  store i32 %318, ptr %19, align 4, !tbaa !10
  br label %296, !llvm.loop !43

319:                                              ; preds = %314, %296
  %320 = load i32, ptr %19, align 4, !tbaa !10
  %321 = load i32, ptr %11, align 4, !tbaa !10
  %322 = icmp eq i32 %320, %321
  br i1 %322, label %323, label %333

323:                                              ; preds = %319
  %324 = load ptr, ptr @stderr, align 8, !tbaa !5
  %325 = load ptr, ptr %4, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.svm_parameter, ptr %325, i32 0, i32 9
  %327 = load ptr, ptr %326, align 8, !tbaa !42
  %328 = load i32, ptr %17, align 4, !tbaa !10
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %327, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !10
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %324, ptr noundef @.str.6, i32 noundef %331) #6
  br label %347

333:                                              ; preds = %319
  %334 = load ptr, ptr %4, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.svm_parameter, ptr %334, i32 0, i32 10
  %336 = load ptr, ptr %335, align 8, !tbaa !44
  %337 = load i32, ptr %17, align 4, !tbaa !10
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds double, ptr %336, i64 %338
  %340 = load double, ptr %339, align 8, !tbaa !12
  %341 = load ptr, ptr %18, align 8, !tbaa !5
  %342 = load i32, ptr %19, align 4, !tbaa !10
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds double, ptr %341, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !12
  %346 = fmul double %345, %340
  store double %346, ptr %344, align 8, !tbaa !12
  br label %347

347:                                              ; preds = %333, %323
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %348

348:                                              ; preds = %347
  %349 = load i32, ptr %17, align 4, !tbaa !10
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %17, align 4, !tbaa !10
  br label %289, !llvm.loop !45

351:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %352 = load i32, ptr %10, align 4, !tbaa !10
  %353 = sext i32 %352 to i64
  %354 = mul i64 %353, 1
  %355 = call noalias ptr @malloc(i64 noundef %354) #7
  store ptr %355, ptr %20, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %356

356:                                              ; preds = %365, %351
  %357 = load i32, ptr %17, align 4, !tbaa !10
  %358 = load i32, ptr %10, align 4, !tbaa !10
  %359 = icmp slt i32 %357, %358
  br i1 %359, label %360, label %368

360:                                              ; preds = %356
  %361 = load ptr, ptr %20, align 8, !tbaa !5
  %362 = load i32, ptr %17, align 4, !tbaa !10
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds i8, ptr %361, i64 %363
  store i8 0, ptr %364, align 1, !tbaa !46
  br label %365

365:                                              ; preds = %360
  %366 = load i32, ptr %17, align 4, !tbaa !10
  %367 = add nsw i32 %366, 1
  store i32 %367, ptr %17, align 4, !tbaa !10
  br label %356, !llvm.loop !48

368:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %369 = load i32, ptr %11, align 4, !tbaa !10
  %370 = load i32, ptr %11, align 4, !tbaa !10
  %371 = sub nsw i32 %370, 1
  %372 = mul nsw i32 %369, %371
  %373 = sdiv i32 %372, 2
  %374 = sext i32 %373 to i64
  %375 = mul i64 %374, 16
  %376 = call noalias ptr @malloc(i64 noundef %375) #7
  store ptr %376, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  store ptr null, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  store ptr null, ptr %23, align 8, !tbaa !5
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.svm_parameter, ptr %377, i32 0, i32 14
  %379 = load i32, ptr %378, align 4, !tbaa !24
  %380 = icmp ne i32 %379, 0
  br i1 %380, label %381, label %398

381:                                              ; preds = %368
  %382 = load i32, ptr %11, align 4, !tbaa !10
  %383 = load i32, ptr %11, align 4, !tbaa !10
  %384 = sub nsw i32 %383, 1
  %385 = mul nsw i32 %382, %384
  %386 = sdiv i32 %385, 2
  %387 = sext i32 %386 to i64
  %388 = mul i64 %387, 8
  %389 = call noalias ptr @malloc(i64 noundef %388) #7
  store ptr %389, ptr %22, align 8, !tbaa !5
  %390 = load i32, ptr %11, align 4, !tbaa !10
  %391 = load i32, ptr %11, align 4, !tbaa !10
  %392 = sub nsw i32 %391, 1
  %393 = mul nsw i32 %390, %392
  %394 = sdiv i32 %393, 2
  %395 = sext i32 %394 to i64
  %396 = mul i64 %395, 8
  %397 = call noalias ptr @malloc(i64 noundef %396) #7
  store ptr %397, ptr %23, align 8, !tbaa !5
  br label %398

398:                                              ; preds = %381, %368
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !10
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %399

399:                                              ; preds = %637, %398
  %400 = load i32, ptr %17, align 4, !tbaa !10
  %401 = load i32, ptr %11, align 4, !tbaa !10
  %402 = icmp slt i32 %400, %401
  br i1 %402, label %403, label %640

403:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %404 = load i32, ptr %17, align 4, !tbaa !10
  %405 = add nsw i32 %404, 1
  store i32 %405, ptr %25, align 4, !tbaa !10
  br label %406

406:                                              ; preds = %633, %403
  %407 = load i32, ptr %25, align 4, !tbaa !10
  %408 = load i32, ptr %11, align 4, !tbaa !10
  %409 = icmp slt i32 %407, %408
  br i1 %409, label %411, label %410

410:                                              ; preds = %406
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %636

411:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %412 = load ptr, ptr %13, align 8, !tbaa !5
  %413 = load i32, ptr %17, align 4, !tbaa !10
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i32, ptr %412, i64 %414
  %416 = load i32, ptr %415, align 4, !tbaa !10
  store i32 %416, ptr %27, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %417 = load ptr, ptr %13, align 8, !tbaa !5
  %418 = load i32, ptr %25, align 4, !tbaa !10
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %417, i64 %419
  %421 = load i32, ptr %420, align 4, !tbaa !10
  store i32 %421, ptr %28, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %422 = load ptr, ptr %14, align 8, !tbaa !5
  %423 = load i32, ptr %17, align 4, !tbaa !10
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds i32, ptr %422, i64 %424
  %426 = load i32, ptr %425, align 4, !tbaa !10
  store i32 %426, ptr %29, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  %427 = load ptr, ptr %14, align 8, !tbaa !5
  %428 = load i32, ptr %25, align 4, !tbaa !10
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds i32, ptr %427, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !10
  store i32 %431, ptr %30, align 4, !tbaa !10
  %432 = load i32, ptr %29, align 4, !tbaa !10
  %433 = load i32, ptr %30, align 4, !tbaa !10
  %434 = add nsw i32 %432, %433
  %435 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 0
  store i32 %434, ptr %435, align 8, !tbaa !28
  %436 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 0
  %437 = load i32, ptr %436, align 8, !tbaa !28
  %438 = sext i32 %437 to i64
  %439 = mul i64 %438, 8
  %440 = call noalias ptr @malloc(i64 noundef %439) #7
  %441 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 2
  store ptr %440, ptr %441, align 8, !tbaa !36
  %442 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 0
  %443 = load i32, ptr %442, align 8, !tbaa !28
  %444 = sext i32 %443 to i64
  %445 = mul i64 %444, 8
  %446 = call noalias ptr @malloc(i64 noundef %445) #7
  %447 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 1
  store ptr %446, ptr %447, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 0, ptr %31, align 4, !tbaa !10
  br label %448

448:                                              ; preds = %470, %411
  %449 = load i32, ptr %31, align 4, !tbaa !10
  %450 = load i32, ptr %29, align 4, !tbaa !10
  %451 = icmp slt i32 %449, %450
  br i1 %451, label %452, label %473

452:                                              ; preds = %448
  %453 = load ptr, ptr %16, align 8, !tbaa !5
  %454 = load i32, ptr %27, align 4, !tbaa !10
  %455 = load i32, ptr %31, align 4, !tbaa !10
  %456 = add nsw i32 %454, %455
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds ptr, ptr %453, i64 %457
  %459 = load ptr, ptr %458, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 2
  %461 = load ptr, ptr %460, align 8, !tbaa !36
  %462 = load i32, ptr %31, align 4, !tbaa !10
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds ptr, ptr %461, i64 %463
  store ptr %459, ptr %464, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 1
  %466 = load ptr, ptr %465, align 8, !tbaa !49
  %467 = load i32, ptr %31, align 4, !tbaa !10
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds double, ptr %466, i64 %468
  store double 1.000000e+00, ptr %469, align 8, !tbaa !12
  br label %470

470:                                              ; preds = %452
  %471 = load i32, ptr %31, align 4, !tbaa !10
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr %31, align 4, !tbaa !10
  br label %448, !llvm.loop !50

473:                                              ; preds = %448
  store i32 0, ptr %31, align 4, !tbaa !10
  br label %474

474:                                              ; preds = %500, %473
  %475 = load i32, ptr %31, align 4, !tbaa !10
  %476 = load i32, ptr %30, align 4, !tbaa !10
  %477 = icmp slt i32 %475, %476
  br i1 %477, label %478, label %503

478:                                              ; preds = %474
  %479 = load ptr, ptr %16, align 8, !tbaa !5
  %480 = load i32, ptr %28, align 4, !tbaa !10
  %481 = load i32, ptr %31, align 4, !tbaa !10
  %482 = add nsw i32 %480, %481
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds ptr, ptr %479, i64 %483
  %485 = load ptr, ptr %484, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 2
  %487 = load ptr, ptr %486, align 8, !tbaa !36
  %488 = load i32, ptr %29, align 4, !tbaa !10
  %489 = load i32, ptr %31, align 4, !tbaa !10
  %490 = add nsw i32 %488, %489
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds ptr, ptr %487, i64 %491
  store ptr %485, ptr %492, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 1
  %494 = load ptr, ptr %493, align 8, !tbaa !49
  %495 = load i32, ptr %29, align 4, !tbaa !10
  %496 = load i32, ptr %31, align 4, !tbaa !10
  %497 = add nsw i32 %495, %496
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds double, ptr %494, i64 %498
  store double -1.000000e+00, ptr %499, align 8, !tbaa !12
  br label %500

500:                                              ; preds = %478
  %501 = load i32, ptr %31, align 4, !tbaa !10
  %502 = add nsw i32 %501, 1
  store i32 %502, ptr %31, align 4, !tbaa !10
  br label %474, !llvm.loop !51

503:                                              ; preds = %474
  %504 = load ptr, ptr %4, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.svm_parameter, ptr %504, i32 0, i32 14
  %506 = load i32, ptr %505, align 4, !tbaa !24
  %507 = icmp ne i32 %506, 0
  br i1 %507, label %508, label %528

508:                                              ; preds = %503
  %509 = load ptr, ptr %4, align 8, !tbaa !5
  %510 = load ptr, ptr %18, align 8, !tbaa !5
  %511 = load i32, ptr %17, align 4, !tbaa !10
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds double, ptr %510, i64 %512
  %514 = load double, ptr %513, align 8, !tbaa !12
  %515 = load ptr, ptr %18, align 8, !tbaa !5
  %516 = load i32, ptr %25, align 4, !tbaa !10
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds double, ptr %515, i64 %517
  %519 = load double, ptr %518, align 8, !tbaa !12
  %520 = load ptr, ptr %22, align 8, !tbaa !5
  %521 = load i32, ptr %24, align 4, !tbaa !10
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds double, ptr %520, i64 %522
  %524 = load ptr, ptr %23, align 8, !tbaa !5
  %525 = load i32, ptr %24, align 4, !tbaa !10
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds double, ptr %524, i64 %526
  call void @_ZL26svm_binary_svc_probabilityPK11svm_problemPK13svm_parameterddRdS5_(ptr noundef %26, ptr noundef %509, double noundef %514, double noundef %519, ptr noundef nonnull align 8 dereferenceable(8) %523, ptr noundef nonnull align 8 dereferenceable(8) %527)
  br label %528

528:                                              ; preds = %508, %503
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #6
  %529 = load ptr, ptr %4, align 8, !tbaa !5
  %530 = load ptr, ptr %18, align 8, !tbaa !5
  %531 = load i32, ptr %17, align 4, !tbaa !10
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds double, ptr %530, i64 %532
  %534 = load double, ptr %533, align 8, !tbaa !12
  %535 = load ptr, ptr %18, align 8, !tbaa !5
  %536 = load i32, ptr %25, align 4, !tbaa !10
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds double, ptr %535, i64 %537
  %539 = load double, ptr %538, align 8, !tbaa !12
  %540 = call { ptr, double } @_ZL13svm_train_onePK11svm_problemPK13svm_parameterdd(ptr noundef %26, ptr noundef %529, double noundef %534, double noundef %539)
  %541 = getelementptr inbounds { ptr, double }, ptr %32, i32 0, i32 0
  %542 = extractvalue { ptr, double } %540, 0
  store ptr %542, ptr %541, align 8
  %543 = getelementptr inbounds { ptr, double }, ptr %32, i32 0, i32 1
  %544 = extractvalue { ptr, double } %540, 1
  store double %544, ptr %543, align 8
  %545 = load ptr, ptr %21, align 8, !tbaa !5
  %546 = load i32, ptr %24, align 4, !tbaa !10
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds %struct.decision_function, ptr %545, i64 %547
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %548, ptr align 8 %32, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #6
  store i32 0, ptr %31, align 4, !tbaa !10
  br label %549

549:                                              ; preds = %583, %528
  %550 = load i32, ptr %31, align 4, !tbaa !10
  %551 = load i32, ptr %29, align 4, !tbaa !10
  %552 = icmp slt i32 %550, %551
  br i1 %552, label %553, label %586

553:                                              ; preds = %549
  %554 = load ptr, ptr %20, align 8, !tbaa !5
  %555 = load i32, ptr %27, align 4, !tbaa !10
  %556 = load i32, ptr %31, align 4, !tbaa !10
  %557 = add nsw i32 %555, %556
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds i8, ptr %554, i64 %558
  %560 = load i8, ptr %559, align 1, !tbaa !46, !range !53, !noundef !54
  %561 = trunc i8 %560 to i1
  br i1 %561, label %582, label %562

562:                                              ; preds = %553
  %563 = load ptr, ptr %21, align 8, !tbaa !5
  %564 = load i32, ptr %24, align 4, !tbaa !10
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds %struct.decision_function, ptr %563, i64 %565
  %567 = getelementptr inbounds %struct.decision_function, ptr %566, i32 0, i32 0
  %568 = load ptr, ptr %567, align 8, !tbaa !30
  %569 = load i32, ptr %31, align 4, !tbaa !10
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds double, ptr %568, i64 %570
  %572 = load double, ptr %571, align 8, !tbaa !12
  %573 = call double @llvm.fabs.f64(double %572)
  %574 = fcmp ogt double %573, 0.000000e+00
  br i1 %574, label %575, label %582

575:                                              ; preds = %562
  %576 = load ptr, ptr %20, align 8, !tbaa !5
  %577 = load i32, ptr %27, align 4, !tbaa !10
  %578 = load i32, ptr %31, align 4, !tbaa !10
  %579 = add nsw i32 %577, %578
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds i8, ptr %576, i64 %580
  store i8 1, ptr %581, align 1, !tbaa !46
  br label %582

582:                                              ; preds = %575, %562, %553
  br label %583

583:                                              ; preds = %582
  %584 = load i32, ptr %31, align 4, !tbaa !10
  %585 = add nsw i32 %584, 1
  store i32 %585, ptr %31, align 4, !tbaa !10
  br label %549, !llvm.loop !55

586:                                              ; preds = %549
  store i32 0, ptr %31, align 4, !tbaa !10
  br label %587

587:                                              ; preds = %623, %586
  %588 = load i32, ptr %31, align 4, !tbaa !10
  %589 = load i32, ptr %30, align 4, !tbaa !10
  %590 = icmp slt i32 %588, %589
  br i1 %590, label %591, label %626

591:                                              ; preds = %587
  %592 = load ptr, ptr %20, align 8, !tbaa !5
  %593 = load i32, ptr %28, align 4, !tbaa !10
  %594 = load i32, ptr %31, align 4, !tbaa !10
  %595 = add nsw i32 %593, %594
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds i8, ptr %592, i64 %596
  %598 = load i8, ptr %597, align 1, !tbaa !46, !range !53, !noundef !54
  %599 = trunc i8 %598 to i1
  br i1 %599, label %622, label %600

600:                                              ; preds = %591
  %601 = load ptr, ptr %21, align 8, !tbaa !5
  %602 = load i32, ptr %24, align 4, !tbaa !10
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds %struct.decision_function, ptr %601, i64 %603
  %605 = getelementptr inbounds %struct.decision_function, ptr %604, i32 0, i32 0
  %606 = load ptr, ptr %605, align 8, !tbaa !30
  %607 = load i32, ptr %29, align 4, !tbaa !10
  %608 = load i32, ptr %31, align 4, !tbaa !10
  %609 = add nsw i32 %607, %608
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds double, ptr %606, i64 %610
  %612 = load double, ptr %611, align 8, !tbaa !12
  %613 = call double @llvm.fabs.f64(double %612)
  %614 = fcmp ogt double %613, 0.000000e+00
  br i1 %614, label %615, label %622

615:                                              ; preds = %600
  %616 = load ptr, ptr %20, align 8, !tbaa !5
  %617 = load i32, ptr %28, align 4, !tbaa !10
  %618 = load i32, ptr %31, align 4, !tbaa !10
  %619 = add nsw i32 %617, %618
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds i8, ptr %616, i64 %620
  store i8 1, ptr %621, align 1, !tbaa !46
  br label %622

622:                                              ; preds = %615, %600, %591
  br label %623

623:                                              ; preds = %622
  %624 = load i32, ptr %31, align 4, !tbaa !10
  %625 = add nsw i32 %624, 1
  store i32 %625, ptr %31, align 4, !tbaa !10
  br label %587, !llvm.loop !56

626:                                              ; preds = %587
  %627 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 2
  %628 = load ptr, ptr %627, align 8, !tbaa !36
  call void @free(ptr noundef %628) #6
  %629 = getelementptr inbounds %struct.svm_problem, ptr %26, i32 0, i32 1
  %630 = load ptr, ptr %629, align 8, !tbaa !49
  call void @free(ptr noundef %630) #6
  %631 = load i32, ptr %24, align 4, !tbaa !10
  %632 = add nsw i32 %631, 1
  store i32 %632, ptr %24, align 4, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #6
  br label %633

633:                                              ; preds = %626
  %634 = load i32, ptr %25, align 4, !tbaa !10
  %635 = add nsw i32 %634, 1
  store i32 %635, ptr %25, align 4, !tbaa !10
  br label %406, !llvm.loop !57

636:                                              ; preds = %410
  br label %637

637:                                              ; preds = %636
  %638 = load i32, ptr %17, align 4, !tbaa !10
  %639 = add nsw i32 %638, 1
  store i32 %639, ptr %17, align 4, !tbaa !10
  br label %399, !llvm.loop !58

640:                                              ; preds = %399
  %641 = load i32, ptr %11, align 4, !tbaa !10
  %642 = load ptr, ptr %5, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.svm_model, ptr %642, i32 0, i32 1
  store i32 %641, ptr %643, align 8, !tbaa !18
  %644 = load i32, ptr %11, align 4, !tbaa !10
  %645 = sext i32 %644 to i64
  %646 = mul i64 %645, 4
  %647 = call noalias ptr @malloc(i64 noundef %646) #7
  %648 = load ptr, ptr %5, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.svm_model, ptr %648, i32 0, i32 9
  store ptr %647, ptr %649, align 8, !tbaa !19
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %650

650:                                              ; preds = %666, %640
  %651 = load i32, ptr %17, align 4, !tbaa !10
  %652 = load i32, ptr %11, align 4, !tbaa !10
  %653 = icmp slt i32 %651, %652
  br i1 %653, label %654, label %669

654:                                              ; preds = %650
  %655 = load ptr, ptr %12, align 8, !tbaa !5
  %656 = load i32, ptr %17, align 4, !tbaa !10
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds i32, ptr %655, i64 %657
  %659 = load i32, ptr %658, align 4, !tbaa !10
  %660 = load ptr, ptr %5, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.svm_model, ptr %660, i32 0, i32 9
  %662 = load ptr, ptr %661, align 8, !tbaa !19
  %663 = load i32, ptr %17, align 4, !tbaa !10
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds i32, ptr %662, i64 %664
  store i32 %659, ptr %665, align 4, !tbaa !10
  br label %666

666:                                              ; preds = %654
  %667 = load i32, ptr %17, align 4, !tbaa !10
  %668 = add nsw i32 %667, 1
  store i32 %668, ptr %17, align 4, !tbaa !10
  br label %650, !llvm.loop !59

669:                                              ; preds = %650
  %670 = load i32, ptr %11, align 4, !tbaa !10
  %671 = load i32, ptr %11, align 4, !tbaa !10
  %672 = sub nsw i32 %671, 1
  %673 = mul nsw i32 %670, %672
  %674 = sdiv i32 %673, 2
  %675 = sext i32 %674 to i64
  %676 = mul i64 %675, 8
  %677 = call noalias ptr @malloc(i64 noundef %676) #7
  %678 = load ptr, ptr %5, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.svm_model, ptr %678, i32 0, i32 5
  store ptr %677, ptr %679, align 8, !tbaa !25
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %680

680:                                              ; preds = %701, %669
  %681 = load i32, ptr %17, align 4, !tbaa !10
  %682 = load i32, ptr %11, align 4, !tbaa !10
  %683 = load i32, ptr %11, align 4, !tbaa !10
  %684 = sub nsw i32 %683, 1
  %685 = mul nsw i32 %682, %684
  %686 = sdiv i32 %685, 2
  %687 = icmp slt i32 %681, %686
  br i1 %687, label %688, label %704

688:                                              ; preds = %680
  %689 = load ptr, ptr %21, align 8, !tbaa !5
  %690 = load i32, ptr %17, align 4, !tbaa !10
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds %struct.decision_function, ptr %689, i64 %691
  %693 = getelementptr inbounds %struct.decision_function, ptr %692, i32 0, i32 1
  %694 = load double, ptr %693, align 8, !tbaa !26
  %695 = load ptr, ptr %5, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.svm_model, ptr %695, i32 0, i32 5
  %697 = load ptr, ptr %696, align 8, !tbaa !25
  %698 = load i32, ptr %17, align 4, !tbaa !10
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds double, ptr %697, i64 %699
  store double %694, ptr %700, align 8, !tbaa !12
  br label %701

701:                                              ; preds = %688
  %702 = load i32, ptr %17, align 4, !tbaa !10
  %703 = add nsw i32 %702, 1
  store i32 %703, ptr %17, align 4, !tbaa !10
  br label %680, !llvm.loop !60

704:                                              ; preds = %680
  %705 = load ptr, ptr %4, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.svm_parameter, ptr %705, i32 0, i32 14
  %707 = load i32, ptr %706, align 4, !tbaa !24
  %708 = icmp ne i32 %707, 0
  br i1 %708, label %709, label %765

709:                                              ; preds = %704
  %710 = load i32, ptr %11, align 4, !tbaa !10
  %711 = load i32, ptr %11, align 4, !tbaa !10
  %712 = sub nsw i32 %711, 1
  %713 = mul nsw i32 %710, %712
  %714 = sdiv i32 %713, 2
  %715 = sext i32 %714 to i64
  %716 = mul i64 %715, 8
  %717 = call noalias ptr @malloc(i64 noundef %716) #7
  %718 = load ptr, ptr %5, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.svm_model, ptr %718, i32 0, i32 6
  store ptr %717, ptr %719, align 8, !tbaa !21
  %720 = load i32, ptr %11, align 4, !tbaa !10
  %721 = load i32, ptr %11, align 4, !tbaa !10
  %722 = sub nsw i32 %721, 1
  %723 = mul nsw i32 %720, %722
  %724 = sdiv i32 %723, 2
  %725 = sext i32 %724 to i64
  %726 = mul i64 %725, 8
  %727 = call noalias ptr @malloc(i64 noundef %726) #7
  %728 = load ptr, ptr %5, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.svm_model, ptr %728, i32 0, i32 7
  store ptr %727, ptr %729, align 8, !tbaa !22
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %730

730:                                              ; preds = %761, %709
  %731 = load i32, ptr %17, align 4, !tbaa !10
  %732 = load i32, ptr %11, align 4, !tbaa !10
  %733 = load i32, ptr %11, align 4, !tbaa !10
  %734 = sub nsw i32 %733, 1
  %735 = mul nsw i32 %732, %734
  %736 = sdiv i32 %735, 2
  %737 = icmp slt i32 %731, %736
  br i1 %737, label %738, label %764

738:                                              ; preds = %730
  %739 = load ptr, ptr %22, align 8, !tbaa !5
  %740 = load i32, ptr %17, align 4, !tbaa !10
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds double, ptr %739, i64 %741
  %743 = load double, ptr %742, align 8, !tbaa !12
  %744 = load ptr, ptr %5, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.svm_model, ptr %744, i32 0, i32 6
  %746 = load ptr, ptr %745, align 8, !tbaa !21
  %747 = load i32, ptr %17, align 4, !tbaa !10
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds double, ptr %746, i64 %748
  store double %743, ptr %749, align 8, !tbaa !12
  %750 = load ptr, ptr %23, align 8, !tbaa !5
  %751 = load i32, ptr %17, align 4, !tbaa !10
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds double, ptr %750, i64 %752
  %754 = load double, ptr %753, align 8, !tbaa !12
  %755 = load ptr, ptr %5, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.svm_model, ptr %755, i32 0, i32 7
  %757 = load ptr, ptr %756, align 8, !tbaa !22
  %758 = load i32, ptr %17, align 4, !tbaa !10
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds double, ptr %757, i64 %759
  store double %754, ptr %760, align 8, !tbaa !12
  br label %761

761:                                              ; preds = %738
  %762 = load i32, ptr %17, align 4, !tbaa !10
  %763 = add nsw i32 %762, 1
  store i32 %763, ptr %17, align 4, !tbaa !10
  br label %730, !llvm.loop !61

764:                                              ; preds = %730
  br label %770

765:                                              ; preds = %704
  %766 = load ptr, ptr %5, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.svm_model, ptr %766, i32 0, i32 6
  store ptr null, ptr %767, align 8, !tbaa !21
  %768 = load ptr, ptr %5, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.svm_model, ptr %768, i32 0, i32 7
  store ptr null, ptr %769, align 8, !tbaa !22
  br label %770

770:                                              ; preds = %765, %764
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  store i32 0, ptr %33, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %771 = load i32, ptr %11, align 4, !tbaa !10
  %772 = sext i32 %771 to i64
  %773 = mul i64 %772, 4
  %774 = call noalias ptr @malloc(i64 noundef %773) #7
  store ptr %774, ptr %34, align 8, !tbaa !5
  %775 = load i32, ptr %11, align 4, !tbaa !10
  %776 = sext i32 %775 to i64
  %777 = mul i64 %776, 4
  %778 = call noalias ptr @malloc(i64 noundef %777) #7
  %779 = load ptr, ptr %5, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.svm_model, ptr %779, i32 0, i32 10
  store ptr %778, ptr %780, align 8, !tbaa !20
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %781

781:                                              ; preds = %830, %770
  %782 = load i32, ptr %17, align 4, !tbaa !10
  %783 = load i32, ptr %11, align 4, !tbaa !10
  %784 = icmp slt i32 %782, %783
  br i1 %784, label %785, label %833

785:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  store i32 0, ptr %35, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 0, ptr %36, align 4, !tbaa !10
  br label %786

786:                                              ; preds = %814, %785
  %787 = load i32, ptr %36, align 4, !tbaa !10
  %788 = load ptr, ptr %14, align 8, !tbaa !5
  %789 = load i32, ptr %17, align 4, !tbaa !10
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds i32, ptr %788, i64 %790
  %792 = load i32, ptr %791, align 4, !tbaa !10
  %793 = icmp slt i32 %787, %792
  br i1 %793, label %795, label %794

794:                                              ; preds = %786
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %817

795:                                              ; preds = %786
  %796 = load ptr, ptr %20, align 8, !tbaa !5
  %797 = load ptr, ptr %13, align 8, !tbaa !5
  %798 = load i32, ptr %17, align 4, !tbaa !10
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds i32, ptr %797, i64 %799
  %801 = load i32, ptr %800, align 4, !tbaa !10
  %802 = load i32, ptr %36, align 4, !tbaa !10
  %803 = add nsw i32 %801, %802
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds i8, ptr %796, i64 %804
  %806 = load i8, ptr %805, align 1, !tbaa !46, !range !53, !noundef !54
  %807 = trunc i8 %806 to i1
  br i1 %807, label %808, label %813

808:                                              ; preds = %795
  %809 = load i32, ptr %35, align 4, !tbaa !10
  %810 = add nsw i32 %809, 1
  store i32 %810, ptr %35, align 4, !tbaa !10
  %811 = load i32, ptr %33, align 4, !tbaa !10
  %812 = add nsw i32 %811, 1
  store i32 %812, ptr %33, align 4, !tbaa !10
  br label %813

813:                                              ; preds = %808, %795
  br label %814

814:                                              ; preds = %813
  %815 = load i32, ptr %36, align 4, !tbaa !10
  %816 = add nsw i32 %815, 1
  store i32 %816, ptr %36, align 4, !tbaa !10
  br label %786, !llvm.loop !62

817:                                              ; preds = %794
  %818 = load i32, ptr %35, align 4, !tbaa !10
  %819 = load ptr, ptr %5, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.svm_model, ptr %819, i32 0, i32 10
  %821 = load ptr, ptr %820, align 8, !tbaa !20
  %822 = load i32, ptr %17, align 4, !tbaa !10
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i32, ptr %821, i64 %823
  store i32 %818, ptr %824, align 4, !tbaa !10
  %825 = load i32, ptr %35, align 4, !tbaa !10
  %826 = load ptr, ptr %34, align 8, !tbaa !5
  %827 = load i32, ptr %17, align 4, !tbaa !10
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i32, ptr %826, i64 %828
  store i32 %825, ptr %829, align 4, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %830

830:                                              ; preds = %817
  %831 = load i32, ptr %17, align 4, !tbaa !10
  %832 = add nsw i32 %831, 1
  store i32 %832, ptr %17, align 4, !tbaa !10
  br label %781, !llvm.loop !63

833:                                              ; preds = %781
  %834 = load i32, ptr %33, align 4, !tbaa !10
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef @.str.7, i32 noundef %834)
  %835 = load i32, ptr %33, align 4, !tbaa !10
  %836 = load ptr, ptr %5, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.svm_model, ptr %836, i32 0, i32 2
  store i32 %835, ptr %837, align 4, !tbaa !33
  %838 = load i32, ptr %33, align 4, !tbaa !10
  %839 = sext i32 %838 to i64
  %840 = mul i64 %839, 8
  %841 = call noalias ptr @malloc(i64 noundef %840) #7
  %842 = load ptr, ptr %5, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.svm_model, ptr %842, i32 0, i32 3
  store ptr %841, ptr %843, align 8, !tbaa !34
  %844 = load i32, ptr %33, align 4, !tbaa !10
  %845 = sext i32 %844 to i64
  %846 = mul i64 %845, 4
  %847 = call noalias ptr @malloc(i64 noundef %846) #7
  %848 = load ptr, ptr %5, align 8, !tbaa !5
  %849 = getelementptr inbounds %struct.svm_model, ptr %848, i32 0, i32 8
  store ptr %847, ptr %849, align 8, !tbaa !35
  store i32 0, ptr %24, align 4, !tbaa !10
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %850

850:                                              ; preds = %887, %833
  %851 = load i32, ptr %17, align 4, !tbaa !10
  %852 = load i32, ptr %10, align 4, !tbaa !10
  %853 = icmp slt i32 %851, %852
  br i1 %853, label %854, label %890

854:                                              ; preds = %850
  %855 = load ptr, ptr %20, align 8, !tbaa !5
  %856 = load i32, ptr %17, align 4, !tbaa !10
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds i8, ptr %855, i64 %857
  %859 = load i8, ptr %858, align 1, !tbaa !46, !range !53, !noundef !54
  %860 = trunc i8 %859 to i1
  br i1 %860, label %861, label %886

861:                                              ; preds = %854
  %862 = load ptr, ptr %16, align 8, !tbaa !5
  %863 = load i32, ptr %17, align 4, !tbaa !10
  %864 = sext i32 %863 to i64
  %865 = getelementptr inbounds ptr, ptr %862, i64 %864
  %866 = load ptr, ptr %865, align 8, !tbaa !5
  %867 = load ptr, ptr %5, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.svm_model, ptr %867, i32 0, i32 3
  %869 = load ptr, ptr %868, align 8, !tbaa !34
  %870 = load i32, ptr %24, align 4, !tbaa !10
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds ptr, ptr %869, i64 %871
  store ptr %866, ptr %872, align 8, !tbaa !5
  %873 = load ptr, ptr %15, align 8, !tbaa !5
  %874 = load i32, ptr %17, align 4, !tbaa !10
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds i32, ptr %873, i64 %875
  %877 = load i32, ptr %876, align 4, !tbaa !10
  %878 = add nsw i32 %877, 1
  %879 = load ptr, ptr %5, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.svm_model, ptr %879, i32 0, i32 8
  %881 = load ptr, ptr %880, align 8, !tbaa !35
  %882 = load i32, ptr %24, align 4, !tbaa !10
  %883 = add nsw i32 %882, 1
  store i32 %883, ptr %24, align 4, !tbaa !10
  %884 = sext i32 %882 to i64
  %885 = getelementptr inbounds i32, ptr %881, i64 %884
  store i32 %878, ptr %885, align 4, !tbaa !10
  br label %886

886:                                              ; preds = %861, %854
  br label %887

887:                                              ; preds = %886
  %888 = load i32, ptr %17, align 4, !tbaa !10
  %889 = add nsw i32 %888, 1
  store i32 %889, ptr %17, align 4, !tbaa !10
  br label %850, !llvm.loop !64

890:                                              ; preds = %850
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %891 = load i32, ptr %11, align 4, !tbaa !10
  %892 = sext i32 %891 to i64
  %893 = mul i64 %892, 4
  %894 = call noalias ptr @malloc(i64 noundef %893) #7
  store ptr %894, ptr %37, align 8, !tbaa !5
  %895 = load ptr, ptr %37, align 8, !tbaa !5
  %896 = getelementptr inbounds i32, ptr %895, i64 0
  store i32 0, ptr %896, align 4, !tbaa !10
  store i32 1, ptr %17, align 4, !tbaa !10
  br label %897

897:                                              ; preds = %919, %890
  %898 = load i32, ptr %17, align 4, !tbaa !10
  %899 = load i32, ptr %11, align 4, !tbaa !10
  %900 = icmp slt i32 %898, %899
  br i1 %900, label %901, label %922

901:                                              ; preds = %897
  %902 = load ptr, ptr %37, align 8, !tbaa !5
  %903 = load i32, ptr %17, align 4, !tbaa !10
  %904 = sub nsw i32 %903, 1
  %905 = sext i32 %904 to i64
  %906 = getelementptr inbounds i32, ptr %902, i64 %905
  %907 = load i32, ptr %906, align 4, !tbaa !10
  %908 = load ptr, ptr %34, align 8, !tbaa !5
  %909 = load i32, ptr %17, align 4, !tbaa !10
  %910 = sub nsw i32 %909, 1
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds i32, ptr %908, i64 %911
  %913 = load i32, ptr %912, align 4, !tbaa !10
  %914 = add nsw i32 %907, %913
  %915 = load ptr, ptr %37, align 8, !tbaa !5
  %916 = load i32, ptr %17, align 4, !tbaa !10
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds i32, ptr %915, i64 %917
  store i32 %914, ptr %918, align 4, !tbaa !10
  br label %919

919:                                              ; preds = %901
  %920 = load i32, ptr %17, align 4, !tbaa !10
  %921 = add nsw i32 %920, 1
  store i32 %921, ptr %17, align 4, !tbaa !10
  br label %897, !llvm.loop !65

922:                                              ; preds = %897
  %923 = load i32, ptr %11, align 4, !tbaa !10
  %924 = sub nsw i32 %923, 1
  %925 = sext i32 %924 to i64
  %926 = mul i64 %925, 8
  %927 = call noalias ptr @malloc(i64 noundef %926) #7
  %928 = load ptr, ptr %5, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.svm_model, ptr %928, i32 0, i32 4
  store ptr %927, ptr %929, align 8, !tbaa !23
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %930

930:                                              ; preds = %946, %922
  %931 = load i32, ptr %17, align 4, !tbaa !10
  %932 = load i32, ptr %11, align 4, !tbaa !10
  %933 = sub nsw i32 %932, 1
  %934 = icmp slt i32 %931, %933
  br i1 %934, label %935, label %949

935:                                              ; preds = %930
  %936 = load i32, ptr %33, align 4, !tbaa !10
  %937 = sext i32 %936 to i64
  %938 = mul i64 %937, 8
  %939 = call noalias ptr @malloc(i64 noundef %938) #7
  %940 = load ptr, ptr %5, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.svm_model, ptr %940, i32 0, i32 4
  %942 = load ptr, ptr %941, align 8, !tbaa !23
  %943 = load i32, ptr %17, align 4, !tbaa !10
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds ptr, ptr %942, i64 %944
  store ptr %939, ptr %945, align 8, !tbaa !5
  br label %946

946:                                              ; preds = %935
  %947 = load i32, ptr %17, align 4, !tbaa !10
  %948 = add nsw i32 %947, 1
  store i32 %948, ptr %17, align 4, !tbaa !10
  br label %930, !llvm.loop !66

949:                                              ; preds = %930
  store i32 0, ptr %24, align 4, !tbaa !10
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %950

950:                                              ; preds = %1082, %949
  %951 = load i32, ptr %17, align 4, !tbaa !10
  %952 = load i32, ptr %11, align 4, !tbaa !10
  %953 = icmp slt i32 %951, %952
  br i1 %953, label %954, label %1085

954:                                              ; preds = %950
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  %955 = load i32, ptr %17, align 4, !tbaa !10
  %956 = add nsw i32 %955, 1
  store i32 %956, ptr %38, align 4, !tbaa !10
  br label %957

957:                                              ; preds = %1078, %954
  %958 = load i32, ptr %38, align 4, !tbaa !10
  %959 = load i32, ptr %11, align 4, !tbaa !10
  %960 = icmp slt i32 %958, %959
  br i1 %960, label %962, label %961

961:                                              ; preds = %957
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  br label %1081

962:                                              ; preds = %957
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  %963 = load ptr, ptr %13, align 8, !tbaa !5
  %964 = load i32, ptr %17, align 4, !tbaa !10
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds i32, ptr %963, i64 %965
  %967 = load i32, ptr %966, align 4, !tbaa !10
  store i32 %967, ptr %39, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  %968 = load ptr, ptr %13, align 8, !tbaa !5
  %969 = load i32, ptr %38, align 4, !tbaa !10
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds i32, ptr %968, i64 %970
  %972 = load i32, ptr %971, align 4, !tbaa !10
  store i32 %972, ptr %40, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  %973 = load ptr, ptr %14, align 8, !tbaa !5
  %974 = load i32, ptr %17, align 4, !tbaa !10
  %975 = sext i32 %974 to i64
  %976 = getelementptr inbounds i32, ptr %973, i64 %975
  %977 = load i32, ptr %976, align 4, !tbaa !10
  store i32 %977, ptr %41, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  %978 = load ptr, ptr %14, align 8, !tbaa !5
  %979 = load i32, ptr %38, align 4, !tbaa !10
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds i32, ptr %978, i64 %980
  %982 = load i32, ptr %981, align 4, !tbaa !10
  store i32 %982, ptr %42, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  %983 = load ptr, ptr %37, align 8, !tbaa !5
  %984 = load i32, ptr %17, align 4, !tbaa !10
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds i32, ptr %983, i64 %985
  %987 = load i32, ptr %986, align 4, !tbaa !10
  store i32 %987, ptr %43, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  store i32 0, ptr %44, align 4, !tbaa !10
  br label %988

988:                                              ; preds = %1025, %962
  %989 = load i32, ptr %44, align 4, !tbaa !10
  %990 = load i32, ptr %41, align 4, !tbaa !10
  %991 = icmp slt i32 %989, %990
  br i1 %991, label %992, label %1028

992:                                              ; preds = %988
  %993 = load ptr, ptr %20, align 8, !tbaa !5
  %994 = load i32, ptr %39, align 4, !tbaa !10
  %995 = load i32, ptr %44, align 4, !tbaa !10
  %996 = add nsw i32 %994, %995
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds i8, ptr %993, i64 %997
  %999 = load i8, ptr %998, align 1, !tbaa !46, !range !53, !noundef !54
  %1000 = trunc i8 %999 to i1
  br i1 %1000, label %1001, label %1024

1001:                                             ; preds = %992
  %1002 = load ptr, ptr %21, align 8, !tbaa !5
  %1003 = load i32, ptr %24, align 4, !tbaa !10
  %1004 = sext i32 %1003 to i64
  %1005 = getelementptr inbounds %struct.decision_function, ptr %1002, i64 %1004
  %1006 = getelementptr inbounds %struct.decision_function, ptr %1005, i32 0, i32 0
  %1007 = load ptr, ptr %1006, align 8, !tbaa !30
  %1008 = load i32, ptr %44, align 4, !tbaa !10
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds double, ptr %1007, i64 %1009
  %1011 = load double, ptr %1010, align 8, !tbaa !12
  %1012 = load ptr, ptr %5, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.svm_model, ptr %1012, i32 0, i32 4
  %1014 = load ptr, ptr %1013, align 8, !tbaa !23
  %1015 = load i32, ptr %38, align 4, !tbaa !10
  %1016 = sub nsw i32 %1015, 1
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds ptr, ptr %1014, i64 %1017
  %1019 = load ptr, ptr %1018, align 8, !tbaa !5
  %1020 = load i32, ptr %43, align 4, !tbaa !10
  %1021 = add nsw i32 %1020, 1
  store i32 %1021, ptr %43, align 4, !tbaa !10
  %1022 = sext i32 %1020 to i64
  %1023 = getelementptr inbounds double, ptr %1019, i64 %1022
  store double %1011, ptr %1023, align 8, !tbaa !12
  br label %1024

1024:                                             ; preds = %1001, %992
  br label %1025

1025:                                             ; preds = %1024
  %1026 = load i32, ptr %44, align 4, !tbaa !10
  %1027 = add nsw i32 %1026, 1
  store i32 %1027, ptr %44, align 4, !tbaa !10
  br label %988, !llvm.loop !67

1028:                                             ; preds = %988
  %1029 = load ptr, ptr %37, align 8, !tbaa !5
  %1030 = load i32, ptr %38, align 4, !tbaa !10
  %1031 = sext i32 %1030 to i64
  %1032 = getelementptr inbounds i32, ptr %1029, i64 %1031
  %1033 = load i32, ptr %1032, align 4, !tbaa !10
  store i32 %1033, ptr %43, align 4, !tbaa !10
  store i32 0, ptr %44, align 4, !tbaa !10
  br label %1034

1034:                                             ; preds = %1072, %1028
  %1035 = load i32, ptr %44, align 4, !tbaa !10
  %1036 = load i32, ptr %42, align 4, !tbaa !10
  %1037 = icmp slt i32 %1035, %1036
  br i1 %1037, label %1038, label %1075

1038:                                             ; preds = %1034
  %1039 = load ptr, ptr %20, align 8, !tbaa !5
  %1040 = load i32, ptr %40, align 4, !tbaa !10
  %1041 = load i32, ptr %44, align 4, !tbaa !10
  %1042 = add nsw i32 %1040, %1041
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds i8, ptr %1039, i64 %1043
  %1045 = load i8, ptr %1044, align 1, !tbaa !46, !range !53, !noundef !54
  %1046 = trunc i8 %1045 to i1
  br i1 %1046, label %1047, label %1071

1047:                                             ; preds = %1038
  %1048 = load ptr, ptr %21, align 8, !tbaa !5
  %1049 = load i32, ptr %24, align 4, !tbaa !10
  %1050 = sext i32 %1049 to i64
  %1051 = getelementptr inbounds %struct.decision_function, ptr %1048, i64 %1050
  %1052 = getelementptr inbounds %struct.decision_function, ptr %1051, i32 0, i32 0
  %1053 = load ptr, ptr %1052, align 8, !tbaa !30
  %1054 = load i32, ptr %41, align 4, !tbaa !10
  %1055 = load i32, ptr %44, align 4, !tbaa !10
  %1056 = add nsw i32 %1054, %1055
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds double, ptr %1053, i64 %1057
  %1059 = load double, ptr %1058, align 8, !tbaa !12
  %1060 = load ptr, ptr %5, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.svm_model, ptr %1060, i32 0, i32 4
  %1062 = load ptr, ptr %1061, align 8, !tbaa !23
  %1063 = load i32, ptr %17, align 4, !tbaa !10
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds ptr, ptr %1062, i64 %1064
  %1066 = load ptr, ptr %1065, align 8, !tbaa !5
  %1067 = load i32, ptr %43, align 4, !tbaa !10
  %1068 = add nsw i32 %1067, 1
  store i32 %1068, ptr %43, align 4, !tbaa !10
  %1069 = sext i32 %1067 to i64
  %1070 = getelementptr inbounds double, ptr %1066, i64 %1069
  store double %1059, ptr %1070, align 8, !tbaa !12
  br label %1071

1071:                                             ; preds = %1047, %1038
  br label %1072

1072:                                             ; preds = %1071
  %1073 = load i32, ptr %44, align 4, !tbaa !10
  %1074 = add nsw i32 %1073, 1
  store i32 %1074, ptr %44, align 4, !tbaa !10
  br label %1034, !llvm.loop !68

1075:                                             ; preds = %1034
  %1076 = load i32, ptr %24, align 4, !tbaa !10
  %1077 = add nsw i32 %1076, 1
  store i32 %1077, ptr %24, align 4, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  br label %1078

1078:                                             ; preds = %1075
  %1079 = load i32, ptr %38, align 4, !tbaa !10
  %1080 = add nsw i32 %1079, 1
  store i32 %1080, ptr %38, align 4, !tbaa !10
  br label %957, !llvm.loop !69

1081:                                             ; preds = %961
  br label %1082

1082:                                             ; preds = %1081
  %1083 = load i32, ptr %17, align 4, !tbaa !10
  %1084 = add nsw i32 %1083, 1
  store i32 %1084, ptr %17, align 4, !tbaa !10
  br label %950, !llvm.loop !70

1085:                                             ; preds = %950
  %1086 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %1086) #6
  %1087 = load ptr, ptr %22, align 8, !tbaa !5
  call void @free(ptr noundef %1087) #6
  %1088 = load ptr, ptr %23, align 8, !tbaa !5
  call void @free(ptr noundef %1088) #6
  %1089 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %1089) #6
  %1090 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %1090) #6
  %1091 = load ptr, ptr %13, align 8, !tbaa !5
  call void @free(ptr noundef %1091) #6
  %1092 = load ptr, ptr %16, align 8, !tbaa !5
  call void @free(ptr noundef %1092) #6
  %1093 = load ptr, ptr %18, align 8, !tbaa !5
  call void @free(ptr noundef %1093) #6
  %1094 = load ptr, ptr %20, align 8, !tbaa !5
  call void @free(ptr noundef %1094) #6
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %1095

1095:                                             ; preds = %1110, %1085
  %1096 = load i32, ptr %17, align 4, !tbaa !10
  %1097 = load i32, ptr %11, align 4, !tbaa !10
  %1098 = load i32, ptr %11, align 4, !tbaa !10
  %1099 = sub nsw i32 %1098, 1
  %1100 = mul nsw i32 %1097, %1099
  %1101 = sdiv i32 %1100, 2
  %1102 = icmp slt i32 %1096, %1101
  br i1 %1102, label %1103, label %1113

1103:                                             ; preds = %1095
  %1104 = load ptr, ptr %21, align 8, !tbaa !5
  %1105 = load i32, ptr %17, align 4, !tbaa !10
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr inbounds %struct.decision_function, ptr %1104, i64 %1106
  %1108 = getelementptr inbounds %struct.decision_function, ptr %1107, i32 0, i32 0
  %1109 = load ptr, ptr %1108, align 8, !tbaa !30
  call void @free(ptr noundef %1109) #6
  br label %1110

1110:                                             ; preds = %1103
  %1111 = load i32, ptr %17, align 4, !tbaa !10
  %1112 = add nsw i32 %1111, 1
  store i32 %1112, ptr %17, align 4, !tbaa !10
  br label %1095, !llvm.loop !71

1113:                                             ; preds = %1095
  %1114 = load ptr, ptr %21, align 8, !tbaa !5
  call void @free(ptr noundef %1114) #6
  %1115 = load ptr, ptr %34, align 8, !tbaa !5
  call void @free(ptr noundef %1115) #6
  %1116 = load ptr, ptr %37, align 8, !tbaa !5
  call void @free(ptr noundef %1116) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %1117

1117:                                             ; preds = %1113, %224
  %1118 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  ret ptr %1118
}

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

; Function Attrs: mustprogress uwtable
declare hidden noundef double @_ZL19svm_svr_probabilityPK11svm_problemPK13svm_parameter(ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden { ptr, double } @_ZL13svm_train_onePK11svm_problemPK13svm_parameterdd(ptr noundef, ptr noundef, double noundef, double noundef) #2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL17svm_group_classesPK11svm_problemPiPS2_S3_S3_S2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL26svm_binary_svc_probabilityPK11svm_problemPK13svm_parameterddRdS5_(ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { nounwind 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0) }

!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 = !{i64 0, i64 4, !10, i64 4, i64 4, !10, i64 8, i64 4, !10, i64 16, i64 8, !12, i64 24, i64 8, !12, i64 32, i64 8, !12, i64 40, i64 8, !12, i64 48, i64 8, !12, i64 56, i64 4, !10, i64 64, i64 8, !5, i64 72, i64 8, !5, i64 80, i64 8, !12, i64 88, i64 8, !12, i64 96, i64 4, !10, i64 100, i64 4, !10}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!15, !11, i64 176}
!15 = !{!"_ZTS9svm_model", !16, i64 0, !11, i64 104, !11, i64 108, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !11, i64 176}
!16 = !{!"_ZTS13svm_parameter", !11, i64 0, !11, i64 4, !11, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !11, i64 56, !6, i64 64, !6, i64 72, !13, i64 80, !13, i64 88, !11, i64 96, !11, i64 100}
!17 = !{!16, !11, i64 0}
!18 = !{!15, !11, i64 104}
!19 = !{!15, !6, i64 160}
!20 = !{!15, !6, i64 168}
!21 = !{!15, !6, i64 136}
!22 = !{!15, !6, i64 144}
!23 = !{!15, !6, i64 120}
!24 = !{!16, !11, i64 100}
!25 = !{!15, !6, i64 128}
!26 = !{!27, !13, i64 8}
!27 = !{!"_ZTS17decision_function", !6, i64 0, !13, i64 8}
!28 = !{!29, !11, i64 0}
!29 = !{!"_ZTS11svm_problem", !11, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!27, !6, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!15, !11, i64 108}
!34 = !{!15, !6, i64 112}
!35 = !{!15, !6, i64 152}
!36 = !{!29, !6, i64 16}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}
!39 = !{!16, !13, i64 48}
!40 = distinct !{!40, !32}
!41 = !{!16, !11, i64 56}
!42 = !{!16, !6, i64 64}
!43 = distinct !{!43, !32}
!44 = !{!16, !6, i64 72}
!45 = distinct !{!45, !32}
!46 = !{!47, !47, i64 0}
!47 = !{!"bool", !7, i64 0}
!48 = distinct !{!48, !32}
!49 = !{!29, !6, i64 8}
!50 = distinct !{!50, !32}
!51 = distinct !{!51, !32}
!52 = !{i64 0, i64 8, !5, i64 8, i64 8, !12}
!53 = !{i8 0, i8 2}
!54 = !{}
!55 = distinct !{!55, !32}
!56 = distinct !{!56, !32}
!57 = distinct !{!57, !32}
!58 = distinct !{!58, !32}
!59 = distinct !{!59, !32}
!60 = distinct !{!60, !32}
!61 = distinct !{!61, !32}
!62 = distinct !{!62, !32}
!63 = distinct !{!63, !32}
!64 = distinct !{!64, !32}
!65 = distinct !{!65, !32}
!66 = distinct !{!66, !32}
!67 = distinct !{!67, !32}
!68 = distinct !{!68, !32}
!69 = distinct !{!69, !32}
!70 = distinct !{!70, !32}
!71 = distinct !{!71, !32}


; 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"

%struct.svm_problem = type { i32, ptr, ptr }
%struct.decision_function = type { ptr, double }

@stderr = external local_unnamed_addr global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [16 x i8], align 1

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #1

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local noalias noundef ptr @svm_train(ptr noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %struct.svm_problem, align 8
  %8 = tail call noalias dereferenceable_or_null(184) ptr @malloc(i64 noundef 184) #8
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %8, ptr noundef nonnull align 8 dereferenceable(104) %1, i64 104, i1 false), !tbaa.struct !5
  %9 = getelementptr inbounds i8, ptr %8, i64 176
  store i32 0, ptr %9, align 8, !tbaa !14
  %10 = load i32, ptr %1, align 8, !tbaa !17
  %.off = add i32 %10, -2
  %switch = icmp ult i32 %.off, 3
  br i1 %switch, label %11, label %70

11:                                               ; preds = %2
  %12 = getelementptr inbounds i8, ptr %8, i64 104
  store i32 2, ptr %12, align 8, !tbaa !18
  %13 = getelementptr inbounds i8, ptr %8, i64 160
  %14 = getelementptr inbounds i8, ptr %8, i64 136
  %15 = tail call noalias dereferenceable_or_null(8) ptr @malloc(i64 noundef 8) #8
  %16 = getelementptr inbounds i8, ptr %8, i64 120
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %14, i8 0, i64 16, i1 false)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %13, i8 0, i64 16, i1 false)
  store ptr %15, ptr %16, align 8, !tbaa !19
  %17 = getelementptr inbounds i8, ptr %1, i64 100
  %18 = load i32, ptr %17, align 4, !tbaa !20
  %.not345 = icmp ne i32 %18, 0
  %.off346 = add nsw i32 %10, -3
  %switch347 = icmp ult i32 %.off346, 2
  %or.cond = select i1 %.not345, i1 %switch347, i1 false
  br i1 %or.cond, label %19, label %22

19:                                               ; preds = %11
  %20 = tail call noalias dereferenceable_or_null(8) ptr @malloc(i64 noundef 8) #8
  store ptr %20, ptr %14, align 8, !tbaa !21
  %21 = tail call noundef double @_ZL19svm_svr_probabilityPK11svm_problemPK13svm_parameter(ptr noundef %0, ptr noundef nonnull %1)
  store double %21, ptr %20, align 8, !tbaa !10
  br label %22

22:                                               ; preds = %19, %11
  %23 = tail call { ptr, double } @_ZL13svm_train_onePK11svm_problemPK13svm_parameterdd(ptr noundef %0, ptr noundef nonnull %1, double noundef 0.000000e+00, double noundef 0.000000e+00)
  %24 = extractvalue { ptr, double } %23, 0
  %25 = extractvalue { ptr, double } %23, 1
  %26 = tail call noalias dereferenceable_or_null(8) ptr @malloc(i64 noundef 8) #8
  %27 = getelementptr inbounds i8, ptr %8, i64 128
  store ptr %26, ptr %27, align 8, !tbaa !22
  store double %25, ptr %26, align 8, !tbaa !10
  %28 = load i32, ptr %0, align 8, !tbaa !23
  %29 = icmp sgt i32 %28, 0
  br i1 %29, label %.lr.ph460.preheader, label %._crit_edge461

.lr.ph460.preheader:                              ; preds = %22
  %wide.trip.count605 = zext nneg i32 %28 to i64
  %min.iters.check686 = icmp ult i32 %28, 4
  br i1 %min.iters.check686, label %.lr.ph460.preheader703, label %vector.ph687

vector.ph687:                                     ; preds = %.lr.ph460.preheader
  %n.vec689 = and i64 %wide.trip.count605, 2147483644
  br label %vector.body691

vector.body691:                                   ; preds = %vector.body691, %vector.ph687
  %index692 = phi i64 [ 0, %vector.ph687 ], [ %index.next697, %vector.body691 ]
  %vec.phi693 = phi <2 x i32> [ zeroinitializer, %vector.ph687 ], [ %36, %vector.body691 ]
  %vec.phi694 = phi <2 x i32> [ zeroinitializer, %vector.ph687 ], [ %37, %vector.body691 ]
  %30 = getelementptr inbounds double, ptr %24, i64 %index692
  %31 = getelementptr inbounds i8, ptr %30, i64 16
  %wide.load695 = load <2 x double>, ptr %30, align 8, !tbaa !10
  %wide.load696 = load <2 x double>, ptr %31, align 8, !tbaa !10
  %32 = fcmp one <2 x double> %wide.load695, zeroinitializer
  %33 = fcmp one <2 x double> %wide.load696, zeroinitializer
  %34 = zext <2 x i1> %32 to <2 x i32>
  %35 = zext <2 x i1> %33 to <2 x i32>
  %36 = add <2 x i32> %vec.phi693, %34
  %37 = add <2 x i32> %vec.phi694, %35
  %index.next697 = add nuw i64 %index692, 4
  %38 = icmp eq i64 %index.next697, %n.vec689
  br i1 %38, label %middle.block684, label %vector.body691, !llvm.loop !25

middle.block684:                                  ; preds = %vector.body691
  %bin.rdx698 = add <2 x i32> %37, %36
  %39 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx698)
  %cmp.n699 = icmp eq i64 %n.vec689, %wide.trip.count605
  br i1 %cmp.n699, label %._crit_edge461, label %.lr.ph460.preheader703

.lr.ph460.preheader703:                           ; preds = %middle.block684, %.lr.ph460.preheader
  %indvars.iv602.ph = phi i64 [ 0, %.lr.ph460.preheader ], [ %n.vec689, %middle.block684 ]
  %.0302458.ph = phi i32 [ 0, %.lr.ph460.preheader ], [ %39, %middle.block684 ]
  br label %.lr.ph460

.lr.ph460:                                        ; preds = %.lr.ph460.preheader703, %.lr.ph460
  %indvars.iv602 = phi i64 [ %indvars.iv.next603, %.lr.ph460 ], [ %indvars.iv602.ph, %.lr.ph460.preheader703 ]
  %.0302458 = phi i32 [ %.1303, %.lr.ph460 ], [ %.0302458.ph, %.lr.ph460.preheader703 ]
  %40 = getelementptr inbounds double, ptr %24, i64 %indvars.iv602
  %41 = load double, ptr %40, align 8, !tbaa !10
  %42 = fcmp one double %41, 0.000000e+00
  %43 = zext i1 %42 to i32
  %.1303 = add nuw nsw i32 %.0302458, %43
  %indvars.iv.next603 = add nuw nsw i64 %indvars.iv602, 1
  %exitcond606.not = icmp eq i64 %indvars.iv.next603, %wide.trip.count605
  br i1 %exitcond606.not, label %._crit_edge461, label %.lr.ph460, !llvm.loop !29

._crit_edge461:                                   ; preds = %.lr.ph460, %middle.block684, %22
  %.0302.lcssa = phi i32 [ 0, %22 ], [ %39, %middle.block684 ], [ %.1303, %.lr.ph460 ]
  %44 = getelementptr inbounds i8, ptr %8, i64 108
  store i32 %.0302.lcssa, ptr %44, align 4, !tbaa !30
  %45 = sext i32 %.0302.lcssa to i64
  %46 = shl nsw i64 %45, 3
  %47 = tail call noalias ptr @malloc(i64 noundef %46) #8
  %48 = getelementptr inbounds i8, ptr %8, i64 112
  store ptr %47, ptr %48, align 8, !tbaa !31
  %49 = tail call noalias ptr @malloc(i64 noundef %46) #8
  store ptr %49, ptr %15, align 8, !tbaa !12
  %50 = shl nsw i64 %45, 2
  %51 = tail call noalias ptr @malloc(i64 noundef %50) #8
  %52 = getelementptr inbounds i8, ptr %8, i64 152
  store ptr %51, ptr %52, align 8, !tbaa !32
  br i1 %29, label %.lr.ph466, label %._crit_edge467

.lr.ph466:                                        ; preds = %._crit_edge461
  %53 = getelementptr inbounds i8, ptr %0, i64 16
  %wide.trip.count610 = zext nneg i32 %28 to i64
  br label %54

54:                                               ; preds = %.lr.ph466, %69
  %indvars.iv607 = phi i64 [ 0, %.lr.ph466 ], [ %indvars.iv.next608.pre-phi, %69 ]
  %.0306463 = phi i32 [ 0, %.lr.ph466 ], [ %.1307, %69 ]
  %55 = getelementptr inbounds double, ptr %24, i64 %indvars.iv607
  %56 = load double, ptr %55, align 8, !tbaa !10
  %57 = fcmp ueq double %56, 0.000000e+00
  br i1 %57, label %._crit_edge615, label %58

._crit_edge615:                                   ; preds = %54
  %.pre616 = add nuw nsw i64 %indvars.iv607, 1
  br label %69

58:                                               ; preds = %54
  %59 = load ptr, ptr %53, align 8, !tbaa !33
  %60 = getelementptr inbounds ptr, ptr %59, i64 %indvars.iv607
  %61 = load ptr, ptr %60, align 8, !tbaa !12
  %62 = sext i32 %.0306463 to i64
  %63 = getelementptr inbounds ptr, ptr %47, i64 %62
  store ptr %61, ptr %63, align 8, !tbaa !12
  %64 = getelementptr inbounds double, ptr %49, i64 %62
  store double %56, ptr %64, align 8, !tbaa !10
  %65 = add nuw nsw i64 %indvars.iv607, 1
  %66 = getelementptr inbounds i32, ptr %51, i64 %62
  %67 = trunc nuw nsw i64 %65 to i32
  store i32 %67, ptr %66, align 4, !tbaa !6
  %68 = add nsw i32 %.0306463, 1
  br label %69

69:                                               ; preds = %._crit_edge615, %58
  %indvars.iv.next608.pre-phi = phi i64 [ %.pre616, %._crit_edge615 ], [ %65, %58 ]
  %.1307 = phi i32 [ %.0306463, %._crit_edge615 ], [ %68, %58 ]
  %exitcond611.not = icmp eq i64 %indvars.iv.next608.pre-phi, %wide.trip.count610
  br i1 %exitcond611.not, label %._crit_edge467, label %54, !llvm.loop !34

._crit_edge467:                                   ; preds = %69, %._crit_edge461
  tail call void @free(ptr noundef %24) #9
  br label %650

70:                                               ; preds = %2
  %71 = load i32, ptr %0, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  store ptr null, ptr %4, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #9
  store ptr null, ptr %5, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #9
  store ptr null, ptr %6, align 8, !tbaa !12
  %72 = sext i32 %71 to i64
  %73 = shl nsw i64 %72, 2
  %74 = tail call noalias ptr @malloc(i64 noundef %73) #8
  call void @_ZL17svm_group_classesPK11svm_problemPiPS2_S3_S3_S2_(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef %74)
  %75 = load i32, ptr %3, align 4, !tbaa !6
  %76 = icmp eq i32 %75, 1
  br i1 %76, label %77, label %78

77:                                               ; preds = %70
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str.5)
  br label %78

78:                                               ; preds = %77, %70
  %79 = shl nsw i64 %72, 3
  %80 = call noalias ptr @malloc(i64 noundef %79) #8
  %81 = icmp sgt i32 %71, 0
  br i1 %81, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %78
  %82 = getelementptr inbounds i8, ptr %0, i64 16
  %83 = load ptr, ptr %82, align 8, !tbaa !33
  %wide.trip.count = zext nneg i32 %71 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %84 = icmp ult i32 %71, 4
  br i1 %84, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 2147483644
  br label %85

85:                                               ; preds = %85, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %85 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %85 ]
  %86 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv
  %87 = load i32, ptr %86, align 4, !tbaa !6
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds ptr, ptr %83, i64 %88
  %90 = load ptr, ptr %89, align 8, !tbaa !12
  %91 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv
  store ptr %90, ptr %91, align 8, !tbaa !12
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %92 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv.next
  %93 = load i32, ptr %92, align 4, !tbaa !6
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds ptr, ptr %83, i64 %94
  %96 = load ptr, ptr %95, align 8, !tbaa !12
  %97 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.next
  store ptr %96, ptr %97, align 8, !tbaa !12
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %98 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv.next.1
  %99 = load i32, ptr %98, align 4, !tbaa !6
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds ptr, ptr %83, i64 %100
  %102 = load ptr, ptr %101, align 8, !tbaa !12
  %103 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.next.1
  store ptr %102, ptr %103, align 8, !tbaa !12
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %104 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv.next.2
  %105 = load i32, ptr %104, align 4, !tbaa !6
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds ptr, ptr %83, i64 %106
  %108 = load ptr, ptr %107, align 8, !tbaa !12
  %109 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.next.2
  store ptr %108, ptr %109, align 8, !tbaa !12
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %85, !llvm.loop !35

._crit_edge.loopexit.unr-lcssa:                   ; preds = %85, %.lr.ph
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %85 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %110 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv.epil
  %111 = load i32, ptr %110, align 4, !tbaa !6
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds ptr, ptr %83, i64 %112
  %114 = load ptr, ptr %113, align 8, !tbaa !12
  %115 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.epil
  store ptr %114, ptr %115, align 8, !tbaa !12
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader, !llvm.loop !36

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader, %78
  %116 = load i32, ptr %3, align 4, !tbaa !6
  %117 = sext i32 %116 to i64
  %118 = shl nsw i64 %117, 3
  %119 = call noalias ptr @malloc(i64 noundef %118) #8
  %120 = icmp sgt i32 %116, 0
  br i1 %120, label %.lr.ph361, label %.preheader354

.lr.ph361:                                        ; preds = %._crit_edge
  %121 = getelementptr inbounds i8, ptr %1, i64 48
  %122 = load double, ptr %121, align 8, !tbaa !38
  %wide.trip.count476 = zext nneg i32 %116 to i64
  %min.iters.check = icmp ult i32 %116, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

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

vector.ph:                                        ; preds = %.lr.ph361
  %n.vec = and i64 %wide.trip.count476, 2147483644
  %broadcast.splatinsert = insertelement <2 x double> poison, double %122, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %123 = getelementptr inbounds double, ptr %119, i64 %index
  %124 = getelementptr inbounds i8, ptr %123, i64 16
  store <2 x double> %broadcast.splat, ptr %123, align 8, !tbaa !10
  store <2 x double> %broadcast.splat, ptr %124, align 8, !tbaa !10
  %index.next = add nuw i64 %index, 4
  %125 = icmp eq i64 %index.next, %n.vec
  br i1 %125, label %middle.block, label %vector.body, !llvm.loop !39

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count476
  br i1 %cmp.n, label %.preheader354, label %scalar.ph.preheader

.preheader354:                                    ; preds = %scalar.ph, %middle.block, %._crit_edge
  %126 = getelementptr inbounds i8, ptr %1, i64 56
  %127 = load i32, ptr %126, align 8, !tbaa !40
  %128 = icmp sgt i32 %127, 0
  br i1 %128, label %.preheader353.lr.ph, label %._crit_edge370

.preheader353.lr.ph:                              ; preds = %.preheader354
  %129 = getelementptr inbounds i8, ptr %1, i64 64
  %130 = getelementptr inbounds i8, ptr %1, i64 72
  br label %.preheader353

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv473 = phi i64 [ %indvars.iv.next474, %scalar.ph ], [ %indvars.iv473.ph, %scalar.ph.preheader ]
  %131 = getelementptr inbounds double, ptr %119, i64 %indvars.iv473
  store double %122, ptr %131, align 8, !tbaa !10
  %indvars.iv.next474 = add nuw nsw i64 %indvars.iv473, 1
  %exitcond477.not = icmp eq i64 %indvars.iv.next474, %wide.trip.count476
  br i1 %exitcond477.not, label %.preheader354, label %scalar.ph, !llvm.loop !41

.preheader353:                                    ; preds = %.preheader353.lr.ph, %159
  %132 = phi i32 [ %127, %.preheader353.lr.ph ], [ %160, %159 ]
  %indvars.iv483 = phi i64 [ 0, %.preheader353.lr.ph ], [ %indvars.iv.next484, %159 ]
  %133 = load i32, ptr %3, align 4, !tbaa !6
  %134 = icmp sgt i32 %133, 0
  br i1 %134, label %.lr.ph363, label %._crit_edge364

.lr.ph363:                                        ; preds = %.preheader353
  %135 = load ptr, ptr %129, align 8, !tbaa !42
  %136 = getelementptr inbounds i32, ptr %135, i64 %indvars.iv483
  %137 = load i32, ptr %136, align 4, !tbaa !6
  %138 = load ptr, ptr %4, align 8, !tbaa !12
  %wide.trip.count481 = zext nneg i32 %133 to i64
  br label %139

139:                                              ; preds = %.lr.ph363, %143
  %indvars.iv478 = phi i64 [ 0, %.lr.ph363 ], [ %indvars.iv.next479, %143 ]
  %140 = getelementptr inbounds i32, ptr %138, i64 %indvars.iv478
  %141 = load i32, ptr %140, align 4, !tbaa !6
  %142 = icmp eq i32 %137, %141
  br i1 %142, label %._crit_edge364.loopexit, label %143

143:                                              ; preds = %139
  %indvars.iv.next479 = add nuw nsw i64 %indvars.iv478, 1
  %exitcond482.not = icmp eq i64 %indvars.iv.next479, %wide.trip.count481
  br i1 %exitcond482.not, label %._crit_edge364.thread, label %139, !llvm.loop !43

._crit_edge364.loopexit:                          ; preds = %139
  %144 = trunc nuw nsw i64 %indvars.iv478 to i32
  br label %._crit_edge364

._crit_edge364:                                   ; preds = %._crit_edge364.loopexit, %.preheader353
  %.0313.lcssa = phi i32 [ 0, %.preheader353 ], [ %144, %._crit_edge364.loopexit ]
  %145 = icmp eq i32 %.0313.lcssa, %133
  br i1 %145, label %._crit_edge364.thread, label %151

._crit_edge364.thread:                            ; preds = %143, %._crit_edge364
  %146 = load ptr, ptr @stderr, align 8, !tbaa !12
  %147 = load ptr, ptr %129, align 8, !tbaa !42
  %148 = getelementptr inbounds i32, ptr %147, i64 %indvars.iv483
  %149 = load i32, ptr %148, align 4, !tbaa !6
  %150 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %146, ptr noundef nonnull @.str.6, i32 noundef %149) #10
  %.pre = load i32, ptr %126, align 8, !tbaa !40
  br label %159

151:                                              ; preds = %._crit_edge364
  %152 = load ptr, ptr %130, align 8, !tbaa !44
  %153 = getelementptr inbounds double, ptr %152, i64 %indvars.iv483
  %154 = load double, ptr %153, align 8, !tbaa !10
  %155 = zext nneg i32 %.0313.lcssa to i64
  %156 = getelementptr inbounds double, ptr %119, i64 %155
  %157 = load double, ptr %156, align 8, !tbaa !10
  %158 = fmul double %154, %157
  store double %158, ptr %156, align 8, !tbaa !10
  br label %159

159:                                              ; preds = %151, %._crit_edge364.thread
  %160 = phi i32 [ %132, %151 ], [ %.pre, %._crit_edge364.thread ]
  %indvars.iv.next484 = add nuw nsw i64 %indvars.iv483, 1
  %161 = sext i32 %160 to i64
  %162 = icmp slt i64 %indvars.iv.next484, %161
  br i1 %162, label %.preheader353, label %._crit_edge370, !llvm.loop !45

._crit_edge370:                                   ; preds = %159, %.preheader354
  %163 = call noalias ptr @malloc(i64 noundef %72) #8
  br i1 %81, label %.lr.ph373.preheader, label %._crit_edge374

.lr.ph373.preheader:                              ; preds = %._crit_edge370
  %164 = zext nneg i32 %71 to i64
  call void @llvm.memset.p0.i64(ptr align 1 %163, i8 0, i64 %164, i1 false), !tbaa !46
  br label %._crit_edge374

._crit_edge374:                                   ; preds = %.lr.ph373.preheader, %._crit_edge370
  %165 = load i32, ptr %3, align 4, !tbaa !6
  %166 = add nsw i32 %165, -1
  %167 = mul nsw i32 %166, %165
  %168 = sdiv i32 %167, 2
  %169 = sext i32 %168 to i64
  %170 = shl nsw i64 %169, 4
  %171 = call noalias ptr @malloc(i64 noundef %170) #8
  %172 = getelementptr inbounds i8, ptr %1, i64 100
  %173 = load i32, ptr %172, align 4, !tbaa !20
  %.not = icmp eq i32 %173, 0
  br i1 %.not, label %178, label %174

174:                                              ; preds = %._crit_edge374
  %175 = shl nsw i64 %169, 3
  %176 = call noalias ptr @malloc(i64 noundef %175) #8
  %177 = call noalias ptr @malloc(i64 noundef %175) #8
  br label %178

178:                                              ; preds = %174, %._crit_edge374
  %.0321 = phi ptr [ %177, %174 ], [ null, %._crit_edge374 ]
  %.0317 = phi ptr [ %176, %174 ], [ null, %._crit_edge374 ]
  %179 = icmp sgt i32 %165, 0
  br i1 %179, label %.lr.ph395, label %.._crit_edge396_crit_edge

.._crit_edge396_crit_edge:                        ; preds = %178
  %.pre617 = sext i32 %165 to i64
  br label %._crit_edge396

.lr.ph395:                                        ; preds = %178
  %180 = getelementptr inbounds i8, ptr %7, i64 16
  %181 = getelementptr inbounds i8, ptr %7, i64 8
  br label %185

.loopexit352.loopexit:                            ; preds = %._crit_edge386
  %182 = trunc nsw i64 %indvars.iv.next510 to i32
  %.pre614 = sext i32 %309 to i64
  br label %.loopexit352

.loopexit352:                                     ; preds = %.loopexit352.loopexit, %185
  %.pre-phi = phi i64 [ %.pre614, %.loopexit352.loopexit ], [ %187, %185 ]
  %183 = phi i32 [ %309, %.loopexit352.loopexit ], [ %186, %185 ]
  %.1323.lcssa = phi i32 [ %182, %.loopexit352.loopexit ], [ %.0322392, %185 ]
  %184 = icmp slt i64 %indvars.iv.next519, %.pre-phi
  %indvars.iv.next512 = add nuw nsw i64 %indvars.iv511, 1
  br i1 %184, label %185, label %._crit_edge396, !llvm.loop !48

185:                                              ; preds = %.lr.ph395, %.loopexit352
  %186 = phi i32 [ %165, %.lr.ph395 ], [ %183, %.loopexit352 ]
  %indvars.iv518 = phi i64 [ 0, %.lr.ph395 ], [ %indvars.iv.next519, %.loopexit352 ]
  %indvars.iv511 = phi i64 [ 1, %.lr.ph395 ], [ %indvars.iv.next512, %.loopexit352 ]
  %.0322392 = phi i32 [ 0, %.lr.ph395 ], [ %.1323.lcssa, %.loopexit352 ]
  %indvars.iv.next519 = add nuw nsw i64 %indvars.iv518, 1
  %187 = sext i32 %186 to i64
  %188 = icmp slt i64 %indvars.iv.next519, %187
  br i1 %188, label %.lr.ph390, label %.loopexit352

.lr.ph390:                                        ; preds = %185
  %189 = getelementptr inbounds double, ptr %119, i64 %indvars.iv518
  %190 = sext i32 %.0322392 to i64
  br label %191

191:                                              ; preds = %.lr.ph390, %._crit_edge386
  %indvars.iv513 = phi i64 [ %indvars.iv511, %.lr.ph390 ], [ %indvars.iv.next514, %._crit_edge386 ]
  %indvars.iv509 = phi i64 [ %190, %.lr.ph390 ], [ %indvars.iv.next510, %._crit_edge386 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  %192 = load ptr, ptr %5, align 8, !tbaa !12
  %193 = getelementptr inbounds i32, ptr %192, i64 %indvars.iv518
  %194 = load i32, ptr %193, align 4, !tbaa !6
  %195 = getelementptr inbounds i32, ptr %192, i64 %indvars.iv513
  %196 = load i32, ptr %195, align 4, !tbaa !6
  %197 = load ptr, ptr %6, align 8, !tbaa !12
  %198 = getelementptr inbounds i32, ptr %197, i64 %indvars.iv518
  %199 = load i32, ptr %198, align 4, !tbaa !6
  %200 = getelementptr inbounds i32, ptr %197, i64 %indvars.iv513
  %201 = load i32, ptr %200, align 4, !tbaa !6
  %202 = add nsw i32 %201, %199
  store i32 %202, ptr %7, align 8, !tbaa !23
  %203 = sext i32 %202 to i64
  %204 = shl nsw i64 %203, 3
  %205 = call noalias ptr @malloc(i64 noundef %204) #8
  store ptr %205, ptr %180, align 8, !tbaa !33
  %206 = call noalias ptr @malloc(i64 noundef %204) #8
  store ptr %206, ptr %181, align 8, !tbaa !49
  %207 = icmp sgt i32 %199, 0
  br i1 %207, label %.lr.ph377.preheader, label %.preheader351

.lr.ph377.preheader:                              ; preds = %191
  %208 = sext i32 %194 to i64
  %wide.trip.count492 = zext nneg i32 %199 to i64
  %invariant.gep623 = getelementptr ptr, ptr %80, i64 %208
  %xtraiter713 = and i64 %wide.trip.count492, 1
  %209 = icmp eq i32 %199, 1
  br i1 %209, label %.preheader351.loopexit.unr-lcssa, label %.lr.ph377.preheader.new

.lr.ph377.preheader.new:                          ; preds = %.lr.ph377.preheader
  %unroll_iter716 = and i64 %wide.trip.count492, 2147483646
  br label %.lr.ph377

.preheader351.loopexit.unr-lcssa:                 ; preds = %.lr.ph377, %.lr.ph377.preheader
  %indvars.iv489.unr = phi i64 [ 0, %.lr.ph377.preheader ], [ %indvars.iv.next490.1, %.lr.ph377 ]
  %lcmp.mod715.not = icmp eq i64 %xtraiter713, 0
  br i1 %lcmp.mod715.not, label %.preheader351, label %.lr.ph377.epil

.lr.ph377.epil:                                   ; preds = %.preheader351.loopexit.unr-lcssa
  %gep.epil = getelementptr ptr, ptr %invariant.gep623, i64 %indvars.iv489.unr
  %210 = load ptr, ptr %gep.epil, align 8, !tbaa !12
  %211 = load ptr, ptr %180, align 8, !tbaa !33
  %212 = getelementptr inbounds ptr, ptr %211, i64 %indvars.iv489.unr
  store ptr %210, ptr %212, align 8, !tbaa !12
  %213 = load ptr, ptr %181, align 8, !tbaa !49
  %214 = getelementptr inbounds double, ptr %213, i64 %indvars.iv489.unr
  store double 1.000000e+00, ptr %214, align 8, !tbaa !10
  br label %.preheader351

.preheader351:                                    ; preds = %.lr.ph377.epil, %.preheader351.loopexit.unr-lcssa, %191
  %215 = icmp sgt i32 %201, 0
  br i1 %215, label %.lr.ph379.preheader, label %._crit_edge380

.lr.ph379.preheader:                              ; preds = %.preheader351
  %216 = sext i32 %196 to i64
  %217 = sext i32 %199 to i64
  %wide.trip.count497 = zext nneg i32 %201 to i64
  %invariant.gep624 = getelementptr ptr, ptr %80, i64 %216
  %xtraiter718 = and i64 %wide.trip.count497, 1
  %218 = icmp eq i32 %201, 1
  br i1 %218, label %._crit_edge380.loopexit.unr-lcssa, label %.lr.ph379.preheader.new

.lr.ph379.preheader.new:                          ; preds = %.lr.ph379.preheader
  %unroll_iter721 = and i64 %wide.trip.count497, 2147483646
  br label %.lr.ph379

.lr.ph377:                                        ; preds = %.lr.ph377, %.lr.ph377.preheader.new
  %indvars.iv489 = phi i64 [ 0, %.lr.ph377.preheader.new ], [ %indvars.iv.next490.1, %.lr.ph377 ]
  %niter717 = phi i64 [ 0, %.lr.ph377.preheader.new ], [ %niter717.next.1, %.lr.ph377 ]
  %gep = getelementptr ptr, ptr %invariant.gep623, i64 %indvars.iv489
  %219 = load ptr, ptr %gep, align 8, !tbaa !12
  %220 = load ptr, ptr %180, align 8, !tbaa !33
  %221 = getelementptr inbounds ptr, ptr %220, i64 %indvars.iv489
  store ptr %219, ptr %221, align 8, !tbaa !12
  %222 = load ptr, ptr %181, align 8, !tbaa !49
  %223 = getelementptr inbounds double, ptr %222, i64 %indvars.iv489
  store double 1.000000e+00, ptr %223, align 8, !tbaa !10
  %indvars.iv.next490 = or disjoint i64 %indvars.iv489, 1
  %gep.1 = getelementptr ptr, ptr %invariant.gep623, i64 %indvars.iv.next490
  %224 = load ptr, ptr %gep.1, align 8, !tbaa !12
  %225 = load ptr, ptr %180, align 8, !tbaa !33
  %226 = getelementptr inbounds ptr, ptr %225, i64 %indvars.iv.next490
  store ptr %224, ptr %226, align 8, !tbaa !12
  %227 = load ptr, ptr %181, align 8, !tbaa !49
  %228 = getelementptr inbounds double, ptr %227, i64 %indvars.iv.next490
  store double 1.000000e+00, ptr %228, align 8, !tbaa !10
  %indvars.iv.next490.1 = add nuw nsw i64 %indvars.iv489, 2
  %niter717.next.1 = add i64 %niter717, 2
  %niter717.ncmp.1 = icmp eq i64 %niter717.next.1, %unroll_iter716
  br i1 %niter717.ncmp.1, label %.preheader351.loopexit.unr-lcssa, label %.lr.ph377, !llvm.loop !50

.lr.ph379:                                        ; preds = %.lr.ph379, %.lr.ph379.preheader.new
  %indvars.iv494 = phi i64 [ 0, %.lr.ph379.preheader.new ], [ %indvars.iv.next495.1, %.lr.ph379 ]
  %niter722 = phi i64 [ 0, %.lr.ph379.preheader.new ], [ %niter722.next.1, %.lr.ph379 ]
  %gep625 = getelementptr ptr, ptr %invariant.gep624, i64 %indvars.iv494
  %229 = load ptr, ptr %gep625, align 8, !tbaa !12
  %230 = load ptr, ptr %180, align 8, !tbaa !33
  %231 = add nsw i64 %indvars.iv494, %217
  %232 = getelementptr inbounds ptr, ptr %230, i64 %231
  store ptr %229, ptr %232, align 8, !tbaa !12
  %233 = load ptr, ptr %181, align 8, !tbaa !49
  %234 = getelementptr inbounds double, ptr %233, i64 %231
  store double -1.000000e+00, ptr %234, align 8, !tbaa !10
  %indvars.iv.next495 = or disjoint i64 %indvars.iv494, 1
  %gep625.1 = getelementptr ptr, ptr %invariant.gep624, i64 %indvars.iv.next495
  %235 = load ptr, ptr %gep625.1, align 8, !tbaa !12
  %236 = load ptr, ptr %180, align 8, !tbaa !33
  %237 = add nsw i64 %indvars.iv.next495, %217
  %238 = getelementptr inbounds ptr, ptr %236, i64 %237
  store ptr %235, ptr %238, align 8, !tbaa !12
  %239 = load ptr, ptr %181, align 8, !tbaa !49
  %240 = getelementptr inbounds double, ptr %239, i64 %237
  store double -1.000000e+00, ptr %240, align 8, !tbaa !10
  %indvars.iv.next495.1 = add nuw nsw i64 %indvars.iv494, 2
  %niter722.next.1 = add i64 %niter722, 2
  %niter722.ncmp.1 = icmp eq i64 %niter722.next.1, %unroll_iter721
  br i1 %niter722.ncmp.1, label %._crit_edge380.loopexit.unr-lcssa, label %.lr.ph379, !llvm.loop !51

._crit_edge380.loopexit.unr-lcssa:                ; preds = %.lr.ph379, %.lr.ph379.preheader
  %indvars.iv494.unr = phi i64 [ 0, %.lr.ph379.preheader ], [ %indvars.iv.next495.1, %.lr.ph379 ]
  %lcmp.mod720.not = icmp eq i64 %xtraiter718, 0
  br i1 %lcmp.mod720.not, label %._crit_edge380, label %.lr.ph379.epil

.lr.ph379.epil:                                   ; preds = %._crit_edge380.loopexit.unr-lcssa
  %gep625.epil = getelementptr ptr, ptr %invariant.gep624, i64 %indvars.iv494.unr
  %241 = load ptr, ptr %gep625.epil, align 8, !tbaa !12
  %242 = load ptr, ptr %180, align 8, !tbaa !33
  %243 = add nsw i64 %indvars.iv494.unr, %217
  %244 = getelementptr inbounds ptr, ptr %242, i64 %243
  store ptr %241, ptr %244, align 8, !tbaa !12
  %245 = load ptr, ptr %181, align 8, !tbaa !49
  %246 = getelementptr inbounds double, ptr %245, i64 %243
  store double -1.000000e+00, ptr %246, align 8, !tbaa !10
  br label %._crit_edge380

._crit_edge380:                                   ; preds = %.lr.ph379.epil, %._crit_edge380.loopexit.unr-lcssa, %.preheader351
  %247 = load i32, ptr %172, align 4, !tbaa !20
  %.not344 = icmp eq i32 %247, 0
  %.pre613 = load double, ptr %189, align 8, !tbaa !10
  br i1 %.not344, label %253, label %248

248:                                              ; preds = %._crit_edge380
  %249 = getelementptr inbounds double, ptr %119, i64 %indvars.iv513
  %250 = load double, ptr %249, align 8, !tbaa !10
  %251 = getelementptr inbounds double, ptr %.0317, i64 %indvars.iv509
  %252 = getelementptr inbounds double, ptr %.0321, i64 %indvars.iv509
  call void @_ZL26svm_binary_svc_probabilityPK11svm_problemPK13svm_parameterddRdS5_(ptr noundef nonnull %7, ptr noundef nonnull %1, double noundef %.pre613, double noundef %250, ptr noundef nonnull align 8 dereferenceable(8) %251, ptr noundef nonnull align 8 dereferenceable(8) %252)
  %.pre612 = load double, ptr %189, align 8, !tbaa !10
  br label %253

253:                                              ; preds = %248, %._crit_edge380
  %254 = phi double [ %.pre612, %248 ], [ %.pre613, %._crit_edge380 ]
  %255 = getelementptr inbounds double, ptr %119, i64 %indvars.iv513
  %256 = load double, ptr %255, align 8, !tbaa !10
  %257 = call { ptr, double } @_ZL13svm_train_onePK11svm_problemPK13svm_parameterdd(ptr noundef nonnull %7, ptr noundef nonnull %1, double noundef %254, double noundef %256)
  %258 = extractvalue { ptr, double } %257, 0
  %259 = extractvalue { ptr, double } %257, 1
  %260 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %indvars.iv509
  store ptr %258, ptr %260, align 8, !tbaa !12
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %260, i64 8
  store double %259, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !10
  br i1 %207, label %.lr.ph383.preheader, label %.preheader350

.lr.ph383.preheader:                              ; preds = %253
  %261 = sext i32 %194 to i64
  %wide.trip.count502 = zext nneg i32 %199 to i64
  %invariant.gep626 = getelementptr i8, ptr %163, i64 %261
  %xtraiter723 = and i64 %wide.trip.count502, 1
  %262 = icmp eq i32 %199, 1
  br i1 %262, label %.preheader350.loopexit.unr-lcssa, label %.lr.ph383.preheader.new

.lr.ph383.preheader.new:                          ; preds = %.lr.ph383.preheader
  %unroll_iter726 = and i64 %wide.trip.count502, 2147483646
  br label %.lr.ph383

.preheader350.loopexit.unr-lcssa:                 ; preds = %287, %.lr.ph383.preheader
  %indvars.iv499.unr = phi i64 [ 0, %.lr.ph383.preheader ], [ %indvars.iv.next500.1, %287 ]
  %lcmp.mod725.not = icmp eq i64 %xtraiter723, 0
  br i1 %lcmp.mod725.not, label %.preheader350, label %.lr.ph383.epil

.lr.ph383.epil:                                   ; preds = %.preheader350.loopexit.unr-lcssa
  %gep627.epil = getelementptr i8, ptr %invariant.gep626, i64 %indvars.iv499.unr
  %263 = load i8, ptr %gep627.epil, align 1, !tbaa !46, !range !52, !noundef !53
  %264 = trunc nuw i8 %263 to i1
  br i1 %264, label %.preheader350, label %265

265:                                              ; preds = %.lr.ph383.epil
  %266 = getelementptr inbounds double, ptr %258, i64 %indvars.iv499.unr
  %267 = load double, ptr %266, align 8, !tbaa !10
  %268 = fcmp ueq double %267, 0.000000e+00
  br i1 %268, label %.preheader350, label %269

269:                                              ; preds = %265
  store i8 1, ptr %gep627.epil, align 1, !tbaa !46
  br label %.preheader350

.preheader350:                                    ; preds = %.preheader350.loopexit.unr-lcssa, %269, %265, %.lr.ph383.epil, %253
  br i1 %215, label %.lr.ph385.preheader, label %._crit_edge386

.lr.ph385.preheader:                              ; preds = %.preheader350
  %270 = sext i32 %196 to i64
  %271 = sext i32 %199 to i64
  %wide.trip.count507 = zext nneg i32 %201 to i64
  %invariant.gep628 = getelementptr i8, ptr %163, i64 %270
  %invariant.gep630 = getelementptr double, ptr %258, i64 %271
  %xtraiter728 = and i64 %wide.trip.count507, 1
  %272 = icmp eq i32 %201, 1
  br i1 %272, label %._crit_edge386.loopexit.unr-lcssa, label %.lr.ph385.preheader.new

.lr.ph385.preheader.new:                          ; preds = %.lr.ph385.preheader
  %unroll_iter731 = and i64 %wide.trip.count507, 2147483646
  br label %.lr.ph385

.lr.ph383:                                        ; preds = %287, %.lr.ph383.preheader.new
  %indvars.iv499 = phi i64 [ 0, %.lr.ph383.preheader.new ], [ %indvars.iv.next500.1, %287 ]
  %niter727 = phi i64 [ 0, %.lr.ph383.preheader.new ], [ %niter727.next.1, %287 ]
  %gep627 = getelementptr i8, ptr %invariant.gep626, i64 %indvars.iv499
  %273 = load i8, ptr %gep627, align 1, !tbaa !46, !range !52, !noundef !53
  %274 = trunc nuw i8 %273 to i1
  br i1 %274, label %.lr.ph383.1, label %275

275:                                              ; preds = %.lr.ph383
  %276 = getelementptr inbounds double, ptr %258, i64 %indvars.iv499
  %277 = load double, ptr %276, align 8, !tbaa !10
  %278 = fcmp ueq double %277, 0.000000e+00
  br i1 %278, label %.lr.ph383.1, label %279

279:                                              ; preds = %275
  store i8 1, ptr %gep627, align 1, !tbaa !46
  br label %.lr.ph383.1

.lr.ph383.1:                                      ; preds = %.lr.ph383, %275, %279
  %indvars.iv.next500 = or disjoint i64 %indvars.iv499, 1
  %gep627.1 = getelementptr i8, ptr %invariant.gep626, i64 %indvars.iv.next500
  %280 = load i8, ptr %gep627.1, align 1, !tbaa !46, !range !52, !noundef !53
  %281 = trunc nuw i8 %280 to i1
  br i1 %281, label %287, label %282

282:                                              ; preds = %.lr.ph383.1
  %283 = getelementptr inbounds double, ptr %258, i64 %indvars.iv.next500
  %284 = load double, ptr %283, align 8, !tbaa !10
  %285 = fcmp ueq double %284, 0.000000e+00
  br i1 %285, label %287, label %286

286:                                              ; preds = %282
  store i8 1, ptr %gep627.1, align 1, !tbaa !46
  br label %287

287:                                              ; preds = %286, %282, %.lr.ph383.1
  %indvars.iv.next500.1 = add nuw nsw i64 %indvars.iv499, 2
  %niter727.next.1 = add i64 %niter727, 2
  %niter727.ncmp.1 = icmp eq i64 %niter727.next.1, %unroll_iter726
  br i1 %niter727.ncmp.1, label %.preheader350.loopexit.unr-lcssa, label %.lr.ph383, !llvm.loop !54

.lr.ph385:                                        ; preds = %300, %.lr.ph385.preheader.new
  %indvars.iv504 = phi i64 [ 0, %.lr.ph385.preheader.new ], [ %indvars.iv.next505.1, %300 ]
  %niter732 = phi i64 [ 0, %.lr.ph385.preheader.new ], [ %niter732.next.1, %300 ]
  %gep629 = getelementptr i8, ptr %invariant.gep628, i64 %indvars.iv504
  %288 = load i8, ptr %gep629, align 1, !tbaa !46, !range !52, !noundef !53
  %289 = trunc nuw i8 %288 to i1
  br i1 %289, label %.lr.ph385.1, label %290

290:                                              ; preds = %.lr.ph385
  %gep631 = getelementptr double, ptr %invariant.gep630, i64 %indvars.iv504
  %291 = load double, ptr %gep631, align 8, !tbaa !10
  %292 = fcmp ueq double %291, 0.000000e+00
  br i1 %292, label %.lr.ph385.1, label %293

293:                                              ; preds = %290
  store i8 1, ptr %gep629, align 1, !tbaa !46
  br label %.lr.ph385.1

.lr.ph385.1:                                      ; preds = %.lr.ph385, %290, %293
  %indvars.iv.next505 = or disjoint i64 %indvars.iv504, 1
  %gep629.1 = getelementptr i8, ptr %invariant.gep628, i64 %indvars.iv.next505
  %294 = load i8, ptr %gep629.1, align 1, !tbaa !46, !range !52, !noundef !53
  %295 = trunc nuw i8 %294 to i1
  br i1 %295, label %300, label %296

296:                                              ; preds = %.lr.ph385.1
  %gep631.1 = getelementptr double, ptr %invariant.gep630, i64 %indvars.iv.next505
  %297 = load double, ptr %gep631.1, align 8, !tbaa !10
  %298 = fcmp ueq double %297, 0.000000e+00
  br i1 %298, label %300, label %299

299:                                              ; preds = %296
  store i8 1, ptr %gep629.1, align 1, !tbaa !46
  br label %300

300:                                              ; preds = %299, %296, %.lr.ph385.1
  %indvars.iv.next505.1 = add nuw nsw i64 %indvars.iv504, 2
  %niter732.next.1 = add i64 %niter732, 2
  %niter732.ncmp.1 = icmp eq i64 %niter732.next.1, %unroll_iter731
  br i1 %niter732.ncmp.1, label %._crit_edge386.loopexit.unr-lcssa, label %.lr.ph385, !llvm.loop !55

._crit_edge386.loopexit.unr-lcssa:                ; preds = %300, %.lr.ph385.preheader
  %indvars.iv504.unr = phi i64 [ 0, %.lr.ph385.preheader ], [ %indvars.iv.next505.1, %300 ]
  %lcmp.mod730.not = icmp eq i64 %xtraiter728, 0
  br i1 %lcmp.mod730.not, label %._crit_edge386, label %.lr.ph385.epil

.lr.ph385.epil:                                   ; preds = %._crit_edge386.loopexit.unr-lcssa
  %gep629.epil = getelementptr i8, ptr %invariant.gep628, i64 %indvars.iv504.unr
  %301 = load i8, ptr %gep629.epil, align 1, !tbaa !46, !range !52, !noundef !53
  %302 = trunc nuw i8 %301 to i1
  br i1 %302, label %._crit_edge386, label %303

303:                                              ; preds = %.lr.ph385.epil
  %gep631.epil = getelementptr double, ptr %invariant.gep630, i64 %indvars.iv504.unr
  %304 = load double, ptr %gep631.epil, align 8, !tbaa !10
  %305 = fcmp ueq double %304, 0.000000e+00
  br i1 %305, label %._crit_edge386, label %306

306:                                              ; preds = %303
  store i8 1, ptr %gep629.epil, align 1, !tbaa !46
  br label %._crit_edge386

._crit_edge386:                                   ; preds = %._crit_edge386.loopexit.unr-lcssa, %306, %303, %.lr.ph385.epil, %.preheader350
  %307 = load ptr, ptr %180, align 8, !tbaa !33
  call void @free(ptr noundef %307) #9
  %308 = load ptr, ptr %181, align 8, !tbaa !49
  call void @free(ptr noundef %308) #9
  %indvars.iv.next510 = add nsw i64 %indvars.iv509, 1
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  %indvars.iv.next514 = add nuw nsw i64 %indvars.iv513, 1
  %309 = load i32, ptr %3, align 4, !tbaa !6
  %310 = trunc nuw i64 %indvars.iv.next514 to i32
  %311 = icmp sgt i32 %309, %310
  br i1 %311, label %191, label %.loopexit352.loopexit, !llvm.loop !56

._crit_edge396:                                   ; preds = %.loopexit352, %.._crit_edge396_crit_edge
  %.pre-phi618 = phi i64 [ %.pre617, %.._crit_edge396_crit_edge ], [ %.pre-phi, %.loopexit352 ]
  %312 = phi i32 [ %165, %.._crit_edge396_crit_edge ], [ %183, %.loopexit352 ]
  %313 = getelementptr inbounds i8, ptr %8, i64 104
  store i32 %312, ptr %313, align 8, !tbaa !18
  %314 = shl nsw i64 %.pre-phi618, 2
  %315 = call noalias ptr @malloc(i64 noundef %314) #8
  %316 = getelementptr inbounds i8, ptr %8, i64 160
  store ptr %315, ptr %316, align 8, !tbaa !57
  %317 = icmp sgt i32 %312, 0
  br i1 %317, label %.lr.ph400, label %._crit_edge401

.lr.ph400:                                        ; preds = %._crit_edge396
  %318 = ptrtoint ptr %315 to i64
  %319 = load ptr, ptr %4, align 8, !tbaa !12
  %wide.trip.count524 = zext nneg i32 %312 to i64
  %min.iters.check646 = icmp ult i32 %312, 8
  %320 = ptrtoint ptr %319 to i64
  %321 = sub i64 %318, %320
  %diff.check = icmp ult i64 %321, 32
  %or.cond702 = select i1 %min.iters.check646, i1 true, i1 %diff.check
  br i1 %or.cond702, label %scalar.ph645.preheader, label %vector.ph647

vector.ph647:                                     ; preds = %.lr.ph400
  %n.vec649 = and i64 %wide.trip.count524, 2147483640
  br label %vector.body651

vector.body651:                                   ; preds = %vector.body651, %vector.ph647
  %index652 = phi i64 [ 0, %vector.ph647 ], [ %index.next654, %vector.body651 ]
  %322 = getelementptr inbounds i32, ptr %319, i64 %index652
  %323 = getelementptr inbounds i8, ptr %322, i64 16
  %wide.load = load <4 x i32>, ptr %322, align 4, !tbaa !6
  %wide.load653 = load <4 x i32>, ptr %323, align 4, !tbaa !6
  %324 = getelementptr inbounds i32, ptr %315, i64 %index652
  %325 = getelementptr inbounds i8, ptr %324, i64 16
  store <4 x i32> %wide.load, ptr %324, align 4, !tbaa !6
  store <4 x i32> %wide.load653, ptr %325, align 4, !tbaa !6
  %index.next654 = add nuw i64 %index652, 8
  %326 = icmp eq i64 %index.next654, %n.vec649
  br i1 %326, label %middle.block644, label %vector.body651, !llvm.loop !58

middle.block644:                                  ; preds = %vector.body651
  %cmp.n655 = icmp eq i64 %n.vec649, %wide.trip.count524
  br i1 %cmp.n655, label %._crit_edge401, label %scalar.ph645.preheader

scalar.ph645.preheader:                           ; preds = %middle.block644, %.lr.ph400
  %indvars.iv521.ph = phi i64 [ 0, %.lr.ph400 ], [ %n.vec649, %middle.block644 ]
  %xtraiter733 = and i64 %wide.trip.count524, 3
  %lcmp.mod734.not = icmp eq i64 %xtraiter733, 0
  br i1 %lcmp.mod734.not, label %scalar.ph645.prol.loopexit, label %scalar.ph645.prol

scalar.ph645.prol:                                ; preds = %scalar.ph645.preheader, %scalar.ph645.prol
  %indvars.iv521.prol = phi i64 [ %indvars.iv.next522.prol, %scalar.ph645.prol ], [ %indvars.iv521.ph, %scalar.ph645.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph645.prol ], [ 0, %scalar.ph645.preheader ]
  %327 = getelementptr inbounds i32, ptr %319, i64 %indvars.iv521.prol
  %328 = load i32, ptr %327, align 4, !tbaa !6
  %329 = getelementptr inbounds i32, ptr %315, i64 %indvars.iv521.prol
  store i32 %328, ptr %329, align 4, !tbaa !6
  %indvars.iv.next522.prol = add nuw nsw i64 %indvars.iv521.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter733
  br i1 %prol.iter.cmp.not, label %scalar.ph645.prol.loopexit, label %scalar.ph645.prol, !llvm.loop !59

scalar.ph645.prol.loopexit:                       ; preds = %scalar.ph645.prol, %scalar.ph645.preheader
  %indvars.iv521.unr = phi i64 [ %indvars.iv521.ph, %scalar.ph645.preheader ], [ %indvars.iv.next522.prol, %scalar.ph645.prol ]
  %330 = sub nsw i64 %indvars.iv521.ph, %wide.trip.count524
  %331 = icmp ugt i64 %330, -4
  br i1 %331, label %._crit_edge401, label %scalar.ph645

scalar.ph645:                                     ; preds = %scalar.ph645.prol.loopexit, %scalar.ph645
  %indvars.iv521 = phi i64 [ %indvars.iv.next522.3, %scalar.ph645 ], [ %indvars.iv521.unr, %scalar.ph645.prol.loopexit ]
  %332 = getelementptr inbounds i32, ptr %319, i64 %indvars.iv521
  %333 = load i32, ptr %332, align 4, !tbaa !6
  %334 = getelementptr inbounds i32, ptr %315, i64 %indvars.iv521
  store i32 %333, ptr %334, align 4, !tbaa !6
  %indvars.iv.next522 = add nuw nsw i64 %indvars.iv521, 1
  %335 = getelementptr inbounds i32, ptr %319, i64 %indvars.iv.next522
  %336 = load i32, ptr %335, align 4, !tbaa !6
  %337 = getelementptr inbounds i32, ptr %315, i64 %indvars.iv.next522
  store i32 %336, ptr %337, align 4, !tbaa !6
  %indvars.iv.next522.1 = add nuw nsw i64 %indvars.iv521, 2
  %338 = getelementptr inbounds i32, ptr %319, i64 %indvars.iv.next522.1
  %339 = load i32, ptr %338, align 4, !tbaa !6
  %340 = getelementptr inbounds i32, ptr %315, i64 %indvars.iv.next522.1
  store i32 %339, ptr %340, align 4, !tbaa !6
  %indvars.iv.next522.2 = add nuw nsw i64 %indvars.iv521, 3
  %341 = getelementptr inbounds i32, ptr %319, i64 %indvars.iv.next522.2
  %342 = load i32, ptr %341, align 4, !tbaa !6
  %343 = getelementptr inbounds i32, ptr %315, i64 %indvars.iv.next522.2
  store i32 %342, ptr %343, align 4, !tbaa !6
  %indvars.iv.next522.3 = add nuw nsw i64 %indvars.iv521, 4
  %exitcond525.not.3 = icmp eq i64 %indvars.iv.next522.3, %wide.trip.count524
  br i1 %exitcond525.not.3, label %._crit_edge401, label %scalar.ph645, !llvm.loop !60

._crit_edge401:                                   ; preds = %scalar.ph645.prol.loopexit, %scalar.ph645, %middle.block644, %._crit_edge396
  %344 = add nsw i32 %312, -1
  %345 = mul nsw i32 %344, %312
  %346 = sdiv i32 %345, 2
  %347 = sext i32 %346 to i64
  %348 = shl nsw i64 %347, 3
  %349 = call noalias ptr @malloc(i64 noundef %348) #8
  %350 = getelementptr inbounds i8, ptr %8, i64 128
  store ptr %349, ptr %350, align 8, !tbaa !22
  %351 = icmp sgt i32 %345, 1
  br i1 %351, label %.lr.ph405.preheader, label %._crit_edge406

.lr.ph405.preheader:                              ; preds = %._crit_edge401
  %wide.trip.count529 = zext nneg i32 %346 to i64
  %min.iters.check658 = icmp ult i32 %346, 5
  br i1 %min.iters.check658, label %.lr.ph405.preheader709, label %vector.ph659

vector.ph659:                                     ; preds = %.lr.ph405.preheader
  %n.mod.vf660 = and i64 %wide.trip.count529, 3
  %352 = icmp eq i64 %n.mod.vf660, 0
  %353 = select i1 %352, i64 4, i64 %n.mod.vf660
  %n.vec661 = sub nsw i64 %wide.trip.count529, %353
  br label %vector.body663

vector.body663:                                   ; preds = %vector.body663, %vector.ph659
  %index664 = phi i64 [ 0, %vector.ph659 ], [ %index.next665, %vector.body663 ]
  %354 = or disjoint i64 %index664, 1
  %355 = or disjoint i64 %index664, 2
  %356 = or disjoint i64 %index664, 3
  %357 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %index664, i32 1
  %358 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %354, i32 1
  %359 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %355, i32 1
  %360 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %356, i32 1
  %361 = load double, ptr %357, align 8, !tbaa !61
  %362 = load double, ptr %358, align 8, !tbaa !61
  %363 = insertelement <2 x double> poison, double %361, i64 0
  %364 = insertelement <2 x double> %363, double %362, i64 1
  %365 = load double, ptr %359, align 8, !tbaa !61
  %366 = load double, ptr %360, align 8, !tbaa !61
  %367 = insertelement <2 x double> poison, double %365, i64 0
  %368 = insertelement <2 x double> %367, double %366, i64 1
  %369 = getelementptr inbounds double, ptr %349, i64 %index664
  %370 = getelementptr inbounds i8, ptr %369, i64 16
  store <2 x double> %364, ptr %369, align 8, !tbaa !10
  store <2 x double> %368, ptr %370, align 8, !tbaa !10
  %index.next665 = add nuw i64 %index664, 4
  %371 = icmp eq i64 %index.next665, %n.vec661
  br i1 %371, label %.lr.ph405.preheader709, label %vector.body663, !llvm.loop !63

.lr.ph405.preheader709:                           ; preds = %vector.body663, %.lr.ph405.preheader
  %indvars.iv526.ph = phi i64 [ 0, %.lr.ph405.preheader ], [ %n.vec661, %vector.body663 ]
  br label %.lr.ph405

.lr.ph405:                                        ; preds = %.lr.ph405.preheader709, %.lr.ph405
  %indvars.iv526 = phi i64 [ %indvars.iv.next527, %.lr.ph405 ], [ %indvars.iv526.ph, %.lr.ph405.preheader709 ]
  %372 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %indvars.iv526, i32 1
  %373 = load double, ptr %372, align 8, !tbaa !61
  %374 = getelementptr inbounds double, ptr %349, i64 %indvars.iv526
  store double %373, ptr %374, align 8, !tbaa !10
  %indvars.iv.next527 = add nuw nsw i64 %indvars.iv526, 1
  %exitcond530.not = icmp eq i64 %indvars.iv.next527, %wide.trip.count529
  br i1 %exitcond530.not, label %._crit_edge406, label %.lr.ph405, !llvm.loop !64

._crit_edge406:                                   ; preds = %.lr.ph405, %._crit_edge401
  %375 = load i32, ptr %172, align 4, !tbaa !20
  %.not343 = icmp eq i32 %375, 0
  br i1 %.not343, label %385, label %376

376:                                              ; preds = %._crit_edge406
  %377 = call noalias ptr @malloc(i64 noundef %348) #8
  %378 = getelementptr inbounds i8, ptr %8, i64 136
  store ptr %377, ptr %378, align 8, !tbaa !21
  %379 = call noalias ptr @malloc(i64 noundef %348) #8
  %380 = getelementptr inbounds i8, ptr %8, i64 144
  store ptr %379, ptr %380, align 8, !tbaa !65
  br i1 %351, label %.lr.ph409.preheader, label %.loopexit349

.lr.ph409.preheader:                              ; preds = %376
  %381 = add nsw i32 %346, -1
  %382 = zext i32 %381 to i64
  %383 = shl nuw nsw i64 %382, 3
  %384 = add nuw nsw i64 %383, 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %377, ptr noundef nonnull align 8 dereferenceable(1) %.0317, i64 %384, i1 false), !tbaa !10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %379, ptr noundef nonnull align 8 dereferenceable(1) %.0321, i64 %384, i1 false), !tbaa !10
  br label %.loopexit349

385:                                              ; preds = %._crit_edge406
  %386 = getelementptr inbounds i8, ptr %8, i64 136
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %386, i8 0, i64 16, i1 false)
  br label %.loopexit349

.loopexit349:                                     ; preds = %.lr.ph409.preheader, %376, %385
  %387 = call noalias ptr @malloc(i64 noundef %314) #8
  %388 = call noalias ptr @malloc(i64 noundef %314) #8
  %389 = getelementptr inbounds i8, ptr %8, i64 168
  store ptr %388, ptr %389, align 8, !tbaa !66
  br i1 %317, label %.preheader348.lr.ph, label %._crit_edge420

.preheader348.lr.ph:                              ; preds = %.loopexit349
  %390 = load ptr, ptr %6, align 8, !tbaa !12
  %391 = load ptr, ptr %5, align 8
  %wide.trip.count542 = zext nneg i32 %312 to i64
  br label %.preheader348

.preheader348:                                    ; preds = %.preheader348.lr.ph, %._crit_edge414
  %indvars.iv539 = phi i64 [ 0, %.preheader348.lr.ph ], [ %indvars.iv.next540, %._crit_edge414 ]
  %.0318418 = phi i32 [ 0, %.preheader348.lr.ph ], [ %.1319.lcssa, %._crit_edge414 ]
  %392 = getelementptr inbounds i32, ptr %390, i64 %indvars.iv539
  %393 = load i32, ptr %392, align 4, !tbaa !6
  %394 = icmp sgt i32 %393, 0
  br i1 %394, label %.lr.ph413, label %._crit_edge414

.lr.ph413:                                        ; preds = %.preheader348
  %395 = getelementptr inbounds i32, ptr %391, i64 %indvars.iv539
  %396 = load i32, ptr %395, align 4, !tbaa !6
  %397 = sext i32 %396 to i64
  %wide.trip.count537 = zext nneg i32 %393 to i64
  %invariant.gep632 = getelementptr i8, ptr %163, i64 %397
  %min.iters.check668 = icmp ult i32 %393, 8
  br i1 %min.iters.check668, label %scalar.ph667.preheader, label %vector.ph669

scalar.ph667.preheader:                           ; preds = %middle.block666, %.lr.ph413
  %indvars.iv534.ph = phi i64 [ 0, %.lr.ph413 ], [ %n.vec671, %middle.block666 ]
  %.0315411.ph = phi i32 [ 0, %.lr.ph413 ], [ %408, %middle.block666 ]
  %.1319410.ph = phi i32 [ %.0318418, %.lr.ph413 ], [ %409, %middle.block666 ]
  br label %scalar.ph667

vector.ph669:                                     ; preds = %.lr.ph413
  %n.vec671 = and i64 %wide.trip.count537, 2147483640
  %398 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0318418, i64 0
  br label %vector.body673

vector.body673:                                   ; preds = %vector.body673, %vector.ph669
  %index674 = phi i64 [ 0, %vector.ph669 ], [ %index.next680, %vector.body673 ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph669 ], [ %405, %vector.body673 ]
  %vec.phi675 = phi <4 x i32> [ zeroinitializer, %vector.ph669 ], [ %406, %vector.body673 ]
  %vec.phi676 = phi <4 x i32> [ %398, %vector.ph669 ], [ %403, %vector.body673 ]
  %vec.phi677 = phi <4 x i32> [ zeroinitializer, %vector.ph669 ], [ %404, %vector.body673 ]
  %399 = getelementptr i8, ptr %invariant.gep632, i64 %index674
  %400 = getelementptr i8, ptr %399, i64 4
  %wide.load678 = load <4 x i8>, ptr %399, align 1, !tbaa !46
  %wide.load679 = load <4 x i8>, ptr %400, align 1, !tbaa !46
  %401 = zext <4 x i8> %wide.load678 to <4 x i32>
  %402 = zext <4 x i8> %wide.load679 to <4 x i32>
  %403 = add <4 x i32> %vec.phi676, %401
  %404 = add <4 x i32> %vec.phi677, %402
  %405 = add <4 x i32> %vec.phi, %401
  %406 = add <4 x i32> %vec.phi675, %402
  %index.next680 = add nuw i64 %index674, 8
  %407 = icmp eq i64 %index.next680, %n.vec671
  br i1 %407, label %middle.block666, label %vector.body673, !llvm.loop !67

middle.block666:                                  ; preds = %vector.body673
  %bin.rdx = add <4 x i32> %406, %405
  %408 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %bin.rdx681 = add <4 x i32> %404, %403
  %409 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx681)
  %cmp.n682 = icmp eq i64 %n.vec671, %wide.trip.count537
  br i1 %cmp.n682, label %._crit_edge414, label %scalar.ph667.preheader

._crit_edge414:                                   ; preds = %scalar.ph667, %middle.block666, %.preheader348
  %.1319.lcssa = phi i32 [ %.0318418, %.preheader348 ], [ %409, %middle.block666 ], [ %.2320, %scalar.ph667 ]
  %.0315.lcssa = phi i32 [ 0, %.preheader348 ], [ %408, %middle.block666 ], [ %.1316, %scalar.ph667 ]
  %410 = getelementptr inbounds i32, ptr %388, i64 %indvars.iv539
  store i32 %.0315.lcssa, ptr %410, align 4, !tbaa !6
  %411 = getelementptr inbounds i32, ptr %387, i64 %indvars.iv539
  store i32 %.0315.lcssa, ptr %411, align 4, !tbaa !6
  %indvars.iv.next540 = add nuw nsw i64 %indvars.iv539, 1
  %exitcond543.not = icmp eq i64 %indvars.iv.next540, %wide.trip.count542
  br i1 %exitcond543.not, label %._crit_edge420, label %.preheader348, !llvm.loop !68

scalar.ph667:                                     ; preds = %scalar.ph667.preheader, %scalar.ph667
  %indvars.iv534 = phi i64 [ %indvars.iv.next535, %scalar.ph667 ], [ %indvars.iv534.ph, %scalar.ph667.preheader ]
  %.0315411 = phi i32 [ %.1316, %scalar.ph667 ], [ %.0315411.ph, %scalar.ph667.preheader ]
  %.1319410 = phi i32 [ %.2320, %scalar.ph667 ], [ %.1319410.ph, %scalar.ph667.preheader ]
  %gep633 = getelementptr i8, ptr %invariant.gep632, i64 %indvars.iv534
  %412 = load i8, ptr %gep633, align 1, !tbaa !46, !range !52, !noundef !53
  %413 = zext nneg i8 %412 to i32
  %.2320 = add nsw i32 %.1319410, %413
  %.1316 = add nuw nsw i32 %.0315411, %413
  %indvars.iv.next535 = add nuw nsw i64 %indvars.iv534, 1
  %exitcond538.not = icmp eq i64 %indvars.iv.next535, %wide.trip.count537
  br i1 %exitcond538.not, label %._crit_edge414, label %scalar.ph667, !llvm.loop !69

._crit_edge420:                                   ; preds = %._crit_edge414, %.loopexit349
  %.0318.lcssa = phi i32 [ 0, %.loopexit349 ], [ %.1319.lcssa, %._crit_edge414 ]
  call void (ptr, ...) @_ZL4infoPKcz(ptr noundef nonnull @.str.7, i32 noundef %.0318.lcssa)
  %414 = getelementptr inbounds i8, ptr %8, i64 108
  store i32 %.0318.lcssa, ptr %414, align 4, !tbaa !30
  %415 = sext i32 %.0318.lcssa to i64
  %416 = shl nsw i64 %415, 3
  %417 = call noalias ptr @malloc(i64 noundef %416) #8
  %418 = getelementptr inbounds i8, ptr %8, i64 112
  store ptr %417, ptr %418, align 8, !tbaa !31
  %419 = shl nsw i64 %415, 2
  %420 = call noalias ptr @malloc(i64 noundef %419) #8
  %421 = getelementptr inbounds i8, ptr %8, i64 152
  store ptr %420, ptr %421, align 8, !tbaa !32
  br i1 %81, label %.lr.ph425.preheader, label %._crit_edge426

.lr.ph425.preheader:                              ; preds = %._crit_edge420
  %wide.trip.count547 = zext nneg i32 %71 to i64
  %xtraiter735 = and i64 %wide.trip.count547, 1
  %422 = icmp eq i32 %71, 1
  br i1 %422, label %._crit_edge426.loopexit.unr-lcssa, label %.lr.ph425.preheader.new

.lr.ph425.preheader.new:                          ; preds = %.lr.ph425.preheader
  %unroll_iter738 = and i64 %wide.trip.count547, 2147483646
  br label %.lr.ph425

.lr.ph425:                                        ; preds = %449, %.lr.ph425.preheader.new
  %indvars.iv544 = phi i64 [ 0, %.lr.ph425.preheader.new ], [ %indvars.iv.next545.1, %449 ]
  %.2324422 = phi i32 [ 0, %.lr.ph425.preheader.new ], [ %.3325.1, %449 ]
  %niter739 = phi i64 [ 0, %.lr.ph425.preheader.new ], [ %niter739.next.1, %449 ]
  %423 = getelementptr inbounds i8, ptr %163, i64 %indvars.iv544
  %424 = load i8, ptr %423, align 1, !tbaa !46, !range !52, !noundef !53
  %425 = trunc nuw i8 %424 to i1
  br i1 %425, label %426, label %.lr.ph425.1

426:                                              ; preds = %.lr.ph425
  %427 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv544
  %428 = load ptr, ptr %427, align 8, !tbaa !12
  %429 = sext i32 %.2324422 to i64
  %430 = getelementptr inbounds ptr, ptr %417, i64 %429
  store ptr %428, ptr %430, align 8, !tbaa !12
  %431 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv544
  %432 = load i32, ptr %431, align 4, !tbaa !6
  %433 = add nsw i32 %432, 1
  %434 = add nsw i32 %.2324422, 1
  %435 = getelementptr inbounds i32, ptr %420, i64 %429
  store i32 %433, ptr %435, align 4, !tbaa !6
  br label %.lr.ph425.1

.lr.ph425.1:                                      ; preds = %.lr.ph425, %426
  %.3325 = phi i32 [ %434, %426 ], [ %.2324422, %.lr.ph425 ]
  %indvars.iv.next545 = or disjoint i64 %indvars.iv544, 1
  %436 = getelementptr inbounds i8, ptr %163, i64 %indvars.iv.next545
  %437 = load i8, ptr %436, align 1, !tbaa !46, !range !52, !noundef !53
  %438 = trunc nuw i8 %437 to i1
  br i1 %438, label %439, label %449

439:                                              ; preds = %.lr.ph425.1
  %440 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.next545
  %441 = load ptr, ptr %440, align 8, !tbaa !12
  %442 = sext i32 %.3325 to i64
  %443 = getelementptr inbounds ptr, ptr %417, i64 %442
  store ptr %441, ptr %443, align 8, !tbaa !12
  %444 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv.next545
  %445 = load i32, ptr %444, align 4, !tbaa !6
  %446 = add nsw i32 %445, 1
  %447 = add nsw i32 %.3325, 1
  %448 = getelementptr inbounds i32, ptr %420, i64 %442
  store i32 %446, ptr %448, align 4, !tbaa !6
  br label %449

449:                                              ; preds = %439, %.lr.ph425.1
  %.3325.1 = phi i32 [ %447, %439 ], [ %.3325, %.lr.ph425.1 ]
  %indvars.iv.next545.1 = add nuw nsw i64 %indvars.iv544, 2
  %niter739.next.1 = add i64 %niter739, 2
  %niter739.ncmp.1 = icmp eq i64 %niter739.next.1, %unroll_iter738
  br i1 %niter739.ncmp.1, label %._crit_edge426.loopexit.unr-lcssa.loopexit, label %.lr.ph425, !llvm.loop !70

._crit_edge426.loopexit.unr-lcssa.loopexit:       ; preds = %449
  %450 = sext i32 %.3325.1 to i64
  br label %._crit_edge426.loopexit.unr-lcssa

._crit_edge426.loopexit.unr-lcssa:                ; preds = %._crit_edge426.loopexit.unr-lcssa.loopexit, %.lr.ph425.preheader
  %indvars.iv544.unr = phi i64 [ 0, %.lr.ph425.preheader ], [ %indvars.iv.next545.1, %._crit_edge426.loopexit.unr-lcssa.loopexit ]
  %.2324422.unr = phi i64 [ 0, %.lr.ph425.preheader ], [ %450, %._crit_edge426.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod737.not = icmp eq i64 %xtraiter735, 0
  br i1 %lcmp.mod737.not, label %._crit_edge426, label %.lr.ph425.epil

.lr.ph425.epil:                                   ; preds = %._crit_edge426.loopexit.unr-lcssa
  %451 = getelementptr inbounds i8, ptr %163, i64 %indvars.iv544.unr
  %452 = load i8, ptr %451, align 1, !tbaa !46, !range !52, !noundef !53
  %453 = trunc nuw i8 %452 to i1
  br i1 %453, label %454, label %._crit_edge426

454:                                              ; preds = %.lr.ph425.epil
  %455 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv544.unr
  %456 = load ptr, ptr %455, align 8, !tbaa !12
  %457 = getelementptr inbounds ptr, ptr %417, i64 %.2324422.unr
  store ptr %456, ptr %457, align 8, !tbaa !12
  %458 = getelementptr inbounds i32, ptr %74, i64 %indvars.iv544.unr
  %459 = load i32, ptr %458, align 4, !tbaa !6
  %460 = add nsw i32 %459, 1
  %461 = getelementptr inbounds i32, ptr %420, i64 %.2324422.unr
  store i32 %460, ptr %461, align 4, !tbaa !6
  br label %._crit_edge426

._crit_edge426:                                   ; preds = %._crit_edge426.loopexit.unr-lcssa, %454, %.lr.ph425.epil, %._crit_edge420
  %462 = load i32, ptr %3, align 4, !tbaa !6
  %463 = sext i32 %462 to i64
  %464 = shl nsw i64 %463, 2
  %465 = call noalias ptr @malloc(i64 noundef %464) #8
  store i32 0, ptr %465, align 4, !tbaa !6
  %466 = icmp sgt i32 %462, 1
  br i1 %466, label %.lr.ph429.preheader, label %._crit_edge430

.lr.ph429.preheader:                              ; preds = %._crit_edge426
  %wide.trip.count552 = zext nneg i32 %462 to i64
  %invariant.gep634 = getelementptr i8, ptr %387, i64 -4
  %467 = add nsw i64 %wide.trip.count552, -1
  %468 = add nsw i64 %wide.trip.count552, -2
  %xtraiter740 = and i64 %467, 3
  %469 = icmp ult i64 %468, 3
  br i1 %469, label %._crit_edge430.loopexit.unr-lcssa, label %.lr.ph429.preheader.new

.lr.ph429.preheader.new:                          ; preds = %.lr.ph429.preheader
  %unroll_iter743 = and i64 %467, -4
  %invariant.gep772 = getelementptr inbounds i8, ptr %465, i64 4
  br label %.lr.ph429

.lr.ph429:                                        ; preds = %.lr.ph429, %.lr.ph429.preheader.new
  %470 = phi i32 [ 0, %.lr.ph429.preheader.new ], [ %480, %.lr.ph429 ]
  %indvars.iv549 = phi i64 [ 1, %.lr.ph429.preheader.new ], [ %indvars.iv.next550.3, %.lr.ph429 ]
  %niter744 = phi i64 [ 0, %.lr.ph429.preheader.new ], [ %niter744.next.3, %.lr.ph429 ]
  %gep635 = getelementptr i32, ptr %invariant.gep634, i64 %indvars.iv549
  %471 = load i32, ptr %gep635, align 4, !tbaa !6
  %472 = add nsw i32 %471, %470
  %473 = getelementptr inbounds i32, ptr %465, i64 %indvars.iv549
  store i32 %472, ptr %473, align 4, !tbaa !6
  %gep635.1 = getelementptr i32, ptr %387, i64 %indvars.iv549
  %474 = load i32, ptr %gep635.1, align 4, !tbaa !6
  %475 = add nsw i32 %474, %472
  %gep773 = getelementptr inbounds i32, ptr %invariant.gep772, i64 %indvars.iv549
  store i32 %475, ptr %gep773, align 4, !tbaa !6
  %indvars.iv.next550.1 = add nuw nsw i64 %indvars.iv549, 2
  %gep635.2 = getelementptr i32, ptr %invariant.gep634, i64 %indvars.iv.next550.1
  %476 = load i32, ptr %gep635.2, align 4, !tbaa !6
  %477 = add nsw i32 %476, %475
  %478 = getelementptr inbounds i32, ptr %465, i64 %indvars.iv.next550.1
  store i32 %477, ptr %478, align 4, !tbaa !6
  %indvars.iv.next550.2 = add nuw nsw i64 %indvars.iv549, 3
  %gep635.3 = getelementptr i32, ptr %invariant.gep634, i64 %indvars.iv.next550.2
  %479 = load i32, ptr %gep635.3, align 4, !tbaa !6
  %480 = add nsw i32 %479, %477
  %481 = getelementptr inbounds i32, ptr %465, i64 %indvars.iv.next550.2
  store i32 %480, ptr %481, align 4, !tbaa !6
  %indvars.iv.next550.3 = add nuw nsw i64 %indvars.iv549, 4
  %niter744.next.3 = add i64 %niter744, 4
  %niter744.ncmp.3 = icmp eq i64 %niter744.next.3, %unroll_iter743
  br i1 %niter744.ncmp.3, label %._crit_edge430.loopexit.unr-lcssa, label %.lr.ph429, !llvm.loop !71

._crit_edge430.loopexit.unr-lcssa:                ; preds = %.lr.ph429, %.lr.ph429.preheader
  %.unr = phi i32 [ 0, %.lr.ph429.preheader ], [ %480, %.lr.ph429 ]
  %indvars.iv549.unr = phi i64 [ 1, %.lr.ph429.preheader ], [ %indvars.iv.next550.3, %.lr.ph429 ]
  %lcmp.mod742.not = icmp eq i64 %xtraiter740, 0
  br i1 %lcmp.mod742.not, label %._crit_edge430, label %.lr.ph429.epil

.lr.ph429.epil:                                   ; preds = %._crit_edge430.loopexit.unr-lcssa, %.lr.ph429.epil
  %482 = phi i32 [ %484, %.lr.ph429.epil ], [ %.unr, %._crit_edge430.loopexit.unr-lcssa ]
  %indvars.iv549.epil = phi i64 [ %indvars.iv.next550.epil, %.lr.ph429.epil ], [ %indvars.iv549.unr, %._crit_edge430.loopexit.unr-lcssa ]
  %epil.iter741 = phi i64 [ %epil.iter741.next, %.lr.ph429.epil ], [ 0, %._crit_edge430.loopexit.unr-lcssa ]
  %gep635.epil = getelementptr i32, ptr %invariant.gep634, i64 %indvars.iv549.epil
  %483 = load i32, ptr %gep635.epil, align 4, !tbaa !6
  %484 = add nsw i32 %483, %482
  %485 = getelementptr inbounds i32, ptr %465, i64 %indvars.iv549.epil
  store i32 %484, ptr %485, align 4, !tbaa !6
  %indvars.iv.next550.epil = add nuw nsw i64 %indvars.iv549.epil, 1
  %epil.iter741.next = add i64 %epil.iter741, 1
  %epil.iter741.cmp.not = icmp eq i64 %epil.iter741.next, %xtraiter740
  br i1 %epil.iter741.cmp.not, label %._crit_edge430, label %.lr.ph429.epil, !llvm.loop !72

._crit_edge430:                                   ; preds = %._crit_edge430.loopexit.unr-lcssa, %.lr.ph429.epil, %._crit_edge426
  %486 = add nsw i32 %462, -1
  %487 = sext i32 %486 to i64
  %488 = shl nsw i64 %487, 3
  %489 = call noalias ptr @malloc(i64 noundef %488) #8
  %490 = getelementptr inbounds i8, ptr %8, i64 120
  store ptr %489, ptr %490, align 8, !tbaa !19
  br i1 %466, label %.lr.ph433.preheader, label %.preheader

.lr.ph433.preheader:                              ; preds = %._crit_edge430
  %wide.trip.count557 = zext nneg i32 %486 to i64
  br label %.lr.ph433

.preheader:                                       ; preds = %.lr.ph433, %._crit_edge430
  %491 = icmp sgt i32 %462, 0
  br i1 %491, label %.lr.ph451, label %._crit_edge452

.lr.ph451:                                        ; preds = %.preheader
  %invariant.gep = getelementptr i8, ptr %489, i64 -8
  %492 = load ptr, ptr %5, align 8
  %493 = load ptr, ptr %6, align 8
  %wide.trip.count597 = zext nneg i32 %462 to i64
  br label %498

.lr.ph433:                                        ; preds = %.lr.ph433.preheader, %.lr.ph433
  %indvars.iv554 = phi i64 [ 0, %.lr.ph433.preheader ], [ %indvars.iv.next555, %.lr.ph433 ]
  %494 = call noalias ptr @malloc(i64 noundef %416) #8
  %495 = getelementptr inbounds ptr, ptr %489, i64 %indvars.iv554
  store ptr %494, ptr %495, align 8, !tbaa !12
  %indvars.iv.next555 = add nuw nsw i64 %indvars.iv554, 1
  %exitcond558.not = icmp eq i64 %indvars.iv.next555, %wide.trip.count557
  br i1 %exitcond558.not, label %.preheader, label %.lr.ph433, !llvm.loop !73

.loopexit.loopexit:                               ; preds = %._crit_edge443.us
  %496 = trunc nsw i64 %indvars.iv.next588 to i32
  br label %.loopexit

.loopexit.loopexit468:                            ; preds = %._crit_edge443
  %497 = trunc nsw i64 %indvars.iv.next569 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit468, %.loopexit.loopexit, %498
  %.5327.lcssa = phi i32 [ %.4326449, %498 ], [ %496, %.loopexit.loopexit ], [ %497, %.loopexit.loopexit468 ]
  %indvars.iv.next565 = add nuw nsw i64 %indvars.iv564, 1
  %exitcond598.not = icmp eq i64 %indvars.iv.next595, %wide.trip.count597
  br i1 %exitcond598.not, label %._crit_edge452, label %498, !llvm.loop !74

498:                                              ; preds = %.lr.ph451, %.loopexit
  %indvars.iv594 = phi i64 [ 0, %.lr.ph451 ], [ %indvars.iv.next595, %.loopexit ]
  %indvars.iv564 = phi i64 [ 1, %.lr.ph451 ], [ %indvars.iv.next565, %.loopexit ]
  %.4326449 = phi i32 [ 0, %.lr.ph451 ], [ %.5327.lcssa, %.loopexit ]
  %indvars.iv.next595 = add nuw nsw i64 %indvars.iv594, 1
  %499 = icmp slt i64 %indvars.iv.next595, %463
  br i1 %499, label %.lr.ph447, label %.loopexit

.lr.ph447:                                        ; preds = %498
  %500 = getelementptr inbounds i32, ptr %493, i64 %indvars.iv594
  %501 = load i32, ptr %500, align 4, !tbaa !6
  %502 = getelementptr inbounds i32, ptr %465, i64 %indvars.iv594
  %503 = load i32, ptr %502, align 4, !tbaa !6
  %504 = icmp sgt i32 %501, 0
  %505 = getelementptr inbounds ptr, ptr %489, i64 %indvars.iv594
  br i1 %504, label %.lr.ph437.us.preheader, label %.lr.ph447.split.preheader

.lr.ph447.split.preheader:                        ; preds = %.lr.ph447
  %506 = sext i32 %501 to i64
  %507 = sext i32 %.4326449 to i64
  br label %.lr.ph447.split

.lr.ph437.us.preheader:                           ; preds = %.lr.ph447
  %508 = getelementptr inbounds i32, ptr %492, i64 %indvars.iv594
  %509 = load i32, ptr %508, align 4, !tbaa !6
  %510 = sext i32 %509 to i64
  %511 = zext nneg i32 %501 to i64
  %512 = sext i32 %.4326449 to i64
  %wide.trip.count578 = zext nneg i32 %501 to i64
  %invariant.gep638 = getelementptr i8, ptr %163, i64 %510
  %xtraiter752 = and i64 %wide.trip.count578, 1
  %513 = icmp eq i32 %501, 1
  %unroll_iter755 = and i64 %wide.trip.count578, 2147483646
  %lcmp.mod754.not = icmp eq i64 %xtraiter752, 0
  br label %.lr.ph437.us

.lr.ph437.us:                                     ; preds = %.lr.ph437.us.preheader, %._crit_edge443.us
  %indvars.iv587 = phi i64 [ %512, %.lr.ph437.us.preheader ], [ %indvars.iv.next588, %._crit_edge443.us ]
  %indvars.iv585 = phi i64 [ %indvars.iv564, %.lr.ph437.us.preheader ], [ %indvars.iv.next586, %._crit_edge443.us ]
  %514 = getelementptr inbounds i32, ptr %492, i64 %indvars.iv585
  %515 = load i32, ptr %514, align 4, !tbaa !6
  %516 = getelementptr inbounds i32, ptr %493, i64 %indvars.iv585
  %517 = load i32, ptr %516, align 4, !tbaa !6
  %518 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %indvars.iv587
  %gep.us = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv585
  br i1 %513, label %._crit_edge438.us.unr-lcssa, label %.lr.ph437.us.new

._crit_edge443.us.loopexit.unr-lcssa:             ; preds = %553, %.lr.ph442.us
  %indvars.iv580.unr = phi i64 [ 0, %.lr.ph442.us ], [ %indvars.iv.next581.1, %553 ]
  %.2439.us.unr = phi i32 [ %587, %.lr.ph442.us ], [ %.3.us.1, %553 ]
  %lcmp.mod760.not = icmp eq i64 %xtraiter758, 0
  br i1 %lcmp.mod760.not, label %._crit_edge443.us, label %.epil.preheader757

.epil.preheader757:                               ; preds = %._crit_edge443.us.loopexit.unr-lcssa
  %gep641.epil = getelementptr i8, ptr %invariant.gep640, i64 %indvars.iv580.unr
  %519 = load i8, ptr %gep641.epil, align 1, !tbaa !46, !range !52, !noundef !53
  %520 = trunc nuw i8 %519 to i1
  br i1 %520, label %521, label %._crit_edge443.us

521:                                              ; preds = %.epil.preheader757
  %522 = load ptr, ptr %518, align 8, !tbaa !75
  %523 = getelementptr inbounds double, ptr %522, i64 %indvars.iv580.unr
  %524 = getelementptr inbounds double, ptr %523, i64 %511
  %525 = load double, ptr %524, align 8, !tbaa !10
  %526 = load ptr, ptr %505, align 8, !tbaa !12
  %527 = sext i32 %.2439.us.unr to i64
  %528 = getelementptr inbounds double, ptr %526, i64 %527
  store double %525, ptr %528, align 8, !tbaa !10
  br label %._crit_edge443.us

._crit_edge443.us:                                ; preds = %._crit_edge443.us.loopexit.unr-lcssa, %521, %.epil.preheader757, %._crit_edge438.us
  %indvars.iv.next588 = add nsw i64 %indvars.iv587, 1
  %indvars.iv.next586 = add nuw nsw i64 %indvars.iv585, 1
  %exitcond593.not = icmp eq i64 %indvars.iv.next586, %wide.trip.count597
  br i1 %exitcond593.not, label %.loopexit.loopexit, label %.lr.ph437.us, !llvm.loop !76

529:                                              ; preds = %553, %.lr.ph442.us.new
  %indvars.iv580 = phi i64 [ 0, %.lr.ph442.us.new ], [ %indvars.iv.next581.1, %553 ]
  %.2439.us = phi i32 [ %587, %.lr.ph442.us.new ], [ %.3.us.1, %553 ]
  %niter762 = phi i64 [ 0, %.lr.ph442.us.new ], [ %niter762.next.1, %553 ]
  %gep641 = getelementptr i8, ptr %invariant.gep640, i64 %indvars.iv580
  %530 = load i8, ptr %gep641, align 1, !tbaa !46, !range !52, !noundef !53
  %531 = trunc nuw i8 %530 to i1
  br i1 %531, label %532, label %541

532:                                              ; preds = %529
  %533 = load ptr, ptr %518, align 8, !tbaa !75
  %534 = getelementptr inbounds double, ptr %533, i64 %indvars.iv580
  %535 = getelementptr inbounds double, ptr %534, i64 %511
  %536 = load double, ptr %535, align 8, !tbaa !10
  %537 = load ptr, ptr %505, align 8, !tbaa !12
  %538 = add nsw i32 %.2439.us, 1
  %539 = sext i32 %.2439.us to i64
  %540 = getelementptr inbounds double, ptr %537, i64 %539
  store double %536, ptr %540, align 8, !tbaa !10
  br label %541

541:                                              ; preds = %532, %529
  %.3.us = phi i32 [ %538, %532 ], [ %.2439.us, %529 ]
  %indvars.iv.next581 = or disjoint i64 %indvars.iv580, 1
  %gep641.1 = getelementptr i8, ptr %invariant.gep640, i64 %indvars.iv.next581
  %542 = load i8, ptr %gep641.1, align 1, !tbaa !46, !range !52, !noundef !53
  %543 = trunc nuw i8 %542 to i1
  br i1 %543, label %544, label %553

544:                                              ; preds = %541
  %545 = load ptr, ptr %518, align 8, !tbaa !75
  %546 = getelementptr inbounds double, ptr %545, i64 %indvars.iv.next581
  %547 = getelementptr inbounds double, ptr %546, i64 %511
  %548 = load double, ptr %547, align 8, !tbaa !10
  %549 = load ptr, ptr %505, align 8, !tbaa !12
  %550 = add nsw i32 %.3.us, 1
  %551 = sext i32 %.3.us to i64
  %552 = getelementptr inbounds double, ptr %549, i64 %551
  store double %548, ptr %552, align 8, !tbaa !10
  br label %553

553:                                              ; preds = %544, %541
  %.3.us.1 = phi i32 [ %550, %544 ], [ %.3.us, %541 ]
  %indvars.iv.next581.1 = add nuw nsw i64 %indvars.iv580, 2
  %niter762.next.1 = add i64 %niter762, 2
  %niter762.ncmp.1 = icmp eq i64 %niter762.next.1, %unroll_iter761
  br i1 %niter762.ncmp.1, label %._crit_edge443.us.loopexit.unr-lcssa, label %529, !llvm.loop !77

.lr.ph437.us.new:                                 ; preds = %.lr.ph437.us, %575
  %indvars.iv575 = phi i64 [ %indvars.iv.next576.1, %575 ], [ 0, %.lr.ph437.us ]
  %.0300434.us = phi i32 [ %.1301.us.1, %575 ], [ %503, %.lr.ph437.us ]
  %niter756 = phi i64 [ %niter756.next.1, %575 ], [ 0, %.lr.ph437.us ]
  %gep639 = getelementptr i8, ptr %invariant.gep638, i64 %indvars.iv575
  %554 = load i8, ptr %gep639, align 1, !tbaa !46, !range !52, !noundef !53
  %555 = trunc nuw i8 %554 to i1
  br i1 %555, label %556, label %564

556:                                              ; preds = %.lr.ph437.us.new
  %557 = load ptr, ptr %518, align 8, !tbaa !75
  %558 = getelementptr inbounds double, ptr %557, i64 %indvars.iv575
  %559 = load double, ptr %558, align 8, !tbaa !10
  %560 = load ptr, ptr %gep.us, align 8, !tbaa !12
  %561 = add nsw i32 %.0300434.us, 1
  %562 = sext i32 %.0300434.us to i64
  %563 = getelementptr inbounds double, ptr %560, i64 %562
  store double %559, ptr %563, align 8, !tbaa !10
  br label %564

564:                                              ; preds = %556, %.lr.ph437.us.new
  %.1301.us = phi i32 [ %561, %556 ], [ %.0300434.us, %.lr.ph437.us.new ]
  %indvars.iv.next576 = or disjoint i64 %indvars.iv575, 1
  %gep639.1 = getelementptr i8, ptr %invariant.gep638, i64 %indvars.iv.next576
  %565 = load i8, ptr %gep639.1, align 1, !tbaa !46, !range !52, !noundef !53
  %566 = trunc nuw i8 %565 to i1
  br i1 %566, label %567, label %575

567:                                              ; preds = %564
  %568 = load ptr, ptr %518, align 8, !tbaa !75
  %569 = getelementptr inbounds double, ptr %568, i64 %indvars.iv.next576
  %570 = load double, ptr %569, align 8, !tbaa !10
  %571 = load ptr, ptr %gep.us, align 8, !tbaa !12
  %572 = add nsw i32 %.1301.us, 1
  %573 = sext i32 %.1301.us to i64
  %574 = getelementptr inbounds double, ptr %571, i64 %573
  store double %570, ptr %574, align 8, !tbaa !10
  br label %575

575:                                              ; preds = %567, %564
  %.1301.us.1 = phi i32 [ %572, %567 ], [ %.1301.us, %564 ]
  %indvars.iv.next576.1 = add nuw nsw i64 %indvars.iv575, 2
  %niter756.next.1 = add i64 %niter756, 2
  %niter756.ncmp.1 = icmp eq i64 %niter756.next.1, %unroll_iter755
  br i1 %niter756.ncmp.1, label %._crit_edge438.us.unr-lcssa, label %.lr.ph437.us.new, !llvm.loop !78

._crit_edge438.us.unr-lcssa:                      ; preds = %575, %.lr.ph437.us
  %indvars.iv575.unr = phi i64 [ 0, %.lr.ph437.us ], [ %indvars.iv.next576.1, %575 ]
  %.0300434.us.unr = phi i32 [ %503, %.lr.ph437.us ], [ %.1301.us.1, %575 ]
  br i1 %lcmp.mod754.not, label %._crit_edge438.us, label %.epil.preheader751

.epil.preheader751:                               ; preds = %._crit_edge438.us.unr-lcssa
  %gep639.epil = getelementptr i8, ptr %invariant.gep638, i64 %indvars.iv575.unr
  %576 = load i8, ptr %gep639.epil, align 1, !tbaa !46, !range !52, !noundef !53
  %577 = trunc nuw i8 %576 to i1
  br i1 %577, label %578, label %._crit_edge438.us

578:                                              ; preds = %.epil.preheader751
  %579 = load ptr, ptr %518, align 8, !tbaa !75
  %580 = getelementptr inbounds double, ptr %579, i64 %indvars.iv575.unr
  %581 = load double, ptr %580, align 8, !tbaa !10
  %582 = load ptr, ptr %gep.us, align 8, !tbaa !12
  %583 = sext i32 %.0300434.us.unr to i64
  %584 = getelementptr inbounds double, ptr %582, i64 %583
  store double %581, ptr %584, align 8, !tbaa !10
  br label %._crit_edge438.us

._crit_edge438.us:                                ; preds = %.epil.preheader751, %578, %._crit_edge438.us.unr-lcssa
  %585 = icmp sgt i32 %517, 0
  br i1 %585, label %.lr.ph442.us, label %._crit_edge443.us

.lr.ph442.us:                                     ; preds = %._crit_edge438.us
  %586 = getelementptr inbounds i32, ptr %465, i64 %indvars.iv585
  %587 = load i32, ptr %586, align 4, !tbaa !6
  %588 = sext i32 %515 to i64
  %wide.trip.count583 = zext nneg i32 %517 to i64
  %invariant.gep640 = getelementptr i8, ptr %163, i64 %588
  %xtraiter758 = and i64 %wide.trip.count583, 1
  %589 = icmp eq i32 %517, 1
  br i1 %589, label %._crit_edge443.us.loopexit.unr-lcssa, label %.lr.ph442.us.new

.lr.ph442.us.new:                                 ; preds = %.lr.ph442.us
  %unroll_iter761 = and i64 %wide.trip.count583, 2147483646
  br label %529

.lr.ph447.split:                                  ; preds = %.lr.ph447.split.preheader, %._crit_edge443
  %indvars.iv568 = phi i64 [ %507, %.lr.ph447.split.preheader ], [ %indvars.iv.next569, %._crit_edge443 ]
  %indvars.iv566 = phi i64 [ %indvars.iv564, %.lr.ph447.split.preheader ], [ %indvars.iv.next567, %._crit_edge443 ]
  %590 = getelementptr inbounds i32, ptr %493, i64 %indvars.iv566
  %591 = load i32, ptr %590, align 4, !tbaa !6
  %592 = icmp sgt i32 %591, 0
  br i1 %592, label %.lr.ph442, label %._crit_edge443

.lr.ph442:                                        ; preds = %.lr.ph447.split
  %593 = getelementptr inbounds i32, ptr %492, i64 %indvars.iv566
  %594 = load i32, ptr %593, align 4, !tbaa !6
  %595 = getelementptr inbounds i32, ptr %465, i64 %indvars.iv566
  %596 = load i32, ptr %595, align 4, !tbaa !6
  %597 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %indvars.iv568
  %598 = sext i32 %594 to i64
  %wide.trip.count562 = zext nneg i32 %591 to i64
  %invariant.gep636 = getelementptr i8, ptr %163, i64 %598
  %xtraiter746 = and i64 %wide.trip.count562, 1
  %599 = icmp eq i32 %591, 1
  br i1 %599, label %._crit_edge443.loopexit.unr-lcssa, label %.lr.ph442.new

.lr.ph442.new:                                    ; preds = %.lr.ph442
  %unroll_iter749 = and i64 %wide.trip.count562, 2147483646
  br label %600

600:                                              ; preds = %624, %.lr.ph442.new
  %indvars.iv559 = phi i64 [ 0, %.lr.ph442.new ], [ %indvars.iv.next560.1, %624 ]
  %.2439 = phi i32 [ %596, %.lr.ph442.new ], [ %.3.1, %624 ]
  %niter750 = phi i64 [ 0, %.lr.ph442.new ], [ %niter750.next.1, %624 ]
  %gep637 = getelementptr i8, ptr %invariant.gep636, i64 %indvars.iv559
  %601 = load i8, ptr %gep637, align 1, !tbaa !46, !range !52, !noundef !53
  %602 = trunc nuw i8 %601 to i1
  br i1 %602, label %603, label %612

603:                                              ; preds = %600
  %604 = load ptr, ptr %597, align 8, !tbaa !75
  %605 = getelementptr double, ptr %604, i64 %indvars.iv559
  %606 = getelementptr double, ptr %605, i64 %506
  %607 = load double, ptr %606, align 8, !tbaa !10
  %608 = load ptr, ptr %505, align 8, !tbaa !12
  %609 = add nsw i32 %.2439, 1
  %610 = sext i32 %.2439 to i64
  %611 = getelementptr inbounds double, ptr %608, i64 %610
  store double %607, ptr %611, align 8, !tbaa !10
  br label %612

612:                                              ; preds = %600, %603
  %.3 = phi i32 [ %609, %603 ], [ %.2439, %600 ]
  %indvars.iv.next560 = or disjoint i64 %indvars.iv559, 1
  %gep637.1 = getelementptr i8, ptr %invariant.gep636, i64 %indvars.iv.next560
  %613 = load i8, ptr %gep637.1, align 1, !tbaa !46, !range !52, !noundef !53
  %614 = trunc nuw i8 %613 to i1
  br i1 %614, label %615, label %624

615:                                              ; preds = %612
  %616 = load ptr, ptr %597, align 8, !tbaa !75
  %617 = getelementptr double, ptr %616, i64 %indvars.iv.next560
  %618 = getelementptr double, ptr %617, i64 %506
  %619 = load double, ptr %618, align 8, !tbaa !10
  %620 = load ptr, ptr %505, align 8, !tbaa !12
  %621 = add nsw i32 %.3, 1
  %622 = sext i32 %.3 to i64
  %623 = getelementptr inbounds double, ptr %620, i64 %622
  store double %619, ptr %623, align 8, !tbaa !10
  br label %624

624:                                              ; preds = %615, %612
  %.3.1 = phi i32 [ %621, %615 ], [ %.3, %612 ]
  %indvars.iv.next560.1 = add nuw nsw i64 %indvars.iv559, 2
  %niter750.next.1 = add i64 %niter750, 2
  %niter750.ncmp.1 = icmp eq i64 %niter750.next.1, %unroll_iter749
  br i1 %niter750.ncmp.1, label %._crit_edge443.loopexit.unr-lcssa, label %600, !llvm.loop !77

._crit_edge443.loopexit.unr-lcssa:                ; preds = %624, %.lr.ph442
  %indvars.iv559.unr = phi i64 [ 0, %.lr.ph442 ], [ %indvars.iv.next560.1, %624 ]
  %.2439.unr = phi i32 [ %596, %.lr.ph442 ], [ %.3.1, %624 ]
  %lcmp.mod748.not = icmp eq i64 %xtraiter746, 0
  br i1 %lcmp.mod748.not, label %._crit_edge443, label %.epil.preheader745

.epil.preheader745:                               ; preds = %._crit_edge443.loopexit.unr-lcssa
  %gep637.epil = getelementptr i8, ptr %invariant.gep636, i64 %indvars.iv559.unr
  %625 = load i8, ptr %gep637.epil, align 1, !tbaa !46, !range !52, !noundef !53
  %626 = trunc nuw i8 %625 to i1
  br i1 %626, label %627, label %._crit_edge443

627:                                              ; preds = %.epil.preheader745
  %628 = load ptr, ptr %597, align 8, !tbaa !75
  %629 = getelementptr double, ptr %628, i64 %indvars.iv559.unr
  %630 = getelementptr double, ptr %629, i64 %506
  %631 = load double, ptr %630, align 8, !tbaa !10
  %632 = load ptr, ptr %505, align 8, !tbaa !12
  %633 = sext i32 %.2439.unr to i64
  %634 = getelementptr inbounds double, ptr %632, i64 %633
  store double %631, ptr %634, align 8, !tbaa !10
  br label %._crit_edge443

._crit_edge443:                                   ; preds = %._crit_edge443.loopexit.unr-lcssa, %627, %.epil.preheader745, %.lr.ph447.split
  %indvars.iv.next569 = add nsw i64 %indvars.iv568, 1
  %indvars.iv.next567 = add nuw nsw i64 %indvars.iv566, 1
  %exitcond574.not = icmp eq i64 %indvars.iv.next567, %wide.trip.count597
  br i1 %exitcond574.not, label %.loopexit.loopexit468, label %.lr.ph447.split, !llvm.loop !76

._crit_edge452:                                   ; preds = %.loopexit, %.preheader
  %635 = load ptr, ptr %4, align 8, !tbaa !12
  call void @free(ptr noundef %635) #9
  call void @free(ptr noundef %.0317) #9
  call void @free(ptr noundef %.0321) #9
  %636 = load ptr, ptr %6, align 8, !tbaa !12
  call void @free(ptr noundef %636) #9
  call void @free(ptr noundef %74) #9
  %637 = load ptr, ptr %5, align 8, !tbaa !12
  call void @free(ptr noundef %637) #9
  call void @free(ptr noundef %80) #9
  call void @free(ptr noundef %119) #9
  call void @free(ptr noundef %163) #9
  %638 = load i32, ptr %3, align 4, !tbaa !6
  %639 = add nsw i32 %638, -1
  %640 = mul nsw i32 %639, %638
  %641 = icmp sgt i32 %640, 1
  br i1 %641, label %.lr.ph455, label %._crit_edge456

.lr.ph455:                                        ; preds = %._crit_edge452, %.lr.ph455
  %indvars.iv599 = phi i64 [ %indvars.iv.next600, %.lr.ph455 ], [ 0, %._crit_edge452 ]
  %642 = getelementptr inbounds %struct.decision_function, ptr %171, i64 %indvars.iv599
  %643 = load ptr, ptr %642, align 8, !tbaa !75
  call void @free(ptr noundef %643) #9
  %indvars.iv.next600 = add nuw nsw i64 %indvars.iv599, 1
  %644 = load i32, ptr %3, align 4, !tbaa !6
  %645 = add nsw i32 %644, -1
  %646 = mul nsw i32 %645, %644
  %647 = sdiv i32 %646, 2
  %648 = sext i32 %647 to i64
  %649 = icmp slt i64 %indvars.iv.next600, %648
  br i1 %649, label %.lr.ph455, label %._crit_edge456, !llvm.loop !79

._crit_edge456:                                   ; preds = %.lr.ph455, %._crit_edge452
  call void @free(ptr noundef %171) #9
  call void @free(ptr noundef %387) #9
  call void @free(ptr noundef %465) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #9
  br label %650

650:                                              ; preds = %._crit_edge456, %._crit_edge467
  ret ptr %8
}

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

; Function Attrs: mustprogress uwtable
declare hidden noundef double @_ZL19svm_svr_probabilityPK11svm_problemPK13svm_parameter(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden { ptr, double } @_ZL13svm_train_onePK11svm_problemPK13svm_parameterdd(ptr noundef, ptr noundef, double noundef, double noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL17svm_group_classesPK11svm_problemPiPS2_S3_S3_S2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL26svm_binary_svc_probabilityPK11svm_problemPK13svm_parameterddRdS5_(ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v2i32(<2 x i32>) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree 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 nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind allocsize(0) }
attributes #9 = { nounwind }
attributes #10 = { cold 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 = !{i64 0, i64 4, !6, i64 4, i64 4, !6, i64 8, i64 4, !6, i64 16, i64 8, !10, i64 24, i64 8, !10, i64 32, i64 8, !10, i64 40, i64 8, !10, i64 48, i64 8, !10, i64 56, i64 4, !6, i64 64, i64 8, !12, i64 72, i64 8, !12, i64 80, i64 8, !10, i64 88, i64 8, !10, i64 96, i64 4, !6, i64 100, i64 4, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!15, !7, i64 176}
!15 = !{!"_ZTS9svm_model", !16, i64 0, !7, i64 104, !7, i64 108, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !7, i64 176}
!16 = !{!"_ZTS13svm_parameter", !7, i64 0, !7, i64 4, !7, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !7, i64 56, !13, i64 64, !13, i64 72, !11, i64 80, !11, i64 88, !7, i64 96, !7, i64 100}
!17 = !{!16, !7, i64 0}
!18 = !{!15, !7, i64 104}
!19 = !{!15, !13, i64 120}
!20 = !{!16, !7, i64 100}
!21 = !{!15, !13, i64 136}
!22 = !{!15, !13, i64 128}
!23 = !{!24, !7, i64 0}
!24 = !{!"_ZTS11svm_problem", !7, i64 0, !13, i64 8, !13, i64 16}
!25 = distinct !{!25, !26, !27, !28}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !26, !28, !27}
!30 = !{!15, !7, i64 108}
!31 = !{!15, !13, i64 112}
!32 = !{!15, !13, i64 152}
!33 = !{!24, !13, i64 16}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.unroll.disable"}
!38 = !{!16, !11, i64 48}
!39 = distinct !{!39, !26, !27, !28}
!40 = !{!16, !7, i64 56}
!41 = distinct !{!41, !26, !28, !27}
!42 = !{!16, !13, i64 64}
!43 = distinct !{!43, !26}
!44 = !{!16, !13, i64 72}
!45 = distinct !{!45, !26}
!46 = !{!47, !47, i64 0}
!47 = !{!"bool", !8, i64 0}
!48 = distinct !{!48, !26}
!49 = !{!24, !13, i64 8}
!50 = distinct !{!50, !26}
!51 = distinct !{!51, !26}
!52 = !{i8 0, i8 2}
!53 = !{}
!54 = distinct !{!54, !26}
!55 = distinct !{!55, !26}
!56 = distinct !{!56, !26}
!57 = !{!15, !13, i64 160}
!58 = distinct !{!58, !26, !27, !28}
!59 = distinct !{!59, !37}
!60 = distinct !{!60, !26, !27}
!61 = !{!62, !11, i64 8}
!62 = !{!"_ZTS17decision_function", !13, i64 0, !11, i64 8}
!63 = distinct !{!63, !26, !27, !28}
!64 = distinct !{!64, !26, !28, !27}
!65 = !{!15, !13, i64 144}
!66 = !{!15, !13, i64 168}
!67 = distinct !{!67, !26, !27, !28}
!68 = distinct !{!68, !26}
!69 = distinct !{!69, !26, !28, !27}
!70 = distinct !{!70, !26}
!71 = distinct !{!71, !26}
!72 = distinct !{!72, !37}
!73 = distinct !{!73, !26}
!74 = distinct !{!74, !26}
!75 = !{!62, !13, i64 0}
!76 = distinct !{!76, !26}
!77 = distinct !{!77, !26}
!78 = distinct !{!78, !26}
!79 = distinct !{!79, !26}


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