; LLVM IR from dmalyuta/FlyARocket_GNC :: simplex_funcs (simplx)

; 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 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [65 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @simplx(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #0 {
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %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 i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca [6 x i32], align 16
  %30 = alloca [5 x i32], align 16
  %31 = alloca [5 x i32], align 16
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store i32 %1, ptr %11, align 4, !tbaa !9
  store i32 %2, ptr %12, align 4, !tbaa !9
  store i32 %3, ptr %13, align 4, !tbaa !9
  store i32 %4, ptr %14, align 4, !tbaa !9
  store i32 %5, ptr %15, align 4, !tbaa !9
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 20, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 20, 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
  store double 0x3EB0C6F7A0B5ED8D, ptr %34, align 8, !tbaa !11
  %36 = load i32, ptr %11, align 4, !tbaa !9
  %37 = load i32, ptr %13, align 4, !tbaa !9
  %38 = load i32, ptr %14, align 4, !tbaa !9
  %39 = add nsw i32 %37, %38
  %40 = load i32, ptr %15, align 4, !tbaa !9
  %41 = add nsw i32 %39, %40
  %42 = icmp ne i32 %36, %41
  br i1 %42, label %43, label %45

43:                                               ; preds = %9
  %44 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  store i32 1, ptr %35, align 4
  br label %468

45:                                               ; preds = %9
  %46 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %46, ptr %27, align 4, !tbaa !9
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %47

47:                                               ; preds = %61, %45
  %48 = load i32, ptr %23, align 4, !tbaa !9
  %49 = load i32, ptr %12, align 4, !tbaa !9
  %50 = icmp sle i32 %48, %49
  br i1 %50, label %51, label %64

51:                                               ; preds = %47
  %52 = load i32, ptr %23, align 4, !tbaa !9
  %53 = load i32, ptr %23, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [6 x i32], ptr %29, i64 0, i64 %54
  store i32 %52, ptr %55, align 4, !tbaa !9
  %56 = load i32, ptr %23, align 4, !tbaa !9
  %57 = load ptr, ptr %17, align 8, !tbaa !5
  %58 = load i32, ptr %23, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i32, ptr %57, i64 %59
  store i32 %56, ptr %60, align 4, !tbaa !9
  br label %61

61:                                               ; preds = %51
  %62 = load i32, ptr %23, align 4, !tbaa !9
  %63 = add nsw i32 %62, 1
  store i32 %63, ptr %23, align 4, !tbaa !9
  br label %47, !llvm.loop !13

64:                                               ; preds = %47
  %65 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %65, ptr %28, align 4, !tbaa !9
  store i32 1, ptr %19, align 4, !tbaa !9
  br label %66

66:                                               ; preds = %93, %64
  %67 = load i32, ptr %19, align 4, !tbaa !9
  %68 = load i32, ptr %11, align 4, !tbaa !9
  %69 = icmp sle i32 %67, %68
  br i1 %69, label %70, label %96

70:                                               ; preds = %66
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = load i32, ptr %19, align 4, !tbaa !9
  %73 = add nsw i32 %72, 1
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds [6 x double], ptr %71, i64 %74
  %76 = getelementptr inbounds [6 x double], ptr %75, i64 0, i64 1
  %77 = load double, ptr %76, align 8, !tbaa !11
  %78 = fcmp olt double %77, 0.000000e+00
  br i1 %78, label %79, label %81

79:                                               ; preds = %70
  %80 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  store i32 1, ptr %35, align 4
  br label %468

81:                                               ; preds = %70
  %82 = load i32, ptr %19, align 4, !tbaa !9
  %83 = load i32, ptr %19, align 4, !tbaa !9
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [5 x i32], ptr %30, i64 0, i64 %84
  store i32 %82, ptr %85, align 4, !tbaa !9
  %86 = load i32, ptr %12, align 4, !tbaa !9
  %87 = load i32, ptr %19, align 4, !tbaa !9
  %88 = add nsw i32 %86, %87
  %89 = load ptr, ptr %18, align 8, !tbaa !5
  %90 = load i32, ptr %19, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i32, ptr %89, i64 %91
  store i32 %88, ptr %92, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %81
  %94 = load i32, ptr %19, align 4, !tbaa !9
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %19, align 4, !tbaa !9
  br label %66, !llvm.loop !15

96:                                               ; preds = %66
  store i32 1, ptr %19, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %105, %96
  %98 = load i32, ptr %19, align 4, !tbaa !9
  %99 = load i32, ptr %14, align 4, !tbaa !9
  %100 = icmp sle i32 %98, %99
  br i1 %100, label %101, label %108

101:                                              ; preds = %97
  %102 = load i32, ptr %19, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds [5 x i32], ptr %31, i64 0, i64 %103
  store i32 1, ptr %104, align 4, !tbaa !9
  br label %105

105:                                              ; preds = %101
  %106 = load i32, ptr %19, align 4, !tbaa !9
  %107 = add nsw i32 %106, 1
  store i32 %107, ptr %19, align 4, !tbaa !9
  br label %97, !llvm.loop !16

108:                                              ; preds = %97
  store i32 0, ptr %21, align 4, !tbaa !9
  %109 = load i32, ptr %14, align 4, !tbaa !9
  %110 = load i32, ptr %15, align 4, !tbaa !9
  %111 = add nsw i32 %109, %110
  %112 = icmp eq i32 %111, 0
  br i1 %112, label %113, label %114

113:                                              ; preds = %108
  br label %442

114:                                              ; preds = %108
  store i32 1, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %115

115:                                              ; preds = %153, %114
  %116 = load i32, ptr %23, align 4, !tbaa !9
  %117 = load i32, ptr %12, align 4, !tbaa !9
  %118 = add nsw i32 %117, 1
  %119 = icmp sle i32 %116, %118
  br i1 %119, label %120, label %156

120:                                              ; preds = %115
  store double 0.000000e+00, ptr %33, align 8, !tbaa !11
  %121 = load i32, ptr %13, align 4, !tbaa !9
  %122 = add nsw i32 %121, 1
  store i32 %122, ptr %19, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %139, %120
  %124 = load i32, ptr %19, align 4, !tbaa !9
  %125 = load i32, ptr %11, align 4, !tbaa !9
  %126 = icmp sle i32 %124, %125
  br i1 %126, label %127, label %142

127:                                              ; preds = %123
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = load i32, ptr %19, align 4, !tbaa !9
  %130 = add nsw i32 %129, 1
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds [6 x double], ptr %128, i64 %131
  %133 = load i32, ptr %23, align 4, !tbaa !9
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds [6 x double], ptr %132, i64 0, i64 %134
  %136 = load double, ptr %135, align 8, !tbaa !11
  %137 = load double, ptr %33, align 8, !tbaa !11
  %138 = fadd double %137, %136
  store double %138, ptr %33, align 8, !tbaa !11
  br label %139

139:                                              ; preds = %127
  %140 = load i32, ptr %19, align 4, !tbaa !9
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %19, align 4, !tbaa !9
  br label %123, !llvm.loop !17

142:                                              ; preds = %123
  %143 = load double, ptr %33, align 8, !tbaa !11
  %144 = fneg double %143
  %145 = load ptr, ptr %10, align 8, !tbaa !5
  %146 = load i32, ptr %11, align 4, !tbaa !9
  %147 = add nsw i32 %146, 2
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds [6 x double], ptr %145, i64 %148
  %150 = load i32, ptr %23, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds [6 x double], ptr %149, i64 0, i64 %151
  store double %144, ptr %152, align 8, !tbaa !11
  br label %153

153:                                              ; preds = %142
  %154 = load i32, ptr %23, align 4, !tbaa !9
  %155 = add nsw i32 %154, 1
  store i32 %155, ptr %23, align 4, !tbaa !9
  br label %115, !llvm.loop !18

156:                                              ; preds = %115
  br label %157

157:                                              ; preds = %440, %156
  %158 = load ptr, ptr %10, align 8, !tbaa !5
  %159 = load i32, ptr %11, align 4, !tbaa !9
  %160 = add nsw i32 %159, 1
  %161 = getelementptr inbounds [6 x i32], ptr %29, i64 0, i64 0
  %162 = load i32, ptr %27, align 4, !tbaa !9
  call void @simp1(ptr noundef %158, i32 noundef %160, ptr noundef %161, i32 noundef %162, i32 noundef 0, ptr noundef %25, ptr noundef %32)
  %163 = load double, ptr %32, align 8, !tbaa !11
  %164 = load double, ptr %34, align 8, !tbaa !11
  %165 = fcmp ole double %163, %164
  br i1 %165, label %166, label %179

166:                                              ; preds = %157
  %167 = load ptr, ptr %10, align 8, !tbaa !5
  %168 = load i32, ptr %11, align 4, !tbaa !9
  %169 = add nsw i32 %168, 2
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds [6 x double], ptr %167, i64 %170
  %172 = getelementptr inbounds [6 x double], ptr %171, i64 0, i64 1
  %173 = load double, ptr %172, align 8, !tbaa !11
  %174 = load double, ptr %34, align 8, !tbaa !11
  %175 = fneg double %174
  %176 = fcmp olt double %173, %175
  br i1 %176, label %177, label %179

177:                                              ; preds = %166
  %178 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -1, ptr %178, align 4, !tbaa !9
  store i32 1, ptr %35, align 4
  br label %468

179:                                              ; preds = %166, %157
  %180 = load double, ptr %32, align 8, !tbaa !11
  %181 = load double, ptr %34, align 8, !tbaa !11
  %182 = fcmp ole double %180, %181
  br i1 %182, label %183, label %283

183:                                              ; preds = %179
  %184 = load ptr, ptr %10, align 8, !tbaa !5
  %185 = load i32, ptr %11, align 4, !tbaa !9
  %186 = add nsw i32 %185, 2
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds [6 x double], ptr %184, i64 %187
  %189 = getelementptr inbounds [6 x double], ptr %188, i64 0, i64 1
  %190 = load double, ptr %189, align 8, !tbaa !11
  %191 = load double, ptr %34, align 8, !tbaa !11
  %192 = fcmp ole double %190, %191
  br i1 %192, label %193, label %283

193:                                              ; preds = %183
  %194 = load i32, ptr %13, align 4, !tbaa !9
  %195 = load i32, ptr %14, align 4, !tbaa !9
  %196 = add nsw i32 %194, %195
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %26, align 4, !tbaa !9
  %198 = load i32, ptr %26, align 4, !tbaa !9
  %199 = load i32, ptr %11, align 4, !tbaa !9
  %200 = icmp sle i32 %198, %199
  br i1 %200, label %201, label %232

201:                                              ; preds = %193
  %202 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %202, ptr %20, align 4, !tbaa !9
  br label %203

203:                                              ; preds = %228, %201
  %204 = load i32, ptr %20, align 4, !tbaa !9
  %205 = load i32, ptr %11, align 4, !tbaa !9
  %206 = icmp sle i32 %204, %205
  br i1 %206, label %207, label %231

207:                                              ; preds = %203
  %208 = load ptr, ptr %18, align 8, !tbaa !5
  %209 = load i32, ptr %20, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds i32, ptr %208, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = load i32, ptr %20, align 4, !tbaa !9
  %214 = load i32, ptr %12, align 4, !tbaa !9
  %215 = add nsw i32 %213, %214
  %216 = icmp eq i32 %212, %215
  br i1 %216, label %217, label %227

217:                                              ; preds = %207
  %218 = load ptr, ptr %10, align 8, !tbaa !5
  %219 = load i32, ptr %20, align 4, !tbaa !9
  %220 = getelementptr inbounds [6 x i32], ptr %29, i64 0, i64 0
  %221 = load i32, ptr %27, align 4, !tbaa !9
  call void @simp1(ptr noundef %218, i32 noundef %219, ptr noundef %220, i32 noundef %221, i32 noundef 1, ptr noundef %25, ptr noundef %32)
  %222 = load double, ptr %32, align 8, !tbaa !11
  %223 = load double, ptr %34, align 8, !tbaa !11
  %224 = fcmp ogt double %222, %223
  br i1 %224, label %225, label %226

225:                                              ; preds = %217
  br label %296

226:                                              ; preds = %217
  br label %227

227:                                              ; preds = %226, %207
  br label %228

228:                                              ; preds = %227
  %229 = load i32, ptr %20, align 4, !tbaa !9
  %230 = add nsw i32 %229, 1
  store i32 %230, ptr %20, align 4, !tbaa !9
  br label %203, !llvm.loop !19

231:                                              ; preds = %203
  br label %232

232:                                              ; preds = %231, %193
  store i32 0, ptr %21, align 4, !tbaa !9
  %233 = load i32, ptr %26, align 4, !tbaa !9
  %234 = sub nsw i32 %233, 1
  store i32 %234, ptr %26, align 4, !tbaa !9
  %235 = load i32, ptr %13, align 4, !tbaa !9
  %236 = add nsw i32 %235, 1
  %237 = load i32, ptr %26, align 4, !tbaa !9
  %238 = icmp sgt i32 %236, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %232
  br label %442

240:                                              ; preds = %232
  %241 = load i32, ptr %13, align 4, !tbaa !9
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %19, align 4, !tbaa !9
  br label %243

243:                                              ; preds = %279, %240
  %244 = load i32, ptr %19, align 4, !tbaa !9
  %245 = load i32, ptr %13, align 4, !tbaa !9
  %246 = load i32, ptr %14, align 4, !tbaa !9
  %247 = add nsw i32 %245, %246
  %248 = icmp sle i32 %244, %247
  br i1 %248, label %249, label %282

249:                                              ; preds = %243
  %250 = load i32, ptr %19, align 4, !tbaa !9
  %251 = load i32, ptr %13, align 4, !tbaa !9
  %252 = sub nsw i32 %250, %251
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [5 x i32], ptr %31, i64 0, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !9
  %256 = icmp eq i32 %255, 1
  br i1 %256, label %257, label %278

257:                                              ; preds = %249
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %274, %257
  %259 = load i32, ptr %23, align 4, !tbaa !9
  %260 = load i32, ptr %12, align 4, !tbaa !9
  %261 = add nsw i32 %260, 1
  %262 = icmp sle i32 %259, %261
  br i1 %262, label %263, label %277

263:                                              ; preds = %258
  %264 = load ptr, ptr %10, align 8, !tbaa !5
  %265 = load i32, ptr %19, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [6 x double], ptr %264, i64 %267
  %269 = load i32, ptr %23, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds [6 x double], ptr %268, i64 0, i64 %270
  %272 = load double, ptr %271, align 8, !tbaa !11
  %273 = fmul double %272, -1.000000e+00
  store double %273, ptr %271, align 8, !tbaa !11
  br label %274

274:                                              ; preds = %263
  %275 = load i32, ptr %23, align 4, !tbaa !9
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %23, align 4, !tbaa !9
  br label %258, !llvm.loop !20

277:                                              ; preds = %258
  br label %278

278:                                              ; preds = %277, %249
  br label %279

279:                                              ; preds = %278
  %280 = load i32, ptr %19, align 4, !tbaa !9
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %19, align 4, !tbaa !9
  br label %243, !llvm.loop !21

282:                                              ; preds = %243
  br label %442

283:                                              ; preds = %183, %179
  br label %284

284:                                              ; preds = %283
  %285 = load ptr, ptr %10, align 8, !tbaa !5
  %286 = load i32, ptr %11, align 4, !tbaa !9
  %287 = load i32, ptr %12, align 4, !tbaa !9
  %288 = getelementptr inbounds [5 x i32], ptr %30, i64 0, i64 0
  %289 = load i32, ptr %28, align 4, !tbaa !9
  %290 = load i32, ptr %25, align 4, !tbaa !9
  call void @simp2(ptr noundef %285, i32 noundef %286, i32 noundef %287, ptr noundef %288, i32 noundef %289, ptr noundef %20, i32 noundef %290, ptr noundef %33)
  %291 = load i32, ptr %20, align 4, !tbaa !9
  %292 = icmp eq i32 %291, 0
  br i1 %292, label %293, label %295

293:                                              ; preds = %284
  %294 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -1, ptr %294, align 4, !tbaa !9
  store i32 1, ptr %35, align 4
  br label %468

295:                                              ; preds = %284
  br label %296

296:                                              ; preds = %295, %225
  %297 = load ptr, ptr %10, align 8, !tbaa !5
  %298 = load i32, ptr %11, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  %300 = load i32, ptr %12, align 4, !tbaa !9
  %301 = load i32, ptr %20, align 4, !tbaa !9
  %302 = load i32, ptr %25, align 4, !tbaa !9
  call void @simp3(ptr noundef %297, i32 noundef %299, i32 noundef %300, i32 noundef %301, i32 noundef %302)
  %303 = load ptr, ptr %18, align 8, !tbaa !5
  %304 = load i32, ptr %20, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds i32, ptr %303, i64 %305
  %307 = load i32, ptr %306, align 4, !tbaa !9
  %308 = load i32, ptr %12, align 4, !tbaa !9
  %309 = load i32, ptr %13, align 4, !tbaa !9
  %310 = add nsw i32 %308, %309
  %311 = load i32, ptr %14, align 4, !tbaa !9
  %312 = add nsw i32 %310, %311
  %313 = add nsw i32 %312, 1
  %314 = icmp sge i32 %307, %313
  br i1 %314, label %315, label %354

315:                                              ; preds = %296
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %316

316:                                              ; preds = %329, %315
  %317 = load i32, ptr %23, align 4, !tbaa !9
  %318 = load i32, ptr %27, align 4, !tbaa !9
  %319 = icmp sle i32 %317, %318
  br i1 %319, label %320, label %332

320:                                              ; preds = %316
  %321 = load i32, ptr %23, align 4, !tbaa !9
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds [6 x i32], ptr %29, i64 0, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = load i32, ptr %25, align 4, !tbaa !9
  %326 = icmp eq i32 %324, %325
  br i1 %326, label %327, label %328

327:                                              ; preds = %320
  br label %333

328:                                              ; preds = %320
  br label %329

329:                                              ; preds = %328
  %330 = load i32, ptr %23, align 4, !tbaa !9
  %331 = add nsw i32 %330, 1
  store i32 %331, ptr %23, align 4, !tbaa !9
  br label %316, !llvm.loop !22

332:                                              ; preds = %316
  br label %333

333:                                              ; preds = %332, %327
  %334 = load i32, ptr %27, align 4, !tbaa !9
  %335 = sub nsw i32 %334, 1
  store i32 %335, ptr %27, align 4, !tbaa !9
  %336 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %336, ptr %22, align 4, !tbaa !9
  br label %337

337:                                              ; preds = %350, %333
  %338 = load i32, ptr %22, align 4, !tbaa !9
  %339 = load i32, ptr %27, align 4, !tbaa !9
  %340 = icmp sle i32 %338, %339
  br i1 %340, label %341, label %353

341:                                              ; preds = %337
  %342 = load i32, ptr %22, align 4, !tbaa !9
  %343 = add nsw i32 %342, 1
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds [6 x i32], ptr %29, i64 0, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = load i32, ptr %22, align 4, !tbaa !9
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds [6 x i32], ptr %29, i64 0, i64 %348
  store i32 %346, ptr %349, align 4, !tbaa !9
  br label %350

350:                                              ; preds = %341
  %351 = load i32, ptr %22, align 4, !tbaa !9
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %22, align 4, !tbaa !9
  br label %337, !llvm.loop !23

353:                                              ; preds = %337
  br label %386

354:                                              ; preds = %296
  %355 = load ptr, ptr %18, align 8, !tbaa !5
  %356 = load i32, ptr %20, align 4, !tbaa !9
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds i32, ptr %355, i64 %357
  %359 = load i32, ptr %358, align 4, !tbaa !9
  %360 = load i32, ptr %12, align 4, !tbaa !9
  %361 = load i32, ptr %13, align 4, !tbaa !9
  %362 = add nsw i32 %360, %361
  %363 = add nsw i32 %362, 1
  %364 = icmp slt i32 %359, %363
  br i1 %364, label %365, label %366

365:                                              ; preds = %354
  br label %418

366:                                              ; preds = %354
  %367 = load ptr, ptr %18, align 8, !tbaa !5
  %368 = load i32, ptr %20, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds i32, ptr %367, i64 %369
  %371 = load i32, ptr %370, align 4, !tbaa !9
  %372 = load i32, ptr %13, align 4, !tbaa !9
  %373 = sub nsw i32 %371, %372
  %374 = load i32, ptr %12, align 4, !tbaa !9
  %375 = sub nsw i32 %373, %374
  store i32 %375, ptr %24, align 4, !tbaa !9
  %376 = load i32, ptr %24, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [5 x i32], ptr %31, i64 0, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !9
  %380 = icmp eq i32 %379, 0
  br i1 %380, label %381, label %382

381:                                              ; preds = %366
  br label %418

382:                                              ; preds = %366
  %383 = load i32, ptr %24, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds [5 x i32], ptr %31, i64 0, i64 %384
  store i32 0, ptr %385, align 4, !tbaa !9
  br label %386

386:                                              ; preds = %382, %353
  %387 = load ptr, ptr %10, align 8, !tbaa !5
  %388 = load i32, ptr %11, align 4, !tbaa !9
  %389 = add nsw i32 %388, 2
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds [6 x double], ptr %387, i64 %390
  %392 = load i32, ptr %25, align 4, !tbaa !9
  %393 = add nsw i32 %392, 1
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds [6 x double], ptr %391, i64 0, i64 %394
  %396 = load double, ptr %395, align 8, !tbaa !11
  %397 = fadd double %396, 1.000000e+00
  store double %397, ptr %395, align 8, !tbaa !11
  store i32 1, ptr %19, align 4, !tbaa !9
  br label %398

398:                                              ; preds = %414, %386
  %399 = load i32, ptr %19, align 4, !tbaa !9
  %400 = load i32, ptr %11, align 4, !tbaa !9
  %401 = add nsw i32 %400, 2
  %402 = icmp sle i32 %399, %401
  br i1 %402, label %403, label %417

403:                                              ; preds = %398
  %404 = load ptr, ptr %10, align 8, !tbaa !5
  %405 = load i32, ptr %19, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds [6 x double], ptr %404, i64 %406
  %408 = load i32, ptr %25, align 4, !tbaa !9
  %409 = add nsw i32 %408, 1
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds [6 x double], ptr %407, i64 0, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !11
  %413 = fmul double %412, -1.000000e+00
  store double %413, ptr %411, align 8, !tbaa !11
  br label %414

414:                                              ; preds = %403
  %415 = load i32, ptr %19, align 4, !tbaa !9
  %416 = add nsw i32 %415, 1
  store i32 %416, ptr %19, align 4, !tbaa !9
  br label %398, !llvm.loop !24

417:                                              ; preds = %398
  br label %418

418:                                              ; preds = %462, %417, %381, %365
  %419 = load ptr, ptr %17, align 8, !tbaa !5
  %420 = load i32, ptr %25, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !9
  store i32 %423, ptr %22, align 4, !tbaa !9
  %424 = load ptr, ptr %18, align 8, !tbaa !5
  %425 = load i32, ptr %20, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds i32, ptr %424, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !9
  %429 = load ptr, ptr %17, align 8, !tbaa !5
  %430 = load i32, ptr %25, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds i32, ptr %429, i64 %431
  store i32 %428, ptr %432, align 4, !tbaa !9
  %433 = load i32, ptr %22, align 4, !tbaa !9
  %434 = load ptr, ptr %18, align 8, !tbaa !5
  %435 = load i32, ptr %20, align 4, !tbaa !9
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds i32, ptr %434, i64 %436
  store i32 %433, ptr %437, align 4, !tbaa !9
  %438 = load i32, ptr %21, align 4, !tbaa !9
  %439 = icmp ne i32 %438, 0
  br i1 %439, label %440, label %441

440:                                              ; preds = %418
  br label %157

441:                                              ; preds = %418
  br label %442

442:                                              ; preds = %441, %282, %239, %113
  %443 = load ptr, ptr %10, align 8, !tbaa !5
  %444 = getelementptr inbounds [6 x i32], ptr %29, i64 0, i64 0
  %445 = load i32, ptr %27, align 4, !tbaa !9
  call void @simp1(ptr noundef %443, i32 noundef 0, ptr noundef %444, i32 noundef %445, i32 noundef 0, ptr noundef %25, ptr noundef %32)
  %446 = load double, ptr %32, align 8, !tbaa !11
  %447 = load double, ptr %34, align 8, !tbaa !11
  %448 = fcmp ole double %446, %447
  br i1 %448, label %449, label %451

449:                                              ; preds = %442
  %450 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 0, ptr %450, align 4, !tbaa !9
  store i32 1, ptr %35, align 4
  br label %468

451:                                              ; preds = %442
  %452 = load ptr, ptr %10, align 8, !tbaa !5
  %453 = load i32, ptr %11, align 4, !tbaa !9
  %454 = load i32, ptr %12, align 4, !tbaa !9
  %455 = getelementptr inbounds [5 x i32], ptr %30, i64 0, i64 0
  %456 = load i32, ptr %28, align 4, !tbaa !9
  %457 = load i32, ptr %25, align 4, !tbaa !9
  call void @simp2(ptr noundef %452, i32 noundef %453, i32 noundef %454, ptr noundef %455, i32 noundef %456, ptr noundef %20, i32 noundef %457, ptr noundef %33)
  %458 = load i32, ptr %20, align 4, !tbaa !9
  %459 = icmp eq i32 %458, 0
  br i1 %459, label %460, label %462

460:                                              ; preds = %451
  %461 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 1, ptr %461, align 4, !tbaa !9
  store i32 1, ptr %35, align 4
  br label %468

462:                                              ; preds = %451
  %463 = load ptr, ptr %10, align 8, !tbaa !5
  %464 = load i32, ptr %11, align 4, !tbaa !9
  %465 = load i32, ptr %12, align 4, !tbaa !9
  %466 = load i32, ptr %20, align 4, !tbaa !9
  %467 = load i32, ptr %25, align 4, !tbaa !9
  call void @simp3(ptr noundef %463, i32 noundef %464, i32 noundef %465, i32 noundef %466, i32 noundef %467)
  br label %418

468:                                              ; preds = %460, %449, %293, %177, %79, %43
  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 20, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 20, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  ret void
}

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

declare i32 @printf(ptr noundef, ...) #2

; Function Attrs: nounwind uwtable
declare dso_local void @simp1(ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @simp2(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @simp3(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #0

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}


; 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 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [65 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @simplx(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, ptr nocapture noundef writeonly %6, ptr nocapture noundef %7, ptr nocapture noundef %8) local_unnamed_addr #0 {
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca [6 x i32], align 16
  %13 = alloca [5 x i32], align 16
  %14 = alloca [5 x i32], align 16
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #3
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %13) #3
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #3
  %17 = add nsw i32 %4, %3
  %18 = add nsw i32 %17, %5
  %.not = icmp eq i32 %18, %1
  br i1 %.not, label %.preheader187, label %26

.preheader187:                                    ; preds = %9
  %.not160188 = icmp slt i32 %2, 1
  br i1 %.not160188, label %.preheader186, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader187
  %19 = add nuw i32 %2, 1
  %wide.trip.count = zext i32 %19 to i64
  %20 = zext nneg i32 %2 to i64
  %min.iters.check = icmp ult i32 %2, 8
  br i1 %min.iters.check, label %.lr.ph.preheader351, label %vector.ph

.lr.ph.preheader351:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %20, 2147483640
  %ind.end = or disjoint i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %offset.idx = or disjoint i64 %index, 1
  %21 = getelementptr inbounds [6 x i32], ptr %12, i64 0, i64 %offset.idx
  %22 = getelementptr inbounds i8, ptr %21, i64 16
  store <4 x i32> %vec.ind, ptr %21, align 4, !tbaa !5
  store <4 x i32> %step.add, ptr %22, align 4, !tbaa !5
  %23 = getelementptr inbounds i32, ptr %7, i64 %offset.idx
  %24 = getelementptr inbounds i8, ptr %23, i64 16
  store <4 x i32> %vec.ind, ptr %23, align 4, !tbaa !5
  store <4 x i32> %step.add, ptr %24, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %25 = icmp eq i64 %index.next, %n.vec
  br i1 %25, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %20
  br i1 %cmp.n, label %.preheader186, label %.lr.ph.preheader351

26:                                               ; preds = %9
  %27 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  br label %213

.preheader186:                                    ; preds = %.lr.ph, %middle.block, %.preheader187
  %.not161190 = icmp slt i32 %1, 1
  br i1 %.not161190, label %.preheader185, label %.lr.ph192.preheader

.lr.ph192.preheader:                              ; preds = %.preheader186
  %28 = add nuw i32 %1, 1
  %wide.trip.count236 = zext i32 %28 to i64
  br label %.lr.ph192

.lr.ph:                                           ; preds = %.lr.ph.preheader351, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader351 ]
  %29 = getelementptr inbounds [6 x i32], ptr %12, i64 0, i64 %indvars.iv
  %30 = trunc nuw nsw i64 %indvars.iv to i32
  store i32 %30, ptr %29, align 4, !tbaa !5
  %31 = getelementptr inbounds i32, ptr %7, i64 %indvars.iv
  store i32 %30, ptr %31, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader186, label %.lr.ph, !llvm.loop !13

.preheader185:                                    ; preds = %42, %.preheader186
  %.not162193 = icmp slt i32 %4, 1
  br i1 %.not162193, label %._crit_edge, label %.lr.ph195.preheader

.lr.ph195.preheader:                              ; preds = %.preheader185
  %32 = add nuw i32 %4, 1
  %wide.trip.count241 = zext i32 %32 to i64
  %33 = zext nneg i32 %4 to i64
  %min.iters.check292 = icmp ult i32 %4, 8
  br i1 %min.iters.check292, label %.lr.ph195.preheader350, label %vector.ph293

.lr.ph195.preheader350:                           ; preds = %middle.block290, %.lr.ph195.preheader
  %indvars.iv238.ph = phi i64 [ 1, %.lr.ph195.preheader ], [ %ind.end296, %middle.block290 ]
  br label %.lr.ph195

vector.ph293:                                     ; preds = %.lr.ph195.preheader
  %n.vec295 = and i64 %33, 2147483640
  %ind.end296 = or disjoint i64 %n.vec295, 1
  br label %vector.body298

vector.body298:                                   ; preds = %vector.body298, %vector.ph293
  %index299 = phi i64 [ 0, %vector.ph293 ], [ %index.next301, %vector.body298 ]
  %offset.idx300 = or disjoint i64 %index299, 1
  %34 = getelementptr inbounds [5 x i32], ptr %14, i64 0, i64 %offset.idx300
  %35 = getelementptr inbounds i8, ptr %34, i64 16
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %34, align 4, !tbaa !5
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %35, align 4, !tbaa !5
  %index.next301 = add nuw i64 %index299, 8
  %36 = icmp eq i64 %index.next301, %n.vec295
  br i1 %36, label %middle.block290, label %vector.body298, !llvm.loop !14

middle.block290:                                  ; preds = %vector.body298
  %cmp.n302 = icmp eq i64 %n.vec295, %33
  br i1 %cmp.n302, label %._crit_edge, label %.lr.ph195.preheader350

.lr.ph192:                                        ; preds = %.lr.ph192.preheader, %42
  %indvars.iv233 = phi i64 [ 1, %.lr.ph192.preheader ], [ %indvars.iv.next234, %42 ]
  %indvars.iv.next234 = add nuw nsw i64 %indvars.iv233, 1
  %37 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next234, i64 1
  %38 = load double, ptr %37, align 8, !tbaa !15
  %39 = fcmp olt double %38, 0.000000e+00
  br i1 %39, label %40, label %42

40:                                               ; preds = %.lr.ph192
  %41 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  br label %213

42:                                               ; preds = %.lr.ph192
  %43 = getelementptr inbounds [5 x i32], ptr %13, i64 0, i64 %indvars.iv233
  %44 = trunc nuw nsw i64 %indvars.iv233 to i32
  store i32 %44, ptr %43, align 4, !tbaa !5
  %45 = getelementptr inbounds i32, ptr %8, i64 %indvars.iv233
  %46 = trunc i64 %indvars.iv233 to i32
  %47 = add i32 %46, %2
  store i32 %47, ptr %45, align 4, !tbaa !5
  %exitcond237.not = icmp eq i64 %indvars.iv.next234, %wide.trip.count236
  br i1 %exitcond237.not, label %.preheader185, label %.lr.ph192, !llvm.loop !17

.lr.ph195:                                        ; preds = %.lr.ph195.preheader350, %.lr.ph195
  %indvars.iv238 = phi i64 [ %indvars.iv.next239, %.lr.ph195 ], [ %indvars.iv238.ph, %.lr.ph195.preheader350 ]
  %48 = getelementptr inbounds [5 x i32], ptr %14, i64 0, i64 %indvars.iv238
  store i32 1, ptr %48, align 4, !tbaa !5
  %indvars.iv.next239 = add nuw nsw i64 %indvars.iv238, 1
  %exitcond242.not = icmp eq i64 %indvars.iv.next239, %wide.trip.count241
  br i1 %exitcond242.not, label %._crit_edge, label %.lr.ph195, !llvm.loop !18

._crit_edge:                                      ; preds = %.lr.ph195, %middle.block290, %.preheader185
  %49 = sub i32 0, %5
  %50 = icmp eq i32 %49, %4
  br i1 %50, label %.loopexit179, label %.preheader183

.preheader183:                                    ; preds = %._crit_edge
  %.not163203 = icmp slt i32 %2, 0
  br i1 %.not163203, label %.loopexit184, label %.lr.ph205

.lr.ph205:                                        ; preds = %.preheader183
  %invariant.gep = getelementptr i8, ptr %0, i64 96
  %.not164196.not = icmp slt i32 %3, %1
  %51 = sext i32 %1 to i64
  br i1 %.not164196.not, label %.lr.ph199.preheader, label %.lr.ph205.split.us.preheader

.lr.ph205.split.us.preheader:                     ; preds = %.lr.ph205
  %52 = add nuw i32 %2, 2
  %wide.trip.count246 = zext i32 %52 to i64
  %53 = add nsw i64 %wide.trip.count246, -1
  %min.iters.check305 = icmp ult i32 %2, 3
  br i1 %min.iters.check305, label %.lr.ph205.split.us.preheader348, label %vector.ph306

.lr.ph205.split.us.preheader348:                  ; preds = %middle.block303, %.lr.ph205.split.us.preheader
  %indvars.iv243.ph = phi i64 [ 1, %.lr.ph205.split.us.preheader ], [ %ind.end309, %middle.block303 ]
  br label %.lr.ph205.split.us

vector.ph306:                                     ; preds = %.lr.ph205.split.us.preheader
  %n.vec308 = and i64 %53, -4
  %ind.end309 = or disjoint i64 %n.vec308, 1
  br label %vector.body311

vector.body311:                                   ; preds = %vector.body311, %vector.ph306
  %index312 = phi i64 [ 0, %vector.ph306 ], [ %index.next314, %vector.body311 ]
  %offset.idx313 = or disjoint i64 %index312, 1
  %54 = getelementptr [6 x double], ptr %invariant.gep, i64 %51, i64 %offset.idx313
  %55 = getelementptr i8, ptr %54, i64 16
  store <2 x double> <double -0.000000e+00, double -0.000000e+00>, ptr %54, align 8, !tbaa !15
  store <2 x double> <double -0.000000e+00, double -0.000000e+00>, ptr %55, align 8, !tbaa !15
  %index.next314 = add nuw i64 %index312, 4
  %56 = icmp eq i64 %index.next314, %n.vec308
  br i1 %56, label %middle.block303, label %vector.body311, !llvm.loop !19

middle.block303:                                  ; preds = %vector.body311
  %cmp.n315 = icmp eq i64 %53, %n.vec308
  br i1 %cmp.n315, label %..loopexit184_crit_edge, label %.lr.ph205.split.us.preheader348

.lr.ph199.preheader:                              ; preds = %.lr.ph205
  %57 = sext i32 %3 to i64
  %58 = add nsw i64 %57, 1
  %59 = add i32 %1, 1
  %60 = add nuw i32 %2, 2
  %wide.trip.count255 = zext i32 %60 to i64
  %61 = sub i32 %1, %3
  %xtraiter = and i32 %61, 3
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  %62 = sub i32 %3, %1
  %63 = icmp ugt i32 %62, -4
  br label %.lr.ph199

.lr.ph205.split.us:                               ; preds = %.lr.ph205.split.us.preheader348, %.lr.ph205.split.us
  %indvars.iv243 = phi i64 [ %indvars.iv.next244, %.lr.ph205.split.us ], [ %indvars.iv243.ph, %.lr.ph205.split.us.preheader348 ]
  %64 = getelementptr nusw [6 x double], ptr %invariant.gep, i64 %51, i64 %indvars.iv243
  store double -0.000000e+00, ptr %64, align 8, !tbaa !15
  %indvars.iv.next244 = add nuw nsw i64 %indvars.iv243, 1
  %exitcond247 = icmp eq i64 %indvars.iv.next244, %wide.trip.count246
  br i1 %exitcond247, label %..loopexit184_crit_edge, label %.lr.ph205.split.us, !llvm.loop !20

.lr.ph199:                                        ; preds = %.lr.ph199.preheader, %._crit_edge200
  %indvars.iv252 = phi i64 [ 1, %.lr.ph199.preheader ], [ %indvars.iv.next253, %._crit_edge200 ]
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph199, %.prol.preheader
  %indvars.iv248.prol = phi i64 [ %indvars.iv.next249.prol, %.prol.preheader ], [ %58, %.lr.ph199 ]
  %65 = phi double [ %68, %.prol.preheader ], [ 0.000000e+00, %.lr.ph199 ]
  %prol.iter = phi i32 [ %prol.iter.next, %.prol.preheader ], [ 0, %.lr.ph199 ]
  %indvars.iv.next249.prol = add nsw i64 %indvars.iv248.prol, 1
  %66 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next249.prol, i64 %indvars.iv252
  %67 = load double, ptr %66, align 8, !tbaa !15
  %68 = fadd double %67, %65
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !21

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph199
  %.lcssa.unr = phi double [ poison, %.lr.ph199 ], [ %68, %.prol.preheader ]
  %indvars.iv248.unr = phi i64 [ %58, %.lr.ph199 ], [ %indvars.iv.next249.prol, %.prol.preheader ]
  %.unr = phi double [ 0.000000e+00, %.lr.ph199 ], [ %68, %.prol.preheader ]
  br i1 %63, label %._crit_edge200, label %.lr.ph199.new

.lr.ph199.new:                                    ; preds = %.prol.loopexit, %.lr.ph199.new
  %indvars.iv248 = phi i64 [ %indvars.iv.next249.3, %.lr.ph199.new ], [ %indvars.iv248.unr, %.prol.loopexit ]
  %69 = phi double [ %81, %.lr.ph199.new ], [ %.unr, %.prol.loopexit ]
  %indvars.iv.next249 = add nsw i64 %indvars.iv248, 1
  %70 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next249, i64 %indvars.iv252
  %71 = load double, ptr %70, align 8, !tbaa !15
  %72 = fadd double %71, %69
  %indvars.iv.next249.1 = add nsw i64 %indvars.iv248, 2
  %73 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next249.1, i64 %indvars.iv252
  %74 = load double, ptr %73, align 8, !tbaa !15
  %75 = fadd double %74, %72
  %indvars.iv.next249.2 = add nsw i64 %indvars.iv248, 3
  %76 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next249.2, i64 %indvars.iv252
  %77 = load double, ptr %76, align 8, !tbaa !15
  %78 = fadd double %77, %75
  %indvars.iv.next249.3 = add nsw i64 %indvars.iv248, 4
  %79 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next249.3, i64 %indvars.iv252
  %80 = load double, ptr %79, align 8, !tbaa !15
  %81 = fadd double %80, %78
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next249.3 to i32
  %exitcond251.not.3 = icmp eq i32 %59, %lftr.wideiv.3
  br i1 %exitcond251.not.3, label %._crit_edge200, label %.lr.ph199.new, !llvm.loop !23

._crit_edge200:                                   ; preds = %.lr.ph199.new, %.prol.loopexit
  %.lcssa = phi double [ %.lcssa.unr, %.prol.loopexit ], [ %81, %.lr.ph199.new ]
  %82 = fneg double %.lcssa
  %83 = getelementptr nusw [6 x double], ptr %invariant.gep, i64 %51, i64 %indvars.iv252
  store double %82, ptr %83, align 8, !tbaa !15
  %indvars.iv.next253 = add nuw nsw i64 %indvars.iv252, 1
  %exitcond256 = icmp eq i64 %indvars.iv.next253, %wide.trip.count255
  br i1 %exitcond256, label %..loopexit184_crit_edge, label %.lr.ph199, !llvm.loop !24

..loopexit184_crit_edge:                          ; preds = %.lr.ph205.split.us, %._crit_edge200, %middle.block303
  %.us-phi = phi double [ 0.000000e+00, %middle.block303 ], [ %.lcssa, %._crit_edge200 ], [ 0.000000e+00, %.lr.ph205.split.us ]
  store double %.us-phi, ptr %16, align 8, !tbaa !15
  br label %.loopexit184

.loopexit184:                                     ; preds = %.preheader183, %..loopexit184_crit_edge, %.loopexit
  %.0141 = phi i32 [ %.2143, %.loopexit ], [ %2, %..loopexit184_crit_edge ], [ %2, %.preheader183 ]
  %84 = add nsw i32 %1, 1
  call void @simp1(ptr noundef %0, i32 noundef %84, ptr noundef nonnull %12, i32 noundef %.0141, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %15)
  %85 = load double, ptr %15, align 8, !tbaa !15
  %86 = fcmp ugt double %85, 0x3EB0C6F7A0B5ED8D
  br i1 %86, label %.thread, label %87

87:                                               ; preds = %.loopexit184
  %88 = sext i32 %1 to i64
  %89 = getelementptr [6 x double], ptr %0, i64 %88
  %90 = getelementptr i8, ptr %89, i64 104
  %91 = load double, ptr %90, align 8, !tbaa !15
  %92 = fcmp olt double %91, 0xBEB0C6F7A0B5ED8D
  br i1 %92, label %93, label %94

93:                                               ; preds = %87
  store i32 -1, ptr %6, align 4, !tbaa !5
  br label %213

94:                                               ; preds = %87
  %95 = fcmp ugt double %91, 0x3EB0C6F7A0B5ED8D
  br i1 %95, label %.thread, label %96

96:                                               ; preds = %94
  %.not166.not = icmp slt i32 %17, %1
  br i1 %.not166.not, label %.preheader180, label %.loopexit181

.preheader180:                                    ; preds = %96
  %storemerge206 = add nsw i32 %17, 1
  store i32 %storemerge206, ptr %10, align 4, !tbaa !5
  br label %97

97:                                               ; preds = %.preheader180, %._crit_edge281
  %storemerge207 = phi i32 [ %storemerge206, %.preheader180 ], [ %storemerge, %._crit_edge281 ]
  %98 = sext i32 %storemerge207 to i64
  %99 = getelementptr inbounds i32, ptr %8, i64 %98
  %100 = load i32, ptr %99, align 4, !tbaa !5
  %101 = add nsw i32 %storemerge207, %2
  %102 = icmp eq i32 %100, %101
  br i1 %102, label %103, label %._crit_edge281

103:                                              ; preds = %97
  call void @simp1(ptr noundef %0, i32 noundef %storemerge207, ptr noundef nonnull %12, i32 noundef %.0141, i32 noundef 1, ptr noundef nonnull %11, ptr noundef nonnull %15)
  %104 = load double, ptr %15, align 8, !tbaa !15
  %105 = fcmp ogt double %104, 0x3EB0C6F7A0B5ED8D
  %.pre283 = load i32, ptr %10, align 4, !tbaa !5
  br i1 %105, label %.loopexit182, label %._crit_edge281

._crit_edge281:                                   ; preds = %103, %97
  %106 = phi i32 [ %storemerge207, %97 ], [ %.pre283, %103 ]
  %storemerge = add nsw i32 %106, 1
  store i32 %storemerge, ptr %10, align 4, !tbaa !5
  %.not167.not = icmp slt i32 %106, %1
  br i1 %.not167.not, label %97, label %.loopexit181, !llvm.loop !25

.loopexit181:                                     ; preds = %._crit_edge281, %96
  br i1 %.not162193, label %.loopexit179, label %.preheader178

.preheader178:                                    ; preds = %.loopexit181
  %invariant.gep208 = getelementptr i8, ptr %0, i64 96
  %.not169210 = icmp slt i32 %2, 0
  %107 = add i32 %2, 2
  %108 = sext i32 %3 to i64
  %109 = sext i32 %17 to i64
  %wide.trip.count260 = zext i32 %107 to i64
  %110 = add nsw i64 %wide.trip.count260, -1
  %min.iters.check318 = icmp ult i32 %107, 5
  %n.vec321 = and i64 %110, -4
  %ind.end322 = or disjoint i64 %n.vec321, 1
  %cmp.n329 = icmp eq i64 %110, %n.vec321
  br label %111

111:                                              ; preds = %.preheader178, %.loopexit177
  %indvars.iv262 = phi i64 [ %108, %.preheader178 ], [ %indvars.iv.next263, %.loopexit177 ]
  %indvars.iv.next263 = add nsw i64 %indvars.iv262, 1
  %112 = sub nsw i64 %indvars.iv.next263, %108
  %113 = getelementptr inbounds [5 x i32], ptr %14, i64 0, i64 %112
  %114 = load i32, ptr %113, align 4, !tbaa !5
  %115 = icmp ne i32 %114, 1
  %brmerge = or i1 %115, %.not169210
  br i1 %brmerge, label %.loopexit177, label %.lr.ph212.preheader

.lr.ph212.preheader:                              ; preds = %111
  br i1 %min.iters.check318, label %.lr.ph212.preheader347, label %vector.body324

vector.body324:                                   ; preds = %.lr.ph212.preheader, %vector.body324
  %index325 = phi i64 [ %index.next328, %vector.body324 ], [ 0, %.lr.ph212.preheader ]
  %offset.idx326 = or disjoint i64 %index325, 1
  %116 = getelementptr [6 x double], ptr %invariant.gep208, i64 %indvars.iv262, i64 %offset.idx326
  %117 = getelementptr i8, ptr %116, i64 16
  %wide.load = load <2 x double>, ptr %116, align 8, !tbaa !15
  %wide.load327 = load <2 x double>, ptr %117, align 8, !tbaa !15
  %118 = fneg <2 x double> %wide.load
  %119 = fneg <2 x double> %wide.load327
  store <2 x double> %118, ptr %116, align 8, !tbaa !15
  store <2 x double> %119, ptr %117, align 8, !tbaa !15
  %index.next328 = add nuw i64 %index325, 4
  %120 = icmp eq i64 %index.next328, %n.vec321
  br i1 %120, label %middle.block316, label %vector.body324, !llvm.loop !26

middle.block316:                                  ; preds = %vector.body324
  br i1 %cmp.n329, label %.loopexit177, label %.lr.ph212.preheader347

.lr.ph212.preheader347:                           ; preds = %middle.block316, %.lr.ph212.preheader
  %indvars.iv257.ph = phi i64 [ 1, %.lr.ph212.preheader ], [ %ind.end322, %middle.block316 ]
  br label %.lr.ph212

.lr.ph212:                                        ; preds = %.lr.ph212.preheader347, %.lr.ph212
  %indvars.iv257 = phi i64 [ %indvars.iv.next258, %.lr.ph212 ], [ %indvars.iv257.ph, %.lr.ph212.preheader347 ]
  %121 = getelementptr nusw [6 x double], ptr %invariant.gep208, i64 %indvars.iv262, i64 %indvars.iv257
  %122 = load double, ptr %121, align 8, !tbaa !15
  %123 = fneg double %122
  store double %123, ptr %121, align 8, !tbaa !15
  %indvars.iv.next258 = add nuw nsw i64 %indvars.iv257, 1
  %exitcond261 = icmp eq i64 %indvars.iv.next258, %wide.trip.count260
  br i1 %exitcond261, label %.loopexit177, label %.lr.ph212, !llvm.loop !27

.loopexit177:                                     ; preds = %.lr.ph212, %middle.block316, %111
  %.not168.not = icmp slt i64 %indvars.iv.next263, %109
  br i1 %.not168.not, label %111, label %.loopexit179, !llvm.loop !28

.thread:                                          ; preds = %.loopexit184, %94
  %124 = load i32, ptr %11, align 4, !tbaa !5
  call void @simp2(ptr noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef nonnull %13, i32 noundef %1, ptr noundef nonnull %10, i32 noundef %124, ptr noundef nonnull %16)
  %125 = load i32, ptr %10, align 4, !tbaa !5
  %126 = icmp eq i32 %125, 0
  br i1 %126, label %127, label %.loopexit182

127:                                              ; preds = %.thread
  store i32 -1, ptr %6, align 4, !tbaa !5
  br label %213

.loopexit182:                                     ; preds = %103, %.thread
  %128 = phi i32 [ %125, %.thread ], [ %.pre283, %103 ]
  %129 = load i32, ptr %11, align 4, !tbaa !5
  call void @simp3(ptr noundef %0, i32 noundef %84, i32 noundef %2, i32 noundef %128, i32 noundef %129)
  %130 = load i32, ptr %10, align 4, !tbaa !5
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds i32, ptr %8, i64 %131
  %133 = load i32, ptr %132, align 4, !tbaa !5
  %134 = add nsw i32 %3, %2
  %135 = add nsw i32 %134, %4
  %.not170.not = icmp sgt i32 %133, %135
  br i1 %.not170.not, label %.preheader, label %160

.preheader:                                       ; preds = %.loopexit182
  %.not172216 = icmp slt i32 %.0141, 1
  br i1 %.not172216, label %._crit_edge219, label %.lr.ph218

.lr.ph218:                                        ; preds = %.preheader
  %136 = load i32, ptr %11, align 4, !tbaa !5
  %137 = add nuw i32 %.0141, 1
  %wide.trip.count268 = zext i32 %137 to i64
  br label %138

138:                                              ; preds = %.lr.ph218, %142
  %indvars.iv265 = phi i64 [ 1, %.lr.ph218 ], [ %indvars.iv.next266, %142 ]
  %139 = getelementptr inbounds [6 x i32], ptr %12, i64 0, i64 %indvars.iv265
  %140 = load i32, ptr %139, align 4, !tbaa !5
  %141 = icmp eq i32 %140, %136
  br i1 %141, label %._crit_edge219.loopexit.split.loop.exit285, label %142

142:                                              ; preds = %138
  %indvars.iv.next266 = add nuw nsw i64 %indvars.iv265, 1
  %exitcond269.not = icmp eq i64 %indvars.iv.next266, %wide.trip.count268
  br i1 %exitcond269.not, label %._crit_edge219, label %138, !llvm.loop !29

._crit_edge219.loopexit.split.loop.exit285:       ; preds = %138
  %143 = trunc nuw nsw i64 %indvars.iv265 to i32
  br label %._crit_edge219

._crit_edge219:                                   ; preds = %142, %._crit_edge219.loopexit.split.loop.exit285, %.preheader
  %.3149.lcssa = phi i32 [ 1, %.preheader ], [ %143, %._crit_edge219.loopexit.split.loop.exit285 ], [ %137, %142 ]
  %144 = add nsw i32 %.0141, -1
  %.not173.not222 = icmp slt i32 %.3149.lcssa, %.0141
  br i1 %.not173.not222, label %.lr.ph225.preheader, label %.loopexit175

.lr.ph225.preheader:                              ; preds = %._crit_edge219
  %145 = zext i32 %.3149.lcssa to i64
  %146 = xor i32 %.3149.lcssa, -1
  %147 = add i32 %.0141, %146
  %148 = zext i32 %147 to i64
  %149 = add nuw nsw i64 %148, 1
  %min.iters.check332 = icmp ult i32 %147, 7
  br i1 %min.iters.check332, label %.lr.ph225.preheader345, label %vector.ph333

vector.ph333:                                     ; preds = %.lr.ph225.preheader
  %n.vec335 = and i64 %149, 8589934584
  %ind.end336 = add nuw nsw i64 %n.vec335, %145
  br label %vector.body338

vector.body338:                                   ; preds = %vector.body338, %vector.ph333
  %index339 = phi i64 [ 0, %vector.ph333 ], [ %index.next343, %vector.body338 ]
  %offset.idx340 = add i64 %index339, %145
  %150 = add nuw nsw i64 %offset.idx340, 1
  %151 = getelementptr inbounds [6 x i32], ptr %12, i64 0, i64 %150
  %152 = getelementptr inbounds i8, ptr %151, i64 16
  %wide.load341 = load <4 x i32>, ptr %151, align 4, !tbaa !5
  %wide.load342 = load <4 x i32>, ptr %152, align 4, !tbaa !5
  %153 = getelementptr inbounds [6 x i32], ptr %12, i64 0, i64 %offset.idx340
  %154 = getelementptr inbounds i8, ptr %153, i64 16
  store <4 x i32> %wide.load341, ptr %153, align 4, !tbaa !5
  store <4 x i32> %wide.load342, ptr %154, align 4, !tbaa !5
  %index.next343 = add nuw i64 %index339, 8
  %155 = icmp eq i64 %index.next343, %n.vec335
  br i1 %155, label %middle.block330, label %vector.body338, !llvm.loop !30

middle.block330:                                  ; preds = %vector.body338
  %cmp.n344 = icmp eq i64 %149, %n.vec335
  br i1 %cmp.n344, label %.loopexit175, label %.lr.ph225.preheader345

.lr.ph225.preheader345:                           ; preds = %middle.block330, %.lr.ph225.preheader
  %indvars.iv271.ph = phi i64 [ %145, %.lr.ph225.preheader ], [ %ind.end336, %middle.block330 ]
  br label %.lr.ph225

.lr.ph225:                                        ; preds = %.lr.ph225.preheader345, %.lr.ph225
  %indvars.iv271 = phi i64 [ %indvars.iv.next272, %.lr.ph225 ], [ %indvars.iv271.ph, %.lr.ph225.preheader345 ]
  %indvars.iv.next272 = add nuw nsw i64 %indvars.iv271, 1
  %156 = getelementptr inbounds [6 x i32], ptr %12, i64 0, i64 %indvars.iv.next272
  %157 = load i32, ptr %156, align 4, !tbaa !5
  %158 = getelementptr inbounds [6 x i32], ptr %12, i64 0, i64 %indvars.iv271
  store i32 %157, ptr %158, align 4, !tbaa !5
  %159 = trunc nuw i64 %indvars.iv.next272 to i32
  %.not173.not = icmp sgt i32 %.0141, %159
  br i1 %.not173.not, label %.lr.ph225, label %.loopexit175, !llvm.loop !31

160:                                              ; preds = %.loopexit182
  %.not171 = icmp sgt i32 %133, %134
  br i1 %.not171, label %161, label %.loopexit

161:                                              ; preds = %160
  %162 = sub i32 %133, %134
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds [5 x i32], ptr %14, i64 0, i64 %163
  %165 = load i32, ptr %164, align 4, !tbaa !5
  %166 = icmp eq i32 %165, 0
  br i1 %166, label %.loopexit, label %167

167:                                              ; preds = %161
  store i32 0, ptr %164, align 4, !tbaa !5
  br label %.loopexit175

.loopexit175:                                     ; preds = %.lr.ph225, %middle.block330, %._crit_edge219, %167
  %.1142 = phi i32 [ %.0141, %167 ], [ %144, %._crit_edge219 ], [ %144, %middle.block330 ], [ %144, %.lr.ph225 ]
  %168 = add nsw i32 %1, 2
  %169 = sext i32 %168 to i64
  %170 = load i32, ptr %11, align 4, !tbaa !5
  %171 = add nsw i32 %170, 1
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [6 x double], ptr %0, i64 %169, i64 %172
  %174 = load double, ptr %173, align 8, !tbaa !15
  %175 = fadd double %174, 1.000000e+00
  store double %175, ptr %173, align 8, !tbaa !15
  %.not174226 = icmp slt i32 %1, -1
  br i1 %.not174226, label %.loopexit, label %.lr.ph229.preheader

.lr.ph229.preheader:                              ; preds = %.loopexit175
  %176 = add i32 %1, 3
  %wide.trip.count277 = zext i32 %176 to i64
  %177 = add nsw i64 %wide.trip.count277, -1
  %178 = add nsw i64 %wide.trip.count277, -2
  %xtraiter352 = and i64 %177, 3
  %179 = icmp ult i64 %178, 3
  br i1 %179, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph229.preheader.new

.lr.ph229.preheader.new:                          ; preds = %.lr.ph229.preheader
  %unroll_iter = and i64 %177, -4
  br label %.lr.ph229

.lr.ph229:                                        ; preds = %.lr.ph229, %.lr.ph229.preheader.new
  %indvars.iv274 = phi i64 [ 1, %.lr.ph229.preheader.new ], [ %indvars.iv.next275.3, %.lr.ph229 ]
  %niter = phi i64 [ 0, %.lr.ph229.preheader.new ], [ %niter.next.3, %.lr.ph229 ]
  %180 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv274, i64 %172
  %181 = load double, ptr %180, align 8, !tbaa !15
  %182 = fneg double %181
  store double %182, ptr %180, align 8, !tbaa !15
  %indvars.iv.next275 = add nuw nsw i64 %indvars.iv274, 1
  %183 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next275, i64 %172
  %184 = load double, ptr %183, align 8, !tbaa !15
  %185 = fneg double %184
  store double %185, ptr %183, align 8, !tbaa !15
  %indvars.iv.next275.1 = add nuw nsw i64 %indvars.iv274, 2
  %186 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next275.1, i64 %172
  %187 = load double, ptr %186, align 8, !tbaa !15
  %188 = fneg double %187
  store double %188, ptr %186, align 8, !tbaa !15
  %indvars.iv.next275.2 = add nuw nsw i64 %indvars.iv274, 3
  %189 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv.next275.2, i64 %172
  %190 = load double, ptr %189, align 8, !tbaa !15
  %191 = fneg double %190
  store double %191, ptr %189, align 8, !tbaa !15
  %indvars.iv.next275.3 = add nuw nsw i64 %indvars.iv274, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph229, !llvm.loop !32

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph229, %.lr.ph229.preheader
  %indvars.iv274.unr = phi i64 [ 1, %.lr.ph229.preheader ], [ %indvars.iv.next275.3, %.lr.ph229 ]
  %lcmp.mod353.not = icmp eq i64 %xtraiter352, 0
  br i1 %lcmp.mod353.not, label %.loopexit.loopexit, label %.lr.ph229.epil

.lr.ph229.epil:                                   ; preds = %.loopexit.loopexit.unr-lcssa, %.lr.ph229.epil
  %indvars.iv274.epil = phi i64 [ %indvars.iv.next275.epil, %.lr.ph229.epil ], [ %indvars.iv274.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph229.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %192 = getelementptr inbounds [6 x double], ptr %0, i64 %indvars.iv274.epil, i64 %172
  %193 = load double, ptr %192, align 8, !tbaa !15
  %194 = fneg double %193
  store double %194, ptr %192, align 8, !tbaa !15
  %indvars.iv.next275.epil = add nuw nsw i64 %indvars.iv274.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter352
  br i1 %epil.iter.cmp.not, label %.loopexit.loopexit, label %.lr.ph229.epil, !llvm.loop !33

.loopexit.loopexit:                               ; preds = %.lr.ph229.epil, %.loopexit.loopexit.unr-lcssa
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.loopexit175, %161, %160, %211
  %195 = phi i32 [ %.pre280, %211 ], [ %133, %160 ], [ %133, %161 ], [ %133, %.loopexit175 ], [ %133, %.loopexit.loopexit ]
  %196 = phi i32 [ %.pre, %211 ], [ %130, %160 ], [ %130, %161 ], [ %130, %.loopexit175 ], [ %130, %.loopexit.loopexit ]
  %.2143 = phi i32 [ %.3144, %211 ], [ %.0141, %160 ], [ %.0141, %161 ], [ %.1142, %.loopexit175 ], [ %.1142, %.loopexit.loopexit ]
  %.not165 = phi i1 [ true, %211 ], [ false, %160 ], [ false, %161 ], [ false, %.loopexit175 ], [ false, %.loopexit.loopexit ]
  %197 = load i32, ptr %11, align 4, !tbaa !5
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %7, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !5
  %201 = sext i32 %196 to i64
  %202 = getelementptr inbounds i32, ptr %8, i64 %201
  store i32 %195, ptr %199, align 4, !tbaa !5
  store i32 %200, ptr %202, align 4, !tbaa !5
  br i1 %.not165, label %.loopexit179, label %.loopexit184

.loopexit179:                                     ; preds = %.loopexit177, %.loopexit, %.loopexit181, %._crit_edge
  %.3144 = phi i32 [ %2, %._crit_edge ], [ %.0141, %.loopexit181 ], [ %.2143, %.loopexit ], [ %.0141, %.loopexit177 ]
  call void @simp1(ptr noundef %0, i32 noundef 0, ptr noundef nonnull %12, i32 noundef %.3144, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %15)
  %203 = load double, ptr %15, align 8, !tbaa !15
  %204 = fcmp ugt double %203, 0x3EB0C6F7A0B5ED8D
  br i1 %204, label %206, label %205

205:                                              ; preds = %.loopexit179
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %213

206:                                              ; preds = %.loopexit179
  %207 = load i32, ptr %11, align 4, !tbaa !5
  call void @simp2(ptr noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef nonnull %13, i32 noundef %1, ptr noundef nonnull %10, i32 noundef %207, ptr noundef nonnull %16)
  %208 = load i32, ptr %10, align 4, !tbaa !5
  %209 = icmp eq i32 %208, 0
  br i1 %209, label %210, label %211

210:                                              ; preds = %206
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %213

211:                                              ; preds = %206
  %212 = load i32, ptr %11, align 4, !tbaa !5
  call void @simp3(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %208, i32 noundef %212)
  %.pre = load i32, ptr %10, align 4, !tbaa !5
  %.phi.trans.insert = sext i32 %.pre to i64
  %.phi.trans.insert279 = getelementptr inbounds i32, ptr %8, i64 %.phi.trans.insert
  %.pre280 = load i32, ptr %.phi.trans.insert279, align 4, !tbaa !5
  br label %.loopexit

213:                                              ; preds = %210, %205, %127, %93, %40, %26
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #3
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #3
  ret void
}

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @simp1(ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @simp2(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @simp3(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10, !11, !12}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = distinct !{!13, !10, !12, !11}
!14 = distinct !{!14, !10, !11, !12}
!15 = !{!16, !16, i64 0}
!16 = !{!"double", !7, i64 0}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10, !12, !11}
!19 = distinct !{!19, !10, !11, !12}
!20 = distinct !{!20, !10, !12, !11}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.unroll.disable"}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !10, !11, !12}
!27 = distinct !{!27, !10, !12, !11}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !10}
!30 = distinct !{!30, !10, !11, !12}
!31 = distinct !{!31, !10, !12, !11}
!32 = distinct !{!32, !10}
!33 = distinct !{!33, !22}


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