; 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.svm_problem = type { i32, ptr, ptr }
%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.8 = external hidden unnamed_addr constant [101 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: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local ptr @svm_train(ptr noundef, ptr noundef) #3

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

; 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) #3

; Function Attrs: mustprogress uwtable
define dso_local void @svm_cross_validation(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr noundef %3) #3 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca %struct.svm_problem, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.svm_problem, ptr %32, i32 0, i32 0
  %34 = load i32, ptr %33, align 8, !tbaa !11
  store i32 %34, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %35 = load i32, ptr %11, align 4, !tbaa !9
  %36 = sext i32 %35 to i64
  %37 = mul i64 %36, 4
  %38 = call noalias ptr @malloc(i64 noundef %37) #7
  store ptr %38, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %39 = load i32, ptr %7, align 4, !tbaa !9
  %40 = load i32, ptr %11, align 4, !tbaa !9
  %41 = icmp sgt i32 %39, %40
  br i1 %41, label %42, label %46

42:                                               ; preds = %4
  %43 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %43, ptr %7, align 4, !tbaa !9
  %44 = load ptr, ptr @stderr, align 8, !tbaa !5
  %45 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %44, ptr noundef @.str.8) #6
  br label %46

46:                                               ; preds = %42, %4
  %47 = load i32, ptr %7, align 4, !tbaa !9
  %48 = add nsw i32 %47, 1
  %49 = sext i32 %48 to i64
  %50 = mul i64 %49, 4
  %51 = call noalias ptr @malloc(i64 noundef %50) #7
  store ptr %51, ptr %10, align 8, !tbaa !5
  %52 = load ptr, ptr %6, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.svm_parameter, ptr %52, i32 0, i32 0
  %54 = load i32, ptr %53, align 8, !tbaa !13
  %55 = icmp eq i32 %54, 0
  br i1 %55, label %61, label %56

56:                                               ; preds = %46
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.svm_parameter, ptr %57, i32 0, i32 0
  %59 = load i32, ptr %58, align 8, !tbaa !13
  %60 = icmp eq i32 %59, 1
  br i1 %60, label %61, label %335

61:                                               ; preds = %56, %46
  %62 = load i32, ptr %7, align 4, !tbaa !9
  %63 = load i32, ptr %11, align 4, !tbaa !9
  %64 = icmp slt i32 %62, %63
  br i1 %64, label %65, label %335

65:                                               ; preds = %61
  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
  store ptr null, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  store ptr null, ptr %16, align 8, !tbaa !5
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZL17svm_group_classesPK11svm_problemPiPS2_S3_S3_S2_(ptr noundef %66, ptr noundef %13, ptr noundef %15, ptr noundef %14, ptr noundef %16, ptr noundef %67)
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %68 = load i32, ptr %7, align 4, !tbaa !9
  %69 = sext i32 %68 to i64
  %70 = mul i64 %69, 4
  %71 = call noalias ptr @malloc(i64 noundef %70) #7
  store ptr %71, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %72 = load i32, ptr %11, align 4, !tbaa !9
  %73 = sext i32 %72 to i64
  %74 = mul i64 %73, 4
  %75 = call noalias ptr @malloc(i64 noundef %74) #7
  store ptr %75, ptr %19, align 8, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %76

76:                                               ; preds = %90, %65
  %77 = load i32, ptr %9, align 4, !tbaa !9
  %78 = load i32, ptr %11, align 4, !tbaa !9
  %79 = icmp slt i32 %77, %78
  br i1 %79, label %80, label %93

80:                                               ; preds = %76
  %81 = load ptr, ptr %12, align 8, !tbaa !5
  %82 = load i32, ptr %9, align 4, !tbaa !9
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds i32, ptr %81, i64 %83
  %85 = load i32, ptr %84, align 4, !tbaa !9
  %86 = load ptr, ptr %19, align 8, !tbaa !5
  %87 = load i32, ptr %9, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds i32, ptr %86, i64 %88
  store i32 %85, ptr %89, align 4, !tbaa !9
  br label %90

90:                                               ; preds = %80
  %91 = load i32, ptr %9, align 4, !tbaa !9
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr %9, align 4, !tbaa !9
  br label %76, !llvm.loop !16

93:                                               ; preds = %76
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %94

94:                                               ; preds = %143, %93
  %95 = load i32, ptr %18, align 4, !tbaa !9
  %96 = load i32, ptr %13, align 4, !tbaa !9
  %97 = icmp slt i32 %95, %96
  br i1 %97, label %98, label %146

98:                                               ; preds = %94
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %139, %98
  %100 = load i32, ptr %9, align 4, !tbaa !9
  %101 = load ptr, ptr %16, align 8, !tbaa !5
  %102 = load i32, ptr %18, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %101, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !9
  %106 = icmp slt i32 %100, %105
  br i1 %106, label %107, label %142

107:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = call i32 @rand() #6
  %110 = load ptr, ptr %16, align 8, !tbaa !5
  %111 = load i32, ptr %18, align 4, !tbaa !9
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds i32, ptr %110, i64 %112
  %114 = load i32, ptr %113, align 4, !tbaa !9
  %115 = load i32, ptr %9, align 4, !tbaa !9
  %116 = sub nsw i32 %114, %115
  %117 = srem i32 %109, %116
  %118 = add nsw i32 %108, %117
  store i32 %118, ptr %20, align 4, !tbaa !9
  %119 = load ptr, ptr %19, align 8, !tbaa !5
  %120 = load ptr, ptr %14, align 8, !tbaa !5
  %121 = load i32, ptr %18, align 4, !tbaa !9
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i32, ptr %120, i64 %122
  %124 = load i32, ptr %123, align 4, !tbaa !9
  %125 = load i32, ptr %20, align 4, !tbaa !9
  %126 = add nsw i32 %124, %125
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds i32, ptr %119, i64 %127
  %129 = load ptr, ptr %19, align 8, !tbaa !5
  %130 = load ptr, ptr %14, align 8, !tbaa !5
  %131 = load i32, ptr %18, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i32, ptr %130, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = load i32, ptr %9, align 4, !tbaa !9
  %136 = add nsw i32 %134, %135
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds i32, ptr %129, i64 %137
  call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %128, ptr noundef nonnull align 4 dereferenceable(4) %138)
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %139

139:                                              ; preds = %107
  %140 = load i32, ptr %9, align 4, !tbaa !9
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %9, align 4, !tbaa !9
  br label %99, !llvm.loop !18

142:                                              ; preds = %99
  br label %143

143:                                              ; preds = %142
  %144 = load i32, ptr %18, align 4, !tbaa !9
  %145 = add nsw i32 %144, 1
  store i32 %145, ptr %18, align 4, !tbaa !9
  br label %94, !llvm.loop !19

146:                                              ; preds = %94
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %191, %146
  %148 = load i32, ptr %9, align 4, !tbaa !9
  %149 = load i32, ptr %7, align 4, !tbaa !9
  %150 = icmp slt i32 %148, %149
  br i1 %150, label %151, label %194

151:                                              ; preds = %147
  %152 = load ptr, ptr %17, align 8, !tbaa !5
  %153 = load i32, ptr %9, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds i32, ptr %152, i64 %154
  store i32 0, ptr %155, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %156

156:                                              ; preds = %187, %151
  %157 = load i32, ptr %18, align 4, !tbaa !9
  %158 = load i32, ptr %13, align 4, !tbaa !9
  %159 = icmp slt i32 %157, %158
  br i1 %159, label %160, label %190

160:                                              ; preds = %156
  %161 = load i32, ptr %9, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  %163 = load ptr, ptr %16, align 8, !tbaa !5
  %164 = load i32, ptr %18, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds i32, ptr %163, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = mul nsw i32 %162, %167
  %169 = load i32, ptr %7, align 4, !tbaa !9
  %170 = sdiv i32 %168, %169
  %171 = load i32, ptr %9, align 4, !tbaa !9
  %172 = load ptr, ptr %16, align 8, !tbaa !5
  %173 = load i32, ptr %18, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i32, ptr %172, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !9
  %177 = mul nsw i32 %171, %176
  %178 = load i32, ptr %7, align 4, !tbaa !9
  %179 = sdiv i32 %177, %178
  %180 = sub nsw i32 %170, %179
  %181 = load ptr, ptr %17, align 8, !tbaa !5
  %182 = load i32, ptr %9, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %181, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !9
  %186 = add nsw i32 %185, %180
  store i32 %186, ptr %184, align 4, !tbaa !9
  br label %187

187:                                              ; preds = %160
  %188 = load i32, ptr %18, align 4, !tbaa !9
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %18, align 4, !tbaa !9
  br label %156, !llvm.loop !20

190:                                              ; preds = %156
  br label %191

191:                                              ; preds = %190
  %192 = load i32, ptr %9, align 4, !tbaa !9
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %9, align 4, !tbaa !9
  br label %147, !llvm.loop !21

194:                                              ; preds = %147
  %195 = load ptr, ptr %10, align 8, !tbaa !5
  %196 = getelementptr inbounds i32, ptr %195, i64 0
  store i32 0, ptr %196, align 4, !tbaa !9
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %219, %194
  %198 = load i32, ptr %9, align 4, !tbaa !9
  %199 = load i32, ptr %7, align 4, !tbaa !9
  %200 = icmp sle i32 %198, %199
  br i1 %200, label %201, label %222

201:                                              ; preds = %197
  %202 = load ptr, ptr %10, align 8, !tbaa !5
  %203 = load i32, ptr %9, align 4, !tbaa !9
  %204 = sub nsw i32 %203, 1
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds i32, ptr %202, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !9
  %208 = load ptr, ptr %17, align 8, !tbaa !5
  %209 = load i32, ptr %9, align 4, !tbaa !9
  %210 = sub nsw i32 %209, 1
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds i32, ptr %208, i64 %211
  %213 = load i32, ptr %212, align 4, !tbaa !9
  %214 = add nsw i32 %207, %213
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = load i32, ptr %9, align 4, !tbaa !9
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %215, i64 %217
  store i32 %214, ptr %218, align 4, !tbaa !9
  br label %219

219:                                              ; preds = %201
  %220 = load i32, ptr %9, align 4, !tbaa !9
  %221 = add nsw i32 %220, 1
  store i32 %221, ptr %9, align 4, !tbaa !9
  br label %197, !llvm.loop !22

222:                                              ; preds = %197
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %223

223:                                              ; preds = %298, %222
  %224 = load i32, ptr %18, align 4, !tbaa !9
  %225 = load i32, ptr %13, align 4, !tbaa !9
  %226 = icmp slt i32 %224, %225
  br i1 %226, label %227, label %301

227:                                              ; preds = %223
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %294, %227
  %229 = load i32, ptr %9, align 4, !tbaa !9
  %230 = load i32, ptr %7, align 4, !tbaa !9
  %231 = icmp slt i32 %229, %230
  br i1 %231, label %232, label %297

232:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %233 = load ptr, ptr %14, align 8, !tbaa !5
  %234 = load i32, ptr %18, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i32, ptr %233, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = load i32, ptr %9, align 4, !tbaa !9
  %239 = load ptr, ptr %16, align 8, !tbaa !5
  %240 = load i32, ptr %18, align 4, !tbaa !9
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds i32, ptr %239, i64 %241
  %243 = load i32, ptr %242, align 4, !tbaa !9
  %244 = mul nsw i32 %238, %243
  %245 = load i32, ptr %7, align 4, !tbaa !9
  %246 = sdiv i32 %244, %245
  %247 = add nsw i32 %237, %246
  store i32 %247, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %248 = load ptr, ptr %14, align 8, !tbaa !5
  %249 = load i32, ptr %18, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i32, ptr %248, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !9
  %253 = load i32, ptr %9, align 4, !tbaa !9
  %254 = add nsw i32 %253, 1
  %255 = load ptr, ptr %16, align 8, !tbaa !5
  %256 = load i32, ptr %18, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %255, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = mul nsw i32 %254, %259
  %261 = load i32, ptr %7, align 4, !tbaa !9
  %262 = sdiv i32 %260, %261
  %263 = add nsw i32 %252, %262
  store i32 %263, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %264 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %264, ptr %23, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %290, %232
  %266 = load i32, ptr %23, align 4, !tbaa !9
  %267 = load i32, ptr %22, align 4, !tbaa !9
  %268 = icmp slt i32 %266, %267
  br i1 %268, label %270, label %269

269:                                              ; preds = %265
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %293

270:                                              ; preds = %265
  %271 = load ptr, ptr %19, align 8, !tbaa !5
  %272 = load i32, ptr %23, align 4, !tbaa !9
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i32, ptr %271, i64 %273
  %275 = load i32, ptr %274, align 4, !tbaa !9
  %276 = load ptr, ptr %12, align 8, !tbaa !5
  %277 = load ptr, ptr %10, align 8, !tbaa !5
  %278 = load i32, ptr %9, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i32, ptr %277, i64 %279
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds i32, ptr %276, i64 %282
  store i32 %275, ptr %283, align 4, !tbaa !9
  %284 = load ptr, ptr %10, align 8, !tbaa !5
  %285 = load i32, ptr %9, align 4, !tbaa !9
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i32, ptr %284, i64 %286
  %288 = load i32, ptr %287, align 4, !tbaa !9
  %289 = add nsw i32 %288, 1
  store i32 %289, ptr %287, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %270
  %291 = load i32, ptr %23, align 4, !tbaa !9
  %292 = add nsw i32 %291, 1
  store i32 %292, ptr %23, align 4, !tbaa !9
  br label %265, !llvm.loop !23

293:                                              ; preds = %269
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  br label %294

294:                                              ; preds = %293
  %295 = load i32, ptr %9, align 4, !tbaa !9
  %296 = add nsw i32 %295, 1
  store i32 %296, ptr %9, align 4, !tbaa !9
  br label %228, !llvm.loop !24

297:                                              ; preds = %228
  br label %298

298:                                              ; preds = %297
  %299 = load i32, ptr %18, align 4, !tbaa !9
  %300 = add nsw i32 %299, 1
  store i32 %300, ptr %18, align 4, !tbaa !9
  br label %223, !llvm.loop !25

301:                                              ; preds = %223
  %302 = load ptr, ptr %10, align 8, !tbaa !5
  %303 = getelementptr inbounds i32, ptr %302, i64 0
  store i32 0, ptr %303, align 4, !tbaa !9
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %304

304:                                              ; preds = %326, %301
  %305 = load i32, ptr %9, align 4, !tbaa !9
  %306 = load i32, ptr %7, align 4, !tbaa !9
  %307 = icmp sle i32 %305, %306
  br i1 %307, label %308, label %329

308:                                              ; preds = %304
  %309 = load ptr, ptr %10, align 8, !tbaa !5
  %310 = load i32, ptr %9, align 4, !tbaa !9
  %311 = sub nsw i32 %310, 1
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds i32, ptr %309, i64 %312
  %314 = load i32, ptr %313, align 4, !tbaa !9
  %315 = load ptr, ptr %17, align 8, !tbaa !5
  %316 = load i32, ptr %9, align 4, !tbaa !9
  %317 = sub nsw i32 %316, 1
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds i32, ptr %315, i64 %318
  %320 = load i32, ptr %319, align 4, !tbaa !9
  %321 = add nsw i32 %314, %320
  %322 = load ptr, ptr %10, align 8, !tbaa !5
  %323 = load i32, ptr %9, align 4, !tbaa !9
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i32, ptr %322, i64 %324
  store i32 %321, ptr %325, align 4, !tbaa !9
  br label %326

326:                                              ; preds = %308
  %327 = load i32, ptr %9, align 4, !tbaa !9
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %9, align 4, !tbaa !9
  br label %304, !llvm.loop !26

329:                                              ; preds = %304
  %330 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %330) #6
  %331 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %331) #6
  %332 = load ptr, ptr %16, align 8, !tbaa !5
  call void @free(ptr noundef %332) #6
  %333 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %333) #6
  %334 = load ptr, ptr %17, align 8, !tbaa !5
  call void @free(ptr noundef %334) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, 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
  br label %392

335:                                              ; preds = %61, %56
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %336

336:                                              ; preds = %346, %335
  %337 = load i32, ptr %9, align 4, !tbaa !9
  %338 = load i32, ptr %11, align 4, !tbaa !9
  %339 = icmp slt i32 %337, %338
  br i1 %339, label %340, label %349

340:                                              ; preds = %336
  %341 = load i32, ptr %9, align 4, !tbaa !9
  %342 = load ptr, ptr %12, align 8, !tbaa !5
  %343 = load i32, ptr %9, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i32, ptr %342, i64 %344
  store i32 %341, ptr %345, align 4, !tbaa !9
  br label %346

346:                                              ; preds = %340
  %347 = load i32, ptr %9, align 4, !tbaa !9
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %9, align 4, !tbaa !9
  br label %336, !llvm.loop !27

349:                                              ; preds = %336
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %350

350:                                              ; preds = %370, %349
  %351 = load i32, ptr %9, align 4, !tbaa !9
  %352 = load i32, ptr %11, align 4, !tbaa !9
  %353 = icmp slt i32 %351, %352
  br i1 %353, label %354, label %373

354:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %355 = load i32, ptr %9, align 4, !tbaa !9
  %356 = call i32 @rand() #6
  %357 = load i32, ptr %11, align 4, !tbaa !9
  %358 = load i32, ptr %9, align 4, !tbaa !9
  %359 = sub nsw i32 %357, %358
  %360 = srem i32 %356, %359
  %361 = add nsw i32 %355, %360
  store i32 %361, ptr %24, align 4, !tbaa !9
  %362 = load ptr, ptr %12, align 8, !tbaa !5
  %363 = load i32, ptr %9, align 4, !tbaa !9
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds i32, ptr %362, i64 %364
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = load i32, ptr %24, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %366, i64 %368
  call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %365, ptr noundef nonnull align 4 dereferenceable(4) %369)
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %370

370:                                              ; preds = %354
  %371 = load i32, ptr %9, align 4, !tbaa !9
  %372 = add nsw i32 %371, 1
  store i32 %372, ptr %9, align 4, !tbaa !9
  br label %350, !llvm.loop !28

373:                                              ; preds = %350
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %374

374:                                              ; preds = %388, %373
  %375 = load i32, ptr %9, align 4, !tbaa !9
  %376 = load i32, ptr %7, align 4, !tbaa !9
  %377 = icmp sle i32 %375, %376
  br i1 %377, label %378, label %391

378:                                              ; preds = %374
  %379 = load i32, ptr %9, align 4, !tbaa !9
  %380 = load i32, ptr %11, align 4, !tbaa !9
  %381 = mul nsw i32 %379, %380
  %382 = load i32, ptr %7, align 4, !tbaa !9
  %383 = sdiv i32 %381, %382
  %384 = load ptr, ptr %10, align 8, !tbaa !5
  %385 = load i32, ptr %9, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %384, i64 %386
  store i32 %383, ptr %387, align 4, !tbaa !9
  br label %388

388:                                              ; preds = %378
  %389 = load i32, ptr %9, align 4, !tbaa !9
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %9, align 4, !tbaa !9
  br label %374, !llvm.loop !29

391:                                              ; preds = %374
  br label %392

392:                                              ; preds = %391, %329
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %393

393:                                              ; preds = %606, %392
  %394 = load i32, ptr %9, align 4, !tbaa !9
  %395 = load i32, ptr %7, align 4, !tbaa !9
  %396 = icmp slt i32 %394, %395
  br i1 %396, label %397, label %609

397:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %398 = load ptr, ptr %10, align 8, !tbaa !5
  %399 = load i32, ptr %9, align 4, !tbaa !9
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds i32, ptr %398, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !9
  store i32 %402, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %403 = load ptr, ptr %10, align 8, !tbaa !5
  %404 = load i32, ptr %9, align 4, !tbaa !9
  %405 = add nsw i32 %404, 1
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds i32, ptr %403, i64 %406
  %408 = load i32, ptr %407, align 4, !tbaa !9
  store i32 %408, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #6
  %409 = load i32, ptr %11, align 4, !tbaa !9
  %410 = load i32, ptr %26, align 4, !tbaa !9
  %411 = load i32, ptr %25, align 4, !tbaa !9
  %412 = sub nsw i32 %410, %411
  %413 = sub nsw i32 %409, %412
  %414 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 0
  store i32 %413, ptr %414, align 8, !tbaa !11
  %415 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 0
  %416 = load i32, ptr %415, align 8, !tbaa !11
  %417 = sext i32 %416 to i64
  %418 = mul i64 %417, 8
  %419 = call noalias ptr @malloc(i64 noundef %418) #7
  %420 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 2
  store ptr %419, ptr %420, align 8, !tbaa !30
  %421 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 0
  %422 = load i32, ptr %421, align 8, !tbaa !11
  %423 = sext i32 %422 to i64
  %424 = mul i64 %423, 8
  %425 = call noalias ptr @malloc(i64 noundef %424) #7
  %426 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 1
  store ptr %425, ptr %426, align 8, !tbaa !31
  store i32 0, ptr %28, align 4, !tbaa !9
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %427

427:                                              ; preds = %466, %397
  %428 = load i32, ptr %27, align 4, !tbaa !9
  %429 = load i32, ptr %25, align 4, !tbaa !9
  %430 = icmp slt i32 %428, %429
  br i1 %430, label %431, label %469

431:                                              ; preds = %427
  %432 = load ptr, ptr %5, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.svm_problem, ptr %432, i32 0, i32 2
  %434 = load ptr, ptr %433, align 8, !tbaa !30
  %435 = load ptr, ptr %12, align 8, !tbaa !5
  %436 = load i32, ptr %27, align 4, !tbaa !9
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds i32, ptr %435, i64 %437
  %439 = load i32, ptr %438, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds ptr, ptr %434, i64 %440
  %442 = load ptr, ptr %441, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 2
  %444 = load ptr, ptr %443, align 8, !tbaa !30
  %445 = load i32, ptr %28, align 4, !tbaa !9
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds ptr, ptr %444, i64 %446
  store ptr %442, ptr %447, align 8, !tbaa !5
  %448 = load ptr, ptr %5, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.svm_problem, ptr %448, i32 0, i32 1
  %450 = load ptr, ptr %449, align 8, !tbaa !31
  %451 = load ptr, ptr %12, align 8, !tbaa !5
  %452 = load i32, ptr %27, align 4, !tbaa !9
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds i32, ptr %451, i64 %453
  %455 = load i32, ptr %454, align 4, !tbaa !9
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %450, i64 %456
  %458 = load double, ptr %457, align 8, !tbaa !32
  %459 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 1
  %460 = load ptr, ptr %459, align 8, !tbaa !31
  %461 = load i32, ptr %28, align 4, !tbaa !9
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds double, ptr %460, i64 %462
  store double %458, ptr %463, align 8, !tbaa !32
  %464 = load i32, ptr %28, align 4, !tbaa !9
  %465 = add nsw i32 %464, 1
  store i32 %465, ptr %28, align 4, !tbaa !9
  br label %466

466:                                              ; preds = %431
  %467 = load i32, ptr %27, align 4, !tbaa !9
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %27, align 4, !tbaa !9
  br label %427, !llvm.loop !33

469:                                              ; preds = %427
  %470 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %470, ptr %27, align 4, !tbaa !9
  br label %471

471:                                              ; preds = %510, %469
  %472 = load i32, ptr %27, align 4, !tbaa !9
  %473 = load i32, ptr %11, align 4, !tbaa !9
  %474 = icmp slt i32 %472, %473
  br i1 %474, label %475, label %513

475:                                              ; preds = %471
  %476 = load ptr, ptr %5, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.svm_problem, ptr %476, i32 0, i32 2
  %478 = load ptr, ptr %477, align 8, !tbaa !30
  %479 = load ptr, ptr %12, align 8, !tbaa !5
  %480 = load i32, ptr %27, align 4, !tbaa !9
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds i32, ptr %479, i64 %481
  %483 = load i32, ptr %482, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds ptr, ptr %478, i64 %484
  %486 = load ptr, ptr %485, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 2
  %488 = load ptr, ptr %487, align 8, !tbaa !30
  %489 = load i32, ptr %28, align 4, !tbaa !9
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds ptr, ptr %488, i64 %490
  store ptr %486, ptr %491, align 8, !tbaa !5
  %492 = load ptr, ptr %5, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.svm_problem, ptr %492, i32 0, i32 1
  %494 = load ptr, ptr %493, align 8, !tbaa !31
  %495 = load ptr, ptr %12, align 8, !tbaa !5
  %496 = load i32, ptr %27, align 4, !tbaa !9
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds i32, ptr %495, i64 %497
  %499 = load i32, ptr %498, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %494, i64 %500
  %502 = load double, ptr %501, align 8, !tbaa !32
  %503 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 1
  %504 = load ptr, ptr %503, align 8, !tbaa !31
  %505 = load i32, ptr %28, align 4, !tbaa !9
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %504, i64 %506
  store double %502, ptr %507, align 8, !tbaa !32
  %508 = load i32, ptr %28, align 4, !tbaa !9
  %509 = add nsw i32 %508, 1
  store i32 %509, ptr %28, align 4, !tbaa !9
  br label %510

510:                                              ; preds = %475
  %511 = load i32, ptr %27, align 4, !tbaa !9
  %512 = add nsw i32 %511, 1
  store i32 %512, ptr %27, align 4, !tbaa !9
  br label %471, !llvm.loop !34

513:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %514 = load ptr, ptr %6, align 8, !tbaa !5
  %515 = call ptr @svm_train(ptr noundef %29, ptr noundef %514)
  store ptr %515, ptr %30, align 8, !tbaa !5
  %516 = load ptr, ptr %6, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.svm_parameter, ptr %516, i32 0, i32 14
  %518 = load i32, ptr %517, align 4, !tbaa !35
  %519 = icmp ne i32 %518, 0
  br i1 %519, label %520, label %569

520:                                              ; preds = %513
  %521 = load ptr, ptr %6, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.svm_parameter, ptr %521, i32 0, i32 0
  %523 = load i32, ptr %522, align 8, !tbaa !13
  %524 = icmp eq i32 %523, 0
  br i1 %524, label %530, label %525

525:                                              ; preds = %520
  %526 = load ptr, ptr %6, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.svm_parameter, ptr %526, i32 0, i32 0
  %528 = load i32, ptr %527, align 8, !tbaa !13
  %529 = icmp eq i32 %528, 1
  br i1 %529, label %530, label %569

530:                                              ; preds = %525, %520
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %531 = load ptr, ptr %30, align 8, !tbaa !5
  %532 = call i32 @svm_get_nr_class(ptr noundef %531)
  %533 = sext i32 %532 to i64
  %534 = mul i64 %533, 8
  %535 = call noalias ptr @malloc(i64 noundef %534) #7
  store ptr %535, ptr %31, align 8, !tbaa !5
  %536 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %536, ptr %27, align 4, !tbaa !9
  br label %537

537:                                              ; preds = %564, %530
  %538 = load i32, ptr %27, align 4, !tbaa !9
  %539 = load i32, ptr %26, align 4, !tbaa !9
  %540 = icmp slt i32 %538, %539
  br i1 %540, label %541, label %567

541:                                              ; preds = %537
  %542 = load ptr, ptr %30, align 8, !tbaa !5
  %543 = load ptr, ptr %5, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.svm_problem, ptr %543, i32 0, i32 2
  %545 = load ptr, ptr %544, align 8, !tbaa !30
  %546 = load ptr, ptr %12, align 8, !tbaa !5
  %547 = load i32, ptr %27, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds i32, ptr %546, i64 %548
  %550 = load i32, ptr %549, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds ptr, ptr %545, i64 %551
  %553 = load ptr, ptr %552, align 8, !tbaa !5
  %554 = load ptr, ptr %31, align 8, !tbaa !5
  %555 = call double @svm_predict_probability(ptr noundef %542, ptr noundef %553, ptr noundef %554)
  %556 = load ptr, ptr %8, align 8, !tbaa !5
  %557 = load ptr, ptr %12, align 8, !tbaa !5
  %558 = load i32, ptr %27, align 4, !tbaa !9
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds i32, ptr %557, i64 %559
  %561 = load i32, ptr %560, align 4, !tbaa !9
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds double, ptr %556, i64 %562
  store double %555, ptr %563, align 8, !tbaa !32
  br label %564

564:                                              ; preds = %541
  %565 = load i32, ptr %27, align 4, !tbaa !9
  %566 = add nsw i32 %565, 1
  store i32 %566, ptr %27, align 4, !tbaa !9
  br label %537, !llvm.loop !36

567:                                              ; preds = %537
  %568 = load ptr, ptr %31, align 8, !tbaa !5
  call void @free(ptr noundef %568) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  br label %601

569:                                              ; preds = %525, %513
  %570 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %570, ptr %27, align 4, !tbaa !9
  br label %571

571:                                              ; preds = %597, %569
  %572 = load i32, ptr %27, align 4, !tbaa !9
  %573 = load i32, ptr %26, align 4, !tbaa !9
  %574 = icmp slt i32 %572, %573
  br i1 %574, label %575, label %600

575:                                              ; preds = %571
  %576 = load ptr, ptr %30, align 8, !tbaa !5
  %577 = load ptr, ptr %5, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.svm_problem, ptr %577, i32 0, i32 2
  %579 = load ptr, ptr %578, align 8, !tbaa !30
  %580 = load ptr, ptr %12, align 8, !tbaa !5
  %581 = load i32, ptr %27, align 4, !tbaa !9
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds i32, ptr %580, i64 %582
  %584 = load i32, ptr %583, align 4, !tbaa !9
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds ptr, ptr %579, i64 %585
  %587 = load ptr, ptr %586, align 8, !tbaa !5
  %588 = call double @svm_predict(ptr noundef %576, ptr noundef %587)
  %589 = load ptr, ptr %8, align 8, !tbaa !5
  %590 = load ptr, ptr %12, align 8, !tbaa !5
  %591 = load i32, ptr %27, align 4, !tbaa !9
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds i32, ptr %590, i64 %592
  %594 = load i32, ptr %593, align 4, !tbaa !9
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds double, ptr %589, i64 %595
  store double %588, ptr %596, align 8, !tbaa !32
  br label %597

597:                                              ; preds = %575
  %598 = load i32, ptr %27, align 4, !tbaa !9
  %599 = add nsw i32 %598, 1
  store i32 %599, ptr %27, align 4, !tbaa !9
  br label %571, !llvm.loop !37

600:                                              ; preds = %571
  br label %601

601:                                              ; preds = %600, %567
  call void @svm_free_and_destroy_model(ptr noundef %30)
  %602 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 2
  %603 = load ptr, ptr %602, align 8, !tbaa !30
  call void @free(ptr noundef %603) #6
  %604 = getelementptr inbounds %struct.svm_problem, ptr %29, i32 0, i32 1
  %605 = load ptr, ptr %604, align 8, !tbaa !31
  call void @free(ptr noundef %605) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 24, 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 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %606

606:                                              ; preds = %601
  %607 = load i32, ptr %9, align 4, !tbaa !9
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %9, align 4, !tbaa !9
  br label %393, !llvm.loop !38

609:                                              ; preds = %393
  %610 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %610) #6
  %611 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %611) #6
  call void @llvm.lifetime.end.p0(i64 4, 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 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local i32 @svm_get_nr_class(ptr noundef) #5

; Function Attrs: mustprogress uwtable
declare dso_local double @svm_predict_probability(ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local double @svm_predict(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @svm_free_and_destroy_model(ptr noundef) #5

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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTS11svm_problem", !10, i64 0, !6, i64 8, !6, i64 16}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTS13svm_parameter", !10, i64 0, !10, i64 4, !10, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !15, i64 40, !15, i64 48, !10, i64 56, !6, i64 64, !6, i64 72, !15, i64 80, !15, i64 88, !10, i64 96, !10, i64 100}
!15 = !{!"double", !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = distinct !{!24, !17}
!25 = distinct !{!25, !17}
!26 = distinct !{!26, !17}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = !{!12, !6, i64 16}
!31 = !{!12, !6, i64 8}
!32 = !{!15, !15, i64 0}
!33 = distinct !{!33, !17}
!34 = distinct !{!34, !17}
!35 = !{!14, !10, i64 100}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = distinct !{!38, !17}


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str.8 = external hidden unnamed_addr constant [101 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: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local ptr @svm_train(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #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) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @svm_cross_validation(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr nocapture noundef writeonly %3) local_unnamed_addr #4 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %struct.svm_problem, align 8
  %10 = alloca ptr, align 8
  %11 = load i32, ptr %0, align 8, !tbaa !5
  %12 = sext i32 %11 to i64
  %13 = shl nsw i64 %12, 2
  %14 = tail call noalias ptr @malloc(i64 noundef %13) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #12
  %15 = icmp slt i32 %11, %2
  br i1 %15, label %16, label %19

16:                                               ; preds = %4
  %17 = load ptr, ptr @stderr, align 8, !tbaa !11
  %18 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %17, ptr noundef nonnull @.str.8) #13
  br label %19

19:                                               ; preds = %16, %4
  %.0 = phi i32 [ %11, %16 ], [ %2, %4 ]
  %20 = add i32 %.0, 1
  %21 = sext i32 %20 to i64
  %22 = shl nsw i64 %21, 2
  %23 = tail call noalias ptr @malloc(i64 noundef %22) #11
  %24 = load i32, ptr %1, align 8, !tbaa !12
  %switch = icmp ult i32 %24, 2
  %25 = icmp slt i32 %.0, %11
  %or.cond = and i1 %25, %switch
  br i1 %or.cond, label %30, label %.preheader214

.preheader214:                                    ; preds = %19
  %26 = icmp sgt i32 %11, 0
  br i1 %26, label %.lr.ph.preheader, label %.preheader211

.lr.ph.preheader:                                 ; preds = %.preheader214
  %wide.trip.count = zext nneg i32 %11 to i64
  %min.iters.check = icmp ult i32 %11, 8
  br i1 %min.iters.check, label %.lr.ph.preheader408, label %vector.ph

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

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %27 = getelementptr inbounds i32, ptr %14, i64 %index
  %28 = getelementptr inbounds i8, ptr %27, i64 16
  store <4 x i32> %vec.ind, ptr %27, align 4, !tbaa !15
  store <4 x i32> %step.add, ptr %28, align 4, !tbaa !15
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %29 = icmp eq i64 %index.next, %n.vec
  br i1 %29, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.preheader213, label %.lr.ph.preheader408

30:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #12
  store ptr null, ptr %6, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #12
  store ptr null, ptr %7, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #12
  store ptr null, ptr %8, align 8, !tbaa !11
  call void @_ZL17svm_group_classesPK11svm_problemPiPS2_S3_S3_S2_(ptr noundef nonnull %0, ptr noundef nonnull %5, ptr noundef nonnull %7, ptr noundef nonnull %6, ptr noundef nonnull %8, ptr noundef %14)
  %31 = sext i32 %.0 to i64
  %32 = shl nsw i64 %31, 2
  %33 = call noalias ptr @malloc(i64 noundef %32) #11
  %34 = call noalias ptr @malloc(i64 noundef %13) #11
  %35 = icmp sgt i32 %11, 0
  br i1 %35, label %.lr.ph222.preheader, label %.preheader210

.lr.ph222.preheader:                              ; preds = %30
  %36 = zext nneg i32 %11 to i64
  %37 = shl nuw nsw i64 %36, 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %14, i64 %37, i1 false), !tbaa !15
  br label %.preheader210

.preheader210:                                    ; preds = %.lr.ph222.preheader, %30
  %38 = load i32, ptr %5, align 4, !tbaa !15
  %39 = icmp sgt i32 %38, 0
  br i1 %39, label %.preheader209.preheader, label %.preheader208

.preheader209.preheader:                          ; preds = %.preheader210
  %.pre = load ptr, ptr %8, align 8, !tbaa !11
  br label %.preheader209

.preheader209:                                    ; preds = %.preheader209.preheader, %._crit_edge
  %40 = phi i32 [ %38, %.preheader209.preheader ], [ %82, %._crit_edge ]
  %41 = phi ptr [ %.pre, %.preheader209.preheader ], [ %83, %._crit_edge ]
  %indvars.iv293 = phi i64 [ 0, %.preheader209.preheader ], [ %indvars.iv.next294, %._crit_edge ]
  %42 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv293
  %43 = load i32, ptr %42, align 4, !tbaa !15
  %44 = icmp sgt i32 %43, 0
  br i1 %44, label %.lr.ph224, label %._crit_edge

.preheader208:                                    ; preds = %._crit_edge, %.preheader210
  %.lcssa = phi i32 [ %38, %.preheader210 ], [ %82, %._crit_edge ]
  %45 = icmp sgt i32 %.0, 0
  br i1 %45, label %.lr.ph232, label %._crit_edge246.thread

.lr.ph232:                                        ; preds = %.preheader208
  %46 = icmp sgt i32 %.lcssa, 0
  %47 = load ptr, ptr %8, align 8
  %wide.trip.count307 = zext nneg i32 %.0 to i64
  br i1 %46, label %.lr.ph228.us.preheader, label %._crit_edge233.thread371

._crit_edge233.thread371:                         ; preds = %.lr.ph232
  %48 = shl nuw nsw i64 %wide.trip.count307, 2
  call void @llvm.memset.p0.i64(ptr align 4 %33, i8 0, i64 %48, i1 false), !tbaa !15
  br label %.lr.ph237.preheader

.lr.ph228.us.preheader:                           ; preds = %.lr.ph232
  %wide.trip.count302 = zext nneg i32 %.lcssa to i64
  br label %.lr.ph228.us

.lr.ph228.us:                                     ; preds = %.lr.ph228.us.preheader, %._crit_edge229.us
  %indvars.iv304 = phi i64 [ 0, %.lr.ph228.us.preheader ], [ %indvars.iv.next305, %._crit_edge229.us ]
  %49 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv304
  %indvars.iv.next305 = add nuw nsw i64 %indvars.iv304, 1
  %50 = trunc nuw nsw i64 %indvars.iv.next305 to i32
  %51 = trunc nuw nsw i64 %indvars.iv304 to i32
  br label %52

52:                                               ; preds = %.lr.ph228.us, %52
  %indvars.iv299 = phi i64 [ 0, %.lr.ph228.us ], [ %indvars.iv.next300, %52 ]
  %53 = phi i32 [ 0, %.lr.ph228.us ], [ %61, %52 ]
  %54 = getelementptr inbounds i32, ptr %47, i64 %indvars.iv299
  %55 = load i32, ptr %54, align 4, !tbaa !15
  %56 = mul nsw i32 %55, %50
  %57 = sdiv i32 %56, %.0
  %58 = mul nsw i32 %55, %51
  %59 = sdiv i32 %58, %.0
  %60 = sub i32 %57, %59
  %61 = add nsw i32 %60, %53
  %indvars.iv.next300 = add nuw nsw i64 %indvars.iv299, 1
  %exitcond303.not = icmp eq i64 %indvars.iv.next300, %wide.trip.count302
  br i1 %exitcond303.not, label %._crit_edge229.us, label %52, !llvm.loop !20

._crit_edge229.us:                                ; preds = %52
  store i32 %61, ptr %49, align 4, !tbaa !15
  %exitcond308.not = icmp eq i64 %indvars.iv.next305, %wide.trip.count307
  br i1 %exitcond308.not, label %.lr.ph237.preheader, label %.lr.ph228.us, !llvm.loop !21

.lr.ph224:                                        ; preds = %.preheader209, %.lr.ph224
  %.1186223 = phi i32 [ %77, %.lr.ph224 ], [ 0, %.preheader209 ]
  %62 = call i32 @rand() #12
  %63 = load ptr, ptr %8, align 8, !tbaa !11
  %64 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv293
  %65 = load i32, ptr %64, align 4, !tbaa !15
  %66 = sub nsw i32 %65, %.1186223
  %67 = srem i32 %62, %66
  %68 = load ptr, ptr %6, align 8, !tbaa !11
  %69 = getelementptr inbounds i32, ptr %68, i64 %indvars.iv293
  %70 = load i32, ptr %69, align 4, !tbaa !15
  %71 = add i32 %70, %.1186223
  %72 = add i32 %71, %67
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds i32, ptr %34, i64 %73
  %75 = sext i32 %71 to i64
  %76 = getelementptr inbounds i32, ptr %34, i64 %75
  call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %76)
  %77 = add nuw nsw i32 %.1186223, 1
  %78 = load ptr, ptr %8, align 8, !tbaa !11
  %79 = getelementptr inbounds i32, ptr %78, i64 %indvars.iv293
  %80 = load i32, ptr %79, align 4, !tbaa !15
  %81 = icmp slt i32 %77, %80
  br i1 %81, label %.lr.ph224, label %._crit_edge.loopexit, !llvm.loop !22

._crit_edge.loopexit:                             ; preds = %.lr.ph224
  %.pre367 = load i32, ptr %5, align 4, !tbaa !15
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader209
  %82 = phi i32 [ %.pre367, %._crit_edge.loopexit ], [ %40, %.preheader209 ]
  %83 = phi ptr [ %78, %._crit_edge.loopexit ], [ %41, %.preheader209 ]
  %indvars.iv.next294 = add nuw nsw i64 %indvars.iv293, 1
  %84 = sext i32 %82 to i64
  %85 = icmp slt i64 %indvars.iv.next294, %84
  br i1 %85, label %.preheader209, label %.preheader208, !llvm.loop !23

.lr.ph237.preheader:                              ; preds = %._crit_edge229.us, %._crit_edge233.thread371
  store i32 0, ptr %23, align 4, !tbaa !15
  %wide.trip.count312 = zext i32 %20 to i64
  %invariant.gep = getelementptr i8, ptr %33, i64 -4
  %86 = add nsw i64 %wide.trip.count312, -1
  %87 = add nsw i64 %wide.trip.count312, -2
  %xtraiter409 = and i64 %86, 3
  %88 = icmp ult i64 %87, 3
  br i1 %88, label %.preheader207.unr-lcssa, label %.lr.ph237.preheader.new

.lr.ph237.preheader.new:                          ; preds = %.lr.ph237.preheader
  %unroll_iter411 = and i64 %86, -4
  %invariant.gep434 = getelementptr inbounds i8, ptr %23, i64 4
  br label %.lr.ph237

.preheader207.unr-lcssa:                          ; preds = %.lr.ph237, %.lr.ph237.preheader
  %.unr = phi i32 [ 0, %.lr.ph237.preheader ], [ %143, %.lr.ph237 ]
  %indvars.iv309.unr = phi i64 [ 1, %.lr.ph237.preheader ], [ %indvars.iv.next310.3, %.lr.ph237 ]
  %lcmp.mod410.not = icmp eq i64 %xtraiter409, 0
  br i1 %lcmp.mod410.not, label %.preheader207, label %.lr.ph237.epil

.lr.ph237.epil:                                   ; preds = %.preheader207.unr-lcssa, %.lr.ph237.epil
  %89 = phi i32 [ %91, %.lr.ph237.epil ], [ %.unr, %.preheader207.unr-lcssa ]
  %indvars.iv309.epil = phi i64 [ %indvars.iv.next310.epil, %.lr.ph237.epil ], [ %indvars.iv309.unr, %.preheader207.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph237.epil ], [ 0, %.preheader207.unr-lcssa ]
  %gep.epil = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv309.epil
  %90 = load i32, ptr %gep.epil, align 4, !tbaa !15
  %91 = add nsw i32 %90, %89
  %92 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv309.epil
  store i32 %91, ptr %92, align 4, !tbaa !15
  %indvars.iv.next310.epil = add nuw nsw i64 %indvars.iv309.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter409
  br i1 %epil.iter.cmp.not, label %.preheader207, label %.lr.ph237.epil, !llvm.loop !24

.preheader207:                                    ; preds = %.lr.ph237.epil, %.preheader207.unr-lcssa
  %93 = icmp sgt i32 %.lcssa, 0
  br i1 %93, label %.preheader206.lr.ph, label %._crit_edge246

.preheader206.lr.ph:                              ; preds = %.preheader207
  %94 = load ptr, ptr %6, align 8
  %95 = load ptr, ptr %8, align 8
  br i1 %45, label %.preheader206.us.preheader, label %._crit_edge246

.preheader206.us.preheader:                       ; preds = %.preheader206.lr.ph
  %wide.trip.count330 = zext nneg i32 %.lcssa to i64
  %wide.trip.count325 = zext nneg i32 %.0 to i64
  br label %.preheader206.us

.preheader206.us:                                 ; preds = %.preheader206.us.preheader, %._crit_edge244.us
  %indvars.iv327 = phi i64 [ 0, %.preheader206.us.preheader ], [ %indvars.iv.next328, %._crit_edge244.us ]
  %96 = getelementptr inbounds i32, ptr %94, i64 %indvars.iv327
  %97 = getelementptr inbounds i32, ptr %95, i64 %indvars.iv327
  br label %98

98:                                               ; preds = %.preheader206.us, %.loopexit205.us
  %indvars.iv322 = phi i64 [ 0, %.preheader206.us ], [ %indvars.iv.next323, %.loopexit205.us ]
  %99 = load i32, ptr %97, align 4, !tbaa !15
  %100 = trunc nuw nsw i64 %indvars.iv322 to i32
  %101 = mul nsw i32 %99, %100
  %102 = sdiv i32 %101, %.0
  %indvars.iv.next323 = add nuw nsw i64 %indvars.iv322, 1
  %103 = trunc nuw nsw i64 %indvars.iv.next323 to i32
  %104 = mul nsw i32 %99, %103
  %105 = sdiv i32 %104, %.0
  %106 = icmp slt i32 %102, %105
  br i1 %106, label %.lr.ph240.us, label %.loopexit205.us

scalar.ph391:                                     ; preds = %scalar.ph391.preheader, %scalar.ph391
  %indvars.iv317 = phi i64 [ %indvars.iv.next318, %scalar.ph391 ], [ %indvars.iv317.ph, %scalar.ph391.preheader ]
  %indvars.iv315 = phi i64 [ %indvars.iv.next316, %scalar.ph391 ], [ %indvars.iv315.ph, %scalar.ph391.preheader ]
  %indvars.iv.next316 = add nsw i64 %indvars.iv315, 1
  %indvars.iv.next318 = add nsw i64 %indvars.iv317, 1
  %107 = icmp slt i64 %indvars.iv.next318, %124
  br i1 %107, label %scalar.ph391, label %..loopexit205_crit_edge.us, !llvm.loop !26

.loopexit205.us:                                  ; preds = %..loopexit205_crit_edge.us, %98
  %exitcond326.not = icmp eq i64 %indvars.iv.next323, %wide.trip.count325
  br i1 %exitcond326.not, label %._crit_edge244.us, label %98, !llvm.loop !27

.lr.ph240.us:                                     ; preds = %98
  %108 = load i32, ptr %96, align 4, !tbaa !15
  %109 = add i32 %105, %108
  %110 = add i32 %102, %108
  %111 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv322
  %.promoted.us247 = load i32, ptr %111, align 4, !tbaa !15
  %112 = sext i32 %.promoted.us247 to i64
  %113 = shl nsw i64 %112, 2
  %scevgep = getelementptr i8, ptr %14, i64 %113
  %114 = sext i32 %110 to i64
  %115 = shl nsw i64 %114, 2
  %scevgep314 = getelementptr i8, ptr %34, i64 %115
  %116 = add i32 %108, 1
  %117 = add i32 %116, %102
  %smax = call i32 @llvm.smax.i32(i32 %117, i32 %109)
  %118 = xor i32 %108, -1
  %119 = add i32 %smax, %118
  %120 = sub i32 %119, %102
  %121 = zext i32 %120 to i64
  %122 = shl nuw nsw i64 %121, 2
  %123 = add nuw nsw i64 %122, 4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %scevgep, ptr noundef nonnull align 4 dereferenceable(1) %scevgep314, i64 %123, i1 false), !tbaa !15
  %124 = sext i32 %109 to i64
  %125 = add nsw i64 %114, 1
  %smax389 = call i64 @llvm.smax.i64(i64 %125, i64 %124)
  %126 = sub i64 %smax389, %114
  %min.iters.check392 = icmp ult i64 %126, 4
  br i1 %min.iters.check392, label %scalar.ph391.preheader, label %vector.ph393

scalar.ph391.preheader:                           ; preds = %middle.block390, %.lr.ph240.us
  %indvars.iv317.ph = phi i64 [ %114, %.lr.ph240.us ], [ %ind.end, %middle.block390 ]
  %indvars.iv315.ph = phi i64 [ %112, %.lr.ph240.us ], [ %131, %middle.block390 ]
  br label %scalar.ph391

vector.ph393:                                     ; preds = %.lr.ph240.us
  %n.vec395 = and i64 %126, -4
  %ind.end = add i64 %n.vec395, %114
  %127 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %112, i64 0
  br label %vector.body397

vector.body397:                                   ; preds = %vector.body397, %vector.ph393
  %index398 = phi i64 [ 0, %vector.ph393 ], [ %index.next400, %vector.body397 ]
  %vec.phi = phi <2 x i64> [ %127, %vector.ph393 ], [ %128, %vector.body397 ]
  %vec.phi399 = phi <2 x i64> [ zeroinitializer, %vector.ph393 ], [ %129, %vector.body397 ]
  %128 = add <2 x i64> %vec.phi, <i64 1, i64 1>
  %129 = add <2 x i64> %vec.phi399, <i64 1, i64 1>
  %index.next400 = add nuw i64 %index398, 4
  %130 = icmp eq i64 %index.next400, %n.vec395
  br i1 %130, label %middle.block390, label %vector.body397, !llvm.loop !28

middle.block390:                                  ; preds = %vector.body397
  %bin.rdx = add <2 x i64> %129, %128
  %131 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n401 = icmp eq i64 %126, %n.vec395
  br i1 %cmp.n401, label %..loopexit205_crit_edge.us, label %scalar.ph391.preheader

..loopexit205_crit_edge.us:                       ; preds = %scalar.ph391, %middle.block390
  %indvars.iv.next316.lcssa = phi i64 [ %131, %middle.block390 ], [ %indvars.iv.next316, %scalar.ph391 ]
  %132 = trunc nsw i64 %indvars.iv.next316.lcssa to i32
  store i32 %132, ptr %111, align 4, !tbaa !15
  br label %.loopexit205.us

._crit_edge244.us:                                ; preds = %.loopexit205.us
  %indvars.iv.next328 = add nuw nsw i64 %indvars.iv327, 1
  %exitcond331.not = icmp eq i64 %indvars.iv.next328, %wide.trip.count330
  br i1 %exitcond331.not, label %._crit_edge246, label %.preheader206.us, !llvm.loop !29

.lr.ph237:                                        ; preds = %.lr.ph237, %.lr.ph237.preheader.new
  %133 = phi i32 [ 0, %.lr.ph237.preheader.new ], [ %143, %.lr.ph237 ]
  %indvars.iv309 = phi i64 [ 1, %.lr.ph237.preheader.new ], [ %indvars.iv.next310.3, %.lr.ph237 ]
  %niter412 = phi i64 [ 0, %.lr.ph237.preheader.new ], [ %niter412.next.3, %.lr.ph237 ]
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv309
  %134 = load i32, ptr %gep, align 4, !tbaa !15
  %135 = add nsw i32 %134, %133
  %136 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv309
  store i32 %135, ptr %136, align 4, !tbaa !15
  %gep.1 = getelementptr i32, ptr %33, i64 %indvars.iv309
  %137 = load i32, ptr %gep.1, align 4, !tbaa !15
  %138 = add nsw i32 %137, %135
  %gep435 = getelementptr inbounds i32, ptr %invariant.gep434, i64 %indvars.iv309
  store i32 %138, ptr %gep435, align 4, !tbaa !15
  %indvars.iv.next310.1 = add nuw nsw i64 %indvars.iv309, 2
  %gep.2 = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv.next310.1
  %139 = load i32, ptr %gep.2, align 4, !tbaa !15
  %140 = add nsw i32 %139, %138
  %141 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next310.1
  store i32 %140, ptr %141, align 4, !tbaa !15
  %indvars.iv.next310.2 = add nuw nsw i64 %indvars.iv309, 3
  %gep.3 = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv.next310.2
  %142 = load i32, ptr %gep.3, align 4, !tbaa !15
  %143 = add nsw i32 %142, %140
  %144 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next310.2
  store i32 %143, ptr %144, align 4, !tbaa !15
  %indvars.iv.next310.3 = add nuw nsw i64 %indvars.iv309, 4
  %niter412.next.3 = add i64 %niter412, 4
  %niter412.ncmp.3 = icmp eq i64 %niter412.next.3, %unroll_iter411
  br i1 %niter412.ncmp.3, label %.preheader207.unr-lcssa, label %.lr.ph237, !llvm.loop !30

._crit_edge246.thread:                            ; preds = %.preheader208
  store i32 0, ptr %23, align 4, !tbaa !15
  br label %._crit_edge252

._crit_edge246:                                   ; preds = %._crit_edge244.us, %.preheader206.lr.ph, %.preheader207
  store i32 0, ptr %23, align 4, !tbaa !15
  %invariant.gep383 = getelementptr i8, ptr %33, i64 -4
  %xtraiter413 = and i64 %86, 3
  %145 = icmp ult i64 %87, 3
  br i1 %145, label %._crit_edge252.loopexit.unr-lcssa, label %._crit_edge246.new

._crit_edge246.new:                               ; preds = %._crit_edge246
  %unroll_iter417 = and i64 %86, -4
  %invariant.gep436 = getelementptr inbounds i8, ptr %23, i64 4
  br label %.lr.ph251

.lr.ph251:                                        ; preds = %.lr.ph251, %._crit_edge246.new
  %146 = phi i32 [ 0, %._crit_edge246.new ], [ %156, %.lr.ph251 ]
  %indvars.iv332 = phi i64 [ 1, %._crit_edge246.new ], [ %indvars.iv.next333.3, %.lr.ph251 ]
  %niter418 = phi i64 [ 0, %._crit_edge246.new ], [ %niter418.next.3, %.lr.ph251 ]
  %gep384 = getelementptr i32, ptr %invariant.gep383, i64 %indvars.iv332
  %147 = load i32, ptr %gep384, align 4, !tbaa !15
  %148 = add nsw i32 %147, %146
  %149 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv332
  store i32 %148, ptr %149, align 4, !tbaa !15
  %gep384.1 = getelementptr i32, ptr %33, i64 %indvars.iv332
  %150 = load i32, ptr %gep384.1, align 4, !tbaa !15
  %151 = add nsw i32 %150, %148
  %gep437 = getelementptr inbounds i32, ptr %invariant.gep436, i64 %indvars.iv332
  store i32 %151, ptr %gep437, align 4, !tbaa !15
  %indvars.iv.next333.1 = add nuw nsw i64 %indvars.iv332, 2
  %gep384.2 = getelementptr i32, ptr %invariant.gep383, i64 %indvars.iv.next333.1
  %152 = load i32, ptr %gep384.2, align 4, !tbaa !15
  %153 = add nsw i32 %152, %151
  %154 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next333.1
  store i32 %153, ptr %154, align 4, !tbaa !15
  %indvars.iv.next333.2 = add nuw nsw i64 %indvars.iv332, 3
  %gep384.3 = getelementptr i32, ptr %invariant.gep383, i64 %indvars.iv.next333.2
  %155 = load i32, ptr %gep384.3, align 4, !tbaa !15
  %156 = add nsw i32 %155, %153
  %157 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next333.2
  store i32 %156, ptr %157, align 4, !tbaa !15
  %indvars.iv.next333.3 = add nuw nsw i64 %indvars.iv332, 4
  %niter418.next.3 = add i64 %niter418, 4
  %niter418.ncmp.3 = icmp eq i64 %niter418.next.3, %unroll_iter417
  br i1 %niter418.ncmp.3, label %._crit_edge252.loopexit.unr-lcssa, label %.lr.ph251, !llvm.loop !31

._crit_edge252.loopexit.unr-lcssa:                ; preds = %.lr.ph251, %._crit_edge246
  %.unr415 = phi i32 [ 0, %._crit_edge246 ], [ %156, %.lr.ph251 ]
  %indvars.iv332.unr = phi i64 [ 1, %._crit_edge246 ], [ %indvars.iv.next333.3, %.lr.ph251 ]
  %lcmp.mod416.not = icmp eq i64 %xtraiter413, 0
  br i1 %lcmp.mod416.not, label %._crit_edge252, label %.lr.ph251.epil

.lr.ph251.epil:                                   ; preds = %._crit_edge252.loopexit.unr-lcssa, %.lr.ph251.epil
  %158 = phi i32 [ %160, %.lr.ph251.epil ], [ %.unr415, %._crit_edge252.loopexit.unr-lcssa ]
  %indvars.iv332.epil = phi i64 [ %indvars.iv.next333.epil, %.lr.ph251.epil ], [ %indvars.iv332.unr, %._crit_edge252.loopexit.unr-lcssa ]
  %epil.iter414 = phi i64 [ %epil.iter414.next, %.lr.ph251.epil ], [ 0, %._crit_edge252.loopexit.unr-lcssa ]
  %gep384.epil = getelementptr i32, ptr %invariant.gep383, i64 %indvars.iv332.epil
  %159 = load i32, ptr %gep384.epil, align 4, !tbaa !15
  %160 = add nsw i32 %159, %158
  %161 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv332.epil
  store i32 %160, ptr %161, align 4, !tbaa !15
  %indvars.iv.next333.epil = add nuw nsw i64 %indvars.iv332.epil, 1
  %epil.iter414.next = add i64 %epil.iter414, 1
  %epil.iter414.cmp.not = icmp eq i64 %epil.iter414.next, %xtraiter413
  br i1 %epil.iter414.cmp.not, label %._crit_edge252, label %.lr.ph251.epil, !llvm.loop !32

._crit_edge252:                                   ; preds = %._crit_edge252.loopexit.unr-lcssa, %.lr.ph251.epil, %._crit_edge246.thread
  %162 = load ptr, ptr %6, align 8, !tbaa !11
  call void @free(ptr noundef %162) #12
  %163 = load ptr, ptr %7, align 8, !tbaa !11
  call void @free(ptr noundef %163) #12
  %164 = load ptr, ptr %8, align 8, !tbaa !11
  call void @free(ptr noundef %164) #12
  call void @free(ptr noundef %34) #12
  call void @free(ptr noundef %33) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #12
  br label %.loopexit212

.preheader213:                                    ; preds = %.lr.ph, %middle.block
  br i1 %26, label %.lr.ph217.preheader, label %.preheader211

.lr.ph217.preheader:                              ; preds = %.preheader213
  %wide.trip.count283 = zext nneg i32 %11 to i64
  br label %.lr.ph217

.lr.ph:                                           ; preds = %.lr.ph.preheader408, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader408 ]
  %165 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv
  %166 = trunc nuw nsw i64 %indvars.iv to i32
  store i32 %166, ptr %165, align 4, !tbaa !15
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader213, label %.lr.ph, !llvm.loop !33

.preheader211:                                    ; preds = %.lr.ph217, %.preheader214, %.preheader213
  %.not218 = icmp slt i32 %.0, 0
  br i1 %.not218, label %._crit_edge272, label %.lr.ph220.preheader

.lr.ph220.preheader:                              ; preds = %.preheader211
  %wide.trip.count288 = zext i32 %20 to i64
  %xtraiter = and i64 %wide.trip.count288, 1
  %167 = icmp eq i32 %.0, 0
  br i1 %167, label %.loopexit212.loopexit.unr-lcssa, label %.lr.ph220.preheader.new

.lr.ph220.preheader.new:                          ; preds = %.lr.ph220.preheader
  %unroll_iter = and i64 %wide.trip.count288, 4294967294
  br label %.lr.ph220

.lr.ph217:                                        ; preds = %.lr.ph217.preheader, %.lr.ph217
  %indvars.iv280 = phi i64 [ 0, %.lr.ph217.preheader ], [ %indvars.iv.next281, %.lr.ph217 ]
  %168 = tail call i32 @rand() #12
  %169 = trunc i64 %indvars.iv280 to i32
  %170 = sub i32 %11, %169
  %171 = srem i32 %168, %170
  %172 = trunc nuw nsw i64 %indvars.iv280 to i32
  %173 = add nsw i32 %171, %172
  %174 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv280
  %175 = sext i32 %173 to i64
  %176 = getelementptr inbounds i32, ptr %14, i64 %175
  tail call void @_ZL4swapIiEvRT_S1_(ptr noundef nonnull align 4 dereferenceable(4) %174, ptr noundef nonnull align 4 dereferenceable(4) %176)
  %indvars.iv.next281 = add nuw nsw i64 %indvars.iv280, 1
  %exitcond284.not = icmp eq i64 %indvars.iv.next281, %wide.trip.count283
  br i1 %exitcond284.not, label %.preheader211, label %.lr.ph217, !llvm.loop !34

.lr.ph220:                                        ; preds = %.lr.ph220, %.lr.ph220.preheader.new
  %indvars.iv285 = phi i64 [ 0, %.lr.ph220.preheader.new ], [ %indvars.iv.next286.1, %.lr.ph220 ]
  %niter = phi i64 [ 0, %.lr.ph220.preheader.new ], [ %niter.next.1, %.lr.ph220 ]
  %177 = trunc i64 %indvars.iv285 to i32
  %178 = mul i32 %11, %177
  %179 = sdiv i32 %178, %.0
  %180 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv285
  store i32 %179, ptr %180, align 4, !tbaa !15
  %indvars.iv.next286 = or disjoint i64 %indvars.iv285, 1
  %181 = trunc i64 %indvars.iv.next286 to i32
  %182 = mul i32 %11, %181
  %183 = sdiv i32 %182, %.0
  %184 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next286
  store i32 %183, ptr %184, align 4, !tbaa !15
  %indvars.iv.next286.1 = add nuw nsw i64 %indvars.iv285, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit212.loopexit.unr-lcssa, label %.lr.ph220, !llvm.loop !35

.loopexit212.loopexit.unr-lcssa:                  ; preds = %.lr.ph220, %.lr.ph220.preheader
  %indvars.iv285.unr = phi i64 [ 0, %.lr.ph220.preheader ], [ %indvars.iv.next286.1, %.lr.ph220 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit212, label %.lr.ph220.epil

.lr.ph220.epil:                                   ; preds = %.loopexit212.loopexit.unr-lcssa
  %185 = trunc i64 %indvars.iv285.unr to i32
  %186 = mul i32 %11, %185
  %187 = sdiv i32 %186, %.0
  %188 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv285.unr
  store i32 %187, ptr %188, align 4, !tbaa !15
  br label %.loopexit212

.loopexit212:                                     ; preds = %.lr.ph220.epil, %.loopexit212.loopexit.unr-lcssa, %._crit_edge252
  %189 = icmp sgt i32 %.0, 0
  br i1 %189, label %.lr.ph271, label %._crit_edge272

.lr.ph271:                                        ; preds = %.loopexit212
  %190 = getelementptr inbounds i8, ptr %9, i64 16
  %191 = getelementptr inbounds i8, ptr %9, i64 8
  %192 = getelementptr inbounds i8, ptr %0, i64 16
  %193 = getelementptr inbounds i8, ptr %0, i64 8
  %194 = getelementptr inbounds i8, ptr %1, i64 100
  %wide.trip.count365 = zext nneg i32 %.0 to i64
  %.pre368 = load i32, ptr %23, align 4, !tbaa !15
  %195 = add nsw i64 %12, -1
  %invariant.gep438 = getelementptr i8, ptr %14, i64 4
  br label %196

196:                                              ; preds = %.lr.ph271, %.loopexit
  %197 = phi i32 [ %.pre368, %.lr.ph271 ], [ %199, %.loopexit ]
  %indvars.iv362 = phi i64 [ 0, %.lr.ph271 ], [ %indvars.iv.next363, %.loopexit ]
  %indvars.iv.next363 = add nuw nsw i64 %indvars.iv362, 1
  %198 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv.next363
  %199 = load i32, ptr %198, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #12
  %.neg = sub i32 %197, %199
  %200 = add i32 %.neg, %11
  store i32 %200, ptr %9, align 8, !tbaa !5
  %201 = sext i32 %200 to i64
  %202 = shl nsw i64 %201, 3
  %203 = call noalias ptr @malloc(i64 noundef %202) #11
  store ptr %203, ptr %190, align 8, !tbaa !36
  %204 = call noalias ptr @malloc(i64 noundef %202) #11
  store ptr %204, ptr %191, align 8, !tbaa !37
  %205 = icmp sgt i32 %197, 0
  br i1 %205, label %.lr.ph256.preheader, label %.preheader

.lr.ph256.preheader:                              ; preds = %196
  %wide.trip.count342 = zext nneg i32 %197 to i64
  %xtraiter419 = and i64 %wide.trip.count342, 1
  %206 = icmp eq i32 %197, 1
  br i1 %206, label %.preheader.loopexit.unr-lcssa, label %.lr.ph256.preheader.new

.lr.ph256.preheader.new:                          ; preds = %.lr.ph256.preheader
  %unroll_iter422 = and i64 %wide.trip.count342, 2147483646
  br label %.lr.ph256

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph256, %.lr.ph256.preheader
  %indvars.iv337.unr = phi i64 [ 0, %.lr.ph256.preheader ], [ %indvars.iv.next338.1, %.lr.ph256 ]
  %lcmp.mod421.not = icmp eq i64 %xtraiter419, 0
  br i1 %lcmp.mod421.not, label %.preheader, label %.lr.ph256.epil

.lr.ph256.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa
  %207 = load ptr, ptr %192, align 8, !tbaa !36
  %208 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv337.unr
  %209 = load i32, ptr %208, align 4, !tbaa !15
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds ptr, ptr %207, i64 %210
  %212 = load ptr, ptr %211, align 8, !tbaa !11
  %213 = load ptr, ptr %190, align 8, !tbaa !36
  %214 = getelementptr inbounds ptr, ptr %213, i64 %indvars.iv337.unr
  store ptr %212, ptr %214, align 8, !tbaa !11
  %215 = load ptr, ptr %193, align 8, !tbaa !37
  %216 = getelementptr inbounds double, ptr %215, i64 %210
  %217 = load double, ptr %216, align 8, !tbaa !38
  %218 = load ptr, ptr %191, align 8, !tbaa !37
  %219 = getelementptr inbounds double, ptr %218, i64 %indvars.iv337.unr
  store double %217, ptr %219, align 8, !tbaa !38
  br label %.preheader

.preheader:                                       ; preds = %.lr.ph256.epil, %.preheader.loopexit.unr-lcssa, %196
  %.0182.lcssa = phi i32 [ 0, %196 ], [ %197, %.preheader.loopexit.unr-lcssa ], [ %197, %.lr.ph256.epil ]
  %220 = icmp slt i32 %199, %11
  br i1 %220, label %.lr.ph260.preheader, label %._crit_edge261

.lr.ph260.preheader:                              ; preds = %.preheader
  %221 = zext nneg i32 %.0182.lcssa to i64
  %222 = sext i32 %199 to i64
  %223 = sub nsw i64 %12, %222
  %xtraiter424 = and i64 %223, 1
  %lcmp.mod425.not = icmp eq i64 %xtraiter424, 0
  br i1 %lcmp.mod425.not, label %.lr.ph260.prol.loopexit, label %.lr.ph260.prol

.lr.ph260.prol:                                   ; preds = %.lr.ph260.preheader
  %224 = load ptr, ptr %192, align 8, !tbaa !36
  %225 = getelementptr inbounds i32, ptr %14, i64 %222
  %226 = load i32, ptr %225, align 4, !tbaa !15
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds ptr, ptr %224, i64 %227
  %229 = load ptr, ptr %228, align 8, !tbaa !11
  %230 = load ptr, ptr %190, align 8, !tbaa !36
  %231 = getelementptr inbounds ptr, ptr %230, i64 %221
  store ptr %229, ptr %231, align 8, !tbaa !11
  %232 = load ptr, ptr %193, align 8, !tbaa !37
  %233 = getelementptr inbounds double, ptr %232, i64 %227
  %234 = load double, ptr %233, align 8, !tbaa !38
  %235 = load ptr, ptr %191, align 8, !tbaa !37
  %236 = getelementptr inbounds double, ptr %235, i64 %221
  store double %234, ptr %236, align 8, !tbaa !38
  %indvars.iv.next345.prol = add nuw nsw i64 %221, 1
  %indvars.iv.next347.prol = add nsw i64 %222, 1
  br label %.lr.ph260.prol.loopexit

.lr.ph260.prol.loopexit:                          ; preds = %.lr.ph260.prol, %.lr.ph260.preheader
  %indvars.iv346.unr = phi i64 [ %222, %.lr.ph260.preheader ], [ %indvars.iv.next347.prol, %.lr.ph260.prol ]
  %indvars.iv344.unr = phi i64 [ %221, %.lr.ph260.preheader ], [ %indvars.iv.next345.prol, %.lr.ph260.prol ]
  %237 = icmp eq i64 %195, %222
  br i1 %237, label %._crit_edge261, label %.lr.ph260

.lr.ph256:                                        ; preds = %.lr.ph256, %.lr.ph256.preheader.new
  %indvars.iv337 = phi i64 [ 0, %.lr.ph256.preheader.new ], [ %indvars.iv.next338.1, %.lr.ph256 ]
  %niter423 = phi i64 [ 0, %.lr.ph256.preheader.new ], [ %niter423.next.1, %.lr.ph256 ]
  %238 = load ptr, ptr %192, align 8, !tbaa !36
  %239 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv337
  %240 = load i32, ptr %239, align 4, !tbaa !15
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds ptr, ptr %238, i64 %241
  %243 = load ptr, ptr %242, align 8, !tbaa !11
  %244 = load ptr, ptr %190, align 8, !tbaa !36
  %245 = getelementptr inbounds ptr, ptr %244, i64 %indvars.iv337
  store ptr %243, ptr %245, align 8, !tbaa !11
  %246 = load ptr, ptr %193, align 8, !tbaa !37
  %247 = getelementptr inbounds double, ptr %246, i64 %241
  %248 = load double, ptr %247, align 8, !tbaa !38
  %249 = load ptr, ptr %191, align 8, !tbaa !37
  %250 = getelementptr inbounds double, ptr %249, i64 %indvars.iv337
  store double %248, ptr %250, align 8, !tbaa !38
  %indvars.iv.next338 = or disjoint i64 %indvars.iv337, 1
  %251 = load ptr, ptr %192, align 8, !tbaa !36
  %252 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv.next338
  %253 = load i32, ptr %252, align 4, !tbaa !15
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds ptr, ptr %251, i64 %254
  %256 = load ptr, ptr %255, align 8, !tbaa !11
  %257 = load ptr, ptr %190, align 8, !tbaa !36
  %258 = getelementptr inbounds ptr, ptr %257, i64 %indvars.iv.next338
  store ptr %256, ptr %258, align 8, !tbaa !11
  %259 = load ptr, ptr %193, align 8, !tbaa !37
  %260 = getelementptr inbounds double, ptr %259, i64 %254
  %261 = load double, ptr %260, align 8, !tbaa !38
  %262 = load ptr, ptr %191, align 8, !tbaa !37
  %263 = getelementptr inbounds double, ptr %262, i64 %indvars.iv.next338
  store double %261, ptr %263, align 8, !tbaa !38
  %indvars.iv.next338.1 = add nuw nsw i64 %indvars.iv337, 2
  %niter423.next.1 = add i64 %niter423, 2
  %niter423.ncmp.1 = icmp eq i64 %niter423.next.1, %unroll_iter422
  br i1 %niter423.ncmp.1, label %.preheader.loopexit.unr-lcssa, label %.lr.ph256, !llvm.loop !39

.lr.ph260:                                        ; preds = %.lr.ph260.prol.loopexit, %.lr.ph260
  %indvars.iv346 = phi i64 [ %indvars.iv.next347.1, %.lr.ph260 ], [ %indvars.iv346.unr, %.lr.ph260.prol.loopexit ]
  %indvars.iv344 = phi i64 [ %indvars.iv.next345.1, %.lr.ph260 ], [ %indvars.iv344.unr, %.lr.ph260.prol.loopexit ]
  %264 = load ptr, ptr %192, align 8, !tbaa !36
  %265 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv346
  %266 = load i32, ptr %265, align 4, !tbaa !15
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds ptr, ptr %264, i64 %267
  %269 = load ptr, ptr %268, align 8, !tbaa !11
  %270 = load ptr, ptr %190, align 8, !tbaa !36
  %271 = getelementptr inbounds ptr, ptr %270, i64 %indvars.iv344
  store ptr %269, ptr %271, align 8, !tbaa !11
  %272 = load ptr, ptr %193, align 8, !tbaa !37
  %273 = getelementptr inbounds double, ptr %272, i64 %267
  %274 = load double, ptr %273, align 8, !tbaa !38
  %275 = load ptr, ptr %191, align 8, !tbaa !37
  %276 = getelementptr inbounds double, ptr %275, i64 %indvars.iv344
  store double %274, ptr %276, align 8, !tbaa !38
  %indvars.iv.next345 = add nuw nsw i64 %indvars.iv344, 1
  %277 = load ptr, ptr %192, align 8, !tbaa !36
  %gep439 = getelementptr i32, ptr %invariant.gep438, i64 %indvars.iv346
  %278 = load i32, ptr %gep439, align 4, !tbaa !15
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds ptr, ptr %277, i64 %279
  %281 = load ptr, ptr %280, align 8, !tbaa !11
  %282 = load ptr, ptr %190, align 8, !tbaa !36
  %283 = getelementptr inbounds ptr, ptr %282, i64 %indvars.iv.next345
  store ptr %281, ptr %283, align 8, !tbaa !11
  %284 = load ptr, ptr %193, align 8, !tbaa !37
  %285 = getelementptr inbounds double, ptr %284, i64 %279
  %286 = load double, ptr %285, align 8, !tbaa !38
  %287 = load ptr, ptr %191, align 8, !tbaa !37
  %288 = getelementptr inbounds double, ptr %287, i64 %indvars.iv.next345
  store double %286, ptr %288, align 8, !tbaa !38
  %indvars.iv.next345.1 = add nuw nsw i64 %indvars.iv344, 2
  %indvars.iv.next347.1 = add nsw i64 %indvars.iv346, 2
  %exitcond352.not.1 = icmp eq i64 %indvars.iv.next347.1, %12
  br i1 %exitcond352.not.1, label %._crit_edge261, label %.lr.ph260, !llvm.loop !40

._crit_edge261:                                   ; preds = %.lr.ph260.prol.loopexit, %.lr.ph260, %.preheader
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #12
  %289 = call ptr @svm_train(ptr noundef nonnull %9, ptr noundef nonnull %1)
  store ptr %289, ptr %10, align 8, !tbaa !11
  %290 = load i32, ptr %194, align 4, !tbaa !41
  %.not202 = icmp eq i32 %290, 0
  br i1 %.not202, label %311, label %291

291:                                              ; preds = %._crit_edge261
  %292 = load i32, ptr %1, align 8, !tbaa !12
  %switch203 = icmp ult i32 %292, 2
  br i1 %switch203, label %293, label %311

293:                                              ; preds = %291
  %294 = call i32 @svm_get_nr_class(ptr noundef %289)
  %295 = sext i32 %294 to i64
  %296 = shl nsw i64 %295, 3
  %297 = call noalias ptr @malloc(i64 noundef %296) #11
  %298 = icmp slt i32 %197, %199
  br i1 %298, label %.lr.ph264.preheader, label %._crit_edge265

.lr.ph264.preheader:                              ; preds = %293
  %299 = sext i32 %197 to i64
  br label %.lr.ph264

.lr.ph264:                                        ; preds = %.lr.ph264.preheader, %.lr.ph264
  %indvars.iv353 = phi i64 [ %299, %.lr.ph264.preheader ], [ %indvars.iv.next354, %.lr.ph264 ]
  %300 = load ptr, ptr %10, align 8, !tbaa !11
  %301 = load ptr, ptr %192, align 8, !tbaa !36
  %302 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv353
  %303 = load i32, ptr %302, align 4, !tbaa !15
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds ptr, ptr %301, i64 %304
  %306 = load ptr, ptr %305, align 8, !tbaa !11
  %307 = call double @svm_predict_probability(ptr noundef %300, ptr noundef %306, ptr noundef %297)
  %308 = load i32, ptr %302, align 4, !tbaa !15
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds double, ptr %3, i64 %309
  store double %307, ptr %310, align 8, !tbaa !38
  %indvars.iv.next354 = add nsw i64 %indvars.iv353, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next354 to i32
  %exitcond356.not = icmp eq i32 %199, %lftr.wideiv
  br i1 %exitcond356.not, label %._crit_edge265, label %.lr.ph264, !llvm.loop !42

._crit_edge265:                                   ; preds = %.lr.ph264, %293
  call void @free(ptr noundef %297) #12
  br label %.loopexit

311:                                              ; preds = %291, %._crit_edge261
  %312 = icmp slt i32 %197, %199
  br i1 %312, label %.lr.ph268.preheader, label %.loopexit

.lr.ph268.preheader:                              ; preds = %311
  %313 = sext i32 %197 to i64
  br label %.lr.ph268

.lr.ph268:                                        ; preds = %.lr.ph268.preheader, %.lr.ph268
  %indvars.iv357 = phi i64 [ %313, %.lr.ph268.preheader ], [ %indvars.iv.next358, %.lr.ph268 ]
  %314 = load ptr, ptr %10, align 8, !tbaa !11
  %315 = load ptr, ptr %192, align 8, !tbaa !36
  %316 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv357
  %317 = load i32, ptr %316, align 4, !tbaa !15
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds ptr, ptr %315, i64 %318
  %320 = load ptr, ptr %319, align 8, !tbaa !11
  %321 = call double @svm_predict(ptr noundef %314, ptr noundef %320)
  %322 = load i32, ptr %316, align 4, !tbaa !15
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds double, ptr %3, i64 %323
  store double %321, ptr %324, align 8, !tbaa !38
  %indvars.iv.next358 = add nsw i64 %indvars.iv357, 1
  %lftr.wideiv360 = trunc i64 %indvars.iv.next358 to i32
  %exitcond361.not = icmp eq i32 %199, %lftr.wideiv360
  br i1 %exitcond361.not, label %.loopexit, label %.lr.ph268, !llvm.loop !43

.loopexit:                                        ; preds = %.lr.ph268, %311, %._crit_edge265
  call void @svm_free_and_destroy_model(ptr noundef nonnull %10)
  %325 = load ptr, ptr %190, align 8, !tbaa !36
  call void @free(ptr noundef %325) #12
  %326 = load ptr, ptr %191, align 8, !tbaa !37
  call void @free(ptr noundef %326) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #12
  %exitcond366.not = icmp eq i64 %indvars.iv.next363, %wide.trip.count365
  br i1 %exitcond366.not, label %._crit_edge272, label %196, !llvm.loop !44

._crit_edge272:                                   ; preds = %.loopexit, %.preheader211, %.loopexit212
  call void @free(ptr noundef %23) #12
  call void @free(ptr noundef %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #12
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local i32 @svm_get_nr_class(ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare dso_local double @svm_predict_probability(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local double @svm_predict(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @svm_free_and_destroy_model(ptr noundef) local_unnamed_addr #7

; 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) #8

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #10

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #10

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

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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress 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 #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { nounwind allocsize(0) }
attributes #12 = { nounwind }
attributes #13 = { 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 = !{!6, !7, i64 0}
!6 = !{!"_ZTS11svm_problem", !7, i64 0, !10, i64 8, !10, i64 16}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!10, !10, i64 0}
!12 = !{!13, !7, i64 0}
!13 = !{!"_ZTS13svm_parameter", !7, i64 0, !7, i64 4, !7, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !7, i64 56, !10, i64 64, !10, i64 72, !14, i64 80, !14, i64 88, !7, i64 96, !7, i64 100}
!14 = !{!"double", !8, i64 0}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17, !18, !19}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.unroll.disable"}
!26 = distinct !{!26, !17, !19, !18}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17, !18, !19}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !17, !19, !18}
!34 = distinct !{!34, !17}
!35 = distinct !{!35, !17}
!36 = !{!6, !10, i64 16}
!37 = !{!6, !10, i64 8}
!38 = !{!14, !14, i64 0}
!39 = distinct !{!39, !17}
!40 = distinct !{!40, !17}
!41 = !{!13, !7, i64 100}
!42 = distinct !{!42, !17}
!43 = distinct !{!43, !17}
!44 = distinct !{!44, !17}


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