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

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

%union.anon = type { i64 }
%struct._VlQS = type { ptr, i32, i32, i32, i32, double, double, ptr, ptr, ptr }

@vl_infinity_d = external hidden constant %union.anon, align 8

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

declare ptr @vl_calloc(i64 noundef, i64 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: nounwind uwtable
define dso_local void @vl_quickshift_process(ptr noundef %0) #2 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %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 i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca double, align 8
  %37 = alloca i32, align 4
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca double, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #6
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct._VlQS, ptr %47, i32 0, i32 0
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  store ptr %49, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  %50 = load ptr, ptr %2, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct._VlQS, ptr %50, i32 0, i32 7
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  store ptr %52, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %53 = load ptr, ptr %2, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct._VlQS, ptr %53, i32 0, i32 9
  %55 = load ptr, ptr %54, align 8, !tbaa !14
  store ptr %55, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  %56 = load ptr, ptr %2, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct._VlQS, ptr %56, i32 0, i32 8
  %58 = load ptr, ptr %57, align 8, !tbaa !15
  store ptr %58, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %59 = load ptr, ptr %2, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct._VlQS, ptr %59, i32 0, i32 5
  %61 = load double, ptr %60, align 8, !tbaa !16
  store double %61, ptr %9, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct._VlQS, ptr %62, i32 0, i32 6
  %64 = load double, ptr %63, align 8, !tbaa !18
  store double %64, ptr %10, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %65 = load double, ptr %10, align 8, !tbaa !17
  %66 = load double, ptr %10, align 8, !tbaa !17
  %67 = fmul double %65, %66
  store double %67, ptr %11, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %68 = load ptr, ptr %2, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct._VlQS, ptr %68, i32 0, i32 3
  %70 = load i32, ptr %69, align 8, !tbaa !19
  store i32 %70, ptr %12, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %71 = load ptr, ptr %2, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct._VlQS, ptr %71, i32 0, i32 1
  %73 = load i32, ptr %72, align 8, !tbaa !21
  store i32 %73, ptr %14, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct._VlQS, ptr %74, i32 0, i32 2
  %76 = load i32, ptr %75, align 4, !tbaa !22
  store i32 %76, ptr %15, align 4, !tbaa !20
  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
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %77 = load i32, ptr %12, align 4, !tbaa !20
  %78 = add nsw i32 2, %77
  store i32 %78, ptr %13, align 4, !tbaa !20
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct._VlQS, ptr %79, i32 0, i32 4
  %81 = load i32, ptr %80, align 4, !tbaa !23
  %82 = icmp ne i32 %81, 0
  br i1 %82, label %83, label %96

83:                                               ; preds = %1
  %84 = load i32, ptr %14, align 4, !tbaa !20
  %85 = load i32, ptr %15, align 4, !tbaa !20
  %86 = mul nsw i32 %84, %85
  %87 = load i32, ptr %13, align 4, !tbaa !20
  %88 = mul nsw i32 %86, %87
  %89 = sext i32 %88 to i64
  %90 = call ptr @vl_calloc(i64 noundef %89, i64 noundef 8)
  store ptr %90, ptr %7, align 8, !tbaa !5
  %91 = load i32, ptr %14, align 4, !tbaa !20
  %92 = load i32, ptr %15, align 4, !tbaa !20
  %93 = mul nsw i32 %91, %92
  %94 = sext i32 %93 to i64
  %95 = call ptr @vl_calloc(i64 noundef %94, i64 noundef 8)
  store ptr %95, ptr %8, align 8, !tbaa !5
  br label %96

96:                                               ; preds = %83, %1
  %97 = load double, ptr %9, align 8, !tbaa !17
  %98 = fmul double 3.000000e+00, %97
  %99 = call double @llvm.ceil.f64(double %98)
  %100 = fptosi double %99 to i32
  store i32 %100, ptr %20, align 4, !tbaa !20
  %101 = load double, ptr %10, align 8, !tbaa !17
  %102 = call double @llvm.ceil.f64(double %101)
  %103 = fptosi double %102 to i32
  store i32 %103, ptr %21, align 4, !tbaa !20
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = icmp ne ptr %104, null
  br i1 %105, label %106, label %142

106:                                              ; preds = %96
  store i32 0, ptr %17, align 4, !tbaa !20
  br label %107

107:                                              ; preds = %138, %106
  %108 = load i32, ptr %17, align 4, !tbaa !20
  %109 = load i32, ptr %15, align 4, !tbaa !20
  %110 = icmp slt i32 %108, %109
  br i1 %110, label %111, label %141

111:                                              ; preds = %107
  store i32 0, ptr %16, align 4, !tbaa !20
  br label %112

112:                                              ; preds = %134, %111
  %113 = load i32, ptr %16, align 4, !tbaa !20
  %114 = load i32, ptr %14, align 4, !tbaa !20
  %115 = icmp slt i32 %113, %114
  br i1 %115, label %116, label %137

116:                                              ; preds = %112
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = load i32, ptr %14, align 4, !tbaa !20
  %119 = load i32, ptr %15, align 4, !tbaa !20
  %120 = load i32, ptr %12, align 4, !tbaa !20
  %121 = load i32, ptr %16, align 4, !tbaa !20
  %122 = load i32, ptr %17, align 4, !tbaa !20
  %123 = load i32, ptr %16, align 4, !tbaa !20
  %124 = load i32, ptr %17, align 4, !tbaa !20
  %125 = call double @vl_quickshift_inner(ptr noundef %117, i32 noundef %118, i32 noundef %119, i32 noundef %120, i32 noundef %121, i32 noundef %122, i32 noundef %123, i32 noundef %124)
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = load i32, ptr %16, align 4, !tbaa !20
  %128 = load i32, ptr %14, align 4, !tbaa !20
  %129 = load i32, ptr %17, align 4, !tbaa !20
  %130 = mul nsw i32 %128, %129
  %131 = add nsw i32 %127, %130
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds double, ptr %126, i64 %132
  store double %125, ptr %133, align 8, !tbaa !17
  br label %134

134:                                              ; preds = %116
  %135 = load i32, ptr %16, align 4, !tbaa !20
  %136 = add nsw i32 %135, 1
  store i32 %136, ptr %16, align 4, !tbaa !20
  br label %112, !llvm.loop !24

137:                                              ; preds = %112
  br label %138

138:                                              ; preds = %137
  %139 = load i32, ptr %17, align 4, !tbaa !20
  %140 = add nsw i32 %139, 1
  store i32 %140, ptr %17, align 4, !tbaa !20
  br label %107, !llvm.loop !26

141:                                              ; preds = %107
  br label %142

142:                                              ; preds = %141, %96
  store i32 0, ptr %17, align 4, !tbaa !20
  br label %143

143:                                              ; preds = %340, %142
  %144 = load i32, ptr %17, align 4, !tbaa !20
  %145 = load i32, ptr %15, align 4, !tbaa !20
  %146 = icmp slt i32 %144, %145
  br i1 %146, label %147, label %343

147:                                              ; preds = %143
  store i32 0, ptr %16, align 4, !tbaa !20
  br label %148

148:                                              ; preds = %336, %147
  %149 = load i32, ptr %16, align 4, !tbaa !20
  %150 = load i32, ptr %14, align 4, !tbaa !20
  %151 = icmp slt i32 %149, %150
  br i1 %151, label %152, label %339

152:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %153 = load i32, ptr %16, align 4, !tbaa !20
  %154 = load i32, ptr %20, align 4, !tbaa !20
  %155 = sub nsw i32 %153, %154
  %156 = icmp sgt i32 %155, 0
  br i1 %156, label %157, label %161

157:                                              ; preds = %152
  %158 = load i32, ptr %16, align 4, !tbaa !20
  %159 = load i32, ptr %20, align 4, !tbaa !20
  %160 = sub nsw i32 %158, %159
  br label %162

161:                                              ; preds = %152
  br label %162

162:                                              ; preds = %161, %157
  %163 = phi i32 [ %160, %157 ], [ 0, %161 ]
  store i32 %163, ptr %22, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %164 = load i32, ptr %16, align 4, !tbaa !20
  %165 = load i32, ptr %20, align 4, !tbaa !20
  %166 = add nsw i32 %164, %165
  %167 = load i32, ptr %14, align 4, !tbaa !20
  %168 = sub nsw i32 %167, 1
  %169 = icmp slt i32 %166, %168
  br i1 %169, label %170, label %174

170:                                              ; preds = %162
  %171 = load i32, ptr %16, align 4, !tbaa !20
  %172 = load i32, ptr %20, align 4, !tbaa !20
  %173 = add nsw i32 %171, %172
  br label %177

174:                                              ; preds = %162
  %175 = load i32, ptr %14, align 4, !tbaa !20
  %176 = sub nsw i32 %175, 1
  br label %177

177:                                              ; preds = %174, %170
  %178 = phi i32 [ %173, %170 ], [ %176, %174 ]
  store i32 %178, ptr %23, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %179 = load i32, ptr %17, align 4, !tbaa !20
  %180 = load i32, ptr %20, align 4, !tbaa !20
  %181 = sub nsw i32 %179, %180
  %182 = icmp sgt i32 %181, 0
  br i1 %182, label %183, label %187

183:                                              ; preds = %177
  %184 = load i32, ptr %17, align 4, !tbaa !20
  %185 = load i32, ptr %20, align 4, !tbaa !20
  %186 = sub nsw i32 %184, %185
  br label %188

187:                                              ; preds = %177
  br label %188

188:                                              ; preds = %187, %183
  %189 = phi i32 [ %186, %183 ], [ 0, %187 ]
  store i32 %189, ptr %24, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %190 = load i32, ptr %17, align 4, !tbaa !20
  %191 = load i32, ptr %20, align 4, !tbaa !20
  %192 = add nsw i32 %190, %191
  %193 = load i32, ptr %15, align 4, !tbaa !20
  %194 = sub nsw i32 %193, 1
  %195 = icmp slt i32 %192, %194
  br i1 %195, label %196, label %200

196:                                              ; preds = %188
  %197 = load i32, ptr %17, align 4, !tbaa !20
  %198 = load i32, ptr %20, align 4, !tbaa !20
  %199 = add nsw i32 %197, %198
  br label %203

200:                                              ; preds = %188
  %201 = load i32, ptr %15, align 4, !tbaa !20
  %202 = sub nsw i32 %201, 1
  br label %203

203:                                              ; preds = %200, %196
  %204 = phi i32 [ %199, %196 ], [ %202, %200 ]
  store i32 %204, ptr %25, align 4, !tbaa !20
  %205 = load i32, ptr %24, align 4, !tbaa !20
  store i32 %205, ptr %19, align 4, !tbaa !20
  br label %206

206:                                              ; preds = %332, %203
  %207 = load i32, ptr %19, align 4, !tbaa !20
  %208 = load i32, ptr %25, align 4, !tbaa !20
  %209 = icmp sle i32 %207, %208
  br i1 %209, label %210, label %335

210:                                              ; preds = %206
  %211 = load i32, ptr %22, align 4, !tbaa !20
  store i32 %211, ptr %18, align 4, !tbaa !20
  br label %212

212:                                              ; preds = %328, %210
  %213 = load i32, ptr %18, align 4, !tbaa !20
  %214 = load i32, ptr %23, align 4, !tbaa !20
  %215 = icmp sle i32 %213, %214
  br i1 %215, label %216, label %331

216:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %217 = load ptr, ptr %3, align 8, !tbaa !5
  %218 = load i32, ptr %14, align 4, !tbaa !20
  %219 = load i32, ptr %15, align 4, !tbaa !20
  %220 = load i32, ptr %12, align 4, !tbaa !20
  %221 = load i32, ptr %16, align 4, !tbaa !20
  %222 = load i32, ptr %17, align 4, !tbaa !20
  %223 = load i32, ptr %18, align 4, !tbaa !20
  %224 = load i32, ptr %19, align 4, !tbaa !20
  %225 = call double @vl_quickshift_distance(ptr noundef %217, i32 noundef %218, i32 noundef %219, i32 noundef %220, i32 noundef %221, i32 noundef %222, i32 noundef %223, i32 noundef %224)
  store double %225, ptr %26, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %226 = load double, ptr %26, align 8, !tbaa !17
  %227 = fneg double %226
  %228 = load double, ptr %9, align 8, !tbaa !17
  %229 = fmul double 2.000000e+00, %228
  %230 = load double, ptr %9, align 8, !tbaa !17
  %231 = fmul double %229, %230
  %232 = fdiv double %227, %231
  %233 = call double @exp(double noundef %232) #6
  %234 = fneg double %233
  store double %234, ptr %27, align 8, !tbaa !17
  %235 = load double, ptr %27, align 8, !tbaa !17
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = load i32, ptr %16, align 4, !tbaa !20
  %238 = load i32, ptr %14, align 4, !tbaa !20
  %239 = load i32, ptr %17, align 4, !tbaa !20
  %240 = mul nsw i32 %238, %239
  %241 = add nsw i32 %237, %240
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds double, ptr %236, i64 %242
  %244 = load double, ptr %243, align 8, !tbaa !17
  %245 = fsub double %244, %235
  store double %245, ptr %243, align 8, !tbaa !17
  %246 = load ptr, ptr %7, align 8, !tbaa !5
  %247 = icmp ne ptr %246, null
  br i1 %247, label %248, label %327

248:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %249 = load i32, ptr %18, align 4, !tbaa !20
  %250 = sitofp i32 %249 to double
  %251 = load double, ptr %27, align 8, !tbaa !17
  %252 = load ptr, ptr %7, align 8, !tbaa !5
  %253 = load i32, ptr %16, align 4, !tbaa !20
  %254 = load i32, ptr %14, align 4, !tbaa !20
  %255 = load i32, ptr %17, align 4, !tbaa !20
  %256 = mul nsw i32 %254, %255
  %257 = add nsw i32 %253, %256
  %258 = load i32, ptr %14, align 4, !tbaa !20
  %259 = load i32, ptr %15, align 4, !tbaa !20
  %260 = mul nsw i32 %258, %259
  %261 = mul nsw i32 %260, 0
  %262 = add nsw i32 %257, %261
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds double, ptr %252, i64 %263
  %265 = load double, ptr %264, align 8, !tbaa !17
  %266 = call double @llvm.fmuladd.f64(double %250, double %251, double %265)
  store double %266, ptr %264, align 8, !tbaa !17
  %267 = load i32, ptr %19, align 4, !tbaa !20
  %268 = sitofp i32 %267 to double
  %269 = load double, ptr %27, align 8, !tbaa !17
  %270 = load ptr, ptr %7, align 8, !tbaa !5
  %271 = load i32, ptr %16, align 4, !tbaa !20
  %272 = load i32, ptr %14, align 4, !tbaa !20
  %273 = load i32, ptr %17, align 4, !tbaa !20
  %274 = mul nsw i32 %272, %273
  %275 = add nsw i32 %271, %274
  %276 = load i32, ptr %14, align 4, !tbaa !20
  %277 = load i32, ptr %15, align 4, !tbaa !20
  %278 = mul nsw i32 %276, %277
  %279 = mul nsw i32 %278, 1
  %280 = add nsw i32 %275, %279
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds double, ptr %270, i64 %281
  %283 = load double, ptr %282, align 8, !tbaa !17
  %284 = call double @llvm.fmuladd.f64(double %268, double %269, double %283)
  store double %284, ptr %282, align 8, !tbaa !17
  store i32 0, ptr %28, align 4, !tbaa !20
  br label %285

285:                                              ; preds = %323, %248
  %286 = load i32, ptr %28, align 4, !tbaa !20
  %287 = load i32, ptr %12, align 4, !tbaa !20
  %288 = icmp slt i32 %286, %287
  br i1 %288, label %289, label %326

289:                                              ; preds = %285
  %290 = load ptr, ptr %3, align 8, !tbaa !5
  %291 = load i32, ptr %18, align 4, !tbaa !20
  %292 = load i32, ptr %14, align 4, !tbaa !20
  %293 = load i32, ptr %19, align 4, !tbaa !20
  %294 = mul nsw i32 %292, %293
  %295 = add nsw i32 %291, %294
  %296 = load i32, ptr %14, align 4, !tbaa !20
  %297 = load i32, ptr %15, align 4, !tbaa !20
  %298 = mul nsw i32 %296, %297
  %299 = load i32, ptr %28, align 4, !tbaa !20
  %300 = mul nsw i32 %298, %299
  %301 = add nsw i32 %295, %300
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds double, ptr %290, i64 %302
  %304 = load double, ptr %303, align 8, !tbaa !17
  %305 = load double, ptr %27, align 8, !tbaa !17
  %306 = load ptr, ptr %7, align 8, !tbaa !5
  %307 = load i32, ptr %16, align 4, !tbaa !20
  %308 = load i32, ptr %14, align 4, !tbaa !20
  %309 = load i32, ptr %17, align 4, !tbaa !20
  %310 = mul nsw i32 %308, %309
  %311 = add nsw i32 %307, %310
  %312 = load i32, ptr %14, align 4, !tbaa !20
  %313 = load i32, ptr %15, align 4, !tbaa !20
  %314 = mul nsw i32 %312, %313
  %315 = load i32, ptr %28, align 4, !tbaa !20
  %316 = add nsw i32 %315, 2
  %317 = mul nsw i32 %314, %316
  %318 = add nsw i32 %311, %317
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds double, ptr %306, i64 %319
  %321 = load double, ptr %320, align 8, !tbaa !17
  %322 = call double @llvm.fmuladd.f64(double %304, double %305, double %321)
  store double %322, ptr %320, align 8, !tbaa !17
  br label %323

323:                                              ; preds = %289
  %324 = load i32, ptr %28, align 4, !tbaa !20
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %28, align 4, !tbaa !20
  br label %285, !llvm.loop !27

326:                                              ; preds = %285
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %327

327:                                              ; preds = %326, %216
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %328

328:                                              ; preds = %327
  %329 = load i32, ptr %18, align 4, !tbaa !20
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %18, align 4, !tbaa !20
  br label %212, !llvm.loop !28

331:                                              ; preds = %212
  br label %332

332:                                              ; preds = %331
  %333 = load i32, ptr %19, align 4, !tbaa !20
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %19, align 4, !tbaa !20
  br label %206, !llvm.loop !29

335:                                              ; preds = %206
  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 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %336

336:                                              ; preds = %335
  %337 = load i32, ptr %16, align 4, !tbaa !20
  %338 = add nsw i32 %337, 1
  store i32 %338, ptr %16, align 4, !tbaa !20
  br label %148, !llvm.loop !30

339:                                              ; preds = %148
  br label %340

340:                                              ; preds = %339
  %341 = load i32, ptr %17, align 4, !tbaa !20
  %342 = add nsw i32 %341, 1
  store i32 %342, ptr %17, align 4, !tbaa !20
  br label %143, !llvm.loop !31

343:                                              ; preds = %143
  %344 = load ptr, ptr %2, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct._VlQS, ptr %344, i32 0, i32 4
  %346 = load i32, ptr %345, align 4, !tbaa !23
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %348, label %580

348:                                              ; preds = %343
  store i32 0, ptr %17, align 4, !tbaa !20
  br label %349

349:                                              ; preds = %576, %348
  %350 = load i32, ptr %17, align 4, !tbaa !20
  %351 = load i32, ptr %15, align 4, !tbaa !20
  %352 = icmp slt i32 %350, %351
  br i1 %352, label %353, label %579

353:                                              ; preds = %349
  store i32 0, ptr %16, align 4, !tbaa !20
  br label %354

354:                                              ; preds = %572, %353
  %355 = load i32, ptr %16, align 4, !tbaa !20
  %356 = load i32, ptr %14, align 4, !tbaa !20
  %357 = icmp slt i32 %355, %356
  br i1 %357, label %358, label %575

358:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  store double 0.000000e+00, ptr %29, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %359 = load i32, ptr %16, align 4, !tbaa !20
  %360 = sitofp i32 %359 to double
  store double %360, ptr %30, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %361 = load i32, ptr %17, align 4, !tbaa !20
  %362 = sitofp i32 %361 to double
  store double %362, ptr %31, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %363 = load i32, ptr %16, align 4, !tbaa !20
  %364 = load i32, ptr %20, align 4, !tbaa !20
  %365 = sub nsw i32 %363, %364
  %366 = icmp sgt i32 %365, 0
  br i1 %366, label %367, label %371

367:                                              ; preds = %358
  %368 = load i32, ptr %16, align 4, !tbaa !20
  %369 = load i32, ptr %20, align 4, !tbaa !20
  %370 = sub nsw i32 %368, %369
  br label %372

371:                                              ; preds = %358
  br label %372

372:                                              ; preds = %371, %367
  %373 = phi i32 [ %370, %367 ], [ 0, %371 ]
  store i32 %373, ptr %32, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  %374 = load i32, ptr %16, align 4, !tbaa !20
  %375 = load i32, ptr %20, align 4, !tbaa !20
  %376 = add nsw i32 %374, %375
  %377 = load i32, ptr %14, align 4, !tbaa !20
  %378 = sub nsw i32 %377, 1
  %379 = icmp slt i32 %376, %378
  br i1 %379, label %380, label %384

380:                                              ; preds = %372
  %381 = load i32, ptr %16, align 4, !tbaa !20
  %382 = load i32, ptr %20, align 4, !tbaa !20
  %383 = add nsw i32 %381, %382
  br label %387

384:                                              ; preds = %372
  %385 = load i32, ptr %14, align 4, !tbaa !20
  %386 = sub nsw i32 %385, 1
  br label %387

387:                                              ; preds = %384, %380
  %388 = phi i32 [ %383, %380 ], [ %386, %384 ]
  store i32 %388, ptr %33, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %389 = load i32, ptr %17, align 4, !tbaa !20
  %390 = load i32, ptr %20, align 4, !tbaa !20
  %391 = sub nsw i32 %389, %390
  %392 = icmp sgt i32 %391, 0
  br i1 %392, label %393, label %397

393:                                              ; preds = %387
  %394 = load i32, ptr %17, align 4, !tbaa !20
  %395 = load i32, ptr %20, align 4, !tbaa !20
  %396 = sub nsw i32 %394, %395
  br label %398

397:                                              ; preds = %387
  br label %398

398:                                              ; preds = %397, %393
  %399 = phi i32 [ %396, %393 ], [ 0, %397 ]
  store i32 %399, ptr %34, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  %400 = load i32, ptr %17, align 4, !tbaa !20
  %401 = load i32, ptr %20, align 4, !tbaa !20
  %402 = add nsw i32 %400, %401
  %403 = load i32, ptr %15, align 4, !tbaa !20
  %404 = sub nsw i32 %403, 1
  %405 = icmp slt i32 %402, %404
  br i1 %405, label %406, label %410

406:                                              ; preds = %398
  %407 = load i32, ptr %17, align 4, !tbaa !20
  %408 = load i32, ptr %20, align 4, !tbaa !20
  %409 = add nsw i32 %407, %408
  br label %413

410:                                              ; preds = %398
  %411 = load i32, ptr %15, align 4, !tbaa !20
  %412 = sub nsw i32 %411, 1
  br label %413

413:                                              ; preds = %410, %406
  %414 = phi i32 [ %409, %406 ], [ %412, %410 ]
  store i32 %414, ptr %35, align 4, !tbaa !20
  %415 = load i32, ptr %34, align 4, !tbaa !20
  store i32 %415, ptr %19, align 4, !tbaa !20
  br label %416

416:                                              ; preds = %545, %413
  %417 = load i32, ptr %19, align 4, !tbaa !20
  %418 = load i32, ptr %35, align 4, !tbaa !20
  %419 = icmp sle i32 %417, %418
  br i1 %419, label %420, label %548

420:                                              ; preds = %416
  %421 = load i32, ptr %32, align 4, !tbaa !20
  store i32 %421, ptr %18, align 4, !tbaa !20
  br label %422

422:                                              ; preds = %541, %420
  %423 = load i32, ptr %18, align 4, !tbaa !20
  %424 = load i32, ptr %33, align 4, !tbaa !20
  %425 = icmp sle i32 %423, %424
  br i1 %425, label %426, label %544

426:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %427 = load ptr, ptr %8, align 8, !tbaa !5
  %428 = load i32, ptr %18, align 4, !tbaa !20
  %429 = load i32, ptr %19, align 4, !tbaa !20
  %430 = load i32, ptr %14, align 4, !tbaa !20
  %431 = mul nsw i32 %429, %430
  %432 = add nsw i32 %428, %431
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds double, ptr %427, i64 %433
  %435 = load double, ptr %434, align 8, !tbaa !17
  %436 = fneg double %435
  %437 = load ptr, ptr %5, align 8, !tbaa !5
  %438 = load i32, ptr %16, align 4, !tbaa !20
  %439 = load i32, ptr %17, align 4, !tbaa !20
  %440 = load i32, ptr %14, align 4, !tbaa !20
  %441 = mul nsw i32 %439, %440
  %442 = add nsw i32 %438, %441
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds double, ptr %437, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !17
  %446 = fmul double %436, %445
  store double %446, ptr %36, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  %447 = load i32, ptr %18, align 4, !tbaa !20
  %448 = mul nsw i32 2, %447
  %449 = sitofp i32 %448 to double
  %450 = load ptr, ptr %7, align 8, !tbaa !5
  %451 = load i32, ptr %16, align 4, !tbaa !20
  %452 = load i32, ptr %17, align 4, !tbaa !20
  %453 = load i32, ptr %14, align 4, !tbaa !20
  %454 = mul nsw i32 %452, %453
  %455 = add nsw i32 %451, %454
  %456 = load i32, ptr %14, align 4, !tbaa !20
  %457 = load i32, ptr %15, align 4, !tbaa !20
  %458 = mul nsw i32 %456, %457
  %459 = mul nsw i32 %458, 0
  %460 = add nsw i32 %455, %459
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds double, ptr %450, i64 %461
  %463 = load double, ptr %462, align 8, !tbaa !17
  %464 = load double, ptr %36, align 8, !tbaa !17
  %465 = fneg double %449
  %466 = call double @llvm.fmuladd.f64(double %465, double %463, double %464)
  store double %466, ptr %36, align 8, !tbaa !17
  %467 = load i32, ptr %19, align 4, !tbaa !20
  %468 = mul nsw i32 2, %467
  %469 = sitofp i32 %468 to double
  %470 = load ptr, ptr %7, align 8, !tbaa !5
  %471 = load i32, ptr %16, align 4, !tbaa !20
  %472 = load i32, ptr %17, align 4, !tbaa !20
  %473 = load i32, ptr %14, align 4, !tbaa !20
  %474 = mul nsw i32 %472, %473
  %475 = add nsw i32 %471, %474
  %476 = load i32, ptr %14, align 4, !tbaa !20
  %477 = load i32, ptr %15, align 4, !tbaa !20
  %478 = mul nsw i32 %476, %477
  %479 = mul nsw i32 %478, 1
  %480 = add nsw i32 %475, %479
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %470, i64 %481
  %483 = load double, ptr %482, align 8, !tbaa !17
  %484 = load double, ptr %36, align 8, !tbaa !17
  %485 = fneg double %469
  %486 = call double @llvm.fmuladd.f64(double %485, double %483, double %484)
  store double %486, ptr %36, align 8, !tbaa !17
  store i32 0, ptr %37, align 4, !tbaa !20
  br label %487

487:                                              ; preds = %527, %426
  %488 = load i32, ptr %37, align 4, !tbaa !20
  %489 = load i32, ptr %12, align 4, !tbaa !20
  %490 = icmp slt i32 %488, %489
  br i1 %490, label %491, label %530

491:                                              ; preds = %487
  %492 = load ptr, ptr %3, align 8, !tbaa !5
  %493 = load i32, ptr %18, align 4, !tbaa !20
  %494 = load i32, ptr %19, align 4, !tbaa !20
  %495 = load i32, ptr %14, align 4, !tbaa !20
  %496 = mul nsw i32 %494, %495
  %497 = add nsw i32 %493, %496
  %498 = load i32, ptr %14, align 4, !tbaa !20
  %499 = load i32, ptr %15, align 4, !tbaa !20
  %500 = mul nsw i32 %498, %499
  %501 = load i32, ptr %37, align 4, !tbaa !20
  %502 = mul nsw i32 %500, %501
  %503 = add nsw i32 %497, %502
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds double, ptr %492, i64 %504
  %506 = load double, ptr %505, align 8, !tbaa !17
  %507 = fmul double 2.000000e+00, %506
  %508 = load ptr, ptr %7, align 8, !tbaa !5
  %509 = load i32, ptr %16, align 4, !tbaa !20
  %510 = load i32, ptr %17, align 4, !tbaa !20
  %511 = load i32, ptr %14, align 4, !tbaa !20
  %512 = mul nsw i32 %510, %511
  %513 = add nsw i32 %509, %512
  %514 = load i32, ptr %14, align 4, !tbaa !20
  %515 = load i32, ptr %15, align 4, !tbaa !20
  %516 = mul nsw i32 %514, %515
  %517 = load i32, ptr %37, align 4, !tbaa !20
  %518 = add nsw i32 %517, 2
  %519 = mul nsw i32 %516, %518
  %520 = add nsw i32 %513, %519
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds double, ptr %508, i64 %521
  %523 = load double, ptr %522, align 8, !tbaa !17
  %524 = load double, ptr %36, align 8, !tbaa !17
  %525 = fneg double %507
  %526 = call double @llvm.fmuladd.f64(double %525, double %523, double %524)
  store double %526, ptr %36, align 8, !tbaa !17
  br label %527

527:                                              ; preds = %491
  %528 = load i32, ptr %37, align 4, !tbaa !20
  %529 = add nsw i32 %528, 1
  store i32 %529, ptr %37, align 4, !tbaa !20
  br label %487, !llvm.loop !32

530:                                              ; preds = %487
  %531 = load double, ptr %36, align 8, !tbaa !17
  %532 = load double, ptr %29, align 8, !tbaa !17
  %533 = fcmp ogt double %531, %532
  br i1 %533, label %534, label %540

534:                                              ; preds = %530
  %535 = load double, ptr %36, align 8, !tbaa !17
  store double %535, ptr %29, align 8, !tbaa !17
  %536 = load i32, ptr %18, align 4, !tbaa !20
  %537 = sitofp i32 %536 to double
  store double %537, ptr %30, align 8, !tbaa !17
  %538 = load i32, ptr %19, align 4, !tbaa !20
  %539 = sitofp i32 %538 to double
  store double %539, ptr %31, align 8, !tbaa !17
  br label %540

540:                                              ; preds = %534, %530
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %541

541:                                              ; preds = %540
  %542 = load i32, ptr %18, align 4, !tbaa !20
  %543 = add nsw i32 %542, 1
  store i32 %543, ptr %18, align 4, !tbaa !20
  br label %422, !llvm.loop !33

544:                                              ; preds = %422
  br label %545

545:                                              ; preds = %544
  %546 = load i32, ptr %19, align 4, !tbaa !20
  %547 = add nsw i32 %546, 1
  store i32 %547, ptr %19, align 4, !tbaa !20
  br label %416, !llvm.loop !34

548:                                              ; preds = %416
  %549 = load double, ptr %30, align 8, !tbaa !17
  %550 = load i32, ptr %14, align 4, !tbaa !20
  %551 = sitofp i32 %550 to double
  %552 = load double, ptr %31, align 8, !tbaa !17
  %553 = call double @llvm.fmuladd.f64(double %551, double %552, double %549)
  %554 = fptosi double %553 to i32
  %555 = load ptr, ptr %4, align 8, !tbaa !5
  %556 = load i32, ptr %16, align 4, !tbaa !20
  %557 = load i32, ptr %14, align 4, !tbaa !20
  %558 = load i32, ptr %17, align 4, !tbaa !20
  %559 = mul nsw i32 %557, %558
  %560 = add nsw i32 %556, %559
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i32, ptr %555, i64 %561
  store i32 %554, ptr %562, align 4, !tbaa !20
  %563 = load double, ptr %29, align 8, !tbaa !17
  %564 = load ptr, ptr %6, align 8, !tbaa !5
  %565 = load i32, ptr %16, align 4, !tbaa !20
  %566 = load i32, ptr %14, align 4, !tbaa !20
  %567 = load i32, ptr %17, align 4, !tbaa !20
  %568 = mul nsw i32 %566, %567
  %569 = add nsw i32 %565, %568
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds double, ptr %564, i64 %570
  store double %563, ptr %571, align 8, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %572

572:                                              ; preds = %548
  %573 = load i32, ptr %16, align 4, !tbaa !20
  %574 = add nsw i32 %573, 1
  store i32 %574, ptr %16, align 4, !tbaa !20
  br label %354, !llvm.loop !35

575:                                              ; preds = %354
  br label %576

576:                                              ; preds = %575
  %577 = load i32, ptr %17, align 4, !tbaa !20
  %578 = add nsw i32 %577, 1
  store i32 %578, ptr %17, align 4, !tbaa !20
  br label %349, !llvm.loop !36

579:                                              ; preds = %349
  br label %745

580:                                              ; preds = %343
  store i32 0, ptr %17, align 4, !tbaa !20
  br label %581

581:                                              ; preds = %741, %580
  %582 = load i32, ptr %17, align 4, !tbaa !20
  %583 = load i32, ptr %15, align 4, !tbaa !20
  %584 = icmp slt i32 %582, %583
  br i1 %584, label %585, label %744

585:                                              ; preds = %581
  store i32 0, ptr %16, align 4, !tbaa !20
  br label %586

586:                                              ; preds = %737, %585
  %587 = load i32, ptr %16, align 4, !tbaa !20
  %588 = load i32, ptr %14, align 4, !tbaa !20
  %589 = icmp slt i32 %587, %588
  br i1 %589, label %590, label %740

590:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %591 = load ptr, ptr %5, align 8, !tbaa !5
  %592 = load i32, ptr %16, align 4, !tbaa !20
  %593 = load i32, ptr %14, align 4, !tbaa !20
  %594 = load i32, ptr %17, align 4, !tbaa !20
  %595 = mul nsw i32 %593, %594
  %596 = add nsw i32 %592, %595
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds double, ptr %591, i64 %597
  %599 = load double, ptr %598, align 8, !tbaa !17
  store double %599, ptr %38, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %600 = load double, ptr @vl_infinity_d, align 8, !tbaa !37
  store double %600, ptr %39, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %601 = load i32, ptr %16, align 4, !tbaa !20
  %602 = sitofp i32 %601 to double
  store double %602, ptr %40, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %603 = load i32, ptr %17, align 4, !tbaa !20
  %604 = sitofp i32 %603 to double
  store double %604, ptr %41, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  %605 = load i32, ptr %16, align 4, !tbaa !20
  %606 = load i32, ptr %21, align 4, !tbaa !20
  %607 = sub nsw i32 %605, %606
  %608 = icmp sgt i32 %607, 0
  br i1 %608, label %609, label %613

609:                                              ; preds = %590
  %610 = load i32, ptr %16, align 4, !tbaa !20
  %611 = load i32, ptr %21, align 4, !tbaa !20
  %612 = sub nsw i32 %610, %611
  br label %614

613:                                              ; preds = %590
  br label %614

614:                                              ; preds = %613, %609
  %615 = phi i32 [ %612, %609 ], [ 0, %613 ]
  store i32 %615, ptr %42, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  %616 = load i32, ptr %16, align 4, !tbaa !20
  %617 = load i32, ptr %21, align 4, !tbaa !20
  %618 = add nsw i32 %616, %617
  %619 = load i32, ptr %14, align 4, !tbaa !20
  %620 = sub nsw i32 %619, 1
  %621 = icmp slt i32 %618, %620
  br i1 %621, label %622, label %626

622:                                              ; preds = %614
  %623 = load i32, ptr %16, align 4, !tbaa !20
  %624 = load i32, ptr %21, align 4, !tbaa !20
  %625 = add nsw i32 %623, %624
  br label %629

626:                                              ; preds = %614
  %627 = load i32, ptr %14, align 4, !tbaa !20
  %628 = sub nsw i32 %627, 1
  br label %629

629:                                              ; preds = %626, %622
  %630 = phi i32 [ %625, %622 ], [ %628, %626 ]
  store i32 %630, ptr %43, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  %631 = load i32, ptr %17, align 4, !tbaa !20
  %632 = load i32, ptr %21, align 4, !tbaa !20
  %633 = sub nsw i32 %631, %632
  %634 = icmp sgt i32 %633, 0
  br i1 %634, label %635, label %639

635:                                              ; preds = %629
  %636 = load i32, ptr %17, align 4, !tbaa !20
  %637 = load i32, ptr %21, align 4, !tbaa !20
  %638 = sub nsw i32 %636, %637
  br label %640

639:                                              ; preds = %629
  br label %640

640:                                              ; preds = %639, %635
  %641 = phi i32 [ %638, %635 ], [ 0, %639 ]
  store i32 %641, ptr %44, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  %642 = load i32, ptr %17, align 4, !tbaa !20
  %643 = load i32, ptr %21, align 4, !tbaa !20
  %644 = add nsw i32 %642, %643
  %645 = load i32, ptr %15, align 4, !tbaa !20
  %646 = sub nsw i32 %645, 1
  %647 = icmp slt i32 %644, %646
  br i1 %647, label %648, label %652

648:                                              ; preds = %640
  %649 = load i32, ptr %17, align 4, !tbaa !20
  %650 = load i32, ptr %21, align 4, !tbaa !20
  %651 = add nsw i32 %649, %650
  br label %655

652:                                              ; preds = %640
  %653 = load i32, ptr %15, align 4, !tbaa !20
  %654 = sub nsw i32 %653, 1
  br label %655

655:                                              ; preds = %652, %648
  %656 = phi i32 [ %651, %648 ], [ %654, %652 ]
  store i32 %656, ptr %45, align 4, !tbaa !20
  %657 = load i32, ptr %44, align 4, !tbaa !20
  store i32 %657, ptr %19, align 4, !tbaa !20
  br label %658

658:                                              ; preds = %709, %655
  %659 = load i32, ptr %19, align 4, !tbaa !20
  %660 = load i32, ptr %45, align 4, !tbaa !20
  %661 = icmp sle i32 %659, %660
  br i1 %661, label %662, label %712

662:                                              ; preds = %658
  %663 = load i32, ptr %42, align 4, !tbaa !20
  store i32 %663, ptr %18, align 4, !tbaa !20
  br label %664

664:                                              ; preds = %705, %662
  %665 = load i32, ptr %18, align 4, !tbaa !20
  %666 = load i32, ptr %43, align 4, !tbaa !20
  %667 = icmp sle i32 %665, %666
  br i1 %667, label %668, label %708

668:                                              ; preds = %664
  %669 = load ptr, ptr %5, align 8, !tbaa !5
  %670 = load i32, ptr %18, align 4, !tbaa !20
  %671 = load i32, ptr %14, align 4, !tbaa !20
  %672 = load i32, ptr %19, align 4, !tbaa !20
  %673 = mul nsw i32 %671, %672
  %674 = add nsw i32 %670, %673
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds double, ptr %669, i64 %675
  %677 = load double, ptr %676, align 8, !tbaa !17
  %678 = load double, ptr %38, align 8, !tbaa !17
  %679 = fcmp ogt double %677, %678
  br i1 %679, label %680, label %704

680:                                              ; preds = %668
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %681 = load ptr, ptr %3, align 8, !tbaa !5
  %682 = load i32, ptr %14, align 4, !tbaa !20
  %683 = load i32, ptr %15, align 4, !tbaa !20
  %684 = load i32, ptr %12, align 4, !tbaa !20
  %685 = load i32, ptr %16, align 4, !tbaa !20
  %686 = load i32, ptr %17, align 4, !tbaa !20
  %687 = load i32, ptr %18, align 4, !tbaa !20
  %688 = load i32, ptr %19, align 4, !tbaa !20
  %689 = call double @vl_quickshift_distance(ptr noundef %681, i32 noundef %682, i32 noundef %683, i32 noundef %684, i32 noundef %685, i32 noundef %686, i32 noundef %687, i32 noundef %688)
  store double %689, ptr %46, align 8, !tbaa !17
  %690 = load double, ptr %46, align 8, !tbaa !17
  %691 = load double, ptr %11, align 8, !tbaa !17
  %692 = fcmp ole double %690, %691
  br i1 %692, label %693, label %703

693:                                              ; preds = %680
  %694 = load double, ptr %46, align 8, !tbaa !17
  %695 = load double, ptr %39, align 8, !tbaa !17
  %696 = fcmp olt double %694, %695
  br i1 %696, label %697, label %703

697:                                              ; preds = %693
  %698 = load double, ptr %46, align 8, !tbaa !17
  store double %698, ptr %39, align 8, !tbaa !17
  %699 = load i32, ptr %18, align 4, !tbaa !20
  %700 = sitofp i32 %699 to double
  store double %700, ptr %40, align 8, !tbaa !17
  %701 = load i32, ptr %19, align 4, !tbaa !20
  %702 = sitofp i32 %701 to double
  store double %702, ptr %41, align 8, !tbaa !17
  br label %703

703:                                              ; preds = %697, %693, %680
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %704

704:                                              ; preds = %703, %668
  br label %705

705:                                              ; preds = %704
  %706 = load i32, ptr %18, align 4, !tbaa !20
  %707 = add nsw i32 %706, 1
  store i32 %707, ptr %18, align 4, !tbaa !20
  br label %664, !llvm.loop !38

708:                                              ; preds = %664
  br label %709

709:                                              ; preds = %708
  %710 = load i32, ptr %19, align 4, !tbaa !20
  %711 = add nsw i32 %710, 1
  store i32 %711, ptr %19, align 4, !tbaa !20
  br label %658, !llvm.loop !39

712:                                              ; preds = %658
  %713 = load double, ptr %40, align 8, !tbaa !17
  %714 = load i32, ptr %14, align 4, !tbaa !20
  %715 = sitofp i32 %714 to double
  %716 = load double, ptr %41, align 8, !tbaa !17
  %717 = call double @llvm.fmuladd.f64(double %715, double %716, double %713)
  %718 = fptosi double %717 to i32
  %719 = load ptr, ptr %4, align 8, !tbaa !5
  %720 = load i32, ptr %16, align 4, !tbaa !20
  %721 = load i32, ptr %14, align 4, !tbaa !20
  %722 = load i32, ptr %17, align 4, !tbaa !20
  %723 = mul nsw i32 %721, %722
  %724 = add nsw i32 %720, %723
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds i32, ptr %719, i64 %725
  store i32 %718, ptr %726, align 4, !tbaa !20
  %727 = load double, ptr %39, align 8, !tbaa !17
  %728 = call double @sqrt(double noundef %727) #6
  %729 = load ptr, ptr %6, align 8, !tbaa !5
  %730 = load i32, ptr %16, align 4, !tbaa !20
  %731 = load i32, ptr %14, align 4, !tbaa !20
  %732 = load i32, ptr %17, align 4, !tbaa !20
  %733 = mul nsw i32 %731, %732
  %734 = add nsw i32 %730, %733
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds double, ptr %729, i64 %735
  store double %728, ptr %736, align 8, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %737

737:                                              ; preds = %712
  %738 = load i32, ptr %16, align 4, !tbaa !20
  %739 = add nsw i32 %738, 1
  store i32 %739, ptr %16, align 4, !tbaa !20
  br label %586, !llvm.loop !40

740:                                              ; preds = %586
  br label %741

741:                                              ; preds = %740
  %742 = load i32, ptr %17, align 4, !tbaa !20
  %743 = add nsw i32 %742, 1
  store i32 %743, ptr %17, align 4, !tbaa !20
  br label %581, !llvm.loop !41

744:                                              ; preds = %581
  br label %745

745:                                              ; preds = %744, %579
  %746 = load ptr, ptr %7, align 8, !tbaa !5
  %747 = icmp ne ptr %746, null
  br i1 %747, label %748, label %750

748:                                              ; preds = %745
  %749 = load ptr, ptr %7, align 8, !tbaa !5
  call void @vl_free(ptr noundef %749)
  br label %750

750:                                              ; preds = %748, %745
  %751 = load ptr, ptr %8, align 8, !tbaa !5
  %752 = icmp ne ptr %751, null
  br i1 %752, label %753, label %755

753:                                              ; preds = %750
  %754 = load ptr, ptr %8, align 8, !tbaa !5
  call void @vl_free(ptr noundef %754)
  br label %755

755:                                              ; preds = %753, %750
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  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 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, 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 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #6
  ret void
}

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

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

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

; Function Attrs: nounwind
declare double @exp(double noundef) #5

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #5

declare void @vl_free(ptr noundef) #1

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 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { 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 #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, !6, i64 0}
!10 = !{!"_VlQS", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !12, i64 24, !12, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!10, !6, i64 40}
!14 = !{!10, !6, i64 56}
!15 = !{!10, !6, i64 48}
!16 = !{!10, !12, i64 24}
!17 = !{!12, !12, i64 0}
!18 = !{!10, !12, i64 32}
!19 = !{!10, !11, i64 16}
!20 = !{!11, !11, i64 0}
!21 = !{!10, !11, i64 8}
!22 = !{!10, !11, i64 12}
!23 = !{!10, !11, i64 20}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = !{!7, !7, i64 0}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}


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

%union.anon = type { i64 }

@vl_infinity_d = external hidden local_unnamed_addr constant %union.anon, align 8

declare ptr @vl_calloc(i64 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @vl_quickshift_process(ptr nocapture noundef readonly %0) local_unnamed_addr #1 {
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = getelementptr inbounds i8, ptr %0, i64 40
  %4 = load ptr, ptr %3, align 8, !tbaa !12
  %5 = getelementptr inbounds i8, ptr %0, i64 56
  %6 = load ptr, ptr %5, align 8, !tbaa !13
  %7 = getelementptr inbounds i8, ptr %0, i64 48
  %8 = load ptr, ptr %7, align 8, !tbaa !14
  %9 = getelementptr inbounds i8, ptr %0, i64 24
  %10 = load double, ptr %9, align 8, !tbaa !15
  %11 = getelementptr inbounds i8, ptr %0, i64 32
  %12 = load double, ptr %11, align 8, !tbaa !16
  %13 = fmul double %12, %12
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  %15 = load i32, ptr %14, align 8, !tbaa !17
  %.fr509 = freeze i32 %15
  %16 = getelementptr inbounds i8, ptr %0, i64 8
  %17 = load i32, ptr %16, align 8, !tbaa !18
  %18 = getelementptr inbounds i8, ptr %0, i64 12
  %19 = load i32, ptr %18, align 4, !tbaa !19
  %20 = getelementptr inbounds i8, ptr %0, i64 20
  %21 = load i32, ptr %20, align 4, !tbaa !20
  %.not = icmp eq i32 %21, 0
  br i1 %.not, label %31, label %22

22:                                               ; preds = %1
  %23 = add nsw i32 %.fr509, 2
  %24 = mul nsw i32 %19, %17
  %25 = mul nsw i32 %24, %23
  %26 = sext i32 %25 to i64
  %27 = tail call ptr @vl_calloc(i64 noundef %26, i64 noundef 8) #6
  %28 = sext i32 %24 to i64
  %29 = tail call ptr @vl_calloc(i64 noundef %28, i64 noundef 8) #6
  %30 = freeze ptr %27
  br label %31

31:                                               ; preds = %22, %1
  %.0295 = phi ptr [ %29, %22 ], [ null, %1 ]
  %.0 = phi ptr [ %30, %22 ], [ null, %1 ]
  %32 = fmul double %10, 3.000000e+00
  %33 = tail call double @llvm.ceil.f64(double %32)
  %34 = fptosi double %33 to i32
  %35 = tail call double @llvm.ceil.f64(double %12)
  %36 = fptosi double %35 to i32
  %.not351 = icmp ne ptr %.0295, null
  %37 = icmp sgt i32 %19, 0
  %or.cond = select i1 %.not351, i1 %37, i1 false
  br i1 %or.cond, label %.preheader372.lr.ph, label %.loopexit374

.preheader372.lr.ph:                              ; preds = %31
  %38 = icmp sgt i32 %17, 0
  br i1 %38, label %.preheader372.us.preheader, label %._crit_edge403

.preheader372.us.preheader:                       ; preds = %.preheader372.lr.ph
  %39 = zext nneg i32 %17 to i64
  %wide.trip.count529 = zext nneg i32 %19 to i64
  br label %.preheader372.us

.preheader372.us:                                 ; preds = %.preheader372.us.preheader, %._crit_edge.us
  %indvars.iv526 = phi i64 [ 0, %.preheader372.us.preheader ], [ %indvars.iv.next527, %._crit_edge.us ]
  %40 = mul nuw nsw i64 %indvars.iv526, %39
  %41 = trunc nuw nsw i64 %indvars.iv526 to i32
  br label %42

42:                                               ; preds = %.preheader372.us, %42
  %indvars.iv = phi i64 [ 0, %.preheader372.us ], [ %indvars.iv.next, %42 ]
  %43 = trunc nuw nsw i64 %indvars.iv to i32
  %44 = tail call double @vl_quickshift_inner(ptr noundef %2, i32 noundef %17, i32 noundef %19, i32 noundef %.fr509, i32 noundef %43, i32 noundef %41, i32 noundef %43, i32 noundef %41)
  %45 = add nuw nsw i64 %indvars.iv, %40
  %46 = getelementptr inbounds double, ptr %.0295, i64 %45
  store double %44, ptr %46, align 8, !tbaa !21
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %39
  br i1 %exitcond.not, label %._crit_edge.us, label %42, !llvm.loop !22

._crit_edge.us:                                   ; preds = %42
  %indvars.iv.next527 = add nuw nsw i64 %indvars.iv526, 1
  %exitcond530.not = icmp eq i64 %indvars.iv.next527, %wide.trip.count529
  br i1 %exitcond530.not, label %.loopexit374, label %.preheader372.us, !llvm.loop !24

.loopexit374:                                     ; preds = %._crit_edge.us, %31
  br i1 %37, label %.preheader371.lr.ph, label %.loopexit

.preheader371.lr.ph:                              ; preds = %.loopexit374
  %47 = icmp sgt i32 %17, 0
  %48 = add nsw i32 %17, -1
  %49 = add nsw i32 %19, -1
  %50 = fmul double %10, 2.000000e+00
  %51 = fmul double %10, %50
  %.not360 = icmp eq ptr %.0, null
  br i1 %47, label %.preheader371.lr.ph.split.us, label %.loopexit

.preheader371.lr.ph.split.us:                     ; preds = %.preheader371.lr.ph
  %52 = mul nuw nsw i32 %19, %17
  %53 = icmp sgt i32 %.fr509, 0
  %54 = zext nneg i32 %52 to i64
  %55 = sub i32 0, %34
  %56 = zext nneg i32 %17 to i64
  %wide.trip.count560 = zext nneg i32 %19 to i64
  %wide.trip.count534 = zext i32 %.fr509 to i64
  %xtraiter = and i64 %wide.trip.count534, 1
  %57 = icmp eq i32 %.fr509, 1
  %unroll_iter = and i64 %wide.trip.count534, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader371.us

.preheader371.us:                                 ; preds = %._crit_edge.us419, %.preheader371.lr.ph.split.us
  %indvars.iv557 = phi i64 [ %indvars.iv.next558, %._crit_edge.us419 ], [ 0, %.preheader371.lr.ph.split.us ]
  %indvars.iv541 = phi i32 [ %indvars.iv.next542, %._crit_edge.us419 ], [ %55, %.preheader371.lr.ph.split.us ]
  %smax543 = tail call i32 @llvm.smax.i32(i32 %indvars.iv541, i32 0)
  %58 = zext nneg i32 %smax543 to i64
  %59 = trunc i64 %indvars.iv557 to i32
  %60 = sub i32 %59, %34
  %61 = tail call i32 @llvm.smax.i32(i32 %60, i32 0)
  %62 = trunc i64 %indvars.iv557 to i32
  %63 = add i32 %62, %34
  %64 = tail call i32 @llvm.smin.i32(i32 %63, i32 %49)
  %.not358382.us = icmp sgt i32 %61, %64
  %65 = mul nuw nsw i64 %indvars.iv557, %56
  br i1 %.not358382.us, label %._crit_edge.us419, label %.lr.ph393.split.us418

.preheader370.lr.ph.us404:                        ; preds = %.preheader370.lr.ph.us404.preheader, %._crit_edge385.us411
  %indvars.iv547 = phi i64 [ 0, %.preheader370.lr.ph.us404.preheader ], [ %indvars.iv.next548, %._crit_edge385.us411 ]
  %indvars.iv536 = phi i32 [ %55, %.preheader370.lr.ph.us404.preheader ], [ %indvars.iv.next537, %._crit_edge385.us411 ]
  %smax = tail call i32 @llvm.smax.i32(i32 %indvars.iv536, i32 0)
  %66 = zext nneg i32 %smax to i64
  %67 = trunc i64 %indvars.iv547 to i32
  %68 = sub i32 %67, %34
  %69 = tail call i32 @llvm.smax.i32(i32 %68, i32 0)
  %70 = trunc i64 %indvars.iv547 to i32
  %71 = add i32 %70, %34
  %..us = tail call i32 @llvm.smin.i32(i32 %71, i32 %48)
  %.not359378.us406 = icmp sgt i32 %69, %..us
  %72 = add nuw nsw i64 %indvars.iv547, %65
  %73 = getelementptr inbounds double, ptr %6, i64 %72
  %74 = getelementptr inbounds double, ptr %.0, i64 %72
  %75 = add nuw nsw i64 %72, %54
  %76 = getelementptr inbounds double, ptr %.0, i64 %75
  br i1 %.not359378.us406, label %._crit_edge385.us411, label %.preheader370.lr.ph.split.us410

.loopexit369.us:                                  ; preds = %.preheader370.us407, %.loopexit369.us
  %.0301379.us = phi i32 [ %69, %.preheader370.us407 ], [ %89, %.loopexit369.us ]
  %77 = tail call double @vl_quickshift_distance(ptr noundef %2, i32 noundef %17, i32 noundef %19, i32 noundef %.fr509, i32 noundef %92, i32 noundef %138, i32 noundef %.0301379.us, i32 noundef %.0316383.us408)
  %78 = fneg double %77
  %79 = fdiv double %78, %51
  %80 = tail call double @exp(double noundef %79) #6
  %81 = fneg double %80
  %82 = load double, ptr %73, align 8, !tbaa !21
  %83 = fadd double %80, %82
  store double %83, ptr %73, align 8, !tbaa !21
  %84 = uitofp nneg i32 %.0301379.us to double
  %85 = load double, ptr %74, align 8, !tbaa !21
  %86 = tail call double @llvm.fmuladd.f64(double %84, double %81, double %85)
  store double %86, ptr %74, align 8, !tbaa !21
  %87 = load double, ptr %76, align 8, !tbaa !21
  %88 = tail call double @llvm.fmuladd.f64(double %90, double %81, double %87)
  store double %88, ptr %76, align 8, !tbaa !21
  %89 = add nuw nsw i32 %.0301379.us, 1
  %.not359.us.not = icmp slt i32 %.0301379.us, %..us
  br i1 %.not359.us.not, label %.loopexit369.us, label %._crit_edge.split.us.split, !llvm.loop !25

.preheader370.us407:                              ; preds = %.preheader370.us407.preheader, %._crit_edge.split.us.split
  %.0316383.us408 = phi i32 [ %91, %._crit_edge.split.us.split ], [ %61, %.preheader370.us407.preheader ]
  %90 = uitofp nneg i32 %.0316383.us408 to double
  br label %.loopexit369.us

._crit_edge.split.us.split:                       ; preds = %.loopexit369.us
  %91 = add nuw nsw i32 %.0316383.us408, 1
  %.not358.us409.not = icmp slt i32 %.0316383.us408, %64
  br i1 %.not358.us409.not, label %.preheader370.us407, label %._crit_edge385.us411, !llvm.loop !26

.preheader370.lr.ph.split.us410:                  ; preds = %.preheader370.lr.ph.us404
  br i1 %53, label %.preheader370.us407.us.preheader, label %.preheader370.us407.preheader

.preheader370.us407.preheader:                    ; preds = %.preheader370.lr.ph.split.us410
  %92 = trunc nuw nsw i64 %indvars.iv547 to i32
  br label %.preheader370.us407

.preheader370.us407.us.preheader:                 ; preds = %.preheader370.lr.ph.split.us410
  %93 = zext nneg i32 %..us to i64
  %94 = trunc nuw nsw i64 %indvars.iv547 to i32
  br label %.preheader370.us407.us

.preheader370.us407.us:                           ; preds = %.preheader370.us407.us.preheader, %._crit_edge.split.us.split.us.us
  %indvars.iv544 = phi i64 [ %58, %.preheader370.us407.us.preheader ], [ %indvars.iv.next545, %._crit_edge.split.us.split.us.us ]
  %95 = trunc nuw nsw i64 %indvars.iv544 to i32
  %96 = uitofp nneg i32 %95 to double
  %97 = mul nuw nsw i64 %indvars.iv544, %56
  %invariant.gep = getelementptr inbounds double, ptr %2, i64 %97
  br label %.lr.ph.us.us.us

.lr.ph.us.us.us:                                  ; preds = %..loopexit369_crit_edge.us.us.us, %.preheader370.us407.us
  %indvars.iv538 = phi i64 [ %indvars.iv.next539, %..loopexit369_crit_edge.us.us.us ], [ %66, %.preheader370.us407.us ]
  %98 = trunc nuw nsw i64 %indvars.iv538 to i32
  %99 = tail call double @vl_quickshift_distance(ptr noundef %2, i32 noundef %17, i32 noundef %19, i32 noundef %.fr509, i32 noundef %94, i32 noundef %140, i32 noundef %98, i32 noundef %95)
  %100 = fneg double %99
  %101 = fdiv double %100, %51
  %102 = tail call double @exp(double noundef %101) #6
  %103 = fneg double %102
  %104 = load double, ptr %73, align 8, !tbaa !21
  %105 = fadd double %102, %104
  store double %105, ptr %73, align 8, !tbaa !21
  %106 = uitofp nneg i32 %98 to double
  %107 = load double, ptr %74, align 8, !tbaa !21
  %108 = tail call double @llvm.fmuladd.f64(double %106, double %103, double %107)
  store double %108, ptr %74, align 8, !tbaa !21
  %109 = load double, ptr %76, align 8, !tbaa !21
  %110 = tail call double @llvm.fmuladd.f64(double %96, double %103, double %109)
  store double %110, ptr %76, align 8, !tbaa !21
  %gep = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv538
  br i1 %57, label %..loopexit369_crit_edge.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.new

.lr.ph.us.us.us.new:                              ; preds = %.lr.ph.us.us.us, %.lr.ph.us.us.us.new
  %indvars.iv531 = phi i64 [ %indvars.iv.next532.1, %.lr.ph.us.us.us.new ], [ 0, %.lr.ph.us.us.us ]
  %niter = phi i64 [ %niter.next.1, %.lr.ph.us.us.us.new ], [ 0, %.lr.ph.us.us.us ]
  %111 = mul nuw nsw i64 %indvars.iv531, %54
  %112 = getelementptr inbounds double, ptr %gep, i64 %111
  %113 = load double, ptr %112, align 8, !tbaa !21
  %114 = add nuw nsw i64 %indvars.iv531, 2
  %115 = mul nuw nsw i64 %114, %54
  %116 = add nuw nsw i64 %115, %72
  %117 = getelementptr inbounds double, ptr %.0, i64 %116
  %118 = load double, ptr %117, align 8, !tbaa !21
  %119 = tail call double @llvm.fmuladd.f64(double %113, double %103, double %118)
  store double %119, ptr %117, align 8, !tbaa !21
  %indvars.iv.next532 = or disjoint i64 %indvars.iv531, 1
  %120 = mul nuw nsw i64 %indvars.iv.next532, %54
  %121 = getelementptr inbounds double, ptr %gep, i64 %120
  %122 = load double, ptr %121, align 8, !tbaa !21
  %123 = add nuw nsw i64 %indvars.iv531, 3
  %124 = mul nuw nsw i64 %123, %54
  %125 = add nuw nsw i64 %124, %72
  %126 = getelementptr inbounds double, ptr %.0, i64 %125
  %127 = load double, ptr %126, align 8, !tbaa !21
  %128 = tail call double @llvm.fmuladd.f64(double %122, double %103, double %127)
  store double %128, ptr %126, align 8, !tbaa !21
  %indvars.iv.next532.1 = add nuw nsw i64 %indvars.iv531, 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 %..loopexit369_crit_edge.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.new, !llvm.loop !27

..loopexit369_crit_edge.us.us.us.unr-lcssa:       ; preds = %.lr.ph.us.us.us.new, %.lr.ph.us.us.us
  %indvars.iv531.unr = phi i64 [ 0, %.lr.ph.us.us.us ], [ %indvars.iv.next532.1, %.lr.ph.us.us.us.new ]
  br i1 %lcmp.mod.not, label %..loopexit369_crit_edge.us.us.us, label %..loopexit369_crit_edge.us.us.us.epilog-lcssa

..loopexit369_crit_edge.us.us.us.epilog-lcssa:    ; preds = %..loopexit369_crit_edge.us.us.us.unr-lcssa
  %129 = mul nuw nsw i64 %indvars.iv531.unr, %54
  %130 = getelementptr inbounds double, ptr %gep, i64 %129
  %131 = load double, ptr %130, align 8, !tbaa !21
  %132 = add nuw nsw i64 %indvars.iv531.unr, 2
  %133 = mul nuw nsw i64 %132, %54
  %134 = add nuw nsw i64 %133, %72
  %135 = getelementptr inbounds double, ptr %.0, i64 %134
  %136 = load double, ptr %135, align 8, !tbaa !21
  %137 = tail call double @llvm.fmuladd.f64(double %131, double %103, double %136)
  store double %137, ptr %135, align 8, !tbaa !21
  br label %..loopexit369_crit_edge.us.us.us

..loopexit369_crit_edge.us.us.us:                 ; preds = %..loopexit369_crit_edge.us.us.us.unr-lcssa, %..loopexit369_crit_edge.us.us.us.epilog-lcssa
  %indvars.iv.next539 = add nuw nsw i64 %indvars.iv538, 1
  %.not359.us.us.us.not = icmp ult i64 %indvars.iv538, %93
  br i1 %.not359.us.us.us.not, label %.lr.ph.us.us.us, label %._crit_edge.split.us.split.us.us, !llvm.loop !25

._crit_edge.split.us.split.us.us:                 ; preds = %..loopexit369_crit_edge.us.us.us
  %indvars.iv.next545 = add nuw nsw i64 %indvars.iv544, 1
  %.not358.us409.us.not = icmp ult i64 %indvars.iv544, %139
  br i1 %.not358.us409.us.not, label %.preheader370.us407.us, label %._crit_edge385.us411, !llvm.loop !26

._crit_edge385.us411:                             ; preds = %._crit_edge.split.us.split, %._crit_edge.split.us.split.us.us, %.preheader370.lr.ph.us404
  %indvars.iv.next548 = add nuw nsw i64 %indvars.iv547, 1
  %indvars.iv.next537 = add i32 %indvars.iv536, 1
  %exitcond551.not = icmp eq i64 %indvars.iv.next548, %56
  br i1 %exitcond551.not, label %._crit_edge.us419, label %.preheader370.lr.ph.us404, !llvm.loop !28

.lr.ph393.split.us418:                            ; preds = %.preheader371.us
  %138 = trunc nuw nsw i64 %indvars.iv557 to i32
  br i1 %.not360, label %.preheader370.lr.ph.us.us.preheader, label %.preheader370.lr.ph.us404.preheader

.preheader370.lr.ph.us404.preheader:              ; preds = %.lr.ph393.split.us418
  %139 = zext nneg i32 %64 to i64
  %140 = trunc nuw nsw i64 %indvars.iv557 to i32
  br label %.preheader370.lr.ph.us404

.preheader370.lr.ph.us.us.preheader:              ; preds = %.lr.ph393.split.us418
  %invariant.gep641 = getelementptr inbounds double, ptr %6, i64 %65
  br label %.preheader370.lr.ph.us.us

._crit_edge.us419:                                ; preds = %._crit_edge385.us411, %._crit_edge385.us.us, %.preheader371.us
  %indvars.iv.next558 = add nuw nsw i64 %indvars.iv557, 1
  %indvars.iv.next542 = add i32 %indvars.iv541, 1
  %exitcond561.not = icmp eq i64 %indvars.iv.next558, %wide.trip.count560
  br i1 %exitcond561.not, label %._crit_edge403, label %.preheader371.us, !llvm.loop !29

.preheader370.lr.ph.us.us:                        ; preds = %.preheader370.lr.ph.us.us.preheader, %._crit_edge385.us.us
  %indvars.iv552 = phi i64 [ 0, %.preheader370.lr.ph.us.us.preheader ], [ %indvars.iv.next553, %._crit_edge385.us.us ]
  %141 = trunc i64 %indvars.iv552 to i32
  %142 = sub i32 %141, %34
  %143 = tail call i32 @llvm.smax.i32(i32 %142, i32 0)
  %144 = trunc i64 %indvars.iv552 to i32
  %145 = add i32 %144, %34
  %..us397.us = tail call i32 @llvm.smin.i32(i32 %145, i32 %48)
  %.not359378.us.us = icmp sgt i32 %143, %..us397.us
  %gep642 = getelementptr inbounds double, ptr %invariant.gep641, i64 %indvars.iv552
  br i1 %.not359378.us.us, label %._crit_edge385.us.us, label %.preheader370.us386.us.us.preheader

.preheader370.us386.us.us.preheader:              ; preds = %.preheader370.lr.ph.us.us
  %146 = trunc nuw nsw i64 %indvars.iv552 to i32
  br label %.preheader370.us386.us.us

._crit_edge385.us.us:                             ; preds = %._crit_edge.split.us.us.us.us, %.preheader370.lr.ph.us.us
  %indvars.iv.next553 = add nuw nsw i64 %indvars.iv552, 1
  %exitcond556.not = icmp eq i64 %indvars.iv.next553, %56
  br i1 %exitcond556.not, label %._crit_edge.us419, label %.preheader370.lr.ph.us.us, !llvm.loop !28

.preheader370.us386.us.us:                        ; preds = %.preheader370.us386.us.us.preheader, %._crit_edge.split.us.us.us.us
  %.0316383.us387.us.us = phi i32 [ %155, %._crit_edge.split.us.us.us.us ], [ %61, %.preheader370.us386.us.us.preheader ]
  br label %147

147:                                              ; preds = %147, %.preheader370.us386.us.us
  %.0301379.us.us.us.us = phi i32 [ %143, %.preheader370.us386.us.us ], [ %154, %147 ]
  %148 = tail call double @vl_quickshift_distance(ptr noundef %2, i32 noundef %17, i32 noundef %19, i32 noundef %.fr509, i32 noundef %146, i32 noundef %138, i32 noundef %.0301379.us.us.us.us, i32 noundef %.0316383.us387.us.us)
  %149 = fneg double %148
  %150 = fdiv double %149, %51
  %151 = tail call double @exp(double noundef %150) #6
  %152 = load double, ptr %gep642, align 8, !tbaa !21
  %153 = fadd double %151, %152
  store double %153, ptr %gep642, align 8, !tbaa !21
  %154 = add nuw nsw i32 %.0301379.us.us.us.us, 1
  %.not359.us.us.us.us.not = icmp slt i32 %.0301379.us.us.us.us, %..us397.us
  br i1 %.not359.us.us.us.us.not, label %147, label %._crit_edge.split.us.us.us.us, !llvm.loop !25

._crit_edge.split.us.us.us.us:                    ; preds = %147
  %155 = add nuw nsw i32 %.0316383.us387.us.us, 1
  %.not358.us389.us.us.not = icmp slt i32 %.0316383.us387.us.us, %64
  br i1 %.not358.us389.us.us.not, label %.preheader370.us386.us.us, label %._crit_edge385.us.us, !llvm.loop !26

._crit_edge403:                                   ; preds = %._crit_edge.us419, %.preheader372.lr.ph
  %156 = load i32, ptr %20, align 4, !tbaa !20
  %.not352 = icmp eq i32 %156, 0
  br i1 %.not352, label %.preheader364, label %.preheader367

.preheader367:                                    ; preds = %._crit_edge403
  br i1 %37, label %.preheader366.lr.ph, label %.loopexit

.preheader366.lr.ph:                              ; preds = %.preheader367
  %157 = icmp sgt i32 %17, 0
  %158 = add nsw i32 %17, -1
  %159 = add nsw i32 %19, -1
  %160 = icmp sgt i32 %.fr509, 0
  %161 = sitofp i32 %17 to double
  br i1 %157, label %.preheader366.us.preheader, label %.loopexit

.preheader366.us.preheader:                       ; preds = %.preheader366.lr.ph
  %162 = mul nuw nsw i32 %19, %17
  %163 = sub i32 0, %34
  %164 = zext nneg i32 %17 to i64
  %165 = zext nneg i32 %162 to i64
  %wide.trip.count600 = zext nneg i32 %19 to i64
  %wide.trip.count577 = zext i32 %.fr509 to i64
  %xtraiter663 = and i64 %wide.trip.count577, 1
  %166 = icmp eq i32 %.fr509, 1
  %unroll_iter666 = and i64 %wide.trip.count577, 2147483646
  %lcmp.mod664.not = icmp eq i64 %xtraiter663, 0
  %min.iters.check = icmp eq i32 %17, 1
  %n.vec = and i64 %164, 2147483646
  %broadcast.splatinsert = insertelement <2 x double> poison, double %161, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %n.vec, %164
  br label %.preheader366.us

.preheader366.us:                                 ; preds = %.preheader366.us.preheader, %._crit_edge461.us
  %indvars.iv597 = phi i64 [ 0, %.preheader366.us.preheader ], [ %indvars.iv.next598, %._crit_edge461.us ]
  %indvars.iv568 = phi i32 [ %163, %.preheader366.us.preheader ], [ %indvars.iv.next569, %._crit_edge461.us ]
  %smax583 = tail call i32 @llvm.smax.i32(i32 %indvars.iv568, i32 0)
  %167 = zext nneg i32 %smax583 to i64
  %168 = trunc nuw nsw i64 %indvars.iv597 to i32
  %169 = uitofp nneg i32 %168 to double
  %170 = trunc i64 %indvars.iv597 to i32
  %171 = sub i32 %170, %34
  %172 = tail call i32 @llvm.smax.i32(i32 %171, i32 0)
  %173 = trunc i64 %indvars.iv597 to i32
  %174 = add i32 %173, %34
  %175 = tail call i32 @llvm.smin.i32(i32 %174, i32 %159)
  %.not356437.us = icmp sgt i32 %172, %175
  %176 = mul nuw nsw i64 %indvars.iv597, %164
  br i1 %.not356437.us, label %.lr.ph.split.us.us.preheader, label %.preheader365.lr.ph.us.preheader

.lr.ph.split.us.us.preheader:                     ; preds = %.preheader366.us
  br i1 %min.iters.check, label %.lr.ph.split.us.us.preheader657, label %vector.ph

.lr.ph.split.us.us.preheader657:                  ; preds = %middle.block, %.lr.ph.split.us.us.preheader
  %indvars.iv592.ph = phi i64 [ 0, %.lr.ph.split.us.us.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph.split.us.us

vector.ph:                                        ; preds = %.lr.ph.split.us.us.preheader
  %broadcast.splatinsert653 = insertelement <2 x double> poison, double %169, i64 0
  %broadcast.splat654 = shufflevector <2 x double> %broadcast.splatinsert653, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %177 = uitofp <2 x i32> %vec.ind to <2 x double>
  %178 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %broadcast.splat654, <2 x double> %177)
  %179 = fptosi <2 x double> %178 to <2 x i32>
  %180 = add nuw nsw i64 %index, %176
  %181 = getelementptr inbounds i32, ptr %4, i64 %180
  store <2 x i32> %179, ptr %181, align 4, !tbaa !30
  %182 = getelementptr inbounds double, ptr %8, i64 %180
  store <2 x double> zeroinitializer, ptr %182, align 8, !tbaa !21
  %index.next = add nuw i64 %index, 2
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %183 = icmp eq i64 %index.next, %n.vec
  br i1 %183, label %middle.block, label %vector.body, !llvm.loop !31

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge461.us, label %.lr.ph.split.us.us.preheader657

.preheader365.lr.ph.us.preheader:                 ; preds = %.preheader366.us
  %184 = zext nneg i32 %175 to i64
  br label %.preheader365.lr.ph.us

.preheader365.lr.ph.us:                           ; preds = %.preheader365.lr.ph.us.preheader, %._crit_edge.us469
  %indvars.iv587 = phi i64 [ 0, %.preheader365.lr.ph.us.preheader ], [ %indvars.iv.next588, %._crit_edge.us469 ]
  %indvars.iv562 = phi i32 [ %163, %.preheader365.lr.ph.us.preheader ], [ %indvars.iv.next563, %._crit_edge.us469 ]
  %smax579 = tail call i32 @llvm.smax.i32(i32 %indvars.iv562, i32 0)
  %185 = zext nneg i32 %smax579 to i64
  %186 = trunc nuw nsw i64 %indvars.iv587 to i32
  %187 = uitofp nneg i32 %186 to double
  %188 = trunc i64 %indvars.iv587 to i32
  %189 = sub i32 %188, %34
  %190 = tail call i32 @llvm.smax.i32(i32 %189, i32 0)
  %191 = trunc i64 %indvars.iv587 to i32
  %192 = add i32 %191, %34
  %.361.us = tail call i32 @llvm.smin.i32(i32 %192, i32 %158)
  %.not357424.us = icmp sgt i32 %190, %.361.us
  %193 = add nuw nsw i64 %indvars.iv587, %176
  br i1 %.not357424.us, label %._crit_edge.us469, label %.preheader365.lr.ph.split.us468

194:                                              ; preds = %.preheader365.us464, %194
  %indvars.iv565 = phi i64 [ %185, %.preheader365.us464 ], [ %indvars.iv.next566, %194 ]
  %.1323427.us = phi double [ %.0322440.us, %.preheader365.us464 ], [ %.2324.us, %194 ]
  %.1326426.us = phi double [ %.0325439.us, %.preheader365.us464 ], [ %.2327.us, %194 ]
  %.1329425.us = phi double [ %.0328438.us, %.preheader365.us464 ], [ %.2330.us, %194 ]
  %195 = add nuw nsw i64 %indvars.iv565, %208
  %196 = getelementptr inbounds double, ptr %.0295, i64 %195
  %197 = load double, ptr %196, align 8, !tbaa !21
  %198 = fneg double %197
  %199 = fmul double %218, %198
  %indvars.iv565.tr = trunc i64 %indvars.iv565 to i32
  %200 = shl i32 %indvars.iv565.tr, 1
  %201 = uitofp nneg i32 %200 to double
  %202 = fneg double %201
  %203 = tail call double @llvm.fmuladd.f64(double %202, double %219, double %199)
  %204 = tail call double @llvm.fmuladd.f64(double %211, double %220, double %203)
  %205 = fcmp ogt double %204, %.1323427.us
  %206 = trunc nuw nsw i64 %indvars.iv565 to i32
  %207 = uitofp nneg i32 %206 to double
  %.2330.us = select i1 %205, double %213, double %.1329425.us
  %.2327.us = select i1 %205, double %207, double %.1326426.us
  %.2324.us = select i1 %205, double %204, double %.1323427.us
  %indvars.iv.next566 = add nuw nsw i64 %indvars.iv565, 1
  %.not357.us.not = icmp ult i64 %indvars.iv565, %221
  br i1 %.not357.us.not, label %194, label %._crit_edge430.split.us, !llvm.loop !34

.preheader365.us464:                              ; preds = %.preheader365.lr.ph.split.us468, %._crit_edge430.split.us
  %indvars.iv571 = phi i64 [ %indvars.iv.next572, %._crit_edge430.split.us ], [ %167, %.preheader365.lr.ph.split.us468 ]
  %.0322440.us = phi double [ %.2324.us, %._crit_edge430.split.us ], [ 0.000000e+00, %.preheader365.lr.ph.split.us468 ]
  %.0325439.us = phi double [ %.2327.us, %._crit_edge430.split.us ], [ %187, %.preheader365.lr.ph.split.us468 ]
  %.0328438.us = phi double [ %.2330.us, %._crit_edge430.split.us ], [ %169, %.preheader365.lr.ph.split.us468 ]
  %208 = mul nuw nsw i64 %indvars.iv571, %164
  %indvars.iv571.tr = trunc i64 %indvars.iv571 to i32
  %209 = shl i32 %indvars.iv571.tr, 1
  %210 = uitofp nneg i32 %209 to double
  %211 = fneg double %210
  %212 = trunc nuw nsw i64 %indvars.iv571 to i32
  %213 = uitofp nneg i32 %212 to double
  br label %194

._crit_edge430.split.us:                          ; preds = %194
  %indvars.iv.next572 = add nuw nsw i64 %indvars.iv571, 1
  %.not356.us466.not = icmp ult i64 %indvars.iv571, %184
  br i1 %.not356.us466.not, label %.preheader365.us464, label %._crit_edge.us469, !llvm.loop !35

.preheader365.lr.ph.split.us468:                  ; preds = %.preheader365.lr.ph.us
  %214 = add nuw nsw i64 %193, %165
  %215 = getelementptr inbounds double, ptr %.0, i64 %214
  %216 = getelementptr inbounds double, ptr %.0, i64 %193
  %217 = getelementptr inbounds double, ptr %6, i64 %193
  %218 = load double, ptr %217, align 8, !tbaa !21
  %219 = load double, ptr %216, align 8, !tbaa !21
  %220 = load double, ptr %215, align 8, !tbaa !21
  %221 = zext nneg i32 %.361.us to i64
  br i1 %160, label %.preheader365.us448.us, label %.preheader365.us464

._crit_edge.us469:                                ; preds = %._crit_edge430.split.us, %._crit_edge430.split.us.us.us, %.preheader365.lr.ph.us
  %.us-phi445.us = phi double [ %169, %.preheader365.lr.ph.us ], [ %.2330.us.us.us, %._crit_edge430.split.us.us.us ], [ %.2330.us, %._crit_edge430.split.us ]
  %.us-phi446.us = phi double [ %187, %.preheader365.lr.ph.us ], [ %.2327.us.us.us, %._crit_edge430.split.us.us.us ], [ %.2327.us, %._crit_edge430.split.us ]
  %.us-phi447.us = phi double [ 0.000000e+00, %.preheader365.lr.ph.us ], [ %.2324.us.us.us, %._crit_edge430.split.us.us.us ], [ %.2324.us, %._crit_edge430.split.us ]
  %222 = tail call double @llvm.fmuladd.f64(double %161, double %.us-phi445.us, double %.us-phi446.us)
  %223 = fptosi double %222 to i32
  %224 = getelementptr inbounds i32, ptr %4, i64 %193
  store i32 %223, ptr %224, align 4, !tbaa !30
  %225 = getelementptr inbounds double, ptr %8, i64 %193
  store double %.us-phi447.us, ptr %225, align 8, !tbaa !21
  %indvars.iv.next588 = add nuw nsw i64 %indvars.iv587, 1
  %indvars.iv.next563 = add i32 %indvars.iv562, 1
  %exitcond591.not = icmp eq i64 %indvars.iv.next588, %164
  br i1 %exitcond591.not, label %._crit_edge461.us, label %.preheader365.lr.ph.us, !llvm.loop !36

.preheader365.us448.us:                           ; preds = %.preheader365.lr.ph.split.us468, %._crit_edge430.split.us.us.us
  %indvars.iv584 = phi i64 [ %indvars.iv.next585, %._crit_edge430.split.us.us.us ], [ %167, %.preheader365.lr.ph.split.us468 ]
  %.0322440.us450.us = phi double [ %.2324.us.us.us, %._crit_edge430.split.us.us.us ], [ 0.000000e+00, %.preheader365.lr.ph.split.us468 ]
  %.0325439.us451.us = phi double [ %.2327.us.us.us, %._crit_edge430.split.us.us.us ], [ %187, %.preheader365.lr.ph.split.us468 ]
  %.0328438.us452.us = phi double [ %.2330.us.us.us, %._crit_edge430.split.us.us.us ], [ %169, %.preheader365.lr.ph.split.us468 ]
  %226 = mul nuw nsw i64 %indvars.iv584, %164
  %indvars.iv584.tr = trunc i64 %indvars.iv584 to i32
  %227 = shl i32 %indvars.iv584.tr, 1
  %228 = uitofp nneg i32 %227 to double
  %229 = fneg double %228
  %230 = trunc nuw nsw i64 %indvars.iv584 to i32
  %231 = uitofp nneg i32 %230 to double
  br label %.lr.ph.us.us.us472

.lr.ph.us.us.us472:                               ; preds = %._crit_edge.us434.us.us, %.preheader365.us448.us
  %indvars.iv580 = phi i64 [ %indvars.iv.next581, %._crit_edge.us434.us.us ], [ %185, %.preheader365.us448.us ]
  %.1323427.us.us.us = phi double [ %.2324.us.us.us, %._crit_edge.us434.us.us ], [ %.0322440.us450.us, %.preheader365.us448.us ]
  %.1326426.us.us.us = phi double [ %.2327.us.us.us, %._crit_edge.us434.us.us ], [ %.0325439.us451.us, %.preheader365.us448.us ]
  %.1329425.us.us.us = phi double [ %.2330.us.us.us, %._crit_edge.us434.us.us ], [ %.0328438.us452.us, %.preheader365.us448.us ]
  %232 = add nuw nsw i64 %indvars.iv580, %226
  %233 = getelementptr inbounds double, ptr %.0295, i64 %232
  %234 = load double, ptr %233, align 8, !tbaa !21
  %235 = fneg double %234
  %236 = fmul double %218, %235
  %indvars.iv580.tr = trunc i64 %indvars.iv580 to i32
  %237 = shl i32 %indvars.iv580.tr, 1
  %238 = uitofp nneg i32 %237 to double
  %239 = fneg double %238
  %240 = tail call double @llvm.fmuladd.f64(double %239, double %219, double %236)
  %241 = tail call double @llvm.fmuladd.f64(double %229, double %220, double %240)
  %invariant.gep643 = getelementptr inbounds double, ptr %2, i64 %232
  br i1 %166, label %._crit_edge.us434.us.us.unr-lcssa, label %.lr.ph.us.us.us472.new

.lr.ph.us.us.us472.new:                           ; preds = %.lr.ph.us.us.us472, %.lr.ph.us.us.us472.new
  %indvars.iv574 = phi i64 [ %indvars.iv.next575.1, %.lr.ph.us.us.us472.new ], [ 0, %.lr.ph.us.us.us472 ]
  %.0320422.us.us.us = phi double [ %259, %.lr.ph.us.us.us472.new ], [ %241, %.lr.ph.us.us.us472 ]
  %niter667 = phi i64 [ %niter667.next.1, %.lr.ph.us.us.us472.new ], [ 0, %.lr.ph.us.us.us472 ]
  %242 = mul nuw nsw i64 %indvars.iv574, %165
  %gep644 = getelementptr inbounds double, ptr %invariant.gep643, i64 %242
  %243 = load double, ptr %gep644, align 8, !tbaa !21
  %244 = add nuw nsw i64 %indvars.iv574, 2
  %245 = mul nuw nsw i64 %244, %165
  %246 = add nuw nsw i64 %245, %193
  %247 = getelementptr inbounds double, ptr %.0, i64 %246
  %248 = load double, ptr %247, align 8, !tbaa !21
  %249 = fmul double %243, -2.000000e+00
  %250 = tail call double @llvm.fmuladd.f64(double %249, double %248, double %.0320422.us.us.us)
  %indvars.iv.next575 = or disjoint i64 %indvars.iv574, 1
  %251 = mul nuw nsw i64 %indvars.iv.next575, %165
  %gep644.1 = getelementptr inbounds double, ptr %invariant.gep643, i64 %251
  %252 = load double, ptr %gep644.1, align 8, !tbaa !21
  %253 = add nuw nsw i64 %indvars.iv574, 3
  %254 = mul nuw nsw i64 %253, %165
  %255 = add nuw nsw i64 %254, %193
  %256 = getelementptr inbounds double, ptr %.0, i64 %255
  %257 = load double, ptr %256, align 8, !tbaa !21
  %258 = fmul double %252, -2.000000e+00
  %259 = tail call double @llvm.fmuladd.f64(double %258, double %257, double %250)
  %indvars.iv.next575.1 = add nuw nsw i64 %indvars.iv574, 2
  %niter667.next.1 = add i64 %niter667, 2
  %niter667.ncmp.1 = icmp eq i64 %niter667.next.1, %unroll_iter666
  br i1 %niter667.ncmp.1, label %._crit_edge.us434.us.us.unr-lcssa, label %.lr.ph.us.us.us472.new, !llvm.loop !37

._crit_edge.us434.us.us.unr-lcssa:                ; preds = %.lr.ph.us.us.us472.new, %.lr.ph.us.us.us472
  %.lcssa.ph = phi double [ poison, %.lr.ph.us.us.us472 ], [ %259, %.lr.ph.us.us.us472.new ]
  %indvars.iv574.unr = phi i64 [ 0, %.lr.ph.us.us.us472 ], [ %indvars.iv.next575.1, %.lr.ph.us.us.us472.new ]
  %.0320422.us.us.us.unr = phi double [ %241, %.lr.ph.us.us.us472 ], [ %259, %.lr.ph.us.us.us472.new ]
  br i1 %lcmp.mod664.not, label %._crit_edge.us434.us.us, label %._crit_edge.us434.us.us.epilog-lcssa

._crit_edge.us434.us.us.epilog-lcssa:             ; preds = %._crit_edge.us434.us.us.unr-lcssa
  %260 = mul nuw nsw i64 %indvars.iv574.unr, %165
  %gep644.epil = getelementptr inbounds double, ptr %invariant.gep643, i64 %260
  %261 = load double, ptr %gep644.epil, align 8, !tbaa !21
  %262 = add nuw nsw i64 %indvars.iv574.unr, 2
  %263 = mul nuw nsw i64 %262, %165
  %264 = add nuw nsw i64 %263, %193
  %265 = getelementptr inbounds double, ptr %.0, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !21
  %267 = fmul double %261, -2.000000e+00
  %268 = tail call double @llvm.fmuladd.f64(double %267, double %266, double %.0320422.us.us.us.unr)
  br label %._crit_edge.us434.us.us

._crit_edge.us434.us.us:                          ; preds = %._crit_edge.us434.us.us.unr-lcssa, %._crit_edge.us434.us.us.epilog-lcssa
  %.lcssa = phi double [ %.lcssa.ph, %._crit_edge.us434.us.us.unr-lcssa ], [ %268, %._crit_edge.us434.us.us.epilog-lcssa ]
  %269 = fcmp ogt double %.lcssa, %.1323427.us.us.us
  %270 = trunc nuw nsw i64 %indvars.iv580 to i32
  %271 = uitofp nneg i32 %270 to double
  %.2330.us.us.us = select i1 %269, double %231, double %.1329425.us.us.us
  %.2327.us.us.us = select i1 %269, double %271, double %.1326426.us.us.us
  %.2324.us.us.us = select i1 %269, double %.lcssa, double %.1323427.us.us.us
  %indvars.iv.next581 = add nuw nsw i64 %indvars.iv580, 1
  %.not357.us.us.us.not = icmp ult i64 %indvars.iv580, %221
  br i1 %.not357.us.us.us.not, label %.lr.ph.us.us.us472, label %._crit_edge430.split.us.us.us, !llvm.loop !34

._crit_edge430.split.us.us.us:                    ; preds = %._crit_edge.us434.us.us
  %indvars.iv.next585 = add nuw nsw i64 %indvars.iv584, 1
  %.not356.us453.us.not = icmp ult i64 %indvars.iv584, %184
  br i1 %.not356.us453.us.not, label %.preheader365.us448.us, label %._crit_edge.us469, !llvm.loop !35

._crit_edge461.us:                                ; preds = %._crit_edge.us469, %.lr.ph.split.us.us, %middle.block
  %indvars.iv.next598 = add nuw nsw i64 %indvars.iv597, 1
  %indvars.iv.next569 = add i32 %indvars.iv568, 1
  %exitcond601.not = icmp eq i64 %indvars.iv.next598, %wide.trip.count600
  br i1 %exitcond601.not, label %.loopexit, label %.preheader366.us, !llvm.loop !38

.lr.ph.split.us.us:                               ; preds = %.lr.ph.split.us.us.preheader657, %.lr.ph.split.us.us
  %indvars.iv592 = phi i64 [ %indvars.iv.next593, %.lr.ph.split.us.us ], [ %indvars.iv592.ph, %.lr.ph.split.us.us.preheader657 ]
  %272 = trunc nuw nsw i64 %indvars.iv592 to i32
  %273 = uitofp nneg i32 %272 to double
  %274 = tail call double @llvm.fmuladd.f64(double %161, double %169, double %273)
  %275 = fptosi double %274 to i32
  %276 = add nuw nsw i64 %indvars.iv592, %176
  %277 = getelementptr inbounds i32, ptr %4, i64 %276
  store i32 %275, ptr %277, align 4, !tbaa !30
  %278 = getelementptr inbounds double, ptr %8, i64 %276
  store double 0.000000e+00, ptr %278, align 8, !tbaa !21
  %indvars.iv.next593 = add nuw nsw i64 %indvars.iv592, 1
  %exitcond596.not = icmp eq i64 %indvars.iv.next593, %164
  br i1 %exitcond596.not, label %._crit_edge461.us, label %.lr.ph.split.us.us, !llvm.loop !39

.preheader364:                                    ; preds = %._crit_edge403
  br i1 %37, label %.preheader363.lr.ph, label %.loopexit

.preheader363.lr.ph:                              ; preds = %.preheader364
  %279 = icmp sgt i32 %17, 0
  %280 = load double, ptr @vl_infinity_d, align 8
  %281 = add nsw i32 %17, -1
  %282 = add nsw i32 %19, -1
  %283 = sitofp i32 %17 to double
  br i1 %279, label %.preheader363.us.preheader, label %.loopexit

.preheader363.us.preheader:                       ; preds = %.preheader363.lr.ph
  %284 = sub i32 0, %36
  %285 = zext nneg i32 %17 to i64
  %wide.trip.count627 = zext nneg i32 %19 to i64
  %xtraiter668 = and i64 %285, 1
  %286 = icmp eq i32 %17, 1
  %unroll_iter670 = and i64 %285, 2147483646
  %lcmp.mod669.not = icmp eq i64 %xtraiter668, 0
  br label %.preheader363.us

.preheader363.us:                                 ; preds = %.preheader363.us.preheader, %._crit_edge495.us
  %indvars.iv624 = phi i64 [ 0, %.preheader363.us.preheader ], [ %indvars.iv.next625, %._crit_edge495.us ]
  %indvars.iv608 = phi i32 [ %284, %.preheader363.us.preheader ], [ %indvars.iv.next609, %._crit_edge495.us ]
  %smax610 = tail call i32 @llvm.smax.i32(i32 %indvars.iv608, i32 0)
  %287 = zext nneg i32 %smax610 to i64
  %288 = mul nuw nsw i64 %indvars.iv624, %285
  %289 = trunc nuw nsw i64 %indvars.iv624 to i32
  %290 = uitofp nneg i32 %289 to double
  %291 = trunc i64 %indvars.iv624 to i32
  %292 = sub i32 %291, %36
  %293 = tail call i32 @llvm.smax.i32(i32 %292, i32 0)
  %294 = trunc i64 %indvars.iv624 to i32
  %295 = add i32 %294, %36
  %296 = tail call i32 @llvm.smin.i32(i32 %295, i32 %282)
  %.not353482.us = icmp sgt i32 %293, %296
  br i1 %.not353482.us, label %.lr.ph.split.us.us508.preheader, label %.preheader.lr.ph.us.preheader

.lr.ph.split.us.us508.preheader:                  ; preds = %.preheader363.us
  br i1 %286, label %._crit_edge495.us.loopexit.unr-lcssa, label %.lr.ph.split.us.us508

.preheader.lr.ph.us.preheader:                    ; preds = %.preheader363.us
  %297 = zext nneg i32 %296 to i64
  br label %.preheader.lr.ph.us

.preheader.lr.ph.us:                              ; preds = %.preheader.lr.ph.us.preheader, %._crit_edge487.us
  %indvars.iv614 = phi i64 [ 0, %.preheader.lr.ph.us.preheader ], [ %indvars.iv.next615, %._crit_edge487.us ]
  %indvars.iv602 = phi i32 [ %284, %.preheader.lr.ph.us.preheader ], [ %indvars.iv.next603, %._crit_edge487.us ]
  %smax604 = tail call i32 @llvm.smax.i32(i32 %indvars.iv602, i32 0)
  %298 = zext nneg i32 %smax604 to i64
  %299 = add nuw nsw i64 %indvars.iv614, %288
  %300 = getelementptr inbounds double, ptr %6, i64 %299
  %301 = load double, ptr %300, align 8, !tbaa !21
  %302 = trunc nuw nsw i64 %indvars.iv614 to i32
  %303 = uitofp nneg i32 %302 to double
  %304 = trunc i64 %indvars.iv614 to i32
  %305 = sub i32 %304, %36
  %306 = tail call i32 @llvm.smax.i32(i32 %305, i32 0)
  %307 = trunc i64 %indvars.iv614 to i32
  %308 = add i32 %307, %36
  %.362.us = tail call i32 @llvm.smin.i32(i32 %308, i32 %281)
  %.not354475.us = icmp sgt i32 %306, %.362.us
  br i1 %.not354475.us, label %._crit_edge487.us, label %.preheader.us499.preheader

.preheader.us499.preheader:                       ; preds = %.preheader.lr.ph.us
  %309 = zext nneg i32 %.362.us to i64
  br label %.preheader.us499

310:                                              ; preds = %.preheader.us499, %319
  %indvars.iv605 = phi i64 [ %298, %.preheader.us499 ], [ %indvars.iv.next606, %319 ]
  %.1305478.us = phi double [ %.0304486.us, %.preheader.us499 ], [ %.3307.us, %319 ]
  %.1309477.us = phi double [ %.0308485.us, %.preheader.us499 ], [ %.3311.us, %319 ]
  %.1313476.us = phi double [ %.0312484.us, %.preheader.us499 ], [ %.3315.us, %319 ]
  %gep646 = getelementptr inbounds double, ptr %invariant.gep645, i64 %indvars.iv605
  %311 = load double, ptr %gep646, align 8, !tbaa !21
  %312 = fcmp ogt double %311, %301
  br i1 %312, label %313, label %319

313:                                              ; preds = %310
  %314 = trunc nuw nsw i64 %indvars.iv605 to i32
  %315 = tail call double @vl_quickshift_distance(ptr noundef %2, i32 noundef %17, i32 noundef %19, i32 noundef %.fr509, i32 noundef %302, i32 noundef %289, i32 noundef %314, i32 noundef %321)
  %316 = fcmp ole double %315, %13
  %317 = fcmp olt double %315, %.1313476.us
  %or.cond.us = select i1 %316, i1 %317, i1 false
  %318 = uitofp nneg i32 %314 to double
  %.2314.us = select i1 %or.cond.us, double %315, double %.1313476.us
  %.2310.us = select i1 %or.cond.us, double %318, double %.1309477.us
  %.2306.us = select i1 %or.cond.us, double %322, double %.1305478.us
  br label %319

319:                                              ; preds = %313, %310
  %.3315.us = phi double [ %.2314.us, %313 ], [ %.1313476.us, %310 ]
  %.3311.us = phi double [ %.2310.us, %313 ], [ %.1309477.us, %310 ]
  %.3307.us = phi double [ %.2306.us, %313 ], [ %.1305478.us, %310 ]
  %indvars.iv.next606 = add nuw nsw i64 %indvars.iv605, 1
  %.not354.us.not = icmp ult i64 %indvars.iv605, %309
  br i1 %.not354.us.not, label %310, label %._crit_edge.us501, !llvm.loop !40

.preheader.us499:                                 ; preds = %.preheader.us499.preheader, %._crit_edge.us501
  %indvars.iv611 = phi i64 [ %287, %.preheader.us499.preheader ], [ %indvars.iv.next612, %._crit_edge.us501 ]
  %.0304486.us = phi double [ %290, %.preheader.us499.preheader ], [ %.3307.us, %._crit_edge.us501 ]
  %.0308485.us = phi double [ %303, %.preheader.us499.preheader ], [ %.3311.us, %._crit_edge.us501 ]
  %.0312484.us = phi double [ %280, %.preheader.us499.preheader ], [ %.3315.us, %._crit_edge.us501 ]
  %320 = mul nuw nsw i64 %indvars.iv611, %285
  %321 = trunc nuw nsw i64 %indvars.iv611 to i32
  %322 = uitofp nneg i32 %321 to double
  %invariant.gep645 = getelementptr inbounds double, ptr %6, i64 %320
  br label %310

._crit_edge.us501:                                ; preds = %319
  %indvars.iv.next612 = add nuw nsw i64 %indvars.iv611, 1
  %.not353.us503.not = icmp ult i64 %indvars.iv611, %297
  br i1 %.not353.us503.not, label %.preheader.us499, label %._crit_edge487.us, !llvm.loop !41

._crit_edge487.us:                                ; preds = %._crit_edge.us501, %.preheader.lr.ph.us
  %.us-phi.us = phi double [ %280, %.preheader.lr.ph.us ], [ %.3315.us, %._crit_edge.us501 ]
  %.us-phi491.us = phi double [ %303, %.preheader.lr.ph.us ], [ %.3311.us, %._crit_edge.us501 ]
  %.us-phi492.us = phi double [ %290, %.preheader.lr.ph.us ], [ %.3307.us, %._crit_edge.us501 ]
  %323 = tail call double @llvm.fmuladd.f64(double %283, double %.us-phi492.us, double %.us-phi491.us)
  %324 = fptosi double %323 to i32
  %325 = getelementptr inbounds i32, ptr %4, i64 %299
  store i32 %324, ptr %325, align 4, !tbaa !30
  %326 = tail call double @sqrt(double noundef %.us-phi.us) #6
  %327 = getelementptr inbounds double, ptr %8, i64 %299
  store double %326, ptr %327, align 8, !tbaa !21
  %indvars.iv.next615 = add nuw nsw i64 %indvars.iv614, 1
  %indvars.iv.next603 = add i32 %indvars.iv602, 1
  %exitcond618.not = icmp eq i64 %indvars.iv.next615, %285
  br i1 %exitcond618.not, label %._crit_edge495.us, label %.preheader.lr.ph.us, !llvm.loop !42

._crit_edge495.us.loopexit.unr-lcssa:             ; preds = %.lr.ph.split.us.us508, %.lr.ph.split.us.us508.preheader
  %indvars.iv619.unr = phi i64 [ 0, %.lr.ph.split.us.us508.preheader ], [ %indvars.iv.next620.1, %.lr.ph.split.us.us508 ]
  br i1 %lcmp.mod669.not, label %._crit_edge495.us, label %.lr.ph.split.us.us508.epil

.lr.ph.split.us.us508.epil:                       ; preds = %._crit_edge495.us.loopexit.unr-lcssa
  %328 = add nuw nsw i64 %indvars.iv619.unr, %288
  %329 = trunc nuw nsw i64 %indvars.iv619.unr to i32
  %330 = uitofp nneg i32 %329 to double
  %331 = tail call double @llvm.fmuladd.f64(double %283, double %290, double %330)
  %332 = fptosi double %331 to i32
  %333 = getelementptr inbounds i32, ptr %4, i64 %328
  store i32 %332, ptr %333, align 4, !tbaa !30
  %334 = tail call double @sqrt(double noundef %280) #6
  %335 = getelementptr inbounds double, ptr %8, i64 %328
  store double %334, ptr %335, align 8, !tbaa !21
  br label %._crit_edge495.us

._crit_edge495.us:                                ; preds = %._crit_edge487.us, %.lr.ph.split.us.us508.epil, %._crit_edge495.us.loopexit.unr-lcssa
  %indvars.iv.next625 = add nuw nsw i64 %indvars.iv624, 1
  %indvars.iv.next609 = add i32 %indvars.iv608, 1
  %exitcond628.not = icmp eq i64 %indvars.iv.next625, %wide.trip.count627
  br i1 %exitcond628.not, label %.loopexit, label %.preheader363.us, !llvm.loop !43

.lr.ph.split.us.us508:                            ; preds = %.lr.ph.split.us.us508.preheader, %.lr.ph.split.us.us508
  %indvars.iv619 = phi i64 [ %indvars.iv.next620.1, %.lr.ph.split.us.us508 ], [ 0, %.lr.ph.split.us.us508.preheader ]
  %niter671 = phi i64 [ %niter671.next.1, %.lr.ph.split.us.us508 ], [ 0, %.lr.ph.split.us.us508.preheader ]
  %336 = add nuw nsw i64 %indvars.iv619, %288
  %337 = trunc nuw nsw i64 %indvars.iv619 to i32
  %338 = uitofp nneg i32 %337 to double
  %339 = tail call double @llvm.fmuladd.f64(double %283, double %290, double %338)
  %340 = fptosi double %339 to i32
  %341 = getelementptr inbounds i32, ptr %4, i64 %336
  store i32 %340, ptr %341, align 4, !tbaa !30
  %342 = tail call double @sqrt(double noundef %280) #6
  %343 = getelementptr inbounds double, ptr %8, i64 %336
  store double %342, ptr %343, align 8, !tbaa !21
  %indvars.iv.next620 = or disjoint i64 %indvars.iv619, 1
  %344 = add nuw nsw i64 %indvars.iv.next620, %288
  %345 = trunc nuw nsw i64 %indvars.iv.next620 to i32
  %346 = uitofp nneg i32 %345 to double
  %347 = tail call double @llvm.fmuladd.f64(double %283, double %290, double %346)
  %348 = fptosi double %347 to i32
  %349 = getelementptr inbounds i32, ptr %4, i64 %344
  store i32 %348, ptr %349, align 4, !tbaa !30
  %350 = tail call double @sqrt(double noundef %280) #6
  %351 = getelementptr inbounds double, ptr %8, i64 %344
  store double %350, ptr %351, align 8, !tbaa !21
  %indvars.iv.next620.1 = add nuw nsw i64 %indvars.iv619, 2
  %niter671.next.1 = add i64 %niter671, 2
  %niter671.ncmp.1 = icmp eq i64 %niter671.next.1, %unroll_iter670
  br i1 %niter671.ncmp.1, label %._crit_edge495.us.loopexit.unr-lcssa, label %.lr.ph.split.us.us508, !llvm.loop !42

.loopexit:                                        ; preds = %._crit_edge461.us, %._crit_edge495.us, %.loopexit374, %.preheader371.lr.ph, %.preheader363.lr.ph, %.preheader366.lr.ph, %.preheader367, %.preheader364
  %.not355 = icmp eq ptr %.0, null
  br i1 %.not355, label %353, label %352

352:                                              ; preds = %.loopexit
  tail call void @vl_free(ptr noundef nonnull %.0) #6
  br label %353

353:                                              ; preds = %352, %.loopexit
  br i1 %.not351, label %354, label %355

354:                                              ; preds = %353
  tail call void @vl_free(ptr noundef nonnull %.0295) #6
  br label %355

355:                                              ; preds = %354, %353
  ret void
}

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @exp(double noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #4

declare void @vl_free(ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #5

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


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