; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/BLAS/TESTING (dblat3)

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

@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1

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

declare i64 @s_cmp(ptr noundef, ptr noundef, 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 i32 @dmake_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, i64 noundef %11, i64 noundef %12, i64 noundef %13) #2 {
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store ptr %2, ptr %17, align 8, !tbaa !5
  store ptr %3, ptr %18, align 8, !tbaa !5
  store ptr %4, ptr %19, align 8, !tbaa !5
  store ptr %5, ptr %20, align 8, !tbaa !5
  store ptr %6, ptr %21, align 8, !tbaa !5
  store ptr %7, ptr %22, align 8, !tbaa !5
  store ptr %8, ptr %23, align 8, !tbaa !5
  store ptr %9, ptr %24, align 8, !tbaa !5
  store ptr %10, ptr %25, align 8, !tbaa !5
  store i64 %11, ptr %26, align 8, !tbaa !9
  store i64 %12, ptr %27, align 8, !tbaa !9
  store i64 %13, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  %43 = load ptr, ptr %21, align 8, !tbaa !5
  %44 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %44, ptr %29, align 8, !tbaa !9
  %45 = load i64, ptr %29, align 8, !tbaa !9
  %46 = add nsw i64 1, %45
  store i64 %46, ptr %30, align 8, !tbaa !9
  %47 = load i64, ptr %30, align 8, !tbaa !9
  %48 = load ptr, ptr %20, align 8, !tbaa !5
  %49 = sub i64 0, %47
  %50 = getelementptr inbounds double, ptr %48, i64 %49
  store ptr %50, ptr %20, align 8, !tbaa !5
  %51 = load ptr, ptr %22, align 8, !tbaa !5
  %52 = getelementptr inbounds double, ptr %51, i32 -1
  store ptr %52, ptr %22, align 8, !tbaa !5
  %53 = load ptr, ptr %15, align 8, !tbaa !5
  %54 = call i64 @s_cmp(ptr noundef %53, ptr noundef @.str.5, i64 noundef 2, i64 noundef 2)
  %55 = icmp eq i64 %54, 0
  %56 = zext i1 %55 to i32
  %57 = sext i32 %56 to i64
  store i64 %57, ptr %35, align 8, !tbaa !9
  %58 = load ptr, ptr %15, align 8, !tbaa !5
  %59 = call i64 @s_cmp(ptr noundef %58, ptr noundef @.str.7, i64 noundef 2, i64 noundef 2)
  %60 = icmp eq i64 %59, 0
  %61 = zext i1 %60 to i32
  %62 = sext i32 %61 to i64
  store i64 %62, ptr %37, align 8, !tbaa !9
  %63 = load ptr, ptr %15, align 8, !tbaa !5
  %64 = call i64 @s_cmp(ptr noundef %63, ptr noundef @.str.8, i64 noundef 2, i64 noundef 2)
  %65 = icmp eq i64 %64, 0
  %66 = zext i1 %65 to i32
  %67 = sext i32 %66 to i64
  store i64 %67, ptr %36, align 8, !tbaa !9
  %68 = load i64, ptr %37, align 8, !tbaa !9
  %69 = icmp ne i64 %68, 0
  br i1 %69, label %73, label %70

70:                                               ; preds = %14
  %71 = load i64, ptr %36, align 8, !tbaa !9
  %72 = icmp ne i64 %71, 0
  br i1 %72, label %73, label %78

73:                                               ; preds = %70, %14
  %74 = load ptr, ptr %16, align 8, !tbaa !5
  %75 = load i8, ptr %74, align 1, !tbaa !11
  %76 = zext i8 %75 to i32
  %77 = icmp eq i32 %76, 85
  br label %78

78:                                               ; preds = %73, %70
  %79 = phi i1 [ false, %70 ], [ %77, %73 ]
  %80 = zext i1 %79 to i32
  %81 = sext i32 %80 to i64
  store i64 %81, ptr %42, align 8, !tbaa !9
  %82 = load i64, ptr %37, align 8, !tbaa !9
  %83 = icmp ne i64 %82, 0
  br i1 %83, label %87, label %84

84:                                               ; preds = %78
  %85 = load i64, ptr %36, align 8, !tbaa !9
  %86 = icmp ne i64 %85, 0
  br i1 %86, label %87, label %92

87:                                               ; preds = %84, %78
  %88 = load ptr, ptr %16, align 8, !tbaa !5
  %89 = load i8, ptr %88, align 1, !tbaa !11
  %90 = zext i8 %89 to i32
  %91 = icmp eq i32 %90, 76
  br label %92

92:                                               ; preds = %87, %84
  %93 = phi i1 [ false, %84 ], [ %91, %87 ]
  %94 = zext i1 %93 to i32
  %95 = sext i32 %94 to i64
  store i64 %95, ptr %41, align 8, !tbaa !9
  %96 = load i64, ptr %36, align 8, !tbaa !9
  %97 = icmp ne i64 %96, 0
  br i1 %97, label %98, label %103

98:                                               ; preds = %92
  %99 = load ptr, ptr %17, align 8, !tbaa !5
  %100 = load i8, ptr %99, align 1, !tbaa !11
  %101 = zext i8 %100 to i32
  %102 = icmp eq i32 %101, 85
  br label %103

103:                                              ; preds = %98, %92
  %104 = phi i1 [ false, %92 ], [ %102, %98 ]
  %105 = zext i1 %104 to i32
  %106 = sext i32 %105 to i64
  store i64 %106, ptr %40, align 8, !tbaa !9
  %107 = load ptr, ptr %19, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  store i64 %108, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %34, align 8, !tbaa !9
  br label %109

109:                                              ; preds = %233, %103
  %110 = load i64, ptr %34, align 8, !tbaa !9
  %111 = load i64, ptr %31, align 8, !tbaa !9
  %112 = icmp sle i64 %110, %111
  br i1 %112, label %113, label %236

113:                                              ; preds = %109
  %114 = load ptr, ptr %18, align 8, !tbaa !5
  %115 = load i64, ptr %114, align 8, !tbaa !9
  store i64 %115, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %116

116:                                              ; preds = %205, %113
  %117 = load i64, ptr %33, align 8, !tbaa !9
  %118 = load i64, ptr %32, align 8, !tbaa !9
  %119 = icmp sle i64 %117, %118
  br i1 %119, label %120, label %208

120:                                              ; preds = %116
  %121 = load i64, ptr %35, align 8, !tbaa !9
  %122 = icmp ne i64 %121, 0
  br i1 %122, label %137, label %123

123:                                              ; preds = %120
  %124 = load i64, ptr %42, align 8, !tbaa !9
  %125 = icmp ne i64 %124, 0
  br i1 %125, label %126, label %130

126:                                              ; preds = %123
  %127 = load i64, ptr %33, align 8, !tbaa !9
  %128 = load i64, ptr %34, align 8, !tbaa !9
  %129 = icmp sle i64 %127, %128
  br i1 %129, label %137, label %130

130:                                              ; preds = %126, %123
  %131 = load i64, ptr %41, align 8, !tbaa !9
  %132 = icmp ne i64 %131, 0
  br i1 %132, label %133, label %204

133:                                              ; preds = %130
  %134 = load i64, ptr %33, align 8, !tbaa !9
  %135 = load i64, ptr %34, align 8, !tbaa !9
  %136 = icmp sge i64 %134, %135
  br i1 %136, label %137, label %204

137:                                              ; preds = %133, %126, %120
  %138 = load ptr, ptr %24, align 8, !tbaa !5
  %139 = call double @dbeg_(ptr noundef %138)
  %140 = load ptr, ptr %25, align 8, !tbaa !5
  %141 = load double, ptr %140, align 8, !tbaa !12
  %142 = fadd double %139, %141
  %143 = load ptr, ptr %20, align 8, !tbaa !5
  %144 = load i64, ptr %33, align 8, !tbaa !9
  %145 = load i64, ptr %34, align 8, !tbaa !9
  %146 = load i64, ptr %29, align 8, !tbaa !9
  %147 = mul nsw i64 %145, %146
  %148 = add nsw i64 %144, %147
  %149 = getelementptr inbounds double, ptr %143, i64 %148
  store double %142, ptr %149, align 8, !tbaa !12
  %150 = load i64, ptr %33, align 8, !tbaa !9
  %151 = load i64, ptr %34, align 8, !tbaa !9
  %152 = icmp ne i64 %150, %151
  br i1 %152, label %153, label %203

153:                                              ; preds = %137
  %154 = load ptr, ptr %19, align 8, !tbaa !5
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = icmp sgt i64 %155, 3
  br i1 %156, label %157, label %171

157:                                              ; preds = %153
  %158 = load i64, ptr %34, align 8, !tbaa !9
  %159 = load ptr, ptr %19, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = sdiv i64 %160, 2
  %162 = icmp eq i64 %158, %161
  br i1 %162, label %163, label %171

163:                                              ; preds = %157
  %164 = load ptr, ptr %20, align 8, !tbaa !5
  %165 = load i64, ptr %33, align 8, !tbaa !9
  %166 = load i64, ptr %34, align 8, !tbaa !9
  %167 = load i64, ptr %29, align 8, !tbaa !9
  %168 = mul nsw i64 %166, %167
  %169 = add nsw i64 %165, %168
  %170 = getelementptr inbounds double, ptr %164, i64 %169
  store double 0.000000e+00, ptr %170, align 8, !tbaa !12
  br label %171

171:                                              ; preds = %163, %157, %153
  %172 = load i64, ptr %37, align 8, !tbaa !9
  %173 = icmp ne i64 %172, 0
  br i1 %173, label %174, label %190

174:                                              ; preds = %171
  %175 = load ptr, ptr %20, align 8, !tbaa !5
  %176 = load i64, ptr %33, align 8, !tbaa !9
  %177 = load i64, ptr %34, align 8, !tbaa !9
  %178 = load i64, ptr %29, align 8, !tbaa !9
  %179 = mul nsw i64 %177, %178
  %180 = add nsw i64 %176, %179
  %181 = getelementptr inbounds double, ptr %175, i64 %180
  %182 = load double, ptr %181, align 8, !tbaa !12
  %183 = load ptr, ptr %20, align 8, !tbaa !5
  %184 = load i64, ptr %34, align 8, !tbaa !9
  %185 = load i64, ptr %33, align 8, !tbaa !9
  %186 = load i64, ptr %29, align 8, !tbaa !9
  %187 = mul nsw i64 %185, %186
  %188 = add nsw i64 %184, %187
  %189 = getelementptr inbounds double, ptr %183, i64 %188
  store double %182, ptr %189, align 8, !tbaa !12
  br label %202

190:                                              ; preds = %171
  %191 = load i64, ptr %36, align 8, !tbaa !9
  %192 = icmp ne i64 %191, 0
  br i1 %192, label %193, label %201

193:                                              ; preds = %190
  %194 = load ptr, ptr %20, align 8, !tbaa !5
  %195 = load i64, ptr %34, align 8, !tbaa !9
  %196 = load i64, ptr %33, align 8, !tbaa !9
  %197 = load i64, ptr %29, align 8, !tbaa !9
  %198 = mul nsw i64 %196, %197
  %199 = add nsw i64 %195, %198
  %200 = getelementptr inbounds double, ptr %194, i64 %199
  store double 0.000000e+00, ptr %200, align 8, !tbaa !12
  br label %201

201:                                              ; preds = %193, %190
  br label %202

202:                                              ; preds = %201, %174
  br label %203

203:                                              ; preds = %202, %137
  br label %204

204:                                              ; preds = %203, %133, %130
  br label %205

205:                                              ; preds = %204
  %206 = load i64, ptr %33, align 8, !tbaa !9
  %207 = add nsw i64 %206, 1
  store i64 %207, ptr %33, align 8, !tbaa !9
  br label %116, !llvm.loop !14

208:                                              ; preds = %116
  %209 = load i64, ptr %36, align 8, !tbaa !9
  %210 = icmp ne i64 %209, 0
  br i1 %210, label %211, label %221

211:                                              ; preds = %208
  %212 = load ptr, ptr %20, align 8, !tbaa !5
  %213 = load i64, ptr %34, align 8, !tbaa !9
  %214 = load i64, ptr %34, align 8, !tbaa !9
  %215 = load i64, ptr %29, align 8, !tbaa !9
  %216 = mul nsw i64 %214, %215
  %217 = add nsw i64 %213, %216
  %218 = getelementptr inbounds double, ptr %212, i64 %217
  %219 = load double, ptr %218, align 8, !tbaa !12
  %220 = fadd double %219, 1.000000e+00
  store double %220, ptr %218, align 8, !tbaa !12
  br label %221

221:                                              ; preds = %211, %208
  %222 = load i64, ptr %40, align 8, !tbaa !9
  %223 = icmp ne i64 %222, 0
  br i1 %223, label %224, label %232

224:                                              ; preds = %221
  %225 = load ptr, ptr %20, align 8, !tbaa !5
  %226 = load i64, ptr %34, align 8, !tbaa !9
  %227 = load i64, ptr %34, align 8, !tbaa !9
  %228 = load i64, ptr %29, align 8, !tbaa !9
  %229 = mul nsw i64 %227, %228
  %230 = add nsw i64 %226, %229
  %231 = getelementptr inbounds double, ptr %225, i64 %230
  store double 1.000000e+00, ptr %231, align 8, !tbaa !12
  br label %232

232:                                              ; preds = %224, %221
  br label %233

233:                                              ; preds = %232
  %234 = load i64, ptr %34, align 8, !tbaa !9
  %235 = add nsw i64 %234, 1
  store i64 %235, ptr %34, align 8, !tbaa !9
  br label %109, !llvm.loop !16

236:                                              ; preds = %109
  %237 = load ptr, ptr %15, align 8, !tbaa !5
  %238 = call i64 @s_cmp(ptr noundef %237, ptr noundef @.str.5, i64 noundef 2, i64 noundef 2)
  %239 = icmp eq i64 %238, 0
  br i1 %239, label %240, label %303

240:                                              ; preds = %236
  %241 = load ptr, ptr %19, align 8, !tbaa !5
  %242 = load i64, ptr %241, align 8, !tbaa !9
  store i64 %242, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %34, align 8, !tbaa !9
  br label %243

243:                                              ; preds = %299, %240
  %244 = load i64, ptr %34, align 8, !tbaa !9
  %245 = load i64, ptr %31, align 8, !tbaa !9
  %246 = icmp sle i64 %244, %245
  br i1 %246, label %247, label %302

247:                                              ; preds = %243
  %248 = load ptr, ptr %18, align 8, !tbaa !5
  %249 = load i64, ptr %248, align 8, !tbaa !9
  store i64 %249, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %250

250:                                              ; preds = %272, %247
  %251 = load i64, ptr %33, align 8, !tbaa !9
  %252 = load i64, ptr %32, align 8, !tbaa !9
  %253 = icmp sle i64 %251, %252
  br i1 %253, label %254, label %275

254:                                              ; preds = %250
  %255 = load ptr, ptr %20, align 8, !tbaa !5
  %256 = load i64, ptr %33, align 8, !tbaa !9
  %257 = load i64, ptr %34, align 8, !tbaa !9
  %258 = load i64, ptr %29, align 8, !tbaa !9
  %259 = mul nsw i64 %257, %258
  %260 = add nsw i64 %256, %259
  %261 = getelementptr inbounds double, ptr %255, i64 %260
  %262 = load double, ptr %261, align 8, !tbaa !12
  %263 = load ptr, ptr %22, align 8, !tbaa !5
  %264 = load i64, ptr %33, align 8, !tbaa !9
  %265 = load i64, ptr %34, align 8, !tbaa !9
  %266 = sub nsw i64 %265, 1
  %267 = load ptr, ptr %23, align 8, !tbaa !5
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = mul nsw i64 %266, %268
  %270 = add nsw i64 %264, %269
  %271 = getelementptr inbounds double, ptr %263, i64 %270
  store double %262, ptr %271, align 8, !tbaa !12
  br label %272

272:                                              ; preds = %254
  %273 = load i64, ptr %33, align 8, !tbaa !9
  %274 = add nsw i64 %273, 1
  store i64 %274, ptr %33, align 8, !tbaa !9
  br label %250, !llvm.loop !17

275:                                              ; preds = %250
  %276 = load ptr, ptr %23, align 8, !tbaa !5
  %277 = load i64, ptr %276, align 8, !tbaa !9
  store i64 %277, ptr %32, align 8, !tbaa !9
  %278 = load ptr, ptr %18, align 8, !tbaa !5
  %279 = load i64, ptr %278, align 8, !tbaa !9
  %280 = add nsw i64 %279, 1
  store i64 %280, ptr %33, align 8, !tbaa !9
  br label %281

281:                                              ; preds = %295, %275
  %282 = load i64, ptr %33, align 8, !tbaa !9
  %283 = load i64, ptr %32, align 8, !tbaa !9
  %284 = icmp sle i64 %282, %283
  br i1 %284, label %285, label %298

285:                                              ; preds = %281
  %286 = load ptr, ptr %22, align 8, !tbaa !5
  %287 = load i64, ptr %33, align 8, !tbaa !9
  %288 = load i64, ptr %34, align 8, !tbaa !9
  %289 = sub nsw i64 %288, 1
  %290 = load ptr, ptr %23, align 8, !tbaa !5
  %291 = load i64, ptr %290, align 8, !tbaa !9
  %292 = mul nsw i64 %289, %291
  %293 = add nsw i64 %287, %292
  %294 = getelementptr inbounds double, ptr %286, i64 %293
  store double -1.000000e+10, ptr %294, align 8, !tbaa !12
  br label %295

295:                                              ; preds = %285
  %296 = load i64, ptr %33, align 8, !tbaa !9
  %297 = add nsw i64 %296, 1
  store i64 %297, ptr %33, align 8, !tbaa !9
  br label %281, !llvm.loop !18

298:                                              ; preds = %281
  br label %299

299:                                              ; preds = %298
  %300 = load i64, ptr %34, align 8, !tbaa !9
  %301 = add nsw i64 %300, 1
  store i64 %301, ptr %34, align 8, !tbaa !9
  br label %243, !llvm.loop !19

302:                                              ; preds = %243
  br label %417

303:                                              ; preds = %236
  %304 = load ptr, ptr %15, align 8, !tbaa !5
  %305 = call i64 @s_cmp(ptr noundef %304, ptr noundef @.str.7, i64 noundef 2, i64 noundef 2)
  %306 = icmp eq i64 %305, 0
  br i1 %306, label %311, label %307

307:                                              ; preds = %303
  %308 = load ptr, ptr %15, align 8, !tbaa !5
  %309 = call i64 @s_cmp(ptr noundef %308, ptr noundef @.str.8, i64 noundef 2, i64 noundef 2)
  %310 = icmp eq i64 %309, 0
  br i1 %310, label %311, label %416

311:                                              ; preds = %307, %303
  %312 = load ptr, ptr %19, align 8, !tbaa !5
  %313 = load i64, ptr %312, align 8, !tbaa !9
  store i64 %313, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %34, align 8, !tbaa !9
  br label %314

314:                                              ; preds = %412, %311
  %315 = load i64, ptr %34, align 8, !tbaa !9
  %316 = load i64, ptr %31, align 8, !tbaa !9
  %317 = icmp sle i64 %315, %316
  br i1 %317, label %318, label %415

318:                                              ; preds = %314
  %319 = load i64, ptr %42, align 8, !tbaa !9
  %320 = icmp ne i64 %319, 0
  br i1 %320, label %321, label %330

321:                                              ; preds = %318
  store i64 1, ptr %38, align 8, !tbaa !9
  %322 = load i64, ptr %40, align 8, !tbaa !9
  %323 = icmp ne i64 %322, 0
  br i1 %323, label %324, label %327

324:                                              ; preds = %321
  %325 = load i64, ptr %34, align 8, !tbaa !9
  %326 = sub nsw i64 %325, 1
  store i64 %326, ptr %39, align 8, !tbaa !9
  br label %329

327:                                              ; preds = %321
  %328 = load i64, ptr %34, align 8, !tbaa !9
  store i64 %328, ptr %39, align 8, !tbaa !9
  br label %329

329:                                              ; preds = %327, %324
  br label %341

330:                                              ; preds = %318
  %331 = load i64, ptr %40, align 8, !tbaa !9
  %332 = icmp ne i64 %331, 0
  br i1 %332, label %333, label %336

333:                                              ; preds = %330
  %334 = load i64, ptr %34, align 8, !tbaa !9
  %335 = add nsw i64 %334, 1
  store i64 %335, ptr %38, align 8, !tbaa !9
  br label %338

336:                                              ; preds = %330
  %337 = load i64, ptr %34, align 8, !tbaa !9
  store i64 %337, ptr %38, align 8, !tbaa !9
  br label %338

338:                                              ; preds = %336, %333
  %339 = load ptr, ptr %19, align 8, !tbaa !5
  %340 = load i64, ptr %339, align 8, !tbaa !9
  store i64 %340, ptr %39, align 8, !tbaa !9
  br label %341

341:                                              ; preds = %338, %329
  %342 = load i64, ptr %38, align 8, !tbaa !9
  %343 = sub nsw i64 %342, 1
  store i64 %343, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %344

344:                                              ; preds = %358, %341
  %345 = load i64, ptr %33, align 8, !tbaa !9
  %346 = load i64, ptr %32, align 8, !tbaa !9
  %347 = icmp sle i64 %345, %346
  br i1 %347, label %348, label %361

348:                                              ; preds = %344
  %349 = load ptr, ptr %22, align 8, !tbaa !5
  %350 = load i64, ptr %33, align 8, !tbaa !9
  %351 = load i64, ptr %34, align 8, !tbaa !9
  %352 = sub nsw i64 %351, 1
  %353 = load ptr, ptr %23, align 8, !tbaa !5
  %354 = load i64, ptr %353, align 8, !tbaa !9
  %355 = mul nsw i64 %352, %354
  %356 = add nsw i64 %350, %355
  %357 = getelementptr inbounds double, ptr %349, i64 %356
  store double -1.000000e+10, ptr %357, align 8, !tbaa !12
  br label %358

358:                                              ; preds = %348
  %359 = load i64, ptr %33, align 8, !tbaa !9
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %33, align 8, !tbaa !9
  br label %344, !llvm.loop !20

361:                                              ; preds = %344
  %362 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %362, ptr %32, align 8, !tbaa !9
  %363 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %363, ptr %33, align 8, !tbaa !9
  br label %364

364:                                              ; preds = %386, %361
  %365 = load i64, ptr %33, align 8, !tbaa !9
  %366 = load i64, ptr %32, align 8, !tbaa !9
  %367 = icmp sle i64 %365, %366
  br i1 %367, label %368, label %389

368:                                              ; preds = %364
  %369 = load ptr, ptr %20, align 8, !tbaa !5
  %370 = load i64, ptr %33, align 8, !tbaa !9
  %371 = load i64, ptr %34, align 8, !tbaa !9
  %372 = load i64, ptr %29, align 8, !tbaa !9
  %373 = mul nsw i64 %371, %372
  %374 = add nsw i64 %370, %373
  %375 = getelementptr inbounds double, ptr %369, i64 %374
  %376 = load double, ptr %375, align 8, !tbaa !12
  %377 = load ptr, ptr %22, align 8, !tbaa !5
  %378 = load i64, ptr %33, align 8, !tbaa !9
  %379 = load i64, ptr %34, align 8, !tbaa !9
  %380 = sub nsw i64 %379, 1
  %381 = load ptr, ptr %23, align 8, !tbaa !5
  %382 = load i64, ptr %381, align 8, !tbaa !9
  %383 = mul nsw i64 %380, %382
  %384 = add nsw i64 %378, %383
  %385 = getelementptr inbounds double, ptr %377, i64 %384
  store double %376, ptr %385, align 8, !tbaa !12
  br label %386

386:                                              ; preds = %368
  %387 = load i64, ptr %33, align 8, !tbaa !9
  %388 = add nsw i64 %387, 1
  store i64 %388, ptr %33, align 8, !tbaa !9
  br label %364, !llvm.loop !21

389:                                              ; preds = %364
  %390 = load ptr, ptr %23, align 8, !tbaa !5
  %391 = load i64, ptr %390, align 8, !tbaa !9
  store i64 %391, ptr %32, align 8, !tbaa !9
  %392 = load i64, ptr %39, align 8, !tbaa !9
  %393 = add nsw i64 %392, 1
  store i64 %393, ptr %33, align 8, !tbaa !9
  br label %394

394:                                              ; preds = %408, %389
  %395 = load i64, ptr %33, align 8, !tbaa !9
  %396 = load i64, ptr %32, align 8, !tbaa !9
  %397 = icmp sle i64 %395, %396
  br i1 %397, label %398, label %411

398:                                              ; preds = %394
  %399 = load ptr, ptr %22, align 8, !tbaa !5
  %400 = load i64, ptr %33, align 8, !tbaa !9
  %401 = load i64, ptr %34, align 8, !tbaa !9
  %402 = sub nsw i64 %401, 1
  %403 = load ptr, ptr %23, align 8, !tbaa !5
  %404 = load i64, ptr %403, align 8, !tbaa !9
  %405 = mul nsw i64 %402, %404
  %406 = add nsw i64 %400, %405
  %407 = getelementptr inbounds double, ptr %399, i64 %406
  store double -1.000000e+10, ptr %407, align 8, !tbaa !12
  br label %408

408:                                              ; preds = %398
  %409 = load i64, ptr %33, align 8, !tbaa !9
  %410 = add nsw i64 %409, 1
  store i64 %410, ptr %33, align 8, !tbaa !9
  br label %394, !llvm.loop !22

411:                                              ; preds = %394
  br label %412

412:                                              ; preds = %411
  %413 = load i64, ptr %34, align 8, !tbaa !9
  %414 = add nsw i64 %413, 1
  store i64 %414, ptr %34, align 8, !tbaa !9
  br label %314, !llvm.loop !23

415:                                              ; preds = %314
  br label %416

416:                                              ; preds = %415, %307
  br label %417

417:                                              ; preds = %416, %302
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  ret i32 0
}

; Function Attrs: nounwind uwtable
declare dso_local double @dbeg_(ptr noundef) #2

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 = { 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, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}


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

@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @dmake_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef %5, ptr nocapture noundef readonly %6, ptr nocapture noundef writeonly %7, ptr nocapture noundef readonly %8, ptr noundef %9, ptr nocapture noundef readonly %10, i64 noundef %11, i64 noundef %12, i64 noundef %13) local_unnamed_addr #1 {
  %15 = ptrtoint ptr %5 to i64
  %16 = ptrtoint ptr %7 to i64
  %17 = load i64, ptr %6, align 8, !tbaa !5
  %18 = xor i64 %17, -1
  %19 = getelementptr inbounds double, ptr %5, i64 %18
  %20 = getelementptr inbounds i8, ptr %7, i64 -8
  %21 = tail call i64 @s_cmp(ptr noundef %0, ptr noundef nonnull @.str.5, i64 noundef 2, i64 noundef 2) #2
  %22 = icmp eq i64 %21, 0
  %23 = tail call i64 @s_cmp(ptr noundef %0, ptr noundef nonnull @.str.7, i64 noundef 2, i64 noundef 2) #2
  %.fr224 = freeze i64 %23
  %24 = icmp eq i64 %.fr224, 0
  %25 = tail call i64 @s_cmp(ptr noundef %0, ptr noundef nonnull @.str.8, i64 noundef 2, i64 noundef 2) #2
  %26 = icmp eq i64 %25, 0
  %or.cond = select i1 %24, i1 true, i1 %26
  br i1 %or.cond, label %27, label %.thread166

27:                                               ; preds = %14
  %28 = load i8, ptr %1, align 1, !tbaa !9
  %29 = icmp eq i8 %28, 85
  %30 = icmp eq i8 %28, 76
  br i1 %26, label %31, label %.thread166

31:                                               ; preds = %27
  %32 = load i8, ptr %2, align 1, !tbaa !9
  %33 = icmp eq i8 %32, 85
  br label %.thread166

.thread166:                                       ; preds = %14, %31, %27
  %34 = phi i1 [ %30, %27 ], [ %30, %31 ], [ false, %14 ]
  %35 = phi i1 [ %29, %27 ], [ %29, %31 ], [ false, %14 ]
  %36 = phi i1 [ false, %27 ], [ %33, %31 ], [ false, %14 ]
  %37 = load i64, ptr %4, align 8, !tbaa !5
  %.not172 = icmp slt i64 %37, 1
  br i1 %.not172, label %._crit_edge176, label %.lr.ph175

.lr.ph175:                                        ; preds = %.thread166
  %38 = add i64 %17, 1
  %39 = load i64, ptr %3, align 8, !tbaa !5
  %40 = icmp slt i64 %39, 1
  br i1 %40, label %.lr.ph175.split.us, label %.lr.ph175.split

.lr.ph175.split.us:                               ; preds = %.lr.ph175
  br i1 %26, label %.lr.ph175.split.us.split.us, label %.lr.ph175.split.us.split

.lr.ph175.split.us.split.us:                      ; preds = %.lr.ph175.split.us
  br i1 %36, label %.lr.ph175.split.us.split.us.split.us.preheader, label %.lr.ph175.split.us.split.us.split.preheader

.lr.ph175.split.us.split.us.split.preheader:      ; preds = %.lr.ph175.split.us.split.us
  %xtraiter342 = and i64 %37, 3
  %41 = icmp ult i64 %37, 4
  br i1 %41, label %._crit_edge176.loopexit338.unr-lcssa, label %.lr.ph175.split.us.split.us.split.preheader.new

.lr.ph175.split.us.split.us.split.preheader.new:  ; preds = %.lr.ph175.split.us.split.us.split.preheader
  %unroll_iter345 = and i64 %37, 9223372036854775804
  br label %.lr.ph175.split.us.split.us.split

.lr.ph175.split.us.split.us.split.us.preheader:   ; preds = %.lr.ph175.split.us.split.us
  %xtraiter347 = and i64 %37, 3
  %42 = icmp ult i64 %37, 4
  br i1 %42, label %._crit_edge176.loopexit.unr-lcssa, label %.lr.ph175.split.us.split.us.split.us.preheader.new

.lr.ph175.split.us.split.us.split.us.preheader.new: ; preds = %.lr.ph175.split.us.split.us.split.us.preheader
  %unroll_iter350 = and i64 %37, 9223372036854775804
  br label %.lr.ph175.split.us.split.us.split.us

.lr.ph175.split.us.split.us.split.us:             ; preds = %.lr.ph175.split.us.split.us.split.us, %.lr.ph175.split.us.split.us.split.us.preheader.new
  %.0145173.us.us.us = phi i64 [ 1, %.lr.ph175.split.us.split.us.split.us.preheader.new ], [ %54, %.lr.ph175.split.us.split.us.split.us ]
  %niter351 = phi i64 [ 0, %.lr.ph175.split.us.split.us.split.us.preheader.new ], [ %niter351.next.3, %.lr.ph175.split.us.split.us.split.us ]
  %43 = mul i64 %.0145173.us.us.us, %38
  %44 = getelementptr inbounds double, ptr %19, i64 %43
  store double 1.000000e+00, ptr %44, align 8, !tbaa !10
  %45 = add nuw nsw i64 %.0145173.us.us.us, 1
  %46 = mul i64 %45, %38
  %47 = getelementptr inbounds double, ptr %19, i64 %46
  store double 1.000000e+00, ptr %47, align 8, !tbaa !10
  %48 = add nuw nsw i64 %.0145173.us.us.us, 2
  %49 = mul i64 %48, %38
  %50 = getelementptr inbounds double, ptr %19, i64 %49
  store double 1.000000e+00, ptr %50, align 8, !tbaa !10
  %51 = add nuw i64 %.0145173.us.us.us, 3
  %52 = mul i64 %51, %38
  %53 = getelementptr inbounds double, ptr %19, i64 %52
  store double 1.000000e+00, ptr %53, align 8, !tbaa !10
  %54 = add nuw i64 %.0145173.us.us.us, 4
  %niter351.next.3 = add nuw i64 %niter351, 4
  %niter351.ncmp.3 = icmp eq i64 %niter351.next.3, %unroll_iter350
  br i1 %niter351.ncmp.3, label %._crit_edge176.loopexit.unr-lcssa, label %.lr.ph175.split.us.split.us.split.us, !llvm.loop !12

.lr.ph175.split.us.split.us.split:                ; preds = %.lr.ph175.split.us.split.us.split, %.lr.ph175.split.us.split.us.split.preheader.new
  %.0145173.us.us = phi i64 [ 1, %.lr.ph175.split.us.split.us.split.preheader.new ], [ %74, %.lr.ph175.split.us.split.us.split ]
  %niter346 = phi i64 [ 0, %.lr.ph175.split.us.split.us.split.preheader.new ], [ %niter346.next.3, %.lr.ph175.split.us.split.us.split ]
  %55 = mul i64 %.0145173.us.us, %38
  %56 = getelementptr inbounds double, ptr %19, i64 %55
  %57 = load double, ptr %56, align 8, !tbaa !10
  %58 = fadd double %57, 1.000000e+00
  store double %58, ptr %56, align 8, !tbaa !10
  %59 = add nuw nsw i64 %.0145173.us.us, 1
  %60 = mul i64 %59, %38
  %61 = getelementptr inbounds double, ptr %19, i64 %60
  %62 = load double, ptr %61, align 8, !tbaa !10
  %63 = fadd double %62, 1.000000e+00
  store double %63, ptr %61, align 8, !tbaa !10
  %64 = add nuw nsw i64 %.0145173.us.us, 2
  %65 = mul i64 %64, %38
  %66 = getelementptr inbounds double, ptr %19, i64 %65
  %67 = load double, ptr %66, align 8, !tbaa !10
  %68 = fadd double %67, 1.000000e+00
  store double %68, ptr %66, align 8, !tbaa !10
  %69 = add nuw i64 %.0145173.us.us, 3
  %70 = mul i64 %69, %38
  %71 = getelementptr inbounds double, ptr %19, i64 %70
  %72 = load double, ptr %71, align 8, !tbaa !10
  %73 = fadd double %72, 1.000000e+00
  store double %73, ptr %71, align 8, !tbaa !10
  %74 = add nuw i64 %.0145173.us.us, 4
  %niter346.next.3 = add nuw i64 %niter346, 4
  %niter346.ncmp.3 = icmp eq i64 %niter346.next.3, %unroll_iter345
  br i1 %niter346.ncmp.3, label %._crit_edge176.loopexit338.unr-lcssa, label %.lr.ph175.split.us.split.us.split, !llvm.loop !12

.lr.ph175.split.us.split:                         ; preds = %.lr.ph175.split.us
  br i1 %36, label %.lr.ph175.split.us.split.split.us.preheader, label %._crit_edge176

.lr.ph175.split.us.split.split.us.preheader:      ; preds = %.lr.ph175.split.us.split
  %xtraiter = and i64 %37, 3
  %75 = icmp ult i64 %37, 4
  br i1 %75, label %._crit_edge176.loopexit339.unr-lcssa, label %.lr.ph175.split.us.split.split.us.preheader.new

.lr.ph175.split.us.split.split.us.preheader.new:  ; preds = %.lr.ph175.split.us.split.split.us.preheader
  %unroll_iter = and i64 %37, 9223372036854775804
  br label %.lr.ph175.split.us.split.split.us

.lr.ph175.split.us.split.split.us:                ; preds = %.lr.ph175.split.us.split.split.us, %.lr.ph175.split.us.split.split.us.preheader.new
  %.0145173.us.us177 = phi i64 [ 1, %.lr.ph175.split.us.split.split.us.preheader.new ], [ %87, %.lr.ph175.split.us.split.split.us ]
  %niter = phi i64 [ 0, %.lr.ph175.split.us.split.split.us.preheader.new ], [ %niter.next.3, %.lr.ph175.split.us.split.split.us ]
  %76 = mul i64 %.0145173.us.us177, %38
  %77 = getelementptr inbounds double, ptr %19, i64 %76
  store double 1.000000e+00, ptr %77, align 8, !tbaa !10
  %78 = add nuw nsw i64 %.0145173.us.us177, 1
  %79 = mul i64 %78, %38
  %80 = getelementptr inbounds double, ptr %19, i64 %79
  store double 1.000000e+00, ptr %80, align 8, !tbaa !10
  %81 = add nuw nsw i64 %.0145173.us.us177, 2
  %82 = mul i64 %81, %38
  %83 = getelementptr inbounds double, ptr %19, i64 %82
  store double 1.000000e+00, ptr %83, align 8, !tbaa !10
  %84 = add nuw i64 %.0145173.us.us177, 3
  %85 = mul i64 %84, %38
  %86 = getelementptr inbounds double, ptr %19, i64 %85
  store double 1.000000e+00, ptr %86, align 8, !tbaa !10
  %87 = add nuw i64 %.0145173.us.us177, 4
  %niter.next.3 = add nuw i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge176.loopexit339.unr-lcssa, label %.lr.ph175.split.us.split.split.us, !llvm.loop !12

.lr.ph175.splitthread-pre-split:                  ; preds = %133
  %88 = add nuw i64 %.0145173, 1
  %.pr = load i64, ptr %3, align 8, !tbaa !5
  br label %.lr.ph175.split

.lr.ph175.split:                                  ; preds = %.lr.ph175, %.lr.ph175.splitthread-pre-split
  %89 = phi i64 [ %.pr, %.lr.ph175.splitthread-pre-split ], [ %39, %.lr.ph175 ]
  %.0145173 = phi i64 [ %88, %.lr.ph175.splitthread-pre-split ], [ 1, %.lr.ph175 ]
  %.not156170 = icmp slt i64 %89, 1
  br i1 %.not156170, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph175.split
  %90 = mul nsw i64 %.0145173, %17
  %invariant.gep = getelementptr double, ptr %19, i64 %90
  %91 = getelementptr double, ptr %19, i64 %.0145173
  br i1 %24, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %106
  %.0143171.us = phi i64 [ %107, %106 ], [ 1, %.lr.ph ]
  %.not157.us = icmp ule i64 %.0143171.us, %.0145173
  %or.cond161.not.us = and i1 %35, %.not157.us
  %or.cond167.us = select i1 %22, i1 true, i1 %or.cond161.not.us
  %.not158.us = icmp uge i64 %.0143171.us, %.0145173
  %or.cond163.not.us = and i1 %34, %.not158.us
  %or.cond168.us = select i1 %or.cond167.us, i1 true, i1 %or.cond163.not.us
  br i1 %or.cond168.us, label %92, label %106

92:                                               ; preds = %.lr.ph.split.us
  %93 = tail call double @dbeg_(ptr noundef %9)
  %94 = load double, ptr %10, align 8, !tbaa !10
  %95 = fadd double %93, %94
  %gep.us = getelementptr double, ptr %invariant.gep, i64 %.0143171.us
  store double %95, ptr %gep.us, align 8, !tbaa !10
  %.not159.us = icmp eq i64 %.0143171.us, %.0145173
  br i1 %.not159.us, label %106, label %96

96:                                               ; preds = %92
  %97 = load i64, ptr %4, align 8, !tbaa !5
  %98 = icmp sgt i64 %97, 3
  %99 = lshr i64 %97, 1
  %100 = icmp eq i64 %.0145173, %99
  %or.cond165.us = and i1 %98, %100
  br i1 %or.cond165.us, label %101, label %102

101:                                              ; preds = %96
  store double 0.000000e+00, ptr %gep.us, align 8, !tbaa !10
  br label %102

102:                                              ; preds = %101, %96
  %103 = phi double [ 0.000000e+00, %101 ], [ %95, %96 ]
  %104 = mul nsw i64 %.0143171.us, %17
  %105 = getelementptr double, ptr %91, i64 %104
  store double %103, ptr %105, align 8, !tbaa !10
  br label %106

106:                                              ; preds = %102, %92, %.lr.ph.split.us
  %107 = add nuw i64 %.0143171.us, 1
  %exitcond233.not = icmp eq i64 %.0143171.us, %89
  br i1 %exitcond233.not, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !14

.lr.ph.split:                                     ; preds = %.lr.ph, %122
  %.0143171 = phi i64 [ %123, %122 ], [ 1, %.lr.ph ]
  %.not157 = icmp ule i64 %.0143171, %.0145173
  %or.cond161.not = and i1 %35, %.not157
  %or.cond167 = select i1 %22, i1 true, i1 %or.cond161.not
  %.not158 = icmp uge i64 %.0143171, %.0145173
  %or.cond163.not = and i1 %34, %.not158
  %or.cond168 = select i1 %or.cond167, i1 true, i1 %or.cond163.not
  br i1 %or.cond168, label %108, label %122

108:                                              ; preds = %.lr.ph.split
  %109 = tail call double @dbeg_(ptr noundef %9)
  %110 = load double, ptr %10, align 8, !tbaa !10
  %111 = fadd double %109, %110
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0143171
  store double %111, ptr %gep, align 8, !tbaa !10
  %.not159 = icmp eq i64 %.0143171, %.0145173
  br i1 %.not159, label %122, label %112

112:                                              ; preds = %108
  %113 = load i64, ptr %4, align 8, !tbaa !5
  %114 = icmp sgt i64 %113, 3
  %115 = lshr i64 %113, 1
  %116 = icmp eq i64 %.0145173, %115
  %or.cond165 = and i1 %114, %116
  br i1 %or.cond165, label %117, label %118

117:                                              ; preds = %112
  store double 0.000000e+00, ptr %gep, align 8, !tbaa !10
  br label %118

118:                                              ; preds = %117, %112
  br i1 %26, label %119, label %122

119:                                              ; preds = %118
  %120 = mul nsw i64 %.0143171, %17
  %121 = getelementptr double, ptr %91, i64 %120
  store double 0.000000e+00, ptr %121, align 8, !tbaa !10
  br label %122

122:                                              ; preds = %.lr.ph.split, %119, %118, %108
  %123 = add nuw i64 %.0143171, 1
  %exitcond.not = icmp eq i64 %.0143171, %89
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !14

._crit_edge:                                      ; preds = %122, %106, %.lr.ph175.split
  br i1 %26, label %124, label %129

124:                                              ; preds = %._crit_edge
  %125 = mul i64 %.0145173, %38
  %126 = getelementptr inbounds double, ptr %19, i64 %125
  %127 = load double, ptr %126, align 8, !tbaa !10
  %128 = fadd double %127, 1.000000e+00
  store double %128, ptr %126, align 8, !tbaa !10
  br label %129

129:                                              ; preds = %124, %._crit_edge
  br i1 %36, label %130, label %133

130:                                              ; preds = %129
  %131 = mul i64 %.0145173, %38
  %132 = getelementptr inbounds double, ptr %19, i64 %131
  store double 1.000000e+00, ptr %132, align 8, !tbaa !10
  br label %133

133:                                              ; preds = %129, %130
  %exitcond234.not = icmp eq i64 %.0145173, %37
  br i1 %exitcond234.not, label %._crit_edge176, label %.lr.ph175.splitthread-pre-split, !llvm.loop !15

._crit_edge176.loopexit.unr-lcssa:                ; preds = %.lr.ph175.split.us.split.us.split.us, %.lr.ph175.split.us.split.us.split.us.preheader
  %.0145173.us.us.us.unr = phi i64 [ 1, %.lr.ph175.split.us.split.us.split.us.preheader ], [ %54, %.lr.ph175.split.us.split.us.split.us ]
  %lcmp.mod349.not = icmp eq i64 %xtraiter347, 0
  br i1 %lcmp.mod349.not, label %._crit_edge176, label %.lr.ph175.split.us.split.us.split.us.epil

.lr.ph175.split.us.split.us.split.us.epil:        ; preds = %._crit_edge176.loopexit.unr-lcssa, %.lr.ph175.split.us.split.us.split.us.epil
  %.0145173.us.us.us.epil = phi i64 [ %136, %.lr.ph175.split.us.split.us.split.us.epil ], [ %.0145173.us.us.us.unr, %._crit_edge176.loopexit.unr-lcssa ]
  %epil.iter348 = phi i64 [ %epil.iter348.next, %.lr.ph175.split.us.split.us.split.us.epil ], [ 0, %._crit_edge176.loopexit.unr-lcssa ]
  %134 = mul i64 %.0145173.us.us.us.epil, %38
  %135 = getelementptr inbounds double, ptr %19, i64 %134
  store double 1.000000e+00, ptr %135, align 8, !tbaa !10
  %136 = add nuw i64 %.0145173.us.us.us.epil, 1
  %epil.iter348.next = add i64 %epil.iter348, 1
  %epil.iter348.cmp.not = icmp eq i64 %epil.iter348.next, %xtraiter347
  br i1 %epil.iter348.cmp.not, label %._crit_edge176, label %.lr.ph175.split.us.split.us.split.us.epil, !llvm.loop !17

._crit_edge176.loopexit338.unr-lcssa:             ; preds = %.lr.ph175.split.us.split.us.split, %.lr.ph175.split.us.split.us.split.preheader
  %.0145173.us.us.unr = phi i64 [ 1, %.lr.ph175.split.us.split.us.split.preheader ], [ %74, %.lr.ph175.split.us.split.us.split ]
  %lcmp.mod344.not = icmp eq i64 %xtraiter342, 0
  br i1 %lcmp.mod344.not, label %._crit_edge176, label %.lr.ph175.split.us.split.us.split.epil

.lr.ph175.split.us.split.us.split.epil:           ; preds = %._crit_edge176.loopexit338.unr-lcssa, %.lr.ph175.split.us.split.us.split.epil
  %.0145173.us.us.epil = phi i64 [ %141, %.lr.ph175.split.us.split.us.split.epil ], [ %.0145173.us.us.unr, %._crit_edge176.loopexit338.unr-lcssa ]
  %epil.iter343 = phi i64 [ %epil.iter343.next, %.lr.ph175.split.us.split.us.split.epil ], [ 0, %._crit_edge176.loopexit338.unr-lcssa ]
  %137 = mul i64 %.0145173.us.us.epil, %38
  %138 = getelementptr inbounds double, ptr %19, i64 %137
  %139 = load double, ptr %138, align 8, !tbaa !10
  %140 = fadd double %139, 1.000000e+00
  store double %140, ptr %138, align 8, !tbaa !10
  %141 = add nuw i64 %.0145173.us.us.epil, 1
  %epil.iter343.next = add i64 %epil.iter343, 1
  %epil.iter343.cmp.not = icmp eq i64 %epil.iter343.next, %xtraiter342
  br i1 %epil.iter343.cmp.not, label %._crit_edge176, label %.lr.ph175.split.us.split.us.split.epil, !llvm.loop !19

._crit_edge176.loopexit339.unr-lcssa:             ; preds = %.lr.ph175.split.us.split.split.us, %.lr.ph175.split.us.split.split.us.preheader
  %.0145173.us.us177.unr = phi i64 [ 1, %.lr.ph175.split.us.split.split.us.preheader ], [ %87, %.lr.ph175.split.us.split.split.us ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge176, label %.lr.ph175.split.us.split.split.us.epil

.lr.ph175.split.us.split.split.us.epil:           ; preds = %._crit_edge176.loopexit339.unr-lcssa, %.lr.ph175.split.us.split.split.us.epil
  %.0145173.us.us177.epil = phi i64 [ %144, %.lr.ph175.split.us.split.split.us.epil ], [ %.0145173.us.us177.unr, %._crit_edge176.loopexit339.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph175.split.us.split.split.us.epil ], [ 0, %._crit_edge176.loopexit339.unr-lcssa ]
  %142 = mul i64 %.0145173.us.us177.epil, %38
  %143 = getelementptr inbounds double, ptr %19, i64 %142
  store double 1.000000e+00, ptr %143, align 8, !tbaa !10
  %144 = add nuw i64 %.0145173.us.us177.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge176, label %.lr.ph175.split.us.split.split.us.epil, !llvm.loop !20

._crit_edge176:                                   ; preds = %133, %._crit_edge176.loopexit339.unr-lcssa, %.lr.ph175.split.us.split.split.us.epil, %._crit_edge176.loopexit338.unr-lcssa, %.lr.ph175.split.us.split.us.split.epil, %._crit_edge176.loopexit.unr-lcssa, %.lr.ph175.split.us.split.us.split.us.epil, %.lr.ph175.split.us.split, %.thread166
  %145 = tail call i64 @s_cmp(ptr noundef %0, ptr noundef nonnull @.str.5, i64 noundef 2, i64 noundef 2) #2
  %146 = icmp eq i64 %145, 0
  br i1 %146, label %147, label %198

147:                                              ; preds = %._crit_edge176
  %148 = load i64, ptr %4, align 8, !tbaa !5
  %.not153220 = icmp slt i64 %148, 1
  br i1 %.not153220, label %.loopexit, label %.lr.ph223

.lr.ph223:                                        ; preds = %147
  %149 = load i64, ptr %3, align 8, !tbaa !5
  %.not154204 = icmp slt i64 %149, 1
  %150 = load i64, ptr %8, align 8, !tbaa !5
  %.not155.not213 = icmp slt i64 %149, %150
  br i1 %.not154204, label %.lr.ph223.split.us, label %.lr.ph207.preheader

.lr.ph207.preheader:                              ; preds = %.lr.ph223
  %151 = sub i64 %150, %149
  %152 = add nsw i64 %148, -1
  %153 = mul i64 %150, %152
  %154 = add i64 %153, %149
  %155 = shl i64 %154, 3
  %scevgep = getelementptr i8, ptr %7, i64 %155
  %156 = mul i64 %17, %152
  %157 = add i64 %156, %149
  %158 = shl i64 %157, 3
  %scevgep304 = getelementptr i8, ptr %5, i64 %158
  %159 = add nuw i64 %149, 1
  %min.iters.check308 = icmp ult i64 %149, 8
  %bound0 = icmp ugt ptr %scevgep304, %7
  %bound1 = icmp ugt ptr %scevgep, %5
  %found.conflict = and i1 %bound0, %bound1
  %160 = or i64 %150, %17
  %161 = and i64 %160, 1152921504606846976
  %162 = icmp ne i64 %161, 0
  %163 = or i1 %found.conflict, %162
  %n.vec311 = and i64 %149, 9223372036854775804
  %ind.end312 = or disjoint i64 %n.vec311, 1
  %cmp.n320 = icmp eq i64 %149, %n.vec311
  %min.iters.check292 = icmp ult i64 %151, 4
  %n.vec295 = and i64 %151, -4
  %ind.end296 = add i64 %149, %n.vec295
  %cmp.n302 = icmp eq i64 %151, %n.vec295
  br label %.lr.ph207

.lr.ph223.split.us:                               ; preds = %.lr.ph223
  br i1 %.not155.not213, label %.lr.ph216.us.us.preheader, label %.loopexit

.lr.ph216.us.us.preheader:                        ; preds = %.lr.ph223.split.us
  %164 = sub i64 %150, %149
  %min.iters.check323 = icmp ult i64 %164, 4
  %n.vec326 = and i64 %164, -4
  %ind.end327 = add i64 %149, %n.vec326
  %cmp.n333 = icmp eq i64 %164, %n.vec326
  br label %.lr.ph216.us.us

.lr.ph216.us.us:                                  ; preds = %.lr.ph216.us.us.preheader, %._crit_edge217.us.us
  %.1146221.us.us = phi i64 [ %171, %._crit_edge217.us.us ], [ 1, %.lr.ph216.us.us.preheader ]
  %165 = add nsw i64 %.1146221.us.us, -1
  %166 = mul nsw i64 %150, %165
  %invariant.gep218.us.us = getelementptr double, ptr %7, i64 %166
  br i1 %min.iters.check323, label %scalar.ph322.preheader, label %vector.ph324

vector.ph324:                                     ; preds = %.lr.ph216.us.us
  %167 = getelementptr double, ptr %invariant.gep218.us.us, i64 %149
  br label %vector.body329

vector.body329:                                   ; preds = %vector.body329, %vector.ph324
  %index330 = phi i64 [ 0, %vector.ph324 ], [ %index.next332, %vector.body329 ]
  %168 = getelementptr double, ptr %167, i64 %index330
  %169 = getelementptr i8, ptr %168, i64 16
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %168, align 8, !tbaa !10
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %169, align 8, !tbaa !10
  %index.next332 = add nuw i64 %index330, 4
  %170 = icmp eq i64 %index.next332, %n.vec326
  br i1 %170, label %middle.block321, label %vector.body329, !llvm.loop !21

middle.block321:                                  ; preds = %vector.body329
  br i1 %cmp.n333, label %._crit_edge217.us.us, label %scalar.ph322.preheader

scalar.ph322.preheader:                           ; preds = %middle.block321, %.lr.ph216.us.us
  %.2.in214.us.us.ph = phi i64 [ %149, %.lr.ph216.us.us ], [ %ind.end327, %middle.block321 ]
  br label %scalar.ph322

scalar.ph322:                                     ; preds = %scalar.ph322.preheader, %scalar.ph322
  %.2.in214.us.us = phi i64 [ %.2.us.us, %scalar.ph322 ], [ %.2.in214.us.us.ph, %scalar.ph322.preheader ]
  %.2.us.us = add nsw i64 %.2.in214.us.us, 1
  %gep219.us.us = getelementptr double, ptr %invariant.gep218.us.us, i64 %.2.in214.us.us
  store double -1.000000e+10, ptr %gep219.us.us, align 8, !tbaa !10
  %exitcond249.not = icmp eq i64 %.2.us.us, %150
  br i1 %exitcond249.not, label %._crit_edge217.us.us, label %scalar.ph322, !llvm.loop !24

._crit_edge217.us.us:                             ; preds = %scalar.ph322, %middle.block321
  %171 = add nuw i64 %.1146221.us.us, 1
  %exitcond250.not = icmp eq i64 %.1146221.us.us, %148
  br i1 %exitcond250.not, label %.loopexit, label %.lr.ph216.us.us, !llvm.loop !25

.lr.ph207:                                        ; preds = %.lr.ph207.preheader, %._crit_edge217
  %.1146221 = phi i64 [ %197, %._crit_edge217 ], [ 1, %.lr.ph207.preheader ]
  %172 = mul nsw i64 %.1146221, %17
  %invariant.gep209 = getelementptr double, ptr %19, i64 %172
  %173 = add nsw i64 %.1146221, -1
  %174 = mul nsw i64 %150, %173
  %invariant.gep211 = getelementptr double, ptr %20, i64 %174
  %brmerge = select i1 %min.iters.check308, i1 true, i1 %163
  br i1 %brmerge, label %scalar.ph307.preheader, label %vector.body314

vector.body314:                                   ; preds = %.lr.ph207, %vector.body314
  %index315 = phi i64 [ %index.next319, %vector.body314 ], [ 0, %.lr.ph207 ]
  %offset.idx316 = or disjoint i64 %index315, 1
  %175 = getelementptr double, ptr %invariant.gep209, i64 %offset.idx316
  %176 = getelementptr i8, ptr %175, i64 16
  %wide.load317 = load <2 x double>, ptr %175, align 8, !tbaa !10, !alias.scope !26
  %wide.load318 = load <2 x double>, ptr %176, align 8, !tbaa !10, !alias.scope !26
  %177 = getelementptr double, ptr %invariant.gep211, i64 %offset.idx316
  %178 = getelementptr i8, ptr %177, i64 16
  store <2 x double> %wide.load317, ptr %177, align 8, !tbaa !10, !alias.scope !29, !noalias !26
  store <2 x double> %wide.load318, ptr %178, align 8, !tbaa !10, !alias.scope !29, !noalias !26
  %index.next319 = add nuw i64 %index315, 4
  %179 = icmp eq i64 %index.next319, %n.vec311
  br i1 %179, label %middle.block306, label %vector.body314, !llvm.loop !31

middle.block306:                                  ; preds = %vector.body314
  br i1 %cmp.n320, label %._crit_edge208, label %scalar.ph307.preheader

scalar.ph307.preheader:                           ; preds = %.lr.ph207, %middle.block306
  %.1144205.ph = phi i64 [ 1, %.lr.ph207 ], [ %ind.end312, %middle.block306 ]
  %180 = sub i64 %159, %.1144205.ph
  %181 = sub i64 %149, %.1144205.ph
  %xtraiter354 = and i64 %180, 3
  %lcmp.mod355.not = icmp eq i64 %xtraiter354, 0
  br i1 %lcmp.mod355.not, label %scalar.ph307.prol.loopexit, label %scalar.ph307.prol

scalar.ph307.prol:                                ; preds = %scalar.ph307.preheader, %scalar.ph307.prol
  %.1144205.prol = phi i64 [ %183, %scalar.ph307.prol ], [ %.1144205.ph, %scalar.ph307.preheader ]
  %prol.iter356 = phi i64 [ %prol.iter356.next, %scalar.ph307.prol ], [ 0, %scalar.ph307.preheader ]
  %gep210.prol = getelementptr double, ptr %invariant.gep209, i64 %.1144205.prol
  %182 = load double, ptr %gep210.prol, align 8, !tbaa !10
  %gep212.prol = getelementptr double, ptr %invariant.gep211, i64 %.1144205.prol
  store double %182, ptr %gep212.prol, align 8, !tbaa !10
  %183 = add nuw i64 %.1144205.prol, 1
  %prol.iter356.next = add i64 %prol.iter356, 1
  %prol.iter356.cmp.not = icmp eq i64 %prol.iter356.next, %xtraiter354
  br i1 %prol.iter356.cmp.not, label %scalar.ph307.prol.loopexit, label %scalar.ph307.prol, !llvm.loop !32

scalar.ph307.prol.loopexit:                       ; preds = %scalar.ph307.prol, %scalar.ph307.preheader
  %.1144205.unr = phi i64 [ %.1144205.ph, %scalar.ph307.preheader ], [ %183, %scalar.ph307.prol ]
  %184 = icmp ult i64 %181, 3
  br i1 %184, label %._crit_edge208, label %scalar.ph307

scalar.ph307:                                     ; preds = %scalar.ph307.prol.loopexit, %scalar.ph307
  %.1144205 = phi i64 [ %192, %scalar.ph307 ], [ %.1144205.unr, %scalar.ph307.prol.loopexit ]
  %gep210 = getelementptr double, ptr %invariant.gep209, i64 %.1144205
  %185 = load double, ptr %gep210, align 8, !tbaa !10
  %gep212 = getelementptr double, ptr %invariant.gep211, i64 %.1144205
  store double %185, ptr %gep212, align 8, !tbaa !10
  %186 = add nuw i64 %.1144205, 1
  %gep210.1 = getelementptr double, ptr %invariant.gep209, i64 %186
  %187 = load double, ptr %gep210.1, align 8, !tbaa !10
  %gep212.1 = getelementptr double, ptr %invariant.gep211, i64 %186
  store double %187, ptr %gep212.1, align 8, !tbaa !10
  %188 = add nuw i64 %.1144205, 2
  %gep210.2 = getelementptr double, ptr %invariant.gep209, i64 %188
  %189 = load double, ptr %gep210.2, align 8, !tbaa !10
  %gep212.2 = getelementptr double, ptr %invariant.gep211, i64 %188
  store double %189, ptr %gep212.2, align 8, !tbaa !10
  %190 = add nuw i64 %.1144205, 3
  %gep210.3 = getelementptr double, ptr %invariant.gep209, i64 %190
  %191 = load double, ptr %gep210.3, align 8, !tbaa !10
  %gep212.3 = getelementptr double, ptr %invariant.gep211, i64 %190
  store double %191, ptr %gep212.3, align 8, !tbaa !10
  %192 = add nuw i64 %.1144205, 4
  %exitcond246.not.3 = icmp eq i64 %190, %149
  br i1 %exitcond246.not.3, label %._crit_edge208, label %scalar.ph307, !llvm.loop !33

._crit_edge208:                                   ; preds = %scalar.ph307.prol.loopexit, %scalar.ph307, %middle.block306
  br i1 %.not155.not213, label %.lr.ph216, label %._crit_edge217

.lr.ph216:                                        ; preds = %._crit_edge208
  %invariant.gep218 = getelementptr double, ptr %7, i64 %174
  br i1 %min.iters.check292, label %scalar.ph291.preheader, label %vector.ph293

vector.ph293:                                     ; preds = %.lr.ph216
  %193 = getelementptr double, ptr %invariant.gep218, i64 %149
  br label %vector.body298

vector.body298:                                   ; preds = %vector.body298, %vector.ph293
  %index299 = phi i64 [ 0, %vector.ph293 ], [ %index.next301, %vector.body298 ]
  %194 = getelementptr double, ptr %193, i64 %index299
  %195 = getelementptr i8, ptr %194, i64 16
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %194, align 8, !tbaa !10
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %195, align 8, !tbaa !10
  %index.next301 = add nuw i64 %index299, 4
  %196 = icmp eq i64 %index.next301, %n.vec295
  br i1 %196, label %middle.block290, label %vector.body298, !llvm.loop !34

middle.block290:                                  ; preds = %vector.body298
  br i1 %cmp.n302, label %._crit_edge217, label %scalar.ph291.preheader

scalar.ph291.preheader:                           ; preds = %middle.block290, %.lr.ph216
  %.2.in214.ph = phi i64 [ %149, %.lr.ph216 ], [ %ind.end296, %middle.block290 ]
  br label %scalar.ph291

scalar.ph291:                                     ; preds = %scalar.ph291.preheader, %scalar.ph291
  %.2.in214 = phi i64 [ %.2, %scalar.ph291 ], [ %.2.in214.ph, %scalar.ph291.preheader ]
  %.2 = add nuw nsw i64 %.2.in214, 1
  %gep219 = getelementptr double, ptr %invariant.gep218, i64 %.2.in214
  store double -1.000000e+10, ptr %gep219, align 8, !tbaa !10
  %exitcond247.not = icmp eq i64 %.2, %150
  br i1 %exitcond247.not, label %._crit_edge217, label %scalar.ph291, !llvm.loop !35

._crit_edge217:                                   ; preds = %scalar.ph291, %middle.block290, %._crit_edge208
  %197 = add nuw i64 %.1146221, 1
  %exitcond248.not = icmp eq i64 %.1146221, %148
  br i1 %exitcond248.not, label %.loopexit, label %.lr.ph207, !llvm.loop !25

198:                                              ; preds = %._crit_edge176
  %199 = tail call i64 @s_cmp(ptr noundef %0, ptr noundef nonnull @.str.7, i64 noundef 2, i64 noundef 2) #2
  %200 = icmp eq i64 %199, 0
  br i1 %200, label %204, label %201

201:                                              ; preds = %198
  %202 = tail call i64 @s_cmp(ptr noundef %0, ptr noundef nonnull @.str.8, i64 noundef 2, i64 noundef 2) #2
  %203 = icmp eq i64 %202, 0
  br i1 %203, label %204, label %.loopexit

204:                                              ; preds = %201, %198
  %205 = load i64, ptr %4, align 8, !tbaa !5
  %.not149200 = icmp slt i64 %205, 1
  br i1 %.not149200, label %.loopexit, label %.lr.ph203

.lr.ph203:                                        ; preds = %204
  %206 = zext i1 %36 to i64
  %207 = sext i1 %36 to i64
  %208 = load i64, ptr %8, align 8, !tbaa !5
  %209 = sub i64 %16, %15
  %210 = sub i64 %208, %17
  %211 = shl i64 %210, 3
  br label %212

212:                                              ; preds = %.lr.ph203, %._crit_edge197
  %indvar = phi i64 [ 0, %.lr.ph203 ], [ %indvar.next, %._crit_edge197 ]
  %.2147201 = phi i64 [ 1, %.lr.ph203 ], [ %253, %._crit_edge197 ]
  %213 = mul i64 %211, %indvar
  %214 = add i64 %209, %213
  %.0142 = add nuw nsw i64 %.2147201, %206
  %spec.select = add nsw i64 %.2147201, %207
  %.1 = select i1 %35, i64 1, i64 %.0142
  %.0 = select i1 %35, i64 %spec.select, i64 %205
  %.not150.not179 = icmp ugt i64 %.1, 1
  br i1 %.not150.not179, label %.lr.ph182, label %.preheader

.lr.ph182:                                        ; preds = %212
  %215 = add nsw i64 %.2147201, -1
  %216 = mul nsw i64 %208, %215
  %invariant.gep183 = getelementptr double, ptr %20, i64 %216
  %217 = add i64 %.1, -1
  %min.iters.check279 = icmp ult i64 %.1, 5
  br i1 %min.iters.check279, label %scalar.ph278.preheader, label %vector.ph280

scalar.ph278.preheader:                           ; preds = %middle.block277, %.lr.ph182
  %.3180.ph = phi i64 [ 1, %.lr.ph182 ], [ %ind.end283, %middle.block277 ]
  br label %scalar.ph278

vector.ph280:                                     ; preds = %.lr.ph182
  %n.vec282 = and i64 %217, -4
  %ind.end283 = or disjoint i64 %n.vec282, 1
  br label %vector.body285

vector.body285:                                   ; preds = %vector.body285, %vector.ph280
  %index286 = phi i64 [ 0, %vector.ph280 ], [ %index.next288, %vector.body285 ]
  %offset.idx287 = or disjoint i64 %index286, 1
  %218 = getelementptr double, ptr %invariant.gep183, i64 %offset.idx287
  %219 = getelementptr i8, ptr %218, i64 16
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %218, align 8, !tbaa !10
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %219, align 8, !tbaa !10
  %index.next288 = add nuw i64 %index286, 4
  %220 = icmp eq i64 %index.next288, %n.vec282
  br i1 %220, label %middle.block277, label %vector.body285, !llvm.loop !36

middle.block277:                                  ; preds = %vector.body285
  %cmp.n289 = icmp eq i64 %217, %n.vec282
  br i1 %cmp.n289, label %.preheader, label %scalar.ph278.preheader

.preheader:                                       ; preds = %scalar.ph278, %middle.block277, %212
  %.not151185 = icmp sgt i64 %.1, %.0
  br i1 %.not151185, label %._crit_edge188, label %.lr.ph187

.lr.ph187:                                        ; preds = %.preheader
  %221 = mul nsw i64 %.2147201, %17
  %invariant.gep189 = getelementptr double, ptr %19, i64 %221
  %222 = add nsw i64 %.2147201, -1
  %223 = mul nsw i64 %208, %222
  %invariant.gep191 = getelementptr double, ptr %20, i64 %223
  %224 = add i64 %.0, 1
  %225 = sub i64 %224, %.1
  %min.iters.check265 = icmp ult i64 %225, 4
  %diff.check = icmp ult i64 %214, 32
  %or.cond335 = select i1 %min.iters.check265, i1 true, i1 %diff.check
  br i1 %or.cond335, label %scalar.ph264.preheader, label %vector.ph266

scalar.ph264.preheader:                           ; preds = %middle.block263, %.lr.ph187
  %.4186.ph = phi i64 [ %.1, %.lr.ph187 ], [ %ind.end269, %middle.block263 ]
  %226 = add i64 %.0, 1
  %227 = sub i64 %226, %.4186.ph
  %228 = sub i64 %.0, %.4186.ph
  %xtraiter352 = and i64 %227, 3
  %lcmp.mod353.not = icmp eq i64 %xtraiter352, 0
  br i1 %lcmp.mod353.not, label %scalar.ph264.prol.loopexit, label %scalar.ph264.prol

scalar.ph264.prol:                                ; preds = %scalar.ph264.preheader, %scalar.ph264.prol
  %.4186.prol = phi i64 [ %230, %scalar.ph264.prol ], [ %.4186.ph, %scalar.ph264.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph264.prol ], [ 0, %scalar.ph264.preheader ]
  %gep190.prol = getelementptr double, ptr %invariant.gep189, i64 %.4186.prol
  %229 = load double, ptr %gep190.prol, align 8, !tbaa !10
  %gep192.prol = getelementptr double, ptr %invariant.gep191, i64 %.4186.prol
  store double %229, ptr %gep192.prol, align 8, !tbaa !10
  %230 = add nuw i64 %.4186.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter352
  br i1 %prol.iter.cmp.not, label %scalar.ph264.prol.loopexit, label %scalar.ph264.prol, !llvm.loop !37

scalar.ph264.prol.loopexit:                       ; preds = %scalar.ph264.prol, %scalar.ph264.preheader
  %.4186.unr = phi i64 [ %.4186.ph, %scalar.ph264.preheader ], [ %230, %scalar.ph264.prol ]
  %231 = icmp ult i64 %228, 3
  br i1 %231, label %._crit_edge188, label %scalar.ph264

vector.ph266:                                     ; preds = %.lr.ph187
  %n.vec268 = and i64 %225, -4
  %ind.end269 = add i64 %.1, %n.vec268
  br label %vector.body271

vector.body271:                                   ; preds = %vector.body271, %vector.ph266
  %index272 = phi i64 [ 0, %vector.ph266 ], [ %index.next275, %vector.body271 ]
  %offset.idx273 = add i64 %.1, %index272
  %232 = getelementptr double, ptr %invariant.gep189, i64 %offset.idx273
  %233 = getelementptr i8, ptr %232, i64 16
  %wide.load = load <2 x double>, ptr %232, align 8, !tbaa !10
  %wide.load274 = load <2 x double>, ptr %233, align 8, !tbaa !10
  %234 = getelementptr double, ptr %invariant.gep191, i64 %offset.idx273
  %235 = getelementptr i8, ptr %234, i64 16
  store <2 x double> %wide.load, ptr %234, align 8, !tbaa !10
  store <2 x double> %wide.load274, ptr %235, align 8, !tbaa !10
  %index.next275 = add nuw i64 %index272, 4
  %236 = icmp eq i64 %index.next275, %n.vec268
  br i1 %236, label %middle.block263, label %vector.body271, !llvm.loop !38

middle.block263:                                  ; preds = %vector.body271
  %cmp.n276 = icmp eq i64 %225, %n.vec268
  br i1 %cmp.n276, label %._crit_edge188, label %scalar.ph264.preheader

scalar.ph278:                                     ; preds = %scalar.ph278.preheader, %scalar.ph278
  %.3180 = phi i64 [ %237, %scalar.ph278 ], [ %.3180.ph, %scalar.ph278.preheader ]
  %gep184 = getelementptr double, ptr %invariant.gep183, i64 %.3180
  store double -1.000000e+10, ptr %gep184, align 8, !tbaa !10
  %237 = add nuw nsw i64 %.3180, 1
  %exitcond238.not = icmp eq i64 %237, %.1
  br i1 %exitcond238.not, label %.preheader, label %scalar.ph278, !llvm.loop !39

scalar.ph264:                                     ; preds = %scalar.ph264.prol.loopexit, %scalar.ph264
  %.4186 = phi i64 [ %245, %scalar.ph264 ], [ %.4186.unr, %scalar.ph264.prol.loopexit ]
  %gep190 = getelementptr double, ptr %invariant.gep189, i64 %.4186
  %238 = load double, ptr %gep190, align 8, !tbaa !10
  %gep192 = getelementptr double, ptr %invariant.gep191, i64 %.4186
  store double %238, ptr %gep192, align 8, !tbaa !10
  %239 = add nuw i64 %.4186, 1
  %gep190.1 = getelementptr double, ptr %invariant.gep189, i64 %239
  %240 = load double, ptr %gep190.1, align 8, !tbaa !10
  %gep192.1 = getelementptr double, ptr %invariant.gep191, i64 %239
  store double %240, ptr %gep192.1, align 8, !tbaa !10
  %241 = add nuw i64 %.4186, 2
  %gep190.2 = getelementptr double, ptr %invariant.gep189, i64 %241
  %242 = load double, ptr %gep190.2, align 8, !tbaa !10
  %gep192.2 = getelementptr double, ptr %invariant.gep191, i64 %241
  store double %242, ptr %gep192.2, align 8, !tbaa !10
  %243 = add nuw i64 %.4186, 3
  %gep190.3 = getelementptr double, ptr %invariant.gep189, i64 %243
  %244 = load double, ptr %gep190.3, align 8, !tbaa !10
  %gep192.3 = getelementptr double, ptr %invariant.gep191, i64 %243
  store double %244, ptr %gep192.3, align 8, !tbaa !10
  %245 = add nuw i64 %.4186, 4
  %exitcond242.not.3 = icmp eq i64 %243, %.0
  br i1 %exitcond242.not.3, label %._crit_edge188, label %scalar.ph264, !llvm.loop !40

._crit_edge188:                                   ; preds = %scalar.ph264.prol.loopexit, %scalar.ph264, %middle.block263, %.preheader
  %.not152.not193 = icmp slt i64 %.0, %208
  br i1 %.not152.not193, label %.lr.ph196, label %._crit_edge197

.lr.ph196:                                        ; preds = %._crit_edge188
  %246 = add nsw i64 %.2147201, -1
  %247 = mul nsw i64 %208, %246
  %invariant.gep198 = getelementptr double, ptr %7, i64 %247
  %248 = sub i64 %208, %.0
  %min.iters.check = icmp ult i64 %248, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph196
  %n.vec = and i64 %248, -4
  %ind.end = add i64 %.0, %n.vec
  %249 = getelementptr double, ptr %invariant.gep198, i64 %.0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %250 = getelementptr double, ptr %249, i64 %index
  %251 = getelementptr i8, ptr %250, i64 16
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %250, align 8, !tbaa !10
  store <2 x double> <double -1.000000e+10, double -1.000000e+10>, ptr %251, align 8, !tbaa !10
  %index.next = add nuw i64 %index, 4
  %252 = icmp eq i64 %index.next, %n.vec
  br i1 %252, label %middle.block, label %vector.body, !llvm.loop !41

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %248, %n.vec
  br i1 %cmp.n, label %._crit_edge197, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph196
  %.5.in194.ph = phi i64 [ %.0, %.lr.ph196 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.5.in194 = phi i64 [ %.5, %scalar.ph ], [ %.5.in194.ph, %scalar.ph.preheader ]
  %.5 = add nsw i64 %.5.in194, 1
  %gep199 = getelementptr double, ptr %invariant.gep198, i64 %.5.in194
  store double -1.000000e+10, ptr %gep199, align 8, !tbaa !10
  %exitcond243.not = icmp eq i64 %.5, %208
  br i1 %exitcond243.not, label %._crit_edge197, label %scalar.ph, !llvm.loop !42

._crit_edge197:                                   ; preds = %scalar.ph, %middle.block, %._crit_edge188
  %253 = add nuw i64 %.2147201, 1
  %exitcond244.not = icmp eq i64 %.2147201, %205
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond244.not, label %.loopexit, label %212, !llvm.loop !43

.loopexit:                                        ; preds = %._crit_edge197, %._crit_edge217, %._crit_edge217.us.us, %.lr.ph223.split.us, %204, %147, %201
  ret i32 0
}

; Function Attrs: nounwind uwtable
declare dso_local double @dbeg_(ptr noundef) local_unnamed_addr #1

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 = { 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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"double", !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13, !16}
!16 = !{!"llvm.loop.unswitch.partial.disable"}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.unroll.disable"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !13, !22, !23}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = distinct !{!24, !13, !23, !22}
!25 = distinct !{!25, !13}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !13, !22, !23}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !13, !22}
!34 = distinct !{!34, !13, !22, !23}
!35 = distinct !{!35, !13, !23, !22}
!36 = distinct !{!36, !13, !22, !23}
!37 = distinct !{!37, !18}
!38 = distinct !{!38, !13, !22, !23}
!39 = distinct !{!39, !13, !23, !22}
!40 = distinct !{!40, !13, !22}
!41 = distinct !{!41, !13, !22, !23}
!42 = distinct !{!42, !13, !23, !22}
!43 = distinct !{!43, !13}


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