; LLVM IR from QiaoLiuHit/LSOTB-TIR :: vlfeat-0.9.19/vl (mser)

; 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._VlMserFilt = type { i32, ptr, i32, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, i32, i32, double, double, double, double, %struct._VlMserStats }
%struct._VlMserStats = type { i32, i32, i32, i32, i32, i32 }
%struct._VlMserReg = type { i32, i32, i32, i32 }

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

declare ptr @vl_malloc(i64 noundef) #1

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

declare void @vl_free(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @vl_mser_ell_fit(ptr noundef %0) #3 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca float, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  %26 = load ptr, ptr %2, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct._VlMserFilt, ptr %26, i32 0, i32 2
  %28 = load i32, ptr %27, align 8, !tbaa !9
  store i32 %28, ptr %3, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  %29 = load ptr, ptr %2, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct._VlMserFilt, ptr %29, i32 0, i32 20
  %31 = load i32, ptr %30, align 8, !tbaa !15
  store i32 %31, ptr %4, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %32 = load ptr, ptr %2, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct._VlMserFilt, ptr %32, i32 0, i32 1
  %34 = load ptr, ptr %33, align 8, !tbaa !16
  store ptr %34, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  %35 = load ptr, ptr %2, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct._VlMserFilt, ptr %35, i32 0, i32 0
  %37 = load i32, ptr %36, align 8, !tbaa !17
  store i32 %37, ptr %6, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %38 = load ptr, ptr %2, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct._VlMserFilt, ptr %38, i32 0, i32 3
  %40 = load ptr, ptr %39, align 8, !tbaa !18
  store ptr %40, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  %41 = load ptr, ptr %2, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct._VlMserFilt, ptr %41, i32 0, i32 8
  %43 = load i32, ptr %42, align 8, !tbaa !19
  store i32 %43, ptr %8, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %44 = load ptr, ptr %2, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct._VlMserFilt, ptr %44, i32 0, i32 7
  %46 = load ptr, ptr %45, align 8, !tbaa !20
  store ptr %46, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct._VlMserFilt, ptr %47, i32 0, i32 9
  %49 = load ptr, ptr %48, align 8, !tbaa !21
  store ptr %49, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %50 = load ptr, ptr %2, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct._VlMserFilt, ptr %50, i32 0, i32 11
  %52 = load ptr, ptr %51, align 8, !tbaa !22
  store ptr %52, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %53 = load ptr, ptr %2, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct._VlMserFilt, ptr %53, i32 0, i32 13
  %55 = load i32, ptr %54, align 4, !tbaa !23
  store i32 %55, ptr %12, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %56 = load ptr, ptr %2, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct._VlMserFilt, ptr %56, i32 0, i32 16
  %58 = load ptr, ptr %57, align 8, !tbaa !24
  store ptr %58, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %59 = load ptr, ptr %2, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct._VlMserFilt, ptr %59, i32 0, i32 17
  %61 = load ptr, ptr %60, align 8, !tbaa !25
  store ptr %61, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct._VlMserFilt, ptr %62, i32 0, i32 19
  %64 = load i32, ptr %63, align 4, !tbaa !26
  %65 = load ptr, ptr %2, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct._VlMserFilt, ptr %65, i32 0, i32 13
  %67 = load i32, ptr %66, align 4, !tbaa !23
  %68 = icmp eq i32 %64, %67
  br i1 %68, label %69, label %70

69:                                               ; preds = %1
  store i32 1, ptr %19, align 4
  br label %354

70:                                               ; preds = %1
  %71 = load ptr, ptr %2, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct._VlMserFilt, ptr %71, i32 0, i32 18
  %73 = load i32, ptr %72, align 8, !tbaa !27
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct._VlMserFilt, ptr %74, i32 0, i32 13
  %76 = load i32, ptr %75, align 4, !tbaa !23
  %77 = icmp slt i32 %73, %76
  br i1 %77, label %78, label %106

78:                                               ; preds = %70
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct._VlMserFilt, ptr %79, i32 0, i32 17
  %81 = load ptr, ptr %80, align 8, !tbaa !25
  %82 = icmp ne ptr %81, null
  br i1 %82, label %83, label %87

83:                                               ; preds = %78
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct._VlMserFilt, ptr %84, i32 0, i32 17
  %86 = load ptr, ptr %85, align 8, !tbaa !25
  call void @vl_free(ptr noundef %86)
  br label %87

87:                                               ; preds = %83, %78
  %88 = load ptr, ptr %2, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct._VlMserFilt, ptr %88, i32 0, i32 13
  %90 = load i32, ptr %89, align 4, !tbaa !23
  %91 = sext i32 %90 to i64
  %92 = mul i64 4, %91
  %93 = load ptr, ptr %2, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct._VlMserFilt, ptr %93, i32 0, i32 20
  %95 = load i32, ptr %94, align 8, !tbaa !15
  %96 = sext i32 %95 to i64
  %97 = mul i64 %92, %96
  %98 = call ptr @vl_malloc(i64 noundef %97)
  %99 = load ptr, ptr %2, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct._VlMserFilt, ptr %99, i32 0, i32 17
  store ptr %98, ptr %100, align 8, !tbaa !25
  %101 = load ptr, ptr %2, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct._VlMserFilt, ptr %101, i32 0, i32 13
  %103 = load i32, ptr %102, align 4, !tbaa !23
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct._VlMserFilt, ptr %104, i32 0, i32 18
  store i32 %103, ptr %105, align 8, !tbaa !27
  br label %106

106:                                              ; preds = %87, %70
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct._VlMserFilt, ptr %107, i32 0, i32 16
  %109 = load ptr, ptr %108, align 8, !tbaa !24
  %110 = icmp eq ptr %109, null
  br i1 %110, label %111, label %120

111:                                              ; preds = %106
  %112 = load ptr, ptr %2, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct._VlMserFilt, ptr %112, i32 0, i32 2
  %114 = load i32, ptr %113, align 8, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = mul i64 4, %115
  %117 = call ptr @vl_malloc(i64 noundef %116)
  %118 = load ptr, ptr %2, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct._VlMserFilt, ptr %118, i32 0, i32 16
  store ptr %117, ptr %119, align 8, !tbaa !24
  br label %120

120:                                              ; preds = %111, %106
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct._VlMserFilt, ptr %121, i32 0, i32 16
  %123 = load ptr, ptr %122, align 8, !tbaa !24
  store ptr %123, ptr %13, align 8, !tbaa !5
  %124 = load ptr, ptr %2, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct._VlMserFilt, ptr %124, i32 0, i32 17
  %126 = load ptr, ptr %125, align 8, !tbaa !25
  store ptr %126, ptr %14, align 8, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !14
  br label %127

127:                                              ; preds = %267, %120
  %128 = load i32, ptr %15, align 4, !tbaa !14
  %129 = load ptr, ptr %2, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct._VlMserFilt, ptr %129, i32 0, i32 20
  %131 = load i32, ptr %130, align 8, !tbaa !15
  %132 = icmp slt i32 %128, %131
  br i1 %132, label %133, label %270

133:                                              ; preds = %127
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = load i32, ptr %6, align 4, !tbaa !14
  %136 = sext i32 %135 to i64
  %137 = mul i64 4, %136
  call void @llvm.memset.p0.i64(ptr align 4 %134, i8 0, i64 %137, i1 false)
  %138 = load i32, ptr %15, align 4, !tbaa !14
  %139 = load i32, ptr %6, align 4, !tbaa !14
  %140 = icmp slt i32 %138, %139
  br i1 %140, label %141, label %164

141:                                              ; preds = %133
  store i32 0, ptr %16, align 4, !tbaa !14
  br label %142

142:                                              ; preds = %160, %141
  %143 = load i32, ptr %16, align 4, !tbaa !14
  %144 = load i32, ptr %3, align 4, !tbaa !14
  %145 = icmp slt i32 %143, %144
  br i1 %145, label %146, label %163

146:                                              ; preds = %142
  %147 = load ptr, ptr %7, align 8, !tbaa !5
  %148 = load i32, ptr %15, align 4, !tbaa !14
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds i32, ptr %147, i64 %149
  %151 = load i32, ptr %150, align 4, !tbaa !14
  %152 = sitofp i32 %151 to float
  %153 = load ptr, ptr %13, align 8, !tbaa !5
  %154 = load i32, ptr %16, align 4, !tbaa !14
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds float, ptr %153, i64 %155
  store float %152, ptr %156, align 4, !tbaa !28
  %157 = load i32, ptr %6, align 4, !tbaa !14
  %158 = load ptr, ptr %5, align 8, !tbaa !5
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  call void @adv(i32 noundef %157, ptr noundef %158, ptr noundef %159)
  br label %160

160:                                              ; preds = %146
  %161 = load i32, ptr %16, align 4, !tbaa !14
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr %16, align 4, !tbaa !14
  br label %142, !llvm.loop !30

163:                                              ; preds = %142
  br label %208

164:                                              ; preds = %133
  %165 = load i32, ptr %15, align 4, !tbaa !14
  %166 = load i32, ptr %6, align 4, !tbaa !14
  %167 = sub nsw i32 %165, %166
  store i32 %167, ptr %17, align 4, !tbaa !14
  store i32 0, ptr %18, align 4, !tbaa !14
  br label %168

168:                                              ; preds = %172, %164
  %169 = load i32, ptr %17, align 4, !tbaa !14
  %170 = load i32, ptr %18, align 4, !tbaa !14
  %171 = icmp sgt i32 %169, %170
  br i1 %171, label %172, label %179

172:                                              ; preds = %168
  %173 = load i32, ptr %18, align 4, !tbaa !14
  %174 = add nsw i32 %173, 1
  %175 = load i32, ptr %17, align 4, !tbaa !14
  %176 = sub nsw i32 %175, %174
  store i32 %176, ptr %17, align 4, !tbaa !14
  %177 = load i32, ptr %18, align 4, !tbaa !14
  %178 = add nsw i32 %177, 1
  store i32 %178, ptr %18, align 4, !tbaa !14
  br label %168, !llvm.loop !32

179:                                              ; preds = %168
  store i32 0, ptr %16, align 4, !tbaa !14
  br label %180

180:                                              ; preds = %204, %179
  %181 = load i32, ptr %16, align 4, !tbaa !14
  %182 = load i32, ptr %3, align 4, !tbaa !14
  %183 = icmp slt i32 %181, %182
  br i1 %183, label %184, label %207

184:                                              ; preds = %180
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  %186 = load i32, ptr %17, align 4, !tbaa !14
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds i32, ptr %185, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !14
  %190 = load ptr, ptr %7, align 8, !tbaa !5
  %191 = load i32, ptr %18, align 4, !tbaa !14
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds i32, ptr %190, i64 %192
  %194 = load i32, ptr %193, align 4, !tbaa !14
  %195 = mul nsw i32 %189, %194
  %196 = sitofp i32 %195 to float
  %197 = load ptr, ptr %13, align 8, !tbaa !5
  %198 = load i32, ptr %16, align 4, !tbaa !14
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds float, ptr %197, i64 %199
  store float %196, ptr %200, align 4, !tbaa !28
  %201 = load i32, ptr %6, align 4, !tbaa !14
  %202 = load ptr, ptr %5, align 8, !tbaa !5
  %203 = load ptr, ptr %7, align 8, !tbaa !5
  call void @adv(i32 noundef %201, ptr noundef %202, ptr noundef %203)
  br label %204

204:                                              ; preds = %184
  %205 = load i32, ptr %16, align 4, !tbaa !14
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %16, align 4, !tbaa !14
  br label %180, !llvm.loop !33

207:                                              ; preds = %180
  br label %208

208:                                              ; preds = %207, %163
  store i32 0, ptr %17, align 4, !tbaa !14
  br label %209

209:                                              ; preds = %236, %208
  %210 = load i32, ptr %17, align 4, !tbaa !14
  %211 = load i32, ptr %8, align 4, !tbaa !14
  %212 = icmp slt i32 %210, %211
  br i1 %212, label %213, label %239

213:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %214 = load ptr, ptr %9, align 8, !tbaa !5
  %215 = load i32, ptr %17, align 4, !tbaa !14
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds i32, ptr %214, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !14
  store i32 %218, ptr %20, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %219 = load ptr, ptr %10, align 8, !tbaa !5
  %220 = load i32, ptr %20, align 4, !tbaa !14
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds %struct._VlMserReg, ptr %219, i64 %221
  %223 = getelementptr inbounds %struct._VlMserReg, ptr %222, i32 0, i32 0
  %224 = load i32, ptr %223, align 4, !tbaa !34
  store i32 %224, ptr %21, align 4, !tbaa !14
  %225 = load ptr, ptr %13, align 8, !tbaa !5
  %226 = load i32, ptr %20, align 4, !tbaa !14
  %227 = zext i32 %226 to i64
  %228 = getelementptr inbounds float, ptr %225, i64 %227
  %229 = load float, ptr %228, align 4, !tbaa !28
  %230 = load ptr, ptr %13, align 8, !tbaa !5
  %231 = load i32, ptr %21, align 4, !tbaa !14
  %232 = zext i32 %231 to i64
  %233 = getelementptr inbounds float, ptr %230, i64 %232
  %234 = load float, ptr %233, align 4, !tbaa !28
  %235 = fadd float %234, %229
  store float %235, ptr %233, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %236

236:                                              ; preds = %213
  %237 = load i32, ptr %17, align 4, !tbaa !14
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %17, align 4, !tbaa !14
  br label %209, !llvm.loop !36

239:                                              ; preds = %209
  store i32 0, ptr %17, align 4, !tbaa !14
  br label %240

240:                                              ; preds = %263, %239
  %241 = load i32, ptr %17, align 4, !tbaa !14
  %242 = load i32, ptr %12, align 4, !tbaa !14
  %243 = icmp slt i32 %241, %242
  br i1 %243, label %244, label %266

244:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %245 = load ptr, ptr %11, align 8, !tbaa !5
  %246 = load i32, ptr %17, align 4, !tbaa !14
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds i32, ptr %245, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !14
  store i32 %249, ptr %22, align 4, !tbaa !14
  %250 = load ptr, ptr %13, align 8, !tbaa !5
  %251 = load i32, ptr %22, align 4, !tbaa !14
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds float, ptr %250, i64 %252
  %254 = load float, ptr %253, align 4, !tbaa !28
  %255 = load ptr, ptr %14, align 8, !tbaa !5
  %256 = load i32, ptr %15, align 4, !tbaa !14
  %257 = load i32, ptr %4, align 4, !tbaa !14
  %258 = load i32, ptr %17, align 4, !tbaa !14
  %259 = mul nsw i32 %257, %258
  %260 = add nsw i32 %256, %259
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds float, ptr %255, i64 %261
  store float %254, ptr %262, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %263

263:                                              ; preds = %244
  %264 = load i32, ptr %17, align 4, !tbaa !14
  %265 = add nsw i32 %264, 1
  store i32 %265, ptr %17, align 4, !tbaa !14
  br label %240, !llvm.loop !37

266:                                              ; preds = %240
  br label %267

267:                                              ; preds = %266
  %268 = load i32, ptr %15, align 4, !tbaa !14
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %15, align 4, !tbaa !14
  br label %127, !llvm.loop !38

270:                                              ; preds = %127
  store i32 0, ptr %16, align 4, !tbaa !14
  br label %271

271:                                              ; preds = %347, %270
  %272 = load i32, ptr %16, align 4, !tbaa !14
  %273 = load i32, ptr %12, align 4, !tbaa !14
  %274 = icmp slt i32 %272, %273
  br i1 %274, label %275, label %350

275:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %276 = load ptr, ptr %14, align 8, !tbaa !5
  %277 = load i32, ptr %16, align 4, !tbaa !14
  %278 = load i32, ptr %4, align 4, !tbaa !14
  %279 = mul nsw i32 %277, %278
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds float, ptr %276, i64 %280
  store ptr %281, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %282 = load ptr, ptr %11, align 8, !tbaa !5
  %283 = load i32, ptr %16, align 4, !tbaa !14
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds i32, ptr %282, i64 %284
  %286 = load i32, ptr %285, align 4, !tbaa !14
  store i32 %286, ptr %24, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %287 = load ptr, ptr %10, align 8, !tbaa !5
  %288 = load i32, ptr %24, align 4, !tbaa !14
  %289 = zext i32 %288 to i64
  %290 = getelementptr inbounds %struct._VlMserReg, ptr %287, i64 %289
  %291 = getelementptr inbounds %struct._VlMserReg, ptr %290, i32 0, i32 3
  %292 = load i32, ptr %291, align 4, !tbaa !39
  %293 = uitofp i32 %292 to float
  store float %293, ptr %25, align 4, !tbaa !28
  store i32 0, ptr %15, align 4, !tbaa !14
  br label %294

294:                                              ; preds = %343, %275
  %295 = load i32, ptr %15, align 4, !tbaa !14
  %296 = load i32, ptr %4, align 4, !tbaa !14
  %297 = icmp slt i32 %295, %296
  br i1 %297, label %298, label %346

298:                                              ; preds = %294
  %299 = load float, ptr %25, align 4, !tbaa !28
  %300 = load ptr, ptr %23, align 8, !tbaa !5
  %301 = load i32, ptr %15, align 4, !tbaa !14
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds float, ptr %300, i64 %302
  %304 = load float, ptr %303, align 4, !tbaa !28
  %305 = fdiv float %304, %299
  store float %305, ptr %303, align 4, !tbaa !28
  %306 = load i32, ptr %15, align 4, !tbaa !14
  %307 = load i32, ptr %6, align 4, !tbaa !14
  %308 = icmp sge i32 %306, %307
  br i1 %308, label %309, label %342

309:                                              ; preds = %298
  %310 = load i32, ptr %15, align 4, !tbaa !14
  %311 = load i32, ptr %6, align 4, !tbaa !14
  %312 = sub nsw i32 %310, %311
  store i32 %312, ptr %17, align 4, !tbaa !14
  store i32 0, ptr %18, align 4, !tbaa !14
  br label %313

313:                                              ; preds = %317, %309
  %314 = load i32, ptr %17, align 4, !tbaa !14
  %315 = load i32, ptr %18, align 4, !tbaa !14
  %316 = icmp sgt i32 %314, %315
  br i1 %316, label %317, label %324

317:                                              ; preds = %313
  %318 = load i32, ptr %18, align 4, !tbaa !14
  %319 = add nsw i32 %318, 1
  %320 = load i32, ptr %17, align 4, !tbaa !14
  %321 = sub nsw i32 %320, %319
  store i32 %321, ptr %17, align 4, !tbaa !14
  %322 = load i32, ptr %18, align 4, !tbaa !14
  %323 = add nsw i32 %322, 1
  store i32 %323, ptr %18, align 4, !tbaa !14
  br label %313, !llvm.loop !40

324:                                              ; preds = %313
  %325 = load ptr, ptr %23, align 8, !tbaa !5
  %326 = load i32, ptr %17, align 4, !tbaa !14
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds float, ptr %325, i64 %327
  %329 = load float, ptr %328, align 4, !tbaa !28
  %330 = load ptr, ptr %23, align 8, !tbaa !5
  %331 = load i32, ptr %18, align 4, !tbaa !14
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds float, ptr %330, i64 %332
  %334 = load float, ptr %333, align 4, !tbaa !28
  %335 = load ptr, ptr %23, align 8, !tbaa !5
  %336 = load i32, ptr %15, align 4, !tbaa !14
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds float, ptr %335, i64 %337
  %339 = load float, ptr %338, align 4, !tbaa !28
  %340 = fneg float %329
  %341 = call float @llvm.fmuladd.f32(float %340, float %334, float %339)
  store float %341, ptr %338, align 4, !tbaa !28
  br label %342

342:                                              ; preds = %324, %298
  br label %343

343:                                              ; preds = %342
  %344 = load i32, ptr %15, align 4, !tbaa !14
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %15, align 4, !tbaa !14
  br label %294, !llvm.loop !41

346:                                              ; preds = %294
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %347

347:                                              ; preds = %346
  %348 = load i32, ptr %16, align 4, !tbaa !14
  %349 = add nsw i32 %348, 1
  store i32 %349, ptr %16, align 4, !tbaa !14
  br label %271, !llvm.loop !42

350:                                              ; preds = %271
  %351 = load i32, ptr %12, align 4, !tbaa !14
  %352 = load ptr, ptr %2, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct._VlMserFilt, ptr %352, i32 0, i32 19
  store i32 %351, ptr %353, align 4, !tbaa !26
  store i32 0, ptr %19, align 4
  br label %354

354:                                              ; preds = %350, %69
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, 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 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  %355 = load i32, ptr %19, align 4
  switch i32 %355, label %357 [
    i32 0, label %356
    i32 1, label %356
  ]

356:                                              ; preds = %354, %354
  ret void

357:                                              ; preds = %354
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @adv(i32 noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 16}
!10 = !{!"_VlMserFilt", !11, i64 0, !6, i64 8, !11, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !11, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !6, i64 112, !6, i64 120, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !13, i64 184}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!"_VlMserStats", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20}
!14 = !{!11, !11, i64 0}
!15 = !{!10, !11, i64 136}
!16 = !{!10, !6, i64 8}
!17 = !{!10, !11, i64 0}
!18 = !{!10, !6, i64 24}
!19 = !{!10, !11, i64 64}
!20 = !{!10, !6, i64 56}
!21 = !{!10, !6, i64 72}
!22 = !{!10, !6, i64 88}
!23 = !{!10, !11, i64 100}
!24 = !{!10, !6, i64 112}
!25 = !{!10, !6, i64 120}
!26 = !{!10, !11, i64 132}
!27 = !{!10, !11, i64 128}
!28 = !{!29, !29, i64 0}
!29 = !{!"float", !7, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = distinct !{!33, !31}
!34 = !{!35, !11, i64 0}
!35 = !{!"_VlMserReg", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = !{!35, !11, i64 12}
!40 = distinct !{!40, !31}
!41 = distinct !{!41, !31}
!42 = distinct !{!42, !31}


; 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._VlMserReg = type { i32, i32, i32, i32 }

declare ptr @vl_malloc(i64 noundef) local_unnamed_addr #0

declare void @vl_free(ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local void @vl_mser_ell_fit(ptr nocapture noundef %0) local_unnamed_addr #2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 16
  %3 = load i32, ptr %2, align 8, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 136
  %5 = load i32, ptr %4, align 8, !tbaa !13
  %6 = getelementptr inbounds i8, ptr %0, i64 8
  %7 = load ptr, ptr %6, align 8, !tbaa !14
  %8 = load i32, ptr %0, align 8, !tbaa !15
  %9 = getelementptr inbounds i8, ptr %0, i64 24
  %10 = load ptr, ptr %9, align 8, !tbaa !16
  %11 = getelementptr inbounds i8, ptr %0, i64 64
  %12 = load i32, ptr %11, align 8, !tbaa !17
  %13 = getelementptr inbounds i8, ptr %0, i64 56
  %14 = load ptr, ptr %13, align 8, !tbaa !18
  %15 = getelementptr inbounds i8, ptr %0, i64 72
  %16 = load ptr, ptr %15, align 8, !tbaa !19
  %17 = getelementptr inbounds i8, ptr %0, i64 88
  %18 = load ptr, ptr %17, align 8, !tbaa !20
  %19 = getelementptr inbounds i8, ptr %0, i64 100
  %20 = load i32, ptr %19, align 4, !tbaa !21
  %21 = getelementptr inbounds i8, ptr %0, i64 112
  %22 = getelementptr inbounds i8, ptr %0, i64 120
  %23 = getelementptr inbounds i8, ptr %0, i64 132
  %24 = load i32, ptr %23, align 4, !tbaa !22
  %25 = icmp eq i32 %24, %20
  br i1 %25, label %185, label %26

26:                                               ; preds = %1
  %27 = getelementptr inbounds i8, ptr %0, i64 128
  %28 = load i32, ptr %27, align 8, !tbaa !23
  %29 = icmp slt i32 %28, %20
  br i1 %29, label %30, label %42

30:                                               ; preds = %26
  %31 = load ptr, ptr %22, align 8, !tbaa !24
  %.not = icmp eq ptr %31, null
  br i1 %.not, label %33, label %32

32:                                               ; preds = %30
  tail call void @vl_free(ptr noundef nonnull %31) #5
  %.pre = load i32, ptr %19, align 4, !tbaa !21
  %.pre198 = load i32, ptr %4, align 8, !tbaa !13
  br label %33

33:                                               ; preds = %32, %30
  %34 = phi i32 [ %.pre198, %32 ], [ %5, %30 ]
  %35 = phi i32 [ %.pre, %32 ], [ %20, %30 ]
  %36 = sext i32 %35 to i64
  %37 = shl nsw i64 %36, 2
  %38 = sext i32 %34 to i64
  %39 = mul i64 %37, %38
  %40 = tail call ptr @vl_malloc(i64 noundef %39) #5
  store ptr %40, ptr %22, align 8, !tbaa !24
  %41 = load i32, ptr %19, align 4, !tbaa !21
  store i32 %41, ptr %27, align 8, !tbaa !23
  br label %42

42:                                               ; preds = %33, %26
  %43 = load ptr, ptr %21, align 8, !tbaa !25
  %44 = icmp eq ptr %43, null
  br i1 %44, label %45, label %50

45:                                               ; preds = %42
  %46 = load i32, ptr %2, align 8, !tbaa !5
  %47 = sext i32 %46 to i64
  %48 = shl nsw i64 %47, 2
  %49 = tail call ptr @vl_malloc(i64 noundef %48) #5
  store ptr %49, ptr %21, align 8, !tbaa !25
  br label %50

50:                                               ; preds = %45, %42
  %51 = phi ptr [ %49, %45 ], [ %43, %42 ]
  %52 = load ptr, ptr %22, align 8, !tbaa !24
  %53 = load i32, ptr %4, align 8, !tbaa !13
  %54 = icmp sgt i32 %53, 0
  br i1 %54, label %.lr.ph149, label %.preheader

.lr.ph149:                                        ; preds = %50
  %55 = sext i32 %8 to i64
  %56 = shl nsw i64 %55, 2
  %57 = icmp sgt i32 %3, 0
  %58 = icmp sgt i32 %12, 0
  %59 = icmp sgt i32 %20, 0
  %60 = sext i32 %5 to i64
  %wide.trip.count = zext nneg i32 %3 to i64
  %wide.trip.count173 = zext nneg i32 %3 to i64
  %wide.trip.count178 = zext i32 %12 to i64
  %wide.trip.count183 = zext i32 %20 to i64
  %xtraiter = and i64 %wide.trip.count178, 1
  %61 = icmp eq i32 %12, 1
  %unroll_iter = and i64 %wide.trip.count178, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %xtraiter211 = and i64 %wide.trip.count183, 3
  %62 = icmp ult i32 %20, 4
  %unroll_iter213 = and i64 %wide.trip.count183, 2147483644
  %lcmp.mod212.not = icmp eq i64 %xtraiter211, 0
  br label %95

.preheader:                                       ; preds = %._crit_edge, %50
  %63 = icmp sgt i32 %20, 0
  %64 = icmp sgt i32 %5, 0
  %or.cond = select i1 %63, i1 %64, i1 false
  br i1 %or.cond, label %.lr.ph159.us.preheader, label %._crit_edge163

.lr.ph159.us.preheader:                           ; preds = %.preheader
  %65 = sext i32 %8 to i64
  %66 = zext nneg i32 %5 to i64
  %wide.trip.count196 = zext nneg i32 %20 to i64
  br label %.lr.ph159.us

.lr.ph159.us:                                     ; preds = %.lr.ph159.us.preheader, %._crit_edge160.us
  %indvars.iv193 = phi i64 [ 0, %.lr.ph159.us.preheader ], [ %indvars.iv.next194, %._crit_edge160.us ]
  %67 = mul nuw nsw i64 %indvars.iv193, %66
  %68 = getelementptr inbounds float, ptr %52, i64 %67
  %69 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv193
  %70 = load i32, ptr %69, align 4, !tbaa !26
  %71 = zext i32 %70 to i64
  %72 = getelementptr inbounds %struct._VlMserReg, ptr %16, i64 %71, i32 3
  %73 = load i32, ptr %72, align 4, !tbaa !27
  %74 = uitofp i32 %73 to float
  br label %75

75:                                               ; preds = %.lr.ph159.us, %94
  %indvars.iv188 = phi i64 [ 0, %.lr.ph159.us ], [ %indvars.iv.next189, %94 ]
  %76 = getelementptr inbounds float, ptr %68, i64 %indvars.iv188
  %77 = load float, ptr %76, align 4, !tbaa !29
  %78 = fdiv float %77, %74
  store float %78, ptr %76, align 4, !tbaa !29
  %.not130.us = icmp slt i64 %indvars.iv188, %65
  br i1 %.not130.us, label %94, label %79

79:                                               ; preds = %75
  %80 = sub nsw i64 %indvars.iv188, %65
  %81 = icmp sgt i64 %80, 0
  %82 = trunc nsw i64 %80 to i32
  br i1 %81, label %.lr.ph153.us, label %._crit_edge154.us

._crit_edge154.us:                                ; preds = %.lr.ph153.us, %79
  %.1124.lcssa.us = phi i32 [ 0, %79 ], [ %91, %.lr.ph153.us ]
  %.3.lcssa.us = phi i32 [ %82, %79 ], [ %92, %.lr.ph153.us ]
  %83 = sext i32 %.3.lcssa.us to i64
  %84 = getelementptr inbounds float, ptr %68, i64 %83
  %85 = load float, ptr %84, align 4, !tbaa !29
  %86 = zext nneg i32 %.1124.lcssa.us to i64
  %87 = getelementptr inbounds float, ptr %68, i64 %86
  %88 = load float, ptr %87, align 4, !tbaa !29
  %89 = fneg float %85
  %90 = tail call float @llvm.fmuladd.f32(float %89, float %88, float %78)
  store float %90, ptr %76, align 4, !tbaa !29
  br label %94

.lr.ph153.us:                                     ; preds = %79, %.lr.ph153.us
  %.3151.us = phi i32 [ %92, %.lr.ph153.us ], [ %82, %79 ]
  %.1124150.us = phi i32 [ %91, %.lr.ph153.us ], [ 0, %79 ]
  %91 = add nuw nsw i32 %.1124150.us, 1
  %92 = sub nsw i32 %.3151.us, %91
  %93 = icmp sgt i32 %92, %91
  br i1 %93, label %.lr.ph153.us, label %._crit_edge154.us, !llvm.loop !31

94:                                               ; preds = %._crit_edge154.us, %75
  %indvars.iv.next189 = add nuw nsw i64 %indvars.iv188, 1
  %exitcond192.not = icmp eq i64 %indvars.iv.next189, %66
  br i1 %exitcond192.not, label %._crit_edge160.us, label %75, !llvm.loop !33

._crit_edge160.us:                                ; preds = %94
  %indvars.iv.next194 = add nuw nsw i64 %indvars.iv193, 1
  %exitcond197.not = icmp eq i64 %indvars.iv.next194, %wide.trip.count196
  br i1 %exitcond197.not, label %._crit_edge163, label %.lr.ph159.us, !llvm.loop !34

95:                                               ; preds = %.lr.ph149, %._crit_edge
  %indvars.iv185 = phi i64 [ 0, %.lr.ph149 ], [ %indvars.iv.next186, %._crit_edge ]
  tail call void @llvm.memset.p0.i64(ptr align 4 %10, i8 0, i64 %56, i1 false)
  %96 = icmp slt i64 %indvars.iv185, %55
  br i1 %96, label %.preheader132, label %102

.preheader132:                                    ; preds = %95
  br i1 %57, label %.lr.ph141, label %.loopexit

.lr.ph141:                                        ; preds = %.preheader132
  %97 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv185
  br label %98

98:                                               ; preds = %.lr.ph141, %98
  %indvars.iv170 = phi i64 [ 0, %.lr.ph141 ], [ %indvars.iv.next171, %98 ]
  %99 = load i32, ptr %97, align 4, !tbaa !26
  %100 = sitofp i32 %99 to float
  %101 = getelementptr inbounds float, ptr %51, i64 %indvars.iv170
  store float %100, ptr %101, align 4, !tbaa !29
  tail call void @adv(i32 noundef %8, ptr noundef %7, ptr noundef %10)
  %indvars.iv.next171 = add nuw nsw i64 %indvars.iv170, 1
  %exitcond174.not = icmp eq i64 %indvars.iv.next171, %wide.trip.count173
  br i1 %exitcond174.not, label %.loopexit, label %98, !llvm.loop !35

102:                                              ; preds = %95
  %103 = sub nsw i64 %indvars.iv185, %55
  %104 = icmp sgt i64 %103, 0
  %105 = trunc nsw i64 %103 to i32
  br i1 %104, label %.lr.ph, label %.preheader133

.preheader133:                                    ; preds = %.lr.ph, %102
  %.0123.lcssa = phi i32 [ 0, %102 ], [ %110, %.lr.ph ]
  %.0120.lcssa = phi i32 [ %105, %102 ], [ %111, %.lr.ph ]
  br i1 %57, label %.lr.ph139, label %.loopexit

.lr.ph139:                                        ; preds = %.preheader133
  %106 = sext i32 %.0120.lcssa to i64
  %107 = getelementptr inbounds i32, ptr %10, i64 %106
  %108 = zext nneg i32 %.0123.lcssa to i64
  %109 = getelementptr inbounds i32, ptr %10, i64 %108
  br label %113

.lr.ph:                                           ; preds = %102, %.lr.ph
  %.0120136 = phi i32 [ %111, %.lr.ph ], [ %105, %102 ]
  %.0123135 = phi i32 [ %110, %.lr.ph ], [ 0, %102 ]
  %110 = add nuw nsw i32 %.0123135, 1
  %111 = sub nsw i32 %.0120136, %110
  %112 = icmp sgt i32 %111, %110
  br i1 %112, label %.lr.ph, label %.preheader133, !llvm.loop !36

113:                                              ; preds = %.lr.ph139, %113
  %indvars.iv = phi i64 [ 0, %.lr.ph139 ], [ %indvars.iv.next, %113 ]
  %114 = load i32, ptr %107, align 4, !tbaa !26
  %115 = load i32, ptr %109, align 4, !tbaa !26
  %116 = mul nsw i32 %115, %114
  %117 = sitofp i32 %116 to float
  %118 = getelementptr inbounds float, ptr %51, i64 %indvars.iv
  store float %117, ptr %118, align 4, !tbaa !29
  tail call void @adv(i32 noundef %8, ptr noundef %7, ptr noundef %10)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %113, !llvm.loop !37

.loopexit:                                        ; preds = %113, %98, %.preheader133, %.preheader132
  br i1 %58, label %.lr.ph143.preheader, label %.preheader131

.lr.ph143.preheader:                              ; preds = %.loopexit
  br i1 %61, label %.preheader131.loopexit.unr-lcssa, label %.lr.ph143

.preheader131.loopexit.unr-lcssa:                 ; preds = %.lr.ph143, %.lr.ph143.preheader
  %indvars.iv175.unr = phi i64 [ 0, %.lr.ph143.preheader ], [ %indvars.iv.next176.1, %.lr.ph143 ]
  br i1 %lcmp.mod.not, label %.preheader131, label %.lr.ph143.epil

.lr.ph143.epil:                                   ; preds = %.preheader131.loopexit.unr-lcssa
  %119 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv175.unr
  %120 = load i32, ptr %119, align 4, !tbaa !26
  %121 = zext i32 %120 to i64
  %122 = getelementptr inbounds %struct._VlMserReg, ptr %16, i64 %121
  %123 = load i32, ptr %122, align 4, !tbaa !38
  %124 = getelementptr inbounds float, ptr %51, i64 %121
  %125 = load float, ptr %124, align 4, !tbaa !29
  %126 = zext i32 %123 to i64
  %127 = getelementptr inbounds float, ptr %51, i64 %126
  %128 = load float, ptr %127, align 4, !tbaa !29
  %129 = fadd float %125, %128
  store float %129, ptr %127, align 4, !tbaa !29
  br label %.preheader131

.preheader131:                                    ; preds = %.lr.ph143.epil, %.preheader131.loopexit.unr-lcssa, %.loopexit
  br i1 %59, label %.lr.ph145.preheader, label %._crit_edge

.lr.ph145.preheader:                              ; preds = %.preheader131
  %invariant.gep = getelementptr float, ptr %52, i64 %indvars.iv185
  br i1 %62, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph145

.lr.ph143:                                        ; preds = %.lr.ph143.preheader, %.lr.ph143
  %indvars.iv175 = phi i64 [ %indvars.iv.next176.1, %.lr.ph143 ], [ 0, %.lr.ph143.preheader ]
  %niter = phi i64 [ %niter.next.1, %.lr.ph143 ], [ 0, %.lr.ph143.preheader ]
  %130 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv175
  %131 = load i32, ptr %130, align 4, !tbaa !26
  %132 = zext i32 %131 to i64
  %133 = getelementptr inbounds %struct._VlMserReg, ptr %16, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !38
  %135 = getelementptr inbounds float, ptr %51, i64 %132
  %136 = load float, ptr %135, align 4, !tbaa !29
  %137 = zext i32 %134 to i64
  %138 = getelementptr inbounds float, ptr %51, i64 %137
  %139 = load float, ptr %138, align 4, !tbaa !29
  %140 = fadd float %136, %139
  store float %140, ptr %138, align 4, !tbaa !29
  %indvars.iv.next176 = or disjoint i64 %indvars.iv175, 1
  %141 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv.next176
  %142 = load i32, ptr %141, align 4, !tbaa !26
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds %struct._VlMserReg, ptr %16, i64 %143
  %145 = load i32, ptr %144, align 4, !tbaa !38
  %146 = getelementptr inbounds float, ptr %51, i64 %143
  %147 = load float, ptr %146, align 4, !tbaa !29
  %148 = zext i32 %145 to i64
  %149 = getelementptr inbounds float, ptr %51, i64 %148
  %150 = load float, ptr %149, align 4, !tbaa !29
  %151 = fadd float %147, %150
  store float %151, ptr %149, align 4, !tbaa !29
  %indvars.iv.next176.1 = add nuw nsw i64 %indvars.iv175, 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 %.preheader131.loopexit.unr-lcssa, label %.lr.ph143, !llvm.loop !39

.lr.ph145:                                        ; preds = %.lr.ph145.preheader, %.lr.ph145
  %indvars.iv180 = phi i64 [ %indvars.iv.next181.3, %.lr.ph145 ], [ 0, %.lr.ph145.preheader ]
  %niter214 = phi i64 [ %niter214.next.3, %.lr.ph145 ], [ 0, %.lr.ph145.preheader ]
  %152 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv180
  %153 = load i32, ptr %152, align 4, !tbaa !26
  %154 = zext i32 %153 to i64
  %155 = getelementptr inbounds float, ptr %51, i64 %154
  %156 = load float, ptr %155, align 4, !tbaa !29
  %157 = mul nsw i64 %indvars.iv180, %60
  %gep = getelementptr float, ptr %invariant.gep, i64 %157
  store float %156, ptr %gep, align 4, !tbaa !29
  %indvars.iv.next181 = or disjoint i64 %indvars.iv180, 1
  %158 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next181
  %159 = load i32, ptr %158, align 4, !tbaa !26
  %160 = zext i32 %159 to i64
  %161 = getelementptr inbounds float, ptr %51, i64 %160
  %162 = load float, ptr %161, align 4, !tbaa !29
  %163 = mul nsw i64 %indvars.iv.next181, %60
  %gep.1 = getelementptr float, ptr %invariant.gep, i64 %163
  store float %162, ptr %gep.1, align 4, !tbaa !29
  %indvars.iv.next181.1 = or disjoint i64 %indvars.iv180, 2
  %164 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next181.1
  %165 = load i32, ptr %164, align 4, !tbaa !26
  %166 = zext i32 %165 to i64
  %167 = getelementptr inbounds float, ptr %51, i64 %166
  %168 = load float, ptr %167, align 4, !tbaa !29
  %169 = mul nsw i64 %indvars.iv.next181.1, %60
  %gep.2 = getelementptr float, ptr %invariant.gep, i64 %169
  store float %168, ptr %gep.2, align 4, !tbaa !29
  %indvars.iv.next181.2 = or disjoint i64 %indvars.iv180, 3
  %170 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next181.2
  %171 = load i32, ptr %170, align 4, !tbaa !26
  %172 = zext i32 %171 to i64
  %173 = getelementptr inbounds float, ptr %51, i64 %172
  %174 = load float, ptr %173, align 4, !tbaa !29
  %175 = mul nsw i64 %indvars.iv.next181.2, %60
  %gep.3 = getelementptr float, ptr %invariant.gep, i64 %175
  store float %174, ptr %gep.3, align 4, !tbaa !29
  %indvars.iv.next181.3 = add nuw nsw i64 %indvars.iv180, 4
  %niter214.next.3 = add i64 %niter214, 4
  %niter214.ncmp.3 = icmp eq i64 %niter214.next.3, %unroll_iter213
  br i1 %niter214.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph145, !llvm.loop !40

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph145, %.lr.ph145.preheader
  %indvars.iv180.unr = phi i64 [ 0, %.lr.ph145.preheader ], [ %indvars.iv.next181.3, %.lr.ph145 ]
  br i1 %lcmp.mod212.not, label %._crit_edge, label %.lr.ph145.epil

.lr.ph145.epil:                                   ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph145.epil
  %indvars.iv180.epil = phi i64 [ %indvars.iv.next181.epil, %.lr.ph145.epil ], [ %indvars.iv180.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph145.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %176 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv180.epil
  %177 = load i32, ptr %176, align 4, !tbaa !26
  %178 = zext i32 %177 to i64
  %179 = getelementptr inbounds float, ptr %51, i64 %178
  %180 = load float, ptr %179, align 4, !tbaa !29
  %181 = mul nsw i64 %indvars.iv180.epil, %60
  %gep.epil = getelementptr float, ptr %invariant.gep, i64 %181
  store float %180, ptr %gep.epil, align 4, !tbaa !29
  %indvars.iv.next181.epil = add nuw nsw i64 %indvars.iv180.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter211
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.lr.ph145.epil, !llvm.loop !41

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph145.epil, %.preheader131
  %indvars.iv.next186 = add nuw nsw i64 %indvars.iv185, 1
  %182 = load i32, ptr %4, align 8, !tbaa !13
  %183 = sext i32 %182 to i64
  %184 = icmp slt i64 %indvars.iv.next186, %183
  br i1 %184, label %95, label %.preheader, !llvm.loop !43

._crit_edge163:                                   ; preds = %._crit_edge160.us, %.preheader
  store i32 %20, ptr %23, align 4, !tbaa !22
  br label %185

185:                                              ; preds = %1, %._crit_edge163
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @adv(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #4

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { 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 = { inlinehint 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 #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 16}
!6 = !{!"_VlMserFilt", !7, i64 0, !10, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !10, i64 112, !10, i64 120, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !12, i64 184}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!"_VlMserStats", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20}
!13 = !{!6, !7, i64 136}
!14 = !{!6, !10, i64 8}
!15 = !{!6, !7, i64 0}
!16 = !{!6, !10, i64 24}
!17 = !{!6, !7, i64 64}
!18 = !{!6, !10, i64 56}
!19 = !{!6, !10, i64 72}
!20 = !{!6, !10, i64 88}
!21 = !{!6, !7, i64 100}
!22 = !{!6, !7, i64 132}
!23 = !{!6, !7, i64 128}
!24 = !{!6, !10, i64 120}
!25 = !{!6, !10, i64 112}
!26 = !{!7, !7, i64 0}
!27 = !{!28, !7, i64 12}
!28 = !{!"_VlMserReg", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12}
!29 = !{!30, !30, i64 0}
!30 = !{!"float", !8, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}
!38 = !{!28, !7, i64 0}
!39 = distinct !{!39, !32}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.unroll.disable"}
!43 = distinct !{!43, !32}


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